diff options
Diffstat (limited to 'Master/tlpkg/tlgs/lib/dumphint.ps')
-rw-r--r-- | Master/tlpkg/tlgs/lib/dumphint.ps | 755 |
1 files changed, 0 insertions, 755 deletions
diff --git a/Master/tlpkg/tlgs/lib/dumphint.ps b/Master/tlpkg/tlgs/lib/dumphint.ps deleted file mode 100644 index 444692a0c83..00000000000 --- a/Master/tlpkg/tlgs/lib/dumphint.ps +++ /dev/null @@ -1,755 +0,0 @@ -% Copyright (C) 2000, 2001 Aladdin Enterprises. All rights reserved. -% -% This software is provided AS-IS with no warranty, either express or -% implied. -% -% This software is distributed under license and may not be copied, -% modified or distributed except as expressly authorized under the terms -% of the license contained in the file LICENSE in this distribution. -% -% For more information about licensing, please refer to -% http://www.ghostscript.com/licensing/. For information on -% commercial licensing, go to http://www.artifex.com/licensing/ or -% contact Artifex Software, Inc., 101 Lucas Valley Road #110, -% San Rafael, CA 94903, U.S.A., +1(415)492-9861. - -% $Id$ -% Linearized PDF hint formatting utility. - -% -% Linearized PDF hints generated by Acrobat suite seem to deviate from -% the published specification. -% -% /P (page offset hint table) key in hint stream is not generated by -% Adobe products. The key is no longer required in PDF 1.5. -% -% Per-page items 4 and 5 of the page offset hint table start from 1st -% page rather than 2nd page as the spec claims. -% -% All array entries start from the new byte boundary. -% - -/table_width 79 def -/col1_width 66 def - -% Skip bits to the next byte boundary -/bytealign { % <stream> bytealign - - begin /N 0 def /B 0 def end -} bind def - -% Set bit stream position and align it to byte boundary -/set_align { % <<>> pos set_align - - exch begin - S exch setfileposition - /N 0 def /B 0 def - end -} bind def - -% Read requested number of bits from the bit stream. -/bitread { % <bstream> <width> bitwrite <value> - exch begin - 0 % bit val - { - 1 index N .min % bit val m - dup 3 1 roll % bit m val m - bitshift % bit m val<<m - B 2 index N sub % bit m val<<m B m-N - bitshift add % bit m val<<m+B>>(N-m) - 3 -1 roll % m val' bit - 2 index sub % m val' bit' - 3 -1 roll % val' bit' m - N exch sub dup % val' bit' N' N' - 1 exch bitshift % val' bit' N' 1<<N' - 1 sub B and % val' bit' N' B&(1<<N') - /B exch def % val' bit' N' - /N exch def % val' bit' - dup 0 le { - pop exit % val' - } if - /N N 8 add def - /B B 8 bitshift S read not { 0 ( *** EOF! *** ) = } if add def - exch - } loop % bit' val' - end -} bind def - -% Print a string several times -/multiprint { % cnt (s) multiprint - - exch { dup print } repeat pop -} bind def - -% Split the line into 2 substrings. -/split_line { % (s) split_line () () - dup length col1_width gt { - col1_width 1 sub - dup -1 0 { - dup % (s) w i i - 3 index % (s) w i i () - exch get % (s) w i c - 32 eq { - exch pop exit - } if - pop - } for - 1 add % (s) w' - 1 index exch % (s) (s) w' - 0 exch % (s) (s) 0 w' - getinterval % (s) (v) - } { - dup % (s) (s) - } ifelse - (\n) search { - 4 1 roll % (pre) (s) (post) (match) - pop pop % (pre) (s) - 1 index length % (pre) (s) len - 1 add % (pre) (s) len+1 - } { - exch % (pre) (s) - 1 index length % (pre) (s) len - } ifelse - 1 index length % (pre) (s) len Len - 1 index sub % (pre) (s) len Len-len - getinterval % (pre) (post) -} bind def - -% Print a 2 column table. The string is printed in 1st column -% left-aligned. The number is printed in 2nd column right-aligned. -/two_column { % n () two_column - - split_line % n (a) () - 3 1 roll % () n (a) - dup length % () n (a) len - exch print % () n len - exch =string cvs % () len (n) - dup length % () len (n) len2 - 3 -1 roll add % () (n) len+len2 - //table_width % () (n) len+len2 78 - exch sub % () (n) 78-len+len2 - ( ) multiprint % () (n) - = % () - { dup length 0 eq { exit } if - split_line exch = - } loop - pop - () = -} bind def - -% Print the header of a hint table -/table_header { % () table_header - - dup length dup - table_width exch sub 2 idiv % () len sp - dup ( ) multiprint % () len sp - 3 -1 roll = % len sp - ( ) multiprint % len - (=) multiprint - ()= ()= -} bind def - -% Pretty-print an array on top level -/dump_array { % [ ] dump_array - - ([) = ( ) print - 1 exch { - =string cvs % pos () - dup length dup % pos () len len - 3 index add 1 add % pos () len len+pos+1 - table_width gt { - () = - ( ) print % pos () len - 2 add % pos () pos' - 3 1 roll print pop % pos' - } { - ( ) print % pos () len - exch print % pos len - add 1 add % pos' - } ifelse - } forall - pop - () = (]) = -} bind def - -% Pretty-print an array on 2nd level -/dump_array2 { % [ ] dump_array2 - - ( [) print - 3 exch { - =string cvs % pos () - dup length dup % pos () len len - 3 index add 1 add % pos () len len+pos+1 - table_width 2 sub gt { - () = - ( ) print % pos () len - 4 add % pos () pos' - 3 1 roll print pop % pos' - } { - ( ) print % pos () len - exch print % pos len - add 1 add % pos' - } ifelse - } forall - pop - ( ]) = -} bind def - -% Print an array header -/array_header { - () = = -} bind def - -% Analyze the page offset hint table. -/dump_page_offset_table { % - dump_page_offset_table - - hint_stream - - dup 32 bitread - dup /hint_minnop exch def - (1. The least number of objects in a page.) two_column - - dup 32 bitread - dup /hint_1st_obj exch def - (2. Location of the first page's page object.) two_column - - dup 16 bitread - dup /hint_maxnopbits exch def - (3. Bits for difference between max and min number of page objects.) two_column - - dup 32 bitread - dup /hint_minpl exch def - (4. Least length of a page.) two_column - - dup 16 bitread - dup /hint_maxplbits exch def - (5. Bits for difference between max and min length of a page.) two_column - - dup 32 bitread - dup /hint_minsco exch def - (6. Least start of Contents offset. ) - 1 index 0 ne { (\n*** Acrobat expects 0 ***) concatstrings } if - two_column - - dup 16 bitread - dup /hint_maxscobits exch def - (7. Bits for difference between max and min offset to the start of the content stream.) two_column - - dup 32 bitread - dup /hint_mincl exch def - (8. Least contents length.) two_column - - dup 16 bitread - dup /hint_maxclbits exch def - (9. Bits needed to represent the greatest Contents length.) two_column - - dup 16 bitread - dup /hint_maxsorbits exch def - (10. Bits needed to represent the greatest number of Shared Object references.) two_column - - dup 16 bitread - dup /hint_sobits exch def - (11. Bits needed to identify a Shared Object.) two_column - - dup 16 bitread - dup /hint_numfbits exch def - (12. Bits needed to represent numerator of fraction.) two_column - - dup 16 bitread - dup /hint_denf exch def - (13. Denominator of fraction.) two_column - - pop - - LinearizationParams /N get - - % 1. Number of objects in the page. - hint_stream bytealign - /hint_page_obj [ - 2 index { - hint_stream hint_maxnopbits bitread - hint_minnop add - } repeat - ] readonly def - - (1. Number of objects on the page) array_header - hint_page_obj dump_array - - % 2, Page length in bytes. - hint_stream bytealign - /hint_page_len [ - 2 index { - hint_stream hint_maxplbits bitread - hint_minpl add - } repeat - ] readonly def - - (2. Page length in bytes.) array_header - hint_page_len dump_array - - % 3, Number of shared objects referenced from the page - hint_stream bytealign - /hint_page_sobj [ - 2 index { - hint_stream hint_maxsorbits bitread - } repeat - ] readonly def - - (3. Number of shared objects referenced from the page.) array_header - hint_page_sobj dump_array - - % 4. Index into the shared objects hint table - hint_stream bytealign - /hint_page_sobj_id [ - 0 1 4 index 1 sub { - hint_page_sobj exch get [ - exch { - hint_stream hint_sobits bitread - } repeat - ] readonly - } for - ] readonly def - - (4. Index into the shared objects hint table.) array_header - ([) = - hint_page_sobj_id { dump_array2 } forall - (])= - - % 5. Fractional position for each shared object reference - hint_stream bytealign - /hint_page_sobj_pos [ - 0 1 4 index 1 sub { - hint_page_sobj exch get [ - exch { - hint_stream hint_numfbits bitread - hint_denf div - } repeat - ] readonly - } for - ] readonly def - - (5. Fractional position for each shared object reference. ) array_header - ([)= - hint_page_sobj_pos { dump_array2 } forall - (])= - - % 6. Offset of the page's content stream from the beginning of the page. - hint_stream bytealign - /hint_page_content_offset [ - 2 index { - hint_stream hint_maxscobits bitread - hint_minsco add - } repeat - ] readonly def - - (6. Offset of the page's content stream from the beginning of the page.) array_header - hint_page_content_offset dump_array - - % 7. Length of the page's content stream in bytes. - hint_stream bytealign - /hint_page_content_len [ - 2 index { - hint_stream hint_maxclbits bitread - hint_mincl add - } repeat - ] readonly def - - (7. Length of the page's content stream in bytes.) array_header - hint_page_content_len dump_array - - pop -} bind def - -% Analyze tha shared object hint table -/dump_shared_object_table { - hint_stream - - dup 32 bitread - dup /shint_1st_obj_id exch def - (1. Object number of the first object in the shared objects section) two_column - - dup 32 bitread - dup /shint_1st_obj_pos exch def - (2. Location of the first object in the shared objects section.) two_column - - dup 32 bitread - dup /shint_1st_shared exch def - (3. The number of shared object entries for the first page.) two_column - - dup 32 bitread - dup /shint_all_shared exch def - (4. Number of shared object entries for the shared objects section including 1st page.) two_column - - dup 16 bitread - dup /shint_group_bits exch def - (5. Number of bits needed to represent the greatest number of objects in a shared object group.) two_column - - dup 32 bitread - dup /shint_group_least_sz exch def - (6. Least length of a shared object group in bytes.) two_column - - dup 16 bitread - dup /shint_group_diff_bits exch def - (7. Bits for the difference between the greatest and least length of a shared object group size.) two_column - pop - - (1. length of the object group in bytes.) array_header - hint_stream bytealign - /shint_group_sz [ - shint_all_shared { - hint_stream shint_group_diff_bits bitread - shint_group_least_sz add - } repeat - ] readonly def - - shint_group_sz dump_array - - (2. MD5 signature flag) array_header - hint_stream bytealign - /shint_md5_flags - [ shint_all_shared - { hint_stream 1 bitread - } repeat - ] readonly def - - shint_md5_flags dump_array - - (3. MD5 signature string) array_header - false shint_md5_flags { 0 ne or } forall { - shint_md5_flags { - 0 eq { - (<>)= - } { - hint_stream /S get 128 string - readstring pop - dup length 128 eq { - == - } { pop (Error reading nd5 string.) == - } ifelse - } ifelse - } forall - } { - () = (none) = - } ifelse - - (4. The number of objects in the group.) array_header - hint_stream bytealign - /shint_group_cnt [ - shint_all_shared { - hint_stream shint_group_bits bitread - } repeat - ] readonly def - - shint_group_cnt dump_array - - } bind def - -% Analyze the thumbnail hint table. -/dump_thumbnail_table { - hint_stream - - dup 32 bitread - dup /thint_1st_obj_id exch def - (1. Object number of the first thumbnail image.) two_column - - dup 32 bitread - dup /thint_1st_obj_pos exch def - (2. Location of the first thumbnail image.) two_column - - dup 32 bitread - dup /thint_page_cnt exch def - (3. Number of pages that have thumbnail images.) two_column - - dup 16 bitread - dup /thint_no_thumbnail_bits exch def - (4. Bits for the max number of consecutive pages without a thumbnail image.) two_column - - dup 32 bitread - dup /thint_min_sz exch def - (5. The least length of a thumbnail image in bytes.) two_column - - dup 15 bitread - dup /thint_obj_sz_bits exch def - (6. Bits for the difference between max and min length of a thumbnail image.) two_column - - dup 32 bitread - dup /thint_min_obj_cnt exch def - (7. The least number of objects in a thumbnail image.) two_column - - dup 16 bitread - dup /thint_obj_cnt_bits exch def - (8. Bits for the difference between max and min number of objects in a thumbnail image.) two_column - - dup 32 bitread - dup /thint_1st_shared_obj exch def - (9. First object in the thumbnail shared objects section.) two_column - - dup 32 bitread - dup /thint_1st_shared_pos exch def - (10. Location of the first object in the thumbnail shared objects section.) two_column - - dup 32 bitread - dup /thint_shared_cnt exch def - (11. Number of thumbnail shared objects.) two_column - - dup 32 bitread - dup /thint_shared_section_sz exch def - (12. Length of the thumbnail shared objects section in bytes.) two_column - - pop - LinearizationParams /N get - - (1. The number of preceding pages lacking a thumbnail image.) array_header - hint_stream bytealign - /thint_no_thumbnail_pages [ - 2 index { - hint_stream thint_no_thumbnail_bits bitread - } repeat - ] readonly def - - thint_no_thumbnail_pages dump_array - - (2. Number of objects in this page's thumbnail image.) array_header - hint_stream bytealign - /thint_page_obj_cnt [ - 2 index { - hint_stream thint_obj_cnt_bits bitread - thint_min_obj_cnt add - } repeat - ] readonly def - - thint_page_obj_cnt dump_array - - (3. Length of this page's thumbnail image in bytes.) array_header - hint_stream bytealign - /thint_page_obj_sz [ - 2 index { - hint_stream thint_obj_sz_bits bitread - thint_min_sz add - } repeat - ] readonly def - - thint_page_obj_sz dump_array - pop -} bind def - -% Analyze the generic hint table. -% The hint field names are re-used. -/dump_generic_table { - hint_stream - - dup 32 bitread - dup /ghint_1st_obj exch def - (1. Object number of the first object in the group.) two_column - - dup 32 bitread - dup /ghint_1st_obj_pos exch def - (2. Location of the first object in the group.) two_column - - dup 32 bitread - dup /ghint_obj_cnt exch def - (3. Number of objects in the group.) two_column - - dup 32 bitread - dup /ghint_group_sz exch def - (4. Length of the object group in bytes.) two_column - - pop -} bind def - -% Analyze the interactive hint table. -% The hint field names are re-used. -/dump_interactive_table { - hint_stream - - dup 32 bitread - dup /ihint_1st_obj exch def - (1. Object number of the first object in the group.) two_column - - dup 32 bitread - dup /ihint_1st_obj_pos exch def - (2. Location of the first object in the group.) two_column - - dup 32 bitread - dup /ihint_obj_cnt exch def - (3. Number of objects in the group.) two_column - - dup 32 bitread - dup /ihint_group_sz exch def - (4. Length of the object group in bytes.) two_column - - dup 32 bitread - dup /ihint_shared_cnt exch def - (5. Number of shared object references.) two_column - - dup 16 bitread - dup /ihint_shared_obj_bits exch def - (6. Bits for the max shared object id used by the interactive form or the logical structure hierarchy.) - 1 index hint_sobits ne { - (\n*** This fiels is not equal to max shared object ID bits ***) concatstrings - } if - - pop - - (7. Shared object identifier.) array_header - hint_stream bytealign - /ihint_shared_obj_id [ - ihint_shared_cnt { - hint_stream hint_sobits bitread - } repeat - ] readonly def - - ihint_shared_obj_id dump_array -} bind def - -% Enumerate all documented hint tables. -/dump_all_tables { % <<stream>> dump_all_tables - - (Page offset hint table) table_header - hint_stream 0 set_align - dump_page_offset_table - - (S, Shared object hint table) table_header - dup /S .knownget { - hint_stream exch set_align - dump_shared_object_table - } { - (Required table is not found.) error_msg - } ifelse - - dup /T .knownget { - (T, Thumbnail hint table) table_header - hint_stream exch set_align - dump_thumbnail_table - } if - - dup /O .knownget { - (O, Outline hint table) table_header - hint_stream exch set_align - dump_generic_table - } if - - dup /A .knownget { - (A, Thread information hint table) table_header - hint_stream exch set_align - dump_generic_table - } if - - dup /E .knownget { - (E, Named destination hint table) table_header - hint_stream exch set_align - dump_generic_table - } if - - dup /V .knownget { - (V, Interactive form hint table) table_header - hint_stream exch set_align - dump_interactive_table - } if - - dup /I .knownget { - (I, Information dictionary hint table) table_header - hint_stream exch set_align - dump_generic_table - } if - - dup /C .knownget { - (C, Logical structure hint table) table_header - hint_stream exch set_align - dump_interactive_table - } if - - dup /L .knownget { - (L, Page label hint table) table_header - hint_stream exch set_align - dump_generic_table - } if - - pop -} bind def - -% Load PDF file and extract the hint stream. -/pdf_dump_hints { % <infile> pdf_dump_hints - - dup (r) file % fname - false exch % fname F file - { - dup 7 string readstring pop % fname F file () - (%PDF-1.) ne { pop exit } if % fname F file - dup 0 setfileposition - dup token not { pop exit } if % fname F file obj - dup type /integertype ne { pop exit } if % fname F file obj - 1 index token not { pop pop exit } if % fname F file obj gen - dup type /integertype ne {pop pop exit}if % fname F file obj gen - 4 2 roll % fname obj gen F file - dup 0 setfileposition - exch true or % fname obj gen file T - exit - } loop - { - pdfdict begin - pdfopenfile dup begin - 40 dict begin - /IDict exch def - .setsafe - - % Read all objects into memory. - Trailer touch - resolveR % fname <<>> - dup /Linearized known { - dup /L get % fname <<>> Len - 3 -1 roll status not { 0 0 0 0 } if % <<>> Len - pop pop exch pop % <<>> Len len - eq { - /LinearizationParams exch def - LinearizationParams /H get - dup length 2 eq { - 0 get PDFoffset add PDFfile exch setfileposition - PDFfile token pop - PDFfile token pop - resolveR dup true resolvestream - /ReusableStreamDecode filter - bitstream dup bytealign - /hint_stream exch def - - dump_all_tables - } { - pop - (Overflow hint stream is not supported.) = - } ifelse - } { - pop - (Wrong file length in linearization dictionary.) = - } ifelse - } { - pop (The file is not linearized.) = - } ifelse - end % temporary dict - end % IDict - end - } { - pop - (Input file is not a valid PDF file.) = - } ifelse -} bind def - -% Initial setup -/dump_hints { - counttomark 1 eq { - exch pop - save exch - 3000000 setvmthreshold - pdfoptdict begin - pdf_dump_hints - end - restore - true - } { - cleartomark false - } ifelse -} bind def - -/shellarguments {false} def -(pdfopt.ps) runlibfile -currentdict /shellarguments undef - -% Check for command line arguments. -mark shellarguments { - dump_hints not { - (Usage: gs -dNODISPLAY -- dumphint.ps input.pdf) = flush - } if -} { - pop -} ifelse - -% EOF |