|
| 1 | +// This is a language definition for generic log files. |
| 2 | +// Since there is no one log format, this language definition has to support all formats to some degree. |
| 3 | +// |
| 4 | +// Based on https://github.com/MTDL9/vim-log-highlighting |
| 5 | + |
| 6 | +Prism.languages.log = { |
| 7 | + 'string': { |
| 8 | + // Single-quoted strings must not be confused with plain text. E.g. Can't isn't Susan's Chris' toy |
| 9 | + pattern: /"(?:[^"\\\r\n]|\\.)*"|'(?![st] | \w)(?:[^'\\\r\n]|\\.)*'/, |
| 10 | + greedy: true, |
| 11 | + }, |
| 12 | + |
| 13 | + 'level': [ |
| 14 | + { |
| 15 | + pattern: /\b(?:ALERT|CRIT|CRITICAL|EMERG|EMERGENCY|ERR|ERROR|FAILURE|FATAL|SEVERE)\b/, |
| 16 | + alias: ['error', 'important'] |
| 17 | + }, |
| 18 | + { |
| 19 | + pattern: /\b(?:WARN|WARNING)\b/, |
| 20 | + alias: ['warning', 'important'] |
| 21 | + }, |
| 22 | + { |
| 23 | + pattern: /\b(?:DISPLAY|INFO|NOTICE|STATUS)\b/, |
| 24 | + alias: ['info', 'keyword'] |
| 25 | + }, |
| 26 | + { |
| 27 | + pattern: /\b(?:DEBUG|FINE)\b/, |
| 28 | + alias: ['debug', 'keyword'] |
| 29 | + }, |
| 30 | + { |
| 31 | + pattern: /\b(?:FINER|FINEST|TRACE|VERBOSE)\b/, |
| 32 | + alias: ['trace', 'comment'] |
| 33 | + } |
| 34 | + ], |
| 35 | + |
| 36 | + 'property': { |
| 37 | + pattern: /((?:^|[\]|])[ \t]*)[a-z_](?:[\w-]|\b\/\b)*(?:[. ]\(?\w(?:[\w-]|\b\/\b)*\)?)*:(?=\s)/im, |
| 38 | + lookbehind: true |
| 39 | + }, |
| 40 | + |
| 41 | + 'separator': { |
| 42 | + pattern: /(^|[^-+])-{3,}|={3,}|\*{3,}|- - /m, |
| 43 | + lookbehind: true, |
| 44 | + alias: 'comment' |
| 45 | + }, |
| 46 | + |
| 47 | + 'url': /\b(?:https?|ftp|file):\/\/[^\s|,;'"]*[^\s|,;'">.]/, |
| 48 | + 'email': { |
| 49 | + pattern: /(^|\s)[-\w+.]+@[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)+(?=\s)/, |
| 50 | + lookbehind: true, |
| 51 | + alias: 'url' |
| 52 | + }, |
| 53 | + |
| 54 | + 'ip-address': { |
| 55 | + pattern: /\b(?:\d{1,3}(?:\.\d{1,3}){3})\b/i, |
| 56 | + alias: 'constant' |
| 57 | + }, |
| 58 | + 'mac-address': { |
| 59 | + pattern: /\b[a-f0-9]{2}(?::[a-f0-9]{2}){5}\b/i, |
| 60 | + alias: 'constant' |
| 61 | + }, |
| 62 | + 'domain': { |
| 63 | + pattern: /(^|\s)[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)*\.[a-z][a-z0-9-]+(?=\s)/, |
| 64 | + lookbehind: true, |
| 65 | + alias: 'constant' |
| 66 | + }, |
| 67 | + |
| 68 | + 'uuid': { |
| 69 | + pattern: /\b\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\b/, |
| 70 | + alias: 'constant' |
| 71 | + }, |
| 72 | + 'hash': { |
| 73 | + pattern: /\b(?:[a-f0-9]{32}){1,2}\b/i, |
| 74 | + alias: 'constant' |
| 75 | + }, |
| 76 | + |
| 77 | + 'file-path': { |
| 78 | + pattern: /\b[a-z]:[\\/][^\s|,;:(){}\[\]"']+|(^|[\s:\[\](>|])\.{0,2}\/\w[^\s|,;:(){}\[\]"']*/i, |
| 79 | + lookbehind: true, |
| 80 | + greedy: true, |
| 81 | + alias: 'string' |
| 82 | + }, |
| 83 | + |
| 84 | + 'date': { |
| 85 | + pattern: RegExp( |
| 86 | + /\b\d{4}[-/]\d{2}[-/]\d{2}T(?=\d{1,2}:)/.source + |
| 87 | + '|' + |
| 88 | + /\b\d{1,4}[-/ ](?:\d{1,2}|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[-/ ]\d{2,4}T?\b/.source + |
| 89 | + '|' + |
| 90 | + /\b(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)(?:\s{1,2}(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))?|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s{1,2}\d{1,2}\b/.source, |
| 91 | + 'i' |
| 92 | + ), |
| 93 | + alias: 'number' |
| 94 | + }, |
| 95 | + 'time': { |
| 96 | + pattern: /\b\d{1,2}:\d{1,2}:\d{1,2}(?:[.,:]\d+)?(?:\s?[+-]\d{2,4}|Z)?\b/, |
| 97 | + alias: 'number' |
| 98 | + }, |
| 99 | + |
| 100 | + 'boolean': /\b(?:true|false|null)\b/i, |
| 101 | + 'number': { |
| 102 | + pattern: /(^|[^.\w])(?:0x[a-f0-9]+|0o[0-7]+|0b[01]+|v?\d[\da-f]*(?:\.\d+)*(?:e[+-]?\d+)?[a-z]{0,3}\b)\b(?!\.\w)/i, |
| 103 | + lookbehind: true |
| 104 | + }, |
| 105 | + |
| 106 | + 'operator': /[;:?<=>~/@!$%&+\-|^(){}*#]/, |
| 107 | + 'punctuation': /[\[\].,]/ |
| 108 | +}; |
0 commit comments