0
0
mirror of https://github.com/vim/vim.git synced 2025-10-15 07:14:09 -04:00

runtime(cangjie): Fixes and improvements for syntax script

Housekeeping:
- Add GitHub repository link
- Update Last Change date

Style:
- Add Vim modeline for consistent formatting
- Unify indentation style (spaces to tabs)
- Wrap long cluster definitions for readability

New Features:
- Add highlighting for escape sequences
- Add error highlighting for invalid rune literals
- Add syntax-based folding support

Fixes:
- Fix rune matching to allow only a single character/escape
- Fix highlighting for double-quoted rune literals
- Fix highlighting for floats with exponents and type suffixes

Co-authored-by: dkearns <dougkearns@gmail.com>
Signed-off-by: Wu Junkai <wujunkai20041123@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Wu Junkai
2025-10-12 14:10:34 +00:00
committed by Christian Brabandt
parent 6800da6ff1
commit 37c8ce7fac

View File

@@ -1,7 +1,8 @@
" Vim syntax file " Vim syntax file
" Language: Cangjie " Language: Cangjie
" Maintainer: Wu Junkai <wu.junkai@qq.com> " Maintainer: Wu Junkai <wu.junkai@qq.com>
" Last Change: 2025 Aug 17 " URL: https://github.com/WuJunkai2004/cangjie.vim
" Last Change: 2025 Oct 12
" "
" The Cangjie programming language is a new-generation programming " The Cangjie programming language is a new-generation programming
" language oriented to full-scenario intelligence. It features " language oriented to full-scenario intelligence. It features
@@ -47,7 +48,12 @@ syn keyword cangjieIdentlike false init main this true
syn keyword cangjieVariable const let var syn keyword cangjieVariable const let var
syn keyword cangjieOption Option Some None syn keyword cangjieOption Option Some None
syn keyword cangjieDeclaration func struct class enum import package nextgroup=cangjieTypeName skipwhite syn keyword cangjieDeclaration func struct class enum import package nextgroup=cangjieTypeName skipwhite
syn cluster cangjieKeywordCluster contains=cangjieDeclaration,cangjieStatement,cangjieIdentlike,cangjieVariable,cangjieOption syn cluster cangjieKeywordCluster contains=
\ cangjieDeclaration,
\ cangjieStatement,
\ cangjieIdentlike,
\ cangjieVariable,
\ cangjieOption
" 3. macro (e.g., @override) " 3. macro (e.g., @override)
syn match cangjieMacro /@\h\w*/ syn match cangjieMacro /@\h\w*/
@@ -66,30 +72,54 @@ syn keyword cangjieCommonType Bool Byte Rune String
syn keyword cangjieFloatType Float16 Float32 Float64 syn keyword cangjieFloatType Float16 Float32 Float64
syn keyword cangjieIntType Int8 Int16 Int32 Int64 IntNative syn keyword cangjieIntType Int8 Int16 Int32 Int64 IntNative
syn keyword cangjieUIntType UInt8 UInt16 UInt32 UInt64 UIntNative syn keyword cangjieUIntType UInt8 UInt16 UInt32 UInt64 UIntNative
syn cluster cangjieTypeCluster contains=cangjieSpType,cangjieArrayType,cangjieHashType,cangjieCommonType,cangjieFloatType,cangjieIntType,cangjieUIntType syn cluster cangjieTypeCluster contains=
\ cangjieSpType,
\ cangjieArrayType,
\ cangjieHashType,
\ cangjieCommonType,
\ cangjieFloatType,
\ cangjieIntType,
\ cangjieUIntType
" 7. character and strings " 7. character and strings
syn cluster cangjieInterpolatedPart contains=@cangjieKeywordCluster,cangjieSpIdentifier,@cangjieTypeCluster,@cangjieNumberCluster,cangjieOperator syn cluster cangjieInterpolatedPart contains=
syn region cangjieInterpolation contained keepend start=/\${/ end=/}/ contains=@cangjieInterpolatedPart matchgroup=cangjieInterpolationDelimiter \ @cangjieKeywordCluster,
syn region cangjieRune start=/r'/ skip=/\\\\\|\\'/ end=/'/ oneline \ cangjieSpIdentifier,
syn region cangjieRune start=/b'/ skip=/\\\\\|\\'/ end=/'/ oneline \ @cangjieTypeCluster,
syn region cangjieString start=/"/ skip=/\\\\\|\\"/ end=/"/ oneline contains=cangjieInterpolation \ @cangjieNumberCluster,
syn region cangjieString start=/'/ skip=/\\\\\|\\'/ end=/'/ oneline contains=cangjieInterpolation \ cangjieOperator
syn region cangjieString start=/"""/ skip=/\\\\\|\\"/ end=/"""/ contains=cangjieInterpolation keepend syn region cangjieInterpolation contained keepend start=/\${/ end=/}/ contains=@cangjieInterpolatedPart
syn region cangjieString start=/'''/ skip=/\\\\\|\\'/ end=/'''/ contains=cangjieInterpolation keepend syn match cangjieEscape /\v\\u\{[0-9a-fA-F]{1,8}\}|\\./ contained
syn match cangjieRuneError /\v[rb]'([^'\\]|\\.)*'/
syn match cangjieRuneError /\v[rb]"([^"\\]|\\.)*"/
syn match cangjieRune /\vr'(\\u\{[0-9a-fA-F]{1,8}\}|\\.|[^'\\])'/ contains=cangjieEscape
syn match cangjieRune /\vr"(\\u\{[0-9a-fA-F]{1,8}\}|\\.|[^"\\])"/ contains=cangjieEscape
syn match cangjieRune /\vb'(\\u\{[0-9a-fA-F]{1,8}\}|\\.|[^'\\])'/ contains=cangjieEscape
syn region cangjieString start=/"/ skip=/\\\\\|\\"/ end=/"/ oneline contains=cangjieInterpolation,cangjieEscape
syn region cangjieString start=/'/ skip=/\\\\\|\\'/ end=/'/ oneline contains=cangjieInterpolation,cangjieEscape
syn region cangjieString start=/"""/ skip=/\\\\\|\\"/ end=/"""/ contains=cangjieInterpolation,cangjieEscape keepend
syn region cangjieString start=/'''/ skip=/\\\\\|\\'/ end=/'''/ contains=cangjieInterpolation,cangjieEscape keepend
syn region cangjieRawString start='\z(#*\)#"' end='"#\z1' syn region cangjieRawString start='\z(#*\)#"' end='"#\z1'
syn region cangjieRawString start='\z(#*\)#\'' end='\'#\z1' syn region cangjieRawString start='\z(#*\)#\'' end='\'#\z1'
" 8. number " 8. number
syn match cangjieHexFloatNumber /\v\c<0x([0-9a-f_]+\.?|[0-9a-f_]*\.[0-9a-f_]+)[p][-+]?\d[0-9_]*>/
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_]*\.\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 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 cangjieScienceNumber /\v\c<\d[0-9_]*[e][-+]?\d[0-9_]*(f(16|32|64))?>/
syn match cangjieHexNumber /\v\c<0x[0-9a-f_]+([iu](8|16|32|64))?>/ 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 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 cangjieBinaryNumber /\v\c<0b[01_]+([iu](8|16|32|64))?>/
syn match cangjieDecimalNumber /\v\c<\d[0-9_]*([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 syn cluster cangjieNumberCluster contains=
\ cangjieHexFloatNumber,
\ cangjieFloatNumber,
\ cangjieScienceNumber,
\ cangjieHexNumber,
\ cangjieOctalNumber,
\ cangjieBinaryNumber,
\ cangjieDecimalNumber
" 9. operators " 9. operators
syn match cangjieOperator /[-+%<>!&|^*=]=\?/ syn match cangjieOperator /[-+%<>!&|^*=]=\?/
@@ -101,6 +131,11 @@ syn match cangjieOperator /[:]/
syn match cangjieOperator /\.\./ syn match cangjieOperator /\.\./
syn match cangjieVarArgs /\.\.\./ syn match cangjieVarArgs /\.\.\./
" 10. folding
syn region cangjieFoldBraces transparent fold start='{' end='}' contains=ALLBUT,cangjieComment
syn region cangjieFoldParens transparent fold start='(' end=')' contains=ALLBUT,cangjieComment
syn region cangjieFoldBrackets transparent fold start='\[' end='\]' contains=ALLBUT,cangjieComment
" finally, link the syntax groups to the highlight groups " finally, link the syntax groups to the highlight groups
if s:enabled('comment') if s:enabled('comment')
hi def link cangjieTodo Todo hi def link cangjieTodo Todo
@@ -120,6 +155,7 @@ if s:enabled('macro')
hi def link cangjieMacro PreProc hi def link cangjieMacro PreProc
endif endif
if s:enabled('number') if s:enabled('number')
hi def link cangjieHexFloatNumber Number
hi def link cangjieFloatNumber Float hi def link cangjieFloatNumber Float
hi def link cangjieScienceNumber Float hi def link cangjieScienceNumber Float
hi def link cangjieHexNumber Number hi def link cangjieHexNumber Number
@@ -133,8 +169,10 @@ if s:enabled('operator')
endif endif
if s:enabled('string') if s:enabled('string')
hi def link cangjieRune Character hi def link cangjieRune Character
hi def link cangjieRuneError Error
hi def link cangjieString String hi def link cangjieString String
hi def link cangjieRawString String hi def link cangjieRawString String
hi def link cangjieEscape SpecialChar
endif endif
if s:enabled('type') if s:enabled('type')
hi def link cangjieTypeName Type hi def link cangjieTypeName Type
@@ -151,3 +189,5 @@ let b:current_syntax = "cangjie"
let &cpo = s:save_cpo let &cpo = s:save_cpo
unlet s:save_cpo unlet s:save_cpo
" vim: ts=8 sw=8 noet