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,220 @@
1
+ // Copyright 2007 Google Inc. All Rights Reserved.
2
+ //
3
+ // Author: Joern Wanke
4
+ //
5
+ // Simple drawing program to illustrate ScrollView capabilities.
6
+ //
7
+ // Functionality:
8
+ // - The menubar is used to select from different sample styles of input.
9
+ // - With the RMB it is possible to change the RGB values in different
10
+ // popup menus.
11
+ // - A LMB click either draws point-to-point, point or text.
12
+ // - A LMB dragging either draws a line, a rectangle or ellipse.
13
+
14
+
15
+ #include "scrollview.h"
16
+ #include "svmnode.h"
17
+ #include <stdlib.h>
18
+ #include <iostream>
19
+
20
+ // The current color values we use, initially white (== ScrollView::WHITE).
21
+ int rgb[3] = { 255, 255, 255 };
22
+
23
+ class SVPaint : public SVEventHandler {
24
+ public:
25
+ SVPaint(const char* server_name);
26
+ // This is the main event handling function that we need to overwrite, defined
27
+ // in SVEventHandler.
28
+ void Notify(const SVEvent* sv_event);
29
+ private:
30
+ // The Handler take care of the SVET_POPUP, SVET_MENU, SVET_CLICK and
31
+ // SVET_SELECTION events.
32
+ void PopupHandler(const SVEvent* sv_event);
33
+ void MenuBarHandler(const SVEvent* sv_event);
34
+ void ClickHandler(const SVEvent* sv_event);
35
+ void SelectionHandler(const SVEvent* sv_event);
36
+
37
+ // Convenience functions to build little menus.
38
+ SVMenuNode* BuildPopupMenu();
39
+ SVMenuNode* BuildMenuBar();
40
+
41
+ // Our window.
42
+ ScrollView* window_;
43
+
44
+ // The mode we are in when an SVET_CLICK or an SVET_SELECTION event occurs.
45
+ int click_mode_;
46
+ int drag_mode_;
47
+
48
+ // In the point-to-point drawing mode, we need to set a start-point the first
49
+ // time we call it (e.g. call SetCursor).
50
+ bool has_start_point_;
51
+ };
52
+
53
+ // Build a sample popup menu.
54
+ SVMenuNode* SVPaint::BuildPopupMenu() {
55
+ SVMenuNode* root = new SVMenuNode(); // Empty root node
56
+ // Initial color is white, so we all values to 255.
57
+ root->AddChild("R", // Shown caption.
58
+ 1, // assoc. command_id.
59
+ "255", // initial value.
60
+ "Red Color Value?"); // Shown description.
61
+ root->AddChild("G", 2, "255", "Green Color Value?");
62
+ root->AddChild("B", 3, "255", "Blue Color Value?");
63
+ return root;
64
+ }
65
+
66
+ // Build a sample menu bar.
67
+ SVMenuNode* SVPaint::BuildMenuBar() {
68
+ SVMenuNode* root = new SVMenuNode(); // Empty root node
69
+
70
+ // Create some submenus and add them to the root.
71
+ SVMenuNode* click = root->AddChild("Clicking");
72
+ SVMenuNode* drag = root->AddChild("Dragging");
73
+
74
+ // Put some nodes into the submenus.
75
+ click->AddChild("Point to Point Drawing", // Caption.
76
+ 1); // command_id.
77
+ click->AddChild("Point Drawing", 2);
78
+ click->AddChild("Text Drawing", 3);
79
+ drag->AddChild("Line Drawing", 4);
80
+ drag->AddChild("Rectangle Drawing", 5);
81
+ drag->AddChild("Ellipse Drawing", 6);
82
+ return root;
83
+ }
84
+
85
+ // Takes care of the SVET_POPUP events.
86
+ // In our case, SVET_POPUP is used to set RGB values.
87
+ void SVPaint::PopupHandler(const SVEvent* sv_event) {
88
+ // Since we only have the RGB values as popup items,
89
+ // we take a shortcut to not bloat up code:
90
+ rgb[sv_event->command_id - 1] = atoi(sv_event->parameter);
91
+ window_->Pen(rgb[0], rgb[1], rgb[2]);
92
+ }
93
+
94
+ // Takes care of the SVET_MENU events.
95
+ // In our case, we change either the click_mode_ (commands 1-3)
96
+ // or the drag_mode_ (commands 4-6).
97
+ void SVPaint::MenuBarHandler(const SVEvent* sv_event) {
98
+ if ((sv_event->command_id > 0) && (sv_event->command_id < 4)) {
99
+ click_mode_ = sv_event->command_id;
100
+ has_start_point_ = false;
101
+ } else { drag_mode_ = sv_event->command_id; }
102
+ }
103
+
104
+ // Takes care of the SVET_CLICK events.
105
+ // Depending on the click_mode_ we are in, either do Point-to-Point drawing,
106
+ // point drawing, or draw text.
107
+ void SVPaint::ClickHandler(const SVEvent* sv_event) {
108
+ switch (click_mode_) {
109
+ case 1: //Point to Point
110
+ if (has_start_point_) { window_->DrawTo(sv_event->x, sv_event->y);
111
+ } else {
112
+ has_start_point_ = true;
113
+ window_->SetCursor(sv_event->x, sv_event->y);
114
+ }
115
+ break;
116
+ case 2: //Point Drawing..simulated by drawing a 1 pixel line.
117
+ window_->Line(sv_event->x, sv_event->y, sv_event->x, sv_event->y);
118
+ break;
119
+ case 3: //Text
120
+ // We show a modal input dialog on our window, then draw the input and
121
+ // finally delete the input pointer.
122
+ char* p = window_->ShowInputDialog("Text:");
123
+ window_->Text(sv_event->x, sv_event->y, p);
124
+ delete p;
125
+ break;
126
+ }
127
+ }
128
+
129
+ // Takes care of the SVET_SELECTION events.
130
+ // Depending on the drag_mode_ we are in, either draw a line, a rectangle or
131
+ // an ellipse.
132
+ void SVPaint::SelectionHandler(const SVEvent* sv_event) {
133
+ switch (drag_mode_) {
134
+ //FIXME inversed x_size, y_size
135
+ case 4: //Line
136
+ window_->Line(sv_event->x, sv_event->y,
137
+ sv_event->x - sv_event->x_size,
138
+ sv_event->y - sv_event->y_size);
139
+ break;
140
+ case 5: //Rectangle
141
+ window_->Rectangle(sv_event->x, sv_event->y,
142
+ sv_event->x - sv_event->x_size,
143
+ sv_event->y - sv_event->y_size);
144
+ break;
145
+ case 6: //Ellipse
146
+ window_->Ellipse(sv_event->x - sv_event->x_size,
147
+ sv_event->y - sv_event->y_size,
148
+ sv_event->x_size, sv_event->y_size);
149
+ break;
150
+ }
151
+ }
152
+
153
+ // The event handling function from ScrollView which we have to overwrite.
154
+ // We handle CLICK, SELECTION, MENU and POPUP and throw away all other events.
155
+ void SVPaint::Notify(const SVEvent* sv_event) {
156
+ if (sv_event->type == SVET_CLICK) { ClickHandler(sv_event); }
157
+ else if (sv_event->type == SVET_SELECTION) { SelectionHandler(sv_event); }
158
+ else if (sv_event->type == SVET_MENU) { MenuBarHandler(sv_event); }
159
+ else if (sv_event->type == SVET_POPUP) { PopupHandler(sv_event); }
160
+ else {} //throw other events away
161
+ }
162
+
163
+ // Builds a new window, initializes the variables and event handler and builds
164
+ // the menu.
165
+ SVPaint::SVPaint(const char *server_name) {
166
+ window_ = new ScrollView("ScrollView Paint Example", // window caption
167
+ 0, 0, // x,y window position
168
+ 500, 500, // window size
169
+ 500, 500, // canvas size
170
+ false, // whether the Y axis is inversed.
171
+ // this is included due to legacy
172
+ // reasons for tesseract and enables
173
+ // us to have (0,0) as the LOWER left
174
+ // of the coordinate system.
175
+ server_name); // the server address.
176
+
177
+ // Set the start modes to point-to-point and line drawing.
178
+ click_mode_ = 1;
179
+ drag_mode_ = 4;
180
+ has_start_point_ = false;
181
+
182
+ // Bild our menus and add them to the window. The flag illustrates whether
183
+ // this is a menu bar.
184
+ SVMenuNode* popup_menu = BuildPopupMenu();
185
+ popup_menu->BuildMenu(window_,false);
186
+
187
+ SVMenuNode* bar_menu = BuildMenuBar();
188
+ bar_menu->BuildMenu(window_,true);
189
+
190
+ // Set the initial color values to White (could also be done by
191
+ // passing (rgb[0], rgb[1], rgb[2]).
192
+ window_->Pen(ScrollView::WHITE);
193
+ window_->Brush(ScrollView::WHITE);
194
+
195
+ // Adds the event handler to the window. This actually ensures that Notify
196
+ // gets called when events occur.
197
+ window_->AddEventHandler(this);
198
+
199
+ // Set the window visible (calling this is important to actually render
200
+ // everything. Without this call, the window would also be drawn, but the
201
+ // menu bars would be missing.
202
+ window_->SetVisible(true);
203
+
204
+ // Rest this thread until its window is destroyed.
205
+ // Note that a special eventhandling thread was created when constructing
206
+ // the window. Due to this, the application will not deadlock here.
207
+ window_->AwaitEvent(SVET_DESTROY);
208
+ // We now have 3 Threads running:
209
+ // (1) The MessageReceiver thread which fetches messages and distributes them
210
+ // (2) The EventHandler thread which handles all events for window_
211
+ // (3) The main thread which waits on window_ for a DESTROY event (blocked)
212
+ }
213
+
214
+ // If a parameter is given, we try to connect to the given server.
215
+ // This enables us to test the remote capabilites of ScrollView.
216
+ int main(int argc, char** argv) {
217
+ const char* server_name;
218
+ if (argc > 1) { server_name = argv[1]; } else { server_name = "localhost"; }
219
+ SVPaint svp(server_name);
220
+ }
@@ -0,0 +1,347 @@
1
+ ///////////////////////////////////////////////////////////////////////
2
+ // File: svutil.cpp
3
+ // Description: ScrollView Utilities
4
+ // Author: Joern Wanke
5
+ // Created: Thu Nov 29 2007
6
+ //
7
+ // (C) Copyright 2007, Google Inc.
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
+ // SVUtil contains the SVSync and SVNetwork classes, which are used for
21
+ // thread/process creation & synchronization and network connection.
22
+
23
+ #ifndef GRAPHICS_DISABLED
24
+
25
+ #include "svutil.h"
26
+
27
+ #ifdef WIN32
28
+ #include <windows.h>
29
+ #include <winsock.h>
30
+ #else
31
+ #include <arpa/inet.h>
32
+ #include <netinet/in.h>
33
+ #include <pthread.h>
34
+ #include <semaphore.h>
35
+ #include <signal.h>
36
+ #include <stdlib.h>
37
+ #include <string.h>
38
+ #include <netdb.h>
39
+ #include <sys/socket.h>
40
+ #ifdef __linux__
41
+ #include <sys/prctl.h>
42
+ #endif
43
+ #endif
44
+
45
+ #include <iostream>
46
+
47
+ const int kBufferSize = 65536;
48
+ const int kMaxMsgSize = 4096;
49
+
50
+ // Signals a thread to exit.
51
+ void SVSync::ExitThread() {
52
+ #ifdef WIN32
53
+ //ExitThread(0);
54
+ #else
55
+ pthread_exit(0);
56
+ #endif
57
+ }
58
+
59
+ // Starts a new process.
60
+ void SVSync::StartProcess(const char* executable, const char* args) {
61
+ #ifdef WIN32
62
+ std::string proc;
63
+ proc.append(executable);
64
+ proc.append(" ");
65
+ proc.append(args);
66
+ std::cout << "Starting " << proc << std::endl;
67
+ STARTUPINFO start_info;
68
+ PROCESS_INFORMATION proc_info;
69
+ GetStartupInfo(&start_info);
70
+ if (!CreateProcess(NULL, const_cast<char*>(proc.c_str()), NULL, NULL, FALSE,
71
+ CREATE_NO_WINDOW | DETACHED_PROCESS, NULL, NULL,
72
+ &start_info, &proc_info))
73
+ return;
74
+ #else
75
+ int pid = fork();
76
+ if (pid != 0) { // The father process returns
77
+ } else {
78
+ #ifdef __linux__
79
+ // Make sure the java process terminates on exit, since its
80
+ // broken socket detection seems to be useless.
81
+ prctl(PR_SET_PDEATHSIG, 2, 0, 0, 0);
82
+ #endif
83
+ char* mutable_args = strdup(args);
84
+ int argc = 1;
85
+ for (int i = 0; mutable_args[i]; ++i) {
86
+ if (mutable_args[i] == ' ') {
87
+ ++argc;
88
+ }
89
+ }
90
+ char** argv = new char*[argc + 2];
91
+ argv[0] = strdup(executable);
92
+ argv[1] = mutable_args;
93
+ argc = 2;
94
+ bool inquote = false;
95
+ for (int i = 0; mutable_args[i]; ++i) {
96
+ if (!inquote && mutable_args[i] == ' ') {
97
+ mutable_args[i] = '\0';
98
+ argv[argc++] = mutable_args + i + 1;
99
+ } else if (mutable_args[i] == '"') {
100
+ inquote = !inquote;
101
+ mutable_args[i] = ' ';
102
+ }
103
+ }
104
+ argv[argc] = NULL;
105
+ execvp(executable, argv);
106
+ }
107
+ #endif
108
+ }
109
+
110
+ SVSemaphore::SVSemaphore() {
111
+ #ifdef WIN32
112
+ semaphore_ = CreateSemaphore(0, 0, 10, 0);
113
+ #else
114
+ sem_init(&semaphore_, 0, 0);
115
+ #endif
116
+ }
117
+
118
+ void SVSemaphore::Signal() {
119
+ #ifdef WIN32
120
+ ReleaseSemaphore(semaphore_, 1, NULL);
121
+ #else
122
+ sem_post(&semaphore_);
123
+ #endif
124
+ }
125
+
126
+ void SVSemaphore::Wait() {
127
+ #ifdef WIN32
128
+ WaitForSingleObject(semaphore_, INFINITE);
129
+ #else
130
+ sem_wait(&semaphore_);
131
+ #endif
132
+ }
133
+
134
+ SVMutex::SVMutex() {
135
+ #ifdef WIN32
136
+ mutex_ = CreateMutex(0, FALSE, 0);
137
+ #else
138
+ pthread_mutex_init(&mutex_, NULL);
139
+ #endif
140
+ }
141
+
142
+ void SVMutex::Lock() {
143
+ #ifdef WIN32
144
+ WaitForSingleObject(mutex_, INFINITE);
145
+ #else
146
+ pthread_mutex_lock(&mutex_);
147
+ #endif
148
+ }
149
+
150
+ void SVMutex::Unlock() {
151
+ #ifdef WIN32
152
+ ReleaseMutex(mutex_);
153
+ #else
154
+ pthread_mutex_unlock(&mutex_);
155
+ #endif
156
+ }
157
+
158
+ // Create new thread.
159
+
160
+ void SVSync::StartThread(void *(*func)(void*), void* arg) {
161
+ #ifdef WIN32
162
+ LPTHREAD_START_ROUTINE f = (LPTHREAD_START_ROUTINE) func;
163
+ DWORD threadid;
164
+ HANDLE newthread = CreateThread(
165
+ NULL, // default security attributes
166
+ 0, // use default stack size
167
+ f, // thread function
168
+ arg, // argument to thread function
169
+ 0, // use default creation flags
170
+ &threadid); // returns the thread identifier
171
+ #else
172
+ pthread_t helper;
173
+ pthread_create(&helper, NULL, func, arg);
174
+ #endif
175
+ }
176
+
177
+ // Place a message in the message buffer (and flush it).
178
+ void SVNetwork::Send(const char* msg) {
179
+ mutex_send_->Lock();
180
+ msg_buffer_out_.append(msg);
181
+ mutex_send_->Unlock();
182
+ }
183
+
184
+ // Send the whole buffer.
185
+ void SVNetwork::Flush() {
186
+ mutex_send_->Lock();
187
+ while (msg_buffer_out_.size() > 0) {
188
+ int i = send(stream_, msg_buffer_out_.c_str(), msg_buffer_out_.length(), 0);
189
+ msg_buffer_out_.erase(0, i);
190
+ }
191
+ mutex_send_->Unlock();
192
+ }
193
+
194
+ // Receive a message from the server.
195
+ // This will always return one line of char* (denoted by \n).
196
+ char* SVNetwork::Receive() {
197
+ char* result = NULL;
198
+ #ifdef WIN32
199
+ if (has_content) { result = strtok (NULL, "\n"); }
200
+ #else
201
+ if (buffer_ptr_ != NULL) { result = strtok_r(NULL, "\n", &buffer_ptr_); }
202
+ #endif
203
+
204
+ // This means there is something left in the buffer and we return it.
205
+ if (result != NULL) { return result;
206
+ // Otherwise, we read from the stream_.
207
+ } else {
208
+ buffer_ptr_ = NULL;
209
+ has_content = false;
210
+
211
+ // The timeout length is not really important since we are looping anyway
212
+ // until a new message is delivered.
213
+ struct timeval tv;
214
+ tv.tv_sec = 10;
215
+ tv.tv_usec = 0;
216
+
217
+ // Set the flags to return when the stream_ is ready to be read.
218
+ fd_set readfds;
219
+ FD_ZERO(&readfds);
220
+ FD_SET(stream_, &readfds);
221
+
222
+ int i = select(stream_+1, &readfds, NULL, NULL, &tv);
223
+
224
+ // The stream_ died.
225
+ if (i == 0) { return NULL; }
226
+
227
+ // Read the message buffer.
228
+ i = recv(stream_, msg_buffer_in_, kMaxMsgSize, 0);
229
+
230
+ // Server quit (0) or error (-1).
231
+ if (i <= 0) { return NULL; }
232
+ msg_buffer_in_[i] = '\0';
233
+ has_content = true;
234
+ #ifdef WIN32
235
+ return strtok(msg_buffer_in_,"\n");
236
+ #else
237
+ // Setup a new string tokenizer.
238
+ return strtok_r(msg_buffer_in_, "\n", &buffer_ptr_);
239
+ #endif
240
+ }
241
+ }
242
+
243
+ // Close the connection to the server.
244
+ void SVNetwork::Close() {
245
+ #ifdef WIN32
246
+ closesocket(stream_);
247
+ #else
248
+ close(stream_);
249
+ #endif
250
+ }
251
+
252
+ // Set up a connection to hostname on port.
253
+ SVNetwork::SVNetwork(const char* hostname, int port) {
254
+ mutex_send_ = new SVMutex();
255
+ struct sockaddr_in address;
256
+ struct hostent *name;
257
+
258
+ msg_buffer_in_ = new char[kMaxMsgSize + 1];
259
+ msg_buffer_in_[0] = '\0';
260
+
261
+ has_content = false;
262
+
263
+ buffer_ptr_ = NULL;
264
+
265
+ // Get the host data depending on the OS.
266
+ #ifdef WIN32
267
+ WSADATA wsaData;
268
+ WSAStartup(MAKEWORD(1, 1), &wsaData);
269
+ name = gethostbyname(hostname);
270
+ #elif defined(__linux__)
271
+ struct hostent hp;
272
+ int herr;
273
+ char *buffer = new char[kBufferSize];
274
+ gethostbyname_r(hostname, &hp, buffer, kBufferSize, &name, &herr);
275
+ delete[] buffer;
276
+ #else
277
+ name = gethostbyname(hostname);
278
+ #endif
279
+
280
+ // Fill in the appropriate variables to be able to connect to the server.
281
+ address.sin_family = name->h_addrtype;
282
+ memcpy((char *) &address.sin_addr.s_addr,
283
+ name->h_addr_list[0], name->h_length);
284
+ address.sin_port = htons(port);
285
+
286
+ stream_ = socket(AF_INET, SOCK_STREAM, 0);
287
+
288
+ // If server is not there, we will start a new server as local child process.
289
+ if (connect(stream_, (struct sockaddr *) &address, sizeof(address)) < 0) {
290
+ const char* scrollview_path = getenv("SCROLLVIEW_PATH");
291
+ if (scrollview_path == NULL) {
292
+ #ifdef SCROLLVIEW_PATH
293
+ #define _STR(a) #a
294
+ #define _XSTR(a) _STR(a)
295
+ scrollview_path = _XSTR(SCROLLVIEW_PATH);
296
+ #undef _XSTR
297
+ #undef _STR
298
+ #else
299
+ scrollview_path = ".";
300
+ #endif
301
+ }
302
+ // The following ugly ifdef is to enable the output of the java runtime
303
+ // to be sent down a black hole on non-windows to ignore all the
304
+ // exceptions in piccolo. Ideally piccolo would be debugged to make
305
+ // this unnecessary.
306
+ // Also the path has to be separated by ; on windows and : otherwise.
307
+ #ifdef WIN32
308
+ const char* prog = "java -Xms512m -Xmx1024m";
309
+ const char* cmd_template = "-Djava.library.path=%s -cp %s/ScrollView.jar;"
310
+ "%s/piccolo-1.2.jar;%s/piccolox-1.2.jar"
311
+ " com.google.scrollview.ScrollView";
312
+ #else
313
+ const char* prog = "sh";
314
+ const char* cmd_template = "-c \"trap 'kill %1' 0 1 2 ; java "
315
+ "-Xms1024m -Xmx2048m -Djava.library.path=%s -cp %s/ScrollView.jar:"
316
+ "%s/piccolo-1.2.jar:%s/piccolox-1.2.jar"
317
+ " com.google.scrollview.ScrollView"
318
+ " >/dev/null 2>&1 & wait\"";
319
+ #endif
320
+ int cmdlen = strlen(cmd_template) + 4*strlen(scrollview_path) + 1;
321
+ char* cmd = new char[cmdlen];
322
+ snprintf(cmd, cmdlen, cmd_template, scrollview_path, scrollview_path,
323
+ scrollview_path, scrollview_path);
324
+
325
+ SVSync::StartProcess(prog, cmd);
326
+ delete [] cmd;
327
+
328
+ // Wait for server to show up.
329
+ // Note: There is no exception handling in case the server never turns up.
330
+ while (connect(stream_, (struct sockaddr *) &address,
331
+ sizeof(address)) < 0) {
332
+ std::cout << "ScrollView: Waiting for server...\n";
333
+ #ifdef WIN32
334
+ Sleep(1000);
335
+ #else
336
+ sleep(1);
337
+ #endif
338
+ }
339
+ }
340
+ }
341
+
342
+ SVNetwork::~SVNetwork() {
343
+ delete[] msg_buffer_in_;
344
+ delete mutex_send_;
345
+ }
346
+
347
+ #endif // GRAPHICS_DISABLED
@@ -0,0 +1,138 @@
1
+ ///////////////////////////////////////////////////////////////////////
2
+ // File: svutil.h
3
+ // Description: ScrollView Utilities
4
+ // Author: Joern Wanke
5
+ // Created: Thu Nov 29 2007
6
+ //
7
+ // (C) Copyright 2007, Google Inc.
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
+ // SVUtil contains the SVSync, SVSemaphore, SVMutex and SVNetwork
21
+ // classes, which are used for thread/process creation & synchronization
22
+ // and network connection.
23
+
24
+ #ifndef TESSERACT_VIEWER_SVUTIL_H__
25
+ #define TESSERACT_VIEWER_SVUTIL_H__
26
+ #include <stdio.h>
27
+ #ifdef WIN32
28
+ #include <windows.h>
29
+ #define snprintf _snprintf
30
+ #if (_MSC_VER <= 1400)
31
+ #define vsnprintf _vsnprintf
32
+ #endif
33
+ #pragma warning(disable:4786)
34
+ #else
35
+ #include <pthread.h>
36
+ #include <semaphore.h>
37
+ #endif
38
+
39
+ #include <string>
40
+
41
+ #ifndef MAX
42
+ #define MAX(a, b) ((a > b) ? a : b)
43
+ #endif
44
+
45
+ #ifndef MIN
46
+ #define MIN(a, b) ((a < b) ? a : b)
47
+ #endif
48
+
49
+ // The SVSync class provides functionality for Thread & Process Creation
50
+ class SVSync {
51
+ public:
52
+ // Create new thread.
53
+ static void StartThread(void *(*func)(void*), void* arg);
54
+ // Signals a thread to exit.
55
+ static void ExitThread();
56
+ // Starts a new process.
57
+ static void StartProcess(const char* executable, const char* args);
58
+ };
59
+
60
+ // A semaphore class which encapsulates the main signalling
61
+ // and wait abilities of semaphores for windows and unix.
62
+ class SVSemaphore {
63
+ public:
64
+ // Sets up a semaphore.
65
+ SVSemaphore();
66
+ // Signal a semaphore.
67
+ void Signal();
68
+ // Wait on a semaphore.
69
+ void Wait();
70
+ private:
71
+ #ifdef WIN32
72
+ HANDLE semaphore_;
73
+ #else
74
+ sem_t semaphore_;
75
+ #endif
76
+ };
77
+
78
+ // A mutex which encapsulates the main locking and unlocking
79
+ // abilites of mutexes for windows and unix.
80
+ class SVMutex {
81
+ public:
82
+ // Sets up a new mutex.
83
+ SVMutex();
84
+ // Locks on a mutex.
85
+ void Lock();
86
+ // Unlocks on a mutex.
87
+ void Unlock();
88
+ private:
89
+ #ifdef WIN32
90
+ HANDLE mutex_;
91
+ #else
92
+ pthread_mutex_t mutex_;
93
+ #endif
94
+ };
95
+
96
+ // The SVNetwork class takes care of the remote connection for ScrollView
97
+ // This means setting up and maintaining a remote connection, sending and
98
+ // receiving messages and closing the connection.
99
+ // It is designed to work on both Linux and Windows.
100
+ class SVNetwork {
101
+ public:
102
+ // Set up a connection to hostname on port.
103
+ SVNetwork(const char* hostname, int port);
104
+
105
+ // Destructor.
106
+ ~SVNetwork();
107
+
108
+ // Put a message in the messagebuffer to the server and try to send it.
109
+ void Send(const char* msg);
110
+
111
+ // Receive a message from the server.
112
+ // This will always return one line of char* (denoted by \n).
113
+ char* Receive();
114
+
115
+ // Close the connection to the server.
116
+ void Close();
117
+
118
+ // Flush the buffer.
119
+ void Flush();
120
+
121
+ private:
122
+ // The mutex for access to Send() and Flush().
123
+ SVMutex* mutex_send_;
124
+ // The actual stream_ to the server.
125
+ int stream_;
126
+ // Stores the last received message-chunk from the server.
127
+ char* msg_buffer_in_;
128
+
129
+ // Stores the messages which are supposed to go out.
130
+ std::string msg_buffer_out_;
131
+
132
+ bool has_content; // Win32 (strtok)
133
+ // Where we are at in our msg_buffer_in_
134
+ char* buffer_ptr_; // Unix (strtok_r)
135
+ };
136
+
137
+ #endif // TESSERACT_VIEWER_SVUTIL_H__
138
+