summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2013-01-09 12:08:16 +0100
committerGeorg Brandl <georg@python.org>2013-01-09 12:08:16 +0100
commitba85554e9ab6f31652cf2863fd5b79979d77e1a5 (patch)
tree8f0daccc507465f81f93b18a85dd9d7185176ffd
parent170b270a30ac8d9df4c49b1a637f1a91e9b364c2 (diff)
parent0f970740661dabc7861db9e63c8e953df054ef19 (diff)
downloadpygments-ba85554e9ab6f31652cf2863fd5b79979d77e1a5.tar.gz
Merged in cmclaughlin/pygments-puppet (pull request #133: Puppet lexer)
-rw-r--r--AUTHORS1
-rw-r--r--pygments/lexers/_mapping.py1
-rw-r--r--pygments/lexers/puppet.py103
3 files changed, 105 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
index 68977d5f..54957dc4 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -74,6 +74,7 @@ Other contributors, listed alphabetically, are:
* Gordon McGregor -- SystemVerilog lexer
* Stephen McKamey -- Duel/JBST lexer
* Brian McKenna -- F# lexer
+* Charles McLaughlin -- Puppet lexer
* Lukas Meuser -- BBCode formatter, Lua lexer
* Paul Miller -- LiveScript lexer
* Hong Minhee -- HTTP lexer
diff --git a/pygments/lexers/_mapping.py b/pygments/lexers/_mapping.py
index c0cbeae9..a6090c75 100644
--- a/pygments/lexers/_mapping.py
+++ b/pygments/lexers/_mapping.py
@@ -208,6 +208,7 @@ LEXERS = {
'PrologLexer': ('pygments.lexers.compiled', 'Prolog', ('prolog',), ('*.prolog', '*.pro', '*.pl'), ('text/x-prolog',)),
'PropertiesLexer': ('pygments.lexers.text', 'Properties', ('properties',), ('*.properties',), ('text/x-java-properties',)),
'ProtoBufLexer': ('pygments.lexers.other', 'Protocol Buffer', ('protobuf',), ('*.proto',), ()),
+ 'PuppetLexer': ('pygments.lexers.puppet', 'Puppet', ('puppet',), ('*.pp',), ()),
'PyPyLogLexer': ('pygments.lexers.text', 'PyPy Log', ('pypylog', 'pypy'), ('*.pypylog',), ('application/x-pypylog',)),
'Python3Lexer': ('pygments.lexers.agile', 'Python 3', ('python3', 'py3'), (), ('text/x-python3', 'application/x-python3')),
'Python3TracebackLexer': ('pygments.lexers.agile', 'Python 3.0 Traceback', ('py3tb',), ('*.py3tb',), ('text/x-python3-traceback',)),
diff --git a/pygments/lexers/puppet.py b/pygments/lexers/puppet.py
new file mode 100644
index 00000000..fefdb549
--- /dev/null
+++ b/pygments/lexers/puppet.py
@@ -0,0 +1,103 @@
+# -*- coding: utf-8 -*-
+"""
+ pygments.lexers.puppet
+ ~~~~~~~~~~~~~~~~~~~~~~
+
+ Lexer for the Puppet DSL.
+
+ :copyright: Copyright 2006-2012 by the Pygments team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from pygments.lexer import RegexLexer, bygroups, include
+from pygments.token import Comment, Keyword, Name, Number, Operator
+from pygments.token import Punctuation, String, Text
+
+
+__all__ = ['PuppetLexer']
+
+
+class PuppetLexer(RegexLexer):
+ name = 'Puppet'
+ aliases = ['puppet']
+ filenames = ['*.pp']
+
+ tokens = {
+ 'root': [
+ include('comments'),
+ include('keywords'),
+ include('names'),
+ include('numbers'),
+ include('operators'),
+ include('strings'),
+
+ (r'[]{}:(),;[]', Punctuation),
+ (r'[^\S\n]+', Text),
+ ],
+
+ 'comments': [
+ (r'\s*#.*$', Comment),
+ (r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment.Multiline),
+ ],
+
+ 'operators': [
+ (r'(=>|\?|<|>|=|\+|-|\/|\*|~|!|\|)', Operator),
+ (r'\s+(in|and|or|not)\s+', Operator.Word),
+ ],
+
+ 'names': [
+ ('[a-zA-Z_][a-zA-Z0-9_]*', Name.Attribute),
+ (r'(\$\S+)(\[)(\S+)(\])', bygroups(Name.Variable, Punctuation,
+ String, Punctuation)),
+ (r'\$\S+', Name.Variable),
+ ],
+
+ 'numbers': [
+ # Copypasta from the Python lexer
+ (r'(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?j?', Number.Float),
+ (r'\d+[eE][+-]?[0-9]+j?', Number.Float),
+ (r'0[0-7]+j?', Number.Oct),
+ (r'0[xX][a-fA-F0-9]+', Number.Hex),
+ (r'\d+L', Number.Integer.Long),
+ (r'\d+j?', Number.Integer)
+ ],
+
+ 'keywords': [
+ # Left out 'group' and 'require'
+ # Since they're often used as attributes
+ (r'(?i)\s(absent|alert|alias|audit|augeas|before)\s', Keyword),
+ (r'(?i)\s(case|check|class|computer|configured)\s', Keyword),
+ (r'(?i)\s(contained|create_resources|crit|cron)\s', Keyword),
+ (r'(?i)\s(debug|default|define|defined|directory)\s', Keyword),
+ (r'(?i)\s(else|elsif|emerg|err|exec|extlookup)\s', Keyword),
+ (r'(?i)\s(fail|false|file|filebucket|fqdn_rand)\s', Keyword),
+ (r'(?i)\s(generate|host|if|import|include|info)\s', Keyword),
+ (r'(?i)\s(inherits|inline_template|installed)\s', Keyword),
+ (r'(?i)\s(interface|k5login|latest|link|loglevel)\s', Keyword),
+ (r'(?i)\s(macauthorization|mailalias|maillist)\s', Keyword),
+ (r'(?i)\s(mcx|md5|mount|mounted|nagios_command)\s', Keyword),
+ (r'(?i)\s(nagios_contact|nagios_contactgroup)\s', Keyword),
+ (r'(?i)\s(nagios_host|nagios_hostdependency)\s', Keyword),
+ (r'(?i)\s(nagios_hostescalation|nagios_hostextinfo)\s', Keyword),
+ (r'(?i)\s(nagios_hostgroup|nagios_service)\s', Keyword),
+ (r'(?i)\s(nagios_servicedependency)\s', Keyword),
+ (r'(?i)\s(nagios_serviceescalation)\s', Keyword),
+ (r'(?i)\s(nagios_serviceextinfo)\s', Keyword),
+ (r'(?i)\s(nagios_servicegroup|nagios_timeperiod)\s', Keyword),
+ (r'(?i)\s(node|noop|notice|notify)\s', Keyword),
+ (r'(?i)\s(package|present|purged|realize|regsubst)\s', Keyword),
+ (r'(?i)\s(resources|role|router|running)\s', Keyword),
+ (r'(?i)\s(schedule|scheduled_task|search|selboolean)\s', Keyword),
+ (r'(?i)\s(selmodule|service|sha1|shellquote|split)\s', Keyword),
+ (r'(?i)\s(sprintf|ssh_authorized_key|sshkey|stage)\s', Keyword),
+ (r'(?i)\s(stopped|subscribe|tag|tagged|template|tidy)\s', Keyword),
+ (r'(?i)\s(true|undef|unmounted|user|versioncmp|vlan)\s', Keyword),
+ (r'(?i)\s(warning|yumrepo|zfs|zone|zpool)\s', Keyword),
+ ],
+
+ 'strings': [
+ (r'"([^"])*"', String),
+ (r'\'([^\'])*\'', String),
+ ],
+
+ }