summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiikka Salminen <miikka.salminen@gmail.com>2015-03-07 22:30:17 +0200
committerMiikka Salminen <miikka.salminen@gmail.com>2015-03-07 22:30:17 +0200
commitb55a3a9f79dc14c146a11aa32230624469ff874b (patch)
tree280cc94008825cf08ee03f6455682a27025d974a
parent50c6950c7fa48cce73af6072b35f40608a158306 (diff)
downloadpygments-b55a3a9f79dc14c146a11aa32230624469ff874b.tar.gz
Added a new token type Comment.Hashbang with its documentation, and a support for it in Javascript, Perl, Python, Ruby and Bash lexers.
-rw-r--r--doc/docs/tokens.rst4
-rw-r--r--pygments/lexers/javascript.py2
-rw-r--r--pygments/lexers/perl.py1
-rw-r--r--pygments/lexers/python.py3
-rw-r--r--pygments/lexers/ruby.py1
-rw-r--r--pygments/lexers/shell.py3
-rw-r--r--pygments/token.py1
7 files changed, 12 insertions, 3 deletions
diff --git a/doc/docs/tokens.rst b/doc/docs/tokens.rst
index 194eb70f..6455a501 100644
--- a/doc/docs/tokens.rst
+++ b/doc/docs/tokens.rst
@@ -297,6 +297,10 @@ Comments
`Comment`
Token type for any comment.
+`Comment.Hashbang`
+ Token type for hashbang comments (i.e. first lines of files that start with
+ ``#!``).
+
`Comment.Multiline`
Token type for multiline comments.
diff --git a/pygments/lexers/javascript.py b/pygments/lexers/javascript.py
index fa7dca41..aed8438e 100644
--- a/pygments/lexers/javascript.py
+++ b/pygments/lexers/javascript.py
@@ -60,7 +60,7 @@ class JavascriptLexer(RegexLexer):
(r'\n', Text, '#pop')
],
'root': [
- (r'\A#! ?/.*?\n', Comment), # shebang lines are recognized by node.js
+ (r'\A#! ?/.*?\n', Comment.Hashbang), # recognized by node.js
(r'^(?=\s|/|<!--)', Text, 'slashstartsregex'),
include('commentsandwhitespace'),
(r'\+\+|--|~|&&|\?|:|\|\||\\(?=\n)|'
diff --git a/pygments/lexers/perl.py b/pygments/lexers/perl.py
index 7e70b3ee..b78963d0 100644
--- a/pygments/lexers/perl.py
+++ b/pygments/lexers/perl.py
@@ -46,6 +46,7 @@ class PerlLexer(RegexLexer):
(r'\$(\\\\|\\[^\\]|[^\\$])*\$[egimosx]*', String.Regex, '#pop'),
],
'root': [
+ (r'\A\#!.+?$', Comment.Hashbang),
(r'\#.*?$', Comment.Single),
(r'^=[a-zA-Z0-9]+\s+.*?\n=cut', Comment.Multiline),
(words((
diff --git a/pygments/lexers/python.py b/pygments/lexers/python.py
index 3c1aff56..e0da29f6 100644
--- a/pygments/lexers/python.py
+++ b/pygments/lexers/python.py
@@ -41,7 +41,8 @@ class PythonLexer(RegexLexer):
(r'^(\s*)([rRuU]{,2}"""(?:.|\n)*?""")', bygroups(Text, String.Doc)),
(r"^(\s*)([rRuU]{,2}'''(?:.|\n)*?''')", bygroups(Text, String.Doc)),
(r'[^\S\n]+', Text),
- (r'#.*$', Comment),
+ (r'\A#!.+$', Comment.Hashbang),
+ (r'#.*$', Comment.Single),
(r'[]{}:(),;[]', Punctuation),
(r'\\\n', Text),
(r'\\', Text),
diff --git a/pygments/lexers/ruby.py b/pygments/lexers/ruby.py
index 943fd715..5c30439e 100644
--- a/pygments/lexers/ruby.py
+++ b/pygments/lexers/ruby.py
@@ -190,6 +190,7 @@ class RubyLexer(ExtendedRegexLexer):
tokens = {
'root': [
+ (r'\A#!.+?$', Comment.Hashbang),
(r'#.*?$', Comment.Single),
(r'=begin\s.*?\n=end.*?$', Comment.Multiline),
# keywords
diff --git a/pygments/lexers/shell.py b/pygments/lexers/shell.py
index 810ee7da..a9c1e6b9 100644
--- a/pygments/lexers/shell.py
+++ b/pygments/lexers/shell.py
@@ -60,7 +60,8 @@ class BashLexer(RegexLexer):
r'shopt|source|suspend|test|time|times|trap|true|type|typeset|'
r'ulimit|umask|unalias|unset|wait)\s*\b(?!\.)',
Name.Builtin),
- (r'#.*\n', Comment),
+ (r'\A#!.+\n', Comment.Hashbang),
+ (r'#.*\n', Comment.Single),
(r'\\[\w\W]', String.Escape),
(r'(\b\w+)(\s*)(=)', bygroups(Name.Variable, Text, Operator)),
(r'[\[\]{}()=]', Operator),
diff --git a/pygments/token.py b/pygments/token.py
index e5eadf0d..bfdfc114 100644
--- a/pygments/token.py
+++ b/pygments/token.py
@@ -179,6 +179,7 @@ STANDARD_TYPES = {
Punctuation: 'p',
Comment: 'c',
+ Comment.Hashbang: 'ch',
Comment.Multiline: 'cm',
Comment.Preproc: 'cp',
Comment.Single: 'c1',