<?xml version="1.0" encoding="UTF-8"?>
<!--
The lists of keywords of this file are borrowed from the VIM syntax 
files mp.vim and mf.vim
We have moved some keywords for consistency
-->

<!DOCTYPE language SYSTEM "language.dtd">
<language name="Metapost/Metafont" section="Markup" version="1" kateversion="2.4"
extensions="*.mp;*.mps;*.mpost;*.mf" mimetype="text/x-metapost" 
author="Yedvilun (yedvilun@gmail.com)" license="LGPL">
  <highlighting>
    <!--Here are some listing from mf.vim-->
    <!--Metafont 'primitives' as defined in chapter 25 of 'The METAFONTbook'-->
    <!--Page 210: 'boolean expressions'-->
    <list name="mfBoolExp">
      <item>true</item>

      <item>false</item>
      <item>known</item>
      <item>unknown</item>
      <item>odd</item>
      <item>charexists</item>
      <item>not</item>

      <item>and</item>
      <item>or</item>
    </list>

    <!--Page 210: 'numeric expression'-->
    <list name="mfNumExp">
      <item>normaldeviate</item>
      <item>length</item>

      <item>ASCII</item>
      <item>oct</item>
      <item>hex</item>
      <item>angle</item>
      <item>turningnumber</item>
      <item>totalweight</item>

      <item>directiontime</item>
      <item>xpart</item>
      <item>ypart</item>
      <item>xxpart</item>
      <item>xypart</item>
      <item>yxpart</item>

      <item>yypart</item>
      <item>sqrt</item>
      <item>sind</item>
      <item>cosd</item>
      <item>mlog</item>
      <item>mexp</item>

      <item>floor</item>
      <item>uniformdeviate</item>
      <item>abs</item>
      <item>div</item>
      <item>dotprod</item>
      <item>max</item>

      <item>min</item>
      <item>mod</item>
      <item>ceiling</item>
    </list>

    <!--Page 211: 'internal quantities'-->
    <list name="mfInternal">
      <item>tracingtitles</item>

      <item>tracingequations</item>
      <item>tracingcapsules</item>
      <item>tracingchoices</item>
      <item>tracingspecs</item>
      <item>tracingpens</item>
      <item>tracingcommands</item>

      <item>tracingrestores</item>
      <item>tracingmacros</item>
      <item>tracingedges</item>
      <item>tracingoutput</item>
      <item>tracingonline</item>
      <item>tracingstats</item>

      <item>pausing</item>
      <item>showstopping</item>
      <item>fontmaking</item>
      <item>proofing</item>
      <item>turningcheck</item>
      <item>warningcheck</item>

      <item>smoothing</item>
      <item>autorounding</item>
      <item>granularity</item>
      <item>fillin</item>
      <item>year</item>
      <item>month</item>

      <item>day</item>
      <item>time</item>
      <item>charcode</item>
      <item>charext</item>
      <item>charwd</item>
      <item>charht</item>

      <item>chardp</item>
      <item>charic</item>
      <item>chardx</item>
      <item>chardy</item>
      <item>designsize</item>
      <item>hppp</item>

      <item>vppp</item>
      <item>xoffset</item>
      <item>yoffset</item>
      <item>boundarychar</item>
    </list>

    <!--Page 212: 'pair expressions'-->

    <list name="mfPairExp">
      <item>point</item>
      <item>of</item>
      <item>precontrol</item>
      <item>postcontrol</item>
      <item>penoffset</item>

      <item>rotated</item>
      <item>scaled</item>
      <item>shifted</item>
      <item>slanted</item>
      <item>transformed</item>
      <item>xscaled</item>

      <item>yscaled</item>
      <item>zscaled</item>
    </list>

    <!--Page 213: 'path expressions'-->
    <list name="mfPathExp">
      <item>makepath</item>
      <item>reverse</item>

      <item>subpath</item>
      <item>curl</item>
      <item>tension</item>
      <item>atleast</item>
      <item>controls</item>
      <item>cycle</item>

    </list>

    <!--Page 214: 'pen expressions'-->
    <list name="mfPenExp">
      <item>nullpen</item>
      <item>pencircle</item>
      <item>makepen</item>
    </list>

    <!--Page 214: 'picture expressions'-->
    <list name="mfPicExp">
      <item>nullpicture</item>
    </list>

    <!--Page 214: 'string expressions'-->
    <list name="mfStringExp">
      <item>jobname</item>

      <item>readstring</item>
      <item>str</item>
      <item>char</item>
      <item>decimal</item>
      <item>substring</item>
    </list>

    <!--Page 217: 'commands and statements'-->
    <list name="mfCommand">
      <item>end</item>
      <item>dump</item>
      <item>save</item>
      <item>interim</item>

      <item>newinternal</item>
      <item>randomseed</item>
      <item>let</item>
      <item>delimiters</item>
      <item>outer</item>
      <item>everyjob</item>

      <item>show</item>
      <item>showvariable</item>
      <item>showtoken</item>
      <item>showdependencies</item>
      <item>showstats</item>
      <item>message</item>

      <item>errmessage</item>
      <item>errhelp</item>
      <item>batchmode</item>
      <item>nonstopmode</item>
      <item>scrollmode</item>
      <item>errorstopmode</item>

      <item>addto</item>
      <item>also</item>
      <item>contour</item>
      <item>doublepath</item>
      <item>withpen</item>
      <item>withweight</item>

      <item>cull</item>
      <item>keeping</item>
      <item>dropping</item>
      <item>display</item>
      <item>inwindow</item>
      <item>openwindow</item>

      <item>at</item>
      <item>from</item>
      <item>to</item>
      <item>shipout</item>
      <item>special</item>
      <item>numspecial</item>

    </list>

    <!--Page 56: 'types'-->
    <list name="mfType">
      <item>boolean</item>
      <item>numeric</item>
      <item>pair</item>
      <item>path</item>

      <item>pen</item>
      <item>picture</item>
      <item>string</item>
      <item>transform</item>
    </list>

    <!--Page 155: 'grouping'-->

<!--     <list name="mfStatement"> -->
<!--       <item>begingroup</item> -->
<!--       <item>endgroup</item> -->
<!--     </list> -->

    <!--Page 165: 'definitions'-->
    <list name="mfDefinition">
<!--       <item>enddef</item> -->
<!--       <item>def</item> -->
      <item>expr</item>
      <item>suffix</item>

      <item>text</item>
      <item>primary</item>
      <item>secondary</item>
      <item>tertiary</item>
<!--       <item>vardef</item> -->
      <item>primarydef</item>
      <item>secondarydef</item>

      <item>tertiarydef</item>
    </list>

    <!--Page 169: 'conditions and loops'-->
    <list name="mfCondition">
<!--       <item>if</item> -->
<!--       <item>fi</item> -->
      <item>else</item>
      <item>elseif</item>

<!--       <item>endfor</item> -->
<!--       <item>for</item> -->
<!--       <item>forsuffixes</item> -->
<!--       <item>forever</item> -->
      <item>step</item>
      <item>until</item>
      <item>upto</item>
      <item>exitif</item>
    </list>

    <!--Other primitives listed in the index-->
    <list name="mfPrimitive">
      <item>charlist</item>
      <item>endinput</item>
      <item>expandafter</item>
      <item>extensible</item>

      <item>fontdimen</item>
      <item>headerbyte</item>
      <item>inner</item>
      <item>input</item>
      <item>intersectiontimes</item>
      <item>kern</item>

      <item>ligtable</item>
      <item>quote</item>
      <item>scantokens</item>
      <item>skipto</item>
    </list>

    <!--Keywords defined by plain.mf-->

    <list name="mfMacro">
<!--       <item>abs</item> -->
      <item>addto_currentpicture</item>
      <item>aspect_ratio</item>
      <item>base_name</item>
      <item>base_version</item>
<!--       <item>beginchar</item> -->
      <item>blacker</item>

      <item>blankpicture</item>
      <item>bot</item>
      <item>bye</item>
      <item>byte</item>
      <item>capsule_def</item>
<!--       <item>ceiling</item> -->
      <item>change_width</item>

      <item>clear_pen_memory</item>
      <item>clearit</item>
      <item>clearpen</item>
      <item>clearxy</item>
      <item>counterclockwise</item>
      <item>culldraw</item>

      <item>cullit</item>
      <item>currentpen</item>
      <item>currentpen_path</item>
      <item>currentpicture</item>
      <item>currenttransform</item>
      <item>currentwindow</item>

      <item>cutdraw</item>
      <item>cutoff</item>
      <item>d</item>
      <item>decr</item>
      <item>define_blacker_pixels</item>
      <item>define_corrected_pixels</item>

      <item>define_good_x_pixels</item>
      <item>define_good_y_pixels</item>
      <item>define_horizontal_corrected_pixels</item>
      <item>define_pixels</item>
      <item>define_whole_blacker_pixels</item>
      <item>define_whole_pixels</item>

      <item>define_whole_vertical_blacker_pixels</item>
      <item>define_whole_vertical_pixels</item>
      <item>dir</item>
      <item>direction</item>
      <item>directionpoint</item>
      <item>displaying</item>

      <item>ditto</item>
<!--       <item>div</item> -->
<!--       <item>dotprod</item> -->
      <item>down</item>
      <item>downto</item>
      <item>draw</item>
      <item>drawdot</item>

<!--       <item>endchar</item> -->
      <item>eps</item>
      <item>epsilon</item>
<!--       <item>extra_beginchar</item> -->
<!--       <item>extra_endchar</item> -->
      <item>extra_setup</item>
      <item>erase</item>
      <item>exitunless</item>

      <item>fill</item>
      <item>filldraw</item>
      <item>fix_units</item>
      <item>flex</item>
      <item>font_coding_scheme</item>
      <item>font_extra_space</item>

      <item>font_identifier</item>
      <item>font_normal_shrink</item>
      <item>font_normal_space</item>
      <item>font_normal_stretch</item>
      <item>font_quad</item>
      <item>font_setup</item>

      <item>font_size</item>
      <item>font_slant</item>
      <item>font_x_height</item>
      <item>fullcircle</item>
      <item>generate</item>
      <item>gfcorners</item>

      <item>gobble</item>
      <item>gobbled</item>
      <item>grayfont</item>
      <item>h</item>
      <item>halfcircle</item>
      <item>hide</item>

      <item>hround</item>
      <item>identity</item>
      <item>image_rules</item>
      <item>incr</item>
      <item>infinity</item>
      <item>interact</item>

      <item>interpath</item>
      <item>intersectionpoint</item>
      <item>inverse</item>
      <item>italcorr</item>
      <item>join_radius</item>
      <item>killtext</item>

      <item>labelfont</item>
      <item>labels</item>
      <item>left</item>
      <item>lft</item>
      <item>localfont</item>
      <item>loggingall</item>

      <item>lowres</item>
      <item>lowres_fix</item>
      <item>mag</item>
      <item>magstep</item>
      <item>makebox</item>
      <item>makegrid</item>

      <item>makelabel</item>
      <item>maketicks</item>
<!--       <item>max</item> -->
<!--       <item>min</item> -->
<!--       <item>mod</item> -->
      <item>mode</item>
      <item>mode_def</item>
      <item>mode_name</item>

      <item>mode_setup</item>
      <item>nodisplays</item>
      <item>notransforms</item>
      <item>number_of_modes</item>
      <item>numtok</item>
      <item>o_correction</item>

      <item>openit</item>
      <item>origin</item>
      <item>pen_bot</item>
      <item>pen_lft</item>
      <item>pen_rt</item>
      <item>pen_top</item>

      <item>penlabels</item>
      <item>penpos</item>
      <item>penrazor</item>
      <item>penspeck</item>
      <item>pensquare</item>
      <item>penstroke</item>

      <item>pickup</item>
      <item>pixels_per_inch</item>
      <item>proof</item>
      <item>proofoffset</item>
      <item>proofrule</item>
      <item>proofrulethickness</item>

      <item>quartercircle</item>
      <item>range</item>
      <item>reflectedabout</item>
      <item>relax</item>
      <item>right</item>
      <item>rotatedabout</item>

      <item>rotatedaround</item>
      <item>round</item>
      <item>rt</item>
      <item>rulepen</item>
      <item>savepen</item>
      <item>screenchars</item>

      <item>screen_rows</item>
      <item>screen_cols</item>
      <item>screenrule</item>
      <item>screenstrokes</item>
      <item>shipit</item>
      <item>showit</item>

      <item>slantfont</item>
      <item>smode</item>
      <item>smoke</item>
      <item>softjoin</item>
      <item>solve</item>
      <item>stop</item>

      <item>superellipse</item>
      <item>takepower</item>
      <item>tensepath</item>
      <item>titlefont</item>
      <item>tolerance</item>
      <item>top</item>

      <item>tracingall</item>
      <item>tracingnone</item>
      <item>undraw</item>
      <item>undrawdot</item>
      <item>unfill</item>
      <item>unfilldraw</item>

      <item>unitpixel</item>
      <item>unitsquare</item>
      <item>unitvector</item>
      <item>up</item>
      <item>upto</item>
      <item>vround</item>

      <item>w</item>
      <item>whatever</item>
<!--       <item>beginlogochar</item> -->
    </list>

    <!--Here are some listing from mp.vim-->
    <!--MetaPost primitives not found in Metafont-->
    <list name="mpInternal">
      <item>bluepart</item>

      <item>clip</item>
      <item>color</item>
      <item>dashed</item>
      <item>fontsize</item>
      <item>greenpart</item>
      <item>infont</item>

      <item>linecap</item>
      <item>linejoin</item>
      <item>llcorner</item>
      <item>lrcorner</item>
      <item>miterlimit</item>
      <item>mpxbreak</item>

      <item>prologues</item>
      <item>redpart</item>
      <item>setbounds</item>
      <item>tracinglostchars</item>
      <item>truecorners</item>
      <item>ulcorner</item>

      <item>urcorner</item>
      <item>withcolor</item>
    </list>

    <!--Metafont primitives not found in MetaPost-->
    <list name="notDefined">
      <item>autorounding</item>
      <item>chardx</item>

      <item>chardy</item>
      <item>fillin</item>
      <item>granularity</item>
      <item>hppp</item>
      <item>proofing</item>
      <item>smoothing</item>

      <item>tracingedges</item>
      <item>tracingpens</item>
      <item>turningcheck</item>
      <item>vppp</item>
      <item>xoffset</item>
      <item>yoffset</item>

    </list>

    <!--Keywords defined by plain.mp-->
    <list name="mpMacro">
      <item>ahangle</item>
      <item>ahlength</item>
      <item>background</item>
      <item>bbox</item>

      <item>bboxmargin</item>
<!--       <item>beginfig</item> -->
      <item>beveled</item>
      <item>black</item>
      <item>blue</item>
      <item>buildcycle</item>
      <item>butt</item>

      <item>center</item>
      <item>cutafter</item>
      <item>cutbefore</item>
      <item>cuttings</item>
      <item>dashpattern</item>
      <item>defaultfont</item>

      <item>defaultpen</item>
      <item>defaultscale</item>
      <item>dotlabel</item>
      <item>dotlabels</item>
      <item>drawarrow</item>
      <item>drawdblarrow</item>

      <item>drawoptions</item>
<!--       <item>endfig</item> -->
      <item>evenly</item>
<!--       <item>extra_beginfig</item> -->
<!--       <item>extra_endfig</item> -->
      <item>green</item>
      <item>label</item>
      <item>labeloffset</item>

      <item>mitered</item>
      <item>red</item>
      <item>rounded</item>
      <item>squared</item>
      <item>thelabel</item>
      <item>white</item>

      <item>base_name</item>
      <item>base_version</item>
      <item>upto</item>
      <item>downto</item>
      <item>exitunless</item>
      <item>relax</item>

      <item>gobble</item>
      <item>gobbled</item>
      <item>interact</item>
      <item>loggingall</item>
      <item>tracingall</item>
      <item>tracingnone</item>

      <item>eps</item>
      <item>epsilon</item>
      <item>infinity</item>
      <item>right</item>
      <item>left</item>
      <item>up</item>

      <item>down</item>
      <item>origin</item>
      <item>quartercircle</item>
      <item>halfcircle</item>
      <item>fullcircle</item>
      <item>unitsquare</item>

      <item>identity</item>
      <item>blankpicture</item>
      <item>withdots</item>
      <item>ditto</item>
      <item>EOF</item>
      <item>pensquare</item>

      <item>penrazor</item>
      <item>penspeck</item>
      <item>whatever</item>
<!--       <item>abs</item> -->
      <item>round</item>
<!--       <item>ceiling</item> -->
      <item>byte</item>

      <item>dir</item>
      <item>unitvector</item>
      <item>inverse</item>
      <item>counterclockwise</item>
      <item>tensepath</item>
<!--       <item>mod</item> -->
<!--       <item>div</item> -->

<!--       <item>dotprod</item> -->
      <item>takepower</item>
      <item>direction</item>
      <item>directionpoint</item>
      <item>intersectionpoint</item>
      <item>softjoin</item>
      <item>incr</item>

      <item>decr</item>
      <item>reflectedabout</item>
      <item>rotatedaround</item>
      <item>rotatedabout</item>
<!--       <item>min</item> -->
<!--       <item>max</item> -->
      <item>flex</item>

      <item>superellipse</item>
      <item>interpath</item>
      <item>magstep</item>
      <item>currentpen</item>
      <item>currentpen_path</item>
      <item>currentpicture</item>

      <item>fill</item>
      <item>draw</item>
      <item>filldraw</item>
      <item>drawdot</item>
      <item>unfill</item>
      <item>undraw</item>

      <item>unfilldraw</item>
      <item>undrawdot</item>
      <item>erase</item>
      <item>cutdraw</item>
      <item>image</item>
      <item>pickup</item>

      <item>numeric_pickup</item>
      <item>pen_lft</item>
      <item>pen_rt</item>
      <item>pen_top</item>
      <item>pen_bot</item>
      <item>savepen</item>

      <item>clearpen</item>
      <item>clear_pen_memory</item>
      <item>lft</item>
      <item>rt</item>
      <item>top</item>
      <item>bot</item>

      <item>ulft</item>
      <item>urt</item>
      <item>llft</item>
      <item>lrt</item>
      <item>penpos</item>
      <item>penstroke</item>

      <item>arrowhead</item>
      <item>makelabel</item>
      <item>labels</item>
      <item>penlabel</item>
      <item>range</item>
      <item>numtok</item>

      <item>thru</item>
      <item>clearxy</item>
      <item>clearit</item>
      <item>clearpen</item>
      <item>pickup</item>
      <item>shipit</item>

      <item>bye</item>
      <item>hide</item>
      <item>stop</item>
      <item>solve</item>
<!--       <item>beginchar</item> -->
      <item>blacker</item>
      <item>capsule_def</item>

      <item>change_width</item>
      <item>define_blacker_pixels</item>
      <item>define_corrected_pixels</item>
      <item>define_good_x_pixels</item>
      <item>define_good_y_pixels</item>
      <item>define_horizontal_corrected_pixels</item>

      <item>define_pixels</item>
      <item>define_whole_blacker_pixels</item>
      <item>define_whole_vertical_blacker_pixels</item>
      <item>define_whole_vertical_pixels</item>
<!--       <item>endchar</item> -->
<!--       <item>extra_beginchar</item> -->
<!--       <item>extra_endchar</item> -->
      <item>extra_setup</item>

      <item>font_coding_scheme</item>
      <item>font_extra_space</item>
      <item>font_identifier</item>
      <item>font_normal_shrink</item>
      <item>font_normal_space</item>
      <item>font_normal_stretch</item>

      <item>font_quad</item>
      <item>font_size</item>
      <item>font_slant</item>
      <item>font_x_height</item>
      <item>italcorr</item>
      <item>labelfont</item>

      <item>makebox</item>
      <item>makegrid</item>
      <item>maketicks</item>
      <item>mode_def</item>
      <item>mode_setup</item>
      <item>o_correction</item>

      <item>proofrule</item>
      <item>proofrulethickness</item>
      <item>rulepen</item>
      <item>smode</item>
      <item>cullit</item>
      <item>currenttransform</item>

      <item>gfcorners</item>
      <item>grayfont</item>
      <item>hround</item>
      <item>imagerules</item>
      <item>lowres_fix</item>
      <item>nodisplays</item>

      <item>notransforms</item>
      <item>openit</item>
      <item>proofoffset</item>
      <item>screenchars</item>
      <item>screenrule</item>
      <item>screenstrokes</item>

      <item>showit</item>
      <item>slantfont</item>
      <item>titlefont</item>
      <item>unitpixel</item>
      <item>vround</item>
      <item>circmargin</item>

      <item>defaultdx</item>
      <item>defaultdy</item>
      <item>boxit</item>
      <item>boxjoin</item>
      <item>bpath</item>
      <item>circleit</item>

      <item>drawboxed</item>
      <item>drawboxes</item>
      <item>drawunboxed</item>
      <item>fixpos</item>
      <item>fixsize</item>
      <item>pic</item>

    </list>

    <!--We put all the delimiters here. They will be treated apart, for code folding-->
    <list name="EnvDelimiters">
      <item>beginchar</item>
      <item>endchar</item>
      <item>extra_beginchar</item>
      <item>extra_endchar</item>

      <item>beginlogochar</item>
      <item>beginfig</item>
      <item>endfig</item>
      <item>extra_beginfig</item>
      <item>extra_endfig</item>
    </list>

    <contexts>
      <context name="Normal Text"    attribute="Normal Text" lineEndContext="#stay">
        <keyword String="mfBoolExp"  attribute="BoolExp" context="#stay"/>
        <keyword String="mfNumExp"   attribute="NumExp" context="#stay"/>
        <keyword String="mfInternal" attribute="Statement" context="#stay"/>
        <keyword String="mfPairExp"  attribute="Statement" context="#stay"/>
        <keyword String="mfPathExp"  attribute="Statement" context="#stay"/>
        <keyword String="mfPenExp"   attribute="Statement" context="#stay"/>

        <keyword String="mfPicExp"   attribute="Statement" context="#stay"/>
        <keyword String="mfStringExp" attribute="Statement" context="#stay"/>
        <keyword String="mfCommand"  attribute="Statement" context="#stay"/>
        <keyword String="mfType"     attribute="Type" context="#stay"/>
        <keyword String="mfStatement" attribute="Statement" context="#stay"/>
        <keyword String="mfDefinition" attribute="Statement" context="#stay"/>
        <keyword String="mfCondition" attribute="Conditional" context="#stay"/>
        <keyword String="mfPrimitive" attribute="Statement" context="#stay"/>
        <keyword String="mfMacro"    attribute="Macro" context="#stay"/>

        <keyword String="mpInternal" attribute="Statement" context="#stay"/>
        <keyword String="mpMacro"    attribute="Macro" context="#stay"/>

        <DetectChar char="%" attribute="Comment" context="Comment"/>
        <DetectChar char='"' attribute="String" context="string" beginRegion="String"/>
        <RegExpr String="(\+|\-|\*|\/|\=|\:\=)" attribute="Operator" context="#stay"/>
        <Detect2Chars char="." char1="." attribute="Operator" context="#stay"/>

        <HlCOct attribute="Octal"/>
        <HlCHex attribute="Hex"/>

        <Float attribute="Float"/>
        <Int attribute="Decimal"/>

        <!--Metafont lengths-->
        <RegExpr String="\b(bp|cc|cm|dd|in|mm|pc|pt)\b" attribute="Float" context="#stay"/>
        <RegExpr String="\b-?\d+(bp|cc|cm|dd|in|mm|pc|pt)#?\b" attribute="Float" context="#stay"/>
        <RegExpr String="\b-?\.\d+(bp|cc|cm|dd|in|mm|pc|pt)#?\b" attribute="Float" context="#stay"/>
        <RegExpr String="\b-?\d+\.\d+(bp|cc|cm|dd|in|mm|pc|pt)#?\b" attribute="Float" context="#stay"/>

        <!--Metafont coordinates, points, pathes-->

        <RegExpr String="\b[xy]\d(\w|\')*" attribute="Variable" context="#stay"/>
        <RegExpr String="\bz\d(\w|\')*" attribute="Variable" context="#stay"/>
        <RegExpr String="\bp\d(\w|\')*" attribute="Variable" context="#stay"/>

        <!--Special characters-->
        <DetectChar char="$" attribute="Special" context="#stay"/>

        <!--MetaPost has TeX inserts for typeset labels verbatimtex, btex, and etex will be treated as keywords-->
        <RegExpr String="\b(verbatimtex|btex)\b" insensitive="1" attribute="Identifier" context="TeXMode" beginRegion="TeXblock"/>

        <!--Here are some delimiters with code folding-->
        <RegExpr String="\bbegin(group|fig|char)\b" insensitive="1" attribute="Identifier" context="#stay" beginRegion="block"/>
        <RegExpr String="\bend(group|fig|char)\b" insensitive="1" attribute="Identifier" context="#stay" endRegion="block"/>

        <RegExpr String="\bextra_begin(group|fig|char)\b" insensitive="1" attribute="Identifier" context="#stay" beginRegion="block"/>
        <RegExpr String="\bextra_end(group|fig|char)\b" insensitive="1" attribute="Identifier" context="#stay" endRegion="block"/>

        <RegExpr String="\b(def|vardef)\b" insensitive="1" attribute="Identifier" context="#stay" beginRegion="defblock"/>
        <RegExpr String="\benddef\b" insensitive="1" attribute="Identifier" context="#stay" endRegion="defblock"/>

        <RegExpr String="\bif\b" insensitive="1" attribute="Conditional" context="#stay" beginRegion="ifblock"/>
        <RegExpr String="\bfi\b" insensitive="1" attribute="Conditional" context="#stay" endRegion="ifblock"/>
        <RegExpr String="\b(for|forsuffixes|forever)\b" insensitive="1" attribute="Conditional" context="#stay" beginRegion="forblock"/>
        <RegExpr String="\bendfor\b" insensitive="1" attribute="Conditional" context="#stay" endRegion="forblock"/>

      </context>

      <context name="string" attribute="String" lineEndContext="#stay">
        <DetectIdentifier/>
        <Detect2Chars char="\" char1='"' attribute="String" context="#stay"/>

        <Detect2Chars char="\" char1="\" attribute="String" context="#stay"/>
        <DetectChar char='"' attribute="String" context="#pop" endRegion="String"/>
      </context>

      <!--TeX mode : we just define generic TeX commands-->
      <!--syntax from highlighting file latex.xml-->
      <context name="TeXMode" attribute="Tex" lineEndContext="#stay">
        <DetectChar char="\" attribute="Keyword" context="ContrSeq"/>
        <DetectChar char="$" attribute="Math" context="MathMode" beginRegion="mathMode" />

        <StringDetect String="\(" attribute="Math" context="MathMode" beginRegion="mathMode" />
        <RegExpr String="\betex\b" insensitive="1" attribute="Identifier" context="#pop" endRegion="TeXblock"/>
      </context>
      <context name="ContrSeq" attribute="Keyword" lineEndContext="#pop">
        <StringDetect String="verb*" attribute="Keyword" context="Verb"/>
        <RegExpr String="verb(?=[^a-zA-Z])" attribute="Keyword" context="Verb"/>
        <DetectChar char="&#xd7;" attribute="Bullet" context="#stay"/>
        <RegExpr String="[a-zA-Z]+(\+?|\*{0,3})" attribute="Keyword" context="#pop"/>
        <RegExpr String="[^a-zA-Z]" attribute="Keyword" context="#pop" />

      </context>
      <context name="ToEndOfLine" attribute="Normal Text" lineEndContext="#pop">
      </context>
      <context name="Verb" attribute="Verbatim" lineEndContext="#pop#pop" >
        <RegExpr String="(.)" attribute="Normal Text" dynamic="true" context="VerbEnd" />
      </context>
      <context name="VerbEnd" attribute="Verbatim" lineEndContext="#pop#pop#pop" dynamic="true" >
        <StringDetect String="%1" attribute="Normal Text" context="#pop#pop#pop" dynamic="true" />
        <DetectChar char="&#xd7;" attribute="Bullet" context="#stay"/>

        <RegExpr String="[^%1\xd7]*" attribute="Verbatim" context="#stay" dynamic="true" />
      </context>

      <!-- math mode: starting with $ or \( -->
      <context name="MathMode" attribute="Math" lineEndContext="#stay">
        <StringDetect String="$$" attribute="Error" context="#stay" />
        <DetectChar char="\" attribute="Keyword Mathmode" context="MathContrSeq"/>
        <DetectChar char="$" attribute="Math" context="#pop" endRegion="mathMode" />
        <Detect2Chars char="\" char1=")" attribute="Math" context="#pop" endRegion="mathMode" />

        <Detect2Chars char="\" char1="]" attribute="Error" context="#stay" />
      </context>
      <context name="MathContrSeq" attribute="Keyword Mathmode" lineEndContext="#pop">
        <DetectChar char="&#xd7;" attribute="Bullet" context="#stay"/>
        <RegExpr String="[a-zA-Z]+\*?" attribute="Keyword Mathmode" context="#pop"/>
        <RegExpr String="[^a-zA-Z]" attribute="Keyword Mathmode" context="#pop" /> 
      </context>

      <!-- comment -->
      <context name="Comment" attribute="Comment" lineEndContext="#pop">

        <RegExpr String="(FIXME|TODO):?" attribute="Alert" context="#stay"/>
        <DetectChar char="&#xd7;" attribute="Bullet" context="#stay"/>
      </context>

</contexts>
    <itemDatas>
      <itemData name="Normal Text" defStyleNum="dsNormal"/>
      <itemData name="Keyword" defStyleNum="dsNormal" color="#800000" selColor="#60FFFF" bold="0" italic="0"/>
      <itemData name="Keyword Mathmode" defStyleNum="dsNormal" color="#606000" selColor="#FFD0FF" bold="0" italic="0"/>
      <itemData name="Comment" defStyleNum="dsComment"/>

      <itemData name="Error" defStyleNum="dsAlert"/>
      <itemData name="Math" defStyleNum="dsNormal" color="#00A000" selColor="#FF40FF"  bold="0" italic="0"/>
      <itemData name="TeX" defStyleNum="dsNormal"/>
      <itemData name="String" defStyleNum="dsString"/>
      <itemData name="Alert" defStyleNum="dsAlert"/>
      <itemData name="Macro"  defStyleNum="dsKeyword" color="#770000" selColor="#99FFFF" bold="0" italic="0"/>
      <itemData name="Operator" defStyleNum="dsKeyword" color="#244CFF" bold="0"/>
      <itemData name="Special" defStyleNum="dsKeyword" color="#008000" bold="0"/>
      <itemData name="Conditional" defStyleNum="dsKeyword"/>

      <itemData name="Statement" defStyleNum="dsNormal" color="#0000FF" selColor="#FFFF00" bold="0" italic="0"/>
      <itemData name="BoolExp" defStyleNum="dsKeyword" italic="1" bold="0" color="#AA00AA" selColor="#FFFF00"/>
      <itemData name="NumExp" defStyleNum="dsFunction"/>
      <itemData name="Variable" defStyleNum="dsKeyword" color="#550022"/>
      <itemData name="Identifier" defStyleNum="dsKeyword"/>
      <itemData name="Type" defStyleNum="dsDataType"/>
      <itemData name="Decimal" defStyleNum="dsDecVal"/>
      <itemData name="Octal" defStyleNum="dsBaseN"/>
      <itemData name="Hex" defStyleNum="dsBaseN"/>

      <itemData name="Float" defStyleNum="dsFloat"/>
 </itemDatas>
  </highlighting>

  <general>
    <comments>
      <comment name="singleLine" start="%"/>
    </comments>
    <keywords casesensitive="0" />

  </general>
</language>

