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,905 @@
1
+ /**********************************************************************
2
+ * File: statistc.c (Formerly stats.c)
3
+ * Description: Simple statistical package for integer values.
4
+ * Author: Ray Smith
5
+ * Created: Mon Feb 04 16:56:05 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
+ #include "mfcpch.h" //precompiled headers
21
+ #include <string.h>
22
+ #include <math.h>
23
+ #include <stdlib.h>
24
+ #include "memry.h"
25
+ //#include "ipeerr.h"
26
+ #include "tprintf.h"
27
+ #include "statistc.h"
28
+
29
+ #define SEED1 0x1234 //default seeds
30
+ #define SEED2 0x5678
31
+ #define SEED3 0x9abc
32
+
33
+ /**********************************************************************
34
+ * STATS::STATS
35
+ *
36
+ * Construct a new stats element by allocating and zeroing the memory.
37
+ **********************************************************************/
38
+
39
+ STATS::STATS( //constructor
40
+ inT32 min, //min of range
41
+ inT32 max //max of range
42
+ ) {
43
+
44
+ if (max <= min) {
45
+ /* err.log(RESULT_LOGICAL_ERROR,E_LOC,ERR_PRIMITIVES,
46
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
47
+ "Illegal range for stats, Min=%d, Max=%d",min,max);*/
48
+ min = 0;
49
+ max = 1;
50
+ }
51
+ rangemin = min; //setup
52
+ rangemax = max;
53
+ buckets = (inT32 *) alloc_mem ((max - min) * sizeof (inT32));
54
+ if (buckets != NULL)
55
+ this->clear (); //zero it
56
+ /* else
57
+ err.log(RESULT_NO_MEMORY,E_LOC,ERR_PRIMITIVES,
58
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
59
+ "No memory for stats, Min=%d, Max=%d",min,max); */
60
+ }
61
+
62
+
63
+ STATS::STATS() { //constructor
64
+ rangemax = 0; //empty
65
+ rangemin = 0;
66
+ buckets = NULL;
67
+ }
68
+
69
+
70
+ /**********************************************************************
71
+ * STATS::set_range
72
+ *
73
+ * Alter the range on an existing stats element.
74
+ **********************************************************************/
75
+
76
+ bool STATS::set_range( //constructor
77
+ inT32 min, //min of range
78
+ inT32 max //max of range
79
+ ) {
80
+
81
+ if (max <= min) {
82
+ return false;
83
+ }
84
+ rangemin = min; //setup
85
+ rangemax = max;
86
+ if (buckets != NULL)
87
+ free_mem(buckets); //no longer want it
88
+ buckets = (inT32 *) alloc_mem ((max - min) * sizeof (inT32));
89
+ /* if (buckets==NULL)
90
+ return err.log(RESULT_NO_MEMORY,E_LOC,ERR_PRIMITIVES,
91
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
92
+ "No memory for stats, Min=%d, Max=%d",min,max);*/
93
+
94
+ this->clear (); //zero it
95
+ return true;
96
+ }
97
+
98
+
99
+ /**********************************************************************
100
+ * STATS::clear
101
+ *
102
+ * Clear out the STATS class by zeroing all the buckets.
103
+ **********************************************************************/
104
+
105
+ void STATS::clear() { //clear out buckets
106
+ total_count = 0;
107
+ if (buckets != NULL)
108
+ memset (buckets, 0, (rangemax - rangemin) * sizeof (inT32));
109
+ //zero it
110
+ }
111
+
112
+
113
+ /**********************************************************************
114
+ * STATS::~STATS
115
+ *
116
+ * Destructor for a stats class.
117
+ **********************************************************************/
118
+
119
+ STATS::~STATS ( //destructor
120
+ ) {
121
+ if (buckets != NULL) {
122
+ free_mem(buckets);
123
+ buckets = NULL;
124
+ }
125
+ }
126
+
127
+
128
+ /**********************************************************************
129
+ * STATS::add
130
+ *
131
+ * Add a set of samples to (or delete from) a pile.
132
+ **********************************************************************/
133
+
134
+ void STATS::add( //add sample
135
+ inT32 value, //bucket
136
+ inT32 count //no to add
137
+ ) {
138
+ if (buckets == NULL) {
139
+ /* err.log(RESULT_LOGICAL_ERROR,E_LOC,ERR_PRIMITIVES,
140
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
141
+ "Empty stats");*/
142
+ return;
143
+ }
144
+ if (value <= rangemin)
145
+ buckets[0] += count; //silently clip to range
146
+ else if (value >= rangemax)
147
+ buckets[rangemax - rangemin - 1] += count;
148
+ else
149
+ //add count to cell
150
+ buckets[value - rangemin] += count;
151
+ total_count += count; //keep count of total
152
+ }
153
+
154
+
155
+ /**********************************************************************
156
+ * STATS::mode
157
+ *
158
+ * Find the mode of a stats class.
159
+ **********************************************************************/
160
+
161
+ inT32 STATS::mode() { //get mode of samples
162
+ inT32 index; //current index
163
+ inT32 max; //max cell count
164
+ inT32 maxindex; //index of max
165
+
166
+ if (buckets == NULL) {
167
+ /* err.log(RESULT_LOGICAL_ERROR,E_LOC,ERR_PRIMITIVES,
168
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
169
+ "Empty stats");*/
170
+ return rangemin;
171
+ }
172
+ for (max = 0, maxindex = 0, index = rangemax - rangemin - 1; index >= 0;
173
+ index--) {
174
+ if (buckets[index] > max) {
175
+ max = buckets[index]; //find biggest
176
+ maxindex = index;
177
+ }
178
+ }
179
+ return maxindex + rangemin; //index of biggest
180
+ }
181
+
182
+
183
+ /**********************************************************************
184
+ * STATS::mean
185
+ *
186
+ * Find the mean of a stats class.
187
+ **********************************************************************/
188
+
189
+ float STATS::mean() { //get mean of samples
190
+ inT32 index; //current index
191
+ inT32 sum; //sum of cells
192
+
193
+ if (buckets == NULL) {
194
+ /* err.log(RESULT_LOGICAL_ERROR,E_LOC,ERR_PRIMITIVES,
195
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
196
+ "Empty stats");*/
197
+ return (float) rangemin;
198
+ }
199
+ for (sum = 0, index = rangemax - rangemin - 1; index >= 0; index--) {
200
+ //sum all buckets
201
+ sum += index * buckets[index];
202
+ }
203
+ if (total_count > 0)
204
+ //mean value
205
+ return (float) sum / total_count + rangemin;
206
+ else
207
+ return (float) rangemin; //no mean
208
+ }
209
+
210
+
211
+ /**********************************************************************
212
+ * STATS::sd
213
+ *
214
+ * Find the standard deviation of a stats class.
215
+ **********************************************************************/
216
+
217
+ float STATS::sd() { //standard deviation
218
+ inT32 index; //current index
219
+ inT32 sum; //sum of cells
220
+ inT32 sqsum; //sum of squares
221
+ float variance;
222
+
223
+ if (buckets == NULL) {
224
+ /* err.log(RESULT_LOGICAL_ERROR,E_LOC,ERR_PRIMITIVES,
225
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
226
+ "Empty stats"); */
227
+ return (float) 0.0;
228
+ }
229
+ for (sum = 0, sqsum = 0, index = rangemax - rangemin - 1; index >= 0;
230
+ index--) {
231
+ //sum all buckets
232
+ sum += index * buckets[index];
233
+ //and squares
234
+ sqsum += index * index * buckets[index];
235
+ }
236
+ if (total_count > 0) {
237
+ variance = sum / ((float) total_count);
238
+ variance = sqsum / ((float) total_count) - variance * variance;
239
+ return (float) sqrt (variance);
240
+ }
241
+ else
242
+ return (float) 0.0;
243
+ }
244
+
245
+
246
+ /**********************************************************************
247
+ * STATS::ile
248
+ *
249
+ * Find an arbitrary %ile of a stats class.
250
+ **********************************************************************/
251
+
252
+ float STATS::ile( //percentile
253
+ float frac //fraction to find
254
+ ) {
255
+ inT32 index; //current index
256
+ inT32 sum; //sum of cells
257
+ float target; //target value
258
+
259
+ if (buckets == NULL) {
260
+ /* err.log(RESULT_LOGICAL_ERROR,E_LOC,ERR_PRIMITIVES,
261
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
262
+ "Empty stats"); */
263
+ return (float) rangemin;
264
+ }
265
+ target = frac * total_count;
266
+ if (target <= 0)
267
+ target = (float) 1;
268
+ if (target > total_count)
269
+ target = (float) total_count;
270
+ for (sum = 0, index = 0; index < rangemax - rangemin
271
+ && sum < target; sum += buckets[index], index++);
272
+ if (index > 0)
273
+ return rangemin + index - (sum - target) / buckets[index - 1];
274
+ //better than just ints
275
+ else
276
+ return (float) rangemin;
277
+ }
278
+
279
+
280
+ /**********************************************************************
281
+ * STATS::median
282
+ *
283
+ * Finds a more usefule estimate of median than ile(0.5).
284
+ *
285
+ * Overcomes a problem with ile() - if the samples are, for example,
286
+ * 6,6,13,14 ile(0.5) return 7.0 - when a more useful value would be midway
287
+ * between 6 and 13 = 9.5
288
+ **********************************************************************/
289
+
290
+ float STATS::median() { //get median
291
+ float median;
292
+ inT32 min_pile;
293
+ inT32 median_pile;
294
+ inT32 max_pile;
295
+
296
+ if (buckets == NULL) {
297
+ /* err.log(RESULT_LOGICAL_ERROR,E_LOC,ERR_PRIMITIVES,
298
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
299
+ "Empty stats");*/
300
+ return (float) rangemin;
301
+ }
302
+ median = (float) ile ((float) 0.5);
303
+ median_pile = (inT32) floor (median);
304
+ if ((total_count > 1) && (pile_count (median_pile) == 0)) {
305
+ /* Find preceeding non zero pile */
306
+ for (min_pile = median_pile; pile_count (min_pile) == 0; min_pile--);
307
+ /* Find following non zero pile */
308
+ for (max_pile = median_pile; pile_count (max_pile) == 0; max_pile++);
309
+ median = (float) ((min_pile + max_pile) / 2.0);
310
+ }
311
+ return median;
312
+ }
313
+
314
+
315
+ /**********************************************************************
316
+ * STATS::smooth
317
+ *
318
+ * Apply a triangular smoothing filter to the stats.
319
+ * This makes the modes a bit more useful.
320
+ * The factor gives the height of the triangle, i.e. the weight of the
321
+ * centre.
322
+ **********************************************************************/
323
+
324
+ void STATS::smooth( //smooth samples
325
+ inT32 factor //size of triangle
326
+ ) {
327
+ inT32 entry; //bucket index
328
+ inT32 offset; //from entry
329
+ inT32 entrycount; //no of entries
330
+ inT32 bucket; //new smoothed pile
331
+ //output stats
332
+ STATS result(rangemin, rangemax);
333
+
334
+ if (buckets == NULL) {
335
+ /* err.log(RESULT_LOGICAL_ERROR,E_LOC,ERR_PRIMITIVES,
336
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
337
+ "Empty stats"); */
338
+ return;
339
+ }
340
+ if (factor < 2)
341
+ return; //is a no-op
342
+ entrycount = rangemax - rangemin;
343
+ for (entry = 0; entry < entrycount; entry++) {
344
+ //centre weight
345
+ bucket = buckets[entry] * factor;
346
+ for (offset = 1; offset < factor; offset++) {
347
+ if (entry - offset >= 0)
348
+ bucket += buckets[entry - offset] * (factor - offset);
349
+ if (entry + offset < entrycount)
350
+ bucket += buckets[entry + offset] * (factor - offset);
351
+ }
352
+ result.add (entry + rangemin, bucket);
353
+ }
354
+ total_count = result.total_count;
355
+ memcpy (buckets, result.buckets, entrycount * sizeof (inT32));
356
+ }
357
+
358
+
359
+ /**********************************************************************
360
+ * STATS::cluster
361
+ *
362
+ * Cluster the samples into max_cluster clusters.
363
+ * Each call runs one iteration. The array of clusters must be
364
+ * max_clusters+1 in size as cluster 0 is used to indicate which samples
365
+ * have been used.
366
+ * The return value is the current number of clusters.
367
+ **********************************************************************/
368
+
369
+ inT32 STATS::cluster( //cluster samples
370
+ float lower, //thresholds
371
+ float upper,
372
+ float multiple, //distance threshold
373
+ inT32 max_clusters, //max no to make
374
+ STATS *clusters //array of clusters
375
+ ) {
376
+ BOOL8 new_cluster; //added one
377
+ float *centres; //cluster centres
378
+ inT32 entry; //bucket index
379
+ inT32 cluster; //cluster index
380
+ inT32 best_cluster; //one to assign to
381
+ inT32 new_centre = 0; //residual mode
382
+ inT32 new_mode; //pile count of new_centre
383
+ inT32 count; //pile to place
384
+ float dist; //from cluster
385
+ float min_dist; //from best_cluster
386
+ inT32 cluster_count; //no of clusters
387
+
388
+ if (max_clusters < 1)
389
+ return 0;
390
+ if (buckets == NULL) {
391
+ /* err.log(RESULT_LOGICAL_ERROR,E_LOC,ERR_PRIMITIVES,
392
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
393
+ "Empty stats");*/
394
+ return 0;
395
+ }
396
+ centres = (float *) alloc_mem ((max_clusters + 1) * sizeof (float));
397
+ if (centres == NULL) {
398
+ /* err.log(RESULT_NO_MEMORY,E_LOC,ERR_PRIMITIVES,
399
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
400
+ "No memory for centres"); */
401
+ return 0;
402
+ }
403
+ for (cluster_count = 1; cluster_count <= max_clusters
404
+ && clusters[cluster_count].buckets != NULL
405
+ && clusters[cluster_count].total_count > 0; cluster_count++) {
406
+ centres[cluster_count] =
407
+ (float) clusters[cluster_count].ile ((float) 0.5);
408
+ new_centre = clusters[cluster_count].mode ();
409
+ for (entry = new_centre - 1; centres[cluster_count] - entry < lower
410
+ && entry >= rangemin
411
+ && pile_count (entry) <= pile_count (entry + 1); entry--) {
412
+ count = pile_count (entry) - clusters[0].pile_count (entry);
413
+ if (count > 0) {
414
+ clusters[cluster_count].add (entry, count);
415
+ clusters[0].add (entry, count);
416
+ }
417
+ }
418
+ for (entry = new_centre + 1; entry - centres[cluster_count] < lower
419
+ && entry < rangemax
420
+ && pile_count (entry) <= pile_count (entry - 1); entry++) {
421
+ count = pile_count (entry) - clusters[0].pile_count (entry);
422
+ if (count > 0) {
423
+ clusters[cluster_count].add (entry, count);
424
+ clusters[0].add (entry, count);
425
+ }
426
+ }
427
+ }
428
+ cluster_count--;
429
+
430
+ if (cluster_count == 0) {
431
+ clusters[0].set_range (rangemin, rangemax);
432
+ }
433
+ do {
434
+ new_cluster = FALSE;
435
+ new_mode = 0;
436
+ for (entry = 0; entry < rangemax - rangemin; entry++) {
437
+ count = buckets[entry] - clusters[0].buckets[entry];
438
+ //remaining pile
439
+ if (count > 0) { //any to handle
440
+ min_dist = (float) MAX_INT32;
441
+ best_cluster = 0;
442
+ for (cluster = 1; cluster <= cluster_count; cluster++) {
443
+ dist = entry + rangemin - centres[cluster];
444
+ //find distance
445
+ if (dist < 0)
446
+ dist = -dist;
447
+ if (dist < min_dist) {
448
+ min_dist = dist; //find least
449
+ best_cluster = cluster;
450
+ }
451
+ }
452
+ if (min_dist > upper //far enough for new
453
+ && (best_cluster == 0
454
+ || entry + rangemin > centres[best_cluster] * multiple
455
+ || entry + rangemin < centres[best_cluster] / multiple)) {
456
+ if (count > new_mode) {
457
+ new_mode = count;
458
+ new_centre = entry + rangemin;
459
+ }
460
+ }
461
+ }
462
+ }
463
+ //need new and room
464
+ if (new_mode > 0 && cluster_count < max_clusters) {
465
+ cluster_count++;
466
+ new_cluster = TRUE;
467
+ if (!clusters[cluster_count].set_range (rangemin, rangemax))
468
+ return 0;
469
+ centres[cluster_count] = (float) new_centre;
470
+ clusters[cluster_count].add (new_centre, new_mode);
471
+ clusters[0].add (new_centre, new_mode);
472
+ for (entry = new_centre - 1; centres[cluster_count] - entry < lower
473
+ && entry >= rangemin
474
+ && pile_count (entry) <= pile_count (entry + 1); entry--) {
475
+ count = pile_count (entry) - clusters[0].pile_count (entry);
476
+ if (count > 0) {
477
+ clusters[cluster_count].add (entry, count);
478
+ clusters[0].add (entry, count);
479
+ }
480
+ }
481
+ for (entry = new_centre + 1; entry - centres[cluster_count] < lower
482
+ && entry < rangemax
483
+ && pile_count (entry) <= pile_count (entry - 1); entry++) {
484
+ count = pile_count (entry) - clusters[0].pile_count (entry);
485
+ if (count > 0) {
486
+ clusters[cluster_count].add (entry, count);
487
+ clusters[0].add (entry, count);
488
+ }
489
+ }
490
+ centres[cluster_count] =
491
+ (float) clusters[cluster_count].ile ((float) 0.5);
492
+ }
493
+ }
494
+ while (new_cluster && cluster_count < max_clusters);
495
+ free_mem(centres);
496
+ return cluster_count;
497
+ }
498
+
499
+
500
+ /**********************************************************************
501
+ * STATS::local_min
502
+ *
503
+ * Return TRUE if this point is a local min.
504
+ **********************************************************************/
505
+
506
+ BOOL8 STATS::local_min( //test minness
507
+ inT32 x //of x
508
+ ) {
509
+ inT32 index; //table index
510
+
511
+ if (buckets == NULL) {
512
+ /* err.log(RESULT_LOGICAL_ERROR,E_LOC,ERR_PRIMITIVES,
513
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
514
+ "Empty stats");*/
515
+ return FALSE;
516
+ }
517
+ if (x < rangemin)
518
+ x = rangemin;
519
+ if (x >= rangemax)
520
+ x = rangemax - 1;
521
+ x -= rangemin;
522
+ if (buckets[x] == 0)
523
+ return TRUE;
524
+ for (index = x - 1; index >= 0 && buckets[index] == buckets[x]; index--);
525
+ if (index >= 0 && buckets[index] < buckets[x])
526
+ return FALSE;
527
+ for (index = x + 1; index < rangemax - rangemin
528
+ && buckets[index] == buckets[x]; index++);
529
+ if (index < rangemax - rangemin && buckets[index] < buckets[x])
530
+ return FALSE;
531
+ else
532
+ return TRUE;
533
+ }
534
+
535
+
536
+ /**********************************************************************
537
+ * STATS::print
538
+ *
539
+ * Print a summary of the stats and optionally a dump of the table.
540
+ **********************************************************************/
541
+
542
+ void STATS::print( //print stats table
543
+ FILE *, //Now uses tprintf instead
544
+ BOOL8 dump //dump full table
545
+ ) {
546
+ inT32 index; //table index
547
+
548
+ if (buckets == NULL) {
549
+ /* err.log(RESULT_LOGICAL_ERROR,E_LOC,ERR_PRIMITIVES,
550
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
551
+ "Empty stats"); */
552
+ return;
553
+ }
554
+ if (dump) {
555
+ for (index = 0; index < rangemax - rangemin; index++) {
556
+ tprintf ("%4d:%-3d ", rangemin + index, buckets[index]);
557
+ if (index % 8 == 7)
558
+ tprintf ("\n");
559
+ }
560
+ tprintf ("\n");
561
+ }
562
+
563
+ tprintf ("Total count=%d\n", total_count);
564
+ tprintf ("Min=%d\n", (inT32) (ile ((float) 0.0)));
565
+ tprintf ("Lower quartile=%.2f\n", ile ((float) 0.25));
566
+ tprintf ("Median=%.2f\n", ile ((float) 0.5));
567
+ tprintf ("Upper quartile=%.2f\n", ile ((float) 0.75));
568
+ tprintf ("Max=%d\n", (inT32) (ile ((float) 0.99999)));
569
+ tprintf ("Mean= %.2f\n", mean ());
570
+ tprintf ("SD= %.2f\n", sd ());
571
+ }
572
+
573
+
574
+ /**********************************************************************
575
+ * STATS::min_bucket
576
+ *
577
+ * Find REAL minimum bucket - ile(0.0) isnt necessarily correct
578
+ **********************************************************************/
579
+
580
+ inT32 STATS::min_bucket() { //Find min
581
+ inT32 min;
582
+
583
+ if (buckets == NULL) {
584
+ /* err.log(RESULT_LOGICAL_ERROR,E_LOC,ERR_PRIMITIVES,
585
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
586
+ "Empty stats");*/
587
+ return rangemin;
588
+ }
589
+
590
+ for (min = 0; (min < rangemax - rangemin) && (buckets[min] == 0); min++);
591
+ return rangemin + min;
592
+ }
593
+
594
+
595
+ /**********************************************************************
596
+ * STATS::max_bucket
597
+ *
598
+ * Find REAL maximum bucket - ile(1.0) isnt necessarily correct
599
+ **********************************************************************/
600
+
601
+ inT32 STATS::max_bucket() { //Find max
602
+ inT32 max;
603
+
604
+ if (buckets == NULL) {
605
+ /* err.log(RESULT_LOGICAL_ERROR,E_LOC,ERR_PRIMITIVES,
606
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
607
+ "Empty stats");*/
608
+ return rangemin;
609
+ }
610
+
611
+ for (max = rangemax - rangemin - 1;
612
+ (max > 0) && (buckets[max] == 0); max--);
613
+ return rangemin + max;
614
+ }
615
+
616
+
617
+ /**********************************************************************
618
+ * STATS::short_print
619
+ *
620
+ * Print a summary of the stats and optionally a dump of the table.
621
+ * ( BUT ONLY THE PART OF THE TABLE BETWEEN MIN AND MAX)
622
+ **********************************************************************/
623
+
624
+ void STATS::short_print( //print stats table
625
+ FILE *, //Now uses tprintf instead
626
+ BOOL8 dump //dump full table
627
+ ) {
628
+ inT32 index; //table index
629
+ inT32 min = min_bucket ();
630
+ inT32 max = max_bucket ();
631
+
632
+ if (buckets == NULL) {
633
+ /* err.log(RESULT_LOGICAL_ERROR,E_LOC,ERR_PRIMITIVES,
634
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
635
+ "Empty stats"); */
636
+ return;
637
+ }
638
+ if (dump) {
639
+ for (index = min; index <= max; index++) {
640
+ tprintf ("%4d:%-3d ", rangemin + index, buckets[index]);
641
+ if ((index - min) % 8 == 7)
642
+ tprintf ("\n");
643
+ }
644
+ tprintf ("\n");
645
+ }
646
+
647
+ tprintf ("Total count=%d\n", total_count);
648
+ tprintf ("Min=%d Really=%d\n", (inT32) (ile ((float) 0.0)), min);
649
+ tprintf ("Max=%d Really=%d\n", (inT32) (ile ((float) 1.1)), max);
650
+ tprintf ("Range=%d\n", max + 1 - min);
651
+ tprintf ("Lower quartile=%.2f\n", ile ((float) 0.25));
652
+ tprintf ("Median=%.2f\n", ile ((float) 0.5));
653
+ tprintf ("Upper quartile=%.2f\n", ile ((float) 0.75));
654
+ tprintf ("Mean= %.2f\n", mean ());
655
+ tprintf ("SD= %.2f\n", sd ());
656
+ }
657
+
658
+
659
+ /**********************************************************************
660
+ * STATS::plot
661
+ *
662
+ * Draw a histogram of the stats table.
663
+ **********************************************************************/
664
+
665
+ #ifndef GRAPHICS_DISABLED
666
+ void STATS::plot( //plot stats table
667
+ ScrollView* window, //to draw in
668
+ float xorigin, //bottom left
669
+ float yorigin,
670
+ float xscale, //one x unit
671
+ float yscale, //one y unit
672
+ ScrollView::Color colour //colour to draw in
673
+ ) {
674
+ inT32 index; //table index
675
+
676
+ if (buckets == NULL) {
677
+ /* err.log(RESULT_LOGICAL_ERROR,E_LOC,ERR_PRIMITIVES,
678
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
679
+ "Empty stats");*/
680
+ return;
681
+ }
682
+ window->Pen(colour);
683
+
684
+ for (index = 0; index < rangemax - rangemin; index++) {
685
+ window->Rectangle( xorigin + xscale * index, yorigin,
686
+ xorigin + xscale * (index + 1),
687
+ yorigin + yscale * buckets[index]);
688
+ }
689
+ }
690
+ #endif
691
+
692
+
693
+ /**********************************************************************
694
+ * STATS::plotline
695
+ *
696
+ * Draw a histogram of the stats table. (Line only
697
+ **********************************************************************/
698
+
699
+ #ifndef GRAPHICS_DISABLED
700
+ void STATS::plotline( //plot stats table
701
+ ScrollView* window, //to draw in
702
+ float xorigin, //bottom left
703
+ float yorigin,
704
+ float xscale, //one x unit
705
+ float yscale, //one y unit
706
+ ScrollView::Color colour //colour to draw in
707
+ ) {
708
+ inT32 index; //table index
709
+
710
+ if (buckets == NULL) {
711
+ /* err.log(RESULT_LOGICAL_ERROR,E_LOC,ERR_PRIMITIVES,
712
+ ERR_SCROLLING,ERR_CONTINUE,ERR_ERROR,
713
+ "Empty stats"); */
714
+ return;
715
+ }
716
+ window->Pen(colour);
717
+
718
+ window->SetCursor(xorigin, yorigin + yscale * buckets[0]);
719
+ for (index = 0; index < rangemax - rangemin; index++) {
720
+ window->DrawTo(xorigin + xscale * index, yorigin + yscale * buckets[index]);
721
+ }
722
+ }
723
+ #endif
724
+
725
+
726
+ /**********************************************************************
727
+ * choose_nth_item
728
+ *
729
+ * Returns the index of what would b the nth item in the array
730
+ * if the members were sorted, without actually sorting.
731
+ **********************************************************************/
732
+
733
+ DLLSYM inT32 choose_nth_item( //fast median
734
+ inT32 index, //index to choose
735
+ float *array, //array of items
736
+ inT32 count //no of items
737
+ ) {
738
+ static uinT16 seeds[3] = { SEED1, SEED2, SEED3 };
739
+ //for nrand
740
+ inT32 next_sample; //next one to do
741
+ inT32 next_lesser; //space for new
742
+ inT32 prev_greater; //last one saved
743
+ inT32 equal_count; //no of equal ones
744
+ float pivot; //proposed median
745
+ float sample; //current sample
746
+
747
+ if (count <= 1)
748
+ return 0;
749
+ if (count == 2) {
750
+ if (array[0] < array[1]) {
751
+ return index >= 1 ? 1 : 0;
752
+ }
753
+ else {
754
+ return index >= 1 ? 0 : 1;
755
+ }
756
+ }
757
+ else {
758
+ if (index < 0)
759
+ index = 0; //ensure lergal
760
+ else if (index >= count)
761
+ index = count - 1;
762
+ #ifdef __UNIX__
763
+ equal_count = (inT32) (nrand48 (seeds) % count);
764
+ #else
765
+ equal_count = (inT32) (rand () % count);
766
+ #endif
767
+ pivot = array[equal_count];
768
+ //fill gap
769
+ array[equal_count] = array[0];
770
+ next_lesser = 0;
771
+ prev_greater = count;
772
+ equal_count = 1;
773
+ for (next_sample = 1; next_sample < prev_greater;) {
774
+ sample = array[next_sample];
775
+ if (sample < pivot) {
776
+ //shuffle
777
+ array[next_lesser++] = sample;
778
+ next_sample++;
779
+ }
780
+ else if (sample > pivot) {
781
+ prev_greater--;
782
+ //juggle
783
+ array[next_sample] = array[prev_greater];
784
+ array[prev_greater] = sample;
785
+ }
786
+ else {
787
+ equal_count++;
788
+ next_sample++;
789
+ }
790
+ }
791
+ for (next_sample = next_lesser; next_sample < prev_greater;)
792
+ array[next_sample++] = pivot;
793
+ if (index < next_lesser)
794
+ return choose_nth_item (index, array, next_lesser);
795
+ else if (index < prev_greater)
796
+ return next_lesser; //in equal bracket
797
+ else
798
+ return choose_nth_item (index - prev_greater,
799
+ array + prev_greater,
800
+ count - prev_greater) + prev_greater;
801
+ }
802
+ }
803
+
804
+
805
+ /**********************************************************************
806
+ * choose_nth_item
807
+ *
808
+ * Returns the index of what would b the nth item in the array
809
+ * if the members were sorted, without actually sorting.
810
+ **********************************************************************/
811
+
812
+ DLLSYM inT32
813
+ choose_nth_item ( //fast median
814
+ inT32 index, //index to choose
815
+ void *array, //array of items
816
+ inT32 count, //no of items
817
+ size_t size, //element size
818
+ //comparator
819
+ int (*compar) (const void *, const void *)
820
+ ) {
821
+ static uinT16 seeds[3] = { SEED1, SEED2, SEED3 };
822
+ //for nrand
823
+ int result; //of compar
824
+ inT32 next_sample; //next one to do
825
+ inT32 next_lesser; //space for new
826
+ inT32 prev_greater; //last one saved
827
+ inT32 equal_count; //no of equal ones
828
+ inT32 pivot; //proposed median
829
+
830
+ if (count <= 1)
831
+ return 0;
832
+ if (count == 2) {
833
+ if (compar (array, (char *) array + size) < 0) {
834
+ return index >= 1 ? 1 : 0;
835
+ }
836
+ else {
837
+ return index >= 1 ? 0 : 1;
838
+ }
839
+ }
840
+ if (index < 0)
841
+ index = 0; //ensure lergal
842
+ else if (index >= count)
843
+ index = count - 1;
844
+ #ifdef __UNIX__
845
+ pivot = (inT32) (nrand48 (seeds) % count);
846
+ #else
847
+ pivot = (inT32) (rand () % count);
848
+ #endif
849
+ swap_entries (array, size, pivot, 0);
850
+ next_lesser = 0;
851
+ prev_greater = count;
852
+ equal_count = 1;
853
+ for (next_sample = 1; next_sample < prev_greater;) {
854
+ result =
855
+ compar ((char *) array + size * next_sample,
856
+ (char *) array + size * next_lesser);
857
+ if (result < 0) {
858
+ swap_entries (array, size, next_lesser++, next_sample++);
859
+ //shuffle
860
+ }
861
+ else if (result > 0) {
862
+ prev_greater--;
863
+ swap_entries(array, size, prev_greater, next_sample);
864
+ }
865
+ else {
866
+ equal_count++;
867
+ next_sample++;
868
+ }
869
+ }
870
+ if (index < next_lesser)
871
+ return choose_nth_item (index, array, next_lesser, size, compar);
872
+ else if (index < prev_greater)
873
+ return next_lesser; //in equal bracket
874
+ else
875
+ return choose_nth_item (index - prev_greater,
876
+ (char *) array + size * prev_greater,
877
+ count - prev_greater, size,
878
+ compar) + prev_greater;
879
+ }
880
+
881
+
882
+ /**********************************************************************
883
+ * swap_entries
884
+ *
885
+ * Swap 2 entries of abitrary size in-place in a table.
886
+ **********************************************************************/
887
+
888
+ void swap_entries( //swap in place
889
+ void *array, //array of entries
890
+ size_t size, //size of entry
891
+ inT32 index1, //entries to swap
892
+ inT32 index2) {
893
+ char tmp;
894
+ char *ptr1; //to entries
895
+ char *ptr2;
896
+ size_t count; //of bytes
897
+
898
+ ptr1 = (char *) array + index1 * size;
899
+ ptr2 = (char *) array + index2 * size;
900
+ for (count = 0; count < size; count++) {
901
+ tmp = *ptr1;
902
+ *ptr1++ = *ptr2;
903
+ *ptr2++ = tmp; //tedious!
904
+ }
905
+ }