summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgentoo90 <gentoo90@gmail.com>2012-11-11 16:05:05 +0200
committergentoo90 <gentoo90@gmail.com>2012-11-11 16:05:05 +0200
commitd144306bcd3d067b4ae1aa6ce69782e0f2946bfd (patch)
treebbeb7f856bc2bb03c4ea7e8e590d1f11a08e7ad4
parentbc1fea9cf1220e27625e0ec33c8ef9d81e8987dc (diff)
downloadpygments-d144306bcd3d067b4ae1aa6ce69782e0f2946bfd.tar.gz
Add RPM *.spec files lexer
-rw-r--r--pygments/lexers/_mapping.py1
-rw-r--r--pygments/lexers/other.py59
2 files changed, 59 insertions, 1 deletions
diff --git a/pygments/lexers/_mapping.py b/pygments/lexers/_mapping.py
index 0eca2682..1581c74e 100644
--- a/pygments/lexers/_mapping.py
+++ b/pygments/lexers/_mapping.py
@@ -225,6 +225,7 @@ LEXERS = {
'RebolLexer': ('pygments.lexers.other', 'REBOL', ('rebol',), ('*.r', '*.r3'), ('text/x-rebol',)),
'RedcodeLexer': ('pygments.lexers.other', 'Redcode', ('redcode',), ('*.cw',), ()),
'RhtmlLexer': ('pygments.lexers.templates', 'RHTML', ('rhtml', 'html+erb', 'html+ruby'), ('*.rhtml',), ('text/html+ruby',)),
+ 'RPMSpecLexer': ('pygments.lexers.other', 'RPMSpec', ('spec'), ('*.spec',), ('text/x-rpm-spec',)),
'RstLexer': ('pygments.lexers.text', 'reStructuredText', ('rst', 'rest', 'restructuredtext'), ('*.rst', '*.rest'), ('text/x-rst', 'text/prs.fallenstein.rst')),
'RubyConsoleLexer': ('pygments.lexers.agile', 'Ruby irb session', ('rbcon', 'irb'), (), ('text/x-ruby-shellsession',)),
'RubyLexer': ('pygments.lexers.agile', 'Ruby', ('rb', 'ruby', 'duby'), ('*.rb', '*.rbw', 'Rakefile', '*.rake', '*.gemspec', '*.rbx', '*.duby'), ('text/x-ruby', 'application/x-ruby')),
diff --git a/pygments/lexers/other.py b/pygments/lexers/other.py
index 8dfb3145..08486748 100644
--- a/pygments/lexers/other.py
+++ b/pygments/lexers/other.py
@@ -32,7 +32,7 @@ __all__ = ['BrainfuckLexer', 'BefungeLexer', 'RedcodeLexer', 'MOOCodeLexer',
'AutohotkeyLexer', 'GoodDataCLLexer', 'MaqlLexer', 'ProtoBufLexer',
'HybrisLexer', 'AwkLexer', 'Cfengine3Lexer', 'SnobolLexer',
'ECLLexer', 'UrbiscriptLexer', 'OpenEdgeLexer', 'BroLexer',
- 'MscgenLexer', 'KconfigLexer', 'VGLLexer', 'SourcePawnLexer']
+ 'MscgenLexer', 'KconfigLexer', 'VGLLexer', 'SourcePawnLexer', 'RPMSpecLexer']
class ECLLexer(RegexLexer):
@@ -3158,3 +3158,60 @@ class SourcePawnLexer(RegexLexer):
elif value in self._functions:
tokens = Name.Builtin
yield index, token, value
+
+
+class RPMSpecLexer(RegexLexer):
+ name = 'RPMSpec'
+ aliases = ['spec']
+ filenames = ['*.spec']
+ mimetypes = ['text/x-rpm-spec']
+
+ tokens = {
+ 'root': [
+ (r'#.*\n', Comment),
+ include('rpm'),
+ ],
+ 'header': [
+ include('rpm'),
+ (r'\n', Text, '#pop'),
+ (r'.', Text),
+ ],
+ 'description': [
+ (r'^%(?:package|prep|build|install|clean|'
+ r'check|pre[a-z]*|post[a-z]*|trigger[a-z]*|files)',
+ Name.Decorator, '#pop', 'header'),
+ (r'\n', Text),
+ (r'.', Text),
+ ],
+ 'changelog': [
+ (r'\*.*\n', Generic.Subheading),
+ (r'^%(?:package|prep|build|install|clean|'
+ r'check|pre[a-z]*|post[a-z]*|trigger[a-z]*|files)',
+ Name.Decorator, '#pop', 'header'),
+ (r'\n', Text),
+ (r'.', Text),
+ ],
+ 'rpm': [
+ (r'%define.*\n', Comment.Preproc),
+ (r'%\{\!\?.*%define.*\}', Comment.Preproc),
+ (r'^(?:Name|Version|Release|Epoch|Summary|Group|License|Packager|Vendor|Icon|U[Rr][Ll]|'
+ r'Patch[0-9]*|Source[0-9]*|Requires\(?[a-z]*\)?|[A-Za-z]+Req|'
+ r'Obsoletes|Provides|Conflicts|Build[A-Za-z]+|[A-Za-z]+Arch|Auto[A-Za-z]+):\s*',
+ Generic.Heading, 'header'),
+ (r'^%description', Name.Decorator, 'description'),
+ (r'^%changelog', Name.Decorator, 'changelog'),
+ (r'^%(package|prep|build|install|clean|'
+ r'check|pre[a-z]*|post[a-z]*|trigger[a-z]*|files)',
+ Name.Decorator, 'header'),
+ (r'%(?:attr|defattr|dir|doc(?:dir)?|setup|config(?:ure)?|'
+ r'make(?:install)|ghost|patch[0-9]+|find_lang|exclude|verify)',
+ Keyword),
+ (r'%\{?__[a-z_]+\}?', Name.Function),
+ (r'%\{?_([a-z_]+dir|[a-z_]+path|prefix)\}?', Keyword.Pseudo),
+ (r'%\{\?[A-Za-z0-9_]+\}', Name.Variable),
+ (r'\$\{?RPM_[A-Z0-9_]+\}?', Name.Variable.Global),
+ (r'%\{[a-zA-Z][a-zA-Z0-9_]+\}', Keyword.Constant),
+ (r'%(ifarch|ifnarch|if|else|elseif|endif)', Keyword.Preproc, 'header'),
+ (r'.', Text),
+ ],
+ }