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,723 @@
1
+ /**********************************************************************
2
+ * File: imgtiff.c (Formerly tiff.c)
3
+ * Description: Max format image reader/writer.
4
+ * Author: Ray Smith
5
+ * Created: Mon Jun 11 14:00:21 BST 1990
6
+ *
7
+ * (C) Copyright 1990, Hewlett-Packard Ltd.
8
+ ** Licensed under the Apache License, Version 2.0 (the "License");
9
+ ** you may not use this file except in compliance with the License.
10
+ ** You may obtain a copy of the License at
11
+ ** http://www.apache.org/licenses/LICENSE-2.0
12
+ ** Unless required by applicable law or agreed to in writing, software
13
+ ** distributed under the License is distributed on an "AS IS" BASIS,
14
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ ** See the License for the specific language governing permissions and
16
+ ** limitations under the License.
17
+ *
18
+ **********************************************************************/
19
+
20
+ #include "mfcpch.h" //precompiled headers
21
+ #ifdef __MSW32__
22
+ #include <io.h>
23
+ #else
24
+ #include <unistd.h>
25
+ #endif
26
+
27
+ /*
28
+ ** Include automatically generated configuration file if running autoconf
29
+ */
30
+ #ifdef HAVE_CONFIG_H
31
+ #include "config_auto.h"
32
+ #if defined(MOTOROLA_BYTE_ORDER) || defined(WORDS_BIGENDIAN)
33
+ #define __MOTO__ // Big-endian.
34
+ #endif
35
+ #endif
36
+
37
+ #include "fileerr.h"
38
+ #include "imgerrs.h"
39
+ #include "img.h"
40
+ #include "bitstrm.h"
41
+ #include "tprintf.h"
42
+ #include "serialis.h"
43
+ #include "imgtiff.h"
44
+
45
+ #define INTEL 0x4949
46
+ #define MOTO 0x4d4d
47
+
48
+ /*************************************************************************
49
+ * NOTE ON BIG-ENDIAN vs LITTLE-ENDIAN
50
+ *
51
+ * Intel machines store numbers with LSByte in the left position.
52
+ * Motorola (and PA_RISC) machines use the opposite byte ordering.
53
+ *
54
+ * This code is written so that:
55
+ * a) it will compile and run on EITHER machine type AND
56
+ * b) the program (on either machine) will process tiff file written in either
57
+ * Motorola or Intel format.
58
+ *
59
+ * The code is compiled with a __NATIVE__ define which is either MOTO or INTEL.
60
+ * MOTO and INTEL are defined (above) to be the value of the first two bytes of
61
+ * a tiff file in either format. (This identifies the filetype).
62
+ *
63
+ * Subsequent reads and writes normally just reverse the byte order if the
64
+ * machine type (__NATIVE__) is not equal to the filetype determined from the
65
+ * first two bytes of the tiff file.
66
+ *
67
+ * A special case is the "value" field of the tag structure. This can contain
68
+ * EITHER a 16bit or a 32bit value. According to the "type" field. The 4 cases
69
+ * of machine type / file type combinations need to be treated differently in
70
+ * the case of 16 bit values
71
+ *************************************************************************/
72
+
73
+ #define ENTRIES 19 /*no of entries */
74
+ #define START 8 /*start of tag table */
75
+
76
+ typedef struct
77
+ {
78
+ uinT16 tag; //entry tag
79
+ uinT16 type;
80
+ uinT32 length;
81
+ inT32 value;
82
+ } TIFFENTRY; //tiff tag entry
83
+
84
+ typedef struct myrational
85
+ {
86
+ inT32 top;
87
+ inT32 bottom;
88
+ } MYRATIONAL; //type 5
89
+
90
+ //statics for the run length codes
91
+ #define EOL_CODE 0x800
92
+ #define EOL_MASK 0xfff
93
+ #define EOL_LENGTH 12 //12 bits
94
+ #define SHORT_CODE_SIZE 64 //no of short codes
95
+ #define LONG_CODE_SIZE 40 //no of long codes
96
+
97
+ static uinT16 short_white_codes[SHORT_CODE_SIZE] = {
98
+ 0xac, 0x38, 0xe, 0x1, 0xd, 0x3, 0x7, 0xf,
99
+ 0x19, 0x5, 0x1c, 0x2, 0x4, 0x30, 0xb, 0x2b,
100
+ 0x15, 0x35, 0x72, 0x18, 0x8, 0x74, 0x60, 0x10,
101
+ 0xa, 0x6a, 0x64, 0x12, 0xc, 0x40, 0xc0, 0x58,
102
+ 0xd8, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, 0x14,
103
+ 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x20, 0xa0, 0x50,
104
+ 0xd0, 0x4a, 0xca, 0x2a, 0xaa, 0x24, 0xa4, 0x1a,
105
+ 0x9a, 0x5a, 0xda, 0x52, 0xd2, 0x4c, 0xcc, 0x2c
106
+ };
107
+ static uinT8 short_white_lengths[SHORT_CODE_SIZE] = {
108
+ 8, 6, 4, 4, 4, 4, 4, 4,
109
+ 5, 5, 5, 5, 6, 6, 6, 6,
110
+ 6, 6, 7, 7, 7, 7, 7, 7,
111
+ 7, 7, 7, 7, 7, 8, 8, 8,
112
+ 8, 8, 8, 8, 8, 8, 8, 8,
113
+ 8, 8, 8, 8, 8, 8, 8, 8,
114
+ 8, 8, 8, 8, 8, 8, 8, 8,
115
+ 8, 8, 8, 8, 8, 8, 8, 8
116
+ };
117
+ static uinT16 short_black_codes[SHORT_CODE_SIZE] = {
118
+ 0x3b0, 0x2, 0x3, 0x1, 0x6, 0xc, 0x4, 0x18,
119
+ 0x28, 0x8, 0x10, 0x50, 0x70, 0x20, 0xe0, 0x30,
120
+ 0x3a0, 0x60, 0x40, 0x730, 0xb0, 0x1b0, 0x760, 0xa0,
121
+ 0x740, 0xc0, 0x530, 0xd30,
122
+ 0x330, 0xb30, 0x160, 0x960,
123
+ 0x560, 0xd60, 0x4b0, 0xcb0,
124
+ 0x2b0, 0xab0, 0x6b0, 0xeb0,
125
+ 0x360, 0xb60, 0x5b0, 0xdb0,
126
+ 0x2a0, 0xaa0, 0x6a0, 0xea0,
127
+ 0x260, 0xa60, 0x4a0, 0xca0,
128
+ 0x240, 0xec0, 0x1c0, 0xe40,
129
+ 0x140, 0x1a0, 0x9a0, 0xd40,
130
+ 0x340, 0x5a0, 0x660, 0xe60
131
+ };
132
+ static uinT8 short_black_lengths[SHORT_CODE_SIZE] = {
133
+ 10, 3, 2, 2, 3, 4, 4, 5,
134
+ 6, 6, 7, 7, 7, 8, 8, 9,
135
+ 10, 10, 10, 11, 11, 11, 11, 11,
136
+ 11, 11, 12, 12, 12, 12, 12, 12,
137
+ 12, 12, 12, 12, 12, 12, 12, 12,
138
+ 12, 12, 12, 12, 12, 12, 12, 12,
139
+ 12, 12, 12, 12, 12, 12, 12, 12,
140
+ 12, 12, 12, 12, 12, 12, 12, 12
141
+ };
142
+ static uinT16 long_white_codes[LONG_CODE_SIZE] = {
143
+ 0x1b, 0x9, 0x3a, 0x76, 0x6c, 0xec, 0x26, 0xa6,
144
+ 0x16, 0xe6, 0x66, 0x166, 0x96, 0x196, 0x56, 0x156,
145
+ 0xd6, 0x1d6, 0x36, 0x136, 0xb6, 0x1b6, 0x32, 0x132,
146
+ 0xb2, 0x6, 0x1b2,
147
+ 0x80, 0x180, 0x580, 0x480, 0xc80,
148
+ 0x280, 0xa80, 0x680, 0xe80, 0x380, 0xb80, 0x780, 0xf80
149
+ };
150
+ static uinT8 long_white_lengths[LONG_CODE_SIZE] = {
151
+ 5, 5, 6, 7, 8, 8, 8, 8,
152
+ 8, 8, 9, 9, 9, 9, 9, 9,
153
+ 9, 9, 9, 9, 9, 9, 9, 9,
154
+ 9, 6, 9, 11, 11, 11, 12, 12,
155
+ 12, 12, 12, 12, 12, 12, 12, 12
156
+ };
157
+ static uinT16 long_black_codes[LONG_CODE_SIZE] = {
158
+ 0x3c0, 0x130, 0x930, 0xda0,
159
+ 0xcc0, 0x2c0, 0xac0, 0x6c0,
160
+ 0x16c0, 0xa40, 0x1a40, 0x640,
161
+ 0x1640, 0x9c0, 0x19c0, 0x5c0,
162
+ 0x15c0, 0xdc0, 0x1dc0, 0x940,
163
+ 0x1940, 0x540, 0x1540, 0xb40,
164
+ 0x1b40, 0x4c0, 0x14c0,
165
+ 0x80, 0x180, 0x580, 0x480, 0xc80,
166
+ 0x280, 0xa80, 0x680, 0xe80, 0x380, 0xb80, 0x780, 0xf80
167
+ };
168
+ static uinT8 long_black_lengths[LONG_CODE_SIZE] = {
169
+ 10, 12, 12, 12, 12, 12, 12, 13,
170
+ 13, 13, 13, 13, 13, 13, 13, 13,
171
+ 13, 13, 13, 13, 13, 13, 13, 13,
172
+ 13, 13, 13, 11, 11, 11, 12, 12,
173
+ 12, 12, 12, 12, 12, 12, 12, 12
174
+ };
175
+
176
+ /**********************************************************************
177
+ * open_tif_image
178
+ *
179
+ * Read the header of a tif format image and prepare to read the rest.
180
+ **********************************************************************/
181
+
182
+ inT8 open_tif_image( //read header
183
+ int fd, //file to read
184
+ inT32 *xsize, //size of image
185
+ inT32 *ysize,
186
+ inT8 *bpp, //bits per pixel
187
+ inT8 *photo, //interpretation
188
+ inT32 *res //resolution
189
+ ) {
190
+ inT16 filetype;
191
+ inT32 start; //start of tiff directory
192
+ inT16 entries; //no of tiff entries
193
+ inT32 imagestart; //location of image in file
194
+ inT32 resoffset; //location of res
195
+ TIFFENTRY tiffentry; //tag table entry
196
+ BOOL8 compressed; //compression control
197
+ MYRATIONAL resinfo; //resolution
198
+ BOOL8 strips = false; //if in strips
199
+
200
+ *xsize = -1; //illegal values
201
+ *ysize = -1;
202
+ *bpp = -1;
203
+ *res = -1;
204
+ resoffset = -1;
205
+ if (read (fd, (char *) &filetype, sizeof filetype) != sizeof filetype
206
+ || (filetype != INTEL && filetype != MOTO)) {
207
+ BADIMAGEFORMAT.error ("read_tif_image", TESSLOG, "Filetype");
208
+ return -1;
209
+ }
210
+ lseek (fd, 4L, 0);
211
+ if (read (fd, (char *) &start, sizeof start) != sizeof start) {
212
+ READFAILED.error ("read_tif_image", TESSLOG, "Start of tag table");
213
+ return -1;
214
+ }
215
+
216
+ if (filetype != __NATIVE__)
217
+ start = reverse32 (start);
218
+ if (start <= 0) {
219
+ BADIMAGEFORMAT.error ("read_tif_image", TESSLOG, "Start of tag table");
220
+ return -1;
221
+ }
222
+ lseek (fd, start, 0);
223
+ if (read (fd, (char *) &entries, sizeof (inT16)) != sizeof (inT16)) {
224
+ BADIMAGEFORMAT.error ("read_tif_image", TESSLOG, "Size of tag table");
225
+ return -1;
226
+ }
227
+ if (filetype != __NATIVE__)
228
+ entries = reverse16 (entries);
229
+ // printf("No of tiff directory entries=%d\n",entries);
230
+ imagestart = 0;
231
+ compressed = FALSE;
232
+ int samples_per_pixel = 1;
233
+ int bits_per_sample = 1;
234
+ for (; entries-- > 0;) {
235
+ if (read (fd, (char *) &tiffentry, sizeof tiffentry) !=
236
+ sizeof tiffentry) {
237
+ BADIMAGEFORMAT.error ("read_tif_image", TESSLOG, "Tag table entry");
238
+ return -1;
239
+ }
240
+ if (filetype != __NATIVE__) {
241
+ tiffentry.type = reverse16 (tiffentry.type);
242
+ tiffentry.tag = reverse16 (tiffentry.tag);
243
+ tiffentry.length = reverse32 (tiffentry.length);
244
+ }
245
+ if (tiffentry.type != 3) { //Full 32bit value
246
+ if (filetype != __NATIVE__)
247
+ tiffentry.value = reverse32 (tiffentry.value);
248
+ }
249
+ else {
250
+ /* A 16bit value in 4 bytes - handle with care. SEE NOTE at start of file */
251
+ if (__NATIVE__ == MOTO) {
252
+ if (filetype == MOTO) //MOTO file on MOTO Machine
253
+ tiffentry.value = tiffentry.value >> 16;
254
+ else //INTEL file on MOTO Machine
255
+ tiffentry.value = reverse32 (tiffentry.value);
256
+ }
257
+ else { //INTEL Machine
258
+ if (filetype == MOTO) //MOTO file on INTEL Machine
259
+ tiffentry.value = reverse16 ((uinT16) tiffentry.value);
260
+ //INTEL file on INTEL Machine NO ACTION NEEDED
261
+ }
262
+ //Clear top 2 MSBytes
263
+ tiffentry.value &= 0x0000ffff;
264
+ }
265
+
266
+ // printf("Tag=%x, Type=%x, Length=%x, value=%x\n",
267
+ // tiffentry.tag,tiffentry.type,tiffentry.length,tiffentry.value);
268
+ switch (tiffentry.tag) {
269
+ case 0x101:
270
+ *ysize = tiffentry.value;
271
+ break;
272
+ case 0x100:
273
+ *xsize = tiffentry.value;
274
+ break;
275
+ case 0x102:
276
+ if (tiffentry.length == 1)
277
+ bits_per_sample = (inT8) tiffentry.value;
278
+ else
279
+ bits_per_sample = 8;
280
+ break;
281
+ case 0x115:
282
+ samples_per_pixel = (inT8) tiffentry.value;
283
+ break;
284
+ case 0x111:
285
+ imagestart = tiffentry.value;
286
+ strips = tiffentry.length > 1;
287
+ break;
288
+ case 0x103:
289
+ if (tiffentry.value == 3) {
290
+ compressed = TRUE;
291
+ }
292
+ else if (tiffentry.value != 1) {
293
+ BADIMAGEFORMAT.error ("read_tif_image", TESSLOG, "Compression");
294
+ return -1;
295
+ }
296
+ break;
297
+ case 0x11a:
298
+ case 0x11b:
299
+ //resolution
300
+ resoffset = tiffentry.value;
301
+ break;
302
+ case 0x106:
303
+ *photo = (inT8) tiffentry.value;
304
+ break;
305
+ } //endswitch
306
+ }
307
+ if (*xsize <= 0 || *ysize <= 0 || imagestart <= 0) {
308
+ BADIMAGEFORMAT.error ("read_tif_image", TESSLOG, "Vital tag");
309
+ return -1;
310
+ }
311
+ tprintf("Image has %d * %d bit%c per pixel, and size (%d,%d)\n",
312
+ bits_per_sample, samples_per_pixel, bits_per_sample == 1 ? ' ' : 's',
313
+ *xsize, *ysize);
314
+ *bpp = bits_per_sample * samples_per_pixel;
315
+ if (resoffset >= 0) {
316
+ lseek (fd, resoffset, 0);
317
+ if (read (fd, (char *) &resinfo, sizeof (resinfo)) != sizeof (resinfo)) {
318
+ READFAILED.error ("read_tif_image", TESSLOG, "Resolution");
319
+ return -1;
320
+ }
321
+ if (filetype != __NATIVE__) {
322
+ resinfo.top = reverse32 (resinfo.top);
323
+ resinfo.bottom = reverse32 (resinfo.bottom);
324
+ }
325
+ *res = resinfo.top / resinfo.bottom;
326
+ tprintf ("Resolution=%d\n", *res);
327
+ }
328
+ lseek (fd, (long) imagestart, 0);
329
+ if (strips) {
330
+ if (read (fd, (char *) &imagestart, sizeof (imagestart)) !=
331
+ sizeof (imagestart)) {
332
+ READFAILED.error ("read_tif_image", TESSLOG, "Strip offset");
333
+ return -1;
334
+ }
335
+ if (filetype != __NATIVE__)
336
+ imagestart = reverse32 (imagestart);
337
+ //indirection
338
+ lseek (fd, (long) imagestart, 0);
339
+ }
340
+ return compressed ? -2 : 0;
341
+ }
342
+
343
+
344
+ /**********************************************************************
345
+ * read_tif_image
346
+ *
347
+ * Read a whole tif image into memory.
348
+ **********************************************************************/
349
+
350
+ inT8 read_tif_image( //read whole image
351
+ int fd, //file to read
352
+ uinT8 *pixels, //pixels of image
353
+ inT32 xsize, //size of image
354
+ inT32 ysize,
355
+ inT8 bpp, //bits per pixel
356
+ inT32 //bytes per line
357
+ ) {
358
+ inT32 xindex; //indices in image
359
+ inT32 yindex;
360
+ inT32 length; //short length
361
+ inT32 biglength; //extender
362
+ uinT8 *lengths; //current lengths
363
+ uinT16 *codes; //current codes
364
+ uinT16 codeword; //current code word
365
+ IMAGELINE imageline; //current line
366
+ IMAGE image; //dummy image
367
+ R_BITSTREAM bits; //read bitstream
368
+ uinT8 colour; //current colour
369
+
370
+ image.capture (pixels, xsize, ysize, bpp);
371
+ codeword = bits.open (fd); //open bitstream
372
+ read_eol(&bits, codeword); //find end of line
373
+ for (yindex = ysize - 1; yindex >= 0; yindex--) {
374
+ imageline.init ();
375
+ colour = TRUE;
376
+ for (xindex = 0; xindex < xsize;) {
377
+ if (colour) {
378
+ lengths = long_white_lengths;
379
+ codes = long_white_codes;
380
+ }
381
+ else {
382
+ lengths = long_black_lengths;
383
+ codes = long_black_codes;
384
+ }
385
+ for (biglength = 0; biglength < LONG_CODE_SIZE
386
+ && (codeword & bits.masks (*lengths))
387
+ != *codes; codes++, lengths++, biglength++);
388
+ if (biglength < LONG_CODE_SIZE) {
389
+ codeword = bits.read_code (*lengths);
390
+ biglength++;
391
+ biglength *= SHORT_CODE_SIZE;
392
+ }
393
+ else
394
+ biglength = 0;
395
+ if (colour) {
396
+ lengths = short_white_lengths;
397
+ codes = short_white_codes;
398
+ }
399
+ else {
400
+ lengths = short_black_lengths;
401
+ codes = short_black_codes;
402
+ }
403
+ for (length = 0; length < SHORT_CODE_SIZE
404
+ && (codeword & bits.masks (*lengths))
405
+ != *codes; codes++, lengths++, length++);
406
+ if (length < SHORT_CODE_SIZE) {
407
+ codeword = bits.read_code (*lengths);
408
+ for (length += biglength; length > 0; length--, xindex++)
409
+ imageline.pixels[xindex] = colour;
410
+ colour = !colour;
411
+ }
412
+ else
413
+ break;
414
+ }
415
+ if (xindex < xsize) {
416
+ tprintf ("%d pixels short on line %d", xsize - xindex, yindex);
417
+ tprintf (", unknown code=%x\n", codeword);
418
+ }
419
+ xindex = read_eol (&bits, codeword);
420
+ if (xindex > 0)
421
+ tprintf ("Discarding %d bits on line %d\n", xindex, yindex);
422
+ image.put_line (0, yindex, xsize, &imageline, 0);
423
+ }
424
+ return 0;
425
+ }
426
+
427
+
428
+ /**********************************************************************
429
+ * read_eol
430
+ *
431
+ * Take bits out of the stream until and end-of-line code is hit.
432
+ **********************************************************************/
433
+
434
+ inT32 read_eol( //read end of line
435
+ R_BITSTREAM *bits, //bitstream to read
436
+ uinT16 &code //current code
437
+ ) {
438
+ BOOL8 anyones; //any 1 bits skipped
439
+ inT32 bitcount; //total bits skipped
440
+
441
+ anyones = FALSE;
442
+ bitcount = 0;
443
+ while ((code & EOL_MASK) != EOL_CODE) {
444
+ if (code & 1)
445
+ anyones = TRUE; //discarded one bit
446
+ bitcount++; //total discarded bits
447
+ code = bits->read_code (1); //take single bits
448
+ }
449
+ //extract EOL code
450
+ code = bits->read_code (EOL_LENGTH);
451
+
452
+ if (!anyones)
453
+ bitcount = 0; //ignore filler bits
454
+ return bitcount;
455
+ }
456
+
457
+
458
+ /**********************************************************************
459
+ * write_moto_tif
460
+ *
461
+ * Write a whole tif format image and close the file.
462
+ **********************************************************************/
463
+
464
+ inT8 write_moto_tif( //write whole image
465
+ int fd, //file to write on
466
+ uinT8 *pixels, //image pixels
467
+ inT32 xsize, //size of image
468
+ inT32 ysize,
469
+ inT8 bpp, //bits per pixel
470
+ inT8 photo,
471
+ inT32 res //resolution
472
+ ) {
473
+ return write_tif_image (fd, pixels, xsize, ysize, bpp, res, MOTO, photo);
474
+ //use moto format
475
+ }
476
+
477
+
478
+ /**********************************************************************
479
+ * write_intel_tif
480
+ *
481
+ * Write a whole tif format image and close the file.
482
+ **********************************************************************/
483
+
484
+ inT8 write_intel_tif( //write whole image
485
+ int fd, //file to write on
486
+ uinT8 *pixels, //image pixels
487
+ inT32 xsize, //size of image
488
+ inT32 ysize,
489
+ inT8 bpp, //bits per pixel
490
+ inT8 photo,
491
+ inT32 res //resolution
492
+ ) {
493
+ return write_tif_image (fd, pixels, xsize, ysize, bpp, res, INTEL, photo);
494
+ //use intel format
495
+ }
496
+
497
+
498
+ /**********************************************************************
499
+ * write_inverse_tif
500
+ *
501
+ * Write a whole tif format image and close the file.
502
+ **********************************************************************/
503
+
504
+ inT8 write_inverse_tif( //write whole image
505
+ int fd, //file to write on
506
+ uinT8 *pixels, //image pixels
507
+ inT32 xsize, //size of image
508
+ inT32 ysize,
509
+ inT8 bpp, //bits per pixel
510
+ inT8 photo,
511
+ inT32 res //resolution
512
+ ) {
513
+ return write_tif_image (fd, pixels, xsize, ysize, bpp, res, INTEL,
514
+ 1 - photo);
515
+ //use intel format
516
+ }
517
+
518
+
519
+ /**********************************************************************
520
+ * write_tif_image
521
+ *
522
+ * Write a whole tif format image and close the file.
523
+ **********************************************************************/
524
+
525
+ inT8 write_tif_image( //write whole image
526
+ int fd, //file to write on
527
+ uinT8 *pixels, //image pixels
528
+ inT32 xsize, //size of image
529
+ inT32 ysize,
530
+ inT8 bpp, //bits per pixel
531
+ inT32 res, //resolution
532
+ inT16 type, //format type
533
+ inT16 photo //metric interp
534
+ ) {
535
+ inT32 size; //line/image size
536
+ inT16 entries; //no of tiff entries
537
+ inT32 start; //start of tag table
538
+ inT32 zero = 0;
539
+ MYRATIONAL resolution; //resolution
540
+ TIFFENTRY entry; //current entry
541
+
542
+ static TIFFENTRY tags[ENTRIES] = {
543
+ {0xfe, 4, 1, 0},
544
+ {0x100, 3, 1, 0},
545
+ {0x101, 3, 1, 0},
546
+ {0x102, 3, 1, 0},
547
+ {0x103, 3, 1, 1},
548
+ {0x106, 3, 1, 1},
549
+ { /*line art */
550
+ 0x107, 3, 1, 1
551
+ },
552
+ {0x10a, 3, 1, 1},
553
+ {
554
+ 0x111, 4, 1, START + ENTRIES * sizeof (TIFFENTRY)
555
+ + sizeof (inT32) + sizeof (short) + sizeof (MYRATIONAL) * 2
556
+ }
557
+ ,
558
+ {0x112, 3, 1, 1}
559
+ ,
560
+ {0x115, 3, 1, 1}
561
+ ,
562
+ {0x116, 4, 1, 0}
563
+ ,
564
+ {0x117, 4, 1, 0}
565
+ ,
566
+ {0x118, 3, 1, 0}
567
+ ,
568
+ {0x119, 3, 1, 1}
569
+ ,
570
+ {
571
+ 0x11a, 5, 1, START + ENTRIES * sizeof (TIFFENTRY)
572
+ + sizeof (inT32) + sizeof (short)
573
+ },
574
+ {
575
+ 0x11b, 5, 1, START + ENTRIES * sizeof (TIFFENTRY)
576
+ + sizeof (inT32) + sizeof (short) + sizeof (MYRATIONAL)
577
+ }
578
+ ,
579
+ {0x11c, 3, 1, 1}
580
+ ,
581
+ {0x128, 3, 1, 2}
582
+ };
583
+
584
+ resolution.top = res;
585
+ resolution.bottom = 1;
586
+ if (write (fd, (char *) &type, sizeof type) != sizeof type
587
+ || (type != INTEL && type != MOTO)) {
588
+ WRITEFAILED.error ("write_tif_image", TESSLOG, "Filetype");
589
+ return -1;
590
+ }
591
+ start = START;
592
+ entries = 0x002a;
593
+ if (type != __NATIVE__)
594
+ entries = reverse16 (entries);
595
+ if (write (fd, (char *) &entries, sizeof entries) != sizeof entries) {
596
+ WRITEFAILED.error ("write_tif_image", TESSLOG, "Version");
597
+ return -1;
598
+ }
599
+ if (type != __NATIVE__)
600
+ start = reverse32 (start);
601
+ if (write (fd, (char *) &start, sizeof start) != sizeof start) {
602
+ WRITEFAILED.error ("write_tif_image", TESSLOG, "Start");
603
+ return -1;
604
+ }
605
+ lseek (fd, (long) START, 0);
606
+ entries = ENTRIES;
607
+ if (type != __NATIVE__)
608
+ entries = reverse16 (entries);
609
+ if (write (fd, (char *) &entries, sizeof entries) != sizeof entries) {
610
+ WRITEFAILED.error ("write_tif_image", TESSLOG, "Entries");
611
+ return -1;
612
+ }
613
+ //line length
614
+ size = COMPUTE_IMAGE_XDIM (xsize, bpp);
615
+ size *= ysize; //total image size
616
+ // if (photo==0)
617
+ // {
618
+ // tags[0].tag=0xfe;
619
+ // tags[0].type=4;
620
+ // tags[0].value=0;
621
+ // }
622
+ // else
623
+ // {
624
+ // tags[0].tag=0xff;
625
+ // tags[0].type=3;
626
+ // tags[0].value=1;
627
+ // }
628
+ tags[1].value = xsize;
629
+ tags[2].value = ysize;
630
+ if (bpp == 24) {
631
+ tags[3].value = 8;
632
+ tags[10].value = 3;
633
+ tags[5].value = 2;
634
+ }
635
+ else {
636
+ tags[3].value = bpp;
637
+ tags[5].value = photo;
638
+ }
639
+ tags[11].value = ysize;
640
+ tags[14].value = (1 << bpp) - 1;
641
+ tags[12].value = size;
642
+ for (entries = 0; entries < ENTRIES; entries++) {
643
+ entry = tags[entries]; //get an entry
644
+ /* NB Convert entry.value BEFORE converting entry.type!!! */
645
+ if (entry.type != 3) { //Full 32bit value
646
+ if (type != __NATIVE__)
647
+ entry.value = reverse32 (entry.value);
648
+ }
649
+ else {
650
+ /* A 16bit value in 4 bytes - handle with care. SEE NOTE at start of file */
651
+ entry.value &= 0x0000ffff; //Ensure top 2 MSBytes clear
652
+ if (__NATIVE__ == MOTO) {
653
+ if (type == MOTO) //MOTO file on MOTO Machine
654
+ entry.value = entry.value << 16;
655
+ else //INTEL file on MOTO Machine
656
+ entry.value = reverse32 (entry.value);
657
+ }
658
+ else { //INTEL Machine
659
+ if (type == MOTO) //MOTO file on INTEL Machine
660
+ entry.value = reverse16 ((uinT16) entry.value);
661
+ //INTEL file on INTEL Machine NO ACTION NEEDED
662
+ }
663
+ }
664
+ if (type != __NATIVE__) {
665
+ entry.tag = reverse16 (entry.tag);
666
+ entry.type = reverse16 (entry.type);
667
+ entry.length = reverse32 (entry.length);
668
+ }
669
+ if (write (fd, (char *) &entry, sizeof (TIFFENTRY)) !=
670
+ sizeof (TIFFENTRY)) {
671
+ WRITEFAILED.error ("write_tif_image", TESSLOG, "Tag Table");
672
+ return -1;
673
+ }
674
+ }
675
+ if (write (fd, (char *) &zero, sizeof zero) != sizeof zero) {
676
+ WRITEFAILED.error ("write_tif_image", TESSLOG, "Tag table Terminator");
677
+ return -1;
678
+ }
679
+ if (type != __NATIVE__) {
680
+ resolution.top = reverse32 (resolution.top);
681
+ resolution.bottom = reverse32 (resolution.bottom);
682
+ }
683
+ if (write (fd, (char *) &resolution, sizeof resolution) != sizeof resolution
684
+ || write (fd, (char *) &resolution,
685
+ sizeof resolution) != sizeof resolution) {
686
+ WRITEFAILED.error ("write_tif_image", TESSLOG, "Resolution");
687
+ return -1;
688
+ }
689
+ if (write (fd, (char *) pixels, (size_t) size) != size) {
690
+ WRITEFAILED.error ("write_tif_image", TESSLOG, "Image");
691
+ return -1;
692
+ }
693
+ close(fd);
694
+ return 0;
695
+ }
696
+
697
+
698
+ /**********************************************************************
699
+ * reverse32
700
+ *
701
+ * Byte swap the 32 bit number between Motorola & Intel format.
702
+ **********************************************************************/
703
+
704
+ //inT32 reverse32( //reverse 32 bit int
705
+ //uinT32 value //value to reverse
706
+ //)
707
+ //{
708
+ // return (value>>24) | (value>>8) & 0xff00
709
+ // | (value<<8) & 0xff0000 | (value<<24);
710
+ //}
711
+
712
+ /**********************************************************************
713
+ * reverse16
714
+ *
715
+ * Byte swap the 16 bit number between Motorola & Intel format.
716
+ **********************************************************************/
717
+
718
+ //inT16 reverse16( //reverse 16 bit int
719
+ //uinT16 value //value to reverse
720
+ //)
721
+ //{
722
+ // return (value>>8) | (value<<8);
723
+ //}