UNPKG

highlightjs-cobol

Version:

COBOL syntax highlighting for highlight.js

298 lines (294 loc) 8.38 kB
// Copyright 2022 Gabriel Gonçalves <KTSnowy@outlook.com> // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. /** @type LanguageFn */ export default function (hljs){ return { name: 'COBOL', aliases:['standard-cobol','cobol'], case_insensitive: true, keywords:{ $pattern: /[a-zA-Z]+(?:-[a-zA-Z0-9]+)*/, // Keywords from the 2022 DIS of the COBOL standard. keyword: [ // A 'ACCEPT','ACCESS', 'ACTIVE-CLASS','ADD', 'ADDRESS','ADVANCING', 'AFTER','ALIGNED', 'ALLOCATE','ALPHABET', 'ALPHABETIC','ALPHABETIC-LOWER', 'ALPHABETIC-UPPER','ALPHANUMERIC', 'ALPHANUMERIC-EDITED','ALSO', 'ALTERNATE','AND', 'ANY','ANYCASE', 'ARE','AREA', 'AREAS','AS', 'ASCENDING','ASSIGN', 'AT', // B 'B-AND','B-NOT', 'B-OR','B-SHIFT', 'B-SHIFT-LC','B-SHIFT-RC', 'BY','B-XOR', 'BASED','BEFORE', 'BINARY','BINARY-CHAR', 'BINARY-DOUBLE','BINARY-LONG', 'BINARY-SHORT','BIT', 'BLANK','BLOCK', 'BOOLEAN','BOTTOM', // C 'CALL','CANCEL', 'CF','CH', 'CHARACTER','CHARACTERS', 'CLASS','CLASS-ID', 'CLOSE','CODE', 'CODE-SET','COL', 'COLLATING','COLS', 'COLUMN','COLUMNS', 'COMMA','COMMIT', 'COMMON','COMP', 'COMPUTATIONAL','COMPUTE', 'CONFIGURATION','CONSTANT', 'CONTAINS','CONTENT', 'CONTINUE','CONTROL', 'CONTROLS','CONVERTING', 'COPY','CORR', 'CORRESPONDING','COUNT', 'CRT','CURRENCY','CURSOR', // D 'DATA','DATA-POINTER', 'DATE','DAY', 'DAY-OF-WEEK','DE', 'DECIMAL-POINT', 'DECLARATIVES','DEFAULT', 'DELETE','DELIMITED', 'DELIMITER','DEPENDING', 'DESCENDING','DESTINATION', 'DETAIL','DISPLAY', 'DIVIDE','DIVISION', 'DOWN','DUPLICATES', 'DYNAMIC', // E 'EC','EDITING', 'ELSE','EMI', 'END','END-ACCEPT', 'END-ADD','END-CALL', 'END-COMPUTE','END-DELETE', 'END-DISPLAY','END-DIVIDE', 'END-EVALUATE','END-IF', 'END-MULTIPLY','END-OF-PAGE', 'END-PERFORM','END-RECEIVE', 'END-READ','END-RETURN', 'END-REWRITE','END-SEARCH', 'END-START','END-STRING', 'END-SUBTRACT','END-UNSTRING', 'END-WRITE','ENVIRONMENT', 'EOL','EOP', 'EQUAL','ERROR', 'EVALUATE','EXCEPTION', 'EXCEPTION-OBJECT','EXCLUSIVE-OR', 'EXIT','EXTEND','EXTERNAL', // F 'FACTORY','FARTHEST-FROM-ZERO', 'FALSE','FD','FILE', 'FILE-CONTROL','FILLER', 'FINAL','FINALLY', 'FIRST','FLOAT-BINARY-32', 'FLOAT-BINARY-64','FLOAT-BINARY-128', 'FLOAT-DECIMAL-16','FLOAT-DECIMAL-34', 'FLOAT-EXTENDED','FLOAT-INFINITY', 'FLOAT-LONG','FLOAT-NOT-A-NUMBER', 'FLOAT-NOT-A-NUMBER-QUIET','FLOAT-NOT-A-NUMBER-SIGNALING', 'FOOTING','FOR', 'FORMAT','FREE', 'FROM','FUNCTION', 'FUNCTION-ID','FUNCTION-POINTER', // G 'GENERATE','GET', 'GIVING','GLOBAL', 'GO','GOBACK', 'GREATER','GROUP', 'GROUP-USAGE', // H 'HEADING', // I 'I-O','I-O-CONTROL', 'IDENTIFICATION','IF', 'IN','IN-ARITHMETIC-RANGE', 'INDEX','INDEXED', 'INDICATE','INHERITS', 'INITIAL','INITIALIZE', 'INITIATE','INPUT', 'INPUT-OUTPUT','INSPECT', 'INTERFACE','INTERFACE-ID', 'INTO','INVALID', 'INVOKE','IS', // J&K 'JUST','JUSTIFIED','KEY', // L 'LAST','LEADING', 'LEFT','LENGTH', 'LESS','LIMIT', 'LIMITS','LINAGE', 'LINAGE-COUNTER','LINE', 'LINE-COUNTER','LINES', 'LINKAGE','LOCAL-STORAGE', 'LOCALE','LOCATION','LOCK', // M 'MERGE','MESSAGE-TAG', 'METHOD','METHOD-ID', 'MINUS','MODE', 'MOVE','MULTIPLY', // N 'NATIONAL','NATIONAL-EDITED', 'NATIVE','NEAREST-TO-ZERO', 'NESTED','NEXT', 'NO','NOT', 'NULL','NUMBER', 'NUMERIC','NUMERIC-EDITED', // O 'OBJECT','OBJECT-COMPUTER', 'OBJECT-REFERENCE','OCCURS', 'OF','OFF', 'OMITTED','ON', 'OPEN','OPTIONAL', 'OPTIONS','OR', 'ORDER','ORGANIZATION', 'OTHER','OUTPUT', 'OVERFLOW','OVERRIDE', // P 'PACKED-DECIMAL','PAGE', 'PAGE-COUNTER','PERFORM', 'PF','PH', 'PIC','PICTURE', 'PLUS','POINTER', 'POSITIVE','PRESENT', 'PRINTING','PROCEDURE', 'PROGRAM','PROGRAM-ID', 'PROGRAM-POINTER','PROPERTY', 'PROTOTYPE', // R 'RAISE','RAISING', 'RANDOM','RD', 'READ','RECEIVE', 'RECORD','RECORDS', 'REDEFINES','REEL', 'REF','REFERENCE', 'RELATIVE','RELEASE', 'REMAINDER','REMOVAL', 'RENAMES','REPLACE', 'REPLACING','REPORT', 'REPORTING','REPORTS', 'REPOSITORY','RESERVE', 'RESET','RESUME', 'RETRY','RETURN', 'RETURNING','REWIND', 'REWRITE','RF', 'RH','RIGHT', 'ROLLBACK','ROUNDED', 'RUN', // S 'SAME','SCREEN', 'SD','SEARCH', 'SECTION','SELECT', 'SEND','SELF', 'SENTENCE','SEPARATE', 'SEQUENCE','SEQUENTIAL', 'SET','SHARING', 'SIGN','SIZE', 'SORT','SORT-MERGE', 'SOURCE','SOURCE-COMPUTER', 'SOURCES','SPECIAL-NAMES', 'STANDARD','STANDARD-1', 'STANDARD-2','START', 'STATUS','STOP', 'STRING','SUBTRACT', 'SUM','SUPER', 'SUPPRESS','SYMBOLIC', 'SYNC','SYNCHRONIZED', 'SYSTEM-DEFAULT', // T 'TABLE','TALLYING', 'TERMINATE','TEST', 'THAN','THEN', 'THROUGH','THRU', 'TIME','TIMES', 'TO','TOP', 'TRAILING','TRUE', 'TYPE','TYPEDEF', // U 'UNIT','UNIVERSAL', 'UNLOCK','UNSTRING', 'UNTIL','UP', 'UPON','USAGE', 'USE','USE', 'USER-DEFAULT','USING', // V 'VAL-STATUS','VALID', 'VALIDATE','VALIDATE-STATUS', 'VALUE','VALUES', 'VARYING', // W & X 'WHEN','WITH', 'WORKING-STORAGE','WRITE', 'XOR', ], literal: [ 'ZERO','ZEROES','ZEROS', 'SPACE','SPACES', 'HIGH-VALUE','HIGH-VALUES', 'LOW-VALUE','LOW-VALUES', 'QUOTE','QUOTES', 'ALL', ] }, contains: [ { scope: 'comment', begin: /(^[ 0-9a-zA-Z]{1,6}[*])/, end: /\n/ }, { scope: 'comment', begin: /(^[ 0-9a-zA-Z]{1,6})/m }, { scope: 'doctag', begin: />>/, end: /\n/ }, { scope: 'type', begin: /(9|S9|V9|X|A)+(\([0-9]*\))+/ }, { scope: 'operator', begin: /(\+| - |\*\*|\*|\/|<>|>=|<=|>|<|=|&|::)/ }, { scope: 'number', begin: /([0-9]+(?:(\.|,)[0-9]+)*)/ }, { scope: 'string', begin: '"', end: '"' }, { scope: 'string', begin: "'", end: "'" }, ] } }