runtime(tex): improve syntax highlighting Commit: https://github.com/vim/vim/commit/a35040f795fbf217b0a1e21b6b3a94ad56c2298b Author: Eisuke Kawashima <e-k...@users.noreply.github.com> Date: Sat Feb 8 18:32:14 2025 +0100
runtime(tex): improve syntax highlighting this change includes the following changes: - a macro option must be https://github.com/vim/vim/issues/1–https://github.com/vim/vim/issues/9 - add \providecommand - add starred versions of ewcommand, ewenvironment, and their variants - add number of arguments to \(re)newenvironment Signed-off-by: Eisuke Kawashima <e-k...@users.noreply.github.com> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/runtime/syntax/testdir/dumps/tex_02_00.dump b/runtime/syntax/testdir/dumps/tex_02_00.dump new file mode 100644 index 000000000..5c79b8f55 --- /dev/null +++ b/runtime/syntax/testdir/dumps/tex_02_00.dump @@ -0,0 +1,20 @@ +>\+0#af5f00255#ffffff0|d|o|c|u|m|e|n|t|c|l|a|s@1|{+0#e000e06&|a|r|t|i|c|l|e|}| +0#0000000&@51 +|\+0#af5f00255&|n|e|w|c|o|m@1|a|n|d|{+0#e000e06&|\+0#af5f00255&|f|o@1|}+0#e000e06&|{|}| +0#0000000&@55 +|\+0#af5f00255&|r|e|n|e|w|c|o|m@1|a|n|d|*|{+0#e000e06&|\+0#af5f00255&|f|o@1|}+0#e000e06&|[|1+0#e000002&|]+0#e000e06&|{|#|1|0+0#0000000&|}+0#e000e06&| +0#0000000&@46 +|\+0#af5f00255&|p|r|o|v|i|d|e|c|o|m@1|a|n|d|{+0#e000e06&|\+0#af5f00255&|f|o@1|}+0#e000e06&|[|1+0#e000002&|]+0#e000e06&|[|d+0#0000000&|e|f|a|u|l|t|]+0#e000e06&|{|#|1|1+0#0000000&|}+0#e000e06&| +0#0000000&@36 +|\+0#af5f00255&|n|e|w|e|n|v|i|r|o|n|m|e|n|t|*|{+0#e000e06&|b+0#0000000&|a|z|}+0#e000e06&|{|S+0#0000000&|T|A|R|T|}+0#e000e06&|{|S+0#0000000&|T|O|P|}+0#e000e06&| +0#0000000&@40 +|\+0#af5f00255&|r|e|n|e|w|e|n|v|i|r|o|n|m|e|n|t|{+0#e000e06&|b+0#0000000&|a|z|}+0#e000e06&|[|1+0#e000002&|]+0#e000e06&|{|H+0#0000000&|E|A|D| |o|f| |#+0#e000e06&|1|2+0#0000000&|:|}+0#e000e06&|{|T+0#0000000&|A|I|L|}+0#e000e06&| +0#0000000&@29 +|\+0#af5f00255&|r|e|n|e|w|e|n|v|i|r|o|n|m|e|n|t|*|{+0#e000e06&|b+0#0000000&|a|z|}+0#e000e06&|[|1+0#e000002&|]+0#e000e06&|[|d+0#0000000&|e|f|a|u|l|t|]+0#e000e06&|{|B+0#0000000&|E|G|I|N@1|I|N|G| |o|f| |#+0#e000e06&|1|2+0#0000000&|:|}+0#e000e06&|{|E+0#0000000&|N|D|}+0#e000e06&| +0#0000000&@15 +|\+0#e000e06&|b|e|g|i|n|{|d|o|c|u|m|e|n|t|}| +0#0000000&@58 +|\+0#af5f00255&|f|o@1|{+0#e000e06&|T+0#0000000&|e|X|}+0#e000e06&| +0#0000000&@1|%+0#0000e05&| |-|>| |T|e|X|0| +0#0000000&@54 +|\+0#af5f00255&|b|e|g|i|n|{+0#e000e06&|b|a|z|}| +0#0000000&|t|e|x| |\+0#af5f00255&|e|n|d|{+0#e000e06&|b|a|z|}| +0#0000000&@1|%+0#0000e05&| |-|>| |B|E|G|I|N@1|I|N|G| |o|f| |d|e|f|a|u|l|t|2|:|t|e|x| |E|N|D| +0#0000000&@13 +|\+0#e000e06&|e|n|d|{|d|o|c|u|m|e|n|t|}| +0#0000000&@60 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|,|1| @10|A|l@1| diff --git a/runtime/syntax/testdir/input/tex_02.tex b/runtime/syntax/testdir/input/tex_02.tex new file mode 100644 index 000000000..0d6e92a21 --- /dev/null +++ b/runtime/syntax/testdir/input/tex_02.tex @@ -0,0 +1,11 @@ +\documentclass{article} + ewcommand{oo}{} + enewcommand*{oo}[1]{#10} +\providecommand{oo}[1][default]{#11} + ewenvironment*{baz}{START}{STOP} + enewenvironment{baz}[1]{HEAD of #12:}{TAIL} + enewenvironment*{baz}[1][default]{BEGINNING of #12:}{END} + egin{document} +oo{TeX} % -> TeX0 + egin{baz} tex nd{baz} % -> BEGINNING of default2:tex END + nd{document} diff --git a/runtime/syntax/tex.vim b/runtime/syntax/tex.vim index 4f35bba93..109ce61b7 100644 --- a/runtime/syntax/tex.vim +++ b/runtime/syntax/tex.vim @@ -5,6 +5,8 @@ " Last Change: Apr 22, 2022 " 2024 Feb 19 by Vim Project: announce adoption " 2025 Jan 18 by Vim Project: add texEmphStyle to texMatchGroup, #16228 +" 2025 Feb 08 by Vim Project: improve macro option, \providecommand, +" ewcommand and ewenvironment #16543 " Version: 121 " Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX " @@ -167,7 +169,7 @@ syn cluster texCmdGroup contains=texCmdBody,texComment,texDefParm,texDelimiter if !s:tex_no_error syn cluster texCmdGroup add=texMathError endif -syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement +syn cluster texEnvGroup contains=texDefParm,texMatcher,texMathDelim,texSpecialChar,texStatement syn cluster texFoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texItalStyle,texEmphStyle,texNoSpell syn cluster texBoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texBoldItalStyle,texNoSpell syn cluster texItalGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texItalStyle,texEmphStyle,texItalBoldStyle,texNoSpell @@ -287,7 +289,7 @@ syn match texDelimiter "&" syn match texDelimiter "\\" " Tex/Latex Options: {{{1 -syn match texOption "[^\]\zs#\d\+\|^#\d\+" +syn match texOption "[^\]\zs#[1-9]\|^#[1-9]" " texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1 if b:tex_stylish @@ -669,16 +671,46 @@ if s:tex_fast =~# 'r' endif syn match texRefZone '\cite\%([tp]\*\=\)\=\>' nextgroup=texRefOption,texCite -" Handle (re)newcommand, (re)newenvironment : {{{1 -syn match texNewCmd "\\%(re\)\=newcommand\>" nextgroup=texCmdName skipwhite skipnl +" Handle (re)newcommand, providecommand, (re)newenvironment : {{{1 +" EXAMPLE: +" +" The followings are valid (ignoring error due to redefinition): +" +" ewcommand{oo}{body} +" ewcommand{oo}[1]{#1} +" ewcommand{oo}[1][def]{#1} +" +" The followings are ill-formed: +" +" ewcommand{oo}{#1} ! Illegal parameter number in definition of oo. +" ewcommand{oo}[x]{…} ! Missing number, treated as zero. +" ewcommand{oo}[10]{…} ! You already have nine parameters. +syn match texNewCmd "\\%(\%(re\)\=new\|provide\)command\>\*\?" nextgroup=texCmdName skipwhite skipnl if s:tex_fast =~# 'V' syn region texCmdName contained matchgroup=texDelimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl - syn region texCmdArgs contained matchgroup=texDelimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl + syn region texCmdArgs contained matchgroup=texDelimiter start="\["rs=s+1 end="]" nextgroup=texCmdDefaultPar,texCmdBody skipwhite skipnl + syn region texCmdDefaultPar contained matchgroup=texDelimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl syn region texCmdBody contained matchgroup=texDelimiter start="{"rs=s+1 skip="\\\|\[{}]" matchgroup=texDelimiter end="}" contains=@texCmdGroup endif -syn match texNewEnv "\\%(re\)\=newenvironment\>" nextgroup=texEnvName skipwhite skipnl +" EXAMPLE: +" +" The followings are valid (ignoring error due to redefinition): +" +" ewenvironment{baz}{beg}{end} +" ewenvironment{baz}[1]{beg #1}{end} +" ewenvironment{baz}[1][default]{beg #1}{end} +" +" The followings are invalid: +" +" ewenvironment{baz}{#1}{…} ! Illegal parameter number in definition of az. +" ewenvironment{baz}[x]{…}{…} ! Missing number, treated as zero. +" ewenvironment{baz}[10]{…}{…} ! You already have nine parameters. +" ewenvironment{baz}[1]{…}{#1} ! Illegal parameter number in definition of ndbaz. +syn match texNewEnv "\\%(re\)\=newenvironment\>\*\?" nextgroup=texEnvName skipwhite skipnl if s:tex_fast =~# 'V' - syn region texEnvName contained matchgroup=texDelimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl + syn region texEnvName contained matchgroup=texDelimiter start="{"rs=s+1 end="}" nextgroup=texEnvArgs,texEnvBgn skipwhite skipnl + syn region texEnvArgs contained matchgroup=texDelimiter start="\["rs=s+1 end="]" nextgroup=texEnvDefaultPar,texEnvBgn skipwhite skipnl + syn region texEnvDefaultPar contained matchgroup=texDelimiter start="\["rs=s+1 end="]" nextgroup=texEnvBgn skipwhite skipnl syn region texEnvBgn contained matchgroup=texDelimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup syn region texEnvEnd contained matchgroup=texDelimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup endif @@ -693,7 +725,7 @@ else syn match texDefName contained "\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl endif syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl -syn match texDefParm contained "#\d\+" +syn match texDefParm contained "#[1-9]" " TeX Lengths: {{{1 syn match texLength "\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>" @@ -1325,6 +1357,7 @@ if !exists("skip_tex_syntax_inits") hi def link texDef Statement hi def link texDefParm Special hi def link texDelimiter Delimiter + hi def link texEnvArgs Number hi def link texInput Special hi def link texInputFile Special hi def link texLength Number -- -- 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/E1tgot5-00EnmK-MX%40256bit.org.