|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
<!DOCTYPE language SYSTEM "language.dtd"
|
|
|
|
[
|
|
|
|
<!ENTITY roffidc "[^]\s]">
|
|
|
|
<!ENTITY roffid "(&roffidc;|\(&roffidc;{2}|\[&roffidc;+\])">
|
|
|
|
<!ENTITY roffnum "([0-9]+)">
|
|
|
|
<!ENTITY argsep1 "([^\\]|\\[% |\^{}'`\-!?@)/,&:~0E_acdeprtu])">
|
|
|
|
<!ENTITY argsep2 "([^\\0-9]|\\[%:{}'`\-_!@/cep])">
|
|
|
|
]>
|
|
|
|
<language name="Roff" section="Markup" version="1.0" kateversion="2.4" extensions="" author="Matthew Woehlke (mw_triad@users.sourceforge.net)" license="GPL">
|
|
|
|
|
|
|
|
<highlighting>
|
|
|
|
|
|
|
|
<list name="layout">
|
|
|
|
<item>br</item>
|
|
|
|
<item>sp</item>
|
|
|
|
</list>
|
|
|
|
|
|
|
|
<list name="formatting">
|
|
|
|
</list>
|
|
|
|
|
|
|
|
<list name="gnuext">
|
|
|
|
</list>
|
|
|
|
|
|
|
|
<contexts>
|
|
|
|
|
|
|
|
<!-- root context -->
|
|
|
|
<context name="Normal" attribute="Normal Text" lineEndContext="#stay">
|
|
|
|
<IncludeRules context="DetectComments"/>
|
|
|
|
<DetectChar attribute="Other Macros" context="DetectDirective" char="." column="0"/>
|
|
|
|
<IncludeRules context="DetectOthers"/>
|
|
|
|
</context>
|
|
|
|
|
|
|
|
<context name="DetectComments" attribute="Normal Text" lineEndContext="#stay">
|
|
|
|
<RegExpr attribute="Comment" context="Comment" String="\.\s*\\"" column="0"/>
|
|
|
|
<Detect2Chars attribute="Comment" context="Comment" char="\\" char1="""/>
|
|
|
|
<Detect2Chars attribute="Comment" context="Comment" char="\\" char1="#"/>
|
|
|
|
</context>
|
|
|
|
|
|
|
|
<!-- catch glyphc, registers, strings, etc -->
|
|
|
|
<context name="DetectOthers" attribute="Normal Text" lineEndContext="#stay">
|
|
|
|
<IncludeRules context="DetectComments"/>
|
|
|
|
<DetectChar attribute="Escape" context="DetectEscape" char="\\" lookAhead="true"/>
|
|
|
|
<DetectChar attribute="String" context="String" char="""/>
|
|
|
|
</context>
|
|
|
|
|
|
|
|
<!-- detect escapes -->
|
|
|
|
<context name="DetectEscape" attribute="Error" lineEndContext="#pop">
|
|
|
|
<RegExpr attribute="Register" context="#pop" String="\\(\*|n[+-]?)&roffid;"/>
|
|
|
|
<RegExpr attribute="Font" context="#pop" String="\\[fF]&roffid;"/>
|
|
|
|
<RegExpr attribute="Font" context="#pop" String="\\f([0-9]|\([0-9][0-9]|\[[0-9]+\])"/>
|
|
|
|
<RegExpr attribute="Font" context="#pop" String="\\s(\[([1-3][0-9]|[04-9])\]|[04-9]|[+-][0-9]|([+-]?\(|\([+-])[0-9][0-9])"/>
|
|
|
|
<Detect2Chars attribute="Escape" context="#pop" char="\\" char1="\\"/>
|
|
|
|
<RegExpr attribute="Escape" context="#pop" String="\\(\$[0-9*@]|[.:% |^{}_!?@)/,&:~0acdeEprtu])"/>
|
|
|
|
<RegExpr attribute="Escape" context="Argument" String="\\[ABDXZbow]&argsep1;"/>
|
|
|
|
<RegExpr attribute="Escape" context="#pop" String="\\[gkmMVYz]&roffid;"/>
|
|
|
|
<RegExpr attribute="Escape" context="#pop" String="\\O([0-4]|\[5[lrci][^]]\])"/>
|
|
|
|
<RegExpr attribute="Escape" context="Measurement" String="\\[hHSvx]&argsep1;"/>
|
|
|
|
<RegExpr attribute="Escape" context="Measurement" String="\\[lL]&argsep1;\|?"/> <!-- TODO - optional trailing &glyph; -->
|
|
|
|
<RegExpr attribute="Escape" context="Argument" String="\\R&argsep1;"/> <!-- TODO - &roffid; (register), measurement -->
|
|
|
|
<RegExpr attribute="Glyph" context="GlyphArgument" String="\\C&argsep1;"/>
|
|
|
|
<RegExpr attribute="Glyph" context="#pop" String="\\N&argsep2;[0-9]+\1"/>
|
|
|
|
<RegExpr attribute="Glyph" context="#pop" String="\\&roffid;"/>
|
|
|
|
<RegExpr attribute="Escape" context="#pop" String="\\$"/>
|
|
|
|
<DetectChar attribute="Error" context="#pop" char="\\"/>
|
|
|
|
</context>
|
|
|
|
|
|
|
|
<!-- directive start -->
|
|
|
|
<context name="DetectDirective" attribute="Other Macros" lineEndContext="#pop">
|
|
|
|
<keyword attribute="Layout Macros" context="Directive" String="layout"/>
|
|
|
|
<keyword attribute="Format Macros" context="Directive" String="formatting"/>
|
|
|
|
<keyword attribute="GNU Macros" context="Directive" String="gnuext"/>
|
|
|
|
<RegExpr attribute="Other Macros" context="dsDirective" String="\s*ds\b" column="1"/>
|
|
|
|
<RegExpr attribute="Other Macros" context="deDirective" String="\s*de\b" column="1" beginRegion="de"/>
|
|
|
|
<RegExpr attribute="Other Macros" context="daDirective" String="\s*da(?=\s+[A-Za-z]+)" column="1" beginRegion="di"/>
|
|
|
|
<RegExpr attribute="Other Macros" context="diDirective" String="\s*di(?=\s+[A-Za-z]+)" column="1" beginRegion="di"/>
|
|
|
|
<RegExpr attribute="Other Macros" context="Directive" String="\s*[A-Za-z]+\b" column="1"/>
|
|
|
|
</context>
|
|
|
|
|
|
|
|
<!-- comment -->
|
|
|
|
<context name="Comment" attribute="Comment" lineEndContext="#pop">
|
|
|
|
<IncludeRules context="##Alerts"/>
|
|
|
|
</context>
|
|
|
|
|
|
|
|
<!-- error -->
|
|
|
|
<context name="Error" attribute="Error" lineEndContext="#stay"/>
|
|
|
|
|
|
|
|
<!-- generic directive -->
|
|
|
|
<context name="Directive" attribute="Identifier" lineEndContext="#pop">
|
|
|
|
<Float attribute="Number" context="#stay"/>
|
|
|
|
<Int attribute="Number" context="#stay"/>
|
|
|
|
<Detect2Chars attribute="Comment" context="Comment" char="\\" char1="""/>
|
|
|
|
<IncludeRules context="DetectOthers"/>
|
|
|
|
</context>
|
|
|
|
|
|
|
|
<!-- quoted string -->
|
|
|
|
<context name="String" attribute="String" lineEndContext="#pop">
|
|
|
|
<Detect2Chars attribute="Escape" context="#stay" char="\\" char1="""/>
|
|
|
|
<DetectChar attribute="String" context="#pop" char="""/>
|
|
|
|
<IncludeRules context="DetectOthers"/>
|
|
|
|
</context>
|
|
|
|
|
|
|
|
<!-- \!, \? escapes -->
|
|
|
|
<context name="LiteralSL" attribute="Normal Text" lineEndContext="#pop"/>
|
|
|
|
<context name="LiteralIL" attribute="Normal Text" lineEndContext="Error">
|
|
|
|
<Detect2Chars attribute="Escape" context="#stay" char="\\" char1="\\"/>
|
|
|
|
<Detect2Chars attribute="Escape" context="#pop" char="\\" char1="?"/>
|
|
|
|
</context>
|
|
|
|
|
|
|
|
<!-- escape argument -->
|
|
|
|
<context name="Argument" attribute="String" lineEndContext="Error" dynamic="true">
|
|
|
|
<RegExpr attribute="Escape" context="#pop#pop" String="%1" dynamic="true"/>
|
|
|
|
<IncludeRules context="DetectOthers"/>
|
|
|
|
</context>
|
|
|
|
|
|
|
|
<!-- glyph escape argument -->
|
|
|
|
<context name="GlyphArgument" attribute="Glyph" lineEndContext="Error" dynamic="true">
|
|
|
|
<RegExpr attribute="Glyph" context="#pop#pop" String="%1" dynamic="true"/>
|
|
|
|
</context>
|
|
|
|
|
|
|
|
<!-- measurement (or expression) escape argument -->
|
|
|
|
<context name="Measurement" attribute="Error" lineEndContext="Error" dynamic="true">
|
|
|
|
<RegExpr attribute="Escape" context="#pop#pop" String="%1" dynamic="true"/>
|
|
|
|
<!-- TODO -->
|
|
|
|
</context>
|
|
|
|
|
|
|
|
<!-- .de directive -->
|
|
|
|
<context name="deDirective" attribute="Identifier" lineEndContext="deBody"/>
|
|
|
|
<context name="deBody" attribute="Normal Text" lineEndContext="#stay">
|
|
|
|
<Detect2Chars attribute="Other Macros" context="#pop#pop" char="." char1="." column="0" endRegion="de"/>
|
|
|
|
<IncludeRules context="Normal"/>
|
|
|
|
</context>
|
|
|
|
|
|
|
|
<!-- .di directives -->
|
|
|
|
<context name="diDirective" attribute="Identifier" lineEndContext="diBody"/>
|
|
|
|
<context name="diBody" attribute="Normal Text" lineEndContext="#stay">
|
|
|
|
<RegExpr attribute="Other Macros" context="#pop#pop" String="\.\s*di\b" column="0" endRegion="di"/>
|
|
|
|
<Detect2Chars attribute="Escape" context="LiteralSL" char="\\" char1="!"/>
|
|
|
|
<Detect2Chars attribute="Escape" context="LiteralIL" char="\\" char1="?"/>
|
|
|
|
<IncludeRules context="Normal"/>
|
|
|
|
</context>
|
|
|
|
|
|
|
|
<!-- .da directives -->
|
|
|
|
<context name="daDirective" attribute="Identifier" lineEndContext="daBody"/>
|
|
|
|
<context name="daBody" attribute="Normal Text" lineEndContext="#stay">
|
|
|
|
<RegExpr attribute="Other Macros" context="#pop#pop" String="\.\s*da\b" column="0" endRegion="di"/>
|
|
|
|
<Detect2Chars attribute="Escape" context="LiteralSL" char="\\" char1="!"/>
|
|
|
|
<Detect2Chars attribute="Escape" context="LiteralIL" char="\\" char1="?"/>
|
|
|
|
<IncludeRules context="Normal"/>
|
|
|
|
</context>
|
|
|
|
|
|
|
|
<!-- .ds directive -->
|
|
|
|
<context name="dsDirective" attribute="Identifier" lineEndContext="#pop">
|
|
|
|
<Int attribute="Number" context="#stay"/>
|
|
|
|
<Float attribute="Number" context="#stay"/>
|
|
|
|
<Detect2Chars attribute="Comment" context="Comment" char="\\" char1="""/>
|
|
|
|
<DetectChar attribute="String" context="dsString" char="""/>
|
|
|
|
<IncludeRules context="DetectOthers"/>
|
|
|
|
</context>
|
|
|
|
|
|
|
|
<!-- .ds quoted value -->
|
|
|
|
<context name="dsString" attribute="String" lineEndContext="#pop">
|
|
|
|
<IncludeRules context="DetectOthers"/>
|
|
|
|
</context>
|
|
|
|
|
|
|
|
</contexts>
|
|
|
|
|
|
|
|
<itemDatas>
|
|
|
|
<itemData name="Normal Text" defStyleNum="dsNormal"/>
|
|
|
|
<itemData name="Comment" defStyleNum="dsComment"/>
|
|
|
|
<itemData name="Layout Macros" defStyleNum="dsKeyword"/>
|
|
|
|
<itemData name="Format Macros" defStyleNum="dsKeyword"/>
|
|
|
|
<itemData name="GNU Macros" defStyleNum="dsDataType"/>
|
|
|
|
<itemData name="Other Macros" defStyleNum="dsFunction"/>
|
|
|
|
<itemData name="Identifier" defStyleNum="dsString"/>
|
|
|
|
<itemData name="Number" defStyleNum="dsDecVal"/>
|
|
|
|
<itemData name="Register" defStyleNum="dsOthers"/>
|
|
|
|
<itemData name="Font" defStyleNum="dsOthers"/>
|
|
|
|
<itemData name="Glyph" defStyleNum="dsOthers"/>
|
|
|
|
<itemData name="Escape" defStyleNum="dsChar"/>
|
|
|
|
<itemData name="String" defStyleNum="dsString"/>
|
|
|
|
<itemData name="Error" defStyleNum="dsError"/>
|
|
|
|
</itemDatas>
|
|
|
|
|
|
|
|
</highlighting>
|
|
|
|
|
|
|
|
<general>
|
|
|
|
|
|
|
|
<comments>
|
|
|
|
<comment name="singleLine" start=".\"" />
|
|
|
|
</comments>
|
|
|
|
|
|
|
|
<keywords casesensitive="1"/>
|
|
|
|
|
|
|
|
</general>
|
|
|
|
|
|
|
|
</language>
|