Ticket #424: cfm-v1.diff
| File cfm-v1.diff, 6.5 kB (added by thatch, 6 months ago) |
|---|
-
pygments/lexers/_mapping.py
diff -r 4c8793a0d281 pygments/lexers/_mapping.py
a b 46 46 'CheetahLexer': ('pygments.lexers.templates', 'Cheetah', ('cheetah', 'spitfire'), ('*.tmpl', '*.spt'), ('application/x-cheetah', 'application/x-spitfire')), 47 47 'CheetahXmlLexer': ('pygments.lexers.templates', 'XML+Cheetah', ('xml+cheetah', 'xml+spitfire'), (), ('application/xml+cheetah', 'application/xml+spitfire')), 48 48 'ClojureLexer': ('pygments.lexers.agile', 'Clojure', ('clojure', 'clj'), ('*.clj',), ('text/x-clojure', 'application/x-clojure')), 49 'ColdfusionHtmlLexer': ('pygments.lexers.templates', 'Coldufsion HTML', ('cfm',), ('*.cfm', '*.cfml', '*.cfc'), ('application/x-coldfusion',)), 50 'ColdfusionLexer': ('pygments.lexers.templates', 'cfstatement', ('cfs',), (), ()), 49 51 'CommonLispLexer': ('pygments.lexers.functional', 'Common Lisp', ('common-lisp', 'cl'), ('*.cl', '*.lisp', '*.el'), ('text/x-common-lisp',)), 50 52 'CppLexer': ('pygments.lexers.compiled', 'C++', ('cpp', 'c++'), ('*.cpp', '*.hpp', '*.c++', '*.h++', '*.cc', '*.hh', '*.cxx', '*.hxx'), ('text/x-c++hdr', 'text/x-c++src')), 51 53 'CppObjdumpLexer': ('pygments.lexers.asm', 'cpp-objdump', ('cpp-objdump', 'c++-objdumb', 'cxx-objdump'), ('*.cpp-objdump', '*.c++-objdump', '*.cxx-objdump'), ('text/x-cpp-objdump',)), -
pygments/lexers/templates.py
diff -r 4c8793a0d281 pygments/lexers/templates.py
a b 38 38 'MakoHtmlLexer', 'MakoXmlLexer', 'MakoJavascriptLexer', 39 39 'MakoCssLexer', 'JspLexer', 'CheetahLexer', 'CheetahHtmlLexer', 40 40 'CheetahXmlLexer', 'CheetahJavascriptLexer', 41 'EvoqueLexer', 'EvoqueHtmlLexer', 'EvoqueXmlLexer'] 41 'EvoqueLexer', 'EvoqueHtmlLexer', 'EvoqueXmlLexer', 42 'ColdfusionLexer', 'ColdfusionHtmlLexer'] 42 43 43 44 44 45 class ErbLexer(Lexer): … … 1294 1295 def __init__(self, **options): 1295 1296 super(EvoqueXmlLexer, self).__init__(XmlLexer, EvoqueLexer, 1296 1297 **options) 1298 1299 class ColdfusionLexer(RegexLexer): 1300 """ 1301 Coldfusion statements 1302 """ 1303 name = 'cfstatement' 1304 aliases = ['cfs'] 1305 filenames = [] 1306 mimetypes = [] 1307 flags = re.IGNORECASE | re.MULTILINE 1308 1309 tokens = { 1310 'root': [ 1311 (r'//.*', Comment), 1312 (r'\+\+|--', Operator), 1313 (r'[-+*/^&=!]', Operator), 1314 (r'<=|>=|<|>', Operator), 1315 (r'mod\b', Operator), 1316 (r'(eq|lt|gt|lte|gte|not|is|and|or)\b', Operator), 1317 (r'\|\||&&', Operator), 1318 (r'"', String.Double, 'string'), 1319 # There is a special rule for allowing html in single quoted 1320 # strings, evidently. 1321 (r"'.*?'", String.Single), 1322 (r'\d+', Number), 1323 (r'(if|else|len|var|case|default|break|switch)\b', Keyword), 1324 (r'([A-Za-z_$][A-Za-z0-9_.]*)\s*(\()', bygroups(Name.Function, Punctuation)), 1325 (r'[A-Za-z_$][A-Za-z0-9_.]*', Name.Variable), 1326 (r'[()\[\]{};:,.\\]', Punctuation), 1327 (r'\s+', Text), 1328 ], 1329 'string': [ 1330 (r'""', String.Double), 1331 (r'#.+?#', String.Interp), 1332 (r'[^"#]+', String.Double), 1333 (r'#', String.Double), 1334 (r'"', String.Double, '#pop'), 1335 ], 1336 } 1337 1338 class ColdfusionMarkupLexer(RegexLexer): 1339 """ 1340 Coldfusion markup only 1341 """ 1342 name = 'Coldfusion' 1343 aliases = ['cf'] 1344 filenames = [] 1345 mimetypes = [] 1346 1347 tokens = { 1348 'root': [ 1349 (r'[^<]+', Other), 1350 include('tags'), 1351 (r'<[^<>]*', Other), 1352 ], 1353 'tags': [ 1354 (r'(?s)<!---.*?--->', Comment.Multiline), 1355 (r'(?s)<!--.*?-->', Comment), 1356 (r'<cfoutput.*?>', Name.Builtin, 'cfoutput'), 1357 (r'(?s)(<cfscript.*?>)(.+?)(</cfscript.*?>)', 1358 bygroups(Name.Builtin, using(ColdfusionLexer), Name.Builtin)), 1359 # negative lookbehind is for strings with embedded > 1360 (r'(?s)(</?cf(?:component|include|if|else|elseif|loop|return|' 1361 r'dbinfo|dump|abort|location|invoke|throw|file|savecontent|' 1362 r'mailpart|mail|header|content|zip|image|lock|argument|try|' 1363 r'catch|break|directory|http|set|function|param)\b)(.*?)((?<!\\)>)', 1364 bygroups(Name.Builtin, using(ColdfusionLexer), Name.Builtin)), 1365 ], 1366 'cfoutput': [ 1367 (r'[^#<]+', Other), 1368 (r'(#)(.*?)(#)', bygroups(Punctuation, using(ColdfusionLexer), 1369 Punctuation)), 1370 #(r'<cfoutput.*?>', Name.Builtin, '#push'), 1371 (r'</cfoutput.*?>', Name.Builtin, '#pop'), 1372 include('tags'), 1373 (r'(?s)<[^<>]*', Other), 1374 (r'#', Other), 1375 ], 1376 } 1377 1378 1379 class ColdfusionHtmlLexer(DelegatingLexer): 1380 """ 1381 Coldfusion markup in html 1382 """ 1383 name = 'Coldufsion HTML' 1384 aliases = ['cfm'] 1385 filenames = ['*.cfm', '*.cfml', '*.cfc'] 1386 mimetypes = ['application/x-coldfusion'] 1387 1388 def __init__(self, **options): 1389 super(ColdfusionHtmlLexer, self).__init__(HtmlLexer, ColdfusionMarkupLexer, 1390 **options) 1391 -
(a) /dev/null vs. (b) b/tests/examplefiles/evil.cfm
diff -r 4c8793a0d281 tests/examplefiles/evil.cfm
a b 1 <cfloop list="#expression# #reReplace(expression, "[([\])]", " ")#" delimiters=" +=-*/%##" index="token"> 2 <th<cfif request[resultkey].numErrors neq 0> class="failed"</cfif>>Errors</th> 3 <td class="numeric<cfif request[resultkey].numErrors neq 0> failed</cfif>">#request[resultkey].numErrors#</td> 4 <cfset loc.regex.plugin = "\<td class=""vt id col_0""\>(.*?)\<\/td\>[[:space:]]*\<td class=""vt col_1""([^\>]*)\>(.*?)\<\/td\>"> 5 <cfset loc.r = '<div class="errors-found">prepend firstname error1 append</div>'> 6 <cfreturn '<select name="ModelUsers1[#arguments.property#]($month)" id="ModelUsers1-#arguments.property#-month"><option value="1">January</option><option value="2">February</option><option value="3">March</option><option value="4">April</option><option value="5">May</option><option value="6">June</option><option value="7">July</option><option value="8">August</option><option value="9">September</option><option value="10">October</option><option value="11" selected="selected">November</option><option value="12">December</option></select>'>