123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- vim9script
- # Vim syntax file
- # Language: MetaPost
- # 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_mp_macros")
- echomsg "[mp] g:plain_mp_macros is deprecated: use g:mp_plain_macros instead."
- endif
- if exists("mfplain_mp_macros")
- echomsg "[mp] g:mfplain_mp_macros is deprecated: use g:mp_mfplain_macros instead."
- endif
- if exists("other_mp_macros")
- echomsg "[mp] g:other_mp_macros is deprecated: use g:mp_other_macros instead."
- endif
- # Store the current values of METAFONT global options
- const mf_plain_macros = get(g:, "mf_plain_macros", get(g:, "plain_mf_macros", -1))
- const mf_plain_modes = get(g:, "mf_plain_modes", get(g:, "plain_mf_modes", -1))
- const mf_other_macros = get(g:, "mf_other_macros", get(g:, "other_mf_macros", -1))
- g:mf_plain_macros = 0 # plain.mf has no special meaning for MetaPost
- g:mf_plain_modes = 0 # No METAFONT modes
- g:mf_other_macros = 0 # cmbase.mf, logo.mf, ... neither
- # Read the METAFONT syntax to start with
- runtime! syntax/mf.vim
- unlet b:current_syntax # Necessary for syn include below
- # Restore the value of existing global variables
- if mf_plain_macros == -1
- unlet g:mf_plain_macros
- else
- g:plain_mf_macros = mf_plain_macros
- endif
- if mf_plain_modes == -1
- unlet g:mf_plain_modes
- else
- g:mf_plain_modes = mf_plain_modes
- endif
- if mf_other_macros == -1
- unlet g:mf_other_macros
- else
- g:mf_other_macros = mf_other_macros
- endif
- # Use TeX highlighting inside verbatimtex/btex... etex
- syn include @MPTeX syntax/tex.vim
- unlet b:current_syntax
- # These are defined as keywords rather than using matchgroup
- # in order to make them available to syntaxcomplete.
- syn keyword mpTeXdelim btex etex verbatimtex contained
- syn region mpTeXinsert matchgroup=mpTeXdelim start=/\<verbatimtex\>\|\<btex\>/ end=/\<etex\>/ keepend contains=@MPTeX,mpTeXdelim
- # iskeyword must be set after the syn include above, because tex.vim sets `syn
- # iskeyword`. Note that keywords do not contain numbers (numbers are
- # subscripts)
- syntax iskeyword @,_
- # MetaPost primitives not found in METAFONT
- syn keyword mpBoolExp bounded clipped filled stroked textual arclength
- syn keyword mpNumExp arctime blackpart bluepart colormodel cyanpart
- syn keyword mpNumExp fontsize greenpart greypart magentapart redpart
- syn keyword mpPairExp yellowpart llcorner lrcorner ulcorner urcorner
- syn keyword mpPathExp envelope pathpart
- syn keyword mpPenExp penpart
- syn keyword mpPicExp dashpart glyph infont
- syn keyword mpStringExp fontpart readfrom textpart
- syn keyword mpType cmykcolor color rgbcolor
- # Other MetaPost primitives listed in the manual
- syn keyword mpPrimitive mpxbreak within
- # Internal quantities not found in METAFONT
- # (Table 6 in MetaPost: A User's Manual)
- syn keyword mpInternal defaultcolormodel hour minute linecap linejoin
- syn keyword mpInternal miterlimit mpprocset mpversion numberprecision
- syn keyword mpInternal numbersystem outputfilename outputformat
- syn keyword mpInternal outputformatoptions outputtemplate prologues
- syn keyword mpInternal restoreclipcolor tracinglostchars troffmode
- syn keyword mpInternal truecorners
- # List of commands not found in METAFONT (from MetaPost: A User's Manual)
- syn keyword mpCommand clip closefrom dashed filenametemplate fontmapfile
- syn keyword mpCommand fontmapline setbounds withcmykcolor withcolor
- syn keyword mpCommand withgreyscale withoutcolor withpostscript
- syn keyword mpCommand withprescript withrgbcolor write
- # METAFONT internal variables not found in MetaPost
- syn keyword notDefined autorounding chardx chardy fillin granularity
- syn keyword notDefined proofing smoothing tracingedges tracingpens
- syn keyword notDefined turningcheck xoffset yoffset
- # Suffix defined only in METAFONT:
- syn keyword notDefined nodot
- # Other not implemented primitives (see MetaPost: A User's Manual, §C.1)
- syn keyword notDefined cull display openwindow numspecial totalweight
- syn keyword notDefined withweight
- # Keywords defined by plain.mp
- if get(g:, "mp_plain_macros", get(g:, "plain_mp_macros", 1)) || get(b:, "mp_metafun", get(g:, "mp_metafun", 0))
- syn keyword mpDef beginfig clear_pen_memory clearit clearpen clearpen
- syn keyword mpDef clearxy colorpart cutdraw downto draw drawarrow
- syn keyword mpDef drawdblarrow drawdot drawoptions endfig erase
- syn keyword mpDef exitunless fill filldraw flex gobble hide interact
- syn keyword mpDef label loggingall makelabel numtok penstroke pickup
- syn keyword mpDef range reflectedabout rotatedaround shipit
- syn keyword mpDef stop superellipse takepower tracingall tracingnone
- syn keyword mpDef undraw undrawdot unfill unfilldraw upto
- syn match mpDef "???"
- syn keyword mpVardef arrowhead bbox bot buildcycle byte ceiling center
- syn keyword mpVardef counterclockwise decr dir direction directionpoint
- syn keyword mpVardef dotlabel dotlabels image incr interpath inverse
- syn keyword mpVardef labels lft magstep max min penlabels penpos round
- syn keyword mpVardef rt savepen solve tensepath thelabel top unitvector
- syn keyword mpVardef whatever z
- syn keyword mpPrimaryDef div dotprod gobbled mod
- syn keyword mpSecondaryDef intersectionpoint
- syn keyword mpTertiaryDef cutafter cutbefore softjoin thru
- syn keyword mpNewInternal ahangle ahlength bboxmargin beveled butt defaultpen
- syn keyword mpNewInternal defaultscale dotlabeldiam eps epsilon infinity
- syn keyword mpNewInternal join_radius labeloffset mitered pen_bot pen_lft
- syn keyword mpNewInternal pen_rt pen_top rounded squared tolerance
- # Predefined constants
- syn keyword mpConstant EOF background base_name base_version black
- syn keyword mpConstant blankpicture blue ditto down evenly fullcircle
- syn keyword mpConstant green halfcircle identity left origin penrazor
- syn keyword mpConstant penspeck pensquare quartercircle red right
- syn keyword mpConstant unitsquare up white withdots
- # Other predefined variables
- syn keyword mpVariable currentpen currentpen_path currentpicture cuttings
- syn keyword mpVariable defaultfont extra_beginfig extra_endfig
- syn keyword mpVariable laboff labxf labyf laboff labxf labyf
- syn match mpVariable /\.\%(lft\|rt\|bot\|top\|ulft\|urt\|llft\|lrt\)\>/
- # let statements:
- syn keyword mpnumExp abs
- syn keyword mpDef rotatedabout
- syn keyword mpCommand bye relax
- # on and off are not technically keywords, but it is nice to highlight them
- # inside dashpattern().
- syn keyword mpOnOff off on contained
- syn keyword mpDash dashpattern contained
- syn region mpDashPattern start="dashpattern\s*" end=")"he=e-1 contains=mfNumeric,mfLength,mpOnOff,mpDash
- endif
- # Keywords defined by mfplain.mp
- if get(g:, "mp_mfplain_macros", get(g:, "mfplain_mp_macros", 0))
- syn keyword mpDef beginchar capsule_def change_width
- syn keyword mpDef define_blacker_pixels define_corrected_pixels
- syn keyword mpDef define_good_x_pixels define_good_y_pixels
- syn keyword mpDef define_horizontal_corrected_pixels define_pixels
- syn keyword mpDef define_whole_blacker_pixels define_whole_pixels
- syn keyword mpDef define_whole_vertical_blacker_pixels
- syn keyword mpDef define_whole_vertical_pixels endchar
- syn keyword mpDef font_coding_scheme font_extra_space font_identifier
- syn keyword mpDef font_normal_shrink font_normal_space
- syn keyword mpDef font_normal_stretch font_quad font_size font_slant
- syn keyword mpDef font_x_height italcorr labelfont lowres_fix makebox
- syn keyword mpDef makegrid maketicks mode_def mode_setup proofrule
- syn keyword mpDef smode
- syn keyword mpVardef hround proofrulethickness vround
- syn keyword mpNewInternal blacker o_correction
- syn keyword mpVariable extra_beginchar extra_endchar extra_setup rulepen
- # plus some no-ops, also from mfplain.mp
- syn keyword mpDef cull cullit gfcorners imagerules nodisplays
- syn keyword mpDef notransforms openit proofoffset screenchars
- syn keyword mpDef screenrule screenstrokes showit
- syn keyword mpVardef grayfont slantfont titlefont
- syn keyword mpVariable currenttransform
- syn keyword mpConstant unitpixel
- # These are not listed in the MetaPost manual, and some are ignored by
- # MetaPost, but are nonetheless defined in mfplain.mp
- syn keyword mpDef killtext
- syn match mpVardef "\<good\.\%(x\|y\|lft\|rt\|top\|bot\)\>"
- syn keyword mpVariable aspect_ratio localfont mag mode mode_name
- syn keyword mpVariable proofcolor
- syn keyword mpConstant lowres proof smoke
- syn keyword mpNewInternal autorounding bp_per_pixel granularity
- syn keyword mpNewInternal number_of_modes proofing smoothing turningcheck
- endif
- # Keywords defined by all base macro packages:
- # - (r)boxes.mp
- # - format.mp
- # - graph.mp
- # - marith.mp
- # - sarith.mp
- # - string.mp
- # - TEX.mp
- if get(g:, "mp_other_macros", get(g:, "other_mp_macros", 1))
- # boxes and rboxes
- syn keyword mpDef boxjoin drawboxed drawboxes drawunboxed
- syn keyword mpNewInternal circmargin defaultdx defaultdy rbox_radius
- syn keyword mpVardef boxit bpath circleit fixpos fixsize generic_declare
- syn keyword mpVardef generic_redeclare generisize pic rboxit str_prefix
- # format
- syn keyword mpVardef Mformat format init_numbers roundd
- syn keyword mpVariable Fe_base Fe_plus
- syn keyword mpConstant Ten_to
- # graph
- syn keyword mpDef Gfor Gxyscale OUT auto begingraph endgraph gdata
- syn keyword mpDef gdraw gdrawarrow gdrawdblarrow gfill plot
- syn keyword mpVardef augment autogrid frame gdotlabel glabel grid itick
- syn keyword mpVardef otick
- syn keyword mpVardef Mreadpath setcoords setrange
- syn keyword mpNewInternal Gmarks Gminlog Gpaths linear log
- syn keyword mpVariable Autoform Gemarks Glmarks Gumarks
- syn keyword mpConstant Gtemplate
- syn match mpVariable /Gmargin\.\%(low\|high\)/
- # marith
- syn keyword mpVardef Mabs Meform Mexp Mexp_str Mlog Mlog_Str Mlog_str
- syn keyword mpPrimaryDef Mdiv Mmul
- syn keyword mpSecondaryDef Madd Msub
- syn keyword mpTertiaryDef Mleq
- syn keyword mpNewInternal Mten Mzero
- # sarith
- syn keyword mpVardef Sabs Scvnum
- syn keyword mpPrimaryDef Sdiv Smul
- syn keyword mpSecondaryDef Sadd Ssub
- syn keyword mpTertiaryDef Sleq Sneq
- # string
- syn keyword mpVardef cspan isdigit loptok
- # TEX
- syn keyword mpVardef TEX TEXPOST TEXPRE
- endif
- if get(b:, "mp_metafun", get(g:, "mp_metafun", 0))
- # MetaFun additions to MetaPost base file
- syn keyword mpConstant cyan magenta yellow
- syn keyword mpConstant penspec
- syn keyword mpNumExp graypart greycolor graycolor
- # Highlight TeX keywords (for MetaPost embedded in ConTeXt documents)
- syn match mpTeXKeyword '\\[a-zA-Z@]\+'
- syn keyword mpPrimitive runscript
- runtime! syntax/shared/context-data-metafun.vim
- hi def link metafunCommands Statement
- hi def link metafunInternals Identifier
- endif
- # Define the default highlighting
- hi def link mpTeXdelim mpPrimitive
- hi def link mpBoolExp mfBoolExp
- hi def link mpNumExp mfNumExp
- hi def link mpPairExp mfPairExp
- hi def link mpPathExp mfPathExp
- hi def link mpPenExp mfPenExp
- hi def link mpPicExp mfPicExp
- hi def link mpStringExp mfStringExp
- hi def link mpInternal mfInternal
- hi def link mpCommand mfCommand
- hi def link mpType mfType
- hi def link mpPrimitive mfPrimitive
- hi def link mpDef mfDef
- hi def link mpVardef mpDef
- hi def link mpPrimaryDef mpDef
- hi def link mpSecondaryDef mpDef
- hi def link mpTertiaryDef mpDef
- hi def link mpNewInternal mpInternal
- hi def link mpVariable mfVariable
- hi def link mpConstant mfConstant
- hi def link mpOnOff mpPrimitive
- hi def link mpDash mpPrimitive
- hi def link mpTeXKeyword Identifier
- b:current_syntax = "mp"
- # vim: sw=2 fdm=marker
|