chiark / gitweb /
before special kerning thing
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sat, 6 Jun 2009 20:07:46 +0000 (21:07 +0100)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sat, 6 Jun 2009 20:07:46 +0000 (21:07 +0100)
pctb/charset-15.txt
pctb/ocr.c
pctb/ocr.h
pctb/pages.c
pctb/structure.c

index 99aeff1..2a59415 100644 (file)
@@ -156,6 +156,29 @@ ff8
 ff8
 
 Lower
+Iron
+ff8
+0
+0
+fe0
+40
+20
+20
+0
+7c0
+820
+820
+820
+7c0
+0
+0
+fe0
+40
+20
+20
+fc0
+
+Lower
 It
 ff8
 0
@@ -208,6 +231,14 @@ ff8
 ff8
 
 Lower
+P
+ff8
+88
+88
+88
+70
+
+Lower
 R
 ff8
 88
@@ -554,6 +585,29 @@ I
 ff8
 
 Upper
+Iron
+ff8
+0
+0
+fe0
+40
+20
+20
+0
+7c0
+820
+820
+820
+7c0
+0
+0
+fe0
+40
+20
+20
+fc0
+
+Upper
 It
 ff8
 0
index f5826df..266ede2 100644 (file)
@@ -8,7 +8,7 @@ typedef struct {
   struct DatabaseNode *then;
 } DatabaseLink;
 
-#define MAXGLYPHCHRS 3
+#define MAXGLYPHCHRS 7
 
 typedef struct DatabaseNode {
   char s[MAXGLYPHCHRS+1]; /* null-terminated; "" means no match here */
index 93b158b..e8b5b1a 100644 (file)
@@ -57,7 +57,8 @@ OcrResultGlyph *ocr(OcrReader *rd, OcrCellType, int w, Pixcol cols[]);
 #define DEBUG_FLAG_LIST                                \
    DF(ocr)                                     \
    DF(rect)                                    \
-   DF(callout)
+   DF(callout)                                 \
+   DF(pages)
 
 enum {
 #define DF(f) dbg__shift_##f,
index de96731..2f4f669 100644 (file)
@@ -18,6 +18,8 @@ static struct timeval tv_startup;
 static unsigned wwidth, wheight;
 static int wxpos, wypos;
 
+DEBUG_DEFINE_DEBUGF(pages)
+
 static KeyCode keycode(KeySym sym) {
   return XKeysymToKeycode(disp,sym);
 }
@@ -42,12 +44,12 @@ static double timestamp(void) {
   r= gettimeofday(&tv,0);  eassert(!r);
   double t= (tv.tv_sec - tv_startup.tv_sec) +
             (tv.tv_usec - tv_startup.tv_usec) * 1e-6;
-  fprintf(stderr,"%f\n",t);
+  debugf("PAGING %f\n",t);
   return t;
 }
 static void delay(double need_sleep) {
   int r;
-  fprintf(stderr,"PAGING     delay %f\n",need_sleep);
+  debugf("PAGING     delay %f\n",need_sleep);
   r= usleep(need_sleep * 1e6);  eassert(!r);
 }
 
@@ -66,12 +68,12 @@ static void send_pgup_many(void) {
   int i;
   for (i=0; i<25; i++)
     send_key(XK_Prior);
-  fprintf(stderr,"PAGING   PageUp x %d\n",i);
+  debugf("PAGING   PageUp x %d\n",i);
   sync_after_input();
 }
 static void send_pgdown(void) {
   send_key(XK_Next);
-  fprintf(stderr,"PAGING   PageDown\n");
+  debugf("PAGING   PageDown\n");
   sync_after_input();
 }
 
@@ -87,13 +89,13 @@ static void snapshot(Snapshot **output) {
   
   free_snapshot(output);
 
-  fprintf(stderr,"PAGING   snapshot\n");
+  debugf("PAGING   snapshot\n");
 
   timestamp();
   *output= XGetImage(disp,id, 0,0, wwidth,wheight, AllPlanes, ZPixmap);
   timestamp();
   
-  fprintf(stderr,"PAGING   snapshot done.\n");
+  debugf("PAGING   snapshot done.\n");
 }
 
 static int identical(const Snapshot *a, const Snapshot *b) {
@@ -112,7 +114,7 @@ static void wait_for_stability(Snapshot **output,
   /* waits longer if we're going to return an image identical to previously
    * if previously==0, all images are considered identical to it */
 
-  fprintf(stderr,"PAGING  wait_for_stability"
+  debugf("PAGING  wait_for_stability"
          "  last_input=%f previously=%p\n",
          last_input, previously);
 
@@ -125,16 +127,16 @@ static void wait_for_stability(Snapshot **output,
 
     if (!with_keypress &&
        !(previously && identical(*output,previously))) {
-      fprintf(stderr,"PAGING  wait_for_stability  simple\n");
+      debugf("PAGING  wait_for_stability  simple\n");
       break;
     }
 
     if (last && identical(*output,last)) {
-      fprintf(stderr,"PAGING  wait_for_stability  stabilised\n");
+      debugf("PAGING  wait_for_stability  stabilised\n");
       break;
     }
     
-    fprintf(stderr,"PAGING  wait_for_stability  retry\n");
+    debugf("PAGING  wait_for_stability  retry\n");
 
     free_snapshot(&last); last=*output; *output=0;
 
@@ -145,7 +147,7 @@ static void wait_for_stability(Snapshot **output,
   }
 
   free_snapshot(&last);
-  fprintf(stderr,"PAGING  wait_for_stability done.\n");
+  debugf("PAGING  wait_for_stability done.\n");
 }
 
 static void raise_and_get_details(void) {
@@ -154,7 +156,7 @@ static void raise_and_get_details(void) {
   unsigned bd,depth;
   Window dummy;
   
-  fprintf(stderr,"PAGING raise_and_get_details\n");
+  debugf("PAGING raise_and_get_details\n");
 
   r= XTestQueryExtension(disp, &evbase,&errbase,&majver,&minver);
   eassert(r==True);
@@ -175,7 +177,7 @@ static void raise_and_get_details(void) {
 static void set_focus(void) {
   int screen= XScreenNumberOfScreen(attr.screen);
 
-  fprintf(stderr,"PAGING set_focus\n");
+  debugf("PAGING set_focus\n");
 
   XTestFakeMotionEvent(disp,screen, wxpos,wypos, 0);
 
@@ -183,7 +185,7 @@ static void set_focus(void) {
   XTestFakeButtonEvent(disp,1,0, 50);
 
   sync_after_input();
-  fprintf(stderr,"PAGING raise_and_set_focus done.\n");
+  debugf("PAGING raise_and_set_focus done.\n");
 }
 
 #define SAMPLEMASK 0xfful
@@ -261,13 +263,13 @@ void take_screenshots(void) {
 
   /* now to actually page down */
   for (;;) {
-    fprintf(stderr,"paging page %d\n",npages);
+    debugf("paging page %d\n",npages);
 
     eassert(npages < MAX_PAGES);
     page_images[npages]= convert_page(current);
     free_snapshot(&last); last=current; current=0;
 
-    fprintf(stderr,"PAGING page %d converted\n",npages);
+    debugf("PAGING page %d converted\n",npages);
 
     wait_for_stability(&current,last, 0);
     if (npages &&  /* first pagedown doesn't do much */
@@ -279,7 +281,7 @@ void take_screenshots(void) {
     send_pgdown();
     npages++;
   }
-  fprintf(stderr,"PAGING all done.\n");
+  debugf("PAGING all done.\n");
 }    
 
 void take_one_screenshot(void) {
index f9f1e7f..bbc7b8b 100644 (file)
@@ -229,13 +229,24 @@ CanonImage *file_read_image_ppm(FILE *f) {
 }
 
 void read_screenshots(void) {
-//  int c;
-//  while ((c= fgetc(screenshots_file) != EOF)) {
-//    ungetc(c, screenshots_file);
-
-//    eassert(npages < MAX_PAGES);
+  struct stat stab;
+  int r;
+  
+  r= fstat(fileno(screenshots_file), &stab);  eassert(!r);
+  
+  for (;;) {
+    if (S_ISREG(stab.st_mode)) {
+      long pos= ftell(screenshots_file);
+      if (pos == stab.st_size) break;
+    } else {
+      int c= fgetc(screenshots_file);
+      if (c==EOF) break;
+      ungetc(c, screenshots_file);
+    }
+    eassert(npages < MAX_PAGES);
     page_images[npages++]= file_read_image_ppm(screenshots_file);
-//  }
+  }
+  eassert(!ferror(screenshots_file));
 }
 
 static void find_commodity(int offset, Rect *rr) {
@@ -243,13 +254,14 @@ static void find_commodity(int offset, Rect *rr) {
   rr->tl.y= commbasey - offset*comminty;
   rr->br.y= rr->tl.y + comminty-2;
   if (rr->tl.y < mainr.tl.y || rr->br.y > mainr.br.y) { rr->tl.x=-1; return; }
+  
+  rr->tl.x= mainr.tl.x;
+  rr->br.x= mainr.br.x;
+
   if (rr->tl.y > mainr.tl.y)
     require_rectangle(rr->tl.x,rr->tl.y-1, rr->br.x,rr->tl.y-1, "+");
   if (rr->br.y < mainr.tl.y)
     require_rectangle(rr->tl.x,rr->br.y+1, rr->br.x,rr->br.y+1, "+");
-  
-  rr->tl.x= mainr.tl.x;
-  rr->br.x= mainr.br.x;
 }
 
 static void find_table_entry(Rect commod, int colno, Rect *cellr) {