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,772 @@
1
+ /**********************************************************************
2
+ * File: ocrshell.cpp
3
+ * Description: Code for the OCR side of the OCR API.
4
+ * Author: Hewlett-Packard Co
5
+ *
6
+ * (C) Copyright 1996, Hewlett-Packard Co.
7
+ ** Licensed under the Apache License, Version 2.0 (the "License");
8
+ ** you may not use this file except in compliance with the License.
9
+ ** You may obtain a copy of the License at
10
+ ** http://www.apache.org/licenses/LICENSE-2.0
11
+ ** Unless required by applicable law or agreed to in writing, software
12
+ ** distributed under the License is distributed on an "AS IS" BASIS,
13
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ ** See the License for the specific language governing permissions and
15
+ ** limitations under the License.
16
+ *
17
+ **********************************************************************/
18
+
19
+ /**********************************************************************
20
+ * This file contains code for the OCR side of the HP OCR interface.
21
+ * The code is designed to be used with either an ANSI C or C++ compiler.
22
+ * The structures are designed to allow them to be used with any
23
+ * structure alignment upto 8.
24
+ **********************************************************************/
25
+
26
+ #include "mfcpch.h"
27
+ #include "ocrshell.h"
28
+ #include "tprintf.h"
29
+ #include <stdlib.h>
30
+
31
+ #define EXTERN
32
+
33
+ #ifdef __UNIX__
34
+ EXTERN ESHM_INFO shm; /*info on shm */
35
+ #define TICKS 1
36
+ #endif
37
+
38
+ #ifdef __MSW32__
39
+ EXTERN ESHM_INFO shm; /*info on shm */
40
+ #define TICKS 1000
41
+ #endif
42
+
43
+ #ifdef __MAC__
44
+
45
+ #if defined(__CFM68K__) && !defined(__USING_STATIC_LIBS__)
46
+ #pragma import on
47
+ #endif
48
+
49
+ extern volatile ESHM_INFO shm; /*info on shm */
50
+ extern unsigned short WaitForSingleObject( /*"C" */
51
+ volatile Boolean &semaphore,
52
+ unsigned long timeout);
53
+ extern unsigned short ReleaseSemaphore( /*"C" */
54
+ volatile Boolean &semaphore);
55
+ #if defined(__CFM68K__) && !defined(__USING_STATIC_LIBS__)
56
+ #pragma import reset
57
+ #endif
58
+ #define WAIT_OBJECT_0 1
59
+ #define TICKS 60
60
+ #endif
61
+
62
+ typedef enum {
63
+ OCS_UNINIT, /*uninitialized */
64
+ OCS_SETUP_SHM, /*shm setup done */
65
+ OCS_SETUP_INFO, /*startinfo sent */
66
+ OCS_READING_STRIPS, /*read first but more to come */
67
+ OCS_READ_STRIPS, /*read all but no monitor yet */
68
+ OCS_RECOGNIZING, /*OCR incomplete */
69
+ OCS_SENDING_TEXT, /*sent buffer but more to come */
70
+ OCS_DEAD /*disconnected */
71
+ } OCR_STATE;
72
+
73
+ /* forward declarations - not in .h file as not needed outside this file*/
74
+ inT16 ocr_internal_shutdown(); /*closedown */
75
+ inT16 wait_for_mutex(); /*wait for HP to be ready */
76
+ inT16 wait_for_hp( /*wait for semaphore */
77
+ inT32 timeout /*in seconds */
78
+ );
79
+ inT16 release_mutex(); /*release mutex */
80
+ inT16 release_ocr(); /*release semaphore */
81
+
82
+ static inT32 font_count = 0; /*number of fonts */
83
+ static inT16 lines_read = 0; /*no read in this image */
84
+ /*current state */
85
+ static OCR_STATE ocr_state = OCS_UNINIT;
86
+
87
+ #ifdef __MAC__
88
+ pascal short TerminateOCR(AppleEvent *theEvent,
89
+ AppleEvent *theReply,
90
+ long refCon) {
91
+ ocr_internal_shutdown();
92
+ ExitToShell();
93
+
94
+ }
95
+ #endif
96
+
97
+ /**********************************************************************
98
+ * ocr_open_shm
99
+ *
100
+ * Attempt to connect to the shared memory segment and semaphores used
101
+ * in talking to the OCR engine. Called from OCR engine.
102
+ * The parameters are the command line arguments in order.
103
+ **********************************************************************/
104
+ #ifdef __MAC__
105
+ inT16
106
+ ocr_open_shm (uinT16 * lang)
107
+ #else
108
+ inT16
109
+ ocr_open_shm ( /*open the shm */
110
+ const char *shm_h, /*handle of shm */
111
+ const char *shm_size, /*size of shm segment */
112
+ const char *mutex_h, /*hp mutex */
113
+ const char *ocr_h, /*ocr semaphore */
114
+ const char *hp_h, /*hp semaphore */
115
+ const char *lang_str, /*language */
116
+ uinT16 * lang /*required language */
117
+ )
118
+ #endif
119
+ {
120
+ font_count = 0; /*no fonts yet */
121
+ #ifdef __MAC__
122
+ if (shm.OCRProcess.lowLongOfPSN && shm.OCRProcess.highLongOfPSN)
123
+ return HPERR;
124
+ *lang = shm.language;
125
+ GetCurrentProcess (&shm.OCRProcess);
126
+ if (WakeUpProcess (&shm.IPEProcess))
127
+ ExitToShell();
128
+ AEInstallEventHandler (kCoreEventClass, kAEQuitApplication,
129
+ (AEEventHandlerUPP) TerminateOCR, 0, FALSE);
130
+ #else
131
+ if (lang != NULL)
132
+ /*get language */
133
+ *lang = (uinT16) strtol (lang_str, NULL, 10);
134
+ #endif
135
+ if (ocr_state != OCS_UNINIT) {
136
+ ocr_error(OCR_ERR_BAD_STATE);
137
+ return OCR_API_BAD_STATE; /*incorrect state */
138
+ }
139
+ #ifdef __MSW32__
140
+ shm.shm_size = strtol (shm_size, NULL, 10);
141
+ /*convert to handle */
142
+ shm.shm_hand = (HANDLE) strtol (shm_h, NULL, 10);
143
+ shm.shm_mem = MapViewOfFile (shm.shm_hand, FILE_MAP_WRITE, 0, 0, 0);
144
+ if (shm.shm_mem == NULL)
145
+ return HPERR; /*failed */
146
+ /*convert to handle */
147
+ shm.mutex = (HANDLE) strtol (mutex_h, NULL, 10);
148
+ /*convert to handle */
149
+ shm.ocr_sem = (HANDLE) strtol (ocr_h, NULL, 10);
150
+ /*convert to handle */
151
+ shm.hp_sem = (HANDLE) strtol (hp_h, NULL, 10);
152
+ #endif
153
+
154
+ ocr_state = OCS_SETUP_SHM; /*record state */
155
+ return OKAY;
156
+
157
+ }
158
+
159
+
160
+ /**********************************************************************
161
+ * ocr_error
162
+ *
163
+ * Inform the HP side of an error.
164
+ * The OCR engine should do any cleanup of its own and exit aferwards.
165
+ * Uses the current state to determine how to send it and cleanup.
166
+ **********************************************************************/
167
+
168
+ void ocr_error( /*send an error code */
169
+ OCR_ERR_CODE code /*error code */
170
+ ) {
171
+ ESTRIP_DESC *strip = (ESTRIP_DESC *) shm.shm_mem;
172
+ /*strip info */
173
+ ETEXT_DESC *monitor = (ETEXT_DESC *) shm.shm_mem;
174
+ /*progress monitor */
175
+
176
+ switch (ocr_state) {
177
+ case OCS_UNINIT: /*uninitialized */
178
+ case OCS_DEAD: /*uninitialized */
179
+ return; /*can't do anything else */
180
+ case OCS_SETUP_SHM: /*shm setup done */
181
+ if (font_count < 1)
182
+ font_count = 1;
183
+ ocr_setup_startinfo_ansi (-code, LANGE_NONE, "", "");
184
+ /*report error */
185
+ break;
186
+ case OCS_SETUP_INFO: /*startinfo sent */
187
+ if (ocr_get_first_image_strip () == NULL)
188
+ break; /*disconnected */
189
+ case OCS_READING_STRIPS: /*read first but more to come */
190
+ strip->x_size = -code; /*report error */
191
+ release_ocr(); /*send ack */
192
+ release_mutex();
193
+ break;
194
+ case OCS_READ_STRIPS: /*read all but no monitor yet */
195
+ monitor->count = 0; /*chars in this buffer(-1) */
196
+ monitor->progress = 0; /*percent complete increasing (0-100) */
197
+ /*text not complete */
198
+ monitor->more_to_come = FALSE;
199
+ monitor->ocr_alive = TRUE; /*ocr sets to 1, hp 0 */
200
+ monitor->err_code = -code; /*report error */
201
+ monitor->cancel = FALSE; /*0=continue, 1=cancel */
202
+ release_ocr(); /*send ack */
203
+ break;
204
+ case OCS_RECOGNIZING: /*OCR incomplete */
205
+ case OCS_SENDING_TEXT: /*sent buffer but more to come */
206
+ monitor->err_code = -code; /*report error */
207
+ release_ocr(); /*send ack */
208
+ }
209
+ ocr_internal_shutdown(); /*get ready for exit */
210
+ }
211
+
212
+
213
+ /**********************************************************************
214
+ * ocr_append_fontinfo
215
+ *
216
+ * Initialize one of the font descriptors.
217
+ **********************************************************************/
218
+
219
+ inT16 ocr_append_fontinfo( /*put info into shm */
220
+ uinT16 language, /*default language */
221
+ uinT8 font_family, /*serif/not, fixed/not */
222
+ uinT8 char_set, /*character set standard */
223
+ uinT8 pitch, /*fixed or prop */
224
+ const char *name /*plain ascii name */
225
+ ) {
226
+ EOCR_DESC *desc; /*ocr engine info */
227
+ int index; /*char index */
228
+ inT32 font_index; /*which font */
229
+
230
+ if (ocr_state != OCS_SETUP_SHM) {
231
+ ocr_error(OCR_ERR_BAD_STATE);
232
+ return OCR_API_BAD_STATE; /*incorrect state */
233
+ }
234
+
235
+ /*turn to right type */
236
+ desc = (EOCR_DESC *) shm.shm_mem;
237
+ if (font_count >
238
+ (inT32) ((shm.shm_size - sizeof (EOCR_DESC)) / sizeof (EFONT_DESC)))
239
+ return OCR_API_NO_MEM; /*insufficient space */
240
+ font_index = font_count++; /*add a font */
241
+ /*setup structure */
242
+ desc->fonts[font_index].language = language;
243
+ /*setup structure */
244
+ desc->fonts[font_index].font_family = font_family;
245
+ /*setup structure */
246
+ desc->fonts[font_index].char_set = char_set;
247
+ /*setup structure */
248
+ desc->fonts[font_index].pitch = pitch;
249
+ if (name != NULL) {
250
+ for (index = 0; index < MAX_FONT_NAME && name[index] != 0; index++)
251
+ desc->fonts[font_index].name[index] = name[index];
252
+ }
253
+ else
254
+ index = 0;
255
+ desc->fonts[font_index].name[index] = 0;
256
+ return OKAY;
257
+ }
258
+
259
+
260
+ /**********************************************************************
261
+ * ocr_setup_startinfo
262
+ *
263
+ * Setup the info on the OCR engine. Uses 16 bit chars to name the
264
+ * engine.
265
+ **********************************************************************/
266
+
267
+ inT16 ocr_setup_startinfo( /*put info into shm */
268
+ inT32 protocol, /*interface version */
269
+ uinT16 language, /*default language */
270
+ const uinT16 *name, /*name of engine */
271
+ const uinT16 *version /*version of engine */
272
+ ) {
273
+ EOCR_DESC *desc; /*ocr engine info */
274
+ int index; /*char index */
275
+ inT16 result; /*from open */
276
+
277
+ if (ocr_state != OCS_SETUP_SHM || font_count < 1) {
278
+ ocr_error(OCR_ERR_BAD_STATE);
279
+ return OCR_API_BAD_STATE; /*incorrect state */
280
+ }
281
+
282
+ /*turn to right type */
283
+ desc = (EOCR_DESC *) shm.shm_mem;
284
+ desc->protocol = protocol; /*setup structure */
285
+ desc->font_count = font_count;
286
+ desc->language = language;
287
+ for (index = 0; index < MAX_OCR_NAME && name[index] != 0; index++)
288
+ desc->name[index] = name[index];
289
+ desc->name[index] = 0;
290
+ for (index = 0; index < MAX_OCR_VERSION && version[index] != 0; index++)
291
+ desc->version[index] = version[index];
292
+ desc->version[index] = 0;
293
+
294
+ result = release_ocr ();
295
+ if (result != OKAY)
296
+ return result;
297
+ ocr_state = OCS_SETUP_INFO; /*record state */
298
+ return OKAY;
299
+ }
300
+
301
+
302
+ /**********************************************************************
303
+ * ocr_setup_startinfo_ansi
304
+ *
305
+ * Setup the info on the OCR engine. Uses 8 bit chars to name the
306
+ * engine.
307
+ **********************************************************************/
308
+
309
+ inT16 ocr_setup_startinfo_ansi( /*put info into shm */
310
+ uinT32 protocol, /*interface version */
311
+ uinT16 language, /*default language */
312
+ const char *name, /*name of engine */
313
+ const char *version /*version of engine */
314
+ ) {
315
+ EOCR_DESC *desc; /*ocr engine info */
316
+ int index; /*char index */
317
+ inT16 result; /*from open */
318
+
319
+ if (ocr_state != OCS_SETUP_SHM || font_count < 1) {
320
+ ocr_error(OCR_ERR_BAD_STATE);
321
+ return OCR_API_BAD_STATE; /*incorrect state */
322
+ }
323
+
324
+ /*turn to right type */
325
+ desc = (EOCR_DESC *) shm.shm_mem;
326
+ desc->protocol = protocol; /*setup structure */
327
+ desc->font_count = font_count;
328
+ desc->language = language;
329
+ for (index = 0; index < MAX_OCR_NAME && name[index] != 0; index++)
330
+ desc->name[index] = name[index];
331
+ desc->name[index] = 0;
332
+ for (index = 0; index < MAX_OCR_VERSION && version[index] != 0; index++)
333
+ desc->version[index] = version[index];
334
+ desc->version[index] = 0;
335
+
336
+ result = release_ocr ();
337
+ if (result != OKAY)
338
+ return result;
339
+ ocr_state = OCS_SETUP_INFO; /*record state */
340
+ return OKAY;
341
+ }
342
+
343
+
344
+ /**********************************************************************
345
+ * ocr_get_first_image_strip
346
+ *
347
+ * Wait for the master to send the first image strip and return a
348
+ * pointer to it. The result is NULL if it is time to exit.
349
+ **********************************************************************/
350
+
351
+ ESTRIP_DESC *ocr_get_first_image_strip() { /*get image strip */
352
+ ESTRIP_DESC *strip; /*strip info */
353
+ inT16 result; /*of wait/release */
354
+
355
+ if (ocr_state != OCS_SETUP_INFO) {
356
+ tprintf ("Bad state reading strip");
357
+ ocr_error(OCR_ERR_BAD_STATE);
358
+ return NULL; /*incorrect state */
359
+ }
360
+
361
+ /*strip info */
362
+ strip = (ESTRIP_DESC *) shm.shm_mem;
363
+ lines_read = 0;
364
+
365
+ result = wait_for_mutex ();
366
+ if (result != OKAY) {
367
+ tprintf ("Mutax wait failed reading strip");
368
+ return NULL; /*HP dead */
369
+ }
370
+ result = release_mutex ();
371
+ if (result != OKAY) {
372
+ tprintf ("Mutax release failed reading strip");
373
+ return NULL; /*HP dead */
374
+ }
375
+ result = wait_for_hp (READIM_TIMEOUT);
376
+ if (result != OKAY) {
377
+ tprintf ("Wait for HP failed reading strip");
378
+ return NULL; /*HP dead */
379
+ }
380
+ lines_read = strip->strip_size;/*lines read so far */
381
+ if (lines_read < strip->y_size)
382
+ /*record state */
383
+ ocr_state = OCS_READING_STRIPS;
384
+ else
385
+ ocr_state = OCS_READ_STRIPS;
386
+ if (strip->x_size == 0 || strip->y_size == 0)
387
+ return NULL; /*end of job */
388
+
389
+ return strip;
390
+ }
391
+
392
+
393
+ /**********************************************************************
394
+ * ocr_get_next_image_strip
395
+ *
396
+ * Wait for the master to send the next image strip and return a
397
+ * pointer to it. The result is NULL if it is time to exit.
398
+ **********************************************************************/
399
+
400
+ ESTRIP_DESC *ocr_get_next_image_strip() { /*get image strip */
401
+ ESTRIP_DESC *strip; /*strip info */
402
+ inT16 result; /*of wait/release */
403
+
404
+ if (ocr_state != OCS_READING_STRIPS) {
405
+ ocr_error(OCR_ERR_BAD_STATE);
406
+ return NULL; /*incorrect state */
407
+ }
408
+
409
+ /*strip info */
410
+ strip = (ESTRIP_DESC *) shm.shm_mem;
411
+ result = release_ocr ();
412
+ if (result != OKAY)
413
+ return NULL; /*HP dead */
414
+ result = wait_for_hp (READIM_TIMEOUT);
415
+ if (result != OKAY)
416
+ return NULL; /*HP dead */
417
+ /*lines read so far */
418
+ lines_read += strip->strip_size;
419
+ if (lines_read < strip->y_size)
420
+ /*record state */
421
+ ocr_state = OCS_READING_STRIPS;
422
+ else
423
+ ocr_state = OCS_READ_STRIPS;
424
+
425
+ return strip;
426
+ }
427
+
428
+
429
+ /**********************************************************************
430
+ * ocr_setup_monitor
431
+ *
432
+ * Setup the progress monitor. Call before starting the recognize task.
433
+ **********************************************************************/
434
+
435
+ ETEXT_DESC *ocr_setup_monitor() { /*setup monitor */
436
+ ETEXT_DESC *monitor; /*progress monitor */
437
+
438
+ /*text info */
439
+ monitor = (ETEXT_DESC *) shm.shm_mem;
440
+ monitor->count = 0; /*chars in this buffer(-1) */
441
+ monitor->progress = 0; /*percent complete increasing (0-100) */
442
+ monitor->more_to_come = TRUE; /*text not complete */
443
+ monitor->ocr_alive = TRUE; /*ocr sets to 1, hp 0 */
444
+ monitor->err_code = 0; /*used by ocr_error */
445
+ monitor->cancel = FALSE; /*0=continue, 1=cancel */
446
+
447
+
448
+ //by jetsoft
449
+ //the sem functions are old and were meant for an hp product
450
+ // if (release_ocr () != OKAY)
451
+ // return NULL; /*release failed */
452
+
453
+ ocr_state = OCS_RECOGNIZING; /*record state */
454
+ return monitor;
455
+ }
456
+
457
+
458
+ /**********************************************************************
459
+ * ocr_char_space
460
+ *
461
+ * Return the number of chars that can be fitted into the buffer.
462
+ **********************************************************************/
463
+
464
+ inT32 ocr_char_space() { /*put char into shm */
465
+ ETEXT_DESC *buf; /*text buffer */
466
+ int result;
467
+
468
+ /*progress info */
469
+ buf = (ETEXT_DESC *) shm.shm_mem;
470
+ if (buf == NULL)
471
+ return 0;
472
+
473
+ result =
474
+ (shm.shm_size - sizeof (ETEXT_DESC)) / sizeof (EANYCODE_CHAR) -
475
+ buf->count + 1;
476
+
477
+ // while (buf->hp_alive==-1)
478
+ // Sleep(50); /*wait for HP*/
479
+
480
+ return result;
481
+ }
482
+
483
+
484
+ /**********************************************************************
485
+ * ocr_append_char
486
+ *
487
+ * Add a character to the output. Returns OKAY if successful, OCR_API_NO_MEM
488
+ * if there was insufficient room in the buffer.
489
+ **********************************************************************/
490
+
491
+ inT16 ocr_append_char( /*put char into shm */
492
+ uinT16 char_code, /*character itself */
493
+ inT16 left, /*of char (-1) */
494
+ inT16 right, /*of char (-1) */
495
+ inT16 top, /*of char (-1) */
496
+ inT16 bottom, /*of char (-1) */
497
+ inT16 font_index, /*what font (-1) */
498
+ uinT8 confidence, /*0=perfect, 100=reject (0/100) */
499
+ uinT8 point_size, /*of char, 72=i inch, (10) */
500
+ inT8 blanks, /*no of spaces before this char (1) */
501
+ uinT8 enhancement, /*char enhancement (0) */
502
+ OCR_CHAR_DIRECTION text_dir, /*rendering direction (OCR_CDIR_RIGHT_LEFT) */
503
+ OCR_LINE_DIRECTION line_dir, /*line rendering direction (OCR_LDIR_DOWN_RIGHT) */
504
+ OCR_NEWLINE_TYPE nl_type /*type of newline (if any) (OCR_NL_NONE) */
505
+ ) {
506
+ ETEXT_DESC *buf; /*text buffer */
507
+ int index; /*char index */
508
+ inT16 result; /*of callback */
509
+
510
+ if (ocr_state != OCS_RECOGNIZING && ocr_state != OCS_SENDING_TEXT) {
511
+ ocr_error(OCR_ERR_BAD_STATE);
512
+ return OCR_API_BAD_STATE; /*incorrect state */
513
+ }
514
+
515
+ if (char_code == ' ' || char_code == '\n' || char_code == '\r'
516
+ || char_code == '\t')
517
+ return OCR_API_BAD_CHAR; /*illegal char */
518
+
519
+ /*progress info */
520
+ buf = (ETEXT_DESC *) shm.shm_mem;
521
+
522
+ result =
523
+ (shm.shm_size - sizeof (ETEXT_DESC)) / sizeof (EANYCODE_CHAR) -
524
+ buf->count;
525
+ if (result < 1)
526
+ return OCR_API_NO_MEM; /*insufficient room */
527
+
528
+ index = buf->count++; /*count of chars */
529
+ /*setup structure */
530
+ buf->text[index].char_code = char_code;
531
+ buf->text[index].left = left; /*setup structure */
532
+ buf->text[index].right = right;/*setup structure */
533
+ buf->text[index].top = top; /*setup structure */
534
+ /*setup structure */
535
+ buf->text[index].bottom = bottom;
536
+ /*setup structure */
537
+ buf->text[index].font_index = font_index;
538
+ /*setup structure */
539
+ buf->text[index].confidence = confidence;
540
+ /*setup structure */
541
+ buf->text[index].point_size = point_size;
542
+ /*setup structure */
543
+ buf->text[index].blanks = blanks;
544
+ if (nl_type == OCR_NL_NONE) {
545
+ if (text_dir == OCR_CDIR_TOP_BOTTOM || text_dir == OCR_CDIR_BOTTOM_TOP)
546
+ buf->text[index].formatting = (text_dir << 5) | 128;
547
+ /*setup structure */
548
+ else
549
+ /*setup structure */
550
+ buf->text[index].formatting = text_dir << 5;
551
+ }
552
+ else {
553
+ buf->text[index].formatting = (nl_type << 6) | (line_dir << 5);
554
+ /*setup structure */
555
+ }
556
+ buf->text[index].formatting |= enhancement & (~EUC_FORMAT_MASK);
557
+ return OKAY;
558
+ }
559
+
560
+
561
+ /**********************************************************************
562
+ * ocr_send_text
563
+ *
564
+ * Send the text to the host and wait for the ack.
565
+ * Use this function after a sequence of ocr_append_char calls to
566
+ * actually sent the text to the master process.
567
+ * Set more to come TRUE if there is more text in this page, FALSE
568
+ * if the OCR engine is now ready to receive another image.
569
+ **********************************************************************/
570
+
571
+ inT16 ocr_send_text( /*send shm */
572
+ BOOL8 more_to_come /*any text left */
573
+ ) {
574
+ ETEXT_DESC *buf; /*text buffer */
575
+
576
+ if (ocr_state != OCS_RECOGNIZING && ocr_state != OCS_SENDING_TEXT) {
577
+ ocr_error(OCR_ERR_BAD_STATE);
578
+ return OCR_API_BAD_STATE; /*incorrect state */
579
+ }
580
+
581
+ /*progress info */
582
+ buf = (ETEXT_DESC *) shm.shm_mem;
583
+
584
+ /*setup structure */
585
+ buf->more_to_come = more_to_come;
586
+ if (more_to_come) {
587
+ if ((buf->text[buf->count - 1].formatting >> 6) != OCR_NL_NEWLINE
588
+ && (buf->text[buf->count - 1].formatting >> 6) != OCR_NL_NEWPARA) {
589
+ /*force line end */
590
+ buf->text[buf->count - 1].formatting &= 63;
591
+ buf->text[buf->count - 1].formatting |= OCR_NL_NEWLINE << 6;
592
+ }
593
+ }
594
+ else {
595
+ if (buf->count < 1)
596
+ ocr_append_char ('~', -1, -1, -1, -1, 0, 100, 10, 0,
597
+ 0, OCR_CDIR_RIGHT_LEFT, OCR_LDIR_DOWN_RIGHT,
598
+ OCR_NL_NEWPARA);
599
+ /*dummy character */
600
+ else if ((buf->text[buf->count - 1].formatting >> 6) != OCR_NL_NEWPARA) {
601
+ /*force para end */
602
+ buf->text[buf->count - 1].formatting &= 63;
603
+ buf->text[buf->count - 1].formatting |= OCR_NL_NEWPARA << 6;
604
+ }
605
+ }
606
+
607
+ if (release_ocr () != OKAY)
608
+ return HPERR; /*release failed */
609
+ if (wait_for_hp (READTEXT_TIMEOUT) != OKAY)
610
+ return HPERR;
611
+ if (more_to_come) {
612
+ buf->count = 0; /*setup structure */
613
+ ocr_state = OCS_SENDING_TEXT;/*record state */
614
+ }
615
+ else
616
+ ocr_state = OCS_SETUP_INFO; /*record state */
617
+ return OKAY;
618
+ }
619
+
620
+
621
+ /**********************************************************************
622
+ * ocr_shutdown
623
+ *
624
+ * Closedown communications with the HP side and free up handles.
625
+ **********************************************************************/
626
+
627
+ inT16 ocr_shutdown() { /*closedown */
628
+ #ifdef __MAC__
629
+ shm.OCRProcess.lowLongOfPSN = kNoProcess;
630
+ shm.OCRProcess.highLongOfPSN = 0;
631
+ #endif
632
+ ocr_error(OCR_ERR_CLEAN_EXIT); /*signal exit */
633
+
634
+ return OKAY;
635
+ }
636
+
637
+
638
+ /**********************************************************************
639
+ * ocr_internal_shutdown
640
+ *
641
+ * Free up handles or whatever to clean up without attempting to communicate.
642
+ **********************************************************************/
643
+
644
+ inT16 ocr_internal_shutdown() { /*closedown */
645
+ ocr_state = OCS_DEAD; /*record state */
646
+ #ifdef __MSW32__
647
+ if (shm.shm_mem != NULL) {
648
+ UnmapViewOfFile (shm.shm_mem);
649
+ CloseHandle (shm.shm_hand); /*no longer used */
650
+ CloseHandle (shm.mutex); /*release handles */
651
+ CloseHandle (shm.ocr_sem);
652
+ CloseHandle (shm.hp_sem);
653
+ shm.shm_mem = NULL;
654
+ }
655
+ #elif defined (__MAC__)
656
+ shm.OCRProcess.lowLongOfPSN = kNoProcess;
657
+ shm.OCRProcess.highLongOfPSN = 0;
658
+ #endif
659
+ return OKAY;
660
+ }
661
+
662
+
663
+ /**********************************************************************
664
+ * wait_for_mutex
665
+ *
666
+ * Wait for the HP side to release its mutex.
667
+ * The return value is HPERR if the HP side has terminated.
668
+ **********************************************************************/
669
+
670
+ inT16 wait_for_mutex() { /*wait for HP to be ready */
671
+ inT16 result = HPERR; /*return code */
672
+ #if defined (__MSW32__) || defined (__MAC__)
673
+ result = WaitForSingleObject (shm.mutex, (unsigned long) -1)
674
+ /*wait for thread to move */
675
+ /*bad if timeout */
676
+ == WAIT_OBJECT_0 ? OKAY : HPERR;
677
+ #endif
678
+ if (result != OKAY)
679
+ ocr_internal_shutdown();
680
+ return result;
681
+ }
682
+
683
+
684
+ /**********************************************************************
685
+ * wait_for_hp
686
+ *
687
+ * Wait for the HP side to release its semaphore.
688
+ * The return value is HPERR if the timeout (in seconds) elapsed.
689
+ **********************************************************************/
690
+
691
+ inT16 wait_for_hp( /*wait for semaphore */
692
+ inT32 timeout /*in seconds */
693
+ ) {
694
+ inT16 result = HPERR; /*return code */
695
+ #if defined (__MSW32__) || defined (__MAC__)
696
+ /*wait for thread to move */
697
+ result = WaitForSingleObject (shm.hp_sem, timeout * TICKS)
698
+ /*bad if timeout */
699
+ == WAIT_OBJECT_0 ? OKAY : HPERR;
700
+ #endif
701
+ if (result != OKAY)
702
+ ocr_internal_shutdown();
703
+ return result;
704
+ }
705
+
706
+
707
+ /**********************************************************************
708
+ * release_mutex
709
+ *
710
+ * Release the HP mutex.
711
+ * The return value is OKAY if the call succeeds.
712
+ **********************************************************************/
713
+
714
+ inT16 release_mutex() { /*release mutex */
715
+ inT16 result = HPERR; /*return code */
716
+ #ifdef __MSW32__
717
+ /*release it */
718
+ result = ReleaseMutex (shm.mutex) ? OKAY : HPERR;
719
+ #elif defined (__MAC__)
720
+ /*release it */
721
+ result = ReleaseSemaphore (shm.mutex) ? OKAY : HPERR;
722
+ #endif
723
+ if (result != OKAY)
724
+ ocr_internal_shutdown();
725
+ return result;
726
+ }
727
+
728
+
729
+ /**********************************************************************
730
+ * release_ocr
731
+ *
732
+ * Release the OCR semaphore.
733
+ * The return value is OKAY if the call succeeds.
734
+ **********************************************************************/
735
+
736
+ inT16 release_ocr() { /*release semaphore */
737
+ inT32 timeout; //time allowed
738
+
739
+ timeout = RELEASE_TIMEOUT * TICKS;
740
+ #ifdef __MSW32__
741
+
742
+ //jetsoft
743
+ // this stuff is old and no longer applies
744
+
745
+ return OKAY;
746
+ //
747
+
748
+ BOOL result = 0; //of release
749
+ do {
750
+ //release it
751
+ result = ReleaseSemaphore (shm.ocr_sem, 1, NULL);
752
+ if (result == FALSE) {
753
+ timeout -= 50;
754
+ Sleep (50);
755
+ }
756
+ }
757
+ while (result == FALSE && timeout > 0);
758
+ if (!result)
759
+ ocr_internal_shutdown();
760
+ return OKAY;
761
+ #elif defined (__MAC__)
762
+ inT16 result = HPERR; /*return code */
763
+ /*release it */
764
+ result = ReleaseSemaphore (shm.ocr_sem) ? OKAY : HPERR;
765
+
766
+ if (result != OKAY)
767
+ ocr_internal_shutdown();
768
+ return result;
769
+ #elif defined (__UNIX__)
770
+ return 0;
771
+ #endif
772
+ }