vim-polyglot/syntax/mf.vim
2017-09-27 20:43:42 +02:00

300 lines
15 KiB
VimL

if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vim') == -1
" Vim syntax file
" Language: METAFONT
" Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
" Former Maintainers: Andreas Scherer <andreas.scherer@pobox.com>
" Last Change: 2016 Oct 1
if exists("b:current_syntax")
finish
endif
syn iskeyword @,_
" METAFONT 'primitives' as defined in chapter 25 of 'The METAFONTbook'
" Page 210: 'boolean expressions'
syn keyword mfBoolExp and charexists false known not odd or true unknown
" Page 210: 'numeric expression'
syn keyword mfNumExp ASCII angle cosd directiontime floor hex length
syn keyword mfNumExp mexp mlog normaldeviate oct sind sqrt totalweight
syn keyword mfNumExp turningnumber uniformdeviate xpart xxpart xypart
syn keyword mfNumExp ypart yxpart yypart
" Page 211: 'internal quantities'
syn keyword mfInternal autorounding boundarychar charcode chardp chardx
syn keyword mfInternal chardy charext charht charic charwd day designsize
syn keyword mfInternal fillin fontmaking granularity hppp jobname month
syn keyword mfInternal pausing proofing showstopping smoothing time
syn keyword mfInternal tracingcapsules tracingchoices tracingcommands
syn keyword mfInternal tracingedges tracingequations tracingmacros
syn keyword mfInternal tracingonline tracingoutput tracingpens
syn keyword mfInternal tracingrestores tracingspecs tracingstats
syn keyword mfInternal tracingtitles turningcheck vppp warningcheck
syn keyword mfInternal xoffset year yoffset
" Page 212: 'pair expressions'
syn keyword mfPairExp of penoffset point postcontrol precontrol rotated
syn keyword mfPairExp scaled shifted slanted transformed xscaled yscaled
syn keyword mfPairExp zscaled
" Page 213: 'path expressions'
syn keyword mfPathExp atleast controls curl cycle makepath reverse
syn keyword mfPathExp subpath tension
" Page 214: 'pen expressions'
syn keyword mfPenExp makepen nullpen pencircle
" Page 214: 'picture expressions'
syn keyword mfPicExp nullpicture
" Page 214: 'string expressions'
syn keyword mfStringExp char decimal readstring str substring
" Page 217: 'commands and statements'
syn keyword mfCommand addto also at batchmode contour cull delimiters
syn keyword mfCommand display doublepath dropping dump end errhelp
syn keyword mfCommand errmessage errorstopmode everyjob from interim
syn keyword mfCommand inwindow keeping let message newinternal
syn keyword mfCommand nonstopmode numspecial openwindow outer randomseed
syn keyword mfCommand save scrollmode shipout show showdependencies
syn keyword mfCommand showstats showtoken showvariable special to withpen
syn keyword mfCommand withweight
" Page 56: 'types'
syn keyword mfType boolean numeric pair path pen picture string
syn keyword mfType transform
" Page 155: 'grouping'
syn keyword mfStatement begingroup endgroup
" Page 165: 'definitions'
syn keyword mfDefinition def enddef expr primary primarydef secondary
syn keyword mfDefinition secondarydef suffix tertiary tertiarydef text
syn keyword mfDefinition vardef
" Page 169: 'conditions and loops'
syn keyword mfCondition else elseif endfor exitif fi for forever
syn keyword mfCondition forsuffixes if step until
" Other primitives listed in the index
syn keyword mfPrimitive charlist endinput expandafter extensible fontdimen
syn keyword mfPrimitive headerbyte inner input intersectiontimes kern
syn keyword mfPrimitive ligtable quote scantokens skipto
" Implicit suffix parameters
syn match mfSuffixParam "@#\|#@\|@"
" These are just tags, but given their special status, we
" highlight them as variables
syn keyword mfVariable x y
" Keywords defined by plain.mf (defined on pp.262-278)
if get(g:, "plain_mf_macros", 1)
syn keyword mfDef addto_currentpicture beginchar capsule_def
syn keyword mfDef change_width clear_pen_memory clearit clearpen
syn keyword mfDef clearxy culldraw cullit cutdraw
syn keyword mfDef define_blacker_pixels define_corrected_pixels
syn keyword mfDef define_good_x_pixels define_good_y_pixels
syn keyword mfDef define_horizontal_corrected_pixels define_pixels
syn keyword mfDef define_whole_blacker_pixels define_whole_pixels
syn keyword mfDef define_whole_vertical_blacker_pixels
syn keyword mfDef define_whole_vertical_pixels downto draw drawdot
syn keyword mfDef endchar erase exitunless fill filldraw fix_units
syn keyword mfDef flex font_coding_scheme font_extra_space
syn keyword mfDef font_identifier font_normal_shrink
syn keyword mfDef font_normal_space font_normal_stretch font_quad
syn keyword mfDef font_size font_slant font_x_height gfcorners gobble
syn keyword mfDef hide imagerules interact italcorr killtext
syn keyword mfDef loggingall lowres_fix makebox makegrid maketicks
syn keyword mfDef mode_def mode_setup nodisplays notransforms numtok
syn keyword mfDef openit penrazor pensquare penstroke pickup
syn keyword mfDef proofoffset proofrule range reflectedabout
syn keyword mfDef rotatedaround screenchars screenrule screenstrokes
syn keyword mfDef shipit showit smode stop superellipse takepower
syn keyword mfDef tracingall tracingnone undraw undrawdot unfill
syn keyword mfDef unfilldraw upto z
syn match mfDef "???"
syn keyword mfVardef bot byte ceiling counterclockwise cutoff decr dir
syn keyword mfVardef direction directionpoint grayfont hround incr
syn keyword mfVardef interpath inverse labelfont labels lft magstep
" Note: nodot is not a vardef, it is used as in makelabel.lft.nodot("5",z5)
" (METAFONT only)
syn keyword mfVardef makelabel max min nodot penlabels penpos
syn keyword mfVardef proofrulethickness round rt savepen slantfont solve
syn keyword mfVardef tensepath titlefont top unitvector vround whatever
syn match mpVardef "\<good\.\%(x\|y\|lft\|rt\|top\|bot\)\>"
syn keyword mfPrimaryDef div dotprod gobbled mod
syn keyword mfSecondaryDef intersectionpoint
syn keyword mfTertiaryDef softjoin thru
syn keyword mfNewInternal blacker currentwindow displaying eps epsilon
syn keyword mfNewInternal infinity join_radius number_of_modes o_correction
syn keyword mfNewInternal pen_bot pen_lft pen_rt pen_top pixels_per_inch
syn keyword mfNewInternal screen_cols screen_rows tolerance
" Predefined constants
syn keyword mfConstant base_name base_version blankpicture ditto down
syn keyword mfConstant fullcircle halfcircle identity left lowres origin
syn keyword mfConstant penspeck proof quartercircle right rulepen smoke
syn keyword mfConstant unitpixel unitsquare up
" Other predefined variables
syn keyword mfVariable aspect_ratio currentpen extra_beginchar
syn keyword mfVariable extra_endchar currentpen_path currentpicture
syn keyword mfVariable currenttransform d extra_setup h localfont mag mode
syn keyword mfVariable mode_name w
" let statements:
syn keyword mfnumExp abs
syn keyword mfPairExp rotatedabout
syn keyword mfCommand bye relax
endif
" By default, METAFONT loads modes.mf, too
if get(g:, "plain_mf_modes", 1)
syn keyword mfConstant APSSixMed AgfaFourZeroZero AgfaThreeFourZeroZero
syn keyword mfConstant AtariNineFive AtariNineSix AtariSLMEightZeroFour
syn keyword mfConstant AtariSMOneTwoFour CItohEightFiveOneZero
syn keyword mfConstant CItohThreeOneZero CanonBJCSixZeroZero CanonCX
syn keyword mfConstant CanonEX CanonLBPLX CanonLBPTen CanonSX ChelgraphIBX
syn keyword mfConstant CompugraphicEightSixZeroZero
syn keyword mfConstant CompugraphicNineSixZeroZero DD DEClarge DECsmall
syn keyword mfConstant DataDiscNew EightThree EpsonAction
syn keyword mfConstant EpsonLQFiveZeroZeroLo EpsonLQFiveZeroZeroMed
syn keyword mfConstant EpsonMXFX EpsonSQEightSevenZero EpsonStylusPro
syn keyword mfConstant EpsonStylusProHigh EpsonStylusProLow
syn keyword mfConstant EpsonStylusProMed FourFour GThreefax HPDeskJet
syn keyword mfConstant HPLaserJetIIISi IBMFourTwoFiveZero IBMFourTwoOneSix
syn keyword mfConstant IBMFourTwoThreeZero IBMFourZeroOneNine
syn keyword mfConstant IBMFourZeroThreeNine IBMFourZeroTwoNine
syn keyword mfConstant IBMProPrinter IBMSixOneFiveFour IBMSixSixSevenZero
syn keyword mfConstant IBMThreeEightOneTwo IBMThreeEightTwoZero
syn keyword mfConstant IBMThreeOneNineThree IBMThreeOneSevenNine
syn keyword mfConstant IBMUlfHolleberg LASevenFive LNOthreR LNOthree
syn keyword mfConstant LNZeroOne LNZeroThree LPSFourZero LPSTwoZero
syn keyword mfConstant LexmarkFourZeroThreeNine LexmarkOptraR
syn keyword mfConstant LexmarkOptraS LinotypeLThreeThreeZero
syn keyword mfConstant LinotypeOneZeroZero LinotypeOneZeroZeroLo
syn keyword mfConstant LinotypeThreeZeroZeroHi MacTrueSize NeXTprinter
syn keyword mfConstant NeXTscreen NecTwoZeroOne Newgen NineOne
syn keyword mfConstant OCESixSevenFiveZeroPS OneTwoZero OneZeroZero
syn keyword mfConstant PrintwareSevenTwoZeroIQ Prism QMSOneSevenTwoFive
syn keyword mfConstant QMSOneSevenZeroZero QMSTwoFourTwoFive RicohA
syn keyword mfConstant RicohFortyEighty RicohFourZeroEightZero RicohLP
syn keyword mfConstant SparcPrinter StarNLOneZero VAXstation VTSix
syn keyword mfConstant VarityperFiveZeroSixZeroW
syn keyword mfConstant VarityperFourThreeZeroZeroHi
syn keyword mfConstant VarityperFourThreeZeroZeroLo
syn keyword mfConstant VarityperFourTwoZeroZero VarityperSixZeroZero
syn keyword mfConstant XeroxDocutech XeroxEightSevenNineZero
syn keyword mfConstant XeroxFourZeroFiveZero XeroxNineSevenZeroZero
syn keyword mfConstant XeroxPhaserSixTwoZeroZeroDP XeroxThreeSevenZeroZero
syn keyword mfConstant Xerox_world agfafzz agfatfzz amiga aps apssixhi
syn keyword mfConstant aselect atariezf atarinf atarins atariotf bitgraph
syn keyword mfConstant bjtenex bjtzzex bjtzzl bjtzzs boise canonbjc
syn keyword mfConstant canonex canonlbp cg cgl cgnszz citohtoz corona crs
syn keyword mfConstant cthreeten cx datadisc declarge decsmall deskjet
syn keyword mfConstant docutech dover dp dpdfezzz eighthre elvira epscszz
syn keyword mfConstant epsdraft epsdrft epsdrftl epsfast epsfastl epshi
syn keyword mfConstant epslo epsmed epsmedl epson epsonact epsonfx epsonl
syn keyword mfConstant epsonlo epsonlol epsonlq epsonsq epstylus epstylwr
syn keyword mfConstant epstyplo epstypmd epstypml epstypro epswlo epswlol
syn keyword mfConstant esphi fourfour gpx gtfax gtfaxhi gtfaxl gtfaxlo
syn keyword mfConstant gtfaxlol help hifax highfax hplaser hprugged ibm_a
syn keyword mfConstant ibmd ibmega ibmegal ibmfzon ibmfztn ibmpp ibmppl
syn keyword mfConstant ibmsoff ibmteot ibmtetz ibmtont ibmtosn ibmtosnl
syn keyword mfConstant ibmvga ibx imagen imagewriter itoh itohl itohtoz
syn keyword mfConstant itohtozl iw jetiiisi kyocera laserjet laserjetfive
syn keyword mfConstant laserjetfivemp laserjetfour laserjetfourthousand
syn keyword mfConstant laserjetfourzerozerozero laserjethi laserjetlo
syn keyword mfConstant laserjettwoonezerozero
syn keyword mfConstant laserjettwoonezerozerofastres lasermaster
syn keyword mfConstant laserwriter lasf lexmarkr lexmarks lexmarku
syn keyword mfConstant linohalf linohi linolo linolttz linoone linosuper
syn keyword mfConstant linothree linothreelo linotzzh ljfive ljfivemp
syn keyword mfConstant ljfour ljfzzz ljfzzzfr ljlo ljtozz ljtozzfr lmaster
syn keyword mfConstant lnotr lnzo lps lpstz lqhires lqlores lqmed lqmedl
syn keyword mfConstant lqmedres lview lviewl lwpro macmag mactrue modes_mf
syn keyword mfConstant ncd nec nechi neclm nectzo newdd newddl nexthi
syn keyword mfConstant nextscreen nextscrn nineone nullmode ocessfz
syn keyword mfConstant okidata okidatal okifourten okifte okihi onetz
syn keyword mfConstant onezz pcprevw pcscreen phaser phaserfs phasertf
syn keyword mfConstant phasertfl phasertl pixpt printware prntware
syn keyword mfConstant proprinter qms qmsesz qmsostf qmsoszz qmstftf ricoh
syn keyword mfConstant ricoha ricohlp ricohsp sherpa sparcptr starnlt
syn keyword mfConstant starnltl styletwo stylewr stylewri stylewriter sun
syn keyword mfConstant supre swtwo toshiba ultre varityper vs vtftzz
syn keyword mfConstant vtftzzhi vtftzzlo vtfzszw vtszz xpstzz xpstzzl
syn keyword mfConstant xrxesnz xrxfzfz xrxnszz xrxtszz
syn keyword mfDef BCPL_string coding_scheme font_face_byte
syn keyword mfDef font_family landscape
syn keyword mfDef mode_extra_info mode_help mode_param
syn keyword mfNewInternal blacker_min
endif
" Some other basic macro names, e.g., from cmbase, logo, etc.
if get(g:, "other_mf_macros", 1)
syn keyword mfDef beginlogochar
syn keyword mfDef font_setup
syn keyword mfPrimitive generate
endif
" Numeric tokens
syn match mfNumeric "[-]\=\d\+"
syn match mfNumeric "[-]\=\.\d\+"
syn match mfNumeric "[-]\=\d\+\.\d\+"
" METAFONT lengths
syn match mfLength "\<\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\>"
syn match mfLength "[-]\=\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\="
syn match mfLength "[-]\=\.\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\="
syn match mfLength "[-]\=\d\+\.\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\="
" String constants
syn match mfOpenString /"[^"]*/
syn region mfString oneline keepend start=+"+ end=+"+
" Comments:
syn keyword mfTodoComment contained TODO FIXME XXX DEBUG NOTE
syn match mfComment "%.*$" contains=mfTodoComment,@Spell
" synchronizing
syn sync maxlines=50
" Define the default highlighting
hi def link mfBoolExp Statement
hi def link mfNumExp Statement
hi def link mfPairExp Statement
hi def link mfPathExp Statement
hi def link mfPenExp Statement
hi def link mfPicExp Statement
hi def link mfStringExp Statement
hi def link mfInternal Identifier
hi def link mfCommand Statement
hi def link mfType Type
hi def link mfStatement Statement
hi def link mfDefinition Statement
hi def link mfCondition Conditional
hi def link mfPrimitive Statement
hi def link mfDef Function
hi def link mfVardef mfDef
hi def link mfPrimaryDef mfDef
hi def link mfSecondaryDef mfDef
hi def link mfTertiaryDef mfDef
hi def link mfCoord Identifier
hi def link mfPoint Identifier
hi def link mfNumeric Number
hi def link mfLength Number
hi def link mfComment Comment
hi def link mfString String
hi def link mfOpenString Todo
hi def link mfSuffixParam Label
hi def link mfNewInternal mfInternal
hi def link mfVariable Identifier
hi def link mfConstant Constant
hi def link mfTodoComment Todo
let b:current_syntax = "mf"
" vim:sw=2
endif