% Copyright (C) 2001-2018 Artifex Software, Inc. % 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. % % Refer to licensing information at http://www.artifex.com or contact % Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato, % CA 94945, U.S.A., +1(415)492-9861, for further information. % % Allow the interpreter to encapsulate EPS files, to recognize MS-DOS % EPSF file headers, and skip to the PostScript section of the file. % Encapsulate EPS files and optionally resize page or rescale image. % To display an EPS file cropped to the bounding box: % gs -dEPSCrop file.eps % To display an EPS file scaled to fit the page: % gs -dEPSFitPage file.eps % To display a file without EPS encapsulation: % gs -dNOEPS file.ps % When starting to process an EPS file, state is 0. % After %%BoundingBox processed, state is 1 if OK or 2 if cropped. % After %%HiResBoundingBox processed, state is 3 if OK or 4 if cropped. % After %%EndComments processed, state is 5. /EPSBoundingBoxState 5 def /EPSBoundingBoxSetState { //systemdict /EPSBoundingBoxState 3 -1 roll .forceput } .bind executeonly odef % .forceput must be bound and hidden % Parse 4 numbers for a bounding box /EPSBoundingBoxParse { % (llx lly urx ury) -- llx lly urx ury true OR false mark exch token {exch token {exch token {exch token {exch pop} if} if} if} if counttomark 4 eq { 5 -1 roll pop % remove mark //true } { cleartomark //false } ifelse } bind def % Crop the page to the BoundingBox /EPSBoundingBoxCrop { % llx lly urx ury -- EPSDEBUG { (gs_epsf.ps: Setting pagesize from EPS bounding box\n) print flush } if exch 3 index sub exch 2 index sub % stack: llx lly urx-llx ury-lly << /PageSize [ 5 -2 roll ] >> setpagedevice neg exch neg exch translate } bind def % Rescale, translate and rotate to fit the BoundingBox on the page /EPSBoundingBoxFitPage { % llx lly urx ury -- EPSDEBUG { (gs_epsf.ps: Rescaling EPS to fit page\n) print flush } if clippath pathbbox newpath % translate to new origin at lower left of clippath 3 index 3 index translate % Figure out if rotate is needed. 1 index 4 index sub 1 index 4 index sub eq not { 1 index 4 index sub 1 index 4 index sub gt % bbox page-clipbox page-is-landscape 6 index 10 index sub 6 index 10 index sub gt % bbox page-clipbox page-is-landscape bbox-is-landscape xor }{ false }ifelse 9 1 roll % compute need-rotate. % stack: rotate-needed bbox page-clipbox % calculate scale to fit smaller of width or height exch 4 -1 roll sub 3 1 roll exch sub 4 2 roll 5 index 5 index 4 2 roll exch 4 -1 roll sub 3 1 roll exch sub 4 2 roll exch 4 -1 roll div 3 1 roll exch div 1 index 1 index lt {pop}{exch pop} ifelse dup scale % translate to EPS -llx,-lly exch neg exch neg translate % Finally perform the rotate if needed. { clippath pathbbox pop 0 exch translate 90 rotate pop pop } if } bind def /EPSBoundingBoxProcess { % (llx lly urx ury) state -- //systemdict /EPSBoundingBoxState get 1 index lt { exch EPSBoundingBoxParse { //systemdict /EPSCrop known { EPSBoundingBoxCrop } { //systemdict /EPSFitPage known { EPSBoundingBoxFitPage } { % Warn if some of the EPS file will be clipped clippath pathbbox newpath { % context for exit 5 -1 roll lt { 6 { pop } repeat //true exit } if 4 -1 roll lt { 4 { pop } repeat //true exit } if 3 -1 roll gt { 2 { pop } repeat //true exit } if exch gt { //true exit } if //false exit } loop QUIET not and /EPSBoundingBoxState .systemvar 1 and 1 eq and { (\n **** Warning: Some of the BoundingBox for the EPS file will be clipped.) = ( Use -dEPSCrop or -dEPSFitPage to avoid clipping.\n) = flush 1 add } if } ifelse } ifelse EPSBoundingBoxSetState } { pop % state } ifelse } { pop pop } ifelse } bind def /ProcessEPSComment { % file comment -- file comment /EPSBoundingBoxState .systemvar 3 lt { dup (%%BoundingBox:) anchorsearch { pop EPSDEBUG { (gs_epsf.ps: found %%BoundingBox\n) print flush } if 1 EPSBoundingBoxProcess } { (%%HiResBoundingBox:) anchorsearch { pop EPSDEBUG { (gs_epsf.ps: found %%HiResBoundingBox\n) print flush } if 3 EPSBoundingBoxProcess } { pop % Not interested in this DSC comment } ifelse } ifelse } if /EPSBoundingBoxState .systemvar 5 lt { dup (%%DocumentCustomColors:) anchorsearch { pop [ exch { { token not { exit } if dup type /stringtype ne { stop } if dup (atend) eq { stop } if exch } loop { counttomark 2 add index dup (123) .peekstring not { stop } if (%%+) eq { dup (123) readstring pop pop 256 string readline pop cvx exec } { pop exit } ifelse } loop } stopped { cleartomark } { counttomark 0 gt { currentpagedevice /MaxSeparations get 4 gt { ] << /SeparationColorNames 3 -1 roll >> setpagedevice } { cleartomark } ifelse } { cleartomark } ifelse } ifelse } { (%%EndComments) anchorsearch { pop pop % Ignore any following comments 5 EPSBoundingBoxSetState } { pop } ifelse } ifelse } if } bind def % Install EPS handler for DSC comments, which we do later /EPSBoundingBoxInit { systemdict /NOEPS known not { % Merge ProcessEPSComment with existing handler /ProcessEPSComment load /exec load currentuserparams /ProcessDSCComment get dup //null eq {pop {pop pop}} if /exec load 4 array astore cvx readonly << /ProcessDSCComment 3 -1 roll >> setuserparams } if } bind def /.runNoEPS /run load def /.runEPS { % file OR string -- /runEPS_save save def /runEPS_dict_count countdictstack def /runEPS_op_count count 2 sub def /runEPS_page_count currentpagedevice /PageCount get def 0 EPSBoundingBoxSetState .runNoEPS currentpagedevice /PageCount get runEPS_page_count sub 0 eq { /showpage load exec } if count runEPS_op_count sub {pop} repeat countdictstack runEPS_dict_count sub {end} repeat runEPS_save restore } bind def /run { % file OR string -- dup type /filetype ne { (r) file } if dup (%!PS-Adobe-) .peekstring { (%!PS-Adobe-) eq { dup (%!PS-Adobe-X.X EPSF-X.X) .peekstring { (EPSF) search { pop pop pop EPSDEBUG {(runEPS: Found EPS\n) print flush} if systemdict /NOEPS known { cvx .runNoEPS } { cvx .runEPS } ifelse } { EPSDEBUG {(runEPS: Normal DSC\n) print flush} if pop cvx .runNoEPS } ifelse } { EPSDEBUG {(runEPS: Short DSC\n) print flush} if pop cvx .runNoEPS } ifelse } { EPSDEBUG {(runEPS: Not DSC\n) print flush} if cvx .runNoEPS } ifelse } { EPSDEBUG {(runEPS: Short non-DSC\n) print flush} if pop cvx .runNoEPS } ifelse } bind odef % Handle DOS EPS files. /.runnoepsf /run load def /.epsfheader <C5D0D3C6> def /run { dup type /filetype ne { (r) file } if % Check for MS-DOS EPSF file (see Red Book p. 729). dup ( ) .peekstring { .epsfheader eq { dup ( ) readstring exch pop } { //false } ifelse } { pop //false } ifelse % Stack: file true/false { % This block is executed if the file is MS-DOS EPSF. % Build up the little-endian byte offset and length. 2 { 1 0 4 { 2 index read not { pop exit } if % if EOF, let error happen 2 index mul add exch 256 mul exch } repeat exch pop exch } repeat % Stack: offset length file % Use flushfile to skip quickly to the start of the % PostScript section. dup 4 -1 roll 12 sub () /SubFileDecode filter flushfile % Now interpret the PostScript. exch () /SubFileDecode filter cvx run } { .runnoepsf } ifelse } odef % rebind .runstdin to use redefined run userdict begin /.runstdin { { (%stdin) run } execute0 } bind def end
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
FAPIcidfmap | File | 1.45 KB | 0644 |
|
FAPIconfig | File | 815 B | 0644 |
|
FAPIfontmap | File | 1.43 KB | 0644 |
|
FCOfontmap-PCLPS2 | File | 2.79 KB | 0644 |
|
Fontmap | File | 109 B | 0644 |
|
Fontmap.GS | File | 11.79 KB | 0644 |
|
cidfmap | File | 2.11 KB | 0644 |
|
gs_agl.ps | File | 212.91 KB | 0644 |
|
gs_btokn.ps | File | 11.9 KB | 0644 |
|
gs_cet.ps | File | 3.4 KB | 0644 |
|
gs_cff.ps | File | 6.71 KB | 0644 |
|
gs_cidcm.ps | File | 16.43 KB | 0644 |
|
gs_ciddc.ps | File | 8.31 KB | 0644 |
|
gs_cidfm.ps | File | 7.14 KB | 0644 |
|
gs_cidfn.ps | File | 13.22 KB | 0644 |
|
gs_cidtt.ps | File | 5.7 KB | 0644 |
|
gs_cmap.ps | File | 17.94 KB | 0644 |
|
gs_cspace.ps | File | 5.84 KB | 0644 |
|
gs_dbt_e.ps | File | 2.08 KB | 0644 |
|
gs_diskn.ps | File | 6.68 KB | 0644 |
|
gs_dpnxt.ps | File | 4.74 KB | 0644 |
|
gs_dps.ps | File | 8.15 KB | 0644 |
|
gs_dps1.ps | File | 4.57 KB | 0644 |
|
gs_dps2.ps | File | 8.28 KB | 0644 |
|
gs_dscp.ps | File | 3.85 KB | 0644 |
|
gs_epsf.ps | File | 8.62 KB | 0644 |
|
gs_fapi.ps | File | 15.13 KB | 0644 |
|
gs_fntem.ps | File | 11.04 KB | 0644 |
|
gs_fonts.ps | File | 44.83 KB | 0644 |
|
gs_frsd.ps | File | 3.07 KB | 0644 |
|
gs_icc.ps | File | 2.99 KB | 0644 |
|
gs_il1_e.ps | File | 2.66 KB | 0644 |
|
gs_img.ps | File | 24.28 KB | 0644 |
|
gs_init.ps | File | 89.73 KB | 0644 |
|
gs_l2img.ps | File | 5.74 KB | 0644 |
|
gs_lev2.ps | File | 43.65 KB | 0644 |
|
gs_ll3.ps | File | 18.51 KB | 0644 |
|
gs_mex_e.ps | File | 3.75 KB | 0644 |
|
gs_mgl_e.ps | File | 2.13 KB | 0644 |
|
gs_mro_e.ps | File | 2.45 KB | 0644 |
|
gs_pdf_e.ps | File | 1.52 KB | 0644 |
|
gs_pdfwr.ps | File | 31.68 KB | 0644 |
|
gs_res.ps | File | 40.08 KB | 0644 |
|
gs_resmp.ps | File | 21.94 KB | 0644 |
|
gs_setpd.ps | File | 38.25 KB | 0644 |
|
gs_statd.ps | File | 13.6 KB | 0644 |
|
gs_std_e.ps | File | 3.07 KB | 0644 |
|
gs_sym_e.ps | File | 3.03 KB | 0644 |
|
gs_trap.ps | File | 2.85 KB | 0644 |
|
gs_ttf.ps | File | 61.82 KB | 0644 |
|
gs_typ32.ps | File | 4.45 KB | 0644 |
|
gs_typ42.ps | File | 1.98 KB | 0644 |
|
gs_type1.ps | File | 12.12 KB | 0644 |
|
gs_wan_e.ps | File | 1.53 KB | 0644 |
|
pdf_base.ps | File | 50.68 KB | 0644 |
|
pdf_draw.ps | File | 166.95 KB | 0644 |
|
pdf_font.ps | File | 88.77 KB | 0644 |
|
pdf_main.ps | File | 120.23 KB | 0644 |
|
pdf_ops.ps | File | 71.77 KB | 0644 |
|
pdf_rbld.ps | File | 18.96 KB | 0644 |
|
pdf_sec.ps | File | 24.15 KB | 0644 |
|
xlatmap | File | 1.73 KB | 0644 |
|