|
|
|
@@ -0,0 +1,153 @@
|
|
|
|
|
" Vim syntax file
|
|
|
|
|
" Language: Cangjie
|
|
|
|
|
" Maintainer: Wu Junkai <wu.junkai@qq.com>
|
|
|
|
|
" Last Change: 2025 Aug 17
|
|
|
|
|
"
|
|
|
|
|
" The Cangjie programming language is a new-generation programming
|
|
|
|
|
" language oriented to full-scenario intelligence. It features
|
|
|
|
|
" native intelligence, being naturally suitable for all scenarios,
|
|
|
|
|
" high performance and strong security. It is mainly applied in
|
|
|
|
|
" scenarios such as native applications and service applications
|
|
|
|
|
" of HarmonyOS NEXT, providing developers with a good programming
|
|
|
|
|
" experience.
|
|
|
|
|
"
|
|
|
|
|
" For more information, see:
|
|
|
|
|
" - https://cangjie-lang.cn/
|
|
|
|
|
" - https://gitcode.com/Cangjie
|
|
|
|
|
|
|
|
|
|
" quit when a syntax file was already loaded
|
|
|
|
|
if exists("b:current_syntax")
|
|
|
|
|
finish
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
let s:save_cpo = &cpo
|
|
|
|
|
set cpo&vim
|
|
|
|
|
|
|
|
|
|
" 0. check the user's settings
|
|
|
|
|
" use let g:cangjie_<item>_color to enable/disable syntax highlighting
|
|
|
|
|
function! s:enabled(item) abort
|
|
|
|
|
return get(g:, 'cangjie_' . a:item . '_color', 1)
|
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
|
|
syn case match
|
|
|
|
|
|
|
|
|
|
" 1. comments
|
|
|
|
|
syn keyword cangjieTodo TODO FIXME XXX NOTE BUG contained
|
|
|
|
|
syn match cangjieComment /\v\/\/.*/ contains=cangjieTodo
|
|
|
|
|
syn region cangjieComment start=/\/\*/ end=/\*\// contains=cangjieTodo,@Spell
|
|
|
|
|
|
|
|
|
|
" 2. keywords
|
|
|
|
|
syn keyword cangjieDeclaration abstract extend macro foreign
|
|
|
|
|
syn keyword cangjieDeclaration interface open operator override private prop protected
|
|
|
|
|
syn keyword cangjieDeclaration public redef static type
|
|
|
|
|
syn keyword cangjieStatement as break case catch continue do else finally for in
|
|
|
|
|
syn keyword cangjieStatement if in is match quote return spawn super synchronized
|
|
|
|
|
syn keyword cangjieStatement throw try unsafe where while
|
|
|
|
|
syn keyword cangjieIdentlike false init main this true
|
|
|
|
|
syn keyword cangjieVariable const let var
|
|
|
|
|
syn keyword cangjieOption Option Some None
|
|
|
|
|
syn keyword cangjieDeclaration func struct class enum import package nextgroup=cangjieTypeName skipwhite
|
|
|
|
|
syn cluster cangjieKeywordCluster contains=cangjieDeclaration,cangjieStatement,cangjieIdentlike,cangjieVariable,cangjieOption
|
|
|
|
|
|
|
|
|
|
" 3. macro (e.g., @override)
|
|
|
|
|
syn match cangjieMacro /@\h\w*/
|
|
|
|
|
|
|
|
|
|
" 4. Type and Function Names
|
|
|
|
|
syn match cangjieTypeName /\h\w*/ contained
|
|
|
|
|
|
|
|
|
|
" 5. specail identifiers
|
|
|
|
|
syn region cangjieSpIdentifier start=/`/ end=/`/ oneline
|
|
|
|
|
|
|
|
|
|
" 6. types
|
|
|
|
|
syn keyword cangjieSpType Any Nothing Range Unit Iterable
|
|
|
|
|
syn keyword cangjieArrayType Array ArrayList VArray
|
|
|
|
|
syn keyword cangjieHashType HashMap HashSet
|
|
|
|
|
syn keyword cangjieCommonType Bool Byte Rune String
|
|
|
|
|
syn keyword cangjieFloatType Float16 Float32 Float64
|
|
|
|
|
syn keyword cangjieIntType Int8 Int16 Int32 Int64 IntNative
|
|
|
|
|
syn keyword cangjieUIntType UInt8 UInt16 UInt32 UInt64 UIntNative
|
|
|
|
|
syn cluster cangjieTypeCluster contains=cangjieSpType,cangjieArrayType,cangjieHashType,cangjieCommonType,cangjieFloatType,cangjieIntType,cangjieUIntType
|
|
|
|
|
|
|
|
|
|
" 7. character and strings
|
|
|
|
|
syn cluster cangjieInterpolatedPart contains=@cangjieKeywordCluster,cangjieSpIdentifier,@cangjieTypeCluster,@cangjieNumberCluster,cangjieOperator
|
|
|
|
|
syn region cangjieInterpolation contained keepend start=/\${/ end=/}/ contains=@cangjieInterpolatedPart matchgroup=cangjieInterpolationDelimiter
|
|
|
|
|
syn region cangjieRune start=/r'/ skip=/\\\\\|\\'/ end=/'/ oneline
|
|
|
|
|
syn region cangjieRune start=/b'/ skip=/\\\\\|\\'/ end=/'/ oneline
|
|
|
|
|
syn region cangjieString start=/"/ skip=/\\\\\|\\"/ end=/"/ oneline contains=cangjieInterpolation
|
|
|
|
|
syn region cangjieString start=/'/ skip=/\\\\\|\\'/ end=/'/ oneline contains=cangjieInterpolation
|
|
|
|
|
syn region cangjieString start=/"""/ skip=/\\\\\|\\"/ end=/"""/ contains=cangjieInterpolation keepend
|
|
|
|
|
syn region cangjieString start=/'''/ skip=/\\\\\|\\'/ end=/'''/ contains=cangjieInterpolation keepend
|
|
|
|
|
syn region cangjieRawString start='\z(#*\)#"' end='"#\z1'
|
|
|
|
|
syn region cangjieRawString start='\z(#*\)#\'' end='\'#\z1'
|
|
|
|
|
|
|
|
|
|
" 8. number
|
|
|
|
|
syn match cangjieFloatNumber /\v\c<\d[0-9_]*\.\d[0-9_]*([ep][-+]?\d[0-9_]*)?(f(16|32|64))?>/
|
|
|
|
|
syn match cangjieFloatNumber /\v\c<\d[0-9_]*\.([ep][-+]?\d[0-9_]*)?(f(16|32|64))?>/
|
|
|
|
|
syn match cangjieFloatNumber /\v\c\.\d[0-9_]*([ep][-+]?\d[0-9_]*)?(f(16|32|64))?>/
|
|
|
|
|
syn match cangjieScienceNumber /\v\c<\d[0-9_]*[e][-+]?\d[0-9_]*>/
|
|
|
|
|
syn match cangjieHexNumber /\v\c<0x[0-9a-f_]+([iu](8|16|32|64))?>/
|
|
|
|
|
syn match cangjieOctalNumber /\v\c<0o[0-7_]+([iu](8|16|32|64))?>/
|
|
|
|
|
syn match cangjieBinaryNumber /\v\c<0b[01_]+([iu](8|16|32|64))?>/
|
|
|
|
|
syn match cangjieDecimalNumber /\v\c<\d[0-9_]*([iu](8|16|32|64))?>/
|
|
|
|
|
syn cluster cangjieNumberCluster contains=cangjieFloatNumber,cangjieScienceNumber,cangjieHexNumber,cangjieOctalNumber,cangjieBinaryNumber,cangjieDecimalNumber
|
|
|
|
|
|
|
|
|
|
" 9. operators
|
|
|
|
|
syn match cangjieOperator /[-+%<>!&|^*=]=\?/
|
|
|
|
|
syn match cangjieOperator /\/\%(=\|\ze[^/*]\)/
|
|
|
|
|
syn match cangjieOperator /\%(<<\|>>\|&^\)=\?/
|
|
|
|
|
syn match cangjieOperator /:=\|||\|<-\|++\|--/
|
|
|
|
|
syn match cangjieOperator /[~]/
|
|
|
|
|
syn match cangjieOperator /[:]/
|
|
|
|
|
syn match cangjieOperator /\.\./
|
|
|
|
|
syn match cangjieVarArgs /\.\.\./
|
|
|
|
|
|
|
|
|
|
" finally, link the syntax groups to the highlight groups
|
|
|
|
|
if s:enabled('comment')
|
|
|
|
|
hi def link cangjieTodo Todo
|
|
|
|
|
hi def link cangjieComment Comment
|
|
|
|
|
endif
|
|
|
|
|
if s:enabled('identifier')
|
|
|
|
|
hi def link cangjieSpIdentifier Identifier
|
|
|
|
|
endif
|
|
|
|
|
if s:enabled('keyword')
|
|
|
|
|
hi def link cangjieDeclaration Keyword
|
|
|
|
|
hi def link cangjieStatement Statement
|
|
|
|
|
hi def link cangjieIdentlike Keyword
|
|
|
|
|
hi def link cangjieVariable Keyword
|
|
|
|
|
hi def link cangjieOption Keyword
|
|
|
|
|
endif
|
|
|
|
|
if s:enabled('macro')
|
|
|
|
|
hi def link cangjieMacro PreProc
|
|
|
|
|
endif
|
|
|
|
|
if s:enabled('number')
|
|
|
|
|
hi def link cangjieFloatNumber Float
|
|
|
|
|
hi def link cangjieScienceNumber Float
|
|
|
|
|
hi def link cangjieHexNumber Number
|
|
|
|
|
hi def link cangjieOctalNumber Number
|
|
|
|
|
hi def link cangjieBinaryNumber Number
|
|
|
|
|
hi def link cangjieDecimalNumber Number
|
|
|
|
|
endif
|
|
|
|
|
if s:enabled('operator')
|
|
|
|
|
hi def link cangjieOperator Operator
|
|
|
|
|
hi def link cangjieVarArgs Operator
|
|
|
|
|
endif
|
|
|
|
|
if s:enabled('string')
|
|
|
|
|
hi def link cangjieRune Character
|
|
|
|
|
hi def link cangjieString String
|
|
|
|
|
hi def link cangjieRawString String
|
|
|
|
|
endif
|
|
|
|
|
if s:enabled('type')
|
|
|
|
|
hi def link cangjieTypeName Type
|
|
|
|
|
hi def link cangjieSpType Type
|
|
|
|
|
hi def link cangjieArrayType Type
|
|
|
|
|
hi def link cangjieHashType Type
|
|
|
|
|
hi def link cangjieCommonType Type
|
|
|
|
|
hi def link cangjieFloatType Type
|
|
|
|
|
hi def link cangjieIntType Type
|
|
|
|
|
hi def link cangjieUIntType Type
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
let b:current_syntax = "cangjie"
|
|
|
|
|
|
|
|
|
|
let &cpo = s:save_cpo
|
|
|
|
|
unlet s:save_cpo
|