codekingpro/portable-devtools
114k
1"""2 pygments.lexers.business3 ~~~~~~~~~~~~~~~~~~~~~~~~4 5 Lexers for "business-oriented" languages.6 7 :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.8 :license: BSD, see LICENSE for details.9"""10 11import re12 13from pygments.lexer import RegexLexer, include, words, bygroups14from pygments.token import Text, Comment, Operator, Keyword, Name, String, \15 Number, Punctuation, Error, Whitespace16 17from pygments.lexers._openedge_builtins import OPENEDGEKEYWORDS18 19__all__ = ['CobolLexer', 'CobolFreeformatLexer', 'ABAPLexer', 'OpenEdgeLexer',20 'GoodDataCLLexer', 'MaqlLexer']21 22 23class CobolLexer(RegexLexer):24 """25 Lexer for OpenCOBOL code.26 """27 name = 'COBOL'28 aliases = ['cobol']29 filenames = ['*.cob', '*.COB', '*.cpy', '*.CPY']30 mimetypes = ['text/x-cobol']31 url = 'https://en.wikipedia.org/wiki/COBOL'32 version_added = '1.6'33 34 flags = re.IGNORECASE | re.MULTILINE35 36 # Data Types: by PICTURE and USAGE37 # Operators: **, *, +, -, /, <, >, <=, >=, =, <>38 # Logical (?): NOT, AND, OR39 40 # Reserved words:41 # http://opencobol.add1tocobol.com/#reserved-words42 # Intrinsics:43 # http://opencobol.add1tocobol.com/#does-opencobol-implement-any-intrinsic-functions44 45 tokens = {46 'root': [47 include('comment'),48 include('strings'),49 include('core'),50 include('nums'),51 (r'[a-z0-9]([\w\-]*[a-z0-9]+)?', Name.Variable),52 # (r'[\s]+', Text),53 (r'[ \t]+', Whitespace),54 ],55 'comment': [56 (r'(^.{6}[*/].*\n|^.{6}|\*>.*\n)', Comment),57 ],58 'core': [59 # Figurative constants60 (r'(^|(?<=[^\w\-]))(ALL\s+)?'61 r'((ZEROES)|(HIGH-VALUE|LOW-VALUE|QUOTE|SPACE|ZERO)(S)?)'62 r'\s*($|(?=[^\w\-]))',63 Name.Constant),64 65 # Reserved words STATEMENTS and other bolds66 (words((67 'ACCEPT', 'ADD', 'ALLOCATE', 'CALL', 'CANCEL', 'CLOSE', 'COMPUTE',68 'CONFIGURATION', 'CONTINUE', 'DATA', 'DELETE', 'DISPLAY', 'DIVIDE',69 'DIVISION', 'ELSE', 'END', 'END-ACCEPT',70 'END-ADD', 'END-CALL', 'END-COMPUTE', 'END-DELETE', 'END-DISPLAY',71 'END-DIVIDE', 'END-EVALUATE', 'END-IF', 'END-MULTIPLY', 'END-OF-PAGE',72 'END-PERFORM', 'END-READ', 'END-RETURN', 'END-REWRITE', 'END-SEARCH',73 'END-START', 'END-STRING', 'END-SUBTRACT', 'END-UNSTRING', 'END-WRITE',74 'ENVIRONMENT', 'EVALUATE', 'EXIT', 'FD', 'FILE', 'FILE-CONTROL', 'FOREVER',75 'FREE', 'GENERATE', 'GO', 'GOBACK', 'IDENTIFICATION', 'IF', 'INITIALIZE',76 'INITIATE', 'INPUT-OUTPUT', 'INSPECT', 'INVOKE', 'I-O-CONTROL', 'LINKAGE',77 'LOCAL-STORAGE', 'MERGE', 'MOVE', 'MULTIPLY', 'OPEN', 'PERFORM',78 'PROCEDURE', 'PROGRAM-ID', 'RAISE', 'READ', 'RELEASE', 'RESUME',79 'RETURN', 'REWRITE', 'SCREEN', 'SD', 'SEARCH', 'SECTION', 'SET',80 'SORT', 'START', 'STOP', 'STRING', 'SUBTRACT', 'SUPPRESS',81 'TERMINATE', 'THEN', 'UNLOCK', 'UNSTRING', 'USE', 'VALIDATE',82 'WORKING-STORAGE', 'WRITE'), prefix=r'(^|(?<=[^\w\-]))',83 suffix=r'\s*($|(?=[^\w\-]))'),84 Keyword.Reserved),85 86 # Reserved words87 (words((88 'ACCESS', 'ADDRESS', 'ADVANCING', 'AFTER', 'ALL',89 'ALPHABET', 'ALPHABETIC', 'ALPHABETIC-LOWER', 'ALPHABETIC-UPPER',90 'ALPHANUMERIC', 'ALPHANUMERIC-EDITED', 'ALSO', 'ALTER', 'ALTERNATE'91 'ANY', 'ARE', 'AREA', 'AREAS', 'ARGUMENT-NUMBER', 'ARGUMENT-VALUE', 'AS',92 'ASCENDING', 'ASSIGN', 'AT', 'AUTO', 'AUTO-SKIP', 'AUTOMATIC',93 'AUTOTERMINATE', 'BACKGROUND-COLOR', 'BASED', 'BEEP', 'BEFORE', 'BELL',94 'BLANK', 'BLINK', 'BLOCK', 'BOTTOM', 'BY', 'BYTE-LENGTH', 'CHAINING',95 'CHARACTER', 'CHARACTERS', 'CLASS', 'CODE', 'CODE-SET', 'COL',96 'COLLATING', 'COLS', 'COLUMN', 'COLUMNS', 'COMMA', 'COMMAND-LINE',97 'COMMIT', 'COMMON', 'CONSTANT', 'CONTAINS', 'CONTENT', 'CONTROL',98 'CONTROLS', 'CONVERTING', 'COPY', 'CORR', 'CORRESPONDING', 'COUNT', 'CRT',99 'CURRENCY', 'CURSOR', 'CYCLE', 'DATE', 'DAY', 'DAY-OF-WEEK', 'DE',100 'DEBUGGING', 'DECIMAL-POINT', 'DECLARATIVES', 'DEFAULT', 'DELIMITED',101 'DELIMITER', 'DEPENDING', 'DESCENDING', 'DETAIL', 'DISK',102 'DOWN', 'DUPLICATES', 'DYNAMIC', 'EBCDIC',103 'ENTRY', 'ENVIRONMENT-NAME', 'ENVIRONMENT-VALUE', 'EOL', 'EOP',104 'EOS', 'ERASE', 'ERROR', 'ESCAPE', 'EXCEPTION',105 'EXCLUSIVE', 'EXTEND', 'EXTERNAL', 'FILE-ID', 'FILLER', 'FINAL',106 'FIRST', 'FIXED', 'FLOAT-LONG', 'FLOAT-SHORT',107 'FOOTING', 'FOR', 'FOREGROUND-COLOR', 'FORMAT', 'FROM', 'FULL',108 'FUNCTION', 'FUNCTION-ID', 'GIVING', 'GLOBAL', 'GROUP',109 'HEADING', 'HIGHLIGHT', 'I-O', 'ID',110 'IGNORE', 'IGNORING', 'IN', 'INDEX', 'INDEXED', 'INDICATE',111 'INITIAL', 'INITIALIZED', 'INPUT', 'INTO', 'INTRINSIC', 'INVALID',112 'IS', 'JUST', 'JUSTIFIED', 'KEY', 'LABEL',113 'LAST', 'LEADING', 'LEFT', 'LENGTH', 'LIMIT', 'LIMITS', 'LINAGE',114 'LINAGE-COUNTER', 'LINE', 'LINES', 'LOCALE', 'LOCK',115 'LOWLIGHT', 'MANUAL', 'MEMORY', 'MINUS', 'MODE', 'MULTIPLE',116 'NATIONAL', 'NATIONAL-EDITED', 'NATIVE', 'NEGATIVE', 'NEXT', 'NO',117 'NULL', 'NULLS', 'NUMBER', 'NUMBERS', 'NUMERIC', 'NUMERIC-EDITED',118 'OBJECT-COMPUTER', 'OCCURS', 'OF', 'OFF', 'OMITTED', 'ON', 'ONLY',119 'OPTIONAL', 'ORDER', 'ORGANIZATION', 'OTHER', 'OUTPUT', 'OVERFLOW',120 'OVERLINE', 'PACKED-DECIMAL', 'PADDING', 'PAGE', 'PARAGRAPH',121 'PLUS', 'POINTER', 'POSITION', 'POSITIVE', 'PRESENT', 'PREVIOUS',122 'PRINTER', 'PRINTING', 'PROCEDURE-POINTER', 'PROCEDURES',123 'PROCEED', 'PROGRAM', 'PROGRAM-POINTER', 'PROMPT', 'QUOTE',124 'QUOTES', 'RANDOM', 'RD', 'RECORD', 'RECORDING', 'RECORDS', 'RECURSIVE',125 'REDEFINES', 'REEL', 'REFERENCE', 'RELATIVE', 'REMAINDER', 'REMOVAL',126 'RENAMES', 'REPLACING', 'REPORT', 'REPORTING', 'REPORTS', 'REPOSITORY',127 'REQUIRED', 'RESERVE', 'RETURNING', 'REVERSE-VIDEO', 'REWIND',128 'RIGHT', 'ROLLBACK', 'ROUNDED', 'RUN', 'SAME', 'SCROLL',129 'SECURE', 'SEGMENT-LIMIT', 'SELECT', 'SENTENCE', 'SEPARATE',130 'SEQUENCE', 'SEQUENTIAL', 'SHARING', 'SIGN', 'SIGNED', 'SIGNED-INT',131 'SIGNED-LONG', 'SIGNED-SHORT', 'SIZE', 'SORT-MERGE', 'SOURCE',132 'SOURCE-COMPUTER', 'SPECIAL-NAMES', 'STANDARD',133 'STANDARD-1', 'STANDARD-2', 'STATUS', 'SUBKEY', 'SUM',134 'SYMBOLIC', 'SYNC', 'SYNCHRONIZED', 'TALLYING', 'TAPE',135 'TEST', 'THROUGH', 'THRU', 'TIME', 'TIMES', 'TO', 'TOP', 'TRAILING',136 'TRANSFORM', 'TYPE', 'UNDERLINE', 'UNIT', 'UNSIGNED',137 'UNSIGNED-INT', 'UNSIGNED-LONG', 'UNSIGNED-SHORT', 'UNTIL', 'UP',138 'UPDATE', 'UPON', 'USAGE', 'USING', 'VALUE', 'VALUES', 'VARYING',139 'WAIT', 'WHEN', 'WITH', 'WORDS', 'YYYYDDD', 'YYYYMMDD'),140 prefix=r'(^|(?<=[^\w\-]))', suffix=r'\s*($|(?=[^\w\-]))'),141 Keyword.Pseudo),142 143 # inactive reserved words144 (words((145 'ACTIVE-CLASS', 'ALIGNED', 'ANYCASE', 'ARITHMETIC', 'ATTRIBUTE',146 'B-AND', 'B-NOT', 'B-OR', 'B-XOR', 'BIT', 'BOOLEAN', 'CD', 'CENTER',147 'CF', 'CH', 'CHAIN', 'CLASS-ID', 'CLASSIFICATION', 'COMMUNICATION',148 'CONDITION', 'DATA-POINTER', 'DESTINATION', 'DISABLE', 'EC', 'EGI',149 'EMI', 'ENABLE', 'END-RECEIVE', 'ENTRY-CONVENTION', 'EO', 'ESI',150 'EXCEPTION-OBJECT', 'EXPANDS', 'FACTORY', 'FLOAT-BINARY-16',151 'FLOAT-BINARY-34', 'FLOAT-BINARY-7', 'FLOAT-DECIMAL-16',152 'FLOAT-DECIMAL-34', 'FLOAT-EXTENDED', 'FORMAT', 'FUNCTION-POINTER',153 'GET', 'GROUP-USAGE', 'IMPLEMENTS', 'INFINITY', 'INHERITS',154 'INTERFACE', 'INTERFACE-ID', 'INVOKE', 'LC_ALL', 'LC_COLLATE',155 'LC_CTYPE', 'LC_MESSAGES', 'LC_MONETARY', 'LC_NUMERIC', 'LC_TIME',156 'LINE-COUNTER', 'MESSAGE', 'METHOD', 'METHOD-ID', 'NESTED', 'NONE',157 'NORMAL', 'OBJECT', 'OBJECT-REFERENCE', 'OPTIONS', 'OVERRIDE',158 'PAGE-COUNTER', 'PF', 'PH', 'PROPERTY', 'PROTOTYPE', 'PURGE',159 'QUEUE', 'RAISE', 'RAISING', 'RECEIVE', 'RELATION', 'REPLACE',160 'REPRESENTS-NOT-A-NUMBER', 'RESET', 'RESUME', 'RETRY', 'RF', 'RH',161 'SECONDS', 'SEGMENT', 'SELF', 'SEND', 'SOURCES', 'STATEMENT',162 'STEP', 'STRONG', 'SUB-QUEUE-1', 'SUB-QUEUE-2', 'SUB-QUEUE-3',163 'SUPER', 'SYMBOL', 'SYSTEM-DEFAULT', 'TABLE', 'TERMINAL', 'TEXT',164 'TYPEDEF', 'UCS-4', 'UNIVERSAL', 'USER-DEFAULT', 'UTF-16', 'UTF-8',165 'VAL-STATUS', 'VALID', 'VALIDATE', 'VALIDATE-STATUS'),166 prefix=r'(^|(?<=[^\w\-]))', suffix=r'\s*($|(?=[^\w\-]))'),167 Error),168 169 # Data Types170 (r'(^|(?<=[^\w\-]))'171 r'(PIC\s+.+?(?=(\s|\.\s))|PICTURE\s+.+?(?=(\s|\.\s))|'172 r'(COMPUTATIONAL)(-[1-5X])?|(COMP)(-[1-5X])?|'173 r'BINARY-C-LONG|'174 r'BINARY-CHAR|BINARY-DOUBLE|BINARY-LONG|BINARY-SHORT|'175 r'BINARY)\s*($|(?=[^\w\-]))', Keyword.Type),176 177 # Operators178 (r'(\*\*|\*|\+|-|/|<=|>=|<|>|==|/=|=)', Operator),179 180 # (r'(::)', Keyword.Declaration),181 182 (r'([(),;:&%.])', Punctuation),183 184 # Intrinsics185 (r'(^|(?<=[^\w\-]))(ABS|ACOS|ANNUITY|ASIN|ATAN|BYTE-LENGTH|'186 r'CHAR|COMBINED-DATETIME|CONCATENATE|COS|CURRENT-DATE|'187 r'DATE-OF-INTEGER|DATE-TO-YYYYMMDD|DAY-OF-INTEGER|DAY-TO-YYYYDDD|'188 r'EXCEPTION-(?:FILE|LOCATION|STATEMENT|STATUS)|EXP10|EXP|E|'189 r'FACTORIAL|FRACTION-PART|INTEGER-OF-(?:DATE|DAY|PART)|INTEGER|'190 r'LENGTH|LOCALE-(?:DATE|TIME(?:-FROM-SECONDS)?)|LOG(?:10)?|'191 r'LOWER-CASE|MAX|MEAN|MEDIAN|MIDRANGE|MIN|MOD|NUMVAL(?:-C)?|'192 r'ORD(?:-MAX|-MIN)?|PI|PRESENT-VALUE|RANDOM|RANGE|REM|REVERSE|'193 r'SECONDS-FROM-FORMATTED-TIME|SECONDS-PAST-MIDNIGHT|SIGN|SIN|SQRT|'194 r'STANDARD-DEVIATION|STORED-CHAR-LENGTH|SUBSTITUTE(?:-CASE)?|'195 r'SUM|TAN|TEST-DATE-YYYYMMDD|TEST-DAY-YYYYDDD|TRIM|'196 r'UPPER-CASE|VARIANCE|WHEN-COMPILED|YEAR-TO-YYYY)\s*'197 r'($|(?=[^\w\-]))', Name.Function),198 199 # Booleans200 (r'(^|(?<=[^\w\-]))(true|false)\s*($|(?=[^\w\-]))', Name.Builtin),201 # Comparing Operators202 (r'(^|(?<=[^\w\-]))(equal|equals|ne|lt|le|gt|ge|'203 r'greater|less|than|not|and|or)\s*($|(?=[^\w\-]))', Operator.Word),204 ],205 206 # \"[^\"\n]*\"|\'[^\'\n]*\'207 'strings': [208 # apparently strings can be delimited by EOL if they are continued209 # in the next line210 (r'"[^"\n]*("|\n)', String.Double),211 (r"'[^'\n]*('|\n)", String.Single),212 ],213 214 'nums': [215 (r'\d+(\s*|\.$|$)', Number.Integer),216 (r'[+-]?\d*\.\d+(E[-+]?\d+)?', Number.Float),217 (r'[+-]?\d+\.\d*(E[-+]?\d+)?', Number.Float),218 ],219 }220 221 222class CobolFreeformatLexer(CobolLexer):223 """224 Lexer for Free format OpenCOBOL code.225 """226 name = 'COBOLFree'227 aliases = ['cobolfree']228 filenames = ['*.cbl', '*.CBL']229 mimetypes = []230 url = 'https://opencobol.add1tocobol.com'231 version_added = '1.6'232 233 flags = re.IGNORECASE | re.MULTILINE234 235 tokens = {236 'comment': [237 (r'(\*>.*\n|^\w*\*.*$)', Comment),238 ],239 }240 241 242class ABAPLexer(RegexLexer):243 """244 Lexer for ABAP, SAP's integrated language.245 """246 name = 'ABAP'247 aliases = ['abap']248 filenames = ['*.abap', '*.ABAP']249 mimetypes = ['text/x-abap']250 url = 'https://community.sap.com/topics/abap'251 version_added = '1.1'252 253 flags = re.IGNORECASE | re.MULTILINE254 255 tokens = {256 'common': [257 (r'\s+', Whitespace),258 (r'^\*.*$', Comment.Single),259 (r'\".*?\n', Comment.Single),260 (r'##\w+', Comment.Special),261 ],262 'variable-names': [263 (r'<\S+>', Name.Variable),264 (r'\w[\w~]*(?:(\[\])|->\*)?', Name.Variable),265 ],266 'root': [267 include('common'),268 # function calls269 (r'CALL\s+(?:BADI|CUSTOMER-FUNCTION|FUNCTION)',270 Keyword),271 (r'(CALL\s+(?:DIALOG|SCREEN|SUBSCREEN|SELECTION-SCREEN|'272 r'TRANSACTION|TRANSFORMATION))\b',273 Keyword),274 (r'(FORM|PERFORM)(\s+)(\w+)',275 bygroups(Keyword, Whitespace, Name.Function)),276 (r'(PERFORM)(\s+)(\()(\w+)(\))',277 bygroups(Keyword, Whitespace, Punctuation, Name.Variable, Punctuation)),278 (r'(MODULE)(\s+)(\S+)(\s+)(INPUT|OUTPUT)',279 bygroups(Keyword, Whitespace, Name.Function, Whitespace, Keyword)),280 281 # method implementation282 (r'(METHOD)(\s+)([\w~]+)',283 bygroups(Keyword, Whitespace, Name.Function)),284 # method calls285 (r'(\s+)([\w\-]+)([=\-]>)([\w\-~]+)',286 bygroups(Whitespace, Name.Variable, Operator, Name.Function)),287 # call methodnames returning style288 (r'(?<=(=|-)>)([\w\-~]+)(?=\()', Name.Function),289 290 # text elements291 (r'(TEXT)(-)(\d{3})',292 bygroups(Keyword, Punctuation, Number.Integer)),293 (r'(TEXT)(-)(\w{3})',294 bygroups(Keyword, Punctuation, Name.Variable)),295 296 # keywords with dashes in them.297 # these need to be first, because for instance the -ID part298 # of MESSAGE-ID wouldn't get highlighted if MESSAGE was299 # first in the list of keywords.300 (r'(ADD-CORRESPONDING|AUTHORITY-CHECK|'301 r'CLASS-DATA|CLASS-EVENTS|CLASS-METHODS|CLASS-POOL|'302 r'DELETE-ADJACENT|DIVIDE-CORRESPONDING|'303 r'EDITOR-CALL|ENHANCEMENT-POINT|ENHANCEMENT-SECTION|EXIT-COMMAND|'304 r'FIELD-GROUPS|FIELD-SYMBOLS|FIELD-SYMBOL|FUNCTION-POOL|'305 r'INTERFACE-POOL|INVERTED-DATE|'306 r'LOAD-OF-PROGRAM|LOG-POINT|'307 r'MESSAGE-ID|MOVE-CORRESPONDING|MULTIPLY-CORRESPONDING|'308 r'NEW-LINE|NEW-PAGE|NEW-SECTION|NO-EXTENSION|'309 r'OUTPUT-LENGTH|PRINT-CONTROL|'310 r'SELECT-OPTIONS|START-OF-SELECTION|SUBTRACT-CORRESPONDING|'311 r'SYNTAX-CHECK|SYSTEM-EXCEPTIONS|'312 r'TYPE-POOL|TYPE-POOLS|NO-DISPLAY'313 r')\b', Keyword),314 315 # keyword kombinations316 (r'(?<![-\>])(CREATE\s+(PUBLIC|PRIVATE|DATA|OBJECT)|'317 r'(PUBLIC|PRIVATE|PROTECTED)\s+SECTION|'318 r'(TYPE|LIKE)\s+((LINE\s+OF|REF\s+TO|'319 r'(SORTED|STANDARD|HASHED)\s+TABLE\s+OF))?|'320 r'FROM\s+(DATABASE|MEMORY)|CALL\s+METHOD|'321 r'(GROUP|ORDER) BY|HAVING|SEPARATED BY|'322 r'GET\s+(BADI|BIT|CURSOR|DATASET|LOCALE|PARAMETER|'323 r'PF-STATUS|(PROPERTY|REFERENCE)\s+OF|'324 r'RUN\s+TIME|TIME\s+(STAMP)?)?|'325 r'SET\s+(BIT|BLANK\s+LINES|COUNTRY|CURSOR|DATASET|EXTENDED\s+CHECK|'326 r'HANDLER|HOLD\s+DATA|LANGUAGE|LEFT\s+SCROLL-BOUNDARY|'327 r'LOCALE|MARGIN|PARAMETER|PF-STATUS|PROPERTY\s+OF|'328 r'RUN\s+TIME\s+(ANALYZER|CLOCK\s+RESOLUTION)|SCREEN|'329 r'TITLEBAR|UPADTE\s+TASK\s+LOCAL|USER-COMMAND)|'330 r'CONVERT\s+((INVERTED-)?DATE|TIME|TIME\s+STAMP|TEXT)|'331 r'(CLOSE|OPEN)\s+(DATASET|CURSOR)|'332 r'(TO|FROM)\s+(DATA BUFFER|INTERNAL TABLE|MEMORY ID|'333 r'DATABASE|SHARED\s+(MEMORY|BUFFER))|'334 r'DESCRIBE\s+(DISTANCE\s+BETWEEN|FIELD|LIST|TABLE)|'335 r'FREE\s(MEMORY|OBJECT)?|'336 r'PROCESS\s+(BEFORE\s+OUTPUT|AFTER\s+INPUT|'337 r'ON\s+(VALUE-REQUEST|HELP-REQUEST))|'338 r'AT\s+(LINE-SELECTION|USER-COMMAND|END\s+OF|NEW)|'339 r'AT\s+SELECTION-SCREEN(\s+(ON(\s+(BLOCK|(HELP|VALUE)-REQUEST\s+FOR|'340 r'END\s+OF|RADIOBUTTON\s+GROUP))?|OUTPUT))?|'341 r'SELECTION-SCREEN:?\s+((BEGIN|END)\s+OF\s+((TABBED\s+)?BLOCK|LINE|'342 r'SCREEN)|COMMENT|FUNCTION\s+KEY|'343 r'INCLUDE\s+BLOCKS|POSITION|PUSHBUTTON|'344 r'SKIP|ULINE)|'345 r'LEAVE\s+(LIST-PROCESSING|PROGRAM|SCREEN|'346 r'TO LIST-PROCESSING|TO TRANSACTION)'347 r'(ENDING|STARTING)\s+AT|'348 r'FORMAT\s+(COLOR|INTENSIFIED|INVERSE|HOTSPOT|INPUT|FRAMES|RESET)|'349 r'AS\s+(CHECKBOX|SUBSCREEN|WINDOW)|'350 r'WITH\s+(((NON-)?UNIQUE)?\s+KEY|FRAME)|'351 r'(BEGIN|END)\s+OF|'352 r'DELETE(\s+ADJACENT\s+DUPLICATES\sFROM)?|'353 r'COMPARING(\s+ALL\s+FIELDS)?|'354 r'(INSERT|APPEND)(\s+INITIAL\s+LINE\s+(IN)?TO|\s+LINES\s+OF)?|'355 r'IN\s+((BYTE|CHARACTER)\s+MODE|PROGRAM)|'356 r'END-OF-(DEFINITION|PAGE|SELECTION)|'357 r'WITH\s+FRAME(\s+TITLE)|'358 r'(REPLACE|FIND)\s+((FIRST|ALL)\s+OCCURRENCES?\s+OF\s+)?(SUBSTRING|REGEX)?|'359 r'MATCH\s+(LENGTH|COUNT|LINE|OFFSET)|'360 r'(RESPECTING|IGNORING)\s+CASE|'361 r'IN\s+UPDATE\s+TASK|'362 r'(SOURCE|RESULT)\s+(XML)?|'363 r'REFERENCE\s+INTO|'364 365 # simple kombinations366 r'AND\s+(MARK|RETURN)|CLIENT\s+SPECIFIED|CORRESPONDING\s+FIELDS\s+OF|'367 r'IF\s+FOUND|FOR\s+EVENT|INHERITING\s+FROM|LEAVE\s+TO\s+SCREEN|'368 r'LOOP\s+AT\s+(SCREEN)?|LOWER\s+CASE|MATCHCODE\s+OBJECT|MODIF\s+ID|'369 r'MODIFY\s+SCREEN|NESTING\s+LEVEL|NO\s+INTERVALS|OF\s+STRUCTURE|'370 r'RADIOBUTTON\s+GROUP|RANGE\s+OF|REF\s+TO|SUPPRESS DIALOG|'371 r'TABLE\s+OF|UPPER\s+CASE|TRANSPORTING\s+NO\s+FIELDS|'372 r'VALUE\s+CHECK|VISIBLE\s+LENGTH|HEADER\s+LINE|COMMON\s+PART)\b', Keyword),373 374 # single word keywords.375 (r'(^|(?<=(\s|\.)))(ABBREVIATED|ABSTRACT|ADD|ALIASES|ALIGN|ALPHA|'376 r'ASSERT|AS|ASSIGN(ING)?|AT(\s+FIRST)?|'377 r'BACK|BLOCK|BREAK-POINT|'378 r'CASE|CAST|CATCH|CHANGING|CHECK|CLASS|CLEAR|COLLECT|COLOR|COMMIT|COND|CONV|'379 r'CREATE|COMMUNICATION|COMPONENTS?|COMPUTE|CONCATENATE|CONDENSE|'380 r'CONSTANTS|CONTEXTS|CONTINUE|CONTROLS|COUNTRY|CURRENCY|'381 r'DATA|DATE|DECIMALS|DEFAULT|DEFINE|DEFINITION|DEFERRED|DEMAND|'382 r'DETAIL|DIRECTORY|DIVIDE|DO|DUMMY|'383 r'ELSE(IF)?|ENDAT|ENDCASE|ENDCATCH|ENDCLASS|ENDDO|ENDFORM|ENDFUNCTION|'384 r'ENDIF|ENDINTERFACE|ENDLOOP|ENDMETHOD|ENDMODULE|ENDSELECT|ENDTRY|ENDWHILE|'385 r'ENHANCEMENT|EVENTS|EXACT|EXCEPTIONS?|EXIT|EXPONENT|EXPORT|EXPORTING|EXTRACT|'386 r'FETCH|FIELDS?|FOR|FORM|FORMAT|FREE|FROM|FUNCTION|'387 r'HIDE|'388 r'ID|IF|IMPORT|IMPLEMENTATION|IMPORTING|IN|INCLUDE|INCLUDING|'389 r'INDEX|INFOTYPES|INITIALIZATION|INTERFACE|INTERFACES|INTO|'390 r'LANGUAGE|LEAVE|LENGTH|LINES|LOAD|LOCAL|'391 r'JOIN|'392 r'KEY|'393 r'NEW|NEXT|'394 r'MAXIMUM|MESSAGE|METHOD[S]?|MINIMUM|MODULE|MODIFIER|MODIFY|MOVE|MULTIPLY|'395 r'NODES|NUMBER|'396 r'OBLIGATORY|OBJECT|OF|OFF|ON|OTHERS|OVERLAY|'397 r'PACK|PAD|PARAMETERS|PERCENTAGE|POSITION|PROGRAM|PROVIDE|PUBLIC|PUT|PF\d\d|'398 r'RAISE|RAISING|RANGES?|READ|RECEIVE|REDEFINITION|REFRESH|REJECT|REPORT|RESERVE|'399 r'REF|RESUME|RETRY|RETURN|RETURNING|RIGHT|ROLLBACK|REPLACE|'400 r'SCROLL|SEARCH|SELECT|SHIFT|SIGN|SINGLE|SIZE|SKIP|SORT|SPLIT|STATICS|STOP|'401 r'STYLE|SUBMATCHES|SUBMIT|SUBTRACT|SUM(?!\()|SUMMARY|SUMMING|SUPPLY|SWITCH|'402 r'TABLE|TABLES|TIMESTAMP|TIMES?|TIMEZONE|TITLE|\??TO|'403 r'TOP-OF-PAGE|TRANSFER|TRANSLATE|TRY|TYPES|'404 r'ULINE|UNDER|UNPACK|UPDATE|USING|'405 r'VALUE|VALUES|VIA|VARYING|VARY|'406 r'WAIT|WHEN|WHERE|WIDTH|WHILE|WITH|WINDOW|WRITE|XSD|ZERO)\b', Keyword),407 408 # builtins409 (r'(abs|acos|asin|atan|'410 r'boolc|boolx|bit_set|'411 r'char_off|charlen|ceil|cmax|cmin|condense|contains|'412 r'contains_any_of|contains_any_not_of|concat_lines_of|cos|cosh|'413 r'count|count_any_of|count_any_not_of|'414 r'dbmaxlen|distance|'415 r'escape|exp|'416 r'find|find_end|find_any_of|find_any_not_of|floor|frac|from_mixed|'417 r'insert|'418 r'lines|log|log10|'419 r'match|matches|'420 r'nmax|nmin|numofchar|'421 r'repeat|replace|rescale|reverse|round|'422 r'segment|shift_left|shift_right|sign|sin|sinh|sqrt|strlen|'423 r'substring|substring_after|substring_from|substring_before|substring_to|'424 r'tan|tanh|to_upper|to_lower|to_mixed|translate|trunc|'425 r'xstrlen)(\()\b', bygroups(Name.Builtin, Punctuation)),426 427 (r'&[0-9]', Name),428 (r'[0-9]+', Number.Integer),429 430 # operators which look like variable names before431 # parsing variable names.432 (r'(?<=(\s|.))(AND|OR|EQ|NE|GT|LT|GE|LE|CO|CN|CA|NA|CS|NOT|NS|CP|NP|'433 r'BYTE-CO|BYTE-CN|BYTE-CA|BYTE-NA|BYTE-CS|BYTE-NS|'434 r'IS\s+(NOT\s+)?(INITIAL|ASSIGNED|REQUESTED|BOUND))\b', Operator.Word),435 436 include('variable-names'),437 438 # standard operators after variable names,439 # because < and > are part of field symbols.440 (r'[?*<>=\-+&]', Operator),441 (r"'(''|[^'])*'", String.Single),442 (r"`([^`])*`", String.Single),443 (r"([|}])([^{}|]*?)([|{])",444 bygroups(Punctuation, String.Single, Punctuation)),445 (r'[/;:()\[\],.]', Punctuation),446 (r'(!)(\w+)', bygroups(Operator, Name)),447 ],448 }449 450 451class OpenEdgeLexer(RegexLexer):452 """453 Lexer for OpenEdge ABL (formerly Progress) source code.454 """455 name = 'OpenEdge ABL'456 aliases = ['openedge', 'abl', 'progress']457 filenames = ['*.p', '*.cls']458 mimetypes = ['text/x-openedge', 'application/x-openedge']459 url = 'https://www.progress.com/openedge/features/abl'460 version_added = '1.5'461 462 types = (r'(?i)(^|(?<=[^\w\-]))(CHARACTER|CHAR|CHARA|CHARAC|CHARACT|CHARACTE|'463 r'COM-HANDLE|DATE|DATETIME|DATETIME-TZ|'464 r'DECIMAL|DEC|DECI|DECIM|DECIMA|HANDLE|'465 r'INT64|INTEGER|INT|INTE|INTEG|INTEGE|'466 r'LOGICAL|LONGCHAR|MEMPTR|RAW|RECID|ROWID)\s*($|(?=[^\w\-]))')467 468 keywords = words(OPENEDGEKEYWORDS,469 prefix=r'(?i)(^|(?<=[^\w\-]))',470 suffix=r'\s*($|(?=[^\w\-]))')471 472 tokens = {473 'root': [474 (r'/\*', Comment.Multiline, 'comment'),475 (r'\{', Comment.Preproc, 'preprocessor'),476 (r'\s*&.*', Comment.Preproc),477 (r'0[xX][0-9a-fA-F]+[LlUu]*', Number.Hex),478 (r'(?i)(DEFINE|DEF|DEFI|DEFIN)\b', Keyword.Declaration),479 (types, Keyword.Type),480 (keywords, Name.Builtin),481 (r'"(\\\\|\\[^\\]|[^"\\])*"', String.Double),482 (r"'(\\\\|\\[^\\]|[^'\\])*'", String.Single),483 (r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?', Number.Float),484 (r'[0-9]+', Number.Integer),485 (r'\s+', Whitespace),486 (r'[+*/=-]', Operator),487 (r'[.:()]', Punctuation),488 (r'.', Name.Variable), # Lazy catch-all489 ],490 'comment': [491 (r'[^*/]', Comment.Multiline),492 (r'/\*', Comment.Multiline, '#push'),493 (r'\*/', Comment.Multiline, '#pop'),494 (r'[*/]', Comment.Multiline)495 ],496 'preprocessor': [497 (r'[^{}]', Comment.Preproc),498 (r'\{', Comment.Preproc, '#push'),499 (r'\}', Comment.Preproc, '#pop'),500 ],501 }502 503 def analyse_text(text):504 """Try to identify OpenEdge ABL based on a few common constructs."""505 result = 0506 507 if 'END.' in text:508 result += 0.05509 510 if 'END PROCEDURE.' in text:511 result += 0.05512 513 if 'ELSE DO:' in text:514 result += 0.05515 516 return result517 518 519class GoodDataCLLexer(RegexLexer):520 """521 Lexer for GoodData-CL script files.522 """523 524 name = 'GoodData-CL'525 aliases = ['gooddata-cl']526 filenames = ['*.gdc']527 mimetypes = ['text/x-gooddata-cl']528 url = 'https://github.com/gooddata/GoodData-CL'529 version_added = '1.4'530 531 flags = re.IGNORECASE532 533 # Syntax:534 # https://github.com/gooddata/GoodData-CL/raw/master/cli/src/main/resources/com/gooddata/processor/COMMANDS.txt535 tokens = {536 'root': [537 # Comments538 (r'#.*', Comment.Single),539 # Function call540 (r'[a-z]\w*', Name.Function),541 # Argument list542 (r'\(', Punctuation, 'args-list'),543 # Punctuation544 (r';', Punctuation),545 # Space is not significant546 (r'\s+', Text)547 ],548 'args-list': [549 (r'\)', Punctuation, '#pop'),550 (r',', Punctuation),551 (r'[a-z]\w*', Name.Variable),552 (r'=', Operator),553 (r'"', String, 'string-literal'),554 (r'[0-9]+(?:\.[0-9]+)?(?:e[+-]?[0-9]{1,3})?', Number),555 # Space is not significant556 (r'\s', Whitespace)557 ],558 'string-literal': [559 (r'\\[tnrfbae"\\]', String.Escape),560 (r'"', String, '#pop'),561 (r'[^\\"]+', String)562 ]563 }564 565 566class MaqlLexer(RegexLexer):567 """568 Lexer for GoodData MAQL scripts.569 """570 571 name = 'MAQL'572 aliases = ['maql']573 filenames = ['*.maql']574 mimetypes = ['text/x-gooddata-maql', 'application/x-gooddata-maql']575 url = 'https://help.gooddata.com/doc/enterprise/en/dashboards-and-insights/maql-analytical-query-language'576 version_added = '1.4'577 578 flags = re.IGNORECASE579 tokens = {580 'root': [581 # IDENTITY582 (r'IDENTIFIER\b', Name.Builtin),583 # IDENTIFIER584 (r'\{[^}]+\}', Name.Variable),585 # NUMBER586 (r'[0-9]+(?:\.[0-9]+)?(?:e[+-]?[0-9]{1,3})?', Number),587 # STRING588 (r'"', String, 'string-literal'),589 # RELATION590 (r'\<\>|\!\=', Operator),591 (r'\=|\>\=|\>|\<\=|\<', Operator),592 # :=593 (r'\:\=', Operator),594 # OBJECT595 (r'\[[^]]+\]', Name.Variable.Class),596 # keywords597 (words((598 'DIMENSION', 'DIMENSIONS', 'BOTTOM', 'METRIC', 'COUNT', 'OTHER',599 'FACT', 'WITH', 'TOP', 'OR', 'ATTRIBUTE', 'CREATE', 'PARENT',600 'FALSE', 'ROW', 'ROWS', 'FROM', 'ALL', 'AS', 'PF', 'COLUMN',601 'COLUMNS', 'DEFINE', 'REPORT', 'LIMIT', 'TABLE', 'LIKE', 'AND',602 'BY', 'BETWEEN', 'EXCEPT', 'SELECT', 'MATCH', 'WHERE', 'TRUE',603 'FOR', 'IN', 'WITHOUT', 'FILTER', 'ALIAS', 'WHEN', 'NOT', 'ON',604 'KEYS', 'KEY', 'FULLSET', 'PRIMARY', 'LABELS', 'LABEL',605 'VISUAL', 'TITLE', 'DESCRIPTION', 'FOLDER', 'ALTER', 'DROP',606 'ADD', 'DATASET', 'DATATYPE', 'INT', 'BIGINT', 'DOUBLE', 'DATE',607 'VARCHAR', 'DECIMAL', 'SYNCHRONIZE', 'TYPE', 'DEFAULT', 'ORDER',608 'ASC', 'DESC', 'HYPERLINK', 'INCLUDE', 'TEMPLATE', 'MODIFY'),609 suffix=r'\b'),610 Keyword),611 # FUNCNAME612 (r'[a-z]\w*\b', Name.Function),613 # Comments614 (r'#.*', Comment.Single),615 # Punctuation616 (r'[,;()]', Punctuation),617 # Space is not significant618 (r'\s+', Whitespace)619 ],620 'string-literal': [621 (r'\\[tnrfbae"\\]', String.Escape),622 (r'"', String, '#pop'),623 (r'[^\\"]+', String)624 ],625 }626 