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,1125 @@
1
+ /**********************************************************************
2
+ * File: elst.h (Formerly elist.h)
3
+ * Description: Embedded list module include file.
4
+ * Author: Phil Cheatle
5
+ * Created: Mon Jan 07 08:35:34 GMT 1991
6
+ *
7
+ * (C) Copyright 1991, Hewlett-Packard Ltd.
8
+ ** Licensed under the Apache License, Version 2.0 (the "License");
9
+ ** you may not use this file except in compliance with the License.
10
+ ** You may obtain a copy of the License at
11
+ ** http://www.apache.org/licenses/LICENSE-2.0
12
+ ** Unless required by applicable law or agreed to in writing, software
13
+ ** distributed under the License is distributed on an "AS IS" BASIS,
14
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ ** See the License for the specific language governing permissions and
16
+ ** limitations under the License.
17
+ *
18
+ **********************************************************************/
19
+
20
+ #ifndef ELST_H
21
+ #define ELST_H
22
+
23
+ #include <stdio.h>
24
+ #include "host.h"
25
+ #include "serialis.h"
26
+ #include "lsterr.h"
27
+
28
+ class ELIST_ITERATOR;
29
+
30
+ /**********************************************************************
31
+ This module implements list classes and iterators.
32
+ The following list types and iterators are provided:
33
+
34
+ List type List Class Iterator Class Element Class
35
+ --------- ---------- -------------- -------------
36
+
37
+ Embedded list ELIST
38
+ ELIST_ITERATOR
39
+ ELIST_LINK
40
+ (Single linked)
41
+
42
+ Embedded list ELIST2
43
+ ELIST2_ITERATOR
44
+ ELIST2_LINK
45
+ (Double linked)
46
+
47
+ Cons List CLIST
48
+ CLIST_ITERATOR
49
+ CLIST_LINK
50
+ (Single linked)
51
+
52
+ Cons List CLIST2
53
+ CLIST2_ITERATOR
54
+ CLIST2_LINK
55
+ (Double linked)
56
+
57
+ An embedded list is where the list pointers are provided by a generic class.
58
+ Data types to be listed inherit from the generic class. Data is thus linked
59
+ in only ONE list at any one time.
60
+
61
+ A cons list has a separate structure for a "cons cell". This contains the
62
+ list pointer(s) AND a pointer to the data structure held on the list. A
63
+ structure can be on many cons lists at the same time, and the structure does
64
+ not need to inherit from any generic class in order to be on the list.
65
+
66
+ The implementation of lists is very careful about space and speed overheads.
67
+ This is why many embedded lists are provided. The same concerns mean that
68
+ in-line type coercion is done, rather than use virtual functions. This is
69
+ cumbersome in that each data type to be listed requires its own iterator and
70
+ list class - though macros can gererate these. It also prevents heterogenous
71
+ lists.
72
+ **********************************************************************/
73
+
74
+ /**********************************************************************
75
+ * CLASS - ELIST_LINK
76
+ *
77
+ * Generic link class for singly linked lists with embedded links
78
+ *
79
+ * Note: No destructor - elements are assumed to be destroyed EITHER after
80
+ * they have been extracted from a list OR by the ELIST destructor which
81
+ * walks the list.
82
+ **********************************************************************/
83
+
84
+ class DLLSYM ELIST_LINK
85
+ {
86
+ friend class ELIST_ITERATOR;
87
+ friend class ELIST;
88
+
89
+ ELIST_LINK *next;
90
+
91
+ public:
92
+ ELIST_LINK() {
93
+ next = NULL;
94
+ }
95
+ //constructor
96
+
97
+ ELIST_LINK( //copy constructor
98
+ const ELIST_LINK &) { //dont copy link
99
+ next = NULL;
100
+ }
101
+
102
+ void operator= ( //dont copy links
103
+ const ELIST_LINK &) {
104
+ next = NULL;
105
+ }
106
+
107
+ void serialise_asc( //serialise to ascii
108
+ FILE *f);
109
+ void de_serialise_asc( //de-serialise from ascii
110
+ FILE *f);
111
+
112
+ /* NOTE that none of the serialise member functions are required for
113
+ ELIST_LINKS as they are never serialised. (We demand that the derived
114
+ class terminates recursion - just to make sure that it defines the member
115
+ functions anyway.)
116
+ */
117
+ };
118
+
119
+ /**********************************************************************
120
+ * CLASS - ELIST
121
+ *
122
+ * Generic list class for singly linked lists with embedded links
123
+ **********************************************************************/
124
+
125
+ class DLLSYM ELIST
126
+ {
127
+ friend class ELIST_ITERATOR;
128
+
129
+ ELIST_LINK *last; //End of list
130
+ //(Points to head)
131
+ ELIST_LINK *First() { // return first
132
+ return last ? last->next : NULL;
133
+ }
134
+
135
+ public:
136
+ ELIST() { //constructor
137
+ last = NULL;
138
+ }
139
+
140
+ void internal_clear ( //destroy all links
141
+ //ptr to zapper functn
142
+ void (*zapper) (ELIST_LINK *));
143
+
144
+ BOOL8 empty() { //is list empty?
145
+ return !last;
146
+ }
147
+
148
+ BOOL8 singleton() {
149
+ return last ? (last == last->next) : FALSE;
150
+ }
151
+
152
+ void shallow_copy( //dangerous!!
153
+ ELIST *from_list) { //beware destructors!!
154
+ last = from_list->last;
155
+ }
156
+
157
+ //ptr to copier functn
158
+ void internal_deep_copy (ELIST_LINK * (*copier) (ELIST_LINK *),
159
+ const ELIST * list); //list being copied
160
+
161
+ void assign_to_sublist( //to this list
162
+ ELIST_ITERATOR *start_it, //from list start
163
+ ELIST_ITERATOR *end_it); //from list end
164
+
165
+ inT32 length(); //# elements in list
166
+
167
+ void sort ( //sort elements
168
+ int comparator ( //comparison routine
169
+ const void *, const void *));
170
+
171
+ // Assuming list has been sorted already, insert new_link to
172
+ // keep the list sorted according to the same comparison function.
173
+ // Comparision function is the same as used by sort, i.e. uses double
174
+ // indirection. Time is O(1) to add to beginning or end.
175
+ // Time is linear to add pre-sorted items to an empty list.
176
+ void add_sorted(int comparator(const void*, const void*),
177
+ ELIST_LINK* new_link);
178
+
179
+ void internal_dump ( //serialise each elem
180
+ FILE * f, //to this file
181
+ void element_serialiser ( //using this function
182
+ FILE *, ELIST_LINK *));
183
+
184
+ void internal_de_dump ( //de_serial each elem
185
+ FILE * f, //from this file
186
+ //using this function
187
+ ELIST_LINK * element_de_serialiser (
188
+ FILE *));
189
+
190
+ void prep_serialise(); //change last to count
191
+
192
+ /* Note that dump() and de_dump() are not required as calls to dump/de_dump a
193
+ list class should be handled by a class derived from this.
194
+
195
+ make_serialise is not required for a similar reason.
196
+ */
197
+ };
198
+
199
+ /***********************************************************************
200
+ * CLASS - ELIST_ITERATOR
201
+ *
202
+ * Generic iterator class for singly linked lists with embedded links
203
+ **********************************************************************/
204
+
205
+ class DLLSYM ELIST_ITERATOR
206
+ {
207
+ friend void ELIST::assign_to_sublist(ELIST_ITERATOR *, ELIST_ITERATOR *);
208
+
209
+ ELIST *list; //List being iterated
210
+ ELIST_LINK *prev; //prev element
211
+ ELIST_LINK *current; //current element
212
+ ELIST_LINK *next; //next element
213
+ BOOL8 ex_current_was_last; //current extracted
214
+ //was end of list
215
+ BOOL8 ex_current_was_cycle_pt; //current extracted
216
+ //was cycle point
217
+ ELIST_LINK *cycle_pt; //point we are cycling
218
+ //the list to.
219
+ BOOL8 started_cycling; //Have we moved off
220
+ //the start?
221
+
222
+ ELIST_LINK *extract_sublist( //from this current...
223
+ ELIST_ITERATOR *other_it); //to other current
224
+
225
+ public:
226
+ ELIST_ITERATOR() { //constructor
227
+ list = NULL;
228
+ } //unassigned list
229
+
230
+ ELIST_ITERATOR( //constructor
231
+ ELIST *list_to_iterate);
232
+
233
+ void set_to_list( //change list
234
+ ELIST *list_to_iterate);
235
+
236
+ void add_after_then_move( //add after current &
237
+ ELIST_LINK *new_link); //move to new
238
+
239
+ void add_after_stay_put( //add after current &
240
+ ELIST_LINK *new_link); //stay at current
241
+
242
+ void add_before_then_move( //add before current &
243
+ ELIST_LINK *new_link); //move to new
244
+
245
+ void add_before_stay_put( //add before current &
246
+ ELIST_LINK *new_link); //stay at current
247
+
248
+ void add_list_after( //add a list &
249
+ ELIST *list_to_add); //stay at current
250
+
251
+ void add_list_before( //add a list &
252
+ ELIST *list_to_add); //move to it 1st item
253
+
254
+ ELIST_LINK *data() { //get current data
255
+ #ifndef NDEBUG
256
+ if (!list)
257
+ NO_LIST.error ("ELIST_ITERATOR::data", ABORT, NULL);
258
+ if (!current)
259
+ NULL_DATA.error ("ELIST_ITERATOR::data", ABORT, NULL);
260
+ #endif
261
+ return current;
262
+ }
263
+
264
+ ELIST_LINK *data_relative( //get data + or - ...
265
+ inT8 offset); //offset from current
266
+
267
+ ELIST_LINK *forward(); //move to next element
268
+
269
+ ELIST_LINK *extract(); //remove from list
270
+
271
+ ELIST_LINK *move_to_first(); //go to start of list
272
+
273
+ ELIST_LINK *move_to_last(); //go to end of list
274
+
275
+ void mark_cycle_pt(); //remember current
276
+
277
+ BOOL8 empty() { //is list empty?
278
+ #ifndef NDEBUG
279
+ if (!list)
280
+ NO_LIST.error ("ELIST_ITERATOR::empty", ABORT, NULL);
281
+ #endif
282
+ return list->empty ();
283
+ }
284
+
285
+ BOOL8 current_extracted() { //current extracted?
286
+ return !current;
287
+ }
288
+
289
+ BOOL8 at_first(); //Current is first?
290
+
291
+ BOOL8 at_last(); //Current is last?
292
+
293
+ BOOL8 cycled_list(); //Completed a cycle?
294
+
295
+ void add_to_end( //add at end &
296
+ ELIST_LINK *new_link); //dont move
297
+
298
+ void exchange( //positions of 2 links
299
+ ELIST_ITERATOR *other_it); //other iterator
300
+
301
+ inT32 length(); //# elements in list
302
+
303
+ void sort ( //sort elements
304
+ int comparator ( //comparison routine
305
+ const void *, const void *));
306
+
307
+ };
308
+
309
+ /***********************************************************************
310
+ * ELIST_ITERATOR::set_to_list
311
+ *
312
+ * (Re-)initialise the iterator to point to the start of the list_to_iterate
313
+ * over.
314
+ **********************************************************************/
315
+
316
+ inline void ELIST_ITERATOR::set_to_list( //change list
317
+ ELIST *list_to_iterate) {
318
+ #ifndef NDEBUG
319
+ if (!this)
320
+ NULL_OBJECT.error ("ELIST_ITERATOR::set_to_list", ABORT, NULL);
321
+ if (!list_to_iterate)
322
+ BAD_PARAMETER.error ("ELIST_ITERATOR::set_to_list", ABORT,
323
+ "list_to_iterate is NULL");
324
+ #endif
325
+
326
+ list = list_to_iterate;
327
+ prev = list->last;
328
+ current = list->First ();
329
+ next = current ? current->next : NULL;
330
+ cycle_pt = NULL; //await explicit set
331
+ started_cycling = FALSE;
332
+ ex_current_was_last = FALSE;
333
+ ex_current_was_cycle_pt = FALSE;
334
+ }
335
+
336
+
337
+ /***********************************************************************
338
+ * ELIST_ITERATOR::ELIST_ITERATOR
339
+ *
340
+ * CONSTRUCTOR - set iterator to specified list;
341
+ **********************************************************************/
342
+
343
+ inline ELIST_ITERATOR::ELIST_ITERATOR(ELIST *list_to_iterate) {
344
+ set_to_list(list_to_iterate);
345
+ }
346
+
347
+
348
+ /***********************************************************************
349
+ * ELIST_ITERATOR::add_after_then_move
350
+ *
351
+ * Add a new element to the list after the current element and move the
352
+ * iterator to the new element.
353
+ **********************************************************************/
354
+
355
+ inline void ELIST_ITERATOR::add_after_then_move( // element to add
356
+ ELIST_LINK *new_element) {
357
+ #ifndef NDEBUG
358
+ if (!this)
359
+ NULL_OBJECT.error ("ELIST_ITERATOR::add_after_then_move", ABORT, NULL);
360
+ if (!list)
361
+ NO_LIST.error ("ELIST_ITERATOR::add_after_then_move", ABORT, NULL);
362
+ if (!new_element)
363
+ BAD_PARAMETER.error ("ELIST_ITERATOR::add_after_then_move", ABORT,
364
+ "new_element is NULL");
365
+ if (new_element->next)
366
+ STILL_LINKED.error ("ELIST_ITERATOR::add_after_then_move", ABORT, NULL);
367
+ #endif
368
+
369
+ if (list->empty ()) {
370
+ new_element->next = new_element;
371
+ list->last = new_element;
372
+ prev = next = new_element;
373
+ }
374
+ else {
375
+ new_element->next = next;
376
+
377
+ if (current) { //not extracted
378
+ current->next = new_element;
379
+ prev = current;
380
+ if (current == list->last)
381
+ list->last = new_element;
382
+ }
383
+ else { //current extracted
384
+ prev->next = new_element;
385
+ if (ex_current_was_last)
386
+ list->last = new_element;
387
+ if (ex_current_was_cycle_pt)
388
+ cycle_pt = new_element;
389
+ }
390
+ }
391
+ current = new_element;
392
+ }
393
+
394
+
395
+ /***********************************************************************
396
+ * ELIST_ITERATOR::add_after_stay_put
397
+ *
398
+ * Add a new element to the list after the current element but do not move
399
+ * the iterator to the new element.
400
+ **********************************************************************/
401
+
402
+ inline void ELIST_ITERATOR::add_after_stay_put( // element to add
403
+ ELIST_LINK *new_element) {
404
+ #ifndef NDEBUG
405
+ if (!this)
406
+ NULL_OBJECT.error ("ELIST_ITERATOR::add_after_stay_put", ABORT, NULL);
407
+ if (!list)
408
+ NO_LIST.error ("ELIST_ITERATOR::add_after_stay_put", ABORT, NULL);
409
+ if (!new_element)
410
+ BAD_PARAMETER.error ("ELIST_ITERATOR::add_after_stay_put", ABORT,
411
+ "new_element is NULL");
412
+ if (new_element->next)
413
+ STILL_LINKED.error ("ELIST_ITERATOR::add_after_stay_put", ABORT, NULL);
414
+ #endif
415
+
416
+ if (list->empty ()) {
417
+ new_element->next = new_element;
418
+ list->last = new_element;
419
+ prev = next = new_element;
420
+ ex_current_was_last = FALSE;
421
+ current = NULL;
422
+ }
423
+ else {
424
+ new_element->next = next;
425
+
426
+ if (current) { //not extracted
427
+ current->next = new_element;
428
+ if (prev == current)
429
+ prev = new_element;
430
+ if (current == list->last)
431
+ list->last = new_element;
432
+ }
433
+ else { //current extracted
434
+ prev->next = new_element;
435
+ if (ex_current_was_last) {
436
+ list->last = new_element;
437
+ ex_current_was_last = FALSE;
438
+ }
439
+ }
440
+ next = new_element;
441
+ }
442
+ }
443
+
444
+
445
+ /***********************************************************************
446
+ * ELIST_ITERATOR::add_before_then_move
447
+ *
448
+ * Add a new element to the list before the current element and move the
449
+ * iterator to the new element.
450
+ **********************************************************************/
451
+
452
+ inline void ELIST_ITERATOR::add_before_then_move( // element to add
453
+ ELIST_LINK *new_element) {
454
+ #ifndef NDEBUG
455
+ if (!this)
456
+ NULL_OBJECT.error ("ELIST_ITERATOR::add_before_then_move", ABORT, NULL);
457
+ if (!list)
458
+ NO_LIST.error ("ELIST_ITERATOR::add_before_then_move", ABORT, NULL);
459
+ if (!new_element)
460
+ BAD_PARAMETER.error ("ELIST_ITERATOR::add_before_then_move", ABORT,
461
+ "new_element is NULL");
462
+ if (new_element->next)
463
+ STILL_LINKED.error ("ELIST_ITERATOR::add_before_then_move", ABORT, NULL);
464
+ #endif
465
+
466
+ if (list->empty ()) {
467
+ new_element->next = new_element;
468
+ list->last = new_element;
469
+ prev = next = new_element;
470
+ }
471
+ else {
472
+ prev->next = new_element;
473
+ if (current) { //not extracted
474
+ new_element->next = current;
475
+ next = current;
476
+ }
477
+ else { //current extracted
478
+ new_element->next = next;
479
+ if (ex_current_was_last)
480
+ list->last = new_element;
481
+ if (ex_current_was_cycle_pt)
482
+ cycle_pt = new_element;
483
+ }
484
+ }
485
+ current = new_element;
486
+ }
487
+
488
+
489
+ /***********************************************************************
490
+ * ELIST_ITERATOR::add_before_stay_put
491
+ *
492
+ * Add a new element to the list before the current element but dont move the
493
+ * iterator to the new element.
494
+ **********************************************************************/
495
+
496
+ inline void ELIST_ITERATOR::add_before_stay_put( // element to add
497
+ ELIST_LINK *new_element) {
498
+ #ifndef NDEBUG
499
+ if (!this)
500
+ NULL_OBJECT.error ("ELIST_ITERATOR::add_before_stay_put", ABORT, NULL);
501
+ if (!list)
502
+ NO_LIST.error ("ELIST_ITERATOR::add_before_stay_put", ABORT, NULL);
503
+ if (!new_element)
504
+ BAD_PARAMETER.error ("ELIST_ITERATOR::add_before_stay_put", ABORT,
505
+ "new_element is NULL");
506
+ if (new_element->next)
507
+ STILL_LINKED.error ("ELIST_ITERATOR::add_before_stay_put", ABORT, NULL);
508
+ #endif
509
+
510
+ if (list->empty ()) {
511
+ new_element->next = new_element;
512
+ list->last = new_element;
513
+ prev = next = new_element;
514
+ ex_current_was_last = TRUE;
515
+ current = NULL;
516
+ }
517
+ else {
518
+ prev->next = new_element;
519
+ if (current) { //not extracted
520
+ new_element->next = current;
521
+ if (next == current)
522
+ next = new_element;
523
+ }
524
+ else { //current extracted
525
+ new_element->next = next;
526
+ if (ex_current_was_last)
527
+ list->last = new_element;
528
+ }
529
+ prev = new_element;
530
+ }
531
+ }
532
+
533
+
534
+ /***********************************************************************
535
+ * ELIST_ITERATOR::add_list_after
536
+ *
537
+ * Insert another list to this list after the current element but dont move the
538
+ * iterator.
539
+ **********************************************************************/
540
+
541
+ inline void ELIST_ITERATOR::add_list_after(ELIST *list_to_add) {
542
+ #ifndef NDEBUG
543
+ if (!this)
544
+ NULL_OBJECT.error ("ELIST_ITERATOR::add_list_after", ABORT, NULL);
545
+ if (!list)
546
+ NO_LIST.error ("ELIST_ITERATOR::add_list_after", ABORT, NULL);
547
+ if (!list_to_add)
548
+ BAD_PARAMETER.error ("ELIST_ITERATOR::add_list_after", ABORT,
549
+ "list_to_add is NULL");
550
+ #endif
551
+
552
+ if (!list_to_add->empty ()) {
553
+ if (list->empty ()) {
554
+ list->last = list_to_add->last;
555
+ prev = list->last;
556
+ next = list->First ();
557
+ ex_current_was_last = TRUE;
558
+ current = NULL;
559
+ }
560
+ else {
561
+ if (current) { //not extracted
562
+ current->next = list_to_add->First ();
563
+ if (current == list->last)
564
+ list->last = list_to_add->last;
565
+ list_to_add->last->next = next;
566
+ next = current->next;
567
+ }
568
+ else { //current extracted
569
+ prev->next = list_to_add->First ();
570
+ if (ex_current_was_last) {
571
+ list->last = list_to_add->last;
572
+ ex_current_was_last = FALSE;
573
+ }
574
+ list_to_add->last->next = next;
575
+ next = prev->next;
576
+ }
577
+ }
578
+ list_to_add->last = NULL;
579
+ }
580
+ }
581
+
582
+
583
+ /***********************************************************************
584
+ * ELIST_ITERATOR::add_list_before
585
+ *
586
+ * Insert another list to this list before the current element. Move the
587
+ * iterator to the start of the inserted elements
588
+ * iterator.
589
+ **********************************************************************/
590
+
591
+ inline void ELIST_ITERATOR::add_list_before(ELIST *list_to_add) {
592
+ #ifndef NDEBUG
593
+ if (!this)
594
+ NULL_OBJECT.error ("ELIST_ITERATOR::add_list_before", ABORT, NULL);
595
+ if (!list)
596
+ NO_LIST.error ("ELIST_ITERATOR::add_list_before", ABORT, NULL);
597
+ if (!list_to_add)
598
+ BAD_PARAMETER.error ("ELIST_ITERATOR::add_list_before", ABORT,
599
+ "list_to_add is NULL");
600
+ #endif
601
+
602
+ if (!list_to_add->empty ()) {
603
+ if (list->empty ()) {
604
+ list->last = list_to_add->last;
605
+ prev = list->last;
606
+ current = list->First ();
607
+ next = current->next;
608
+ ex_current_was_last = FALSE;
609
+ }
610
+ else {
611
+ prev->next = list_to_add->First ();
612
+ if (current) { //not extracted
613
+ list_to_add->last->next = current;
614
+ }
615
+ else { //current extracted
616
+ list_to_add->last->next = next;
617
+ if (ex_current_was_last)
618
+ list->last = list_to_add->last;
619
+ if (ex_current_was_cycle_pt)
620
+ cycle_pt = prev->next;
621
+ }
622
+ current = prev->next;
623
+ next = current->next;
624
+ }
625
+ list_to_add->last = NULL;
626
+ }
627
+ }
628
+
629
+
630
+ /***********************************************************************
631
+ * ELIST_ITERATOR::extract
632
+ *
633
+ * Do extraction by removing current from the list, returning it to the
634
+ * caller, but NOT updating the iterator. (So that any calling loop can do
635
+ * this.) The iterator's current points to NULL. If the extracted element
636
+ * is to be deleted, this is the callers responsibility.
637
+ **********************************************************************/
638
+
639
+ inline ELIST_LINK *ELIST_ITERATOR::extract() {
640
+ ELIST_LINK *extracted_link;
641
+
642
+ #ifndef NDEBUG
643
+ if (!this)
644
+ NULL_OBJECT.error ("ELIST_ITERATOR::extract", ABORT, NULL);
645
+ if (!list)
646
+ NO_LIST.error ("ELIST_ITERATOR::extract", ABORT, NULL);
647
+ if (!current) //list empty or
648
+ //element extracted
649
+ NULL_CURRENT.error ("ELIST_ITERATOR::extract",
650
+ ABORT, NULL);
651
+ #endif
652
+
653
+ if (list->singleton()) {
654
+ // Special case where we do need to change the iterator.
655
+ prev = next = list->last = NULL;
656
+ } else {
657
+ prev->next = next; //remove from list
658
+
659
+ if (current == list->last) {
660
+ list->last = prev;
661
+ ex_current_was_last = TRUE;
662
+ } else {
663
+ ex_current_was_last = FALSE;
664
+ }
665
+ }
666
+ // Always set ex_current_was_cycle_pt so an add/forward will work in a loop.
667
+ ex_current_was_cycle_pt = (current == cycle_pt) ? TRUE : FALSE;
668
+ extracted_link = current;
669
+ extracted_link->next = NULL; //for safety
670
+ current = NULL;
671
+ return extracted_link;
672
+ }
673
+
674
+
675
+ /***********************************************************************
676
+ * ELIST_ITERATOR::move_to_first()
677
+ *
678
+ * Move current so that it is set to the start of the list.
679
+ * Return data just in case anyone wants it.
680
+ **********************************************************************/
681
+
682
+ inline ELIST_LINK *ELIST_ITERATOR::move_to_first() {
683
+ #ifndef NDEBUG
684
+ if (!this)
685
+ NULL_OBJECT.error ("ELIST_ITERATOR::move_to_first", ABORT, NULL);
686
+ if (!list)
687
+ NO_LIST.error ("ELIST_ITERATOR::move_to_first", ABORT, NULL);
688
+ #endif
689
+
690
+ current = list->First ();
691
+ prev = list->last;
692
+ next = current ? current->next : NULL;
693
+ return current;
694
+ }
695
+
696
+
697
+ /***********************************************************************
698
+ * ELIST_ITERATOR::mark_cycle_pt()
699
+ *
700
+ * Remember the current location so that we can tell whether we've returned
701
+ * to this point later.
702
+ *
703
+ * If the current point is deleted either now, or in the future, the cycle
704
+ * point will be set to the next item which is set to current. This could be
705
+ * by a forward, add_after_then_move or add_after_then_move.
706
+ **********************************************************************/
707
+
708
+ inline void ELIST_ITERATOR::mark_cycle_pt() {
709
+ #ifndef NDEBUG
710
+ if (!this)
711
+ NULL_OBJECT.error ("ELIST_ITERATOR::mark_cycle_pt", ABORT, NULL);
712
+ if (!list)
713
+ NO_LIST.error ("ELIST_ITERATOR::mark_cycle_pt", ABORT, NULL);
714
+ #endif
715
+
716
+ if (current)
717
+ cycle_pt = current;
718
+ else
719
+ ex_current_was_cycle_pt = TRUE;
720
+ started_cycling = FALSE;
721
+ }
722
+
723
+
724
+ /***********************************************************************
725
+ * ELIST_ITERATOR::at_first()
726
+ *
727
+ * Are we at the start of the list?
728
+ *
729
+ **********************************************************************/
730
+
731
+ inline BOOL8 ELIST_ITERATOR::at_first() {
732
+ #ifndef NDEBUG
733
+ if (!this)
734
+ NULL_OBJECT.error ("ELIST_ITERATOR::at_first", ABORT, NULL);
735
+ if (!list)
736
+ NO_LIST.error ("ELIST_ITERATOR::at_first", ABORT, NULL);
737
+ #endif
738
+
739
+ //we're at a deleted
740
+ return ((list->empty ()) || (current == list->First ()) || ((current == NULL) &&
741
+ (prev == list->last) && //NON-last pt between
742
+ !ex_current_was_last)); //first and last
743
+ }
744
+
745
+
746
+ /***********************************************************************
747
+ * ELIST_ITERATOR::at_last()
748
+ *
749
+ * Are we at the end of the list?
750
+ *
751
+ **********************************************************************/
752
+
753
+ inline BOOL8 ELIST_ITERATOR::at_last() {
754
+ #ifndef NDEBUG
755
+ if (!this)
756
+ NULL_OBJECT.error ("ELIST_ITERATOR::at_last", ABORT, NULL);
757
+ if (!list)
758
+ NO_LIST.error ("ELIST_ITERATOR::at_last", ABORT, NULL);
759
+ #endif
760
+
761
+ //we're at a deleted
762
+ return ((list->empty ()) || (current == list->last) || ((current == NULL) &&
763
+ (prev == list->last) && //last point between
764
+ ex_current_was_last)); //first and last
765
+ }
766
+
767
+
768
+ /***********************************************************************
769
+ * ELIST_ITERATOR::cycled_list()
770
+ *
771
+ * Have we returned to the cycle_pt since it was set?
772
+ *
773
+ **********************************************************************/
774
+
775
+ inline BOOL8 ELIST_ITERATOR::cycled_list() {
776
+ #ifndef NDEBUG
777
+ if (!this)
778
+ NULL_OBJECT.error ("ELIST_ITERATOR::cycled_list", ABORT, NULL);
779
+ if (!list)
780
+ NO_LIST.error ("ELIST_ITERATOR::cycled_list", ABORT, NULL);
781
+ #endif
782
+
783
+ return ((list->empty ()) || ((current == cycle_pt) && started_cycling));
784
+
785
+ }
786
+
787
+
788
+ /***********************************************************************
789
+ * ELIST_ITERATOR::length()
790
+ *
791
+ * Return the length of the list
792
+ *
793
+ **********************************************************************/
794
+
795
+ inline inT32 ELIST_ITERATOR::length() {
796
+ #ifndef NDEBUG
797
+ if (!this)
798
+ NULL_OBJECT.error ("ELIST_ITERATOR::length", ABORT, NULL);
799
+ if (!list)
800
+ NO_LIST.error ("ELIST_ITERATOR::length", ABORT, NULL);
801
+ #endif
802
+
803
+ return list->length ();
804
+ }
805
+
806
+
807
+ /***********************************************************************
808
+ * ELIST_ITERATOR::sort()
809
+ *
810
+ * Sort the elements of the list, then reposition at the start.
811
+ *
812
+ **********************************************************************/
813
+
814
+ inline void
815
+ ELIST_ITERATOR::sort ( //sort elements
816
+ int comparator ( //comparison routine
817
+ const void *, const void *)) {
818
+ #ifndef NDEBUG
819
+ if (!this)
820
+ NULL_OBJECT.error ("ELIST_ITERATOR::sort", ABORT, NULL);
821
+ if (!list)
822
+ NO_LIST.error ("ELIST_ITERATOR::sort", ABORT, NULL);
823
+ #endif
824
+
825
+ list->sort (comparator);
826
+ move_to_first();
827
+ }
828
+
829
+
830
+ /***********************************************************************
831
+ * ELIST_ITERATOR::add_to_end
832
+ *
833
+ * Add a new element to the end of the list without moving the iterator.
834
+ * This is provided because a single linked list cannot move to the last as
835
+ * the iterator couldn't set its prev pointer. Adding to the end is
836
+ * essential for implementing
837
+ queues.
838
+ **********************************************************************/
839
+
840
+ inline void ELIST_ITERATOR::add_to_end( // element to add
841
+ ELIST_LINK *new_element) {
842
+ #ifndef NDEBUG
843
+ if (!this)
844
+ NULL_OBJECT.error ("ELIST_ITERATOR::add_to_end", ABORT, NULL);
845
+ if (!list)
846
+ NO_LIST.error ("ELIST_ITERATOR::add_to_end", ABORT, NULL);
847
+ if (!new_element)
848
+ BAD_PARAMETER.error ("ELIST_ITERATOR::add_to_end", ABORT,
849
+ "new_element is NULL");
850
+ if (new_element->next)
851
+ STILL_LINKED.error ("ELIST_ITERATOR::add_to_end", ABORT, NULL);
852
+ #endif
853
+
854
+ if (this->at_last ()) {
855
+ this->add_after_stay_put (new_element);
856
+ }
857
+ else {
858
+ if (this->at_first ()) {
859
+ this->add_before_stay_put (new_element);
860
+ list->last = new_element;
861
+ }
862
+ else { //Iteratr is elsewhere
863
+ new_element->next = list->last->next;
864
+ list->last->next = new_element;
865
+ list->last = new_element;
866
+ }
867
+ }
868
+ }
869
+
870
+
871
+ /***********************************************************************
872
+ ******************** MACROS **************************************
873
+ ***********************************************************************/
874
+
875
+ /***********************************************************************
876
+ QUOTE_IT MACRO DEFINITION
877
+ ===========================
878
+ Replace <parm> with "<parm>". <parm> may be an arbitrary number of tokens
879
+ ***********************************************************************/
880
+
881
+ #define QUOTE_IT( parm ) #parm
882
+
883
+ /***********************************************************************
884
+ ELISTIZE( CLASSNAME ) MACROS
885
+ ============================
886
+
887
+ CLASSNAME is assumed to be the name of a class which has a baseclass of
888
+ ELIST_LINK.
889
+
890
+ NOTE: Because we dont use virtual functions in the list code, the list code
891
+ will NOT work correctly for classes derived from this.
892
+
893
+ The macros generate:
894
+ - An element deletion function: CLASSNAME##_zapper
895
+ - An element serialiser function" CLASSNAME##_serialiser
896
+ - An element de-serialiser function" CLASSNAME##_de_serialiser
897
+ - An E_LIST subclass: CLASSNAME##_LIST
898
+ - An E_LIST_ITERATOR subclass: CLASSNAME##_IT
899
+
900
+ NOTE: Generated names are DELIBERATELY designed to clash with those for
901
+ ELIST2IZE but NOT with those for CLISTIZE and CLIST2IZE
902
+
903
+ Four macros are provided: ELISTIZE, ELISTIZE_S, ELISTIZEH and ELISTIZEH_S
904
+ The ...IZEH macros just define the class names for use in .h files
905
+ The ...IZE macros define the code use in .c files
906
+ The _S versions define lists which can be serialised. They assume that
907
+ the make_serialise() macro is used in the list element class derived from
908
+ ELIST_LINK to define serialise() and de_serialise() members for the list
909
+ elements.
910
+ ***********************************************************************/
911
+
912
+ /***********************************************************************
913
+ ELISTIZEH( CLASSNAME ) and ELISTIZEH_S( CLASSNAME ) MACROS
914
+
915
+ These macros are constructed from 3 fragments ELISTIZEH_A, ELISTIZEH_B and
916
+ ELISTIZEH_C. ELISTIZEH is simply a concatenation of these parts.
917
+ ELISTIZEH_S has some additional bits thrown in the gaps.
918
+ ***********************************************************************/
919
+
920
+ #define ELISTIZEH_A(CLASSNAME) \
921
+ \
922
+ extern DLLSYM void CLASSNAME##_zapper(ELIST_LINK* link);
923
+
924
+ #define ELISTIZEH_B(CLASSNAME) \
925
+ \
926
+ /*********************************************************************** \
927
+ * CLASS - CLASSNAME##_LIST \
928
+ * \
929
+ * List class for class CLASSNAME \
930
+ * \
931
+ **********************************************************************/ \
932
+ \
933
+ class DLLSYM CLASSNAME##_LIST : public ELIST \
934
+ { \
935
+ public: \
936
+ CLASSNAME##_LIST():ELIST() {}\
937
+ /* constructor */ \
938
+ \
939
+ CLASSNAME##_LIST( /* dont construct */ \
940
+ const CLASSNAME##_LIST&) /*by initial assign*/\
941
+ { DONT_CONSTRUCT_LIST_BY_COPY.error( QUOTE_IT( CLASSNAME##_LIST ), \
942
+ ABORT, NULL ); } \
943
+ \
944
+ void clear() /* delete elements */\
945
+ { ELIST::internal_clear( &CLASSNAME##_zapper ); } \
946
+ \
947
+ ~CLASSNAME##_LIST() /* destructor */ \
948
+ { clear(); } \
949
+ \
950
+ /* Become a deep copy of src_list*/ \
951
+ void deep_copy(const CLASSNAME##_LIST* src_list, \
952
+ CLASSNAME* (*copier)(const CLASSNAME*)); \
953
+ \
954
+ void operator=( /* prevent assign */ \
955
+ const CLASSNAME##_LIST&) \
956
+ { DONT_ASSIGN_LISTS.error( QUOTE_IT( CLASSNAME##_LIST ), \
957
+ ABORT, NULL ); }
958
+
959
+ #define ELISTIZEH_C( CLASSNAME ) \
960
+ }; \
961
+ \
962
+ \
963
+ \
964
+ /*********************************************************************** \
965
+ * CLASS - CLASSNAME##_IT \
966
+ * \
967
+ * Iterator class for class CLASSNAME##_LIST \
968
+ * \
969
+ * Note: We don't need to coerce pointers to member functions input \
970
+ * parameters as these are automatically converted to the type of the base \
971
+ * type. ("A ptr to a class may be converted to a pointer to a public base \
972
+ * class of that class") \
973
+ **********************************************************************/ \
974
+ \
975
+ class DLLSYM CLASSNAME##_IT : public ELIST_ITERATOR \
976
+ { \
977
+ public: \
978
+ CLASSNAME##_IT():ELIST_ITERATOR(){} \
979
+ \
980
+ CLASSNAME##_IT( \
981
+ CLASSNAME##_LIST* list):ELIST_ITERATOR(list){} \
982
+ \
983
+ CLASSNAME* data() \
984
+ { return (CLASSNAME*) ELIST_ITERATOR::data(); } \
985
+ \
986
+ CLASSNAME* data_relative( \
987
+ inT8 offset) \
988
+ { return (CLASSNAME*) ELIST_ITERATOR::data_relative( offset ); } \
989
+ \
990
+ CLASSNAME* forward() \
991
+ { return (CLASSNAME*) ELIST_ITERATOR::forward(); } \
992
+ \
993
+ CLASSNAME* extract() \
994
+ { return (CLASSNAME*) ELIST_ITERATOR::extract(); } \
995
+ \
996
+ CLASSNAME* move_to_first() \
997
+ { return (CLASSNAME*) ELIST_ITERATOR::move_to_first(); } \
998
+ \
999
+ CLASSNAME* move_to_last() \
1000
+ { return (CLASSNAME*) ELIST_ITERATOR::move_to_last(); } \
1001
+ };
1002
+
1003
+ #define ELISTIZEH( CLASSNAME ) \
1004
+ \
1005
+ ELISTIZEH_A( CLASSNAME ) \
1006
+ \
1007
+ ELISTIZEH_B( CLASSNAME ) \
1008
+ \
1009
+ ELISTIZEH_C( CLASSNAME )
1010
+
1011
+ #define ELISTIZEH_S( CLASSNAME ) \
1012
+ \
1013
+ ELISTIZEH_A( CLASSNAME ) \
1014
+ \
1015
+ extern DLLSYM void CLASSNAME##_serialiser( \
1016
+ FILE* f, \
1017
+ ELIST_LINK* element); \
1018
+ \
1019
+ extern DLLSYM ELIST_LINK* CLASSNAME##_de_serialiser( \
1020
+ FILE* f); \
1021
+ \
1022
+ ELISTIZEH_B( CLASSNAME ) \
1023
+ \
1024
+ void dump( /* dump to file */ \
1025
+ FILE* f) \
1026
+ { ELIST::internal_dump( f, &CLASSNAME##_serialiser );} \
1027
+ \
1028
+ void de_dump( /* get from file */ \
1029
+ FILE* f) \
1030
+ { ELIST::internal_de_dump( f, &CLASSNAME##_de_serialiser );} \
1031
+ \
1032
+ void serialise_asc( /*dump to ascii*/ \
1033
+ FILE* f); \
1034
+ void de_serialise_asc( /*de-dump from ascii*/\
1035
+ FILE* f); \
1036
+ \
1037
+ make_serialise( CLASSNAME##_LIST ) \
1038
+ \
1039
+ ELISTIZEH_C( CLASSNAME )
1040
+
1041
+ /***********************************************************************
1042
+ ELISTIZE( CLASSNAME ) and ELISTIZE_S( CLASSNAME ) MACROS
1043
+ ELISTIZE_S is a simple extension to ELISTIZE
1044
+ ***********************************************************************/
1045
+
1046
+ #define ELISTIZE(CLASSNAME) \
1047
+ \
1048
+ /*********************************************************************** \
1049
+ * CLASSNAME##_zapper \
1050
+ * \
1051
+ * A function which can delete a CLASSNAME element. This is passed to the \
1052
+ * generic clear list member function so that when a list is cleared the \
1053
+ * elements on the list are properly destroyed from the base class, even \
1054
+ * though we dont use a virtual destructor function. \
1055
+ **********************************************************************/ \
1056
+ \
1057
+ DLLSYM void CLASSNAME##_zapper(ELIST_LINK* link) { \
1058
+ delete reinterpret_cast<CLASSNAME*>(link); \
1059
+ } \
1060
+ \
1061
+ /* Become a deep copy of src_list*/ \
1062
+ void CLASSNAME##_LIST::deep_copy(const CLASSNAME##_LIST* src_list, \
1063
+ CLASSNAME* (*copier)(const CLASSNAME*)) { \
1064
+ \
1065
+ CLASSNAME##_IT from_it(const_cast<CLASSNAME##_LIST*>(src_list)); \
1066
+ CLASSNAME##_IT to_it(this); \
1067
+ \
1068
+ for (from_it.mark_cycle_pt(); !from_it.cycled_list(); from_it.forward()) \
1069
+ to_it.add_after_then_move((*copier)(from_it.data())); \
1070
+ }
1071
+
1072
+ #define ELISTIZE_S(CLASSNAME) \
1073
+ \
1074
+ ELISTIZE(CLASSNAME) \
1075
+ \
1076
+ void CLASSNAME##_LIST::serialise_asc(FILE* f) { \
1077
+ CLASSNAME##_IT it(this); \
1078
+ \
1079
+ serialise_INT32(f, length()); \
1080
+ for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) \
1081
+ it.data()->serialise_asc(f); /*serialise the list*/ \
1082
+ } \
1083
+ \
1084
+ void CLASSNAME##_LIST::de_serialise_asc(FILE* f) { \
1085
+ inT32 len; /*length to retrive*/ \
1086
+ CLASSNAME##_IT it; \
1087
+ CLASSNAME* new_elt = NULL; /*list element*/ \
1088
+ \
1089
+ len = de_serialise_INT32(f); \
1090
+ it.set_to_list(this); \
1091
+ for (; len > 0; len--) { \
1092
+ new_elt = new CLASSNAME; \
1093
+ new_elt->de_serialise_asc(f); \
1094
+ it.add_to_end(new_elt); /*put on the list*/ \
1095
+ } \
1096
+ return; \
1097
+ } \
1098
+ \
1099
+ \
1100
+ /*********************************************************************** \
1101
+ * CLASSNAME##_serialiser \
1102
+ * \
1103
+ * A function which can serialise an element \
1104
+ * This is passed to the generic dump member function so that when a list is \
1105
+ * serialised the elements on the list are properly serialised. \
1106
+ **********************************************************************/ \
1107
+ \
1108
+ DLLSYM void CLASSNAME##_serialiser(FILE* f, ELIST_LINK* element) { \
1109
+ reinterpret_cast<CLASSNAME*>(element)->serialise(f); \
1110
+ } \
1111
+ \
1112
+ \
1113
+ \
1114
+ /*********************************************************************** \
1115
+ * CLASSNAME##_de_serialiser \
1116
+ * \
1117
+ * A function which can de-serialise an element \
1118
+ * This is passed to the generic de-dump member function so that when a list \
1119
+ * is de-serialised the elements on the list are properly de-serialised. \
1120
+ **********************************************************************/ \
1121
+ \
1122
+ DLLSYM ELIST_LINK* CLASSNAME##_de_serialiser(FILE* f) { \
1123
+ return (ELIST_LINK*) CLASSNAME::de_serialise(f); \
1124
+ }
1125
+ #endif