summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Master/texmf-dist/doc/context/third/vim/VERSION2
-rw-r--r--Master/texmf-dist/doc/context/third/vim/vim.txt108
-rw-r--r--Master/texmf-dist/tex/context/third/vim/2context.vim56
-rw-r--r--Master/texmf-dist/tex/context/third/vim/t-syntax-highlight.mkiv4
-rw-r--r--Master/texmf-dist/tex/context/third/vim/t-vim.tex12
5 files changed, 155 insertions, 27 deletions
diff --git a/Master/texmf-dist/doc/context/third/vim/VERSION b/Master/texmf-dist/doc/context/third/vim/VERSION
index 95c275e4038..9e6f07d186e 100644
--- a/Master/texmf-dist/doc/context/third/vim/VERSION
+++ b/Master/texmf-dist/doc/context/third/vim/VERSION
@@ -1 +1 @@
-2018.08.10
+2020.04.25
diff --git a/Master/texmf-dist/doc/context/third/vim/vim.txt b/Master/texmf-dist/doc/context/third/vim/vim.txt
index 801d1fb34c7..11c17cf59e6 100644
--- a/Master/texmf-dist/doc/context/third/vim/vim.txt
+++ b/Master/texmf-dist/doc/context/third/vim/vim.txt
@@ -73,6 +73,9 @@ on the ConTeXt wiki for detailed instructions.
Usage
-----
+Include the module
+
+ \usemodule[vim]
Suppose you want to syntax highlight Ruby. In particular, you want
@@ -112,7 +115,7 @@ defines three things:
\inlineRUBY{...}
- The contents of this environment are processed by a vim script
+ The contents of this macro are processed by a vim script
(`2context.vim`) and the result is read back in ConTeXt.
3. A macro
@@ -125,7 +128,15 @@ defines three things:
processing a url, see the _Processing remote files_ section of the
`t-filter` manual.
-In all the three cases, the `t-filter` module takes care of writing to external
+4. A macro
+
+ \processRUBYbuffer[...]
+
+ The argument to the macro is the name of a buffer, which is written to an
+ external file, processesd by `2context.vim` and the result is read back in
+ ConTeXt.
+
+In all the four cases, the `t-filter` module takes care of writing to external
file, processing by `2context.vim`, and reading the contents back to ConTeXt.
The `t-vim` module simply defines the macros that are used by `2context.vim`.
@@ -460,21 +471,27 @@ the bar starts from the first non-blank character.
Using TeX code in Comments
--------------------------
-Sometimes one wants to use TeX code in comments, especially for math. To
-enable this use
+Sometimes one wants to use TeX command in code. There are two different
+methods to do so.
+
+The first method is primarily aimed towards writing math in comments. To
+enable this, use
\definevimtyping
[...]
[...
- escape=on,
+ escape=comment,
]
-When `escape=on`, the `2context.vim` script passes the `Comment` syntax
-region (as identified by `vim`) verbatim to TeX. So, we may use TeX
-commands inside the comment region and they will be interpreted by TeX.
-For example
+For backward compatibility, this feature can also be enabled using
+`escape=on`.
- \definevimtyping[C][syntax=c, escape=on]
+When `escape=comment` is enabled, the `2context.vim` script passes the
+`Comment` syntax region (as identified by `vim`) verbatim to TeX. So, we may
+use TeX commands inside the comment region and they will be interpreted by
+TeX. For example
+
+ \definevimtyping[C][syntax=c, escape=comment]
\startC
/* The following function computes the roots of \m{ax^2+bx+c=0}
@@ -484,10 +501,79 @@ For example
\stopC
**Note** that only `\ { }` have their usual meaning inside the `Comment`
-region when `escape=on` is set. Thus, to enter a math expression, use
+region when `escape=comment` is set. Thus, to enter a math expression, use
`\m{...}` instead of `$...$`. Moreover, spaces are active inside the
math mode, so, as in the above example, avoid spaces in the math expressions.
+The second method is to imitate the behavior of `\starttyping` environment,
+where one can write arbitrary TeX commands in code inside `/BTEX ... /ETEX`
+delimiters. To enable this, use
+
+ \definevimtyping
+ [...]
+ [...
+ escape=command,
+ ]
+
+When `escape=command` is enabled, the `2context.vim` script defines a new
+syntax region using
+
+ syntax region ... start="/BTEX" end="/ETEX" transparent oneline containedin=ALL contains=NONE
+
+and passes content of this region verbatim to TeX. So, any TeX commands used
+inside this region are interpreted by TeX. For example,
+
+ \definevimtyping[C][syntax=c, escape=command]
+
+ \startC
+ /* Here is a comment describing a complicated function */
+ /BTEX\startframedtext[width=\textwidth,corner=round]/ETEX
+ double complicated (...)
+ {
+ ....
+ }
+ /BTEX\stopframedtext/ETEX
+ \stopC
+
+**Note** that as in the case for `escape=comment`, only `\ { }` have their
+usual meaning inside `/BTEX ... /ETEX`. Moreover, spaces are active
+characters. So, using a space between `\startframedtext` and `[` or between
+after the comma in the options to `\startframedtext` will result in an error.
+
+Clearly, `/BTEX ... /ETEX` is not a valid syntax in any language, so if these
+tags are used outside of a comment region (as is the case in the above
+example), the code will not compile. So, if the code also needs to run, then
+these annotations have to be restricted to the comment region of the code.
+
+Although, in practice, the use of both escape mechanisms is restricted to
+comments, the two mechanism have subtle differences. When using
+`escape=comment`, the `2context.vim` script simply passes the content of the
+comment region to TeX. This content is still typeset inside a
+`\SYN[Comment]{...}` group. While when using `escape=command`, the
+`2context.vim` script identifies the content of `/BTEX .. /ETEX` and passes it
+to TeX _without wrapping it insider any `\SYN[..]{...}` group_. This has an
+advantage when we want to use commands that cannot be used inside a group
+(e.g., `\inmargin`). For example, if we want to define a `\callout` macro that
+displays a note in the margin which we can refer to later, we can use:
+
+
+ \define[1]\callout{\inmargin{\rm #1}}
+ \definevimtyping[C][syntax=c, escape=command]
+
+ \startC
+ /* Here is a comment describing a complicated function */
+ double complicated (...)
+ {
+ ... // /BTEX\callout{Fancy trick!}/ETEX
+ }
+ \stopC
+
+Finally, note that the value of `escape` set using `\definevimtyping` is not
+used to `\inline<vim>typing`. If for some reason, you do need the escape
+mechanism for inline code, use
+
+ \inline<vim>typing[escape=command]{...}
+
Tuning color schemes
--------------------
diff --git a/Master/texmf-dist/tex/context/third/vim/2context.vim b/Master/texmf-dist/tex/context/third/vim/2context.vim
index 9c72ba1bd19..c83a731c5c8 100644
--- a/Master/texmf-dist/tex/context/third/vim/2context.vim
+++ b/Master/texmf-dist/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
diff --git a/Master/texmf-dist/tex/context/third/vim/t-syntax-highlight.mkiv b/Master/texmf-dist/tex/context/third/vim/t-syntax-highlight.mkiv
index 17019e14859..7c31c8f6a38 100644
--- a/Master/texmf-dist/tex/context/third/vim/t-syntax-highlight.mkiv
+++ b/Master/texmf-dist/tex/context/third/vim/t-syntax-highlight.mkiv
@@ -87,13 +87,13 @@
\forgetall
\usealignparameter\externalfilterparameter
- \doifinset{\externalfilterparameter\c!option}{\v!packed}
+ \doifinset{\v!packed}{\externalfilterparameter\c!option}
{\setupwhitespace[\v!none,\v!flexible]}%
\doadaptleftskip{\externalfilterparameter\c!margin}%
\setbreakpoints[compound]% Only works is `option=hyphenated` is set.
- \doifnotinset{\externalfilterparameter\c!option}{\v!hyphenated}
+ \doifnotinset{\v!hyphenated}{\externalfilterparameter\c!option}
{\language\minusone}%
\def\obeyedline{\strut\par}
diff --git a/Master/texmf-dist/tex/context/third/vim/t-vim.tex b/Master/texmf-dist/tex/context/third/vim/t-vim.tex
index 3cd83cdb2f8..eb0adbfe7b0 100644
--- a/Master/texmf-dist/tex/context/third/vim/t-vim.tex
+++ b/Master/texmf-dist/tex/context/third/vim/t-vim.tex
@@ -1,6 +1,6 @@
%D \module
%D [ file=t-vim,
-%D version=2018.04.17,
+%D version=2020.04.25,
%D title=\CONTEXT\ User Module,
%D subtitle=Vim syntax highlighting,
%D author=Aditya Mahajan,
@@ -9,7 +9,7 @@
%D email=adityam <at> ieee <dot> org,
%D license=Simplified BSD License]
-\writestatus{loading}{Vim syntax highlighting (ver: 2018.04.17)}
+\writestatus{loading}{Vim syntax highlighting (ver: 2020.04.25)}
\startmodule [vim]
\usemodule [filter] % loads module catcodes
@@ -129,7 +129,7 @@
-c "let contextstartline=\externalfilterparameter\c!start \letterbar\space %
let contextstopline=\externalfilterparameter\c!stop \letterbar\space %
let strip=\getvalue{\vimtyping@id-\c!strip-\externalfilterparameter\c!strip}" %
- -c "let escapecomments=\getvalue{\vimtyping@id-\c!escape-\externalfilterparameter\c!escape}" %
+ -c "let escapecomments=\getvalue{\vimtyping@id-\c!escape-\externalfilterparameter\c!escape}"
-c "let highlight=[\externalfilterparameter\c!highlight]" %
\vimrc_extras\space
-c "source \vimtyping@script_name" %
@@ -140,9 +140,14 @@
\setvalue{\vimtyping@id-\c!strip-\v!off}{0}
\setvalue{\vimtyping@id-\c!strip-\v!on}{1}
+\setvalue{\vimtyping@id-\c!escape-}{0} % Empty value
+
\setvalue{\vimtyping@id-\c!escape-\v!off}{0}
\setvalue{\vimtyping@id-\c!escape-\v!on}{1}
+\setvalue{\vimtyping@id-\c!escape-\v!comment}{1}
+\setvalue{\vimtyping@id-\c!escape-\v!command}{2}
+
% Undocumented ... but useful if the user makes a mistake
\setvalue{\vimtyping@id-\c!strip-\v!no}{0}
@@ -151,7 +156,6 @@
\setvalue{\vimtyping@id-\c!escape-\v!no}{0}
\setvalue{\vimtyping@id-\c!escape-\v!yes}{1}
-
\setupvimtyping
[% \c!tab=4,
% \c!start=1,