rpm_spec.xml

 1
 2<lexer>
 3  <config>
 4    <name>RPMSpec</name>
 5    <alias>spec</alias>
 6    <filename>*.spec</filename>
 7    <mime_type>text/x-rpm-spec</mime_type>
 8  </config>
 9  <rules>
10    <state name="root">
11      <rule pattern="#.*$"><token type="Comment"/></rule>
12      <rule><include state="basic"/></rule>
13    </state>
14    <state name="description">
15      <rule pattern="^(%(?:package|prep|build|install|clean|check|pre[a-z]*|post[a-z]*|trigger[a-z]*|files))(.*)$"><bygroups><token type="NameDecorator"/><token type="Text"/></bygroups><pop depth="1"/></rule>
16      <rule pattern="\s+"><token type="TextWhitespace"/></rule>
17      <rule pattern="."><token type="Text"/></rule>
18    </state>
19    <state name="changelog">
20      <rule pattern="\*.*$"><token type="GenericSubheading"/></rule>
21      <rule pattern="^(%(?:package|prep|build|install|clean|check|pre[a-z]*|post[a-z]*|trigger[a-z]*|files))(.*)$"><bygroups><token type="NameDecorator"/><token type="Text"/></bygroups><pop depth="1"/></rule>
22      <rule pattern="\s+"><token type="TextWhitespace"/></rule>
23      <rule pattern="."><token type="Text"/></rule>
24    </state>
25    <state name="string">
26      <rule pattern="&quot;"><token type="LiteralStringDouble"/><pop depth="1"/></rule>
27      <rule pattern="\\([\\abfnrtv&quot;\&#x27;]|x[a-fA-F0-9]{2,4}|[0-7]{1,3})"><token type="LiteralStringEscape"/></rule>
28      <rule><include state="interpol"/></rule>
29      <rule pattern="."><token type="LiteralStringDouble"/></rule>
30    </state>
31    <state name="basic">
32      <rule><include state="macro"/></rule>
33      <rule pattern="(?i)^(Name|Version|Release|Epoch|Summary|Group|License|Packager|Vendor|Icon|URL|Distribution|Prefix|Patch[0-9]*|Source[0-9]*|Requires\(?[a-z]*\)?|[a-z]+Req|Obsoletes|Suggests|Provides|Conflicts|Build[a-z]+|[a-z]+Arch|Auto[a-z]+)(:)(.*)$"><bygroups><token type="GenericHeading"/><token type="Punctuation"/><usingself state="root"/></bygroups></rule>
34      <rule pattern="^%description"><token type="NameDecorator"/><push state="description"/></rule>
35      <rule pattern="^%changelog"><token type="NameDecorator"/><push state="changelog"/></rule>
36      <rule pattern="^(%(?:package|prep|build|install|clean|check|pre[a-z]*|post[a-z]*|trigger[a-z]*|files))(.*)$"><bygroups><token type="NameDecorator"/><token type="Text"/></bygroups></rule>
37      <rule pattern="%(attr|defattr|dir|doc(?:dir)?|setup|config(?:ure)?|make(?:install)|ghost|patch[0-9]+|find_lang|exclude|verify)"><token type="Keyword"/></rule>
38      <rule><include state="interpol"/></rule>
39      <rule pattern="&#x27;.*?&#x27;"><token type="LiteralStringSingle"/></rule>
40      <rule pattern="&quot;"><token type="LiteralStringDouble"/><push state="string"/></rule>
41      <rule pattern="\s+"><token type="TextWhitespace"/></rule>
42      <rule pattern="."><token type="Text"/></rule>
43    </state>
44    <state name="macro">
45      <rule pattern="%define.*$"><token type="CommentPreproc"/></rule>
46      <rule pattern="%\{\!\?.*%define.*\}"><token type="CommentPreproc"/></rule>
47      <rule pattern="(%(?:if(?:n?arch)?|else(?:if)?|endif))(.*)$"><bygroups><token type="CommentPreproc"/><token type="Text"/></bygroups></rule>
48    </state>
49    <state name="interpol">
50      <rule pattern="%\{?__[a-z_]+\}?"><token type="NameFunction"/></rule>
51      <rule pattern="%\{?_([a-z_]+dir|[a-z_]+path|prefix)\}?"><token type="KeywordPseudo"/></rule>
52      <rule pattern="%\{\?\w+\}"><token type="NameVariable"/></rule>
53      <rule pattern="\$\{?RPM_[A-Z0-9_]+\}?"><token type="NameVariableGlobal"/></rule>
54      <rule pattern="%\{[a-zA-Z]\w+\}"><token type="KeywordConstant"/></rule>
55    </state>
56  </rules>
57</lexer>
58