summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2013-05-19 10:09:06 +0200
committerGeorg Brandl <georg@python.org>2013-05-19 10:09:06 +0200
commit93947af62a2629af18bb569bc11fe18be29fb671 (patch)
tree483b68bfa6225e5f96cfb29f8884f687d1e665a7
parent979add1852fc4147cc5cb2640dc43eb084748c66 (diff)
downloadpygments-93947af62a2629af18bb569bc11fe18be29fb671.tar.gz
Rexx lexer: add changelog entry and simplify analyse_text
-rw-r--r--CHANGES1
-rw-r--r--pygments/lexers/other.py49
-rw-r--r--tests/test_lexers_other.py1
3 files changed, 22 insertions, 29 deletions
diff --git a/CHANGES b/CHANGES
index 3cad33ea..f8794be7 100644
--- a/CHANGES
+++ b/CHANGES
@@ -19,6 +19,7 @@ Version 1.7
* BlitzBasic (PR#197)
* EBNF (PR#193)
* Igor Pro (PR#172)
+ * Rexx (PR#199)
- Pygments will now recognize "vim" modelines when guessing the lexer for
a file based on content (PR#118).
diff --git a/pygments/lexers/other.py b/pygments/lexers/other.py
index ed31b218..10598fb4 100644
--- a/pygments/lexers/other.py
+++ b/pygments/lexers/other.py
@@ -14,7 +14,7 @@ import re
from pygments.lexer import RegexLexer, include, bygroups, using, \
this, combined, ExtendedRegexLexer
from pygments.token import Error, Punctuation, Literal, Token, \
- Text, Comment, Operator, Keyword, Name, String, Number, Generic, Other, \
+ Text, Comment, Operator, Keyword, Name, String, Number, Generic, \
Whitespace
from pygments.util import get_bool_opt
from pygments.lexers.web import HtmlLexer
@@ -3691,7 +3691,8 @@ class RexxLexer(RegexLexer):
(r"'", String, 'string_single'),
(r'[0-9]+(\.[0-9]+)?(e[+-]?[0-9])?', Number),
(r'([a-z_][a-z0-9_]*)(\s*)(:)(\s*)(procedure)\b',
- bygroups(Name.Function, Whitespace, Operator, Whitespace, Keyword.Declaration)),
+ bygroups(Name.Function, Whitespace, Operator, Whitespace,
+ Keyword.Declaration)),
(r'([a-z_][a-z0-9_]*)(\s*)(:)',
bygroups(Name.Label, Whitespace, Operator)),
include('function'),
@@ -3740,14 +3741,15 @@ class RexxLexer(RegexLexer):
]
}
- _ADDRESS_COMMAND_PATTERN = r'^\s*address\s+command\b'
- _ADDRESS_PATTERN = r'^\s*address\s+'
- _DO_WHILE_PATTERN = r'^\s*do\s+while\b'
- _IF_THEN_DO_PATTERN = r'^\s*if\b.+\bthen\s+do\s*$'
- _PROCEDURE_PATTERN = r'^\s*([a-z_][a-z0-9_]*)(\s*)(:)(\s*)(procedure)\b'
- _ELSE_DO_PATTERN = r'\belse\s+do\s*$'
- _PARSE_ARG_PATTERN = r'^\s*parse\s+(upper\s+)?(arg|value)\b'
- _PATTERNS_AND_WEIGHTS = (
+ _c = lambda s: re.compile(s, re.MULTILINE)
+ _ADDRESS_COMMAND_PATTERN = _c(r'^\s*address\s+command\b')
+ _ADDRESS_PATTERN = _c(r'^\s*address\s+')
+ _DO_WHILE_PATTERN = _c(r'^\s*do\s+while\b')
+ _IF_THEN_DO_PATTERN = _c(r'^\s*if\b.+\bthen\s+do\s*$')
+ _PROCEDURE_PATTERN = _c(r'^\s*([a-z_][a-z0-9_]*)(\s*)(:)(\s*)(procedure)\b')
+ _ELSE_DO_PATTERN = _c(r'\belse\s+do\s*$')
+ _PARSE_ARG_PATTERN = _c(r'^\s*parse\s+(upper\s+)?(arg|value)\b')
+ PATTERNS_AND_WEIGHTS = (
(_ADDRESS_COMMAND_PATTERN, 0.2),
(_ADDRESS_PATTERN, 0.05),
(_DO_WHILE_PATTERN, 0.1),
@@ -3757,31 +3759,20 @@ class RexxLexer(RegexLexer):
(_PARSE_ARG_PATTERN, 0.2),
)
- @staticmethod
- def _analyse_text_for_weighted_patterns(text, patternsAndWeights):
- result = 0.0
- lowerText = text.lower()
- for pattern, weight in patternsAndWeights:
- regex = re.compile(pattern, re.MULTILINE)
- if regex.search(lowerText):
- result += weight
- return result
-
def analyse_text(text):
"""
- Check for inital comment.
+ Check for inital comment and patterns that distinguish Rexx from other
+ C-like languages.
"""
- result = 0.0
if re.search(r'/\*\**\s*rexx', text, re.IGNORECASE):
# Header matches MVS Rexx requirements, this is certainly a Rexx
# script.
- result = 1.0
+ return 1.0
elif text.startswith('/*'):
# Header matches general Rexx requirements; the source code might
# still be any language using C comments such as C++, C# or Java.
- result = 0.01
- result += RexxLexer._analyse_text_for_weighted_patterns(
- text, RexxLexer._PATTERNS_AND_WEIGHTS)
- result = min(result, 1.0)
- assert 0.0 <= result <= 1.0
- return result
+ lowerText = text.lower()
+ result = sum(weight
+ for (pattern, weight) in RexxLexer.PATTERNS_AND_WEIGHTS
+ if pattern.search(lowerText)) + 0.01
+ return min(result, 1.0)
diff --git a/tests/test_lexers_other.py b/tests/test_lexers_other.py
index 44685d5e..d3cfa246 100644
--- a/tests/test_lexers_other.py
+++ b/tests/test_lexers_other.py
@@ -6,6 +6,7 @@
:copyright: Copyright 2006-2013 by the Pygments team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
+
import glob
import os
import unittest