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,809 @@
1
+ /*****************************************************************************
2
+ *
3
+ * File: blkocc.cpp (Formerly blockocc.c)
4
+ * Description: Block Occupancy routines
5
+ * Author: Chris Newton
6
+ * Created: Fri Nov 8
7
+ * Modified:
8
+ * Language: C++
9
+ * Package: N/A
10
+ * Status: Experimental (Do Not Distribute)
11
+ *
12
+ * (c) Copyright 1991, Hewlett-Packard Company.
13
+ ** Licensed under the Apache License, Version 2.0 (the "License");
14
+ ** you may not use this file except in compliance with the License.
15
+ ** You may obtain a copy of the License at
16
+ ** http://www.apache.org/licenses/LICENSE-2.0
17
+ ** Unless required by applicable law or agreed to in writing, software
18
+ ** distributed under the License is distributed on an "AS IS" BASIS,
19
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20
+ ** See the License for the specific language governing permissions and
21
+ ** limitations under the License.
22
+ *
23
+ ******************************************************************************/
24
+
25
+ /*
26
+ ----------------------------------------------------------------------
27
+ I n c l u d e s
28
+ ----------------------------------------------------------------------
29
+ */
30
+
31
+ #include "mfcpch.h"
32
+ #include <ctype.h>
33
+ #include <math.h>
34
+ #include "errcode.h"
35
+ #include "drawtord.h"
36
+ #include "blkocc.h"
37
+ #include "notdll.h"
38
+
39
+ const ERRCODE BLOCKOCC = "BlockOcc";
40
+
41
+ ELISTIZE (REGION_OCC)
42
+ #define EXTERN
43
+ EXTERN BOOL_VAR (blockocc_show_result, FALSE,
44
+ "Show intermediate results");
45
+
46
+ /* The values given here should reflect the values of bln_x_height and
47
+ * bln_baseline_offset. These are defined as part of the word class
48
+ * definition */
49
+
50
+ EXTERN INT_VAR (blockocc_desc_height, 0,
51
+ "Descender height after normalisation");
52
+ EXTERN INT_VAR (blockocc_asc_height, 255,
53
+ "Ascender height after normalisation");
54
+
55
+ EXTERN INT_VAR (blockocc_band_count, 4, "Number of bands used");
56
+
57
+ EXTERN double_VAR (textord_underline_threshold, 0.5,
58
+ "Fraction of width occupied");
59
+
60
+ /* ********************************************************************
61
+ A note on transitions.
62
+
63
+ We want to record occupancy in various bands. In general we need to consider
64
+ 7 situations:
65
+
66
+ (1) (2) (3) (4)
67
+ \ / \ / \ /
68
+ __\_____/_____\_________/_____\_________/______ Upper Limit
69
+ \ / \ / \ /
70
+ / \ \-->--/ \--<--/ /-----\
71
+ v ^ / \(7)
72
+ \ \ \ /
73
+ \ \ /--<--\ /-->--\ \-----/
74
+ ____\______\____/_______\____/_______\_________ Lower Limit
75
+ \ \ / \ / \
76
+ (5) (6)
77
+ We know that following "next" pointers around an outline keeps the black area
78
+ on the LEFT. We only need be concerned with situations 1,2,3,5 and 7.
79
+ 4 and 6 can be ignored as they represent small incursions into a large black
80
+ region which will be recorded elsewhere. Situations 3 and 5 define encloseed
81
+ areas bounded by the upper and lower limits respectively. Situation 1 is open
82
+ to the right, awaiting a closure by a situation 2 which is open to the right.
83
+ Situation 7 is entirely enclosed within the band.
84
+
85
+ The situations are refered to as region types and are determined by
86
+ find_region_type.
87
+
88
+ An empty region type is used to denote entry to an adjacent band and return
89
+ to the original band at the same x location.
90
+ ***********************************************************************/
91
+
92
+ #define REGION_TYPE_EMPTY 0
93
+ #define REGION_TYPE_OPEN_RIGHT 1
94
+ #define REGION_TYPE_OPEN_LEFT 2
95
+ #define REGION_TYPE_UPPER_BOUND 3
96
+ #define REGION_TYPE_UPPER_UNBOUND 4
97
+ #define REGION_TYPE_LOWER_BOUND 5
98
+ #define REGION_TYPE_LOWER_UNBOUND 6
99
+ #define REGION_TYPE_ENCLOSED 7
100
+
101
+ BAND bands[MAX_NUM_BANDS + 1]; // band defns
102
+
103
+ /**********************************************************************
104
+ * test_underline
105
+ *
106
+ * Check to see if the blob is an underline.
107
+ * Return TRUE if it is.
108
+ **********************************************************************/
109
+
110
+ BOOL8 test_underline( //look for underlines
111
+ BOOL8 testing_on, //drawing blob
112
+ PBLOB *blob, //blob to test
113
+ float baseline, //coords of baseline
114
+ float xheight //height of line
115
+ ) {
116
+ inT16 occ;
117
+ inT16 blob_width; //width of blob
118
+ TBOX blob_box; //bounding box
119
+ float occs[MAX_NUM_BANDS + 1]; //total occupancy
120
+
121
+ blob_box = blob->bounding_box ();
122
+ set_bands(baseline, xheight); //setup block occ
123
+ blob_width = blob->bounding_box ().width ();
124
+ if (testing_on) {
125
+ // blob->plot(to_win,GOLDENROD,GOLDENROD);
126
+ // line_color_index(to_win,GOLDENROD);
127
+ // move2d(to_win,blob_box.left(),baseline);
128
+ // draw2d(to_win,blob_box.right(),baseline);
129
+ // move2d(to_win,blob_box.left(),baseline+xheight);
130
+ // draw2d(to_win,blob_box.right(),baseline+xheight);
131
+ tprintf
132
+ ("Testing underline on blob at (%d,%d)->(%d,%d), base=%g\nOccs:",
133
+ blob->bounding_box ().left (), blob->bounding_box ().bottom (),
134
+ blob->bounding_box ().right (), blob->bounding_box ().top (),
135
+ baseline);
136
+ }
137
+ block_occ(blob, occs);
138
+ if (testing_on) {
139
+ for (occ = 0; occ <= MAX_NUM_BANDS; occ++)
140
+ tprintf ("%g ", occs[occ]);
141
+ tprintf ("\n");
142
+ }
143
+ if (occs[1] > occs[2] + occs[2] && occs[1] > occs[3] + occs[3]
144
+ && occs[1] > blob_width * textord_underline_threshold)
145
+ return TRUE; //real underline
146
+ if (occs[4] > occs[2] + occs[2]
147
+ && occs[4] > blob_width * textord_underline_threshold)
148
+ return TRUE; //overline
149
+ return FALSE; //neither
150
+ }
151
+
152
+
153
+ /**********************************************************************
154
+ * test_underline
155
+ *
156
+ * Check to see if the blob is an underline.
157
+ * Return TRUE if it is.
158
+ **********************************************************************/
159
+
160
+ BOOL8 test_underline( //look for underlines
161
+ BOOL8 testing_on, //drawing blob
162
+ C_BLOB *blob, //blob to test
163
+ inT16 baseline, //coords of baseline
164
+ inT16 xheight //height of line
165
+ ) {
166
+ inT16 occ;
167
+ inT16 blob_width; //width of blob
168
+ TBOX blob_box; //bounding box
169
+ inT32 desc_occ;
170
+ inT32 x_occ;
171
+ inT32 asc_occ;
172
+ STATS projection;
173
+
174
+ blob_box = blob->bounding_box ();
175
+ blob_width = blob->bounding_box ().width ();
176
+ projection.set_range (blob_box.bottom (), blob_box.top () + 1);
177
+ if (testing_on) {
178
+ // blob->plot(to_win,GOLDENROD,GOLDENROD);
179
+ // line_color_index(to_win,GOLDENROD);
180
+ // move2d(to_win,blob_box.left(),baseline);
181
+ // draw2d(to_win,blob_box.right(),baseline);
182
+ // move2d(to_win,blob_box.left(),baseline+xheight);
183
+ // draw2d(to_win,blob_box.right(),baseline+xheight);
184
+ tprintf
185
+ ("Testing underline on blob at (%d,%d)->(%d,%d), base=%d\nOccs:",
186
+ blob->bounding_box ().left (), blob->bounding_box ().bottom (),
187
+ blob->bounding_box ().right (), blob->bounding_box ().top (),
188
+ baseline);
189
+ }
190
+ horizontal_cblob_projection(blob, &projection);
191
+ desc_occ = 0;
192
+ for (occ = blob_box.bottom (); occ < baseline; occ++)
193
+ if (occ <= blob_box.top () && projection.pile_count (occ) > desc_occ)
194
+ //max in region
195
+ desc_occ = projection.pile_count (occ);
196
+ x_occ = 0;
197
+ for (occ = baseline; occ <= baseline + xheight; occ++)
198
+ if (occ >= blob_box.bottom () && occ <= blob_box.top ()
199
+ && projection.pile_count (occ) > x_occ)
200
+ //max in region
201
+ x_occ = projection.pile_count (occ);
202
+ asc_occ = 0;
203
+ for (occ = baseline + xheight + 1; occ <= blob_box.top (); occ++)
204
+ if (occ >= blob_box.bottom () && projection.pile_count (occ) > asc_occ)
205
+ asc_occ = projection.pile_count (occ);
206
+ if (testing_on) {
207
+ tprintf ("%d %d %d\n", desc_occ, x_occ, asc_occ);
208
+ }
209
+ if (desc_occ == 0 && x_occ == 0 && asc_occ == 0) {
210
+ tprintf ("Bottom=%d, top=%d, base=%d, x=%d\n",
211
+ blob_box.bottom (), blob_box.top (), baseline, xheight);
212
+ projection.print (stdout, TRUE);
213
+ }
214
+ if (desc_occ > x_occ + x_occ
215
+ && desc_occ > blob_width * textord_underline_threshold)
216
+ return TRUE; //real underline
217
+ if (asc_occ > x_occ + x_occ
218
+ && asc_occ > blob_width * textord_underline_threshold)
219
+ return TRUE; //overline
220
+ return FALSE; //neither
221
+ }
222
+
223
+
224
+ /**********************************************************************
225
+ * horizontal_cblob_projection
226
+ *
227
+ * Compute the horizontal projection of a cblob from its outlines
228
+ * and add to the given STATS.
229
+ **********************************************************************/
230
+
231
+ void horizontal_cblob_projection( //project outlines
232
+ C_BLOB *blob, //blob to project
233
+ STATS *stats //output
234
+ ) {
235
+ //outlines of blob
236
+ C_OUTLINE_IT out_it = blob->out_list ();
237
+
238
+ for (out_it.mark_cycle_pt (); !out_it.cycled_list (); out_it.forward ()) {
239
+ horizontal_coutline_projection (out_it.data (), stats);
240
+ }
241
+ }
242
+
243
+
244
+ /**********************************************************************
245
+ * horizontal_coutline_projection
246
+ *
247
+ * Compute the horizontal projection of a outline from its outlines
248
+ * and add to the given STATS.
249
+ **********************************************************************/
250
+
251
+ void horizontal_coutline_projection( //project outlines
252
+ C_OUTLINE *outline, //outline to project
253
+ STATS *stats //output
254
+ ) {
255
+ ICOORD pos; //current point
256
+ ICOORD step; //edge step
257
+ inT32 length; //of outline
258
+ inT16 stepindex; //current step
259
+ C_OUTLINE_IT out_it = outline->child ();
260
+
261
+ pos = outline->start_pos ();
262
+ length = outline->pathlength ();
263
+ for (stepindex = 0; stepindex < length; stepindex++) {
264
+ step = outline->step (stepindex);
265
+ if (step.y () > 0) {
266
+ stats->add (pos.y (), pos.x ());
267
+ }
268
+ else if (step.y () < 0) {
269
+ stats->add (pos.y () - 1, -pos.x ());
270
+ }
271
+ pos += step;
272
+ }
273
+
274
+ for (out_it.mark_cycle_pt (); !out_it.cycled_list (); out_it.forward ()) {
275
+ horizontal_coutline_projection (out_it.data (), stats);
276
+ }
277
+ }
278
+
279
+
280
+ void set_bands( //init from varibles
281
+ float baseline, //top of bottom band
282
+ float xheight //height of split band
283
+ ) {
284
+ inT16 int_bl, int_xh; //for band.set
285
+
286
+ bands[DOT_BAND].set (0, 0, 0, 0, 0, 0);
287
+
288
+ int_bl = (inT16) baseline;
289
+ int_xh = (inT16) xheight;
290
+ bands[1].set (int_bl, int_bl, int_bl,
291
+ NO_LOWER_LIMIT, NO_LOWER_LIMIT, NO_LOWER_LIMIT);
292
+
293
+ bands[2].set (int_bl + int_xh / 2, int_bl + int_xh / 2, int_bl + int_xh / 2,
294
+ int_bl, int_bl, int_bl);
295
+
296
+ bands[3].set (int_bl + int_xh, int_bl + int_xh, int_bl + int_xh,
297
+ int_bl + int_xh / 2, int_bl + int_xh / 2,
298
+ int_bl + int_xh / 2);
299
+
300
+ bands[4].set (NO_UPPER_LIMIT, NO_UPPER_LIMIT, NO_UPPER_LIMIT,
301
+ int_bl + int_xh, int_bl + int_xh, int_bl + int_xh);
302
+ }
303
+
304
+
305
+ void
306
+ block_occ (PBLOB * blob, //blob to do
307
+ float occs[] //output histogram
308
+ ) {
309
+ int band_index; //current band
310
+ REGION_OCC *region; //current segment
311
+ REGION_OCC_LIST region_occ_list[MAX_NUM_BANDS + 1];
312
+ REGION_OCC_IT region_it; //region iterator
313
+
314
+ find_transitions(blob, region_occ_list);
315
+ compress_region_list(region_occ_list);
316
+ for (band_index = 0; band_index <= MAX_NUM_BANDS; band_index++) {
317
+ occs[band_index] = 0.0f;
318
+ region_it.set_to_list (&region_occ_list[band_index]);
319
+ for (region_it.mark_cycle_pt (); !region_it.cycled_list ();
320
+ region_it.forward ()) {
321
+ region = region_it.data ();
322
+ occs[band_index] += region->max_x - region->min_x;
323
+ }
324
+ }
325
+ }
326
+
327
+
328
+ void find_transitions(PBLOB *blob, //blob to do
329
+ REGION_OCC_LIST *region_occ_list) {
330
+ OUTLINE_IT outline_it;
331
+ TBOX box;
332
+ POLYPT_IT pt_it;
333
+ FCOORD point1;
334
+ FCOORD point2;
335
+ FCOORD *entry_pt = &point1;
336
+ FCOORD *exit_pt = &point2;
337
+ FCOORD *temp_pt;
338
+ inT16 increment;
339
+ inT16 prev_band;
340
+ inT16 band;
341
+ inT16 next_band;
342
+ float min_x;
343
+ float max_x;
344
+ float min_y;
345
+ float max_y;
346
+ BOOL8 doubly_contained;
347
+
348
+ outline_it = blob->out_list ();
349
+ for (outline_it.mark_cycle_pt (); !outline_it.cycled_list ();
350
+ outline_it.forward ()) {
351
+ find_fbox(&outline_it, &min_x, &min_y, &max_x, &max_y);
352
+
353
+ if (bands[DOT_BAND].range_in_nominal (max_y, min_y)) {
354
+ record_region(DOT_BAND,
355
+ min_x,
356
+ max_x,
357
+ REGION_TYPE_ENCLOSED,
358
+ region_occ_list);
359
+ }
360
+ else {
361
+ band = find_containing_maximal_band (max_y, min_y,
362
+ &doubly_contained);
363
+ if (band != UNDEFINED_BAND) {
364
+ //No transitions
365
+ if (!doubly_contained)
366
+ record_region(band,
367
+ min_x,
368
+ max_x,
369
+ REGION_TYPE_ENCLOSED,
370
+ region_occ_list);
371
+ else {
372
+ // if (wordocc_debug_on && blockocc_show_result)
373
+ // {
374
+ // fprintf( db_win,
375
+ // "Ignoring doubly contained outline (%d, %d) (%d, %d)\n",
376
+ // box.left(), box.top(),
377
+ // box.right(), box.bottom());
378
+ // fprintf( db_win, "\tContained in bands %d and %d\n",
379
+ // band, band + 1 );
380
+ // }
381
+ }
382
+ }
383
+ else {
384
+ //There are transitns
385
+ /*
386
+ Determining a good start point for recognising transitions between bands
387
+ is complicated by error limits on bands. We need to find a line which
388
+ significantly occupies a band.
389
+
390
+ Having found such a point, we need to find a significant transition out of
391
+ its band and start the walk around the outline from there.
392
+
393
+ Note that we are relying on having recognised and dealt with elsewhere,
394
+ outlines which do not significantly occupy more than one region. A
395
+ particularly nasty case of this are outlines which do not significantly
396
+ occupy ANY band. I.e. they lie entirely within the error limits.
397
+ Given this condition, all remaining outlines must contain at least one
398
+ significant line. */
399
+
400
+ pt_it = outline_it.data ()->polypts ();
401
+
402
+ find_significant_line(pt_it, &band);
403
+ *entry_pt = pt_it.data ()->pos;
404
+ next_region(&pt_it,
405
+ band,
406
+ &next_band,
407
+ &min_x,
408
+ &max_x,
409
+ &increment,
410
+ exit_pt);
411
+ pt_it.mark_cycle_pt ();
412
+
413
+ // Found the first real transition, so start walking the outline from here.
414
+
415
+ do {
416
+ prev_band = band;
417
+ band = band + increment;
418
+
419
+ while (band != next_band) {
420
+ temp_pt = entry_pt;
421
+ entry_pt = exit_pt;
422
+ exit_pt = temp_pt;
423
+ min_x = max_x = entry_pt->x ();
424
+
425
+ find_trans_point (&pt_it, band, band + increment,
426
+ exit_pt);
427
+ maintain_limits (&min_x, &max_x, exit_pt->x ());
428
+
429
+ record_region (band,
430
+ min_x,
431
+ max_x,
432
+ find_region_type (prev_band,
433
+ band,
434
+ band + increment,
435
+ entry_pt->x (),
436
+ exit_pt->x ()),
437
+ region_occ_list);
438
+ prev_band = band;
439
+ band = band + increment;
440
+ }
441
+
442
+ temp_pt = entry_pt;
443
+ entry_pt = exit_pt;
444
+ exit_pt = temp_pt;
445
+ min_x = max_x = entry_pt->x ();
446
+ next_region(&pt_it,
447
+ band,
448
+ &next_band,
449
+ &min_x,
450
+ &max_x,
451
+ &increment,
452
+ exit_pt);
453
+
454
+ record_region (band,
455
+ min_x,
456
+ max_x,
457
+ find_region_type (prev_band,
458
+ band,
459
+ band + increment,
460
+ entry_pt->x (),
461
+ exit_pt->x ()),
462
+ region_occ_list);
463
+ }
464
+ while (!pt_it.cycled_list ());
465
+ }
466
+ }
467
+ }
468
+ }
469
+
470
+
471
+ void record_region( //add region on list
472
+ inT16 band,
473
+ float new_min,
474
+ float new_max,
475
+ inT16 region_type,
476
+ REGION_OCC_LIST *region_occ_list) {
477
+ REGION_OCC_IT it (&(region_occ_list[band]));
478
+
479
+ // if (wordocc_debug_on && blockocc_show_result)
480
+ // fprintf( db_win, "\nBand %d, region type %d, from %f to %f",
481
+ // band, region_type, new_min, new_max );
482
+
483
+ if ((region_type == REGION_TYPE_UPPER_UNBOUND) ||
484
+ (region_type == REGION_TYPE_LOWER_UNBOUND) ||
485
+ (region_type == REGION_TYPE_EMPTY))
486
+ return;
487
+
488
+ if (it.empty ()) {
489
+ it.add_after_stay_put (new REGION_OCC (new_min, new_max, region_type));
490
+ }
491
+ else {
492
+
493
+ /* Insert in sorted order of average limit */
494
+
495
+ while ((new_min + new_max > it.data ()->min_x + it.data ()->max_x) &&
496
+ (!it.at_last ()))
497
+ it.forward ();
498
+
499
+ if ((it.at_last ()) && //at the end
500
+ (new_min + new_max > it.data ()->min_x + it.data ()->max_x))
501
+ //new range > current
502
+ it.add_after_stay_put (new REGION_OCC (new_min,
503
+ new_max, region_type));
504
+ else {
505
+ it.add_before_stay_put (new REGION_OCC (new_min,
506
+ new_max, region_type));
507
+ }
508
+ }
509
+ }
510
+
511
+
512
+ inT16 find_containing_maximal_band( //find range's band
513
+ float y1,
514
+ float y2,
515
+ BOOL8 *doubly_contained) {
516
+ inT16 band;
517
+
518
+ *doubly_contained = FALSE;
519
+
520
+ for (band = 1; band <= blockocc_band_count; band++) {
521
+ if (bands[band].range_in_maximal (y1, y2)) {
522
+ if ((band < blockocc_band_count) &&
523
+ (bands[band + 1].range_in_maximal (y1, y2)))
524
+ *doubly_contained = TRUE;
525
+ return band;
526
+ }
527
+ }
528
+ return UNDEFINED_BAND;
529
+ }
530
+
531
+
532
+ void find_significant_line(POLYPT_IT it, inT16 *band) {
533
+
534
+ /* Look for a line which significantly occupies at least one band. I.e. part
535
+ of the line is in the non-margin part of the band. */
536
+
537
+ *band = find_overlapping_minimal_band (it.data ()->pos.y (),
538
+ it.data ()->pos.y () +
539
+ it.data ()->vec.y ());
540
+
541
+ while (*band == UNDEFINED_BAND) {
542
+ it.forward ();
543
+ *band = find_overlapping_minimal_band (it.data ()->pos.y (),
544
+ it.data ()->pos.y () +
545
+ it.data ()->vec.y ());
546
+ }
547
+ }
548
+
549
+
550
+ inT16 find_overlapping_minimal_band( //find range's band
551
+ float y1,
552
+ float y2) {
553
+ inT16 band;
554
+
555
+ for (band = 1; band <= blockocc_band_count; band++) {
556
+ if (bands[band].range_overlaps_minimal (y1, y2))
557
+ return band;
558
+ }
559
+ return UNDEFINED_BAND;
560
+ }
561
+
562
+
563
+ inT16 find_region_type(inT16 entry_band,
564
+ inT16 current_band,
565
+ inT16 exit_band,
566
+ float entry_x,
567
+ float exit_x) {
568
+ if (entry_band > exit_band)
569
+ return REGION_TYPE_OPEN_RIGHT;
570
+ if (entry_band < exit_band)
571
+ return REGION_TYPE_OPEN_LEFT;
572
+ if (entry_x == exit_x)
573
+ return REGION_TYPE_EMPTY;
574
+ if (entry_band > current_band) {
575
+ if (entry_x < exit_x)
576
+ return REGION_TYPE_UPPER_BOUND;
577
+ else
578
+ return REGION_TYPE_UPPER_UNBOUND;
579
+ }
580
+ else {
581
+ if (entry_x > exit_x)
582
+ return REGION_TYPE_LOWER_BOUND;
583
+ else
584
+ return REGION_TYPE_LOWER_UNBOUND;
585
+ }
586
+ }
587
+
588
+
589
+ void find_trans_point(POLYPT_IT *pt_it,
590
+ inT16 current_band,
591
+ inT16 next_band,
592
+ FCOORD *transition_pt) {
593
+ float x1, x2, y1, y2; // points of edge
594
+ float gradient; // m in y = mx + c
595
+ float offset; // c in y = mx + c
596
+
597
+ if (current_band < next_band)
598
+ transition_pt->set_y (bands[current_band].max);
599
+ //going up
600
+ else
601
+ transition_pt->set_y (bands[current_band].min);
602
+ //going down
603
+
604
+ x1 = pt_it->data ()->pos.x ();
605
+ x2 = x1 + pt_it->data ()->vec.x ();
606
+ y1 = pt_it->data ()->pos.y ();
607
+ y2 = y1 + pt_it->data ()->vec.y ();
608
+
609
+ if (x1 == x2)
610
+ transition_pt->set_x (x1); //avoid div by 0
611
+ else {
612
+ if (y1 == y2) //avoid div by 0
613
+ transition_pt->set_x ((x1 + x2) / 2.0);
614
+ else {
615
+ gradient = (y1 - y2) / (float) (x1 - x2);
616
+ offset = y1 - x1 * gradient;
617
+ transition_pt->set_x ((transition_pt->y () - offset) / gradient);
618
+ }
619
+ }
620
+ }
621
+
622
+
623
+ void next_region(POLYPT_IT *start_pt_it,
624
+ inT16 start_band,
625
+ inT16 *to_band,
626
+ float *min_x,
627
+ float *max_x,
628
+ inT16 *increment,
629
+ FCOORD *exit_pt) {
630
+ /*
631
+ Given an edge and a band which the edge significantly occupies, find the
632
+ significant end of the region containing the band. I.e. find an edge which
633
+ points to another band such that the outline subsequetly moves significantly
634
+ out of the starting band.
635
+
636
+ Note that we can assume that we are significantly inside the current band to
637
+ start with because the edges passed will be from previous calls to this
638
+ routine apart from the first - the result of which is only used to establish
639
+ the start of the first region.
640
+ */
641
+
642
+ inT16 band; //band of current edge
643
+ inT16 prev_band = start_band; //band of prev edge
644
+ //edge crossing out
645
+ POLYPT_IT last_transition_out_it;
646
+ //band it pts to
647
+ inT16 last_trans_out_to_band = 0;
648
+ float ext_min_x = 0.0f;
649
+ float ext_max_x = 0.0f;
650
+
651
+ start_pt_it->forward ();
652
+ band = find_band (start_pt_it->data ()->pos.y ());
653
+
654
+ while ((band == start_band) ||
655
+ bands[start_band].in_maximal (start_pt_it->data ()->pos.y ())) {
656
+ if (band == start_band) {
657
+ //Return to start band
658
+ if (prev_band != start_band) {
659
+ *min_x = ext_min_x;
660
+ *max_x = ext_max_x;
661
+ }
662
+ maintain_limits (min_x, max_x, start_pt_it->data ()->pos.x ());
663
+ }
664
+ else {
665
+ if (prev_band == start_band) {
666
+ //Exit from start band
667
+ //so remember edge
668
+ last_transition_out_it = *start_pt_it;
669
+ //before we left
670
+ last_transition_out_it.backward ();
671
+ //and band it pts to
672
+ last_trans_out_to_band = band;
673
+ ext_min_x = *min_x;
674
+ ext_max_x = *max_x;
675
+ }
676
+ maintain_limits (&ext_min_x, &ext_max_x,
677
+ start_pt_it->data ()->pos.x ());
678
+ }
679
+ prev_band = band;
680
+ start_pt_it->forward ();
681
+ band = find_band (start_pt_it->data ()->pos.y ());
682
+ }
683
+
684
+ if (prev_band == start_band) { //exit from start band
685
+ *to_band = band;
686
+ //so remember edge
687
+ last_transition_out_it = *start_pt_it;
688
+ //before we left
689
+ last_transition_out_it.backward ();
690
+ }
691
+ else {
692
+ *to_band = last_trans_out_to_band;
693
+ }
694
+
695
+ if (*to_band > start_band)
696
+ *increment = 1;
697
+ else
698
+ *increment = -1;
699
+
700
+ find_trans_point (&last_transition_out_it, start_band,
701
+ start_band + *increment, exit_pt);
702
+ maintain_limits (min_x, max_x, exit_pt->x ());
703
+ *start_pt_it = last_transition_out_it;
704
+ }
705
+
706
+
707
+ inT16 find_band( // find POINT's band
708
+ float y) {
709
+ inT16 band;
710
+
711
+ for (band = 1; band <= blockocc_band_count; band++) {
712
+ if (bands[band].in_nominal (y))
713
+ return band;
714
+ }
715
+ BLOCKOCC.error ("find_band", ABORT, "Cant find band for %d", y);
716
+ return 0;
717
+ }
718
+
719
+
720
+ void compress_region_list( // join open regions
721
+ REGION_OCC_LIST *region_occ_list) {
722
+ REGION_OCC_IT it (&(region_occ_list[0]));
723
+ REGION_OCC *open_right = NULL;
724
+
725
+ inT16 i = 0;
726
+
727
+ for (i = 0; i <= blockocc_band_count; i++) {
728
+ it.set_to_list (&(region_occ_list[i]));
729
+ if (!it.empty ()) {
730
+ /* First check for left right pairs. Merge them into the open right and delete
731
+ the open left. */
732
+ open_right = NULL;
733
+ for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) {
734
+ switch (it.data ()->region_type) {
735
+ case REGION_TYPE_OPEN_RIGHT:
736
+ {
737
+ if (open_right != NULL)
738
+ BLOCKOCC.error ("compress_region_list", ABORT,
739
+ "unmatched right");
740
+ else
741
+ open_right = it.data ();
742
+ break;
743
+ }
744
+ case REGION_TYPE_OPEN_LEFT:
745
+ {
746
+ if (open_right == NULL)
747
+ BLOCKOCC.error ("compress_region_list", ABORT,
748
+ "unmatched left");
749
+ else {
750
+ open_right->max_x = it.data ()->max_x;
751
+ open_right = NULL;
752
+ delete it.extract ();
753
+ }
754
+ break;
755
+ }
756
+ default:
757
+ break;
758
+ }
759
+ }
760
+ if (open_right != NULL)
761
+ BLOCKOCC.error ("compress_region_list", ABORT,
762
+ "unmatched right remaining");
763
+
764
+ /* Now cycle the list again, merging and deleting any redundant regions */
765
+ it.move_to_first ();
766
+ open_right = it.data ();
767
+ while (!it.at_last ()) {
768
+ it.forward ();
769
+ if (it.data ()->min_x <= open_right->max_x) {
770
+ // Overlaps
771
+ if (it.data ()->max_x > open_right->max_x)
772
+ open_right->max_x = it.data ()->max_x;
773
+ // Extend
774
+ delete it.extract ();
775
+ }
776
+ else
777
+ open_right = it.data ();
778
+ }
779
+ }
780
+ }
781
+ }
782
+
783
+
784
+ void find_fbox(OUTLINE_IT *out_it,
785
+ float *min_x,
786
+ float *min_y,
787
+ float *max_x,
788
+ float *max_y) {
789
+ POLYPT_IT pt_it = out_it->data ()->polypts ();
790
+ FCOORD pt;
791
+ *min_x = 9999.0f;
792
+ *min_y = 9999.0f;
793
+ *max_x = 0.0f;
794
+ *max_y = 0.0f;
795
+
796
+ for (pt_it.mark_cycle_pt (); !pt_it.cycled_list (); pt_it.forward ()) {
797
+ pt = pt_it.data ()->pos;
798
+ maintain_limits (min_x, max_x, pt.x ());
799
+ maintain_limits (min_y, max_y, pt.y ());
800
+ }
801
+ }
802
+
803
+
804
+ void maintain_limits(float *min_x, float *max_x, float x) {
805
+ if (x > *max_x)
806
+ *max_x = x;
807
+ if (x < *min_x)
808
+ *min_x = x;
809
+ }