Small change to getopt stuff
[enscript.git] / states / hl / postscript.st
1 /**
2  * Name: postscript
3  * Description: PostScript programming language.
4  *
5  * Author: Dave Hylands (DHylands@creo.com)
6  */
7
8 state ps_string extends Highlight
9 {
10   /\\\\./ {
11     language_print ($0);
12   }
13   /[\)]/ {
14     language_print ($0);
15     return;
16   }
17   /[\(]/ {
18     /* Balanced ()'s in a string */
19     language_print ($0);
20     call (ps_string);
21   }
22 }
23
24 state ps_encoded_string extends Highlight
25 {
26   /[\>]/ {
27     language_print ($0);
28     return;
29   }
30 }
31
32 state postscript extends HighlightEntry
33 {
34   /* Comments. */
35   /%/ {
36     comment_face (true);
37     language_print ($0);
38     call (eat_one_line);
39     comment_face (false);
40   }
41
42   /* String constants. */
43   /[\(]/ {
44     string_face (true);
45     language_print ($0);
46     call (ps_string);
47     string_face (false);
48   }
49
50   /[\<]/ {
51     string_face (true);
52     language_print ($0);
53     call (ps_encoded_string);
54     string_face (false);
55   }
56
57   /* Keywords.
58
59      I built the keyword list using the following PostScript program
60
61         /str 128 string def
62         /outFile \(ps.txt)(w)file def
63         /proc
64         {
65             pop //str cvs outFile exch writestring outFile (\n) writestring
66         } bind def
67
68         systemdict /proc load forall
69         statusdict /proc load forall
70         errordict  /proc load forall
71
72     I then ran:
73
74         sort ps.txt | uniq | fmt > ps.key
75
76     I then went through the list and removed << >> [ ] and obvious Harlequin
77     extensions. Many of the keywords remaining are not documented in the Red
78     Book but are implemented in some Adobe implementations (especially the
79     ones from statusdict). I decided to leave them in.
80
81     And since I don't have emacs (gasp), I wrote a program which takes the
82     ps.key file and generates the regular expression. This was faster than
83     trying to install emacs and figure out how it works.
84
85     Also note that PostScript doesn't require whitespace in front of keywords.
86     In particular, text can follow immediately after any of the following
87     characters:
88
89         > { } ) [ ] /
90
91     and can be followed immediately by the following:
92
93         < { } ( [ ] /
94
95     in addition to white space.
96
97     Contents of ps.key:
98
99     $error .error 11x17tray 12x24tray 15x24tray = == =print =scratch =string
100     FontDirectory GlobalFontDirectory ISOLatin1Encoding
101     Run SharedFontDirectory SpecialRun StandardEncoding
102     VMerror a2tray a3tray a4tray a5tray abs add aload
103     anchorsearch and appletalktype arc arcn arct arcto array ashow astore
104     atan authors awidthshow b5tray begin bind bitshift blackoverprint blink
105     broadsheettray buildtime bytesavailable cachestatus ceiling cexec
106     charpath checkpassword checkscreen clear cleardictstack clearinterrupt
107     cleartomark clip clippath closefile closepath closescc colorimage concat
108     concatmatrix configurationerror copy copypage cos count countdictstack
109     countexecstack counttomark cshow currentblackgeneration
110     currentcacheparams currentcmykcolor currentcolor currentcolorrendering
111     currentcolorrenderingintent currentcolorscreen currentcolorspace
112     currentcolortransfer currentdash currentdevparams currentdict
113     currentdlhooks currentfile currentflat currentfont currentglobal
114     currentgray currentgstate currenthalftone currenthalftonephase
115     currenthsbcolor currentinterceptcolorspace currentlinecap
116     currentlinejoin currentlinewidth currentmatrix currentmiterlimit
117     currentobjectformat currentoverprint currentpacking currentpagedevice
118     currentpoint currentrelativeneutrals currentreproductioncriteria
119     currentrgbcolor currentscreen currentseparationcolornames
120     currentseparationorder currentshared currentstrokeadjust
121     currentsystemparams currenttransfer currenttrapintent
122     currentundercolorremoval currentuserparams curveto cvi cvlit cvn cvr
123     cvrs cvs cvx daytime def defaultblackoverprint
124     defaulthandleerror defaultmatrix defaultmirrorprint defaultpagemargin
125     defaultpageparams defaultprocesscolors defaulttimeouts definefont
126     defineresource defineuserobject deletefile devdismount devforall
127     devformat deviceinfo devmount devstatus dict dictfull dictstack
128     dictstackoverflow dictstackunderflow disableinterrupt diskonline
129     diskstatus div dlclearcaches dostartpage dosysstart dtransform dup echo
130     eerom eescratch eexec enableinterrupt end endofjob eoclip eofill eq
131     erasepage errorbeep errordict exch exec execdict execform execstack
132     execstackoverflow execuserobject executeonly executive exit exp exposure
133     false file filekind filelinenumber filename filenameforall fileposition
134     fill filter findcharstrings findcolorrenderingintent findencoding
135     findfont findpgfont findresource flattenpath floor flush flushcache
136     flushfile for forall gcheck ge genericpaper get getinterval getknown
137     getsccconfig gettopfile gettoprealfile globaldict glyphshow grestore
138     grestoreall gsave gstate gt handleerror hardwareiomode
139     identmatrix idiv idlefonts idtransform if ifelse
140     image imagemask index ineofill infill initclip initgraphics initialized
141     initializedisk initmatrix instroke internaldict interrupt
142     interruptenabled inueofill inufill inustroke invalidaccess invalidexit
143     invalidfileaccess invalidfont invalidrestore invertmatrix ioerror
144     ismanualfeed itransform jobname jobsource jobstate jobstring jobtimeout
145     known kshow languagelevel lastmode le ledgertray legaltray length
146     lettertray limitcheck lineto listfilesinestack ln load
147     loadcurrentpagedevice loadsetpagedevice log loop lt makefont makepattern
148     manualfeedtimeout margins mark matchtemplate matrix maxlength
149     medialength mediasize mediawidth mirrorprint mod moveto mul ne neg
150     negativeprint newpath noaccess nocurrentpoint not null nulldevice
151     openscc or packedarray pagecount pagemargin pageparams pagestackorder
152     pagetype pathbbox pathforall pop print printererror printermessage
153     printername printerstatus printerupset printobject processcolors product
154     prompt pstack put putinterval quit ramsize rand rangecheck rcheck
155     rcurveto read readhexstring readline readonly readstring realtime
156     rectclip rectfill rectstroke renamefile repeat resetfile resetprinter
157     resolution resourceforall resourcestatus restore reversepath revision
158     rlineto rmoveto roll rootfont rotate round rrand run save scale
159     scalefont sccbatch sccfiles sccinteractive scheck screenforall search
160     selectfont sendctrld sendpcmd sendprinterstate serialnumber serverdict
161     setaccuratescreens setbbox setblackgeneration setblackoverprint setblink
162     setcachedevice setcachedevice2 setcachelimit setcacheparams setcharwidth
163     setcmykcolor setcolor setcolorrendering setcolorrenderingintent
164     setcolorscreen setcolorspace setcolortransfer setdash
165     setdefaultblackoverprint setdefaultmirrorprint setdefaultpagemargin
166     setdefaultpageparams setdefaultprocesscolors setdefaulttimeouts
167     setdevparams setdlhooks setdostartpage setdosysstart seteescratch
168     setexposure setfileposition setflat setfont setglobal setgray setgstate
169     sethalftone sethalftonephase sethardwareiomode sethsbcolor setidlefonts
170     setinterceptcolorspace setjobtimeout setlinecap setlinejoin setlinewidth
171     setmargins setmatrix setmirrorprint setmiterlimit setnegativeprint
172     setobjectformat setoverprint setpacking setpage setpagedevice
173     setpagemargin setpageparams setpageseen setpagestackorder setpagetype
174     setpassword setpattern setprintername setprocesscolors
175     setrelativeneutrals setreproductioncriteria setresolution setrgbcolor
176     setsccbatch setsccconfig setsccinteractive setscreen setshared
177     setsoftwareiomode setstderr setstdio setstrokeadjust setsystemparams
178     settransfer settrapintent setucacheparams setundercolorremoval
179     setuserdiskpercent setuserparams setvmthreshold shareddict show showpage
180     sin softwareiomode sqrt srand stack stackoverflow stackunderflow start
181     startjob startpage status statuscommand statusdict stop stopped store
182     string stringwidth stroke strokepath sub superstop superstopped
183     switchsetting syntaxerror system systemdict tabloidtray timeout token
184     transform translate true truncate type typecheck uappend ucache
185     ucachestatus ueofill ufill undef undefined undefinedfilename
186     undefinedresource undefinedresult undefinefont undefineresource
187     undefineuserobject unmatchedmark unregistered upath userdict
188     userdiskpercent usertime ustroke ustrokepath validatefont version
189     vmreclaim vmstatus waittimeout wcheck where widthshow write
190     writehexstring writeobject writestring xcheck xor xshow xyshow yshow
191   */
192   /(\b|[\>\{\}\)\[\]\/])\
193 (\$error|\.error|1(1x17tray|2x24tray|5x24tray)|=(|=|print|s(cratch|tring))\
194 |FontDirectory|GlobalFontDirectory|ISOLatin1Encoding|Run|S\
195 (haredFontDirectory|pecialRun|tandardEncoding)|VMerror|a(2tray|3tray\
196 |4tray|5tray|bs|dd|load|n(chorsearch|d)|ppletalktype|r(c(|n|t(|o))|ray)|s\
197 (how|tore)|tan|uthors|widthshow)|b(5tray|egin|i(nd|tshift)|l\
198 (ackoverprint|ink)|roadsheettray|uildtime|ytesavailable)|c(achestatus|e\
199 (iling|xec)|h(arpath|eck(password|screen))|l(ear(|dictstack|interrupt\
200 |tomark)|ip(|path)|ose(file|path|scc))|o(lorimage|n(cat(|matrix)\
201 |figurationerror)|py(|page)|s|unt(|dictstack|execstack|tomark))|show|ur\
202 (rent(blackgeneration|c(acheparams|mykcolor|olor(|rendering(|intent)|s\
203 (creen|pace)|transfer))|d(ash|evparams|ict|lhooks)|f(ile|lat|ont)|g(lobal\
204 |ray|state)|h(alftone(|phase)|sbcolor)|interceptcolorspace|line(cap|join\
205 |width)|m(atrix|iterlimit)|o(bjectformat|verprint)|p(a(cking|gedevice)\
206 |oint)|r(e(lativeneutrals|productioncriteria)|gbcolor)|s(creen|eparation\
207 (colornames|order)|hared|trokeadjust|ystemparams)|tra(nsfer|pintent)|u\
208 (ndercolorremoval|serparams))|veto)|v(i|lit|n|r(|s)|s|x))|d(aytime|e(f(\
209 |ault(blackoverprint|handleerror|m(atrix|irrorprint)|p(age(margin\
210 |params)|rocesscolors)|timeouts)|ine(font|resource|userobject))|letefile|v\
211 (dismount|for(all|mat)|iceinfo|mount|status))|i(ct(|full|stack(|overflow\
212 |underflow))|s(ableinterrupt|k(online|status))|v)|lclearcaches|os(tartpage\
213 |ysstart)|transform|up)|e(cho|e(rom|scratch|xec)|n(ableinterrupt|d(\
214 |ofjob))|o(clip|fill)|q|r(asepage|ror(beep|dict))|x(ch|ec(|dict|form|stack\
215 (|overflow)|u(serobject|t(eonly|ive)))|it|p(|osure)))|f(alse|i(l(e(|kind\
216 |linenumber|name(|forall)|position)|l|ter)|nd(c(harstrings\
217 |olorrenderingintent)|encoding|font|pgfont|resource))|l(attenpath|oor\
218 |ush(|cache|file))|or(|all))|g(check|e(|nericpaper|t(|interval|known\
219 |sccconfig|top(file|realfile)))|l(obaldict|yphshow)|restore(|all)|s(ave\
220 |tate)|t)|ha(ndleerror|rdwareiomode)|i(d(entmatrix|iv|lefonts|transform)\
221 |f(|else)|mage(|mask)|n(dex|eofill|fill|it(clip|graphics|ialized(|isk)\
222 |matrix)|stroke|ter(naldict|rupt(|enabled))|u(eofill|fill|stroke)|v(alid\
223 (access|exit|f(ileaccess|ont)|restore)|ertmatrix))|oerror|smanualfeed\
224 |transform)|job(name|s(ource|t(ate|ring))|timeout)|k(nown|show)|l(a\
225 (nguagelevel|stmode)|e(|dgertray|galtray|ngth|ttertray)|i(mitcheck|neto\
226 |stfilesinestack)|n|o(ad(|currentpagedevice|setpagedevice)|g|op)|t)|m(a\
227 (ke(font|pattern)|nualfeedtimeout|r(gins|k)|t(chtemplate|rix)|xlength)\
228 |edia(length|size|width)|irrorprint|o(d|veto)|ul)|n(e(|g(|ativeprint)\
229 |wpath)|o(access|currentpoint|t)|ull(|device))|o(penscc|r)|p(a(ckedarray\
230 |ge(count|margin|params|stackorder|type)|th(bbox|forall))|op|r(int(|er\
231 (error|message|name|status|upset)|object)|o(cesscolors|duct|mpt))|stack\
232 |ut(|interval))|quit|r(a(msize|n(d|gecheck))|c(heck|urveto)|e(a(d(\
233 |hexstring|line|only|string)|ltime)|ct(clip|fill|stroke)|namefile|peat|s\
234 (et(file|printer)|o(lution|urce(forall|status))|tore)|v(ersepath|ision))\
235 |lineto|moveto|o(ll|otfont|tate|und)|rand|un)|s(ave|c(ale(|font)|c(batch\
236 |files|interactive)|heck|reenforall)|e(arch|lectfont|nd(ctrld|p(cmd\
237 |rinterstate))|r(ialnumber|verdict)|t(accuratescreens|b(box|l(ack\
238 (generation|overprint)|ink))|c(ache(device(|2)|limit|params)|harwidth\
239 |mykcolor|olor(|rendering(|intent)|s(creen|pace)|transfer))|d(ash|e(fault\
240 (blackoverprint|mirrorprint|p(age(margin|params)|rocesscolors)|timeouts)\
241 |vparams)|lhooks|os(tartpage|ysstart))|e(escratch|xposure)|f(ileposition\
242 |lat|ont)|g(lobal|ray|state)|h(a(lftone(|phase)|rdwareiomode)|sbcolor)|i\
243 (dlefonts|nterceptcolorspace)|jobtimeout|line(cap|join|width)|m(a(rgins\
244 |trix)|i(rrorprint|terlimit))|negativeprint|o(bjectformat|verprint)|p(a\
245 (cking|ge(|device|margin|params|s(een|tackorder)|type)|ssword|ttern)|r\
246 (intername|ocesscolors))|r(e(lativeneutrals|productioncriteria|solution)\
247 |gbcolor)|s(c(c(batch|config|interactive)|reen)|hared|oftwareiomode|t(d\
248 (err|io)|rokeadjust)|ystemparams)|tra(nsfer|pintent)|u(cacheparams\
249 |ndercolorremoval|ser(diskpercent|params))|vmthreshold))|h(areddict|ow(\
250 |page))|in|oftwareiomode|qrt|rand|t(a(ck(|overflow|underflow)|rt(|job\
251 |page)|tus(|command|dict))|o(p(|ped)|re)|r(ing(|width)|oke(|path)))|u(b\
252 |perstop(|ped))|witchsetting|y(ntaxerror|stem(|dict)))|t(abloidtray|imeout\
253 |oken|r(ans(form|late)|u(e|ncate))|ype(|check))|u(append|cache(|status)\
254 |eofill|fill|n(def(|ine(d(|filename|res(ource|ult))|font|resource\
255 |userobject))|matchedmark|registered)|path|s(er(di(ct|skpercent)|time)\
256 |troke(|path)))|v(alidatefont|ersion|m(reclaim|status))|w(aittimeout|check\
257 |here|idthshow|rite(|hexstring|object|string))|x(check|or|show|yshow)\
258 |yshow)\
259 (\b|[\<\{\}\(\[\]\/])/ {
260     keyword_face (true);
261     language_print ($0);
262     keyword_face (false);
263   }
264 }
265
266 \f
267 /*
268 Local variables:
269 mode: c
270 End:
271 */