You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdelibs/kate/data/rpmspec.xml

135 lines
8.2 KiB

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd" [
<!ENTITY a_valid_char_in_macro_names "A-Za-z0-9_">
]>
<language name="RPM Spec" version="1.4" kateversion="2.4" section="Other" extensions="*.spec" mimetype="" license="public domain">
<highlighting>
<contexts>
<context attribute="Normal Text" lineEndContext="#stay" name="Normal">
<!-- Handle tags: -->
<RegExpr attribute="Tag" context="tag_line" String="((Name|Summary|Summary\(.*\)|Version|Epoch|Serial|Release|Group|Copyright|License|Icon|Vendor|Distribution|Packager|Url|URL|Prefix|Conflicts|Obsoletes|Provides|AutoReqProv|PreReq|Requires|Requires\(.*\)|Enhances|Suggests|Recommends|BuildArch|BuildArchitectures|BuildConflicts|BuildRequires|BuildRoot|ExclusiveArch|ExclusiveOs|ExcludeArch|ExcludeOs|Source\d*|Nosource|Patch\d*|Nopatch)[ \t]*:)" column="0" />
<!-- Handle % -->
<AnyChar context="handle_percent" String="%$" lookAhead="true" />
<!-- Handle comments. "# norootforbuild" is displayed like a tag. -->
<DetectChar context="Comment" char="#" column="0" lookAhead="true" />
</context>
<context attribute="Normal Text" lineEndContext="#stay" name="command section">
<!-- Handle % -->
<AnyChar context="handle_percent" String="%$" lookAhead="true" />
<!-- Handle comments. "# norootforbuild" is displayed like a tag. -->
<DetectChar context="Comment" char="#" column="0" lookAhead="true" />
</context>
<context attribute="Normal Text" lineEndContext="#stay" name="changelog section">
<Detect2Chars attribute="Value" context="tag_line" char="-" char1=" " column="0" />
<Detect2Chars attribute="Tag" context="changelog_header" char="*" char1=" " column="0" />
<!-- Handle comments. "# norootforbuild" is displayed like a tag. -->
<DetectChar context="Comment" char="#" column="0" lookAhead="true" />
<!-- Handle % -->
<AnyChar context="handle_percent" String="%$" lookAhead="true" />
</context>
<context attribute="Normal" lineEndContext="description section" name="description section start line">
<!-- Handle % -->
<AnyChar context="handle_percent" String="%$" lookAhead="true" />
</context>
<context attribute="Value" lineEndContext="#stay" name="description section">
<!-- Handle % -->
<AnyChar context="handle_percent" String="%$" lookAhead="true" />
<!-- Handle comments. "# norootforbuild" is displayed like a tag. -->
<DetectChar context="Comment" char="#" column="0" lookAhead="true" />
</context>
<context attribute="Comment" lineEndContext="#pop" name="Comment">
<StringDetect attribute="Tag" context="every_non_whitespace_is_error" String="# norootforbuild" column="0" />
<!-- Error on single percent ("%"), but not on double percent ("%%"): -->
<Detect2Chars attribute="Comment" char="%" char1="%"/>
<DetectChar attribute="Error" char="%"/>
<!-- Alert on "TODO" -->
<StringDetect attribute="Alert" String="TODO" insensitive="true" />
<StringDetect attribute="Alert" String="FIXME" insensitive="true" />
</context>
<context attribute="Normal Text" lineEndContext="#pop" name="every_non_whitespace_is_error">
<RegExpr attribute="Error" context="#stay" String="[^\s]" />
</context>
<context attribute="Value" lineEndContext="#pop" name="tag_line">
<!-- Handle % -->
<AnyChar context="handle_percent" String="%$" lookAhead="true" />
</context>
<context attribute="Tag" lineEndContext="#pop" name="changelog_header">
<!-- Handle % -->
<AnyChar context="handle_percent" String="%$" lookAhead="true" />
</context>
<context attribute="Normal Text" lineEndContext="#pop" name="parameters after keyword">
<!-- Handle % -->
<AnyChar context="handle_percent" String="%$" lookAhead="true" />
</context>
<!-- Expects a string starting with % or $ (otherwise, this context will fail!). -->
<context lineEndContext="#pop" name="handle_percent">
<Detect2Chars attribute="Escaped character" context="#pop" char="%" char1="%"/>
<!-- Keywords: -->
<RegExpr attribute="Keyword" context="parameters after keyword" String="%(if|ifarch|ifnarch|ifos|ifnos)(?=($| |\t))" column="0" beginRegion="if_block" />
<RegExpr attribute="Keyword" context="every_non_whitespace_is_error" String="%else(?=($| |\t))" column="0" />
<RegExpr attribute="Keyword" context="every_non_whitespace_is_error" String="%endif(?=($| |\t))" column="0" endRegion="if_block" />
<RegExpr attribute="Keyword" context="parameters after keyword" String="%(define|global|undefine)(?=($| |\t))" column="0" />
<!-- If a command section starts (=section macro at begin of the line), we switch
to the corresponding context. There will never be a return to THIS context...: -->
<RegExpr attribute="Section" context="Normal" String="%package(?=($| |\t))" column="0" />
<RegExpr attribute="Section" context="description section start line" String="%description(?=($| |\t))" column="0" />
<RegExpr attribute="Section" context="command section" String="%(prep|build|pre|preun|install|post|postun|clean|files|trigger|triggerin|triggerun|triggerpostun|verifyscript)(?=($| |\t))" column="0" />
<RegExpr attribute="Section" context="changelog section" String="%changelog(?=($| |\t))" column="0" />
<!-- Handle normal macros -->
<RegExpr attribute="Error" context="#pop" String="%([\{\(][ \t]{0,}){0,1}(if|ifarch|ifnarch|ifos|ifnos|else|endif|define|global|undefine|package|description|prep|build|pre|preun|install|post|postun|clean|files|trigger|triggerin|triggerun|triggerpostun|verifyscript|changelog)(?=($|[^&a_valid_char_in_macro_names;]))" />
<RegExpr attribute="Macro call" context="macro content in parenthesis" String="%[&a_valid_char_in_macro_names;]*\(" />
<RegExpr attribute="Macro call" context="macro content in braces" String="(%|\$)\{" />
<RegExpr attribute="Macro call" context="#pop" String="(%|\$)([&a_valid_char_in_macro_names;]{1,}|\*|\#)(?=($|[^&a_valid_char_in_macro_names;]))" /> <!-- ')' and '}' are only allowed as macro terminator in the lookahead because when you do something like %__make %{?jobs:-j %jobs}, then the "%jobs" is a valid macro. However, the disadvantage is that a line like "%abc} isn't marked as error. But it is to complicate to distinguish this properly. -->
<RegExpr attribute="Error" context="#pop" String="(%|\$)([&a_valid_char_in_macro_names;]{1,}|\*|\#)" />
<AnyChar attribute="Error" context="#pop" String="%$" /> <!-- a single % or $ is also an error -->
</context>
<context attribute="Macro call" lineEndContext="#pop#pop" name="macro content in parenthesis">
<!-- Handle % -->
<AnyChar context="handle_percent" String="%$" lookAhead="true" />
<DetectChar attribute="Macro call" context="#pop#pop" char=")" />
<AnyChar attribute="Error" context="#stay" String="({}" />
</context>
<context attribute="Macro call" lineEndContext="#pop#pop" name="macro content in braces">
<DetectChar attribute="Macro call" context="#pop#pop" char="}" />
<AnyChar attribute="Error" context="#stay" String="({)" />
<!-- Handle % -->
<AnyChar context="handle_percent" String="%$" lookAhead="true" />
</context>
</contexts>
<itemDatas>
<itemData name="Normal Text" defStyleNum="dsNormal"/>
<itemData name="Keyword" defStyleNum="dsKeyword"/>
<itemData name="Comment" defStyleNum="dsComment"/>
<itemData name="Tag" defStyleNum="dsDataType"/>
<itemData name="Value" defStyleNum="dsDecVal"/>
<itemData name="Error" defStyleNum="dsError"/>
<itemData name="Macro call" defStyleNum="dsFunction"/>
<itemData name="Section" defStyleNum="dsRegionMarker"/>
<itemData name="Alert" defStyleNum="dsAlert"/>
<itemData name="Escaped character" defStyleNum="dsChar"/>
</itemDatas>
</highlighting>
<general>
<keywords casesensitive="1" />
</general>
</language>