xref: /vim-8.2.3635/runtime/syntax/mf.vim (revision 89a9c159)
1" Vim syntax file
2" Language:           METAFONT
3" Maintainer:         Nicola Vitacolonna <[email protected]>
4" Former Maintainers: Andreas Scherer <[email protected]>
5" Last Change:        2016 Oct 1
6
7if exists("b:current_syntax")
8  finish
9endif
10
11syn iskeyword @,_
12
13" METAFONT 'primitives' as defined in chapter 25 of 'The METAFONTbook'
14" Page 210: 'boolean expressions'
15syn keyword mfBoolExp        and charexists false known not odd or true unknown
16
17" Page 210: 'numeric expression'
18syn keyword mfNumExp         ASCII angle cosd directiontime floor hex length
19syn keyword mfNumExp         mexp mlog normaldeviate oct sind sqrt totalweight
20syn keyword mfNumExp         turningnumber uniformdeviate xpart xxpart xypart
21syn keyword mfNumExp         ypart yxpart yypart
22
23" Page 211: 'internal quantities'
24syn keyword mfInternal       autorounding boundarychar charcode chardp chardx
25syn keyword mfInternal       chardy charext charht charic charwd day designsize
26syn keyword mfInternal       fillin fontmaking granularity hppp jobname month
27syn keyword mfInternal       pausing proofing showstopping smoothing time
28syn keyword mfInternal       tracingcapsules tracingchoices tracingcommands
29syn keyword mfInternal       tracingedges tracingequations tracingmacros
30syn keyword mfInternal       tracingonline tracingoutput tracingpens
31syn keyword mfInternal       tracingrestores tracingspecs tracingstats
32syn keyword mfInternal       tracingtitles turningcheck vppp warningcheck
33syn keyword mfInternal       xoffset year yoffset
34
35" Page 212: 'pair expressions'
36syn keyword mfPairExp        of penoffset point postcontrol precontrol rotated
37syn keyword mfPairExp        scaled shifted slanted transformed xscaled yscaled
38syn keyword mfPairExp        zscaled
39
40" Page 213: 'path expressions'
41syn keyword mfPathExp        atleast controls curl cycle makepath reverse
42syn keyword mfPathExp        subpath tension
43
44" Page 214: 'pen expressions'
45syn keyword mfPenExp         makepen nullpen pencircle
46
47" Page 214: 'picture expressions'
48syn keyword mfPicExp         nullpicture
49
50" Page 214: 'string expressions'
51syn keyword mfStringExp      char decimal readstring str substring
52
53" Page 217: 'commands and statements'
54syn keyword mfCommand        addto also at batchmode contour cull delimiters
55syn keyword mfCommand        display doublepath dropping dump end errhelp
56syn keyword mfCommand        errmessage errorstopmode everyjob from interim
57syn keyword mfCommand        inwindow keeping let message newinternal
58syn keyword mfCommand        nonstopmode numspecial openwindow outer randomseed
59syn keyword mfCommand        save scrollmode shipout show showdependencies
60syn keyword mfCommand        showstats showtoken showvariable special to withpen
61syn keyword mfCommand        withweight
62
63" Page 56: 'types'
64syn keyword mfType           boolean numeric pair path pen picture string
65syn keyword mfType           transform
66
67" Page 155: 'grouping'
68syn keyword mfStatement      begingroup endgroup
69
70" Page 165: 'definitions'
71syn keyword mfDefinition     def enddef expr primary primarydef secondary
72syn keyword mfDefinition     secondarydef suffix tertiary tertiarydef text
73syn keyword mfDefinition     vardef
74
75" Page 169: 'conditions and loops'
76syn keyword mfCondition      else elseif endfor exitif fi for forever
77syn keyword mfCondition      forsuffixes if step until
78
79" Other primitives listed in the index
80syn keyword mfPrimitive      charlist endinput expandafter extensible fontdimen
81syn keyword mfPrimitive      headerbyte inner input intersectiontimes kern
82syn keyword mfPrimitive      ligtable quote scantokens skipto
83
84" Implicit suffix parameters
85syn match   mfSuffixParam    "@#\|#@\|@"
86
87" These are just tags, but given their special status, we
88" highlight them as variables
89syn keyword mfVariable       x y
90
91" Keywords defined by plain.mf (defined on pp.262-278)
92if get(g:, "plain_mf_macros", 1)
93  syn keyword mfDef          addto_currentpicture beginchar capsule_def
94  syn keyword mfDef          change_width clear_pen_memory clearit clearpen
95  syn keyword mfDef          clearxy culldraw cullit cutdraw
96  syn keyword mfDef          define_blacker_pixels define_corrected_pixels
97  syn keyword mfDef          define_good_x_pixels define_good_y_pixels
98  syn keyword mfDef          define_horizontal_corrected_pixels define_pixels
99  syn keyword mfDef          define_whole_blacker_pixels define_whole_pixels
100  syn keyword mfDef          define_whole_vertical_blacker_pixels
101  syn keyword mfDef          define_whole_vertical_pixels downto draw drawdot
102  syn keyword mfDef          endchar erase exitunless fill filldraw fix_units
103  syn keyword mfDef          flex font_coding_scheme font_extra_space
104  syn keyword mfDef          font_identifier font_normal_shrink
105  syn keyword mfDef          font_normal_space font_normal_stretch font_quad
106  syn keyword mfDef          font_size font_slant font_x_height gfcorners gobble
107  syn keyword mfDef          hide imagerules interact italcorr killtext
108  syn keyword mfDef          loggingall lowres_fix makebox makegrid maketicks
109  syn keyword mfDef          mode_def mode_setup nodisplays notransforms numtok
110  syn keyword mfDef          openit penrazor pensquare penstroke pickup
111  syn keyword mfDef          proofoffset proofrule range reflectedabout
112  syn keyword mfDef          rotatedaround screenchars screenrule screenstrokes
113  syn keyword mfDef          shipit showit smode stop superellipse takepower
114  syn keyword mfDef          tracingall tracingnone undraw undrawdot unfill
115  syn keyword mfDef          unfilldraw upto z
116  syn match   mfDef          "???"
117  syn keyword mfVardef       bot byte ceiling counterclockwise cutoff decr dir
118  syn keyword mfVardef       direction directionpoint grayfont hround incr
119  syn keyword mfVardef       interpath inverse labelfont labels lft magstep
120  " Note: nodot is not a vardef, it is used as in makelabel.lft.nodot("5",z5)
121  " (METAFONT only)
122  syn keyword mfVardef       makelabel max min nodot penlabels penpos
123  syn keyword mfVardef       proofrulethickness round rt savepen slantfont solve
124  syn keyword mfVardef       tensepath titlefont top unitvector vround whatever
125  syn match   mpVardef       "\<good\.\%(x\|y\|lft\|rt\|top\|bot\)\>"
126  syn keyword mfPrimaryDef   div dotprod gobbled mod
127  syn keyword mfSecondaryDef intersectionpoint
128  syn keyword mfTertiaryDef  softjoin thru
129  syn keyword mfNewInternal  blacker currentwindow displaying eps epsilon
130  syn keyword mfNewInternal  infinity join_radius number_of_modes o_correction
131  syn keyword mfNewInternal  pen_bot pen_lft pen_rt pen_top pixels_per_inch
132  syn keyword mfNewInternal  screen_cols screen_rows tolerance
133  " Predefined constants
134  syn keyword mfConstant     base_name base_version blankpicture ditto down
135  syn keyword mfConstant     fullcircle halfcircle identity left lowres origin
136  syn keyword mfConstant     penspeck proof quartercircle right rulepen smoke
137  syn keyword mfConstant     unitpixel unitsquare up
138  " Other predefined variables
139  syn keyword mfVariable     aspect_ratio currentpen extra_beginchar
140  syn keyword mfVariable     extra_endchar currentpen_path currentpicture
141  syn keyword mfVariable     currenttransform d extra_setup h localfont mag mode
142  syn keyword mfVariable     mode_name w
143  " let statements:
144  syn keyword mfnumExp       abs
145  syn keyword mfPairExp      rotatedabout
146  syn keyword mfCommand      bye relax
147endif
148
149" By default, METAFONT loads modes.mf, too
150if get(g:, "plain_mf_modes", 1)
151  syn keyword mfConstant     APSSixMed AgfaFourZeroZero AgfaThreeFourZeroZero
152  syn keyword mfConstant     AtariNineFive AtariNineSix AtariSLMEightZeroFour
153  syn keyword mfConstant     AtariSMOneTwoFour CItohEightFiveOneZero
154  syn keyword mfConstant     CItohThreeOneZero CanonBJCSixZeroZero CanonCX
155  syn keyword mfConstant     CanonEX CanonLBPLX CanonLBPTen CanonSX ChelgraphIBX
156  syn keyword mfConstant     CompugraphicEightSixZeroZero
157  syn keyword mfConstant     CompugraphicNineSixZeroZero DD DEClarge DECsmall
158  syn keyword mfConstant     DataDiscNew EightThree EpsonAction
159  syn keyword mfConstant     EpsonLQFiveZeroZeroLo EpsonLQFiveZeroZeroMed
160  syn keyword mfConstant     EpsonMXFX EpsonSQEightSevenZero EpsonStylusPro
161  syn keyword mfConstant     EpsonStylusProHigh EpsonStylusProLow
162  syn keyword mfConstant     EpsonStylusProMed FourFour GThreefax HPDeskJet
163  syn keyword mfConstant     HPLaserJetIIISi IBMFourTwoFiveZero IBMFourTwoOneSix
164  syn keyword mfConstant     IBMFourTwoThreeZero IBMFourZeroOneNine
165  syn keyword mfConstant     IBMFourZeroThreeNine IBMFourZeroTwoNine
166  syn keyword mfConstant     IBMProPrinter IBMSixOneFiveFour IBMSixSixSevenZero
167  syn keyword mfConstant     IBMThreeEightOneTwo IBMThreeEightTwoZero
168  syn keyword mfConstant     IBMThreeOneNineThree IBMThreeOneSevenNine
169  syn keyword mfConstant     IBMUlfHolleberg LASevenFive LNOthreR LNOthree
170  syn keyword mfConstant     LNZeroOne LNZeroThree LPSFourZero LPSTwoZero
171  syn keyword mfConstant     LexmarkFourZeroThreeNine LexmarkOptraR
172  syn keyword mfConstant     LexmarkOptraS LinotypeLThreeThreeZero
173  syn keyword mfConstant     LinotypeOneZeroZero LinotypeOneZeroZeroLo
174  syn keyword mfConstant     LinotypeThreeZeroZeroHi MacTrueSize NeXTprinter
175  syn keyword mfConstant     NeXTscreen NecTwoZeroOne Newgen NineOne
176  syn keyword mfConstant     OCESixSevenFiveZeroPS OneTwoZero OneZeroZero
177  syn keyword mfConstant     PrintwareSevenTwoZeroIQ Prism QMSOneSevenTwoFive
178  syn keyword mfConstant     QMSOneSevenZeroZero QMSTwoFourTwoFive RicohA
179  syn keyword mfConstant     RicohFortyEighty RicohFourZeroEightZero RicohLP
180  syn keyword mfConstant     SparcPrinter StarNLOneZero VAXstation VTSix
181  syn keyword mfConstant     VarityperFiveZeroSixZeroW
182  syn keyword mfConstant     VarityperFourThreeZeroZeroHi
183  syn keyword mfConstant     VarityperFourThreeZeroZeroLo
184  syn keyword mfConstant     VarityperFourTwoZeroZero VarityperSixZeroZero
185  syn keyword mfConstant     XeroxDocutech XeroxEightSevenNineZero
186  syn keyword mfConstant     XeroxFourZeroFiveZero XeroxNineSevenZeroZero
187  syn keyword mfConstant     XeroxPhaserSixTwoZeroZeroDP XeroxThreeSevenZeroZero
188  syn keyword mfConstant     Xerox_world agfafzz agfatfzz amiga aps apssixhi
189  syn keyword mfConstant     aselect atariezf atarinf atarins atariotf bitgraph
190  syn keyword mfConstant     bjtenex bjtzzex bjtzzl bjtzzs boise canonbjc
191  syn keyword mfConstant     canonex canonlbp cg cgl cgnszz citohtoz corona crs
192  syn keyword mfConstant     cthreeten cx datadisc declarge decsmall deskjet
193  syn keyword mfConstant     docutech dover dp dpdfezzz eighthre elvira epscszz
194  syn keyword mfConstant     epsdraft epsdrft epsdrftl epsfast epsfastl epshi
195  syn keyword mfConstant     epslo epsmed epsmedl epson epsonact epsonfx epsonl
196  syn keyword mfConstant     epsonlo epsonlol epsonlq epsonsq epstylus epstylwr
197  syn keyword mfConstant     epstyplo epstypmd epstypml epstypro epswlo epswlol
198  syn keyword mfConstant     esphi fourfour gpx gtfax gtfaxhi gtfaxl gtfaxlo
199  syn keyword mfConstant     gtfaxlol help hifax highfax hplaser hprugged ibm_a
200  syn keyword mfConstant     ibmd ibmega ibmegal ibmfzon ibmfztn ibmpp ibmppl
201  syn keyword mfConstant     ibmsoff ibmteot ibmtetz ibmtont ibmtosn ibmtosnl
202  syn keyword mfConstant     ibmvga ibx imagen imagewriter itoh itohl itohtoz
203  syn keyword mfConstant     itohtozl iw jetiiisi kyocera laserjet laserjetfive
204  syn keyword mfConstant     laserjetfivemp laserjetfour laserjetfourthousand
205  syn keyword mfConstant     laserjetfourzerozerozero laserjethi laserjetlo
206  syn keyword mfConstant     laserjettwoonezerozero
207  syn keyword mfConstant     laserjettwoonezerozerofastres lasermaster
208  syn keyword mfConstant     laserwriter lasf lexmarkr lexmarks lexmarku
209  syn keyword mfConstant     linohalf linohi linolo linolttz linoone linosuper
210  syn keyword mfConstant     linothree linothreelo linotzzh ljfive ljfivemp
211  syn keyword mfConstant     ljfour ljfzzz ljfzzzfr ljlo ljtozz ljtozzfr lmaster
212  syn keyword mfConstant     lnotr lnzo lps lpstz lqhires lqlores lqmed lqmedl
213  syn keyword mfConstant     lqmedres lview lviewl lwpro macmag mactrue modes_mf
214  syn keyword mfConstant     ncd nec nechi neclm nectzo newdd newddl nexthi
215  syn keyword mfConstant     nextscreen nextscrn nineone nullmode ocessfz
216  syn keyword mfConstant     okidata okidatal okifourten okifte okihi onetz
217  syn keyword mfConstant     onezz pcprevw pcscreen phaser phaserfs phasertf
218  syn keyword mfConstant     phasertfl phasertl pixpt printware prntware
219  syn keyword mfConstant     proprinter qms qmsesz qmsostf qmsoszz qmstftf ricoh
220  syn keyword mfConstant     ricoha ricohlp ricohsp sherpa sparcptr starnlt
221  syn keyword mfConstant     starnltl styletwo stylewr stylewri stylewriter sun
222  syn keyword mfConstant     supre swtwo toshiba ultre varityper vs vtftzz
223  syn keyword mfConstant     vtftzzhi vtftzzlo vtfzszw vtszz xpstzz xpstzzl
224  syn keyword mfConstant     xrxesnz xrxfzfz xrxnszz xrxtszz
225  syn keyword mfDef          BCPL_string coding_scheme font_face_byte
226  syn keyword mfDef          font_family landscape
227  syn keyword mfDef          mode_extra_info mode_help mode_param
228  syn keyword mfNewInternal  blacker_min
229endif
230
231" Some other basic macro names, e.g., from cmbase, logo, etc.
232if get(g:, "other_mf_macros", 1)
233  syn keyword mfDef          beginlogochar
234  syn keyword mfDef          font_setup
235  syn keyword mfPrimitive    generate
236endif
237
238" Numeric tokens
239syn match     mfNumeric      "[-]\=\d\+"
240syn match     mfNumeric      "[-]\=\.\d\+"
241syn match     mfNumeric      "[-]\=\d\+\.\d\+"
242
243" METAFONT lengths
244syn match     mfLength       "\<\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\>"
245syn match     mfLength       "[-]\=\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\="
246syn match     mfLength       "[-]\=\.\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\="
247syn match     mfLength       "[-]\=\d\+\.\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\="
248
249" String constants
250syn match     mfOpenString   /"[^"]*/
251syn region    mfString       oneline keepend start=+"+ end=+"+
252
253" Comments:
254syn keyword   mfTodoComment  contained TODO FIXME XXX DEBUG NOTE
255syn match     mfComment      "%.*$" contains=mfTodoComment,@Spell
256
257" synchronizing
258syn sync maxlines=50
259
260" Define the default highlighting
261hi def link mfBoolExp      Statement
262hi def link mfNumExp       Statement
263hi def link mfPairExp      Statement
264hi def link mfPathExp      Statement
265hi def link mfPenExp       Statement
266hi def link mfPicExp       Statement
267hi def link mfStringExp    Statement
268hi def link mfInternal     Identifier
269hi def link mfCommand      Statement
270hi def link mfType         Type
271hi def link mfStatement    Statement
272hi def link mfDefinition   Statement
273hi def link mfCondition    Conditional
274hi def link mfPrimitive    Statement
275hi def link mfDef          Function
276hi def link mfVardef       mfDef
277hi def link mfPrimaryDef   mfDef
278hi def link mfSecondaryDef mfDef
279hi def link mfTertiaryDef  mfDef
280hi def link mfCoord        Identifier
281hi def link mfPoint        Identifier
282hi def link mfNumeric      Number
283hi def link mfLength       Number
284hi def link mfComment      Comment
285hi def link mfString       String
286hi def link mfOpenString   Todo
287hi def link mfSuffixParam  Label
288hi def link mfNewInternal  mfInternal
289hi def link mfVariable     Identifier
290hi def link mfConstant     Constant
291hi def link mfTodoComment  Todo
292
293let b:current_syntax = "mf"
294
295" vim:sw=2
296