blob: 36c07e64c99d7c8a68dab95f1745607cf63aa76f [file] [log] [blame]
Bram Moolenaare1f3fd12022-08-15 18:51:32 +01001vim9script
2
3# Vim syntax file
4# Language: MetaPost
5# Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
6# Former Maintainers: Andreas Scherer <andreas.scherer@pobox.com>
7# Latest Revision: 2022 Aug 12
Bram Moolenaar071d4272004-06-13 20:20:40 +00008
Bram Moolenaar89bcfda2016-08-30 23:26:57 +02009if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000010 finish
11endif
12
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010013# Deprecation warnings: to be removed eventually
14if exists("g:plain_mp_macros")
15 echomsg "[mp] g:plain_mp_macros is deprecated: use g:mp_plain_macros instead."
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020016endif
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010017if exists("mfplain_mp_macros")
18 echomsg "[mp] g:mfplain_mp_macros is deprecated: use g:mp_mfplain_macros instead."
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020019endif
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010020if exists("other_mp_macros")
21 echomsg "[mp] g:other_mp_macros is deprecated: use g:mp_other_macros instead."
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020022endif
23
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010024# Store the current values of METAFONT global options
25const mf_plain_macros = get(g:, "mf_plain_macros", get(g:, "plain_mf_macros", -1))
26const mf_plain_modes = get(g:, "mf_plain_modes", get(g:, "plain_mf_modes", -1))
27const mf_other_macros = get(g:, "mf_other_macros", get(g:, "other_mf_macros", -1))
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020028
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010029g:mf_plain_macros = 0 # plain.mf has no special meaning for MetaPost
30g:mf_plain_modes = 0 # No METAFONT modes
31g:mf_other_macros = 0 # cmbase.mf, logo.mf, ... neither
32
33# Read the METAFONT syntax to start with
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020034runtime! syntax/mf.vim
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010035unlet b:current_syntax # Necessary for syn include below
Bram Moolenaar071d4272004-06-13 20:20:40 +000036
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010037# Restore the value of existing global variables
38if mf_plain_macros == -1
39 unlet g:mf_plain_macros
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020040else
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010041 g:plain_mf_macros = mf_plain_macros
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020042endif
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010043if mf_plain_modes == -1
44 unlet g:mf_plain_modes
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020045else
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010046 g:mf_plain_modes = mf_plain_modes
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020047endif
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010048if mf_other_macros == -1
49 unlet g:mf_other_macros
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020050else
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010051 g:mf_other_macros = mf_other_macros
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020052endif
Bram Moolenaar071d4272004-06-13 20:20:40 +000053
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010054# Use TeX highlighting inside verbatimtex/btex... etex
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020055syn include @MPTeX syntax/tex.vim
56unlet b:current_syntax
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010057# These are defined as keywords rather than using matchgroup
58# in order to make them available to syntaxcomplete.
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020059syn keyword mpTeXdelim btex etex verbatimtex contained
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010060syn region mpTeXinsert matchgroup=mpTeXdelim start=/\<verbatimtex\>\|\<btex\>/ end=/\<etex\>/ keepend contains=@MPTeX,mpTeXdelim
Bram Moolenaar071d4272004-06-13 20:20:40 +000061
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010062# iskeyword must be set after the syn include above, because tex.vim sets `syn
63# iskeyword`. Note that keywords do not contain numbers (numbers are
64# subscripts)
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020065syntax iskeyword @,_
66
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010067# MetaPost primitives not found in METAFONT
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020068syn keyword mpBoolExp bounded clipped filled stroked textual arclength
69syn keyword mpNumExp arctime blackpart bluepart colormodel cyanpart
70syn keyword mpNumExp fontsize greenpart greypart magentapart redpart
71syn keyword mpPairExp yellowpart llcorner lrcorner ulcorner urcorner
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020072syn keyword mpPathExp envelope pathpart
73syn keyword mpPenExp penpart
74syn keyword mpPicExp dashpart glyph infont
75syn keyword mpStringExp fontpart readfrom textpart
76syn keyword mpType cmykcolor color rgbcolor
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010077# Other MetaPost primitives listed in the manual
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020078syn keyword mpPrimitive mpxbreak within
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010079# Internal quantities not found in METAFONT
80# (Table 6 in MetaPost: A User's Manual)
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020081syn keyword mpInternal defaultcolormodel hour minute linecap linejoin
82syn keyword mpInternal miterlimit mpprocset mpversion numberprecision
83syn keyword mpInternal numbersystem outputfilename outputformat
84syn keyword mpInternal outputformatoptions outputtemplate prologues
85syn keyword mpInternal restoreclipcolor tracinglostchars troffmode
86syn keyword mpInternal truecorners
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010087# List of commands not found in METAFONT (from MetaPost: A User's Manual)
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020088syn keyword mpCommand clip closefrom dashed filenametemplate fontmapfile
89syn keyword mpCommand fontmapline setbounds withcmykcolor withcolor
90syn keyword mpCommand withgreyscale withoutcolor withpostscript
91syn keyword mpCommand withprescript withrgbcolor write
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010092# METAFONT internal variables not found in MetaPost
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020093syn keyword notDefined autorounding chardx chardy fillin granularity
94syn keyword notDefined proofing smoothing tracingedges tracingpens
95syn keyword notDefined turningcheck xoffset yoffset
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010096# Suffix defined only in METAFONT:
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020097syn keyword notDefined nodot
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010098# Other not implemented primitives (see MetaPost: A User's Manual, §C.1)
Bram Moolenaar2ec618c2016-10-01 14:47:05 +020099syn keyword notDefined cull display openwindow numspecial totalweight
100syn keyword notDefined withweight
Bram Moolenaar071d4272004-06-13 20:20:40 +0000101
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100102# Keywords defined by plain.mp
103if get(g:, "mp_plain_macros", get(g:, "plain_mp_macros", 1)) || get(b:, "mp_metafun", get(g:, "mp_metafun", 0))
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200104 syn keyword mpDef beginfig clear_pen_memory clearit clearpen clearpen
105 syn keyword mpDef clearxy colorpart cutdraw downto draw drawarrow
106 syn keyword mpDef drawdblarrow drawdot drawoptions endfig erase
107 syn keyword mpDef exitunless fill filldraw flex gobble hide interact
108 syn keyword mpDef label loggingall makelabel numtok penstroke pickup
109 syn keyword mpDef range reflectedabout rotatedaround shipit
110 syn keyword mpDef stop superellipse takepower tracingall tracingnone
111 syn keyword mpDef undraw undrawdot unfill unfilldraw upto
112 syn match mpDef "???"
113 syn keyword mpVardef arrowhead bbox bot buildcycle byte ceiling center
114 syn keyword mpVardef counterclockwise decr dir direction directionpoint
115 syn keyword mpVardef dotlabel dotlabels image incr interpath inverse
116 syn keyword mpVardef labels lft magstep max min penlabels penpos round
117 syn keyword mpVardef rt savepen solve tensepath thelabel top unitvector
118 syn keyword mpVardef whatever z
119 syn keyword mpPrimaryDef div dotprod gobbled mod
120 syn keyword mpSecondaryDef intersectionpoint
121 syn keyword mpTertiaryDef cutafter cutbefore softjoin thru
122 syn keyword mpNewInternal ahangle ahlength bboxmargin beveled butt defaultpen
123 syn keyword mpNewInternal defaultscale dotlabeldiam eps epsilon infinity
124 syn keyword mpNewInternal join_radius labeloffset mitered pen_bot pen_lft
125 syn keyword mpNewInternal pen_rt pen_top rounded squared tolerance
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100126 # Predefined constants
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200127 syn keyword mpConstant EOF background base_name base_version black
128 syn keyword mpConstant blankpicture blue ditto down evenly fullcircle
129 syn keyword mpConstant green halfcircle identity left origin penrazor
130 syn keyword mpConstant penspeck pensquare quartercircle red right
131 syn keyword mpConstant unitsquare up white withdots
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100132 # Other predefined variables
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200133 syn keyword mpVariable currentpen currentpen_path currentpicture cuttings
134 syn keyword mpVariable defaultfont extra_beginfig extra_endfig
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100135 syn keyword mpVariable laboff labxf labyf laboff labxf labyf
136 syn match mpVariable /\.\%(lft\|rt\|bot\|top\|ulft\|urt\|llft\|lrt\)\>/
137 # let statements:
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200138 syn keyword mpnumExp abs
139 syn keyword mpDef rotatedabout
140 syn keyword mpCommand bye relax
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100141 # on and off are not technically keywords, but it is nice to highlight them
142 # inside dashpattern().
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200143 syn keyword mpOnOff off on contained
144 syn keyword mpDash dashpattern contained
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100145 syn region mpDashPattern start="dashpattern\s*" end=")"he=e-1 contains=mfNumeric,mfLength,mpOnOff,mpDash
Bram Moolenaar071d4272004-06-13 20:20:40 +0000146endif
147
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100148# Keywords defined by mfplain.mp
149if get(g:, "mp_mfplain_macros", get(g:, "mfplain_mp_macros", 0))
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200150 syn keyword mpDef beginchar capsule_def change_width
151 syn keyword mpDef define_blacker_pixels define_corrected_pixels
152 syn keyword mpDef define_good_x_pixels define_good_y_pixels
153 syn keyword mpDef define_horizontal_corrected_pixels define_pixels
154 syn keyword mpDef define_whole_blacker_pixels define_whole_pixels
155 syn keyword mpDef define_whole_vertical_blacker_pixels
156 syn keyword mpDef define_whole_vertical_pixels endchar
157 syn keyword mpDef font_coding_scheme font_extra_space font_identifier
158 syn keyword mpDef font_normal_shrink font_normal_space
159 syn keyword mpDef font_normal_stretch font_quad font_size font_slant
160 syn keyword mpDef font_x_height italcorr labelfont lowres_fix makebox
161 syn keyword mpDef makegrid maketicks mode_def mode_setup proofrule
162 syn keyword mpDef smode
163 syn keyword mpVardef hround proofrulethickness vround
164 syn keyword mpNewInternal blacker o_correction
165 syn keyword mpVariable extra_beginchar extra_endchar extra_setup rulepen
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100166 # plus some no-ops, also from mfplain.mp
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200167 syn keyword mpDef cull cullit gfcorners imagerules nodisplays
168 syn keyword mpDef notransforms openit proofoffset screenchars
169 syn keyword mpDef screenrule screenstrokes showit
170 syn keyword mpVardef grayfont slantfont titlefont
171 syn keyword mpVariable currenttransform
172 syn keyword mpConstant unitpixel
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100173 # These are not listed in the MetaPost manual, and some are ignored by
174 # MetaPost, but are nonetheless defined in mfplain.mp
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200175 syn keyword mpDef killtext
176 syn match mpVardef "\<good\.\%(x\|y\|lft\|rt\|top\|bot\)\>"
177 syn keyword mpVariable aspect_ratio localfont mag mode mode_name
178 syn keyword mpVariable proofcolor
179 syn keyword mpConstant lowres proof smoke
180 syn keyword mpNewInternal autorounding bp_per_pixel granularity
181 syn keyword mpNewInternal number_of_modes proofing smoothing turningcheck
Bram Moolenaar071d4272004-06-13 20:20:40 +0000182endif
183
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100184# Keywords defined by all base macro packages:
185# - (r)boxes.mp
186# - format.mp
187# - graph.mp
188# - marith.mp
189# - sarith.mp
190# - string.mp
191# - TEX.mp
192if get(g:, "mp_other_macros", get(g:, "other_mp_macros", 1))
193 # boxes and rboxes
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200194 syn keyword mpDef boxjoin drawboxed drawboxes drawunboxed
195 syn keyword mpNewInternal circmargin defaultdx defaultdy rbox_radius
196 syn keyword mpVardef boxit bpath circleit fixpos fixsize generic_declare
197 syn keyword mpVardef generic_redeclare generisize pic rboxit str_prefix
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100198 # format
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200199 syn keyword mpVardef Mformat format init_numbers roundd
200 syn keyword mpVariable Fe_base Fe_plus
201 syn keyword mpConstant Ten_to
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100202 # graph
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200203 syn keyword mpDef Gfor Gxyscale OUT auto begingraph endgraph gdata
204 syn keyword mpDef gdraw gdrawarrow gdrawdblarrow gfill plot
205 syn keyword mpVardef augment autogrid frame gdotlabel glabel grid itick
206 syn keyword mpVardef otick
207 syn keyword mpVardef Mreadpath setcoords setrange
208 syn keyword mpNewInternal Gmarks Gminlog Gpaths linear log
209 syn keyword mpVariable Autoform Gemarks Glmarks Gumarks
210 syn keyword mpConstant Gtemplate
211 syn match mpVariable /Gmargin\.\%(low\|high\)/
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100212 # marith
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200213 syn keyword mpVardef Mabs Meform Mexp Mexp_str Mlog Mlog_Str Mlog_str
214 syn keyword mpPrimaryDef Mdiv Mmul
215 syn keyword mpSecondaryDef Madd Msub
216 syn keyword mpTertiaryDef Mleq
217 syn keyword mpNewInternal Mten Mzero
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100218 # sarith
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200219 syn keyword mpVardef Sabs Scvnum
220 syn keyword mpPrimaryDef Sdiv Smul
221 syn keyword mpSecondaryDef Sadd Ssub
222 syn keyword mpTertiaryDef Sleq Sneq
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100223 # string
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200224 syn keyword mpVardef cspan isdigit loptok
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100225 # TEX
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200226 syn keyword mpVardef TEX TEXPOST TEXPRE
Bram Moolenaar071d4272004-06-13 20:20:40 +0000227endif
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200228
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100229if get(b:, "mp_metafun", get(g:, "mp_metafun", 0))
230 # MetaFun additions to MetaPost base file
231 syn keyword mpConstant cyan magenta yellow
232 syn keyword mpConstant penspec
233 syn keyword mpNumExp graypart greycolor graycolor
234
235 # Highlight TeX keywords (for MetaPost embedded in ConTeXt documents)
Bram Moolenaar46fceaa2016-10-23 21:21:08 +0200236 syn match mpTeXKeyword '\\[a-zA-Z@]\+'
237
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200238 syn keyword mpPrimitive runscript
239
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100240 runtime! syntax/shared/context-data-metafun.vim
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200241
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100242 hi def link metafunCommands Statement
243 hi def link metafunInternals Identifier
244endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000245
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100246# Define the default highlighting
Bram Moolenaar2ec618c2016-10-01 14:47:05 +0200247hi def link mpTeXdelim mpPrimitive
248hi def link mpBoolExp mfBoolExp
249hi def link mpNumExp mfNumExp
250hi def link mpPairExp mfPairExp
251hi def link mpPathExp mfPathExp
252hi def link mpPenExp mfPenExp
253hi def link mpPicExp mfPicExp
254hi def link mpStringExp mfStringExp
255hi def link mpInternal mfInternal
256hi def link mpCommand mfCommand
257hi def link mpType mfType
258hi def link mpPrimitive mfPrimitive
259hi def link mpDef mfDef
260hi def link mpVardef mpDef
261hi def link mpPrimaryDef mpDef
262hi def link mpSecondaryDef mpDef
263hi def link mpTertiaryDef mpDef
264hi def link mpNewInternal mpInternal
265hi def link mpVariable mfVariable
266hi def link mpConstant mfConstant
267hi def link mpOnOff mpPrimitive
268hi def link mpDash mpPrimitive
Bram Moolenaar46fceaa2016-10-23 21:21:08 +0200269hi def link mpTeXKeyword Identifier
Bram Moolenaar071d4272004-06-13 20:20:40 +0000270
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100271b:current_syntax = "mp"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000272
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100273# vim: sw=2 fdm=marker