patch 9.1.1647: filetype: Cangjie files are not recognized Commit: https://github.com/vim/vim/commit/0c4405a6b2bc4d93c127e1b66da1b93dcfbbe3db Author: WuJunkai2004 <wujunkai20041...@outlook.com> Date: Mon Aug 18 20:53:34 2025 +0200
patch 9.1.1647: filetype: Cangjie files are not recognized Problem: filetype: Cangjie files are not recognized Solution: Detect *.cj files as cangjie filetype, include a syntax plugin (WuJunkai2004) This commit introduces a new syntax highlighting file for the Cangjie programming language, includes 4 parts as required: - The main syntax file: runtime/syntax/cangjie.vim - The filetype detection rule in: runtime/filetype.vim - The documentation update in: runtime/doc/syntax.txt - Some menus References: - https://gitcode.com/Cangjie - https://cangjie-lang.cn/ fixes: 18014 closes: #18027 Signed-off-by: WuJunkai2004 <wujunkai20041...@outlook.com> Signed-off-by: Doug Kearns <dougkea...@gmail.com> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS index 26cc51af0..236e3567c 100644 --- a/.github/MAINTAINERS +++ b/.github/MAINTAINERS @@ -449,6 +449,7 @@ runtime/syntax/bzr.vim @hdima runtime/syntax/cabal.vim @coot runtime/syntax/cabalconfig.vim @coot runtime/syntax/cabalproject.vim @coot +runtime/syntax/cangjie.vim @WuJunkai2004 runtime/syntax/cf.vim @ernstvanderlinden runtime/syntax/chatito.vim @ObserverOfTime runtime/syntax/chicken.vim @evhan diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt index 9fe4be552..2aecb65a6 100644 --- a/runtime/doc/syntax.txt +++ b/runtime/doc/syntax.txt @@ -1,4 +1,4 @@ -*syntax.txt* For Vim version 9.1. Last change: 2025 Aug 10 +*syntax.txt* For Vim version 9.1. Last change: 2025 Aug 18 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1116,6 +1116,23 @@ in the "after" directory in 'runtimepath'. For Unix this would be syn sync fromstart set foldmethod=syntax +CANGJIE *cangjie.vim* *ft-cangjie-syntax* + +This file provides syntax highlighting for the Cangjie programming language, a +new-generation language oriented to full-scenario intelligence. + +All highlighting is enabled by default. To disable highlighting for a +specific group, set the corresponding variable to 0 in your |vimrc|. +All options to disable highlighting are: > + :let g:cangjie_comment_color = 0 + :let g:cangjie_identifier_color = 0 + :let g:cangjie_keyword_color = 0 + :let g:cangjie_macro_color = 0 + :let g:cangjie_number_color = 0 + :let g:cangjie_operator_color = 0 + :let g:cangjie_string_color = 0 + :let g:cangjie_type_color = 0 + CH *ch.vim* *ft-ch-syntax* C/C++ interpreter. Ch has similar syntax highlighting to C and builds upon diff --git a/runtime/doc/tags b/runtime/doc/tags index 9a0f8f2cf..63c1506f1 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -6486,6 +6486,7 @@ c_space_errors syntax.txt /*c_space_errors* c_syntax_for_h syntax.txt /*c_syntax_for_h* c_wildchar cmdline.txt /*c_wildchar* call() builtin.txt /*call()* +cangjie.vim syntax.txt /*cangjie.vim* carriage-return intro.txt /*carriage-return* case change.txt /*case* catch-all eval.txt /*catch-all* @@ -7424,6 +7425,7 @@ ft-bash-syntax syntax.txt /*ft-bash-syntax* ft-basic-syntax syntax.txt /*ft-basic-syntax* ft-c-omni insert.txt /*ft-c-omni* ft-c-syntax syntax.txt /*ft-c-syntax* +ft-cangjie-syntax syntax.txt /*ft-cangjie-syntax* ft-ch-syntax syntax.txt /*ft-ch-syntax* ft-changelog-plugin filetype.txt /*ft-changelog-plugin* ft-changelog-syntax syntax.txt /*ft-changelog-syntax* diff --git a/runtime/filetype.vim b/runtime/filetype.vim index 022241578..1b0e4183f 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -2433,6 +2433,9 @@ au BufNewFile,BufRead *.il,*.ils,*.cdf setf skill " Cadence au BufNewFile,BufRead *.cdc setf cdc +" Cangjie +au BufNewFile,BufRead *.cj setf cangjie + " SLRN au BufNewFile,BufRead .slrnrc setf slrnrc au BufNewFile,BufRead *.score setf slrnsc diff --git a/runtime/makemenu.vim b/runtime/makemenu.vim index 8ef178889..3cff23db2 100644 --- a/runtime/makemenu.vim +++ b/runtime/makemenu.vim @@ -124,6 +124,7 @@ SynMenu C.C++:cpp SynMenu C.C#:cs SynMenu C.Cabal\ Haskell\ build\ file:cabal SynMenu C.Calendar:calendar +SynMenu C.Cangjie:cangjie SynMenu C.Cascading\ Style\ Sheets:css SynMenu C.CDL:cdl SynMenu C.Cdrdao\ TOC:cdrtoc diff --git a/runtime/synmenu.vim b/runtime/synmenu.vim index 164b04f9a..5d3321585 100644 --- a/runtime/synmenu.vim +++ b/runtime/synmenu.vim @@ -110,6 +110,7 @@ an 50.20.110 &Syntax.C.C++ :cal SetSyn("cpp")<CR> an 50.20.120 &Syntax.C.C# :cal SetSyn("cs")<CR> an 50.20.130 &Syntax.C.Cabal\ Haskell\ build\ file :cal SetSyn("cabal")<CR> an 50.20.140 &Syntax.C.Calendar :cal SetSyn("calendar")<CR> +an 50.20.140 &Syntax.C.Cangjie :cal SetSyn("cangjie")<CR> an 50.20.150 &Syntax.C.Cascading\ Style\ Sheets :cal SetSyn("css")<CR> an 50.20.160 &Syntax.C.CDL :cal SetSyn("cdl")<CR> an 50.20.170 &Syntax.C.Cdrdao\ TOC :cal SetSyn("cdrtoc")<CR> diff --git a/runtime/syntax/cangjie.vim b/runtime/syntax/cangjie.vim new file mode 100644 index 000000000..8438a16e9 --- /dev/null +++ b/runtime/syntax/cangjie.vim @@ -0,0 +1,153 @@ +" Vim syntax file +" Language: Cangjie +" Maintainer: Wu Junkai <wu.jun...@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 / \/\/.*/ 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 / -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1uo55U-005Mkp-49%40256bit.org.