summaryrefslogtreecommitdiff
path: root/pygments/lexers/templates.py
diff options
context:
space:
mode:
Diffstat (limited to 'pygments/lexers/templates.py')
-rw-r--r--pygments/lexers/templates.py78
1 files changed, 77 insertions, 1 deletions
diff --git a/pygments/lexers/templates.py b/pygments/lexers/templates.py
index b8a14008..e9771af5 100644
--- a/pygments/lexers/templates.py
+++ b/pygments/lexers/templates.py
@@ -21,6 +21,7 @@ from pygments.lexer import \
Lexer, DelegatingLexer, RegexLexer, do_insertions, bygroups, include, using
from pygments.token import \
Text, Comment, Operator, Keyword, Name, String, Number, Other
+from pygments.util import html_doctype_matches, looks_like_xml
__all__ = ['HtmlPhpLexer', 'XmlPhpLexer', 'CssPhpLexer',
'JavascriptPhpLexer', 'ErbLexer', 'RhtmlLexer',
@@ -110,6 +111,10 @@ class ErbLexer(Lexer):
except IndexError:
return
+ def analyse_text(text):
+ if '<%' in text and '%>' in text:
+ return 0.4
+
class SmartyLexer(RegexLexer):
name = 'Smarty'
@@ -118,7 +123,7 @@ class SmartyLexer(RegexLexer):
flags = re.MULTILINE | re.DOTALL
tokens = {
- # XXX: make marty delimiters customizable somehow
+ # XXX: make smarty delimiters customizable somehow
'root': [
(r'[^{]+', Other),
(r'(\{)(\*.*?\*)(\})',
@@ -145,6 +150,18 @@ class SmartyLexer(RegexLexer):
]
}
+ def analyse_text(text):
+ rv = 0.0
+ if re.search('\{if\s+.*?\}.*?\{/if\}', text):
+ rv += 0.15
+ if re.search('\{include\s+file=.*?\}', text):
+ rv += 0.15
+ if re.search('\{foreach\s+.*?\}.*?\{/foreach\}', text):
+ rv += 0.15
+ if re.search('\{\$.*?\}', text):
+ rv += 0.01
+ return rv
+
class DjangoLexer(RegexLexer):
name = 'django template'
@@ -188,6 +205,16 @@ class DjangoLexer(RegexLexer):
]
}
+ def analyse_text(text):
+ rv = 0.0
+ if re.search(r'\{\%\s*(block|extends)', text) is not None:
+ rv += 0.4
+ if re.search(r'\{\%\s*if\s*.*?\%\}', text) is not None:
+ rv += 0.1
+ if re.search(r'\{\{.*?\}\}', text) is not None:
+ rv += 0.1
+ return rv
+
class RhtmlLexer(DelegatingLexer):
name = 'RHTML'
@@ -197,6 +224,13 @@ class RhtmlLexer(DelegatingLexer):
def __init__(self, **options):
super(RhtmlLexer, self).__init__(HtmlLexer, ErbLexer, **options)
+ def analyse_text(text):
+ rv = ErbLexer.analyse_text(text) - 0.01
+ if html_doctype_matches(text):
+ # one more than the XmlErbLexer returns
+ rv += 0.5
+ return rv
+
class XmlErbLexer(DelegatingLexer):
name = 'XML+Ruby'
@@ -205,6 +239,12 @@ class XmlErbLexer(DelegatingLexer):
def __init__(self, **options):
super(XmlErbLexer, self).__init__(XmlLexer, ErbLexer, **options)
+ def analyse_text(text):
+ rv = ErbLexer.analyse_text(text) - 0.01
+ if looks_like_xml(text):
+ rv += 0.4
+ return rv
+
class CssErbLexer(DelegatingLexer):
name = 'CSS+Ruby'
@@ -231,6 +271,12 @@ class HtmlPhpLexer(DelegatingLexer):
def __init__(self, **options):
super(HtmlPhpLexer, self).__init__(HtmlLexer, PhpLexer, **options)
+ def analyse_text(text):
+ rv = PhpLexer.analyse_text(text) - 0.01
+ if html_doctype_matches(text):
+ rv += 0.5
+ return rv
+
class XmlPhpLexer(DelegatingLexer):
name = 'XML+PHP'
@@ -239,6 +285,12 @@ class XmlPhpLexer(DelegatingLexer):
def __init__(self, **options):
super(XmlPhpLexer, self).__init__(XmlLexer, PhpLexer, **options)
+ def analyse_text(text):
+ rv = PhpLexer.analyse_text(text) - 0.01
+ if looks_like_xml(text):
+ rv += 0.4
+ return rv
+
class CssPhpLexer(DelegatingLexer):
name = 'CSS+PHP'
@@ -264,6 +316,12 @@ class HtmlSmartyLexer(DelegatingLexer):
def __init__(self, **options):
super(HtmlSmartyLexer, self).__init__(HtmlLexer, SmartyLexer, **options)
+ def analyse_text(text):
+ rv = SmartyLexer.analyse_text(text) - 0.01
+ if html_doctype_matches(text):
+ rv += 0.5
+ return rv
+
class XmlSmartyLexer(DelegatingLexer):
name = 'XML+Smarty'
@@ -272,6 +330,12 @@ class XmlSmartyLexer(DelegatingLexer):
def __init__(self, **options):
super(XmlSmartyLexer, self).__init__(XmlLexer, SmartyLexer, **options)
+ def analyse_text(text):
+ rv = SmartyLexer.analyse_text(text) - 0.01
+ if looks_like_xml(text):
+ rv += 0.4
+ return rv
+
class CssSmartyLexer(DelegatingLexer):
name = 'CSS+Smarty'
@@ -297,6 +361,12 @@ class HtmlDjangoLexer(DelegatingLexer):
def __init__(self, **options):
super(HtmlDjangoLexer, self).__init__(HtmlLexer, DjangoLexer, **options)
+ def analyse_text(text):
+ rv = DjangoLexer.analyse_text(text) - 0.01
+ if html_doctype_matches(text):
+ rv += 0.5
+ return rv
+
class XmlDjangoLexer(DelegatingLexer):
name = 'XML+Django'
@@ -305,6 +375,12 @@ class XmlDjangoLexer(DelegatingLexer):
def __init__(self, **options):
super(XmlDjangoLexer, self).__init__(XmlLexer, DjangoLexer, **options)
+ def analyse_text(text):
+ rv = DjangoLexer.analyse_text(text) - 0.01
+ if looks_like_xml(text):
+ rv += 0.4
+ return rv
+
class CssDjangoLexer(DelegatingLexer):
name = 'CSS+Django'