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.
Files changed (612) hide show
  1. data/.document +5 -0
  2. data/Gemfile +14 -0
  3. data/Gemfile.lock +23 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.rdoc +19 -0
  6. data/Rakefile +46 -0
  7. data/VERSION +1 -0
  8. data/ext/tesseract_bin/extconf.rb +17 -0
  9. data/lib/tesseract_bin.rb +12 -0
  10. data/tesseract_bin.gemspec +660 -0
  11. data/test/helper.rb +18 -0
  12. data/test/test_tesseract_bin.rb +7 -0
  13. data/vendor/tesseract-2.04/AUTHORS +8 -0
  14. data/vendor/tesseract-2.04/COPYING +23 -0
  15. data/vendor/tesseract-2.04/ChangeLog +71 -0
  16. data/vendor/tesseract-2.04/INSTALL +229 -0
  17. data/vendor/tesseract-2.04/Makefile.am +20 -0
  18. data/vendor/tesseract-2.04/Makefile.in +641 -0
  19. data/vendor/tesseract-2.04/NEWS +1 -0
  20. data/vendor/tesseract-2.04/README +138 -0
  21. data/vendor/tesseract-2.04/ReleaseNotes +213 -0
  22. data/vendor/tesseract-2.04/StdAfx.cpp +8 -0
  23. data/vendor/tesseract-2.04/StdAfx.h +24 -0
  24. data/vendor/tesseract-2.04/ccmain/Makefile.am +63 -0
  25. data/vendor/tesseract-2.04/ccmain/Makefile.in +735 -0
  26. data/vendor/tesseract-2.04/ccmain/adaptions.cpp +1082 -0
  27. data/vendor/tesseract-2.04/ccmain/adaptions.h +109 -0
  28. data/vendor/tesseract-2.04/ccmain/applybox.cpp +891 -0
  29. data/vendor/tesseract-2.04/ccmain/applybox.h +73 -0
  30. data/vendor/tesseract-2.04/ccmain/baseapi.cpp +1105 -0
  31. data/vendor/tesseract-2.04/ccmain/baseapi.h +256 -0
  32. data/vendor/tesseract-2.04/ccmain/blobcmp.cpp +76 -0
  33. data/vendor/tesseract-2.04/ccmain/blobcmp.h +29 -0
  34. data/vendor/tesseract-2.04/ccmain/callnet.cpp +93 -0
  35. data/vendor/tesseract-2.04/ccmain/callnet.h +32 -0
  36. data/vendor/tesseract-2.04/ccmain/charcut.cpp +704 -0
  37. data/vendor/tesseract-2.04/ccmain/charcut.h +120 -0
  38. data/vendor/tesseract-2.04/ccmain/charsample.cpp +699 -0
  39. data/vendor/tesseract-2.04/ccmain/control.cpp +1842 -0
  40. data/vendor/tesseract-2.04/ccmain/control.h +198 -0
  41. data/vendor/tesseract-2.04/ccmain/docqual.cpp +1481 -0
  42. data/vendor/tesseract-2.04/ccmain/docqual.h +155 -0
  43. data/vendor/tesseract-2.04/ccmain/expandblob.cpp +82 -0
  44. data/vendor/tesseract-2.04/ccmain/expandblob.h +13 -0
  45. data/vendor/tesseract-2.04/ccmain/fixspace.cpp +989 -0
  46. data/vendor/tesseract-2.04/ccmain/fixspace.h +72 -0
  47. data/vendor/tesseract-2.04/ccmain/fixxht.cpp +825 -0
  48. data/vendor/tesseract-2.04/ccmain/fixxht.h +93 -0
  49. data/vendor/tesseract-2.04/ccmain/imgscale.cpp +154 -0
  50. data/vendor/tesseract-2.04/ccmain/imgscale.h +32 -0
  51. data/vendor/tesseract-2.04/ccmain/matmatch.cpp +391 -0
  52. data/vendor/tesseract-2.04/ccmain/matmatch.h +48 -0
  53. data/vendor/tesseract-2.04/ccmain/output.cpp +1273 -0
  54. data/vendor/tesseract-2.04/ccmain/output.h +116 -0
  55. data/vendor/tesseract-2.04/ccmain/pagewalk.cpp +666 -0
  56. data/vendor/tesseract-2.04/ccmain/pagewalk.h +155 -0
  57. data/vendor/tesseract-2.04/ccmain/paircmp.cpp +107 -0
  58. data/vendor/tesseract-2.04/ccmain/paircmp.h +43 -0
  59. data/vendor/tesseract-2.04/ccmain/pgedit.cpp +1867 -0
  60. data/vendor/tesseract-2.04/ccmain/pgedit.h +181 -0
  61. data/vendor/tesseract-2.04/ccmain/reject.cpp +1775 -0
  62. data/vendor/tesseract-2.04/ccmain/reject.h +181 -0
  63. data/vendor/tesseract-2.04/ccmain/scaleimg.cpp +366 -0
  64. data/vendor/tesseract-2.04/ccmain/scaleimg.h +35 -0
  65. data/vendor/tesseract-2.04/ccmain/tessbox.cpp +375 -0
  66. data/vendor/tesseract-2.04/ccmain/tessbox.h +110 -0
  67. data/vendor/tesseract-2.04/ccmain/tessedit.cpp +278 -0
  68. data/vendor/tesseract-2.04/ccmain/tessedit.h +49 -0
  69. data/vendor/tesseract-2.04/ccmain/tessembedded.cpp +110 -0
  70. data/vendor/tesseract-2.04/ccmain/tessembedded.h +38 -0
  71. data/vendor/tesseract-2.04/ccmain/tesseractfull.cc +37 -0
  72. data/vendor/tesseract-2.04/ccmain/tesseractmain.cpp +387 -0
  73. data/vendor/tesseract-2.04/ccmain/tesseractmain.h +58 -0
  74. data/vendor/tesseract-2.04/ccmain/tessio.h +110 -0
  75. data/vendor/tesseract-2.04/ccmain/tessvars.cpp +38 -0
  76. data/vendor/tesseract-2.04/ccmain/tessvars.h +48 -0
  77. data/vendor/tesseract-2.04/ccmain/tfacep.h +62 -0
  78. data/vendor/tesseract-2.04/ccmain/tfacepp.cpp +443 -0
  79. data/vendor/tesseract-2.04/ccmain/tfacepp.h +85 -0
  80. data/vendor/tesseract-2.04/ccmain/tstruct.cpp +549 -0
  81. data/vendor/tesseract-2.04/ccmain/tstruct.h +108 -0
  82. data/vendor/tesseract-2.04/ccmain/varabled.cpp +346 -0
  83. data/vendor/tesseract-2.04/ccmain/varabled.h +125 -0
  84. data/vendor/tesseract-2.04/ccmain/werdit.cpp +193 -0
  85. data/vendor/tesseract-2.04/ccmain/werdit.h +67 -0
  86. data/vendor/tesseract-2.04/ccstruct/Makefile.am +25 -0
  87. data/vendor/tesseract-2.04/ccstruct/Makefile.in +650 -0
  88. data/vendor/tesseract-2.04/ccstruct/blckerr.h +29 -0
  89. data/vendor/tesseract-2.04/ccstruct/blobbox.cpp +778 -0
  90. data/vendor/tesseract-2.04/ccstruct/blobbox.h +381 -0
  91. data/vendor/tesseract-2.04/ccstruct/blobs.cpp +247 -0
  92. data/vendor/tesseract-2.04/ccstruct/blobs.h +119 -0
  93. data/vendor/tesseract-2.04/ccstruct/blread.cpp +537 -0
  94. data/vendor/tesseract-2.04/ccstruct/blread.h +63 -0
  95. data/vendor/tesseract-2.04/ccstruct/callcpp.cpp +252 -0
  96. data/vendor/tesseract-2.04/ccstruct/coutln.cpp +650 -0
  97. data/vendor/tesseract-2.04/ccstruct/coutln.h +186 -0
  98. data/vendor/tesseract-2.04/ccstruct/crakedge.h +39 -0
  99. data/vendor/tesseract-2.04/ccstruct/genblob.cpp +133 -0
  100. data/vendor/tesseract-2.04/ccstruct/genblob.h +52 -0
  101. data/vendor/tesseract-2.04/ccstruct/hpddef.h +39 -0
  102. data/vendor/tesseract-2.04/ccstruct/hpdsizes.h +8 -0
  103. data/vendor/tesseract-2.04/ccstruct/ipoints.h +479 -0
  104. data/vendor/tesseract-2.04/ccstruct/labls.cpp +188 -0
  105. data/vendor/tesseract-2.04/ccstruct/labls.h +38 -0
  106. data/vendor/tesseract-2.04/ccstruct/linlsq.cpp +249 -0
  107. data/vendor/tesseract-2.04/ccstruct/linlsq.h +102 -0
  108. data/vendor/tesseract-2.04/ccstruct/lmedsq.cpp +453 -0
  109. data/vendor/tesseract-2.04/ccstruct/lmedsq.h +84 -0
  110. data/vendor/tesseract-2.04/ccstruct/mod128.cpp +100 -0
  111. data/vendor/tesseract-2.04/ccstruct/mod128.h +85 -0
  112. data/vendor/tesseract-2.04/ccstruct/normalis.cpp +176 -0
  113. data/vendor/tesseract-2.04/ccstruct/normalis.h +108 -0
  114. data/vendor/tesseract-2.04/ccstruct/ocrblock.cpp +369 -0
  115. data/vendor/tesseract-2.04/ccstruct/ocrblock.h +235 -0
  116. data/vendor/tesseract-2.04/ccstruct/ocrrow.cpp +216 -0
  117. data/vendor/tesseract-2.04/ccstruct/ocrrow.h +133 -0
  118. data/vendor/tesseract-2.04/ccstruct/pageblk.cpp +879 -0
  119. data/vendor/tesseract-2.04/ccstruct/pageblk.h +318 -0
  120. data/vendor/tesseract-2.04/ccstruct/pageres.cpp +330 -0
  121. data/vendor/tesseract-2.04/ccstruct/pageres.h +313 -0
  122. data/vendor/tesseract-2.04/ccstruct/pdblock.cpp +361 -0
  123. data/vendor/tesseract-2.04/ccstruct/pdblock.h +181 -0
  124. data/vendor/tesseract-2.04/ccstruct/pdclass.h +54 -0
  125. data/vendor/tesseract-2.04/ccstruct/points.cpp +102 -0
  126. data/vendor/tesseract-2.04/ccstruct/points.h +299 -0
  127. data/vendor/tesseract-2.04/ccstruct/polyaprx.cpp +588 -0
  128. data/vendor/tesseract-2.04/ccstruct/polyaprx.h +51 -0
  129. data/vendor/tesseract-2.04/ccstruct/polyblk.cpp +398 -0
  130. data/vendor/tesseract-2.04/ccstruct/polyblk.h +122 -0
  131. data/vendor/tesseract-2.04/ccstruct/polyblob.cpp +357 -0
  132. data/vendor/tesseract-2.04/ccstruct/polyblob.h +102 -0
  133. data/vendor/tesseract-2.04/ccstruct/polyvert.cpp +23 -0
  134. data/vendor/tesseract-2.04/ccstruct/polyvert.h +58 -0
  135. data/vendor/tesseract-2.04/ccstruct/poutline.cpp +441 -0
  136. data/vendor/tesseract-2.04/ccstruct/poutline.h +125 -0
  137. data/vendor/tesseract-2.04/ccstruct/quadlsq.cpp +147 -0
  138. data/vendor/tesseract-2.04/ccstruct/quadlsq.h +67 -0
  139. data/vendor/tesseract-2.04/ccstruct/quadratc.cpp +21 -0
  140. data/vendor/tesseract-2.04/ccstruct/quadratc.h +63 -0
  141. data/vendor/tesseract-2.04/ccstruct/quspline.cpp +382 -0
  142. data/vendor/tesseract-2.04/ccstruct/quspline.h +113 -0
  143. data/vendor/tesseract-2.04/ccstruct/ratngs.cpp +372 -0
  144. data/vendor/tesseract-2.04/ccstruct/ratngs.h +198 -0
  145. data/vendor/tesseract-2.04/ccstruct/rect.cpp +229 -0
  146. data/vendor/tesseract-2.04/ccstruct/rect.h +320 -0
  147. data/vendor/tesseract-2.04/ccstruct/rejctmap.cpp +545 -0
  148. data/vendor/tesseract-2.04/ccstruct/rejctmap.h +284 -0
  149. data/vendor/tesseract-2.04/ccstruct/rwpoly.cpp +89 -0
  150. data/vendor/tesseract-2.04/ccstruct/rwpoly.h +45 -0
  151. data/vendor/tesseract-2.04/ccstruct/statistc.cpp +905 -0
  152. data/vendor/tesseract-2.04/ccstruct/statistc.h +135 -0
  153. data/vendor/tesseract-2.04/ccstruct/stepblob.cpp +296 -0
  154. data/vendor/tesseract-2.04/ccstruct/stepblob.h +88 -0
  155. data/vendor/tesseract-2.04/ccstruct/txtregn.cpp +230 -0
  156. data/vendor/tesseract-2.04/ccstruct/txtregn.h +155 -0
  157. data/vendor/tesseract-2.04/ccstruct/vecfuncs.cpp +63 -0
  158. data/vendor/tesseract-2.04/ccstruct/vecfuncs.h +91 -0
  159. data/vendor/tesseract-2.04/ccstruct/werd.cpp +967 -0
  160. data/vendor/tesseract-2.04/ccstruct/werd.h +277 -0
  161. data/vendor/tesseract-2.04/ccutil/Makefile.am +19 -0
  162. data/vendor/tesseract-2.04/ccutil/Makefile.in +626 -0
  163. data/vendor/tesseract-2.04/ccutil/basedir.cpp +118 -0
  164. data/vendor/tesseract-2.04/ccutil/basedir.h +32 -0
  165. data/vendor/tesseract-2.04/ccutil/bits16.cpp +30 -0
  166. data/vendor/tesseract-2.04/ccutil/bits16.h +61 -0
  167. data/vendor/tesseract-2.04/ccutil/boxread.cpp +105 -0
  168. data/vendor/tesseract-2.04/ccutil/boxread.h +44 -0
  169. data/vendor/tesseract-2.04/ccutil/clst.cpp +626 -0
  170. data/vendor/tesseract-2.04/ccutil/clst.h +1085 -0
  171. data/vendor/tesseract-2.04/ccutil/debugwin.cpp +500 -0
  172. data/vendor/tesseract-2.04/ccutil/debugwin.h +103 -0
  173. data/vendor/tesseract-2.04/ccutil/elst.cpp +593 -0
  174. data/vendor/tesseract-2.04/ccutil/elst.h +1125 -0
  175. data/vendor/tesseract-2.04/ccutil/elst2.cpp +606 -0
  176. data/vendor/tesseract-2.04/ccutil/elst2.h +1121 -0
  177. data/vendor/tesseract-2.04/ccutil/errcode.cpp +104 -0
  178. data/vendor/tesseract-2.04/ccutil/errcode.h +104 -0
  179. data/vendor/tesseract-2.04/ccutil/fileerr.h +34 -0
  180. data/vendor/tesseract-2.04/ccutil/globaloc.cpp +115 -0
  181. data/vendor/tesseract-2.04/ccutil/globaloc.h +40 -0
  182. data/vendor/tesseract-2.04/ccutil/hashfn.cpp +57 -0
  183. data/vendor/tesseract-2.04/ccutil/hashfn.h +30 -0
  184. data/vendor/tesseract-2.04/ccutil/host.h +180 -0
  185. data/vendor/tesseract-2.04/ccutil/hosthplb.h +1 -0
  186. data/vendor/tesseract-2.04/ccutil/lsterr.h +43 -0
  187. data/vendor/tesseract-2.04/ccutil/mainblk.cpp +126 -0
  188. data/vendor/tesseract-2.04/ccutil/mainblk.h +39 -0
  189. data/vendor/tesseract-2.04/ccutil/memblk.cpp +1106 -0
  190. data/vendor/tesseract-2.04/ccutil/memblk.h +189 -0
  191. data/vendor/tesseract-2.04/ccutil/memry.cpp +532 -0
  192. data/vendor/tesseract-2.04/ccutil/memry.h +192 -0
  193. data/vendor/tesseract-2.04/ccutil/memryerr.h +38 -0
  194. data/vendor/tesseract-2.04/ccutil/mfcpch.cpp +5 -0
  195. data/vendor/tesseract-2.04/ccutil/mfcpch.h +37 -0
  196. data/vendor/tesseract-2.04/ccutil/ndminx.h +31 -0
  197. data/vendor/tesseract-2.04/ccutil/notdll.h +28 -0
  198. data/vendor/tesseract-2.04/ccutil/nwmain.h +176 -0
  199. data/vendor/tesseract-2.04/ccutil/ocrclass.h +345 -0
  200. data/vendor/tesseract-2.04/ccutil/ocrshell.cpp +772 -0
  201. data/vendor/tesseract-2.04/ccutil/ocrshell.h +191 -0
  202. data/vendor/tesseract-2.04/ccutil/platform.h +18 -0
  203. data/vendor/tesseract-2.04/ccutil/scanutils.cpp +543 -0
  204. data/vendor/tesseract-2.04/ccutil/scanutils.h +55 -0
  205. data/vendor/tesseract-2.04/ccutil/secname.h +9 -0
  206. data/vendor/tesseract-2.04/ccutil/serialis.cpp +117 -0
  207. data/vendor/tesseract-2.04/ccutil/serialis.h +93 -0
  208. data/vendor/tesseract-2.04/ccutil/stderr.h +26 -0
  209. data/vendor/tesseract-2.04/ccutil/strngs.cpp +495 -0
  210. data/vendor/tesseract-2.04/ccutil/strngs.h +138 -0
  211. data/vendor/tesseract-2.04/ccutil/tessclas.h +135 -0
  212. data/vendor/tesseract-2.04/ccutil/tessopt.cpp +61 -0
  213. data/vendor/tesseract-2.04/ccutil/tessopt.h +30 -0
  214. data/vendor/tesseract-2.04/ccutil/tprintf.cpp +122 -0
  215. data/vendor/tesseract-2.04/ccutil/tprintf.h +35 -0
  216. data/vendor/tesseract-2.04/ccutil/unichar.cpp +144 -0
  217. data/vendor/tesseract-2.04/ccutil/unichar.h +84 -0
  218. data/vendor/tesseract-2.04/ccutil/unicharmap.cpp +172 -0
  219. data/vendor/tesseract-2.04/ccutil/unicharmap.h +82 -0
  220. data/vendor/tesseract-2.04/ccutil/unicharset.cpp +307 -0
  221. data/vendor/tesseract-2.04/ccutil/unicharset.h +267 -0
  222. data/vendor/tesseract-2.04/ccutil/varable.cpp +672 -0
  223. data/vendor/tesseract-2.04/ccutil/varable.h +419 -0
  224. data/vendor/tesseract-2.04/classify/Makefile.am +24 -0
  225. data/vendor/tesseract-2.04/classify/Makefile.in +647 -0
  226. data/vendor/tesseract-2.04/classify/adaptive.cpp +535 -0
  227. data/vendor/tesseract-2.04/classify/adaptive.h +199 -0
  228. data/vendor/tesseract-2.04/classify/adaptmatch.cpp +2958 -0
  229. data/vendor/tesseract-2.04/classify/adaptmatch.h +86 -0
  230. data/vendor/tesseract-2.04/classify/baseline.cpp +58 -0
  231. data/vendor/tesseract-2.04/classify/baseline.h +91 -0
  232. data/vendor/tesseract-2.04/classify/blobclass.cpp +123 -0
  233. data/vendor/tesseract-2.04/classify/blobclass.h +49 -0
  234. data/vendor/tesseract-2.04/classify/chartoname.cpp +74 -0
  235. data/vendor/tesseract-2.04/classify/chartoname.h +21 -0
  236. data/vendor/tesseract-2.04/classify/cluster.cpp +2834 -0
  237. data/vendor/tesseract-2.04/classify/cluster.h +158 -0
  238. data/vendor/tesseract-2.04/classify/clusttool.cpp +507 -0
  239. data/vendor/tesseract-2.04/classify/clusttool.h +70 -0
  240. data/vendor/tesseract-2.04/classify/cutoffs.cpp +73 -0
  241. data/vendor/tesseract-2.04/classify/cutoffs.h +49 -0
  242. data/vendor/tesseract-2.04/classify/extern.h +32 -0
  243. data/vendor/tesseract-2.04/classify/extract.cpp +100 -0
  244. data/vendor/tesseract-2.04/classify/extract.h +36 -0
  245. data/vendor/tesseract-2.04/classify/featdefs.cpp +244 -0
  246. data/vendor/tesseract-2.04/classify/featdefs.h +71 -0
  247. data/vendor/tesseract-2.04/classify/flexfx.cpp +87 -0
  248. data/vendor/tesseract-2.04/classify/flexfx.h +34 -0
  249. data/vendor/tesseract-2.04/classify/float2int.cpp +126 -0
  250. data/vendor/tesseract-2.04/classify/float2int.h +65 -0
  251. data/vendor/tesseract-2.04/classify/fpoint.cpp +73 -0
  252. data/vendor/tesseract-2.04/classify/fpoint.h +63 -0
  253. data/vendor/tesseract-2.04/classify/fxdefs.cpp +74 -0
  254. data/vendor/tesseract-2.04/classify/fxdefs.h +93 -0
  255. data/vendor/tesseract-2.04/classify/fxid.h +69 -0
  256. data/vendor/tesseract-2.04/classify/hideedge.cpp +35 -0
  257. data/vendor/tesseract-2.04/classify/hideedge.h +76 -0
  258. data/vendor/tesseract-2.04/classify/intfx.cpp +608 -0
  259. data/vendor/tesseract-2.04/classify/intfx.h +63 -0
  260. data/vendor/tesseract-2.04/classify/intmatcher.cpp +1524 -0
  261. data/vendor/tesseract-2.04/classify/intmatcher.h +199 -0
  262. data/vendor/tesseract-2.04/classify/intproto.cpp +1823 -0
  263. data/vendor/tesseract-2.04/classify/intproto.h +320 -0
  264. data/vendor/tesseract-2.04/classify/kdtree.cpp +884 -0
  265. data/vendor/tesseract-2.04/classify/kdtree.h +118 -0
  266. data/vendor/tesseract-2.04/classify/mf.cpp +106 -0
  267. data/vendor/tesseract-2.04/classify/mf.h +43 -0
  268. data/vendor/tesseract-2.04/classify/mfdefs.cpp +58 -0
  269. data/vendor/tesseract-2.04/classify/mfdefs.h +60 -0
  270. data/vendor/tesseract-2.04/classify/mfoutline.cpp +1087 -0
  271. data/vendor/tesseract-2.04/classify/mfoutline.h +277 -0
  272. data/vendor/tesseract-2.04/classify/mfx.cpp +436 -0
  273. data/vendor/tesseract-2.04/classify/mfx.h +52 -0
  274. data/vendor/tesseract-2.04/classify/normfeat.cpp +132 -0
  275. data/vendor/tesseract-2.04/classify/normfeat.h +63 -0
  276. data/vendor/tesseract-2.04/classify/normmatch.cpp +305 -0
  277. data/vendor/tesseract-2.04/classify/normmatch.h +38 -0
  278. data/vendor/tesseract-2.04/classify/ocrfeatures.cpp +310 -0
  279. data/vendor/tesseract-2.04/classify/ocrfeatures.h +148 -0
  280. data/vendor/tesseract-2.04/classify/outfeat.cpp +262 -0
  281. data/vendor/tesseract-2.04/classify/outfeat.h +76 -0
  282. data/vendor/tesseract-2.04/classify/picofeat.cpp +297 -0
  283. data/vendor/tesseract-2.04/classify/picofeat.h +65 -0
  284. data/vendor/tesseract-2.04/classify/protos.cpp +472 -0
  285. data/vendor/tesseract-2.04/classify/protos.h +258 -0
  286. data/vendor/tesseract-2.04/classify/sigmenu.cpp +225 -0
  287. data/vendor/tesseract-2.04/classify/sigmenu.h +39 -0
  288. data/vendor/tesseract-2.04/classify/speckle.cpp +127 -0
  289. data/vendor/tesseract-2.04/classify/speckle.h +69 -0
  290. data/vendor/tesseract-2.04/classify/xform2d.cpp +120 -0
  291. data/vendor/tesseract-2.04/classify/xform2d.h +60 -0
  292. data/vendor/tesseract-2.04/config/config.guess +1466 -0
  293. data/vendor/tesseract-2.04/config/config.h.in +188 -0
  294. data/vendor/tesseract-2.04/config/config.sub +1579 -0
  295. data/vendor/tesseract-2.04/config/depcomp +530 -0
  296. data/vendor/tesseract-2.04/config/install-sh +269 -0
  297. data/vendor/tesseract-2.04/config/missing +198 -0
  298. data/vendor/tesseract-2.04/config/mkinstalldirs +40 -0
  299. data/vendor/tesseract-2.04/config/stamp-h.in +0 -0
  300. data/vendor/tesseract-2.04/configure +10424 -0
  301. data/vendor/tesseract-2.04/cutil/Makefile.am +14 -0
  302. data/vendor/tesseract-2.04/cutil/Makefile.in +612 -0
  303. data/vendor/tesseract-2.04/cutil/bitvec.cpp +115 -0
  304. data/vendor/tesseract-2.04/cutil/bitvec.h +100 -0
  305. data/vendor/tesseract-2.04/cutil/callcpp.h +190 -0
  306. data/vendor/tesseract-2.04/cutil/const.h +108 -0
  307. data/vendor/tesseract-2.04/cutil/cutil.cpp +92 -0
  308. data/vendor/tesseract-2.04/cutil/cutil.h +159 -0
  309. data/vendor/tesseract-2.04/cutil/danerror.cpp +144 -0
  310. data/vendor/tesseract-2.04/cutil/danerror.h +41 -0
  311. data/vendor/tesseract-2.04/cutil/debug.cpp +97 -0
  312. data/vendor/tesseract-2.04/cutil/debug.h +348 -0
  313. data/vendor/tesseract-2.04/cutil/efio.cpp +62 -0
  314. data/vendor/tesseract-2.04/cutil/efio.h +32 -0
  315. data/vendor/tesseract-2.04/cutil/emalloc.cpp +91 -0
  316. data/vendor/tesseract-2.04/cutil/emalloc.h +44 -0
  317. data/vendor/tesseract-2.04/cutil/freelist.cpp +75 -0
  318. data/vendor/tesseract-2.04/cutil/freelist.h +45 -0
  319. data/vendor/tesseract-2.04/cutil/funcdefs.h +35 -0
  320. data/vendor/tesseract-2.04/cutil/general.h +33 -0
  321. data/vendor/tesseract-2.04/cutil/globals.cpp +69 -0
  322. data/vendor/tesseract-2.04/cutil/globals.h +70 -0
  323. data/vendor/tesseract-2.04/cutil/listio.cpp +68 -0
  324. data/vendor/tesseract-2.04/cutil/listio.h +43 -0
  325. data/vendor/tesseract-2.04/cutil/minmax.h +40 -0
  326. data/vendor/tesseract-2.04/cutil/oldheap.cpp +337 -0
  327. data/vendor/tesseract-2.04/cutil/oldheap.h +126 -0
  328. data/vendor/tesseract-2.04/cutil/oldlist.cpp +393 -0
  329. data/vendor/tesseract-2.04/cutil/oldlist.h +350 -0
  330. data/vendor/tesseract-2.04/cutil/structures.cpp +66 -0
  331. data/vendor/tesseract-2.04/cutil/structures.h +112 -0
  332. data/vendor/tesseract-2.04/cutil/tessarray.cpp +115 -0
  333. data/vendor/tesseract-2.04/cutil/tessarray.h +166 -0
  334. data/vendor/tesseract-2.04/cutil/tordvars.cpp +95 -0
  335. data/vendor/tesseract-2.04/cutil/tordvars.h +61 -0
  336. data/vendor/tesseract-2.04/cutil/variables.cpp +317 -0
  337. data/vendor/tesseract-2.04/cutil/variables.h +170 -0
  338. data/vendor/tesseract-2.04/dict/Makefile.am +13 -0
  339. data/vendor/tesseract-2.04/dict/Makefile.in +609 -0
  340. data/vendor/tesseract-2.04/dict/choicearr.h +96 -0
  341. data/vendor/tesseract-2.04/dict/choices.cpp +210 -0
  342. data/vendor/tesseract-2.04/dict/choices.h +241 -0
  343. data/vendor/tesseract-2.04/dict/context.cpp +270 -0
  344. data/vendor/tesseract-2.04/dict/context.h +82 -0
  345. data/vendor/tesseract-2.04/dict/dawg.cpp +363 -0
  346. data/vendor/tesseract-2.04/dict/dawg.h +394 -0
  347. data/vendor/tesseract-2.04/dict/hyphen.cpp +84 -0
  348. data/vendor/tesseract-2.04/dict/hyphen.h +125 -0
  349. data/vendor/tesseract-2.04/dict/lookdawg.cpp +228 -0
  350. data/vendor/tesseract-2.04/dict/lookdawg.h +76 -0
  351. data/vendor/tesseract-2.04/dict/makedawg.cpp +449 -0
  352. data/vendor/tesseract-2.04/dict/makedawg.h +83 -0
  353. data/vendor/tesseract-2.04/dict/matchdefs.h +145 -0
  354. data/vendor/tesseract-2.04/dict/permdawg.cpp +415 -0
  355. data/vendor/tesseract-2.04/dict/permdawg.h +98 -0
  356. data/vendor/tesseract-2.04/dict/permngram.cpp +358 -0
  357. data/vendor/tesseract-2.04/dict/permngram.h +33 -0
  358. data/vendor/tesseract-2.04/dict/permnum.cpp +522 -0
  359. data/vendor/tesseract-2.04/dict/permnum.h +83 -0
  360. data/vendor/tesseract-2.04/dict/permute.cpp +1704 -0
  361. data/vendor/tesseract-2.04/dict/permute.h +93 -0
  362. data/vendor/tesseract-2.04/dict/reduce.cpp +424 -0
  363. data/vendor/tesseract-2.04/dict/reduce.h +112 -0
  364. data/vendor/tesseract-2.04/dict/states.cpp +382 -0
  365. data/vendor/tesseract-2.04/dict/states.h +111 -0
  366. data/vendor/tesseract-2.04/dict/stopper.cpp +1458 -0
  367. data/vendor/tesseract-2.04/dict/stopper.h +103 -0
  368. data/vendor/tesseract-2.04/dict/trie.cpp +683 -0
  369. data/vendor/tesseract-2.04/dict/trie.h +190 -0
  370. data/vendor/tesseract-2.04/dlltest/Makefile.am +2 -0
  371. data/vendor/tesseract-2.04/dlltest/Makefile.in +388 -0
  372. data/vendor/tesseract-2.04/dlltest/dlltest.cpp +163 -0
  373. data/vendor/tesseract-2.04/dlltest/dlltest.dsp +186 -0
  374. data/vendor/tesseract-2.04/dlltest/dlltest.vcproj +637 -0
  375. data/vendor/tesseract-2.04/eurotext.tif +0 -0
  376. data/vendor/tesseract-2.04/image/Makefile.am +10 -0
  377. data/vendor/tesseract-2.04/image/Makefile.in +596 -0
  378. data/vendor/tesseract-2.04/image/bitstrm.cpp +157 -0
  379. data/vendor/tesseract-2.04/image/bitstrm.h +73 -0
  380. data/vendor/tesseract-2.04/image/img.h +336 -0
  381. data/vendor/tesseract-2.04/image/imgbmp.cpp +223 -0
  382. data/vendor/tesseract-2.04/image/imgbmp.h +50 -0
  383. data/vendor/tesseract-2.04/image/imgerrs.h +35 -0
  384. data/vendor/tesseract-2.04/image/imgio.cpp +321 -0
  385. data/vendor/tesseract-2.04/image/imgio.h +22 -0
  386. data/vendor/tesseract-2.04/image/imgs.cpp +1764 -0
  387. data/vendor/tesseract-2.04/image/imgs.h +102 -0
  388. data/vendor/tesseract-2.04/image/imgtiff.cpp +723 -0
  389. data/vendor/tesseract-2.04/image/imgtiff.h +89 -0
  390. data/vendor/tesseract-2.04/image/imgunpk.h +1377 -0
  391. data/vendor/tesseract-2.04/image/svshowim.cpp +40 -0
  392. data/vendor/tesseract-2.04/image/svshowim.h +25 -0
  393. data/vendor/tesseract-2.04/java/Makefile.am +4 -0
  394. data/vendor/tesseract-2.04/java/Makefile.in +473 -0
  395. data/vendor/tesseract-2.04/java/com/Makefile.am +1 -0
  396. data/vendor/tesseract-2.04/java/com/Makefile.in +470 -0
  397. data/vendor/tesseract-2.04/java/com/google/Makefile.am +1 -0
  398. data/vendor/tesseract-2.04/java/com/google/Makefile.in +470 -0
  399. data/vendor/tesseract-2.04/java/com/google/scrollview/Makefile.am +4 -0
  400. data/vendor/tesseract-2.04/java/com/google/scrollview/Makefile.in +473 -0
  401. data/vendor/tesseract-2.04/java/com/google/scrollview/ScrollView.java +421 -0
  402. data/vendor/tesseract-2.04/java/com/google/scrollview/events/Makefile.am +5 -0
  403. data/vendor/tesseract-2.04/java/com/google/scrollview/events/Makefile.in +474 -0
  404. data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEvent.java +87 -0
  405. data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEventHandler.java +296 -0
  406. data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEventType.java +31 -0
  407. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/Makefile.am +7 -0
  408. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/Makefile.in +476 -0
  409. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVAbstractMenuItem.java +58 -0
  410. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVCheckboxMenuItem.java +60 -0
  411. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVEmptyMenuItem.java +48 -0
  412. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVImageHandler.java +228 -0
  413. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVMenuBar.java +130 -0
  414. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVMenuItem.java +61 -0
  415. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVPopupMenu.java +142 -0
  416. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVSubMenuItem.java +41 -0
  417. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVWindow.java +643 -0
  418. data/vendor/tesseract-2.04/java/makefile +55 -0
  419. data/vendor/tesseract-2.04/pageseg/Makefile.am +13 -0
  420. data/vendor/tesseract-2.04/pageseg/Makefile.in +596 -0
  421. data/vendor/tesseract-2.04/pageseg/leptonica_pageseg.cpp +363 -0
  422. data/vendor/tesseract-2.04/pageseg/leptonica_pageseg.h +90 -0
  423. data/vendor/tesseract-2.04/pageseg/leptonica_pageseg_interface.cpp +82 -0
  424. data/vendor/tesseract-2.04/pageseg/leptonica_pageseg_interface.h +30 -0
  425. data/vendor/tesseract-2.04/pageseg/pageseg.cpp +170 -0
  426. data/vendor/tesseract-2.04/pageseg/pageseg.h +29 -0
  427. data/vendor/tesseract-2.04/phototest.tif +0 -0
  428. data/vendor/tesseract-2.04/tessdata/Makefile.am +31 -0
  429. data/vendor/tesseract-2.04/tessdata/Makefile.in +529 -0
  430. data/vendor/tesseract-2.04/tessdata/configs/Makefile.am +3 -0
  431. data/vendor/tesseract-2.04/tessdata/configs/Makefile.in +344 -0
  432. data/vendor/tesseract-2.04/tessdata/configs/api_config +1 -0
  433. data/vendor/tesseract-2.04/tessdata/configs/box.train +19 -0
  434. data/vendor/tesseract-2.04/tessdata/configs/box.train.stderr +18 -0
  435. data/vendor/tesseract-2.04/tessdata/configs/inter +4 -0
  436. data/vendor/tesseract-2.04/tessdata/configs/kannada +4 -0
  437. data/vendor/tesseract-2.04/tessdata/configs/makebox +1 -0
  438. data/vendor/tesseract-2.04/tessdata/configs/unlv +3 -0
  439. data/vendor/tesseract-2.04/tessdata/confsets +3 -0
  440. data/vendor/tesseract-2.04/tessdata/eng.DangAmbigs +39 -0
  441. data/vendor/tesseract-2.04/tessdata/eng.freq-dawg +0 -0
  442. data/vendor/tesseract-2.04/tessdata/eng.inttemp +0 -0
  443. data/vendor/tesseract-2.04/tessdata/eng.normproto +1247 -0
  444. data/vendor/tesseract-2.04/tessdata/eng.pffmtable +111 -0
  445. data/vendor/tesseract-2.04/tessdata/eng.unicharset +113 -0
  446. data/vendor/tesseract-2.04/tessdata/eng.user-words +921 -0
  447. data/vendor/tesseract-2.04/tessdata/eng.word-dawg +0 -0
  448. data/vendor/tesseract-2.04/tessdata/makedummies +8 -0
  449. data/vendor/tesseract-2.04/tessdata/tessconfigs/Makefile.am +3 -0
  450. data/vendor/tesseract-2.04/tessdata/tessconfigs/Makefile.in +344 -0
  451. data/vendor/tesseract-2.04/tessdata/tessconfigs/batch +2 -0
  452. data/vendor/tesseract-2.04/tessdata/tessconfigs/batch.nochop +2 -0
  453. data/vendor/tesseract-2.04/tessdata/tessconfigs/matdemo +7 -0
  454. data/vendor/tesseract-2.04/tessdata/tessconfigs/msdemo +13 -0
  455. data/vendor/tesseract-2.04/tessdata/tessconfigs/nobatch +2 -0
  456. data/vendor/tesseract-2.04/tessdata/tessconfigs/segdemo +9 -0
  457. data/vendor/tesseract-2.04/tessdll.cpp +351 -0
  458. data/vendor/tesseract-2.04/tessdll.dsp +2050 -0
  459. data/vendor/tesseract-2.04/tessdll.h +143 -0
  460. data/vendor/tesseract-2.04/tessdll.vcproj +5495 -0
  461. data/vendor/tesseract-2.04/tesseract.dsp +2124 -0
  462. data/vendor/tesseract-2.04/tesseract.dsw +116 -0
  463. data/vendor/tesseract-2.04/tesseract.sln +59 -0
  464. data/vendor/tesseract-2.04/tesseract.spec +188 -0
  465. data/vendor/tesseract-2.04/tesseract.vcproj +5859 -0
  466. data/vendor/tesseract-2.04/testing/Makefile.am +2 -0
  467. data/vendor/tesseract-2.04/testing/Makefile.in +312 -0
  468. data/vendor/tesseract-2.04/testing/README +43 -0
  469. data/vendor/tesseract-2.04/testing/counttestset.sh +61 -0
  470. data/vendor/tesseract-2.04/testing/reorgdata.sh +44 -0
  471. data/vendor/tesseract-2.04/testing/reports/1995.bus.3B.sum +1 -0
  472. data/vendor/tesseract-2.04/testing/reports/1995.doe3.3B.sum +1 -0
  473. data/vendor/tesseract-2.04/testing/reports/1995.mag.3B.sum +1 -0
  474. data/vendor/tesseract-2.04/testing/reports/1995.news.3B.sum +1 -0
  475. data/vendor/tesseract-2.04/testing/reports/2.03.summary +9 -0
  476. data/vendor/tesseract-2.04/testing/reports/2.04.summary +9 -0
  477. data/vendor/tesseract-2.04/testing/runalltests.sh +110 -0
  478. data/vendor/tesseract-2.04/testing/runtestset.sh +61 -0
  479. data/vendor/tesseract-2.04/textord/Makefile.am +20 -0
  480. data/vendor/tesseract-2.04/textord/Makefile.in +624 -0
  481. data/vendor/tesseract-2.04/textord/blkocc.cpp +809 -0
  482. data/vendor/tesseract-2.04/textord/blkocc.h +327 -0
  483. data/vendor/tesseract-2.04/textord/blobcmpl.h +31 -0
  484. data/vendor/tesseract-2.04/textord/drawedg.cpp +77 -0
  485. data/vendor/tesseract-2.04/textord/drawedg.h +34 -0
  486. data/vendor/tesseract-2.04/textord/drawtord.cpp +469 -0
  487. data/vendor/tesseract-2.04/textord/drawtord.h +107 -0
  488. data/vendor/tesseract-2.04/textord/edgblob.cpp +412 -0
  489. data/vendor/tesseract-2.04/textord/edgblob.h +100 -0
  490. data/vendor/tesseract-2.04/textord/edgloop.cpp +211 -0
  491. data/vendor/tesseract-2.04/textord/edgloop.h +66 -0
  492. data/vendor/tesseract-2.04/textord/fpchop.cpp +1641 -0
  493. data/vendor/tesseract-2.04/textord/fpchop.h +238 -0
  494. data/vendor/tesseract-2.04/textord/gap_map.cpp +166 -0
  495. data/vendor/tesseract-2.04/textord/gap_map.h +40 -0
  496. data/vendor/tesseract-2.04/textord/makerow.cpp +2628 -0
  497. data/vendor/tesseract-2.04/textord/makerow.h +295 -0
  498. data/vendor/tesseract-2.04/textord/oldbasel.cpp +1761 -0
  499. data/vendor/tesseract-2.04/textord/oldbasel.h +195 -0
  500. data/vendor/tesseract-2.04/textord/pithsync.cpp +696 -0
  501. data/vendor/tesseract-2.04/textord/pithsync.h +134 -0
  502. data/vendor/tesseract-2.04/textord/pitsync1.cpp +425 -0
  503. data/vendor/tesseract-2.04/textord/pitsync1.h +135 -0
  504. data/vendor/tesseract-2.04/textord/scanedg.cpp +452 -0
  505. data/vendor/tesseract-2.04/textord/scanedg.h +74 -0
  506. data/vendor/tesseract-2.04/textord/sortflts.cpp +80 -0
  507. data/vendor/tesseract-2.04/textord/sortflts.h +64 -0
  508. data/vendor/tesseract-2.04/textord/tessout.h +76 -0
  509. data/vendor/tesseract-2.04/textord/topitch.cpp +2019 -0
  510. data/vendor/tesseract-2.04/textord/topitch.h +195 -0
  511. data/vendor/tesseract-2.04/textord/tordmain.cpp +907 -0
  512. data/vendor/tesseract-2.04/textord/tordmain.h +132 -0
  513. data/vendor/tesseract-2.04/textord/tospace.cpp +1939 -0
  514. data/vendor/tesseract-2.04/textord/tospace.h +193 -0
  515. data/vendor/tesseract-2.04/textord/tovars.cpp +87 -0
  516. data/vendor/tesseract-2.04/textord/tovars.h +94 -0
  517. data/vendor/tesseract-2.04/textord/underlin.cpp +312 -0
  518. data/vendor/tesseract-2.04/textord/underlin.h +53 -0
  519. data/vendor/tesseract-2.04/textord/wordseg.cpp +620 -0
  520. data/vendor/tesseract-2.04/textord/wordseg.h +70 -0
  521. data/vendor/tesseract-2.04/training/Makefile.am +54 -0
  522. data/vendor/tesseract-2.04/training/Makefile.in +720 -0
  523. data/vendor/tesseract-2.04/training/cnTraining.cpp +855 -0
  524. data/vendor/tesseract-2.04/training/cntraining.dsp +243 -0
  525. data/vendor/tesseract-2.04/training/cntraining.vcproj +950 -0
  526. data/vendor/tesseract-2.04/training/mergenf.cpp +451 -0
  527. data/vendor/tesseract-2.04/training/mergenf.h +106 -0
  528. data/vendor/tesseract-2.04/training/mfTraining.cpp +1341 -0
  529. data/vendor/tesseract-2.04/training/mftraining.dsp +285 -0
  530. data/vendor/tesseract-2.04/training/mftraining.vcproj +1055 -0
  531. data/vendor/tesseract-2.04/training/name2char.cpp +166 -0
  532. data/vendor/tesseract-2.04/training/name2char.h +38 -0
  533. data/vendor/tesseract-2.04/training/training.cpp +190 -0
  534. data/vendor/tesseract-2.04/training/training.h +130 -0
  535. data/vendor/tesseract-2.04/training/unicharset_extractor.cpp +140 -0
  536. data/vendor/tesseract-2.04/training/unicharset_extractor.dsp +335 -0
  537. data/vendor/tesseract-2.04/training/unicharset_extractor.vcproj +769 -0
  538. data/vendor/tesseract-2.04/training/wordlist2dawg.cpp +69 -0
  539. data/vendor/tesseract-2.04/training/wordlist2dawg.dsp +319 -0
  540. data/vendor/tesseract-2.04/training/wordlist2dawg.vcproj +1113 -0
  541. data/vendor/tesseract-2.04/viewer/Makefile.am +9 -0
  542. data/vendor/tesseract-2.04/viewer/Makefile.in +591 -0
  543. data/vendor/tesseract-2.04/viewer/scrollview.cpp +825 -0
  544. data/vendor/tesseract-2.04/viewer/scrollview.h +414 -0
  545. data/vendor/tesseract-2.04/viewer/svmnode.cpp +140 -0
  546. data/vendor/tesseract-2.04/viewer/svmnode.h +94 -0
  547. data/vendor/tesseract-2.04/viewer/svpaint.cpp +220 -0
  548. data/vendor/tesseract-2.04/viewer/svutil.cpp +347 -0
  549. data/vendor/tesseract-2.04/viewer/svutil.h +138 -0
  550. data/vendor/tesseract-2.04/wordrec/Makefile.am +23 -0
  551. data/vendor/tesseract-2.04/wordrec/Makefile.in +641 -0
  552. data/vendor/tesseract-2.04/wordrec/associate.cpp +62 -0
  553. data/vendor/tesseract-2.04/wordrec/associate.h +93 -0
  554. data/vendor/tesseract-2.04/wordrec/badwords.cpp +106 -0
  555. data/vendor/tesseract-2.04/wordrec/badwords.h +51 -0
  556. data/vendor/tesseract-2.04/wordrec/bestfirst.cpp +526 -0
  557. data/vendor/tesseract-2.04/wordrec/bestfirst.h +203 -0
  558. data/vendor/tesseract-2.04/wordrec/charsample.h +208 -0
  559. data/vendor/tesseract-2.04/wordrec/chop.cpp +458 -0
  560. data/vendor/tesseract-2.04/wordrec/chop.h +153 -0
  561. data/vendor/tesseract-2.04/wordrec/chopper.cpp +750 -0
  562. data/vendor/tesseract-2.04/wordrec/chopper.h +104 -0
  563. data/vendor/tesseract-2.04/wordrec/closed.cpp +136 -0
  564. data/vendor/tesseract-2.04/wordrec/closed.h +65 -0
  565. data/vendor/tesseract-2.04/wordrec/djmenus.cpp +118 -0
  566. data/vendor/tesseract-2.04/wordrec/djmenus.h +33 -0
  567. data/vendor/tesseract-2.04/wordrec/drawfx.cpp +92 -0
  568. data/vendor/tesseract-2.04/wordrec/drawfx.h +33 -0
  569. data/vendor/tesseract-2.04/wordrec/findseam.cpp +566 -0
  570. data/vendor/tesseract-2.04/wordrec/findseam.h +69 -0
  571. data/vendor/tesseract-2.04/wordrec/gradechop.cpp +226 -0
  572. data/vendor/tesseract-2.04/wordrec/gradechop.h +91 -0
  573. data/vendor/tesseract-2.04/wordrec/heuristic.cpp +194 -0
  574. data/vendor/tesseract-2.04/wordrec/heuristic.h +120 -0
  575. data/vendor/tesseract-2.04/wordrec/makechop.cpp +281 -0
  576. data/vendor/tesseract-2.04/wordrec/makechop.h +69 -0
  577. data/vendor/tesseract-2.04/wordrec/matchtab.cpp +191 -0
  578. data/vendor/tesseract-2.04/wordrec/matchtab.h +45 -0
  579. data/vendor/tesseract-2.04/wordrec/matrix.cpp +118 -0
  580. data/vendor/tesseract-2.04/wordrec/matrix.h +104 -0
  581. data/vendor/tesseract-2.04/wordrec/measure.h +135 -0
  582. data/vendor/tesseract-2.04/wordrec/metrics.cpp +363 -0
  583. data/vendor/tesseract-2.04/wordrec/metrics.h +130 -0
  584. data/vendor/tesseract-2.04/wordrec/mfvars.cpp +51 -0
  585. data/vendor/tesseract-2.04/wordrec/mfvars.h +27 -0
  586. data/vendor/tesseract-2.04/wordrec/msmenus.cpp +110 -0
  587. data/vendor/tesseract-2.04/wordrec/msmenus.h +45 -0
  588. data/vendor/tesseract-2.04/wordrec/olutil.cpp +153 -0
  589. data/vendor/tesseract-2.04/wordrec/olutil.h +128 -0
  590. data/vendor/tesseract-2.04/wordrec/outlines.cpp +172 -0
  591. data/vendor/tesseract-2.04/wordrec/outlines.h +148 -0
  592. data/vendor/tesseract-2.04/wordrec/pieces.cpp +410 -0
  593. data/vendor/tesseract-2.04/wordrec/pieces.h +154 -0
  594. data/vendor/tesseract-2.04/wordrec/plotedges.cpp +134 -0
  595. data/vendor/tesseract-2.04/wordrec/plotedges.h +71 -0
  596. data/vendor/tesseract-2.04/wordrec/plotseg.cpp +116 -0
  597. data/vendor/tesseract-2.04/wordrec/plotseg.h +73 -0
  598. data/vendor/tesseract-2.04/wordrec/render.cpp +152 -0
  599. data/vendor/tesseract-2.04/wordrec/render.h +58 -0
  600. data/vendor/tesseract-2.04/wordrec/seam.cpp +482 -0
  601. data/vendor/tesseract-2.04/wordrec/seam.h +136 -0
  602. data/vendor/tesseract-2.04/wordrec/split.cpp +182 -0
  603. data/vendor/tesseract-2.04/wordrec/split.h +115 -0
  604. data/vendor/tesseract-2.04/wordrec/tally.cpp +68 -0
  605. data/vendor/tesseract-2.04/wordrec/tally.h +94 -0
  606. data/vendor/tesseract-2.04/wordrec/tessinit.cpp +108 -0
  607. data/vendor/tesseract-2.04/wordrec/tessinit.h +46 -0
  608. data/vendor/tesseract-2.04/wordrec/tface.cpp +272 -0
  609. data/vendor/tesseract-2.04/wordrec/tface.h +35 -0
  610. data/vendor/tesseract-2.04/wordrec/wordclass.cpp +284 -0
  611. data/vendor/tesseract-2.04/wordrec/wordclass.h +64 -0
  612. metadata +708 -0
@@ -0,0 +1,778 @@
1
+ /**********************************************************************
2
+ * File: blobbox.cpp (Formerly blobnbox.c)
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
+ #include "mfcpch.h"
21
+ #include "blobbox.h"
22
+
23
+ #define PROJECTION_MARGIN 10 //arbitrary
24
+ #define EXTERN
25
+
26
+ EXTERN double_VAR (textord_error_weight, 3,
27
+ "Weighting for error in believability");
28
+ EXTERN BOOL_VAR (pitsync_projection_fix, TRUE,
29
+ "Fix bug in projection profile");
30
+
31
+ ELISTIZE (BLOBNBOX) ELIST2IZE (TO_ROW) ELISTIZE (TO_BLOCK)
32
+ /**********************************************************************
33
+ * BLOBNBOX::merge
34
+ *
35
+ * Merge this blob with the given blob, which should be after this.
36
+ **********************************************************************/
37
+ void BLOBNBOX::merge( //merge blobs
38
+ BLOBNBOX *nextblob //blob to join with
39
+ ) {
40
+ box += nextblob->box; //merge boxes
41
+ nextblob->joined = TRUE;
42
+ }
43
+
44
+
45
+ /**********************************************************************
46
+ * BLOBNBOX::chop
47
+ *
48
+ * Chop this blob into equal sized pieces using the x height as a guide.
49
+ * The blob is not actually chopped. Instead, fake blobs are inserted
50
+ * with the relevant bounding boxes.
51
+ **********************************************************************/
52
+
53
+ void BLOBNBOX::chop( //chop blobs
54
+ BLOBNBOX_IT *start_it, //location of this
55
+ BLOBNBOX_IT *end_it, //iterator
56
+ FCOORD rotation, //for landscape
57
+ float xheight //of line
58
+ ) {
59
+ inT16 blobcount; //no of blobs
60
+ BLOBNBOX *newblob; //fake blob
61
+ BLOBNBOX *blob; //current blob
62
+ inT16 blobindex; //number of chop
63
+ inT16 leftx; //left edge of blob
64
+ float blobwidth; //width of each
65
+ float rightx; //right edge to scan
66
+ float ymin, ymax; //limits of new blob
67
+ float test_ymin, test_ymax; //limits of part blob
68
+ ICOORD bl, tr; //corners of box
69
+ BLOBNBOX_IT blob_it; //blob iterator
70
+
71
+ //get no of chops
72
+ blobcount = (inT16) floor (box.width () / xheight);
73
+ if (blobcount > 1 && (blob_ptr != NULL || cblob_ptr != NULL)) {
74
+ //width of each
75
+ blobwidth = (float) (box.width () + 1) / blobcount;
76
+ for (blobindex = blobcount - 1, rightx = box.right ();
77
+ blobindex >= 0; blobindex--, rightx -= blobwidth) {
78
+ ymin = (float) MAX_INT32;
79
+ ymax = (float) -MAX_INT32;
80
+ blob_it = *start_it;
81
+ do {
82
+ blob = blob_it.data ();
83
+ if (blob->blob_ptr != NULL)
84
+ find_blob_limits (blob->blob_ptr, rightx - blobwidth, rightx,
85
+ rotation, test_ymin, test_ymax);
86
+ else
87
+ find_cblob_vlimits (blob->cblob_ptr, rightx - blobwidth,
88
+ rightx,
89
+ /*rotation, */ test_ymin, test_ymax);
90
+ blob_it.forward ();
91
+ if (test_ymin < ymin)
92
+ ymin = test_ymin;
93
+ if (test_ymax > ymax)
94
+ ymax = test_ymax;
95
+ }
96
+ while (blob != end_it->data ());
97
+ if (ymin < ymax) {
98
+ leftx = (inT16) floor (rightx - blobwidth);
99
+ if (leftx < box.left ())
100
+ leftx = box.left (); //clip to real box
101
+ bl = ICOORD (leftx, (inT16) floor (ymin));
102
+ tr = ICOORD ((inT16) ceil (rightx), (inT16) ceil (ymax));
103
+ if (blobindex == 0)
104
+ box = TBOX (bl, tr); //change box
105
+ else {
106
+ newblob = new BLOBNBOX;
107
+ //box is all it has
108
+ newblob->box = TBOX (bl, tr);
109
+ //stay on current
110
+ end_it->add_after_stay_put (newblob);
111
+ }
112
+ }
113
+ }
114
+ }
115
+ }
116
+
117
+
118
+ /**********************************************************************
119
+ * find_blob_limits
120
+ *
121
+ * Scan the outlines of the blob to locate the y min and max
122
+ * between the given x limits.
123
+ **********************************************************************/
124
+
125
+ void find_blob_limits( //get y limits
126
+ PBLOB *blob, //blob to search
127
+ float leftx, //x limits
128
+ float rightx,
129
+ FCOORD rotation, //for landscape
130
+ float &ymin, //output y limits
131
+ float &ymax) {
132
+ float testy; //y intercept
133
+ FCOORD pos; //rotated
134
+ FCOORD vec;
135
+ POLYPT *polypt; //current point
136
+ //outlines
137
+ OUTLINE_IT out_it = blob->out_list ();
138
+ POLYPT_IT poly_it; //outline pts
139
+
140
+ ymin = (float) MAX_INT32;
141
+ ymax = (float) -MAX_INT32;
142
+ for (out_it.mark_cycle_pt (); !out_it.cycled_list (); out_it.forward ()) {
143
+ //get points
144
+ poly_it.set_to_list (out_it.data ()->polypts ());
145
+ for (poly_it.mark_cycle_pt (); !poly_it.cycled_list ();
146
+ poly_it.forward ()) {
147
+ polypt = poly_it.data ();
148
+ pos = polypt->pos;
149
+ pos.rotate (rotation);
150
+ vec = polypt->vec;
151
+ vec.rotate (rotation);
152
+ if ((pos.x () < leftx && pos.x () + vec.x () > leftx)
153
+ || (pos.x () > leftx && pos.x () + vec.x () < leftx)) {
154
+ testy = pos.y () + vec.y () * (leftx - pos.x ()) / vec.x ();
155
+ //intercept of boundary
156
+ if (testy < ymin)
157
+ ymin = testy;
158
+ if (testy > ymax)
159
+ ymax = testy;
160
+ }
161
+ if (pos.x () >= leftx && pos.x () <= rightx) {
162
+ if (pos.y () > ymax)
163
+ ymax = pos.y ();
164
+ if (pos.y () < ymin)
165
+ ymin = pos.y ();
166
+ }
167
+ if ((pos.x () > rightx && pos.x () + vec.x () < rightx)
168
+ || (pos.x () < rightx && pos.x () + vec.x () > rightx)) {
169
+ testy = pos.y () + vec.y () * (rightx - pos.x ()) / vec.x ();
170
+ //intercept of boundary
171
+ if (testy < ymin)
172
+ ymin = testy;
173
+ if (testy > ymax)
174
+ ymax = testy;
175
+ }
176
+ }
177
+ }
178
+ }
179
+
180
+
181
+ /**********************************************************************
182
+ * find_cblob_limits
183
+ *
184
+ * Scan the outlines of the cblob to locate the y min and max
185
+ * between the given x limits.
186
+ **********************************************************************/
187
+
188
+ void find_cblob_limits( //get y limits
189
+ C_BLOB *blob, //blob to search
190
+ float leftx, //x limits
191
+ float rightx,
192
+ FCOORD rotation, //for landscape
193
+ float &ymin, //output y limits
194
+ float &ymax) {
195
+ inT16 stepindex; //current point
196
+ ICOORD pos; //current coords
197
+ ICOORD vec; //rotated step
198
+ C_OUTLINE *outline; //current outline
199
+ //outlines
200
+ C_OUTLINE_IT out_it = blob->out_list ();
201
+
202
+ ymin = (float) MAX_INT32;
203
+ ymax = (float) -MAX_INT32;
204
+ for (out_it.mark_cycle_pt (); !out_it.cycled_list (); out_it.forward ()) {
205
+ outline = out_it.data ();
206
+ pos = outline->start_pos (); //get coords
207
+ pos.rotate (rotation);
208
+ for (stepindex = 0; stepindex < outline->pathlength (); stepindex++) {
209
+ //inside
210
+ if (pos.x () >= leftx && pos.x () <= rightx) {
211
+ if (pos.y () > ymax)
212
+ ymax = pos.y ();
213
+ if (pos.y () < ymin)
214
+ ymin = pos.y ();
215
+ }
216
+ vec = outline->step (stepindex);
217
+ vec.rotate (rotation);
218
+ pos += vec; //move to next
219
+ }
220
+ }
221
+ }
222
+
223
+
224
+ /**********************************************************************
225
+ * find_cblob_vlimits
226
+ *
227
+ * Scan the outlines of the cblob to locate the y min and max
228
+ * between the given x limits.
229
+ **********************************************************************/
230
+
231
+ void find_cblob_vlimits( //get y limits
232
+ C_BLOB *blob, //blob to search
233
+ float leftx, //x limits
234
+ float rightx,
235
+ float &ymin, //output y limits
236
+ float &ymax) {
237
+ inT16 stepindex; //current point
238
+ ICOORD pos; //current coords
239
+ ICOORD vec; //rotated step
240
+ C_OUTLINE *outline; //current outline
241
+ //outlines
242
+ C_OUTLINE_IT out_it = blob->out_list ();
243
+
244
+ ymin = (float) MAX_INT32;
245
+ ymax = (float) -MAX_INT32;
246
+ for (out_it.mark_cycle_pt (); !out_it.cycled_list (); out_it.forward ()) {
247
+ outline = out_it.data ();
248
+ pos = outline->start_pos (); //get coords
249
+ for (stepindex = 0; stepindex < outline->pathlength (); stepindex++) {
250
+ //inside
251
+ if (pos.x () >= leftx && pos.x () <= rightx) {
252
+ if (pos.y () > ymax)
253
+ ymax = pos.y ();
254
+ if (pos.y () < ymin)
255
+ ymin = pos.y ();
256
+ }
257
+ vec = outline->step (stepindex);
258
+ pos += vec; //move to next
259
+ }
260
+ }
261
+ }
262
+
263
+
264
+ /**********************************************************************
265
+ * find_cblob_hlimits
266
+ *
267
+ * Scan the outlines of the cblob to locate the x min and max
268
+ * between the given y limits.
269
+ **********************************************************************/
270
+
271
+ void find_cblob_hlimits( //get x limits
272
+ C_BLOB *blob, //blob to search
273
+ float bottomy, //y limits
274
+ float topy,
275
+ float &xmin, //output x limits
276
+ float &xmax) {
277
+ inT16 stepindex; //current point
278
+ ICOORD pos; //current coords
279
+ ICOORD vec; //rotated step
280
+ C_OUTLINE *outline; //current outline
281
+ //outlines
282
+ C_OUTLINE_IT out_it = blob->out_list ();
283
+
284
+ xmin = (float) MAX_INT32;
285
+ xmax = (float) -MAX_INT32;
286
+ for (out_it.mark_cycle_pt (); !out_it.cycled_list (); out_it.forward ()) {
287
+ outline = out_it.data ();
288
+ pos = outline->start_pos (); //get coords
289
+ for (stepindex = 0; stepindex < outline->pathlength (); stepindex++) {
290
+ //inside
291
+ if (pos.y () >= bottomy && pos.y () <= topy) {
292
+ if (pos.x () > xmax)
293
+ xmax = pos.x ();
294
+ if (pos.x () < xmin)
295
+ xmin = pos.x ();
296
+ }
297
+ vec = outline->step (stepindex);
298
+ pos += vec; //move to next
299
+ }
300
+ }
301
+ }
302
+
303
+
304
+ /**********************************************************************
305
+ * rotate_blob
306
+ *
307
+ * Poly copy the blob and rotate the copy by the given vector.
308
+ **********************************************************************/
309
+
310
+ PBLOB *rotate_blob( //get y limits
311
+ PBLOB *blob, //blob to search
312
+ FCOORD rotation //vector to rotate by
313
+ ) {
314
+ PBLOB *copy; //copy of blob
315
+ POLYPT *polypt; //current point
316
+ OUTLINE_IT out_it;
317
+ POLYPT_IT poly_it; //outline pts
318
+
319
+ copy = new PBLOB;
320
+ *copy = *blob; //deep copy
321
+ out_it.set_to_list (copy->out_list ());
322
+ for (out_it.mark_cycle_pt (); !out_it.cycled_list (); out_it.forward ()) {
323
+ //get points
324
+ poly_it.set_to_list (out_it.data ()->polypts ());
325
+ for (poly_it.mark_cycle_pt (); !poly_it.cycled_list ();
326
+ poly_it.forward ()) {
327
+ polypt = poly_it.data ();
328
+ //rotate it
329
+ polypt->pos.rotate (rotation);
330
+ polypt->vec.rotate (rotation);
331
+ }
332
+ out_it.data ()->compute_bb ();
333
+ }
334
+ return copy;
335
+ }
336
+
337
+
338
+ /**********************************************************************
339
+ * rotate_cblob
340
+ *
341
+ * Poly copy the blob and rotate the copy by the given vector.
342
+ **********************************************************************/
343
+
344
+ PBLOB *rotate_cblob( //rotate it
345
+ C_BLOB *blob, //blob to search
346
+ float xheight, //for poly approx
347
+ FCOORD rotation //for landscape
348
+ ) {
349
+ PBLOB *copy; //copy of blob
350
+ POLYPT *polypt; //current point
351
+ OUTLINE_IT out_it;
352
+ POLYPT_IT poly_it; //outline pts
353
+
354
+ copy = new PBLOB (blob, xheight);
355
+ out_it.set_to_list (copy->out_list ());
356
+ for (out_it.mark_cycle_pt (); !out_it.cycled_list (); out_it.forward ()) {
357
+ //get points
358
+ poly_it.set_to_list (out_it.data ()->polypts ());
359
+ for (poly_it.mark_cycle_pt (); !poly_it.cycled_list ();
360
+ poly_it.forward ()) {
361
+ polypt = poly_it.data ();
362
+ //rotate it
363
+ polypt->pos.rotate (rotation);
364
+ polypt->vec.rotate (rotation);
365
+ }
366
+ out_it.data ()->compute_bb ();
367
+ }
368
+ return copy;
369
+ }
370
+
371
+
372
+ /**********************************************************************
373
+ * crotate_cblob
374
+ *
375
+ * Rotate the copy by the given vector and return a C_BLOB.
376
+ **********************************************************************/
377
+
378
+ C_BLOB *crotate_cblob( //rotate it
379
+ C_BLOB *blob, //blob to search
380
+ FCOORD rotation //for landscape
381
+ ) {
382
+ C_OUTLINE_LIST out_list; //output outlines
383
+ //input outlines
384
+ C_OUTLINE_IT in_it = blob->out_list ();
385
+ //output outlines
386
+ C_OUTLINE_IT out_it = &out_list;
387
+
388
+ for (in_it.mark_cycle_pt (); !in_it.cycled_list (); in_it.forward ()) {
389
+ out_it.add_after_then_move (new C_OUTLINE (in_it.data (), rotation));
390
+ }
391
+ return new C_BLOB (&out_list);
392
+ }
393
+
394
+
395
+ /**********************************************************************
396
+ * box_next
397
+ *
398
+ * Compute the bounding box of this blob with merging of x overlaps
399
+ * but no pre-chopping.
400
+ * Then move the iterator on to the start of the next blob.
401
+ **********************************************************************/
402
+
403
+ TBOX box_next( //get bounding box
404
+ BLOBNBOX_IT *it //iterator to blobds
405
+ ) {
406
+ BLOBNBOX *blob; //current blob
407
+ TBOX result; //total box
408
+
409
+ blob = it->data ();
410
+ result = blob->bounding_box ();
411
+ do {
412
+ it->forward ();
413
+ blob = it->data ();
414
+ if (blob->blob () == NULL && blob->cblob () == NULL)
415
+ //was pre-chopped
416
+ result += blob->bounding_box ();
417
+ }
418
+ //until next real blob
419
+ while ((blob->blob () == NULL && blob->cblob () == NULL) || blob->joined_to_prev ());
420
+ return result;
421
+ }
422
+
423
+
424
+ /**********************************************************************
425
+ * box_next_pre_chopped
426
+ *
427
+ * Compute the bounding box of this blob with merging of x overlaps
428
+ * but WITH pre-chopping.
429
+ * Then move the iterator on to the start of the next pre-chopped blob.
430
+ **********************************************************************/
431
+
432
+ TBOX box_next_pre_chopped( //get bounding box
433
+ BLOBNBOX_IT *it //iterator to blobds
434
+ ) {
435
+ BLOBNBOX *blob; //current blob
436
+ TBOX result; //total box
437
+
438
+ blob = it->data ();
439
+ result = blob->bounding_box ();
440
+ do {
441
+ it->forward ();
442
+ blob = it->data ();
443
+ }
444
+ //until next real blob
445
+ while (blob->joined_to_prev ());
446
+ return result;
447
+ }
448
+
449
+
450
+ /**********************************************************************
451
+ * TO_ROW::TO_ROW
452
+ *
453
+ * Constructor to make a row from a blob.
454
+ **********************************************************************/
455
+
456
+ TO_ROW::TO_ROW ( //constructor
457
+ BLOBNBOX * blob, //first blob
458
+ float top, //corrected top
459
+ float bottom, //of row
460
+ float row_size //ideal
461
+ ):y_min (bottom), y_max (top), initial_y_min (bottom) {
462
+ float diff; //in size
463
+ BLOBNBOX_IT it = &blobs; //list of blobs
464
+
465
+ it.add_to_end (blob);
466
+ diff = top - bottom - row_size;
467
+ if (diff > 0) {
468
+ y_max -= diff / 2;
469
+ y_min += diff / 2;
470
+ }
471
+ //very small object
472
+ else if ((top - bottom) * 3 < row_size) {
473
+ diff = row_size / 3 + bottom - top;
474
+ y_max += diff / 2;
475
+ y_min -= diff / 2;
476
+ }
477
+ }
478
+
479
+
480
+ /**********************************************************************
481
+ * TO_ROW:add_blob
482
+ *
483
+ * Add the blob to the end of the row.
484
+ **********************************************************************/
485
+
486
+ void TO_ROW::add_blob( //constructor
487
+ BLOBNBOX *blob, //first blob
488
+ float top, //corrected top
489
+ float bottom, //of row
490
+ float row_size //ideal
491
+ ) {
492
+ float allowed; //allowed expansion
493
+ float available; //expansion
494
+ BLOBNBOX_IT it = &blobs; //list of blobs
495
+
496
+ it.add_to_end (blob);
497
+ allowed = row_size + y_min - y_max;
498
+ if (allowed > 0) {
499
+ available = top > y_max ? top - y_max : 0;
500
+ if (bottom < y_min)
501
+ //total available
502
+ available += y_min - bottom;
503
+ if (available > 0) {
504
+ available += available; //do it gradually
505
+ if (available < allowed)
506
+ available = allowed;
507
+ if (bottom < y_min)
508
+ y_min -= (y_min - bottom) * allowed / available;
509
+ if (top > y_max)
510
+ y_max += (top - y_max) * allowed / available;
511
+ }
512
+ }
513
+ }
514
+
515
+
516
+ /**********************************************************************
517
+ * TO_ROW:insert_blob
518
+ *
519
+ * Add the blob to the row in the correct position.
520
+ **********************************************************************/
521
+
522
+ void TO_ROW::insert_blob( //constructor
523
+ BLOBNBOX *blob //first blob
524
+ ) {
525
+ BLOBNBOX_IT it = &blobs; //list of blobs
526
+
527
+ if (it.empty ())
528
+ it.add_before_then_move (blob);
529
+ else {
530
+ it.mark_cycle_pt ();
531
+ while (!it.cycled_list ()
532
+ && it.data ()->bounding_box ().left () <=
533
+ blob->bounding_box ().left ())
534
+ it.forward ();
535
+ if (it.cycled_list ())
536
+ it.add_to_end (blob);
537
+ else
538
+ it.add_before_stay_put (blob);
539
+ }
540
+ }
541
+
542
+
543
+ /**********************************************************************
544
+ * TO_ROW::compute_vertical_projection
545
+ *
546
+ * Compute the vertical projection of a TO_ROW from its blobs.
547
+ **********************************************************************/
548
+
549
+ void TO_ROW::compute_vertical_projection() { //project whole row
550
+ TBOX row_box; //bound of row
551
+ BLOBNBOX *blob; //current blob
552
+ TBOX blob_box; //bounding box
553
+ BLOBNBOX_IT blob_it = blob_list ();
554
+
555
+ if (blob_it.empty ())
556
+ return;
557
+ row_box = blob_it.data ()->bounding_box ();
558
+ for (blob_it.mark_cycle_pt (); !blob_it.cycled_list (); blob_it.forward ())
559
+ row_box += blob_it.data ()->bounding_box ();
560
+
561
+ projection.set_range (row_box.left () - PROJECTION_MARGIN,
562
+ row_box.right () + PROJECTION_MARGIN);
563
+ projection_left = row_box.left () - PROJECTION_MARGIN;
564
+ projection_right = row_box.right () + PROJECTION_MARGIN;
565
+ for (blob_it.mark_cycle_pt (); !blob_it.cycled_list (); blob_it.forward ()) {
566
+ blob = blob_it.data ();
567
+ if (blob->blob () != NULL)
568
+ vertical_blob_projection (blob->blob (), &projection);
569
+ else if (blob->cblob () != NULL)
570
+ vertical_cblob_projection (blob->cblob (), &projection);
571
+ }
572
+ }
573
+
574
+
575
+ /**********************************************************************
576
+ * vertical_blob_projection
577
+ *
578
+ * Compute the vertical projection of a blob from its outlines
579
+ * and add to the given STATS.
580
+ **********************************************************************/
581
+
582
+ void vertical_blob_projection( //project outlines
583
+ PBLOB *blob, //blob to project
584
+ STATS *stats //output
585
+ ) {
586
+ //outlines of blob
587
+ OUTLINE_IT out_it = blob->out_list ();
588
+
589
+ for (out_it.mark_cycle_pt (); !out_it.cycled_list (); out_it.forward ()) {
590
+ vertical_outline_projection (out_it.data (), stats);
591
+ }
592
+ }
593
+
594
+
595
+ /**********************************************************************
596
+ * vertical_outline_projection
597
+ *
598
+ * Compute the vertical projection of a outline from its outlines
599
+ * and add to the given STATS.
600
+ **********************************************************************/
601
+
602
+ void vertical_outline_projection( //project outlines
603
+ OUTLINE *outline, //outline to project
604
+ STATS *stats //output
605
+ ) {
606
+ POLYPT *polypt; //current point
607
+ inT32 xcoord; //current pixel coord
608
+ float end_x; //end of vec
609
+ POLYPT_IT poly_it = outline->polypts ();
610
+ OUTLINE_IT out_it = outline->child ();
611
+ float ymean; //amount to add
612
+ float width; //amount of x
613
+
614
+ for (poly_it.mark_cycle_pt (); !poly_it.cycled_list (); poly_it.forward ()) {
615
+ polypt = poly_it.data ();
616
+ end_x = polypt->pos.x () + polypt->vec.x ();
617
+ if (polypt->vec.x () > 0) {
618
+ for (xcoord = (inT32) floor (polypt->pos.x ());
619
+ xcoord < end_x; xcoord++) {
620
+ if (polypt->pos.x () < xcoord) {
621
+ width = (float) xcoord;
622
+ ymean =
623
+ polypt->vec.y () * (xcoord -
624
+ polypt->pos.x ()) / polypt->vec.x () +
625
+ polypt->pos.y ();
626
+ }
627
+ else {
628
+ width = polypt->pos.x ();
629
+ ymean = polypt->pos.y ();
630
+ }
631
+ if (end_x > xcoord + 1) {
632
+ width -= xcoord + 1;
633
+ ymean +=
634
+ polypt->vec.y () * (xcoord + 1 -
635
+ polypt->pos.x ()) / polypt->vec.x () +
636
+ polypt->pos.y ();
637
+ }
638
+ else {
639
+ width -= end_x;
640
+ ymean += polypt->pos.y () + polypt->vec.y ();
641
+ }
642
+ ymean = ymean * width / 2;
643
+ stats->add (xcoord, (inT32) floor (ymean + 0.5));
644
+ }
645
+ }
646
+ else if (polypt->vec.x () < 0) {
647
+ for (xcoord = (inT32) floor (end_x);
648
+ xcoord < polypt->pos.x (); xcoord++) {
649
+ if (polypt->pos.x () > xcoord + 1) {
650
+ width = xcoord + 1.0f;
651
+ ymean =
652
+ polypt->vec.y () * (xcoord + 1 -
653
+ polypt->pos.x ()) / polypt->vec.x () +
654
+ polypt->pos.y ();
655
+ }
656
+ else {
657
+ width = polypt->pos.x ();
658
+ ymean = polypt->pos.y ();
659
+ }
660
+ if (end_x < xcoord) {
661
+ width -= xcoord;
662
+ ymean +=
663
+ polypt->vec.y () * (xcoord -
664
+ polypt->pos.x ()) / polypt->vec.x () +
665
+ polypt->pos.y ();
666
+ }
667
+ else {
668
+ width -= end_x;
669
+ ymean += polypt->pos.y () + polypt->vec.y ();
670
+ }
671
+ ymean = ymean * width / 2;
672
+ stats->add (xcoord, (inT32) floor (ymean + 0.5));
673
+ }
674
+ }
675
+ }
676
+
677
+ for (out_it.mark_cycle_pt (); !out_it.cycled_list (); out_it.forward ()) {
678
+ vertical_outline_projection (out_it.data (), stats);
679
+ }
680
+ }
681
+
682
+
683
+ /**********************************************************************
684
+ * vertical_cblob_projection
685
+ *
686
+ * Compute the vertical projection of a cblob from its outlines
687
+ * and add to the given STATS.
688
+ **********************************************************************/
689
+
690
+ void vertical_cblob_projection( //project outlines
691
+ C_BLOB *blob, //blob to project
692
+ STATS *stats //output
693
+ ) {
694
+ //outlines of blob
695
+ C_OUTLINE_IT out_it = blob->out_list ();
696
+
697
+ for (out_it.mark_cycle_pt (); !out_it.cycled_list (); out_it.forward ()) {
698
+ vertical_coutline_projection (out_it.data (), stats);
699
+ }
700
+ }
701
+
702
+
703
+ /**********************************************************************
704
+ * vertical_coutline_projection
705
+ *
706
+ * Compute the vertical projection of a outline from its outlines
707
+ * and add to the given STATS.
708
+ **********************************************************************/
709
+
710
+ void vertical_coutline_projection( //project outlines
711
+ C_OUTLINE *outline, //outline to project
712
+ STATS *stats //output
713
+ ) {
714
+ ICOORD pos; //current point
715
+ ICOORD step; //edge step
716
+ inT32 length; //of outline
717
+ inT16 stepindex; //current step
718
+ C_OUTLINE_IT out_it = outline->child ();
719
+
720
+ pos = outline->start_pos ();
721
+ length = outline->pathlength ();
722
+ for (stepindex = 0; stepindex < length; stepindex++) {
723
+ step = outline->step (stepindex);
724
+ if (step.x () > 0) {
725
+ if (pitsync_projection_fix)
726
+ stats->add (pos.x (), -pos.y ());
727
+ else
728
+ stats->add (pos.x (), pos.y ());
729
+ }
730
+ else if (step.x () < 0) {
731
+ if (pitsync_projection_fix)
732
+ stats->add (pos.x () - 1, pos.y ());
733
+ else
734
+ stats->add (pos.x () - 1, -pos.y ());
735
+ }
736
+ pos += step;
737
+ }
738
+
739
+ for (out_it.mark_cycle_pt (); !out_it.cycled_list (); out_it.forward ()) {
740
+ vertical_coutline_projection (out_it.data (), stats);
741
+ }
742
+ }
743
+
744
+
745
+ /**********************************************************************
746
+ * TO_BLOCK::TO_BLOCK
747
+ *
748
+ * Constructor to make a TO_BLOCK from a real block.
749
+ **********************************************************************/
750
+
751
+ TO_BLOCK::TO_BLOCK( //make a block
752
+ BLOCK *src_block //real block
753
+ ) {
754
+ block = src_block;
755
+ }
756
+
757
+ static void clear_blobnboxes(BLOBNBOX_LIST* boxes) {
758
+ BLOBNBOX_IT it = boxes;
759
+ // A BLOBNBOX generally doesn't own its blobs, so if they do, you
760
+ // have to delete them explicitly.
761
+ for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) {
762
+ BLOBNBOX* box = it.data();
763
+ if (box->blob() != NULL)
764
+ delete box->blob();
765
+ if (box->cblob() != NULL)
766
+ delete box->cblob();
767
+ }
768
+ }
769
+
770
+ TO_BLOCK::~TO_BLOCK() {
771
+ // Any residual BLOBNBOXes at this stage own their blobs, so delete them.
772
+ clear_blobnboxes(&blobs);
773
+ clear_blobnboxes(&underlines);
774
+ clear_blobnboxes(&noise_blobs);
775
+ clear_blobnboxes(&small_blobs);
776
+ clear_blobnboxes(&large_blobs);
777
+ }
778
+