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.

Raspunde prin e-mail lui