| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /* $Id$ */ |
| |
| package org.apache.xmlgraphics.ps; |
| |
| import java.io.IOException; |
| |
| /** |
| * This class defines the basic resources (procsets) used by the Apache XML Graphics project. |
| * |
| * @version $Id$ |
| */ |
| public final class PSProcSets { |
| |
| /** the standard procset for the XML Graphics project */ |
| public static final PSResource STD_PROCSET = new StdProcSet(); |
| /** the EPS procset for the XML Graphics project */ |
| public static final PSResource EPS_PROCSET = new EPSProcSet(); |
| |
| private static class StdProcSet extends PSProcSet { |
| |
| public StdProcSet() { |
| super("Apache XML Graphics Std ProcSet", 1.0f, 0); |
| } |
| |
| public void writeTo(PSGenerator gen) throws IOException { |
| gen.writeDSCComment(DSCConstants.BEGIN_RESOURCE, |
| new Object[] {TYPE_PROCSET, getName(), |
| Float.toString(getVersion()), Integer.toString(getRevision())}); |
| gen.writeDSCComment(DSCConstants.VERSION, |
| new Object[] {Float.toString(getVersion()), Integer.toString(getRevision())}); |
| gen.writeDSCComment(DSCConstants.COPYRIGHT, "Copyright 2001-2003 " |
| + "The Apache Software Foundation. " |
| + "License terms: http://www.apache.org/licenses/LICENSE-2.0"); |
| gen.writeDSCComment(DSCConstants.TITLE, |
| "Basic set of procedures used by the XML Graphics project (Batik and FOP)"); |
| |
| gen.writeln("/bd{bind def}bind def"); |
| gen.writeln("/ld{load def}bd"); |
| gen.writeln("/M/moveto ld"); |
| gen.writeln("/RM/rmoveto ld"); |
| gen.writeln("/t/show ld"); |
| gen.writeln("/A/ashow ld"); |
| gen.writeln("/cp/closepath ld"); |
| |
| gen.writeln("/re {4 2 roll M"); //define rectangle |
| gen.writeln("1 index 0 rlineto"); |
| gen.writeln("0 exch rlineto"); |
| gen.writeln("neg 0 rlineto"); |
| gen.writeln("cp } bd"); |
| |
| gen.writeln("/_ctm matrix def"); //Holds the current matrix |
| gen.writeln("/_tm matrix def"); |
| //BT: save currentmatrix, set _tm to identitymatrix and move to 0/0 |
| gen.writeln("/BT { _ctm currentmatrix pop matrix _tm copy pop 0 0 moveto } bd"); |
| //ET: restore last currentmatrix |
| gen.writeln("/ET { _ctm setmatrix } bd"); |
| gen.writeln("/iTm { _ctm setmatrix _tm concat } bd"); |
| gen.writeln("/Tm { _tm astore pop iTm 0 0 moveto } bd"); |
| |
| gen.writeln("/ux 0.0 def"); |
| gen.writeln("/uy 0.0 def"); |
| |
| // <font> <size> F |
| gen.writeln("/F {"); |
| gen.writeln(" /Tp exch def"); |
| // gen.writeln(" currentdict exch get"); |
| gen.writeln(" /Tf exch def"); |
| gen.writeln(" Tf findfont Tp scalefont setfont"); |
| gen.writeln(" /cf Tf def /cs Tp def /cw ( ) stringwidth pop def"); |
| gen.writeln("} bd"); |
| |
| gen.writeln("/ULS {currentpoint /uy exch def /ux exch def} bd"); |
| gen.writeln("/ULE {"); |
| gen.writeln(" /Tcx currentpoint pop def"); |
| gen.writeln(" gsave"); |
| gen.writeln(" newpath"); |
| gen.writeln(" cf findfont cs scalefont dup"); |
| gen.writeln(" /FontMatrix get 0 get /Ts exch def /FontInfo get dup"); |
| gen.writeln(" /UnderlinePosition get Ts mul /To exch def"); |
| gen.writeln(" /UnderlineThickness get Ts mul /Tt exch def"); |
| gen.writeln(" ux uy To add moveto Tcx uy To add lineto"); |
| gen.writeln(" Tt setlinewidth stroke"); |
| gen.writeln(" grestore"); |
| gen.writeln("} bd"); |
| |
| gen.writeln("/OLE {"); |
| gen.writeln(" /Tcx currentpoint pop def"); |
| gen.writeln(" gsave"); |
| gen.writeln(" newpath"); |
| gen.writeln(" cf findfont cs scalefont dup"); |
| gen.writeln(" /FontMatrix get 0 get /Ts exch def /FontInfo get dup"); |
| gen.writeln(" /UnderlinePosition get Ts mul /To exch def"); |
| gen.writeln(" /UnderlineThickness get Ts mul /Tt exch def"); |
| gen.writeln(" ux uy To add cs add moveto Tcx uy To add cs add lineto"); |
| gen.writeln(" Tt setlinewidth stroke"); |
| gen.writeln(" grestore"); |
| gen.writeln("} bd"); |
| |
| gen.writeln("/SOE {"); |
| gen.writeln(" /Tcx currentpoint pop def"); |
| gen.writeln(" gsave"); |
| gen.writeln(" newpath"); |
| gen.writeln(" cf findfont cs scalefont dup"); |
| gen.writeln(" /FontMatrix get 0 get /Ts exch def /FontInfo get dup"); |
| gen.writeln(" /UnderlinePosition get Ts mul /To exch def"); |
| gen.writeln(" /UnderlineThickness get Ts mul /Tt exch def"); |
| gen.writeln(" ux uy To add cs 10 mul 26 idiv add moveto " |
| + "Tcx uy To add cs 10 mul 26 idiv add lineto"); |
| gen.writeln(" Tt setlinewidth stroke"); |
| gen.writeln(" grestore"); |
| gen.writeln("} bd"); |
| |
| gen.writeln("/QUADTO {"); |
| gen.writeln("/Y22 exch store"); |
| gen.writeln("/X22 exch store"); |
| gen.writeln("/Y21 exch store"); |
| gen.writeln("/X21 exch store"); |
| gen.writeln("currentpoint"); |
| gen.writeln("/Y21 load 2 mul add 3 div exch"); |
| gen.writeln("/X21 load 2 mul add 3 div exch"); |
| gen.writeln("/X21 load 2 mul /X22 load add 3 div"); |
| gen.writeln("/Y21 load 2 mul /Y22 load add 3 div"); |
| gen.writeln("/X22 load /Y22 load curveto"); |
| gen.writeln("} bd"); |
| |
| gen.writeln("/SSPD {"); |
| gen.writeln("dup length /d exch dict def"); |
| gen.writeln("{"); |
| gen.writeln("/v exch def"); |
| gen.writeln("/k exch def"); |
| gen.writeln("currentpagedevice k known {"); |
| gen.writeln("/cpdv currentpagedevice k get def"); |
| gen.writeln("v cpdv ne {"); |
| gen.writeln("/upd false def"); |
| gen.writeln("/nullv v type /nulltype eq def"); |
| gen.writeln("/nullcpdv cpdv type /nulltype eq def"); |
| gen.writeln("nullv nullcpdv or"); |
| gen.writeln("{"); |
| gen.writeln("/upd true def"); |
| gen.writeln("} {"); |
| gen.writeln("/sametype v type cpdv type eq def"); |
| gen.writeln("sametype {"); |
| gen.writeln("v type /arraytype eq {"); |
| gen.writeln("/vlen v length def"); |
| gen.writeln("/cpdvlen cpdv length def"); |
| gen.writeln("vlen cpdvlen eq {"); |
| gen.writeln("0 1 vlen 1 sub {"); |
| gen.writeln("/i exch def"); |
| gen.writeln("/obj v i get def"); |
| gen.writeln("/cpdobj cpdv i get def"); |
| gen.writeln("obj cpdobj ne {"); |
| gen.writeln("/upd true def"); |
| gen.writeln("exit"); |
| gen.writeln("} if"); |
| gen.writeln("} for"); |
| gen.writeln("} {"); |
| gen.writeln("/upd true def"); |
| gen.writeln("} ifelse"); |
| gen.writeln("} {"); |
| gen.writeln("v type /dicttype eq {"); |
| gen.writeln("v {"); |
| gen.writeln("/dv exch def"); |
| gen.writeln("/dk exch def"); |
| gen.writeln("/cpddv cpdv dk get def"); |
| gen.writeln("dv cpddv ne {"); |
| gen.writeln("/upd true def"); |
| gen.writeln("exit"); |
| gen.writeln("} if"); |
| gen.writeln("} forall"); |
| gen.writeln("} {"); |
| gen.writeln("/upd true def"); |
| gen.writeln("} ifelse"); |
| gen.writeln("} ifelse"); |
| gen.writeln("} if"); |
| gen.writeln("} ifelse"); |
| gen.writeln("upd true eq {"); |
| gen.writeln("d k v put"); |
| gen.writeln("} if"); |
| gen.writeln("} if"); |
| gen.writeln("} if"); |
| gen.writeln("} forall"); |
| gen.writeln("d length 0 gt {"); |
| gen.writeln("d setpagedevice"); |
| gen.writeln("} if"); |
| gen.writeln("} bd"); |
| |
| gen.writeDSCComment(DSCConstants.END_RESOURCE); |
| gen.getResourceTracker().registerSuppliedResource(this); |
| } |
| |
| } |
| |
| private static class EPSProcSet extends PSProcSet { |
| |
| public EPSProcSet() { |
| super("Apache XML Graphics EPS ProcSet", 1.0f, 0); |
| } |
| |
| public void writeTo(PSGenerator gen) throws IOException { |
| gen.writeDSCComment(DSCConstants.BEGIN_RESOURCE, |
| new Object[] {TYPE_PROCSET, getName(), |
| Float.toString(getVersion()), Integer.toString(getRevision())}); |
| gen.writeDSCComment(DSCConstants.VERSION, |
| new Object[] {Float.toString(getVersion()), Integer.toString(getRevision())}); |
| gen.writeDSCComment(DSCConstants.COPYRIGHT, "Copyright 2002-2003 " |
| + "The Apache Software Foundation. " |
| + "License terms: http://www.apache.org/licenses/LICENSE-2.0"); |
| gen.writeDSCComment(DSCConstants.TITLE, |
| "EPS procedures used by the Apache XML Graphics project (Batik and FOP)"); |
| |
| gen.writeln("/BeginEPSF { %def"); |
| gen.writeln("/b4_Inc_state save def % Save state for cleanup"); |
| gen.writeln("/dict_count countdictstack def % Count objects on dict stack"); |
| gen.writeln("/op_count count 1 sub def % Count objects on operand stack"); |
| gen.writeln("userdict begin % Push userdict on dict stack"); |
| gen.writeln("/showpage { } def % Redefine showpage, { } = null proc"); |
| gen.writeln("0 setgray 0 setlinecap % Prepare graphics state"); |
| gen.writeln("1 setlinewidth 0 setlinejoin"); |
| gen.writeln("10 setmiterlimit [ ] 0 setdash newpath"); |
| gen.writeln("/languagelevel where % If level not equal to 1 then"); |
| gen.writeln("{pop languagelevel % set strokeadjust and"); |
| gen.writeln("1 ne % overprint to their defaults."); |
| gen.writeln("{false setstrokeadjust false setoverprint"); |
| gen.writeln("} if"); |
| gen.writeln("} if"); |
| gen.writeln("} bd"); |
| |
| gen.writeln("/EndEPSF { %def"); |
| gen.writeln("count op_count sub {pop} repeat % Clean up stacks"); |
| gen.writeln("countdictstack dict_count sub {end} repeat"); |
| gen.writeln("b4_Inc_state restore"); |
| gen.writeln("} bd"); |
| |
| gen.writeDSCComment(DSCConstants.END_RESOURCE); |
| gen.getResourceTracker().registerSuppliedResource(this); |
| } |
| |
| } |
| |
| /** |
| * Generates a resource defining standard procset with operations used by the XML Graphics |
| * project. |
| * @param gen PSGenerator to use for output |
| * @throws IOException In case of an I/O problem |
| */ |
| public static void writeStdProcSet(PSGenerator gen) throws IOException { |
| ((StdProcSet)STD_PROCSET).writeTo(gen); |
| } |
| |
| /** |
| * Generates a resource defining standard procset with operations used by the XML Graphics |
| * project. |
| * @param gen PSGenerator to use for output |
| * @throws IOException In case of an I/O problem |
| * @deprecated Use writeStdProcSet() instead. |
| */ |
| public static void writeFOPStdProcSet(PSGenerator gen) throws IOException { |
| writeStdProcSet(gen); |
| } |
| |
| |
| /** |
| * Generates a resource defining a procset for including EPS graphics. |
| * @param gen PSGenerator to use for output |
| * @throws IOException In case of an I/O problem |
| */ |
| public static void writeEPSProcSet(PSGenerator gen) throws IOException { |
| ((EPSProcSet)EPS_PROCSET).writeTo(gen); |
| } |
| |
| /** |
| * Generates a resource defining a procset for including EPS graphics. |
| * @param gen PSGenerator to use for output |
| * @throws IOException In case of an I/O problem |
| * @deprecated Use writeEPSProcSet() instead. |
| */ |
| public static void writeFOPEPSProcSet(PSGenerator gen) throws IOException { |
| writeEPSProcSet(gen); |
| } |
| |
| |
| } |