|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
|
|
4
|
|
|
namespace Kadet\Highlighter\Language; |
|
5
|
|
|
|
|
6
|
|
|
|
|
7
|
|
|
use Kadet\Highlighter\Matcher\CommentMatcher; |
|
8
|
|
|
use Kadet\Highlighter\Matcher\RegexMatcher; |
|
9
|
|
|
use Kadet\Highlighter\Matcher\WordMatcher; |
|
10
|
|
|
use Kadet\Highlighter\Parser\Rule; |
|
11
|
|
|
|
|
12
|
|
|
class Cobol extends GreedyLanguage |
|
13
|
|
|
{ |
|
14
|
|
|
|
|
15
|
|
|
/** |
|
16
|
|
|
* Tokenization rules setup |
|
17
|
|
|
*/ |
|
18
|
|
|
public function setupRules() |
|
19
|
|
|
{ |
|
20
|
|
|
$this->rules->addMany([ |
|
21
|
|
|
'keyword' => new Rule(new WordMatcher([ |
|
22
|
|
|
'ACCEPT', 'ACCESS', 'ADD', 'ADDRESS', 'ADVANCING', 'AFTER', 'ALL', 'ALPHABET', |
|
23
|
|
|
'ALPHABETIC(-(LOWER|UPPER))?', 'ALPHANUMERIC(-EDITED)?', 'ALSO', 'ALTER', 'ALTERNATE', 'AND', 'ANY', |
|
24
|
|
|
'APPLY', 'ARE', 'AREA', 'AREAS', 'ASCENDING', 'ASSIGN', 'AT', 'AUTHOR', 'BASIS', 'BEFORE', 'BEGINNING', |
|
25
|
|
|
'BINARY', 'BLANK', 'BLOCK', 'BOTTOM', 'BY', 'CALL', 'CANCEL', 'CBL', 'CHARACTER', 'CHARACTERS', 'CLASS', |
|
26
|
|
|
'CLOSE', 'CODE-SET', 'COLLATING', 'COMMA', 'COMMON', 'COMP(-[1-4])?', 'COMPUTATIONAL(-[1-4])?', |
|
27
|
|
|
'COMPUTE', 'CONFIGURATION', 'CONTAINS', 'CONTENT', 'CONTINUE', 'CONVERTING', 'COPY', 'CORR', |
|
28
|
|
|
'CORRESPONDING', 'COUNT', 'CURRENCY', 'DATA', 'DATE(-(COMPILED|WRITTEN))?', 'DAY-OF-WEEK', 'DAY', |
|
29
|
|
|
'DBCS', 'DEBUG-ITEM', 'DEBUGGING', 'DECIMAL-POINT', 'DECLARATIVES', 'DEGUGGING', 'DELETE', 'DELIMITED', |
|
30
|
|
|
'DELIMITER', 'DEPENDING', 'DESCENDING', 'DISPLAY(-1)?', 'DIVIDE', 'DIVISION', 'DOWN', 'DUPLICATES', |
|
31
|
|
|
'DYNAMIC', 'EBCDIC', 'EGCS', 'EJECT', 'ELSE', |
|
32
|
|
|
'END(-(ADD|CALL|COMPUTE|DELETE|DIVIDE|EVALUATE|IF|MULTIPLY|OF-PAGE|PERFORM|READ|RETURN|REWRITE|SEARCH|START|STRING|SUBTRACT|UNSTRING|WRITE))?', |
|
33
|
|
|
'ENDING', 'ENTER', 'ENTRY', 'ENVIRONMENT', 'EOP', 'EQUAL', 'ERROR', 'EVALUATE', 'EVERY', 'EXCEPTION', |
|
34
|
|
|
'EXIT', 'EXTEND', 'EXTERNAL', 'F', 'FALSE', 'FD', 'FILE(-CONTROL)?', 'FILLER', 'FIRST', 'FOOTING', |
|
35
|
|
|
'FOR', 'FROM', 'GIVING', 'GLOBAL', 'GO', 'GOBACK', 'GREATER', 'HIGH-VALUES?', 'I-O(-CONTROL)?', 'ID', |
|
36
|
|
|
'IDENTIFICATION', 'IF', 'IN', 'INDEX', 'INDEXED', 'INITIAL', 'INITIALIZE', 'INPUT', 'INPUT-OUTPUT', |
|
37
|
|
|
'INSERT', 'INSPECT', 'INSTALLATION', 'INTO', 'INVALID', 'IS', 'JUST', 'JUSTIFIED', 'KANJI', 'KEY', |
|
38
|
|
|
'LABEL', 'LEADING', 'LEFT', 'LENGTH', 'LESS', 'LINAGE(-COUNTER)?', 'LINE', 'LINES', 'LINKAGE', 'LIST', |
|
39
|
|
|
'LOCK', 'LOW-VALUES?', 'MAP', 'MEMORY', 'MERGE', 'MODE', 'MODULES', 'MORE-LABELS', 'MOVE', 'MULTIPLE', |
|
40
|
|
|
'MULTIPLY', 'NATIVE', 'NEGATIVE', 'NEXT', 'NO', 'NOLIST', 'NOMAP', 'NOSOURCE', 'NOT', 'NULL', 'NULLS', |
|
41
|
|
|
'NUMERIC(-EDITED)?', 'OBJECT-COMPUTER', 'OCCURS', 'OF', 'OFF', 'OMITTED', 'ON', 'OPEN', 'OPTIONAL', |
|
42
|
|
|
'OR', 'ORDER', 'ORGANIZATION', 'OTHER', 'OUTPUT', 'OVERFLOW', 'PACKED-DECIMAL', 'PADDING', 'PAGE', |
|
43
|
|
|
'PASSWORD', 'PERFORM', 'PIC', 'PICTURE', 'POINTER', 'POSITION', 'POSITIVE', 'PROCEDURE', 'PROCEDURES', |
|
44
|
|
|
'PROCEED', 'PROCESS', 'PROGRAM(-ID)?', 'QUOTE', 'QUOTES', 'RANDOM', 'READ', 'READY', 'RECORD', |
|
45
|
|
|
'RECORDING', 'RECORDS', 'REDEFINES', 'REEL', 'REFERENCE', 'RELATIVE', 'RELEASE', 'RELOAD', 'REMAINDER', |
|
46
|
|
|
'REMOVAL', 'RENAMES', 'REPLACE', 'REPLACING', 'RERUN', 'RESERVE', 'RESET', 'RETURN(-CODE)?REVERSED', |
|
47
|
|
|
'REWIND', 'REWRITE', 'RIGHT', 'ROUNDED', 'RUN', 'S', 'SAME', 'SD', 'SEARCH', 'SECTION', 'SECURITY', |
|
48
|
|
|
'SEGMENT-LIMIT', 'SELECT', 'SENTENCE', 'SEPARATE', 'SEQUENCE', 'SEQUENTIAL', 'SERVICE', 'SET', |
|
49
|
|
|
'SHIFT-(IN|OUT)', 'SIGN', 'SIZE', 'SKIP1', 'SKIP2', 'SKIP3', |
|
50
|
|
|
'SORT(-(CONTROL|CORE-SIZE|FILE-SIZE|MERGE|MESSAGE|MODE-SIZE|RETURN))?', 'SOURCE(-COMPUTER)?', 'SPACE', |
|
51
|
|
|
'SPACES', 'SPECIAL-NAMES', 'STANDARD(-[1-2])?', 'START', 'STATUS', 'STOP', 'STRING', 'SUBTRACT', |
|
52
|
|
|
'SUPPRESS', 'SYMBOLIC', 'SYNC', 'SYNCHRONIZED', 'TALLY', 'TALLYING', 'TAPE', 'TEST', 'THAN', 'THEN', |
|
53
|
|
|
'THROUGH', 'THRU', 'TIME', 'TIMES', 'TITLE', 'TO', 'TOP', 'TRACE', 'TRAILING', 'TRUE', 'U', 'UNIT', |
|
54
|
|
|
'UNSTRING', 'UNTIL', 'UP', 'UPON', 'USAGE', 'USE', 'USING', 'V', 'VALUE', 'VALUES', 'VARYING', |
|
55
|
|
|
'WHEN(-COMPILED)?', 'WITH', 'WORDS', 'WORKING-STORAGE', 'WRITE(-ONLY)?', 'ZERO(S|ES)?', |
|
56
|
|
|
], ['case-sensitivity' => true, 'separated' => true, 'escape' => false])), |
|
57
|
|
|
'number' => new Rule(new RegexMatcher('/([\+\-]?(?:[0-9]*[\.][0-9]+|[0-9]+))/')), |
|
58
|
|
|
'comment' => new Rule(new CommentMatcher(['*'])), |
|
59
|
|
|
'string' => CommonFeatures::strings(['"', '\'']), |
|
60
|
|
|
]); |
|
61
|
|
|
} |
|
62
|
|
|
|
|
63
|
|
|
/** |
|
64
|
|
|
* Unique language identifier, for example 'php' |
|
65
|
|
|
* |
|
66
|
|
|
* @return string |
|
67
|
|
|
*/ |
|
68
|
|
|
public function getIdentifier() |
|
69
|
|
|
{ |
|
70
|
|
|
return "cobol"; |
|
71
|
|
|
} |
|
72
|
|
|
|
|
73
|
|
|
|
|
74
|
|
|
public static function getMetadata() |
|
75
|
|
|
{ |
|
76
|
|
|
return [ |
|
77
|
|
|
'name' => ['cobol'], |
|
78
|
|
|
'mime' => ['text/x-cobol'], |
|
79
|
|
|
'extension' => ['*.cbl'], |
|
80
|
|
|
]; |
|
81
|
|
|
} |
|
82
|
|
|
} |