Skip to content

Commit a8704a8

Browse files
authored
Add lexer for RPMSpec (#907)
1 parent eb47752 commit a8704a8

File tree

2 files changed

+59
-1
lines changed

2 files changed

+59
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ translators for Pygments lexers and styles.
5555
| O | Objective-C, OCaml, Octave, Odin, OnesEnterprise, OpenEdge ABL, OpenSCAD, Org Mode |
5656
| P | PacmanConf, Perl, PHP, PHTML, Pig, PkgConfig, PL/pgSQL, plaintext, Plutus Core, Pony, PostgreSQL SQL dialect, PostScript, POVRay, PowerQuery, PowerShell, Prolog, PromQL, Promela, properties, Protocol Buffer, PRQL, PSL, Puppet, Python, Python 2 |
5757
| Q | QBasic, QML |
58-
| R | R, Racket, Ragel, Raku, react, ReasonML, reg, reStructuredText, Rexx, Ruby, Rust |
58+
| R | R, Racket, Ragel, Raku, react, ReasonML, reg, reStructuredText, Rexx, RPMSpec, Ruby, Rust |
5959
| S | SAS, Sass, Scala, Scheme, Scilab, SCSS, Sed, Sieve, Smali, Smalltalk, Smarty, Snobol, Solidity, SourcePawn, SPARQL, SQL, SquidConf, Standard ML, stas, Stylus, Svelte, Swift, SYSTEMD, systemverilog |
6060
| T | TableGen, Tal, TASM, Tcl, Tcsh, Termcap, Terminfo, Terraform, TeX, Thrift, TOML, TradingView, Transact-SQL, Turing, Turtle, Twig, TypeScript, TypoScript, TypoScriptCssData, TypoScriptHtmlData |
6161
| V | V, V shell, Vala, VB.net, verilog, VHDL, VHS, VimL, vue |

lexers/embedded/rpm_spec.xml

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
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+

0 commit comments

Comments
 (0)