1/** 2 * Name: postscript 3 * Description: PostScript programming language. 4 * 5 * Author: Dave Hylands (DHylands@creo.com) 6 */ 7 8state 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 24state ps_encoded_string extends Highlight 25{ 26 /[\>]/ { 27 language_print ($0); 28 return; 29 } 30} 31 32state 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 267/* 268Local variables: 269mode: c 270End: 271*/ 272