summaryrefslogtreecommitdiff
path: root/macros/context/contrib/context-vim/tex/context/third/vim/2context.vim
diff options
context:
space:
mode:
Diffstat (limited to 'macros/context/contrib/context-vim/tex/context/third/vim/2context.vim')
-rw-r--r--macros/context/contrib/context-vim/tex/context/third/vim/2context.vim56
1 files changed, 47 insertions, 9 deletions
diff --git a/macros/context/contrib/context-vim/tex/context/third/vim/2context.vim b/macros/context/contrib/context-vim/tex/context/third/vim/2context.vim
index 9c72ba1bd1..c83a731c5c 100644
--- a/macros/context/contrib/context-vim/tex/context/third/vim/2context.vim
+++ b/macros/context/contrib/context-vim/tex/context/third/vim/2context.vim
@@ -1,5 +1,5 @@
" Author : Aditya Mahajan <adityam [at] umich [dot] edu>
-" version : 2011.12.23
+" version : 2020.04.25
" license : Simplified BSD License
" This script is part of the t-vim module for ConTeXt. It is based on 2html.vim.
@@ -39,10 +39,22 @@ if !exists("highlight")
endif
" Set escapecomments
-if !exists("escapecomments")
- let escapecomments=0
+if exists("escapecomments")
+ let s:escapecomments=escapecomments " 0=off, 1=comments, 2=command
+else
+ let s:escapecomments=0
endif
+" Add a new syntax region to detect ConTeXt tags
+if s:escapecomments==2
+ syntax region vimtypingTEXcomment start="/BTEX" end="/ETEX" transparent oneline containedin=ALL contains=NONE
+
+ " Find the id of /BTEX ... /ETEX syntax region
+ let s:texcommentid = hlID("vimtypingTEXcomment")
+else
+ let s:texcommentid = -1 " Assuming that all ids are positive. Not documented
+end
+
let s:strip = strlen( matchstr( getline(s:lstart), '^\s*' ) )
" Find the smallest leading white space
@@ -74,6 +86,7 @@ let s:lnum = s:lstart
while s:lnum <= s:lstop
" Get the current line
let s:line = getline(s:lnum)
+
let s:len = strlen(s:line)
let s:new = ''
@@ -81,28 +94,53 @@ while s:lnum <= s:lstop
let s:col = s:strip + 1
while s:col <= s:len
let s:startcol = s:col " The start column for processing text
- let s:id = synID (s:lnum, s:col, 1)
- let s:col = s:col + 1
+
+ " Check if the next transprarent syntax is "vimtypingTEXcomment". If not,
+ " find the next non-transparent syntax id.
+ let s:id = synID (s:lnum, s:col, 0)
+ if s:id == s:texcommentid
+ let s:texcomment = 1
+ else
+ let s:texcomment = 0
+ let s:id = synID (s:lnum, s:col, 1)
+ endif
+ let s:col = s:col + 1
" Speed loop (it's small - that's the trick)
" Go along till we find a change in synID
- while s:col <= s:len && s:id == synID(s:lnum, s:col, 1)
+ while s:col <= s:len
+ " If there is a "vimtypingTEXcomment" inside another syntax id,
+ " "vimtypingTEXcomment" should get preference
+ let s:nextid = synID(s:lnum, s:col, 0)
+ if !s:texcomment && s:nextid != s:texcommentid
+ let s:nextid = synID(s:lnum, s:col, 1)
+ endif
+
+ if s:nextid != s:id
+ break
+ endif
+
let s:col = s:col + 1
endwhile
" Output the text with the same synID, with class set to {s:id_name}
let s:id = synIDtrans (s:id)
let s:id_name = synIDattr (s:id, "name", "gui")
- let s:temp = strpart(s:line, s:startcol - 1, s:col - s:startcol)
+ if s:texcomment
+ " Remove /BTEX and /ETEX which are 5 characters wide
+ let s:temp = strpart(s:line, s:startcol + 5 - 1, s:col - s:startcol - 5 - 5)
+ else
+ let s:temp = strpart(s:line, s:startcol - 1, s:col - s:startcol)
+ end
" Remove line endings (on unix machines reading windows files)
let s:temp = substitute(s:temp, '\r*$', '', '')
" It might have happened that that one has been the last item in a row, so
" we don't need to print in in that case
if strlen(s:temp) > 0
" Change special TeX characters to escape sequences.
- if !(escapecomments && s:id_name == "Comment")
+ if !(s:texcomment || (s:escapecomments == 1) && s:id_name == "Comment")
let s:temp = escape( s:temp, '\{}')
endif
- if !empty(s:id_name)
+ if !(s:texcomment || empty(s:id_name))
let s:temp = '\SYN[' . s:id_name . ']{' . s:temp . '}'
endif
let s:new = s:new . s:temp