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,381 @@
|
|
|
1
|
+
/**********************************************************************
|
|
2
|
+
* File: blobbox.h (Formerly blobnbox.h)
|
|
3
|
+
* Description: Code for the textord blob class.
|
|
4
|
+
* Author: Ray Smith
|
|
5
|
+
* Created: Thu Jul 30 09:08:51 BST 1992
|
|
6
|
+
*
|
|
7
|
+
* (C) Copyright 1992, Hewlett-Packard Ltd.
|
|
8
|
+
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
** you may not use this file except in compliance with the License.
|
|
10
|
+
** You may obtain a copy of the License at
|
|
11
|
+
** http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
** Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
** See the License for the specific language governing permissions and
|
|
16
|
+
** limitations under the License.
|
|
17
|
+
*
|
|
18
|
+
**********************************************************************/
|
|
19
|
+
|
|
20
|
+
#ifndef BLOBBOX_H
|
|
21
|
+
#define BLOBBOX_H
|
|
22
|
+
|
|
23
|
+
#include "varable.h"
|
|
24
|
+
#include "clst.h"
|
|
25
|
+
#include "elst2.h"
|
|
26
|
+
#include "werd.h"
|
|
27
|
+
#include "ocrblock.h"
|
|
28
|
+
#include "statistc.h"
|
|
29
|
+
|
|
30
|
+
extern double_VAR_H (textord_error_weight, 3,
|
|
31
|
+
"Weighting for error in believability");
|
|
32
|
+
|
|
33
|
+
enum PITCH_TYPE
|
|
34
|
+
{
|
|
35
|
+
PITCH_DUNNO, //insufficient data
|
|
36
|
+
PITCH_DEF_FIXED, //definitely fixed
|
|
37
|
+
PITCH_MAYBE_FIXED, //could be
|
|
38
|
+
PITCH_DEF_PROP,
|
|
39
|
+
PITCH_MAYBE_PROP,
|
|
40
|
+
PITCH_CORR_FIXED,
|
|
41
|
+
PITCH_CORR_PROP
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
class BLOBNBOX;
|
|
45
|
+
ELISTIZEH (BLOBNBOX)
|
|
46
|
+
class BLOBNBOX:public ELIST_LINK
|
|
47
|
+
{
|
|
48
|
+
public:
|
|
49
|
+
BLOBNBOX() { //empty
|
|
50
|
+
blob_ptr = NULL;
|
|
51
|
+
cblob_ptr = NULL;
|
|
52
|
+
joined = FALSE;
|
|
53
|
+
reduced = FALSE;
|
|
54
|
+
area = 0;
|
|
55
|
+
}
|
|
56
|
+
BLOBNBOX( //constructor
|
|
57
|
+
PBLOB *srcblob) {
|
|
58
|
+
blob_ptr = srcblob;
|
|
59
|
+
cblob_ptr = NULL;
|
|
60
|
+
box = srcblob->bounding_box ();
|
|
61
|
+
joined = FALSE;
|
|
62
|
+
reduced = FALSE;
|
|
63
|
+
area = (int) srcblob->area ();
|
|
64
|
+
}
|
|
65
|
+
BLOBNBOX( //constructor
|
|
66
|
+
C_BLOB *srcblob) {
|
|
67
|
+
blob_ptr = NULL;
|
|
68
|
+
cblob_ptr = srcblob;
|
|
69
|
+
box = srcblob->bounding_box ();
|
|
70
|
+
joined = FALSE;
|
|
71
|
+
reduced = FALSE;
|
|
72
|
+
area = (int) srcblob->area ();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
//get bounding box
|
|
76
|
+
const TBOX &bounding_box() const {
|
|
77
|
+
return box;
|
|
78
|
+
}
|
|
79
|
+
//get bounding box
|
|
80
|
+
const TBOX &reduced_box() const {
|
|
81
|
+
return red_box;
|
|
82
|
+
}
|
|
83
|
+
void set_reduced_box( //set other box
|
|
84
|
+
TBOX new_box) {
|
|
85
|
+
red_box = new_box;
|
|
86
|
+
reduced = TRUE;
|
|
87
|
+
}
|
|
88
|
+
inT32 enclosed_area() const { //get area
|
|
89
|
+
return area;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
void rotate_box( //just box
|
|
93
|
+
FCOORD vec) {
|
|
94
|
+
box.rotate (vec);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
BOOL8 joined_to_prev() const { //access function
|
|
98
|
+
return joined != 0;
|
|
99
|
+
}
|
|
100
|
+
BOOL8 red_box_set() const { //access function
|
|
101
|
+
return reduced != 0;
|
|
102
|
+
}
|
|
103
|
+
void merge( //merge with next
|
|
104
|
+
BLOBNBOX *nextblob);
|
|
105
|
+
void chop( //fake chop blob
|
|
106
|
+
BLOBNBOX_IT *start_it, //location of this
|
|
107
|
+
BLOBNBOX_IT *blob_it, //iterator
|
|
108
|
+
FCOORD rotation, //for landscape
|
|
109
|
+
float xheight); //line height
|
|
110
|
+
|
|
111
|
+
PBLOB *blob() { //access function
|
|
112
|
+
return blob_ptr;
|
|
113
|
+
}
|
|
114
|
+
C_BLOB *cblob() { //access function
|
|
115
|
+
return cblob_ptr;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
#ifndef GRAPHICS_DISABLED
|
|
119
|
+
void plot( //draw one
|
|
120
|
+
ScrollView* window, //window to draw in
|
|
121
|
+
ScrollView::Color blob_colour, //for outer bits
|
|
122
|
+
ScrollView::Color child_colour) { //for holes
|
|
123
|
+
if (blob_ptr != NULL)
|
|
124
|
+
blob_ptr->plot (window, blob_colour, child_colour);
|
|
125
|
+
if (cblob_ptr != NULL)
|
|
126
|
+
cblob_ptr->plot (window, blob_colour, child_colour);
|
|
127
|
+
}
|
|
128
|
+
#endif
|
|
129
|
+
|
|
130
|
+
NEWDELETE2 (BLOBNBOX) private:
|
|
131
|
+
int area:30; //enclosed area
|
|
132
|
+
int joined:1; //joined to prev
|
|
133
|
+
int reduced:1; //reduced box set
|
|
134
|
+
TBOX box; //bounding box
|
|
135
|
+
TBOX red_box; //bounding box
|
|
136
|
+
PBLOB *blob_ptr; //poly blob
|
|
137
|
+
C_BLOB *cblob_ptr; //edgestep blob
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
class TO_ROW:public ELIST2_LINK
|
|
141
|
+
{
|
|
142
|
+
public:
|
|
143
|
+
TO_ROW() {
|
|
144
|
+
} //empty
|
|
145
|
+
TO_ROW( //constructor
|
|
146
|
+
BLOBNBOX *blob, //from first blob
|
|
147
|
+
float top, //of row //target height
|
|
148
|
+
float bottom,
|
|
149
|
+
float row_size);
|
|
150
|
+
|
|
151
|
+
float max_y() const { //access function
|
|
152
|
+
return y_max;
|
|
153
|
+
}
|
|
154
|
+
float min_y() const {
|
|
155
|
+
return y_min;
|
|
156
|
+
}
|
|
157
|
+
float mean_y() const {
|
|
158
|
+
return (y_min + y_max) / 2.0f;
|
|
159
|
+
}
|
|
160
|
+
float initial_min_y() const {
|
|
161
|
+
return initial_y_min;
|
|
162
|
+
}
|
|
163
|
+
float line_m() const { //access to line fit
|
|
164
|
+
return m;
|
|
165
|
+
}
|
|
166
|
+
float line_c() const {
|
|
167
|
+
return c;
|
|
168
|
+
}
|
|
169
|
+
float line_error() const {
|
|
170
|
+
return error;
|
|
171
|
+
}
|
|
172
|
+
float parallel_c() const {
|
|
173
|
+
return para_c;
|
|
174
|
+
}
|
|
175
|
+
float parallel_error() const {
|
|
176
|
+
return para_error;
|
|
177
|
+
}
|
|
178
|
+
float believability() const { //baseline goodness
|
|
179
|
+
return credibility;
|
|
180
|
+
}
|
|
181
|
+
float intercept() const { //real parallel_c
|
|
182
|
+
return y_origin;
|
|
183
|
+
}
|
|
184
|
+
void add_blob( //put in row
|
|
185
|
+
BLOBNBOX *blob, //blob to add
|
|
186
|
+
float top, //of row //target height
|
|
187
|
+
float bottom,
|
|
188
|
+
float row_size);
|
|
189
|
+
void insert_blob( //put in row in order
|
|
190
|
+
BLOBNBOX *blob);
|
|
191
|
+
|
|
192
|
+
BLOBNBOX_LIST *blob_list() { //get list
|
|
193
|
+
return &blobs;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
void set_line( //set line spec
|
|
197
|
+
float new_m, //line to set
|
|
198
|
+
float new_c,
|
|
199
|
+
float new_error) {
|
|
200
|
+
m = new_m;
|
|
201
|
+
c = new_c;
|
|
202
|
+
error = new_error;
|
|
203
|
+
}
|
|
204
|
+
void set_parallel_line( //set fixed gradient line
|
|
205
|
+
float gradient, //page gradient
|
|
206
|
+
float new_c,
|
|
207
|
+
float new_error) {
|
|
208
|
+
para_c = new_c;
|
|
209
|
+
para_error = new_error;
|
|
210
|
+
credibility =
|
|
211
|
+
(float) (blobs.length () - textord_error_weight * new_error);
|
|
212
|
+
y_origin = (float) (new_c / sqrt (1 + gradient * gradient));
|
|
213
|
+
//real intercept
|
|
214
|
+
}
|
|
215
|
+
void set_limits( //set min,max
|
|
216
|
+
float new_min, //bottom and
|
|
217
|
+
float new_max) { //top of row
|
|
218
|
+
y_min = new_min;
|
|
219
|
+
y_max = new_max;
|
|
220
|
+
}
|
|
221
|
+
void compute_vertical_projection();
|
|
222
|
+
//get projection
|
|
223
|
+
|
|
224
|
+
//true when dead
|
|
225
|
+
NEWDELETE2 (TO_ROW) BOOL8 merged;
|
|
226
|
+
BOOL8 all_caps; //had no ascenders
|
|
227
|
+
BOOL8 used_dm_model; //in guessing pitch
|
|
228
|
+
inT16 projection_left; //start of projection
|
|
229
|
+
inT16 projection_right; //start of projection
|
|
230
|
+
PITCH_TYPE pitch_decision; //how strong is decision
|
|
231
|
+
float fixed_pitch; //pitch or 0
|
|
232
|
+
float fp_space; //sp if fixed pitch
|
|
233
|
+
float fp_nonsp; //nonsp if fixed pitch
|
|
234
|
+
float pr_space; //sp if prop
|
|
235
|
+
float pr_nonsp; //non sp if prop
|
|
236
|
+
float spacing; //to "next" row
|
|
237
|
+
float xheight; //of line
|
|
238
|
+
float ascrise; //ascenders
|
|
239
|
+
float descdrop; //descenders
|
|
240
|
+
inT32 min_space; //min size for real space
|
|
241
|
+
inT32 max_nonspace; //max size of non-space
|
|
242
|
+
inT32 space_threshold; //space vs nonspace
|
|
243
|
+
float kern_size; //average non-space
|
|
244
|
+
float space_size; //average space
|
|
245
|
+
WERD_LIST rep_words; //repeated chars
|
|
246
|
+
ICOORDELT_LIST char_cells; //fixed pitch cells
|
|
247
|
+
QSPLINE baseline; //curved baseline
|
|
248
|
+
STATS projection; //vertical projection
|
|
249
|
+
|
|
250
|
+
private:
|
|
251
|
+
BLOBNBOX_LIST blobs; //blobs in row
|
|
252
|
+
float y_min; //coords
|
|
253
|
+
float y_max;
|
|
254
|
+
float initial_y_min;
|
|
255
|
+
float m, c; //line spec
|
|
256
|
+
float error; //line error
|
|
257
|
+
float para_c; //constrained fit
|
|
258
|
+
float para_error;
|
|
259
|
+
float y_origin; //rotated para_c;
|
|
260
|
+
float credibility; //baseline believability
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
ELIST2IZEH (TO_ROW)
|
|
264
|
+
class TO_BLOCK:public ELIST_LINK
|
|
265
|
+
{
|
|
266
|
+
public:
|
|
267
|
+
TO_BLOCK() {
|
|
268
|
+
} //empty
|
|
269
|
+
TO_BLOCK( //constructor
|
|
270
|
+
BLOCK *src_block); //real block
|
|
271
|
+
~TO_BLOCK();
|
|
272
|
+
|
|
273
|
+
TO_ROW_LIST *get_rows() { //access function
|
|
274
|
+
return &row_list;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
void print_rows() { //debug info
|
|
278
|
+
TO_ROW_IT row_it = &row_list;
|
|
279
|
+
TO_ROW *row;
|
|
280
|
+
|
|
281
|
+
for (row_it.mark_cycle_pt (); !row_it.cycled_list ();
|
|
282
|
+
row_it.forward ()) {
|
|
283
|
+
row = row_it.data ();
|
|
284
|
+
printf ("Row range (%g,%g), para_c=%g, blobcount=" INT32FORMAT
|
|
285
|
+
"\n", row->min_y (), row->max_y (), row->parallel_c (),
|
|
286
|
+
row->blob_list ()->length ());
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
BLOBNBOX_LIST blobs; //medium size
|
|
291
|
+
BLOBNBOX_LIST underlines; //underline blobs
|
|
292
|
+
BLOBNBOX_LIST noise_blobs; //very small
|
|
293
|
+
BLOBNBOX_LIST small_blobs; //fairly small
|
|
294
|
+
BLOBNBOX_LIST large_blobs; //big blobs
|
|
295
|
+
BLOCK *block; //real block
|
|
296
|
+
PITCH_TYPE pitch_decision; //how strong is decision
|
|
297
|
+
float line_spacing; //estimate
|
|
298
|
+
float line_size; //estimate
|
|
299
|
+
float max_blob_size; //line assignment limit
|
|
300
|
+
float baseline_offset; //phase shift
|
|
301
|
+
float xheight; //median blob size
|
|
302
|
+
float fixed_pitch; //pitch or 0
|
|
303
|
+
float kern_size; //average non-space
|
|
304
|
+
float space_size; //average space
|
|
305
|
+
inT32 min_space; //min definite space
|
|
306
|
+
inT32 max_nonspace; //max definite
|
|
307
|
+
float fp_space; //sp if fixed pitch
|
|
308
|
+
float fp_nonsp; //nonsp if fixed pitch
|
|
309
|
+
float pr_space; //sp if prop
|
|
310
|
+
float pr_nonsp; //non sp if prop
|
|
311
|
+
TO_ROW *key_row; //starting row
|
|
312
|
+
|
|
313
|
+
NEWDELETE2 (TO_BLOCK) private:
|
|
314
|
+
TO_ROW_LIST row_list; //temporary rows
|
|
315
|
+
};
|
|
316
|
+
|
|
317
|
+
ELISTIZEH (TO_BLOCK)
|
|
318
|
+
extern double_VAR_H (textord_error_weight, 3,
|
|
319
|
+
"Weighting for error in believability");
|
|
320
|
+
void find_blob_limits( //get y limits
|
|
321
|
+
PBLOB *blob, //blob to search
|
|
322
|
+
float leftx, //x limits
|
|
323
|
+
float rightx,
|
|
324
|
+
FCOORD rotation, //for landscape
|
|
325
|
+
float &ymin, //output y limits
|
|
326
|
+
float &ymax);
|
|
327
|
+
void find_cblob_limits( //get y limits
|
|
328
|
+
C_BLOB *blob, //blob to search
|
|
329
|
+
float leftx, //x limits
|
|
330
|
+
float rightx,
|
|
331
|
+
FCOORD rotation, //for landscape
|
|
332
|
+
float &ymin, //output y limits
|
|
333
|
+
float &ymax);
|
|
334
|
+
void find_cblob_vlimits( //get y limits
|
|
335
|
+
C_BLOB *blob, //blob to search
|
|
336
|
+
float leftx, //x limits
|
|
337
|
+
float rightx,
|
|
338
|
+
float &ymin, //output y limits
|
|
339
|
+
float &ymax);
|
|
340
|
+
void find_cblob_hlimits( //get x limits
|
|
341
|
+
C_BLOB *blob, //blob to search
|
|
342
|
+
float bottomy, //y limits
|
|
343
|
+
float topy,
|
|
344
|
+
float &xmin, //output x limits
|
|
345
|
+
float &xymax);
|
|
346
|
+
PBLOB *rotate_blob( //get y limits
|
|
347
|
+
PBLOB *blob, //blob to search
|
|
348
|
+
FCOORD rotation //vector to rotate by
|
|
349
|
+
);
|
|
350
|
+
PBLOB *rotate_cblob( //rotate it
|
|
351
|
+
C_BLOB *blob, //blob to search
|
|
352
|
+
float xheight, //for poly approx
|
|
353
|
+
FCOORD rotation //for landscape
|
|
354
|
+
);
|
|
355
|
+
C_BLOB *crotate_cblob( //rotate it
|
|
356
|
+
C_BLOB *blob, //blob to search
|
|
357
|
+
FCOORD rotation //for landscape
|
|
358
|
+
);
|
|
359
|
+
TBOX box_next( //get bounding box
|
|
360
|
+
BLOBNBOX_IT *it //iterator to blobds
|
|
361
|
+
);
|
|
362
|
+
TBOX box_next_pre_chopped( //get bounding box
|
|
363
|
+
BLOBNBOX_IT *it //iterator to blobds
|
|
364
|
+
);
|
|
365
|
+
void vertical_blob_projection( //project outlines
|
|
366
|
+
PBLOB *blob, //blob to project
|
|
367
|
+
STATS *stats //output
|
|
368
|
+
);
|
|
369
|
+
//project outlines
|
|
370
|
+
void vertical_outline_projection(OUTLINE *outline, //outline to project
|
|
371
|
+
STATS *stats //output
|
|
372
|
+
);
|
|
373
|
+
void vertical_cblob_projection( //project outlines
|
|
374
|
+
C_BLOB *blob, //blob to project
|
|
375
|
+
STATS *stats //output
|
|
376
|
+
);
|
|
377
|
+
void vertical_coutline_projection( //project outlines
|
|
378
|
+
C_OUTLINE *outline, //outline to project
|
|
379
|
+
STATS *stats //output
|
|
380
|
+
);
|
|
381
|
+
#endif
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/* -*-C-*-
|
|
2
|
+
********************************************************************************
|
|
3
|
+
*
|
|
4
|
+
* File: blobs.c (Formerly blobs.c)
|
|
5
|
+
* Description: Blob definition
|
|
6
|
+
* Author: Mark Seaman, OCR Technology
|
|
7
|
+
* Created: Fri Oct 27 15:39:52 1989
|
|
8
|
+
* Modified: Thu Mar 28 15:33:26 1991 (Mark Seaman) marks@hpgrlt
|
|
9
|
+
* Language: C
|
|
10
|
+
* Package: N/A
|
|
11
|
+
* Status: Experimental (Do Not Distribute)
|
|
12
|
+
*
|
|
13
|
+
* (c) Copyright 1989, 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
|
+
/*----------------------------------------------------------------------
|
|
27
|
+
I n c l u d e s
|
|
28
|
+
----------------------------------------------------------------------*/
|
|
29
|
+
#include "mfcpch.h"
|
|
30
|
+
#include "blobs.h"
|
|
31
|
+
#include "cutil.h"
|
|
32
|
+
#include "emalloc.h"
|
|
33
|
+
#include "structures.h"
|
|
34
|
+
|
|
35
|
+
/*----------------------------------------------------------------------
|
|
36
|
+
F u n c t i o n s
|
|
37
|
+
----------------------------------------------------------------------*/
|
|
38
|
+
/**********************************************************************
|
|
39
|
+
* blob_origin
|
|
40
|
+
*
|
|
41
|
+
* Compute the origin of a compound blob, define to be the centre
|
|
42
|
+
* of the bounding box.
|
|
43
|
+
**********************************************************************/
|
|
44
|
+
void blob_origin(TBLOB *blob, /*blob to compute on */
|
|
45
|
+
TPOINT *origin) { /*return value */
|
|
46
|
+
TPOINT topleft; /*bounding box */
|
|
47
|
+
TPOINT botright;
|
|
48
|
+
|
|
49
|
+
/*find bounding box */
|
|
50
|
+
blob_bounding_box(blob, &topleft, &botright);
|
|
51
|
+
/*centre of box */
|
|
52
|
+
origin->x = (topleft.x + botright.x) / 2;
|
|
53
|
+
origin->y = (topleft.y + botright.y) / 2;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
/**********************************************************************
|
|
58
|
+
* blob_bounding_box
|
|
59
|
+
*
|
|
60
|
+
* Compute the bounding_box of a compound blob, define to be the
|
|
61
|
+
* max coordinate value of the bounding boxes of all the top-level
|
|
62
|
+
* outlines in the box.
|
|
63
|
+
**********************************************************************/
|
|
64
|
+
void blob_bounding_box(TBLOB *blob, /*blob to compute on */
|
|
65
|
+
register TPOINT *topleft, /*bounding box */
|
|
66
|
+
register TPOINT *botright) {
|
|
67
|
+
register TESSLINE *outline; /*current outline */
|
|
68
|
+
|
|
69
|
+
if (blob == NULL || blob->outlines == NULL) {
|
|
70
|
+
topleft->x = topleft->y = 0;
|
|
71
|
+
*botright = *topleft; /*default value */
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
outline = blob->outlines;
|
|
75
|
+
*topleft = outline->topleft;
|
|
76
|
+
*botright = outline->botright;
|
|
77
|
+
for (outline = outline->next; outline != NULL; outline = outline->next) {
|
|
78
|
+
if (outline->topleft.x < topleft->x)
|
|
79
|
+
/*find extremes */
|
|
80
|
+
topleft->x = outline->topleft.x;
|
|
81
|
+
if (outline->botright.x > botright->x)
|
|
82
|
+
/*find extremes */
|
|
83
|
+
botright->x = outline->botright.x;
|
|
84
|
+
if (outline->topleft.y > topleft->y)
|
|
85
|
+
/*find extremes */
|
|
86
|
+
topleft->y = outline->topleft.y;
|
|
87
|
+
if (outline->botright.y < botright->y)
|
|
88
|
+
/*find extremes */
|
|
89
|
+
botright->y = outline->botright.y;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
/**********************************************************************
|
|
96
|
+
* blobs_bounding_box
|
|
97
|
+
*
|
|
98
|
+
* Return the smallest extreme point that contain this word.
|
|
99
|
+
**********************************************************************/
|
|
100
|
+
void blobs_bounding_box(TBLOB *blobs, TPOINT *topleft, TPOINT *botright) {
|
|
101
|
+
TPOINT tl;
|
|
102
|
+
TPOINT br;
|
|
103
|
+
TBLOB *blob;
|
|
104
|
+
/* Start with first blob */
|
|
105
|
+
blob_bounding_box(blobs, topleft, botright);
|
|
106
|
+
|
|
107
|
+
iterate_blobs(blob, blobs) {
|
|
108
|
+
blob_bounding_box(blob, &tl, &br);
|
|
109
|
+
|
|
110
|
+
if (tl.x < topleft->x)
|
|
111
|
+
topleft->x = tl.x;
|
|
112
|
+
if (tl.y > topleft->y)
|
|
113
|
+
topleft->y = tl.y;
|
|
114
|
+
if (br.x > botright->x)
|
|
115
|
+
botright->x = br.x;
|
|
116
|
+
if (br.y < botright->y)
|
|
117
|
+
botright->y = br.y;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
/**********************************************************************
|
|
123
|
+
* blobs_origin
|
|
124
|
+
*
|
|
125
|
+
* Compute the origin of a compound blob, define to be the centre
|
|
126
|
+
* of the bounding box.
|
|
127
|
+
**********************************************************************/
|
|
128
|
+
void blobs_origin(TBLOB *blobs, /*blob to compute on */
|
|
129
|
+
TPOINT *origin) { /*return value */
|
|
130
|
+
TPOINT topleft; /*bounding box */
|
|
131
|
+
TPOINT botright;
|
|
132
|
+
|
|
133
|
+
/*find bounding box */
|
|
134
|
+
blobs_bounding_box(blobs, &topleft, &botright);
|
|
135
|
+
/*center of box */
|
|
136
|
+
origin->x = (topleft.x + botright.x) / 2;
|
|
137
|
+
origin->y = (topleft.y + botright.y) / 2;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
/**********************************************************************
|
|
142
|
+
* blobs_widths
|
|
143
|
+
*
|
|
144
|
+
* Compute the widths of a list of blobs. Return an array of the widths
|
|
145
|
+
* and gaps.
|
|
146
|
+
**********************************************************************/
|
|
147
|
+
WIDTH_RECORD *blobs_widths(TBLOB *blobs) { /*blob to compute on */
|
|
148
|
+
WIDTH_RECORD *width_record;
|
|
149
|
+
TPOINT topleft; /*bounding box */
|
|
150
|
+
TPOINT botright;
|
|
151
|
+
TBLOB *blob; /*blob to compute on */
|
|
152
|
+
int i = 0;
|
|
153
|
+
int blob_end;
|
|
154
|
+
int num_blobs = count_blobs (blobs);
|
|
155
|
+
|
|
156
|
+
/* Get memory */
|
|
157
|
+
width_record = (WIDTH_RECORD *) memalloc (sizeof (int) * num_blobs * 2);
|
|
158
|
+
width_record->num_chars = num_blobs;
|
|
159
|
+
|
|
160
|
+
blob_bounding_box(blobs, &topleft, &botright);
|
|
161
|
+
width_record->widths[i++] = botright.x - topleft.x;
|
|
162
|
+
/* First width */
|
|
163
|
+
blob_end = botright.x;
|
|
164
|
+
|
|
165
|
+
iterate_blobs (blob, blobs->next) {
|
|
166
|
+
blob_bounding_box(blob, &topleft, &botright);
|
|
167
|
+
width_record->widths[i++] = topleft.x - blob_end;
|
|
168
|
+
width_record->widths[i++] = botright.x - topleft.x;
|
|
169
|
+
blob_end = botright.x;
|
|
170
|
+
}
|
|
171
|
+
return (width_record);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
/**********************************************************************
|
|
176
|
+
* count_blobs
|
|
177
|
+
*
|
|
178
|
+
* Return a count of the number of blobs attached to this one.
|
|
179
|
+
**********************************************************************/
|
|
180
|
+
int count_blobs(TBLOB *blobs) {
|
|
181
|
+
TBLOB *b;
|
|
182
|
+
int x = 0;
|
|
183
|
+
|
|
184
|
+
iterate_blobs (b, blobs) x++;
|
|
185
|
+
return (x);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
/**********************************************************************
|
|
190
|
+
* delete_word
|
|
191
|
+
*
|
|
192
|
+
* Reclaim the memory taken by this word structure and all of its
|
|
193
|
+
* lower level structures.
|
|
194
|
+
**********************************************************************/
|
|
195
|
+
void delete_word(TWERD *word) {
|
|
196
|
+
TBLOB *blob;
|
|
197
|
+
TBLOB *nextblob;
|
|
198
|
+
TESSLINE *outline;
|
|
199
|
+
TESSLINE *nextoutline;
|
|
200
|
+
TESSLINE *child;
|
|
201
|
+
TESSLINE *nextchild;
|
|
202
|
+
|
|
203
|
+
for (blob = word->blobs; blob; blob = nextblob) {
|
|
204
|
+
nextblob = blob->next;
|
|
205
|
+
|
|
206
|
+
for (outline = blob->outlines; outline; outline = nextoutline) {
|
|
207
|
+
nextoutline = outline->next;
|
|
208
|
+
|
|
209
|
+
delete_edgepts (outline->loop);
|
|
210
|
+
|
|
211
|
+
for (child = outline->child; child; child = nextchild) {
|
|
212
|
+
nextchild = child->next;
|
|
213
|
+
|
|
214
|
+
delete_edgepts (child->loop);
|
|
215
|
+
|
|
216
|
+
oldoutline(child);
|
|
217
|
+
}
|
|
218
|
+
oldoutline(outline);
|
|
219
|
+
}
|
|
220
|
+
oldblob(blob);
|
|
221
|
+
}
|
|
222
|
+
if (word->correct != NULL)
|
|
223
|
+
strfree (word->correct); /* Reclaim memory */
|
|
224
|
+
oldword(word);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
/**********************************************************************
|
|
229
|
+
* delete_edgepts
|
|
230
|
+
*
|
|
231
|
+
* Delete a list of EDGEPT structures.
|
|
232
|
+
**********************************************************************/
|
|
233
|
+
void delete_edgepts(register EDGEPT *edgepts) {
|
|
234
|
+
register EDGEPT *this_edge;
|
|
235
|
+
register EDGEPT *next_edge;
|
|
236
|
+
|
|
237
|
+
if (edgepts == NULL)
|
|
238
|
+
return;
|
|
239
|
+
|
|
240
|
+
this_edge = edgepts;
|
|
241
|
+
do {
|
|
242
|
+
next_edge = this_edge->next;
|
|
243
|
+
oldedgept(this_edge);
|
|
244
|
+
this_edge = next_edge;
|
|
245
|
+
}
|
|
246
|
+
while (this_edge != edgepts);
|
|
247
|
+
}
|