309 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			309 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
| vim9script
 | |
| 
 | |
| # Vim syntax file
 | |
| # Language:           METAFONT
 | |
| # Maintainer:         Nicola Vitacolonna <nvitacolonna@gmail.com>
 | |
| # Former Maintainers: Andreas Scherer <andreas.scherer@pobox.com>
 | |
| # Latest Revision:    2022 Aug 12
 | |
| 
 | |
| if exists("b:current_syntax")
 | |
|   finish
 | |
| endif
 | |
| 
 | |
| # Deprecation warnings: to be removed eventually
 | |
| if exists("g:plain_mf_macros")
 | |
|   echomsg "[mf] g:plain_mf_macros is deprecated: use g:mf_plain_macros instead."
 | |
| endif
 | |
| if exists("g:plain_mf_modes")
 | |
|   echomsg "[mf] g:plain_mf_modes is deprecated: use g:mf_plain_modes instead."
 | |
| endif
 | |
| if exists("g:other_mf_macros")
 | |
|   echomsg "[mf] g:other_mf_macros is deprecated: use g:mf_other_macros instead."
 | |
| 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:, "mf_plain_macros", 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", get(g:, "mf_plain_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:, "mf_other_macros", 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=100
 | |
| 
 | |
| # 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
 | |
| 
 | |
| b:current_syntax = "mf"
 | |
| 
 | |
| # vim: sw=2 fdm=marker
 |