Pygments

generic syntax highlighter


Ticket #394: abap-lexer-version4.diff

File abap-lexer-version4.diff, 10.7 kB (added by adsworth, 13 months ago)
  • lexers/_mapping.py

    diff --git a/lexers/_mapping.py b/lexers/_mapping.py
    index 5e743c0..29ff09d 100644
    a b  
    1414""" 
    1515 
    1616LEXERS = { 
     17    'ABAPLexer': ('pygments.lexers.other', 'ABAP', ('abap',), ('*.abap',), ('text/x-abap',)), 
    1718    'ActionScript3Lexer': ('pygments.lexers.web', 'ActionScript 3', ('as3', 'actionscript3'), ('*.as',), ('application/x-actionscript', 'text/x-actionscript', 'text/actionscript')), 
    1819    'ActionScriptLexer': ('pygments.lexers.web', 'ActionScript', ('as', 'actionscript'), ('*.as',), ('application/x-actionscript', 'text/x-actionscript', 'text/actionscript')), 
    1920    'ApacheConfLexer': ('pygments.lexers.text', 'ApacheConf', ('apacheconf', 'aconf', 'apache'), ('.htaccess', 'apache.conf', 'apache2.conf'), ('text/x-apacheconf',)), 
  • lexers/other.py

    diff --git a/lexers/other.py b/lexers/other.py
    index 3f69689..8fe1906 100644
    a b  
    2323__all__ = ['SqlLexer', 'MySqlLexer', 'SqliteConsoleLexer', 'BrainfuckLexer', 
    2424           'BashLexer', 'BatchLexer', 'BefungeLexer', 'RedcodeLexer', 
    2525           'MOOCodeLexer', 'SmalltalkLexer', 'TcshLexer', 'LogtalkLexer', 
    26            'GnuplotLexer', 'PovrayLexer', 'AppleScriptLexer'] 
     26           'GnuplotLexer', 'PovrayLexer', 'AppleScriptLexer', 'ABAPLexer'] 
    2727 
    2828line_re  = re.compile('.*?\n') 
    2929 
     30class ABAPLexer(RegexLexer): 
     31    """ 
     32    Lexer for ABAP. SAP's integrated Language. 
     33    """ 
     34    name = 'ABAP' 
     35    aliases = ['abap'] 
     36    filenames = ['*.abap'] 
     37    mimetypes = ['text/x-abap'] 
     38 
     39    flags = re.IGNORECASE | re.MULTILINE 
     40 
     41    tokens = { 
     42        'common': [ 
     43            (r'\s+', Text), 
     44            (r'^\*.*$', Comment.Single), 
     45            (r'\".*?\n', Comment.Single), 
     46            ], 
     47        'variable-names': [ 
     48            (r'<[\S_]+>', Name.Variable), 
     49            (r'[\w][\w_~]*(?:(\[\])|->\*)?', Name.Variable), 
     50            ], 
     51        'root': [ 
     52            include('common'), 
     53            #function calls 
     54            (r'(CALL\s+(?:BADI|CUSTOMER-FUNCTION|FUNCTION))(\s+)(\'?\S+\'?)', 
     55                bygroups(Keyword, Text, Name.Function)), 
     56            (r'(CALL\s+(?:DIALOG|SCREEN|SUBSCREEN|SELECTION-SCREEN|' 
     57             r'TRANSACTION|TRANSFORMATION))\b', 
     58                Keyword), 
     59            (r'(FORM|PERFORM)(\s+)([\w_]+)', 
     60                bygroups(Keyword, Text, Name.Function)), 
     61            (r'(PERFORM)(\s+)(\()([\w_]+)(\))', 
     62                bygroups(Keyword, Text, Punctuation, Name.Variable, Punctuation )), 
     63            (r'(MODULE)(\s+)(\S+)(\s+)(INPUT|OUTPUT)', 
     64                bygroups(Keyword, Text, Name.Function, Text, Keyword)), 
     65             
     66            # method implementation 
     67            (r'(METHOD)(\s+)([\w_~]+)', 
     68                bygroups(Keyword, Text, Name.Function)), 
     69            # method calls 
     70            (r'(\s+)([\w_\-]+)([=\-]>)([\w_\-~]+)', 
     71                bygroups(Text, Name.Variable, Operator, Name.Function)), 
     72            # call methodnames returning style 
     73            (r'(?<=(=|-)>)([\w_\-~]+)(?=\()', Name.Function), 
     74 
     75            # keywords with dashes in them. 
     76            # these need to be first, because for instance the -ID part 
     77            # of MESSAGE-ID wouldn't get highlighted if MESSAGE was 
     78            # first in the list of keywords. 
     79            (r'(ADD-CORRESPONDING|AUTHORITY-CHECK|' 
     80             r'CLASS-DATA|CLASS-EVENTS|CLASS-METHODS|CLASS-POOL|' 
     81             r'DELETE-ADJACENT|DIVIDE-CORRESPONDING|' 
     82             r'EDITOR-CALL|ENHANCEMENT-POINT|ENHANCEMENT-SECTION|EXIT-COMMAND|' 
     83             r'FIELD-GROUPS|FIELD-SYMBOLS|FUNCTION-POOL|' 
     84             r'INTERFACE-POOL|INVERTED-DATE|' 
     85             r'LOAD-OF-PROGRAM|LOG-POINT|' 
     86             r'MESSAGE-ID|MOVE-CORRESPONDING|MULTIPLY-CORRESPONDING|' 
     87             r'NEW-LINE|NEW-PAGE|NEW-SECTION|NO-EXTENSION|' 
     88             r'OUTPUT-LENGTH|PRINT-CONTROL|' 
     89             r'SELECT-OPTIONS|START-OF-SELECTION|SUBTRACT-CORRESPONDING|' 
     90             r'SYNTAX-CHECK|SYSTEM-EXCEPTIONS|' 
     91             r'TYPE-POOL|TYPE-POOLS' 
     92             r')\b', Keyword), 
     93 
     94             # keyword kombinations  
     95            (r'CREATE\s+(PUBLIC|PRIVATE|DATA|OBJECT)|' 
     96             r'((PUBLIC|PRIVATE|PROTECTED)\s+SECTION|' 
     97             r'(TYPE|LIKE)(\s+(LINE\s+OF|REF\s+TO|' 
     98             r'(SORTED|STANDARD|HASHED)\s+TABLE\s+OF))?|' 
     99             r'FROM\s+(DATABASE|MEMORY)|CALL\s+METHOD|' 
     100             r'(GROUP|ORDER) BY|HAVING|SEPARATED BY|' 
     101             r'GET\s+(BADI|BIT|CURSOR|DATASET|LOCALE|PARAMETER|' 
     102                      r'PF-STATUS|(PROPERTY|REFERENCE)\s+OF|' 
     103                      r'RUN\s+TIME|TIME\s+(STAMP)?)?|' 
     104             r'SET\s+(BIT|BLANK\s+LINES|COUNTRY|CURSOR|DATASET|EXTENDED\s+CHECK|' 
     105                      r'HANDLER|HOLD\s+DATA|LANGUAGE|LEFT\s+SCROLL-BOUNDARY|' 
     106                      r'LOCALE|MARGIN|PARAMETER|PF-STATUS|PROPERTY\s+OF|' 
     107                      r'RUN\s+TIME\s+(ANALYZER|CLOCK\s+RESOLUTION)|SCREEN|' 
     108                      r'TITLEBAR|UPADTE\s+TASK\s+LOCAL|USER-COMMAND)|' 
     109             r'CONVERT\s+((INVERTED-)?DATE|TIME|TIME\s+STAMP|TEXT)|' 
     110             r'(CLOSE|OPEN)\s+(DATASET|CURSOR)|' 
     111             r'(TO|FROM)\s+(DATA BUFFER|INTERNAL TABLE|MEMORY ID|' 
     112                            r'DATABASE|SHARED\s+(MEMORY|BUFFER))|' 
     113             r'DESCRIBE\s+(DISTANCE\s+BETWEEN|FIELD|LIST|TABLE)|' 
     114             r'FREE\s(MEMORY|OBJECT)?|' 
     115             r'PROCESS\s+(BEFORE\s+OUTPUT|AFTER\s+INPUT|' 
     116                          r'ON\s+(VALUE-REQUEST|HELP-REQUEST))|' 
     117             r'AT\s+(LINE-SELECTION|USER-COMMAND|END\s+OF|NEW)|' 
     118             r'AT\s+SELECTION-SCREEN(\s+(ON(\s+(BLOCK|(HELP|VALUE)-REQUEST\s+FOR|' 
     119                                     r'END\s+OF|RADIOBUTTON\s+GROUP))?|OUTPUT))?|' 
     120             r'SELECTION-SCREEN:?\s+((BEGIN|END)\s+OF\s+((TABBED\s+)?BLOCK|LINE|' 
     121                                     r'SCREEN)|COMMENT|FUNCTION\s+KEY|' 
     122                                     r'INCLUDE\s+BLOCKS|POSITION|PUSHBUTTON|' 
     123                                     r'SKIP|ULINE)|' 
     124             r'LEAVE\s+(LIST-PROCESSING|PROGRAM|SCREEN|' 
     125                        r'TO LIST-PROCESSING|TO TRANSACTION)' 
     126             r'(ENDING|STARTING)\s+AT|' 
     127             r'FORMAT\s+(COLOR|INTENSIFIED|INVERSE|HOTSPOT|INPUT|FRAMES|RESET)|' 
     128             r'AS\s+(CHECKBOX|SUBSCREEN|WINDOW)|' 
     129             r'WITH\s+(((NON-)?UNIQUE)?\s+KEY|FRAME)|' 
     130             r'(BEGIN|END)\s+OF|' 
     131             r'DELETE(\s+ADJACENT\s+DUPLICATES\sFROM)?|' 
     132             r'COMPARING(\s+ALL\s+FIELDS)?|' 
     133             r'INSERT(\s+INITIAL\s+LINE\s+INTO|\s+LINES\s+OF)?|' 
     134             r'IN\s+((BYTE|CHARACTER)\s+MODE|PROGRAM)|' 
     135             r'END-OF-(DEFINITION|PAGE|SELECTION)|' 
     136             r'WITH\s+FRAME(\s+TITLE)|' 
     137 
     138             # simple kombinations 
     139             r'AND\s+(MARK|RETURN)|CLIENT\s+SPECIFIED|CORRESPONDING\s+FIELDS\s+OF|' 
     140             r'IF\s+FOUND|FOR\s+EVENT|INHERITING\s+FROM|LEAVE\s+TO\s+SCREEN|' 
     141             r'LOOP\s+AT\s+(SCREEN)?|LOWER\s+CASE|MATCHCODE\s+OBJECT|MODIF\s+ID|' 
     142             r'MODIFY\s+SCREEN|NESTING\s+LEVEL|NO\s+INTERVALS|OF\s+STRUCTURE|' 
     143             r'RADIOBUTTON\s+GROUP|RANGE\s+OF|REF\s+TO|SUPPRESS DIALOG|' 
     144             r'TABLE\s+OF|UPPER\s+CASE|TRANSPORTING\s+NO\s+FIELDS|' 
     145             r'VALUE\s+CHECK|VISIBLE\s+LENGTH|HEADER\s+LINE)\b', Keyword), 
     146 
     147            # single word keywords. 
     148            (r'(^|(?<=(\s|\.)))(ABBREVIATED|ADD|ALIASES|APPEND|ASSERT|' 
     149             r'ASSIGN(ING)?|AT(\s+FIRST)?|' 
     150             r'BACK|BLOCK|BREAK-POINT|' 
     151             r'CASE|CATCH|CHANGING|CHECK|CLASS|CLEAR|COLLECT|COLOR|COMMIT|' 
     152             r'CREATE|COMMUNICATION|COMPONENTS?|COMPUTE|CONCATENATE|CONDENSE|' 
     153             r'CONSTANTS|CONTEXTS|CONTINUE|CONTROLS|' 
     154             r'DATA|DECIMALS|DEFAULT|DEFINE|DEFINITION|DEFERRED|DEMAND|' 
     155             r'DETAIL|DIRECTORY|DIVIDE|DO|' 
     156             r'ELSE(IF)?|ENDAT|ENDCASE|ENDCLASS|ENDDO|ENDFORM|ENDFUNCTION|' 
     157             r'ENDIF|ENDLOOP|ENDMETHOD|ENDMODULE|ENDSELECT|ENDTRY|' 
     158             r'ENHANCEMENT|EVENTS|EXCEPTIONS|EXIT|EXPORT|EXPORTING|EXTRACT|' 
     159             r'FETCH|FIELDS?|FIND|FOR|FORM|FORMAT|FREE|FROM|' 
     160             r'HIDE|' 
     161             r'ID|IF|IMPORT|IMPLEMENTATION|IMPORTING|IN|INCLUDE|INCLUDING|' 
     162             r'INDEX|INFOTYPES|INITIALIZATION|INTERFACE|INTERFACES|INTO|' 
     163             r'LENGTH|LINES|LOAD|LOCAL|' 
     164             r'JOIN|' 
     165             r'KEY|' 
     166             r'MAXIMUM|MESSAGE|METHOD[S]?|MINIMUM|MODULE|MODIFY|MOVE|MULTIPLY|' 
     167             r'NODES|' 
     168             r'OBLIGATORY|OF|OFF|ON|OVERLAY|' 
     169             r'PACK|PARAMETERS|PERCENTAGE|POSITION|PROGRAM|PROVIDE|PUBLIC|PUT|' 
     170             r'RAISE|RAISING|RANGES|READ|RECEIVE|REFRESH|REJECT|REPORT|RESERVE|' 
     171             r'RESUME|RETRY|RETURN|RETURNING|RIGHT|ROLLBACK|' 
     172             r'SCROLL|SEARCH|SELECT|SHIFT|SINGLE|SKIP|SORT|SPLIT|STATICS|STOP|' 
     173             r'SUBMIT|SUBTRACT|SUM|SUMMARY|SUMMING|SUPPLY|' 
     174             r'TABLE|TABLES|TIMES|TITLE|TO|TOP-OF-PAGE|TRANSFER|TRANSLATE|TRY|TYPES|' 
     175             r'ULINE|UNDER|UNPACK|UPDATE|USING|' 
     176             r'VALUE|VALUES|VIA|' 
     177             r'WAIT|WHEN|WHERE|WHILE|WITH|WINDOW|WRITE)\b', Keyword), 
     178 
     179             # builtins 
     180            (r'(abs|acos|asin|atan|' 
     181             r'boolc|boolx|bit_set|' 
     182             r'char_off|charlen|ceil|cmax|cmin|condense|contains|' 
     183             r'contains_any_of|contains_any_not_of|concat_lines_of|cos|cosh|' 
     184             r'count|count_any_of|count_any_not_of|' 
     185             r'dbmaxlen|distance|' 
     186             r'escape|exp|' 
     187             r'find|find_end|find_any_of|find_any_not_of|floor|frac|from_mixed|' 
     188             r'insert|' 
     189             r'lines|log|log10|' 
     190             r'match|matches|' 
     191             r'nmax|nmin|numofchar|' 
     192             r'repeat|replace|rescale|reverse|round|' 
     193             r'segment|shift_left|shift_right|sign|sin|sinh|sqrt|strlen|' 
     194             r'substring|substring_after|substring_from|substring_before|substring_to|' 
     195             r'tan|tanh|to_upper|to_lower|to_mixed|translate|trunc|' 
     196             r'xstrlen)(\()\b', bygroups(Name.Builtin, Punctuation)), 
     197 
     198            (r'&[0-9]', Name), 
     199            (r'[0-9]+', Number.Integer), 
     200 
     201            # operators which look like variable names before 
     202            # parsing variable names. 
     203            (r'(?<=(\s|.))(AND|EQ|NE|GT|LT|GE|LE|CO|CN|CA|NA|CS|NOT|NS|CP|NP|' 
     204             r'BYTE-CO|BYTE-CN|BYTE-CA|BYTE-NA|BYTE-CS|BYTE-NS|' 
     205             r'IS\s+(NOT\s+)?(INITIAL|ASSIGNED|REQUESTED|BOUND))\b', Operator), 
     206              
     207            include('variable-names'), 
     208             
     209            # standard oparators after variable names, 
     210            # because < and > are part of field symbols. 
     211            (r'[?*<>=\-+]', Operator), 
     212            (r"'(''|[^'])*'", String.Single), 
     213            (r'[/;:()\[\],\.]', Punctuation) 
     214        ], 
     215    } 
    30216 
    31217class SqlLexer(RegexLexer): 
    32218    """