Lines Matching refs:dy

204                 dx=box1->x1-x0+1, dy=box1->y1-y0+1;  in nearest_frame_vector()  local
215 aa[2]=d=2*sq(128)+sq((rx-(x0+x1)/2)*128/dx)+sq((ry-(y0+y1)/2)*128/dy); in nearest_frame_vector()
228 d=sq((x-rx)*128/dx)+sq((y-ry)*128/dy); in nearest_frame_vector()
241 int r,y,x,x0,x1,y0,y1,dx,dy,m1,m2,m3, in testumlaut() local
247 y0=box1->y0; y1=box1->y1; dy=y1-y0+1; in testumlaut()
250 if( dy < 5 || 4*y0 > 3*m2+m3 ) return 0; // no low chars: .,-= in testumlaut()
461 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_eE() local
467 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 (smallest seen is 5x6) in ocr0_eE()
472 if( loop(box1->p,x0,y0+dy/2,x1-x0,cs,0,RI)>dx/3 ) Break; // rough test in ocr0_eE()
473 if( loop(box1->p,x0+dx/2,y0,y1-y0,cs,0,DO)>dy/3 ) Break; in ocr0_eE()
474 if( loop(box1->p,x0+dx/2,y1,y1-y0,cs,0,UP)>dy/3 ) Break; in ocr0_eE()
475 if( num_cross(x0,x1,y0+dy/4 ,y0+dy/4 ,box1->p,cs) > 2 in ocr0_eE()
476 && num_cross(x0,x1,y0+dy/4+1,y0+dy/4+1,box1->p,cs) > 2 ) Break; // gt in ocr0_eE()
481 i=loop(box1->p,x0,y0+dy/2,x1-x0,cs,0,RI); if( i>dx/2 ) Break; in ocr0_eE()
495 for(y=1;y<dy/2;y++) if( num_cross(x0,x1,y0+y,y0+y,box1->p,cs) == 2 ) break; in ocr0_eE()
496 if( y==dy/2 ) Break; // v0.2.5 ~ bad_t in ocr0_eE()
499 if( dx>4 && dy>5 && (i<dx/4-1 || i==0) ) Break; // ~g but 4x6-e in ocr0_eE()
501 for(x=0,y=i=y0+dy/3;i<y1-dy/6;i++){ in ocr0_eE()
507 for(i1=dx,i=y0+dy/3;i<y1-dy/6;i++){ in ocr0_eE()
512 for(i2=dx,y=i=y0+dy/3;i<y1-dy/6;i++){ in ocr0_eE()
538 if (dy>11 && bad_e<50) in ocr0_eE()
547 if( get_bw(i,i,y0+dy/4,y,box1->p,cs,1) == 1 ) j++; in ocr0_eE()
555 for(x=0,y=i=y0+dy/4;i<y1-dy/4;i++){ in ocr0_eE()
559 if (y>y0+dy/4 && y<y1-dy/4 && x>dx/2) Break; // s in ocr0_eE()
562 if( num_cross(x0+dx/2,x1 ,y1-dy/4,y1 ,box1->p,cs) == 0 in ocr0_eE()
563 && num_cross(x0+dx/2,x1-1,y1-dy/4,y1 ,box1->p,cs) == 0 in ocr0_eE()
564 && num_cross(x0+dx/2,x1 ,y1-dy/4,y1-1,box1->p,cs) == 0 ) { in ocr0_eE()
570 && loop(box1->p,x1,y1-dy/3,dx,cs,0,LE)<=dx/8 ) { in ocr0_eE()
571 x = loop(box1->p,x0,y0+dy/2,dx,cs,0,RI); in ocr0_eE()
572 if( loop(box1->p,x0,y0+dy/4,dx,cs,0,RI)<=x in ocr0_eE()
573 && loop(box1->p,x0,y0+dy/8,dx,cs,0,RI)<=x ) Break; in ocr0_eE()
574 if( loop(box1->p,x0,y1-dy/4,dx,cs,0,RI)<=x in ocr0_eE()
575 && loop(box1->p,x0,y1-dy/8,dx,cs,0,RI)<=x ) Break; in ocr0_eE()
577 x = loop(sdata->bp,0,dy-2 ,dx,cs,0,RI); in ocr0_eE()
578 if( loop(sdata->bp,0,dy-1-dy/8,dx,cs,0,RI)>x && dy>16) Break; // some Q in ocr0_eE()
589 for(ad=d=100;dx>2 && dy>4 ;){ // min 3x4 in ocr0_eE()
615 if (y1-box1->frame_vector[ i][1]>dy/4) break; // fatal! in ocr0_eE()
629 for( i=1,y=y0; y<y0+dy/4 && i; y++ ) // long black line in ocr0_eE()
632 for( i=1,y=y1; y>y1-dy/4 && i; y-- ) // long black line in ocr0_eE()
635 for( i=1,y=y0+dy/3; y<y1-dy/3 && i; y++ ){ // black line in ocr0_eE()
640 turmite(box1->p,&x,&y,x0,x1,y0,y1,cs,DO,ST); if( y>y0+dy/4 ) Break; in ocr0_eE()
641 turmite(box1->p,&x,&y,x0,x1,y0,y1,cs,ST,DO); if( y>y0+dy/3 ) Break; in ocr0_eE()
642 turmite(box1->p,&x,&y,x0,x1,y0,y1,cs,RI,DO); if( x<=x1 || y>y0+dy/2 ) Break; in ocr0_eE()
644 turmite(box1->p,&x,&y,x0,x1,y0,y1,cs,UP,ST); if( y<y1-dy/4 ) Break; in ocr0_eE()
645 turmite(box1->p,&x,&y,x0,x1,y0,y1,cs,ST,UP); if( y<y0-dy/3 ) Break; in ocr0_eE()
646 turmite(box1->p,&x,&y,x0,x1,y0,y1,cs,RI,UP); if( x<=x1 || y<y0+dy/2 ) Break; in ocr0_eE()
648 turmite(box1->p,&x,&y,x0,x1,y0,y1,cs,DO,ST); if( y>y0+dy/4 ) Break; in ocr0_eE()
649 turmite(box1->p,&x,&y,x0,x1,y0,y1,cs,ST,DO); if( y>y0+dy/3 ) Break; in ocr0_eE()
650 y+=dy/15; in ocr0_eE()
654 turmite(box1->p,&x,&y,x0,x1,y0,y1,cs,DO,ST); if( y>y1-dy/3 ) Break; in ocr0_eE()
657 i=loop(box1->p,x0,y0+dy/4,dx,cs,0,RI); if(i>dx/2) Break; in ocr0_eE()
658 j=loop(box1->p,x0,y0+dy/2,dx,cs,0,RI); if(j<i-dx/4 || j>i+dx/8) Break; i=j; in ocr0_eE()
659 j=loop(box1->p,x0,y1-dy/4,dx,cs,0,RI); if(j<i-dx/4 || j>i+dx/8) Break; in ocr0_eE()
660 j=loop(box1->p,x1,y1-dy/4,dx,cs,0,LE); in ocr0_eE()
661 for( x=dx,y=y0+dy/6; y<y1-dy/9; y++ ) // left border straight in ocr0_eE()
666 } if( y<y1-dy/9 ) Break; // t in ocr0_eE()
667 if(dy>3*dx) // ~[ in ocr0_eE()
668 if( get_bw(x0+dx/2,x0+dx/2,y0+dy/4,y1-dy/4,box1->p,cs,1) == 0 ) Break; in ocr0_eE()
685 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_n() local
691 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_n()
694 i= num_cross( 0,dx-1,dy/4,dy/4,sdata->bp,cs); in ocr0_n()
695 j= num_cross( 0,dx-1,dy/2,dy/2,sdata->bp,cs); in ocr0_n()
697 if( loop(sdata->bp,dx/2,0,dy,cs,0,DO) > dy/8 && sdata->hchar ) Break; /* tt */ in ocr0_n()
698 y=5*dy/8; /* also for handwritten n, where first bow goes not down enough */ in ocr0_n()
703 y=loop(sdata->bp,dx-1-dx/4,0,dy,cs,0,DO); if(y>dy/2) Break; in ocr0_n()
706 y=3*dy/4; in ocr0_n()
709 y=dy/2; in ocr0_n()
710 if( num_cross(0,dx-1,dy/2-dy/8,dy/2-dy/8,sdata->bp,cs) == 2 in ocr0_n()
711 && num_cross(0,dx-1,dy/2, dy/2 ,sdata->bp,cs) == 2 ) { // n rr in ocr0_n()
717 i=dy/4; y=13*dy/16; in ocr0_n()
718 if( num_cross(dx/2,dx-1,y,y,sdata->bp,cs)==2 ) i=3*dy/8; // \it n in ocr0_n()
719 if (i<2 && i<dy/2) i++; // correct for small fonts like 8x12 in ocr0_n()
721 for(x=i1;x<i2;x++) if( loop(sdata->bp,x, 0,dy,cs,0,DO)>=i ) break; in ocr0_n()
723 for(x=i1;x<i2;x++) if( loop(sdata->bp,x,dy-1,dy,cs,0,UP) >dy/4 ) break; in ocr0_n()
727 i=loop(sdata->bp,x,0,dy,cs,0,DO); in ocr0_n()
728 i=loop(sdata->bp,x,i,dy,cs,1,DO); // measure thickness in ocr0_n()
732 if( dy>7 ) in ocr0_n()
733 if( loop(sdata->bp,dx-1,dy-1-dy/8,dx,cs,0,LE) in ocr0_n()
734 +loop(sdata->bp, 0,dy-1-dy/8,dx,cs,0,RI)-dx/8-1 in ocr0_n()
735 > loop(sdata->bp,dx-1,dy-1-dy/2,dx,cs,0,LE) in ocr0_n()
736 +loop(sdata->bp, 0,dy-1-dy/2,dx,cs,0,RI) ) ad=90*ad/100; // broken o in ocr0_n()
737 if( dy>7 && dx>7 ) in ocr0_n()
738 if( loop(sdata->bp,dx-1, dy/2,dx,cs,0,LE)==0 in ocr0_n()
739 && loop(sdata->bp,dx-1,dy-1-dy/8,dx,cs,0,RI)>dx/8 ) ad=98*ad/100; // broken o in ocr0_n()
741 if( num_cross(0,dx-1,dy/2, dy/2 ,sdata->bp,cs) != 3 in ocr0_n()
742 && num_cross(0,dx-1,dy/2-dy/8,dy/2-dy/8,sdata->bp,cs) != 3 ) Break; in ocr0_n()
743 i =loop(sdata->bp,0,dy/2-dy/8,dx,cs,0,RI); if (i>dx/4) Break; in ocr0_n()
744 i+=loop(sdata->bp,i,dy/2-dy/8,dx,cs,1,RI); if (i>dx/2) Break; in ocr0_n()
745 i+=loop(sdata->bp,i,dy/2-dy/8,dx,cs,0,RI); in ocr0_n()
746 if( num_cross(i,i, 0,dy/2-2*dy/8,sdata->bp,cs) != 0 ) Break; in ocr0_n()
747 i+=loop(sdata->bp,i,dy/2-dy/8,dx,cs,1,RI); in ocr0_n()
748 if( num_cross(i,i,dy/2+1, dy-1,sdata->bp,cs) != 0 ) Break; in ocr0_n()
752 i= loop(sdata->bp,dx-1 ,dy/2,dx,cs,0,LE); if(i>5) in ocr0_n()
753 if( get_bw(dx-1-i/2,dx-1-i/2,0,dy/2,sdata->bp,cs,1) == 1 ) Break; // ~rr in ocr0_n()
754 i+=loop(sdata->bp,dx-1-i,dy/2,dx,cs,1,LE); in ocr0_n()
755 if( get_bw(dx-1-i ,dx-1-i ,0,dy/2,sdata->bp,cs,1) == 0 ) Break; // ~rv in ocr0_n()
757 if( get_bw(dx/2,dx/2,dy/4,dy/4,sdata->bp,cs,1) == 0 in ocr0_n()
758 && get_bw(dx/2,dx-1,dy-2,dy-2,sdata->bp,cs,1) == 0 in ocr0_n()
759 && get_bw(dx/2,dx/2,dy/4,dy-2,sdata->bp,cs,1) == 1 ) Break; // ~P in ocr0_n()
768 i=loop(sdata->bp,dx-1, dy-1,dx,cs,0,LE); if (i>dx/2) in ocr0_n()
769 i=loop(sdata->bp,dx-1, dy-2,dx,cs,0,LE); in ocr0_n()
770 x=loop(sdata->bp,dx-1,dy-1-dy/4,dx,cs,0,LE); in ocr0_n()
772 x=loop(sdata->bp, 0,dy-1,dx,cs,0,LE); // check for serifs in ocr0_n()
773 i=loop(sdata->bp, 0,dy-2,dx,cs,0,LE); if (i<x) x=i; in ocr0_n()
778 if (num_cross( 0,dx-1,dy/4,dy/4,sdata->bp,cs)>=3) ad=98*ad/100; // small M in ocr0_n()
783 if (num_cross(0,dx-1,dy/8,dy/8,sdata->bp,cs)>=2) { in ocr0_n()
785 if (dy<=4) Setac(box1,'m',97); // only for 4x6 font! in ocr0_n()
799 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_M() local
803 for(ad=d=100;dx>3 && dy>3;){ // dy<=dx nicht perfekt! besser mittleres in ocr0_M()
807 if( num_cross(0,dx-1, dy/2, dy/2,bp,cs)<3 in ocr0_M()
808 && num_cross(0,dx-1, dy/4, dy/4,bp,cs)<3 in ocr0_M()
809 && num_cross(0,dx-1,5*dy/8,5*dy/8,bp,cs)<3 in ocr0_M()
810 && num_cross(0,dx-1,3*dy/4,3*dy/4,bp,cs)<3 in ocr0_M()
812 if( num_cross(0,dx-1, dy/4, dy/4,bp,cs)<2 in ocr0_M()
813 && num_cross(0,dx-1, dy/8, dy/8,bp,cs)<2 ) Break; /* fat M */ in ocr0_M()
814 if( num_cross(0,dx-1,3*dy/4,3*dy/4,bp,cs)<2 ) Break; in ocr0_M()
816 x = loop(bp,dx-1 ,dy-1,dx,cs,0,LE); // ~ melted kl in ocr0_M()
817 x = loop(bp,dx-1-x,dy-1,dx,cs,1,LE); if( x>dx/2 ) Break; in ocr0_M()
819 if( loop(bp, 0,7*dy/16,dx,cs,0,RI) in ocr0_M()
820 + loop(bp,dx-1,7*dy/16,dx,cs,0,LE) > dx/2 ) Break; // ~K in ocr0_M()
822 if( dy>8 /* following lines should be extend to range check */ in ocr0_M()
823 && loop(bp, dx/4,dy-1, dy,cs,0,UP)<dy/4 in ocr0_M()
824 && loop(bp,3*dx/8,dy-1, dy,cs,0,UP)<dy/4 ) in ocr0_M()
825 if( loop(bp, 0,dy-1-dy/ 8,dx,cs,0,RI) in ocr0_M()
826 < loop(bp, 0,dy-1-dy/16,dx,cs,0,RI)-dx/32 ) Break; // ~it_u in ocr0_M()
827 if( num_cross(0,dx-1, dy/2, dy/2,bp,cs)==2 in ocr0_M()
828 && num_cross(0,dx-1, dy/4, dy/4,bp,cs)> 2 in ocr0_M()
829 && num_cross(0,dx-1,3*dy/4,3*dy/4,bp,cs)> 2 ) Break; // ~it_u in ocr0_M()
830 if( num_cross(0 ,dx-1,3*dy/4,3*dy/4,bp,cs)==2 in ocr0_M()
831 && num_cross(dx/2,dx/2,3*dy/4, dy-1,bp,cs)> 0 ) Break; // ~it_v in ocr0_M()
833 if( loop(bp,3*dx/4, 0,dy,cs,0,DO) in ocr0_M()
834 > loop(bp,2*dx/4, 0,dy,cs,0,DO) in ocr0_M()
835 && loop(bp,3*dx/4,dy-1,dy,cs,0,UP) in ocr0_M()
836 < loop(bp,2*dx/4,dy-1,dy,cs,0,UP) ) Break; // ~N in ocr0_M()
837 if( loop(bp,3*dx/4, dy/8,dy,cs,0,DO) in ocr0_M()
838 > loop(bp,2*dx/4, dy/8,dy,cs,0,DO) in ocr0_M()
839 && loop(bp,3*dx/4,dy-1-dy/8,dy,cs,0,UP) in ocr0_M()
840 < loop(bp,2*dx/4,dy-1-dy/8,dy,cs,0,UP) ) Break; // ~serif_N in ocr0_M()
845 if( num_cross(0,dx-1,dy/2,dy/2,bp,cs)!=4 ){ // Is it a N ? in ocr0_M()
846 if( num_cross(0,dx-1,dy/2,dy/2,bp,cs)==3 ){ in ocr0_M()
847 for(y=dy/2+1;y<dy;y++){ in ocr0_M()
854 if( loop(bp,dx-x,y-1,dy,cs,0,UP)>y-2 ) Break; // ~N in ocr0_M()
860 y=loop(bp,x,0,dy,cs,0,DO); if(y>i2) {i2=y;i1=x;} else break; } in ocr0_M()
861 i3=i2+loop(bp,i1,i2,dy-i2,cs,1,DO); in ocr0_M()
862 if(i2<dy/4) { in ocr0_M()
866 if (i2==0 && dx>8 && dy>12) Break; // glued and bad splitted serifen-MN in ocr0_M()
870 t1=loop(bp,0 ,3*dy/4,dx,cs,0,RI); in ocr0_M()
871 t1=loop(bp,t1,3*dy/4,dx,cs,1,RI); // thickness of line? in ocr0_M()
882 if( num_cross(0,dx-1, dy/4, dy/4,bp,cs)==4 in ocr0_M()
883 && num_cross(0,dx-1,3*dy/4,3*dy/4,bp,cs)==4 ){ in ocr0_M()
884 i1 =loop(bp, 0, dy/4,dx,cs,0,RI); in ocr0_M()
885 i1+=loop(bp,i1, dy/4,dx,cs,1,RI); in ocr0_M()
886 i1+=loop(bp,i1, dy/4,dx,cs,0,RI); in ocr0_M()
887 i2 =loop(bp, 0,3*dy/4,dx,cs,0,RI); in ocr0_M()
888 i2+=loop(bp,i2,3*dy/4,dx,cs,1,RI); in ocr0_M()
889 i2+=loop(bp,i2,3*dy/4,dx,cs,0,RI); in ocr0_M()
891 i1+=loop(bp,i1, dy/4,dx,cs,1,RI); in ocr0_M()
892 i2+=loop(bp,i2,3*dy/4,dx,cs,1,RI); in ocr0_M()
894 i1+=loop(bp,i1, dy/4,dx,cs,0,RI); in ocr0_M()
895 i2+=loop(bp,i2,3*dy/4,dx,cs,0,RI); in ocr0_M()
898 if( num_cross(0,dx-1,dy/2,dy/2,bp,cs)==2 in ocr0_M()
899 && num_cross(0,dx-1,dy/4,dy/4,bp,cs)==2 && !hchar ) Break; // ~ \it u in ocr0_M()
901 if (dy<17) in ocr0_M()
905 if( num_cross(dx/2,dx/2, 0, dy-1,bp,cs)!=1) ad=98*ad/100; // kt in ocr0_M()
906 if (dx<5 && loop(bp,dx/2,0,dy,cs,0,DO)>=3*dy/8) ad=96*ad/100; // 4x6 H in ocr0_M()
908 if( num_cross(0,dx-1, dy/4, dy/4,bp,cs)<=2 in ocr0_M()
909 && num_cross(0,dx-1,3*dy/4,3*dy/4,bp,cs)<=2 in ocr0_M()
910 && dx>8 && dy>12 ){ in ocr0_M()
912 for(y=5*dy/16;y<5*dy/8;y++) // look for H-line in ocr0_M()
914 if( y<5*dy/8 ) ad=95*ad/100; in ocr0_M()
915 if( y<5*dy/8 ) in ocr0_M()
920 if( loop(bp,3*dx/8, 0,dy,cs,0,DO) >dy/2 in ocr0_M()
921 && loop(bp,5*dx/8,dy-1,dy,cs,0,UP) >dy/2 ) ad=95*ad/100; in ocr0_M()
925 if( loop(bp,0, dy/4,dx,cs,0,RI) in ocr0_M()
926 < loop(bp,0,dy-1-dy/8,dx,cs,0,RI)-dx/16 ) Break; // ~wi glued in ocr0_M()
940 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_N() local
946 for(ad=d=100;dx>3 && dy>3;){ // 4x6font in ocr0_N()
961 if (aa[1][1]-aa[0][1]<dy/2) Break; in ocr0_N()
962 if (aa[2][1]-aa[3][1]<dy/2) Break; in ocr0_N()
965 if (abs(aa[3][1]-aa[0][1])>(dy+2)/5) Break; /* glued tu */ in ocr0_N()
966 if (abs(aa[3][1]-aa[0][1])>(dy+4)/8) ad=98*ad/100; /* glued tu */ in ocr0_N()
977 if (y-y0 > 5*dy/8) Break; in ocr0_N()
995 i2=nearest_frame_vector(box1,aa[3][3],aa[0][3], x1, y1-dy/8); in ocr0_N()
1000 if (y-y0 < 3*dy/8) Break; in ocr0_N()
1004 && box1->frame_vector[i3][1]-box1->frame_vector[i1][1]<=dy/8 in ocr0_N()
1016 -(y1-box1->frame_vector[i2][1]))>dy/8) ad=99*ad/100; /* ~ tu */ in ocr0_N()
1018 -(box1->frame_vector[i2][1]-(y0+y1)/2))>dy/8) ad=99*ad/100; /* ~ tu */ in ocr0_N()
1022 -box1->frame_vector[i1][1]<=dy/8) ad=97*ad/100; /* too flat (ff,H) */ in ocr0_N()
1024 -box1->frame_vector[i1][1]<=dy/2) ad=99*ad/100; in ocr0_N()
1048 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_h() local
1053 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_h()
1085 if (box1->frame_vector[i4][1]-y0<dy/4) Break; // ~MN in ocr0_h()
1086 if (y1-box1->frame_vector[i4][1]<dy/4) Break; // ~BCDEGIJLOQSUYZ in ocr0_h()
1095 if( get_bw(0 ,dx/2,dy/8 ,dy/8 ,bp,cs,1) != 1 ) Break; in ocr0_h()
1096 if( get_bw(0 ,dx/2,dy/2 ,dy/2 ,bp,cs,1) != 1 ) Break; in ocr0_h()
1097 if( get_bw(dx/2 ,dx-1,dy-1-dy/3,dy-1-dy/3,bp,cs,1) != 1 ) Break; in ocr0_h()
1098 if( get_bw(dx/2 ,dx/2,dy/5 ,dy-1-dy/3,bp,cs,1) != 1 ) Break; in ocr0_h()
1100 if( get_bw(dx-1-dx/3,dx-1,1 ,dy/6 ,bp,cs,1) == 1 ) Break; in ocr0_h()
1101 if( dy>18 ) in ocr0_h()
1102 if( get_bw(dx-1-dx/3,dx-1,dy/6 ,dy/5 ,bp,cs,1) == 1 ) Break; in ocr0_h()
1103 if( get_bw(dx-1-dx/3,dx-1,dy-1-dy/4,dy-1 ,bp,cs,1) == 0 ) Break; // s- in ocr0_h()
1105 if( get_bw(x, x,y1-dy/4, y1, box1->p,cs,1) == 0 ) break; in ocr0_h()
1107 for(i=dy/4,y=y0+dy/3;y<=y1 && i;y++){ in ocr0_h()
1110 for(i=dy/4,y=y0;y<=y0+dy/2 && i;y++){ in ocr0_h()
1115 if (sdata->holes.hole[0].y0 > dy/3 in ocr0_h()
1116 && sdata->holes.hole[0].y1 < dy-1-dy/3) Break; in ocr0_h()
1118 if( loop(bp,dx-1,dy/3,dx,cs,0,LE)+dx/8 in ocr0_h()
1119 < loop(bp,dx-1,dy/2,dx,cs,0,LE) in ocr0_h()
1120 && loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE)+dx/8 in ocr0_h()
1121 < loop(bp,dx-1,dy/2,dx,cs,0,LE)) Break; // ~k Okt00 in ocr0_h()
1122 i=loop(bp,0,dy-1-dy/4,dx,cs,0,RI); in ocr0_h()
1123 if (i>1 && num_cross(x0,x0,y0+dy/8+2,y0+dy/2, box1->p,cs) == 1 ){ // fi fu in ocr0_h()
1125 if (num_cross(x0,x0,y0,y0+dy/8+2, box1->p,cs) == 0 ) ad=97*ad/100; in ocr0_h()
1126 if (num_cross(x0+dx/2,x0+dx/2,y0,y0+dy/8+2, box1->p,cs) == 1 ) ad=97*ad/100; in ocr0_h()
1129 i =loop(bp,0,dy/4,dx,cs,0,RI); in ocr0_h()
1130 i+=loop(bp,i,dy/4,dx,cs,1,RI)+1; in ocr0_h()
1132 if( loop(bp,i,0,dy,cs,0,DO)>5*dy/8 ) { in ocr0_h()
1135 if( num_cross(x0,x0,y0+(dy+3)/8,y1,box1->p,cs) > 1 ) { in ocr0_h()
1139 i=loop(bp,dx-1,3*dy/4,dx,cs,0,LE); // melted "fr" for vertikal letters in ocr0_h()
1140 if (i>dx/4 && loop(bp,dx-1-i,dy-1,dy,cs,1,UP)>dy/2) { in ocr0_h()
1143 i=loop(bp,dx-1,1+dy/16,dx,cs,0,LE); if (i<dx/4) { in ocr0_h()
1146 if( num_cross(dx-i+1+dx/8,dx-i+1+dx/8,0,1+dy/16,bp,cs) > 0 ) { in ocr0_h()
1149 if (loop(box1->p,x1,y0+1+dy/16,dx,cs,0,LE)<dx/4) { in ocr0_h()
1174 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_H() local
1178 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_H()
1181 if( num_cross(0,dx-1,dy/4 ,dy/4 ,bp,cs) != 2 in ocr0_H()
1182 && num_cross(0,dx-1,dy/4-1,dy/4-1,bp,cs) != 2 ) Break; in ocr0_H()
1183 if( num_cross(0,dx-1,3*dy/4 ,3*dy/4 ,bp,cs) != 2 in ocr0_H()
1184 && num_cross(0,dx-1,3*dy/4+1,3*dy/4+1,bp,cs) != 2 ) Break; in ocr0_H()
1185 if( loop(bp,0 ,dy/8,dx,cs,0,RI) in ocr0_H()
1186 + loop(bp,dx-1,dy/8,dx,cs,0,LE)>dx/2 ) Break; // ~A in ocr0_H()
1187 for( j1=0,i=1,y=y0+dy/10; y<y1-dy/10 && i; y++ ) // 2 vertikal lines in ocr0_H()
1191 for( i=1,y=dy/4; y<dy-1-dy/4 && i; y++ ) // max - min width in ocr0_H()
1195 for( i=0,ya=y=y0+dy/3; y<y1-dy/3; y++ ) // horizontal line in ocr0_H()
1201 for( y=ya; y<dy-dy/4; y++ ) // ~M Dec00 in ocr0_H()
1204 if ( y<dy-dy/4 ) Break; in ocr0_H()
1206 if( get_bw( x, x,y0 ,y0+dy/4,box1->p,cs,1) == 0 ) i=0; in ocr0_H()
1209 if( get_bw( x, x,y1-dy/4,y1 ,box1->p,cs,1) == 0 ) i=0; in ocr0_H()
1212 if( num_cross(x,x,y0+dy/8,y1-dy/8, box1->p,cs) == 1 ) i=0; in ocr0_H()
1214 for(i=1,y=y0;y<=y0+dy/4 && i;y++){ in ocr0_H()
1217 for(i=1,y=y1-dy/4;y<=y1 && i;y++){ in ocr0_H()
1220 if( get_bw(x1-dx/8, x1 , y0, y0+dy/8,box1->p,cs,1) != 1 ) Break; in ocr0_H()
1221 if( get_bw(x0 , x0+dx/8, y1-dy/8, y1,box1->p,cs,1) != 1 ) Break; in ocr0_H()
1222 i1=loop(bp,dx-1, dy/4,dx,cs,0,LE); if(i1>dx/2) Break; in ocr0_H()
1223 i2=loop(bp,dx-1, dy/2,dx,cs,0,LE); if(i2<i1-dx/4 || i2>i1+dx/8) Break; in ocr0_H()
1224 i3=loop(bp,dx-1,dy-1-dy/4,dx,cs,0,LE); if(i3<i2-dx/4 || i3>i2+dx/8) Break; in ocr0_H()
1228 i1=loop(bp, 0, dy/4,dx,cs,0,RI); in ocr0_H()
1229 i1=loop(bp, i1, dy/4,dx,cs,1,RI); in ocr0_H()
1230 i2=loop(bp, 0,dy-1-dy/4,dx,cs,0,RI); in ocr0_H()
1231 i2=loop(bp, i2,dy-1-dy/4,dx,cs,1,RI); in ocr0_H()
1232 i3=loop(bp,dx-1 ,dy-1-dy/4,dx,cs,0,LE); in ocr0_H()
1233 i3=loop(bp,dx-1-i3,dy-1-dy/4,dx,cs,1,LE); in ocr0_H()
1234 i =loop(bp, 0,dy/2+1+dy/8,dx,cs,0,RI); in ocr0_H()
1235 i+=loop(bp, i,dy/2+1+dy/8,dx,cs,1,RI); in ocr0_H()
1236 i =loop(bp, i,dy/2+1+dy/8,dx,cs,0,RI); in ocr0_H()
1239 if ( loop(bp,dx-1, 3*dy/8,dx,cs,0,LE) in ocr0_H()
1240 -loop(bp,dx-1, dy/8,dx,cs,0,LE)>dx/4 in ocr0_H()
1241 && loop(bp,dx-1, 3*dy/8,dx,cs,0,LE) in ocr0_H()
1242 -loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE)>dx/4 ) Break; // ~K in ocr0_H()
1258 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_k() local
1263 for(ad=100;dx>2 && dy>3;){ // min 3x4 in ocr0_k()
1295 if (box1->frame_vector[i4][1]-y0<dy/4) Break; // ~MN in ocr0_k()
1296 if (y1-box1->frame_vector[i4][1]<dy/4) Break; // ~BCDEGIJLOQSUYZ in ocr0_k()
1302 if (x1-box1->frame_vector[i][0]<dy/4) Break; // h in ocr0_k()
1303 if (x1-box1->frame_vector[i][0]<dy/2) ad=98*ad/100; in ocr0_k()
1308 if( num_cross(0,3*dx/4, dy/8 , dy/8 ,bp,cs) != 1 in ocr0_k()
1309 || num_cross(0,3*dx/4,3*dy/16,3*dy/16,bp,cs) != 1 ) Break; in ocr0_k()
1310 if( num_cross(0,dx-1,dy-1,dy-1,bp,cs) != 2 in ocr0_k()
1311 && num_cross(0,dx-1,dy-2,dy-2,bp,cs) != 2 ) Break; in ocr0_k()
1313 && num_cross(dx-1,dx-1,dy/4,dy-1,bp,cs) != 2 in ocr0_k()
1314 && num_cross(dx-2,dx-2,dy/4,dy-1,bp,cs) != 2 ) Break; in ocr0_k()
1315 i1=loop(bp,0,dy/2-dy/4,dx,cs,0,RI); in ocr0_k()
1316 i2=loop(bp,0,dy/2 ,dx,cs,0,RI);if(i2>dx/2) Break; in ocr0_k()
1317 i3=loop(bp,0,dy/2+dy/4,dx,cs,0,RI); in ocr0_k()
1319 if( get_bw(x0 ,x0+dx/2,y0 ,y0+dy/4,box1->p,cs,1) != 1 ) Break; in ocr0_k()
1320 if( get_bw(x0+dx/2,x1, y1-dy/3,y1 ,box1->p,cs,1) != 1 ) Break; in ocr0_k()
1321 if( get_bw(x1-dx/4,x1, y0 ,y0+3*dy/16,box1->p,cs,1) == 1 ) Break; in ocr0_k()
1322 if( get_bw(x1-dx/4,x1, y0+dy/4,y1-dy/4,box1->p,cs,1) != 1 ) Break; //~1 in ocr0_k()
1323 if( get_bw(x1-dx/4,x1, y1-dy/8,y1 ,box1->p,cs,1) != 1 ) Break; in ocr0_k()
1325 if (sdata->holes.hole[0].y0 > dy/4) Break; in ocr0_k()
1327 for(y=y0+1;y<y0+dy/2;y++) // luecke ??? in ocr0_k()
1329 if( y<y0+dy/2 ) Break; in ocr0_k()
1335 for (j=x=0,y=5*dy/8;y<7*dy/8;y++) { in ocr0_k()
1341 i =loop(bp,dx-1,dy-1,dx,cs,0,LE); if(i>dx/2) in ocr0_k()
1342 i =loop(bp,dx-1,dy-2,dx,cs,0,LE); if(i>dx/2) Break; in ocr0_k()
1343 i+=loop(bp,dx-1-i,dy-1,dx,cs,1,LE)/2; in ocr0_k()
1344 if( get_line(x,y,dx-1-i,dy-1,bp,cs,100)<60 ) Break; in ocr0_k()
1346 for(y=y0+dy/3;y<y1;y++) if( num_cross(x0,x1,y,y,box1->p,cs)==2 ) break; in ocr0_k()
1352 || sdata->holes.hole[0].y1>dy-1-dy/4 in ocr0_k()
1353 || sdata->holes.hole[0].y0< dy/4) Break; in ocr0_k()
1355 i=loop(bp,0,dy-1,dx,cs,0,RI); in ocr0_k()
1356 i=loop(bp,i,dy-1,dx,cs,1,RI); if (dx>8 && 4*i>3*dx) Break; // ~glued_tz in ocr0_k()
1357 i =loop(bp,0,dy/4,dx,cs,0,RI); in ocr0_k()
1359 && i+loop(bp,i,dy/4,dx,cs,1,RI)>dx/2 in ocr0_k()
1378 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_K() local
1382 for(ad=d=100;dx>2 && dy>3;){ // updated 29 Mar 2000 perfect??? in ocr0_K()
1385 for(y=dy/8;y<dy-dy/8;y++) in ocr0_K()
1387 if( y<dy-dy/8 ) Break; in ocr0_K()
1389 y= loop(box1->p,x,y0,y1-y0,cs,0,DO); if (y>3*dy/4) { i=1;break; } in ocr0_K()
1390 if (dy>15 && j>dy/8){ in ocr0_K()
1394 if(y>=dy/4) i=0; /* ok, found gap */ in ocr0_K()
1397 i=loop(box1->p,x,y1,dy,cs,0,UP); in ocr0_K()
1399 if (i>0) { i2=loop(box1->p,x-1,y1-i-1,dy,cs,0,UP); in ocr0_K()
1402 } if( y<=dy/8 ) Break; if (y<dy/4) ad=80*ad/100; in ocr0_K()
1406 for(i=1,y=y0;y<=y0+dy/4 && i;y++){ in ocr0_K()
1410 for(i=1,y=y0+dy/3;y<=y1-dy/3 && i;y++){ in ocr0_K()
1414 for(i=1,y=y1-dy/4;y<=y1 && i;y++){ in ocr0_K()
1417 if( get_bw(x1-dx/3,x1,y0,y0+dy/8,box1->p,cs,1) != 1 ) Break; // ~k in ocr0_K()
1418 if( dy>16 in ocr0_K()
1419 && loop(bp,0, dy/4,dx,cs,0,RI) in ocr0_K()
1420 +loop(bp,0,3*dy/4,dx,cs,0,RI) in ocr0_K()
1421 <2*loop(bp,0, dy/2,dx,cs,0,RI)-2-dx/32 ) Break; // ~X in ocr0_K()
1423 i=loop(box1->p,x1,y0+ dy/4,x1-x0+1,cs,0,LE); if(i>dx/2) Break; in ocr0_K()
1424 j=loop(box1->p,x1,y0+ dy/2,x1-x0+1,cs,0,LE); in ocr0_K()
1425 x=loop(box1->p,x1,y0+3*dy/8,x1-x0+1,cs,0,LE); if(x>j) j=x; in ocr0_K()
1427 j=loop(box1->p,x1,y1-dy/4,x1-x0+1,cs,0,LE); if(j>=i ) Break; in ocr0_K()
1435 ya= dy/4;xa=loop(bp,0,ya,dx,cs,0,RI);xa+=loop(bp,xa,ya,dx,cs,1,RI)/2; in ocr0_K()
1436 yc=dy-dy/4;xc=loop(bp,0,yc,dx,cs,0,RI);xc+=loop(bp,xc,yc,dx,cs,1,RI)/2; in ocr0_K()
1437 yb=dy/2; xb=dx-1-loop(bp,dx-1,dy/2,dx,cs,0,LE); in ocr0_K()
1438 for(yd=ye=yf=xe=y=i=0,xf=xd=dx;y<dy/4;y++){ // range 0..1/4 in ocr0_K()
1440 x =loop(bp,dx-1,dy-1-y,dx,cs,0,LE); if(x<xf){ xf=x;yf=dy-1-y; } in ocr0_K()
1441 x =loop(bp,dx-1,dy/2+y,dx,cs,0,LE); if(x>xe){ xe=x;ye=dy/2+y; } in ocr0_K()
1442 x =loop(bp,dx-1,dy/2-y,dx,cs,0,LE); if(x>xe){ xe=x;ye=dy/2-y; } in ocr0_K()
1444 x =loop(bp,0 ,dy/2+y,dx,cs,0,RI); // middle left border in ocr0_K()
1445 x+=loop(bp,x ,dy/2+y,dx,cs,1,RI); // test 2nd cross in ocr0_K()
1446 x+=loop(bp,x ,dy/2+y,dx,cs,0,RI); if(x<xb){ xb=x;yb=dy/2+y; } in ocr0_K()
1448 x =loop(bp,0 ,dy/2-y,dx,cs,0,RI); in ocr0_K()
1449 x+=loop(bp,x ,dy/2-y,dx,cs,1,RI); // test 2nd cross in ocr0_K()
1450 x+=loop(bp,x ,dy/2-y,dx,cs,0,RI); if(x<xb){ xb=x;yb=dy/2-y; } in ocr0_K()
1451 x =dx-1-loop(bp,dx-1,dy/2-y,dx,cs,0,LE); if(x<xb){ xb=x;yb=dy/2-y; } in ocr0_K()
1461 xa,ya,xb,yb,xc,yc,xd,yd,xe,ye,xf,yf,dx,dy);\ in ocr0_K()
1473 if( dy<16 && !hchar ) Break; in ocr0_K()
1474 if( loop(bp,0,1,dy,cs,1,DO)<=3*dx/4 in ocr0_K()
1475 && loop(bp,1,1,dy,cs,1,DO)<=3*dx/4 in ocr0_K()
1476 && loop(bp,2,1,dy,cs,1,DO)<=3*dx/4 ) Break; // ~x in ocr0_K()
1478 if (loop(bp,dx-1,dy-1-dy/4,dx,cs,0,LE)<=dx/8){ in ocr0_K()
1481 if (sdata->holes.hole[0].y1 < dy-1-dy/3) Break; in ocr0_K()
1498 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_f() local
1515 for(ad=d=100;dx>2 && dy>5;){ // sometimes no hchar! in ocr0_f()
1538 i =aa[1][3]; if (box1->frame_vector[i][1]<y1-dy/8) in ocr0_f()
1539 i =nearest_frame_vector(box1,aa[1][3],aa[2][3], x0, y1+dy/4); in ocr0_f()
1541 i =nearest_frame_vector(box1,aa[1][3],aa[2][3], x1, y1+dy/4); in ocr0_f()
1545 i9=nearest_frame_vector(box1,aa[3][3],aa[0][3],(x0+2*x1)/3,y0-dy/4); in ocr0_f()
1560 if (dy<=box1->m3-box1->m2+1) Break; in ocr0_f()
1561 for(x=0,j=y=2+(3*dy+4)/32;y<=5*dy/8;y++){ // upper cross line min=2 in ocr0_f()
1562 i=loop(bp,0,y,dx,cs,0,RI); if( y>dy/4 && i>5*dx/8 ) break; in ocr0_f()
1564 if( y<3*dy/4 && y>dy/4 in ocr0_f()
1568 } if( y<=5*dy/8 ) Break; y=j;// if( y>dy/2 || y<dy/8 ) Break; in ocr0_f()
1570 i=loop(bp,(dx+1)/2,0,dy,cs,0,DO)/2; in ocr0_f()
1571 if( i>dy/8 in ocr0_f()
1575 if (loop(bp,3*dx/4, 0,dy,cs,0,DO)>dy/8 in ocr0_f()
1576 && loop(bp,3*dx/4-1,0,dy,cs,0,DO)>dy/8) Break; // upper bow in ocr0_f()
1577 i=3*dy/4; if (box1->m3 && i>=box1->m3) i=box1->m3-1; in ocr0_f()
1581 for (i1=dx,i2=y,j=y+1;j<dy-dy/4;j++){ in ocr0_f()
1598 if (ab[7][1]-y0<=dy/16) ad=95*ad/100; // ~t in ocr0_f()
1601 if (aa[3][0]-x0>3*dx/4 && aa[3][1]-y0>3*dy/16) ad=99*ad/100; // ~t in ocr0_f()
1604 j=loop(bp,0,dy/8,dx,cs,0,RI); // if j>dx/2 we have italic f in ocr0_f()
1606 for(i=dy/8;i<dy;i++) in ocr0_f()
1608 if (i<dy) Break; // check for v-line in ocr0_f()
1610 if( loop(bp,dx-1,dy/2,dx,cs,0,LE)<dx/2 ) in ocr0_f()
1611 if( loop(bp,dx-1,dy/2,dx,cs,0,LE)-1 in ocr0_f()
1616 if( loop(bp,0,dy/2,dx,cs,0,RI)-1 in ocr0_f()
1621 if( num_cross(0,dx-1,dy-1,dy-1,bp,cs)!=1 in ocr0_f()
1622 && num_cross(0,dx-1,dy-2,dy-2,bp,cs)!=1 ) Break; // ~* etc. in ocr0_f()
1636 for(i1=i2=dx,y=7*dy/8;y<dy;y++){ in ocr0_f()
1642 if( loop(bp,0,3*dy/4,dx,cs,0,RI)<i1-dx/4 ) Break; in ocr0_f()
1644 if( loop(bp,dx-1,dy/2,dx,cs,0,LE)>3*dx/4 ) in ocr0_f()
1645 if( loop(bp,dx-1,dy-1,dy,cs,0,UP)<dx/2 ) Break; // ~c in ocr0_f()
1647 if( loop(bp, 0,2*dy/3 ,dx,cs,0,RI)>2*dx/3 in ocr0_f()
1648 || loop(bp, 0,2*dy/3-1,dx,cs,0,RI)>2*dx/3 ) in ocr0_f()
1649 if( loop(bp,dx-1, dy/4 ,dx,cs,0,LE)>2*dx/3 ) Break; // ~5 ~S in ocr0_f()
1652 if ( get_bw(x0+dx/8,x0+dx/8,y0+dy/4,y1-dy/16,box1->p,cs,2) == 0 in ocr0_f()
1656 if (dy>15) in ocr0_f()
1657 if( num_cross(x0,x1,y1-dy/4,y1-dy/4,box1->p,cs)>1 in ocr0_f()
1658 && num_cross(x0,x1,y0+dy/4,y0+dy/4,box1->p,cs)>1 ) Break; // ~H in ocr0_f()
1661 if( loop(bp,dx-1 ,3*dy/4,dx,cs,0,LE)- in ocr0_f()
1662 loop(bp,0 ,3*dy/4,dx,cs,0,RI)>dx/5+1 in ocr0_f()
1663 && loop(bp,dx-1-dx/8,dy-1 ,dy,cs,0,UP)<dy/4 ) { in ocr0_f()
1664 if( loop(bp,dx-1 ,5*dy/16,dx,cs,0,LE)- in ocr0_f()
1665 loop(bp,0 ,5*dy/16,dx,cs,0,RI)>=dx/5+1) ad=98*ad/100; // ~E in ocr0_f()
1666 i=loop(bp,dx/8,0,dy,cs,0,DO); in ocr0_f()
1667 if (i<dy/8 || i>dy/2) { in ocr0_f()
1673 i = loop(bp,dx-1 ,3*dy/4,dx ,cs,0,LE)/2; in ocr0_f()
1674 if (loop(bp,dx-1-i , dy-1,dy/2,cs,0,UP)<dy/4) in ocr0_f()
1675 if (loop(bp,0 ,3*dy/4,dx ,cs,0,RI)<dx/4) { in ocr0_f()
1679 if( loop(bp,0,dy/4,dx ,cs,0,RI)>1 in ocr0_f()
1680 && loop(bp,0, 0,dy/4,cs,0,DO)<dy/4 ) { in ocr0_f()
1702 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_bB() local
1706 for(ad=d=100;dx>2 && dy>4;){ // min 3x4 in ocr0_bB()
1709 for(i=1,y=y0;y<y1-dy/2 && i;y++) in ocr0_bB()
1712 for(i=1,y=y1-dy/2;y<y1 && i;y++) in ocr0_bB()
1719 y = loop(box1->p,x0+dx/2,y1 ,dy,cs,0,UP); if (y>1+dy/8) Break; in ocr0_bB()
1720 y+= loop(box1->p,x0+dx/2,y1-y,dy,cs,1,UP); if (y>dy/3) Break; in ocr0_bB()
1721 y=y1-y-loop(box1->p,x0+dx/2,y1-y,dy,cs,0,UP)/2; if (y<y0+3*dy/8) Break; in ocr0_bB()
1722 if (y<y0+dy/2) ad=96*ad/100; in ocr0_bB()
1725 if( num_cross(0,dx-1, dy/4 , dy/4 ,bp,cs) != 2 ) in ocr0_bB()
1726 if( num_cross(0,dx-1, dy/4+1, dy/4+1,bp,cs) != 2 ) in ocr0_bB()
1727 if( num_cross(0,dx-1, dy/4-1, dy/4-1,bp,cs) != 2 ) Break; in ocr0_bB()
1728 for( y=dy/4;y<3*dy/4;y++ ) if( num_cross(0,dx-1,y,y,bp,cs)==1 ) break; in ocr0_bB()
1729 if( y==3*dy/4 ) Break; in ocr0_bB()
1732 > loop(box1->p,x0,y0+dy/4,dx,cs,0,RI)+dx/32 ) in ocr0_bB()
1735 i1=loop(box1->p,x0,y0+dy/4,dx,cs,0,RI); in ocr0_bB()
1736 i2=loop(box1->p,x0,y0+dy/2,dx,cs,0,RI); in ocr0_bB()
1737 i =loop(box1->p,x0,y0+dy/2-dy/ 8,dx,cs,0,RI); if(i>i2) i2=i; in ocr0_bB()
1738 i =loop(box1->p,x0,y0+dy/2-dy/16,dx,cs,0,RI); if(i>i2) i2=i; in ocr0_bB()
1739 i3=loop(box1->p,x0,y1-dy/4,dx,cs,0,RI); in ocr0_bB()
1740 if(dy>16 && i3<i2 && i1+i3<2*i2){ in ocr0_bB()
1762 for( x=dx,y=dy/6; y<dy-dy/8; y++ ) // left border straight in ocr0_bB()
1765 } if( y<dy-dy/8 ) Break; // ~8 bad_a in ocr0_bB()
1767 for( x=dx,y=1;y<dy/4;y++ ) // right border straight in ocr0_bB()
1768 { i=loop(bp,dx-1,dy-y,dx,cs,0,LE); in ocr0_bB()
1770 } if( y<dy/4 ) Break; // ~ff (serifen?) in ocr0_bB()
1772 x=loop(bp,0,dy/2 ,dx,cs,0,RI); in ocr0_bB()
1773 i=loop(bp,0,dy/2-1,dx,cs,0,RI); if (i>x) x=i; // allow dust in ocr0_bB()
1774 i=loop(bp,0,dy/2+1,dx,cs,0,RI); if (i>x) x=i; in ocr0_bB()
1775 if ( loop(bp,0, dy/8,dx,cs,0,RI) in ocr0_bB()
1776 +loop(bp,0,7*dy/8,dx,cs,0,RI) > 2*x+1 ) Break; // not konvex! in ocr0_bB()
1780 x =loop(bp,0,dy/4,dx,cs,0,RI); in ocr0_bB()
1781 if(loop(bp,0,dy/2,dx,cs,0,RI)>x+dx/8) ad=97*ad/100; in ocr0_bB()
1784 if ( (!hchar) && (dx<=10 || dy<=10) ) ad=97*ad/100; // hchar or good_quality in ocr0_bB()
1790 for(ad=d=100;dx>3 && dy>4;){ // min 3x4 in ocr0_bB()
1795 if(y<y1-dy/32-1) Break; in ocr0_bB()
1796 if( get_bw(x0+ dx/2, x0+dx/2, y1-dy/3, y1 ,box1->p,cs,1) != 1 ) Break; in ocr0_bB()
1797 if( get_bw(x1- dx/2, x1 , y1-dy/3, y1-dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_bB()
1798 if( get_bw(x1- dx/3, x1 , y0 , y0+dy/5,box1->p,cs,1) == 1 ) Break; in ocr0_bB()
1799 if( get_bw(x1-4*dx/9, x1 , y0+dy/5, y0+dy/5,box1->p,cs,1) == 1 ) Break; in ocr0_bB()
1800 if( num_cross(x0,x1,y0+dy/4 ,y0+dy/4 ,box1->p,cs) > 1 ) // & in ocr0_bB()
1801 if( num_cross(x0,x1,y0+dy/4-1,y0+dy/4-1,box1->p,cs) > 1 ) in ocr0_bB()
1802 if( dy<16 || in ocr0_bB()
1803 num_cross(x0,x1,y0+dy/5 ,y0+dy/5 ,box1->p,cs) > 1 ) Break; // fat b in ocr0_bB()
1804 for(i=j=0,y=dy/2;y<dy-dy/8;y++) in ocr0_bB()
1808 if (sdata->holes.hole[0].y0 < dy/4) Break; in ocr0_bB()
1811 < dx*dy) ad=90*ad/100; // hole to small in ocr0_bB()
1812 if( num_hole( x0, x1 , y0+dy/4, y1,box1->p,cs,NULL) != 1 ) Break; in ocr0_bB()
1813 i=loop(bp,dx-1,dy-1 ,dx,cs,0,LE); in ocr0_bB()
1814 j=loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE); if(j>i) Break; in ocr0_bB()
1829 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_dD() local
1833 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_dD()
1836 if( get_bw(x0 ,x0+dx/3,y0+dy/2,y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_dD()
1837 if( get_bw(x1-dx/3,x1 ,y0+dy/2,y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_dD()
1838 if( get_bw(x1 ,x1 ,y0 ,y0+dy/16,box1->p,cs,1) == 1 ) Break; in ocr0_dD()
1839 if( get_bw(x1-dx/2,x1 ,y0+dy/4,y0+dy/4 ,box1->p,cs,1) != 1 ) Break; in ocr0_dD()
1842 if( num_cross(x0 ,x1 ,y0+dy/3,y0+dy/3,box1->p,cs) != 2 ) Break; in ocr0_dD()
1843 if( num_cross(x0 ,x1 ,y1-dy/3,y1-dy/3,box1->p,cs) != 2 ) Break; in ocr0_dD()
1845 if (sdata->holes.hole[0].y0 > dy/3) Break; in ocr0_dD()
1846 if (sdata->holes.hole[0].y1 < dy-1-dy/3) Break; in ocr0_dD()
1849 for(x=0,y=bp->y-1-dy/8;y>=dy/5;y--){ in ocr0_dD()
1854 if (y>=dy/5 ) Break; in ocr0_dD()
1856 for(x=dx,y=0;y<dy/3;y++){ in ocr0_dD()
1861 if (y<dy/3 ) Break; in ocr0_dD()
1863 for(x=dx,y=bp->y-1;y>2*dy/3;y--){ in ocr0_dD()
1868 if (y>2*dy/3 ) Break; in ocr0_dD()
1869 if( loop(bp,dx-1,dy-1 ,dx,cs,0,LE) <= in ocr0_dD()
1870 loop(bp,dx-1,dy-2-dy/16,dx,cs,0,LE) ) Break; // P in ocr0_dD()
1872 y=loop(bp,dx/2,dy-1,dy,cs,0,UP)-1; if (dy>16) y/=2; in ocr0_dD()
1873 if ( y>=dy/16 ) { y-=dy/16; in ocr0_dD()
1874 if (get_bw(dx/2,dx-1,dy-1-y,dy-1-y,bp,cs,1)==1) Break; // ~A in ocr0_dD()
1877 ya=loop(bp, 0,dy-1,dy,cs,0,UP); in ocr0_dD()
1878 yb=loop(bp,dx/16+1,dy-1,dy,cs,0,UP); in ocr0_dD()
1879 if( ya<dy/2 && ya>dy/16 && ya>yb ) Break; // ~O in ocr0_dD()
1881 if ( loop(bp, dx/2, 0,dy,cs,0,DO) in ocr0_dD()
1882 -loop(bp, dx/2,dy-1,dy,cs,0,UP) > dy/8 ) ad=97*ad/100; // ~b in ocr0_dD()
1887 && loop(bp,dx-1,dy-1,dx,cs,0,LE)>=dx/2 in ocr0_dD()
1888 && loop(bp, 0,dy/2,dx,cs,0,RI)< 2 ) ad=96*ad/100; // thin O in ocr0_dD()
1897 for(d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_dD()
1901 if( get_bw(x0 , x0+dx/2, y1-dy/6, y1-dy/9,box1->p,cs,1) != 1 ) Break; in ocr0_dD()
1902 if( get_bw(x0 , x0+dx/2, y1-dy/3, y1-dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_dD()
1903 if( get_bw(x0+dx/2, x1 , y1-dy/3, y1-dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_dD()
1904 if( get_bw(x1-dx/4, x1 , y0+dy/8, y0+dy/8,box1->p,cs,1) != 1 ) Break; in ocr0_dD()
1905 if( get_bw(x0+dx/2, x0+dx/2, y1-dy/4, y1 ,box1->p,cs,1) != 1 ) Break; in ocr0_dD()
1906 if(dy>19) in ocr0_dD()
1907 if( get_bw(x0 , x0+dx/3, y0 , y0+dy/5,box1->p,cs,1) == 1 ) Break; in ocr0_dD()
1908 if( get_bw(x0 , x0+dx/3, y0 , y0+dy/6,box1->p,cs,1) == 1 ) Break; in ocr0_dD()
1909 if( get_bw(x0 , x0+dx/4, y1-dy/8, y1 ,box1->p,cs,1) != 1 ) Break; in ocr0_dD()
1910 if( get_bw(x0+dx/2-1,x0+dx/2,y1-dy/8, y1 ,box1->p,cs,1) != 1 ) Break; // ~"A in ocr0_dD()
1914 if( num_cross(x ,x ,0 ,dy-1, bp,cs) == 2 ) i--; in ocr0_dD()
1916 for(i=dy/6+1,y=dy/4;y<dy && i;y++){ in ocr0_dD()
1920 for(i=dy/8+1,y=0;y<dy/2 && i;y++){ in ocr0_dD()
1928 if ( sdata->holes.hole[0].y0 < dy/4 ) Break; in ocr0_dD()
1929 if (dy-sdata->holes.hole[0].y1 > dy/4+1) Break; // glued et in ocr0_dD()
1931 if( num_cross(0 ,dx-1,dy-1-dy/4,dy-1-dy/4,bp,cs) != 2 ) { // glued al in ocr0_dD()
1932 if (dy>15) { Break; } else ad=96*ad/100; in ocr0_dD()
1947 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_F() local
1951 for(ad=d=100;dx>2 && dy>4;){ // dx>1 dy>2*dx in ocr0_F()
1954 if( get_bw(x0+dx/2,x0+dx/2,y0,y0+dy/8,box1->p,cs,1) != 1 ) Break; in ocr0_F()
1955 if( get_bw(x0,x0+dx/4,y1-dy/4,y1-dy/4,box1->p,cs,1) != 1 ) Break; in ocr0_F()
1956 if( get_bw(x0,x0+dx/2,y0+dy/4,y0+dy/4,box1->p,cs,1) != 1 ) Break; in ocr0_F()
1958 for (x=0,y=0;y<dy/4;y++) { in ocr0_F()
1959 j=loop(bp,dx-1,dy-1-y,dx,cs,0,LE); if(j<3 || 3*j<dx) break; // ~f Jun00 in ocr0_F()
1961 } if (y<dy/4 || x<dx/2) Break; in ocr0_F()
1963 for( i=1,y=0; y<dy/4 && i; y++ ){ // long black line in ocr0_F()
1968 x=loop(bp,0,dy-1-dy/4,dx,cs,0,RI); in ocr0_F()
1969 x=loop(bp,x,dy-1-dy/4,dx,cs,1,RI); // strichdicke in ocr0_F()
1970 for( i=1,y=dy/3; y<dy-1-dy/3 && i; y++ ) // black line in ocr0_F()
1975 y=dy/8; if (y<1) y=1; in ocr0_F()
1976 for( i=1; y<dy-1-dy/2; y++ ){ // search horizontal white gap in ocr0_F()
1978 j =loop(bp,dx-x,y,dy/4,cs,0,UP); in ocr0_F()
1984 for(i=1,y=1;y<=dy/2 && i;y++) in ocr0_F()
1988 for(i=1,y=dy/2;y<dy && i;y++) in ocr0_F()
1992 i=loop(bp,dx-1,dy-1,dx,cs,0,LE); // serif or E ? in ocr0_F()
1994 if (loop(bp,dx-1,(dy+4)/8,dx,cs,0,LE)>dx/8 // no serif in ocr0_F()
1995 || loop(bp, 0, dy-3,dx,cs,0,RI)<1) break; in ocr0_F()
1998 if( get_bw(dx-1-dx/4,dx-1,dy-1-dy/4,dy-1,bp,cs,1) == 1 ) Break; // ~E in ocr0_F()
1999 if( get_bw(dx-1 ,dx-1,0 ,dy/3,bp,cs,1) != 1 ) Break; in ocr0_F()
2006 if( num_cross(x,x,0,dy-2,bp,cs) == 2 ) i++; in ocr0_F()
2009 if(dy<20) /* special case of small fi, not very elegant */ in ocr0_F()
2018 if (i>=0 && loop(bp,dy-1,i,dy,cs,0,UP)<=3*dy/4 ) ad=ad*98/100; in ocr0_F()
2024 j= loop(bp,bp->x-1-j,bp->y/4,3*dy/4,cs,0,DO); in ocr0_F()
2025 if (j<=dy/2) { in ocr0_F()
2033 if (!hchar) if ((box1->m2-box1->y0)*8>=dy) { // ignore bad m1..4 in ocr0_F()
2034 if ( num_cross(2*dx/3,2*dx/3,0,dy-1,bp,cs) < 2 ) ad=90*ad/100; // ~r in ocr0_F()
2048 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_uU() local
2054 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_uU()
2057 for(y=y0+dy/4;y<y1-dy/4;y++) /* also handwritten u */ in ocr0_uU()
2059 if( y<y1-dy/4 ) Break; in ocr0_uU()
2060 if( get_bw(dx/2,dx/2,dy/2,dy-1,bp,cs,1)==0 ) Break; in ocr0_uU()
2061 if( get_bw(dx/2,dx-1,dy/2,dy/2,bp,cs,1)==0 ) Break; in ocr0_uU()
2063 y=loop(bp,x,0,dy,cs,0,DO); if(y>i)i=y; if(y<i && i>1) break; in ocr0_uU()
2064 } if( i<dy/4 ) Break; x--; in ocr0_uU()
2068 for(i=dy/8+2,y=dy/8;y<dy-(dy+2)/4 && i;y++){ // 12%+1 Fehler in ocr0_uU()
2069 j=num_cross(0,dx/2-((y>dy/2)?dx/8:0),y,y,bp,cs); in ocr0_uU()
2070 if( y<dy/2 && num_cross(dx/2,dx-1,y,y,bp,cs)>1 ) i--; // ~{\it v} in ocr0_uU()
2071 if( y<dy/2 && (j<1 && j>2) ) { i--; ad=90*ad/100; } in ocr0_uU()
2072 if( y>dy/2 && j!=1 ) { i--; ad=95*ad/100; } in ocr0_uU()
2074 for(i=dy/16+1,y=dy/8;y<dy-dy/4 && i;y++){ // 12%+1 Fehler in ocr0_uU()
2076 if( y>dy/2 && (j<1 && j>2) ) i--; in ocr0_uU()
2077 if( y<dy/2 && j!=1 ) i--; in ocr0_uU()
2080 if( get_bw( x, x, y0, y0+dy/3,box1->p,cs,1) != 1 ) i=0; in ocr0_uU()
2083 if( get_bw( x, x,y0+dy/3,y1-dy/3,box1->p,cs,3) != 2 ) i--; in ocr0_uU()
2086 if( get_bw( x, x,y1-dy/2,y1,box1->p,cs,3) == 2 ) i=0; in ocr0_uU()
2087 if( get_bw( x, x,y1-dy/3,y1,box1->p,cs,3) == 2 ) ad=98*ad/100; in ocr0_uU()
2089 if( num_cross(0 ,dx/2, dy/4, dy/4,bp,cs)==2 in ocr0_uU()
2090 && num_cross(dx-dx/2,dx-1,dy-dy/4,dy-dy/4,bp,cs)==1 ) Break; // ~{\it v} in ocr0_uU()
2092 i=loop(bp,0,dy-1-dy/16,dx,cs,0,RI); in ocr0_uU()
2093 j=loop(bp,0,dy-1-dy/8 ,dx,cs,0,RI); in ocr0_uU()
2095 if(dy>15) in ocr0_uU()
2096 if( loop(bp,dx-1,dy/16,dx,cs,0,LE) in ocr0_uU()
2097 > loop(bp,dx-1,dy/8 ,dx,cs,0,LE)+1+dx/32 ) Break; // ~bad 0 (thinn) in ocr0_uU()
2098 if( hchar && dy>7) in ocr0_uU()
2099 if( loop(bp, 0, dy-1,dx,cs,1,RI)==dx in ocr0_uU()
2100 && loop(bp,dx-1,3*dy/4,dx,cs,0,LE)>dx/16 in ocr0_uU()
2101 && loop(bp, 0,3*dy/4,dx,cs,0,RI)>dx/16 in ocr0_uU()
2102 && loop(bp,dx-1, dy/2,dx,cs,0,LE)>dx/16 in ocr0_uU()
2103 && loop(bp, 0, dy/2,dx,cs,0,RI)>dx/16 in ocr0_uU()
2106 i=loop(bp, 0,dy-2-dy/8,dx,cs,0,RI); in ocr0_uU()
2107 j=loop(bp,dx-1,dy-2-dy/8,dx,cs,0,LE); in ocr0_uU()
2111 if ( num_cross(0,dx-1,dy/2,dy/2,bp,cs)!=2 ) ad=96*ad/100; // w in ocr0_uU()
2112 if ( loop(bp,dx/2,dy-1,dy,cs,0,UP)>0 ) ad=98*ad/100; // w in ocr0_uU()
2130 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_micro() local
2136 for(ad=d=100;dx>2 && dy>4;){ // min 3x4 in ocr0_micro()
2139 for(y=y0+dy/8;y<box1->m3-dy/4;y++) in ocr0_micro()
2141 if( y<box1->m3-dy/4 ) break; in ocr0_micro()
2142 if( get_bw(dx/2,dx/2,3*dy/8,7*dy/8,bp,cs,1)==0 ) break; in ocr0_micro()
2143 if( get_bw(dx/2,dx-1,3*dy/8,7*dy/8,bp,cs,1)==0 ) break; in ocr0_micro()
2144 for(y=dy/2;y<dy;y++){ in ocr0_micro()
2146 } if( y>=dy || 2*y>box1->m3+box1->m4) break; i2=y; in ocr0_micro()
2148 y=loop(bp,x,0,dy,cs,0,DO); if(y>i)i=y; if(y<i && i>1) break; in ocr0_micro()
2149 } if( i<dy/4 ) break; x--; in ocr0_micro()
2152 for(i=dy/16+1,y=dy/8;y<dy-(box1->m4-box1->m3)-dy/4 && i;y++){ // 12%+1 Fehler in ocr0_micro()
2154 if( y<dy/2 && num_cross(dx/2,dx-1,y,y,bp,cs)>1 ) i--; // ~{\it v} in ocr0_micro()
2155 if( y<dy/2 && (j<1 && j>2) ) i--; in ocr0_micro()
2156 if( y>dy/2 && j!=1 ) i--; in ocr0_micro()
2158 for(i=dy/16+1,y=dy/8;y<dy-(box1->m4-box1->m3)-dy/4 && i;y++){ // 12%+1 Fehler in ocr0_micro()
2160 if( y>dy/2 && (j<1 && j>2) ) i--; in ocr0_micro()
2161 if( y<dy/2 && j!=1 ) i--; in ocr0_micro()
2164 if( get_bw( x, x, y0, y0+dy/4,box1->p,cs,1) != 1 ) i=0; in ocr0_micro()
2167 if( get_bw( x, x,y0+dy/4,y1-dy/2,box1->p,cs,3) != 2 ) i--; in ocr0_micro()
2169 if( num_cross(0 ,dx/2, dy/4, dy/4,bp,cs)!=1 ) break; in ocr0_micro()
2170 if( num_cross(dx-dx/2,dx-1,dy-dy/2,dy-dy/2,bp,cs)!=1 ) break; in ocr0_micro()
2171 if( get_bw( (dx+2)/4,dx-1,dy-2-3*dy/16,dy-1,bp,cs,1) == 1 ) break; in ocr0_micro()
2172 if( num_cross(0,dx/4,dy-1,dy-1,bp,cs)!=1 ) break; in ocr0_micro()
2185 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_vV() local
2190 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_vV()
2194 y=loop(bp, x,0,(dy+1)/2,cs,0,DO)-1; // (x,y) should be in the gap in ocr0_vV()
2195 if (x>3*dx/4 || y<dy/4) Break; in ocr0_vV()
2198 if( get_bw(x0+x,x0+x,y1-dy/2,y1, box1->p,cs,1) != 1 ) Break; in ocr0_vV()
2199 if( get_bw(x0+x, x0+x ,y0, y0+dy/3,box1->p,cs,1) == 1 ) // it v? in ocr0_vV()
2200 if( get_bw(x0+x+1,x0+x+1,y0, y0+dy/3,box1->p,cs,1) == 1 ) Break; in ocr0_vV()
2203 if(((num_cross( 0,dx/2+1,dy/ 8,dy/ 8,bp,cs)!=1) in ocr0_vV()
2204 && (num_cross( 0,dx/2+1,dy/16,dy/16,bp,cs)!=1) // it v in ocr0_vV()
2205 && (num_cross(dx/2+1,dx -1,dy/ 8,dy/ 8,bp,cs)!=1)) /* () added on Sep00 */ in ocr0_vV()
2206 || ((num_cross( 0,dx-1,dy-1-dy/8,dy-1-dy/8,bp,cs)> 1) in ocr0_vV()
2207 && (num_cross( 0,dx-1,dy-1 ,dy-1 ,bp,cs)> 1)) ) Break; in ocr0_vV()
2209 if( get_bw(0 ,dx/8,dy-1-dy/6,dy-1,bp,cs,1)==1 ) Break; in ocr0_vV()
2210 if( get_bw(dx-1-dx/8,dx-1,dy-1-dy/6,dy-1,bp,cs,1)==1 ) Break; in ocr0_vV()
2211 if( loop(bp,0 ,dy/6 ,dx,cs,0,RI) in ocr0_vV()
2212 >=loop(bp,0 ,dy-1-dy/3,dx,cs,0,RI) && dy>6 ) Break; in ocr0_vV()
2213 if( loop(bp,0 ,dy-1-dy/3,dx,cs,0,RI) in ocr0_vV()
2214 >loop(bp,0 ,dy-1-dy/8,dx,cs,0,RI) in ocr0_vV()
2215 && loop(bp,dx-1,dy-1-dy/3,dx,cs,0,LE) in ocr0_vV()
2216 >loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE) ) Break; // better OR ? in ocr0_vV()
2217 if( loop(bp,0 ,dy-1-dy/3,dx,cs,0,RI) in ocr0_vV()
2218 >=loop(bp,0 ,dy-1-dy/8,dx,cs,0,RI) in ocr0_vV()
2219 && loop(bp,dx-1,dy-1-dy/3,dx,cs,0,LE) in ocr0_vV()
2220 >=loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE) ) ad=99*ad/100; // font21 in ocr0_vV()
2221 if( loop(bp,dx-1,dy/6 ,dx,cs,0,LE) in ocr0_vV()
2222 >=loop(bp,dx-1,dy-1-dy/3,dx,cs,0,LE) && dy>6 ) Break; in ocr0_vV()
2223 x=loop(bp,0,dy-1,dx,cs,0,RI); // 3*x>dx changed to 2*x>dx May2001 JS in ocr0_vV()
2224 x=loop(bp,x,dy-1,dx,cs,1,RI); if ( dx>14 && 2*x>dx ) Break; // U in ocr0_vV()
2225 if( num_cross(0 ,dx/2, dy/4, dy/4,bp,cs)==2 in ocr0_vV()
2226 && num_cross(dx-dx/2,dx-1,dy-dy/4,dy-dy/4,bp,cs)==2 ) Break; // ~{\it u} in ocr0_vV()
2230 i=loop(bp, 0,dy-1-dy/16,dx,cs,0,RI) in ocr0_vV()
2231 +loop(bp,dx-1,dy-1-dy/16,dx,cs,0,LE); in ocr0_vV()
2232 j=loop(bp, 0,dy-1-dy/4 ,dx,cs,0,RI) in ocr0_vV()
2233 +loop(bp,dx-1,dy-1-dy/4 ,dx,cs,0,LE); in ocr0_vV()
2234 if( box1->m1 && hchar && dy>15 && j>=i-dx/32 ) Break; // ~Y in ocr0_vV()
2241 i=loop(bp, 0,dy/4,dx,cs,0,RI); in ocr0_vV()
2242 i=loop(bp, i,dy/4,dx,cs,1,RI); i2=i; in ocr0_vV()
2243 i=loop(bp, 0,dy ,dx,cs,0,RI); in ocr0_vV()
2244 i=loop(bp, i,dy ,dx,cs,1,RI); i3=i; // thickness in ocr0_vV()
2245 i=loop(bp, 0,dy-1,dx,cs,0,RI); in ocr0_vV()
2246 i=loop(bp, i,dy-1,dx,cs,1,RI); if(i>i3) i3=i; // thiggest in ocr0_vV()
2253 if( num_cross(0,dx-1,dy-1-dy/4,dy-1-dy/4,bp,cs)==1 ){ in ocr0_vV()
2254 j=loop(bp, 0,dy-1-dy/4 ,dx,cs,0,RI); in ocr0_vV()
2255 j=loop(bp, j,dy-1-dy/4 ,dx,cs,1,RI); in ocr0_vV()
2262 if( loop(bp,0 ,dy-1-dy/4,dx,cs,0,RI) in ocr0_vV()
2263 >loop(bp,0 ,dy-1 ,dx,cs,0,RI) ) ad=96*ad/100; in ocr0_vV()
2279 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_rR() local
2283 for(ad=d=100;dy>3 && dx>1;){ // dy>dx, 4x6 font, dx=2 smallest prop-font in ocr0_rR()
2286 && ( sdata->holes.hole[0].y1 > dy/2 // tiny hole in upper left in ocr0_rR()
2289 if( 2*dy<box1->m3-box1->m1) Break; in ocr0_rR()
2291 if( loop(bp,dx-1,dy/2,dx,cs,0,LE)<=dx/8 ) Break; in ocr0_rR()
2292 x= loop(bp,dx-1,dy/2,dx,cs,0,LE); if (x<=dx/2) ad=99*ad/100; // ~t in ocr0_rR()
2293 if (loop(bp,dx-1-x/2,0,dy,cs,0,DO)>dy/8) ad=99*ad/100; // ~t in ocr0_rR()
2295 if( loop(bp,dx-1,dy/2,dx,cs,0,LE)<=dx/8+2 ) Break; // ~v Jun00 in ocr0_rR()
2297 i=dy-(dy+20)/32; // ignore dust on the ground in ocr0_rR()
2299 for( y=4*dy/8; y<i; y++ ){ // center down v-line in ocr0_rR()
2300 if( y<dy-2*dy/8 && num_cross(0,dx-1,y,y,bp,cs) !=1 ) break; in ocr0_rR()
2309 if( get_bw(x,x,0,(dy+2)/4,bp,cs,1) !=1 ) break; } in ocr0_rR()
2312 if( loop(bp,dx-1,dy-1-dy/4,dx,cs,0,LE)>5*dx/8 // not a C in ocr0_rR()
2313 && get_bw(dx-1-dx/8,dx-1,dy-1-dy/4,dy-1,bp,cs,1) ==1 ) Break; in ocr0_rR()
2315 if( loop(bp, 0,5*dy/8,dx,cs,0,RI)<=dx/8 in ocr0_rR()
2316 && loop(bp,dx-1,5*dy/8,dx,cs,0,LE)>=5*dy/8 in ocr0_rR()
2317 && loop(bp,dx/2, dy-1,dy,cs,0,UP)<=dy/8 ) Break; // ~c in ocr0_rR()
2319 if( loop(bp, 0,3*dy/8,dx,cs,0,RI) in ocr0_rR()
2320 > loop(bp,dx-1,3*dy/8,dx,cs,0,LE)+dx/8 ) { in ocr0_rR()
2321 if( loop(bp, 0, dy/8,dx,cs,0,RI)<dx/8 ) Break; // ~z (broken) in ocr0_rR()
2325 if( loop(bp,0,dy/3,dx,cs,0,RI)>3*dx/4 ) Break; // ~i in ocr0_rR()
2326 if( loop(bp,0,dy/4,dx,cs,0,RI)>3*dx/8 // ~I in ocr0_rR()
2327 && get_bw(0,dx/8,0,dy/4,bp,cs,1) ==1 ) Break; in ocr0_rR()
2328 if( num_cross(0,dx-1,dy/2, dy/2 ,bp,cs)!=1 in ocr0_rR()
2329 && num_cross(0,dx-1,dy/2+1,dy/2+1,bp,cs)!=1 ) Break; // ~n 024a3 in ocr0_rR()
2332 for(y=3*dy/4;y<dy-1;y++) in ocr0_rR()
2334 && num_cross(0,dx-1,y+1+dy/32,y+1+dy/32,bp,cs)==2 ) break; // ~t in ocr0_rR()
2335 if(y<dy-1) Break; in ocr0_rR()
2336 if (loop(bp,dx-1-dx/4,dy-1,dx,cs,0,UP)<dy/4) ad=98*ad/100; // ~f (serif) in ocr0_rR()
2337 if( num_cross(dx-1,dx-1,0,3*dy/4,bp,cs)>1 ) ad=95*ad/100; // ~f in ocr0_rR()
2338 if( num_cross(dx/2 ,dx/2 ,0,dy-1,bp,cs)>2 in ocr0_rR()
2339 && num_cross(dx/2+1,dx/2+1,0,dy-1,bp,cs)>2 ) Break; // ~f in ocr0_rR()
2348 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_rR()
2351 if( num_cross(x0,x1,y1-dy/8,y1-dy/8, box1->p,cs) < 2 ) Break; // ~P in ocr0_rR()
2352 if (loop(bp, dx/2, dy/4,dy,cs,0,DO)>dy/2) Break; // ~C in ocr0_rR()
2353 if (loop(bp, dx/2, 0,dy,cs,0,DO)>dy/8 in ocr0_rR()
2354 && loop(bp, dx/2,dy/16,dx,cs,0,RI)<dx/2 in ocr0_rR()
2355 && dy>=16 ) Break; in ocr0_rR()
2356 for(i=1,y=y0+dy/8;y<=y1-dy/8 && i;y++){ // left v-line in ocr0_rR()
2360 if( get_bw( x, x, y0, y0+dy/4,box1->p,cs,1) != 1 ) i=0; in ocr0_rR()
2363 i=loop(box1->p,x,y1,dy,cs,0,UP); in ocr0_rR()
2365 if (i>0) { i2=loop(box1->p,x-1,y1-i-1,dy,cs,0,UP); in ocr0_rR()
2368 } if( y<=dy/8 ) Break; if (y<dy/4) ad=80*ad/100; in ocr0_rR()
2372 for(i=1,y=y0;y<=y0+3*dy/8 && i;y++){ // upper 2 vert lines in ocr0_rR()
2375 for(i=1,y=y0+dy/3;y<=y1-dy/3 && i;y++){ // midle h line in ocr0_rR()
2378 for(i=1,y=y1-dy/4;y<=y1 && i;y++){ // lower 2 vert lies in ocr0_rR()
2381 if( get_bw(x1-dx/3,x1,y0,y0+dy/4,box1->p,cs,1) != 1 ) Break; // pixel ru in ocr0_rR()
2382 x=loop(bp,dx-1, dy/4,dx,cs,0,LE); if(x>dx/2) Break; i=x; // ru in ocr0_rR()
2383 x=loop(bp,dx-1, dy/2,dx,cs,0,LE); if(x<=i ) Break; i=x; // rc in ocr0_rR()
2384 x=loop(bp,dx-1, 5*dy/8,dx,cs,0,LE); if(x>i ) i=x; in ocr0_rR()
2385 x=loop(bp,dx-1, 6*dy/8,dx,cs,0,LE); if(x>i ) i=x; in ocr0_rR()
2386 x=loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE); if(x>=i ) Break; // rd in ocr0_rR()
2388 i1=loop(bp,0, dy/4,dx,cs,0,RI); // straight in ocr0_rR()
2389 i2=loop(bp,0, dy/2,dx,cs,0,RI); in ocr0_rR()
2390 i3=loop(bp,0,dy-1-dy/4,dx,cs,0,RI); if( abs(i1+i3-2*i2)>1+dx/16 ) Break; in ocr0_rR()
2391 if (dy>15) in ocr0_rR()
2392 if (loop(bp,dx-1, dy/2,dx,cs,0,LE)>=loop(bp,dx-1, dy-1,dx,cs,0,LE) in ocr0_rR()
2393 && loop(bp,dx-1,3*dy/16,dx,cs,0,LE)>=loop(bp,dx-1,dy/16,dx,cs,0,LE)+dx/8 ) Break; // ~ff in ocr0_rR()
2394 if (dy>7) in ocr0_rR()
2395 if (loop(bp,dx-1,dy-2 ,dx,cs,0,LE) in ocr0_rR()
2396 >loop(bp,dx-1,dy-2-dy/8,dx,cs,0,LE)) { in ocr0_rR()
2398 if (loop(bp,dx-1,dy-1-dy/4,dx,cs,0,LE)==0 in ocr0_rR()
2399 && loop(bp,dx-1,dy-2-dy/8,dx,cs,0,LE)>0 ) Break; // broken B ?? in ocr0_rR()
2403 i=num_hole (x0,x1,y0,y1-dy/3,box1->p,cs,NULL); in ocr0_rR()
2410 if (sdata->holes.hole[0].y1 > 3*dy/4) ad=95*ad/100; // alpha in ocr0_rR()
2426 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_m() local
2430 for(ad=d=100;dx>4 && dy>3;){ in ocr0_m()
2434 x =loop(bp,dx-1,dy/2,dx,cs,0,LE); if(3*x>dx) Break; // ~K in ocr0_m()
2435 y=dy/2; in ocr0_m()
2441 for (i=0,y=dy-1-dy/8;y>dy/2;y--) { in ocr0_m()
2444 for ( ;y>dy/2;y--) { in ocr0_m()
2447 if (y> dy/2) handwritten=10; in ocr0_m()
2448 if (y>3*dy/4) handwritten=60; in ocr0_m()
2471 i =loop(bp,0,5*dy/8,dx,cs,0,RI); in ocr0_m()
2472 i =loop(bp,i,5*dy/8,dx,cs,1,RI); in ocr0_m()
2473 x =loop(bp,0,dy-dy/32-1,dx,cs,0,RI); in ocr0_m()
2474 x =loop(bp,x,dy-dy/32-1,dx,cs,1,RI); in ocr0_m()
2477 i=loop(bp,x,dy-1,dy,cs,0,UP); if (i>y) y=i; in ocr0_m()
2479 if(y<dy/4 || y<y1-y0-i5-1-dy/16) Break; // no gap detected in ocr0_m()
2481 i=loop(bp,x,dy-1,dy,cs,0,UP); if (i>y) y=i; in ocr0_m()
2483 if(y<dy/4) Break; // no gap detected in ocr0_m()
2484 for(x=i1;x<i4;x++) if( loop(bp,x,0,dy,cs,0,DO)>=dy/2 ) break; in ocr0_m()
2489 i=loop(bp,x,0,dy,cs,0,DO); in ocr0_m()
2490 i=loop(bp,x,i,dy,cs,1,DO); // measure thickness in ocr0_m()
2498 if( loop(bp,dx-1,dy/16,dx,cs,0,LE)<2 in ocr0_m()
2499 && loop(bp,dx-1,dy/4 ,dx,cs,0,LE)>3 ) Break; // melted WT in ocr0_m()
2501 x=loop(bp,dx-1,dy/2,dx,cs,0,LE); in ocr0_m()
2502 if (x>2 && loop(bp,dx-1-x/2,0,dy,cs,0,DO)<dy/2) Break; // melt toc in ocr0_m()
2503 if (loop(bp,(i3+i4)/2,0,dy,cs,0,DO)>dy/2) Break; // N in ocr0_m()
2506 if( loop(bp,1, dy/4,dx,cs,0,RI) in ocr0_m()
2507 >loop(bp,0,7*dy/8,dx,cs,0,RI) ) in ocr0_m()
2511 x =loop(bp,0,dy/4,dx,cs,0,RI); in ocr0_m()
2512 x+=loop(bp,x,dy/4,dx,cs,1,RI); in ocr0_m()
2514 i=loop(bp,x,0,dy,cs,0,DO); in ocr0_m()
2515 if (i>=dy/4) ad=99*ad/100; in ocr0_m()
2516 if (i>(dy+2)/4) ad=95*ad/100; in ocr0_m()
2517 if (3*i>dy) Break; in ocr0_m()
2536 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_tT() local
2540 for(ad=d=100;dx>2 && dy>3;){ // dx>1 dy>2*dx in ocr0_tT()
2544 i1= loop (bp, dx/8,0,dy,cs,0,DO); // left side in ocr0_tT()
2545 i2= loop (bp,dx-1-dx/8,0,dy,cs,0,DO); // right side in ocr0_tT()
2546 i3= loop (bp, dx/8,i1,dy,cs,1,DO); // left side in ocr0_tT()
2547 i4= loop (bp,dx-1-dx/8,i2,dy,cs,1,DO); // right side in ocr0_tT()
2548 if (i1>dy/4 || i2>dy/4) Break; in ocr0_tT()
2550 i= loop (bp,x,0,dy,cs,0,DO); in ocr0_tT()
2551 if (i>i1+dy/8 && i>i2+dy/8) break; in ocr0_tT()
2552 if (i<i1-dy/8 && i<i2-dy/8) break; in ocr0_tT()
2554 if( get_bw( 0,dx-1, dy/2, dy/2,bp,cs,1) != 1 ) Break; in ocr0_tT()
2555 if( get_bw( 0,(dx-1)/8, dy/2,dy-1-dy/8,bp,cs,1) == 1 ) Break; in ocr0_tT()
2556 if( get_bw( 0,3*dx/16, dy/2,dy-1-dy/4,bp,cs,1) == 1 ) Break; in ocr0_tT()
2557 if( get_bw(dx-1-dx/4,dx-1, dy/2,dy-1-dy/4,bp,cs,1) == 1 ) Break; in ocr0_tT()
2559 for( y=dy/4;y<3*dy/4;y++){ // oberer Balken? in ocr0_tT()
2563 } if (y<3*dy/4) Break; // Jan07 in ocr0_tT()
2565 for( y=3*dy/4;y<dy;y++){ in ocr0_tT()
2568 } if( y<dy ) Break; in ocr0_tT()
2570 i =dx/4+loop(bp,dx/4,dy/4,dx,cs,0,RI);if(i>3*dx/4) Break; // ~7 in ocr0_tT()
2571 i+= loop(bp,i ,dy/4,dx,cs,1,RI);if(i>3*dx/4) Break; in ocr0_tT()
2573 if( num_cross(0,dx-1, dy-1, dy-1,bp,cs) != 1 in ocr0_tT()
2574 && num_cross(0,dx-1, dy-2, dy-2,bp,cs) != 1 ) Break; in ocr0_tT()
2575 if( num_cross(0,dx-1,2*dy/3,2*dy/3,bp,cs) != 1 in ocr0_tT()
2576 && num_cross(0,dx-1,2*dy/3,2*dy/3,bp,cs) != 1 ) Break; in ocr0_tT()
2578 && loop(bp,0, 0,dy/2,cs,0,DO)>=dy/4 in ocr0_tT()
2579 && loop(bp,0,dy-1,dy ,cs,0,UP)<=dy/2) ad=96*ad/100; // ~J in ocr0_tT()
2581 if( loop(bp,0,dy-1,dx,cs,0,RI)<=dx/8) ad=99*ad/100; // ~J in ocr0_tT()
2582 i = loop(bp,0,dy/2,dx,cs,0,RI); in ocr0_tT()
2583 j = loop(bp,i,dy/2,dx,cs,1,RI); in ocr0_tT()
2593 for(ad=d=100;dx>1 && dy>=box1->m3-box1->m2-1;){ // sometimes no hchar! in ocr0_tT()
2596 if (dy<=box1->m3-box1->m2+1) ad=96*ad/100; // bad line detection? in ocr0_tT()
2597 for(x=0,yb=j=y=dy/32+3*dy/16;y<5*dy/8;y++)if(y>0){ // upper cross line in ocr0_tT()
2602 if( y<11*dy/16 in ocr0_tT()
2604 && ( num_cross(0,dx-1,y+dy/8,y+dy/8,bp,cs) != 1 || dy<13) // against noise in ocr0_tT()
2606 } if( y<4*dy/8 ) Break; in ocr0_tT()
2607 if (dy>12 && x>4 && x>dx/2 && yb<=(dy+4)/8) in ocr0_tT()
2608 if ( loop(bp,dx-1-3*x/4,yb,dy,cs,1,UP) in ocr0_tT()
2609 <=loop(bp,dx-1-1*x/4,yb,dy,cs,1,UP)+1 ) in ocr0_tT()
2610 if ( loop(bp,0 ,dy/2,dy,cs,1,UP)>dx/8 ) Break; // ~C in ocr0_tT()
2613 if (x>=dx && 9*dx>=8*dy) { ad=99*ad/100; } // + in ocr0_tT()
2616 for(y=0;y<dy/4;y++){ in ocr0_tT()
2621 if( y<dy/4 ) Break; // ~f in ocr0_tT()
2624 for(y=dy/8;y<yb;y++) in ocr0_tT()
2628 j=loop(bp,0, dy/2,dx,cs,0,RI); in ocr0_tT()
2629 j=loop(bp,j, dy/2,dx,cs,1,RI); i=j; // thickness in ocr0_tT()
2630 j=loop(bp,0, dy/4,dx,cs,0,RI); in ocr0_tT()
2631 j=loop(bp,j, dy/4,dx,cs,1,RI); if (j<i) i=j; // thickness in ocr0_tT()
2632 j=loop(bp,0,3*dy/4,dx,cs,0,RI); in ocr0_tT()
2633 j=loop(bp,j,3*dy/4,dx,cs,1,RI); if (j<i) i=j; // thickness in ocr0_tT()
2636 if( loop(bp,dx-1,dy/2,dx,cs,0,LE)-dx/8 in ocr0_tT()
2648 if( num_cross(0,dx-1,dy-2,dy-2,bp,cs) == 2 in ocr0_tT()
2649 && num_cross(0,dx-1,dy-1,dy-1,bp,cs) == 2 ) Break; // ~* (5er) in ocr0_tT()
2651 if( dy>= 16 in ocr0_tT()
2652 && loop(bp, 0, 3*dy/4,dx,cs,0,RI) in ocr0_tT()
2653 >=loop(bp, 0, dy-2,dx,cs,0,RI) in ocr0_tT()
2654 && loop(bp,dx-1, 3*dy/4,dx,cs,0,LE) in ocr0_tT()
2655 <=loop(bp,dx-1, dy-2,dx,cs,0,LE) in ocr0_tT()
2657 <loop(bp,dx-1,3*dy/16,dx,cs,0,LE) in ocr0_tT()
2659 >loop(bp, 0,3*dy/16,dx,cs,0,RI)+dx/16 in ocr0_tT()
2662 if(dx<8 && dy>12){ // thin f's could easily confound with t in ocr0_tT()
2663 x=loop(bp,dx-1,3*dy/16,dx,cs,0,LE); in ocr0_tT()
2665 if (loop(bp,dx-x,0,dy,cs,0,DO)<3*dy/16 in ocr0_tT()
2666 && loop(bp, 0, 3*dy/4,dx,cs,0,RI)+1 in ocr0_tT()
2667 >=loop(bp, 0, dy-2,dx,cs,0,RI) in ocr0_tT()
2668 && loop(bp,dx-1, 3*dy/4,dx,cs,0,LE) in ocr0_tT()
2669 <=loop(bp,dx-1, dy-2,dx,cs,0,LE) ) Break; in ocr0_tT()
2672 if( num_cross( 0,dx-1,2*dy/3,2*dy/3,bp,cs) > 1 in ocr0_tT()
2673 && num_cross( 0,dx/2,2*dy/3,2*dy/3,bp,cs) > 0 in ocr0_tT()
2674 && num_cross(dx/2,dx-1,2*dy/3,2*dy/3,bp,cs) > 0 ) in ocr0_tT()
2676 if (sdata->holes.hole[0].y0 > dy/4) Break; // ~6 in ocr0_tT()
2679 if( num_cross(0,dx-1,3*dy/4, 3*dy/4, bp,cs) >= 2 in ocr0_tT()
2680 && num_cross(0,dx-1,3*dy/4-1,3*dy/4-1,bp,cs) >= 2 ){ in ocr0_tT()
2682 if (loop(bp,dx/2 ,dy-1,dy,cs,0,UP)>dy/4) Break; // ~h in ocr0_tT()
2683 if (loop(bp,dx/2+1,dy-1,dy,cs,0,UP)>dy/4) Break; // ~h in ocr0_tT()
2686 x= loop(bp,dx-1,dy/2,dx,cs,0,LE); in ocr0_tT()
2687 i= loop(bp,dx-1,dy/8,dx,cs,0,LE); in ocr0_tT()
2688 if (i>x && loop(bp,dx-x,0,dy,cs,0,DO)>=dy/2) ad=90*ad/100; /* ~\ */ in ocr0_tT()
2692 i= loop(bp,0,dy/4,dx,cs,0,RI); in ocr0_tT()
2717 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_sS() local
2722 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 (4x6 font) in ocr0_sS()
2725 if( num_cross( dx/2, dx/2,0,dy-1,bp,cs)!=3 in ocr0_sS()
2726 && num_cross(5*dx/8,3*dx/8,0,dy-1,bp,cs)!=3 in ocr0_sS()
2727 && dy>4 ) Break; in ocr0_sS()
2728 if( num_cross(0,dx-1,dy/2 ,dy/2 ,bp,cs)!=1 in ocr0_sS()
2729 && num_cross(0,dx-1,dy/2-1,dy/2-1,bp,cs)!=1 ) Break; in ocr0_sS()
2731 y=dy/4; in ocr0_sS()
2735 y=11*dy/16; in ocr0_sS()
2737 x +=loop(bp,dx-1-x,y,dx,cs,1,LE); if(dx>5 && dy>7 && x>dx/2) Break; in ocr0_sS()
2740 for( y=dy/4;y<dy/2;y++ ) // Mai00 ~3 in ocr0_sS()
2742 if( y<dy/2 ) Break; in ocr0_sS()
2743 y=dy/2-loop(bp,dx-1,dy/2,dy/2,cs,1,UP); in ocr0_sS()
2747 for(y=dy/4;y<dy/2;y++){ in ocr0_sS()
2750 if(y==dy/2) Break; // Mai00 in ocr0_sS()
2752 y=dy/2+loop(bp,0,dy/2,dy/2,cs,1,DO); in ocr0_sS()
2753 if( !joined(bp,0,y,i2,11*dy/16,cs) ) Break; in ocr0_sS()
2756 if (sdata->holes.hole[0].y0 > dy/4) Break; // ??? in ocr0_sS()
2759 i1=loop(bp,dx-1,dy-1,dx,cs,0,LE); in ocr0_sS()
2760 i2=loop(bp,dx-1,dy-2,dx,cs,0,LE); in ocr0_sS()
2769 i1=loop(bp, 0,dy/2,dx,cs,0,RI); in ocr0_sS()
2770 i1=loop(bp, i1,dy/2,dx,cs,1,RI); in ocr0_sS()
2773 i1=loop(bp,0, dy/16,dx,cs,0,RI); in ocr0_sS()
2774 i2=loop(bp,0,4*dy/16,dx,cs,0,RI); in ocr0_sS()
2775 i3=loop(bp,0,7*dy/16,dx,cs,0,RI); in ocr0_sS()
2779 i1+=loop(bp,i1, dy/16,dx,cs,1,RI); in ocr0_sS()
2780 i2+=loop(bp,i2,4*dy/16,dx,cs,1,RI); in ocr0_sS()
2781 i3+=loop(bp,i3,7*dy/16,dx,cs,1,RI); in ocr0_sS()
2785 for(y=7*dy/16;y<5*dy/8;y++){ in ocr0_sS()
2789 } if(y<5*dy/8) Break; // v0.2.4a5 in ocr0_sS()
2790 if ( loop(bp, dx-1,dy-2-dy/32,dx,cs,0,LE) in ocr0_sS()
2791 > loop(bp, 0, 1+dy/32,dx,cs,0,RI) + dx/4 ) Break; // ~5 Dec00 in ocr0_sS()
2796 if ( loop(bp, dx-1,dy-1-dy/32,dx,cs,0,LE) in ocr0_sS()
2797 > loop(bp, 0, 0+dy/32,dx,cs,0,RI) ) ad=99*ad/100; // ~5 in ocr0_sS()
2798 if ( loop(bp, 0,dy-1-dy/32,dx,cs,0,RI) in ocr0_sS()
2799 > loop(bp, dx-1, 0+dy/32,dx,cs,0,LE) ) ad=99*ad/100; // ~5 in ocr0_sS()
2812 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_gG() local
2818 for(ad=d=100;dx>2 && dy>4;){ // min 3x5 in ocr0_gG()
2821 if( get_bw(x0+dx/2, x0+dx/2, y1-dy/2, y1,box1->p,cs,1) != 1 ) Break; in ocr0_gG()
2822 if( get_bw(x1-dx/4, x1 , y1-dy/4, y1,box1->p,cs,1) != 1 ) Break; // ~p in ocr0_gG()
2823 if( get_bw(x0+dx/2, x0+dx/2, y0, y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_gG()
2829 if (sdata->holes.hole[i].y1 < 5*dy/8+1) break; in ocr0_gG()
2832 for(y=dy/4;y<dy;y++) if( num_cross(0,dx-1,y,y,bp,cs)==2 ) break; in ocr0_gG()
2833 if( y==dy ) Break; // ~q in ocr0_gG()
2834 if( get_bw(0,dx/2,7*dy/8,7*dy/8,bp,cs,1) != 1 ) Break; // ~q in ocr0_gG()
2835 y =loop(bp,dx/16,0,dy,cs,0,DO); if(y<=dy/8) in ocr0_gG()
2836 y+=loop(bp,dx/16,y,dy,cs,1,DO); if(16*y>=15*dy) Break; // ~B in ocr0_gG()
2844 for (x=0,y=dy/4;y<dy-dy/4;y++){ in ocr0_gG()
2845 i=loop(bp,dx-1,y,dy,cs,0,LE); if (i>x) x=i; in ocr0_gG()
2849 if( num_cross(x0,x1 ,y0+dy/4,y0+dy/4,box1->p,cs) > 2 in ocr0_gG()
2850 || num_cross(x0,x1 ,y0+dy/8,y0+dy/8,box1->p,cs) > 2) ad=90*ad/100; in ocr0_gG()
2851 if( num_cross(x0,x1+dx/4,y1-dy/4,y1-dy/4,box1->p,cs) > 2 in ocr0_gG()
2852 || num_cross(x0,x1+dx/4,y1-dy/8,y1-dy/8,box1->p,cs) > 2) ad=90*ad/100; in ocr0_gG()
2854 if( num_cross(0,dx-1,dy/2,dy/2,bp,cs) >2 ) ad=99*ad/100; // ~/o in ocr0_gG()
2857 for (y=0;y<dy;y++) for (x=0;x<dx/2;x++) in ocr0_gG()
2858 if ((getpixel(bp,x,y)<cs)!=(getpixel(bp,dx-1-x,y)<cs)) { y=dy+1; break; } in ocr0_gG()
2859 if (y==dy) Break; /* ~8 */ in ocr0_gG()
2869 for(ad=d=100;dx>3 && dy>4;){ // min 3x4 in ocr0_gG()
2872 if( get_bw(x0 ,x0+dx/2,y0+dy/3,y0+dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_gG()
2873 if( get_bw(x0+dx/2,x1-dx/4,y0 ,y0+dy/4,box1->p,cs,1) != 1 ) Break; in ocr0_gG()
2874 if( get_bw(x0+dx/2,x0+dx/2,y1-dy/4,y1 ,box1->p,cs,1) != 1 ) Break; in ocr0_gG()
2875 if( get_bw(x0 ,x0+dx/2,y1-dy/3,y1-dy/3,box1->p,cs,1) != 1 ) Break; // ~S in ocr0_gG()
2876 for( y=y0+dy/4;y<y1-dy/3;y++ ) in ocr0_gG()
2878 if( y==y1-dy/3 ) Break; // no gap in ocr0_gG()
2885 if( y<y0+dy/4 ) Break; // filter W in ocr0_gG()
2887 x=x1; y=y1-dy/3; // upper right offen bow in ocr0_gG()
2892 x=x1; y=y1-dy/4; in ocr0_gG()
2899 if( y<y0+3*dy/8 ) Break; in ocr0_gG()
2900 if( y>y1-dy/4 ) Break; in ocr0_gG()
2903 turmite(box1->p,&x,&y,x0,x1,y0+dy/4,y1,cs,LE,UP); // w=LE b=UP in ocr0_gG()
2904 if( y>y0+dy/4+1 ) Break; /* leave box below for S or on top for CG */ in ocr0_gG()
2912 if( dx>4 && dy>6){ // no (<[ in ocr0_gG()
2913 for(i=1,y=0;i && y<dy/3;y++) in ocr0_gG()
2916 for(i=1,y=0;i && y<dy/3;y++) in ocr0_gG()
2917 if( num_cross(0,dx-1,dy-1-y,dy-1-y,bp,cs) == 2 ) i=0; in ocr0_gG()
2920 for(i=1,y=dy/2;i && y<dy;y++) in ocr0_gG()
2923 for(i=0,y=3*dy/4;y<dy;y++){ in ocr0_gG()
2927 } if( y<dy ) Break; in ocr0_gG()
2930 for(i=0,i1=y=dy/4;y<dy-dy/4;y++){ // look for horizontal line in ocr0_gG()
2933 } if( i1<=dy/4 || i1>=dy-dy/4 ) Break; // around the middle ? in ocr0_gG()
2942 for(y=dy/2;y<dy-1 && i;y++){ // .@ in ocr0_gG()
2956 for(ad=d=100;dx>2 && dy>4;){ // dx>1 dy>2*dx in ocr0_gG()
2961 for( x=0,i=y=y0+dy/2;y<=y1-3*dy/16;y++){ // suche kerbe in ocr0_gG()
2972 if( loop(box1->p,x0,y1 ,dy,cs,0,RI)>dx/3 && in ocr0_gG()
2973 loop(box1->p,x0,y1-1,dy,cs,0,RI)>dx/3) Break; // no q in ocr0_gG()
2974 for( x=0,i=y=y0+dy/3;y<=y1-dy/3;y++){ // suche kerbe in ocr0_gG()
2978 i1=loop(bp,dx-1,dy/8 ,dx,cs,0,LE); if(i1>dx/2) Break; in ocr0_gG()
2979 i3=loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE); in ocr0_gG()
2980 i2=loop(bp,dx-1,dy/2 ,dx,cs,0,LE); if(i1+i3<2*i2-dx/8) Break; // konvex in ocr0_gG()
2981 i1=loop(bp,dx-1,dy/4 ,dx,cs,0,LE); if(i1>dx/2) Break; in ocr0_gG()
2982 i3=loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE); in ocr0_gG()
2983 for(y=dy/4;y<dy-1-dy/4;y++){ in ocr0_gG()
2986 } if(y<dy-1-dy/4) Break; in ocr0_gG()
2987 x=loop(bp,dx -1,6*dy/8,dx,cs,0,LE); if(x>0){ x--; // robust in ocr0_gG()
2988 y=loop(bp,dx-x-1, dy-1,dy,cs,0,UP); in ocr0_gG()
2989 if(y<dy/8) Break; // ~q (serif!) in ocr0_gG()
2992 if( num_cross(x0,x1 ,y0+dy/4,y0+dy/4,box1->p,cs) > 2) ad=90*ad/100; in ocr0_gG()
2993 if( num_cross(x0,x1+dx/4,y1-dy/4,y1-dy/4,box1->p,cs) > 2 in ocr0_gG()
2994 || num_cross(x0,x1+dx/4,y1-dy/8,y1-dy/8,box1->p,cs) > 2) ad=90*ad/100; in ocr0_gG()
3012 int dx=x1-x0+1, dy=y1-y0+1, /* size */ in ocr0_xX() local
3019 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_xX()
3032 if (aa[1][1]-aa[0][1]<dy/2) Break; in ocr0_xX()
3033 if (aa[2][1]-aa[3][1]<dy/2) Break; in ocr0_xX()
3045 if (abs(aa[0][1]+aa[1][1]+aa[2][1]+aa[3][1]-4*y)>(dy+2)) Break; in ocr0_xX()
3070 if (abs(aa[0][1]+aa[1][1]+aa[2][1]+aa[3][1]-4*y)>(dy+2)) Break; in ocr0_xX()
3090 if (abs(aa[0][1]+aa[1][1]+aa[2][1]+aa[3][1]-4*y)>(dy+2)) Break; in ocr0_xX()
3115 if (abs(aa[0][1]+aa[1][1]+aa[2][1]+aa[3][1]-4*y)>(dy+2)) Break; in ocr0_xX()
3136 for(ad=d=99;dx>4 && dy>4;){ // min 3x4 in ocr0_xX()
3139 if( get_bw(x0,x0+dx/4,y0+dy/2,y0+dy/2,box1->p,cs,1) != 0 ) Break; in ocr0_xX()
3140 if( get_bw(x1-dx/4,x1,y0+dy/2,y0+dy/2,box1->p,cs,1) != 0 ) Break; in ocr0_xX()
3141 if( num_cross(x0+dx/4,x1-dx/4,y0+dy/2,y0+dy/2, box1->p,cs) != 1 ) Break; in ocr0_xX()
3142 if( num_cross(x0,x1,y0+dy/4,y0+dy/4, box1->p,cs) != 3 in ocr0_xX()
3143 && num_cross(x0,x1,y0+dy/8,y0+dy/8, box1->p,cs) < 3 ) Break; in ocr0_xX()
3144 if( num_cross(x0,x1,y1-dy/4,y1-dy/4, box1->p,cs) != 3 in ocr0_xX()
3145 && num_cross(x0,x1,y1-dy/8,y1-dy/8, box1->p,cs) < 3 ) Break; in ocr0_xX()
3161 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_yY() local
3166 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_yY()
3170 if( num_cross(0,dx-1,dy/8,dy/8,bp,cs) < 2 in ocr0_yY()
3172 if( num_cross(0,dx-1,dy-1,dy-1,bp,cs) != 1 in ocr0_yY()
3173 && num_cross(0,dx-1,dy-2,dy-2,bp,cs) != 1 ) Break; in ocr0_yY()
3174 if( num_cross(dx-1,dx-1,0,dy-1,bp,cs) != 1 in ocr0_yY()
3175 && num_cross(dx-2,dx-2,0,dy-1,bp,cs) != 1 ) Break; in ocr0_yY()
3176 if( num_cross(dx/3,dx/3,dy/4,dy-1,bp,cs) != 2 in ocr0_yY()
3177 && num_cross(dx/2,dx/2,dy/4,dy-1,bp,cs) != 2 ) Break; in ocr0_yY()
3179 i=loop(bp,x,0,dy,cs,0,DO); if(i>y){ yc=y=i;xc=x; } in ocr0_yY()
3180 } if( y>12*dy/16 || y<3*dy/8 ) Break; in ocr0_yY()
3181 ya=dy/8; xa=xc-loop(bp,xc,ya,dx,cs,0,LE); if(xa< 0) Break; in ocr0_yY()
3182 yb=dy/8; xb=xc+loop(bp,xc,yb,dx,cs,0,RI); if(xb>=dx) Break; in ocr0_yY()
3183 for(y=dy/8;y<yc-dy/8;y++){ in ocr0_yY()
3186 } if(y<yc-dy/8) Break; in ocr0_yY()
3187 yd=dy-1-dy/8;xd=dx-1-loop(bp,dx-1,yd,dx,cs,0,LE); in ocr0_yY()
3196 if (loop(bp,dx-1,dy-1,dx,cs,0,LE)<1) Break; in ocr0_yY()
3203 if(hchar && (!gchar || dy<14)) bc='Y'; else ad=98*ad/100; // SMALL-CAPS ??? in ocr0_yY()
3208 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_yY()
3211 if( get_bw(x0,x0,y1-dy/8,y1,box1->p,cs,1) == 1 ) { in ocr0_yY()
3212 if( get_bw(x0,x0+4*dx/8,y0+dy/8,y0+dy/8,box1->p,cs,1) != 1 ) Break; in ocr0_yY()
3214 if( get_bw(x0,x0+3*dx/8,y0+dy/8,y0+dy/8,box1->p,cs,1) != 1 ) Break; in ocr0_yY()
3216 if( num_cross(0,dx-1,dy/8,dy/8,bp,cs) != 2 in ocr0_yY()
3219 if( num_cross(0,dx-1,dy-1,dy-1,bp,cs) != 1 in ocr0_yY()
3220 && num_cross(0,dx-1,dy-2,dy-2,bp,cs) != 1 ) Break; in ocr0_yY()
3221 if( num_cross(dx-1,dx-1,0,dy-1,bp,cs) != 1 in ocr0_yY()
3222 && num_cross(dx-2,dx-2,0,dy-1,bp,cs) != 1 in ocr0_yY()
3223 && num_cross(dx-dx/8-1,dx-dx/8-1,0,dy-1,bp,cs) != 1 ) Break; in ocr0_yY()
3224 if( loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE)+dx/8+1 // Jul00 in ocr0_yY()
3225 < loop(bp, 0,dy-1-dy/8,dx,cs,0,RI) ) Break; in ocr0_yY()
3227 i=loop(bp,x,0,dy,cs,0,DO); if(i>y) y=i; in ocr0_yY()
3228 } if( y>10*dy/16 || y<2*dy/8 ) Break; in ocr0_yY()
3229 for(xc=xb=xa=dx,yc=yb=ya=y=0;y<dy/4;y++){ in ocr0_yY()
3233 if(yb>dy/8) Break; in ocr0_yY()
3234 for(i=dx,yc=y=dy/4;y<3*dy/4;y++){ in ocr0_yY()
3239 } yc+=dy/16+1; in ocr0_yY()
3243 yd=dy-1-dy/8;xd=dx-1-loop(bp,dx-1,yd,dx,cs,0,LE); if(xd>6*dx/8) Break; in ocr0_yY()
3245 for (i=0,x=dx-1;i<dy/4;i++) { in ocr0_yY()
3246 j=loop(bp,dx-1,dy-1-i,dx,cs,0,LE); in ocr0_yY()
3249 } if (i<dy/4) xd-=loop(bp,xd,yd,dx,cs,1,LE)/2; in ocr0_yY()
3265 yb+=loop(bp,xb,yb,dy/8,cs,1,DO)-1; in ocr0_yY()
3272 if( yc>=5*dy/8 && !gchar) in ocr0_yY()
3276 xa=loop(bp,0,dy/8,dx,cs,0,RI); in ocr0_yY()
3277 xb=loop(bp,0,dy/2,dx,cs,0,RI); in ocr0_yY()
3278 xc=loop(bp,0,dy-1,dx,cs,0,RI); in ocr0_yY()
3299 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_zZ() local
3305 for(ad=d=100;dx>3 && dy>3;){ // dy>dx in ocr0_zZ()
3318 if (aa[1][1]-aa[0][1]<dy/2) Break; in ocr0_zZ()
3319 if (aa[2][1]-aa[3][1]<dy/2) Break; in ocr0_zZ()
3322 if (aa[3][1]-y0>dy/8) ad=99*ad/100; in ocr0_zZ()
3323 if (aa[0][1]-y0>dy/8) ad=99*ad/100; in ocr0_zZ()
3324 if (2*dx<dy) ad=99*ad/100; in ocr0_zZ()
3338 if (y-y0 > 5*dy/8) Break; in ocr0_zZ()
3346 if ( box1->frame_vector[i3][1]-y0> dy/4 in ocr0_zZ()
3348 if ( box1->frame_vector[i3][1]-y> dy/8 in ocr0_zZ()
3350 if ( box1->frame_vector[i3][1]-y> dy/8 in ocr0_zZ()
3388 if (y-y0 < 3*dy/8) Break; in ocr0_zZ()
3424 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_wW() local
3429 for(ad=d=100;dx>3 && dy>3;){ // dy<=dx in ocr0_wW()
3439 for(y=dy/8;y< dy/2;y++) if( num_cross(0,dx-1,y,y,bp,cs)< 2 ) break; in ocr0_wW()
3440 if(y<dy/2) Break; in ocr0_wW()
3441 yb=dy-1; in ocr0_wW()
3443 for(y=dy-1-dy/16;y>3*dy/4;y--) in ocr0_wW()
3445 if(y==3*dy/4) Break; in ocr0_wW()
3448 t1=loop(bp,0 ,dy/4,dx,cs,0,RI); in ocr0_wW()
3449 t1=loop(bp,t1,dy/4,dx,cs,1,RI); // thickness of line? in ocr0_wW()
3450 for(i=j=0 ;y> dy/4;y--) if( num_cross(0,dx-1,y,y,bp,cs)==4 ) i++; in ocr0_wW()
3452 if(i+5<dy/4 && 7*t1<dy) Break; // only for large letters in ocr0_wW()
3453 if(i+j==0 && (dy>6 || dx>4)) Break; in ocr0_wW()
3455 if (abs(loop(bp, 1,dy-1,dy,cs,0,UP) in ocr0_wW()
3456 -loop(bp,dx-2,dy-1,dy,cs,0,UP))>dy/8+1) Break; // 4x6 N in ocr0_wW()
3457 if ( ( loop(bp, 1, 0,dy,cs,0,DO)>=dy-2 in ocr0_wW()
3458 && loop(bp, 0,dy-1,dy,cs,0,UP)>0) in ocr0_wW()
3459 || ( loop(bp,dx-2, 0,dy,cs,0,DO)>=dy-2 in ocr0_wW()
3460 && loop(bp,dx-1,dy-1,dy,cs,0,UP)>0)) Break; // 4x6 UV in ocr0_wW()
3465 && num_cross(0,dx-1,dy/16,dy/16,bp,cs)< 2 ) Break; in ocr0_wW()
3471 if((i=loop(bp,x,dy-1,dy,cs,0,UP))>y){xc=x;y=i;} in ocr0_wW()
3473 ya=dy-1-y; // flat in ocr0_wW()
3474 y=loop(bp,xc,ya,dy,cs,1,UP);if(y)y--; in ocr0_wW()
3475 if (dy>6 || dx>4) { // ~4x6 font in ocr0_wW()
3494 if (ya<dy/2 && xc<dx/2) ad=95*ad/100; /* ~N */ in ocr0_wW()
3500 && get_line2(xb,yb-1,xc,ya+dy/32,bp,cs,100)<95 in ocr0_wW()
3501 && get_line2(xb,yb-1,xc,ya+dy/16,bp,cs,100)<95 ) Break; in ocr0_wW()
3504 if( get_line2(xd,yb,xe ,1+dy/16,bp,cs,100)<95 in ocr0_wW()
3505 && get_line2(xd,yb,dx-1 ,1+dy/8 ,bp,cs,100)<95 // round w in ocr0_wW()
3506 && get_line2(xd,yb,xe+dx/20,1+dy/16,bp,cs,100)<95 ) Break; in ocr0_wW()
3510 for(i=0,y=5*dy/8;y<dy;y++){ in ocr0_wW()
3513 } if( y<dy ) Break; in ocr0_wW()
3522 for(ad=d=100;dx>3 && dy>3;){ // dy<=dx 4x6font (like a H with fat bar) in ocr0_wW()
3526 if( num_cross(0,dx-1,dy/2,dy/2,bp,cs)<2 ) Break; in ocr0_wW()
3527 if( num_cross(0,dx-1,dy/8,dy/8,bp,cs)<2 ) handwritten=40; in ocr0_wW()
3528 if( num_cross(0,dx-1,dy/4,dy/4,bp,cs)<2 ) handwritten=80; in ocr0_wW()
3529 for(i=0,y=0;y<dy-1;y++) in ocr0_wW()
3531 if(i<=dy/8) Break; // three legs in ocr0_wW()
3535 for(y=dy/2;y<dy-1-dy/8;y++) in ocr0_wW()
3545 if( num_cross(xb,xb,yb,dy-1,bp,cs)!= 1 ) Break; in ocr0_wW()
3546 if( num_cross(xd,xd,yb,dy-1,bp,cs)!= 1 ) Break; in ocr0_wW()
3552 for(i=0,y=3*dy/4;y<dy;y++){ in ocr0_wW()
3554 } if( y<dy ) Break; // fail for overlapping neighbouring slanted chars? in ocr0_wW()
3568 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_aA() local
3572 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_aA()
3576 if( get_bw(dx/2 ,dx/2 ,dy-1-dy/8,dy-1,bp,cs,1) == 1 in ocr0_aA()
3577 && get_bw(dx/2-1,dx/2-1,dy-1-dy/8,dy-1,bp,cs,1) == 1 ) Break; // ~B in ocr0_aA()
3580 for (ya=0;ya<dy/2;ya++) in ocr0_aA()
3582 if (ya>=dy/2) ya=0; // already subtracted? in ocr0_aA()
3584 && num_cross(0,dx-1,ya+ dy/8 ,ya+ dy/8 ,bp,cs)!=1 in ocr0_aA()
3585 && num_cross(0,dx-1,ya+ dy/16 ,ya+ dy/16 ,bp,cs)!=1 in ocr0_aA()
3586 && num_cross(0,dx-1,ya+ dy/8+1,ya+ dy/8+1,bp,cs)!=1 ) Break; in ocr0_aA()
3587 if( num_cross(0,dx-1, 7*dy/8 , 7*dy/8 ,bp,cs)!=2 in ocr0_aA()
3588 && num_cross(0,dx-1, 7*dy/8-1, 7*dy/8-1,bp,cs)!=2 ) Break; in ocr0_aA()
3589 if ( num_cross( 0,dx/8,ya+dy/8,ya+0,bp,cs)>0 ) Break; // ~R in ocr0_aA()
3590 for(y=ya+dy/8;y<ya+dy/2;y++) if( num_cross(0,dx-1,y,y,bp,cs) > 1 ) break; in ocr0_aA()
3591 if( y==ya+dy/2 ) Break; i1=y; in ocr0_aA()
3592 if (dy>20) i1++; /* get arround some noise fat font */ in ocr0_aA()
3598 y+=loop(bp,i2,y,dy,cs,1,DO); in ocr0_aA()
3599 y+=loop(bp,i2,y,dy,cs,0,DO); if(y>3*dy/4) ad=ad*99/100; in ocr0_aA()
3600 if (y>5*dy/6) { MSG(fprintf(stderr,"x,y,i1,i2= %d %d %d %d",x,y,i1,i2);) } in ocr0_aA()
3601 if (y>5*dy/6) Break; in ocr0_aA()
3604 || sdata->holes.hole[0].y1-ya >= dy-1-dy/4) Break; in ocr0_aA()
3609 i4=num_cross(i2,x,y ,dy-1,bp,cs);if(i4<1 || i4>2) in ocr0_aA()
3610 i4=num_cross(i2,x,y+dy/16,dy-1,bp,cs);if(i4<1 || i4>2) break; in ocr0_aA()
3616 if( get_bw(dx-1-dx/4, dx-1, dy-1-dy/4, dy-1, bp,cs,1) != 1 ) Break; in ocr0_aA()
3618 i1=loop(bp,dx-1,ya+ (dy-ya)/4,dx,cs,0,LE); in ocr0_aA()
3619 i2=loop(bp,dx-1,ya+ (dy-ya)/2,dx,cs,0,LE); in ocr0_aA()
3620 i3=loop(bp,dx-1,dy-1-(dy-ya)/4,dx,cs,0,LE); in ocr0_aA()
3624 i1=loop(bp,0 ,ya+ (dy-ya)/4,dx,cs,0,RI); // linke senkr. linie in ocr0_aA()
3625 i2=loop(bp,0 ,ya+ (dy-ya)/2,dx,cs,0,RI); in ocr0_aA()
3626 i3=loop(bp,0 ,dy-1-(dy-ya)/4,dx,cs,0,RI); in ocr0_aA()
3631 for(i3=dx,y=ya+(dy-ya)/4;y<7*dy/8;y++){ // increasing width in ocr0_aA()
3635 } if(y<7*dy/8) Break; in ocr0_aA()
3636 if ( loop(bp, 0,dy-1-dy/8,dx,cs,0,RI) in ocr0_aA()
3637 -loop(bp, 0,dy/2 ,dx,cs,0,RI)>0) ad=97*ad/100; // italic-a in ocr0_aA()
3646 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_aA()
3649 if( get_bw(x0 , x0+dx/2, y1-dy/3, y1-dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3650 if( get_bw(x1-dx/3, x1 , y0+dy/3, y0+dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3651 if( get_bw(x1-dx/3, x1 , y0+dy/4, y0+dy/4,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3652 if( get_bw(x0+dx/2, x0+dx/2, y1-dy/3, y1, box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3653 if( get_bw(x0+dx/2, x0+dx/2, y0 , y0+dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3657 if( get_bw(x0 , x0 , y0+dy/2, y1 ,box1->p,cs,1) != 1 ) in ocr0_aA()
3658 if( get_bw(x0+dx/8, x0+dx/8, y0+dy/2, y1 ,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3659 if( loop(bp,3*dx/8,0,dy,cs,0,DO) > 3*dy/16 ) Break; // ~d in ocr0_aA()
3660 if( num_cross(0,dx-1,dy/4 ,dy/4 , bp,cs) >2 // ~glued am != an in ocr0_aA()
3661 && num_cross(0,dx-1,dy/4+1,dy/4+1, bp,cs) >2 ) Break; in ocr0_aA()
3664 i=loop(bp,x, 0,y1-y0,cs,0,DO); if (i>dy/2) break; in ocr0_aA()
3665 i=loop(bp,x,dy-1,y1-y0,cs,0,UP); if (i>dy/2) break; in ocr0_aA()
3672 i1=loop(bp,0, dy/8,dx,cs,0,RI); in ocr0_aA()
3673 i3=loop(bp,0,3*dy/4,dx,cs,0,RI); in ocr0_aA()
3674 for(y=dy/8+1;y<3*dy/4;y++){ in ocr0_aA()
3676 } if(y==3*dy/4) Break; // ~6 in ocr0_aA()
3679 if( loop(bp,x,dy/4,dy/2,cs,1,DO)>dy/4 ) break; in ocr0_aA()
3684 if( num_hole ( x0, x1, y0+dy/3, y1 ,box1->p,cs,NULL) != 1 ) Break; in ocr0_aA()
3686 if( num_hole ( x0, x1, y0, y1-dy/3 ,box1->p,cs,NULL) != 0 ){ in ocr0_aA()
3687 i =loop(bp,0,dy/4,dx,cs,0,RI); in ocr0_aA()
3688 i =loop(bp,i,dy/4,dx,cs,1,RI); in ocr0_aA()
3690 i =loop(bp,0,dy/4,dx,cs,0,RI); in ocr0_aA()
3691 i+=loop(bp,i,dy/4,dx,cs,1,RI); in ocr0_aA()
3692 for(y=dy/4;y<dy/2;y++) in ocr0_aA()
3699 for (y=0;y<dy;y++) for (x=0;x<dx/2;x++) in ocr0_aA()
3700 if ((getpixel(bp,x,y)<cs)!=(getpixel(bp,dx-1-x,y)<cs)) { y=dy+1; break; } in ocr0_aA()
3701 if (y==dy) Break; /* ~8 */ in ocr0_aA()
3710 for(ad=d=100;dx>3 && dy>3;){ // min 4x4 in ocr0_aA()
3713 if( get_bw(x0 , x0+dx/2,y0+dy/2 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3714 if( get_bw(x1-dx/2 , x1 ,y0+dy/2 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3715 if( get_bw(x0+dx/2 , x0+dx/2,y1-dy/2 , y1, box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3716 if( get_bw(x0+dx/2 , x0+dx/2,y0 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3717 if( get_bw(x0+dx/3 , x0+dx/3,y0 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_aA()
3718 i = loop(bp,dx/2, 0 ,dy,cs,0,DO); if (i>dy/4) Break; in ocr0_aA()
3719 i+= loop(bp,dx/2, i ,dy,cs,1,DO); if (i>dy/2) Break; in ocr0_aA()
3720 i = loop(bp,dx/2, i ,dy,cs,0,DO); if (i<dy/4) Break; in ocr0_aA()
3726 i = loop(bp,dx/2,dy-1 ,dy,cs,0,UP); if (i>dy/3) Break; in ocr0_aA()
3727 y = i+loop(bp,dx/2,dy-1-i,dy,cs,1,UP); if (i>dy/2) Break; in ocr0_aA()
3733 { if (loop(bp, 0,dy-1-dy/16,dx,cs,0,RI) in ocr0_aA()
3734 <4*loop(bp,dx-1,dy-1-dy/16,dx,cs,0,LE)) { Break;} in ocr0_aA()
3737 if( num_cross(x0,x1,y0+dy/2 , y0+dy/2,box1->p,cs) < 2 in ocr0_aA()
3738 || num_cross(x0,x1,y0+dy/3 , y0+dy/3,box1->p,cs) < 2 ) Break; // Jun00 in ocr0_aA()
3740 if( num_cross(x0 ,x0 ,y0+dy/3 , y1-dy/4,box1->p,cs) != 1 ) in ocr0_aA()
3741 if( num_cross(x0+1 ,x0+1 ,y0+dy/3 , y1-dy/4,box1->p,cs) != 1 ) Break; in ocr0_aA()
3746 if( num_hole(x0,x1 ,y0+dy/3,y1-1 ,box1->p,cs,NULL) != 0 ) Break; in ocr0_aA()
3751 if( loop(bp,dx-1,dy-1,x1-x0,cs,0,LE)> dx/4 in ocr0_aA()
3752 && loop(bp,dx-1,dy-2,x1-x0,cs,0,LE)> (dx+4)/8 ) ad=97*ad/100; in ocr0_aA()
3754 x=loop(bp,dx-1,dy-1-dy/4,dx,cs,0,LE); in ocr0_aA()
3755 i=loop(bp,dx-1, dy/4,dx,cs,0,LE); if (abs(x-i)>dx/4) Break; in ocr0_aA()
3758 i=loop(bp,x, 0,y1-y0,cs,0,DO); if (i>dy/2) break; in ocr0_aA()
3759 i=loop(bp,x,dy-1,y1-y0,cs,0,UP); if (i>dy/2) break; in ocr0_aA()
3764 if( loop(bp,dx-1, 0,y1-y0,cs,0,DO)> dy/4 in ocr0_aA()
3765 && loop(bp,dx-1,dy-1,y1-y0,cs,0,UP)> dy/4 ) Break; // ~o in ocr0_aA()
3766 if( loop(bp,dx/2,dy-1,y1-y0,cs,0,UP)> dy/4 ) Break; // ~q in ocr0_aA()
3776 for(ad=d=100;dx>2 && dy>4;){ // min 3x4 in ocr0_aA()
3780 if( get_bw(dx/2,dx/2,dy-1-dy/8,dy-1,bp,cs,1) == 1 ) break; // ~B in ocr0_aA()
3782 && num_cross(0,dx-1, dy/8 , dy/8 ,bp,cs)!=1 in ocr0_aA()
3783 && num_cross(0,dx-1, dy/16 , dy/16 ,bp,cs)!=1 in ocr0_aA()
3784 && num_cross(0,dx-1, dy/8+1, dy/8+1,bp,cs)!=1 ) break; in ocr0_aA()
3785 if( num_cross(0,dx-1, dy-1 , dy-1 ,bp,cs)!=1 ) break; in ocr0_aA()
3786 if( num_cross(0,dx-1, dy/4 , dy/4 ,bp,cs)!=2 in ocr0_aA()
3787 && num_cross(0,dx-1, dy/3 , dy/3 ,bp,cs)!=2 ) break; in ocr0_aA()
3788 if ( num_cross( 0,dx/8,dy/8, 0,bp,cs)>0 ) break; // ~R in ocr0_aA()
3789 for(y=dy/8;y<dy/2;y++) if( num_cross(0,dx-1,y,y,bp,cs) > 1 ) break; in ocr0_aA()
3790 if( y==dy/2 ) break; i1=y; in ocr0_aA()
3791 if (dy>20) i1++; /* get arround some noise fat font */ in ocr0_aA()
3797 y+=loop(bp,i2,y,dy,cs,1,DO); in ocr0_aA()
3798 y+=loop(bp,i2,y,dy,cs,0,DO); if(y>3*dy/4) ad=ad*99/100; in ocr0_aA()
3799 if (y>5*dy/6) break; in ocr0_aA()
3801 if( sdata->holes.num != 1 || sdata->holes.hole[0].y1 >= dy-1-dy/4) break; in ocr0_aA()
3806 i4=num_cross(i2,x,y ,dy-1,bp,cs);if(i4<1 || i4>2) in ocr0_aA()
3807 i4=num_cross(i2,x,y+dy/16,dy-1,bp,cs);if(i4<1 || i4>2) break; in ocr0_aA()
3813 if( get_bw(dx-1-dx/4, dx-1, dy-1-dy/4, dy-1, bp,cs,1) != 1 ) break; in ocr0_aA()
3816 if ( num_cross( 0,dx/8,dy/6, 0,bp,cs)>0 ) break; in ocr0_aA()
3817 if ( num_cross(dx-1-dx/4,dx-1, 0,dy/6,bp,cs)>0 ) break; in ocr0_aA()
3819 i1=loop(bp,dx-1, dy/4,dx,cs,0,LE); in ocr0_aA()
3820 i2=loop(bp,dx-1, dy/2,dx,cs,0,LE); in ocr0_aA()
3821 i3=loop(bp,dx-1,dy-1-dy/4,dx,cs,0,LE); in ocr0_aA()
3824 i1=loop(bp,0 , dy/4,dx,cs,0,RI); // linke senkr. linie in ocr0_aA()
3825 i2=loop(bp,0 , dy/2,dx,cs,0,RI); in ocr0_aA()
3826 i3=loop(bp,0 ,dy-1-dy/4,dx,cs,0,RI); in ocr0_aA()
3830 for(i3=dx,y=dy/4;y<6*dy/8;y++){ // increasing width in ocr0_aA()
3834 } if(y<6*dy/8) break; in ocr0_aA()
3849 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_cC() local
3854 for(ad=d=100;dx>2 && dy>2;){ // min 3x4 in ocr0_cC()
3857 if( get_bw(x0 , x0+dx/3,y0+dy/2, y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_cC()
3858 if( get_bw(x0+dx/2, x0+dx/2,y1-dy/3, y1, box1->p,cs,1) != 1 ) Break; in ocr0_cC()
3859 if( get_bw(x0+dx/2, x0+dx/2,y0 , y0+dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_cC()
3862 for(y=y0+dy/4;y<y0+3*dy/4;y++) in ocr0_cC()
3864 if( y==y0+3*dy/4 ) Break; i1=y; // i1: upper end of right gap in ocr0_cC()
3867 t1=loop(bp, 0,dy/2,dx,cs,0,RI); in ocr0_cC()
3868 t1=loop(bp,t1,dy/2,dx,cs,1,RI); in ocr0_cC()
3872 i=y-1+loop(box1->p,x0+dx/2,i1,dy,cs,0,DO); in ocr0_cC()
3874 } if(i2<y0+5*dy/8-t1/2) Break; // i2: lowest white point above lower bow in ocr0_cC()
3876 i3=y+1-loop(box1->p,x0+5*dx/8,i1,dy,cs,0,UP); in ocr0_cC()
3877 i =y+1-loop(box1->p,x0+4*dx/8,i1,dy,cs,0,UP); if(i<i3) i3=i; in ocr0_cC()
3878 if(i3>y0+ dy/4+t1/2) Break; // highest in ocr0_cC()
3880 for(y=i1;y<y1-dy/8;y++) in ocr0_cC()
3882 if( y-i1<dy/6 ) Break; i2=y-1; // lower end of right gap in ocr0_cC()
3885 if (loop(box1->p,x0,y0+3*dy/4,dx,cs,0,RI)>dx/16) in ocr0_cC()
3887 && num_cross(x0+dx/2,x1,y1-dy/4,y1,box1->p,cs) < 1 ) Break; // ~r in ocr0_cC()
3891 for(y=dy/2;y<dy-1-dy/8 && i;y++){ // .@ in ocr0_cC()
3899 i=loop(bp,0,dy/2,dx,cs,0,RI); in ocr0_cC()
3900 for(y=0;y<dy;y++)if( loop(bp,0,y,dx,cs,0,RI)<i-1-dx/32 ) break; in ocr0_cC()
3901 if( y<dy ) Break; // ~r in ocr0_cC()
3903 for(i5=0,i4=dx,y=dy/2;y>=dy/4;y--){ in ocr0_cC()
3908 } if( y>=dy/4 ) Break; in ocr0_cC()
3911 x= loop(bp,0,dy/2,dx,cs,0,RI); in ocr0_cC()
3912 x=x +loop(bp,x,dy/2,dx,cs,1,RI); in ocr0_cC()
3913 y=dy/2-loop(bp,x,dy/2,dy,cs,0,UP)-1; in ocr0_cC()
3916 if( num_cross(x ,x ,1,dy/2,bp,cs) > 1 in ocr0_cC()
3917 || num_cross(x+1,x+1,1,dy/2,bp,cs) > 1 ) in ocr0_cC()
3918 if( num_cross(i-1,i-1,1,dy/2,bp,cs) > 1 in ocr0_cC()
3919 || num_cross(i ,i ,1,dy/2,bp,cs) > 1 ) Break; // ~bad e in ocr0_cC()
3921 if( dy>16 && dy>3*dx && hchar ){ // ~[ in ocr0_cC()
3922 x= loop(bp,0, dy/16,dx,cs,0,RI); in ocr0_cC()
3923 x=+loop(bp,0,dy-1-dy/16,dx,cs,0,RI); in ocr0_cC()
3924 i= loop(bp,0, dy/2 ,dx,cs,0,RI)*2; in ocr0_cC()
3926 if( num_cross(0,dx-1,dy/4,dy/4,bp,cs) < 2 ) Break; in ocr0_cC()
3934 x =loop(bp, 0,dy/2,dx,cs,0,RI); in ocr0_cC()
3935 i =loop(bp,dx-1,dy/2,dx,cs,0,LE); in ocr0_cC()
3936 if( (i<dx/2 || i<3) && hchar && dy>7 ) in ocr0_cC()
3937 if( loop(bp, 0,7*dy/8,dx,cs,0,RI) > x+dx/8 in ocr0_cC()
3938 && loop(bp, 0, dy/8,dx,cs,0,RI) > x+dx/8 in ocr0_cC()
3939 && loop(bp,dx-1,dy-1-dy/ 8,dx,cs,0,LE) in ocr0_cC()
3940 > loop(bp,dx-1,dy-1-dy/16,dx,cs,0,LE) in ocr0_cC()
3941 && loop(bp,dx-1, dy/ 8,dx,cs,0,LE) in ocr0_cC()
3942 > loop(bp,dx-1, dy/16,dx,cs,0,LE) ) Break; // ~( in ocr0_cC()
3946 if (hchar && dy>15 && dx>7 && i2-y0<9*dy/16 && i1-y0<=dy/4) in ocr0_cC()
3947 if ( loop(bp,5*dx/8,i2-y0,dy,cs,0,DO) > 2*dy/8 ){ in ocr0_cC()
3955 for(y= 1;y<dy/4 && i;y++){ // .@ in ocr0_cC()
3962 if (dy>2*dx) ad=99*ad/100; in ocr0_cC()
3964 if( loop(bp,dx-1,dy/2,dx,cs,0,LE) < 6*dx/8 ) ad=98*ad/100; in ocr0_cC()
3966 i= loop(bp,dx-1,dy/16,dx,cs,0,LE); in ocr0_cC()
3967 j= loop(bp,dx/2,0 ,dy,cs,0,DO); in ocr0_cC()
3968 if (i>=dx/2 && j>dy/8 && j>2 && j<dy/2) Break; // t in ocr0_cC()
3970 if (dy>=3*dx && dy>12) ad=99*ad/100; // ( in ocr0_cC()
3971 i= loop(bp,dx-1,dy-1,dy,cs,0,UP); in ocr0_cC()
3972 j= loop(bp,dx/2,dy-1,dy,cs,0,UP); in ocr0_cC()
3973 if (i==0 && j>dy/8) ad=95*ad/100; // < in ocr0_cC()
3974 i= loop(bp,dx-1, 0,dy,cs,0,DO); in ocr0_cC()
3975 j= loop(bp,dx/2, 0,dy,cs,0,DO); in ocr0_cC()
3976 if (i==0 && j>dy/8) ad=95*ad/100; // < in ocr0_cC()
3977 if (loop(bp,0,dy-1-dy/8,dx,cs,0,RI)>= 3*dx/4) ad=98*ad/100; // < in ocr0_cC()
3978 if (loop(bp,0,dy-1-dy/8,dx,cs,0,RI)>=(dx+1)/2) ad=98*ad/100; // < in ocr0_cC()
3979 if (loop(bp,0, dy/8,dx,cs,0,RI)>=dx/2) ad=98*ad/100; // < in ocr0_cC()
3994 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_lL() local
3998 for(ad=d=100;dx>2 && dy>4;){ // min 3x4 in ocr0_lL()
4001 i=loop(bp,dx-1,dy/2,dx,cs,0,LE); in ocr0_lL()
4002 if (i<3 && dy>8) {Break;} in ocr0_lL()
4005 if (dx<8 && 3*loop(bp,dx-1,0,dy,cs,0,DO)<=dy) break; // ~G in ocr0_lL()
4006 for( i=i1=0,y=y1-dy/4;y<=y1;y++){ // check bottom line (i1) in ocr0_lL()
4011 i=loop(box1->p,x0 ,y0+dy/2,dx,cs,0,RI); if( i>dx/2 ) Break; in ocr0_lL()
4012 j=loop(box1->p,x0+i,y0+dy/2,dx,cs,1,RI); if( i+j>dx/2 ) Break; i2=j; in ocr0_lL()
4014 && loop(bp,dx-1, dy/4,dx,cs,0,LE)>dx/2 in ocr0_lL()
4015 && loop(bp, 0,5*dy/8,dx,cs,0,RI)<dx/4 in ocr0_lL()
4016 && loop(bp,dx-1,3*dy/4,dx,cs,0,LE)<dx/4) Break; // ~G in ocr0_lL()
4017 for( i=1,y=y0;y<=y1-dy/4 && i;y++){ // check vertical line in ocr0_lL()
4019 if ( j>(dx+2)/4+(y1-dy/4-y)*dx/2/dy ) { i=0; break; } in ocr0_lL()
4021 if( ((x>i2+1 || 4*x<3*i2) && y>y0+dy/8) || 4*x>3*i1 ) i=0; in ocr0_lL()
4023 if( num_cross(0, dx-1-dx/8, dy-1-dy/2, dy-1-dy/2,bp,cs) != 1 ) Break; in ocr0_lL()
4024 if( num_cross(0, dx-1 , dy/3 , dy/3,bp,cs) != 1 ) Break; in ocr0_lL()
4025 if( num_cross(0, dx-1 , dy/8 , dy/8,bp,cs) != 1 ) Break; in ocr0_lL()
4026 if (loop(bp,0,dy-1,dx,cs,0,RI) in ocr0_lL()
4027 -loop(bp,0,dy-3,dx,cs,0,RI)>1+dx/16) ad=96*ad/100; // ~c in ocr0_lL()
4028 if (loop(box1->p,x0+dx/4,y1,dy,cs,0,UP)>1+dy/16) ad=99*ad/100; // ~4 in ocr0_lL()
4032 if (5*dx<2*dy && loop(box1->p,x0,y1,dx,cs,0,RI)>dx/4) ad=99*ad/100; // ~l in ocr0_lL()
4042 for(ad=d=100; dy>dx && dy>5;){ // min 3x4 in ocr0_lL()
4045 if( num_cross(0, dx-1,dy/2,dy/2,bp,cs) != 1 in ocr0_lL()
4046 || num_cross(0, dx-1,dy/4,dy/4,bp,cs) != 1 ) Break; in ocr0_lL()
4048 for(i1=0,i2=dx,y=dy/4;y<dy-dy/4;y++){ in ocr0_lL()
4055 if(box1->m3 && dy<=box1->m3-box1->m2) ad=94*ad/100; in ocr0_lL()
4057 for(i0=0,i3=0,y=0;y<dy/4;y++){ in ocr0_lL()
4064 if ( loop(bp,dx-1,dy-1,dx,cs,0,LE)>3*dx/8 in ocr0_lL()
4065 || loop(bp, 0,dy-1,dx,cs,0,RI)>3*dx/8) Break; // ~7 in ocr0_lL()
4072 x =loop(bp,0,dy-1,dx,cs,0,RI); in ocr0_lL()
4073 i4=loop(bp,x,dy-1,dx,cs,0,RI); in ocr0_lL()
4074 x =loop(bp,0,dy-2,dx,cs,0,RI); in ocr0_lL()
4075 x =loop(bp,x,dy-2,dx,cs,0,RI); if(x>i4) i4=x; in ocr0_lL()
4078 for(i=dx,j=0,y=1;y<dy/4;y++){ in ocr0_lL()
4081 && num_cross(0,dx-1,y+1+dy/32,y+1+dy/32,bp,cs)==2 ) j=1; in ocr0_lL()
4082 } if ( y<dy/4 ) Break; in ocr0_lL()
4084 for(y=3*dy/4;y<dy;y++){ in ocr0_lL()
4086 && num_cross(0,dx-1,y-1-dy/32,y-1-dy/32,bp,cs)==2 ) break; in ocr0_lL()
4087 } if ( y==dy ) Break; in ocr0_lL()
4093 if( get_bw(dx-1-dx/8,dx-1,0,dy/6,bp,cs,1) != 1 ) in ocr0_lL()
4094 if( get_bw(dx-1-dx/8,dx-1,0,dy/2,bp,cs,1) == 1 ) Break; in ocr0_lL()
4096 if( get_bw(dx-1-dx/8,dx-1,dy/4,dy/3,bp,cs,1) != 1 ) // large I ??? in ocr0_lL()
4097 if( get_bw(0 ,dx/8,dy/4,dy/3,bp,cs,1) != 1 ) in ocr0_lL()
4098 if( get_bw(dx-1-dx/8,dx-1,0 ,dy/8,bp,cs,1) == 1 ) in ocr0_lL()
4099 if( get_bw(0 ,dx/8,0 ,dy/8,bp,cs,1) == 1 ) ad=ad*97/100; in ocr0_lL()
4100 if( get_bw(dx-1-dx/8,dx-1,dy/2,dy-1,bp,cs,1) != 1 ) // r ??? in ocr0_lL()
4101 if( get_bw(0 ,dx/8,dy/2,dy-1,bp,cs,1) == 1 ) in ocr0_lL()
4102 if( get_bw(dx-1-dx/8,dx-1,0 ,dy/3,bp,cs,1) == 1 ) in ocr0_lL()
4103 if( get_bw(0 ,dx/8,0 ,dy/3,bp,cs,1) == 1 ) Break; in ocr0_lL()
4105 for( y=1;y<12*dy/16;y++ ) in ocr0_lL()
4108 if( y<12*dy/16 ) Break; in ocr0_lL()
4111 for( y=dy/2;y<dy-1;y++ ) in ocr0_lL()
4113 if( y<dy-1 ) Break; in ocr0_lL()
4116 for(x=dx,y=bp->y-1-5*dy/16;y>=dy/5;y--){ // rechts abfallende Kante/Knick? in ocr0_lL()
4121 if (y>=dy/5 ) Break; in ocr0_lL()
4124 for(x=0,y=bp->y-1-dy/5;y>=dy/5;y--){ // rechts abfallende Kante/Knick? in ocr0_lL()
4129 if (y>=dy/5 ) Break; in ocr0_lL()
4131 if ( get_bw(x0,x1,y1+1,box1->m4+dy/8,box1->p,cs,1) == 1 ) in ocr0_lL()
4133 i=loop(bp,dx-1,dy/16,dx,cs,0,LE); in ocr0_lL()
4134 j=loop(bp,dx-1,dy/2 ,dx,cs,0,LE); in ocr0_lL()
4136 if( get_bw(dx-1-i/2,dx-1-i/2,0,dy/2,bp,cs,1) == 1 ) Break; // ~t in ocr0_lL()
4138 for(y=5*dy/8;y<dy;y++) in ocr0_lL()
4140 if( y<dy ){ in ocr0_lL()
4144 if( num_cross(0,i,5*dy/8,5*dy/8,bp,cs)==0 in ocr0_lL()
4145 && num_cross(i,i,5*dy/8, y,bp,cs)==0 ) Break; // ~J in ocr0_lL()
4148 && loop(bp, 0,3*dy/4,dx,cs,0,RI)>=dx/4 in ocr0_lL()
4149 && loop(bp, 0,7*dy/8,dx,cs,0,RI)<=dx/8 in ocr0_lL()
4150 && loop(bp,dx-1,3*dy/4,dx,cs,0,LE)<=dx/8 in ocr0_lL()
4151 && loop(bp,dx-1,7*dy/8,dx,cs,0,LE)<=dx/8 ) Break; // ~J in ocr0_lL()
4154 if ( loop(bp,0,dy/4,dx,cs,0,RI)>dx/2 in ocr0_lL()
4155 && get_bw(0,dx/8,0,dy/4,bp,cs,1) == 1 ) Break; // ~7 in ocr0_lL()
4157 if ( loop(bp,dx-1,dy/2,dx,cs,0,LE)>dx/2 in ocr0_lL()
4158 && get_bw(3*dx/4,dx-1,3*dy/4,dy-1,bp,cs,1) == 1) { in ocr0_lL()
4159 if (loop(bp,0,dy-1,dx,cs,0,RI)<dx/8) ad=99*ad/100; // ~L in ocr0_lL()
4160 if(5*dx>2*dy) ad=99*ad/100; // ~L in ocr0_lL()
4161 if(5*dx>3*dy) ad=99*ad/100; // ~L in ocr0_lL()
4164 if( get_bw(dx/4,dx/4, 0,dy/4,bp,cs,1) == 1 in ocr0_lL()
4165 && get_bw(dx/4,dx/4,dy/2,dy-1,bp,cs,1) == 0 ) Break; in ocr0_lL()
4167 if( dx>3 && dy>3*dx ) in ocr0_lL()
4168 if( loop(bp,dx/4,dy-1 ,dy,cs,0,UP)< dy/4 in ocr0_lL()
4169 && loop(bp, 0,dy-1-dy/8,dx,cs,0,RI)>=dx/2 in ocr0_lL()
4170 && loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE)<=dx/4 ){ in ocr0_lL()
4172 if ( loop(bp,dx-1,dy/2,dx,cs,0,LE)==0 ) Break; in ocr0_lL()
4176 if( get_bw( x, x, 0,dy/4 ,bp,cs,1) == 1 ) break; in ocr0_lL()
4178 if( get_bw( x,x+dx/16, 0,dy/16,bp,cs,1) == 0 in ocr0_lL()
4179 && get_bw( x,x+dx/16,dy/4 ,dy/2 ,bp,cs,1) == 0 in ocr0_lL()
4180 && get_bw( x,x+dx/16,dy/16,dy/4 ,bp,cs,1) == 1 ){ in ocr0_lL()
4181 for(i=dx,y=0;y<dy/4;y++){ in ocr0_lL()
4186 if( loop(bp,0 ,0,dy,cs,0,DO)>1 ) in ocr0_lL()
4187 if( loop(bp,0 ,0,dy,cs,0,DO) in ocr0_lL()
4188 - loop(bp,dx/16+1,0,dy,cs,0,DO) < dx/16+1 ) Break; // ~1 Jul00,Nov00 in ocr0_lL()
4191 if(dx<8 && dy<12){ // screen font in ocr0_lL()
4192 i= loop(bp,0,0,dy,cs,0,DO); in ocr0_lL()
4193 if( loop(bp,dx/2,1,dy,cs,1,DO)>=dy-2 in ocr0_lL()
4194 && loop(bp,0,dy/2,dx,cs,0,RI)>=2 in ocr0_lL()
4195 && i>1 && i<dy/2 ) Break; // ~1 in ocr0_lL()
4200 && get_bw(x0,x0+dx/4,y0+1+dy/16,y1-1-dy/16,box1->p,cs,1) != 1 ) Break; /* ~] */ in ocr0_lL()
4201 i=loop(bp,dx-1,dy/2,dx,cs,0,LE); in ocr0_lL()
4202 if( loop(bp, 0,dy/2,dx,cs,0,RI)>=dx/2 in ocr0_lL()
4207 && get_bw(x1-dx/4,x1,y0+1+dy/16,y1-1-dy/16,box1->p,cs,1) != 1 ) Break; /* ~[ */ in ocr0_lL()
4209 x =loop(bp, 0,dy/2,dx,cs,0,RI); // konvex/konkav? ~() in ocr0_lL()
4210 i =loop(bp,dx-1,dy/2,dx,cs,0,LE); in ocr0_lL()
4211 if( loop(bp, 0,7*dy/8,dx,cs,0,RI) > x+dx/8 in ocr0_lL()
4212 && loop(bp, 0, dy/8,dx,cs,0,RI) > x+dx/8 in ocr0_lL()
4213 && loop(bp,dx-1,7*dy/8,dx,cs,0,LE) < i-dx/8 in ocr0_lL()
4214 && loop(bp,dx-1, dy/8,dx,cs,0,LE) < i-dx/8 ) Break; // ~( in ocr0_lL()
4215 if( loop(bp, 0,7*dy/8,dx,cs,0,RI) < x-dx/8 in ocr0_lL()
4216 && loop(bp, 0, dy/8,dx,cs,0,RI) < x-dx/8 in ocr0_lL()
4217 && loop(bp,dx-1,7*dy/8,dx,cs,0,LE) > i+dx/8 in ocr0_lL()
4218 && loop(bp,dx-1, dy/8,dx,cs,0,LE) > i+dx/8 ) Break; // ~) in ocr0_lL()
4220 i= loop(bp, 0, 0,dy,cs,0,DO); // horizontal line? in ocr0_lL()
4221 if(dy>=12 && i>dy/8 && i<dy/2){ in ocr0_lL()
4222 if( loop(bp,dx-1,3*dy/16,dx,cs,0,LE)-dx/8 in ocr0_lL()
4224 || loop(bp,dx-1,3*dy/16,dx,cs,0,LE)-dx/8 in ocr0_lL()
4226 if( loop(bp,dx-1,8*dy/16,dx,cs,0,LE)-dx/8 in ocr0_lL()
4228 || loop(bp,dx-1,8*dy/16,dx,cs,0,LE)-dx/8 in ocr0_lL()
4230 if( loop(bp, 0,3*dy/16,dx,cs,0,RI)-dx/8 in ocr0_lL()
4232 || loop(bp, 0,3*dy/16,dx,cs,0,RI)-dx/8 in ocr0_lL()
4234 if( loop(bp, 0,8*dy/16,dx,cs,0,RI)-dx/8 in ocr0_lL()
4236 || loop(bp, 0,8*dy/16,dx,cs,0,RI)-dx/8 in ocr0_lL()
4239 if( loop(bp, 0,8*dy/16,dx,cs,0,RI)>dx/8 in ocr0_lL()
4241 && loop(bp,dx-1,8*dy/16,dx,cs,0,LE)>dx/8 in ocr0_lL()
4246 && ( loop(bp,0,dy-2,dx,cs,0,RI)<=dx/8 in ocr0_lL()
4247 || loop(bp,0,dy-1,dx,cs,0,RI)<=dx/8 ) ) in ocr0_lL()
4250 && loop(bp,dx-1,dy-2,dx,cs,0,LE)>=dx/2 ) ad=98*ad/100; // ~/ in ocr0_lL()
4254 if (!hchar || loop(bp,0,dy/4,dx,cs,0,RI)>dx/2){ // ~z in ocr0_lL()
4255 i=loop(bp,0,dy/16 ,dx,cs,0,RI); in ocr0_lL()
4256 i=loop(bp,i,dy/16 ,dx,cs,1,RI); j=i; in ocr0_lL()
4257 i=loop(bp,0,dy/16+1,dx,cs,0,RI); in ocr0_lL()
4258 i=loop(bp,i,dy/16+1,dx,cs,1,RI); if (i>j) j=i; in ocr0_lL()
4259 i=loop(bp,0,dy/16+2,dx,cs,0,RI); in ocr0_lL()
4260 i=loop(bp,i,dy/16+2,dx,cs,1,RI); if (i>j) j=i; in ocr0_lL()
4296 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_oO() local
4301 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_oO()
4304 if( get_bw(x0 , x0+dx/2,y0+dy/2 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_oO()
4305 if( get_bw(x1-dx/2 , x1 ,y0+dy/2 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_oO()
4306 if( get_bw(x0+dx/2 , x0+dx/2,y1-dy/2 , y1, box1->p,cs,1) != 1 ) Break; in ocr0_oO()
4307 if( get_bw(x0+dx/2 , x0+dx/2,y0 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0_oO()
4308 if( get_bw(x0+dx/2 , x0+dx/2,y0+dy/2 , y1-dy/3,box1->p,cs,1) != 0 ) Break; in ocr0_oO()
4309 if (sdata->holes.hole[0].y0 > dy/3 in ocr0_oO()
4310 || sdata->holes.hole[0].y1 < dy-1-dy/3) Break; in ocr0_oO()
4318 if( num_cross(x0 ,x0 ,y0+dy/3 , y1-dy/3,box1->p,cs) != 1 ) in ocr0_oO()
4319 if( num_cross(x0+1 ,x0+1 ,y0+dy/3 , y1-dy/3,box1->p,cs) != 1 ) Break; in ocr0_oO()
4320 if( num_cross(x1 ,x1 ,y0+dy/3 , y1-dy/3,box1->p,cs) != 1 ) in ocr0_oO()
4321 if( num_cross(x1-1 ,x1-1 ,y0+dy/3 , y1-dy/3,box1->p,cs) != 1 ) Break; in ocr0_oO()
4326 x=loop(bp,dx-1,dy-1-dy/3,x1-x0,cs,0,LE); // should be minimum in ocr0_oO()
4327 for( y=dy-1-dy/3;y<dy;y++ ){ in ocr0_oO()
4331 if( y<dy ) Break; in ocr0_oO()
4334 if( loop(bp,0, dy/16,dx,cs,0,RI) in ocr0_oO()
4335 + loop(bp,0,dy-1-dy/16,dx,cs,0,RI) in ocr0_oO()
4336 <= 2*loop(bp,0, dy/2 ,dx,cs,0,RI)+dx/8 ) Break; // not konvex in ocr0_oO()
4337 if( loop(bp,0 , 1+dy/16,dx,cs,0,RI) + dx/4 in ocr0_oO()
4338 <= loop(bp,dx-1, 1+dy/16,dx,cs,0,LE) ) Break; // Dec00 in ocr0_oO()
4340 if( loop(bp,dx-1, dy/16,dx,cs,0,LE)>dx/8 ) in ocr0_oO()
4341 if( loop(bp,0 , dy/16,dx,cs,0,RI)<dx/16 ) Break; in ocr0_oO()
4342 if( loop(bp,dx-1,dy-1-dy/16,dx,cs,0,LE)>dx/8 ) in ocr0_oO()
4343 if( loop(bp,0 ,dy-1-dy/16,dx,cs,0,RI)<dx/16 ) Break; in ocr0_oO()
4344 if( get_bw(x1-dx/32,x1,y0,y0+dy/32,box1->p,cs,1) == 0 in ocr0_oO()
4345 && get_bw(x1-dx/32,x1,y1-dy/32,y1,box1->p,cs,1) == 0 in ocr0_oO()
4347 && ( get_bw(0,dx/32,0,dy/32,bp,cs,1) == 1 in ocr0_oO()
4348 || get_bw(x0,x0+dx/32,y1-dy/32,y1,box1->p,cs,1) == 1 ) ) Break; // ~D in ocr0_oO()
4351 for(y=dy,j=x=0;x<dx;x++) { in ocr0_oO()
4352 i =loop(bp,x,dy-1 ,y1-y0,cs,0,UP); in ocr0_oO()
4353 i+=loop(bp,x,dy-1-i,y1-y0,cs,1,UP); in ocr0_oO()
4357 for(y=dy-1-i;y<dy-1;y++) in ocr0_oO()
4359 for(y=0;y<dy-1-i;y++) in ocr0_oO()
4361 if (loop(bp,dx-1,dy-1,x1-x0,cs,0,LE)<dx/8) ad=98*ad/100; // \it a in ocr0_oO()
4363 if (loop(bp,dx-1,dy-1-dy/8,x1-x0,cs,0,LE)+1+dx/16 in ocr0_oO()
4364 <loop(bp, 0,dy-1-dy/8,x1-x0,cs,0,RI)) in ocr0_oO()
4366 if (loop(bp,dx-1,dy-1,y1-y0,cs,0,UP)+1+(dy+3)/8 in ocr0_oO()
4367 <loop(bp, 0,dy-1,y1-y0,cs,0,UP)) in ocr0_oO()
4370 if (abs(loop(bp,dx/2, 0,dy,cs,0,DO) in ocr0_oO()
4371 -loop(bp,dx/2,dy-1,dy,cs,0,UP))>dy/8 in ocr0_oO()
4373 || num_cross(0,dx-1,dy-1,dy-1,bp,cs) > 1 in ocr0_oO()
4394 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_pP() local
4399 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_pP()
4402 if( get_bw(0 , dx/2,3*dy/4,3*dy/4,bp,cs,1) != 1 ) Break; in ocr0_pP()
4403 if( get_bw(0 , dx/2, dy/2, dy/2,bp,cs,1) < 1 ) Break; in ocr0_pP()
4404 if( get_bw(dx/4, dx-1, dy/4, dy/4,bp,cs,1) != 1 ) Break; in ocr0_pP()
4405 i= loop(bp,dx-1,3*dy/4,dx,cs,0,LE); if (i<dx/4) Break; in ocr0_pP()
4406 if( num_cross(x1-3*i/4,x1-3*i/4, y0, y1-3*dy/16,box1->p,cs) != 2 ) in ocr0_pP()
4407 if( num_cross(x0+dx/2 ,x0+dx/2 , y0, y1-3*dy/16,box1->p,cs) != 2 ) in ocr0_pP()
4408 if( num_cross(x0+dx/2+1,x0+dx/2+1, y0, y1-3*dy/16,box1->p,cs) != 2 ) Break; in ocr0_pP()
4409 if( num_cross(0,dx-1,7*dy/8 ,7*dy/8 ,bp,cs) != 1 ) in ocr0_pP()
4410 if( num_cross(0,dx-1,7*dy/8-1,7*dy/8-1,bp,cs) != 1 ) Break; in ocr0_pP()
4411 if( num_cross(0,dx-1, dy/4 , dy/4 ,bp,cs) != 2 ) in ocr0_pP()
4412 if( num_cross(0,dx-1, dy/4-1, dy/4-1,bp,cs) != 3 ) // \it p with nice kurve in ocr0_pP()
4413 if( num_cross(0,dx-1, dy/4 , dy/4 ,bp,cs) != 2 ) in ocr0_pP()
4414 if( num_cross(0,dx-1, dy/4+1, dy/4+1,bp,cs) != 2 ) Break; in ocr0_pP()
4416 i= loop(bp,0,dy/2,dx,cs,0,RI); if(i<1) i++; in ocr0_pP()
4417 if( num_cross(i-1,dx-1, dy/4 , dy/4 ,bp,cs) != 2 ) in ocr0_pP()
4418 if( num_cross(i-1,dx-1, dy/4+1, dy/4+1,bp,cs) != 2 ) Break; in ocr0_pP()
4420 i1= loop(bp, 0,3*dy/8,dx,cs,0,RI); if (i1>=dx/2) ad=90*ad/100; in ocr0_pP()
4421 i2=i1+loop(bp,i1,3*dy/8,dx,cs,1,RI); // upper x-position of v line in ocr0_pP()
4422 i3= loop(bp, 0,7*dy/8,dx,cs,0,RI); in ocr0_pP()
4423 i4=i3+loop(bp,i3,7*dy/8,dx,cs,1,RI); // lower x-position of v line in ocr0_pP()
4425 for ( y=dy/8; y<7*dy/8; y++ ){ in ocr0_pP()
4426 x=i2+ (8*y-3*dy)*(i4-i2)/(4*dy); // right limit of line in ocr0_pP()
4428 } if ( y<7*dy/8 ) Break; in ocr0_pP()
4429 for ( x=0,j=y=dy/3; y<dy-dy/8; y++ ){ // suche unterkante (also 4x6) in ocr0_pP()
4433 if( get_bw(3*dx/4,dx-1, y , dy-1,bp,cs,1) == 1 ) Break; in ocr0_pP()
4435 i=num_hole (x0,x1,y0,y1-dy/5,box1->p,cs,NULL); in ocr0_pP()
4447 j= loop(bp,bp->x-1-i,bp->y/4,3*dy/4,cs,0,DO); in ocr0_pP()
4448 if (j>dy/2) ad=80*ad/100; // its an serif-F in ocr0_pP()
4452 if( hchar && ((!gchar) || dy<14)) bc='P'; in ocr0_pP()
4467 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_qQ() local
4471 for(ad=d=100;dx>2 && dy>4;){ // min 3x4 in ocr0_qQ()
4474 if( get_bw(x0 ,x0+dx/3,y0+dy/3,y0+dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_qQ()
4475 if( get_bw(x1-dx/3,x1 ,y0+dy/3,y0+dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_qQ()
4476 if( get_bw(x0+dx/2,x0+dx/2,y1-dy/3,y1, box1->p,cs,1) != 1 ) Break; in ocr0_qQ()
4477 if( get_bw(x0+dx/2,x0+dx/2,y0 ,y0+dy/4,box1->p,cs,1) != 1 ) Break; in ocr0_qQ()
4478 if( get_bw(x0+dx/2,x0+dx/2,y0+dy/3,y1-dy/2,box1->p,cs,1) == 1 ) Break; in ocr0_qQ()
4483 if( num_cross(x0 ,x0 ,y0+dy/3 , y1-dy/3,box1->p,cs) != 1 ) in ocr0_qQ()
4484 if( num_cross(x0+1 ,x0+1 ,y0+dy/3 , y1-dy/3,box1->p,cs) != 1 ) Break; in ocr0_qQ()
4485 if( get_bw(x1 ,x1 ,y1-dy/8 , y1 ,box1->p,cs,1) == 0 ) in ocr0_qQ()
4486 if( num_cross(x1 ,x1 ,y0+dy/3 , y1-dy/3,box1->p,cs) != 1 ) in ocr0_qQ()
4487 if( num_cross(x1-1 ,x1-1 ,y0+dy/3 , y1-dy/3,box1->p,cs) != 1 ) Break; in ocr0_qQ()
4491 if( i!=1 && (i!=2 || num_hole(x0,x1,y0+dy/2,y1,box1->p,cs,NULL)!=1) ) Break; in ocr0_qQ()
4498 if( loop(bp,0 ,dy/8+2,dx,cs,0,RI) in ocr0_qQ()
4499 +loop(bp,dx-1,dy/8+2,dx,cs,0,LE) > 5*dx/8 ) Break; // ~4 Okt00 in ocr0_qQ()
4501 x= loop(bp,dx-1,3*dy/8,dy,cs,0,LE); if( x>dx/4 ) Break; in ocr0_qQ()
4502 if( loop(bp,dx-1-x,0 ,dy,cs,0,DO) in ocr0_qQ()
4503 <= loop(bp,dx-2-x,0 ,dy,cs,0,DO) ) Break; // 4 in ocr0_qQ()
4505 if( loop(bp,dx-1,dy-2,dx,cs,0,LE) in ocr0_qQ()
4506 <= loop(bp,dx-1,dy/2,dx,cs,0,LE) ) in ocr0_qQ()
4507 if( loop(bp, 1,dy-1,dy,cs,0,UP) in ocr0_qQ()
4508 <= loop(bp,dx/2,dy-1,dy,cs,0,UP) ) in ocr0_qQ()
4509 if( loop(bp, 0,dy-2,dx,cs,0,RI)>dx/2 ) in ocr0_qQ()
4512 if( loop(bp,dx-1,3*dy/4,dx,cs,0,LE) in ocr0_qQ()
4513 + loop(bp, 0,3*dy/4,dx,cs,0,RI) in ocr0_qQ()
4514 < loop(bp,dx-1,2*dy/4,dx,cs,0,LE) in ocr0_qQ()
4515 + loop(bp, 0,2*dy/4,dx,cs,0,RI) ) ad=94*ad/100; // 4 in ocr0_qQ()
4516 if( loop(bp,0 ,3*dy/4,dx,cs,1,RI) >= dx ) ad=94*ad/100; // 4 in ocr0_qQ()
4519 if( loop(bp,dx-1,dy/3,dx,cs,0,LE)> dx/4 ) Break; in ocr0_qQ()
4520 j=loop(bp,dx/2,dy-1,dy,cs,0,UP); in ocr0_qQ()
4521 if (j>1 && j>dy/8) { in ocr0_qQ()
4522 if( get_bw(0,dx/2,dy-1-j/2,dy-1-j/2,bp,cs,1) == 1 ) { // ~RA in ocr0_qQ()
4529 for(i=0,y=0;y<dy/2;y++) in ocr0_qQ()
4530 if( num_cross(0,dx-1,y,y,bp,cs) > 2 ) i++; if(i>dy/8) Break; // ~a \it a in ocr0_qQ()
4534 for(j=x=0,y=dy/2;y<dy;y++){ in ocr0_qQ()
4547 for(ad=d=100;dx>2 && dy>3;){ // min 3x4 in ocr0_qQ()
4557 for ( x=0,j=y=y0+dy/3; y<=y1-dy/8; y++ ){ // detect baseline in ocr0_qQ()
4562 if (y1-j+1<dy/4) ad=96*ad/100; // ~\it{a} in ocr0_qQ()
4564 if( loop(box1->p,x0+dx/16,j,dy,cs,0,UP)<1+dy/16 ){ in ocr0_qQ()
4568 if( loop(box1->p,x0+dx/16,j-dy/32-1,dy,cs,1,RI)>=dx-dx/8 in ocr0_qQ()
4569 || loop(box1->p,x0+dx/16,j-dy/16-1,dy,cs,1,RI)>=dx-dx/8 ){ in ocr0_qQ()
4572 if( get_bw(x1-dx/3, x1, y0+dy/3, y0+dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_qQ()
4573 if( get_bw(x0, x0+dx/3, y0+dy/3, y0+dy/3,box1->p,cs,1) != 1 ) Break; in ocr0_qQ()
4574 if( get_bw(x0, x0+dx/4, y1-dy/8, y1-dy/9,box1->p,cs,1) == 1 ) Break; in ocr0_qQ()
4575 if( get_bw(x0, x0+dx/4, y1-dy/5, y1-dy/9,box1->p,cs,1) == 1 ) ad=99*ad/100; in ocr0_qQ()
4583 if( loop(bp,0,dy-1-dy/4,dx,cs,0,RI)>5*dx/8 in ocr0_qQ()
4584 && get_bw(dx/4,dx/4,dy-1-dy/4,dy-1,bp,cs,1)==1 ) Break; // ~\it g in ocr0_qQ()
4600 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_iIjJ() local
4606 for(ad=d=100;dy>3 && dx>0;){ // min 3x4 without dot in ocr0_iIjJ()
4622 while(dy>3*dx && box1->m2){ // test for vertical i without detected dot in ocr0_iIjJ()
4623 i= loop(bp,dx/2,dy-1 ,dy,cs,0,UP); in ocr0_iIjJ()
4624 if (dy-1-i<box1->m3-2) break; in ocr0_iIjJ()
4625 i+=loop(bp,dx/2,dy-1-i,dy,cs,1,UP); in ocr0_iIjJ()
4627 if (3*abs(dy-1-i-box1->m2)>box1->m2-box1->m1) break; in ocr0_iIjJ()
4677 y= loop(bp,dx-xb,yc-1,dy,cs,0,DO); in ocr0_iIjJ()
4679 i=loop(bp,dx-xb-1,yc-1+y-1,dy,cs,0,DO); in ocr0_iIjJ()
4684 y= loop(bp,11*xa/16,yc-1,dy,cs,0,DO); in ocr0_iIjJ()
4690 y=loop(bp,x-1,ye+1,dy,cs,0,UP); in ocr0_iIjJ()
4691 i=loop(bp,x ,ye+2-y,dy,cs,0,UP); in ocr0_iIjJ()
4700 if( loop(bp, 0,2*dy/4,dx,cs,0,RI) in ocr0_iIjJ()
4701 -loop(bp,dx-1,2*dy/4,dx,cs,0,LE)>dx/8 ) Break; in ocr0_iIjJ()
4706 if( loop(bp,dx-1,3*dy/4,dx,cs,0,LE)>dx/2 in ocr0_iIjJ()
4707 && loop(bp,dx-1, dy-1,dx,cs,0,LE)<dx/4 ) Break; // ~d=cl in ocr0_iIjJ()
4718 for(ad=d=100;dy>4 && dx>0;){ // min 3x4 in ocr0_iIjJ()
4756 y= loop(bp,dx-xb,yc-1,dy,cs,0,DO); in ocr0_iIjJ()
4758 i=loop(bp,dx-xb-1,yc-1+y-1,dy,cs,0,DO); in ocr0_iIjJ()
4763 y= loop(bp,11*xa/16,yc-1,dy,cs,0,DO); in ocr0_iIjJ()
4769 y=loop(bp,x-1,ye+1,dy,cs,0,UP); in ocr0_iIjJ()
4770 i=loop(bp,x ,ye+2-y,dy,cs,0,UP); in ocr0_iIjJ()
4777 if (loop(bp,0,dy-1,dx,cs,0,RI) in ocr0_iIjJ()
4778 -loop(bp,0,dy-3,dx,cs,0,RI)>1+dx/16) ad=96*ad/100; // ~c in ocr0_iIjJ()
4781 if( loop(bp, 0,2*dy/4,dx,cs,0,RI) in ocr0_iIjJ()
4782 -loop(bp,dx-1,2*dy/4,dx,cs,0,LE)<=dx/8 ) Break; in ocr0_iIjJ()
4793 for(ad=d=100;dy>4 && dy>dx && 5*dy>4*(box1->m3-box1->m2);){ // min 3x4 in ocr0_iIjJ()
4798 x =loop(bp,0, dy/2,dx,cs,0,RI); // konvex? divided Q in ocr0_iIjJ()
4799 if(loop(bp,0,7*dy/8,dx,cs,0,RI) > x+dx/8) Break; in ocr0_iIjJ()
4800 for( y=dy/16;y<dy-1-dy/16;y++ ) in ocr0_iIjJ()
4802 if( num_cross(0, dx-1, y+dy/16 , y+dy/16 ,bp,cs) != 1 ) break; in ocr0_iIjJ()
4803 if( y<dy-1-dy/16 ) Break; in ocr0_iIjJ()
4804 x =loop(bp,0, dy/2,dx,cs,0,RI); in ocr0_iIjJ()
4805 i5=loop(bp,x, dy/2,dx,cs,1,RI); // center width in ocr0_iIjJ()
4806 for(y=dy/4;y<3*dy/4;y++ ){ // same width ? in ocr0_iIjJ()
4810 } if( y<3*dy/4 ) Break; in ocr0_iIjJ()
4814 for(i2=i1=0,y=0;y<dy/4;y++ ){ in ocr0_iIjJ()
4818 for(i4=i3=0,y=3*dy/4;y<dy;y++ ){ in ocr0_iIjJ()
4828 x =loop(bp,0, dy/8,dx,cs,0,RI); i1=x; in ocr0_iIjJ()
4829 x+=loop(bp,x, dy/8,dx,cs,1,RI); i1=(i1+x-1)/2; in ocr0_iIjJ()
4831 x =loop(bp,0,dy-1-dy/8,dx,cs,0,RI); i2=x; in ocr0_iIjJ()
4832 x+=loop(bp,x,dy-1-dy/8,dx,cs,1,RI); i2=(i2+x-1)/2; in ocr0_iIjJ()
4833 x =loop(bp,0,dy-2-dy/8,dx,cs,0,RI); i=x; in ocr0_iIjJ()
4834 x+=loop(bp,x,dy-2-dy/8,dx,cs,1,RI); i=(i+x-1)/2; if( i>i2 ) i2=i; in ocr0_iIjJ()
4838 if( get_line2(i1,dy/8,i2,dy-1-dy/8,bp,cs,100)<95 ) Break; in ocr0_iIjJ()
4842 y=dy/8; in ocr0_iIjJ()
4847 x =loop(bp,i2,dy-y-1,dx,cs,1,LE); j=x; in ocr0_iIjJ()
4848 x =loop(bp,i2,dy-y-2,dx,cs,1,LE); if(x>j)j=x; if(abs(i-j)>1+dx/8)Break; in ocr0_iIjJ()
4849 x =loop(bp,i2,dy-y-1,dx,cs,1,RI); j=x; in ocr0_iIjJ()
4850 x =loop(bp,i2,dy-y-2,dx,cs,1,RI); if(x>j)j=x; if(abs(i-j)>1+dx/8)Break; in ocr0_iIjJ()
4852 if(dy>15) // v024a4 in ocr0_iIjJ()
4853 if( loop(bp,dx-1,dy/16 ,dx,cs,0,LE) in ocr0_iIjJ()
4854 > loop(bp,dx-1,dy/4 ,dx,cs,0,LE)+1+dx/32 ) Break; // ~bad ) (thinn) in ocr0_iIjJ()
4856 for(i=0,y=dy/16;y<15*dy/16 && i<2;y++) in ocr0_iIjJ()
4861 if( get_bw(dx/4,dx/4, 0,dy/4,bp,cs,1) == 1 in ocr0_iIjJ()
4862 && get_bw(dx/4,dx/4,dy/2,dy-1,bp,cs,1) == 0 ) Break; in ocr0_iIjJ()
4863 if( loop(bp, 0,dy/4,dx,cs,0,RI)> dx/4 in ocr0_iIjJ()
4864 && loop(bp,dx-1,dy/4,dx,cs,0,LE)<=dx/4 in ocr0_iIjJ()
4865 && loop(bp, 1, 0,dy,cs,0,DO)<=dy/4 ) Break; // ~z in ocr0_iIjJ()
4873 if ( loop(bp,dx-1, dy/4,dx,cs,0,LE) > dx/2 in ocr0_iIjJ()
4874 && loop(bp,dx-1,3*dy/4,dx,cs,0,LE) > dx/2 in ocr0_iIjJ()
4875 && loop(bp, 0, dy/2,dx,cs,0,RI) < dx/4 ) Break; /* ~[ */ in ocr0_iIjJ()
4877 x =loop(bp, 0,dy/2,dx,cs,0,RI); // konvex/konkav? ~() in ocr0_iIjJ()
4878 i =loop(bp,dx-1,dy/2,dx,cs,0,LE); in ocr0_iIjJ()
4879 if( loop(bp, 0,7*dy/8,dx,cs,0,RI) > x+dx/8 in ocr0_iIjJ()
4880 && loop(bp, 0, dy/8,dx,cs,0,RI) > x+dx/8 in ocr0_iIjJ()
4881 && loop(bp,dx-1,7*dy/8,dx,cs,0,LE) < i-dx/8 in ocr0_iIjJ()
4882 && loop(bp,dx-1, dy/8,dx,cs,0,LE) < i-dx/8 ) Break; // ~( in ocr0_iIjJ()
4883 if( loop(bp, 0,7*dy/8,dx,cs,0,RI) < x-dx/8 in ocr0_iIjJ()
4884 && loop(bp, 0, dy/8,dx,cs,0,RI) < x-dx/8 in ocr0_iIjJ()
4885 && loop(bp,dx-1,7*dy/8,dx,cs,0,LE) > i+dx/8 in ocr0_iIjJ()
4886 && loop(bp,dx-1, dy/8,dx,cs,0,LE) > i+dx/8 ) Break; // ~) in ocr0_iIjJ()
4887 if( loop(bp, 0, dy/8,dx,cs,0,RI) in ocr0_iIjJ()
4888 -(dx-loop(bp,dx-1,7*dy/8,dx,cs,0,LE)) > dx/4 ) Break; // ~/ in ocr0_iIjJ()
4890 && loop(bp, 0, dy/8,dx,cs,0,RI) > dx/2 in ocr0_iIjJ()
4891 && loop(bp,dx-1,dy-1 ,dx,cs,0,LE) > dx/2 in ocr0_iIjJ()
4892 && loop(bp,dx-1,dy-1-dy/8,dx,cs,0,LE) > dx/2 ) ad=99*ad/100; // ~/ in ocr0_iIjJ()
4901 i3=loop(bp,dx-1, dy/4,dx,cs,0,LE); in ocr0_iIjJ()
4902 i4=loop(bp, 0,dy-1-dy/4,dx,cs,0,RI); in ocr0_iIjJ()
4904 || get_bw(x1-i3/4,x1-i3/4,y0,y0+dy/4,box1->p,cs,1) != 1 in ocr0_iIjJ()
4905 || get_bw(x0+i4/4,x0+i4/4,y1-dy/4,y1,box1->p,cs,1) != 1 ) in ocr0_iIjJ()
4919 for(bx=0,ax=dx,ay=by=y=0;y<dy/4;y++){ in ocr0_iIjJ()
4923 for(cx=dx,ex=0,ey=cy=y=dy-1;y>dy-1-dy/4;y--){ in ocr0_iIjJ()
4931 i=loop(bp,0,0,dy,cs,0,DO); in ocr0_iIjJ()
4932 if (i>dy/8 && i<dy/2) ad=99*ad/100; // ~1 in ocr0_iIjJ()
4944 for(ad=d=100;dy>4 && dy>=dx && dx>2;){ // min 3x4 ~Y)]d', in ocr0_iIjJ()
4972 i2=nearest_frame_vector(box1,i1,aa[3][3], x0-2*dx, y1-dy/8); in ocr0_iIjJ()
4987 if (box1->frame_vector[i ][1]-y0<dy/4) Break; // U in ocr0_iIjJ()
4988 if (box1->frame_vector[i ][1]-y0<=dy/2) ad=97*ad/100; // imperfect a in ocr0_iIjJ()
4992 -box1->frame_vector[j ][1]<=dy/4) Break; // imperfect a in ocr0_iIjJ()
4993 if (box1->frame_vector[i7][1]>y0+dy/4) Break; // not to low in ocr0_iIjJ()
4995 -box1->frame_vector[i7][1]<dy/2) Break; in ocr0_iIjJ()
4997 -box1->frame_vector[i5][1]<dy/2) Break; in ocr0_iIjJ()
5003 if (box1->frame_vector[i6][1]>y0+dy/8) ad=99*ad/100; // ~1 in ocr0_iIjJ()
5022 if (box1->frame_vector[ i][1] > y0+dy/4) break; in ocr0_iIjJ()
5051 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0_brackets() local
5058 for(ad=d=100;dx>1 && dy>2;){ // min 3x2 in ocr0_brackets()
5068 if (sdata->holes.num > 0 && (dx<6 || dy<6)) Break; /* # */ in ocr0_brackets()
5074 if (aa[1][1]-aa[0][1]<dy/2) Break; in ocr0_brackets()
5086 if (abs(aa[0][1]+aa[1][1]-2*y)>(dy+2)) Break; in ocr0_brackets()
5110 if (abs(aa[0][1]+aa[1][1]-2*y)>(dy+2)/4) Break; in ocr0_brackets()
5139 for(ad=d=100;dx>3 && dy>3;){ // min 4x4 for 4x6 font in ocr0_brackets()
5143 for(i=y=0;y<dy;y++){ in ocr0_brackets()
5148 if( y<dy ) Break; in ocr0_brackets()
5149 if ( i>2 || (i>0 && dy<16)) Break; in ocr0_brackets()
5152 i2=dx-1-loop(bp,dx-1,dy/2 ,dx,cs,0,LE) // be exact for small fonts in ocr0_brackets()
5153 +dx-1-loop(bp,dx-1,dy/2+dy%2-1,dx,cs,0,LE) in ocr0_brackets()
5154 + loop(bp, 0,dy/2 ,dx,cs,0,RI) in ocr0_brackets()
5155 + loop(bp, 0,dy/2+dy%2-1,dx,cs,0,RI); in ocr0_brackets()
5159 i1=loop(bp,dx-1,dy/16,dx,cs,0,LE); // right side in ocr0_brackets()
5160 i3=loop(bp,dx-1,dy-1 ,dx,cs,0,LE); in ocr0_brackets()
5162 i6=loop(bp, 0,dy-1 ,dx,cs,0,RI); in ocr0_brackets()
5168 for(i=i4,y=0;y<dy;y++){ in ocr0_brackets()
5170 } if( y<dy ) Break; in ocr0_brackets()
5171 for(i=i1,y=0;y<dy;y++){ in ocr0_brackets()
5173 } if( y<dy ) Break; in ocr0_brackets()
5181 for(ad=d=100;dx>1 && dy>4;){ // min 3x4 in ocr0_brackets()
5185 for(i=y=0;y<dy;y++){ in ocr0_brackets()
5190 if( y<dy ) {Break;}; in ocr0_brackets()
5191 if ( i>2 || (i>0 && dy<16)) {Break;}; in ocr0_brackets()
5194 for(i=dx,r1=r2=y=dy/2-dy/8;y<=dy/2+dy/8;y++){ in ocr0_brackets()
5198 i1=loop(bp,dx-1, dy/16,dx,cs,0,LE); in ocr0_brackets()
5200 i3=loop(bp,dx-1,dy-1-dy/16,dx,cs,0,LE); in ocr0_brackets()
5201 i4=loop(bp, 0,dy/16 ,dx,cs,0,RI); in ocr0_brackets()
5203 i6=loop(bp, 0,dy-1-dy/16,dx,cs,0,RI); in ocr0_brackets()
5204 if(dx>dy){ in ocr0_brackets()
5209 if( dx > 2 && 9*dx>=5*dy ){ // 4x6 screen-font (3*5) in ocr0_brackets()
5213 if( 2*dx > JOB->res.avX && 4*dx>dy ) ad=98; in ocr0_brackets()
5218 if (2*loop(bp, 0,dy-1-y/2,dx,cs,0,RI)+1+dx/16<i6+i5) ad=95*ad/100; in ocr0_brackets()
5231 i1=loop(bp,dx-1,dy/16,dx,cs,0,LE); in ocr0_brackets()
5232 i2=loop(bp,dx-1,dy/2 ,dx,cs,0,LE); in ocr0_brackets()
5233 i3=loop(bp,dx-1,dy-1 ,dx,cs,0,LE); in ocr0_brackets()
5235 i5=loop(bp, 0,dy/2,dx,cs,0,RI); in ocr0_brackets()
5236 i6=loop(bp, 0,dy-1,dx,cs,0,RI); in ocr0_brackets()
5240 if(2*i2<i1+i3 && 2*i5>i4+i6 && 2*dx<dy && dy>=i){ in ocr0_brackets()
5242 if(2*i2>i1+i3 && 2*i5<i4+i6 && 2*dx<dy && dy>=i){ in ocr0_brackets()
5245 for(x=y=0;y<dy/4;y++){ in ocr0_brackets()
5248 for(y=0;y<(dy+2)/4;y++){ in ocr0_brackets()
5249 i=loop(bp,0,y+dy/8,dx,cs,0,RI);if( i<x ) break; in ocr0_brackets()
5251 if( y==(dy+2)/4 ) {Break;}; // ~l (left upper side must be convex) Jul00 in ocr0_brackets()
5257 for(ad=d=98;dx>2 && dy>4 && dy>=2*dx;){ // (3,6) on 4x6 font in ocr0_brackets()
5261 for(y=0;y<dy;y++){ in ocr0_brackets()
5263 } if (y<dy) {Break;}; in ocr0_brackets()
5270 if( get_bw(x0+dx/2,x1,y0+dy/4,y1-dy/4,box1->p,cs,1) == 0 ) in ocr0_brackets()
5274 if( get_bw(x0,x1-dx/2,y0+dy/4,y1-dy/4,box1->p,cs,1) == 0 ) in ocr0_brackets()
5281 for(ad=d=100;dx>2 && dy>3;){ in ocr0_brackets()
5294 if (aa[1][1]-aa[0][1]<7*dy/8) Break; in ocr0_brackets()
5295 if (aa[2][1]-aa[3][1]<7*dy/8) Break; in ocr0_brackets()
5311 if (y-y0 > 5*dy/8) Break; in ocr0_brackets()
5316 && box1->frame_vector[i3][1]-y<=dy/8) Break; in ocr0_brackets()
5333 for(ad=d=98;dx>5 && dy>7 && 2*dy>3*dx;){ // only for accurate font at the moment in ocr0_brackets()
5338 if( num_cross(0,dx-1,dy-1,dy-1,bp,cs) != 1 ) break; in ocr0_brackets()
5339 if ( loop(bp,dx-1,dy/2,dx,cs,0,LE) in ocr0_brackets()
5340 +loop(bp, 0,dy/2,dx,cs,0,RI) <= dx/4 ) break; // O in ocr0_brackets()
5341 for(y=dy/8;y<dy-dy/8;y++){ in ocr0_brackets()
5343 } if (y<dy-dy/8) break; in ocr0_brackets()
5344 if( get_bw((3*x0+5*x1)/8,x1,y0+3*dy/16,y1-3*dy/16,box1->p,cs,1) == 0) in ocr0_brackets()
5346 if( get_bw(x0,(5*x0+3*x1)/8,y0+3*dy/16,y1-3*dy/16,box1->p,cs,1) == 0) in ocr0_brackets()
5351 for(ad=d=99;dx>2 && dy>5 && 2*dy>3*dx;){ in ocr0_brackets()
5355 for(y=0;y<dy;y++){ in ocr0_brackets()
5357 } if (y<dy) Break; in ocr0_brackets()
5359 if( num_cross(dx-1-x,dx-1-x,0,dy-1,bp,cs) != 2 ) break; in ocr0_brackets()
5361 if ( num_cross(dx-1,dx-1,dy/4,dy-1-dy/4,bp,cs) != 0 ) Break; in ocr0_brackets()
5362 if ( num_cross( 0, 0,dy/4,dy-1-dy/4,bp,cs) != 1 ) Break; in ocr0_brackets()
5363 if ( loop(bp,0,dy-1,dx,cs,0,RI)>3*dx/4 ) ad=99*ad/100; in ocr0_brackets()
5365 if ( loop(bp,0, 0,dy,cs,0,DO)<dy/2-1 ) ad=98*ad/100; in ocr0_brackets()
5366 if ( loop(bp,0,dy-1,dy,cs,0,UP)<dy/2-2 ) ad=98*ad/100; // ( in ocr0_brackets()
5370 if ( loop(bp,dx-2,dy-1,dy,cs,0,UP)>dy/4 ) Break; // f in ocr0_brackets()
5371 if ( get_bw(x0,x0,y0,y0+dy/4,box1->p,cs,1) == 1 in ocr0_brackets()
5372 || get_bw(x0,x0,y1-dy/4,y1,box1->p,cs,1) == 1 ) Break; in ocr0_brackets()
5375 for(ad=d=99;dx>2 && dy>5 && 2*dy>3*dx;){ in ocr0_brackets()
5378 for(y=0;y<dy;y++){ in ocr0_brackets()
5380 } if (y<dy) Break; in ocr0_brackets()
5382 if( num_cross(x,x,0,dy-1,bp,cs) != 2 ) break; in ocr0_brackets()
5384 if ( num_cross( 0, 0,dy/4,dy-1-dy/4,bp,cs) != 0 ) Break; in ocr0_brackets()
5385 if ( num_cross(dx-1,dx-1,dy/4,dy-1-dy/4,bp,cs) != 1 ) Break; in ocr0_brackets()
5386 if ( loop(bp,dx-1,dy-1,dx,cs,0,LE)>3*dx/4 ) {ad=99*ad/100;} in ocr0_brackets()
5388 if ( loop(bp,dx-1, 0,dy,cs,0,DO)<dy/2-1 ) {ad=98*ad/100;} in ocr0_brackets()
5389 if ( loop(bp,dx-1,dy-1,dy,cs,0,UP)<dy/2-2 ) {ad=98*ad/100;} // ) in ocr0_brackets()
5393 if ( loop(bp,1,dy-1,dy,cs,0,UP)>dy/4 ) Break; // ??? in ocr0_brackets()
5394 if ( get_bw(x1,x1,y0,y0+dy/4,box1->p,cs,1) == 1 in ocr0_brackets()
5395 || get_bw(x1,x1,y1-dy/4,y1,box1->p,cs,1) == 1 ) Break; in ocr0_brackets()
5408 int dx=x1-x0+1,dy=y1-y0+1, /* size */
5422 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0p9() local
5440 for(ad=d=100;dx>3 && dy>6;){ // min 4x7 in ocr0p9()
5450 if( num_cross(x0 ,x1 ,y0+dy/4 ,y0+dy/4 ,box1->p,cs) != 2 in ocr0p9()
5451 && num_cross(x0 ,x1 ,y0+dy/4+1,y0+dy/4+1,box1->p,cs) != 2 ) break; in ocr0p9()
5452 for(i=1+dy/16,y=y0+dy/8;y<y1-dy/4 && i>0;y++){ in ocr0p9()
5453 if( y<y1-6*dy/16 ){ if( num_cross(x0 ,x1 ,y,y,box1->p,cs) != 2 ) i--;} in ocr0p9()
5456 if( y<y1-5*dy/16 ) in ocr0p9()
5461 for(y=y0+dy/3;y<y1-dy/3;y++){ in ocr0p9()
5466 } if( y>=y1-dy/3 ) break; in ocr0p9()
5468 for(y=y0+dy/5;y<y0+dy/3;y++) in ocr0p9()
5470 if( y>=y0+dy/3 ) break; in ocr0p9()
5472 for(y=y0+dy/2;y<y1;y++) in ocr0p9()
5476 for(y=y1-dy/3;y<y1-dy/8;y++){ in ocr0p9()
5480 } if( y<y1-dy/8 ) break; // ~Q in ocr0p9()
5484 && loop(box1->p,x1,y1-dy/4,dx,cs,0,LE)>dx/8 ) break; // ~R in ocr0p9()
5491 i=loop(bp,dx/2,dy-1,dy,cs,0,UP)+dy/64; // Jul00 in ocr0p9()
5493 if( loop(bp,x,dy-1,dy,cs,0,UP) > i ) break; in ocr0p9()
5496 x=x0+loop(bp,0,dy/4,dx,cs,0,RI); in ocr0p9()
5498 if( get_bw(x,x,y0,y0+dy/4,box1->p,cs,1) == 0 ) break; in ocr0p9()
5510 for(ad=d=100;dx>2 && dy>2;){ // min 3x3 in ocr0p9()
5513 xa=(dx+1)/3-1; ya=(dy+1)/3-1; in ocr0p9()
5522 if (3*dx<2*dy) ad=99*ad/100; // ~t in ocr0p9()
5530 for(ad=d=99;dx>3 && dy>5;){ // min 3x4 in ocr0p9()
5534 if( get_bw(x0,x0+dx/5,y0 ,y0+dy/18,box1->p,cs,1) == 1 ) Break; in ocr0p9()
5535 if( get_bw(x0,x0+dx/9,y1-dy/23,y1 ,box1->p,cs,1) == 1 ) Break; in ocr0p9()
5536 if( get_bw(x1-dx/9,x1,y0 ,y0+dy/18,box1->p,cs,1) == 1 ) Break; in ocr0p9()
5537 if( get_bw(x1-dx/5,x1,y1-dy/23,y1 ,box1->p,cs,1) == 1 ) Break; in ocr0p9()
5538 if( get_bw(x0,x0+dx/3,y0+dy/3 ,y0+dy/2 ,box1->p,cs,1) != 1 ) Break; in ocr0p9()
5539 if( get_bw(x1-dx/3,x1,y1-dy/2 ,y1-dy/3 ,box1->p,cs,1) != 1 ) Break; in ocr0p9()
5544 for (x=0,i3=y=0;y<dy/3;y++) in ocr0p9()
5545 if( num_cross(x0,x1,y0+dy/2-y,y0+dy/2-y,box1->p,cs) == 2 ) { in ocr0p9()
5546 i = loop(box1->p,x0,y0+dy/2-y,dx,cs,0,RI); in ocr0p9()
5547 if (i>x) { x=i; i3=y0+dy/2-y; } in ocr0p9()
5549 for (x=0,i4=y=0;y<dy/3;y++) in ocr0p9()
5550 if( num_cross(x0,x1,y0+dy/2+y,y0+dy/2+y,box1->p,cs) == 2 ) { in ocr0p9()
5551 i = loop(box1->p,x0,y0+dy/2+y,dx,cs,0,RI); in ocr0p9()
5552 if (i>x) { x=i; i4=y0+dy/2+y; } in ocr0p9()
5561 for(ad=d=99;dx>3 && dy>4;){ /* 4x6 font */ in ocr0p9()
5564 if( get_bw(x1-dx/9,x1,y0,y0+dy/4,box1->p,cs,1) == 1 ) Break; // g in ocr0p9()
5565 if( loop(bp,dx/2,0,dy,cs,0,DO)>dy/2) Break; in ocr0p9()
5566 i1=loop(bp,0,dy/8 ,dx,cs,0,RI); if (i1>dx/2) Break; in ocr0p9()
5567 i =loop(bp,0,dy/4 ,dx,cs,0,RI); if (i1>dx/2) Break; if (i<i1) i1=i; in ocr0p9()
5568 i3=loop(bp,0,dy-dy/4 ,dx,cs,0,RI); if (i3>dx/2) Break; in ocr0p9()
5569 i =loop(bp,0,dy-dy/4-1,dx,cs,0,RI); if (i3>dx/2) Break; if (i<i3) i3=i; in ocr0p9()
5571 for( i2=0, y=dy/4; y<=dy/2+1; y++ ){ in ocr0p9()
5577 if( num_cross(dx-1,dx-1,dy/4,dy-1,bp,cs) < 1 ) Break; in ocr0p9()
5579 if( num_cross(x,x,dy/4,dy-1,bp,cs) > 1 ) break; in ocr0p9()
5581 if( num_cross(0,dx-1,dy-1-dy/4,dy-1-dy/4,bp,cs) > 3 ) { // glued ah in ocr0p9()
5582 if (dy>15) { Break; } else ad=96*ad/100; in ocr0p9()
5592 for(ad=d=100;dx>7 && dy>7;){ in ocr0p9()
5595 if( num_cross(0,dx-1, dy/4, dy/4,bp,cs) != 3 ) break; in ocr0p9()
5596 if( num_cross(0,dx-1, dy/2, dy/2,bp,cs) != 4 ) break; in ocr0p9()
5597 if( num_cross(dx/2,dx-1,dy/2, dy/2,bp,cs) != 2 ) break; in ocr0p9()
5598 if( num_cross(0,dx-1,3*dy/4,3*dy/4,bp,cs) != 2 ) break; in ocr0p9()
5599 if( num_cross(0,dx-1, dy-1, dy-1,bp,cs) != 1 ) break; in ocr0p9()
5600 if( num_cross( 0, 0,0,dy-1,bp,cs) != 1 ) break; in ocr0p9()
5601 if( num_cross( dx/3, dx/3,0,dy-1,bp,cs) != 4 ) break; in ocr0p9()
5602 if( num_cross(13*dx/16,13*dx/16,0,dy/8,bp,cs) != 0 ) break; in ocr0p9()
5603 if( num_cross(4*dx/8,4*dx/8,dy-dy/4,dy-1,bp,cs) != 1 ) break; in ocr0p9()
5604 if( num_cross(3*dx/8,3*dx/8,dy-dy/4,dy-1,bp,cs) != 1 ) break; in ocr0p9()
5605 if( num_cross(5*dx/8,5*dx/8,dy-dy/4,dy-1,bp,cs) != 1 ) break; in ocr0p9()
5607 if( num_hole(x0+dx/8,x1-dx/4,y0,y1-dy/4,box1->p,cs,NULL) != 1 ) break; in ocr0p9()
5614 for(ad=d=98;dx>2 && dy>5;){ // min 3x(4+2) in ocr0p9()
5630 for (y=0;y<dy/2;y++) in ocr0p9()
5632 if (y==dy/2) Break; in ocr0p9()
5635 for(y=y0+dy/2;y<=i1;y++) in ocr0p9()
5647 for(ad=d=99; dy>4 && dy>2*dx;){ // min 3x4 in ocr0p9()
5652 if (num_cross(x0,x1,y0+dy/2,y0+dy/2,box1->p,cs)!=1) Break; in ocr0p9()
5656 if (y==y1 && y>box1->m3-dy/8) ad=ad*97/100; /* missing dot? */ in ocr0p9()
5669 } if(y<=i2 || i1==0 || i1<y0+dy/2) Break; in ocr0p9()
5671 if( loop(bp,dx-1,dy/8,dx,cs,0,LE) in ocr0p9()
5679 for(ad=d=99;dx>2 && dy>4;){ in ocr0p9()
5682 if( num_cross(0,dx-1, 0,dy-1,bp,cs) != 1 in ocr0p9()
5683 && num_cross(0,dx-1, 1,dy-2,bp,cs) != 1 ) Break; in ocr0p9()
5684 if( num_cross(0,dx-1,dy-1,dy-1,bp,cs) != 2 in ocr0p9()
5685 && num_cross(0,dx-1,dy-2,dy-2,bp,cs) != 2 ) Break; in ocr0p9()
5686 x=dx/2;y=(6*dy+8)/16; // center point 6/8=6/2^3 rounded in ocr0p9()
5693 if (dy<8) in ocr0p9()
5697 i=get_line2(x,y,(5*dx+4)/8,dy-1,bp,cs,100); in ocr0p9()
5698 j=get_line2(x,y,(6*dx+4)/8,dy-1,bp,cs,100); if(j>i) dbg[2]=i=j; in ocr0p9()
5701 dbg[3]=i=get_line2(x, y,(2*dx+4)/8,dy-1,bp,cs,100); if(i<95) Break; // straight up in ocr0p9()
5703 dbg[4]=i=get_bw( x, x,dy-1-dy/8,dy-1,bp,cs,1); if(i==1) Break; in ocr0p9()
5704 dbg[5]=i=get_line2( dx/4,dy/4, 0,0,bp,cs,101); if(i<95) Break; // upper left gap in ocr0p9()
5705 dbg[6]=i=get_line2(dx-1-dx/4,dy/4,dx-1,0,bp,cs,101); if(i<95) Break; // upper right gap in ocr0p9()
5711 for(ad=d=100;dx>4 && dy>4;){ in ocr0p9()
5714 if( num_cross(0,dx-1, dy/8, dy/8,bp,cs) != 3 in ocr0p9()
5715 && num_cross(0,dx-1, 1+dy/8, 1+dy/8,bp,cs) != 3) Break; in ocr0p9()
5716 if( num_cross(0,dx-1,dy-2-dy/8,dy-2-dy/8,bp,cs) != 3) Break; in ocr0p9()
5717 if( num_cross(0 , 0, 0,dy-1,bp,cs) != 2) Break; in ocr0p9()
5718 if( num_cross(dx-1,dx-1, 0,dy-1,bp,cs) != 2) Break; in ocr0p9()
5719 if( num_cross(0,dx-1,dy/2,dy/2,bp,cs) != 1) Break; in ocr0p9()
5720 if( num_cross( 0 ,dx/8,dy/2,dy/2,bp,cs) != 0) Break; in ocr0p9()
5721 if( num_cross(dx-1-dx/8,dx-1,dy/2,dy/2,bp,cs) != 0) Break; in ocr0p9()
5723 dbg[0]=i=get_line2(0,dy-2-dy/8,dx-1,dy/8,bp,cs,100); if(i<95) Break; // black upwarts beam in ocr0p9()
5724 dbg[1]=i=get_line2(0,dy/8,dx-1,dy-2-dy/8,bp,cs,100); if(i<95) Break; // black downwards beam in ocr0p9()
5726 dbg[2]=i=get_line2(dx/2,0,dx/2, dy-1,bp,cs,100); if(i<95) Break; in ocr0p9()
5734 for(ad=d=99;dx>5 && dy>7;){ in ocr0p9()
5737 if (loop(bp, 0,dy/2,dx,cs,0,RI)>dx/4) Break; in ocr0p9()
5738 if (loop(bp,dx-1,dy/2,dx,cs,0,LE)>dx/4) Break; in ocr0p9()
5739 if (loop(bp,dx/2,dy-1,dy,cs,0,UP)>dx/8) Break; in ocr0p9()
5740 if (loop(bp,dx/2, 0,dy,cs,0,DO)>dx/8) Break; in ocr0p9()
5752 y=dy/2; in ocr0p9()
5757 i=num_cross(x,x,0,dy-1,bp,cs); if (i<2) Break; in ocr0p9()
5758 if (i!=4) { j=num_cross(x+1,x+1,0,dy-1,bp,cs); in ocr0p9()
5760 if (i!=4) { j=num_cross(x+2,x+2,0,dy-1,bp,cs); in ocr0p9()
5767 if( num_cross(x,x,y,dy-1,bp,cs) != 2 ) Break; in ocr0p9()
5771 if( num_hole(x0+dx/8,x1-3*dx/16,y0+dy/8,y1-dy/8,box1->p,cs,NULL) != 1 ) Break; in ocr0p9()
5778 for(ad=d=100;dx>4 && dy>15;){ in ocr0p9()
5781 if( get_bw( 0,dx/2,3*dy/4,3*dy/4,bp,cs,1) == 1 ) break; in ocr0p9()
5782 if( get_bw(3*dx/4,dx-1,3*dy/4,3*dy/4,bp,cs,1) == 0 ) break; in ocr0p9()
5783 if( get_bw( 0,dx/4, dy/4, dy/4,bp,cs,1) == 0 ) break; in ocr0p9()
5784 if( get_bw( dx/2,dx-1, dy/4, dy/4,bp,cs,1) == 1 ) break; in ocr0p9()
5785 if( get_bw(dx/2,dx/2, 0, dy/4,bp,cs,1) == 0 ) break; in ocr0p9()
5786 if( get_bw(dx/2,dx/2,dy-1-dy/4, dy-1,bp,cs,1) == 0 ) break; in ocr0p9()
5787 if( num_cross(dx/2,dx/2,0,dy-1,bp,cs) != 4 ) break; in ocr0p9()
5788 if( num_cross(x0,x1,y0+dy/2,y0+dy/2,box1->p,cs) != 2 ) break; in ocr0p9()
5789 if( num_hole( x0,x1,y0+dy/4,y1-dy/4,box1->p,cs,NULL) != 1 ) break; in ocr0p9()
5802 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0px() local
5819 for(ad=98;dx>4 && dy>6;){ // Dec00 body copied from H in ocr0px()
5822 if( num_cross(0,dx-1, dy/4 , dy/4 ,bp,cs) != 2 in ocr0px()
5823 && num_cross(0,dx-1,3*dy/16,3*dy/16,bp,cs) != 2 ) break; in ocr0px()
5824 if( num_cross(0,dx-1,3*dy/4 ,3*dy/4 ,bp,cs) != 2 in ocr0px()
5825 && num_cross(0,dx-1,3*dy/4+1,3*dy/4+1,bp,cs) != 2 ) break; in ocr0px()
5826 if( loop(bp,0 ,dy/8,dx,cs,0,RI) in ocr0px()
5827 + loop(bp,dx-1,dy/8,dx,cs,0,LE)>dx/2 ) break; // ~A in ocr0px()
5828 for( j1=0,i=1,y=y0+dy/10; y<y1-dy/10 && i; y++ ) // 2 vertikal lines in ocr0px()
5834 y=loop(bp,x ,dy-1,dy,cs,0,UP); in ocr0px()
5835 if ( y > 3*dy/8 ) break; in ocr0px()
5836 if ( 10*y > dy ){ /* italic */ in ocr0px()
5837 i=loop(bp,x ,dy-y,dx,cs,0,RI); in ocr0px()
5838 if( i>1 && y+loop(bp,x+i-1,dy-y,dy,cs,0,UP)>3*dy/8 ) break; in ocr0px()
5841 x=loop(box1->p,x0 ,y1-dy/8,dx,cs,0,RI) in ocr0px()
5842 +loop(box1->p,x1 ,y1-dy/8,dx,cs,0,LE); in ocr0px()
5843 for( i=1,y=dy/4; y<dy-1-dy/4 && i; y++ ) // max - min width in ocr0px()
5847 for( i=0,ya=y=y0+dy/4; y<y1-dy/3; y++ ) // horizontal line in ocr0px()
5853 for( y=ya; y<dy-dy/4; y++ ) // ~M Dec00 in ocr0px()
5856 if ( y<dy-dy/4 ) break; in ocr0px()
5858 if( get_bw( x, x,y0 ,y0+dy/4,box1->p,cs,1) == 0 ) i=0; in ocr0px()
5861 if( get_bw( x, x,y1-dy/4,y1 ,box1->p,cs,1) == 0 ) i=0; in ocr0px()
5864 if( num_cross(x,x,y0+dy/8,y1-dy/8, box1->p,cs) == 1 ) i=0; in ocr0px()
5866 for(i=1,y=y0;y<=y0+dy/4 && i;y++){ in ocr0px()
5869 for(i=1,y=y1-dy/4;y<=y1 && i;y++){ in ocr0px()
5872 if( num_cross(x0 ,x0+dx/8 ,y0+dy/8 ,y0 ,box1->p,cs) != 0 ) ad=96*ad/100; in ocr0px()
5873 if( get_bw(x1-dx/8, x1 , y0, y0+dy/8,box1->p,cs,1) != 1 ) break; in ocr0px()
5874 if( get_bw(x0 , x0+dx/8, y1-dy/8, y1,box1->p,cs,1) != 1 ) break; in ocr0px()
5875 i1=loop(bp,dx-1, dy/4,dx,cs,0,LE); if(i1>dx/2) break; in ocr0px()
5876 i2=loop(bp,dx-1, dy/2,dx,cs,0,LE); if(i2<i1-dx/4 || i2>i1+dx/8) break; in ocr0px()
5877 i3=loop(bp,dx-1,dy-1-dy/4,dx,cs,0,LE); if(i3<i2-dx/4 || i3>i2+dx/8) break; in ocr0px()
5879 if( num_hole(x0,x1,y0+dy/4,y1,box1->p,cs,NULL) != 0 ) break; in ocr0px()
5888 for(ad=98;dx>4 && dy>6;){ // provisorium in ocr0px()
5891 if( num_cross( dx/4,dx-1,3*dy/16,3*dy/16,bp,cs) != 2 in ocr0px()
5892 && num_cross(dx-1-dx/4,dx-1,3*dy/16,3*dy/16,bp,cs) != 1 ) Break; in ocr0px()
5893 if( num_cross(0,dx-1,3*dy/ 4,3*dy/ 4,bp,cs) < 2 ) Break; in ocr0px()
5894 if( num_cross(0,dx-1, 0, dy-1,bp,cs) < 3 ) Break; in ocr0px()
5895 if( num_cross(dx-1,0, 0, dy-1,bp,cs) < 3 ) Break; in ocr0px()
5896 if( num_cross(0,dx-1, dy/16, dy/16,bp,cs) < 2 ) in ocr0px()
5897 if( num_cross(0,dx-1,1+dy/16,1+dy/16,bp,cs) < 2 ) Break; in ocr0px()
5898 if( num_cross(0,dx-1,dy-1-dy/16,dy-1-dy/16,bp,cs) < 2 ) Break; in ocr0px()
5899 for( x=0,i2=y=dy/4; y<3*dy/4; y++ ){ in ocr0px()
5902 for( x=0,i4=y=dy/4; y<3*dy/4; y++ ){ in ocr0px()
5905 for( x=0,i4=y=dy/8; y<3*dy/4; y++ ){ in ocr0px()
5910 if( num_hole(x0,x0+3*dx/4,y0+dy/4,y1,box1->p,cs,NULL) != 1 ) Break; in ocr0px()
5911 if( num_hole(x0+dx/2-1,x1,y0,y1-dy/4,box1->p,cs,NULL) != 1 ) Break; in ocr0px()
5920 for(ad=98;dx>5 && dy>6;){ // provisorium in ocr0px()
5923 if( num_cross(0,dx-1,3*dy/16,3*dy/16,bp,cs) < 2 ) Break; in ocr0px()
5924 if( num_cross(0,dx-1,3*dy/ 4,3*dy/ 4,bp,cs) < 2 ) Break; in ocr0px()
5925 if( num_cross(0,dx-1, 0, dy-1,bp,cs) < 3 ) Break; in ocr0px()
5926 if( num_cross(0,dx-1, dy/16, dy/16,bp,cs) != 1 in ocr0px()
5927 && num_cross(0,dx-1, dy/32, dy/32,bp,cs) != 1 in ocr0px()
5937 for( x=dx,i1=i3=0,i2=y=dy/4; y<3*dy/4; y++ ){ in ocr0px()
5942 } if( y<3*dy/4 || i1<dx/4-1 || i3<dx/4-1) Break; in ocr0px()
5943 for( i1=i3=0,y=0; y<dy/8; y++ ){ in ocr0px()
5946 j=loop(bp,dx-1 ,dy-1-y,dx,cs,0,LE); in ocr0px()
5947 j=loop(bp,dx-1-j,dy-1-y,dx,cs,1,LE); if(j>i3) { i3=j; } in ocr0px()
5950 if( num_cross(x,x, 0,dy-1,bp,cs) == 3 ) in ocr0px()
5951 if( num_cross(x,x, 0,dy/4,bp,cs) == 1 ) in ocr0px()
5952 if( num_cross(x-1,dx-1-dx/8,3*dy/4,3*dy/4,bp,cs) == 0 ) in ocr0px()
5953 if( num_cross(x,x,3*dy/4,dy-1,bp,cs) == 1 ) break; in ocr0px()
5956 if( num_hole(x0,x0+3*dx/4,y0,y1-dy/4,box1->p,cs,NULL) != 1 ) Break; in ocr0px()
5965 for(ad=99;dx>4 && dy>4;){ // provisorium in ocr0px()
5968 if( num_cross( 0,dx-1,dy/2,dy/2,bp,cs) != 3 ) Break; in ocr0px()
5969 if( num_cross(dx/2,dx/2, 0,dy-1,bp,cs) != 3 ) Break; in ocr0px()
5970 if (loop(bp,dx-1,3*dy/8,dx,cs,0,RI)>dx/8) Break; in ocr0px()
5971 if (loop(bp, 0,5*dy/8,dx,cs,0,RI)>dx/8) Break; in ocr0px()
5974 if( num_cross( 0,dx-1,dy-1,dy-1,bp,cs) > 2 ) Break; in ocr0px()
5975 if( num_cross( 0,3*dx/4,dy-1,dy-1,bp,cs) > 2 ) Break; in ocr0px()
5976 if( num_cross( 0, 0, 0,dy-1,bp,cs) > 2 ) Break; in ocr0px()
5977 if( num_cross(dx-1,dx-1, 0,dy-1,bp,cs) > 2 ) Break; in ocr0px()
5978 if( num_cross( 0, 0,dy/4,dy-1,bp,cs) > 2 ) Break; in ocr0px()
5979 if( num_cross(dx-1,dx-1, 0,3*dy/4,bp,cs) > 2 ) Break; in ocr0px()
5982 i2 =loop(bp, 0,dy-1,dx,cs,0,RI); if( i2>dx/8 ) Break; in ocr0px()
5983 for(y=1;y<dy-1;y++){ in ocr0px()
5984 x=i1+y*(i2-i1)/dy-dx/8; if(x<0)x=0; in ocr0px()
5986 } if( y<dy-1 ) Break; in ocr0px()
5987 if( num_cross( 0 ,dx/4,dy/2,dy/2,bp,cs) != 1 ) Break; in ocr0px()
5988 if( num_cross(dx-1-dx/4,dx-1,dy/2,dy/2,bp,cs) != 1 ) Break; in ocr0px()
5989 if( num_cross(dx/4,dx-1-dx/4,dy/2,dy/2,bp,cs) != 1 ) Break; in ocr0px()
6004 for(ad=98;dx>4 && dy>4;){ // provisorium in ocr0px()
6007 if( num_cross( 0,dx-1,dy/2,dy/2,bp,cs) != 2 ) Break; in ocr0px()
6008 if( num_cross(0,dx-1-dx/4,dy/2,dy/2,bp,cs) != 2 ) Break; in ocr0px()
6009 if( num_cross(dx/2,dx/2, 0,dy-1,bp,cs) != 3 ) Break; in ocr0px()
6012 if( num_cross( 0,dx-1,dy-1,dy-1,bp,cs) > 2 ) Break; in ocr0px()
6013 if( num_cross( 0,3*dx/4,dy-1,dy-1,bp,cs) > 2 ) Break; in ocr0px()
6014 if( num_cross( 0, 0, 0,dy-1,bp,cs) > 2 ) Break; in ocr0px()
6015 if( num_cross(dx-1,dx-1, 0,dy-1,bp,cs) > 3 ) Break; in ocr0px()
6016 if( num_cross( 0, 0,dy/4,dy-1,bp,cs) > 2 ) Break; in ocr0px()
6017 if( num_cross(dx-1,dx-1, 0,3*dy/4,bp,cs) > 3 ) Break; in ocr0px()
6020 i2 =loop(bp, 0,dy-1,dx,cs,0,RI); if( i2>dx/4 ) Break; in ocr0px()
6021 for(y=0;y<dy;y++){ in ocr0px()
6022 x=i1+y*(i2-i1)/dy; if(x>dx/16+1) x-=dx/16+1; in ocr0px()
6026 } if( y<dy ) Break; in ocr0px()
6027 if( num_cross( 0 ,dx/4,dy/2,dy/2,bp,cs) != 1 ) Break; in ocr0px()
6028 if( num_cross(dx-1-dx/4,dx-1,dy/2,dy/2,bp,cs) != 0 ) Break; in ocr0px()
6029 if( num_cross(dx/4,dx-1-dx/4,dy/2,dy/2,bp,cs) != 1 ) Break; in ocr0px()
6041 for(ad=98;dx>4 && dy>6;){ // provisorium in ocr0px()
6044 if( num_cross(dx/2,dx/2, 0,dy-1,bp,cs) != 4 ) break; in ocr0px()
6046 if( num_cross( 0,dx-1,dy-1,dy-1,bp,cs) != 1 ) break; in ocr0px()
6047 if( num_cross( 0,dx-1,dy/2,dy/2,bp,cs) != 1 ) break; in ocr0px()
6048 for(i=0,y=dy/4;y<dy-dy/4-1;y++){ // check if no gap on left side in ocr0px()
6051 } if( y<dy-dy/4-1 || i<dx/2 ) break; in ocr0px()
6052 for(y=dy/4;y<dy-dy/4-1;y++){ // check for right horizontal gap in ocr0px()
6054 } if( y>=dy-dy/4-1 ) break; in ocr0px()
6065 for(ad=98;dx>3 && dy>6;){ // provisorium in ocr0px()
6068 j=loop(bp,dx-1,dy/16 ,dy,cs,0,LE); in ocr0px()
6069 x=loop(bp,dx-1,dy/16+1,dy,cs,0,LE); if (x<j) j=x; in ocr0px()
6071 if( num_cross(0,dx-1,3*dy/16,3*dy/16,bp,cs) > 2 ) break; in ocr0px()
6072 if( num_cross(0,dx-1, 0, dy-1,bp,cs) < 2 ) break; in ocr0px()
6073 if( num_cross(0,dx-1, dy/16, dy/16,bp,cs) > 2 ) break; in ocr0px()
6074 for( x=dx,i2=y=dy/4; y<3*dy/4; y++ ){ in ocr0px()
6077 for( x=0,i4=y=dy/4; y<5*dy/8; y++ ){ in ocr0px()
6080 j =loop(bp,dx/2,0,dy,cs,0,DO); in ocr0px()
6081 j+=loop(bp,dx/2,j,dy,cs,1,DO); if(j>dy/4) break; in ocr0px()
6082 j =loop(bp,dx/2,j,dy,cs,0,DO); if(j<dy/2) break; in ocr0px()
6083 j =loop(bp,dx-1 ,dy-1-dy/8,dx,cs,0,LE); if(j<dx/4 || 4*j>3*dx) break; in ocr0px()
6084 j =loop(bp,dx-1-j/2,dy-1-dy/8,dy,cs,0,UP); if(j>dy/2) break; // ~() in ocr0px()
6095 for(ad=99;dx>4 && dy>4;){ // never sure? in ocr0px()
6099 if( num_cross(0,dx-1, dy/8, dy/8,bp,cs) != 2 ) Break; in ocr0px()
6100 if( num_cross(0,dx-1,dy-1-dy/8,dy-1-dy/8,bp,cs) != 2 ) Break; in ocr0px()
6101 if( num_cross(0,dx-1, dy/2, dy/2,bp,cs) != 2 ) Break; in ocr0px()
6102 if( num_cross(0,dx/2, dy/2, dy/2,bp,cs) != 1 ) Break; in ocr0px()
6104 … j=loop(bp, 0,dy/8,dx,cs,0,RI); if(j<1 || j<dx/16) Break; if (j<dx/8) {ad=ad*96/100;} in ocr0px()
6105 … j=loop(bp, 0,dy/2,dx,cs,0,RI); if(j<1 || j<dx/16 || j>=dx/2) Break; if (j<dx/8) {ad=ad*96/100;} in ocr0px()
6106 … j=loop(bp,dx-1,dy/2,dx,cs,0,LE); if(j<1 || j<dx/16 || j>=dx/2) Break; if (j<dx/8) {ad=ad*96/100;} in ocr0px()
6107 … j=loop(bp,dx-1,dy-1,dx,cs,0,LE); if(j<1 || j<dx/16) Break; if (j<dx/8) {ad=ad*96/100;} in ocr0px()
6108 for( i1=i3=0,y=dy/4; y<dy/2; y++ ){ in ocr0px()
6111 j=loop(bp,0,dy-1-y,dx,cs,0,RI); if(j>3*dx/4) { i1=0; break; } in ocr0px()
6112 j=loop(bp,j,dy-1-y,dx,cs,1,RI); if(j>i3) { i3=j; } in ocr0px()
6118 if( num_hole(x0+dx/8,x1-dx/8,y0+dy/8,y1-dy/8,box1->p,cs,NULL) != 1 ) Break; in ocr0px()
6129 for(ad=96;dx>4 && dy>4 && 2*dx>dy;){ // provisorium in ocr0px()
6139 for(ad=99;dy>4 && 2*dx<dy;){ /* v0.44 */ in ocr0px()
6142 if( get_bw(x0+dx/8,x1-dx/8,y0+dy/9,y1-dy/9,box1->p,cs,2) != 0 ) break; in ocr0px()
6144 if( get_bw(x0 ,x0+dx/8,y0+dy/9,y1-dy/9,box1->p,cs,2) != 0 ) ad=99*ad/100; in ocr0px()
6145 if( get_bw(x1-dx/8,x1 ,y0+dy/9,y1-dy/9,box1->p,cs,2) != 0 ) ad=99*ad/100; in ocr0px()
6146 if( get_bw(x0+dx/8,x1-dx/8,y0 ,y0+dy/8,box1->p,cs,2) != 0 ) ad=99*ad/100; in ocr0px()
6147 if( get_bw(x0+dx/8,x1-dx/8,y1-dy/8,y1 ,box1->p,cs,2) != 0 ) ad=99*ad/100; in ocr0px()
6148 if (3*dx<dy) ad=98*ad/100; in ocr0px()
6149 if (4*dx<dy) ad=99*ad/100; in ocr0px()
6158 for(ad=100;dx>5 && dy>7;){ // provisorium in ocr0px()
6161 if( num_cross(x0,x1 ,y0+dy/4,y0+dy/4,box1->p,cs) != 3 in ocr0px()
6162 && num_cross(x0,x1 ,y0+dy/8,y0+dy/8,box1->p,cs) != 3 ) Break; in ocr0px()
6163 if( num_cross(x0,x1+dx/4,y1-dy/4,y1-dy/4,box1->p,cs) != 3 in ocr0px()
6164 && num_cross(x0,x1+dx/4,y1-dy/8,y1-dy/8,box1->p,cs) != 3 ) Break; in ocr0px()
6168 && dx>7 && dy>15) Break; in ocr0px()
6171 if (dx>7 && dy>12) { in ocr0px()
6172 if( num_hole(x0 ,x1 ,y0,y1-dy/4,box1->p,cs,NULL) != 1 ) Break; in ocr0px()
6173 if( num_hole(x0+dx/4,x1+dx/4,y0+dy/4,y1,box1->p,cs,NULL) != 1 ) Break; in ocr0px()
6178 <= loop(box1->p,x0,y0+dy/16+1,dx,cs,0,RI) ) ad=96*ad/100; // X in ocr0px()
6180 <= loop(box1->p,x1,y1-1-dy/16,dx,cs,0,LE) ) ad=96*ad/100; // X in ocr0px()
6182 if ( get_bw(x0+x,x0+x,y0+dy/8,y1-dy/8,box1->p,cs,2) != 2 ) break; in ocr0px()
6191 for(ad=d=99;dx>7 && dy>7;){ // min 3x4 in ocr0px()
6193 if( get_bw(x0 , x0+dx/2,y0+dy/2 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0px()
6194 if( get_bw(x1-dx/2 , x1 ,y0+dy/2 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0px()
6195 if( get_bw(x0+dx/2 , x0+dx/2,y0 , y0+dy/2,box1->p,cs,1) != 1 ) Break; in ocr0px()
6196 if( get_bw(x0+dx/2 , x0+dx/2,y0+dy/3 , y1-dy/3,box1->p,cs,1) != 0 ) Break; in ocr0px()
6198 if( num_cross(x0+dx/2,x0+dx/2,y0 , y1-dy/3,box1->p,cs) != 1 ) Break; in ocr0px()
6203 if( num_cross(x0 ,x0 ,y0+dy/3 , y1-dy/3,box1->p,cs) != 1 ) in ocr0px()
6204 if( num_cross(x0+1 ,x0+1 ,y0+dy/3 , y1-dy/3,box1->p,cs) != 1 ) Break; in ocr0px()
6205 if( num_cross(x1 ,x1 ,y0+dy/3 , y1-dy/3,box1->p,cs) != 1 ) in ocr0px()
6206 if( num_cross(x1-1 ,x1-1 ,y0+dy/3 , y1-dy/3,box1->p,cs) != 1 ) Break; in ocr0px()
6212 if( loop(bp,dx/2,dy-dy/4,x1-x0,cs,0,RI)>dx/4 in ocr0px()
6213 || loop(bp,dx/2,dy-dy/4,x1-x0,cs,0,LE)>dx/4 ) Break; in ocr0px()
6214 if( loop(bp,dx/2,3*dy/8,x1-x0,cs,0,RI)<dx/4 in ocr0px()
6215 || loop(bp,dx/2,3*dy/8,x1-x0,cs,0,LE)<dx/4 ) Break; in ocr0px()
6217 i=loop(bp,0,dy-1-dy/16,x1-x0,cs,0,RI); if(i>dx/8) Break; in ocr0px()
6218 x=loop(bp,i,dy-1-dy/16,x1-x0,cs,1,RI); i+=x; if(i<3*dx/8 || i>dx/2) Break; in ocr0px()
6219 x=loop(bp,i,dy-1-dy/16,x1-x0,cs,0,RI); i+=x; if(i<dx/2 || i>5*dx/8) Break; in ocr0px()
6220 x=loop(bp,i,dy-1-dy/16,x1-x0,cs,1,RI); i+=x; if(i<7*dx/8) Break; in ocr0px()
6224 i=loop(bp,x,dy-1,y1-y0,cs,0,UP); in ocr0px()
6225 if( i>3*dy/4 ) break; in ocr0px()
6242 int dx=x1-x0+1,dy=y1-y0+1, /* size */ in ocr0() local
6276 j=0; d=sq((x-x0)*128/dx)+sq((y-y0)*128/dy); in ocr0()
6280 j=1; d=sq((x-x0)*128/dx)+sq((y-y1)*128/dy); in ocr0()
6283 j=2; d=sq((x-x1)*128/dx)+sq((y-y1)*128/dy); in ocr0()
6286 j=3; d=sq((x-x1)*128/dx)+sq((y-y0)*128/dy); in ocr0()
6316 DBG( IFV out_b(box1,sdata.bp,0,0,dx,dy,160); ) in ocr0()
6325 for( ad=100; 2*dy<box1->m3-box1->m2 && 3*dx>=4*dy && dx>2; ){ // min 3x3 (small font) in ocr0()
6327 if( get_bw(x0+dx/8+1,x1-dx/8-1,y0+dy/8+((dy>2)?1:0), in ocr0()
6328 y1-dy/8-((dy>2)?1:0),box1->p,cs,2)==2 ) break; in ocr0()
6330 if (dx<=2*dy) ad=98*ad/100; in ocr0()
6331 if (dx<=3*dy) ad=99*ad/100; in ocr0()
6335 if ( dx<2*dy) ad=98*ad/100; in ocr0()
6336 if (2*dx<3*dy) ad=98*ad/100; in ocr0()
6345 for( ; dy>2 && dx>2; ){ // min 3x3 (small font) in ocr0()
6356 for( ad=100; dy>2 && dy>=2*dx; ){ // max 3x3 (small font) in ocr0()
6360 for( i1=dy/16;i1<dy/2;i1++) in ocr0()
6362 if (i1>=dy/2) break; in ocr0()
6363 for( i2=dy/16;i2<dy/2;i2++) in ocr0()
6365 if (i2>=dy/2) Break; in ocr0()
6371 ad=ad-abs(i1-i2)/dy*20; in ocr0()
6372 if (abs(i1-dx)>dy/4) Break; // round or quadratic dots? in ocr0()
6373 if (abs(i1-dx)>dy/8) ad=98*ad/100; in ocr0()
6374 if (abs(i2-dx)>dy/4) Break; // round or quadratic dots? in ocr0()
6375 if (abs(i2-dx)>dy/8) ad=98*ad/100; in ocr0()
6384 for( ad=100; dy>5 && dx>1 && dy>2*dx; ){ // max 3x3 (small font) in ocr0()
6388 for( i1=0;i1<dy/2;i1++) in ocr0()
6390 if (i1>=dy/2) break; in ocr0()
6391 for( i2=0;i2<dy/2;i2++) in ocr0()
6396 for (y=0;y<dy;y++) for (x=0;x<dx/2;x++) in ocr0()
6397 if ((getpixel(bp,x,y)<cs)!=(getpixel(bp,dx-1-x,y)<cs)) { y=dy+1; break; } in ocr0()
6398 if (y==dy) ad=96*ad/100; /* ~i */ in ocr0()
6401 if (i2-i1<dy/8) ad=99*ad/100; in ocr0()
6407 if( 3*dy<box1->m4-box1->m1 && abs(dx-dy)<(dx+dy)/4+2 in ocr0()
6414 ry=100*(2*y-(y0+y1))/dy; in ocr0()
6430 if( 3*dy<2*(box1->m4-box1->m1) in ocr0()
6432 && (2*dx<3*dy in ocr0()
6433 || get_bw(0,dx/2,dy/2,dy-1,bp,cs,1)==0) ){ // ocr-a-, in ocr0()
6436 if (dy==1 && dx==1) ad=98*ad/100; in ocr0()
6437 if (dy==2 && dx==1) ad=99*ad/100; // this is a problem case in ocr0()
6438 if (dx>=dy) ad=99*ad/100; in ocr0()
6439 if( 2*dy >= box1->m4-box1->m1) ad=98*ad/100; in ocr0()
6447 if( loop(box1->p,x0,y1-((dy>5)?1:0),x1-x0,cs,0,LE)>(dx+1)/2 ) in ocr0()
6454 if( 2*dy < box1->m4 -box1->m1+1 in ocr0()
6471 if (dx>dy) { ad=96*ad/100; MSG({}) } in ocr0()
6478 if( 2*dy<box1->m4-box1->m1 && dx>=dy && dx>3 && dy>1 in ocr0()
6493 if( 2*dy<box1->m4-box1->m1 && dx>=dy && dx>2 && dy>1 in ocr0()
6517 for(;y<y0+dy/2;y++)if( get_bw(x0+dx/4,x1,y,y,box1->p,cs,1)==1) break; in ocr0()
6519 if( y<y0+dy/4 ) in ocr0()
6520 for(;y<y0+dy/2;y++)if( get_bw(x0,x1,y,y,box1->p,cs,1)==0) break; in ocr0()
6521 if( y<y0+dy/2 && 5*(y-i1+1)>box1->m2-box1->m1){ in ocr0()
6532 if( get_bw(x0,x1,y,y,box1->p,cs,1)==0) { y0=y; dy=y1-y0+1; break; } // scan "a "o "u in ocr0()