tesseract_bin 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +23 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +46 -0
- data/VERSION +1 -0
- data/ext/tesseract_bin/extconf.rb +17 -0
- data/lib/tesseract_bin.rb +12 -0
- data/tesseract_bin.gemspec +660 -0
- data/test/helper.rb +18 -0
- data/test/test_tesseract_bin.rb +7 -0
- data/vendor/tesseract-2.04/AUTHORS +8 -0
- data/vendor/tesseract-2.04/COPYING +23 -0
- data/vendor/tesseract-2.04/ChangeLog +71 -0
- data/vendor/tesseract-2.04/INSTALL +229 -0
- data/vendor/tesseract-2.04/Makefile.am +20 -0
- data/vendor/tesseract-2.04/Makefile.in +641 -0
- data/vendor/tesseract-2.04/NEWS +1 -0
- data/vendor/tesseract-2.04/README +138 -0
- data/vendor/tesseract-2.04/ReleaseNotes +213 -0
- data/vendor/tesseract-2.04/StdAfx.cpp +8 -0
- data/vendor/tesseract-2.04/StdAfx.h +24 -0
- data/vendor/tesseract-2.04/ccmain/Makefile.am +63 -0
- data/vendor/tesseract-2.04/ccmain/Makefile.in +735 -0
- data/vendor/tesseract-2.04/ccmain/adaptions.cpp +1082 -0
- data/vendor/tesseract-2.04/ccmain/adaptions.h +109 -0
- data/vendor/tesseract-2.04/ccmain/applybox.cpp +891 -0
- data/vendor/tesseract-2.04/ccmain/applybox.h +73 -0
- data/vendor/tesseract-2.04/ccmain/baseapi.cpp +1105 -0
- data/vendor/tesseract-2.04/ccmain/baseapi.h +256 -0
- data/vendor/tesseract-2.04/ccmain/blobcmp.cpp +76 -0
- data/vendor/tesseract-2.04/ccmain/blobcmp.h +29 -0
- data/vendor/tesseract-2.04/ccmain/callnet.cpp +93 -0
- data/vendor/tesseract-2.04/ccmain/callnet.h +32 -0
- data/vendor/tesseract-2.04/ccmain/charcut.cpp +704 -0
- data/vendor/tesseract-2.04/ccmain/charcut.h +120 -0
- data/vendor/tesseract-2.04/ccmain/charsample.cpp +699 -0
- data/vendor/tesseract-2.04/ccmain/control.cpp +1842 -0
- data/vendor/tesseract-2.04/ccmain/control.h +198 -0
- data/vendor/tesseract-2.04/ccmain/docqual.cpp +1481 -0
- data/vendor/tesseract-2.04/ccmain/docqual.h +155 -0
- data/vendor/tesseract-2.04/ccmain/expandblob.cpp +82 -0
- data/vendor/tesseract-2.04/ccmain/expandblob.h +13 -0
- data/vendor/tesseract-2.04/ccmain/fixspace.cpp +989 -0
- data/vendor/tesseract-2.04/ccmain/fixspace.h +72 -0
- data/vendor/tesseract-2.04/ccmain/fixxht.cpp +825 -0
- data/vendor/tesseract-2.04/ccmain/fixxht.h +93 -0
- data/vendor/tesseract-2.04/ccmain/imgscale.cpp +154 -0
- data/vendor/tesseract-2.04/ccmain/imgscale.h +32 -0
- data/vendor/tesseract-2.04/ccmain/matmatch.cpp +391 -0
- data/vendor/tesseract-2.04/ccmain/matmatch.h +48 -0
- data/vendor/tesseract-2.04/ccmain/output.cpp +1273 -0
- data/vendor/tesseract-2.04/ccmain/output.h +116 -0
- data/vendor/tesseract-2.04/ccmain/pagewalk.cpp +666 -0
- data/vendor/tesseract-2.04/ccmain/pagewalk.h +155 -0
- data/vendor/tesseract-2.04/ccmain/paircmp.cpp +107 -0
- data/vendor/tesseract-2.04/ccmain/paircmp.h +43 -0
- data/vendor/tesseract-2.04/ccmain/pgedit.cpp +1867 -0
- data/vendor/tesseract-2.04/ccmain/pgedit.h +181 -0
- data/vendor/tesseract-2.04/ccmain/reject.cpp +1775 -0
- data/vendor/tesseract-2.04/ccmain/reject.h +181 -0
- data/vendor/tesseract-2.04/ccmain/scaleimg.cpp +366 -0
- data/vendor/tesseract-2.04/ccmain/scaleimg.h +35 -0
- data/vendor/tesseract-2.04/ccmain/tessbox.cpp +375 -0
- data/vendor/tesseract-2.04/ccmain/tessbox.h +110 -0
- data/vendor/tesseract-2.04/ccmain/tessedit.cpp +278 -0
- data/vendor/tesseract-2.04/ccmain/tessedit.h +49 -0
- data/vendor/tesseract-2.04/ccmain/tessembedded.cpp +110 -0
- data/vendor/tesseract-2.04/ccmain/tessembedded.h +38 -0
- data/vendor/tesseract-2.04/ccmain/tesseractfull.cc +37 -0
- data/vendor/tesseract-2.04/ccmain/tesseractmain.cpp +387 -0
- data/vendor/tesseract-2.04/ccmain/tesseractmain.h +58 -0
- data/vendor/tesseract-2.04/ccmain/tessio.h +110 -0
- data/vendor/tesseract-2.04/ccmain/tessvars.cpp +38 -0
- data/vendor/tesseract-2.04/ccmain/tessvars.h +48 -0
- data/vendor/tesseract-2.04/ccmain/tfacep.h +62 -0
- data/vendor/tesseract-2.04/ccmain/tfacepp.cpp +443 -0
- data/vendor/tesseract-2.04/ccmain/tfacepp.h +85 -0
- data/vendor/tesseract-2.04/ccmain/tstruct.cpp +549 -0
- data/vendor/tesseract-2.04/ccmain/tstruct.h +108 -0
- data/vendor/tesseract-2.04/ccmain/varabled.cpp +346 -0
- data/vendor/tesseract-2.04/ccmain/varabled.h +125 -0
- data/vendor/tesseract-2.04/ccmain/werdit.cpp +193 -0
- data/vendor/tesseract-2.04/ccmain/werdit.h +67 -0
- data/vendor/tesseract-2.04/ccstruct/Makefile.am +25 -0
- data/vendor/tesseract-2.04/ccstruct/Makefile.in +650 -0
- data/vendor/tesseract-2.04/ccstruct/blckerr.h +29 -0
- data/vendor/tesseract-2.04/ccstruct/blobbox.cpp +778 -0
- data/vendor/tesseract-2.04/ccstruct/blobbox.h +381 -0
- data/vendor/tesseract-2.04/ccstruct/blobs.cpp +247 -0
- data/vendor/tesseract-2.04/ccstruct/blobs.h +119 -0
- data/vendor/tesseract-2.04/ccstruct/blread.cpp +537 -0
- data/vendor/tesseract-2.04/ccstruct/blread.h +63 -0
- data/vendor/tesseract-2.04/ccstruct/callcpp.cpp +252 -0
- data/vendor/tesseract-2.04/ccstruct/coutln.cpp +650 -0
- data/vendor/tesseract-2.04/ccstruct/coutln.h +186 -0
- data/vendor/tesseract-2.04/ccstruct/crakedge.h +39 -0
- data/vendor/tesseract-2.04/ccstruct/genblob.cpp +133 -0
- data/vendor/tesseract-2.04/ccstruct/genblob.h +52 -0
- data/vendor/tesseract-2.04/ccstruct/hpddef.h +39 -0
- data/vendor/tesseract-2.04/ccstruct/hpdsizes.h +8 -0
- data/vendor/tesseract-2.04/ccstruct/ipoints.h +479 -0
- data/vendor/tesseract-2.04/ccstruct/labls.cpp +188 -0
- data/vendor/tesseract-2.04/ccstruct/labls.h +38 -0
- data/vendor/tesseract-2.04/ccstruct/linlsq.cpp +249 -0
- data/vendor/tesseract-2.04/ccstruct/linlsq.h +102 -0
- data/vendor/tesseract-2.04/ccstruct/lmedsq.cpp +453 -0
- data/vendor/tesseract-2.04/ccstruct/lmedsq.h +84 -0
- data/vendor/tesseract-2.04/ccstruct/mod128.cpp +100 -0
- data/vendor/tesseract-2.04/ccstruct/mod128.h +85 -0
- data/vendor/tesseract-2.04/ccstruct/normalis.cpp +176 -0
- data/vendor/tesseract-2.04/ccstruct/normalis.h +108 -0
- data/vendor/tesseract-2.04/ccstruct/ocrblock.cpp +369 -0
- data/vendor/tesseract-2.04/ccstruct/ocrblock.h +235 -0
- data/vendor/tesseract-2.04/ccstruct/ocrrow.cpp +216 -0
- data/vendor/tesseract-2.04/ccstruct/ocrrow.h +133 -0
- data/vendor/tesseract-2.04/ccstruct/pageblk.cpp +879 -0
- data/vendor/tesseract-2.04/ccstruct/pageblk.h +318 -0
- data/vendor/tesseract-2.04/ccstruct/pageres.cpp +330 -0
- data/vendor/tesseract-2.04/ccstruct/pageres.h +313 -0
- data/vendor/tesseract-2.04/ccstruct/pdblock.cpp +361 -0
- data/vendor/tesseract-2.04/ccstruct/pdblock.h +181 -0
- data/vendor/tesseract-2.04/ccstruct/pdclass.h +54 -0
- data/vendor/tesseract-2.04/ccstruct/points.cpp +102 -0
- data/vendor/tesseract-2.04/ccstruct/points.h +299 -0
- data/vendor/tesseract-2.04/ccstruct/polyaprx.cpp +588 -0
- data/vendor/tesseract-2.04/ccstruct/polyaprx.h +51 -0
- data/vendor/tesseract-2.04/ccstruct/polyblk.cpp +398 -0
- data/vendor/tesseract-2.04/ccstruct/polyblk.h +122 -0
- data/vendor/tesseract-2.04/ccstruct/polyblob.cpp +357 -0
- data/vendor/tesseract-2.04/ccstruct/polyblob.h +102 -0
- data/vendor/tesseract-2.04/ccstruct/polyvert.cpp +23 -0
- data/vendor/tesseract-2.04/ccstruct/polyvert.h +58 -0
- data/vendor/tesseract-2.04/ccstruct/poutline.cpp +441 -0
- data/vendor/tesseract-2.04/ccstruct/poutline.h +125 -0
- data/vendor/tesseract-2.04/ccstruct/quadlsq.cpp +147 -0
- data/vendor/tesseract-2.04/ccstruct/quadlsq.h +67 -0
- data/vendor/tesseract-2.04/ccstruct/quadratc.cpp +21 -0
- data/vendor/tesseract-2.04/ccstruct/quadratc.h +63 -0
- data/vendor/tesseract-2.04/ccstruct/quspline.cpp +382 -0
- data/vendor/tesseract-2.04/ccstruct/quspline.h +113 -0
- data/vendor/tesseract-2.04/ccstruct/ratngs.cpp +372 -0
- data/vendor/tesseract-2.04/ccstruct/ratngs.h +198 -0
- data/vendor/tesseract-2.04/ccstruct/rect.cpp +229 -0
- data/vendor/tesseract-2.04/ccstruct/rect.h +320 -0
- data/vendor/tesseract-2.04/ccstruct/rejctmap.cpp +545 -0
- data/vendor/tesseract-2.04/ccstruct/rejctmap.h +284 -0
- data/vendor/tesseract-2.04/ccstruct/rwpoly.cpp +89 -0
- data/vendor/tesseract-2.04/ccstruct/rwpoly.h +45 -0
- data/vendor/tesseract-2.04/ccstruct/statistc.cpp +905 -0
- data/vendor/tesseract-2.04/ccstruct/statistc.h +135 -0
- data/vendor/tesseract-2.04/ccstruct/stepblob.cpp +296 -0
- data/vendor/tesseract-2.04/ccstruct/stepblob.h +88 -0
- data/vendor/tesseract-2.04/ccstruct/txtregn.cpp +230 -0
- data/vendor/tesseract-2.04/ccstruct/txtregn.h +155 -0
- data/vendor/tesseract-2.04/ccstruct/vecfuncs.cpp +63 -0
- data/vendor/tesseract-2.04/ccstruct/vecfuncs.h +91 -0
- data/vendor/tesseract-2.04/ccstruct/werd.cpp +967 -0
- data/vendor/tesseract-2.04/ccstruct/werd.h +277 -0
- data/vendor/tesseract-2.04/ccutil/Makefile.am +19 -0
- data/vendor/tesseract-2.04/ccutil/Makefile.in +626 -0
- data/vendor/tesseract-2.04/ccutil/basedir.cpp +118 -0
- data/vendor/tesseract-2.04/ccutil/basedir.h +32 -0
- data/vendor/tesseract-2.04/ccutil/bits16.cpp +30 -0
- data/vendor/tesseract-2.04/ccutil/bits16.h +61 -0
- data/vendor/tesseract-2.04/ccutil/boxread.cpp +105 -0
- data/vendor/tesseract-2.04/ccutil/boxread.h +44 -0
- data/vendor/tesseract-2.04/ccutil/clst.cpp +626 -0
- data/vendor/tesseract-2.04/ccutil/clst.h +1085 -0
- data/vendor/tesseract-2.04/ccutil/debugwin.cpp +500 -0
- data/vendor/tesseract-2.04/ccutil/debugwin.h +103 -0
- data/vendor/tesseract-2.04/ccutil/elst.cpp +593 -0
- data/vendor/tesseract-2.04/ccutil/elst.h +1125 -0
- data/vendor/tesseract-2.04/ccutil/elst2.cpp +606 -0
- data/vendor/tesseract-2.04/ccutil/elst2.h +1121 -0
- data/vendor/tesseract-2.04/ccutil/errcode.cpp +104 -0
- data/vendor/tesseract-2.04/ccutil/errcode.h +104 -0
- data/vendor/tesseract-2.04/ccutil/fileerr.h +34 -0
- data/vendor/tesseract-2.04/ccutil/globaloc.cpp +115 -0
- data/vendor/tesseract-2.04/ccutil/globaloc.h +40 -0
- data/vendor/tesseract-2.04/ccutil/hashfn.cpp +57 -0
- data/vendor/tesseract-2.04/ccutil/hashfn.h +30 -0
- data/vendor/tesseract-2.04/ccutil/host.h +180 -0
- data/vendor/tesseract-2.04/ccutil/hosthplb.h +1 -0
- data/vendor/tesseract-2.04/ccutil/lsterr.h +43 -0
- data/vendor/tesseract-2.04/ccutil/mainblk.cpp +126 -0
- data/vendor/tesseract-2.04/ccutil/mainblk.h +39 -0
- data/vendor/tesseract-2.04/ccutil/memblk.cpp +1106 -0
- data/vendor/tesseract-2.04/ccutil/memblk.h +189 -0
- data/vendor/tesseract-2.04/ccutil/memry.cpp +532 -0
- data/vendor/tesseract-2.04/ccutil/memry.h +192 -0
- data/vendor/tesseract-2.04/ccutil/memryerr.h +38 -0
- data/vendor/tesseract-2.04/ccutil/mfcpch.cpp +5 -0
- data/vendor/tesseract-2.04/ccutil/mfcpch.h +37 -0
- data/vendor/tesseract-2.04/ccutil/ndminx.h +31 -0
- data/vendor/tesseract-2.04/ccutil/notdll.h +28 -0
- data/vendor/tesseract-2.04/ccutil/nwmain.h +176 -0
- data/vendor/tesseract-2.04/ccutil/ocrclass.h +345 -0
- data/vendor/tesseract-2.04/ccutil/ocrshell.cpp +772 -0
- data/vendor/tesseract-2.04/ccutil/ocrshell.h +191 -0
- data/vendor/tesseract-2.04/ccutil/platform.h +18 -0
- data/vendor/tesseract-2.04/ccutil/scanutils.cpp +543 -0
- data/vendor/tesseract-2.04/ccutil/scanutils.h +55 -0
- data/vendor/tesseract-2.04/ccutil/secname.h +9 -0
- data/vendor/tesseract-2.04/ccutil/serialis.cpp +117 -0
- data/vendor/tesseract-2.04/ccutil/serialis.h +93 -0
- data/vendor/tesseract-2.04/ccutil/stderr.h +26 -0
- data/vendor/tesseract-2.04/ccutil/strngs.cpp +495 -0
- data/vendor/tesseract-2.04/ccutil/strngs.h +138 -0
- data/vendor/tesseract-2.04/ccutil/tessclas.h +135 -0
- data/vendor/tesseract-2.04/ccutil/tessopt.cpp +61 -0
- data/vendor/tesseract-2.04/ccutil/tessopt.h +30 -0
- data/vendor/tesseract-2.04/ccutil/tprintf.cpp +122 -0
- data/vendor/tesseract-2.04/ccutil/tprintf.h +35 -0
- data/vendor/tesseract-2.04/ccutil/unichar.cpp +144 -0
- data/vendor/tesseract-2.04/ccutil/unichar.h +84 -0
- data/vendor/tesseract-2.04/ccutil/unicharmap.cpp +172 -0
- data/vendor/tesseract-2.04/ccutil/unicharmap.h +82 -0
- data/vendor/tesseract-2.04/ccutil/unicharset.cpp +307 -0
- data/vendor/tesseract-2.04/ccutil/unicharset.h +267 -0
- data/vendor/tesseract-2.04/ccutil/varable.cpp +672 -0
- data/vendor/tesseract-2.04/ccutil/varable.h +419 -0
- data/vendor/tesseract-2.04/classify/Makefile.am +24 -0
- data/vendor/tesseract-2.04/classify/Makefile.in +647 -0
- data/vendor/tesseract-2.04/classify/adaptive.cpp +535 -0
- data/vendor/tesseract-2.04/classify/adaptive.h +199 -0
- data/vendor/tesseract-2.04/classify/adaptmatch.cpp +2958 -0
- data/vendor/tesseract-2.04/classify/adaptmatch.h +86 -0
- data/vendor/tesseract-2.04/classify/baseline.cpp +58 -0
- data/vendor/tesseract-2.04/classify/baseline.h +91 -0
- data/vendor/tesseract-2.04/classify/blobclass.cpp +123 -0
- data/vendor/tesseract-2.04/classify/blobclass.h +49 -0
- data/vendor/tesseract-2.04/classify/chartoname.cpp +74 -0
- data/vendor/tesseract-2.04/classify/chartoname.h +21 -0
- data/vendor/tesseract-2.04/classify/cluster.cpp +2834 -0
- data/vendor/tesseract-2.04/classify/cluster.h +158 -0
- data/vendor/tesseract-2.04/classify/clusttool.cpp +507 -0
- data/vendor/tesseract-2.04/classify/clusttool.h +70 -0
- data/vendor/tesseract-2.04/classify/cutoffs.cpp +73 -0
- data/vendor/tesseract-2.04/classify/cutoffs.h +49 -0
- data/vendor/tesseract-2.04/classify/extern.h +32 -0
- data/vendor/tesseract-2.04/classify/extract.cpp +100 -0
- data/vendor/tesseract-2.04/classify/extract.h +36 -0
- data/vendor/tesseract-2.04/classify/featdefs.cpp +244 -0
- data/vendor/tesseract-2.04/classify/featdefs.h +71 -0
- data/vendor/tesseract-2.04/classify/flexfx.cpp +87 -0
- data/vendor/tesseract-2.04/classify/flexfx.h +34 -0
- data/vendor/tesseract-2.04/classify/float2int.cpp +126 -0
- data/vendor/tesseract-2.04/classify/float2int.h +65 -0
- data/vendor/tesseract-2.04/classify/fpoint.cpp +73 -0
- data/vendor/tesseract-2.04/classify/fpoint.h +63 -0
- data/vendor/tesseract-2.04/classify/fxdefs.cpp +74 -0
- data/vendor/tesseract-2.04/classify/fxdefs.h +93 -0
- data/vendor/tesseract-2.04/classify/fxid.h +69 -0
- data/vendor/tesseract-2.04/classify/hideedge.cpp +35 -0
- data/vendor/tesseract-2.04/classify/hideedge.h +76 -0
- data/vendor/tesseract-2.04/classify/intfx.cpp +608 -0
- data/vendor/tesseract-2.04/classify/intfx.h +63 -0
- data/vendor/tesseract-2.04/classify/intmatcher.cpp +1524 -0
- data/vendor/tesseract-2.04/classify/intmatcher.h +199 -0
- data/vendor/tesseract-2.04/classify/intproto.cpp +1823 -0
- data/vendor/tesseract-2.04/classify/intproto.h +320 -0
- data/vendor/tesseract-2.04/classify/kdtree.cpp +884 -0
- data/vendor/tesseract-2.04/classify/kdtree.h +118 -0
- data/vendor/tesseract-2.04/classify/mf.cpp +106 -0
- data/vendor/tesseract-2.04/classify/mf.h +43 -0
- data/vendor/tesseract-2.04/classify/mfdefs.cpp +58 -0
- data/vendor/tesseract-2.04/classify/mfdefs.h +60 -0
- data/vendor/tesseract-2.04/classify/mfoutline.cpp +1087 -0
- data/vendor/tesseract-2.04/classify/mfoutline.h +277 -0
- data/vendor/tesseract-2.04/classify/mfx.cpp +436 -0
- data/vendor/tesseract-2.04/classify/mfx.h +52 -0
- data/vendor/tesseract-2.04/classify/normfeat.cpp +132 -0
- data/vendor/tesseract-2.04/classify/normfeat.h +63 -0
- data/vendor/tesseract-2.04/classify/normmatch.cpp +305 -0
- data/vendor/tesseract-2.04/classify/normmatch.h +38 -0
- data/vendor/tesseract-2.04/classify/ocrfeatures.cpp +310 -0
- data/vendor/tesseract-2.04/classify/ocrfeatures.h +148 -0
- data/vendor/tesseract-2.04/classify/outfeat.cpp +262 -0
- data/vendor/tesseract-2.04/classify/outfeat.h +76 -0
- data/vendor/tesseract-2.04/classify/picofeat.cpp +297 -0
- data/vendor/tesseract-2.04/classify/picofeat.h +65 -0
- data/vendor/tesseract-2.04/classify/protos.cpp +472 -0
- data/vendor/tesseract-2.04/classify/protos.h +258 -0
- data/vendor/tesseract-2.04/classify/sigmenu.cpp +225 -0
- data/vendor/tesseract-2.04/classify/sigmenu.h +39 -0
- data/vendor/tesseract-2.04/classify/speckle.cpp +127 -0
- data/vendor/tesseract-2.04/classify/speckle.h +69 -0
- data/vendor/tesseract-2.04/classify/xform2d.cpp +120 -0
- data/vendor/tesseract-2.04/classify/xform2d.h +60 -0
- data/vendor/tesseract-2.04/config/config.guess +1466 -0
- data/vendor/tesseract-2.04/config/config.h.in +188 -0
- data/vendor/tesseract-2.04/config/config.sub +1579 -0
- data/vendor/tesseract-2.04/config/depcomp +530 -0
- data/vendor/tesseract-2.04/config/install-sh +269 -0
- data/vendor/tesseract-2.04/config/missing +198 -0
- data/vendor/tesseract-2.04/config/mkinstalldirs +40 -0
- data/vendor/tesseract-2.04/config/stamp-h.in +0 -0
- data/vendor/tesseract-2.04/configure +10424 -0
- data/vendor/tesseract-2.04/cutil/Makefile.am +14 -0
- data/vendor/tesseract-2.04/cutil/Makefile.in +612 -0
- data/vendor/tesseract-2.04/cutil/bitvec.cpp +115 -0
- data/vendor/tesseract-2.04/cutil/bitvec.h +100 -0
- data/vendor/tesseract-2.04/cutil/callcpp.h +190 -0
- data/vendor/tesseract-2.04/cutil/const.h +108 -0
- data/vendor/tesseract-2.04/cutil/cutil.cpp +92 -0
- data/vendor/tesseract-2.04/cutil/cutil.h +159 -0
- data/vendor/tesseract-2.04/cutil/danerror.cpp +144 -0
- data/vendor/tesseract-2.04/cutil/danerror.h +41 -0
- data/vendor/tesseract-2.04/cutil/debug.cpp +97 -0
- data/vendor/tesseract-2.04/cutil/debug.h +348 -0
- data/vendor/tesseract-2.04/cutil/efio.cpp +62 -0
- data/vendor/tesseract-2.04/cutil/efio.h +32 -0
- data/vendor/tesseract-2.04/cutil/emalloc.cpp +91 -0
- data/vendor/tesseract-2.04/cutil/emalloc.h +44 -0
- data/vendor/tesseract-2.04/cutil/freelist.cpp +75 -0
- data/vendor/tesseract-2.04/cutil/freelist.h +45 -0
- data/vendor/tesseract-2.04/cutil/funcdefs.h +35 -0
- data/vendor/tesseract-2.04/cutil/general.h +33 -0
- data/vendor/tesseract-2.04/cutil/globals.cpp +69 -0
- data/vendor/tesseract-2.04/cutil/globals.h +70 -0
- data/vendor/tesseract-2.04/cutil/listio.cpp +68 -0
- data/vendor/tesseract-2.04/cutil/listio.h +43 -0
- data/vendor/tesseract-2.04/cutil/minmax.h +40 -0
- data/vendor/tesseract-2.04/cutil/oldheap.cpp +337 -0
- data/vendor/tesseract-2.04/cutil/oldheap.h +126 -0
- data/vendor/tesseract-2.04/cutil/oldlist.cpp +393 -0
- data/vendor/tesseract-2.04/cutil/oldlist.h +350 -0
- data/vendor/tesseract-2.04/cutil/structures.cpp +66 -0
- data/vendor/tesseract-2.04/cutil/structures.h +112 -0
- data/vendor/tesseract-2.04/cutil/tessarray.cpp +115 -0
- data/vendor/tesseract-2.04/cutil/tessarray.h +166 -0
- data/vendor/tesseract-2.04/cutil/tordvars.cpp +95 -0
- data/vendor/tesseract-2.04/cutil/tordvars.h +61 -0
- data/vendor/tesseract-2.04/cutil/variables.cpp +317 -0
- data/vendor/tesseract-2.04/cutil/variables.h +170 -0
- data/vendor/tesseract-2.04/dict/Makefile.am +13 -0
- data/vendor/tesseract-2.04/dict/Makefile.in +609 -0
- data/vendor/tesseract-2.04/dict/choicearr.h +96 -0
- data/vendor/tesseract-2.04/dict/choices.cpp +210 -0
- data/vendor/tesseract-2.04/dict/choices.h +241 -0
- data/vendor/tesseract-2.04/dict/context.cpp +270 -0
- data/vendor/tesseract-2.04/dict/context.h +82 -0
- data/vendor/tesseract-2.04/dict/dawg.cpp +363 -0
- data/vendor/tesseract-2.04/dict/dawg.h +394 -0
- data/vendor/tesseract-2.04/dict/hyphen.cpp +84 -0
- data/vendor/tesseract-2.04/dict/hyphen.h +125 -0
- data/vendor/tesseract-2.04/dict/lookdawg.cpp +228 -0
- data/vendor/tesseract-2.04/dict/lookdawg.h +76 -0
- data/vendor/tesseract-2.04/dict/makedawg.cpp +449 -0
- data/vendor/tesseract-2.04/dict/makedawg.h +83 -0
- data/vendor/tesseract-2.04/dict/matchdefs.h +145 -0
- data/vendor/tesseract-2.04/dict/permdawg.cpp +415 -0
- data/vendor/tesseract-2.04/dict/permdawg.h +98 -0
- data/vendor/tesseract-2.04/dict/permngram.cpp +358 -0
- data/vendor/tesseract-2.04/dict/permngram.h +33 -0
- data/vendor/tesseract-2.04/dict/permnum.cpp +522 -0
- data/vendor/tesseract-2.04/dict/permnum.h +83 -0
- data/vendor/tesseract-2.04/dict/permute.cpp +1704 -0
- data/vendor/tesseract-2.04/dict/permute.h +93 -0
- data/vendor/tesseract-2.04/dict/reduce.cpp +424 -0
- data/vendor/tesseract-2.04/dict/reduce.h +112 -0
- data/vendor/tesseract-2.04/dict/states.cpp +382 -0
- data/vendor/tesseract-2.04/dict/states.h +111 -0
- data/vendor/tesseract-2.04/dict/stopper.cpp +1458 -0
- data/vendor/tesseract-2.04/dict/stopper.h +103 -0
- data/vendor/tesseract-2.04/dict/trie.cpp +683 -0
- data/vendor/tesseract-2.04/dict/trie.h +190 -0
- data/vendor/tesseract-2.04/dlltest/Makefile.am +2 -0
- data/vendor/tesseract-2.04/dlltest/Makefile.in +388 -0
- data/vendor/tesseract-2.04/dlltest/dlltest.cpp +163 -0
- data/vendor/tesseract-2.04/dlltest/dlltest.dsp +186 -0
- data/vendor/tesseract-2.04/dlltest/dlltest.vcproj +637 -0
- data/vendor/tesseract-2.04/eurotext.tif +0 -0
- data/vendor/tesseract-2.04/image/Makefile.am +10 -0
- data/vendor/tesseract-2.04/image/Makefile.in +596 -0
- data/vendor/tesseract-2.04/image/bitstrm.cpp +157 -0
- data/vendor/tesseract-2.04/image/bitstrm.h +73 -0
- data/vendor/tesseract-2.04/image/img.h +336 -0
- data/vendor/tesseract-2.04/image/imgbmp.cpp +223 -0
- data/vendor/tesseract-2.04/image/imgbmp.h +50 -0
- data/vendor/tesseract-2.04/image/imgerrs.h +35 -0
- data/vendor/tesseract-2.04/image/imgio.cpp +321 -0
- data/vendor/tesseract-2.04/image/imgio.h +22 -0
- data/vendor/tesseract-2.04/image/imgs.cpp +1764 -0
- data/vendor/tesseract-2.04/image/imgs.h +102 -0
- data/vendor/tesseract-2.04/image/imgtiff.cpp +723 -0
- data/vendor/tesseract-2.04/image/imgtiff.h +89 -0
- data/vendor/tesseract-2.04/image/imgunpk.h +1377 -0
- data/vendor/tesseract-2.04/image/svshowim.cpp +40 -0
- data/vendor/tesseract-2.04/image/svshowim.h +25 -0
- data/vendor/tesseract-2.04/java/Makefile.am +4 -0
- data/vendor/tesseract-2.04/java/Makefile.in +473 -0
- data/vendor/tesseract-2.04/java/com/Makefile.am +1 -0
- data/vendor/tesseract-2.04/java/com/Makefile.in +470 -0
- data/vendor/tesseract-2.04/java/com/google/Makefile.am +1 -0
- data/vendor/tesseract-2.04/java/com/google/Makefile.in +470 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/Makefile.am +4 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/Makefile.in +473 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ScrollView.java +421 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/Makefile.am +5 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/Makefile.in +474 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEvent.java +87 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEventHandler.java +296 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEventType.java +31 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/Makefile.am +7 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/Makefile.in +476 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVAbstractMenuItem.java +58 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVCheckboxMenuItem.java +60 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVEmptyMenuItem.java +48 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVImageHandler.java +228 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVMenuBar.java +130 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVMenuItem.java +61 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVPopupMenu.java +142 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVSubMenuItem.java +41 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVWindow.java +643 -0
- data/vendor/tesseract-2.04/java/makefile +55 -0
- data/vendor/tesseract-2.04/pageseg/Makefile.am +13 -0
- data/vendor/tesseract-2.04/pageseg/Makefile.in +596 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg.cpp +363 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg.h +90 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg_interface.cpp +82 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg_interface.h +30 -0
- data/vendor/tesseract-2.04/pageseg/pageseg.cpp +170 -0
- data/vendor/tesseract-2.04/pageseg/pageseg.h +29 -0
- data/vendor/tesseract-2.04/phototest.tif +0 -0
- data/vendor/tesseract-2.04/tessdata/Makefile.am +31 -0
- data/vendor/tesseract-2.04/tessdata/Makefile.in +529 -0
- data/vendor/tesseract-2.04/tessdata/configs/Makefile.am +3 -0
- data/vendor/tesseract-2.04/tessdata/configs/Makefile.in +344 -0
- data/vendor/tesseract-2.04/tessdata/configs/api_config +1 -0
- data/vendor/tesseract-2.04/tessdata/configs/box.train +19 -0
- data/vendor/tesseract-2.04/tessdata/configs/box.train.stderr +18 -0
- data/vendor/tesseract-2.04/tessdata/configs/inter +4 -0
- data/vendor/tesseract-2.04/tessdata/configs/kannada +4 -0
- data/vendor/tesseract-2.04/tessdata/configs/makebox +1 -0
- data/vendor/tesseract-2.04/tessdata/configs/unlv +3 -0
- data/vendor/tesseract-2.04/tessdata/confsets +3 -0
- data/vendor/tesseract-2.04/tessdata/eng.DangAmbigs +39 -0
- data/vendor/tesseract-2.04/tessdata/eng.freq-dawg +0 -0
- data/vendor/tesseract-2.04/tessdata/eng.inttemp +0 -0
- data/vendor/tesseract-2.04/tessdata/eng.normproto +1247 -0
- data/vendor/tesseract-2.04/tessdata/eng.pffmtable +111 -0
- data/vendor/tesseract-2.04/tessdata/eng.unicharset +113 -0
- data/vendor/tesseract-2.04/tessdata/eng.user-words +921 -0
- data/vendor/tesseract-2.04/tessdata/eng.word-dawg +0 -0
- data/vendor/tesseract-2.04/tessdata/makedummies +8 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/Makefile.am +3 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/Makefile.in +344 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/batch +2 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/batch.nochop +2 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/matdemo +7 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/msdemo +13 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/nobatch +2 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/segdemo +9 -0
- data/vendor/tesseract-2.04/tessdll.cpp +351 -0
- data/vendor/tesseract-2.04/tessdll.dsp +2050 -0
- data/vendor/tesseract-2.04/tessdll.h +143 -0
- data/vendor/tesseract-2.04/tessdll.vcproj +5495 -0
- data/vendor/tesseract-2.04/tesseract.dsp +2124 -0
- data/vendor/tesseract-2.04/tesseract.dsw +116 -0
- data/vendor/tesseract-2.04/tesseract.sln +59 -0
- data/vendor/tesseract-2.04/tesseract.spec +188 -0
- data/vendor/tesseract-2.04/tesseract.vcproj +5859 -0
- data/vendor/tesseract-2.04/testing/Makefile.am +2 -0
- data/vendor/tesseract-2.04/testing/Makefile.in +312 -0
- data/vendor/tesseract-2.04/testing/README +43 -0
- data/vendor/tesseract-2.04/testing/counttestset.sh +61 -0
- data/vendor/tesseract-2.04/testing/reorgdata.sh +44 -0
- data/vendor/tesseract-2.04/testing/reports/1995.bus.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/1995.doe3.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/1995.mag.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/1995.news.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/2.03.summary +9 -0
- data/vendor/tesseract-2.04/testing/reports/2.04.summary +9 -0
- data/vendor/tesseract-2.04/testing/runalltests.sh +110 -0
- data/vendor/tesseract-2.04/testing/runtestset.sh +61 -0
- data/vendor/tesseract-2.04/textord/Makefile.am +20 -0
- data/vendor/tesseract-2.04/textord/Makefile.in +624 -0
- data/vendor/tesseract-2.04/textord/blkocc.cpp +809 -0
- data/vendor/tesseract-2.04/textord/blkocc.h +327 -0
- data/vendor/tesseract-2.04/textord/blobcmpl.h +31 -0
- data/vendor/tesseract-2.04/textord/drawedg.cpp +77 -0
- data/vendor/tesseract-2.04/textord/drawedg.h +34 -0
- data/vendor/tesseract-2.04/textord/drawtord.cpp +469 -0
- data/vendor/tesseract-2.04/textord/drawtord.h +107 -0
- data/vendor/tesseract-2.04/textord/edgblob.cpp +412 -0
- data/vendor/tesseract-2.04/textord/edgblob.h +100 -0
- data/vendor/tesseract-2.04/textord/edgloop.cpp +211 -0
- data/vendor/tesseract-2.04/textord/edgloop.h +66 -0
- data/vendor/tesseract-2.04/textord/fpchop.cpp +1641 -0
- data/vendor/tesseract-2.04/textord/fpchop.h +238 -0
- data/vendor/tesseract-2.04/textord/gap_map.cpp +166 -0
- data/vendor/tesseract-2.04/textord/gap_map.h +40 -0
- data/vendor/tesseract-2.04/textord/makerow.cpp +2628 -0
- data/vendor/tesseract-2.04/textord/makerow.h +295 -0
- data/vendor/tesseract-2.04/textord/oldbasel.cpp +1761 -0
- data/vendor/tesseract-2.04/textord/oldbasel.h +195 -0
- data/vendor/tesseract-2.04/textord/pithsync.cpp +696 -0
- data/vendor/tesseract-2.04/textord/pithsync.h +134 -0
- data/vendor/tesseract-2.04/textord/pitsync1.cpp +425 -0
- data/vendor/tesseract-2.04/textord/pitsync1.h +135 -0
- data/vendor/tesseract-2.04/textord/scanedg.cpp +452 -0
- data/vendor/tesseract-2.04/textord/scanedg.h +74 -0
- data/vendor/tesseract-2.04/textord/sortflts.cpp +80 -0
- data/vendor/tesseract-2.04/textord/sortflts.h +64 -0
- data/vendor/tesseract-2.04/textord/tessout.h +76 -0
- data/vendor/tesseract-2.04/textord/topitch.cpp +2019 -0
- data/vendor/tesseract-2.04/textord/topitch.h +195 -0
- data/vendor/tesseract-2.04/textord/tordmain.cpp +907 -0
- data/vendor/tesseract-2.04/textord/tordmain.h +132 -0
- data/vendor/tesseract-2.04/textord/tospace.cpp +1939 -0
- data/vendor/tesseract-2.04/textord/tospace.h +193 -0
- data/vendor/tesseract-2.04/textord/tovars.cpp +87 -0
- data/vendor/tesseract-2.04/textord/tovars.h +94 -0
- data/vendor/tesseract-2.04/textord/underlin.cpp +312 -0
- data/vendor/tesseract-2.04/textord/underlin.h +53 -0
- data/vendor/tesseract-2.04/textord/wordseg.cpp +620 -0
- data/vendor/tesseract-2.04/textord/wordseg.h +70 -0
- data/vendor/tesseract-2.04/training/Makefile.am +54 -0
- data/vendor/tesseract-2.04/training/Makefile.in +720 -0
- data/vendor/tesseract-2.04/training/cnTraining.cpp +855 -0
- data/vendor/tesseract-2.04/training/cntraining.dsp +243 -0
- data/vendor/tesseract-2.04/training/cntraining.vcproj +950 -0
- data/vendor/tesseract-2.04/training/mergenf.cpp +451 -0
- data/vendor/tesseract-2.04/training/mergenf.h +106 -0
- data/vendor/tesseract-2.04/training/mfTraining.cpp +1341 -0
- data/vendor/tesseract-2.04/training/mftraining.dsp +285 -0
- data/vendor/tesseract-2.04/training/mftraining.vcproj +1055 -0
- data/vendor/tesseract-2.04/training/name2char.cpp +166 -0
- data/vendor/tesseract-2.04/training/name2char.h +38 -0
- data/vendor/tesseract-2.04/training/training.cpp +190 -0
- data/vendor/tesseract-2.04/training/training.h +130 -0
- data/vendor/tesseract-2.04/training/unicharset_extractor.cpp +140 -0
- data/vendor/tesseract-2.04/training/unicharset_extractor.dsp +335 -0
- data/vendor/tesseract-2.04/training/unicharset_extractor.vcproj +769 -0
- data/vendor/tesseract-2.04/training/wordlist2dawg.cpp +69 -0
- data/vendor/tesseract-2.04/training/wordlist2dawg.dsp +319 -0
- data/vendor/tesseract-2.04/training/wordlist2dawg.vcproj +1113 -0
- data/vendor/tesseract-2.04/viewer/Makefile.am +9 -0
- data/vendor/tesseract-2.04/viewer/Makefile.in +591 -0
- data/vendor/tesseract-2.04/viewer/scrollview.cpp +825 -0
- data/vendor/tesseract-2.04/viewer/scrollview.h +414 -0
- data/vendor/tesseract-2.04/viewer/svmnode.cpp +140 -0
- data/vendor/tesseract-2.04/viewer/svmnode.h +94 -0
- data/vendor/tesseract-2.04/viewer/svpaint.cpp +220 -0
- data/vendor/tesseract-2.04/viewer/svutil.cpp +347 -0
- data/vendor/tesseract-2.04/viewer/svutil.h +138 -0
- data/vendor/tesseract-2.04/wordrec/Makefile.am +23 -0
- data/vendor/tesseract-2.04/wordrec/Makefile.in +641 -0
- data/vendor/tesseract-2.04/wordrec/associate.cpp +62 -0
- data/vendor/tesseract-2.04/wordrec/associate.h +93 -0
- data/vendor/tesseract-2.04/wordrec/badwords.cpp +106 -0
- data/vendor/tesseract-2.04/wordrec/badwords.h +51 -0
- data/vendor/tesseract-2.04/wordrec/bestfirst.cpp +526 -0
- data/vendor/tesseract-2.04/wordrec/bestfirst.h +203 -0
- data/vendor/tesseract-2.04/wordrec/charsample.h +208 -0
- data/vendor/tesseract-2.04/wordrec/chop.cpp +458 -0
- data/vendor/tesseract-2.04/wordrec/chop.h +153 -0
- data/vendor/tesseract-2.04/wordrec/chopper.cpp +750 -0
- data/vendor/tesseract-2.04/wordrec/chopper.h +104 -0
- data/vendor/tesseract-2.04/wordrec/closed.cpp +136 -0
- data/vendor/tesseract-2.04/wordrec/closed.h +65 -0
- data/vendor/tesseract-2.04/wordrec/djmenus.cpp +118 -0
- data/vendor/tesseract-2.04/wordrec/djmenus.h +33 -0
- data/vendor/tesseract-2.04/wordrec/drawfx.cpp +92 -0
- data/vendor/tesseract-2.04/wordrec/drawfx.h +33 -0
- data/vendor/tesseract-2.04/wordrec/findseam.cpp +566 -0
- data/vendor/tesseract-2.04/wordrec/findseam.h +69 -0
- data/vendor/tesseract-2.04/wordrec/gradechop.cpp +226 -0
- data/vendor/tesseract-2.04/wordrec/gradechop.h +91 -0
- data/vendor/tesseract-2.04/wordrec/heuristic.cpp +194 -0
- data/vendor/tesseract-2.04/wordrec/heuristic.h +120 -0
- data/vendor/tesseract-2.04/wordrec/makechop.cpp +281 -0
- data/vendor/tesseract-2.04/wordrec/makechop.h +69 -0
- data/vendor/tesseract-2.04/wordrec/matchtab.cpp +191 -0
- data/vendor/tesseract-2.04/wordrec/matchtab.h +45 -0
- data/vendor/tesseract-2.04/wordrec/matrix.cpp +118 -0
- data/vendor/tesseract-2.04/wordrec/matrix.h +104 -0
- data/vendor/tesseract-2.04/wordrec/measure.h +135 -0
- data/vendor/tesseract-2.04/wordrec/metrics.cpp +363 -0
- data/vendor/tesseract-2.04/wordrec/metrics.h +130 -0
- data/vendor/tesseract-2.04/wordrec/mfvars.cpp +51 -0
- data/vendor/tesseract-2.04/wordrec/mfvars.h +27 -0
- data/vendor/tesseract-2.04/wordrec/msmenus.cpp +110 -0
- data/vendor/tesseract-2.04/wordrec/msmenus.h +45 -0
- data/vendor/tesseract-2.04/wordrec/olutil.cpp +153 -0
- data/vendor/tesseract-2.04/wordrec/olutil.h +128 -0
- data/vendor/tesseract-2.04/wordrec/outlines.cpp +172 -0
- data/vendor/tesseract-2.04/wordrec/outlines.h +148 -0
- data/vendor/tesseract-2.04/wordrec/pieces.cpp +410 -0
- data/vendor/tesseract-2.04/wordrec/pieces.h +154 -0
- data/vendor/tesseract-2.04/wordrec/plotedges.cpp +134 -0
- data/vendor/tesseract-2.04/wordrec/plotedges.h +71 -0
- data/vendor/tesseract-2.04/wordrec/plotseg.cpp +116 -0
- data/vendor/tesseract-2.04/wordrec/plotseg.h +73 -0
- data/vendor/tesseract-2.04/wordrec/render.cpp +152 -0
- data/vendor/tesseract-2.04/wordrec/render.h +58 -0
- data/vendor/tesseract-2.04/wordrec/seam.cpp +482 -0
- data/vendor/tesseract-2.04/wordrec/seam.h +136 -0
- data/vendor/tesseract-2.04/wordrec/split.cpp +182 -0
- data/vendor/tesseract-2.04/wordrec/split.h +115 -0
- data/vendor/tesseract-2.04/wordrec/tally.cpp +68 -0
- data/vendor/tesseract-2.04/wordrec/tally.h +94 -0
- data/vendor/tesseract-2.04/wordrec/tessinit.cpp +108 -0
- data/vendor/tesseract-2.04/wordrec/tessinit.h +46 -0
- data/vendor/tesseract-2.04/wordrec/tface.cpp +272 -0
- data/vendor/tesseract-2.04/wordrec/tface.h +35 -0
- data/vendor/tesseract-2.04/wordrec/wordclass.cpp +284 -0
- data/vendor/tesseract-2.04/wordrec/wordclass.h +64 -0
- metadata +708 -0
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/* -*-C-*-
|
|
2
|
+
********************************************************************************
|
|
3
|
+
*
|
|
4
|
+
* File: makechop.c (Formerly makechop.c)
|
|
5
|
+
* Description:
|
|
6
|
+
* Author: Mark Seaman, OCR Technology
|
|
7
|
+
* Created: Fri Oct 16 14:37:00 1987
|
|
8
|
+
* Modified: Mon Jul 29 15:50:42 1991 (Mark Seaman) marks@hpgrlt
|
|
9
|
+
* Language: C
|
|
10
|
+
* Package: N/A
|
|
11
|
+
* Status: Reusable Software Component
|
|
12
|
+
*
|
|
13
|
+
* (c) Copyright 1987, Hewlett-Packard Company.
|
|
14
|
+
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
15
|
+
** you may not use this file except in compliance with the License.
|
|
16
|
+
** You may obtain a copy of the License at
|
|
17
|
+
** http://www.apache.org/licenses/LICENSE-2.0
|
|
18
|
+
** Unless required by applicable law or agreed to in writing, software
|
|
19
|
+
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
+
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
+
** See the License for the specific language governing permissions and
|
|
22
|
+
** limitations under the License.
|
|
23
|
+
*
|
|
24
|
+
*********************************************************************************/
|
|
25
|
+
/*----------------------------------------------------------------------
|
|
26
|
+
I n c l u d e s
|
|
27
|
+
----------------------------------------------------------------------*/
|
|
28
|
+
#include "makechop.h"
|
|
29
|
+
#include "render.h"
|
|
30
|
+
#include "structures.h"
|
|
31
|
+
#ifdef __UNIX__
|
|
32
|
+
#include <assert.h>
|
|
33
|
+
#include <unistd.h>
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
/*----------------------------------------------------------------------
|
|
37
|
+
Public Function Code
|
|
38
|
+
----------------------------------------------------------------------*/
|
|
39
|
+
/**********************************************************************
|
|
40
|
+
* apply_seam
|
|
41
|
+
*
|
|
42
|
+
* Split this blob into two blobs by applying the splits included in
|
|
43
|
+
* the seam description.
|
|
44
|
+
**********************************************************************/
|
|
45
|
+
void apply_seam(TBLOB *blob, TBLOB *other_blob, SEAM *seam) {
|
|
46
|
+
check_outline_mem();
|
|
47
|
+
if (seam->split1 == NULL) {
|
|
48
|
+
divide_blobs (blob, other_blob, seam->location);
|
|
49
|
+
}
|
|
50
|
+
else if (seam->split2 == NULL) {
|
|
51
|
+
make_split_blobs(blob, other_blob, seam);
|
|
52
|
+
}
|
|
53
|
+
else if (seam->split3 == NULL) {
|
|
54
|
+
make_double_split(blob, other_blob, seam);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
make_triple_split(blob, other_blob, seam);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
check_outline_mem();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
/**********************************************************************
|
|
65
|
+
* divide_blobs
|
|
66
|
+
*
|
|
67
|
+
* Create two blobs by grouping the outlines in the appropriate blob.
|
|
68
|
+
* The outlines that are beyond the location point are moved to the
|
|
69
|
+
* other blob. The ones whose x location is less than that point are
|
|
70
|
+
* retained in the original blob.
|
|
71
|
+
**********************************************************************/
|
|
72
|
+
void divide_blobs(TBLOB *blob, TBLOB *other_blob, inT32 location) {
|
|
73
|
+
TESSLINE *outline;
|
|
74
|
+
TESSLINE *outline1 = NULL;
|
|
75
|
+
TESSLINE *outline2 = NULL;
|
|
76
|
+
|
|
77
|
+
outline = blob->outlines;
|
|
78
|
+
blob->outlines = NULL;
|
|
79
|
+
|
|
80
|
+
while (outline != NULL) {
|
|
81
|
+
if ((outline->topleft.x + outline->botright.x) / 2 < location) {
|
|
82
|
+
/* Outline is in 1st blob */
|
|
83
|
+
if (outline1) {
|
|
84
|
+
outline1->next = outline;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
blob->outlines = outline;
|
|
88
|
+
}
|
|
89
|
+
outline1 = outline;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
/* Outline is in 2nd blob */
|
|
93
|
+
if (outline2) {
|
|
94
|
+
outline2->next = outline;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
other_blob->outlines = outline;
|
|
98
|
+
}
|
|
99
|
+
outline2 = outline;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
outline = outline->next;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (outline1)
|
|
106
|
+
outline1->next = NULL;
|
|
107
|
+
if (outline2)
|
|
108
|
+
outline2->next = NULL;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
/**********************************************************************
|
|
113
|
+
* form_two_blobs
|
|
114
|
+
*
|
|
115
|
+
* Group the outlines from the first blob into both of them. Do so
|
|
116
|
+
* according to the information about the split.
|
|
117
|
+
**********************************************************************/
|
|
118
|
+
void form_two_blobs(TBLOB *blob, TBLOB *other_blob, inT32 location) {
|
|
119
|
+
setup_blob_outlines(blob);
|
|
120
|
+
|
|
121
|
+
divide_blobs(blob, other_blob, location);
|
|
122
|
+
|
|
123
|
+
eliminate_duplicate_outlines(blob);
|
|
124
|
+
eliminate_duplicate_outlines(other_blob);
|
|
125
|
+
|
|
126
|
+
correct_blob_order(blob, other_blob);
|
|
127
|
+
|
|
128
|
+
#ifndef GRAPHICS_DISABLED
|
|
129
|
+
if (chop_debug > 2) {
|
|
130
|
+
display_blob(blob, Red);
|
|
131
|
+
#ifdef __UNIX__
|
|
132
|
+
sleep (1);
|
|
133
|
+
#endif
|
|
134
|
+
display_blob(other_blob, Cyan);
|
|
135
|
+
}
|
|
136
|
+
#endif
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
/**********************************************************************
|
|
141
|
+
* make_double_split
|
|
142
|
+
*
|
|
143
|
+
* Create two blobs out of one by splitting the original one in half.
|
|
144
|
+
* Return the resultant blobs for classification.
|
|
145
|
+
**********************************************************************/
|
|
146
|
+
void make_double_split(TBLOB *blob, TBLOB *other_blob, SEAM *seam) {
|
|
147
|
+
make_single_split (blob->outlines, seam->split1);
|
|
148
|
+
make_single_split (blob->outlines, seam->split2);
|
|
149
|
+
form_two_blobs (blob, other_blob, seam->location);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
/**********************************************************************
|
|
154
|
+
* make_single_split
|
|
155
|
+
*
|
|
156
|
+
* Create two outlines out of one by splitting the original one in half.
|
|
157
|
+
* Return the resultant outlines.
|
|
158
|
+
**********************************************************************/
|
|
159
|
+
void make_single_split(TESSLINE *outlines, SPLIT *split) {
|
|
160
|
+
assert (outlines != NULL);
|
|
161
|
+
|
|
162
|
+
split_outline (split->point1, split->point2);
|
|
163
|
+
|
|
164
|
+
while (outlines->next != NULL)
|
|
165
|
+
outlines = outlines->next;
|
|
166
|
+
|
|
167
|
+
outlines->next = newoutline ();
|
|
168
|
+
outlines->next->loop = split->point1;
|
|
169
|
+
outlines->next->child = NULL;
|
|
170
|
+
setup_outline (outlines->next);
|
|
171
|
+
|
|
172
|
+
outlines = outlines->next;
|
|
173
|
+
|
|
174
|
+
outlines->next = newoutline ();
|
|
175
|
+
outlines->next->loop = split->point2;
|
|
176
|
+
outlines->next->child = NULL;
|
|
177
|
+
setup_outline (outlines->next);
|
|
178
|
+
|
|
179
|
+
outlines->next->next = NULL;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
/**********************************************************************
|
|
184
|
+
* make_split_blobs
|
|
185
|
+
*
|
|
186
|
+
* Create two blobs out of one by splitting the original one in half.
|
|
187
|
+
* Return the resultant blobs for classification.
|
|
188
|
+
**********************************************************************/
|
|
189
|
+
void make_split_blobs(TBLOB *blob, TBLOB *other_blob, SEAM *seam) {
|
|
190
|
+
make_single_split (blob->outlines, seam->split1);
|
|
191
|
+
|
|
192
|
+
form_two_blobs (blob, other_blob, seam->location);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
/**********************************************************************
|
|
197
|
+
* make_triple_split
|
|
198
|
+
*
|
|
199
|
+
* Create two blobs out of one by splitting the original one in half.
|
|
200
|
+
* This splitting is accomplished by applying three separate splits on
|
|
201
|
+
* the outlines. Three of the starting outlines will produce two ending
|
|
202
|
+
* outlines. Return the resultant blobs for classification.
|
|
203
|
+
**********************************************************************/
|
|
204
|
+
void make_triple_split(TBLOB *blob, TBLOB *other_blob, SEAM *seam) {
|
|
205
|
+
make_single_split (blob->outlines, seam->split1);
|
|
206
|
+
make_single_split (blob->outlines, seam->split2);
|
|
207
|
+
make_single_split (blob->outlines, seam->split3);
|
|
208
|
+
|
|
209
|
+
form_two_blobs (blob, other_blob, seam->location);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
/**********************************************************************
|
|
214
|
+
* undo_seam
|
|
215
|
+
*
|
|
216
|
+
* Remove the seam between these two blobs. Produce one blob as a
|
|
217
|
+
* result. The seam may consist of one, two, or three splits. Each
|
|
218
|
+
* of these split must be removed from the outlines.
|
|
219
|
+
**********************************************************************/
|
|
220
|
+
void undo_seam(TBLOB *blob, TBLOB *other_blob, SEAM *seam) {
|
|
221
|
+
TESSLINE *outline;
|
|
222
|
+
|
|
223
|
+
if (!seam)
|
|
224
|
+
return; /* Append other blob outlines */
|
|
225
|
+
if (blob->outlines == NULL) {
|
|
226
|
+
blob->outlines = other_blob->outlines;
|
|
227
|
+
other_blob->outlines = NULL;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
outline = blob->outlines;
|
|
231
|
+
while (outline->next)
|
|
232
|
+
outline = outline->next;
|
|
233
|
+
outline->next = other_blob->outlines;
|
|
234
|
+
oldblob(other_blob);
|
|
235
|
+
|
|
236
|
+
if (seam->split1 == NULL) {
|
|
237
|
+
}
|
|
238
|
+
else if (seam->split2 == NULL) {
|
|
239
|
+
undo_single_split (blob, seam->split1);
|
|
240
|
+
}
|
|
241
|
+
else if (seam->split3 == NULL) {
|
|
242
|
+
undo_single_split (blob, seam->split1);
|
|
243
|
+
undo_single_split (blob, seam->split2);
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
undo_single_split (blob, seam->split3);
|
|
247
|
+
undo_single_split (blob, seam->split2);
|
|
248
|
+
undo_single_split (blob, seam->split1);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
setup_blob_outlines(blob);
|
|
252
|
+
eliminate_duplicate_outlines(blob);
|
|
253
|
+
|
|
254
|
+
check_outline_mem();
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
/**********************************************************************
|
|
259
|
+
* undo_single_split
|
|
260
|
+
*
|
|
261
|
+
* Undo a seam that is made by a single split. Perform the correct
|
|
262
|
+
* magic to reconstruct the appropriate set of outline data structures.
|
|
263
|
+
**********************************************************************/
|
|
264
|
+
void undo_single_split(TBLOB *blob, SPLIT *split) {
|
|
265
|
+
TESSLINE *outline1;
|
|
266
|
+
TESSLINE *outline2;
|
|
267
|
+
/* Modify edge points */
|
|
268
|
+
unsplit_outlines (split->point1, split->point2);
|
|
269
|
+
|
|
270
|
+
outline1 = newoutline ();
|
|
271
|
+
outline1->next = blob->outlines;
|
|
272
|
+
blob->outlines = outline1;
|
|
273
|
+
outline1->loop = split->point1;
|
|
274
|
+
outline1->child = NULL;
|
|
275
|
+
|
|
276
|
+
outline2 = newoutline ();
|
|
277
|
+
outline2->next = blob->outlines;
|
|
278
|
+
blob->outlines = outline2;
|
|
279
|
+
outline2->loop = split->point2;
|
|
280
|
+
outline2->child = NULL;
|
|
281
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/* -*-C-*-
|
|
2
|
+
********************************************************************************
|
|
3
|
+
*
|
|
4
|
+
* File: makechop.h (Formerly makechop.h)
|
|
5
|
+
* Description:
|
|
6
|
+
* Author: Mark Seaman, SW Productivity
|
|
7
|
+
* Created: Fri Oct 16 14:37:00 1987
|
|
8
|
+
* Modified: Mon Jul 29 13:33:23 1991 (Mark Seaman) marks@hpgrlt
|
|
9
|
+
* Language: C
|
|
10
|
+
* Package: N/A
|
|
11
|
+
* Status: Reusable Software Component
|
|
12
|
+
*
|
|
13
|
+
* (c) Copyright 1987, Hewlett-Packard Company.
|
|
14
|
+
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
15
|
+
** you may not use this file except in compliance with the License.
|
|
16
|
+
** You may obtain a copy of the License at
|
|
17
|
+
** http://www.apache.org/licenses/LICENSE-2.0
|
|
18
|
+
** Unless required by applicable law or agreed to in writing, software
|
|
19
|
+
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
+
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
+
** See the License for the specific language governing permissions and
|
|
22
|
+
** limitations under the License.
|
|
23
|
+
*
|
|
24
|
+
*********************************************************************************/
|
|
25
|
+
#ifndef MAKECHOP_H
|
|
26
|
+
#define MAKECHOP_H
|
|
27
|
+
|
|
28
|
+
/*----------------------------------------------------------------------
|
|
29
|
+
I n c l u d e s
|
|
30
|
+
----------------------------------------------------------------------*/
|
|
31
|
+
#include "chop.h"
|
|
32
|
+
#include "olutil.h"
|
|
33
|
+
|
|
34
|
+
/*----------------------------------------------------------------------
|
|
35
|
+
M a c r o s
|
|
36
|
+
---------------------------------------------------------------------*/
|
|
37
|
+
/**********************************************************************
|
|
38
|
+
* is_split_outline
|
|
39
|
+
*
|
|
40
|
+
* Check to see if both sides of the split fall within the bounding
|
|
41
|
+
* box of this outline.
|
|
42
|
+
**********************************************************************/
|
|
43
|
+
|
|
44
|
+
#define is_split_outline(outline,split) \
|
|
45
|
+
(point_in_outline (split->point1, outline) && \
|
|
46
|
+
point_in_outline (split->point2, outline)) \
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
/*----------------------------------------------------------------------
|
|
50
|
+
Public Function Prototypes
|
|
51
|
+
----------------------------------------------------------------------*/
|
|
52
|
+
void apply_seam(TBLOB *blob, TBLOB *other_blob, SEAM *seam);
|
|
53
|
+
|
|
54
|
+
void divide_blobs(TBLOB *blob, TBLOB *other_blob, inT32 location);
|
|
55
|
+
|
|
56
|
+
void form_two_blobs(TBLOB *blob, TBLOB *other_blob, inT32 location);
|
|
57
|
+
|
|
58
|
+
void make_double_split(TBLOB *blob, TBLOB *other_blob, SEAM *seam);
|
|
59
|
+
|
|
60
|
+
void make_single_split(TESSLINE *outlines, SPLIT *split);
|
|
61
|
+
|
|
62
|
+
void make_split_blobs(TBLOB *blob, TBLOB *other_blob, SEAM *seam);
|
|
63
|
+
|
|
64
|
+
void make_triple_split(TBLOB *blob, TBLOB *other_blob, SEAM *seam);
|
|
65
|
+
|
|
66
|
+
void undo_seam(TBLOB *blob, TBLOB *other_blob, SEAM *seam);
|
|
67
|
+
|
|
68
|
+
void undo_single_split(TBLOB *blob, SPLIT *split);
|
|
69
|
+
#endif
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/* -*-C-*-
|
|
2
|
+
********************************************************************************
|
|
3
|
+
*
|
|
4
|
+
* File: matchtab.c (Formerly matchtab.c)
|
|
5
|
+
* Description: Match table to retain blobs that were matched.
|
|
6
|
+
* Author: Mark Seaman, OCR Technology
|
|
7
|
+
* Created: Mon Jan 29 09:00:56 1990
|
|
8
|
+
* Modified: Tue Mar 19 15:09:06 1991 (Mark Seaman) marks@hpgrlt
|
|
9
|
+
* Language: C
|
|
10
|
+
* Package: N/A
|
|
11
|
+
* Status: Experimental (Do Not Distribute)
|
|
12
|
+
*
|
|
13
|
+
* (c) Copyright 1990, Hewlett-Packard Company.
|
|
14
|
+
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
15
|
+
** you may not use this file except in compliance with the License.
|
|
16
|
+
** You may obtain a copy of the License at
|
|
17
|
+
** http://www.apache.org/licenses/LICENSE-2.0
|
|
18
|
+
** Unless required by applicable law or agreed to in writing, software
|
|
19
|
+
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
+
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
+
** See the License for the specific language governing permissions and
|
|
22
|
+
** limitations under the License.
|
|
23
|
+
*
|
|
24
|
+
*********************************************************************************/
|
|
25
|
+
/*----------------------------------------------------------------------
|
|
26
|
+
I n c l u d e s
|
|
27
|
+
----------------------------------------------------------------------*/
|
|
28
|
+
#include "matchtab.h"
|
|
29
|
+
#include "freelist.h"
|
|
30
|
+
#include "callcpp.h"
|
|
31
|
+
#include "blobs.h"
|
|
32
|
+
|
|
33
|
+
/*----------------------------------------------------------------------
|
|
34
|
+
T y p e s
|
|
35
|
+
----------------------------------------------------------------------*/
|
|
36
|
+
typedef struct _MATCH_
|
|
37
|
+
{
|
|
38
|
+
int topleft;
|
|
39
|
+
int botright;
|
|
40
|
+
LIST rating;
|
|
41
|
+
} MATCH;
|
|
42
|
+
|
|
43
|
+
/*----------------------------------------------------------------------
|
|
44
|
+
V a r i a b l e s
|
|
45
|
+
----------------------------------------------------------------------*/
|
|
46
|
+
MATCH *match_table;
|
|
47
|
+
//?int missed_count = 0;
|
|
48
|
+
|
|
49
|
+
/*----------------------------------------------------------------------
|
|
50
|
+
M a c r o s
|
|
51
|
+
----------------------------------------------------------------------*/
|
|
52
|
+
#define NUM_MATCH_ENTRIES 500 /* Entries in match_table */
|
|
53
|
+
|
|
54
|
+
/**********************************************************************
|
|
55
|
+
* blank_entry
|
|
56
|
+
*
|
|
57
|
+
* Test an element in the blob match table to see if it is blank.
|
|
58
|
+
* Return a non-zero value if it is blank.
|
|
59
|
+
**********************************************************************/
|
|
60
|
+
|
|
61
|
+
#define blank_entry(match_table,x) \
|
|
62
|
+
(! (match_table[x].topleft | match_table[x].botright))
|
|
63
|
+
|
|
64
|
+
/*----------------------------------------------------------------------
|
|
65
|
+
Public Function Code
|
|
66
|
+
----------------------------------------------------------------------*/
|
|
67
|
+
/**********************************************************************
|
|
68
|
+
* init_match_table
|
|
69
|
+
*
|
|
70
|
+
* Create and clear a match table to be used to speed up the splitter.
|
|
71
|
+
**********************************************************************/
|
|
72
|
+
static int been_initialized = 0;
|
|
73
|
+
void init_match_table() {
|
|
74
|
+
int x;
|
|
75
|
+
|
|
76
|
+
if (been_initialized) {
|
|
77
|
+
/* Reclaim old choices */
|
|
78
|
+
for (x = 0; x < NUM_MATCH_ENTRIES; x++) {
|
|
79
|
+
if ((!blank_entry (match_table, x)) && match_table[x].rating)
|
|
80
|
+
destroy_nodes (match_table[x].rating, free_choice);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
/* Allocate memory once */
|
|
85
|
+
been_initialized = 1;
|
|
86
|
+
match_table = (MATCH *) memalloc (sizeof (MATCH) * NUM_MATCH_ENTRIES);
|
|
87
|
+
}
|
|
88
|
+
/* Initialize the table */
|
|
89
|
+
for (x = 0; x < NUM_MATCH_ENTRIES; x++) {
|
|
90
|
+
match_table[x].topleft = 0;
|
|
91
|
+
match_table[x].botright = 0;
|
|
92
|
+
match_table[x].rating = NULL;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
void end_match_table() {
|
|
97
|
+
if (been_initialized) {
|
|
98
|
+
init_match_table();
|
|
99
|
+
memfree(match_table);
|
|
100
|
+
match_table = NULL;
|
|
101
|
+
been_initialized = 0;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
/**********************************************************************
|
|
107
|
+
* put_match
|
|
108
|
+
*
|
|
109
|
+
* Put a new blob and its corresponding match ratings into the match
|
|
110
|
+
* table.
|
|
111
|
+
**********************************************************************/
|
|
112
|
+
void put_match(TBLOB *blob, CHOICES ratings) {
|
|
113
|
+
unsigned int topleft;
|
|
114
|
+
unsigned int botright;
|
|
115
|
+
unsigned int start;
|
|
116
|
+
TPOINT tp_topleft;
|
|
117
|
+
TPOINT tp_botright;
|
|
118
|
+
int x;
|
|
119
|
+
/* Hash into table */
|
|
120
|
+
blob_bounding_box(blob, &tp_topleft, &tp_botright);
|
|
121
|
+
topleft = *(unsigned int *) &tp_topleft;
|
|
122
|
+
botright = *(unsigned int *) &tp_botright;
|
|
123
|
+
start = (topleft * botright) % NUM_MATCH_ENTRIES;
|
|
124
|
+
|
|
125
|
+
/* Look for empty */
|
|
126
|
+
x = start;
|
|
127
|
+
do {
|
|
128
|
+
if (blank_entry (match_table, x)) {
|
|
129
|
+
/* Add this entry */
|
|
130
|
+
match_table[x].topleft = topleft;
|
|
131
|
+
match_table[x].botright = botright;
|
|
132
|
+
match_table[x].rating = copy_choices (ratings);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (++x >= NUM_MATCH_ENTRIES)
|
|
136
|
+
x = 0;
|
|
137
|
+
}
|
|
138
|
+
while (x != start);
|
|
139
|
+
|
|
140
|
+
cprintf ("error: Match table is full\n");
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
/**********************************************************************
|
|
145
|
+
* get_match
|
|
146
|
+
*
|
|
147
|
+
* Look up this blob in the match table to see if it needs to be
|
|
148
|
+
* matched. If it is not present then NULL is returned.
|
|
149
|
+
**********************************************************************/
|
|
150
|
+
CHOICES get_match(TBLOB *blob) {
|
|
151
|
+
unsigned int topleft;
|
|
152
|
+
unsigned int botright;
|
|
153
|
+
TPOINT tp_topleft;
|
|
154
|
+
TPOINT tp_botright;
|
|
155
|
+
/* Do starting hash */
|
|
156
|
+
blob_bounding_box(blob, &tp_topleft, &tp_botright);
|
|
157
|
+
topleft = *(unsigned int *) &tp_topleft;
|
|
158
|
+
botright = *(unsigned int *) &tp_botright;
|
|
159
|
+
return (get_match_by_bounds (topleft, botright));
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
/**********************************************************************
|
|
164
|
+
* get_match_by_bounds
|
|
165
|
+
*
|
|
166
|
+
* Look up this blob in the match table to see if it needs to be
|
|
167
|
+
* matched. If it is not present then NULL is returned.
|
|
168
|
+
**********************************************************************/
|
|
169
|
+
CHOICES get_match_by_bounds(unsigned int topleft, unsigned int botright) {
|
|
170
|
+
unsigned int start;
|
|
171
|
+
int x;
|
|
172
|
+
/* Do starting hash */
|
|
173
|
+
start = (topleft * botright) % NUM_MATCH_ENTRIES;
|
|
174
|
+
/* Search for match */
|
|
175
|
+
x = start;
|
|
176
|
+
do {
|
|
177
|
+
/* Not found when blank */
|
|
178
|
+
if (blank_entry (match_table, x))
|
|
179
|
+
break;
|
|
180
|
+
/* Is this the match ? */
|
|
181
|
+
if (match_table[x].topleft == topleft &&
|
|
182
|
+
match_table[x].botright == botright) {
|
|
183
|
+
return (copy_choices (match_table[x].rating));
|
|
184
|
+
}
|
|
185
|
+
if (++x >= NUM_MATCH_ENTRIES)
|
|
186
|
+
x = 0;
|
|
187
|
+
}
|
|
188
|
+
while (x != start);
|
|
189
|
+
|
|
190
|
+
return (NIL);
|
|
191
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/* -*-C-*-
|
|
2
|
+
********************************************************************************
|
|
3
|
+
*
|
|
4
|
+
* File: matchtab.h (Formerly matchtab.h)
|
|
5
|
+
* Description: Match table to retain blobs that were matched.
|
|
6
|
+
* Author: Mark Seaman, OCR Technology
|
|
7
|
+
* Created: Mon Jan 29 09:00:56 1990
|
|
8
|
+
* Modified: Tue Mar 19 15:38:19 1991 (Mark Seaman) marks@hpgrlt
|
|
9
|
+
* Language: C
|
|
10
|
+
* Package: N/A
|
|
11
|
+
* Status: Experimental (Do Not Distribute)
|
|
12
|
+
*
|
|
13
|
+
* (c) Copyright 1990, Hewlett-Packard Company.
|
|
14
|
+
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
15
|
+
** you may not use this file except in compliance with the License.
|
|
16
|
+
** You may obtain a copy of the License at
|
|
17
|
+
** http://www.apache.org/licenses/LICENSE-2.0
|
|
18
|
+
** Unless required by applicable law or agreed to in writing, software
|
|
19
|
+
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
+
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
+
** See the License for the specific language governing permissions and
|
|
22
|
+
** limitations under the License.
|
|
23
|
+
*
|
|
24
|
+
*********************************************************************************/
|
|
25
|
+
#ifndef MATCHTAB_H
|
|
26
|
+
#define MATCHTAB_H
|
|
27
|
+
|
|
28
|
+
/*----------------------------------------------------------------------
|
|
29
|
+
I n c l u d e s
|
|
30
|
+
----------------------------------------------------------------------*/
|
|
31
|
+
#include "choices.h"
|
|
32
|
+
#include "tessclas.h"
|
|
33
|
+
|
|
34
|
+
/*----------------------------------------------------------------------
|
|
35
|
+
F u n c t i o n s
|
|
36
|
+
----------------------------------------------------------------------*/
|
|
37
|
+
void init_match_table();
|
|
38
|
+
void end_match_table();
|
|
39
|
+
|
|
40
|
+
void put_match(TBLOB *blob, CHOICES ratings);
|
|
41
|
+
|
|
42
|
+
CHOICES get_match(TBLOB *blob);
|
|
43
|
+
|
|
44
|
+
CHOICES get_match_by_bounds(unsigned int topleft, unsigned int botright);
|
|
45
|
+
#endif
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/* -*-C-*-
|
|
2
|
+
********************************************************************************
|
|
3
|
+
*
|
|
4
|
+
* File: matrix.c (Formerly matrix.c)
|
|
5
|
+
* Description: Ratings matrix code. (Used by associator)
|
|
6
|
+
* Author: Mark Seaman, OCR Technology
|
|
7
|
+
* Created: Wed May 16 13:18:47 1990
|
|
8
|
+
* Modified: Wed Mar 20 09:44:47 1991 (Mark Seaman) marks@hpgrlt
|
|
9
|
+
* Language: C
|
|
10
|
+
* Package: N/A
|
|
11
|
+
* Status: Experimental (Do Not Distribute)
|
|
12
|
+
*
|
|
13
|
+
* (c) Copyright 1990, Hewlett-Packard Company.
|
|
14
|
+
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
15
|
+
** you may not use this file except in compliance with the License.
|
|
16
|
+
** You may obtain a copy of the License at
|
|
17
|
+
** http://www.apache.org/licenses/LICENSE-2.0
|
|
18
|
+
** Unless required by applicable law or agreed to in writing, software
|
|
19
|
+
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
+
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
+
** See the License for the specific language governing permissions and
|
|
22
|
+
** limitations under the License.
|
|
23
|
+
*
|
|
24
|
+
*********************************************************************************/
|
|
25
|
+
/*----------------------------------------------------------------------
|
|
26
|
+
I n c l u d e s
|
|
27
|
+
----------------------------------------------------------------------*/
|
|
28
|
+
#include "matrix.h"
|
|
29
|
+
#include "cutil.h"
|
|
30
|
+
#include "freelist.h"
|
|
31
|
+
#include "callcpp.h"
|
|
32
|
+
|
|
33
|
+
/*----------------------------------------------------------------------
|
|
34
|
+
F u n c t i o n s
|
|
35
|
+
----------------------------------------------------------------------*/
|
|
36
|
+
/**********************************************************************
|
|
37
|
+
* create_matrix
|
|
38
|
+
*
|
|
39
|
+
* Allocate a piece of memory to hold a matrix of choice list pointers.
|
|
40
|
+
* initialize all the elements of the matrix to NULL.
|
|
41
|
+
**********************************************************************/
|
|
42
|
+
MATRIX create_matrix(int dimension) {
|
|
43
|
+
MATRIX m;
|
|
44
|
+
int x;
|
|
45
|
+
int y;
|
|
46
|
+
|
|
47
|
+
m = (MATRIX) memalloc ((dimension * dimension + 1) * sizeof (LIST));
|
|
48
|
+
m[0] = (LIST) dimension;
|
|
49
|
+
for (x = 0; x < dimension; x++)
|
|
50
|
+
for (y = 0; y < dimension; y++)
|
|
51
|
+
matrix_put(m, x, y, NOT_CLASSIFIED);
|
|
52
|
+
return (m);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
/**********************************************************************
|
|
57
|
+
* free_matrix
|
|
58
|
+
*
|
|
59
|
+
* Deallocate the memory taken up by a matrix of match ratings.
|
|
60
|
+
*********************************************************************/
|
|
61
|
+
void free_matrix(MATRIX matrix) {
|
|
62
|
+
int x;
|
|
63
|
+
int y;
|
|
64
|
+
int dimension = matrix_dimension (matrix);
|
|
65
|
+
CHOICES matrix_cell;
|
|
66
|
+
|
|
67
|
+
for (x = 0; x < dimension; x++) {
|
|
68
|
+
for (y = 0; y < dimension; y++) {
|
|
69
|
+
matrix_cell = matrix_get (matrix, x, y);
|
|
70
|
+
if (matrix_cell != NOT_CLASSIFIED)
|
|
71
|
+
free_choices(matrix_cell);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
memfree(matrix);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
/**********************************************************************
|
|
79
|
+
* print_matrix
|
|
80
|
+
*
|
|
81
|
+
* Print the best guesses out of the match rating matrix.
|
|
82
|
+
**********************************************************************/
|
|
83
|
+
void print_matrix(MATRIX rating_matrix) {
|
|
84
|
+
int x;
|
|
85
|
+
int dimension;
|
|
86
|
+
int spread;
|
|
87
|
+
CHOICES rating;
|
|
88
|
+
|
|
89
|
+
cprintf ("Ratings Matrix (top choices)\n");
|
|
90
|
+
|
|
91
|
+
dimension = matrix_dimension (rating_matrix);
|
|
92
|
+
/* Do each diagonal */
|
|
93
|
+
for (spread = 0; spread < dimension; spread++) {
|
|
94
|
+
/* For each spot */
|
|
95
|
+
for (x = 0; x < dimension - spread; x++) {
|
|
96
|
+
/* Process one square */
|
|
97
|
+
rating = matrix_get (rating_matrix, x, x + spread);
|
|
98
|
+
|
|
99
|
+
if (rating != NOT_CLASSIFIED) {
|
|
100
|
+
cprintf ("\t[%d,%d] : ", x, x + spread);
|
|
101
|
+
if (first_node (rating))
|
|
102
|
+
cprintf ("%-10s%4.0f\t|\t",
|
|
103
|
+
class_string (first_node (rating)),
|
|
104
|
+
class_probability (first_node (rating)));
|
|
105
|
+
if (second_node (rating))
|
|
106
|
+
cprintf ("%-10s%4.0f\t|\t",
|
|
107
|
+
class_string (second_node (rating)),
|
|
108
|
+
class_probability (second_node (rating)));
|
|
109
|
+
if (third (rating))
|
|
110
|
+
cprintf ("%-10s%4.0f\n",
|
|
111
|
+
class_string (third (rating)),
|
|
112
|
+
class_probability (third (rating)));
|
|
113
|
+
else
|
|
114
|
+
new_line();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|