mirror of
https://github.com/johnkerl/miller.git
synced 2026-01-23 02:14:13 +00:00
parent
620cb0b2fa
commit
7e1f6baeb5
4 changed files with 87 additions and 1 deletions
4
vim/README.md
Normal file
4
vim/README.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
# Vim syntax-highlighting for Miller DSL
|
||||
|
||||
* `vim/syntax/mlr.vim` goes to `~/.vim/syntax/mlr.vim`
|
||||
* `vim/ftdetect/mlr.vim` goes to `~/.vim/ftdetect/mlr.vim`
|
||||
1
vim/ftdetect/mlr.vim
Normal file
1
vim/ftdetect/mlr.vim
Normal file
|
|
@ -0,0 +1 @@
|
|||
au BufRead,BufNewFile *.mlr set filetype=mlr
|
||||
81
vim/syntax/mlr.vim
Normal file
81
vim/syntax/mlr.vim
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
" Copyright 2021 John Kerl. All rights reserved.
|
||||
" Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
|
||||
"
|
||||
" mlr.vim: Vim syntax file for the Miller DSL.
|
||||
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
syn case match
|
||||
|
||||
" ----------------------------------------------------------------
|
||||
" Goal: map the lexical elements of the Miller DSL grammar
|
||||
" https://github.com/johnkerl/miller/blob/main/go/src/parsing/mlr.bnf
|
||||
" to Vim syntax options
|
||||
" http://vimdoc.sourceforge.net/htmldoc/syntax.html
|
||||
" ----------------------------------------------------------------
|
||||
|
||||
" ----------------------------------------------------------------
|
||||
syn region mlrComment start="#" end="$"
|
||||
syn region mlrString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@mlrStringGroup
|
||||
syn match mlrDecimalInt "\<-\=\(0\|[1-9]_\?\(\d\|\d\+_\?\d\+\)*\)\%([Ee][-+]\=\d\+\)\=\>"
|
||||
syn match mlrHexadecimalInt "\<-\=0[xX]_\?\(\x\+_\?\)\+\>"
|
||||
syn match mlrBinaryInt "\<-\=0[bB]_\?\([01]\+_\?\)\+\>"
|
||||
syn match mlrFloat "\<-\=\d\+\.\d*\%([Ee][-+]\=\d\+\)\=\>"
|
||||
syn match mlrFloat "\<-\=\.\d\+\%([Ee][-+]\=\d\+\)\=\>"
|
||||
syn keyword mlrConstant M_PI M_E
|
||||
syn keyword mlrBoolean true false
|
||||
syn keyword mlrContextVariable IPS IFS IRS OPS OFS ORS OFLATSEP NF NR FNR FILENAME FILENUM
|
||||
syn keyword mlrENV ENV
|
||||
syn match mlrOperator /[-+%<>!&|^*=]=\?/
|
||||
syn match mlrOperator /\/\%(=\|\ze[^/*]\)/
|
||||
syn match mlrOperator /\%(<<\|>>\|&^\)=\?/
|
||||
syn match mlrOperator /:=\|||\|<-\|++\|--/
|
||||
" TODO: more operators
|
||||
syn keyword mlrKeyword begin do elif else end filter for if in while break continue return
|
||||
syn keyword mlrKeyword func subr call dump edump
|
||||
syn keyword mlrKeyword emit emitp emitf eprint eprintn print printn tee stdout stderr unset null
|
||||
syn keyword mlrType arr bool float int map num str var
|
||||
syn match mlrFieldName /\(\$[_a-zA-Z0-9]+\)/
|
||||
syn match mlrFieldName /\(\$\*\)/
|
||||
syn match mlrOosvarName /\(@[_a-zA-Z0-9]+\)/
|
||||
syn match mlrOosvarName /\(@\*\)/
|
||||
syn match mlrIdentifier /\(\<[a-zA-Z_][a-zA-Z_0-9]*\>\)/
|
||||
syn match mlrFunctionCall /\w\+\ze(/ contains=mlrBuiltins,mlrDeclaration
|
||||
|
||||
syn region mlrParen start='(' end=')' transparent
|
||||
syn region mlrBlock start="{" end="}" transparent
|
||||
|
||||
" Trailing whitespace; space-tab
|
||||
syn match mlrSpaceError display excludenl "\s\+$"
|
||||
syn match mlrSpaceError display " \+\t"me=e-1
|
||||
|
||||
" ----------------------------------------------------------------
|
||||
|
||||
hi def link mlrComment Comment
|
||||
hi def link mlrString String
|
||||
hi def link mlrDecimalInt Integer
|
||||
hi def link mlrHexadecimalInt Integer
|
||||
hi def link mlrBinaryInt Integer
|
||||
hi def link Integer Number
|
||||
hi def link mlrFloat Float
|
||||
hi def link mlrConstant Constant
|
||||
hi def link mlrBoolean Boolean
|
||||
hi def link mlrContextVariable Keyword
|
||||
hi def link mlrENV Keyword
|
||||
hi def link mlrOperator Operator
|
||||
hi def link mlrKeyword Keyword
|
||||
hi def link mlrType Type
|
||||
hi def link mlrFieldName Special
|
||||
hi def link mlrOosvarName Special
|
||||
hi def link mlrIdentifier Identifier
|
||||
hi def link mlrFunctionCall Type
|
||||
hi def link mlrSpaceError Error
|
||||
|
||||
" ----------------------------------------------------------------
|
||||
syn sync minlines=200
|
||||
|
||||
let b:current_syntax = "mlr"
|
||||
|
||||
" vim: sw=2 ts=2 et
|
||||
Loading…
Add table
Add a link
Reference in a new issue