wlambda 0.8.0

WLambda is an embeddable scripting language for Rust
Documentation
" Vim syntax file
" Language: WLambda
" Last Change: 2019-07-15
" Author: Weird Constructor <weirdconstructor@gmail.com>
" Maintainer: Weird Constructor <weirdconstructor@gmail.com>

"if exists("b:current_syntax")
"  finish
"endif

syntax clear

setlocal iskeyword=@,@-@,48-57,a-z,A-Z,$,:,?,_,-,+,%,<,>,192-255,`

syn match wlSymbol      ':[^[:space:]\.,;{}\[\]()~|="]\+'

syn match wlIdentifier  /[a-zA-Z_@?]\+[^[:space:]\.,;{}\[\]()~|=]*/
syn match wlAssignId    /[*a-zA-Z_@?]\+[^[:space:]\.,;{}\[\]()~|=]*/ contained
syn match wlMapKeyId    /[a-zA-Z_@?]\+[^[:space:]\.,;{}\[\]()~|=]*\s*\ze=/ contained

syn match wlComment /#.*$/ contains=wlTodo
syn keyword wlTodo TODO XXX FIXME   contained

syn keyword wlRepeat    iter jump ? if for while map filter range return break next match

syn keyword wlKeyword   panic not block unwrap unwrap_err error_to_str
syn keyword wlKeyword   sym is_some is_none is_err is_map is_vec is_fun is_str is_sym
syn keyword wlKeyword   is_ref is_wref is_bool is_bytes is_float is_int len type to_drop
syn keyword wlKeyword   float bool int on_error byte char is_byte is_char
syn keyword wlKeyword   _?

syn keyword wlKeyword std:append
syn keyword wlKeyword std:assert
syn keyword wlKeyword std:assert_eq
syn keyword wlKeyword std:bytes:from_hex
syn keyword wlKeyword std:bytes:from_vec
syn keyword wlKeyword std:bytes:to_hex
syn keyword wlKeyword std:bytes:to_vec
syn keyword wlKeyword std:chrono:timestamp
syn keyword wlKeyword std:cmp:num:asc
syn keyword wlKeyword std:cmp:num:desc
syn keyword wlKeyword std:cmp:str:asc
syn keyword wlKeyword std:cmp:str:desc
syn keyword wlKeyword std:copy
syn keyword wlKeyword std:deser:csv
syn keyword wlKeyword std:deser:json
syn keyword wlKeyword std:deser:msgpack
syn keyword wlKeyword std:displayln
syn keyword wlKeyword std:drop
syn keyword wlKeyword std:dump_func
syn keyword wlKeyword std:fold
syn keyword wlKeyword std:hash:fnv1a
syn keyword wlKeyword std:io:file:append
syn keyword wlKeyword std:io:file:read
syn keyword wlKeyword std:io:file:read_text
syn keyword wlKeyword std:io:file:write_safe
syn keyword wlKeyword std:io:flush
syn keyword wlKeyword std:io:read_some
syn keyword wlKeyword std:io:write
syn keyword wlKeyword std:io:write_some
syn keyword wlKeyword std:measure_time
syn keyword wlKeyword std:neg
syn keyword wlKeyword std:net:tcp:connect
syn keyword wlKeyword std:net:tcp:listen
syn keyword wlKeyword std:net:udp:new
syn keyword wlKeyword std:net:udp:recv
syn keyword wlKeyword std:net:udp:send
syn keyword wlKeyword std:num:abs
syn keyword wlKeyword std:num:int_to_closed_open01
syn keyword wlKeyword std:num:int_to_open01
syn keyword wlKeyword std:num:int_to_open_closed01
syn keyword wlKeyword std:pop
syn keyword wlKeyword std:prepend
syn keyword wlKeyword std:push
syn keyword wlKeyword std:rand
syn keyword wlKeyword std:rand:split_mix64_new
syn keyword wlKeyword std:rand:split_mix64_new_from
syn keyword wlKeyword std:rand:split_mix64_next
syn keyword wlKeyword std:rand:split_mix64_next_closed_open01
syn keyword wlKeyword std:rand:split_mix64_next_open01
syn keyword wlKeyword std:rand:split_mix64_next_open_closed01
syn keyword wlKeyword std:re:map
syn keyword wlKeyword std:re:match
syn keyword wlKeyword std:re:replace_all
syn keyword wlKeyword std:ref_id
syn keyword wlKeyword std:ser:csv
syn keyword wlKeyword std:ser:json
syn keyword wlKeyword std:ser:msgpack
syn keyword wlKeyword std:set_ref
syn keyword wlKeyword std:shuffle
syn keyword wlKeyword std:sort

syn keyword wlKeyword str
syn keyword wlKeyword std:str:cat
syn keyword wlKeyword std:str:from_char_vec
syn keyword wlKeyword std:str:from_latin1
syn keyword wlKeyword std:str:from_utf8
syn keyword wlKeyword std:str:from_utf8_lossy
syn keyword wlKeyword std:str:join
syn keyword wlKeyword std:str:len
syn keyword wlKeyword std:str:pad_end
syn keyword wlKeyword std:str:pad_start
syn keyword wlKeyword std:str:to_bytes
syn keyword wlKeyword std:str:to_bytes_latin1
syn keyword wlKeyword std:str:to_char_vec
syn keyword wlKeyword std:str:to_lowercase
syn keyword wlKeyword std:str:to_uppercase
syn keyword wlKeyword std:str:write
syn keyword wlKeyword std:strengthen
syn keyword wlKeyword std:take
syn keyword wlKeyword std:to_drop
syn keyword wlKeyword std:to_no_arity
syn keyword wlKeyword std:to_ref
syn keyword wlKeyword std:uneg
syn keyword wlKeyword std:unshift
syn keyword wlKeyword std:weaken
syn keyword wlKeyword std:wlambda:version
syn keyword wlKeyword std:write_str
syn keyword wlKeyword std:writeln
syn keyword wlKeyword std:yay

syn match wlValue     '\$s'
syn match wlValue     '\$self'
syn match wlValue     '\$\\'
syn match wlValue     '\$d'
syn match wlValue     '\$data'
syn match wlValue     '\$t'
syn match wlValue     '\$true'
syn match wlValue     '\$f'
syn match wlValue     '\$false'
syn match wlValue     '\$n'
syn match wlValue     '\$none'
syn match wlValue     '\$e'
syn match wlValue     '\$error'
syn match wlRefData   '$@i'
syn match wlRefData   '$@int'
syn match wlRefData   '$@f'
syn match wlRefData   '$@float'
syn match wlRefData   '$@s'
syn match wlRefData   '$@string'
syn match wlRefData   '$@b'
syn match wlRefData   '$@bytes'
syn match wlRefData   '$@v'
syn match wlRefData   '$@vec'
syn match wlRefData   '$@m'
syn match wlRefData   '$@map'
syn match wlRefData   '$@@'
syn match wlRefData   '$iter'
syn match wlRefData   '$+'
syn match wlRefData   '$&'
syn match wlRefData   '$&&'
syn match wlRefData   '$weak&'
syn match wlRefData   '$w&'
syn match wlRefData   '$\*'
syn match wlRefData   '$:'
syn match wlRefData   '=>'

syn match wlStructMatch '$P'
syn match wlCodeExpr    '$c'
syn match wlCodeExpr    '$code'

syn match wlValue     '[-+]\?[0-9a-fA-F.]\@<!\d\+'
syn match wlValue     '[-+]\?[0-9a-fA-F.]\@<!\d\+\.\d\+'
syn match wlValue     '[-+]\?0x[a-fA-F0-9]\+'
syn match wlValue     '[-+]\?0x[a-fA-F0-9]\+\(\.[a-fA-F0-9]\+\)\?'
syn match wlValue     '[-+]\?0b[01]\+'
syn match wlValue     '[-+]\?0b[01]\+\(\.[01]\+\)\?'
syn match wlValue     '[-+]\?0o[0-8]\+'
syn match wlValue     '[-+]\?0o[0-8]\+\(\.[0-8]\+\)\?'
syn match wlValue     '[-+]\?[0-9]\+r[0-9a-zA-Z]\+'
syn match wlValue     '[-+]\?[0-9]\+r[0-9a-zA-Z]\+\(\.[0-9a-zA-Z]\+\)\?'

syn match wlFuncCombinators '|'
syn match wlFuncCombinators '||'
syn match wlFuncCombinators '|>'
syn match wlFuncCombinators '[~]'
syn match wlFuncCombinators '&>'
syn match wlFuncCombinators '<&'

" WLambda Regex Patterns

syn region wlRxPattern     matchgroup=wlString start="\$r[gs]\?\z(.\)"       matchgroup=wlRxPattern end="\z1"   keepend contains=@wlPattern
syn region wlRxPattern     matchgroup=wlString start="\$r[gs]\?\["           matchgroup=wlRxPattern end="\]"    keepend contains=@wlPattern
syn region wlRxPattern     matchgroup=wlString start="\$r[gs]\?("            matchgroup=wlRxPattern end=")"     keepend contains=@wlPattern
syn region wlRxPattern     matchgroup=wlString start="\$r[gs]\?{"            matchgroup=wlRxPattern end="}"     keepend contains=@wlPattern
syn region wlRxPattern     matchgroup=wlString start="\$r[gs]\?<"            matchgroup=wlRxPattern end=">"     keepend contains=@wlPattern

syn cluster wlPattern contains=wlPatternFun,wlPatternRx,wlPatternRxAtom,wlPatternRxErr,wlStringSpec,wlPatternRxEsc,wlPatternGroup

syn match wlPatternRxAtom '[^()\[\]{}!?\\|^,'&:;$*=/]'          contained
syn match wlPatternRxErr  '[{}?\\|^,'&:;$*=]'                   contained
syn match wlPatternRxEsc  '\\.'                                 contained
syn match wlPatternFun    '|'                                   contained
syn match wlPatternFun    '\*'                                  contained
syn match wlPatternFun    '?'                                   contained
syn match wlPatternRx     '\$[*+?!=^$sS]'                       contained
syn match wlPatternRx     '\$<[*+?]'                            contained
syn match wlPatternRx     '\$&[UL]'                             contained

syn region wlPatternGroup matchgroup=wlPatternGroup start='('   skip=+\\\\\|\\)+ end=')' contained keepend contains=@wlPattern
syn region wlPatternGroup matchgroup=wlPatternGroup start='(\^' skip=+\\\\\|\\)+ end=')' contained keepend contains=@wlPattern
syn region wlPatternGroup matchgroup=wlPatternGroup start='\['   skip=+\\\\\|\\]+  end='\]' contained keepend contains=@wlPattern
syn region wlPatternGroup matchgroup=wlPatternGroup start='\[\^' skip=+\\\\\|\\]+  end='\]' contained keepend contains=@wlPattern

" WLambda Selectors

syn region wlSelector    matchgroup=wlString start="\$S\z(.\)" end="\z1"re=s-1 keepend contains=@wlSelPath
syn region wlSelector    matchgroup=wlString start="\$S\["     end="\]"  keepend contains=@wlSelPath
syn region wlSelector    matchgroup=wlString start="\$S("      end=")"   keepend contains=@wlSelPath
syn region wlSelector    matchgroup=wlString start="\$S{"      end="}"   keepend contains=@wlSelPath
syn region wlSelector    matchgroup=wlString start="\$S<"      end=">"   keepend contains=@wlSelPath

syn cluster wlSelPath contains=wlSelPathSep,@wlPattern,wlSelNodeMatch

syn match wlSelPathSep  '/'         contained
syn match wlSelPathSep  '\^'        contained
syn match wlSelPathSep  '\*\*'      contained
syn match wlSelPathSep  '\*'        contained
syn match wlSelPathSep  '&'         contained
syn match wlSelPathSep  '|'         contained

syn match wlSelNodeMatch ':'        contained nextgroup=wlSelNodeNeg,wlSelNodeType,wlSelNodeSubSel
syn match wlSelNodeNeg   '!'        contained nextgroup=wlSelNodeType,wlSelNodeSubSel

syn match wlSelNodeType  'type\s*=' contained nextgroup=wlPattern
syn match wlSelNodeType  'str\s*='  contained nextgroup=wlPattern

syn region wlSelNodeSubSel matchgroup=wlPatternGroup start='(' end=')' contained keepend contains=@wlSelPath
syn region wlSelNodeSubSel matchgroup=wlPatternGroup start='{' end='}' contained keepend contains=@wlPattern,wlSelNodeKVAssign

syn match wlSelNodeKVAssign  '='  contained
syn match wlSelNodeKVAssign  ','  contained

" WLambds String Escapes

syn match wlStringSpec  /\\x[a-f0-9A-F][a-f0-9A-F]/  contained
syn match wlStringSpec  /\\["'\\nrt0]/               contained
syn match wlStringSpec  /\\u{[a-f0-9A-F]\+}/         contained

" WLambda Strings

syn region wlString     start="\$[Qq]\z(.\)" end="\z1"
syn region wlString     start="\$[Qq]\["     end="\]"
syn region wlString     start="\$[Qq]("      end=")"
syn region wlString     start="\$[Qq]{"      end="}"
syn region wlString     start="\$[Qq]<"      end=">"

syn region wlQSymbol    start=+:"+      skip=+\\\\\|\\"+  end=+"+ contains=wlStringSpec
syn region wlString     start=+"+       skip=+\\\\\|\\"+  end=+"+ contains=wlStringSpec
syn region wlString     start=+\$b"+    skip=+\\\\\|\\"+  end=+"+ contains=wlStringSpec
syn region wlString     start=+'+       skip=+\\\\\|\\'+  end=+'+ contains=wlStringSpec
syn region wlString     start=+\$b'+    skip=+\\\\\|\\'+  end=+'+ contains=wlStringSpec

" WLambda number vectors:
syn region wlNumVec matchgroup=wlRefData start=+$[poif](+ end=+)+ contains=@wlExpr

syn match wlAssign   '\(^\|\s\+\|{\|;\|\\\)\@<=\.' nextgroup=wlAssignId,wlDestr
syn match wlDefine   '!'                       nextgroup=wlImport,wlExport,wlDefTag,wlAssignId,wlDestr
syn match wlDefTag   ':global' skipwhite skipnl nextgroup=wlAssignId contained
syn match wlImport   '@import' skipwhite skipnl nextgroup=wlAssignId contained
syn match wlImport   '@wlambda' skipwhite skipnl contained
syn match wlExport   '@export' skipwhite skipnl nextgroup=wlAssignId contained
syn region wlDestr         matchgroup=wlDestrDelim start="(" end=")" transparent contained contains=wlIdentifier,wlComment
syn match wlArity     '|\s*\d\+\s*<\s*\d\+\s*|' contained
syn match wlArity     '|\s*\d\+\s*|'            contained
syn match wlArity     '|\s*|'                   contained

syn match wlSplice      '*'           contained nextgroup=@wlExpr

syn cluster wlExpr  contains=wlComment,wlRefData,wlValue,wlIdentifier,wlKeyword,wlKeyword2,wlRepeat,wlSymbol,wlQSymbol,wlString,wlArgList,wlFunc,wlFuncCombinators,wlList,wlMap,wlNumVec,wlStructMatch,wlQuote,wlShortFunc,wlSelector,wlRxPattern

syn region wlMap       matchgroup=wlRefData start="\${" end="}"     transparent contains=@wlExpr,wlMapKeyId,wlSplice
syn region wlList      matchgroup=wlRefData start="\$\[" end="\]"   transparent contains=@wlExpr,wlSplice
syn region wlQuote     matchgroup=wlExprQuote start="(" end=")"     transparent contains=@wlExpr
syn region wlArgList   matchgroup=wlFuncDelims start="\[" end="\]"  transparent contains=@wlExpr
syn region wlFunc      matchgroup=wlFuncDelims start="{" end="}"    transparent contains=@wlExpr,wlAssign,wlDefine,wlArity
syn match wlShortFunc  '\\'                                                    nextgroup=@wlExpr,wlAssign,wlDefine,wlArity

hi def link wlKeyword           Function
hi def link wlKeyword2          Function

hi def link wlArgList           Function
hi def link wlFuncDelims        Function
hi def link wlShortFunc         Function
hi def link wlFuncCombinators   Function
hi def link wlExprQuote         Normal

hi def link wlRepeat        Repeat
hi def link wlAssign        Statement
hi def link wlDefine        Statement
hi def link wlDestrDelim    Statement

hi def link wlValue         Constant

hi def link wlSelector          String
hi def link wlSelPathSep        Function
hi def link wlSelNodeSubSel     Function
hi def link wlSelNodeKVAssign   Function
hi def link wlSelNodeNeg        Structure
hi def link wlSelNodeMatch      Structure
hi def link wlSelNodeType       Special

hi def link wlRxPattern     String
hi def link wlPatternFun    Function
hi def link wlPatternGroup  Function
hi def link wlPatternRx     Structure
hi def link wlPatternRxAtom String
hi def link wlPatternRxEsc  Special
hi def link wlPatternRxErr  Error

hi def link wlError         PreProc
hi def link wlImport        PreProc
hi def link wlExport        PreProc
hi def link wlString        String
hi def link wlStringSpec    Special
hi def link wlSymbol        Special
hi def link wlQSymbol       Special
hi def link wlStructMatch   Special
hi def link wlCodeExpr      Special
hi def link wlAssignId      Special
hi def link wlMapKeyId      Special
hi def link wlSplice        Function
hi def link wlRefData       Structure
hi def link wlDefTag        Type
hi def link wlArity         Type
hi def link wlSymbolSpec    Constant
hi def link wlIdentifier    Normal
hi def link wlComment       Comment
hi def link wlTodo          Todo

"" sync on a line starting with a ( ... ) form
"syn sync match matchPlace grouphere NONE "^("
syn sync lines=500
""syn sync ccomment lalMultilineComment

let b:current_syntax = "wlambda"