Revision: 59e33bd81b66 Author: John Boyer <john.boyer@xxxxxxxxxxxxxxxxx> Date: Mon Feb 27 19:37:42 2012 Log: just a few more bugs in formatFor utd http://code.google.com/p/liblouisutdml/source/detail?r=59e33bd81b66 Modified: /lbu_files/utd.sem /liblouisutdml/transcriber.c /liblouisutdml/utd2brf.c ======================================= --- /lbu_files/utd.sem Sat Jul 3 09:32:58 2010 +++ /lbu_files/utd.sem Mon Feb 27 19:37:42 2012 @@ -5,7 +5,7 @@ utdmeta meta,name,utd utdbrl brl utdbrlonly span,class,brlonly -utdnewpage newpage,number +utdnewpage newpage,brlnumber utdnewline newline,xy utdgraphic xxx newentries no ======================================= --- /liblouisutdml/transcriber.c Sat Feb 25 10:46:20 2012 +++ /liblouisutdml/transcriber.c Mon Feb 27 19:37:42 2012 @@ -344,7 +344,7 @@static int first0Bit[MAXBYTES] = { 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0XFE };
int -utf8_string_to_wc (const unsigned char *instr, int *inSize, widechar * +utf8_string_to_wc (const unsigned char *inStr, int *inSize, widechar * outstr, int *outSize) { int in = 0; @@ -357,7 +357,7 @@ int k; while (in < *inSize) { - ch = instr[in++] & 0xff; + ch = inStr[in++] & 0xff; if (ch < 128 || ud->input_encoding == ascii8) { outstr[out++] = (widechar) ch; @@ -379,7 +379,7 @@ { if (in >= *inSize) break; - utf32 = (utf32 << 6) + (instr[in++] & 0x3f); + utf32 = (utf32 << 6) + (inStr[in++] & 0x3f); } if (CHARSIZE == 2 && utf32 > 0xffff) utf32 = 0xffff; @@ -397,7 +397,7 @@ } int-wc_string_to_utf8 (const widechar * instr, int *inSize, unsigned char *outstr, +wc_string_to_utf8 (const widechar * inStr, int *inSize, unsigned char *outstr,
int *outSize) { int in = 0; @@ -410,7 +410,7 @@ int k; while (in < *inSize) { - utf32 = instr[in++]; + utf32 = inStr[in++]; if (utf32 < 128) { utf8Str[0] = utf32; @@ -3863,11 +3863,14 @@ } ShortBrlOnlyStrings; static int -setOrigTextChar (ShortBrlOnlyStrings * sbstr, unsigned char *instr, int +setOrigTextChar (ShortBrlOnlyStrings * sbstr, unsigned char *inStr, int length) { - sbstr->origTextLength = sizeof (sbstr->origText) - 4;- utf8_string_to_wc (instr, &length, sbstr->origText, &sbstr->origTextLength);
+ for (; length >= 0 && inStr[length - 1] <= 32; length--); + if (length <= 0) + return 0; + sbstr->origTextLength = MAXNAMELEN - 4;+ utf8_string_to_wc (inStr, &length, sbstr->origText, &sbstr->origTextLength);
sbstr->transTextLength = 0; sbstr->prefixedOrigTextLength = 0; sbstr->prefixedTransTextLength = 0; @@ -3875,13 +3878,14 @@ } static int -setOrigTextWidechar (ShortBrlOnlyStrings * sbstr, widechar * instr, +setOrigTextWidechar (ShortBrlOnlyStrings * sbstr, widechar * inStr, int length) { + if (length <= 0) + return 0; if (length >= MAXNAMELEN) length = MAXNAMELEN - 4; - sbstr->origTextLength = length; - memcpy (sbstr->origText, instr, length * CHARSIZE); + memcpy (sbstr->origText, inStr, length * CHARSIZE); sbstr->origTextLength = length; sbstr->transTextLength = 0; sbstr->prefixedOrigTextLength = 0; @@ -3893,18 +3897,16 @@ translateShortBrlOnly (ShortBrlOnlyStrings * sbstr) { int translationLength = sbstr->origTextLength; - int translatedLength = sizeof (sbstr->transText); - int k; + int translatedLength = MAXNAMELEN - 4; if (!lou_translateString (currentTable, sbstr->origText, &translationLength, sbstr->transText, &translatedLength, NULL, NULL, dotsIO)) return 0; + for (; sbstr->transText[translatedLength - 1] == SPACE; + translatedLength--); sbstr->transText[translatedLength] = 0; sbstr->transTextLength = translatedLength; - for (k = 0; k < translatedLength; k++) - if (sbstr->transText[k] == 160) - sbstr->transText[k] = ' '; return 1; } @@ -3931,9 +3933,9 @@ sbstr->prefixedTransText[k] = dots; for (; k < MAXNAMELEN; k++) { + sbstr->prefixedTransText[k] = sbstr->transText[kk++]; if (kk > sbstr->transTextLength) break; - sbstr->prefixedTransText[k] = sbstr->transText[kk++]; } sbstr->prefixedTransTextLength = k; kk = 0; @@ -3941,9 +3943,9 @@ sbstr->prefixedOrigText[k] = character; for (; k < MAXNAMELEN; k++) { + sbstr->prefixedOrigText[k] = sbstr->origText[kk++]; if (kk > sbstr->origTextLength) break; - sbstr->prefixedOrigText[k] = sbstr->origText[kk++]; } sbstr->prefixedOrigTextLength = k; } @@ -3988,7 +3990,7 @@ PageStatus curPageStatus = checkPageStatus (); if (!ud->print_pages || !*printPageNumber) return 1; - strcpy (setup, " "); + strcpy (setup, "-"); if (!(printPageNumber[0] >= '0' && printPageNumber[0] <= '9')) strcat (setup, ud->letsign); strcat (setup, printPageNumber); @@ -4501,8 +4503,14 @@ if (curPageStatus == bottomOfPage) { if (ud->print_page_number[0] != '_') - xmlSetProp (newpageNode, (xmlChar *) "printnumber", (xmlChar *) - ud->print_page_number); + { + unsigned char holder[MAXNUMLEN]; + int k; + for (k = 0; ud->print_page_number[k]; k++) + holder[k] = ud->print_page_number[k]; + holder[k] = 0; + xmlSetProp (newpageNode, (xmlChar *) "printnumber", holder); + } ud->braille_page_number++; ud->vert_line_pos = ud->page_top; makeNewpage (brlNode); ======================================= --- /liblouisutdml/utd2brf.c Fri Feb 17 07:19:45 2012 +++ /liblouisutdml/utd2brf.c Mon Feb 27 19:37:42 2012 @@ -39,15 +39,20 @@ static int finishBrlNode (); static int finishDocument (); static int doUtdbrlonly (xmlNode * node, int action); -static int doUtdnewpage (xmlNode * node); +static int +doUtdnewpage (xmlNode * node); static int doUtdnewline (xmlNode * node); static int doUtdgraphic (xmlNode * node); +static int firstPage; +static int firstLineOnPage; int utd2brf (xmlNode * node) { ud->top = -1; ud->style_top = -1; + firstPage = 1; + firstLineOnPage = 1; beginDocument (); findBrlNodes (node); finishDocument (); @@ -105,11 +110,11 @@ static char *blanks = " "; static int -writeCharacters (const char *text, int length) +insertCharacters (const char *text, int length) { int k; for (k = 0; k < length; k++) - ud->outbuf1[ud->outbuf1_len_so_far++] = text[k]; + ud->outbuf1[ud->outbuf1_len_so_far++] = text[k]; return 1; } @@ -176,25 +181,25 @@ child = child->next; } if (action != 0) - { pop_sem_stack (); - return 1; - } return 1; } -static int skipFirstNew = 0; -static int newpagePending = 0; static int lastLinepos; static int doUtdnewpage (xmlNode * node) { - lastLinepos = 0; - if (skipFirstNew) - return 1; - newpagePending = 1; + lastLinepos = ud->page_top; + firstLineOnPage = 1; + if (firstPage) + { + firstPage = 0; return 1; + } + insertCharacters (ud->lineEnd, strlen (ud->lineEnd)); + insertCharacters (ud->pageEnd, strlen (ud->pageEnd)); + return 1; } static int @@ -204,20 +209,15 @@ int k; int leadingBlanks; int linepos; - if (skipFirstNew) - skipFirstNew = newpagePending = 0; - else - writeCharacters (ud->lineEnd, strlen (ud->lineEnd)); - if (newpagePending) - { - writeCharacters (ud->pageEnd, strlen (ud->pageEnd)); - newpagePending = 0; - } + if (!firstLineOnPage) + insertCharacters (ud->lineEnd, strlen (ud->lineEnd)); xy = (char *) xmlGetProp (node, (xmlChar *) "xy"); for (k = 0; xy[k] != ','; k++); leadingBlanks = (atoi (xy) - ud->left_margin) / ud->cell_width; linepos = (atoi (&xy[k + 1]) - ud->page_top) / ud->normal_line; - writeCharacters (blanks, leadingBlanks); + insertCharacters (blanks, leadingBlanks); + if (firstLineOnPage) + firstLineOnPage = 0; return 1; } For a description of the software, to download it and links to project pages go to http://www.abilitiessoft.com