pdf2json 0.1.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 (473) hide show
  1. data/README.markdown +9 -0
  2. data/bin/.gitkeep +0 -0
  3. data/ext/extconf.rb +30 -0
  4. data/lib/pdf2json.rb +8 -0
  5. data/pdf2json-0.52-source/AUTHORS +24 -0
  6. data/pdf2json-0.52-source/CHANGES +11 -0
  7. data/pdf2json-0.52-source/Makefile +84 -0
  8. data/pdf2json-0.52-source/Makefile.in +84 -0
  9. data/pdf2json-0.52-source/aclocal.m4 +274 -0
  10. data/pdf2json-0.52-source/aconf-win32.h +86 -0
  11. data/pdf2json-0.52-source/aconf.h +42 -0
  12. data/pdf2json-0.52-source/aconf.h.in +41 -0
  13. data/pdf2json-0.52-source/autom4te.cache/output.0 +6908 -0
  14. data/pdf2json-0.52-source/autom4te.cache/requests +76 -0
  15. data/pdf2json-0.52-source/autom4te.cache/traces.0 +466 -0
  16. data/pdf2json-0.52-source/config.log +1259 -0
  17. data/pdf2json-0.52-source/config.status +1050 -0
  18. data/pdf2json-0.52-source/configure +6908 -0
  19. data/pdf2json-0.52-source/configure.ac +93 -0
  20. data/pdf2json-0.52-source/doc/pdffonts.1 +130 -0
  21. data/pdf2json-0.52-source/doc/pdffonts.cat +107 -0
  22. data/pdf2json-0.52-source/doc/pdffonts.hlp +117 -0
  23. data/pdf2json-0.52-source/doc/pdfimages.1 +102 -0
  24. data/pdf2json-0.52-source/doc/pdfimages.cat +92 -0
  25. data/pdf2json-0.52-source/doc/pdfimages.hlp +101 -0
  26. data/pdf2json-0.52-source/doc/pdfinfo.1 +158 -0
  27. data/pdf2json-0.52-source/doc/pdfinfo.cat +119 -0
  28. data/pdf2json-0.52-source/doc/pdfinfo.hlp +129 -0
  29. data/pdf2json-0.52-source/doc/pdftoppm.1 +115 -0
  30. data/pdf2json-0.52-source/doc/pdftoppm.cat +105 -0
  31. data/pdf2json-0.52-source/doc/pdftoppm.hlp +114 -0
  32. data/pdf2json-0.52-source/doc/pdftops.1 +229 -0
  33. data/pdf2json-0.52-source/doc/pdftops.cat +221 -0
  34. data/pdf2json-0.52-source/doc/pdftops.hlp +231 -0
  35. data/pdf2json-0.52-source/doc/pdftotext.1 +137 -0
  36. data/pdf2json-0.52-source/doc/pdftotext.cat +120 -0
  37. data/pdf2json-0.52-source/doc/pdftotext.hlp +133 -0
  38. data/pdf2json-0.52-source/doc/sample-xpdfrc +91 -0
  39. data/pdf2json-0.52-source/doc/xpdf.1 +513 -0
  40. data/pdf2json-0.52-source/doc/xpdf.cat +476 -0
  41. data/pdf2json-0.52-source/doc/xpdf.hlp +489 -0
  42. data/pdf2json-0.52-source/doc/xpdfrc.5 +480 -0
  43. data/pdf2json-0.52-source/doc/xpdfrc.cat +474 -0
  44. data/pdf2json-0.52-source/doc/xpdfrc.hlp +479 -0
  45. data/pdf2json-0.52-source/fofi/.DS_Store +0 -0
  46. data/pdf2json-0.52-source/fofi/FoFiBase.cc +156 -0
  47. data/pdf2json-0.52-source/fofi/FoFiBase.h +57 -0
  48. data/pdf2json-0.52-source/fofi/FoFiBase.o +0 -0
  49. data/pdf2json-0.52-source/fofi/FoFiEncodings.cc +994 -0
  50. data/pdf2json-0.52-source/fofi/FoFiEncodings.h +36 -0
  51. data/pdf2json-0.52-source/fofi/FoFiEncodings.o +0 -0
  52. data/pdf2json-0.52-source/fofi/FoFiTrueType.cc +2027 -0
  53. data/pdf2json-0.52-source/fofi/FoFiTrueType.h +174 -0
  54. data/pdf2json-0.52-source/fofi/FoFiTrueType.o +0 -0
  55. data/pdf2json-0.52-source/fofi/FoFiType1.cc +252 -0
  56. data/pdf2json-0.52-source/fofi/FoFiType1.h +59 -0
  57. data/pdf2json-0.52-source/fofi/FoFiType1.o +0 -0
  58. data/pdf2json-0.52-source/fofi/FoFiType1C.cc +2603 -0
  59. data/pdf2json-0.52-source/fofi/FoFiType1C.h +233 -0
  60. data/pdf2json-0.52-source/fofi/FoFiType1C.o +0 -0
  61. data/pdf2json-0.52-source/fofi/Makefile +70 -0
  62. data/pdf2json-0.52-source/fofi/Makefile.dep +0 -0
  63. data/pdf2json-0.52-source/fofi/Makefile.in +70 -0
  64. data/pdf2json-0.52-source/fofi/libfofi.a +0 -0
  65. data/pdf2json-0.52-source/fofi/vms_make.com +0 -0
  66. data/pdf2json-0.52-source/freetype.win32/.DS_Store +0 -0
  67. data/pdf2json-0.52-source/freetype.win32/include/.DS_Store +0 -0
  68. data/pdf2json-0.52-source/freetype.win32/include/freetype/config/ftconfig.h +528 -0
  69. data/pdf2json-0.52-source/freetype.win32/include/freetype/config/ftheader.h +780 -0
  70. data/pdf2json-0.52-source/freetype.win32/include/freetype/config/ftmodule.h +32 -0
  71. data/pdf2json-0.52-source/freetype.win32/include/freetype/config/ftoption.h +733 -0
  72. data/pdf2json-0.52-source/freetype.win32/include/freetype/config/ftstdlib.h +173 -0
  73. data/pdf2json-0.52-source/freetype.win32/include/freetype/freetype.h +3919 -0
  74. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftadvanc.h +179 -0
  75. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftbbox.h +94 -0
  76. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftbdf.h +209 -0
  77. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftbitmap.h +227 -0
  78. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftcache.h +1128 -0
  79. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftchapters.h +103 -0
  80. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftcid.h +166 -0
  81. data/pdf2json-0.52-source/freetype.win32/include/freetype/fterrdef.h +244 -0
  82. data/pdf2json-0.52-source/freetype.win32/include/freetype/fterrors.h +206 -0
  83. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftgasp.h +120 -0
  84. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftglyph.h +613 -0
  85. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftgxval.h +358 -0
  86. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftgzip.h +102 -0
  87. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftimage.h +1313 -0
  88. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftincrem.h +353 -0
  89. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftlcdfil.h +213 -0
  90. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftlist.h +277 -0
  91. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftlzw.h +99 -0
  92. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftmac.h +274 -0
  93. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftmm.h +378 -0
  94. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftmodapi.h +483 -0
  95. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftmoderr.h +155 -0
  96. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftotval.h +203 -0
  97. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftoutln.h +537 -0
  98. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftpfr.h +172 -0
  99. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftrender.h +230 -0
  100. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftsizes.h +159 -0
  101. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftsnames.h +200 -0
  102. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftstroke.h +716 -0
  103. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftsynth.h +80 -0
  104. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftsystem.h +347 -0
  105. data/pdf2json-0.52-source/freetype.win32/include/freetype/fttrigon.h +350 -0
  106. data/pdf2json-0.52-source/freetype.win32/include/freetype/fttypes.h +588 -0
  107. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftwinfnt.h +274 -0
  108. data/pdf2json-0.52-source/freetype.win32/include/freetype/ftxf86.h +83 -0
  109. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/autohint.h +231 -0
  110. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftcalc.h +179 -0
  111. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftdebug.h +250 -0
  112. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftdriver.h +422 -0
  113. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftgloadr.h +168 -0
  114. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftmemory.h +380 -0
  115. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftobjs.h +1428 -0
  116. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftpic.h +67 -0
  117. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftrfork.h +196 -0
  118. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftserv.h +620 -0
  119. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftstream.h +539 -0
  120. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/fttrace.h +139 -0
  121. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/ftvalid.h +150 -0
  122. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/internal.h +51 -0
  123. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/pcftypes.h +56 -0
  124. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/psaux.h +873 -0
  125. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/pshints.h +712 -0
  126. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svbdf.h +77 -0
  127. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svcid.h +83 -0
  128. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svgldict.h +82 -0
  129. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svgxval.h +72 -0
  130. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svkern.h +51 -0
  131. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svmm.h +104 -0
  132. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svotval.h +55 -0
  133. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svpfr.h +66 -0
  134. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svpostnm.h +79 -0
  135. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svpscmap.h +164 -0
  136. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svpsinfo.h +92 -0
  137. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svsfnt.h +102 -0
  138. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svttcmap.h +106 -0
  139. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svtteng.h +53 -0
  140. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svttglyf.h +67 -0
  141. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svwinfnt.h +50 -0
  142. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/services/svxf86nm.h +55 -0
  143. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/sfnt.h +897 -0
  144. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/t1types.h +270 -0
  145. data/pdf2json-0.52-source/freetype.win32/include/freetype/internal/tttypes.h +1543 -0
  146. data/pdf2json-0.52-source/freetype.win32/include/freetype/t1tables.h +504 -0
  147. data/pdf2json-0.52-source/freetype.win32/include/freetype/ttnameid.h +1247 -0
  148. data/pdf2json-0.52-source/freetype.win32/include/freetype/tttables.h +759 -0
  149. data/pdf2json-0.52-source/freetype.win32/include/freetype/tttags.h +107 -0
  150. data/pdf2json-0.52-source/freetype.win32/include/freetype/ttunpat.h +59 -0
  151. data/pdf2json-0.52-source/freetype.win32/include/ft2build.h +39 -0
  152. data/pdf2json-0.52-source/freetype.win32/lib/freetype_a.lib +0 -0
  153. data/pdf2json-0.52-source/goo/.DS_Store +0 -0
  154. data/pdf2json-0.52-source/goo/FixedPoint.cc +118 -0
  155. data/pdf2json-0.52-source/goo/FixedPoint.h +155 -0
  156. data/pdf2json-0.52-source/goo/FixedPoint.o +0 -0
  157. data/pdf2json-0.52-source/goo/GHash.cc +380 -0
  158. data/pdf2json-0.52-source/goo/GHash.h +78 -0
  159. data/pdf2json-0.52-source/goo/GHash.o +0 -0
  160. data/pdf2json-0.52-source/goo/GList.cc +97 -0
  161. data/pdf2json-0.52-source/goo/GList.h +96 -0
  162. data/pdf2json-0.52-source/goo/GList.o +0 -0
  163. data/pdf2json-0.52-source/goo/GMutex.h +49 -0
  164. data/pdf2json-0.52-source/goo/GString.cc +724 -0
  165. data/pdf2json-0.52-source/goo/GString.cc.fixed +718 -0
  166. data/pdf2json-0.52-source/goo/GString.h +136 -0
  167. data/pdf2json-0.52-source/goo/GString.o +0 -0
  168. data/pdf2json-0.52-source/goo/ImgWriter.o +0 -0
  169. data/pdf2json-0.52-source/goo/JpegWriter.o +0 -0
  170. data/pdf2json-0.52-source/goo/Makefile +72 -0
  171. data/pdf2json-0.52-source/goo/Makefile.dep +0 -0
  172. data/pdf2json-0.52-source/goo/Makefile.in +72 -0
  173. data/pdf2json-0.52-source/goo/PNGWriter.o +0 -0
  174. data/pdf2json-0.52-source/goo/gfile.cc +731 -0
  175. data/pdf2json-0.52-source/goo/gfile.h +138 -0
  176. data/pdf2json-0.52-source/goo/gfile.o +0 -0
  177. data/pdf2json-0.52-source/goo/gmem.cc +264 -0
  178. data/pdf2json-0.52-source/goo/gmem.h +79 -0
  179. data/pdf2json-0.52-source/goo/gmem.o +0 -0
  180. data/pdf2json-0.52-source/goo/gmempp.cc +32 -0
  181. data/pdf2json-0.52-source/goo/gmempp.o +0 -0
  182. data/pdf2json-0.52-source/goo/gtypes.h +29 -0
  183. data/pdf2json-0.52-source/goo/libGoo.a +0 -0
  184. data/pdf2json-0.52-source/goo/parseargs.c +190 -0
  185. data/pdf2json-0.52-source/goo/parseargs.h +71 -0
  186. data/pdf2json-0.52-source/goo/parseargs.o +0 -0
  187. data/pdf2json-0.52-source/goo/vms_directory.c +214 -0
  188. data/pdf2json-0.52-source/goo/vms_dirent.h +67 -0
  189. data/pdf2json-0.52-source/goo/vms_make.com +82 -0
  190. data/pdf2json-0.52-source/goo/vms_sys_dirent.h +54 -0
  191. data/pdf2json-0.52-source/goo/vms_unix_time.h +102 -0
  192. data/pdf2json-0.52-source/goo/vms_unix_times.c +42 -0
  193. data/pdf2json-0.52-source/goo/vms_unlink.c +22 -0
  194. data/pdf2json-0.52-source/ms_make.bat +199 -0
  195. data/pdf2json-0.52-source/splash/.DS_Store +0 -0
  196. data/pdf2json-0.52-source/splash/Makefile +103 -0
  197. data/pdf2json-0.52-source/splash/Makefile.dep +0 -0
  198. data/pdf2json-0.52-source/splash/Makefile.in +103 -0
  199. data/pdf2json-0.52-source/splash/Splash.cc +3310 -0
  200. data/pdf2json-0.52-source/splash/Splash.h +293 -0
  201. data/pdf2json-0.52-source/splash/Splash.o +0 -0
  202. data/pdf2json-0.52-source/splash/SplashBitmap.cc +188 -0
  203. data/pdf2json-0.52-source/splash/SplashBitmap.h +64 -0
  204. data/pdf2json-0.52-source/splash/SplashBitmap.o +0 -0
  205. data/pdf2json-0.52-source/splash/SplashClip.cc +382 -0
  206. data/pdf2json-0.52-source/splash/SplashClip.h +107 -0
  207. data/pdf2json-0.52-source/splash/SplashClip.o +0 -0
  208. data/pdf2json-0.52-source/splash/SplashErrorCodes.h +32 -0
  209. data/pdf2json-0.52-source/splash/SplashFTFont.cc +357 -0
  210. data/pdf2json-0.52-source/splash/SplashFTFont.h +58 -0
  211. data/pdf2json-0.52-source/splash/SplashFTFont.o +0 -0
  212. data/pdf2json-0.52-source/splash/SplashFTFontEngine.cc +179 -0
  213. data/pdf2json-0.52-source/splash/SplashFTFontEngine.h +65 -0
  214. data/pdf2json-0.52-source/splash/SplashFTFontEngine.o +0 -0
  215. data/pdf2json-0.52-source/splash/SplashFTFontFile.cc +114 -0
  216. data/pdf2json-0.52-source/splash/SplashFTFontFile.h +73 -0
  217. data/pdf2json-0.52-source/splash/SplashFTFontFile.o +0 -0
  218. data/pdf2json-0.52-source/splash/SplashFont.cc +176 -0
  219. data/pdf2json-0.52-source/splash/SplashFont.h +104 -0
  220. data/pdf2json-0.52-source/splash/SplashFont.o +0 -0
  221. data/pdf2json-0.52-source/splash/SplashFontEngine.cc +317 -0
  222. data/pdf2json-0.52-source/splash/SplashFontEngine.h +91 -0
  223. data/pdf2json-0.52-source/splash/SplashFontEngine.o +0 -0
  224. data/pdf2json-0.52-source/splash/SplashFontFile.cc +55 -0
  225. data/pdf2json-0.52-source/splash/SplashFontFile.h +60 -0
  226. data/pdf2json-0.52-source/splash/SplashFontFile.o +0 -0
  227. data/pdf2json-0.52-source/splash/SplashFontFileID.cc +23 -0
  228. data/pdf2json-0.52-source/splash/SplashFontFileID.h +30 -0
  229. data/pdf2json-0.52-source/splash/SplashFontFileID.o +0 -0
  230. data/pdf2json-0.52-source/splash/SplashGlyphBitmap.h +26 -0
  231. data/pdf2json-0.52-source/splash/SplashMath.h +89 -0
  232. data/pdf2json-0.52-source/splash/SplashPath.cc +184 -0
  233. data/pdf2json-0.52-source/splash/SplashPath.h +121 -0
  234. data/pdf2json-0.52-source/splash/SplashPath.o +0 -0
  235. data/pdf2json-0.52-source/splash/SplashPattern.cc +40 -0
  236. data/pdf2json-0.52-source/splash/SplashPattern.h +65 -0
  237. data/pdf2json-0.52-source/splash/SplashPattern.o +0 -0
  238. data/pdf2json-0.52-source/splash/SplashScreen.cc +383 -0
  239. data/pdf2json-0.52-source/splash/SplashScreen.h +56 -0
  240. data/pdf2json-0.52-source/splash/SplashScreen.o +0 -0
  241. data/pdf2json-0.52-source/splash/SplashState.cc +165 -0
  242. data/pdf2json-0.52-source/splash/SplashState.h +103 -0
  243. data/pdf2json-0.52-source/splash/SplashState.o +0 -0
  244. data/pdf2json-0.52-source/splash/SplashT1Font.cc +287 -0
  245. data/pdf2json-0.52-source/splash/SplashT1Font.h +57 -0
  246. data/pdf2json-0.52-source/splash/SplashT1Font.o +0 -0
  247. data/pdf2json-0.52-source/splash/SplashT1FontEngine.cc +124 -0
  248. data/pdf2json-0.52-source/splash/SplashT1FontEngine.h +53 -0
  249. data/pdf2json-0.52-source/splash/SplashT1FontEngine.o +0 -0
  250. data/pdf2json-0.52-source/splash/SplashT1FontFile.cc +97 -0
  251. data/pdf2json-0.52-source/splash/SplashT1FontFile.h +58 -0
  252. data/pdf2json-0.52-source/splash/SplashT1FontFile.o +0 -0
  253. data/pdf2json-0.52-source/splash/SplashTypes.h +132 -0
  254. data/pdf2json-0.52-source/splash/SplashXPath.cc +438 -0
  255. data/pdf2json-0.52-source/splash/SplashXPath.h +100 -0
  256. data/pdf2json-0.52-source/splash/SplashXPath.o +0 -0
  257. data/pdf2json-0.52-source/splash/SplashXPathScanner.cc +428 -0
  258. data/pdf2json-0.52-source/splash/SplashXPathScanner.h +87 -0
  259. data/pdf2json-0.52-source/splash/SplashXPathScanner.o +0 -0
  260. data/pdf2json-0.52-source/splash/libsplash.a +0 -0
  261. data/pdf2json-0.52-source/splash/vms_make.com +0 -0
  262. data/pdf2json-0.52-source/src/.DS_Store +0 -0
  263. data/pdf2json-0.52-source/src/GVector.h +101 -0
  264. data/pdf2json-0.52-source/src/ImgOutputDev.cc +1243 -0
  265. data/pdf2json-0.52-source/src/ImgOutputDev.h +307 -0
  266. data/pdf2json-0.52-source/src/ImgOutputDev.o +0 -0
  267. data/pdf2json-0.52-source/src/Makefile +68 -0
  268. data/pdf2json-0.52-source/src/Makefile.in +68 -0
  269. data/pdf2json-0.52-source/src/XmlFonts.cc +367 -0
  270. data/pdf2json-0.52-source/src/XmlFonts.h +91 -0
  271. data/pdf2json-0.52-source/src/XmlFonts.o +0 -0
  272. data/pdf2json-0.52-source/src/XmlLinks.cc +101 -0
  273. data/pdf2json-0.52-source/src/XmlLinks.h +54 -0
  274. data/pdf2json-0.52-source/src/XmlLinks.o +0 -0
  275. data/pdf2json-0.52-source/src/pdf2json +0 -0
  276. data/pdf2json-0.52-source/src/pdf2json.cc +343 -0
  277. data/pdf2json-0.52-source/src/pdf2json.o +0 -0
  278. data/pdf2json-0.52-source/src/pdf2xml.dtd +22 -0
  279. data/pdf2json-0.52-source/src/pdf2xmljson.dtd +9 -0
  280. data/pdf2json-0.52-source/xpdf/.DS_Store +0 -0
  281. data/pdf2json-0.52-source/xpdf/Annot.cc +1556 -0
  282. data/pdf2json-0.52-source/xpdf/Annot.h +142 -0
  283. data/pdf2json-0.52-source/xpdf/Annot.o +0 -0
  284. data/pdf2json-0.52-source/xpdf/Array.cc +73 -0
  285. data/pdf2json-0.52-source/xpdf/Array.h +58 -0
  286. data/pdf2json-0.52-source/xpdf/Array.o +0 -0
  287. data/pdf2json-0.52-source/xpdf/BuiltinFont.cc +65 -0
  288. data/pdf2json-0.52-source/xpdf/BuiltinFont.h +57 -0
  289. data/pdf2json-0.52-source/xpdf/BuiltinFont.o +0 -0
  290. data/pdf2json-0.52-source/xpdf/BuiltinFontTables.cc +4284 -0
  291. data/pdf2json-0.52-source/xpdf/BuiltinFontTables.h +23 -0
  292. data/pdf2json-0.52-source/xpdf/BuiltinFontTables.o +0 -0
  293. data/pdf2json-0.52-source/xpdf/CMap.cc +408 -0
  294. data/pdf2json-0.52-source/xpdf/CMap.h +102 -0
  295. data/pdf2json-0.52-source/xpdf/CMap.o +0 -0
  296. data/pdf2json-0.52-source/xpdf/Catalog.cc +374 -0
  297. data/pdf2json-0.52-source/xpdf/Catalog.h +97 -0
  298. data/pdf2json-0.52-source/xpdf/Catalog.o +0 -0
  299. data/pdf2json-0.52-source/xpdf/CharCodeToUnicode.cc +540 -0
  300. data/pdf2json-0.52-source/xpdf/CharCodeToUnicode.h +117 -0
  301. data/pdf2json-0.52-source/xpdf/CharCodeToUnicode.o +0 -0
  302. data/pdf2json-0.52-source/xpdf/CharTypes.h +24 -0
  303. data/pdf2json-0.52-source/xpdf/CompactFontTables.h +464 -0
  304. data/pdf2json-0.52-source/xpdf/CoreOutputDev.cc +61 -0
  305. data/pdf2json-0.52-source/xpdf/CoreOutputDev.h +61 -0
  306. data/pdf2json-0.52-source/xpdf/Decrypt.cc +776 -0
  307. data/pdf2json-0.52-source/xpdf/Decrypt.h +95 -0
  308. data/pdf2json-0.52-source/xpdf/Decrypt.o +0 -0
  309. data/pdf2json-0.52-source/xpdf/Dict.cc +95 -0
  310. data/pdf2json-0.52-source/xpdf/Dict.h +77 -0
  311. data/pdf2json-0.52-source/xpdf/Dict.o +0 -0
  312. data/pdf2json-0.52-source/xpdf/Error.cc +38 -0
  313. data/pdf2json-0.52-source/xpdf/Error.h +23 -0
  314. data/pdf2json-0.52-source/xpdf/Error.o +0 -0
  315. data/pdf2json-0.52-source/xpdf/ErrorCodes.h +36 -0
  316. data/pdf2json-0.52-source/xpdf/FontEncodingTables.cc +1824 -0
  317. data/pdf2json-0.52-source/xpdf/FontEncodingTables.h +20 -0
  318. data/pdf2json-0.52-source/xpdf/FontEncodingTables.o +0 -0
  319. data/pdf2json-0.52-source/xpdf/Function.cc +1573 -0
  320. data/pdf2json-0.52-source/xpdf/Function.h +229 -0
  321. data/pdf2json-0.52-source/xpdf/Function.o +0 -0
  322. data/pdf2json-0.52-source/xpdf/Gfx.cc +4187 -0
  323. data/pdf2json-0.52-source/xpdf/Gfx.h +312 -0
  324. data/pdf2json-0.52-source/xpdf/Gfx.o +0 -0
  325. data/pdf2json-0.52-source/xpdf/GfxFont.cc +1568 -0
  326. data/pdf2json-0.52-source/xpdf/GfxFont.h +320 -0
  327. data/pdf2json-0.52-source/xpdf/GfxFont.o +0 -0
  328. data/pdf2json-0.52-source/xpdf/GfxState.cc +4137 -0
  329. data/pdf2json-0.52-source/xpdf/GfxState.h +1244 -0
  330. data/pdf2json-0.52-source/xpdf/GfxState.o +0 -0
  331. data/pdf2json-0.52-source/xpdf/GlobalParams.cc +2924 -0
  332. data/pdf2json-0.52-source/xpdf/GlobalParams.cc.old +2908 -0
  333. data/pdf2json-0.52-source/xpdf/GlobalParams.h +466 -0
  334. data/pdf2json-0.52-source/xpdf/GlobalParams.h.old +463 -0
  335. data/pdf2json-0.52-source/xpdf/GlobalParams.o +0 -0
  336. data/pdf2json-0.52-source/xpdf/ImageOutputDev.cc +195 -0
  337. data/pdf2json-0.52-source/xpdf/ImageOutputDev.h +76 -0
  338. data/pdf2json-0.52-source/xpdf/ImageOutputDev.o +0 -0
  339. data/pdf2json-0.52-source/xpdf/JArithmeticDecoder.cc +322 -0
  340. data/pdf2json-0.52-source/xpdf/JArithmeticDecoder.h +109 -0
  341. data/pdf2json-0.52-source/xpdf/JArithmeticDecoder.o +0 -0
  342. data/pdf2json-0.52-source/xpdf/JBIG2Stream.cc +3413 -0
  343. data/pdf2json-0.52-source/xpdf/JBIG2Stream.h +145 -0
  344. data/pdf2json-0.52-source/xpdf/JBIG2Stream.o +0 -0
  345. data/pdf2json-0.52-source/xpdf/JPXStream.cc +3144 -0
  346. data/pdf2json-0.52-source/xpdf/JPXStream.h +351 -0
  347. data/pdf2json-0.52-source/xpdf/JPXStream.o +0 -0
  348. data/pdf2json-0.52-source/xpdf/Lexer.cc +485 -0
  349. data/pdf2json-0.52-source/xpdf/Lexer.h +80 -0
  350. data/pdf2json-0.52-source/xpdf/Lexer.o +0 -0
  351. data/pdf2json-0.52-source/xpdf/Link.cc +806 -0
  352. data/pdf2json-0.52-source/xpdf/Link.cc.old +784 -0
  353. data/pdf2json-0.52-source/xpdf/Link.h +415 -0
  354. data/pdf2json-0.52-source/xpdf/Link.h.old +369 -0
  355. data/pdf2json-0.52-source/xpdf/Link.o +0 -0
  356. data/pdf2json-0.52-source/xpdf/Makefile +232 -0
  357. data/pdf2json-0.52-source/xpdf/Makefile.dep +0 -0
  358. data/pdf2json-0.52-source/xpdf/Makefile.in +232 -0
  359. data/pdf2json-0.52-source/xpdf/NameToCharCode.cc +116 -0
  360. data/pdf2json-0.52-source/xpdf/NameToCharCode.h +42 -0
  361. data/pdf2json-0.52-source/xpdf/NameToCharCode.o +0 -0
  362. data/pdf2json-0.52-source/xpdf/NameToUnicodeTable.h +1097 -0
  363. data/pdf2json-0.52-source/xpdf/Object.cc +231 -0
  364. data/pdf2json-0.52-source/xpdf/Object.h +303 -0
  365. data/pdf2json-0.52-source/xpdf/Object.o +0 -0
  366. data/pdf2json-0.52-source/xpdf/Outline.cc +151 -0
  367. data/pdf2json-0.52-source/xpdf/Outline.h +76 -0
  368. data/pdf2json-0.52-source/xpdf/Outline.o +0 -0
  369. data/pdf2json-0.52-source/xpdf/OutputDev.cc +131 -0
  370. data/pdf2json-0.52-source/xpdf/OutputDev.h +253 -0
  371. data/pdf2json-0.52-source/xpdf/OutputDev.o +0 -0
  372. data/pdf2json-0.52-source/xpdf/PDFCore.cc +2044 -0
  373. data/pdf2json-0.52-source/xpdf/PDFCore.h +321 -0
  374. data/pdf2json-0.52-source/xpdf/PDFDoc.cc +404 -0
  375. data/pdf2json-0.52-source/xpdf/PDFDoc.h +183 -0
  376. data/pdf2json-0.52-source/xpdf/PDFDoc.o +0 -0
  377. data/pdf2json-0.52-source/xpdf/PDFDocEncoding.cc +44 -0
  378. data/pdf2json-0.52-source/xpdf/PDFDocEncoding.h +16 -0
  379. data/pdf2json-0.52-source/xpdf/PDFDocEncoding.o +0 -0
  380. data/pdf2json-0.52-source/xpdf/PSOutputDev.cc +6224 -0
  381. data/pdf2json-0.52-source/xpdf/PSOutputDev.h +395 -0
  382. data/pdf2json-0.52-source/xpdf/PSOutputDev.o +0 -0
  383. data/pdf2json-0.52-source/xpdf/PSTokenizer.cc +135 -0
  384. data/pdf2json-0.52-source/xpdf/PSTokenizer.h +41 -0
  385. data/pdf2json-0.52-source/xpdf/PSTokenizer.o +0 -0
  386. data/pdf2json-0.52-source/xpdf/Page.cc +454 -0
  387. data/pdf2json-0.52-source/xpdf/Page.h +187 -0
  388. data/pdf2json-0.52-source/xpdf/Page.o +0 -0
  389. data/pdf2json-0.52-source/xpdf/Parser.cc +227 -0
  390. data/pdf2json-0.52-source/xpdf/Parser.h +59 -0
  391. data/pdf2json-0.52-source/xpdf/Parser.o +0 -0
  392. data/pdf2json-0.52-source/xpdf/PreScanOutputDev.cc +257 -0
  393. data/pdf2json-0.52-source/xpdf/PreScanOutputDev.h +130 -0
  394. data/pdf2json-0.52-source/xpdf/PreScanOutputDev.o +0 -0
  395. data/pdf2json-0.52-source/xpdf/SecurityHandler.cc +390 -0
  396. data/pdf2json-0.52-source/xpdf/SecurityHandler.h +160 -0
  397. data/pdf2json-0.52-source/xpdf/SecurityHandler.o +0 -0
  398. data/pdf2json-0.52-source/xpdf/SplashOutputDev.cc +2845 -0
  399. data/pdf2json-0.52-source/xpdf/SplashOutputDev.h +247 -0
  400. data/pdf2json-0.52-source/xpdf/SplashOutputDev.o +0 -0
  401. data/pdf2json-0.52-source/xpdf/Stream-CCITT.h +459 -0
  402. data/pdf2json-0.52-source/xpdf/Stream.cc +4627 -0
  403. data/pdf2json-0.52-source/xpdf/Stream.h +858 -0
  404. data/pdf2json-0.52-source/xpdf/Stream.o +0 -0
  405. data/pdf2json-0.52-source/xpdf/TextOutputDev.cc +4090 -0
  406. data/pdf2json-0.52-source/xpdf/TextOutputDev.h +661 -0
  407. data/pdf2json-0.52-source/xpdf/TextOutputDev.o +0 -0
  408. data/pdf2json-0.52-source/xpdf/UTF8.h +56 -0
  409. data/pdf2json-0.52-source/xpdf/UnicodeMap.cc +302 -0
  410. data/pdf2json-0.52-source/xpdf/UnicodeMap.cc.old +293 -0
  411. data/pdf2json-0.52-source/xpdf/UnicodeMap.h +135 -0
  412. data/pdf2json-0.52-source/xpdf/UnicodeMap.h.old +123 -0
  413. data/pdf2json-0.52-source/xpdf/UnicodeMap.o +0 -0
  414. data/pdf2json-0.52-source/xpdf/UnicodeMapTables.h +361 -0
  415. data/pdf2json-0.52-source/xpdf/UnicodeTypeTable.cc +949 -0
  416. data/pdf2json-0.52-source/xpdf/UnicodeTypeTable.h +20 -0
  417. data/pdf2json-0.52-source/xpdf/UnicodeTypeTable.o +0 -0
  418. data/pdf2json-0.52-source/xpdf/XPDFApp.cc +447 -0
  419. data/pdf2json-0.52-source/xpdf/XPDFApp.h +114 -0
  420. data/pdf2json-0.52-source/xpdf/XPDFCore.cc +1655 -0
  421. data/pdf2json-0.52-source/xpdf/XPDFCore.h +251 -0
  422. data/pdf2json-0.52-source/xpdf/XPDFTree.cc +931 -0
  423. data/pdf2json-0.52-source/xpdf/XPDFTree.h +45 -0
  424. data/pdf2json-0.52-source/xpdf/XPDFTreeP.h +87 -0
  425. data/pdf2json-0.52-source/xpdf/XPDFViewer.cc +3488 -0
  426. data/pdf2json-0.52-source/xpdf/XPDFViewer.h +352 -0
  427. data/pdf2json-0.52-source/xpdf/XRef.cc +896 -0
  428. data/pdf2json-0.52-source/xpdf/XRef.h +133 -0
  429. data/pdf2json-0.52-source/xpdf/XRef.o +0 -0
  430. data/pdf2json-0.52-source/xpdf/XpdfPluginAPI.cc +262 -0
  431. data/pdf2json-0.52-source/xpdf/XpdfPluginAPI.h +341 -0
  432. data/pdf2json-0.52-source/xpdf/XpdfPluginAPI.o +0 -0
  433. data/pdf2json-0.52-source/xpdf/about-text.h +48 -0
  434. data/pdf2json-0.52-source/xpdf/about.xbm +6 -0
  435. data/pdf2json-0.52-source/xpdf/backArrow.xbm +6 -0
  436. data/pdf2json-0.52-source/xpdf/backArrowDis.xbm +6 -0
  437. data/pdf2json-0.52-source/xpdf/config.h +112 -0
  438. data/pdf2json-0.52-source/xpdf/dblLeftArrow.xbm +6 -0
  439. data/pdf2json-0.52-source/xpdf/dblLeftArrowDis.xbm +6 -0
  440. data/pdf2json-0.52-source/xpdf/dblRightArrow.xbm +6 -0
  441. data/pdf2json-0.52-source/xpdf/dblRightArrowDis.xbm +6 -0
  442. data/pdf2json-0.52-source/xpdf/find.xbm +6 -0
  443. data/pdf2json-0.52-source/xpdf/findDis.xbm +6 -0
  444. data/pdf2json-0.52-source/xpdf/forwardArrow.xbm +6 -0
  445. data/pdf2json-0.52-source/xpdf/forwardArrowDis.xbm +6 -0
  446. data/pdf2json-0.52-source/xpdf/leftArrow.xbm +5 -0
  447. data/pdf2json-0.52-source/xpdf/leftArrowDis.xbm +5 -0
  448. data/pdf2json-0.52-source/xpdf/libXpdf.a +0 -0
  449. data/pdf2json-0.52-source/xpdf/pdffonts +0 -0
  450. data/pdf2json-0.52-source/xpdf/pdffonts.cc +298 -0
  451. data/pdf2json-0.52-source/xpdf/pdffonts.o +0 -0
  452. data/pdf2json-0.52-source/xpdf/pdfimages +0 -0
  453. data/pdf2json-0.52-source/xpdf/pdfimages.cc +155 -0
  454. data/pdf2json-0.52-source/xpdf/pdfimages.o +0 -0
  455. data/pdf2json-0.52-source/xpdf/pdfinfo +0 -0
  456. data/pdf2json-0.52-source/xpdf/pdfinfo.cc +387 -0
  457. data/pdf2json-0.52-source/xpdf/pdfinfo.o +0 -0
  458. data/pdf2json-0.52-source/xpdf/pdftoppm.cc +203 -0
  459. data/pdf2json-0.52-source/xpdf/pdftops +0 -0
  460. data/pdf2json-0.52-source/xpdf/pdftops.cc +344 -0
  461. data/pdf2json-0.52-source/xpdf/pdftops.o +0 -0
  462. data/pdf2json-0.52-source/xpdf/pdftotext +0 -0
  463. data/pdf2json-0.52-source/xpdf/pdftotext.cc +333 -0
  464. data/pdf2json-0.52-source/xpdf/pdftotext.o +0 -0
  465. data/pdf2json-0.52-source/xpdf/print.xbm +6 -0
  466. data/pdf2json-0.52-source/xpdf/printDis.xbm +6 -0
  467. data/pdf2json-0.52-source/xpdf/rightArrow.xbm +5 -0
  468. data/pdf2json-0.52-source/xpdf/rightArrowDis.xbm +5 -0
  469. data/pdf2json-0.52-source/xpdf/vms_make.com +129 -0
  470. data/pdf2json-0.52-source/xpdf/xpdf.cc +344 -0
  471. data/pdf2json-0.52-source/xpdf/xpdfIcon.xpm +62 -0
  472. data/pdf2json.gemspec +29 -0
  473. metadata +518 -0
@@ -0,0 +1,251 @@
1
+ //========================================================================
2
+ //
3
+ // XPDFCore.h
4
+ //
5
+ // Copyright 2002-2003 Glyph & Cog, LLC
6
+ //
7
+ //========================================================================
8
+
9
+ #ifndef XPDFCORE_H
10
+ #define XPDFCORE_H
11
+
12
+ #include <aconf.h>
13
+
14
+ #ifdef USE_GCC_PRAGMAS
15
+ #pragma interface
16
+ #endif
17
+
18
+ #define Object XtObject
19
+ #include <Xm/XmAll.h>
20
+ #undef Object
21
+ #include "gtypes.h"
22
+ #include "gfile.h" // for time_t
23
+ #include "SplashTypes.h"
24
+ #include "PDFCore.h"
25
+
26
+ class GString;
27
+ class BaseStream;
28
+ class PDFDoc;
29
+ class LinkAction;
30
+
31
+ //------------------------------------------------------------------------
32
+
33
+ #define xMaxRGBCube 6 // max size of RGB color cube
34
+
35
+ //------------------------------------------------------------------------
36
+ // callbacks
37
+ //------------------------------------------------------------------------
38
+
39
+ typedef void (*XPDFUpdateCbk)(void *data, GString *fileName,
40
+ int pageNum, int numPages, char *linkLabel);
41
+
42
+ typedef void (*XPDFActionCbk)(void *data, char *action);
43
+
44
+ typedef void (*XPDFKeyPressCbk)(void *data, KeySym key, Guint modifiers,
45
+ XEvent *event);
46
+
47
+ typedef void (*XPDFMouseCbk)(void *data, XEvent *event);
48
+
49
+ //------------------------------------------------------------------------
50
+ // XPDFCore
51
+ //------------------------------------------------------------------------
52
+
53
+ class XPDFCore: public PDFCore {
54
+ public:
55
+
56
+ // Create viewer core inside <parentWidgetA>.
57
+ XPDFCore(Widget shellA, Widget parentWidgetA,
58
+ SplashColorPtr paperColorA, Gulong paperPixelA,
59
+ Gulong mattePixelA, GBool fullScreenA, GBool reverseVideoA,
60
+ GBool installCmap, int rgbCubeSizeA);
61
+
62
+ ~XPDFCore();
63
+
64
+ //----- loadFile / displayPage / displayDest
65
+
66
+ // Load a new file. Returns pdfOk or error code.
67
+ virtual int loadFile(GString *fileName, GString *ownerPassword = NULL,
68
+ GString *userPassword = NULL);
69
+
70
+ // Load a new file, via a Stream instead of a file name. Returns
71
+ // pdfOk or error code.
72
+ virtual int loadFile(BaseStream *stream, GString *ownerPassword = NULL,
73
+ GString *userPassword = NULL);
74
+
75
+ // Load an already-created PDFDoc object.
76
+ virtual void loadDoc(PDFDoc *docA);
77
+
78
+ // Resize the window to fit page <pg> of the current document.
79
+ void resizeToPage(int pg);
80
+
81
+ // Update the display, given the specified parameters.
82
+ virtual void update(int topPageA, int scrollXA, int scrollYA,
83
+ double zoomA, int rotateA,
84
+ GBool force, GBool addToHist);
85
+
86
+ //----- page/position changes
87
+
88
+ virtual GBool gotoNextPage(int inc, GBool top);
89
+ virtual GBool gotoPrevPage(int dec, GBool top, GBool bottom);
90
+ virtual GBool goForward();
91
+ virtual GBool goBackward();
92
+
93
+ //----- selection
94
+
95
+ void startSelection(int wx, int wy);
96
+ void endSelection(int wx, int wy);
97
+ void copySelection();
98
+ void startPan(int wx, int wy);
99
+ void endPan(int wx, int wy);
100
+
101
+ //----- hyperlinks
102
+
103
+ void doAction(LinkAction *action);
104
+ LinkAction *getLinkAction() { return linkAction; }
105
+ GString *mungeURL(GString *url);
106
+
107
+ //----- find
108
+
109
+ virtual GBool find(char *s, GBool caseSensitive,
110
+ GBool next, GBool backward, GBool onePageOnly);
111
+ virtual GBool findU(Unicode *u, int len, GBool caseSensitive,
112
+ GBool next, GBool backward, GBool onePageOnly);
113
+
114
+ //----- simple modal dialogs
115
+
116
+ GBool doQuestionDialog(char *title, GString *msg);
117
+ void doInfoDialog(char *title, GString *msg);
118
+ void doErrorDialog(char *title, GString *msg);
119
+
120
+ //----- password dialog
121
+
122
+ GString *getPassword();
123
+
124
+ //----- misc access
125
+
126
+ Widget getWidget() { return scrolledWin; }
127
+ Widget getDrawAreaWidget() { return drawArea; }
128
+ virtual void setBusyCursor(GBool busy);
129
+ Cursor getBusyCursor() { return busyCursor; }
130
+ void takeFocus();
131
+ void enableHyperlinks(GBool on) { hyperlinksEnabled = on; }
132
+ GBool getHyperlinksEnabled() { return hyperlinksEnabled; }
133
+ void enableSelect(GBool on) { selectEnabled = on; }
134
+ void setUpdateCbk(XPDFUpdateCbk cbk, void *data)
135
+ { updateCbk = cbk; updateCbkData = data; }
136
+ void setActionCbk(XPDFActionCbk cbk, void *data)
137
+ { actionCbk = cbk; actionCbkData = data; }
138
+ void setKeyPressCbk(XPDFKeyPressCbk cbk, void *data)
139
+ { keyPressCbk = cbk; keyPressCbkData = data; }
140
+ void setMouseCbk(XPDFMouseCbk cbk, void *data)
141
+ { mouseCbk = cbk; mouseCbkData = data; }
142
+ GBool getFullScreen() { return fullScreen; }
143
+
144
+ private:
145
+
146
+ virtual GBool checkForNewFile();
147
+
148
+ //----- hyperlinks
149
+ void runCommand(GString *cmdFmt, GString *arg);
150
+
151
+ //----- selection
152
+ static Boolean convertSelectionCbk(Widget widget, Atom *selection,
153
+ Atom *target, Atom *type,
154
+ XtPointer *value, unsigned long *length,
155
+ int *format);
156
+
157
+ //----- GUI code
158
+ void setupX(GBool installCmap, int rgbCubeSizeA);
159
+ void initWindow();
160
+ static void hScrollChangeCbk(Widget widget, XtPointer ptr,
161
+ XtPointer callData);
162
+ static void hScrollDragCbk(Widget widget, XtPointer ptr,
163
+ XtPointer callData);
164
+ static void vScrollChangeCbk(Widget widget, XtPointer ptr,
165
+ XtPointer callData);
166
+ static void vScrollDragCbk(Widget widget, XtPointer ptr,
167
+ XtPointer callData);
168
+ static void resizeCbk(Widget widget, XtPointer ptr, XtPointer callData);
169
+ static void redrawCbk(Widget widget, XtPointer ptr, XtPointer callData);
170
+ static void inputCbk(Widget widget, XtPointer ptr, XtPointer callData);
171
+ virtual PDFCoreTile *newTile(int xDestA, int yDestA);
172
+ virtual void updateTileData(PDFCoreTile *tileA, int xSrc, int ySrc,
173
+ int width, int height, GBool composited);
174
+ virtual void redrawRect(PDFCoreTile *tileA, int xSrc, int ySrc,
175
+ int xDest, int yDest, int width, int height,
176
+ GBool composited);
177
+ virtual void updateScrollbars();
178
+ void setCursor(Cursor cursor);
179
+ GBool doDialog(int type, GBool hasCancel,
180
+ char *title, GString *msg);
181
+ static void dialogOkCbk(Widget widget, XtPointer ptr,
182
+ XtPointer callData);
183
+ static void dialogCancelCbk(Widget widget, XtPointer ptr,
184
+ XtPointer callData);
185
+ void initPasswordDialog();
186
+ static void passwordTextVerifyCbk(Widget widget, XtPointer ptr,
187
+ XtPointer callData);
188
+ static void passwordOkCbk(Widget widget, XtPointer ptr,
189
+ XtPointer callData);
190
+ static void passwordCancelCbk(Widget widget, XtPointer ptr,
191
+ XtPointer callData);
192
+
193
+ Gulong paperPixel;
194
+ Gulong mattePixel;
195
+ //~unimp: move fullScreen into PDFCore?
196
+ GBool fullScreen;
197
+
198
+ Display *display;
199
+ int screenNum;
200
+ Visual *visual;
201
+ Colormap colormap;
202
+ Guint depth; // visual depth
203
+ GBool trueColor; // set if using a TrueColor visual
204
+ int rDiv, gDiv, bDiv; // RGB right shifts (for TrueColor)
205
+ int rShift, gShift, bShift; // RGB left shifts (for TrueColor)
206
+ int rgbCubeSize; // size of color cube (for non-TrueColor)
207
+ Gulong // color cube (for non-TrueColor)
208
+ colors[xMaxRGBCube * xMaxRGBCube * xMaxRGBCube];
209
+
210
+ Widget shell; // top-level shell containing the widget
211
+ Widget parentWidget; // parent widget (not created by XPDFCore)
212
+ Widget scrolledWin;
213
+ Widget hScrollBar;
214
+ Widget vScrollBar;
215
+ Widget drawAreaFrame;
216
+ Widget drawArea;
217
+ Cursor busyCursor, linkCursor, selectCursor;
218
+ Cursor currentCursor;
219
+ GC drawAreaGC; // GC for blitting into drawArea
220
+
221
+ static GString *currentSelection; // selected text
222
+ static XPDFCore *currentSelectionOwner;
223
+ static Atom targetsAtom;
224
+
225
+ GBool panning;
226
+ int panMX, panMY;
227
+
228
+ time_t modTime; // last modification time of PDF file
229
+
230
+ LinkAction *linkAction; // mouse cursor is over this link
231
+
232
+ XPDFUpdateCbk updateCbk;
233
+ void *updateCbkData;
234
+ XPDFActionCbk actionCbk;
235
+ void *actionCbkData;
236
+ XPDFKeyPressCbk keyPressCbk;
237
+ void *keyPressCbkData;
238
+ XPDFMouseCbk mouseCbk;
239
+ void *mouseCbkData;
240
+
241
+ GBool hyperlinksEnabled;
242
+ GBool selectEnabled;
243
+
244
+ int dialogDone;
245
+
246
+ Widget passwordDialog;
247
+ Widget passwordText;
248
+ GString *password;
249
+ };
250
+
251
+ #endif
@@ -0,0 +1,931 @@
1
+ //========================================================================
2
+ //
3
+ // XPDFTree.cc
4
+ //
5
+ // Copyright 2002-2003 Glyph & Cog, LLC
6
+ //
7
+ //========================================================================
8
+
9
+ #include <stdlib.h>
10
+ #include "gmem.h"
11
+ #include "XPDFTreeP.h"
12
+
13
+ //------------------------------------------------------------------------
14
+
15
+ #define xpdfTreeIndent 16
16
+
17
+ //------------------------------------------------------------------------
18
+
19
+ struct _XPDFTreeEntry {
20
+ Widget widget;
21
+ XPDFTreeEntry *children;
22
+ XPDFTreeEntry *next;
23
+ };
24
+
25
+ //------------------------------------------------------------------------
26
+
27
+ static void classPartInitialize(WidgetClass widgetClass);
28
+ static void initialize(Widget requestWidget, Widget newWidget,
29
+ ArgList args, Cardinal *numArgs);
30
+ static void destroy(Widget widget);
31
+ static void destroySubtree(XPDFTreeEntry *e);
32
+ static void resize(Widget widget);
33
+ static void redisplay(Widget widget, XEvent *event, Region region);
34
+ static void redisplaySubtree(XPDFTreeWidget w, XPDFTreeEntry *e,
35
+ XEvent *event, Region region);
36
+ static void drawExpandedIcon(XPDFTreeWidget w, Position x, Position y);
37
+ static void drawCollapsedIcon(XPDFTreeWidget w, Position x, Position y);
38
+ static Boolean setValues(Widget oldWidget, Widget requestWidget,
39
+ Widget newWidget, ArgList args, Cardinal *numArgs);
40
+ static void setValuesAlmost(Widget oldWidget, Widget newWidget,
41
+ XtWidgetGeometry *request,
42
+ XtWidgetGeometry *reply);
43
+ static XtGeometryResult queryGeometry(Widget widget,
44
+ XtWidgetGeometry *request,
45
+ XtWidgetGeometry *reply);
46
+ static XtGeometryResult geometryManager(Widget widget,
47
+ XtWidgetGeometry *request,
48
+ XtWidgetGeometry *reply);
49
+ static void changeManaged(Widget widget);
50
+ static void initConstraint(Widget requestWidget, Widget newWidget,
51
+ ArgList args, Cardinal *numArgs);
52
+ static void destroyConstraint(Widget widget);
53
+ static void deleteSubtree(Widget widget);
54
+ static Boolean constraintSetValues(Widget oldWidget, Widget requestWidget,
55
+ Widget newWidget,
56
+ ArgList args, Cardinal *numArgs);
57
+ static void insertChildOnList(XPDFTreeEntry *e, XPDFTreeEntry **listHead);
58
+ static void deleteChildFromList(XPDFTreeEntry *e, XPDFTreeEntry **listHead);
59
+ static void createGC(Widget widget);
60
+ static void destroyGC(Widget widget);
61
+ static void layout(Widget widget, Widget instigator);
62
+ static int layoutSubtree(XPDFTreeWidget w, Widget instigator,
63
+ XPDFTreeEntry *e, Position x, Position y,
64
+ Boolean visible);
65
+ static void calcSize(Widget widget, Widget instigator,
66
+ Dimension *totalWidth,
67
+ Dimension *totalHeight);
68
+ static void calcSubtreeSize(XPDFTreeWidget w, Widget instigator,
69
+ XPDFTreeEntry *e,
70
+ Dimension *width, Dimension *height);
71
+ static Boolean needRelayout(Widget oldWidget, Widget newWidget);
72
+ static void click(Widget widget, XEvent *event,
73
+ String *params, Cardinal *numParams);
74
+ static Boolean findPosition(XPDFTreeWidget w, int x, int y,
75
+ XPDFTreeEntry **e, Boolean *onExpandIcon);
76
+ static Boolean findPositionInSubtree(XPDFTreeWidget w, int x, int y,
77
+ XPDFTreeEntry **e,
78
+ Boolean *onExpandIcon);
79
+
80
+ //------------------------------------------------------------------------
81
+
82
+ static XtResource resources[] = {
83
+ { XmNmarginWidth, XmCMarginWidth, XmRHorizontalDimension,
84
+ sizeof(Dimension), XtOffsetOf(XPDFTreeRec, tree.marginWidth),
85
+ XmRImmediate, (XtPointer)0 },
86
+ { XmNmarginHeight, XmCMarginHeight, XmRVerticalDimension,
87
+ sizeof(Dimension), XtOffsetOf(XPDFTreeRec, tree.marginHeight),
88
+ XmRImmediate, (XtPointer)0 },
89
+ { XPDFNselectionCallback, XmCCallback, XmRCallback,
90
+ sizeof(XtCallbackList), XtOffsetOf(XPDFTreeRec, tree.selectCallback),
91
+ XmRImmediate, (XtPointer)NULL }
92
+ };
93
+
94
+ static XmSyntheticResource synResources[] = {
95
+ { XmNmarginWidth, sizeof(Dimension),
96
+ XtOffsetOf(XPDFTreeRec, tree.marginWidth),
97
+ #if XmVERSION > 1
98
+ XmeFromHorizontalPixels, XmeToHorizontalPixels
99
+ #else
100
+ _XmFromHorizontalPixels, _XmToHorizontalPixels
101
+ #endif
102
+ },
103
+ { XmNmarginHeight, sizeof(Dimension),
104
+ XtOffsetOf(XPDFTreeRec, tree.marginHeight),
105
+ #if XmVERSION > 1
106
+ XmeFromVerticalPixels, XmeToVerticalPixels
107
+ #else
108
+ _XmFromVerticalPixels, _XmToVerticalPixels
109
+ #endif
110
+ }
111
+ };
112
+
113
+ static XtResource constraints[] = {
114
+ { XPDFNentryParent, XPDFCentryParent, XmRWidget,
115
+ sizeof(Widget), XtOffsetOf(XPDFTreeConstraintRec, tree.entryParent),
116
+ XmRImmediate, (XtPointer)NULL },
117
+ { XPDFNentryExpanded, XPDFCentryExpanded, XmRBoolean,
118
+ sizeof(Boolean), XtOffsetOf(XPDFTreeConstraintRec, tree.entryExpanded),
119
+ XmRImmediate, (XtPointer)False },
120
+ { XPDFNentryPosition, XPDFCentryPosition, XmRInt,
121
+ sizeof(int), XtOffsetOf(XPDFTreeConstraintRec, tree.entryPosition),
122
+ XmRImmediate, (XtPointer)0 }
123
+ };
124
+
125
+ static char defaultTranslations[] =
126
+ "<Btn1Down>: XPDFTreeClick()";
127
+
128
+ static XtActionsRec actions[] = {
129
+ { "XPDFTreeClick", click }
130
+ };
131
+
132
+ externaldef(xpdftreeclassrec) XPDFTreeClassRec xpdfTreeClassRec = {
133
+ { // Core
134
+ (WidgetClass)&xmManagerClassRec, // superclass
135
+ "XPDFTree", // class_name
136
+ sizeof(XPDFTreeRec), // widget_size
137
+ NULL, // class_initialize
138
+ &classPartInitialize, // class_part_initialize
139
+ FALSE, // class_inited
140
+ &initialize, // initialize
141
+ NULL, // initialize_hook
142
+ XtInheritRealize, // realize
143
+ actions, // actions
144
+ XtNumber(actions), // num_actions
145
+ resources, // resources
146
+ XtNumber(resources), // num_resources
147
+ NULLQUARK, // xrm_class
148
+ TRUE, // compress_motion
149
+ XtExposeCompressMaximal, // compress_exposure
150
+ TRUE, // compress_enterleave
151
+ FALSE, // visible_interest
152
+ &destroy, // destroy
153
+ &resize, // resize
154
+ &redisplay, // expose
155
+ &setValues, // set_values
156
+ NULL, // set_values_hook
157
+ &setValuesAlmost, // set_values_almost
158
+ NULL, // get_values_hook
159
+ NULL, // accept_focus
160
+ XtVersion, // version
161
+ NULL, // callback_private
162
+ defaultTranslations, // tm_table
163
+ &queryGeometry, // query_geometry
164
+ NULL, // display_accelerator
165
+ NULL // extension
166
+ },
167
+ { // Composite
168
+ &geometryManager, // geometry_manager
169
+ &changeManaged, // change_managed
170
+ XtInheritInsertChild, // insert_child
171
+ XtInheritDeleteChild, // delete_child
172
+ NULL // extension
173
+ },
174
+ { // Constraint
175
+ constraints, // constraint_resources
176
+ XtNumber(constraints), // constraint_num_resources
177
+ sizeof(XPDFTreeConstraintRec), // constraint_size
178
+ &initConstraint, // constraint_initialize
179
+ &destroyConstraint, // constraint_destroy
180
+ &constraintSetValues, // constraint_set_values
181
+ NULL // extension
182
+ },
183
+ { // XmManager
184
+ XtInheritTranslations, // translations
185
+ #if XmVERSION > 1
186
+ synResources, // syn_resources
187
+ XtNumber(synResources), // num_syn_resources
188
+ #else
189
+ NULL, // syn_resources
190
+ 0, // num_syn_resources
191
+ #endif
192
+ NULL, // syn_constraint_resources
193
+ 0, // num_syn_constraint_res's
194
+ XmInheritParentProcess, // parent_process
195
+ NULL // extension
196
+ },
197
+ { // XPDFTree
198
+ &createGC, // createGC
199
+ &destroyGC, // destroyGC
200
+ &layout, // layout
201
+ &calcSize, // calcSize
202
+ &needRelayout, // needRelayout
203
+ NULL // extension
204
+ }
205
+ };
206
+
207
+ externaldef(xpdftreewidgetclass) WidgetClass xpdfTreeWidgetClass =
208
+ (WidgetClass)&xpdfTreeClassRec;
209
+
210
+ //------------------------------------------------------------------------
211
+
212
+ static void classPartInitialize(WidgetClass widgetCls) {
213
+ XPDFTreeWidgetClass wc = (XPDFTreeWidgetClass)widgetCls;
214
+ XPDFTreeWidgetClass sc = (XPDFTreeWidgetClass)wc->coreClass.superclass;
215
+
216
+ // method inheritance
217
+ if (wc->treeClass.createGC == XPDFInheritCreateGC) {
218
+ wc->treeClass.createGC = sc->treeClass.createGC;
219
+ }
220
+ if (wc->treeClass.destroyGC == XPDFInheritDestroyGC) {
221
+ wc->treeClass.destroyGC = sc->treeClass.destroyGC;
222
+ }
223
+ if (wc->treeClass.layout == XPDFInheritLayout) {
224
+ wc->treeClass.layout = sc->treeClass.layout;
225
+ }
226
+ if (wc->treeClass.calcSize == XPDFInheritCalcSize) {
227
+ wc->treeClass.calcSize = sc->treeClass.calcSize;
228
+ }
229
+ if (wc->treeClass.needRelayout == XPDFInheritNeedRelayout) {
230
+ wc->treeClass.needRelayout = sc->treeClass.needRelayout;
231
+ }
232
+ }
233
+
234
+ static void initialize(Widget requestWidget, Widget newWidget,
235
+ ArgList args, Cardinal *numArgs) {
236
+ XPDFTreeWidget nw = (XPDFTreeWidget)newWidget;
237
+ XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(newWidget);
238
+
239
+ nw->tree.root = NULL;
240
+ nw->tree.redrawY = -1;
241
+ if (cls->treeClass.createGC) {
242
+ (*cls->treeClass.createGC)(newWidget);
243
+ } else {
244
+ createGC(newWidget);
245
+ }
246
+ }
247
+
248
+ static void destroy(Widget widget) {
249
+ XPDFTreeWidget w = (XPDFTreeWidget)widget;
250
+ XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(widget);
251
+
252
+ if (w->tree.root) {
253
+ destroySubtree(w->tree.root);
254
+ w->tree.root = NULL;
255
+ }
256
+ if (cls->treeClass.destroyGC) {
257
+ (*cls->treeClass.destroyGC)(widget);
258
+ } else {
259
+ destroyGC(widget);
260
+ }
261
+ }
262
+
263
+ static void destroySubtree(XPDFTreeEntry *e) {
264
+ if (e->children) {
265
+ destroySubtree(e->children);
266
+ }
267
+ if (e->next) {
268
+ destroySubtree(e->next);
269
+ }
270
+ }
271
+
272
+ static void resize(Widget widget) {
273
+ XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(widget);
274
+
275
+ if (cls->treeClass.layout) {
276
+ (*cls->treeClass.layout)(widget, NULL);
277
+ } else {
278
+ layout(widget, NULL);
279
+ }
280
+ }
281
+
282
+ static void redisplay(Widget widget, XEvent *event, Region region) {
283
+ XPDFTreeWidget w = (XPDFTreeWidget)widget;
284
+ XPDFTreeEntry *e;
285
+
286
+ if (w->tree.redrawY >= 0) {
287
+ XClearArea(XtDisplay((Widget)w), XtWindow((Widget)w),
288
+ 0, w->tree.redrawY, w->core.width, w->core.height, False);
289
+ w->tree.redrawY = -1;
290
+ }
291
+ for (e = w->tree.root; e; e = e->next) {
292
+ redisplaySubtree(w, e, event, region);
293
+ }
294
+ }
295
+
296
+ static void redisplaySubtree(XPDFTreeWidget w, XPDFTreeEntry *e,
297
+ XEvent *event, Region region) {
298
+ XPDFTreeConstraint c;
299
+ Position x, y, y2;
300
+ XPDFTreeEntry *child;
301
+
302
+ (*XtClass(e->widget)->core_class.expose)(e->widget, event, region);
303
+ c = XPDFTreeCPart(e->widget);
304
+ x = e->widget->core.x;
305
+ y = e->widget->core.y + e->widget->core.height / 2;
306
+ if (e->children) {
307
+ if (c->entryExpanded) {
308
+ drawExpandedIcon(w, x - 8, y);
309
+ y2 = y; // make gcc happy
310
+ for (child = e->children; child; child = child->next) {
311
+ y2 = child->widget->core.y + child->widget->core.height / 2;
312
+ XDrawLine(XtDisplay((Widget)w), XtWindow((Widget)w), w->tree.dottedGC,
313
+ x - 8, y2, x + 6, y2);
314
+ redisplaySubtree(w, child, event, region);
315
+ }
316
+ XDrawLine(XtDisplay((Widget)w), XtWindow((Widget)w), w->tree.dottedGC,
317
+ x - 8, y + 2, x - 8, y2);
318
+ } else {
319
+ drawCollapsedIcon(w, x - 8, y);
320
+ }
321
+ }
322
+ }
323
+
324
+ static void drawExpandedIcon(XPDFTreeWidget w, Position x, Position y) {
325
+ XPoint pts[4];
326
+
327
+ pts[0].x = x - 4; pts[0].y = y - 2;
328
+ pts[1].x = x + 4; pts[1].y = y - 2;
329
+ pts[2].x = x; pts[2].y = y + 2;
330
+ pts[3].x = x - 4; pts[3].y = y - 2;
331
+ XDrawLines(XtDisplay((Widget)w), XtWindow((Widget)w), w->tree.plainGC,
332
+ pts, 4, CoordModeOrigin);
333
+ }
334
+
335
+ static void drawCollapsedIcon(XPDFTreeWidget w, Position x, Position y) {
336
+ XPoint pts[4];
337
+
338
+ pts[0].x = x - 2; pts[0].y = y - 4;
339
+ pts[1].x = x - 2; pts[1].y = y + 4;
340
+ pts[2].x = x + 2; pts[2].y = y;
341
+ pts[3].x = x - 2; pts[3].y = y - 4;
342
+ XDrawLines(XtDisplay((Widget)w), XtWindow((Widget)w), w->tree.plainGC,
343
+ pts, 4, CoordModeOrigin);
344
+ }
345
+
346
+ static Boolean setValues(Widget oldWidget, Widget requestWidget,
347
+ Widget newWidget, ArgList args, Cardinal *numArgs) {
348
+ XPDFTreeWidget ow = (XPDFTreeWidget)oldWidget;
349
+ XPDFTreeWidget nw = (XPDFTreeWidget)newWidget;
350
+ XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(nw);
351
+ Boolean relayout, redisp;
352
+
353
+ // check to see if layout-affecting resources have changed
354
+ if (cls->treeClass.needRelayout) {
355
+ relayout = (*cls->treeClass.needRelayout)((Widget)ow, (Widget)nw);
356
+ } else {
357
+ relayout = needRelayout((Widget)ow, (Widget)nw);
358
+ }
359
+ redisp = False;
360
+ if (relayout) {
361
+
362
+ // calculate a new ideal size (reset the widget size first so
363
+ // calcSize will compute a new one)
364
+ if (nw->core.width == ow->core.width) {
365
+ nw->core.width = 0;
366
+ }
367
+ if (nw->core.height == ow->core.height) {
368
+ nw->core.height = 0;
369
+ }
370
+ if (cls->treeClass.calcSize) {
371
+ (*cls->treeClass.calcSize)((Widget)nw, NULL,
372
+ &nw->core.width, &nw->core.height);
373
+ } else {
374
+ calcSize((Widget)nw, NULL, &nw->core.width, &nw->core.height);
375
+ }
376
+
377
+ // if resources have changed but size hasn't, layout manually
378
+ // (because Xt just looks at the size)
379
+ if (nw->core.width == ow->core.width &&
380
+ nw->core.height == ow->core.height) {
381
+ if (cls->treeClass.layout) {
382
+ (*cls->treeClass.layout)((Widget)nw, NULL);
383
+ } else {
384
+ layout((Widget)nw, NULL);
385
+ }
386
+ redisp = True;
387
+ }
388
+ }
389
+
390
+ return redisp;
391
+ }
392
+
393
+ static void setValuesAlmost(Widget oldWidget, Widget newWidget,
394
+ XtWidgetGeometry *request,
395
+ XtWidgetGeometry *reply) {
396
+ XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(newWidget);
397
+
398
+ // our parent rejected a geometry request, so accept the compromise
399
+ // and relayout
400
+ if (!reply->request_mode) {
401
+ if (cls->treeClass.layout) {
402
+ (*cls->treeClass.layout)(newWidget, NULL);
403
+ } else {
404
+ layout(newWidget, NULL);
405
+ }
406
+ }
407
+ *request = *reply;
408
+ }
409
+
410
+ static XtGeometryResult queryGeometry(Widget widget,
411
+ XtWidgetGeometry *request,
412
+ XtWidgetGeometry *reply) {
413
+ XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(widget);
414
+
415
+ if (!XtIsRealized(widget)) {
416
+ reply->width = XtWidth(widget);
417
+ reply->height = XtHeight(widget);
418
+ } else {
419
+ reply->width = 0;
420
+ reply->height = 0;
421
+ }
422
+ if (cls->treeClass.calcSize) {
423
+ (*cls->treeClass.calcSize)(widget, NULL, &reply->width, &reply->height);
424
+ } else {
425
+ calcSize(widget, NULL, &reply->width, &reply->height);
426
+ }
427
+ #if XmVERSION > 1
428
+ return XmeReplyToQueryGeometry(widget, request, reply);
429
+ #else
430
+ if ((request->request_mode & CWWidth) &&
431
+ (request->request_mode & CWHeight) &&
432
+ request->width == reply->width &&
433
+ request->height == reply->height) {
434
+ return XtGeometryYes;
435
+ }
436
+ if (reply->width == XtWidth(widget) &&
437
+ reply->height == XtHeight(widget)) {
438
+ return XtGeometryNo;
439
+ }
440
+ reply->request_mode = CWWidth | CWHeight;
441
+ return XtGeometryAlmost;
442
+ #endif
443
+ }
444
+
445
+ static XtGeometryResult geometryManager(Widget widget,
446
+ XtWidgetGeometry *request,
447
+ XtWidgetGeometry *reply) {
448
+ XPDFTreeWidget w = (XPDFTreeWidget)XtParent(widget);
449
+ XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(w);
450
+ Dimension curWidth, curHeight, curBW;
451
+ XtWidgetGeometry parentReq;
452
+ XtGeometryResult result;
453
+
454
+ // deny any requests for a new position
455
+ if ((request->request_mode & CWX) || (request->request_mode & CWY)) {
456
+ return XtGeometryNo;
457
+ }
458
+
459
+ // save the current geometry
460
+ curWidth = w->core.width;
461
+ curHeight = w->core.height;
462
+ curBW = w->core.border_width;
463
+
464
+ // make the requested changes
465
+ if (request->request_mode & CWWidth) {
466
+ w->core.width = request->width;
467
+ }
468
+ if (request->request_mode & CWHeight) {
469
+ w->core.height = request->height;
470
+ }
471
+ if (request->request_mode & CWBorderWidth) {
472
+ w->core.border_width = request->border_width;
473
+ }
474
+
475
+ // calculate the new ideal size
476
+ parentReq.width = 0;
477
+ parentReq.height = 0;
478
+ if (cls->treeClass.calcSize) {
479
+ (*cls->treeClass.calcSize)((Widget)w, widget,
480
+ &parentReq.width, &reply->height);
481
+ } else {
482
+ calcSize((Widget)w, widget, &parentReq.width, &reply->height);
483
+ }
484
+
485
+ // send geometry request to our parent
486
+ parentReq.request_mode = CWWidth | CWHeight;
487
+ if (request->request_mode & XtCWQueryOnly) {
488
+ parentReq.request_mode |= XtCWQueryOnly;
489
+ }
490
+ result = XtMakeGeometryRequest((Widget)w, &parentReq, NULL);
491
+ if (result == XtGeometryAlmost) {
492
+ result = XtGeometryNo;
493
+ }
494
+
495
+ if (result == XtGeometryNo || (request->request_mode & XtCWQueryOnly)) {
496
+ // restore the original geometry
497
+ w->core.width = curWidth;
498
+ w->core.height = curHeight;
499
+ w->core.border_width = curBW;
500
+ } else {
501
+ if (cls->treeClass.layout) {
502
+ (*cls->treeClass.layout)((Widget)w, widget);
503
+ } else {
504
+ layout((Widget)w, widget);
505
+ }
506
+ }
507
+
508
+ return result;
509
+ }
510
+
511
+ static void changeManaged(Widget widget) {
512
+ Dimension width, height;
513
+ XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(widget);
514
+
515
+ // compute the ideal size
516
+ if (!XtIsRealized(widget)) {
517
+ width = XtWidth(widget);
518
+ height = XtHeight(widget);
519
+ } else {
520
+ width = 0;
521
+ height = 0;
522
+ }
523
+ if (cls->treeClass.calcSize) {
524
+ (*cls->treeClass.calcSize)(widget, NULL, &width, &height);
525
+ } else {
526
+ calcSize(widget, NULL, &width, &height);
527
+ }
528
+
529
+ // make resize request to parent -- keep asking until we get a yes
530
+ // or no
531
+ while (XtMakeResizeRequest(widget, width, height, &width, &height)
532
+ == XtGeometryAlmost) ;
533
+
534
+ // relayout
535
+ if (cls->treeClass.layout) {
536
+ (*cls->treeClass.layout)(widget, NULL);
537
+ } else {
538
+ layout(widget, NULL);
539
+ }
540
+
541
+ #if XmVERSION > 1
542
+ // update keyboard traversal
543
+ XmeNavigChangeManaged(widget);
544
+ #else
545
+ _XmNavigChangeManaged(widget);
546
+ #endif
547
+ }
548
+
549
+ static void initConstraint(Widget requestWidget, Widget newWidget,
550
+ ArgList args, Cardinal *numArgs) {
551
+ XPDFTreeWidget w = (XPDFTreeWidget)XtParent(newWidget);
552
+ XPDFTreeConstraint c;
553
+
554
+ c = XPDFTreeCPart(newWidget);
555
+ c->e = (XPDFTreeEntry *)gmalloc(sizeof(XPDFTreeEntry));
556
+ c->e->widget = newWidget;
557
+ c->e->children = NULL;
558
+ c->e->next = NULL;
559
+ if (c->entryParent) {
560
+ insertChildOnList(c->e, &XPDFTreeCPart(c->entryParent)->e->children);
561
+ } else {
562
+ insertChildOnList(c->e, &w->tree.root);
563
+ }
564
+ }
565
+
566
+ static void destroyConstraint(Widget widget) {
567
+ deleteSubtree(widget);
568
+ }
569
+
570
+ static void deleteSubtree(Widget widget) {
571
+ XPDFTreeWidget w = (XPDFTreeWidget)XtParent(widget);
572
+ XPDFTreeConstraint c;
573
+
574
+ c = XPDFTreeCPart(widget);
575
+ if (!c->e) {
576
+ return;
577
+ }
578
+ while (c->e->children) {
579
+ deleteSubtree(c->e->children->widget);
580
+ }
581
+ if (c->entryParent) {
582
+ deleteChildFromList(c->e, &XPDFTreeCPart(c->entryParent)->e->children);
583
+ } else {
584
+ deleteChildFromList(c->e, &w->tree.root);
585
+ }
586
+ gfree(c->e);
587
+ c->e = NULL;
588
+ }
589
+
590
+ static Boolean constraintSetValues(Widget oldWidget, Widget requestWidget,
591
+ Widget newWidget,
592
+ ArgList args, Cardinal *numArgs) {
593
+ XPDFTreeWidget w = (XPDFTreeWidget)XtParent(newWidget);
594
+ XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass((Widget)w);
595
+ XPDFTreeConstraint oc, nc;
596
+ Boolean relayout;
597
+ Dimension width, height;
598
+
599
+ if (!XtIsManaged(newWidget)) {
600
+ return False;
601
+ }
602
+ oc = XPDFTreeCPart(oldWidget);
603
+ nc = XPDFTreeCPart(newWidget);
604
+ relayout = False;
605
+ if (nc->entryParent != oc->entryParent ||
606
+ nc->entryPosition != oc->entryPosition) {
607
+ if (oc->entryParent) {
608
+ deleteChildFromList(oc->e, &XPDFTreeCPart(oc->entryParent)->e->children);
609
+ } else {
610
+ deleteChildFromList(oc->e, &w->tree.root);
611
+ }
612
+ if (nc->entryParent) {
613
+ insertChildOnList(nc->e, &XPDFTreeCPart(nc->entryParent)->e->children);
614
+ } else {
615
+ insertChildOnList(nc->e, &w->tree.root);
616
+ }
617
+ relayout = True;
618
+ } else if (nc->entryExpanded != oc->entryExpanded) {
619
+ relayout = True;
620
+ }
621
+
622
+ if (relayout) {
623
+
624
+ // calculate a new ideal size (reset the widget size first so
625
+ // calcSize will compute a new one)
626
+ width = 0;
627
+ height = 0;
628
+ if (cls->treeClass.calcSize) {
629
+ (*cls->treeClass.calcSize)((Widget)w, NULL, &width, &height);
630
+ } else {
631
+ calcSize((Widget)w, NULL, &width, &height);
632
+ }
633
+
634
+ // make resize request to parent -- keep asking until we get a yes
635
+ // or no
636
+ while (XtMakeResizeRequest((Widget)w, width, height, &width, &height)
637
+ == XtGeometryAlmost) ;
638
+
639
+ // relayout the widget
640
+ if (cls->treeClass.layout) {
641
+ (*cls->treeClass.layout)((Widget)w, NULL);
642
+ } else {
643
+ layout((Widget)w, NULL);
644
+ }
645
+ }
646
+
647
+ return relayout;
648
+ }
649
+
650
+ static void insertChildOnList(XPDFTreeEntry *e, XPDFTreeEntry **listHead) {
651
+ int pos;
652
+ XPDFTreeEntry *e2;
653
+
654
+ pos = XPDFTreeCPart(e->widget)->entryPosition;
655
+ if (!*listHead || pos < XPDFTreeCPart((*listHead)->widget)->entryPosition) {
656
+ e->next = *listHead;
657
+ *listHead = e;
658
+ } else {
659
+ for (e2 = *listHead;
660
+ e2->next && pos >= XPDFTreeCPart(e2->next->widget)->entryPosition;
661
+ e2 = e2->next) ;
662
+ e->next = e2->next;
663
+ e2->next = e;
664
+ }
665
+ }
666
+
667
+ static void deleteChildFromList(XPDFTreeEntry *e, XPDFTreeEntry **listHead) {
668
+ XPDFTreeEntry **p;
669
+
670
+ for (p = listHead; *p; p = &(*p)->next) {
671
+ if (*p == e) {
672
+ *p = e->next;
673
+ e->next = NULL;
674
+ return;
675
+ }
676
+ }
677
+ }
678
+
679
+ static void createGC(Widget widget) {
680
+ XPDFTreeWidget w = (XPDFTreeWidget)widget;
681
+ XGCValues gcValues;
682
+
683
+ gcValues.foreground = w->manager.foreground;
684
+ gcValues.line_width = 0;
685
+ gcValues.line_style = LineSolid;
686
+ w->tree.plainGC = XtGetGC(widget,
687
+ GCForeground | GCLineWidth | GCLineStyle,
688
+ &gcValues);
689
+
690
+ gcValues.line_style = LineOnOffDash;
691
+ gcValues.dashes = 1;
692
+ gcValues.dash_offset = 0;
693
+ w->tree.dottedGC = XtGetGC(widget,
694
+ GCForeground | GCLineWidth | GCLineStyle |
695
+ GCDashList | GCDashOffset,
696
+ &gcValues);
697
+ }
698
+
699
+ static void destroyGC(Widget widget) {
700
+ XPDFTreeWidget w = (XPDFTreeWidget)widget;
701
+
702
+ XtReleaseGC(widget, w->tree.plainGC);
703
+ XtReleaseGC(widget, w->tree.dottedGC);
704
+ }
705
+
706
+ static void layout(Widget widget, Widget instigator) {
707
+ XPDFTreeWidget w = (XPDFTreeWidget)widget;
708
+ XPDFTreeEntry *e;
709
+ Position x, y;
710
+
711
+ x = w->tree.marginWidth + xpdfTreeIndent;
712
+ y = w->tree.marginHeight;
713
+ for (e = w->tree.root; e; e = e->next) {
714
+ y = layoutSubtree(w, instigator, e, x, y, True);
715
+ }
716
+ }
717
+
718
+ static int layoutSubtree(XPDFTreeWidget w, Widget instigator,
719
+ XPDFTreeEntry *e, Position x, Position y,
720
+ Boolean visible) {
721
+ Widget ew;
722
+ XPDFTreeEntry *child;
723
+ XPDFTreeConstraint c;
724
+
725
+ ew = e->widget;
726
+ if (!XtIsManaged(ew)) {
727
+ return y;
728
+ }
729
+ c = XPDFTreeCPart(ew);
730
+
731
+ // place this entry
732
+ if (ew) {
733
+ if (visible) {
734
+ if (ew == instigator) {
735
+ ew->core.x = x;
736
+ ew->core.y = y;
737
+ } else {
738
+ #if XmVERSION > 1
739
+ XmeConfigureObject(ew, x, y, ew->core.width, ew->core.height,
740
+ ew->core.border_width);
741
+ #else
742
+ _XmConfigureObject(ew, x, y, ew->core.width, ew->core.height,
743
+ ew->core.border_width);
744
+ #endif
745
+ }
746
+ y += ew->core.height + 2 * ew->core.border_width;
747
+ }
748
+ }
749
+
750
+ // place this entry's children
751
+ x += xpdfTreeIndent;
752
+ for (child = e->children; child; child = child->next) {
753
+ y = layoutSubtree(w, instigator, child, x, y,
754
+ visible && (!c || c->entryExpanded));
755
+ }
756
+
757
+ return y;
758
+ }
759
+
760
+ static void calcSize(Widget widget, Widget instigator,
761
+ Dimension *totalWidth,
762
+ Dimension *totalHeight) {
763
+ XPDFTreeWidget w = (XPDFTreeWidget)widget;
764
+ XPDFTreeEntry *e;
765
+ Dimension w1, h1, w2, h2;
766
+
767
+ w1 = h1 = 0;
768
+ for (e = w->tree.root; e; e = e->next) {
769
+ calcSubtreeSize(w, instigator, e, &w2, &h2);
770
+ if (w2 > w1) {
771
+ w1 = w2;
772
+ }
773
+ h1 += h2;
774
+ }
775
+ w1 += xpdfTreeIndent + 2 * w->tree.marginWidth;
776
+ h1 += 2 * w->tree.marginHeight;
777
+ if (h1 == 0) {
778
+ h1 = 1;
779
+ }
780
+ if (!*totalWidth) {
781
+ *totalWidth = w1;
782
+ }
783
+ if (!*totalHeight) {
784
+ *totalHeight = h1;
785
+ }
786
+ }
787
+
788
+ static void calcSubtreeSize(XPDFTreeWidget w, Widget instigator,
789
+ XPDFTreeEntry *e,
790
+ Dimension *width, Dimension *height) {
791
+ Widget ew;
792
+ XPDFTreeEntry *child;
793
+ XPDFTreeConstraint c;
794
+ XtWidgetGeometry geom;
795
+ Dimension w1, h1, w2, h2;
796
+
797
+ ew = e->widget;
798
+ if (!XtIsManaged(ew)) {
799
+ *width = *height = 0;
800
+ return;
801
+ }
802
+ c = XPDFTreeCPart(ew);
803
+
804
+ // get size of this entry
805
+ if (ew) {
806
+ if (!XtIsManaged(ew)) {
807
+ *width = *height = 0;
808
+ return;
809
+ }
810
+ if (ew == instigator) {
811
+ w1 = ew->core.width;
812
+ h1 = ew->core.height;
813
+ } else {
814
+ XtQueryGeometry(ew, NULL, &geom);
815
+ w1 = (geom.request_mode & CWWidth) ? geom.width : ew->core.width;
816
+ h1 = (geom.request_mode & CWHeight) ? geom.height : ew->core.height;
817
+ }
818
+ h1 += 2 * ew->core.border_width;
819
+ } else {
820
+ // root of tree
821
+ w1 = 0;
822
+ h1 = 0;
823
+ }
824
+
825
+ // if this entry is expanded, get size of all of its children
826
+ if (c->entryExpanded) {
827
+ for (child = e->children; child; child = child->next) {
828
+ calcSubtreeSize(w, instigator, child, &w2, &h2);
829
+ w2 += xpdfTreeIndent;
830
+ if (w2 > w1) {
831
+ w1 = w2;
832
+ }
833
+ h1 += h2;
834
+ }
835
+ }
836
+
837
+ *width = w1;
838
+ *height = h1;
839
+ }
840
+
841
+ static Boolean needRelayout(Widget oldWidget, Widget newWidget) {
842
+ XPDFTreeWidget ow = (XPDFTreeWidget)oldWidget;
843
+ XPDFTreeWidget nw = (XPDFTreeWidget)newWidget;
844
+
845
+ if (nw->tree.marginWidth != ow->tree.marginWidth ||
846
+ nw->tree.marginHeight != ow->tree.marginHeight) {
847
+ return True;
848
+ }
849
+ return False;
850
+ }
851
+
852
+ static void click(Widget widget, XEvent *event,
853
+ String *params, Cardinal *numParams) {
854
+ XPDFTreeWidget w = (XPDFTreeWidget)widget;
855
+ XButtonPressedEvent *bpe;
856
+ XPDFTreeEntry *e;
857
+ Boolean onExpandIcon;
858
+ XPDFTreeConstraint c;
859
+ XPDFTreeSelectCallbackStruct cbs;
860
+
861
+ if (event->type != ButtonPress) {
862
+ return;
863
+ }
864
+ bpe = (XButtonPressedEvent *)event;
865
+ if (findPosition(w, bpe->x, bpe->y, &e, &onExpandIcon)) {
866
+ if (onExpandIcon) {
867
+ c = XPDFTreeCPart(e->widget);
868
+ w->tree.redrawY = e->widget->core.y;
869
+ XtVaSetValues(e->widget, XPDFNentryExpanded, !c->entryExpanded, NULL);
870
+ } else {
871
+ XmProcessTraversal(e->widget, XmTRAVERSE_CURRENT);
872
+ XtCallActionProc(widget, "ManagerGadgetActivate", event, NULL, 0);
873
+ cbs.reason = XmCR_ACTIVATE;
874
+ cbs.event = event;
875
+ cbs.selectedItem = e->widget;
876
+ XtCallCallbackList(widget, w->tree.selectCallback, &cbs);
877
+ }
878
+ }
879
+ }
880
+
881
+ static Boolean findPosition(XPDFTreeWidget w, int x, int y,
882
+ XPDFTreeEntry **e, Boolean *onExpandIcon) {
883
+ XPDFTreeEntry *e2;
884
+
885
+ for (e2 = w->tree.root; e2; e2 = e2->next) {
886
+ *e = e2;
887
+ if (findPositionInSubtree(w, x, y, e, onExpandIcon)) {
888
+ return True;
889
+ }
890
+ }
891
+ return False;
892
+ }
893
+
894
+ // If (x,y) falls on either an expand/collapse icon or a label gadget,
895
+ // set *<e> and *<onExpandIcon> and return true.
896
+ static Boolean findPositionInSubtree(XPDFTreeWidget w, int x, int y,
897
+ XPDFTreeEntry **e,
898
+ Boolean *onExpandIcon) {
899
+ Widget child;
900
+ XPDFTreeConstraint c;
901
+ XPDFTreeEntry *e2;
902
+ int y1;
903
+
904
+ child = (*e)->widget;
905
+ y1 = child->core.y + child->core.height / 2;
906
+ if (x >= child->core.x && x < child->core.x + child->core.width &&
907
+ y >= child->core.y && y < child->core.y + child->core.height) {
908
+ *onExpandIcon = False;
909
+ return True;
910
+ } else if (x >= child->core.x - 16 && x < child->core.x - 4 &&
911
+ y >= y1 - 6 && y < y1 + 6 &&
912
+ (*e)->children) {
913
+ *onExpandIcon = True;
914
+ return True;
915
+ }
916
+ c = XPDFTreeCPart(child);
917
+ if (!c || c->entryExpanded) {
918
+ for (e2 = (*e)->children; e2; e2 = e2->next) {
919
+ *e = e2;
920
+ if (findPositionInSubtree(w, x, y, e, onExpandIcon)) {
921
+ return True;
922
+ }
923
+ }
924
+ }
925
+ return False;
926
+ }
927
+
928
+ Widget XPDFCreateTree(Widget parent, char *name,
929
+ ArgList argList, Cardinal numArgs) {
930
+ return XtCreateWidget(name, xpdfTreeWidgetClass, parent, argList, numArgs);
931
+ }