diff --git a/README.md b/README.md
index 0b9cd41..17cfb9f 100644
--- a/README.md
+++ b/README.md
@@ -52,6 +52,7 @@ Table of Contents
* [Processing remote files](#processing-remote-files)
* [Processing existing buffers](#processing-existing-buffers)
* [Prepend and append text](#prepend-and-append-text)
+* [XML export](#xml-export)
* [Special use case: \write18 with caching](#special-use-case--write18-with-caching)
* [Dealing with expansion](#dealing-with-expansion)
* [Limitations](#limitations)
@@ -754,6 +755,43 @@ Then you can use
to get a chess board.
+XML export
+----------
+
+The filter module provides a basic support for XML export. If the
+user-document contains
+
+ \setupbackend[export=yes]
+
+or other valid options to `export` such as `export=xml`, then the filter
+environment is exported as well. For example, both
+
+ \startmarkdown
+ ...
+ \stopmarkdown
+
+and
+ \processmarkdownfile{...}
+
+are exported (in `\jobname-export/\jobname.xml`) as
+
+
+ ...
+
+
+Moreover,
+
+ \inlinemarkdown{...}
+
+is exported as
+
+ ....
+
+
+Note that it is the responsibility of the filter to generate properly tagged
+content. For example, `pandoc` used in the `markdown` examples in this
+document converts `**bold**` to `{\bf bold}`, which is not exported.
+
Special use case: `\write18` with caching
------------------------------------------
diff --git a/Rakefile b/Rakefile
index 41f4722..8bddea4 100644
--- a/Rakefile
+++ b/Rakefile
@@ -1,15 +1,6 @@
require 'fileutils'
require 'rake/clean'
-def make_pandoc
- File.open('t-pandoc.tex', 'w') do |file|
- file.puts "\\startmodule [pandoc]"
- file.puts "\\let\\strong\\bold"
- file.puts "\\let\\emph\\italic"
- file.puts "\\stopmodule"
- end
-end
-
def make_tds(name, files, doc)
tex_dir = "#{name}/tex/context/third/#{name}"
doc_dir = "#{name}/doc/context/third/#{name}"
@@ -30,10 +21,9 @@ def make_zip name
end
def run_tests tests, engine
- make_pandoc
FileUtils.mkdir_p "output"
tests.each do |file|
- sh "context --#{engine} --usemodule=pandoc --color --mode=vim-dev --noconsole --purgeall --purgeresult #{file}"
+ sh "context --#{engine} --color --mode=vim-dev --noconsole --purgeall --purgeresult #{file}"
end
sh "context --purgeall"
end
@@ -42,7 +32,7 @@ FILTER_TEX = %W[t-filter.mkii t-filter.mkiv t-module-catcodes.mkii t-module-cat
FILTER_DOC = "README.md"
FILTER_TEST = FileList['tests/[0-9][0-9]-*.tex']
-VIM_TEX = %W[t-vim.tex t-syntax-groups.tex t-syntax-highlight.mkii t-syntax-highlight.mkiv 2context.vim]
+VIM_TEX = %W[t-vim.tex t-syntax-groups.mkii t-syntax-groups.mkiv t-syntax-highlight.mkii t-syntax-highlight.mkiv 2context.vim vimtyping-default.css]
VIM_DOC = "vim-README.md"
VIM_TEST = FileList['tests/vim/[0-9][0-9]-*.tex']
diff --git a/t-filter.mkiv b/t-filter.mkiv
index 5db429a..757f475 100644
--- a/t-filter.mkiv
+++ b/t-filter.mkiv
@@ -1,6 +1,6 @@
%D \module
%D [ file=t-filter,
-%D version=2020.04.25,
+%D version=2020.06.29,
%D title=\CONTEXT\ User Module,
%D subtitle=Filter,
%D author=Aditya Mahajan,
@@ -9,7 +9,7 @@
%D email=adityam ieee org,
%D license=Simplified BSD License]
-\writestatus{loading}{Filter (ver: 2020.04.25)}
+\writestatus{loading}{Filter (ver: 2020.06.29)}
\startmodule [filter]
\usemodule [module-catcodes]
@@ -35,6 +35,7 @@
\setinterfaceconstant {write} {write}
\setinterfaceconstant {readcommand} {readcommand}
\setinterfaceconstant {taglabel} {taglabel}
+ \setinterfaceconstant {tagdetail} {tagdetail}
\stopinterface
@@ -66,6 +67,10 @@
\setuevalue{process\currentexternalfilter file}{\externalfilter@process_file[\currentexternalfilter]}%
\setuevalue{process\currentexternalfilter buffer}{\externalfilter@process_buffer[\currentexternalfilter]}%
\setuevalue{inline\currentexternalfilter}{\externalfilter@inline[\currentexternalfilter]}%
+ \setelementbackendtag[\externalfilterparameter\c!taglabel]
+ \setelementnature [\externalfilterparameter\c!taglabel][display]
+ \setelementbackendtag[inline\externalfilterparameter\c!taglabel]
+ \setelementnature [inline\externalfilterparameter\c!taglabel][inline]
\to \everydefineexternalfilter
% For backward compatibility
@@ -479,16 +484,17 @@
\doifelse{\externalfilterparameter\c!location}\v!paragraph
{\blank[\externalfilterparameter\c!spacebefore]
\usealignparameter\externalfilterparameter
- \externalfilterparameter\c!before}
- {\externalfilterparameter\c!left}
+ \externalfilterparameter\c!before
+ \dostarttagged{\externalfilterparameter\c!taglabel}{\externalfilterparameter\c!tagdetail}}
+ {\externalfilterparameter\c!left
+ \dostarttagged{inline\externalfilterparameter\c!taglabel}{\externalfilterparameter\c!tagdetail}}
\begingroup
- \dostarttagged{\externalfilterparameter\c!taglabel}\currentexternalfilter
\useexternalfilterstyleandcolor\c!style\c!color
\processcommacommand[\externalfilterparameter\c!setups]\directsetup
\externalfilterparameter\c!readcommand\externalfilter@output_file
- \dostoptagged
\endgroup
+ \dostoptagged
\doifelse{\externalfilterparameter\c!location}\v!paragraph
{\externalfilterparameter\c!after
@@ -526,6 +532,7 @@
\c!buffer\c!before=,
\c!buffer\c!after=,
\c!taglabel=\externalfilter@id,
+ \c!tagdetail=\currentexternalfilter,
]
\def\externalfilterbasefile {\externalfilter@base_file}
diff --git a/t-syntax-groups.tex b/t-syntax-groups.mkii
similarity index 95%
rename from t-syntax-groups.tex
rename to t-syntax-groups.mkii
index 23fb1b7..b13a902 100644
--- a/t-syntax-groups.tex
+++ b/t-syntax-groups.mkii
@@ -32,8 +32,6 @@
\installparameterhandler \syntaxgroup@namespace \syntaxgroup@id
\installsetuphandler \syntaxgroup@namespace \syntaxgroup@id
-\doifmode{\s!mkiv}
- {\installstyleandcolorhandler \syntaxgroup@namespace \syntaxgroup@id}
\def\m!syntaxgroup{t-syntax-group}
@@ -99,14 +97,12 @@
\iftracesyntaxgroups
\syntaxgroup@show_values
\fi
- \doifmode{\s!mkiv}{\dostarttagged\t!syntaxgroup{#1}}
\syntaxgroupparameter\c!command
{
\externalfilter@attributes_start\syntaxgroup@id\c!style\c!color
#2
\externalfilter@attributes_stop
}
- \doifmode{\s!mkiv}{\dostoptagged}
\syntaxgroupparameter\c!after
\endgroup
\stoptexdefinition
diff --git a/t-syntax-groups.mkiv b/t-syntax-groups.mkiv
new file mode 100644
index 0000000..564490e
--- /dev/null
+++ b/t-syntax-groups.mkiv
@@ -0,0 +1,126 @@
+%D \module
+%D [ file=t-syntax-groups,
+%D version=2020.06.29,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Syntax highlighting support,
+%D author=Aditya Mahajan,
+%D date=\currentdate,
+%D copyright=Aditya Mahajan,
+%D email=adityam ieee org,
+%D license=Simplified BSD License]
+
+\writestatus{loading}{Syntax highlighting groups (ver: 2020.06.29)}
+
+\startmodule [syntax-group]
+\usemodule [module-catcodes]
+
+\unprotectmodulecatcodes
+
+\def\colorscheme@name {}
+
+\def\syntaxgroup@id {syntaxgroup}
+\def\syntaxgroup@namespace {@@@@\syntaxgroup@id}
+\def\syntaxgroup@name {}
+
+\edef\t!vimsyntaxgroup {\syntaxgroup@id}
+\setelementbackendtag[\t!vimsyntaxgroup]
+\setelementnature [\t!vimsyntaxgroup][inline]
+
+
+\installparameterhandler \syntaxgroup@namespace \syntaxgroup@id
+\installsetuphandler \syntaxgroup@namespace \syntaxgroup@id
+\installstyleandcolorhandler \syntaxgroup@namespace \syntaxgroup@id
+
+\def\m!syntaxgroup{t-syntax-group}
+
+\def\definesyntaxgroup
+ {\dodoubleargument\syntaxgroup@define}
+
+\starttexdefinition syntaxgroup@define [#1][#2]
+ % #1 list name
+ % #2 options
+ \doifassignmentelse{#2}
+ {
+ \def\syntaxgroup@get_parameters##1%
+ {
+ \edef\syntaxgroup@name {\colorscheme@name##1}
+ \setupsyntaxgroup[\syntaxgroup@name]
+ [\s!parent=\syntaxgroup@namespace,\c!color=,\c!style=,\c!command=,#2]
+ \doifsomething{\syntaxgroupparameter\c!color}
+ {
+ \expanded{\definecolor[\syntaxgroup@namespace-##1-color]
+ [\syntaxgroupparameter\c!color]}
+ \setupsyntaxgroup[\syntaxgroup@name][\s!parent=\syntaxgroup@namespace,\c!color=\syntaxgroup@namespace-##1-color]
+ }
+ }
+ }{
+ \def\syntaxgroup@get_parameters##1%
+ {
+ \edef\syntaxgroup@name {\colorscheme@name##1}
+ \expanded{\setupsyntaxgroup[\syntaxgroup@name]
+ [\c!color=\namedsyntaxgroupparameter{\colorscheme@name#2}\c!color,
+ \c!style=\namedsyntaxgroupparameter{\colorscheme@name#2}\c!style,
+ \c!command=\namedsyntaxgroupparameter{\colorscheme@name#2}\c!command,
+ ]}
+
+ % In MkII, \expanded messes up the definition of \currentsyntaxgroup
+ \def\currentsyntaxgroup {\syntaxgroup@name}
+ }
+ }
+
+ \processcommalist[#1]\syntaxgroup@get_parameters
+\stoptexdefinition
+
+\def\startcolorscheme%
+ {\dosingleargument\colorscheme@start}
+
+\starttexdefinition colorscheme@start [#1]
+ \pushmacro\colorscheme@name
+ \setcolorscheme{#1}
+ %\setupsyntaxgroup[\c!color=,\c!style=,\c!command=]
+\stoptexdefinition
+
+\def\stopcolorscheme
+ {\popmacro\colorscheme@name}
+
+\def\setcolorscheme#1%
+ {\edef\colorscheme@name{#1}}
+
+\starttexdefinition syntaxgroup [#1]#2
+ % #1 = style
+ % #2 = content
+ \begingroup
+ \edef\syntaxgroup@name{\colorscheme@name#1}%
+ \syntaxgroupparameter\c!before
+ \iftracesyntaxgroups
+ \syntaxgroup@show_values
+ \fi
+ \dostarttagged\t!vimsyntaxgroup{vim#1}
+ \syntaxgroupparameter\c!command
+ {
+ \externalfilter@attributes_start\syntaxgroup@id\c!style\c!color
+ #2
+ \externalfilter@attributes_stop
+ }
+ \dostoptagged
+ \syntaxgroupparameter\c!after
+ \endgroup
+\stoptexdefinition
+
+%D Tracing macros
+
+\newif\iftracesyntaxgroups
+\let\tracesyntaxgroups\tracesyntaxgroupstrue
+
+\def\currentsyntaxgroup {\syntaxgroup@name}
+
+\starttexdefinition syntaxgroup@show_values
+ \writestatus\m!syntaxgroup{color scheme : \colorscheme@name}
+ \writestatus\m!syntaxgroup{current group: \syntaxgroup@name}
+ \writestatus\m!syntaxgroup{command : \syntaxgroupparameter\c!command}
+ \writestatus\m!syntaxgroup{style : \syntaxgroupparameter\c!style}
+ \writestatus\m!syntaxgroup{color : \syntaxgroupparameter\c!color}
+\stoptexdefinition
+
+\protectmodulecatcodes
+\stopmodule
diff --git a/t-syntax-highlight.mkiv b/t-syntax-highlight.mkiv
index bda25b1..13786bb 100644
--- a/t-syntax-highlight.mkiv
+++ b/t-syntax-highlight.mkiv
@@ -1,6 +1,6 @@
%D \module
%D [ file=t-syntax-highlight,
-%D version=2018.08.10,
+%D version=2020.06.29,
%D title=\CONTEXT\ User Module,
%D subtitle=Code syntax highlighting,
%D author=Aditya Mahajan,
@@ -9,7 +9,7 @@
%D email=adityam ieee org,
%D license=Simplified BSD License]
-\writestatus{loading}{Code syntax highlighting (ver: 2018.08.10)}
+\writestatus{loading}{Code syntax highlighting (ver: 2020.06.29)}
\startmodule [syntax-highlight]
\usemodule [syntax-groups]
@@ -36,7 +36,10 @@
\appendtoks
\defineexternalfilter[\currentsyntaxhighlighting]
- [\s!parent=\????syntaxhighlighting\currentexternalfilter,\c!taglabel=\vimtyping@id]%
+ [\s!parent=\????syntaxhighlighting\currentexternalfilter,
+ \c!taglabel=\vimtyping@id,
+ \c!tagdetail={\externalfilterparameter\c!alternative},
+ ]%
\normalexpanded{\definelinenumbering [\currentsyntaxhighlighting]}%
\setevalue{type\currentsyntaxhighlighting file}{\getvalue{process\currentsyntaxhighlighting file}}%
\to\everydefinesyntaxhighlighting
@@ -64,7 +67,6 @@
\to\everysetupsyntaxhighlighting
\def\syntaxhighlighting@id {syntaxhighlighting}
-\edef\t!syntaxhighlighting {\syntaxhighlighting@id}
%D Helper macro
@@ -114,7 +116,7 @@
\stoptexdefinition
\starttexdefinition syntaxhighlighting@linenumbering_start
- \doifinset{\externalfilterparameter\c!numbering}\syntaxhighlighting@yes
+ \doifinsetelse{\externalfilterparameter\c!numbering}\syntaxhighlighting@yes
{\let\SYNBOL=\syntaxhighlighting_begin_number_lines
\let\SYNEOL=\syntaxhighlighting_end_number_lines
\startlinenumbering
@@ -125,24 +127,34 @@
\c!step=\externalfilterparameter{\c!number\c!step},
\c!continue=\externalfilterparameter{\c!number\c!continue},
]}
- \dostarttagged\t!syntaxhighlighting\colorscheme@name
+ {\let\SYNBOL=\syntaxhighlighting_begin_lines
+ \let\SYNEOL=\syntaxhighlighting_end_lines}
\stoptexdefinition
\starttexdefinition syntaxhighlighting@linenumbering_stop
- \dostoptagged
\doifinset{\externalfilterparameter\c!numbering}\syntaxhighlighting@yes
{\stoplinenumbering}
\stoptexdefinition
\newcount\nofsyntaxhighlightinglines
+\starttexdefinition syntaxhighlighting_begin_lines
+ \dostarttaggednodetail\t!verbatimline
+\stoptexdefinition
+
+\starttexdefinition syntaxhighlighting_end_lines
+ \dostoptagged
+\stoptexdefinition
+
\starttexdefinition syntaxhighlighting_begin_number_lines
\global\advance\nofsyntaxhighlightinglines\plusone
+ \dostarttaggednodetail\t!verbatimline
\attribute\verbatimlineattribute\nofsyntaxhighlightinglines
\stoptexdefinition
\starttexdefinition syntaxhighlighting_end_number_lines
- \attribute\verbatimlineattribute\attributeunsetvalue
+ \attribute\verbatimlineattribute\attributeunsetvalue
+ \dostoptagged
\stoptexdefinition
diff --git a/t-vim.tex b/t-vim.tex
index f873428..3cb8e31 100644
--- a/t-vim.tex
+++ b/t-vim.tex
@@ -1,6 +1,6 @@
%D \module
%D [ file=t-vim,
-%D version=2020.05.17,
+%D version=2020.06.29,
%D title=\CONTEXT\ User Module,
%D subtitle=Vim syntax highlighting,
%D author=Aditya Mahajan,
@@ -9,7 +9,7 @@
%D email=adityam ieee org,
%D license=Simplified BSD License]
-\writestatus{loading}{Vim syntax highlighting (ver: 2020.05.17)}
+\writestatus{loading}{Vim syntax highlighting (ver: 2020.06.29)}
\startmodule [vim]
\usemodule [filter] % loads module catcodes
@@ -50,11 +50,16 @@
% Mode to testing the dev version of 2context script.
\doifmodeelse{vim-dev,dev-vim}
- {\def\vimtyping@script_name{2context.vim}}
+ {\def\vimtyping@script_name{2context.vim}%
+ \doifmode\s!mkiv{\def\vimtyping@css_name{vimtyping-default.css}}}
{\doifmodeelse\s!mkiv
- {\ctxlua{context.setvalue("vimtyping@script_name",resolvers.resolve("full:2context.vim"))}}
+ {\ctxlua{context.setvalue("vimtyping@script_name",resolvers.resolve("full:2context.vim"))}%
+ \ctxlua{context.setvalue("vimtyping@css_name",
+ resolvers.resolve("full:vimtyping-default.css"))}}
{\def\vimtyping@script_name{kpse:2context.vim}}}
+\def\vimtypingcssfile{\vimtyping@css_name}
+
\def\vimtyping@filter_command
{\externalfilterparameter\c!vimcommand\space
-u \vimrc_filename\space % read global config file
@@ -265,7 +270,6 @@
[\c!color={h=800000},
\c!command=\vimtodoframed]
-
\definesyntaxgroup
[Error]
[\c!color={h=c03000}]
@@ -275,11 +279,6 @@
[\c!color={h=6a5acd},
\c!command=\underbar]
- \definesyntaxgroup
- [Todo]
- [\c!color={h=800000},
- \c!command=\vimtodoframed]
-
\setups{vim-minor-groups}
\definesyntaxgroup
diff --git a/tests/41-export.tex b/tests/41-export.tex
new file mode 100644
index 0000000..b427949
--- /dev/null
+++ b/tests/41-export.tex
@@ -0,0 +1,20 @@
+\usemodule[filter]
+
+\setupbackend[export=xml]
+\defineexternalfilter
+ [markdown]
+ [filter={pandoc -w context -o \externalfilteroutputfile }]
+
+\starttext
+\startparagraph
+ Both inline markdown such as \inlinemarkdown{**this** sample} and display
+ markdown shown below are exported.
+\stopparagraph
+ \startmarkdown
+ This **display** sample
+ \stopmarkdown
+\startparagraph
+ Note that the overall document must have a valid structure.
+\stopparagraph
+\stoptext
+
diff --git a/tests/vim/41-export.tex b/tests/vim/41-export.tex
new file mode 100644
index 0000000..7699fee
--- /dev/null
+++ b/tests/vim/41-export.tex
@@ -0,0 +1,43 @@
+\usemodule[vim]
+
+\setupbackend[export=yes]
+\setupexport[cssfile=\vimtypingcssfile]
+
+\definevimtyping[PYTHON][syntax=python]
+
+\starttext
+\startsection[title={A code listing}]
+ \startparagraph
+ This is a code listing
+ \stopparagraph
+ \startPYTHON
+ # Python program listing
+ # TODO: Define a more elaborate function
+ def foobar
+ print("Hello World")
+ \stopPYTHON
+
+ \startparagraph
+ Now the same example with line numbering
+ \stopparagraph
+ \startPYTHON[numbering=yes]
+ # Python program listing
+ def foobar
+ print("Hello World")
+ \stopPYTHON
+
+ \startparagraph
+ Now with the line numbering on the right. Location of line numbering is
+ fixed per page, hence a page break here
+ \stopparagraph
+
+ \page
+
+ \setupvimtyping[PYTHON][numberlocation=right]
+ \startPYTHON[numbering=yes]
+ # Python program listing
+ def foobar
+ print("Hello World")
+ \stopPYTHON
+\stopsection
+\stoptext
diff --git a/tests/vim/42-export-inline.tex b/tests/vim/42-export-inline.tex
new file mode 100644
index 0000000..cdc104d
--- /dev/null
+++ b/tests/vim/42-export-inline.tex
@@ -0,0 +1,13 @@
+\usemodule[vim]
+
+\setupbackend[export=yes]
+\setupexport[cssfile=\vimtypingcssfile]
+
+\definevimtyping[PYTHON][syntax=python]
+
+\starttext
+\startparagraph
+ Here is some inline python code \inlinePYTHON{print("Hello World")}.
+ Let's see how it looks in display.
+\stopparagraph
+\stoptext
diff --git a/tests/vim/43-export-float.tex b/tests/vim/43-export-float.tex
new file mode 100644
index 0000000..567cb6c
--- /dev/null
+++ b/tests/vim/43-export-float.tex
@@ -0,0 +1,31 @@
+\setupbackend[export=yes]
+
+\usemodule[vim]
+
+\definevimtyping[PYTHON][syntax=python]
+
+\starttext
+ \startparagraph
+ This is a test of a code listing inside a float
+ \stopparagraph
+
+ \startplacefigure[location={here}, title={A code snippet in a float}]
+ \startPYTHON
+ a=12
+ def hello_world(hello)
+ print("simon says: {}".format(hello))
+ hallo_welt("How do you do?")
+ \stopPYTHON
+ \stopplacefigure
+
+ \setupvimtyping[PYTHON][numbering=yes]
+ \startplacefigure[location={here}, title={A code snippet with line numbering in a float}]
+ \startPYTHON
+ a=12
+ def hello_world(hello)
+ print("simon says: {}".format(hello))
+ hallo_welt("How do you do?")
+ \stopPYTHON
+ \stopplacefigure
+\stoptext
+
diff --git a/vim-README.md b/vim-README.md
index 44dc8f5..12c5d10 100644
--- a/vim-README.md
+++ b/vim-README.md
@@ -37,6 +37,7 @@ Table of Contents
* [Name (and location) of the VIM executable](#name-and-location-of-the-vim-executable)
* [Defining a new colorscheme](#defining-a-new-colorscheme)
* [Modifying an existing color scheme](#modifying-an-existing-color-scheme)
+* [XML export](#xml-export)
* [A bit of a history](#a-bit-of-a-history)
@@ -974,6 +975,81 @@ typeset in bold red, we can use:
[color=red, style=bold]
\stopcolorscheme
```
+XML Export
+----------
+
+The vim module provides a basic support for XML export. If the user-document
+contains
+
+ \setupbackend[export=yes]
+
+or other valid options to `export` such as `export=xml`, then the vim typing
+environments are exported as well. For example,
+
+ \definevimtyping[PYTHON][syntax=python]
+ \startPYTHON
+ # Python program listing
+ def foobar
+ print("Hello World")
+ \stopPYTHON
+
+
+is exported as
+
+
+ # Python program listing
+ def foobar
+ print("Hello World")
+
+
+The name of the exported envionment is `vimtyping`.
+
+Inline environments such as
+
+ \definevimtyping[PYTHON][syntax=python]
+ \inlinePYTHON{print("Hello World")}
+
+is exported as
+
+ print("Hello World")
+
+The name of the exported envionment is `inlinevimtyping`.
+
+In both the display and inline environments, the name of the programming
+language (value of the `syntax` key) is
+not exported since it is not needed to display the parse output.
+Instead the name of the colorscheme (value of the `alternative` key) is
+exported as the parameter `detail` of `vimtyping`. Each line is exported as a
+`verbatimline`. Each syntaxgroup is exported as ``.
+The value of `defail` equals to the name of the syntax highlighting group
+_prepended with `vim`_. The name is prepended with `vim` to avoid name clashes
+with other elements in the exported XML. Strictly speaking this is not
+necessary, but it does make it easier to write CSS selectors.
+
+The module comes with a CSS file with default mappings for the two
+colorschemes that are provided with the module (`pscolor` and
+`blackandwhite`). This is meant as a simple solution which gives approximately
+the same output as the PDF file. To use this CSS file, add
+
+ \setupexport[cssfile=\vimtypingcssfile]
+
+If you already have other values for `cssfile`, then use:
+
+ \setupexport[cssfile={...,...,\vimtypingcssfile}]
+
+Note that the macro `\vimtypingcssfile` is defined in the vim module, so the
+above line has to come after the `vim` module has been loaded.
+
+If you make changes to the default colorschemes, define colorschemes of your
+own, or want to tweak the visual appearance of the output, you need to tweak
+the default CSS file to suit your needs. It is suggested that you copy the
+default css file and tweak it. You can find the location of the default CSS
+file using
+
+ luatools vimtyping-default.css
+
+Copy it under a different name and tweak it as desired.
+
A bit of a history
------------------
diff --git a/vimtyping-default.css b/vimtyping-default.css
new file mode 100644
index 0000000..e1eeb7d
--- /dev/null
+++ b/vimtyping-default.css
@@ -0,0 +1,415 @@
+/*
+ author : Aditya Mahajan and Christoph Hintermüller,
+ license : Simplfied BSD License,
+ version : 2020.06.29
+*/
+
+/* TODO:
+ * Inline environments
+ * Export of TODO has an extra space
+ * Line numbering in the margin
+ */
+
+vimtyping,
+.vimtyping
+{
+ font-family:monospace;
+ display:block;
+ white-space:pre-wrap;
+}
+
+inlinevimtyping,
+.inlinevimtyping
+{
+ font-family:monospace;
+ display:inline;
+ white-space:pre-wrap;
+}
+
+
+vimtyping verbatimline,
+inlinevimtyping verbatimline,
+.vimtyping .verbatimline,
+.inlinevimtyping .verbatimline
+{
+ display:inline;
+ white-space:pre-wrap;
+}
+
+vimtyping syntaxgroup,
+inlinevimtyping syntaxgroup,
+.vimtyping .syntaxgroup,
+.inlinevimtyping .syntaxgroup
+{
+ display:inline;
+}
+
+/* `pscolor` color scheme */
+vimtyping[detail=pscolor] syntaxgroup[defail=vimConstant],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimConstant],
+.vimtyping.pscolor .syntaxgroup.vimConstant,
+.inlinevimtyping.pscolor .syntaxgroup.vimConstant,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimString],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimString],
+.vimtyping.pscolor .syntaxgroup.vimString,
+.inlinevimtyping.pscolor .syntaxgroup.vimString,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimCharacter],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimCharacter],
+.vimtyping.pscolor .syntaxgroup.vimCharacter,
+.inlinevimtyping.pscolor .syntaxgroup.vimCharacter,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimBoolean],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimBoolean],
+.vimtyping.pscolor .syntaxgroup.vimBoolean,
+.inlinevimtyping.pscolor .syntaxgroup.vimBoolean,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimFloat],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimFloat],
+.vimtyping.pscolor .syntaxgroup.vimFloat,
+.inlinevimtyping.pscolor .syntaxgroup.vimFloat
+{
+ color:#007068;
+}
+
+vimtyping[detail=pscolor] syntaxgroup[defail=vimNumber],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimNumber],
+.vimtyping.pscolor .syntaxgroup.vimNumber,
+.inlinevimtyping.pscolor .syntaxgroup.vimNumber
+{
+ color:#907000;
+}
+
+vimtyping[detail=pscolor] syntaxgroup[defail=vimIdentifier],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimIdentifier],
+.vimtyping.pscolor .syntaxgroup.vimIdentifier,
+.inlinevimtyping.pscolor .syntaxgroup.vimIdentifier,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimFunction],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimFunction],
+.vimtyping.pscolor .syntaxgroup.vimFunction,
+.inlinevimtyping.pscolor .syntaxgroup.vimFunction
+{
+ color:#a030a0;
+}
+
+vimtyping[detail=pscolor] syntaxgroup[defail=vimStatement],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimStatement],
+.vimtyping.pscolor .syntaxgroup.vimStatement,
+.inlinevimtyping.pscolor .syntaxgroup.vimStatement,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimCondition],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimCondition],
+.vimtyping.pscolor .syntaxgroup.vimCondition,
+.inlinevimtyping.pscolor .syntaxgroup.vimCondition,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimRepeat],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimRepeat],
+.vimtyping.pscolor .syntaxgroup.vimRepeat,
+.inlinevimtyping.pscolor .syntaxgroup.vimRepeat,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimLabel],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimLabel],
+.vimtyping.pscolor .syntaxgroup.vimLabel,
+.inlinevimtyping.pscolor .syntaxgroup.vimLabel,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimOperator],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimOperator],
+.vimtyping.pscolor .syntaxgroup.vimOperator,
+.inlinevimtyping.pscolor .syntaxgroup.vimOperator,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimKeyword],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimKeyword],
+.vimtyping.pscolor .syntaxgroup.vimKeyword,
+.inlinevimtyping.pscolor .syntaxgroup.vimKeyword,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimException],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimException],
+.vimtyping.pscolor .syntaxgroup.vimException,
+.inlinevimtyping.pscolor .syntaxgroup.vimException
+{
+ color:#2060a8;
+}
+
+vimtyping[detail=pscolor] syntaxgroup[defail=vimPreProc],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimPreProc],
+.vimtyping.pscolor .syntaxgroup.vimPreProc,
+.inlinevimtyping.pscolor .syntaxgroup.vimPreProc,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimInclude],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimInclude],
+.vimtyping.pscolor .syntaxgroup.vimInclude,
+.inlinevimtyping.pscolor .syntaxgroup.vimInclude,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimDefine],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimDefine],
+.vimtyping.pscolor .syntaxgroup.vimDefine,
+.inlinevimtyping.pscolor .syntaxgroup.vimDefine,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimMacro],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimMacro],
+.vimtyping.pscolor .syntaxgroup.vimMacro,
+.inlinevimtyping.pscolor .syntaxgroup.vimMacro,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimPreCondit],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimPreCondit],
+.vimtyping.pscolor .syntaxgroup.vimPreCondit,
+.inlinevimtyping.pscolor .syntaxgroup.vimPreCondit
+{
+ color:#009030;
+}
+
+vimtyping[detail=pscolor] syntaxgroup[defail=vimType],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimType],
+.vimtyping.pscolor .syntaxgroup.vimType,
+.inlinevimtyping.pscolor .syntaxgroup.vimType,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimStorageClass],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimStorageClass],
+.vimtyping.pscolor .syntaxgroup.vimStorageClass,
+.inlinevimtyping.pscolor .syntaxgroup.vimStorageClass,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimStructure],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimStructure],
+.vimtyping.pscolor .syntaxgroup.vimStructure,
+.inlinevimtyping.pscolor .syntaxgroup.vimStructure,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimTypedef],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimTypedef],
+.vimtyping.pscolor .syntaxgroup.vimTypedef,
+.inlinevimtyping.pscolor .syntaxgroup.vimTypedef
+{
+ color:#0850a0;
+}
+
+vimtyping[detail=pscolor] syntaxgroup[defail=vimSpecial],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimSpecial],
+.vimtyping.pscolor .syntaxgroup.vimSpecial,
+.inlinevimtyping.pscolor .syntaxgroup.vimSpecial,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimSpecialChar],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimSpecialChar],
+.vimtyping.pscolor .syntaxgroup.vimSpecialChar,
+.inlinevimtyping.pscolor .syntaxgroup.vimSpecialChar,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimDelimiter],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimDelimiter],
+.vimtyping.pscolor .syntaxgroup.vimDelimiter,
+.inlinevimtyping.pscolor .syntaxgroup.vimDelimiter,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimDebug],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimDebug],
+.vimtyping.pscolor .syntaxgroup.vimDebug,
+.inlinevimtyping.pscolor .syntaxgroup.vimDebug
+{
+ color:#907000;
+}
+
+vimtyping[detail=pscolor] syntaxgroup[defail=vimComment],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimComment],
+.vimtyping.pscolor .syntaxgroup.vimComment,
+.inlinevimtyping.pscolor .syntaxgroup.vimComment,
+vimtyping[detail=pscolor] syntaxgroup[defail=vimSpecialComment],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimSpecialComment],
+.vimtyping.pscolor .syntaxgroup.vimSpecialComment,
+.inlinevimtyping.pscolor .syntaxgroup.vimSpecialComment
+{
+ color:#606000;
+}
+
+vimtyping[detail=pscolor] syntaxgroup[defail=vimIgnore],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimIgnore],
+.vimtyping.pscolor .syntaxgroup.vimIgnore,
+.inlinevimtyping.pscolor .syntaxgroup.vimIgnore
+{
+ color:unset;
+}
+
+vimtyping[detail=pscolor] syntaxgroup[defail=vimTodo],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimTodo],
+.vimtyping.pscolor .syntaxgroup.vimTodo,
+.inlinevimtyping.pscolor .syntaxgroup.vimTodo
+{
+ color:#800000;
+ background-color:#e0e090;
+}
+
+vimtyping[detail=pscolor] syntaxgroup[defail=vimError],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimError],
+.vimtyping.pscolor .syntaxgroup.vimError,
+.inlinevimtyping.pscolor .syntaxgroup.vimError
+{
+ color:#c03000;
+}
+
+vimtyping[detail=pscolor] syntaxgroup[defail=vimUnderlined],
+inlinevimtyping[detail=pscolor] syntaxgroup[defail=vimUnderlined],
+.vimtyping.pscolor .syntaxgroup.vimUnderlined,
+.inlinevimtyping.pscolor .syntaxgroup.vimUnderlined
+{
+ color:#6a5acd;
+ text-decoration:underline;
+}
+
+/* `blackandwhite` color scheme */
+
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimConstant],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimConstant],
+.vimtyping.blackandwhite .syntaxgroup.vimConstant,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimConstant,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimString],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimString],
+.vimtyping.blackandwhite .syntaxgroup.vimString,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimString,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimCharacter],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimCharacter],
+.vimtyping.blackandwhite .syntaxgroup.vimCharacter,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimCharacter,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimBoolean],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimBoolean],
+.vimtyping.blackandwhite .syntaxgroup.vimBoolean,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimBoolean,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimFloat],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimFloat],
+.vimtyping.blackandwhite .syntaxgroup.vimFloat,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimFloat
+{
+}
+
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimNumber],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimNumber],
+.vimtyping.blackandwhite .syntaxgroup.vimNumber,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimNumber
+{
+}
+
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimIdentifier],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimIdentifier],
+.vimtyping.blackandwhite .syntaxgroup.vimIdentifier,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimIdentifier,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimFunction],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimFunction],
+.vimtyping.blackandwhite .syntaxgroup.vimFunction,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimFunction
+{
+}
+
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimStatement],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimStatement],
+.vimtyping.blackandwhite .syntaxgroup.vimStatement,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimStatement,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimCondition],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimCondition],
+.vimtyping.blackandwhite .syntaxgroup.vimCondition,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimCondition,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimRepeat],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimRepeat],
+.vimtyping.blackandwhite .syntaxgroup.vimRepeat,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimRepeat,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimLabel],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimLabel],
+.vimtyping.blackandwhite .syntaxgroup.vimLabel,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimLabel,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimOperator],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimOperator],
+.vimtyping.blackandwhite .syntaxgroup.vimOperator,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimOperator,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimKeyword],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimKeyword],
+.vimtyping.blackandwhite .syntaxgroup.vimKeyword,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimKeyword,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimException],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimException],
+.vimtyping.blackandwhite .syntaxgroup.vimException,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimException
+{
+ font-weight:bold;
+}
+
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimPreProc],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimPreProc],
+.vimtyping.blackandwhite .syntaxgroup.vimPreProc,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimPreProc,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimInclude],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimInclude],
+.vimtyping.blackandwhite .syntaxgroup.vimInclude,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimInclude,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimDefine],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimDefine],
+.vimtyping.blackandwhite .syntaxgroup.vimDefine,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimDefine,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimMacro],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimMacro],
+.vimtyping.blackandwhite .syntaxgroup.vimMacro,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimMacro,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimPreCondit],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimPreCondit],
+.vimtyping.blackandwhite .syntaxgroup.vimPreCondit,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimPreCondit
+{
+ font-weight:bold;
+}
+
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimType],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimType],
+.vimtyping.blackandwhite .syntaxgroup.vimType,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimType,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimStorageClass],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimStorageClass],
+.vimtyping.blackandwhite .syntaxgroup.vimStorageClass,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimStorageClass,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimStructure],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimStructure],
+.vimtyping.blackandwhite .syntaxgroup.vimStructure,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimStructure,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimTypedef],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimTypedef],
+.vimtyping.blackandwhite .syntaxgroup.vimTypedef,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimTypedef
+{
+ font-weight:bold;
+}
+
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimSpecial],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimSpecial],
+.vimtyping.blackandwhite .syntaxgroup.vimSpecial,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimSpecial,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimSpecialChar],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimSpecialChar],
+.vimtyping.blackandwhite .syntaxgroup.vimSpecialChar,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimSpecialChar,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimDelimiter],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimDelimiter],
+.vimtyping.blackandwhite .syntaxgroup.vimDelimiter,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimDelimiter,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimDebug],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimDebug],
+.vimtyping.blackandwhite .syntaxgroup.vimDebug,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimDebug
+{
+}
+
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimComment],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimComment],
+.vimtyping.blackandwhite .syntaxgroup.vimComment,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimComment,
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimSpecialComment],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimSpecialComment],
+.vimtyping.blackandwhite .syntaxgroup.vimSpecialComment,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimSpecialComment
+{
+ font-style:italic;
+}
+
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimIgnore],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimIgnore],
+.vimtyping.blackandwhite .syntaxgroup.vimIgnore,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimIgnore
+{
+
+}
+
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimTodo],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimTodo],
+.vimtyping.blackandwhite .syntaxgroup.vimTodo,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimTodo
+{
+ border:0.6px solid;
+}
+
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimError],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimError],
+.vimtyping.blackandwhite .syntaxgroup.vimError,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimError
+{
+ text-decoration:line-through;
+}
+
+vimtyping[detail=blackandwhite] syntaxgroup[defail=vimUnderlined],
+inlinevimtyping[detail=blackandwhite] syntaxgroup[defail=vimUnderlined],
+.vimtyping.blackandwhite .syntaxgroup.vimUnderlined,
+.inlinevimtyping.blackandwhite .syntaxgroup.vimUnderlined
+{
+ text-decoration:underline;
+}
+