pdf2json 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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,352 @@
1
+ //========================================================================
2
+ //
3
+ // XPDFViewer.h
4
+ //
5
+ // Copyright 2002-2003 Glyph & Cog, LLC
6
+ //
7
+ //========================================================================
8
+
9
+ #ifndef XPDFVIEWER_H
10
+ #define XPDFVIEWER_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 "XPDFCore.h"
23
+
24
+ #if (XmVERSION <= 1) && !defined(__sgi)
25
+ #define DISABLE_OUTLINE
26
+ #endif
27
+
28
+ #if (XmVERSION >= 2 && !defined(LESSTIF_VERSION))
29
+ # define USE_COMBO_BOX 1
30
+ #else
31
+ # undef USE_COMBO_BOX
32
+ #endif
33
+
34
+ class GString;
35
+ class GList;
36
+ class UnicodeMap;
37
+ class LinkDest;
38
+ class XPDFApp;
39
+ class XPDFViewer;
40
+
41
+ //------------------------------------------------------------------------
42
+
43
+ // NB: this must match the defn of zoomMenuBtnInfo in XPDFViewer.cc
44
+ #define nZoomMenuItems 10
45
+
46
+ //------------------------------------------------------------------------
47
+
48
+ struct XPDFViewerCmd {
49
+ char *name;
50
+ int nArgs;
51
+ GBool requiresDoc;
52
+ GBool requiresEvent;
53
+ void (XPDFViewer::*func)(GString *args[], int nArgs, XEvent *event);
54
+ };
55
+
56
+ //------------------------------------------------------------------------
57
+ // XPDFViewer
58
+ //------------------------------------------------------------------------
59
+
60
+ class XPDFViewer {
61
+ public:
62
+
63
+ XPDFViewer(XPDFApp *appA, GString *fileName,
64
+ int pageA, GString *destName, GBool fullScreen,
65
+ GString *ownerPassword, GString *userPassword);
66
+ XPDFViewer(XPDFApp *appA, PDFDoc *doc, int pageA,
67
+ GString *destName, GBool fullScreen);
68
+ GBool isOk() { return ok; }
69
+ ~XPDFViewer();
70
+
71
+ void open(GString *fileName, int pageA, GString *destName);
72
+ void clear();
73
+ void reloadFile();
74
+
75
+ void execCmd(GString *cmd, XEvent *event);
76
+
77
+ Widget getWindow() { return win; }
78
+
79
+ private:
80
+
81
+ //----- load / display
82
+ GBool loadFile(GString *fileName, GString *ownerPassword = NULL,
83
+ GString *userPassword = NULL);
84
+ void displayPage(int pageA, double zoomA, int rotateA,
85
+ GBool scrollToTop, GBool addToHist);
86
+ void displayDest(LinkDest *dest, double zoomA, int rotateA,
87
+ GBool addToHist);
88
+ void getPageAndDest(int pageA, GString *destName,
89
+ int *pageOut, LinkDest **destOut);
90
+
91
+ //----- hyperlinks / actions
92
+ void doLink(int wx, int wy, GBool onlyIfNoSelection, GBool newWin);
93
+ static void actionCbk(void *data, char *action);
94
+
95
+ //----- keyboard/mouse input
96
+ static void keyPressCbk(void *data, KeySym key, Guint modifiers,
97
+ XEvent *event);
98
+ static void mouseCbk(void *data, XEvent *event);
99
+ int getModifiers(Guint modifiers);
100
+ int getContext(Guint modifiers);
101
+
102
+ //----- command functions
103
+ void cmdAbout(GString *args[], int nArgs, XEvent *event);
104
+ void cmdCloseOutline(GString *args[], int nArgs, XEvent *event);
105
+ void cmdCloseWindow(GString *args[], int nArgs, XEvent *event);
106
+ void cmdContinuousMode(GString *args[], int nArgs, XEvent *event);
107
+ void cmdEndPan(GString *args[], int nArgs, XEvent *event);
108
+ void cmdEndSelection(GString *args[], int nArgs, XEvent *event);
109
+ void cmdFind(GString *args[], int nArgs, XEvent *event);
110
+ void cmdFindNext(GString *args[], int nArgs, XEvent *event);
111
+ void cmdFocusToDocWin(GString *args[], int nArgs, XEvent *event);
112
+ void cmdFocusToPageNum(GString *args[], int nArgs, XEvent *event);
113
+ void cmdFollowLink(GString *args[], int nArgs, XEvent *event);
114
+ void cmdFollowLinkInNewWin(GString *args[], int nArgs, XEvent *event);
115
+ void cmdFollowLinkInNewWinNoSel(GString *args[], int nArgs, XEvent *event);
116
+ void cmdFollowLinkNoSel(GString *args[], int nArgs, XEvent *event);
117
+ void cmdFullScreenMode(GString *args[], int nArgs, XEvent *event);
118
+ void cmdGoBackward(GString *args[], int nArgs, XEvent *event);
119
+ void cmdGoForward(GString *args[], int nArgs, XEvent *event);
120
+ void cmdGotoDest(GString *args[], int nArgs, XEvent *event);
121
+ void cmdGotoLastPage(GString *args[], int nArgs, XEvent *event);
122
+ void cmdGotoLastPageNoScroll(GString *args[], int nArgs, XEvent *event);
123
+ void cmdGotoPage(GString *args[], int nArgs, XEvent *event);
124
+ void cmdGotoPageNoScroll(GString *args[], int nArgs, XEvent *event);
125
+ void cmdNextPage(GString *args[], int nArgs, XEvent *event);
126
+ void cmdNextPageNoScroll(GString *args[], int nArgs, XEvent *event);
127
+ void cmdOpen(GString *args[], int nArgs, XEvent *event);
128
+ void cmdOpenFile(GString *args[], int nArgs, XEvent *event);
129
+ void cmdOpenFileAtDest(GString *args[], int nArgs, XEvent *event);
130
+ void cmdOpenFileAtDestInNewWin(GString *args[], int nArgs, XEvent *event);
131
+ void cmdOpenFileAtPage(GString *args[], int nArgs, XEvent *event);
132
+ void cmdOpenFileAtPageInNewWin(GString *args[], int nArgs, XEvent *event);
133
+ void cmdOpenFileInNewWin(GString *args[], int nArgs, XEvent *event);
134
+ void cmdOpenInNewWin(GString *args[], int nArgs, XEvent *event);
135
+ void cmdOpenOutline(GString *args[], int nArgs, XEvent *event);
136
+ void cmdPageDown(GString *args[], int nArgs, XEvent *event);
137
+ void cmdPageUp(GString *args[], int nArgs, XEvent *event);
138
+ void cmdPostPopupMenu(GString *args[], int nArgs, XEvent *event);
139
+ void cmdPrevPage(GString *args[], int nArgs, XEvent *event);
140
+ void cmdPrevPageNoScroll(GString *args[], int nArgs, XEvent *event);
141
+ void cmdPrint(GString *args[], int nArgs, XEvent *event);
142
+ void cmdQuit(GString *args[], int nArgs, XEvent *event);
143
+ void cmdRaise(GString *args[], int nArgs, XEvent *event);
144
+ void cmdRedraw(GString *args[], int nArgs, XEvent *event);
145
+ void cmdReload(GString *args[], int nArgs, XEvent *event);
146
+ void cmdRun(GString *args[], int nArgs, XEvent *event);
147
+ void cmdScrollDown(GString *args[], int nArgs, XEvent *event);
148
+ void cmdScrollDownNextPage(GString *args[], int nArgs, XEvent *event);
149
+ void cmdScrollLeft(GString *args[], int nArgs, XEvent *event);
150
+ void cmdScrollOutlineDown(GString *args[], int nArgs, XEvent *event);
151
+ void cmdScrollOutlineUp(GString *args[], int nArgs, XEvent *event);
152
+ void cmdScrollRight(GString *args[], int nArgs, XEvent *event);
153
+ void cmdScrollToBottomEdge(GString *args[], int nArgs, XEvent *event);
154
+ void cmdScrollToBottomRight(GString *args[], int nArgs, XEvent *event);
155
+ void cmdScrollToLeftEdge(GString *args[], int nArgs, XEvent *event);
156
+ void cmdScrollToRightEdge(GString *args[], int nArgs, XEvent *event);
157
+ void cmdScrollToTopEdge(GString *args[], int nArgs, XEvent *event);
158
+ void cmdScrollToTopLeft(GString *args[], int nArgs, XEvent *event);
159
+ void cmdScrollUp(GString *args[], int nArgs, XEvent *event);
160
+ void cmdScrollUpPrevPage(GString *args[], int nArgs, XEvent *event);
161
+ void cmdSinglePageMode(GString *args[], int nArgs, XEvent *event);
162
+ void cmdStartPan(GString *args[], int nArgs, XEvent *event);
163
+ void cmdStartSelection(GString *args[], int nArgs, XEvent *event);
164
+ void cmdToggleContinuousMode(GString *args[], int nArgs, XEvent *event);
165
+ void cmdToggleFullScreenMode(GString *args[], int nArgs, XEvent *event);
166
+ void cmdToggleOutline(GString *args[], int nArgs, XEvent *event);
167
+ void cmdWindowMode(GString *args[], int nArgs, XEvent *event);
168
+ void cmdZoomFitPage(GString *args[], int nArgs, XEvent *event);
169
+ void cmdZoomFitWidth(GString *args[], int nArgs, XEvent *event);
170
+ void cmdZoomIn(GString *args[], int nArgs, XEvent *event);
171
+ void cmdZoomOut(GString *args[], int nArgs, XEvent *event);
172
+ void cmdZoomPercent(GString *args[], int nArgs, XEvent *event);
173
+ void cmdZoomToSelection(GString *args[], int nArgs, XEvent *event);
174
+
175
+ //----- GUI code: main window
176
+ void initWindow(GBool fullScreen);
177
+ void initToolbar(Widget parent);
178
+ #ifndef DISABLE_OUTLINE
179
+ void initPanedWin(Widget parent);
180
+ #endif
181
+ void initCore(Widget parent, GBool fullScreen);
182
+ void initPopupMenu();
183
+ void addToolTip(Widget widget, char *text);
184
+ void mapWindow();
185
+ void closeWindow();
186
+ int getZoomIdx();
187
+ void setZoomIdx(int idx);
188
+ void setZoomVal(double z);
189
+ static void prevPageCbk(Widget widget, XtPointer ptr,
190
+ XtPointer callData);
191
+ static void prevTenPageCbk(Widget widget, XtPointer ptr,
192
+ XtPointer callData);
193
+ static void nextPageCbk(Widget widget, XtPointer ptr,
194
+ XtPointer callData);
195
+ static void nextTenPageCbk(Widget widget, XtPointer ptr,
196
+ XtPointer callData);
197
+ static void backCbk(Widget widget, XtPointer ptr,
198
+ XtPointer callData);
199
+ static void forwardCbk(Widget widget, XtPointer ptr,
200
+ XtPointer callData);
201
+ #if USE_COMBO_BOX
202
+ static void zoomComboBoxCbk(Widget widget, XtPointer ptr,
203
+ XtPointer callData);
204
+ #else
205
+ static void zoomMenuCbk(Widget widget, XtPointer ptr,
206
+ XtPointer callData);
207
+ #endif
208
+ static void findCbk(Widget widget, XtPointer ptr,
209
+ XtPointer callData);
210
+ static void printCbk(Widget widget, XtPointer ptr,
211
+ XtPointer callData);
212
+ static void aboutCbk(Widget widget, XtPointer ptr,
213
+ XtPointer callData);
214
+ static void quitCbk(Widget widget, XtPointer ptr,
215
+ XtPointer callData);
216
+ static void openCbk(Widget widget, XtPointer ptr,
217
+ XtPointer callData);
218
+ static void openInNewWindowCbk(Widget widget, XtPointer ptr,
219
+ XtPointer callData);
220
+ static void reloadCbk(Widget widget, XtPointer ptr,
221
+ XtPointer callData);
222
+ static void saveAsCbk(Widget widget, XtPointer ptr,
223
+ XtPointer callData);
224
+ static void continuousModeToggleCbk(Widget widget, XtPointer ptr,
225
+ XtPointer callData);
226
+ static void fullScreenToggleCbk(Widget widget, XtPointer ptr,
227
+ XtPointer callData);
228
+ static void rotateCCWCbk(Widget widget, XtPointer ptr,
229
+ XtPointer callData);
230
+ static void rotateCWCbk(Widget widget, XtPointer ptr,
231
+ XtPointer callData);
232
+ static void zoomToSelectionCbk(Widget widget, XtPointer ptr,
233
+ XtPointer callData);
234
+ static void closeCbk(Widget widget, XtPointer ptr,
235
+ XtPointer callData);
236
+ static void closeMsgCbk(Widget widget, XtPointer ptr,
237
+ XtPointer callData);
238
+ static void pageNumCbk(Widget widget, XtPointer ptr,
239
+ XtPointer callData);
240
+ static void updateCbk(void *data, GString *fileName,
241
+ int pageNum, int numPages, char *linkString);
242
+
243
+ //----- GUI code: outline
244
+ #ifndef DISABLE_OUTLINE
245
+ void setupOutline();
246
+ void setupOutlineItems(GList *items, Widget parent, UnicodeMap *uMap);
247
+ static void outlineSelectCbk(Widget widget, XtPointer ptr,
248
+ XtPointer callData);
249
+ #endif
250
+
251
+ //----- GUI code: "about" dialog
252
+ void initAboutDialog();
253
+
254
+ //----- GUI code: "open" dialog
255
+ void initOpenDialog();
256
+ void mapOpenDialog(GBool openInNewWindowA);
257
+ static void openOkCbk(Widget widget, XtPointer ptr,
258
+ XtPointer callData);
259
+
260
+ //----- GUI code: "find" dialog
261
+ void initFindDialog();
262
+ static void findFindCbk(Widget widget, XtPointer ptr,
263
+ XtPointer callData);
264
+ void mapFindDialog();
265
+ void doFind(GBool next);
266
+ static void findCloseCbk(Widget widget, XtPointer ptr,
267
+ XtPointer callData);
268
+
269
+ //----- GUI code: "save as" dialog
270
+ void initSaveAsDialog();
271
+ void mapSaveAsDialog();
272
+ static void saveAsOkCbk(Widget widget, XtPointer ptr,
273
+ XtPointer callData);
274
+
275
+ //----- GUI code: "print" dialog
276
+ void initPrintDialog();
277
+ void setupPrintDialog();
278
+ static void printWithCmdBtnCbk(Widget widget, XtPointer ptr,
279
+ XtPointer callData);
280
+ static void printToFileBtnCbk(Widget widget, XtPointer ptr,
281
+ XtPointer callData);
282
+ static void printPrintCbk(Widget widget, XtPointer ptr,
283
+ XtPointer callData);
284
+
285
+ //----- Motif support
286
+ XmFontList createFontList(char *xlfd);
287
+
288
+ static XPDFViewerCmd cmdTab[];
289
+
290
+ XPDFApp *app;
291
+ GBool ok;
292
+
293
+ Display *display;
294
+ int screenNum;
295
+ Widget win; // top-level window
296
+ Widget form;
297
+ Widget panedWin;
298
+ #ifndef DISABLE_OUTLINE
299
+ Widget outlineScroll;
300
+ Widget outlineTree;
301
+ Widget *outlineLabels;
302
+ int outlineLabelsLength;
303
+ int outlineLabelsSize;
304
+ Dimension outlinePaneWidth;
305
+ #endif
306
+ XPDFCore *core;
307
+ Widget toolBar;
308
+ Widget backBtn;
309
+ Widget prevTenPageBtn;
310
+ Widget prevPageBtn;
311
+ Widget nextPageBtn;
312
+ Widget nextTenPageBtn;
313
+ Widget forwardBtn;
314
+ Widget pageNumText;
315
+ Widget pageCountLabel;
316
+ #if USE_COMBO_BOX
317
+ Widget zoomComboBox;
318
+ #else
319
+ Widget zoomMenu;
320
+ Widget zoomMenuBtns[nZoomMenuItems];
321
+ #endif
322
+ Widget zoomWidget;
323
+ Widget findBtn;
324
+ Widget printBtn;
325
+ Widget aboutBtn;
326
+ Widget linkLabel;
327
+ Widget quitBtn;
328
+ Widget popupMenu;
329
+
330
+ Widget aboutDialog;
331
+ XmFontList aboutBigFont, aboutVersionFont, aboutFixedFont;
332
+
333
+ Widget openDialog;
334
+ GBool openInNewWindow;
335
+
336
+ Widget findDialog;
337
+ Widget findText;
338
+ Widget findBackwardToggle;
339
+ Widget findCaseSensitiveToggle;
340
+
341
+ Widget saveAsDialog;
342
+
343
+ Widget printDialog;
344
+ Widget printWithCmdBtn;
345
+ Widget printToFileBtn;
346
+ Widget printCmdText;
347
+ Widget printFileText;
348
+ Widget printFirstPage;
349
+ Widget printLastPage;
350
+ };
351
+
352
+ #endif
@@ -0,0 +1,896 @@
1
+ //========================================================================
2
+ //
3
+ // XRef.cc
4
+ //
5
+ // Copyright 1996-2003 Glyph & Cog, LLC
6
+ //
7
+ //========================================================================
8
+
9
+ #include <aconf.h>
10
+
11
+ #ifdef USE_GCC_PRAGMAS
12
+ #pragma implementation
13
+ #endif
14
+
15
+ #include <stdlib.h>
16
+ #include <stddef.h>
17
+ #include <string.h>
18
+ #include <ctype.h>
19
+ #include "gmem.h"
20
+ #include "Object.h"
21
+ #include "Stream.h"
22
+ #include "Lexer.h"
23
+ #include "Parser.h"
24
+ #include "Dict.h"
25
+ #include "Error.h"
26
+ #include "ErrorCodes.h"
27
+ #include "XRef.h"
28
+
29
+ //------------------------------------------------------------------------
30
+
31
+ #define xrefSearchSize 1024 // read this many bytes at end of file
32
+ // to look for 'startxref'
33
+
34
+ //------------------------------------------------------------------------
35
+ // Permission bits
36
+ //------------------------------------------------------------------------
37
+
38
+ #define permPrint (1<<2)
39
+ #define permChange (1<<3)
40
+ #define permCopy (1<<4)
41
+ #define permNotes (1<<5)
42
+ #define defPermFlags 0xfffc
43
+
44
+ //------------------------------------------------------------------------
45
+ // ObjectStream
46
+ //------------------------------------------------------------------------
47
+
48
+ class ObjectStream {
49
+ public:
50
+
51
+ // Create an object stream, using object number <objStrNum>,
52
+ // generation 0.
53
+ ObjectStream(XRef *xref, int objStrNumA);
54
+
55
+ ~ObjectStream();
56
+
57
+ // Return the object number of this object stream.
58
+ int getObjStrNum() { return objStrNum; }
59
+
60
+ // Get the <objIdx>th object from this stream, which should be
61
+ // object number <objNum>, generation 0.
62
+ Object *getObject(int objIdx, int objNum, Object *obj);
63
+
64
+ private:
65
+
66
+ int objStrNum; // object number of the object stream
67
+ int nObjects; // number of objects in the stream
68
+ Object *objs; // the objects (length = nObjects)
69
+ int *objNums; // the object numbers (length = nObjects)
70
+ };
71
+
72
+ ObjectStream::ObjectStream(XRef *xref, int objStrNumA) {
73
+ Stream *str;
74
+ Parser *parser;
75
+ int *offsets;
76
+ Object objStr, obj1, obj2;
77
+ int first, i;
78
+
79
+ objStrNum = objStrNumA;
80
+ nObjects = 0;
81
+ objs = NULL;
82
+ objNums = NULL;
83
+
84
+ if (!xref->fetch(objStrNum, 0, &objStr)->isStream()) {
85
+ goto err1;
86
+ }
87
+
88
+ if (!objStr.streamGetDict()->lookup("N", &obj1)->isInt()) {
89
+ obj1.free();
90
+ goto err1;
91
+ }
92
+ nObjects = obj1.getInt();
93
+ obj1.free();
94
+ if (nObjects <= 0) {
95
+ goto err1;
96
+ }
97
+
98
+ if (!objStr.streamGetDict()->lookup("First", &obj1)->isInt()) {
99
+ obj1.free();
100
+ goto err1;
101
+ }
102
+ first = obj1.getInt();
103
+ obj1.free();
104
+ if (first < 0) {
105
+ goto err1;
106
+ }
107
+
108
+ objs = new Object[nObjects];
109
+ objNums = (int *)gmallocn(nObjects, sizeof(int));
110
+ offsets = (int *)gmallocn(nObjects, sizeof(int));
111
+
112
+ // parse the header: object numbers and offsets
113
+ objStr.streamReset();
114
+ obj1.initNull();
115
+ str = new EmbedStream(objStr.getStream(), &obj1, gTrue, first);
116
+ parser = new Parser(xref, new Lexer(xref, str), gFalse);
117
+ for (i = 0; i < nObjects; ++i) {
118
+ parser->getObj(&obj1);
119
+ parser->getObj(&obj2);
120
+ if (!obj1.isInt() || !obj2.isInt()) {
121
+ obj1.free();
122
+ obj2.free();
123
+ delete parser;
124
+ gfree(offsets);
125
+ goto err1;
126
+ }
127
+ objNums[i] = obj1.getInt();
128
+ offsets[i] = obj2.getInt();
129
+ obj1.free();
130
+ obj2.free();
131
+ if (objNums[i] < 0 || offsets[i] < 0 ||
132
+ (i > 0 && offsets[i] < offsets[i-1])) {
133
+ delete parser;
134
+ gfree(offsets);
135
+ goto err1;
136
+ }
137
+ }
138
+ while (str->getChar() != EOF) ;
139
+ delete parser;
140
+
141
+ // skip to the first object - this shouldn't be necessary because
142
+ // the First key is supposed to be equal to offsets[0], but just in
143
+ // case...
144
+ for (i = first; i < offsets[0]; ++i) {
145
+ objStr.getStream()->getChar();
146
+ }
147
+
148
+ // parse the objects
149
+ for (i = 0; i < nObjects; ++i) {
150
+ obj1.initNull();
151
+ if (i == nObjects - 1) {
152
+ str = new EmbedStream(objStr.getStream(), &obj1, gFalse, 0);
153
+ } else {
154
+ str = new EmbedStream(objStr.getStream(), &obj1, gTrue,
155
+ offsets[i+1] - offsets[i]);
156
+ }
157
+ parser = new Parser(xref, new Lexer(xref, str), gFalse);
158
+ parser->getObj(&objs[i]);
159
+ while (str->getChar() != EOF) ;
160
+ delete parser;
161
+ }
162
+
163
+ gfree(offsets);
164
+
165
+ err1:
166
+ objStr.free();
167
+ return;
168
+ }
169
+
170
+ ObjectStream::~ObjectStream() {
171
+ int i;
172
+
173
+ if (objs) {
174
+ for (i = 0; i < nObjects; ++i) {
175
+ objs[i].free();
176
+ }
177
+ delete[] objs;
178
+ }
179
+ gfree(objNums);
180
+ }
181
+
182
+ Object *ObjectStream::getObject(int objIdx, int objNum, Object *obj) {
183
+ if (objIdx < 0 || objIdx >= nObjects || objNum != objNums[objIdx]) {
184
+ return obj->initNull();
185
+ }
186
+ return objs[objIdx].copy(obj);
187
+ }
188
+
189
+ //------------------------------------------------------------------------
190
+ // XRef
191
+ //------------------------------------------------------------------------
192
+
193
+ XRef::XRef(BaseStream *strA) {
194
+ Guint pos;
195
+ Object obj;
196
+
197
+ ok = gTrue;
198
+ errCode = errNone;
199
+ size = 0;
200
+ entries = NULL;
201
+ streamEnds = NULL;
202
+ streamEndsLen = 0;
203
+ objStr = NULL;
204
+
205
+ encrypted = gFalse;
206
+ permFlags = defPermFlags;
207
+ ownerPasswordOk = gFalse;
208
+
209
+ // read the trailer
210
+ str = strA;
211
+ start = str->getStart();
212
+ pos = getStartXref();
213
+
214
+ // if there was a problem with the 'startxref' position, try to
215
+ // reconstruct the xref table
216
+ if (pos == 0) {
217
+ if (!(ok = constructXRef())) {
218
+ errCode = errDamaged;
219
+ return;
220
+ }
221
+
222
+ // read the xref table
223
+ } else {
224
+ while (readXRef(&pos)) ;
225
+
226
+ // if there was a problem with the xref table,
227
+ // try to reconstruct it
228
+ if (!ok) {
229
+ if (!(ok = constructXRef())) {
230
+ errCode = errDamaged;
231
+ return;
232
+ }
233
+ }
234
+ }
235
+
236
+ // get the root dictionary (catalog) object
237
+ trailerDict.dictLookupNF("Root", &obj);
238
+ if (obj.isRef()) {
239
+ rootNum = obj.getRefNum();
240
+ rootGen = obj.getRefGen();
241
+ obj.free();
242
+ } else {
243
+ obj.free();
244
+ if (!(ok = constructXRef())) {
245
+ errCode = errDamaged;
246
+ return;
247
+ }
248
+ }
249
+
250
+ // now set the trailer dictionary's xref pointer so we can fetch
251
+ // indirect objects from it
252
+ trailerDict.getDict()->setXRef(this);
253
+ }
254
+
255
+ XRef::~XRef() {
256
+ gfree(entries);
257
+ trailerDict.free();
258
+ if (streamEnds) {
259
+ gfree(streamEnds);
260
+ }
261
+ if (objStr) {
262
+ delete objStr;
263
+ }
264
+ }
265
+
266
+ // Read the 'startxref' position.
267
+ Guint XRef::getStartXref() {
268
+ char buf[xrefSearchSize+1];
269
+ char *p;
270
+ int c, n, i;
271
+
272
+ // read last xrefSearchSize bytes
273
+ str->setPos(xrefSearchSize, -1);
274
+ for (n = 0; n < xrefSearchSize; ++n) {
275
+ if ((c = str->getChar()) == EOF) {
276
+ break;
277
+ }
278
+ buf[n] = c;
279
+ }
280
+ buf[n] = '\0';
281
+
282
+ // find startxref
283
+ for (i = n - 9; i >= 0; --i) {
284
+ if (!strncmp(&buf[i], "startxref", 9)) {
285
+ break;
286
+ }
287
+ }
288
+ if (i < 0) {
289
+ return 0;
290
+ }
291
+ for (p = &buf[i+9]; isspace(*p); ++p) ;
292
+ lastXRefPos = strToUnsigned(p);
293
+
294
+ return lastXRefPos;
295
+ }
296
+
297
+ // Read one xref table section. Also reads the associated trailer
298
+ // dictionary, and returns the prev pointer (if any).
299
+ GBool XRef::readXRef(Guint *pos) {
300
+ Parser *parser;
301
+ Object obj;
302
+ GBool more;
303
+
304
+ // start up a parser, parse one token
305
+ obj.initNull();
306
+ parser = new Parser(NULL,
307
+ new Lexer(NULL,
308
+ str->makeSubStream(start + *pos, gFalse, 0, &obj)),
309
+ gTrue);
310
+ parser->getObj(&obj);
311
+
312
+ // parse an old-style xref table
313
+ if (obj.isCmd("xref")) {
314
+ obj.free();
315
+ more = readXRefTable(parser, pos);
316
+
317
+ // parse an xref stream
318
+ } else if (obj.isInt()) {
319
+ obj.free();
320
+ if (!parser->getObj(&obj)->isInt()) {
321
+ goto err1;
322
+ }
323
+ obj.free();
324
+ if (!parser->getObj(&obj)->isCmd("obj")) {
325
+ goto err1;
326
+ }
327
+ obj.free();
328
+ if (!parser->getObj(&obj)->isStream()) {
329
+ goto err1;
330
+ }
331
+ more = readXRefStream(obj.getStream(), pos);
332
+ obj.free();
333
+
334
+ } else {
335
+ goto err1;
336
+ }
337
+
338
+ delete parser;
339
+ return more;
340
+
341
+ err1:
342
+ obj.free();
343
+ delete parser;
344
+ ok = gFalse;
345
+ return gFalse;
346
+ }
347
+
348
+ GBool XRef::readXRefTable(Parser *parser, Guint *pos) {
349
+ XRefEntry entry;
350
+ GBool more;
351
+ Object obj, obj2;
352
+ Guint pos2;
353
+ int first, n, newSize, i;
354
+
355
+ while (1) {
356
+ parser->getObj(&obj);
357
+ if (obj.isCmd("trailer")) {
358
+ obj.free();
359
+ break;
360
+ }
361
+ if (!obj.isInt()) {
362
+ goto err1;
363
+ }
364
+ first = obj.getInt();
365
+ obj.free();
366
+ if (!parser->getObj(&obj)->isInt()) {
367
+ goto err1;
368
+ }
369
+ n = obj.getInt();
370
+ obj.free();
371
+ if (first < 0 || n < 0 || first + n < 0) {
372
+ goto err1;
373
+ }
374
+ if (first + n > size) {
375
+ for (newSize = size ? 2 * size : 1024;
376
+ first + n > newSize && newSize > 0;
377
+ newSize <<= 1) ;
378
+ if (newSize < 0) {
379
+ goto err1;
380
+ }
381
+ entries = (XRefEntry *)greallocn(entries, newSize, sizeof(XRefEntry));
382
+ for (i = size; i < newSize; ++i) {
383
+ entries[i].offset = 0xffffffff;
384
+ entries[i].type = xrefEntryFree;
385
+ }
386
+ size = newSize;
387
+ }
388
+ for (i = first; i < first + n; ++i) {
389
+ if (!parser->getObj(&obj)->isInt()) {
390
+ goto err1;
391
+ }
392
+ entry.offset = (Guint)obj.getInt();
393
+ obj.free();
394
+ if (!parser->getObj(&obj)->isInt()) {
395
+ goto err1;
396
+ }
397
+ entry.gen = obj.getInt();
398
+ obj.free();
399
+ parser->getObj(&obj);
400
+ if (obj.isCmd("n")) {
401
+ entry.type = xrefEntryUncompressed;
402
+ } else if (obj.isCmd("f")) {
403
+ entry.type = xrefEntryFree;
404
+ } else {
405
+ goto err1;
406
+ }
407
+ obj.free();
408
+ if (entries[i].offset == 0xffffffff) {
409
+ entries[i] = entry;
410
+ // PDF files of patents from the IBM Intellectual Property
411
+ // Network have a bug: the xref table claims to start at 1
412
+ // instead of 0.
413
+ if (i == 1 && first == 1 &&
414
+ entries[1].offset == 0 && entries[1].gen == 65535 &&
415
+ entries[1].type == xrefEntryFree) {
416
+ i = first = 0;
417
+ entries[0] = entries[1];
418
+ entries[1].offset = 0xffffffff;
419
+ }
420
+ }
421
+ }
422
+ }
423
+
424
+ // read the trailer dictionary
425
+ if (!parser->getObj(&obj)->isDict()) {
426
+ goto err1;
427
+ }
428
+
429
+ // get the 'Prev' pointer
430
+ obj.getDict()->lookupNF("Prev", &obj2);
431
+ if (obj2.isInt()) {
432
+ *pos = (Guint)obj2.getInt();
433
+ more = gTrue;
434
+ } else if (obj2.isRef()) {
435
+ // certain buggy PDF generators generate "/Prev NNN 0 R" instead
436
+ // of "/Prev NNN"
437
+ *pos = (Guint)obj2.getRefNum();
438
+ more = gTrue;
439
+ } else {
440
+ more = gFalse;
441
+ }
442
+ obj2.free();
443
+
444
+ // save the first trailer dictionary
445
+ if (trailerDict.isNone()) {
446
+ obj.copy(&trailerDict);
447
+ }
448
+
449
+ // check for an 'XRefStm' key
450
+ if (obj.getDict()->lookup("XRefStm", &obj2)->isInt()) {
451
+ pos2 = (Guint)obj2.getInt();
452
+ readXRef(&pos2);
453
+ if (!ok) {
454
+ obj2.free();
455
+ goto err1;
456
+ }
457
+ }
458
+ obj2.free();
459
+
460
+ obj.free();
461
+ return more;
462
+
463
+ err1:
464
+ obj.free();
465
+ ok = gFalse;
466
+ return gFalse;
467
+ }
468
+
469
+ GBool XRef::readXRefStream(Stream *xrefStr, Guint *pos) {
470
+ Dict *dict;
471
+ int w[3];
472
+ GBool more;
473
+ Object obj, obj2, idx;
474
+ int newSize, first, n, i;
475
+
476
+ dict = xrefStr->getDict();
477
+
478
+ if (!dict->lookupNF("Size", &obj)->isInt()) {
479
+ goto err1;
480
+ }
481
+ newSize = obj.getInt();
482
+ obj.free();
483
+ if (newSize < 0) {
484
+ goto err1;
485
+ }
486
+ if (newSize > size) {
487
+ entries = (XRefEntry *)greallocn(entries, newSize, sizeof(XRefEntry));
488
+ for (i = size; i < newSize; ++i) {
489
+ entries[i].offset = 0xffffffff;
490
+ entries[i].type = xrefEntryFree;
491
+ }
492
+ size = newSize;
493
+ }
494
+
495
+ if (!dict->lookupNF("W", &obj)->isArray() ||
496
+ obj.arrayGetLength() < 3) {
497
+ goto err1;
498
+ }
499
+ for (i = 0; i < 3; ++i) {
500
+ if (!obj.arrayGet(i, &obj2)->isInt()) {
501
+ obj2.free();
502
+ goto err1;
503
+ }
504
+ w[i] = obj2.getInt();
505
+ obj2.free();
506
+ if (w[i] < 0 || w[i] > 4) {
507
+ goto err1;
508
+ }
509
+ }
510
+ obj.free();
511
+
512
+ xrefStr->reset();
513
+ dict->lookupNF("Index", &idx);
514
+ if (idx.isArray()) {
515
+ for (i = 0; i+1 < idx.arrayGetLength(); i += 2) {
516
+ if (!idx.arrayGet(i, &obj)->isInt()) {
517
+ idx.free();
518
+ goto err1;
519
+ }
520
+ first = obj.getInt();
521
+ obj.free();
522
+ if (!idx.arrayGet(i+1, &obj)->isInt()) {
523
+ idx.free();
524
+ goto err1;
525
+ }
526
+ n = obj.getInt();
527
+ obj.free();
528
+ if (first < 0 || n < 0 ||
529
+ !readXRefStreamSection(xrefStr, w, first, n)) {
530
+ idx.free();
531
+ goto err0;
532
+ }
533
+ }
534
+ } else {
535
+ if (!readXRefStreamSection(xrefStr, w, 0, newSize)) {
536
+ idx.free();
537
+ goto err0;
538
+ }
539
+ }
540
+ idx.free();
541
+
542
+ dict->lookupNF("Prev", &obj);
543
+ if (obj.isInt()) {
544
+ *pos = (Guint)obj.getInt();
545
+ more = gTrue;
546
+ } else {
547
+ more = gFalse;
548
+ }
549
+ obj.free();
550
+ if (trailerDict.isNone()) {
551
+ trailerDict.initDict(dict);
552
+ }
553
+
554
+ return more;
555
+
556
+ err1:
557
+ obj.free();
558
+ err0:
559
+ ok = gFalse;
560
+ return gFalse;
561
+ }
562
+
563
+ GBool XRef::readXRefStreamSection(Stream *xrefStr, int *w, int first, int n) {
564
+ Guint offset;
565
+ int type, gen, c, newSize, i, j;
566
+
567
+ if (first + n < 0) {
568
+ return gFalse;
569
+ }
570
+ if (first + n > size) {
571
+ for (newSize = size ? 2 * size : 1024;
572
+ first + n > newSize && newSize > 0;
573
+ newSize <<= 1) ;
574
+ if (newSize < 0) {
575
+ return gFalse;
576
+ }
577
+ entries = (XRefEntry *)greallocn(entries, newSize, sizeof(XRefEntry));
578
+ for (i = size; i < newSize; ++i) {
579
+ entries[i].offset = 0xffffffff;
580
+ entries[i].type = xrefEntryFree;
581
+ }
582
+ size = newSize;
583
+ }
584
+ for (i = first; i < first + n; ++i) {
585
+ if (w[0] == 0) {
586
+ type = 1;
587
+ } else {
588
+ for (type = 0, j = 0; j < w[0]; ++j) {
589
+ if ((c = xrefStr->getChar()) == EOF) {
590
+ return gFalse;
591
+ }
592
+ type = (type << 8) + c;
593
+ }
594
+ }
595
+ for (offset = 0, j = 0; j < w[1]; ++j) {
596
+ if ((c = xrefStr->getChar()) == EOF) {
597
+ return gFalse;
598
+ }
599
+ offset = (offset << 8) + c;
600
+ }
601
+ for (gen = 0, j = 0; j < w[2]; ++j) {
602
+ if ((c = xrefStr->getChar()) == EOF) {
603
+ return gFalse;
604
+ }
605
+ gen = (gen << 8) + c;
606
+ }
607
+ if (entries[i].offset == 0xffffffff) {
608
+ switch (type) {
609
+ case 0:
610
+ entries[i].offset = offset;
611
+ entries[i].gen = gen;
612
+ entries[i].type = xrefEntryFree;
613
+ break;
614
+ case 1:
615
+ entries[i].offset = offset;
616
+ entries[i].gen = gen;
617
+ entries[i].type = xrefEntryUncompressed;
618
+ break;
619
+ case 2:
620
+ entries[i].offset = offset;
621
+ entries[i].gen = gen;
622
+ entries[i].type = xrefEntryCompressed;
623
+ break;
624
+ default:
625
+ return gFalse;
626
+ }
627
+ }
628
+ }
629
+
630
+ return gTrue;
631
+ }
632
+
633
+ // Attempt to construct an xref table for a damaged file.
634
+ GBool XRef::constructXRef() {
635
+ Parser *parser;
636
+ Object newTrailerDict, obj;
637
+ char buf[256];
638
+ Guint pos;
639
+ int num, gen;
640
+ int newSize;
641
+ int streamEndsSize;
642
+ char *p;
643
+ int i;
644
+ GBool gotRoot;
645
+
646
+ gfree(entries);
647
+ size = 0;
648
+ entries = NULL;
649
+
650
+ error(-1, "PDF file is damaged - attempting to reconstruct xref table...");
651
+ gotRoot = gFalse;
652
+ streamEndsLen = streamEndsSize = 0;
653
+
654
+ str->reset();
655
+ while (1) {
656
+ pos = str->getPos();
657
+ if (!str->getLine(buf, 256)) {
658
+ break;
659
+ }
660
+ p = buf;
661
+
662
+ // skip whitespace
663
+ while (*p && Lexer::isSpace(*p & 0xff)) ++p;
664
+
665
+ // got trailer dictionary
666
+ if (!strncmp(p, "trailer", 7)) {
667
+ obj.initNull();
668
+ parser = new Parser(NULL,
669
+ new Lexer(NULL,
670
+ str->makeSubStream(pos + 7, gFalse, 0, &obj)),
671
+ gFalse);
672
+ parser->getObj(&newTrailerDict);
673
+ if (newTrailerDict.isDict()) {
674
+ newTrailerDict.dictLookupNF("Root", &obj);
675
+ if (obj.isRef()) {
676
+ rootNum = obj.getRefNum();
677
+ rootGen = obj.getRefGen();
678
+ if (!trailerDict.isNone()) {
679
+ trailerDict.free();
680
+ }
681
+ newTrailerDict.copy(&trailerDict);
682
+ gotRoot = gTrue;
683
+ }
684
+ obj.free();
685
+ }
686
+ newTrailerDict.free();
687
+ delete parser;
688
+
689
+ // look for object
690
+ } else if (isdigit(*p)) {
691
+ num = atoi(p);
692
+ if (num > 0) {
693
+ do {
694
+ ++p;
695
+ } while (*p && isdigit(*p));
696
+ if (isspace(*p)) {
697
+ do {
698
+ ++p;
699
+ } while (*p && isspace(*p));
700
+ if (isdigit(*p)) {
701
+ gen = atoi(p);
702
+ do {
703
+ ++p;
704
+ } while (*p && isdigit(*p));
705
+ if (isspace(*p)) {
706
+ do {
707
+ ++p;
708
+ } while (*p && isspace(*p));
709
+ if (!strncmp(p, "obj", 3)) {
710
+ if (num >= size) {
711
+ newSize = (num + 1 + 255) & ~255;
712
+ if (newSize < 0) {
713
+ error(-1, "Bad object number");
714
+ return gFalse;
715
+ }
716
+ entries = (XRefEntry *)
717
+ greallocn(entries, newSize, sizeof(XRefEntry));
718
+ for (i = size; i < newSize; ++i) {
719
+ entries[i].offset = 0xffffffff;
720
+ entries[i].type = xrefEntryFree;
721
+ }
722
+ size = newSize;
723
+ }
724
+ if (entries[num].type == xrefEntryFree ||
725
+ gen >= entries[num].gen) {
726
+ entries[num].offset = pos - start;
727
+ entries[num].gen = gen;
728
+ entries[num].type = xrefEntryUncompressed;
729
+ }
730
+ }
731
+ }
732
+ }
733
+ }
734
+ }
735
+
736
+ } else if (!strncmp(p, "endstream", 9)) {
737
+ if (streamEndsLen == streamEndsSize) {
738
+ streamEndsSize += 64;
739
+ streamEnds = (Guint *)greallocn(streamEnds,
740
+ streamEndsSize, sizeof(int));
741
+ }
742
+ streamEnds[streamEndsLen++] = pos;
743
+ }
744
+ }
745
+
746
+ if (gotRoot)
747
+ return gTrue;
748
+
749
+ error(-1, "Couldn't find trailer dictionary");
750
+ return gFalse;
751
+ }
752
+
753
+ void XRef::setEncryption(int permFlagsA, GBool ownerPasswordOkA,
754
+ Guchar *fileKeyA, int keyLengthA, int encVersionA,
755
+ CryptAlgorithm encAlgorithmA) {
756
+ int i;
757
+
758
+ encrypted = gTrue;
759
+ permFlags = permFlagsA;
760
+ ownerPasswordOk = ownerPasswordOkA;
761
+ if (keyLengthA <= 16) {
762
+ keyLength = keyLengthA;
763
+ } else {
764
+ keyLength = 16;
765
+ }
766
+ for (i = 0; i < keyLength; ++i) {
767
+ fileKey[i] = fileKeyA[i];
768
+ }
769
+ encVersion = encVersionA;
770
+ encAlgorithm = encAlgorithmA;
771
+ }
772
+
773
+ GBool XRef::okToPrint(GBool ignoreOwnerPW) {
774
+ return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permPrint);
775
+ }
776
+
777
+ GBool XRef::okToChange(GBool ignoreOwnerPW) {
778
+ return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permChange);
779
+ }
780
+
781
+ GBool XRef::okToCopy(GBool ignoreOwnerPW) {
782
+ return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permCopy);
783
+ }
784
+
785
+ GBool XRef::okToAddNotes(GBool ignoreOwnerPW) {
786
+ return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permNotes);
787
+ }
788
+
789
+ Object *XRef::fetch(int num, int gen, Object *obj) {
790
+ XRefEntry *e;
791
+ Parser *parser;
792
+ Object obj1, obj2, obj3;
793
+
794
+ // check for bogus ref - this can happen in corrupted PDF files
795
+ if (num < 0 || num >= size) {
796
+ goto err;
797
+ }
798
+
799
+ e = &entries[num];
800
+ switch (e->type) {
801
+
802
+ case xrefEntryUncompressed:
803
+ if (e->gen != gen) {
804
+ goto err;
805
+ }
806
+ obj1.initNull();
807
+ parser = new Parser(this,
808
+ new Lexer(this,
809
+ str->makeSubStream(start + e->offset, gFalse, 0, &obj1)),
810
+ gTrue);
811
+ parser->getObj(&obj1);
812
+ parser->getObj(&obj2);
813
+ parser->getObj(&obj3);
814
+ if (!obj1.isInt() || obj1.getInt() != num ||
815
+ !obj2.isInt() || obj2.getInt() != gen ||
816
+ !obj3.isCmd("obj")) {
817
+ obj1.free();
818
+ obj2.free();
819
+ obj3.free();
820
+ delete parser;
821
+ goto err;
822
+ }
823
+ parser->getObj(obj, encrypted ? fileKey : (Guchar *)NULL,
824
+ encAlgorithm, keyLength, num, gen);
825
+ obj1.free();
826
+ obj2.free();
827
+ obj3.free();
828
+ delete parser;
829
+ break;
830
+
831
+ case xrefEntryCompressed:
832
+ if (gen != 0) {
833
+ goto err;
834
+ }
835
+ if (!objStr || objStr->getObjStrNum() != (int)e->offset) {
836
+ if (objStr) {
837
+ delete objStr;
838
+ }
839
+ objStr = new ObjectStream(this, e->offset);
840
+ }
841
+ objStr->getObject(e->gen, num, obj);
842
+ break;
843
+
844
+ default:
845
+ goto err;
846
+ }
847
+
848
+ return obj;
849
+
850
+ err:
851
+ return obj->initNull();
852
+ }
853
+
854
+ Object *XRef::getDocInfo(Object *obj) {
855
+ return trailerDict.dictLookup("Info", obj);
856
+ }
857
+
858
+ // Added for the pdftex project.
859
+ Object *XRef::getDocInfoNF(Object *obj) {
860
+ return trailerDict.dictLookupNF("Info", obj);
861
+ }
862
+
863
+ GBool XRef::getStreamEnd(Guint streamStart, Guint *streamEnd) {
864
+ int a, b, m;
865
+
866
+ if (streamEndsLen == 0 ||
867
+ streamStart > streamEnds[streamEndsLen - 1]) {
868
+ return gFalse;
869
+ }
870
+
871
+ a = -1;
872
+ b = streamEndsLen - 1;
873
+ // invariant: streamEnds[a] < streamStart <= streamEnds[b]
874
+ while (b - a > 1) {
875
+ m = (a + b) / 2;
876
+ if (streamStart <= streamEnds[m]) {
877
+ b = m;
878
+ } else {
879
+ a = m;
880
+ }
881
+ }
882
+ *streamEnd = streamEnds[b];
883
+ return gTrue;
884
+ }
885
+
886
+ Guint XRef::strToUnsigned(char *s) {
887
+ Guint x;
888
+ char *p;
889
+ int i;
890
+
891
+ x = 0;
892
+ for (p = s, i = 0; *p && isdigit(*p) && i < 10; ++p, ++i) {
893
+ x = 10 * x + (*p - '0');
894
+ }
895
+ return x;
896
+ }