Pygments

generic syntax highlighter


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  
    4646    'CheetahLexer': ('pygments.lexers.templates', 'Cheetah', ('cheetah', 'spitfire'), ('*.tmpl', '*.spt'), ('application/x-cheetah', 'application/x-spitfire')), 
    4747    'CheetahXmlLexer': ('pygments.lexers.templates', 'XML+Cheetah', ('xml+cheetah', 'xml+spitfire'), (), ('application/xml+cheetah', 'application/xml+spitfire')), 
    4848    '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',), (), ()), 
    4951    'CommonLispLexer': ('pygments.lexers.functional', 'Common Lisp', ('common-lisp', 'cl'), ('*.cl', '*.lisp', '*.el'), ('text/x-common-lisp',)), 
    5052    'CppLexer': ('pygments.lexers.compiled', 'C++', ('cpp', 'c++'), ('*.cpp', '*.hpp', '*.c++', '*.h++', '*.cc', '*.hh', '*.cxx', '*.hxx'), ('text/x-c++hdr', 'text/x-c++src')), 
    5153    '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  
    3838           'MakoHtmlLexer', 'MakoXmlLexer', 'MakoJavascriptLexer', 
    3939           'MakoCssLexer', 'JspLexer', 'CheetahLexer', 'CheetahHtmlLexer', 
    4040           'CheetahXmlLexer', 'CheetahJavascriptLexer', 
    41            'EvoqueLexer', 'EvoqueHtmlLexer', 'EvoqueXmlLexer'] 
     41           'EvoqueLexer', 'EvoqueHtmlLexer', 'EvoqueXmlLexer', 
     42           'ColdfusionLexer', 'ColdfusionHtmlLexer'] 
    4243 
    4344 
    4445class ErbLexer(Lexer): 
     
    12941295    def __init__(self, **options): 
    12951296        super(EvoqueXmlLexer, self).__init__(XmlLexer, EvoqueLexer, 
    12961297                                             **options) 
     1298 
     1299class 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 
     1338class 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 
     1379class 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>'>