view runtime/syntax/initex.vim @ 33674:021e5bb88513 v9.0.2074

patch 9.0.2074: Completion menu may be wrong Commit: https://github.com/vim/vim/commit/daef8c74375141974d61b85199b383017644978c Author: Christian Brabandt <cb@256bit.org> Date: Fri Oct 27 19:16:26 2023 +0200 patch 9.0.2074: Completion menu may be wrong Problem: Completion menu may be wrong Solution: Check for the original direction of the completion menu, add more tests, make it work with 'noselect' completion: move in right direction when filling completion_info() When moving through the insert completion menu and switching directions, we need to make sure we start at the correct position in the list and move correctly forward/backwards through it, so that we do not skip entries and the selected item points to the correct entry in the list of completion entries generated by the completion_info() function. The general case is this: 1) CTRL-X CTRL-N, we will traverse the list starting from compl_first_match and then go forwards (using the cp->next pointer) through the list (skipping the very first entry, which has the CP_ORIGINAL_TEXT flag set (since that is the empty/non-selected entry 2) CTRL-X CTRL-P, we will traverse the list starting from compl_first_match (which now points to the last entry). The previous entry will have the CP_ORIGINAL_TEXT flag set, so we need to start traversing the list from the second prev pointer. There are in fact 2 special cases after starting the completion menu with CTRL-X: 3) CTRL-N and then going backwards by pressing CTRL-P again. compl_first_match will point to the same entry as in step 1 above, but since compl_dir_foward() has been switched by pressing CTRL-P to backwards we need to pretend to be in still in case 1 and still traverse the list in forward direction using the cp_next pointer 4) CTRL-P and then going forwards by pressing CTRL-N again. compl_first_match will point to the same entry as in step 2 above, but since compl_dir_foward() has been switched by pressing CTRL-N to forwards we need to pretend to be in still in case 2 and still traverse the list in backward direction using the cp_prev pointer For the 'noselect' case however, this is slightly different again. When going backwards, we only need to go one cp_prev pointer back. And resting of the direction works again slightly different. So we need to take the noselect option into account when deciding in which direction to iterate through the list of matches. related: #13402 related: #12971 closes: #13408 Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Fri, 27 Oct 2023 19:30:05 +0200
parents 1218c5353e2b
children
line wrap: on
line source

" Vim syntax file
" Language:             TeX (core definition)
" Previous Maintainer:  Nikolai Weibull <now@bitwi.se>
" Latest Revision:      2006-04-19

if exists("b:current_syntax")
  finish
endif

let s:cpo_save = &cpo
set cpo&vim

" This follows the grouping (sort of) found at
" http: //www.tug.org/utilities/plain/cseq.html#top-fam

syn keyword initexTodo                          TODO FIXME XXX NOTE

syn match initexComment                         display contains=initexTodo
      \ '\\\@<!\%(\\\\\)*\zs%.*$'

syn match   initexDimension                     display contains=@NoSpell
      \ '[+-]\=\s*\%(\d\+\%([.,]\d*\)\=\|[.,]\d\+\)\s*\%(true\)\=\s*\%(p[tc]\|in\|bp\|c[mc]\|m[mu]\|dd\|sp\|e[mx]\)\>'

syn cluster initexBox
      \ contains=initexBoxCommand,initexBoxInternalQuantity,
      \ initexBoxParameterDimen,initexBoxParameterInteger,
      \ initexBoxParameterToken

syn cluster initexCharacter
      \ contains=initexCharacterCommand,initexCharacterInternalQuantity,
      \ initexCharacterParameterInteger

syn cluster initexDebugging
      \ contains=initexDebuggingCommand,initexDebuggingParameterInteger,
      \ initexDebuggingParameterToken

syn cluster initexFileIO
      \ contains=initexFileIOCommand,initexFileIOInternalQuantity,
      \ initexFileIOParameterToken

syn cluster initexFonts
      \ contains=initexFontsCommand,initexFontsInternalQuantity

syn cluster initexGlue
      \ contains=initexGlueCommand,initexGlueDerivedCommand

syn cluster initexHyphenation
      \ contains=initexHyphenationCommand,initexHyphenationDerivedCommand,
      \ initexHyphenationInternalQuantity,initexHyphenationParameterInteger

syn cluster initexInserts
      \ contains=initexInsertsCommand,initexInsertsParameterDimen,
      \ initexInsertsParameterGlue,initexInsertsParameterInteger

syn cluster initexJob
      \ contains=initexJobCommand,initexJobInternalQuantity,
      \ initexJobParameterInteger

syn cluster initexKern
      \ contains=initexKernCommand,initexKernInternalQuantity

syn cluster initexLogic
      \ contains=initexLogicCommand

syn cluster initexMacro
      \ contains=initexMacroCommand,initexMacroDerivedCommand,
      \ initexMacroParameterInteger

syn cluster initexMarks
      \ contains=initexMarksCommand

syn cluster initexMath
      \ contains=initexMathCommand,initexMathDerivedCommand,
      \ initexMathInternalQuantity,initexMathParameterDimen,
      \ initexMathParameterGlue,initexMathParameterInteger,
      \ initexMathParameterMuglue,initexMathParameterToken

syn cluster initexPage
      \ contains=initexPageInternalQuantity,initexPageParameterDimen,
      \ initexPageParameterGlue

syn cluster initexParagraph
      \ contains=initexParagraphCommand,initexParagraphInternalQuantity,
      \ initexParagraphParameterDimen,initexParagraphParameterGlue,
      \ initexParagraphParameterInteger,initexParagraphParameterToken

syn cluster initexPenalties
      \ contains=initexPenaltiesCommand,initexPenaltiesInternalQuantity,
      \ initexPenaltiesParameterInteger

syn cluster initexRegisters
      \ contains=initexRegistersCommand,initexRegistersInternalQuantity

syn cluster initexTables
      \ contains=initexTablesCommand,initexTablesParameterGlue,
      \ initexTablesParameterToken

syn cluster initexCommand
      \ contains=initexBoxCommand,initexCharacterCommand,
      \ initexDebuggingCommand,initexFileIOCommand,
      \ initexFontsCommand,initexGlueCommand,
      \ initexHyphenationCommand,initexInsertsCommand,
      \ initexJobCommand,initexKernCommand,initexLogicCommand,
      \ initexMacroCommand,initexMarksCommand,initexMathCommand,
      \ initexParagraphCommand,initexPenaltiesCommand,initexRegistersCommand,
      \ initexTablesCommand

syn match   initexBoxCommand                    display contains=@NoSpell
      \ '\\\%([hv]\=box\|[cx]\=leaders\|copy\|[hv]rule\|lastbox\|setbox\|un[hv]\%(box\|copy\)\|vtop\)\>'
syn match   initexCharacterCommand              display contains=@NoSpell
      \ '\\\%([] ]\|\%(^^M\|accent\|char\|\%(lower\|upper\)case\|number\|romannumeral\|string\)\>\)'
syn match   initexDebuggingCommand              display contains=@NoSpell
      \ '\\\%(\%(batch\|\%(non\|error\)stop\|scroll\)mode\|\%(err\)\=message\|meaning\|show\%(box\%(breadth\|depth\)\=\|lists\|the\)\)\>'
syn match   initexFileIOCommand                 display contains=@NoSpell
      \ '\\\%(\%(close\|open\)\%(in\|out\)\|endinput\|immediate\|input\|read\|shipout\|special\|write\)\>'
syn match   initexFontsCommand                  display contains=@NoSpell
      \ '\\\%(/\|fontname\)\>'
syn match   initexGlueCommand                   display contains=@NoSpell
      \ '\\\%([hv]\|un\)skip\>'
syn match   initexHyphenationCommand            display contains=@NoSpell
      \ '\\\%(discretionary\|hyphenation\|patterns\|setlanguage\)\>'
syn match   initexInsertsCommand                display contains=@NoSpell
      \ '\\\%(insert\|split\%(bot\|first\)mark\|vsplit\)\>'
syn match   initexJobCommand                    display contains=@NoSpell
      \ '\\\%(dump\|end\|jobname\)\>'
syn match   initexKernCommand                   display contains=@NoSpell
      \ '\\\%(kern\|lower\|move\%(left\|right\)\|raise\|unkern\)\>'
syn match   initexLogicCommand                  display contains=@NoSpell
      \ '\\\%(else\|fi\|if[a-zA-Z@]\+\|or\)\>'
"      \ '\\\%(else\|fi\|if\%(case\|cat\|dim\|eof\|false\|[hv]box\|[hmv]mode\|inner\|num\|odd\|true\|void\|x\)\=\|or\)\>'
syn match   initexMacroCommand                  display contains=@NoSpell
      \ '\\\%(after\%(assignment\|group\)\|\%(begin\|end\)group\|\%(end\)\=csname\|e\=def\|expandafter\|futurelet\|global\|let\|long\|noexpand\|outer\|relax\|the\)\>'
syn match   initexMarksCommand                  display contains=@NoSpell
      \ '\\\%(bot\|first\|top\)\=mark\>'
syn match   initexMathCommand                   display contains=@NoSpell
      \ '\\\%(abovewithdelims\|delimiter\|display\%(limits\|style\)\|l\=eqno\|left\|\%(no\)\=limits\|math\%(accent\|bin\|char\|choice\|close\|code\|inner\|op\|open\|ord\|punct\|rel\)\|mkern\|mskip\|muskipdef\|nonscript\|\%(over\|under\)line\|radical\|right\|\%(\%(script\)\{1,2}\|text\)style\|vcenter\)\>'
syn match   initexParagraphCommand              display contains=@NoSpell
      \ '\\\%(ignorespaces\|indent\|no\%(boundary\|indent\)\|par\|vadjust\)\>'
syn match   initexPenaltiesCommand              display contains=@NoSpell
      \ '\\\%(un\)\=penalty\>'
syn match   initexRegistersCommand              display contains=@NoSpell
      \ '\\\%(advance\|\%(count\|dimen\|skip\|toks\)def\|divide\|multiply\)\>'
syn match   initexTablesCommand                 display contains=@NoSpell
      \ '\\\%(cr\|crcr\|[hv]align\|noalign\|omit\|span\)\>'

syn cluster initexDerivedCommand
      \ contains=initexGlueDerivedCommand,initexHyphenationDerivedCommand,
      \ initexMacroDerivedCommand,initexMathDerivedCommand

syn match   initexGlueDerivedCommand            display contains=@NoSpell
      \ '\\\%([hv]fil\%(l\|neg\)\=\|[hv]ss\)\>'
syn match   initexHyphenationDerivedCommand     display contains=@NoSpell
      \ '\\-'
syn match   initexMacroDerivedCommand           display contains=@NoSpell
      \ '\\[gx]def\>'
syn match   initexMathDerivedCommand            display contains=@NoSpell
      \ '\\\%(above\|atop\%(withdelims\)\=\|mathchardef\|over\|overwithdelims\)\>'

syn cluster initexInternalQuantity
      \ contains=initexBoxInternalQuantity,initexCharacterInternalQuantity,
      \ initexFileIOInternalQuantity,initexFontsInternalQuantity,
      \ initexHyphenationInternalQuantity,initexJobInternalQuantity,
      \ initexKernInternalQuantity,initexMathInternalQuantity,
      \ initexPageInternalQuantity,initexParagraphInternalQuantity,
      \ initexPenaltiesInternalQuantity,initexRegistersInternalQuantity

syn match   initexBoxInternalQuantity           display contains=@NoSpell
      \ '\\\%(badness\|dp\|ht\|prevdepth\|wd\)\>'
syn match   initexCharacterInternalQuantity     display contains=@NoSpell
      \ '\\\%(catcode\|chardef\|\%([ul]c\|sf\)code\)\>'
syn match   initexFileIOInternalQuantity        display contains=@NoSpell
      \ '\\inputlineno\>'
syn match   initexFontsInternalQuantity         display contains=@NoSpell
      \ '\\\%(font\%(dimen\)\=\|nullfont\)\>'
syn match   initexHyphenationInternalQuantity   display contains=@NoSpell
      \ '\\hyphenchar\>'
syn match   initexJobInternalQuantity           display contains=@NoSpell
      \ '\\deadcycles\>'
syn match   initexKernInternalQuantity          display contains=@NoSpell
      \ '\\lastkern\>'
syn match   initexMathInternalQuantity          display contains=@NoSpell
      \ '\\\%(delcode\|mathcode\|muskip\|\%(\%(script\)\{1,2}\|text\)font\|skewchar\)\>'
syn match   initexPageInternalQuantity          display contains=@NoSpell
      \ '\\page\%(depth\|fil\{1,3}stretch\|goal\|shrink\|stretch\|total\)\>'
syn match   initexParagraphInternalQuantity     display contains=@NoSpell
      \ '\\\%(prevgraf\|spacefactor\)\>'
syn match   initexPenaltiesInternalQuantity     display contains=@NoSpell
      \ '\\lastpenalty\>'
syn match   initexRegistersInternalQuantity     display contains=@NoSpell
      \ '\\\%(count\|dimen\|skip\|toks\)\d\+\>'

syn cluster initexParameterDimen
      \ contains=initexBoxParameterDimen,initexInsertsParameterDimen,
      \ initexMathParameterDimen,initexPageParameterDimen,
      \ initexParagraphParameterDimen

syn match   initexBoxParameterDimen             display contains=@NoSpell
      \ '\\\%(boxmaxdepth\|[hv]fuzz\|overfullrule\)\>'
syn match   initexInsertsParameterDimen         display contains=@NoSpell
      \ '\\splitmaxdepth\>'
syn match   initexMathParameterDimen            display contains=@NoSpell
      \ '\\\%(delimitershortfall\|display\%(indent\|width\)\|mathsurround\|nulldelimiterspace\|predisplaysize\|scriptspace\)\>'
syn match   initexPageParameterDimen            display contains=@NoSpell
      \ '\\\%([hv]offset\|maxdepth\|vsize\)\>'
syn match   initexParagraphParameterDimen       display contains=@NoSpell
      \ '\\\%(emergencystretch\|\%(hang\|par\)indent\|hsize\|lineskiplimit\)\>'

syn cluster initexParameterGlue
      \ contains=initexInsertsParameterGlue,initexMathParameterGlue,
      \ initexPageParameterGlue,initexParagraphParameterGlue,
      \ initexTablesParameterGlue

syn match   initexInsertsParameterGlue          display contains=@NoSpell
      \ '\\splittopskip\>'
syn match   initexMathParameterGlue             display contains=@NoSpell
      \ '\\\%(above\|below\)display\%(short\)\=skip\>'
syn match   initexPageParameterGlue             display contains=@NoSpell
      \ '\\topskip\>'
syn match   initexParagraphParameterGlue        display contains=@NoSpell
      \ '\\\%(baseline\|left\|line\|par\%(fill\)\=\|right\|x\=space\)skip\>'
syn match   initexTablesParameterGlue           display contains=@NoSpell
      \ '\\tabskip\>'

syn cluster initexParameterInteger
      \ contains=initexBoxParameterInteger,initexCharacterParameterInteger,
      \ initexDebuggingParameterInteger,initexHyphenationParameterInteger,
      \ initexInsertsParameterInteger,initexJobParameterInteger,
      \ initexMacroParameterInteger,initexMathParameterInteger,
      \ initexParagraphParameterInteger,initexPenaltiesParameterInteger,

syn match   initexBoxParameterInteger           display contains=@NoSpell
      \ '\\[hv]badness\>'
syn match   initexCharacterParameterInteger     display contains=@NoSpell
      \ '\\\%(\%(endline\|escape\|newline\)char\)\>'
syn match   initexDebuggingParameterInteger     display contains=@NoSpell
      \ '\\\%(errorcontextlines\|pausing\|tracing\%(commands\|lostchars\|macros\|online\|output\|pages\|paragraphs\|restores|stats\)\)\>'
syn match   initexHyphenationParameterInteger   display contains=@NoSpell
      \ '\\\%(defaulthyphenchar\|language\|\%(left\|right\)hyphenmin\|uchyph\)\>'
syn match   initexInsertsParameterInteger       display contains=@NoSpell
      \ '\\\%(holdinginserts\)\>'
syn match   initexJobParameterInteger           display contains=@NoSpell
      \ '\\\%(day\|mag\|maxdeadcycles\|month\|time\|year\)\>'
syn match   initexMacroParameterInteger         display contains=@NoSpell
      \ '\\globaldefs\>'
syn match   initexMathParameterInteger          display contains=@NoSpell
      \ '\\\%(binoppenalty\|defaultskewchar\|delimiterfactor\|displaywidowpenalty\|fam\|\%(post\|pre\)displaypenalty\|relpenalty\)\>'
syn match   initexParagraphParameterInteger     display contains=@NoSpell
      \ '\\\%(\%(adj\|\%(double\|final\)hyphen\)demerits\|looseness\|\%(pre\)\=tolerance\)\>'
syn match   initexPenaltiesParameterInteger     display contains=@NoSpell
      \ '\\\%(broken\|club\|exhyphen\|floating\|hyphen\|interline\|line\|output\|widow\)penalty\>'

syn cluster initexParameterMuglue
      \ contains=initexMathParameterMuglue

syn match   initexMathParameterMuglue           display contains=@NoSpell
      \ '\\\%(med\|thick\|thin\)muskip\>'

syn cluster initexParameterDimen
      \ contains=initexBoxParameterToken,initexDebuggingParameterToken,
      \ initexFileIOParameterToken,initexMathParameterToken,
      \ initexParagraphParameterToken,initexTablesParameterToken

syn match   initexBoxParameterToken             display contains=@NoSpell
      \ '\\every[hv]box\>'
syn match   initexDebuggingParameterToken       display contains=@NoSpell
      \ '\\errhelp\>'
syn match   initexFileIOParameterToken          display contains=@NoSpell
      \ '\\output\>'
syn match   initexMathParameterToken            display contains=@NoSpell
      \ '\\every\%(display\|math\)\>'
syn match   initexParagraphParameterToken       display contains=@NoSpell
      \ '\\everypar\>'
syn match   initexTablesParameterToken          display contains=@NoSpell
      \ '\\everycr\>'


hi def link initexCharacter                     Character
hi def link initexNumber                        Number

hi def link initexIdentifier                    Identifier

hi def link initexStatement                     Statement
hi def link initexConditional                   Conditional

hi def link initexPreProc                       PreProc
hi def link initexMacro                         Macro

hi def link initexType                          Type

hi def link initexDebug                         Debug

hi def link initexTodo                          Todo
hi def link initexComment                       Comment
hi def link initexDimension                     initexNumber

hi def link initexCommand                       initexStatement
hi def link initexBoxCommand                    initexCommand
hi def link initexCharacterCommand              initexCharacter
hi def link initexDebuggingCommand              initexDebug
hi def link initexFileIOCommand                 initexCommand
hi def link initexFontsCommand                  initexType
hi def link initexGlueCommand                   initexCommand
hi def link initexHyphenationCommand            initexCommand
hi def link initexInsertsCommand                initexCommand
hi def link initexJobCommand                    initexPreProc
hi def link initexKernCommand                   initexCommand
hi def link initexLogicCommand                  initexConditional
hi def link initexMacroCommand                  initexMacro
hi def link initexMarksCommand                  initexCommand
hi def link initexMathCommand                   initexCommand
hi def link initexParagraphCommand              initexCommand
hi def link initexPenaltiesCommand              initexCommand
hi def link initexRegistersCommand              initexCommand
hi def link initexTablesCommand                 initexCommand

hi def link initexDerivedCommand                initexStatement
hi def link initexGlueDerivedCommand            initexDerivedCommand
hi def link initexHyphenationDerivedCommand     initexDerivedCommand
hi def link initexMacroDerivedCommand           initexDerivedCommand
hi def link initexMathDerivedCommand            initexDerivedCommand

hi def link initexInternalQuantity              initexIdentifier
hi def link initexBoxInternalQuantity           initexInternalQuantity
hi def link initexCharacterInternalQuantity     initexInternalQuantity
hi def link initexFileIOInternalQuantity        initexInternalQuantity
hi def link initexFontsInternalQuantity         initexInternalQuantity
hi def link initexHyphenationInternalQuantity   initexInternalQuantity
hi def link initexJobInternalQuantity           initexInternalQuantity
hi def link initexKernInternalQuantity          initexInternalQuantity
hi def link initexMathInternalQuantity          initexInternalQuantity
hi def link initexPageInternalQuantity          initexInternalQuantity
hi def link initexParagraphInternalQuantity     initexInternalQuantity
hi def link initexPenaltiesInternalQuantity     initexInternalQuantity
hi def link initexRegistersInternalQuantity     initexInternalQuantity

hi def link initexParameterDimen                initexNumber
hi def link initexBoxParameterDimen             initexParameterDimen
hi def link initexInsertsParameterDimen         initexParameterDimen
hi def link initexMathParameterDimen            initexParameterDimen
hi def link initexPageParameterDimen            initexParameterDimen
hi def link initexParagraphParameterDimen       initexParameterDimen

hi def link initexParameterGlue                 initexNumber
hi def link initexInsertsParameterGlue          initexParameterGlue
hi def link initexMathParameterGlue             initexParameterGlue
hi def link initexPageParameterGlue             initexParameterGlue
hi def link initexParagraphParameterGlue        initexParameterGlue
hi def link initexTablesParameterGlue           initexParameterGlue

hi def link initexParameterInteger              initexNumber
hi def link initexBoxParameterInteger           initexParameterInteger
hi def link initexCharacterParameterInteger     initexParameterInteger
hi def link initexDebuggingParameterInteger     initexParameterInteger
hi def link initexHyphenationParameterInteger   initexParameterInteger
hi def link initexInsertsParameterInteger       initexParameterInteger
hi def link initexJobParameterInteger           initexParameterInteger
hi def link initexMacroParameterInteger         initexParameterInteger
hi def link initexMathParameterInteger          initexParameterInteger
hi def link initexParagraphParameterInteger     initexParameterInteger
hi def link initexPenaltiesParameterInteger     initexParameterInteger

hi def link initexParameterMuglue               initexNumber
hi def link initexMathParameterMuglue           initexParameterMuglue

hi def link initexParameterToken                initexIdentifier
hi def link initexBoxParameterToken             initexParameterToken
hi def link initexDebuggingParameterToken       initexParameterToken
hi def link initexFileIOParameterToken          initexParameterToken
hi def link initexMathParameterToken            initexParameterToken
hi def link initexParagraphParameterToken       initexParameterToken
hi def link initexTablesParameterToken          initexParameterToken

let b:current_syntax = "initex"

let &cpo = s:cpo_save
unlet s:cpo_save