summaryrefslogtreecommitdiff
path: root/mnv/runtime/syntax/log.mnv
diff options
context:
space:
mode:
Diffstat (limited to 'mnv/runtime/syntax/log.mnv')
-rw-r--r--mnv/runtime/syntax/log.mnv222
1 files changed, 222 insertions, 0 deletions
diff --git a/mnv/runtime/syntax/log.mnv b/mnv/runtime/syntax/log.mnv
new file mode 100644
index 0000000000..9f1edf1cb9
--- /dev/null
+++ b/mnv/runtime/syntax/log.mnv
@@ -0,0 +1,222 @@
+" MNV syntax file
+" Language: Generic log file
+" Maintainer: Mao-Yining <https://github.com/mao-yining>
+" Former Maintainer: MTDL9 <https://github.com/MTDL9>
+" Latest Revision: 2025-10-31
+
+if exists('b:current_syntax')
+ finish
+endif
+
+syntax case ignore
+
+" Operators
+"---------------------------------------------------------------------------
+syn match logOperator display '[;,\?\:\.\<=\>\~\/\@\!$\%&\+\-\|\^(){}\*#]'
+syn match logBrackets display '[][]'
+
+" For Visual Separator and Apache CLF
+"---------------------------------------------------------------------------
+syn match logSeparator display '-\{3,}\|=\{3,}\|#\{3,}\|\*\{3,}\|<\{3,}\|>\{3,}'
+syn match logSeparator display '- - '
+
+" Strings
+" ------------------------------
+syn region LogString start=/"/ end=/"/ end=/$/ skip=/\\./ contains=logJavaError
+syn region LogString start=/`/ end=/`/ end=/$/ skip=/\\./ contains=logJavaError
+" Quoted strings, but no match on quotes like `don't`, possessive `s'` and `'s`
+syn region LogString start=/\(s\)\@<!'\(s \|t \)\@!/ end=/'/ end=/$/ skip=/\\./ contains=logJavaError
+
+" Numbers
+"---------------------------------------------------------------------------
+syn match logNumber display '\<\d\+\>'
+syn match logNumberFloat display '\<\d\+\.\d\+\([eE][-+]\=\d\+\)\=\>'
+syn match logNumberFloat display '\<\d\+[eE][-+]\=\d\+\>'
+syn match logNumberBin display '\<0[bB][01]\+\>'
+syn match logNumberOct display '\<0[oO]\o\+\>'
+syn match logNumberHex display '\<0[xX]\x\+\>'
+
+" Possible hex numbers without the '0x' prefix
+syn match logNumberHex display '\<\x\{4,}\>'
+
+" Numbers in Hardware Description Languages e.g. Verilog
+" These must be placed after LogString to ensure they take precedence
+syn match logNumber display '\'d\d\+\>'
+syn match logNumberBin display '\'b[01]\+\>'
+syn match logNumberOct display '\'o\o\+\>'
+syn match logNumberHex display '\'h\x\+\>'
+
+" Constants
+"---------------------------------------------------------------------------
+syn keyword logBoolean true false
+syn keyword logNull null nil none
+
+" Dates and Times
+"---------------------------------------------------------------------------
+" MM-DD, DD-MM, MM/DD, DD/MM
+syn match logDate display '\<\d\{2}[-\/]\d\{2}\>'
+" YYYY-MM-DD, YYYY/MM/DD
+syn match logDate display '\<\d\{4}[-\/]\d\{2}[-\/]\d\{2}\>'
+" DD-MM-YYYY, DD/MM/YYYY
+syn match logDate display '\<\d\{2}[-\/]\d\{2}[-\/]\d\{4}\>'
+" First half of RFC3339 e.g. 2023-01-01T
+syn match logDate display '\<\d\{4}-\d\{2}-\d\{2}T'
+" 'Dec 31', 'Dec 31, 2023', 'Dec 31 2023'
+syn match logDate display '\<\a\{3} \d\{1,2}\(,\? \d\{4}\)\?\>'
+" '31-Dec-2023', '31 Dec 2023'
+syn match logDate display '\<\d\{1,2}[- ]\a\{3}[- ]\d\{4}\>'
+" Weekday string
+syn keyword logDate Mon Tue Wed Thu Fri Sat Sun
+" Matches 12:09:38 or 00:03:38.129Z or 01:32:12.102938 +0700 or 01:32:12.1234567890 or 21:14:18+11:00
+syn match logTime display '\d\{2}:\d\{2}:\d\{2}\(\.\d\{2,9}\)\?\(\s\?[-+]\(\d\{1,2\}:\d\{2\}\|\d\{2,4}\)\|Z\)\?\>' nextgroup=logTimeZone,logSysColumns skipwhite
+" Time zone e.g. Z, +08:00, PST
+syn match logTimeZone display 'Z\|[+-]\d\{2}:\d\{2}\|\a\{3}\>' contained skipwhite nextgroup=logSysColumns
+" Matches time durations like 1ms or 1y 2d 23ns 3.14s 1.2e4s 3E+20h
+syn match logDuration display '\(\(\(\d\+d\)\?\d\+h\)\?\d\+m\)\?\d\+\(\.\d\+\)\?[mun]\?s\>'
+
+" Objects
+"---------------------------------------------------------------------------
+syn match logUrl display '\<https\?:\/\/\S\+'
+syn match logMacAddress display '\<\x\{2}\([:-]\?\x\{2}\)\{5}\>'
+syn match logIPv4 display '\<\d\{1,3}\(\.\d\{1,3}\)\{3}\(\/\d\+\)\?\>'
+syn match logIPv6 display '\<\x\{1,4}\(:\x\{1,4}\)\{7}\(\/\d\+\)\?\>'
+syn match logUUID display '\<\x\{8}-\x\{4}-\x\{4}-\x\{4}-\x\{12}\>'
+syn match logMD5 display '\<\x\{32}\>'
+syn match logSHA display '\<\(\x\{40}\|\x\{56}\|\x\{64}\|\x\{96}\|\x\{128}\)\>'
+
+" Only highlight a path which is at the start of a line, or preceded by a space
+" or an equal sign (for env vars, e.g. PATH=/usr/bin)
+" POSIX-style path e.g. '/var/log/system.log', './run.sh', '../a/b', '~/c'.
+syn match logFilePath display '\(^\|\s\|=\)\zs\(\.\{0,2}\|\~\)\/\f\+\ze'
+" Windows drive path e.g. 'C:\Users\Test'
+syn match logFilePath display '\(^\|\s\|=\)\zs\a:\\\f\+\ze'
+" Windows UNC path e.g. '\\server\share'
+syn match logFilePath display '\(^\|\s\|=\)\zs\\\\\f\+\ze'
+
+" Java Errors
+"---------------------------------------------------------------------------
+syn match logJavaError '\%(\%(Error\|Exception\):\s*\)\zs\w.\{-}\ze\(\\n\|$\)' contained
+
+" Syslog Columns
+"---------------------------------------------------------------------------
+" Syslog hostname, program and process number columns
+syn match logSysColumns '\w\(\w\|\.\|-\)\+ \(\w\|\.\|-\)\+\(\[\d\+\]\)\?:' contains=logOperator,@logLvs,LogSysProcess contained
+syn match logSysProcess '\(\w\|\.\|-\)\+\(\[\d\+\]\)\?:' contains=logOperator,logNumber,logBrackets contained
+
+" XML Tags
+"---------------------------------------------------------------------------
+" Simplified matches, not accurate with the spec to avoid false positives
+syn match logXmlHeader /<?\(\w\|-\)\+\(\s\+\w\+\(="[^"]*"\|='[^']*'\)\?\)*?>/ contains=logString,logXmlAttribute,logXmlNamespace
+syn match logXmlDoctype /<!DOCTYPE[^>]*>/ contains=logString,logXmlAttribute,logXmlNamespace
+syn match logXmlTag /<\/\?\(\(\w\|-\)\+:\)\?\(\w\|-\)\+\(\(\n\|\s\)\+\(\(\w\|-\)\+:\)\?\(\w\|-\)\+\(="[^"]*"\|='[^']*'\)\?\)*\s*\/\?>/ contains=logString,logXmlAttribute,logXmlNamespace
+syn match logXmlAttribute contained "\w\+=" contains=logOperator
+syn match logXmlAttribute contained "\(\n\|\s\)\(\(\w\|-\)\+:\)\?\(\w\|-\)\+\(=\)\?" contains=logXmlNamespace,logOperator
+syn match logXmlNamespace contained "\(\w\|-\)\+:" contains=logOperator
+syn region logXmlComment start=/<!--/ end=/-->/
+syn match logXmlCData /<!\[CDATA\[.*\]\]>/
+syn match logXmlEntity /&#\?\w\+;/
+
+" Levels
+"---------------------------------------------------------------------------
+syn keyword logLvFatal FATAL Fatal fatal
+syn keyword logLvEmergency EMERG[ENCY] Emerg[ency] emerg[ency]
+syn keyword logLvAlert ALERT Alert alert
+syn keyword logLvCritical CRIT[ICAL] Crit[ical] crit[ical]
+syn keyword logLvError E ERR[ORS] Err[ors] err[ors]
+syn keyword logLvFail F FAIL[ED] Fail[ed] fail[ed] FAILURE Failure failure
+syn keyword logLvFault FAULT Fault fault
+syn keyword logLvNack NACK Nack nack NAK Nak nak
+syn keyword logLvWarning W WARN[ING] Warn[ing] warn[ing]
+syn keyword logLvBad BAD Bad bad
+syn keyword logLvNotice NOTICE Notice notice
+syn keyword logLvInfo I INFO Info info
+syn keyword logLvDebug D DEBUG Debug debug DBG Dbg dbg
+syn keyword logLvTrace TRACE Trace trace
+syn keyword logLvVerbose V VERBOSE Verbose verbose
+syn keyword logLvPass PASS[ED] Pass[ed] pass[ed]
+syn keyword logLvSuccess SUCCEED[ED] Succeed[ed] succeed[ed] SUCCESS Success success
+
+" Composite log levels e.g. *_INFO
+syn match logLvFatal display '\<\u\+_FATAL\>'
+syn match logLvEmergency display '\<\u\+_EMERG\(ENCY\)\?\>'
+syn match logLvAlert display '\<\u\+_ALERT\>'
+syn match logLvCritical display '\<\u\+_CRIT\(ICAL\)\?\>'
+syn match logLvError display '\<\u\+_ERR\(OR\)\?\>'
+syn match logLvFail display '\<\u\+_FAIL\(URE\)\?\>'
+syn match logLvWarning display '\<\u\+_WARN\(ING\)\?\>'
+syn match logLvNotice display '\<\u\+_NOTICE\>'
+syn match logLvInfo display '\<\u\+_INFO\>'
+syn match logLvDebug display '\<\u\+_DEBUG\>'
+syn match logLvTrace display '\<\u\+_TRACE\>'
+
+syn cluster logLvs contains=LogLvFatal,LogLvEmergency,LogLvAlert,LogLvCritical,LogLvError,LogLvFail,LogLvFault,LogLvNack,LogLvWarning,LogLvBad,LogLvNotice,LogLvInfo,LogLvDebug,LogLvTrace,LogLvVerbose,LogLvPass,LogLvSuccess
+
+" Highlight links
+"---------------------------------------------------------------------------
+hi def link logNumber Number
+hi def link logNumberHex Number
+hi def link logNumberBin Number
+hi def link logNumberOct Number
+hi def link logNumberFloat Float
+
+hi def link logBoolean Boolean
+hi def link logNull Constant
+hi def link logString String
+
+hi def link logDate Type
+hi def link logTime Operator
+hi def link logTimeZone Operator
+hi def link logDuration Operator
+
+hi def link logUrl Underlined
+hi def link logIPV4 Underlined
+hi def link logIPV6 Underlined
+hi def link logMacAddress Underlined
+hi def link logUUID Label
+hi def link logMD5 Label
+hi def link logSHA Label
+hi def link logFilePath Structure
+
+hi def link logJavaError ErrorMsg
+
+hi def link logSysColumns Statement
+hi def link logSysProcess Function
+
+hi def link logXmlHeader Function
+hi def link logXmlDoctype Function
+hi def link logXmlTag Identifier
+hi def link logXmlAttribute Type
+hi def link logXmlNamespace Include
+hi def link logXmlComment Comment
+hi def link logXmlCData String
+hi def link logXmlEntity Special
+
+hi def link logOperator Special
+hi def link logBrackets Special
+hi def link logSeparator Comment
+
+hi def link LogLvFatal ErrorMsg
+hi def link LogLvEmergency ErrorMsg
+hi def link LogLvAlert ErrorMsg
+hi def link LogLvCritical ErrorMsg
+hi def link LogLvError ErrorMsg
+hi def link LogLvFail ErrorMsg
+hi def link LogLvFault ErrorMsg
+hi def link LogLvNack ErrorMsg
+hi def link LogLvWarning WarningMsg
+hi def link LogLvBad WarningMsg
+hi def link LogLvNotice Exception
+hi def link LogLvInfo LogBlue
+hi def link LogLvDebug Debug
+hi def link LogLvTrace Special
+hi def link LogLvVerbose Special
+hi def link LogLvPass LogGreen
+hi def link LogLvSuccess LogGreen
+
+" Custom highlight group
+" ------------------------------
+hi logGreen ctermfg=lightgreen guifg=#a4c672
+hi logBlue ctermfg=lightblue guifg=#92bcfc
+
+
+let b:current_syntax = 'log'