Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mini-fix #2989

Closed
wants to merge 9 commits into from
170 changes: 82 additions & 88 deletions autoload/vimtex/syntax/core.vim
Original file line number Diff line number Diff line change
Expand Up @@ -159,52 +159,33 @@ function! vimtex#syntax#core#init_rules() abort " {{{1
call vimtex#syntax#core#new_opt('texFilesOpt', {'next': 'texFilesArg'})

" LaTeX 2.09 type styles
syntax match texCmdStyle "\\rm\>"
syntax match texCmdStyle "\\em\>"
syntax match texCmdStyle "\\bf\>"
syntax match texCmdStyle "\\it\>"
syntax match texCmdStyle "\\sl\>"
syntax match texCmdStyle "\\sf\>"
syntax match texCmdStyle "\\sc\>"
syntax match texCmdStyle "\\tt\>"

syntax match texCmdStyle "\v\\%(rm|em|bf|it|s[cfl]|tt)>"

" LaTeX2E type styles
syntax match texCmdStyle "\\textbf\>"
syntax match texCmdStyle "\\textit\>"
syntax match texCmdStyle "\\textmd\>"
syntax match texCmdStyle "\\textrm\>"
syntax match texCmdStyle "\\texts[cfl]\>"
syntax match texCmdStyle "\\texttt\>"
syntax match texCmdStyle "\\textup\>"
syntax match texCmdStyle "\\textnormal\>"
syntax match texCmdStyle "\\emph\>"

syntax match texCmdStyle "\\rmfamily\>"
syntax match texCmdStyle "\\sffamily\>"
syntax match texCmdStyle "\\ttfamily\>"

syntax match texCmdStyle "\\itshape\>"
syntax match texCmdStyle "\\scshape\>"
syntax match texCmdStyle "\\slshape\>"
syntax match texCmdStyle "\\upshape\>"

syntax match texCmdStyle "\\bfseries\>"
syntax match texCmdStyle "\\mdseries\>"

syntax match texCmdStyle "\v\\%(
\text%(bf|it|md|rm|s[cfl]|tt|up|normal)
\|emph
\|%(rm|sf|tt)family
\|%(it|sc|sl|up)shape
\|%(bf|md)series
\)>"


"syntax match texCmdStyle "\v\\%(%(rm|sf|tt)%(family)?|%(it|sc|sl)%(shape)?|upshape|em|bf%(series)?|mdseries|emph|text%(bf|it|md|rm|s[cfl]|tt|up|normal))>"

" Bold and italic commands
call s:match_bold_italic()

" Type sizes
syntax match texCmdSize "\\tiny\>"
syntax match texCmdSize "\\scriptsize\>"
syntax match texCmdSize "\\footnotesize\>"
syntax match texCmdSize "\\small\>"
syntax match texCmdSize "\\normalsize\>"
syntax match texCmdSize "\\large\>"
syntax match texCmdSize "\\Large\>"
syntax match texCmdSize "\\LARGE\>"
syntax match texCmdSize "\\huge\>"
syntax match texCmdSize "\\Huge\>"
syntax match texCmdSize "\v\\%(
\tiny
\|%(script|footnote|normal)size
\|small
\|[lL]arge|LARGE
\|[hH]uge
\)>"

" \newcommand
syntax match texCmdNewcmd "\\\%(re\)\?newcommand\>\*\?"
Expand Down Expand Up @@ -612,15 +593,8 @@ function! vimtex#syntax#core#init_rules() abort " {{{1
call vimtex#syntax#core#new_arg('texMathTextArg')

" Math style commands
syntax match texMathCmdStyle contained "\\mathbb\>"
syntax match texMathCmdStyle contained "\\mathbf\>"
syntax match texMathCmdStyle contained "\\mathcal\>"
syntax match texMathCmdStyle contained "\\mathfrak\>"
syntax match texMathCmdStyle contained "\\mathit\>"
syntax match texMathCmdStyle contained "\\mathnormal\>"
syntax match texMathCmdStyle contained "\\mathrm\>"
syntax match texMathCmdStyle contained "\\mathsf\>"
syntax match texMathCmdStyle contained "\\mathtt\>"
syntax match texMathCmdStyle contained "\v\\math(bb|bf|cal|frak|it|normal|rm|sf|tt)>"


" Bold and italic commands
call s:match_bold_italic_math()
Expand Down Expand Up @@ -1180,6 +1154,8 @@ function! vimtex#syntax#core#new_cmd_with_concealed_delims(cfg) abort " {{{1
endfunction

" }}}1
let s:custom_math_envs = []
let s:custom_math_envs_by_next = {}
function! vimtex#syntax#core#new_env(cfg) abort " {{{1
let l:cfg = extend({
\ 'name': '',
Expand Down Expand Up @@ -1207,21 +1183,54 @@ function! vimtex#syntax#core#new_env(cfg) abort " {{{1
let l:env_name = l:cfg.name . (l:cfg.starred ? '\*\?' : '')

if l:cfg.math
if ! empty(cfg.__predicate)
throw 'predicates are not supported for math environments'
endif

let l:cfg.region = 'texMathZoneEnv'
let l:options = 'keepend'
let l:contains = 'contains=texMathEnvBgnEnd,@texClusterMath'

let l:next = ''
if !empty(l:cfg.math_nextgroup)
let l:next = 'nextgroup=' . l:cfg.math_nextgroup . ' skipwhite skipnl'
endif

execute 'syntax match texMathEnvBgnEnd'
\ '"\\\%(begin\|end\){' . l:env_name . '}"'
\ 'contained contains=texCmdMathEnv'
\ l:next
execute 'syntax match texMathError "\\end{' . l:env_name . '}"'
if has_key(s:custom_math_envs_by_next, l:next)
let s:custom_math_envs_by_next[l:next] += [l:env_name]
syntax clear texMathEnvBgnEnd
for [l:i_next, l:envs] in items(s:custom_math_envs_by_next)
execute 'syntax match texMathEnvBgnEnd'
\ '"\\\%(begin\|end\){\%(' . join(l:envs) . '\)}"'
\ 'contained contains=texCmdMathEnv'
\ l:i_next
endfor
else
let s:custom_math_envs_by_next[l:next] = [l:env_name]
execute 'syntax match texMathEnvBgnEnd'
\ '"\\\%(begin\|end\){' . l:env_name . '}"'
\ 'contained contains=texCmdMathEnv'
\ l:next
endif
let l:contains = 'contains=texMathEnvBgnEnd,@texClusterMath'

if ! empty(s:custom_math_envs)
syntax clear texMathError
syntax clear texMathZoneEnv
endif
let s:custom_math_envs += [l:env_name]
execute 'syntax match texMathError "\\end{\%(' . join(s:custom_math_envs, '\|') . '\)}"'

execute 'syntax region texMathZoneEnv'
\ 'start="\\begin{\z(' . join(s:custom_math_envs, '\|') . '\)}"'
\ 'end="\\end{\z1}"'
\ 'contains=texMathEnvBgnEnd,@texClusterMath'
\ 'keepend'

else
if l:cfg.region == 'texMathZoneEnv'
throw "use {'math': 1} to define new texMathZoneEnv regions"
endif

if empty(l:cfg.region)
let l:cfg.region = printf(
\ 'tex%sZone',
Expand Down Expand Up @@ -1249,18 +1258,18 @@ function! vimtex#syntax#core#new_env(cfg) abort " {{{1
execute 'highlight def link' l:cfg.region 'texZone'
endif
endif
endif

let l:start = '\\begin{\z(' . l:env_name .'\)}'
if !empty(l:cfg.__predicate)
let l:start .= '\s*\[\_[^\]]\{-}' . l:cfg.__predicate . '\_[^\]]\{-}\]'
endif
let l:start = '\\begin{\z(' . l:env_name .'\)}'
if !empty(l:cfg.__predicate)
let l:start .= '\s*\[\_[^\]]\{-}' . l:cfg.__predicate . '\_[^\]]\{-}\]'
endif

execute 'syntax region' l:cfg.region
\ 'start="' . l:start . '"'
\ 'end="\\end{\z1}"'
\ l:contains
\ l:options
execute 'syntax region' l:cfg.region
\ 'start="' . l:start . '"'
\ 'end="\\end{\z1}"'
\ l:contains
\ l:options
endif
endfunction

" }}}1
Expand Down Expand Up @@ -1974,32 +1983,17 @@ endfunction

" }}}1
function! s:match_math_delims() abort " {{{1
syntax match texMathDelimMod contained "\\\(left\|right\)\>"
syntax match texMathDelimMod contained "\\\%(left\|right\)\>"
syntax match texMathDelimMod contained "\\[bB]igg\?[lr]\?\>"
syntax match texMathDelim contained "[()[\]]"
syntax match texMathDelim contained "\\{"
syntax match texMathDelim contained "\\}"
syntax match texMathDelim contained "\\backslash\>"
syntax match texMathDelim contained "\\downarrow\>"
syntax match texMathDelim contained "\\Downarrow\>"
syntax match texMathDelim contained "\\[lr]vert\>"
syntax match texMathDelim contained "\\[lr]Vert\>"
syntax match texMathDelim contained "\\langle\>"
syntax match texMathDelim contained "\\lbrace\>"
syntax match texMathDelim contained "\\lceil\>"
syntax match texMathDelim contained "\\lfloor\>"
syntax match texMathDelim contained "\\lgroup\>"
syntax match texMathDelim contained "\\lmoustache\>"
syntax match texMathDelim contained "\\rangle\>"
syntax match texMathDelim contained "\\rbrace\>"
syntax match texMathDelim contained "\\rceil\>"
syntax match texMathDelim contained "\\rfloor\>"
syntax match texMathDelim contained "\\rgroup\>"
syntax match texMathDelim contained "\\rmoustache\>"
syntax match texMathDelim contained "\\uparrow\>"
syntax match texMathDelim contained "\\Uparrow\>"
syntax match texMathDelim contained "\\updownarrow\>"
syntax match texMathDelim contained "\\Updownarrow\>"

syntax match texMathDelim contained "\v\\%(
\[lr]%(vert|angle|brace|ceil|floor|group|moustache)
\|backslash
\|[uU]%(down)?parrow
\|[dD]ownarrow
\|[{}]
\)>"

if !g:vimtex_syntax_conceal.math_delimiters || &encoding !=# 'utf-8'
return
Expand Down
2 changes: 1 addition & 1 deletion autoload/vimtex/view.vim
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ function! vimtex#view#inverse_search(line, filename) abort " {{{1
" * If tab/window exists, switch to it/them
let l:bufnr = bufnr(l:file)
try
let [l:winid] = win_findbuf(l:bufnr)
let [l:winid; _] = win_findbuf(l:bufnr)
let [l:tabnr, l:winnr] = win_id2tabwin(l:winid)
execute l:tabnr . 'tabnext'
execute l:winnr . 'wincmd w'
Expand Down
46 changes: 0 additions & 46 deletions test/perf-syntax/main.tex

This file was deleted.

1 change: 1 addition & 0 deletions test/perf-syntax/main.tex
22 changes: 21 additions & 1 deletion test/perf-syntax/test.vim
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,36 @@ set runtimepath+=../../after
filetype plugin indent on
syntax enable

function! SynGroup()
let l:s = synID(line('.'), col('.'), 1)
echo synIDattr(l:s, 'name') . ' -> ' . synIDattr(synIDtrans(l:s), 'name')
endfun

function! SynStack()
if !exists("*synstack")
return
endif
echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunc

nnoremap zS :call SynStack()<CR>
color desert

nnoremap q :qall!<cr>

let g:vimtex_syntax_conceal_disable = 1
let g:vimtex_syntax_match_unicode = 0
silent edit main.tex


set nolazyredraw
let LINES = line('$')
syntime on
for s:x in range(400)
for s:x in range(2*LINES/winheight(0))
norm! 
redraw!
endfor

let s:lines = split(execute('syntime report'), "\n")
call writefile(s:lines, "out.log")

Expand Down