[liblouis-liblouisxml] [liblouisutdml] push by john.bo...@xxxxxxxxxxxxxxxxx - large bug fix for page formatting in utdml on 2012-02-24 13:28 GMT

  • From: liblouisutdml@xxxxxxxxxxxxxx
  • To: liblouis-liblouisxml@xxxxxxxxxxxxx
  • Date: Fri, 24 Feb 2012 13:28:34 +0000

Revision: 51ebf94b5264
Author:   John Boyer <john.boyer@xxxxxxxxxxxxxxxxx>
Date:     Fri Feb 24 05:27:33 2012
Log:      large bug fix for page formatting in utdml
http://code.google.com/p/liblouisutdml/source/detail?r=51ebf94b5264

Modified:
 /liblouisutdml/transcriber.c

=======================================
--- /liblouisutdml/transcriber.c        Tue Feb 21 19:56:39 2012
+++ /liblouisutdml/transcriber.c        Fri Feb 24 05:27:33 2012
@@ -1469,7 +1469,7 @@
                }
            }
        }
-      //if (lastLineInStyle && !style->newline_after)
+      if (!(lastLineInStyle && !style->newline_after))
        {
          if (!insertCharacters (ud->lineEnd, strlen (ud->lineEnd)))
            return 0;
@@ -3275,7 +3275,6 @@
 static char *currentTable;
 static char currentTableName[MAXNAMELEN];
 static int firstPage;
-static unsigned char pageNumberSpaces[4];
 static int postponedStart;
 static int *indices;
 static int *backIndices;
@@ -3313,10 +3312,6 @@
   backBuf = NULL;
   backLength = 0;
   lineWidth = ud->normal_line;
-  pageNumberSpaces[0] = 0xa0;
-  pageNumberSpaces[1] = 0xa0;
-  pageNumberSpaces[2] = 0xa0;
-  pageNumberSpaces[3] = 0;
   return 1;
 }

@@ -3925,28 +3920,46 @@
   xmlAddPrevSibling (node, xmlNewText (buf));
   return 1;
 }
+
+static int
+addSpaces (ShortBrlOnlyStrings *sbstr, int howMany)
+{
+  int k;
+  int kk = 0;
+  for (k = 0; k < howMany && k < MAXNAMELEN; k++)
+    sbstr->prefixedTransText[k] = SPACE;
+  for (; k < MAXNAMELEN; k++)
+    {
+      if (kk > sbstr->transTextLength)
+       break;
+      sbstr->prefixedTransText[k] = sbstr->transText[kk++];
+    }
+  memcpy (sbstr->transText, sbstr->prefixedTransText, k * CHARSIZE);
+  sbstr->transTextLength = k;
+  return 1;
+}

 static int
 addPrefixes (ShortBrlOnlyStrings * sbstr, widechar dots, widechar
-            character, int prefixHowMany)
+            character, int howMany)
 {
   int k;
   int kk = 0;
- for (k = 0; k < prefixHowMany && k < sizeof (sbstr->prefixedTransText); k++)
+  for (k = 0; k < howMany && k < MAXNAMELEN; k++)
     sbstr->prefixedTransText[k] = dots;
-  for (; k < sizeof (sbstr->prefixedTransText); k++)
-    {
-      if (k >= sbstr->transTextLength)
+  for (; k < MAXNAMELEN; k++)
+    {
+      if (kk > sbstr->transTextLength)
        break;
       sbstr->prefixedTransText[k] = sbstr->transText[kk++];
     }
   sbstr->prefixedTransTextLength = k;
   kk = 0;
- for (k = 0; k < prefixHowMany && k < sizeof (sbstr->prefixedOrigText); k++)
+  for (k = 0; k < howMany && k < MAXNAMELEN; k++)
     sbstr->prefixedOrigText[k] = character;
-  for (; k < sizeof (sbstr->prefixedOrigText); k++)
-    {
-      if (k >= sbstr->origTextLength)
+  for (; k < MAXNAMELEN; k++)
+    {
+      if (kk > sbstr->origTextLength)
        break;
       sbstr->prefixedOrigText[k] = sbstr->origText[kk++];
     }
@@ -3956,10 +3969,14 @@
 static int utd_fillPage ();
 static int makeNewline (xmlNode * parent, int start);
 static ShortBrlOnlyStrings pageNumber;
+
 static int
 insertPageNumber (int howMany)
 {
+  if (howMany < 0)
+    howMany = 1;
   addPrefixes (&pageNumber, howMany, SPACE, ' ');
+  makeBrlOnlyNode ();
   if (!addBrlOnly (brlOnlyNode, &pageNumber))
     return 0;
   return 1;
@@ -3968,7 +3985,7 @@
 static int utd_fillPage ();

 static int
-makePageSeparator (xmlChar * printPageNumber, int length)
+utd_makePageSeparator (xmlChar * printPageNumber, int length)
 {
   ShortBrlOnlyStrings sb;
   int k;
@@ -3983,6 +4000,8 @@
   length = strlen (setup);
   for (k = 0; k < length; k++)
     ud->print_page_number[k] = setup[k];
+  ud->print_page_number[k] = 0;
+  memset (&sb, 0, sizeof (sb));
   setOrigTextChar (&sb, setup, length);
   translateShortBrlOnly (&sb);
   if (curPageStatus == topOfPage)
@@ -3997,6 +4016,7 @@
   makeBrlOnlyNode ();
   makeNewline (brlOnlyNode, 0);
   addBrlOnly (brlOnlyNode, &sb);
+  makeNewline (brlOnlyNode, 0);
   return 1;
 }

@@ -4015,33 +4035,36 @@
       return 1;
     default:
     case normal:
-      sprintf (brlPageString, "%s%d", pageNumberSpaces,
+      sprintf (brlPageString, "%d",
               ud->braille_page_number);
       break;
     case p:
-      sprintf (brlPageString, "%sp%d", pageNumberSpaces,
+      sprintf (brlPageString, "p%d",
               ud->braille_page_number);
       break;
     case roman:
-      strcpy (brlPageString, pageNumberSpaces);
-      strcat (brlPageString, ud->letsign);
+      strcpy (brlPageString, ud->letsign);
       strcat (brlPageString, makeRomanNumber (ud->braille_page_number));
       break;
     }
   setOrigTextChar (&pageNumber, brlPageString, strlen (brlPageString));
   translateShortBrlOnly (&pageNumber);
+  addSpaces (&pageNumber, 3);
   return 1;
 }

-static void
+static int
 utd_getPrintPageString ()
 {
-  char printPageString[40];
-  strcpy (printPageString, pageNumberSpaces);
-  strcat (printPageString, ud->print_page_number);
-  setOrigTextChar (&pageNumber, printPageString, strlen (printPageString));
+  widechar printPageString[40];
+  int k;
+  for (k = 0; ud->print_page_number[k]; k++)
+  printPageString[k] = ud->print_page_number[k];
+  setOrigTextWidechar (&pageNumber, printPageString, k);
   translateShortBrlOnly (&pageNumber);
+  addSpaces (&pageNumber, 3);
   ud->print_page_number[0]++;
+  return 1;
 }

 static int
@@ -4285,7 +4308,7 @@
       if (!ud->print_pages)
        return;
       fineFormat ();
-      makePageSeparator (node->content, length);
+      utd_makePageSeparator (node->content, length);
       return;
     default:
       break;
@@ -4441,9 +4464,10 @@
          ud->vert_line_pos += ud->normal_line;
          setNewlineProp (0);
        }
-      if (cellsOnLine > 0 && pageNumberLength > 0)
-       {
-         cellsToWrite = ud->cells_per_line - pageNumberLength - cellsOnLine;
+      if (cellsOnLine > 0 && pageNumber.transTextLength > 0)
+       {
+         cellsToWrite = ud->cells_per_line - pageNumber.transTextLength
+         - cellsOnLine;
          if (!insertPageNumber (cellsToWrite))
            return 0;
        }
@@ -4453,9 +4477,10 @@
            centerHeadFoot (ud->running_head, ud->running_head_length);
          else
            {
-             if (pageNumberLength)
-               {
-                 cellsToWrite = ud->cells_per_line - pageNumberLength;
+             if (pageNumber.transTextLength)
+               {
+                 cellsToWrite = ud->cells_per_line -
+                 pageNumber.transTextLength;
                  if (!insertPageNumber (cellsToWrite))
                    return 0;
                }
@@ -4467,11 +4492,13 @@
            centerHeadFoot (ud->footer, ud->footer_length);
          else
            {
-             if (pageNumberLength)
-               {
-                 horizLinePos = (ud->cells_per_line -
-                                 pageNumberLength) * ud->cell_width;
-                 if (!insertPageNumber (horizLinePos))
+             if (pageNumber.transTextLength)
+               {
+               int k = ud->cells_per_line -
+               pageNumber.transTextLength;
+                 horizLinePos = k *
+                                 ud->cell_width;
+                 if (!insertPageNumber (k))
                    return 0;
                }
            }
For a description of the software, to download it and links to
project pages go to http://www.abilitiessoft.com

Other related posts:

  • » [liblouis-liblouisxml] [liblouisutdml] push by john.bo...@xxxxxxxxxxxxxxxxx - large bug fix for page formatting in utdml on 2012-02-24 13:28 GMT - liblouisutdml