274 lines
12 KiB
VimL
274 lines
12 KiB
VimL
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
|