texlive[47695] trunk: lwarp (12may18)

commits+karl at tug.org commits+karl at tug.org
Sat May 12 23:24:56 CEST 2018


Revision: 47695
          http://tug.org/svn/texlive?view=revision&revision=47695
Author:   karl
Date:     2018-05-12 23:24:56 +0200 (Sat, 12 May 2018)
Log Message:
-----------
lwarp (12may18)

Modified Paths:
--------------
    trunk/Build/source/texk/texlive/linked_scripts/lwarp/lwarpmk.lua
    trunk/Master/texmf-dist/doc/latex/lwarp/README.txt
    trunk/Master/texmf-dist/doc/latex/lwarp/lwarp.pdf
    trunk/Master/texmf-dist/scripts/lwarp/lwarpmk.lua
    trunk/Master/texmf-dist/source/latex/lwarp/lwarp.dtx
    trunk/Master/texmf-dist/source/latex/lwarp/lwarp.ins
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-float.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-mdframed.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-multirow.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-paralist.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-ulem.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-arydshln.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-lua-check-hyphen.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-parnotes.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-quoting.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-tocenter.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-underscore.sty

Modified: trunk/Build/source/texk/texlive/linked_scripts/lwarp/lwarpmk.lua
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/lwarp/lwarpmk.lua	2018-05-12 21:24:16 UTC (rev 47694)
+++ trunk/Build/source/texk/texlive/linked_scripts/lwarp/lwarpmk.lua	2018-05-12 21:24:56 UTC (rev 47695)
@@ -4,7 +4,7 @@
 
 -- Print the usage of the lwarpmk command:
 
-printversion = "v0.55"
+printversion = "v0.56"
 
 function printhelp ()
 print ("lwarpmk: Use lwarpmk -h or lwarpmk --help for help.") ;
@@ -27,6 +27,7 @@
     For use with latexmk or a Makefile:
     Converts project_html.pdf to project_html.html and individual HTML files.
     Finishes the HTML conversion even if there was a compile error.
+lwarpmk pdftosvg <list of file names>: Converts each PDF file to SVG.
 lwarpmk clean [project]: Remove .aux, .toc, .lof/t, .idx, .ind, .log, *_html_inc.*, .gl*
 lwarpmk cleanall [project]: Remove auxiliary files and also project.pdf, *.html
 lwarpmk cleanlimages: Removes all images from the "lateximages" directory.
@@ -49,6 +50,7 @@
 homehtmlfilename = "index"  (or perhaps the project name)
 htmlfilename = ""  (or "projectname" - filename prefix)
 latexmk = "false"  (or "true" to use latexmk to build PDFs)
+shellescape = "false"
 xindylanguge = "english"  (use a language supported by xindy)
 xindycodepage = "utf8"  (use a codepage supported by xindy)
 xindystyle = "lwarp.xdy" (or a custom file based on lwarp.xdy)
@@ -55,7 +57,7 @@
 pdftotextenc = "UTF-8"  (use an encoding supported by pdftotext)
 --
 Filenames must contain only letters, numbers, underscore, or dash.
-Values must be in "quotes".
+Values must be in upright "quotes".
 
 ]] ) ;
 end
@@ -99,13 +101,13 @@
 local conffile = "lwarpmk.conf"
 -- Optional configuration filename:
 if ( arg[2] ~= nil ) then conffile = arg[2]..".lwarpmkconf" end
--- Default xindy language:
+-- Additional defaults:
+opsystem = "Unix"
+latexmk = "false"
+shellescape = "false"
 xindylanguage = "english"
--- Default xindy codepage:
 xindycodepage = "utf8"
--- Default xindystyle:
 xindystyle = "lwarp.xdy"
--- Default pdftotext encoding:
 pdftotextenc = "UTF-8"
 -- Verify the file exists:
 if (lfs.attributes(conffile,"mode")==nil) then
@@ -161,6 +163,7 @@
 elseif ( cvarname == "homehtmlfilename" ) then homehtmlfilename = cvalue
 elseif ( cvarname == "htmlfilename" ) then htmlfilename = cvalue
 elseif ( cvarname == "latexmk" ) then latexmk = cvalue
+elseif ( cvarname == "shellescape" ) then shellescape = cvalue
 elseif ( cvarname == "xindylanguage" ) then xindylanguage = cvalue
 elseif ( cvarname == "xindycodepage" ) then xindycodepage = cvalue
 elseif ( cvarname == "xindystyle" ) then xindystyle = cvalue
@@ -254,7 +257,13 @@
 
 function onetime (fsuffix)
 print("lwarpmk: Compiling with " .. latexname .. " " .. sourcename..fsuffix)
-err = os.execute(latexname .. " " .. sourcename..fsuffix)
+local thisshellescape = " "
+if ( shellescape == "true" ) then
+    thisshellescape = " -shell-escape "
+else
+    thisshellescape = " "
+end
+err = os.execute(latexname .. thisshellescape .. sourcename..fsuffix)
 if ( err ~= 0 ) then
     print ("lwarpmk: ===")
     print ("lwarpmk: Compile error.")
@@ -519,6 +528,13 @@
 -- Use latexmk to compile source and index:
 -- fsuffix is "" for print, or "_html" for HTML
 function compilelatexmk ( fsuffix )
+-- Maybe select the shell-escape option:
+local thisshellescape = " "
+if ( shellescape == "true" ) then
+    thisshellescape = " -shell-escape "
+else
+    thisshellescape = " "
+end
 -- The recorder option is required to detect changes in <project>.tex
 -- while we are loading <project>_html.tex.
 err=os.execute ( "latexmk -pdf -dvi- -ps- -recorder "
@@ -530,7 +546,7 @@
     .. "  -C " .. xindycodepage
     .. "  -L " .. xindylanguage .. " /"
     .. opquote
-    .. " -pdflatex=\"" .. latexname .." %O %S\" "
+    .. " -pdflatex=\"" .. latexname .. thisshellescape .." %O %S\" "
     .. sourcename..fsuffix ..".tex" ) ;
 if ( err ~= 0 ) then
     print ("lwarpmk: ===")
@@ -538,8 +554,22 @@
     print ("lwarpmk: ===")
     os.exit(1)
 end
-end
+end -- function
 
+-- Converts PDF files to SVG files.
+-- The filenames are arg[2] and up.
+-- arg[1] is the command "pdftosvg".
+function convertpdftosvg ()
+for i = 2 , #arg do
+    if (lfs.attributes(arg[i],"mode")==nil) then
+        print ("lwarpmk: File \"" .. arg[i] .. "\" does not exist.")
+    else
+        print ("lwarpmk: Converting \"" .. arg[i] .. "\"")
+        os.execute ( "pdftocairo -svg " .. arg[i] )
+    end -- if
+end -- do
+end --function
+
 -- lwarpmk --version :
 
 if (arg[1] == "--version") then
@@ -744,6 +774,12 @@
 os.execute ( rmname .. " lateximages/*" )
 print ("lwarpmk: Done.")
 
+-- lwarpmk pdftosvg <list of file names>
+-- Convert PDf files to SVG using pdftocairo
+elseif arg[1] == "pdftosvg" then
+convertpdftosvg ()
+print ("lwarpmk: Done.")
+
 -- lwarpmk with no argument :
 
 elseif (arg[1] == nil) then

Modified: trunk/Master/texmf-dist/doc/latex/lwarp/README.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/lwarp/README.txt	2018-05-12 21:24:16 UTC (rev 47694)
+++ trunk/Master/texmf-dist/doc/latex/lwarp/README.txt	2018-05-12 21:24:56 UTC (rev 47695)
@@ -1,5 +1,5 @@
 
-LaTeX lwarp package v0.55   README.txt
+LaTeX lwarp package v0.56   README.txt
 
 Files included are:
 

Modified: trunk/Master/texmf-dist/doc/latex/lwarp/lwarp.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/scripts/lwarp/lwarpmk.lua
===================================================================
--- trunk/Master/texmf-dist/scripts/lwarp/lwarpmk.lua	2018-05-12 21:24:16 UTC (rev 47694)
+++ trunk/Master/texmf-dist/scripts/lwarp/lwarpmk.lua	2018-05-12 21:24:56 UTC (rev 47695)
@@ -4,7 +4,7 @@
 
 -- Print the usage of the lwarpmk command:
 
-printversion = "v0.55"
+printversion = "v0.56"
 
 function printhelp ()
 print ("lwarpmk: Use lwarpmk -h or lwarpmk --help for help.") ;
@@ -27,6 +27,7 @@
     For use with latexmk or a Makefile:
     Converts project_html.pdf to project_html.html and individual HTML files.
     Finishes the HTML conversion even if there was a compile error.
+lwarpmk pdftosvg <list of file names>: Converts each PDF file to SVG.
 lwarpmk clean [project]: Remove .aux, .toc, .lof/t, .idx, .ind, .log, *_html_inc.*, .gl*
 lwarpmk cleanall [project]: Remove auxiliary files and also project.pdf, *.html
 lwarpmk cleanlimages: Removes all images from the "lateximages" directory.
@@ -49,6 +50,7 @@
 homehtmlfilename = "index"  (or perhaps the project name)
 htmlfilename = ""  (or "projectname" - filename prefix)
 latexmk = "false"  (or "true" to use latexmk to build PDFs)
+shellescape = "false"
 xindylanguge = "english"  (use a language supported by xindy)
 xindycodepage = "utf8"  (use a codepage supported by xindy)
 xindystyle = "lwarp.xdy" (or a custom file based on lwarp.xdy)
@@ -55,7 +57,7 @@
 pdftotextenc = "UTF-8"  (use an encoding supported by pdftotext)
 --
 Filenames must contain only letters, numbers, underscore, or dash.
-Values must be in "quotes".
+Values must be in upright "quotes".
 
 ]] ) ;
 end
@@ -99,13 +101,13 @@
 local conffile = "lwarpmk.conf"
 -- Optional configuration filename:
 if ( arg[2] ~= nil ) then conffile = arg[2]..".lwarpmkconf" end
--- Default xindy language:
+-- Additional defaults:
+opsystem = "Unix"
+latexmk = "false"
+shellescape = "false"
 xindylanguage = "english"
--- Default xindy codepage:
 xindycodepage = "utf8"
--- Default xindystyle:
 xindystyle = "lwarp.xdy"
--- Default pdftotext encoding:
 pdftotextenc = "UTF-8"
 -- Verify the file exists:
 if (lfs.attributes(conffile,"mode")==nil) then
@@ -161,6 +163,7 @@
 elseif ( cvarname == "homehtmlfilename" ) then homehtmlfilename = cvalue
 elseif ( cvarname == "htmlfilename" ) then htmlfilename = cvalue
 elseif ( cvarname == "latexmk" ) then latexmk = cvalue
+elseif ( cvarname == "shellescape" ) then shellescape = cvalue
 elseif ( cvarname == "xindylanguage" ) then xindylanguage = cvalue
 elseif ( cvarname == "xindycodepage" ) then xindycodepage = cvalue
 elseif ( cvarname == "xindystyle" ) then xindystyle = cvalue
@@ -254,7 +257,13 @@
 
 function onetime (fsuffix)
 print("lwarpmk: Compiling with " .. latexname .. " " .. sourcename..fsuffix)
-err = os.execute(latexname .. " " .. sourcename..fsuffix)
+local thisshellescape = " "
+if ( shellescape == "true" ) then
+    thisshellescape = " -shell-escape "
+else
+    thisshellescape = " "
+end
+err = os.execute(latexname .. thisshellescape .. sourcename..fsuffix)
 if ( err ~= 0 ) then
     print ("lwarpmk: ===")
     print ("lwarpmk: Compile error.")
@@ -519,6 +528,13 @@
 -- Use latexmk to compile source and index:
 -- fsuffix is "" for print, or "_html" for HTML
 function compilelatexmk ( fsuffix )
+-- Maybe select the shell-escape option:
+local thisshellescape = " "
+if ( shellescape == "true" ) then
+    thisshellescape = " -shell-escape "
+else
+    thisshellescape = " "
+end
 -- The recorder option is required to detect changes in <project>.tex
 -- while we are loading <project>_html.tex.
 err=os.execute ( "latexmk -pdf -dvi- -ps- -recorder "
@@ -530,7 +546,7 @@
     .. "  -C " .. xindycodepage
     .. "  -L " .. xindylanguage .. " /"
     .. opquote
-    .. " -pdflatex=\"" .. latexname .." %O %S\" "
+    .. " -pdflatex=\"" .. latexname .. thisshellescape .." %O %S\" "
     .. sourcename..fsuffix ..".tex" ) ;
 if ( err ~= 0 ) then
     print ("lwarpmk: ===")
@@ -538,8 +554,22 @@
     print ("lwarpmk: ===")
     os.exit(1)
 end
-end
+end -- function
 
+-- Converts PDF files to SVG files.
+-- The filenames are arg[2] and up.
+-- arg[1] is the command "pdftosvg".
+function convertpdftosvg ()
+for i = 2 , #arg do
+    if (lfs.attributes(arg[i],"mode")==nil) then
+        print ("lwarpmk: File \"" .. arg[i] .. "\" does not exist.")
+    else
+        print ("lwarpmk: Converting \"" .. arg[i] .. "\"")
+        os.execute ( "pdftocairo -svg " .. arg[i] )
+    end -- if
+end -- do
+end --function
+
 -- lwarpmk --version :
 
 if (arg[1] == "--version") then
@@ -744,6 +774,12 @@
 os.execute ( rmname .. " lateximages/*" )
 print ("lwarpmk: Done.")
 
+-- lwarpmk pdftosvg <list of file names>
+-- Convert PDf files to SVG using pdftocairo
+elseif arg[1] == "pdftosvg" then
+convertpdftosvg ()
+print ("lwarpmk: Done.")
+
 -- lwarpmk with no argument :
 
 elseif (arg[1] == nil) then

Modified: trunk/Master/texmf-dist/source/latex/lwarp/lwarp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/lwarp/lwarp.dtx	2018-05-12 21:24:16 UTC (rev 47694)
+++ trunk/Master/texmf-dist/source/latex/lwarp/lwarp.dtx	2018-05-12 21:24:56 UTC (rev 47695)
@@ -16,7 +16,7 @@
 % \iffalse
 %<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
 %<package>\ProvidesPackage{lwarp}
-%<package>    [2018/04/26 v0.55  Allows LaTeX to directly produce HTML5 output.]
+%<package>    [2018/05/12 v0.56  Allows LaTeX to directly produce HTML5 output.]
 %
 %<*driver>
 \documentclass{ltxdoc}
@@ -1165,8 +1165,8 @@
 \newcommand{\limitsgraphics}{%
 For \cs{includegraphics} with \texttt{.pdf} files,
 \index{graphics>PDF files}
-\index{PDF images}
-\index{images>PDF}
+\index{PDF images>using}
+\index{images>PDF>using}
 \watchout[\texttt{.pdf} image files]
 the user should provide a \texttt{.pdf} image file, and also
 a \texttt{.svg}, \texttt{.png}, or \texttt{.jpg} version of the same image.
@@ -1180,10 +1180,12 @@
 For \HTML, one of the other formats is used instead.
 
 \DescribeProgram{pdftocairo}
-To convert a \PDF\ image to \SVG, use the utility \texttt{pdftocairo}:\userentry{
-pdftocairo -svg filename.pdf
-}
+To convert a \PDF\ image to \SVG, use the utility \texttt{pdftocairo}:
+\userentry{pdftocairo -svg filename.pdf}
 
+For a large number of images, use \prog{lwarpmk}:
+\userentry{lwarpmk pdftosvg *.pdf \qquad \textrm{(or a list of filenames)}}
+
 If a \texttt{.pdf} file is referred to with its file extension,
 a link to the \texttt{.pdf} file will appear in the \HTML\ output.
 \begin{sourcedisplay}
@@ -1251,14 +1253,16 @@
 \watchout[adding/removing]
 removed, the \SVG\ images must be re-created by entering \cmds{lwarpmk limages}
 to maintain the proper image-file associations.
+Inline \SVG\ math may be hashed and thus not need to be recreated, but
+display math and objects such as \tikz\ may move to new image numbers when
+the document is changed.
 
 Before attempting to create the \SVG\ image files,
 \prog{lwarpmk} verifies that the \HTML\ version of the document exists and
-has correct internal image references.
+has correct internal image references.\footnote{This becomes important
+when dealing with a document containing thousands of images.}
 If it is necessary to recompile the document's \HTML\ version, \prog{lwarpmk}
 will inform so with an error message.%
-\footnote{This becomes important when dealing with a document containing
-thousands of images.}
 
 If \HTML\ appears where an \SVG\ image should be,\watchout[\HTML\ instead of images]%
 \index{math>appearing as \HTML}%
@@ -1280,8 +1284,9 @@
 the math exactly as \LaTeX\ would, but has the disadvantage of requiring
 an individual file for each math expression.
 \watchout[Lots of files!]
-For inline math, \pkg{lwarp} uses an MD5 hash on its \LaTeX\ source
-to combine multiple instances of identical inline expressions into a single image file,
+For inline math, and some other objects, \pkg{lwarp} uses an MD5 hash
+on its \LaTeX\ source to combine multiple instances of identical inline expressions
+into a single image file,
 but display math and other environments such as \env{picture} and \tikz\ require
 one image file each.
 For a document with a large amount of math,
@@ -1467,6 +1472,8 @@
 
 \item [Rules:] \
     \begin{itemize}
+    \item Doubled \cs{hline}s, \cs{midrule}s, and vertical rules are supported.
+
     \item Vertical rules next to either side of an \texttt{@} or \texttt{!} column
         \margintag{vertical rules}
         are displayed on both sides of the column.
@@ -1971,6 +1978,12 @@
 for \brand{MathJax} is not currently hosted at any public CDN,
 thus \pkg{siunitx} is not usable with \brand{MathJax} unless a local copy
 of this extension is created first.}
+
+Tabular \texttt{S} columns are rendered as simple \texttt{c} columns,
+\watchout[\env{tabular}]
+and tabular \texttt{s} columns are not supported.
+These may be replaced by \texttt{c} columns with each cell contained in
+\cs{num} or \cs{si}.
 }
 
 \newcommand{\limitsnicefrac}{%
@@ -2154,7 +2167,7 @@
 %<*package>
 % \fi
 %
-% \CheckSum{23632}
+% \CheckSum{24234}
 %
 % \CharacterTable
 % {Upper-case     \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -2251,6 +2264,7 @@
 % \changes{v0.53}{2018/04/01}{\ 2018/04/01}
 % \changes{v0.54}{2018/04/22}{\ 2018/04/22}
 % \changes{v0.55}{2018/04/26}{\ 2018/04/26}
+% \changes{v0.56}{2018/05/12}{\ 2018/05/12}
 
 
 
@@ -2310,7 +2324,7 @@
 %
 % A modular package-loading system uses the \pkg{lwarp} version of a package for
 % \HTML\ when available.
-% More than two hundred \LaTeX\ packages are supported with these high-level source
+% More than 270 \LaTeX\ packages are supported with these high-level source
 % compatibility replacements, and many others work as-is.
 %
 % A tutorial is provided to quickly introduce the user to the major components
@@ -2448,6 +2462,34 @@
 %
 % \begin{description}
 % \needspace{2\baselineskip}
+% \item[v0.56:] \
+%   \begin{itemize}
+%       \item Added
+%           \margintag{\prog{lwarpmk}}
+%           \begin{sourcedisplay}
+%           lwarpmk pdftosvg <list-of-PDF-files>
+%           \end{sourcedisplay}
+%           to quickly convert a document's \PDF\ images to \SVG, for use with \HTML.
+%           See \cref{sec:limitsgraphics}.
+%       \item Added support for |-shell-escape|.  See \cref{sec:shellescape}.
+%       \item Added support for \pkg{array} |w| and |W| columns.
+%           \margintag{\env{tabular}}
+%       \item Fix: \cs{multicolumn} parameter handling.
+%       \item Added support for double \cs{hline}s, \cs{midrule}s, and vertical rules.
+%       \item Added support for \pkg{arydshln} dashed lines
+%           with \HTML\ \env{tabular}, but
+%           reverts to plain rules for \env{lateximage}
+%           and \SVG\ math \env{array}.
+%       \item Fix: \cs{thinspace}.
+%           \margintag{misc. fixes}
+%       \item Fix: \pkg{paralist} compact environments.
+%       \item Added \pkg{parnotes}, \pkg{quoting}, \pkg{lua-check-hyphen},
+%           \pkg{tocenter}, \pkg{underscore}.
+%           \margintag{packages}
+%       \item Verified works with \pkg{babelbib}, \pkg{bibunits}, \pkg{bodegraph},
+%           \pkg{fast-diagram}, \pkg{nicematrix}, \pkg{structmech}.
+%   \end{itemize}
+% \needspace{2\baselineskip}
 % \item[v0.55:] \
 %   \begin{itemize}
 %       \item Fix: Extraneous space in file links, which also
@@ -3505,7 +3547,7 @@
 %       \pkg{ebook}, \pkg{everyshi},
 %       \pkg{fancyhdr}, \pkg{fwlw}, \pkg{geometry}, \pkg{grid}, \pkg{gridset},
 %       \pkg{ltxgrid}, \pkg{pagegrid}, \pkg{pagesel}, \pkg{preview},
-%       \pkg{scrlayer-scrpage}, \pkg{textarea}, \pkg{titleps},
+%       \pkg{scrlayer-scrpage}, \pkg{textarea}, \pkg{titleps}, \pkg{tocenter},
 %       \pkg{turnthepage}, \pkg{typearea}, \pkg{vmargin},
 %       \pkg{watermark}, \pkg{zwpagelayout}. \\
 %
@@ -3527,7 +3569,7 @@
 %
 % Glossary: & \pkg{glossaries} and \prog{xindy} are used. \\
 %
-% Bibliography: & \pkg{backref}, \pkg{biblatex}, \pkg{bibunits},
+% Bibliography: & \pkg{babelbib}, \pkg{backref}, \pkg{biblatex}, \pkg{bibunits},
 %   \pkg{chapterbib}, \pkg{cite}, \pkg{hypernat}, \pkg{natbib}. \\
 %
 % \midrule
@@ -3546,7 +3588,7 @@
 % Footnotes: & Adds \progcode{FootnoteDepth} to print footnotes at section breaks.
 %   \pkg{endheads}, \pkg{endnotes}, 
 %   \pkg{footmisc}, \pkg{footnote}, \pkg{footnpag}, 
-%	\pkg{marginnote}, \pkg{nccfoots}, \pkg{pagenote}, \pkg{sidenote}. \\
+%	\pkg{marginnote}, \pkg{nccfoots}, \pkg{pagenote}, \pkg{parnotes}, \pkg{sidenote}. \\
 %
 % \midrule
 %
@@ -3563,7 +3605,7 @@
 % Additional math: & Math fonts via \SVG\ images, \pkg{resizegather}, \pkg{xy}.
 %
 %   Tested to work as-is:
-%   \pkg{amscd}, \pkg{bm}, \pkg{braket}, \pkg{delarray}, 
+%   \pkg{amscd}, \pkg{bm}, \pkg{braket}, \pkg{delarray}, \pkg{nicematrix},
 %   \pkg{pb-diagram}, \pkg{tikz-cd}, etc. \\
 %
 % Display math with \cs{displaymathother}: & %
@@ -3587,7 +3629,7 @@
 % \midrule
 %
 % Tabular: &
-%   \env{tabular} environment, \pkg{array}, \pkg{bigdelim}, \pkg{booktabs},
+%   \env{tabular} environment, \pkg{array}, \pkg{arydshln}, \pkg{bigdelim}, \pkg{booktabs},
 %   \pkg{colortbl}, \pkg{diagbox}, \pkg{longtable}, \pkg{ltxtable},
 %   \pkg{multirow}, \pkg{supertabular}, \pkg{tabularx}, \pkg{tabulary},
 %   \pkg{threeparttable}, \pkg{xtab}. \\
@@ -3632,7 +3674,7 @@
 % \env{minipage}, \cs{parbox}: & Some \HTMLfive-imposed limitations.
 %	Nested minipages are supported. \pkg{pbox}.\\
 %
-% Quotations: & \pkg{csquotes}, \pkg{epigraph}, \pkg{verse}. \\
+% Quotations: & \pkg{csquotes}, \pkg{epigraph}, \pkg{quoting}, \pkg{verse}. \\
 %
 % Verbatim: &
 %   \pkg{fancyvrb}, \pkg{moreverb}, \pkg{shortvrb}, \pkg{verbatim}. \\
@@ -3658,10 +3700,10 @@
 % Direct formatting: & \cs{emph}, \cs{textsuperscript},
 % 	\cs{textbf}, etc are supported.
 % 	\cs{bfseries}, etc.\ are only supported in some cases.
-%   \pkg{cancel}, \pkg{hyphenat}, \pkg{lettrine}, \pkg{luacolor},
+%   \pkg{cancel}, \pkg{hyphenat}, \pkg{lettrine}, \pkg{lua-check-hyphen}, \pkg{luacolor},
 %   \pkg{magaz}, \pkg{pdfrender}, \pkg{realscripts}, \pkg{relsize},
 %   \pkg{scalefnt}, \pkg{soul}, \pkg{soulpos}, \pkg{soulutf8},
-%   \pkg{textfit}, \pkg{ulem}. \\
+%   \pkg{textfit}, \pkg{ulem}, \pkg{underscore}. \\
 %
 % Ordinals: & \pkg{engord}, \pkg{fmtcount}, \pkg{nth}. \\
 %
@@ -3694,9 +3736,11 @@
 %   \pkg{listings}, \pkg{mhchem}, \pkg{phfqit}.
 %
 %   Tested to work as-is:
-%       \pkg{blochsphere}, \pkg{bohr}, \pkg{circuitikz}, \pkg{elements}, 
+%       \pkg{blochsphere}, \pkg{bodegraph}, \pkg{bohr}, \pkg{circuitikz},
+%       \pkg{elements}, \pkg{fast-diagram},
 %       \pkg{hepnicenames}, \pkg{heppennames},
-%       \pkg{linop}, \pkg{pgfgantt}, \pkg{physics}, \pkg{simpler-wick}, \pkg{slashed}.
+%       \pkg{linop}, \pkg{pgfgantt}, \pkg{physics}, \pkg{simpler-wick}, \pkg{slashed},
+%       \pkg{structmech}.
 %   \\
 %
 % \midrule
@@ -4544,12 +4588,13 @@
 %		used as a homepage, so the document index is in \texttt{\_Index.html}.}
 %	\end{enumerate}
 %
-% \item View the homepage in a web browser.
+% \item View the \HTML\ page in a web browser.
 %
 %	\qquad Open the file |tutorial.html| in a web browser.
 %
-%	Note that math is still displayed as its plain-text \LaTeX\ source
-%	\margintag{math}
+%	Note that math is still displayed as its \attribute{alt} tag, which is
+%   \margintag{math}
+%   the plain-text \LaTeX\ source,
 %	until the
 %	images of the math expressions have been generated.  Math may be
 %	displayed as \SVG\ images or by a \brand{MathJax} script, as seen in
@@ -4636,7 +4681,6 @@
 % may not support some math-related packages.
 %
 %
-%
 % \clearpage
 % \subsection{Changing the CSS style}
 %
@@ -4701,9 +4745,8 @@
 % rather than modification times, so |lwarpmk again| will not trigger a
 % recompile, but \prog{latexmk} has a much better awareness of changes than
 % the \prog{lwarpmk} utility does and it is likely to correctly know when to
-% recompile.  A recompile may be forced by making a small change to the source.
-%
-% A single recompile may be forced with:
+% recompile.  A recompile may be forced by making a small change to the source,
+% and a single recompile may be forced with:
 %   \margintag{forced single-pass recompile}
 %   \userentry{lwarpmk print1} \quad and/or
 %   \userentry{lwarpmk html1}
@@ -4720,11 +4763,12 @@
 % \item Remove the auxiliary files for the project:
 %	\userentry{lwarpmk cleanall}
 %
-% \item Use \prog{xelatex} or \prog{lualatex} to recompile the printed version.
+% \item Use \prog{xelatex} or \prog{lualatex} to compile the printed version
+%   a single time.
 %	\userentry{xelatex tutorial.tex} \quad -or-
 %	\userentry{lualatex tutorial.tex}
 %
-%	When the recompile occurs,
+%	When the compile occurs,
 %	the configuration files for \prog{lwarpmk} are modified to remember
 %	which \TeX\ engine was used.  \XeLaTeX\ or \LuaLaTeX\ will be used for
 %	future runs of \prog{lwarpmk}.
@@ -4733,7 +4777,11 @@
 %	\userentry{lwarpmk print} \quad -and-
 %	\userentry{lwarpmk html}
 %
-% \item Also remember to update the indexes and recompile again.
+% \item Also remember to update the indexes and recompile again:
+%   \userentry{lwarpmk htmlindex}
+%   \userentry{lwarpmk html}
+%   \userentry{lwarpmk printindex}
+%   \userentry{lwarpmk print}
 % \end{enumerate}
 %
 %
@@ -4771,6 +4819,8 @@
 % In each case, the document will have to be recompiled afterwards:
 % \userentry{lwarpmk html1}
 % \userentry{lwarpmk html}
+% \userentry{lwarpmk print1}
+% \userentry{lwarpmk print}
 %
 %
 %
@@ -4793,11 +4843,25 @@
 % \subsection{Cleaning the images from the \filenm{lateximages} directory}
 % \changes{v0.53}{2018/04/01}{Docs: \cmds{lwarpmk cleanlimages}.}
 %
-% To remove the images from the \filenm{lateximages} directory, including
-% all \SVG\ math images:
+% The \filenm{lateximage} directory contains \SVG\ images automatically generated
+% for inline and display math, \pkg{tikz}, etc.
+% To remove all the images from the \filenm{lateximages} directory:
 %   \userentry{lwarpmk cleanlimages}
 %
 %
+% \subsection{Converting PDF images to SVG}
+% \changes{v0.56}{2018/04/29}{Docs: \cmds{lwarpmk pdftosvg}.}
+%
+% \HTML\ cannot display \PDF\ images, so any external \PDF\ graphics images must
+% be converted to \SVG\ format.
+% \prog{pdftocairo} may be used one image at a time,
+% but \prog{lwarpmk} provides a way to convert images in bulk:
+% \userentry{lwarpmk pdftosvg *.pdf \qquad \textrm{(or a list of files)}}
+% \index{SVG>converting from PDF}
+% \index{PDF images>converting to SVG}
+% \index{images>PDF>converting to SVG}
+%
+%
 % \subsection{Creating HTML from an incomplete compile}
 % \changes{v0.53}{2018/04/01}{Docs: \cmds{lwarpmk pdftohtml}.}
 %
@@ -4839,6 +4903,8 @@
 % convert each target to \HTML\ files.
 %
 %
+% \clearpage
+%
 % \section{Converting an existing document}
 % \label{sec:convertexisting}
 %
@@ -4883,7 +4949,7 @@
 %   \item Possible option clashes with \pkg{memoir}.  See \cref{sec:limitsmemoir}.
 %   \item Other changes as per \nameref{sec:limitations}, \cref{sec:limitations}.
 % \end{enumerate}
-% \item Create an SVG version of any PDF image.
+% \item Convert any \PDF\ images to \SVG.  See \cref{sec:limitsgraphics}.
 % \item Manually compile the print version with \prog{pdflatex},
 %           \prog{lualatex}, or \prog{xelatex}.
 % \item |lwarpmk print| to finish the print version.
@@ -4897,10 +4963,21 @@
 %
 % \section{Additional details}
 %
-% \label{sec:usage}
 %
+% \subsection{Shell escape}
+% \label{sec:shellescape}
+% \index{shell escape}
 %
+% \DescribeOption{-shell-escape}
+% Some documents require the use of an external program,
+% which is allowed when using the |-shell-escape| command-line option.
+% When the document is first compiled manually,
+% and also whenever the print version is recompiled,
+% \pkg{lwarp} detects and remembers
+% whether shell escape is enabled.  If so, it will also be enabled when
+% the document is recompiled with \prog{lwarpmk}.
 %
+%
 % \subsection{Font and UTF-8 support}
 % \label{sec:fonts}
 % \index{font>selection}
@@ -6164,18 +6241,19 @@
 % A starred sectional unit does not have a \acro{TOC} entry unless one is placed
 % manually.  The typical method using \cs{phantomsection} and \cs{addcontentsline}
 % works for inline text but fails when the new starred section is given its own
-% webpage after the \acro{TOC} entry is created.
+% webpage after the \acro{TOC} entry is created, or when creating an \EPUB\ where
+% the \acro{TOC} entry will point to the page before the starred section.
 % If the starred section has its own \HTML\ page but no correct \acro{TOC} entry
 % \watchout[inaccessible \HTML\ page]
 % pointing to that page, the page will be inaccessible unless some other link is created.
-% 
+%
 % \DescribeMacro{\ForceHTMLTOC}
 % To automatically force the \HTML\ version of the document to have a \acro{TOC} entry
-% for a starred section, use \cs{ForceHTMLTOC} just before the \cs{chapter*} or
-% \cs{section*}.  The \acro{TOC} will only be assigned for \HTML\ output, not
-% for print output, and it will appear in the main \acro{TOC} and also the side\acro{TOC}
-% per page.
-% 
+% for a starred section, use \cs{ForceHTMLTOC} just before
+% the \cs{chapter*} or \cs{section*},
+% and place \cs{phantomsection} and \cs{addcontentsline} inside a \env{warpprint}
+% environment.
+%
 % For print output, \cs{ForceHTMLTOC} and \cs{ForceHTMLPage} have no effect.
 %
 %
@@ -6308,6 +6386,9 @@
 %
 % \DescribePackage{graphics}
 % \DescribePackage{graphicx}
+% \index{SVG>converting from PDF}
+% \index{PDF images>converting to SVG}
+% \index{images>PDF>converting to SVG}
 % \limitsgraphics
 %
 %
@@ -8417,6 +8498,7 @@
 \LWR at loadafter{ltcaption}
 \LWR at loadafter{ltxgrid}
 \LWR at loadafter{ltxtable}
+\LWR at loadafter{lua-check-hyphen}
 \LWR at loadafter{luacolor}
 \LWR at loadafter{luatodonotes}
 \LWR at loadafter{magaz}
@@ -8456,6 +8538,7 @@
 \LWR at notmemoirloadafter{pagenote}
 \LWR at loadafter{pagesel}
 \LWR at loadafter{paralist}
+\LWR at loadafter{parnotes}
 \LWR at notmemoirloadafter{parskip}
 \LWR at loadafter{pbox}
 \LWR at loadafter{pdfrender}
@@ -8468,6 +8551,7 @@
 \LWR at loadafter{prettyref}
 \LWR at loadafter{preview}
 \LWR at loadafter{quotchap}
+\LWR at loadafter{quoting}
 \LWR at loadafter{ragged2e}
 \LWR at loadafter{realscripts}
 \LWR at loadafter{relsize}
@@ -8518,6 +8602,7 @@
 \LWR at notmemoirloadafter{titling}
 % \LWR at loadafter{tocbasic}% preloaded by koma-script classes
 \LWR at notmemoirloadafter{tocbibind}
+\LWR at loadafter{tocenter}
 \LWR at notmemoirloadafter{tocloft}
 \LWR at loadafter{tocstyle}
 \LWR at loadafter{todo}
@@ -8530,6 +8615,7 @@
 %    \begin{macrocode}
 % \LWR at loadafter{typearea}% preloaded by koma-script classes
 \LWR at loadafter{ulem}
+\LWR at loadafter{underscore}
 \LWR at loadafter{upref}
 \LWR at loadafter{url}
 \LWR at loadafter{varioref}% no lwarp package provided
@@ -9702,6 +9788,7 @@
 %    \end{macrocode}
 %    \begin{macrocode}
 \let\LWR at origcomma\,
+\let\LWR at origthinspace\thinspace
 \let\LWR at origtilde~
 \let\LWR at origenskip\enskip
 \let\LWR at origquad\quad
@@ -9983,6 +10070,7 @@
 % \changes{v0.54}{2018/04/06}{\filenm{lwarpmk.conf}: Option \optn{IndexLanguage} changed to \optn{xindyLanguage}.}
 % \changes{v0.54}{2018/04/06}{\filenm{lwarpmk.conf}: Option \optn{xindyCodepage} added.}
 % \changes{v0.54}{2018/04/06}{\filenm{lwarpmk.conf}: Option \optn{pdftotextEnc} added.}
+% \changes{v0.56}{2018/05/11}{\filenm{lwarpmk.conf}: Records \texttt{-shell-escape}.}
 %
 % \codeprint
 %    \begin{macrocode}
@@ -10009,6 +10097,7 @@
 }
 \immediate\write\LWR at quickfile{htmlfilename = "\HTMLFilename"}
 \immediate\write\LWR at quickfile{latexmk = "\ifbool{LWR at latexmk}{true}{false}"}
+\immediate\write\LWR at quickfile{shellescape = "\ifshellescape true\else false\fi"}
 \immediate\write\LWR at quickfile{xindylanguage = "\LWR at xindyLanguage"}
 \immediate\write\LWR at quickfile{xindycodepage = "\LWR at xindyCodepage"}
 \immediate\write\LWR at quickfile{xindystyle = "\LWR at xindyStyle"}
@@ -10029,6 +10118,7 @@
 % \changes{v0.54}{2018/04/06}{\filenm{*.lwarpmkconf}: Option \optn{IndexLanguage} changed to \optn{xindyLanguage}.}
 % \changes{v0.54}{2018/04/06}{\filenm{*.lwarpmkconf}: Option \optn{xindyCodepage} added.}
 % \changes{v0.54}{2018/04/06}{\filenm{*.lwarpmkconf}: Option \optn{pdftotextEnc} added.}
+% \changes{v0.56}{2018/05/11}{\filenm{*.lwarpmkconf}: Records \texttt{-shell-escape}.}
 %
 %    \begin{macrocode}
 \begin{warpprint}
@@ -10054,6 +10144,7 @@
 }
 \immediate\write\LWR at quickfile{htmlfilename = "\HTMLFilename"}
 \immediate\write\LWR at quickfile{latexmk = "\ifbool{LWR at latexmk}{true}{false}"}
+\immediate\write\LWR at quickfile{shellescape = "\ifshellescape true\else false\fi"}
 \immediate\write\LWR at quickfile{xindylanguage = "\LWR at xindyLanguage"}
 \immediate\write\LWR at quickfile{xindycodepage = "\LWR at xindyCodepage"}
 \immediate\write\LWR at quickfile{xindystyle = "\LWR at xindyStyle"}
@@ -10080,6 +10171,8 @@
 % \changes{v0.30}{2017/04/26}{Fix: \filenm{*.css} files only written in print mode.}
 % \changes{v0.50}{2018/03/02}{\filenm{lwarp.css}: Improved \SVG\ display math centering.}
 % \changes{v0.54}{2018/04/24}{\filenm{lwarp.css}: Fix: Text-decoration-skip: auto.}
+% \changes{v0.56}{2018/04/27}{\filenm{lwarp.css}: Added \attribute{span.textbf}, etc.}
+% \changes{v0.56}{2018/05/09}{\filenm{lwarp.css}: Added \attribute{div.textbf}, etc.}
 %
 % ^^A *lwarp.css
 %    \begin{macrocode}
@@ -10146,7 +10239,7 @@
 
 div.hidden, span.hidden { display: none ; }
 
-kbd {
+kbd, span.texttt {
     font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console",
         "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono",
         "Courier New", monospace;
@@ -10155,22 +10248,24 @@
 
 pre { padding: 3pt ; }
 
-span.strong { font-weight: bold; }
+span.strong, span.textbf, div.strong, div.textbf { font-weight: bold; }
 
-span.textmd { font-weight: normal; }
+span.textit, div.textit { font-style: italic; }
 
-span.textsc { font-variant: small-caps; }
+span.textmd, div.textmd { font-weight: normal; }
 
-span.textsl { font-style: oblique; }
+span.textsc, div.textsc { font-variant: small-caps; }
 
-span.textup { font-variant: normal; }
+span.textsl, div.textsl { font-style: oblique; }
 
-span.textrm {
+span.textup, div.textup { font-variant: normal; }
+
+span.textrm, div.textrm {
     font-family: "DejaVu Serif", "Bitstream Vera Serif",
     "Lucida Bright", Georgia, serif;
 }
 
-span.textsf {
+span.textsf, div.textsf {
      font-family: "DejaVu Sans", "Bitstream Vera Sans",
         Geneva, Verdana, sans-serif ;
 }
@@ -10460,8 +10555,7 @@
 
 .footnotes {
     font-size: .85em ;
-    margin: 3ex 1em 0ex 1em ;
-    padding-bottom: 1ex ;
+    margin: 3ex 2em 0ex 2em ;
     border-top: 1px solid silver ;
 }
 
@@ -10504,7 +10598,7 @@
 
 
 section.textbody div.footnotes{
-    margin: 3ex 0em 0ex 0em ;
+    margin: 3ex 2em 0ex 2em ;
     border-bottom: 2px solid silver ;
 }
 
@@ -10999,9 +11093,16 @@
 table td.tdB { text-align: center ; vertical-align: top ; }
 
 table td.tvertbarl { border-left: 1px solid black }
+table td.tvertbarldouble { border-left: 4px double black }
 table td.tvertbarr { border-right: 1px solid black }
+table td.tvertbarrdouble { border-right: 4px double black }
 
+table td.tvertbarldash { border-left: 1px dashed black }
+table td.tvertbarldoubledash { border-left: 2px dashed black }
+table td.tvertbarrdash { border-right: 1px dashed black }
+table td.tvertbarrdoubledash { border-right: 2px dashed black }
 
+
 /* for cmidrules: */
 table td.tdrule {
     border-top: 1px solid #A0A0A0 ;
@@ -12265,6 +12366,8 @@
 % \changes{v0.54}{2018/04/11}{\prog{lwarpmk}: Verifies image references before \progcode{lwarpmk limages}.}
 % \changes{v0.54}{2018/04/11}{\prog{lwarpmk}: Verifies \HTML\ version exists before \progcode{lwarpmk limages}.}
 % \changes{v0.54}{2018/04/19}{\prog{lwarpmk}: Improved error if configuration file does not exist.}
+% \changes{v0.56}{2018/04/29}{\prog{lwarpmk}: Added \progcode{lwarpmk pdftosvg}.}
+% \changes{v0.56}{2018/05/11}{\prog{lwarpmk}: Supports \texttt{-shell-escape}.}
 %
 % The following is only generated if the \optn{lwarpmk} option
 %   was given to \pkg{lwarp}.
@@ -12281,7 +12384,7 @@
 
 -- Print the usage of the lwarpmk command:
 
-printversion = "v0.55"
+printversion = "v0.56"
 
 function printhelp ()
 print ("lwarpmk: Use lwarpmk -h or lwarpmk --help for help.") ;
@@ -12304,6 +12407,7 @@
     For use with latexmk or a Makefile:
     Converts project_html.pdf to project_html.html and individual HTML files.
     Finishes the HTML conversion even if there was a compile error.
+lwarpmk pdftosvg <list of file names>: Converts each PDF file to SVG.
 lwarpmk clean [project]: Remove .aux, .toc, .lof/t, .idx, .ind, .log, *_html_inc.*, .gl*
 lwarpmk cleanall [project]: Remove auxiliary files and also project.pdf, *.html
 lwarpmk cleanlimages: Removes all images from the "lateximages" directory.
@@ -12326,6 +12430,7 @@
 homehtmlfilename = "index"  (or perhaps the project name)
 htmlfilename = ""  (or "projectname" - filename prefix)
 latexmk = "false"  (or "true" to use latexmk to build PDFs)
+shellescape = "false"
 xindylanguge = "english"  (use a language supported by xindy)
 xindycodepage = "utf8"  (use a codepage supported by xindy)
 xindystyle = "lwarp.xdy" (or a custom file based on lwarp.xdy)
@@ -12332,7 +12437,7 @@
 pdftotextenc = "UTF-8"  (use an encoding supported by pdftotext)
 --
 Filenames must contain only letters, numbers, underscore, or dash.
-Values must be in "quotes".
+Values must be in upright "quotes".
 
 ]] ) ;
 end
@@ -12377,13 +12482,13 @@
 local conffile = "lwarpmk.conf"
 -- Optional configuration filename:
 if ( arg[2] ~= nil ) then conffile = arg[2]..".lwarpmkconf" end
--- Default xindy language:
+-- Additional defaults:
+opsystem = "Unix"
+latexmk = "false"
+shellescape = "false"
 xindylanguage = "english"
--- Default xindy codepage:
 xindycodepage = "utf8"
--- Default xindystyle:
 xindystyle = "lwarp.xdy"
--- Default pdftotext encoding:
 pdftotextenc = "UTF-8"
 -- Verify the file exists:
 if (lfs.attributes(conffile,"mode")==nil) then
@@ -12439,6 +12544,7 @@
 elseif ( cvarname == "homehtmlfilename" ) then homehtmlfilename = cvalue
 elseif ( cvarname == "htmlfilename" ) then htmlfilename = cvalue
 elseif ( cvarname == "latexmk" ) then latexmk = cvalue
+elseif ( cvarname == "shellescape" ) then shellescape = cvalue
 elseif ( cvarname == "xindylanguage" ) then xindylanguage = cvalue
 elseif ( cvarname == "xindycodepage" ) then xindycodepage = cvalue
 elseif ( cvarname == "xindystyle" ) then xindystyle = cvalue
@@ -12535,7 +12641,13 @@
 
 function onetime (fsuffix)
 print("lwarpmk: Compiling with " .. latexname .. " " .. sourcename..fsuffix)
-err = os.execute(latexname .. " " .. sourcename..fsuffix)
+local thisshellescape = " "
+if ( shellescape == "true" ) then
+    thisshellescape = " -shell-escape "
+else
+    thisshellescape = " "
+end
+err = os.execute(latexname .. thisshellescape .. sourcename..fsuffix)
 if ( err ~= 0 ) then
     print ("lwarpmk: ===")
     print ("lwarpmk: Compile error.")
@@ -12806,6 +12918,13 @@
 -- Use latexmk to compile source and index:
 -- fsuffix is "" for print, or "_html" for HTML
 function compilelatexmk ( fsuffix )
+-- Maybe select the shell-escape option:
+local thisshellescape = " "
+if ( shellescape == "true" ) then
+    thisshellescape = " -shell-escape "
+else
+    thisshellescape = " "
+end
 -- The recorder option is required to detect changes in <project>.tex
 -- while we are loading <project>_html.tex.
 err=os.execute ( "latexmk -pdf -dvi- -ps- -recorder "
@@ -12817,7 +12936,7 @@
     .. "  -C " .. xindycodepage
     .. "  -L " .. xindylanguage .. " /"
     .. opquote
-    .. " -pdflatex=\"" .. latexname .." %O %S\" "
+    .. " -pdflatex=\"" .. latexname .. thisshellescape .." %O %S\" "
     .. sourcename..fsuffix ..".tex" ) ;
 if ( err ~= 0 ) then
     print ("lwarpmk: ===")
@@ -12825,10 +12944,22 @@
     print ("lwarpmk: ===")
     os.exit(1)
 end
-end
+end -- function
 
+-- Converts PDF files to SVG files.
+-- The filenames are arg[2] and up.
+-- arg[1] is the command "pdftosvg".
+function convertpdftosvg ()
+for i = 2 , #arg do
+    if (lfs.attributes(arg[i],"mode")==nil) then
+        print ("lwarpmk: File \"" .. arg[i] .. "\" does not exist.")
+    else
+        print ("lwarpmk: Converting \"" .. arg[i] .. "\"")
+        os.execute ( "pdftocairo -svg " .. arg[i] )
+    end -- if
+end -- do
+end --function
 
-
 -- lwarpmk --version :
 
 if (arg[1] == "--version") then
@@ -13033,6 +13164,12 @@
 os.execute ( rmname .. " lateximages/*" )
 print ("lwarpmk: Done.")
 
+-- lwarpmk pdftosvg <list of file names>
+-- Convert PDf files to SVG using pdftocairo
+elseif arg[1] == "pdftosvg" then
+convertpdftosvg ()
+print ("lwarpmk: Done.")
+
 -- lwarpmk with no argument :
 
 elseif (arg[1] == nil) then
@@ -14470,6 +14607,14 @@
 % \end{macro}
 
 
+% \begin{macro}{\PN at parnotes@auto} Redefined by \pkg{parnotes} to print
+% paragraph notes at the end of each paragraph.
+%    \begin{macrocode}
+\def\PN at parnotes@auto{}%
+%    \end{macrocode}
+% \end{macro}
+
+
 % \begin{macro}{\LWR at openparagraph}
 %    \begin{macrocode}
 \newcommand*{\LWR at openparagraph}
@@ -14498,6 +14643,15 @@
 % so it's OK to generate paragraph tags.
 %    \begin{macrocode}
     {% yes nest par tags
+%    \end{macrocode}
+% If \pkg{parnotes} is used, paragraph notes are inserted
+% before starting the next paragraph:
+% \changes{v0.56}{2018/05/09}{Added support for \pkg{parnotes}.}
+%    \begin{macrocode}
+        \PN at parnotes@auto%
+%    \end{macrocode}
+% The opening paragraph tag:
+%    \begin{macrocode}
         \LWR at htmltagc{\LWR at tagregularparagraph}%
 %    \end{macrocode}
 % Now have started a paragraph.
@@ -14559,7 +14713,7 @@
 %    \begin{macrocode}
     {% yes nest par tags
 %    \end{macrocode}
-% Print a closing tag and some extra vertical space:
+% Print a closing tag and some extra vertical space.
 %    \begin{macrocode}
         \unskip%
         \LWR at htmltagc{/\LWR at tagregularparagraph}%
@@ -14568,10 +14722,17 @@
 % No longer doing a paragraph:
 %    \begin{macrocode}
         \global\boolfalse{LWR at doingapar}%
+%    \end{macrocode}
 % Disable the special \env{minipage} \& \cs{hspace} interaction
 % until a new minipage is found:
 %    \begin{macrocode}
         \global\boolfalse{LWR at minipagethispar}%
+%    \end{macrocode}
+% If \pkg{parnotes} is used, paragraph notes are inserted
+% after ending the previous paragraph:
+% \changes{v0.56}{2018/05/09}{Added support for \pkg{parnotes}.}
+%    \begin{macrocode}
+        \PN at parnotes@auto%
     }% end of yes nest par tags
 }% end of handling pars
 %    \end{macrocode}
@@ -14732,15 +14893,15 @@
 %    \begin{macrocode}
     {\ClearPreHook{par}}%
 %    \end{macrocode}
-% Else: do nothing
+% Else: Do nothing:
 %    \begin{macrocode}
     {}%
 %    \end{macrocode}
-% no longer in paragraph mode
+% No longer in paragraph mode:
 %    \begin{macrocode}
     \global\setbool{LWR at doingstartpars}{false}%
 %    \end{macrocode}
-% no \element{p} tag to undo:
+% No \element{p} tag to undo:
 %    \begin{macrocode}
     \global\boolfalse{LWR at doingapar}%
 }% nestspan
@@ -15012,7 +15173,8 @@
 % The default of |3| places footnotes before each \cs{subsubsection} or higher.
 % See \cref{tab:depthsheadings} for a table of \LaTeX\ section headings.
 % \changes{v0.43}{2017/11/08}{Added \progcode{FootnoteDepth}.}
-% \changes{v0.52}{2018/03/28}{Changed \progcode{FootnoteDepth} default to \cs{subsbusection}.}
+% \changes{v0.52}{2018/03/28}{Changed \progcode{FootnoteDepth} default
+%       to \cs{subsbusection}.}
 %    \begin{macrocode}
 \newcounter{FootnoteDepth}
 \setcounter{FootnoteDepth}{3}
@@ -18421,7 +18583,7 @@
 % This causes \pkg{lwarp} to mistakenly place an empty span between
 % \HTML\ list tags.
 %    \begin{macrocode}
-\LetLtxMacro{\hspace}{\LWR at nohspace}%
+\LetLtxMacro\hspace\LWR at nohspace%
 %    \end{macrocode}
 % Process the original \cs{item} code:
 %    \begin{macrocode}
@@ -18429,7 +18591,7 @@
 %    \end{macrocode}
 % Restore \cs{hspace} for use in the item text:
 %    \begin{macrocode}
-\LetLtxMacro{\hspace}{\LWR at hspace}%
+\LetLtxMacro\hspace\LWR at hspace%
 \LWR at htmltag{dt}#1\LWR at htmltag{/dt}%
 \LWR at orignewline%
 \LWR at htmltag{dd}%
@@ -18529,8 +18691,10 @@
 % \section{Tabular}
 %
 % This is arguably the most complicated part of the entire package.
-% Numerous tricks are employed to handle the syntax which is involved.
+% Numerous tricks are employed to handle the syntax of the \LaTeX\ core
+% and the various tabular-related packages.
 %
+%
 % \subsection{Limitations}
 %
 % \limitstabular
@@ -18541,15 +18705,34 @@
 % \changes{v0.33}{2017/07/10}{Add: Tabular at and bang columns now have their
 %	own HTML columns.}
 %
-% \subsection{Token lookahead}
-
-% Used by \cs{LWR at futurenonspacelet} to look at the next token.
-
 % \codehtml
 %    \begin{macrocode}
 \begin{warpHTML}
 %    \end{macrocode}
+%
+%
+% \subsection{Temporary package-related macros}
+%
+% These macros are temporary placeholders for macros defined by various
+% packages.  If the relevent package is not loaded, these placeholders are used instead.
+%
+%
+% \subsubsection{\pkg{arydshln}}
+%
+% Emualated by the original \LaTeX\ non-dashed versions.
+% \changes{v0.56}{2018/05/04}{\pkg{arydshln}: Added.}
+%    \begin{macrocode}
+\LetLtxMacro\hdashline\hline
+\LetLtxMacro\cdashline\cline
+\LetLtxMacro\firsthdashline\hline
+\LetLtxMacro\lasthdashline\hline
+%    \end{macrocode}
+%
+%
+% \subsection{Token lookahead}
 
+% Used by \cs{LWR at futurenonspacelet} to look at the next token.
+
 % \begin{macro}{\LWR at mynexttoken}
 %    \begin{macrocode}
 \newcommand\LWR at mynexttoken\relax
@@ -18602,14 +18785,18 @@
 \boolfalse{LWR at tabularcelladded}
 %    \end{macrocode}
 
-% \DescribeBoolean{LWR at doinghline}
-% True if the next row will have an hline or midrule above it.
-% Also used for \cs{midrule}.
+% \DescribeCounter{LWR at hlines}
+% Number of \cs{hline}s or \cs{midrule}s above the next row.
 %    \begin{macrocode}
-\newbool{LWR at doinghline}
-\boolfalse{LWR at doinghline}
+\newcounter{LWR at hlines}
 %    \end{macrocode}
 
+% \DescribeCounter{LWR at hdashedlines}
+% Number of \pkg{arydshln} dashed lines above the next row.
+%    \begin{macrocode}
+\newcounter{LWR at hdashedlines}
+%    \end{macrocode}
+
 % \DescribeBoolean{LWR at doingtbrule}
 % True if the next row will have a top/bottom rule above it.
 %    \begin{macrocode}
@@ -19025,7 +19212,8 @@
     not bool {LWR at exitingtabular} or%
     bool{LWR at doingtbrule} or%
     bool{LWR at doingcmidrule} or%
-    bool{LWR at doinghline} or%
+    test{\ifnumcomp{\value{LWR at hlines}}{>}{0}} or%
+    test{\ifnumcomp{\value{LWR at hdashedlines}}{>}{0}} or%
     bool{LWR at startedrow}%
 }{%
 %    \end{macrocode}
@@ -19120,7 +19308,8 @@
 %    \end{macrocode}
 % Additional setup:
 %    \begin{macrocode}
-\global\boolfalse{LWR at doinghline}%
+\setcounter{LWR at hlines}{0}%
+\setcounter{LWR at hdashedlines}{0}%
 \global\boolfalse{LWR at doingtbrule}%
 \global\boolfalse{LWR at doingcmidrule}%
 \LWR at clearmidrules%
@@ -19143,6 +19332,31 @@
 % \end{macro}
 
 
+% \subsection{Looking ahead in the column specifications}
+%
+% \begin{macro}{\LWR at columnspeclookahead} \marg{offset}
+%
+% Looks |offset| tokens ahead in the column specification,
+% setting \cs{LWR at strresulttwo}.
+%
+% The |w| column alignment will be seen as a single unit such as |{c}|.
+%    \begin{macrocode}
+\newcommand*{\LWR at columnspeclookahead}[1]{%
+\setcounter{LWR at tempcountone}{\value{LWR at tablecolspecindex}}%
+\addtocounter{LWR at tempcountone}{#1}%
+\fullexpandarg%
+\StrChar{\LWR at origcolspec}{\arabic{LWR at tempcountone}}[\LWR at strresulttwo]%
+%    \end{macrocode}
+% Get the contents of the first group in \cs{LWR at strresulttwo}:
+%    \begin{macrocode}
+\exploregroups%
+\StrChar{\LWR at strresulttwo}{1}[\LWR at strresulttwo]%
+\noexploregroups%
+}
+%    \end{macrocode}
+% \end{macro}
+
+
 % \subsection{Parsing @, >, <, !, bar columns}
 %
 %
@@ -19169,7 +19383,8 @@
 %    \begin{macrocode}
 \LWR at traceinfo{about to read the next token:}%
 \expandarg%
-\StrChar{\LWR at origcolspec}{\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]
+\StrChar{\LWR at origcolspec}%
+    {\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]
 \fullexpandarg%
 %    \end{macrocode}
 % Store the result into a data array, expanding once out of \cs{LWR at colparameter}:
@@ -19184,7 +19399,8 @@
 }%
 {% not at the left edge:
     \LWR at traceinfo{not at the left edge}%
-    \LWR at setexparray{LWR at colatspec}{\arabic{LWR at tabletotalcols}}{\LWR at colparameter}%
+    \LWR at setexparray{LWR at colatspec}%
+        {\arabic{LWR at tabletotalcols}}{\LWR at colparameter}%
     \LWR at traceinfo{at \arabic{LWR at tabletotalcols}: %
     \LWR at getexparray{LWR at colatspec}{\arabic{LWR at tabletotalcols}}}%
 }%
@@ -19212,10 +19428,12 @@
 %    \begin{macrocode}
 \LWR at traceinfo{about to read the next token:}%
 \expandarg%
-\StrChar{\LWR at origcolspec}{\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]
+\StrChar{\LWR at origcolspec}%
+    {\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]
 \fullexpandarg%
 %    \end{macrocode}
-% Store the result into a data array, expanding once out of \cs{LWR at colparameter}:
+% Store the result into a data array,
+% expanding once out of \cs{LWR at colparameter}:
 %    \begin{macrocode}
 \LWR at traceinfo{have now read the next token}%
 \ifnumcomp{\value{LWR at tabletotalcols}}{=}{0}%
@@ -19225,7 +19443,8 @@
 }%
 {% not at the left edge:
     \LWR at traceinfo{not at the left edge}%
-    \LWR at setexparray{LWR at colbangspec}{\arabic{LWR at tabletotalcols}}{\LWR at colparameter}%
+    \LWR at setexparray{LWR at colbangspec}%
+        {\arabic{LWR at tabletotalcols}}{\LWR at colparameter}%
     \LWR at traceinfo{bang \arabic{LWR at tabletotalcols}: \LWR at colparameter!}%
 }%
 \let\LWR at colparameter\relax%
@@ -19250,12 +19469,14 @@
 % Read the next token, expanding once into \cs{LWR at colparameter}:
 %    \begin{macrocode}
 \expandarg%
-\StrChar{\LWR at origcolspec}{\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]%
+\StrChar{\LWR at origcolspec}%
+    {\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]%
 \fullexpandarg%
 %    \end{macrocode}
 % Store the result into a data array, expanding once out of \cs{LWR at colparameter}:
 %    \begin{macrocode}
-\LWR at setexparray{LWR at colbeforespec}{\arabic{LWR at tabletotalcolsnext}}{\LWR at colparameter}%
+\LWR at setexparray{LWR at colbeforespec}%
+    {\arabic{LWR at tabletotalcolsnext}}{\LWR at colparameter}%
 \let\LWR at colparameter\relax%
 \booltrue{LWR at validtablecol}%
 }
@@ -19276,12 +19497,14 @@
 % Read the next token, expanding once into \cs{LWR at colparameter}:
 %    \begin{macrocode}
 \expandarg%
-\StrChar{\LWR at origcolspec}{\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]%
+\StrChar{\LWR at origcolspec}%
+    {\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]%
 \fullexpandarg%
 %    \end{macrocode}
 % Store the result into a data array, expanding once out of \cs{LWR at colparameter}:
 %    \begin{macrocode}
-\LWR at setexparray{LWR at colafterspec}{\arabic{LWR at tabletotalcols}}{\LWR at colparameter}%
+\LWR at setexparray{LWR at colafterspec}%
+    {\arabic{LWR at tabletotalcols}}{\LWR at colparameter}%
 \let\LWR at colparameter\relax%
 \booltrue{LWR at validtablecol}%
 }
@@ -19292,19 +19515,34 @@
 % \begin{macro}{\LWR at parsebarcolumn} \qquad Handles vertical rules.
 %
 % \changes{v0.41}{2017/10/07}{Added vertical rules.}
+% \changes{v0.56}{2018/04/30}{Adds support for double vertical rules.}
 %
 %    \begin{macrocode}
 \newcommand*{\LWR at parsebarcolumn}{%
-\LWR at traceinfo{bar column}%
+\LWR at traceinfo{LWR at parsebarcolumn}%
 %    \end{macrocode}
 % Remember the bar at this position:
 %    \begin{macrocode}
 \ifnumcomp{\value{LWR at tabletotalcols}}{=}{0}%
 {% left edge of the table:
-    \LWR at setexparray{LWR at colbarspec}{leftedge}{tvertbarl}%
+    \edef\LWR at tempone{\LWR at getexparray{LWR at colbarspec}{leftedge}}%
+    \ifdefstring{\LWR at tempone}{tvertbarl}%
+    {\LWR at setexparray{LWR at colbarspec}{leftedge}{tvertbarldouble}}%
+    {\LWR at setexparray{LWR at colbarspec}{leftedge}{tvertbarl}}%
 }%
 {% not at the left edge:
-    \LWR at setexparray{LWR at colbarspec}{\arabic{LWR at tabletotalcols}}{tvertbarr}%
+    \edef\LWR at tempone{%
+        \LWR at getexparray{LWR at colbarspec}{\arabic{LWR at tabletotalcols}}%
+    }%
+    \ifdefstring{\LWR at tempone}{tvertbarr}%
+    {%
+        \LWR at setexparray{LWR at colbarspec}%
+            {\arabic{LWR at tabletotalcols}}{tvertbarrdouble}%
+    }%
+    {%
+        \LWR at setexparray{LWR at colbarspec}%
+            {\arabic{LWR at tabletotalcols}}{tvertbarr}%
+    }%
 }%
 \booltrue{LWR at validtablecol}%
 }
@@ -19312,6 +19550,56 @@
 % \end{macro}
 %
 %
+% \begin{macro}{\LWR at parsecoloncolumn} \qquad Handles vertical rules.
+%
+% \changes{v0.56}{2018/05/04}{\pkg{arydshln}: Added.}
+%    \begin{macrocode}
+\newcommand*{\LWR at parsecoloncolumn}{%
+\LWR at traceinfo{LWR at parsecoloncolumn}%
+%    \end{macrocode}
+% Remember the bar at this position:
+%    \begin{macrocode}
+\ifnumcomp{\value{LWR at tabletotalcols}}{=}{0}%
+{% left edge of the table:
+    \edef\LWR at tempone{\LWR at getexparray{LWR at colbarspec}{leftedge}}%
+    \ifdefstring{\LWR at tempone}{tvertbarldash}%
+    {\LWR at setexparray{LWR at colbarspec}{leftedge}{tvertbarldoubledash}}%
+    {\LWR at setexparray{LWR at colbarspec}{leftedge}{tvertbarldash}}%
+}%
+{% not at the left edge:
+    \edef\LWR at tempone{%
+        \LWR at getexparray{LWR at colbarspec}{\arabic{LWR at tabletotalcols}}%
+    }%
+    \ifdefstring{\LWR at tempone}{tvertbarrdash}%
+    {\LWR at setexparray{LWR at colbarspec}%
+        {\arabic{LWR at tabletotalcols}}{tvertbarrdoubledash}}%
+    {\LWR at setexparray{LWR at colbarspec}%
+        {\arabic{LWR at tabletotalcols}}{tvertbarrdash}}%
+}%
+\booltrue{LWR at validtablecol}%
+}
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\LWR at parsesemicoloncolumn} \qquad Handles vertical rules.
+%
+% \changes{v0.56}{2018/05/04}{\pkg{arydshln}: Added.}
+%    \begin{macrocode}
+\newcommand*{\LWR at parsesemicoloncolumn}{%
+%    \end{macrocode}
+% Treat |;| as a |:| column:
+%    \begin{macrocode}
+\LWR at parsecoloncolumn%
+%    \end{macrocode}
+% Skip the following width token:
+%    \begin{macrocode}
+\addtocounter{LWR at tablecolspecindex}{1}%
+}
+%    \end{macrocode}
+% \end{macro}
+%
+%
 % \subsection{Parsing `l', `c', or `r' columns}
 %
 % \begin{macro}{\LWR at parsenormalcolumn} \marg{thiscolumn}
@@ -19354,6 +19642,24 @@
 % \end{macro}
 
 
+% \subsection{Parsing `w' columns}
+%
+% \begin{macro}{\LWR at parsewcolumn}
+% The width will be ignored.
+%    \begin{macrocode}
+\newcommand*{\LWR at parsewcolumn}{%
+%    \end{macrocode}
+%    \begin{macrocode}
+\LWR at columnspeclookahead{1}%
+\expandafter\LWR at parsenormalcolumn\expandafter{\LWR at strresulttwo}%
+%    \end{macrocode}
+% Skips the following width and alignment tokens:
+%    \begin{macrocode}
+\addtocounter{LWR at tablecolspecindex}{2}%
+}
+%    \end{macrocode}
+% \end{macro}
+
 % \subsection{Parsing `D' columns}
 %
 % From the \pkg{dcolumn} package.
@@ -19538,7 +19844,8 @@
 %    \begin{macrocode}
 \whileboolexpr{%
     not test{%
-        \ifnumcomp{\value{LWR at tablecolspecindex}}{>}{\value{LWR at tablecolspecwidth}}%
+        \ifnumcomp{\value{LWR at tablecolspecindex}}{>}%
+            {\value{LWR at tablecolspecwidth}}%
     }%
 }%
 {%
@@ -19576,16 +19883,30 @@
 \IfStrEq{\LWR at strresult}{C}{\LWR at parsenormalcolumn{c}}{}%
 \IfStrEq{\LWR at strresult}{R}{\LWR at parsenormalcolumn{r}}{}%
 \IfStrEq{\LWR at strresult}{J}{\LWR at parsenormalcolumn{l}}{}%
-\IfStrEq{\LWR at strresult}{S}{\LWR at parsenormalcolumn{r}}{}%
+%    \end{macrocode}
+%    \begin{macrocode}
+\IfStrEq{\LWR at strresult}{S}{\LWR at parsenormalcolumn{c}}{}%
+\IfStrEq{\LWR at strresult}{s}{\LWR at parsenormalcolumn{c}}{}%
+%    \end{macrocode}
+%    \begin{macrocode}
 \IfStrEq{\LWR at strresult}{\detokenize{@}}{\LWR at parseatcolumn}{}%
 \IfStrEq{\LWR at strresult}{!}{\LWR at parsebangcolumn}{}%
 \IfStrEq{\LWR at strresult}{>}{\LWR at parsebeforecolumn}{}%
 \IfStrEq{\LWR at strresult}{<}{\LWR at parseaftercolumn}{}%
 \IfStrEq{\LWR at strresult}{|}{\LWR at parsebarcolumn}{}%
+\IfStrEq{\LWR at strresult}{:}{\LWR at parsecoloncolumn}{}%
+\IfStrEq{\LWR at strresult}{;}{\LWR at parsesemicoloncolumn}{}%
+%    \end{macrocode}
+%    \begin{macrocode}
 \IfStrEq{\LWR at strresult}{p}{\LWR at parsepcolumn{p}}{}%
 \IfStrEq{\LWR at strresult}{m}{\LWR at parsepcolumn{m}}{}%
 \IfStrEq{\LWR at strresult}{b}{\LWR at parsepcolumn{b}}{}%
 %    \end{macrocode}
+% \changes{v0.56}{2018/05/10}{Added \pkg{array} \texttt{W} column.}
+%    \begin{macrocode}
+\IfStrEq{\LWR at strresult}{w}{\LWR at parsewcolumn}{}%
+\IfStrEq{\LWR at strresult}{W}{\LWR at parsewcolumn}{}%
+%    \end{macrocode}
 % From the \pkg{dcolumn} package:
 %    \begin{macrocode}
 \IfStrEq{\LWR at strresult}{D}{\LWR at parseDcolumn{c}}{}%
@@ -19621,7 +19942,7 @@
 %    \begin{macrocode}
 \addtocounter{LWR at tablecolspecindex}{1}%
 }% whiledo
-\LWR at traceinfo{LWR at parsetablecols: done}%
+\LWR at traceinfo{LWR at parsetablecols: Final table column spec: !\LWR at tablecolspec!}%
 }%
 %    \end{macrocode}
 % \end{macro}
@@ -19773,16 +20094,12 @@
 % Create the row tag, with a class if necessary.
 %    \begin{macrocode}
     \global\booltrue{LWR at intabularmetadata}%
-    \ifbool{LWR at doinghline}%
+    \ifboolexpr{%
+        test{\ifnumcomp{\value{LWR at hlines}}{>}{0}} or%
+        test{\ifnumcomp{\value{LWR at hdashedlines}}{>}{0}}%
+    }%
     {%
-        \ifdefvoid{\LWR at ruleHTMLcolor}{%
-            \LWR at htmltag{tr class="hline" }%
-        }{%
-            \LWR at htmltag{%
-                tr class="hline" %
-                style="border-top: 1px solid \LWR at origpound\LWR at ruleHTMLcolor "%
-            }%
-        }%
+        \LWR at htmltag{tr class="hline" }%
         \LWR at orignewline%
     }%
     {% not doing hline
@@ -19792,8 +20109,9 @@
                 \LWR at htmltag{tr class="tbrule"}%
             }{%
                 \LWR at htmltag{%
-                    tr class="tbrule" %
-                    style="border-top: 1px solid \LWR at origpound\LWR at ruleHTMLcolor "%
+                    tr class="tbrule" % space
+                    style="border-top: 1px solid % space
+                        \LWR at origpound\LWR at ruleHTMLcolor "%
                 }%
             }%
             \LWR at orignewline%
@@ -19855,6 +20173,7 @@
         "%
         \LWR at tdstartstyles%
         \LWR at addcmidrulewidth%
+        \LWR at addcdashline%
         \LWR at addtabularrulecolors%
         \LWR at tdendstyles%
     }%
@@ -19938,7 +20257,8 @@
 %    \end{macrocode}
 % Fetch the current column's alignment character into \cs{LWR at strresult}:
 %    \begin{macrocode}
-        \StrChar{\LWR at tablecolspec}{\arabic{LWR at tablecolindex}}[\LWR at strresult]%
+        \StrChar{\LWR at tablecolspec}%
+            {\arabic{LWR at tablecolindex}}[\LWR at strresult]%
 %    \end{macrocode}
 % print the start of a new table data cell:
 %    \begin{macrocode}
@@ -19962,7 +20282,9 @@
 %    \begin{macrocode}
         \LWR at tdstartstyles%
         \LWR at addcmidrulewidth%
-        \StrChar{\LWR at tablecolspec}{\arabic{LWR at tablecolindex}}[\LWR at thiscolspec]%
+        \LWR at addcdashline%
+        \StrChar{\LWR at tablecolspec}%
+            {\arabic{LWR at tablecolindex}}[\LWR at thiscolspec]%
         \LWR at addformatwpalignment{\LWR at thiscolspec}%
 %    \end{macrocode}
 % Add styles for cell and rule colors:
@@ -19976,7 +20298,7 @@
         }%
         \LWR at traceinfo{LWR at tabledatasinglecolumntag: done printing td tag}%
 %    \end{macrocode}
-% If this is a p, m, b, or X column, allow paragraphs:
+% If this is a |p|, |m|, |b|, or X column, allow paragraphs:
 %    \begin{macrocode}
         \ifboolexpr{%
             test{ \ifdefstring{\LWR at strresult}{p} } or
@@ -20025,7 +20347,13 @@
 % (\cref{sec:dataarray}) of columns containing
 % |r| if a midrule should be right trimmed for each column.
 
+% \DescribeObject{LWR at cdashlines}|LWR at cdashlines| is a data array
+% (\cref{sec:dataarray}) of columns each containing a |Y|
+% if an \pkg{arydshln} package "cdashed line" should be
+% created for this column.
 
+
+
 % \DescribeCounter{LWR at midrulecounter}
 % Indexes across the |LWR at midrules| and |LWR at trim<l/r>rules| data arrays.
 %    \begin{macrocode}
@@ -20083,7 +20411,8 @@
 \setcounter{LWR at midrulecounter}{1}%
 \whileboolexpr{%
     not test{%
-        \ifnumcomp{\value{LWR at midrulecounter}}{>}{\value{LWR at tablecolspecwidth}}%
+        \ifnumcomp{\value{LWR at midrulecounter}}{>}%
+            {\value{LWR at tablecolspecwidth}}%
     }%
 }%
 {%
@@ -20091,6 +20420,7 @@
 \setlength{\LWR at thiscmidrulewidth}{\LWR at cmidrulewidth}%
 \LWR at setexparray{LWR at trimlrules}{\arabic{LWR at midrulecounter}}{}%
 \LWR at setexparray{LWR at trimrrules}{\arabic{LWR at midrulecounter}}{}%
+\LWR at setexparray{LWR at cdashlines}{\arabic{LWR at midrulecounter}}{N}%
 \addtocounter{LWR at midrulecounter}{1}%
 }%
 }
@@ -20129,27 +20459,71 @@
 % \end{macro}
 
 
-% \begin{macro}{\LWR at docmidrule} \oarg{width} \marg{trim} \marg{leftcolumn-rightcolumn}
+% \begin{macro}{\LWR at docmidrule} \oarg{width} \parg{trim} \marg{leftcolumn-rightcolumn}
 %
 % Marks |LWR at midrules| array elements to be a non-zero width from left to right columns.
 % Also marks trimming for the L and/or R columns.
 %
 %    \begin{macrocode}
-\NewDocumentCommand{\LWR at docmidrule}{O{\LWR at cmidrulewidth} D(){} >{\SplitArgument{1}{-}}m}%
-{\LWR at subcmidrule{#1}{#2}#3}
+\NewDocumentCommand{\LWR at docmidrule}
+    {O{\LWR at cmidrulewidth} D(){} >{\SplitArgument{1}{-}}m}
+    {\LWR at subcmidrule{#1}{#2}#3}
 %    \end{macrocode}
 % \end{macro}
 
 
 
-% Used to compute margins, tabular trims:
+% \begin{macro}{\LWR at subcdashline} \marg{leftcolumn} \marg{rightcolumn}
+%
+% Marks |LWR at cdashlines| data array elements to be |Y| from
+% left to right columns.
+%
+% |LWR at doingcmidrule| is set to force an empty row at the end of the tabular
+% to create the rule.
+%
 %    \begin{macrocode}
-\newlength{\LWR at templengthone}%
-\newlength{\LWR at templengthtwo}%
-\newlength{\LWR at templengththree}%
+\newcommand*{\LWR at subcdashline}[2]{%
+\setcounter{LWR at midrulecounter}{#1}%
+\whileboolexpr{%
+    not test {%
+        \ifnumcomp{\value{LWR at midrulecounter}}{>}{#2}%
+    }%
+}%
+{%
+    \LWR at setexparray{LWR at cdashlines}{\arabic{LWR at midrulecounter}}{Y}%
+    \addtocounter{LWR at midrulecounter}{1}%
+}% whiledo
+\booltrue{LWR at doingcmidrule}%
+}
 %    \end{macrocode}
+% \end{macro}
 
 
+% \begin{macro}{\LWR at docdashline} \marg{leftcolumn-rightcolumn}
+%
+% Marks |LWR at cdashlines| data array elements to be |Y| from
+% left to right columns.
+%
+%    \begin{macrocode}
+\NewDocumentCommand{\LWR at docdashline}
+    {>{\SplitArgument{1}{-}}m}%
+    {%
+        \LWR at subcdashline#1%
+    }
+%    \end{macrocode}
+% \end{macro}
+
+
+
+% Used to compute margins, tabular trims, column offsets:
+%    \begin{macrocode}
+\newlength{\LWR at templengthone}
+\newlength{\LWR at templengthtwo}
+\newlength{\LWR at templengththree}
+\newcounter{LWR at tempcountone}
+%    \end{macrocode}
+
+
 % Used to add a style to a table data cell:
 %    \begin{macrocode}
 \newboolean{LWR at tdhavecellstyle}
@@ -20202,7 +20576,7 @@
 \ifdimcomp{\LWR at templengthone}{>}{0pt}%
 {%
 %    \end{macrocode}
-% Print the class without left and right trim letters appended:
+% Print the class with left and right trim letters appended:
 %    \begin{macrocode}
     \LWR at origtilde tdrule#1#2%
 %    \end{macrocode}
@@ -20301,6 +20675,28 @@
 % \end{macro}
 
 
+% \begin{macro}{\LWR at addcdashline}
+%
+% Must be placed between \cs{LWR at tdstartstyles} and \cs{LWR at tdendstyles}.
+%
+% \changes{v0.56}{2018/05/04}{\pkg{arydshln}: Added.}
+%    \begin{macrocode}
+\newcommand{\LWR at addcdashline}{%
+\edef\LWR at tempone{%
+    \LWR at getexparray{LWR at cdashlines}{\arabic{LWR at tablecolindex}}%
+}%
+\ifdefstring{\LWR at tempone}{Y}{%
+    \LWR at tdaddstyle%
+    border-top: 1pt dashed %
+    \ifdefvoid{\LWR at ruleHTMLcolor}%
+        {black}%
+        {\LWR at origpound\LWR at ruleHTMLcolor}%
+}{}%
+}
+%    \end{macrocode}
+% \end{macro}
+
+
 % \begin{macro}{\LWR at WPcell} \marg{text-align} \marg{vertical-align}
 % \changes{v0.47}{2018/01/26}{Fix: Line wrap at \HTML\ hyphen.}
 %    \begin{macrocode}
@@ -20368,23 +20764,66 @@
 %
 % \begin{macro}{\LWR at addtabularhrulecolor} Adds a cell's horizontal rule color style, if needed.
 % \changes{v0.48}{2018/02/08}{\pkg{colortbl}: Added.}
+% \changes{v0.56}{2018/04/30}{Adds support for double \cs{hline}s and \cs{midrule}s.}
+% \changes{v0.56}{2018/05/02}{Adds support for \pkg{arydshln} dashed rules.}
 %    \begin{macrocode}
 \newcommand*{\LWR at addtabularhrulecolor}{%
 %    \end{macrocode}
 % If either form of horizontal rule is requested:
 %    \begin{macrocode}
-\ifboolexpr {
-    bool{LWR at doinghline} or
-    bool{LWR at doingtbrule}
+\ifboolexpr{%
+    test{\ifnumcomp{\value{LWR at hlines}}{>}{0}} or%
+    test{\ifnumcomp{\value{LWR at hdashedlines}}{>}{0}} or%
+    bool{LWR at doingtbrule}%
 }{%
 %    \end{macrocode}
-% And if there is a custom horizontal color:
+% If there is a no custom color:
 %    \begin{macrocode}
-    \ifdefvoid{\LWR at ruleHTMLcolor}{}%
+    \ifdefvoid{\LWR at ruleHTMLcolor}%
     {%
-        \LWR at tdaddstyle%
-        border-top: 1px solid \LWR at origpound\LWR at ruleHTMLcolor%
-    }{}%
+        \ifnumcomp{\value{LWR at hlines}}{>}{1}%
+        {%
+            \LWR at tdaddstyle%
+            border-top: 4px double%
+        }{% else
+        \ifnumcomp{\value{LWR at hdashedlines}}{>}{1}%
+        {%
+            \LWR at tdaddstyle%
+            border-top: 2px dashed%
+        }{% else
+        \ifnumcomp{\value{LWR at hdashedlines}}{=}{1}%
+        {%
+            \LWR at tdaddstyle%
+            border-top: 1px dashed%
+        }{}}}%
+%    \end{macrocode}
+% If no color and not doubled or dashed, then add nothing, since
+% a simpler rule is the default.
+%    \begin{macrocode}
+    }%
+%    \end{macrocode}
+% If there is a custom color:
+%    \begin{macrocode}
+    {%
+        \ifnumcomp{\value{LWR at hlines}}{>}{1}%
+        {%
+            \LWR at tdaddstyle%
+            border-top: 4px double \LWR at origpound\LWR at ruleHTMLcolor%
+        }{% else
+        \ifnumcomp{\value{LWR at hdashedlines}}{>}{1}%
+        {%
+            \LWR at tdaddstyle%
+            border-top: 2px dashed \LWR at origpound\LWR at ruleHTMLcolor%
+        }{% else
+        \ifnumcomp{\value{LWR at hdashedlines}}{=}{1}%
+        {%
+            \LWR at tdaddstyle%
+            border-top: 1px dashed \LWR at origpound\LWR at ruleHTMLcolor%
+        }{% else
+            \LWR at tdaddstyle%
+            border-top: 1px solid \LWR at origpound\LWR at ruleHTMLcolor%
+        }}}%
+    }%
 }{}%
 }
 %    \end{macrocode}
@@ -20394,6 +20833,8 @@
 %
 % \begin{macro}{\LWR at addtabularrulecolors} Adds a cell's rule color styles, if needed.
 % \changes{v0.48}{2018/02/08}{\pkg{colortbl}: Added.}
+% \changes{v0.56}{2018/04/30}{Adds support for double vertical rules.}
+% \changes{v0.56}{2018/05/05}{Adds support for dashed vertical rules.}
 %
 % No color is added for the final row of empty cells which finishes each \env{tabular}.
 %
@@ -20420,13 +20861,31 @@
 %    \begin{macrocode}
         \ifdefstring{\LWR at tempone}{tvertbarl}{%
                 \LWR at tdaddstyle%
-                border-left: 1px solid \LWR at origpound\LWR at vertruleHTMLcolor%
+                border-left: 1px solid % space
+                    \LWR at origpound\LWR at vertruleHTMLcolor%
         }{}%
+        \ifdefstring{\LWR at tempone}{tvertbarldouble}{%
+                \LWR at tdaddstyle%
+                border-left: 4px double % space
+                    \LWR at origpound\LWR at vertruleHTMLcolor%
+        }{}%
+        \ifdefstring{\LWR at tempone}{tvertbarldash}{%
+                \LWR at tdaddstyle%
+                border-left: 1px dashed % space
+                    \LWR at origpound\LWR at vertruleHTMLcolor%
+        }{}%
+        \ifdefstring{\LWR at tempone}{tvertbarldoubledash}{%
+                \LWR at tdaddstyle%
+                border-left: 2px dashed % space
+                    \LWR at origpound\LWR at vertruleHTMLcolor%
+        }{}%
     }{}%
 %    \end{macrocode}
 % Possibly add a right vertical rule for this cell:
 %    \begin{macrocode}
-    \edef\LWR at tempone{\LWR at getexparray{LWR at colbarspec}{\arabic{LWR at tablecolindex}}}%
+    \edef\LWR at tempone{%
+        \LWR at getexparray{LWR at colbarspec}{\arabic{LWR at tablecolindex}}%
+    }%
     \ifdefstring{\LWR at tempone}{tvertbarr}{%
 %    \end{macrocode}
 % Add a custom style if a vertical bar was requested:
@@ -20434,6 +20893,18 @@
             \LWR at tdaddstyle%
             border-right: 1px solid \LWR at origpound\LWR at vertruleHTMLcolor%
     }{}%
+    \ifdefstring{\LWR at tempone}{tvertbarrdouble}{%
+            \LWR at tdaddstyle%
+            border-right: 4px double \LWR at origpound\LWR at vertruleHTMLcolor%
+    }{}%
+    \ifdefstring{\LWR at tempone}{tvertbarrdash}{%
+            \LWR at tdaddstyle%
+            border-right: 1px dashed \LWR at origpound\LWR at vertruleHTMLcolor%
+    }{}%
+    \ifdefstring{\LWR at tempone}{tvertbarrdoubledash}{%
+            \LWR at tdaddstyle%
+            border-right: 2px dashed \LWR at origpound\LWR at vertruleHTMLcolor%
+    }{}%
 }%
 }
 %    \end{macrocode}
@@ -20498,8 +20969,11 @@
 
 % Remembers multicolumn vertical rules if found in the column spec.
 %    \begin{macrocode}
-\newbool{LWR at mcolvertbarl}
-\newbool{LWR at mcolvertbarr}
+\newcounter{LWR at mcolvertbarsl}
+\newcounter{LWR at mcolvertbarsr}
+\newcounter{LWR at mcolvertbarsldash}
+\newcounter{LWR at mcolvertbarsrdash}
+\newboolean{LWR at mcolvertbaronleft}%
 %    \end{macrocode}
 
 % \begin{macro}{\LWR at printmccoltype} \marg{colspec}
@@ -20526,27 +21000,59 @@
 \IfStrEq{\LWR at strresult}{P}{P}{}%
 \IfStrEq{\LWR at strresult}{M}{M}{}%
 \IfStrEq{\LWR at strresult}{B}{B}{}%
-\IfStrEq{\LWR at strresult}{S}{r}{}%
+%    \end{macrocode}
+% \changes{v0.56}{2018/05/10}{Added \pkg{array} \texttt{W} column.}
+%    \begin{macrocode}
+\IfStrEq{\LWR at strresult}{w}{w}{}%
+\IfStrEq{\LWR at strresult}{W}{W}{}%
+%    \end{macrocode}
+%    \begin{macrocode}
+\IfStrEq{\LWR at strresult}{S}{c}{}%
+\IfStrEq{\LWR at strresult}{s}{c}{}%
+%    \end{macrocode}
+%    \begin{macrocode}
 \IfStrEq{\LWR at strresult}{X}{p}{}%
 %    \end{macrocode}
 % \changes{v0.43}{2017/11/07}{Added vertical rules.}
+% \changes{v0.56}{2018/04/30}{Adds support for double vertical rules.}
+% \changes{v0.56}{2018/05/05}{Adds support for dashed vertical rules.}
 %    \begin{macrocode}
-\IfStrEq{\LWR at strresult}{|}{%
-    \ifnumcomp{\value{LWR at tablemulticolspos}}{=}{1}% left edge?
-        {\booltrue{LWR at mcolvertbarl}}% left edge
-        {\booltrue{LWR at mcolvertbarr}}% not left edge
-}{}%
+\IfStrEq{\LWR at strresult}{|}%
+{%
+    \ifbool{LWR at mcolvertbaronleft}%
+        {\addtocounter{LWR at mcolvertbarsl}{1}}% left edge
+        {\addtocounter{LWR at mcolvertbarsr}{1}}% not left edge
+}%
+{%
+    \IfStrEq{\LWR at strresult}{:}%
+    {%
+        \ifbool{LWR at mcolvertbaronleft}%
+            {\addtocounter{LWR at mcolvertbarsldash}{1}}% left edge
+            {\addtocounter{LWR at mcolvertbarsrdash}{1}}% not left edge
+    }%
+    {%
+        \IfStrEq{\LWR at strresult}{;}%
+        {%
+            \ifbool{LWR at mcolvertbaronleft}%
+                {\addtocounter{LWR at mcolvertbarsldash}{1}}% left edge
+                {\addtocounter{LWR at mcolvertbarsrdash}{1}}% not left edge
+        }%
+        {\setboolean{LWR at mcolvertbaronleft}{false}}%
+    }%
+}%
 \LWR at traceinfo{lwr at printmccoltype done}%
 }
 %    \end{macrocode}
 % \end{macro}
 
-% \begin{macro}{\LWR at multicolpartext}
-% Print the data with paragraph tags:
+% \begin{macro}{\LWR at multicolpartext} \marg{num parameters}
+% Print the data with paragraph tags, advance to bypass the given number of parameters.
+% \changes{v0.56}{2018/05/12}{Fix: \cs{multicolumn} parameters.}
 %    \begin{macrocode}
-\newcommand*{\LWR at multicolpartext}{%
+\newcommand*{\LWR at multicolpartext}[1]{%
 \LWR at startpars%
 \LWR at multicoltext%
+\addtocounter{LWR at tablemulticolspos}{#1}%
 \LWR at stoppars%
 }
 %    \end{macrocode}
@@ -20609,15 +21115,33 @@
 \addtocounter{LWR at tablemulticolspos}{3}% skip parameters
 \LWR at multicoltext%
 }{}%
-\IfStrEq{\LWR at strresult}{p}{\LWR at multicolpartext}{}%
-\IfStrEq{\LWR at strresult}{m}{\LWR at multicolpartext}{}%
-\IfStrEq{\LWR at strresult}{b}{\LWR at multicolpartext}{}%
-\IfStrEq{\LWR at strresult}{P}{\LWR at multicolpartext}{}%
-\IfStrEq{\LWR at strresult}{M}{\LWR at multicolpartext}{}%
-\IfStrEq{\LWR at strresult}{B}{\LWR at multicolpartext}{}%
-\IfStrEq{\LWR at strresult}{S}{\LWR at multicolpartext}{}%
-\IfStrEq{\LWR at strresult}{X}{\LWR at multicolpartext}{}%
+%    \end{macrocode}
+% \changes{v0.56}{2018/05/12}{Fix: \cs{multicolumn} parameters.}
+%    \begin{macrocode}
+\IfStrEq{\LWR at strresult}{p}{\LWR at multicolpartext{0}}{}%
+\IfStrEq{\LWR at strresult}{m}{\LWR at multicolpartext{0}}{}%
+\IfStrEq{\LWR at strresult}{b}{\LWR at multicolpartext{0}}{}%
+\IfStrEq{\LWR at strresult}{P}{\LWR at multicolpartext{0}}{}%
+\IfStrEq{\LWR at strresult}{M}{\LWR at multicolpartext{0}}{}%
+\IfStrEq{\LWR at strresult}{B}{\LWR at multicolpartext{0}}{}%
+%    \end{macrocode}
+% \changes{v0.56}{2018/05/10}{Added \pkg{array} \texttt{W} column.}
+%    \begin{macrocode}
+\IfStrEq{\LWR at strresult}{w}{\LWR at multicolpartext{3}}{}%
+\IfStrEq{\LWR at strresult}{W}{\LWR at multicolpartext{3}}{}%
+%    \end{macrocode}
+%    \begin{macrocode}
+\IfStrEq{\LWR at strresult}{S}{\LWR at multicoltext}{}%
+\IfStrEq{\LWR at strresult}{s}{\LWR at multicoltext}{}%
+%    \end{macrocode}
+%    \begin{macrocode}
+\IfStrEq{\LWR at strresult}{X}{\LWR at multicolpartext{0}}{}%
 \IfStrEq{\LWR at strresult}{|}{\LWR at multicolskip}{}%
+\IfStrEq{\LWR at strresult}{:}{\LWR at multicolskip}{}%
+\IfStrEq{\LWR at strresult}{;}{%
+    \LWR at multicolskip%
+    \addtocounter{LWR at tablemulticolspos}{1}% skip parameter
+}{}%
 \IfStrEq{\LWR at strresult}{\detokenize{@}}{\LWR at multicolother{#1}}{}%
 \IfStrEq{\LWR at strresult}{\detokenize{!}}{\LWR at multicolother{#1}}{}%
 \IfStrEq{\LWR at strresult}{\detokenize{>}}{\LWR at multicolother{#1}}{}%
@@ -20655,8 +21179,9 @@
 %    \begin{macrocode}
 \whileboolexpr{%
     not test {%
-        \ifnumcomp{\value{LWR at tablemulticolspos}}{>}{\value{LWR at tablemulticolswidth}}%
-    }
+        \ifnumcomp{\value{LWR at tablemulticolspos}}{>}%
+            {\value{LWR at tablemulticolswidth}}%
+    }%
 }%
 {%
 %    \end{macrocode}
@@ -20677,6 +21202,8 @@
 % \subsubsection{Multicolumn factored code}
 
 % \begin{macro}{\LWR at addmulticolvertrulecolor}
+% \changes{v0.56}{2018/04/30}{Adds support for double vertical rules.}
+% \changes{v0.56}{2018/05/05}{Adds support for dashed vertical rules.}
 %    \begin{macrocode}
 \newcommand*{\LWR at addmulticolvertrulecolor}{%
 %    \end{macrocode}
@@ -20686,17 +21213,41 @@
 %    \end{macrocode}
 % Left side:
 %    \begin{macrocode}
-    \ifbool{LWR at mcolvertbarl}{%
+    \ifnumcomp{\value{LWR at mcolvertbarsl}}{=}{1}{%
         \LWR at tdaddstyle%
         border-left: 1px solid \LWR at origpound\LWR at vertruleHTMLcolor%
     }{}%
+    \ifnumcomp{\value{LWR at mcolvertbarsl}}{>}{1}{%
+        \LWR at tdaddstyle%
+        border-left: 4px double \LWR at origpound\LWR at vertruleHTMLcolor%
+    }{}%
+    \ifnumcomp{\value{LWR at mcolvertbarsldash}}{=}{1}{%
+        \LWR at tdaddstyle%
+        border-left: 1px dashed \LWR at origpound\LWR at vertruleHTMLcolor%
+    }{}%
+    \ifnumcomp{\value{LWR at mcolvertbarsldash}}{>}{1}{%
+        \LWR at tdaddstyle%
+        border-left: 2px dashed \LWR at origpound\LWR at vertruleHTMLcolor%
+    }{}%
 %    \end{macrocode}
 % Right side:
 %    \begin{macrocode}
-    \ifbool{LWR at mcolvertbarr}{%
+    \ifnumcomp{\value{LWR at mcolvertbarsr}}{=}{1}{%
         \LWR at tdaddstyle%
         border-right: 1px solid \LWR at origpound\LWR at vertruleHTMLcolor%
     }{}%
+    \ifnumcomp{\value{LWR at mcolvertbarsr}}{>}{1}{%
+        \LWR at tdaddstyle%
+        border-right: 4px double \LWR at origpound\LWR at vertruleHTMLcolor%
+    }{}%
+    \ifnumcomp{\value{LWR at mcolvertbarsrdash}}{=}{1}{%
+        \LWR at tdaddstyle%
+        border-right: 1px dashed \LWR at origpound\LWR at vertruleHTMLcolor%
+    }{}%
+    \ifnumcomp{\value{LWR at mcolvertbarsrdash}}{>}{1}{%
+        \LWR at tdaddstyle%
+        border-right: 2px dashed \LWR at origpound\LWR at vertruleHTMLcolor%
+    }{}%
 }%
 }
 %    \end{macrocode}
@@ -20769,8 +21320,11 @@
 %    \end{macrocode}
 % Print the column type and vertical bars:
 %    \begin{macrocode}
-\boolfalse{LWR at mcolvertbarl}%
-\boolfalse{LWR at mcolvertbarr}%
+\setcounter{LWR at mcolvertbarsl}{0}%
+\setcounter{LWR at mcolvertbarsr}{0}%
+\setcounter{LWR at mcolvertbarsldash}{0}%
+\setcounter{LWR at mcolvertbarsrdash}{0}%
+\setboolean{LWR at mcolvertbaronleft}{true}%
 \LWR at parsemulticolumnalignment{#5}{\LWR at printmccoltype}%
 %    \end{macrocode}
 % If this column has a cmidrule, add ``rule'' to the end of the \HTML\ class tag.
@@ -20785,13 +21339,22 @@
 % Also add vertical bar class.
 % \changes{v0.41}{2017/10/07}{Added vertical rules.}
 % \changes{v0.43}{2017/11/07}{Fix for vertical rules.}
+% \changes{v0.56}{2018/04/30}{Adds support for double vertical rules.}
+% \changes{v0.56}{2018/05/05}{Adds support for dashed vertical rules.}
 %    \begin{macrocode}
-\ifbool{LWR at mcolvertbarl}{ tvertbarl}{}%
-\ifbool{LWR at mcolvertbarr}{ tvertbarr}{}%
+\ifnumcomp{\value{LWR at mcolvertbarsl}}{=}{1}{ tvertbarl}{}%
+\ifnumcomp{\value{LWR at mcolvertbarsl}}{>}{1}{ tvertbarldouble}{}%
+\ifnumcomp{\value{LWR at mcolvertbarsr}}{=}{1}{ tvertbarr}{}%
+\ifnumcomp{\value{LWR at mcolvertbarsr}}{>}{1}{ tvertbarrdouble}{}%
+\ifnumcomp{\value{LWR at mcolvertbarsldash}}{=}{1}{ tvertbarldash}{}%
+\ifnumcomp{\value{LWR at mcolvertbarsldash}}{>}{1}{ tvertbarldoubledash}{}%
+\ifnumcomp{\value{LWR at mcolvertbarsrdash}}{=}{1}{ tvertbarrdash}{}%
+\ifnumcomp{\value{LWR at mcolvertbarsrdash}}{>}{1}{ tvertbarrdoubledash}{}%
 %    \end{macrocode}
 % Close the class tag's opening quote:
+"% NOT A TYPO
 %    \begin{macrocode}
-"%
+%
 %    \end{macrocode}
 % \changes{v0.42}{2017/10/26}{If \progcode{FormatWP} add cell alignment.}
 %    \begin{macrocode}
@@ -20803,6 +21366,7 @@
 %    \end{macrocode}
 %    \begin{macrocode}
 \LWR at addcmidrulewidth%
+\LWR at addcdashline%
 \LWR at addtabularhrulecolor%
 \LWR at addmulticolvertrulecolor%
 \LWR at addformatwpalignment{#5}%
@@ -20890,7 +21454,9 @@
 %    \end{macrocode}
 % Create the multicolumn tag:
 %    \begin{macrocode}
-\LWR at domulticolumn{\arabic{LWR at tabletotalcols}}{\arabic{LWR at tabhtmlcoltotal}}{P}%
+\LWR at domulticolumn{\arabic{LWR at tabletotalcols}}%
+    {\arabic{LWR at tabhtmlcoltotal}}%
+    {P}%
 {% \LWR at domulticolumn
 \IfBooleanTF{#1}% star?
 %    \end{macrocode}
@@ -21328,58 +21894,97 @@
 %    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\mcolrowcell}%
     {\let\mynext\LWR at donothing}{}%
-%
+%    \end{macrocode}
+%    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\TabularMacro}%
     {\let\mynext\LWR at donothing}{}%
-%
+%    \end{macrocode}
+%    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\hline}%
     {\let\mynext\LWR at donothing}{}%
-%
+%    \end{macrocode}
+%    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\firsthline}%
     {\let\mynext\LWR at donothing}{}%
-%
+%    \end{macrocode}
+%    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\lasthline}%
     {\let\mynext\LWR at donothing}{}%
-%
+%    \end{macrocode}
+%    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\toprule}%
     {\let\mynext\LWR at donothing}{}%
-%
+%    \end{macrocode}
+%    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\midrule}%
     {\let\mynext\LWR at donothing}{}%
-%
+%    \end{macrocode}
+%    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\cmidrule}%
     {\let\mynext\LWR at donothing}{}%
-%
+%    \end{macrocode}
+% \changes{v0.56}{2018/05/02}{Fix: \cs{morecmidrules}}
+%    \begin{macrocode}
+\ifdefequal{\LWR at mynexttoken}{\morecmidrules}%
+    {\let\mynext\LWR at donothing}{}%
+%    \end{macrocode}
+%    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\specialrule}%
     {\let\mynext\LWR at donothing}{}%
-%
+%    \end{macrocode}
+%    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\cline}%
     {\let\mynext\LWR at donothing}{}%
-%
+%    \end{macrocode}
+%    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\bottomrule}%
     {\let\mynext\LWR at donothing}{}%
-%
+%    \end{macrocode}
+%    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\rowcolor}%
     {\let\mynext\LWR at donothing}{}%
-%
+%    \end{macrocode}
+%    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\arrayrulecolor}%
     {\let\mynext\LWR at donothing}{}%
-%
+%    \end{macrocode}
+%    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\doublerulesepcolor}%
     {\let\mynext\LWR at donothing}{}%
-%
+%    \end{macrocode}
+%    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\warpprintonly}%
     {\let\mynext\LWR at donothing}{}%
-%
+%    \end{macrocode}
+%    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\warpHTMLonly}%
     {\let\mynext\LWR at donothing}{}%
-%
+%    \end{macrocode}
+%    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\ldelim}%
     {\let\mynext\LWR at donothing}{}%
-%
+%    \end{macrocode}
+%    \begin{macrocode}
 \ifdefequal{\LWR at mynexttoken}{\rdelim}%
     {\let\mynext\LWR at donothing}{}%
 %    \end{macrocode}
+% For \pkg{arydshln}:
+%    \begin{macrocode}
+\ifdefequal{\LWR at mynexttoken}{\hdashline}%
+    {\let\mynext\LWR at donothing}{}%
+%    \end{macrocode}
+%    \begin{macrocode}
+\ifdefequal{\LWR at mynexttoken}{\cdashline}%
+    {\let\mynext\LWR at donothing}{}%
+%    \end{macrocode}
+%    \begin{macrocode}
+\ifdefequal{\LWR at mynexttoken}{\firsthdashline}%
+    {\let\mynext\LWR at donothing}{}%
+%    \end{macrocode}
+%    \begin{macrocode}
+\ifdefequal{\LWR at mynexttoken}{\lasthdashline}%
+    {\let\mynext\LWR at donothing}{}%
+%    \end{macrocode}
 % Ignore an empty line between rows:
 % \changes{v0.45}{2017/12/06}{Fix: Empty line between rows.}
 %    \begin{macrocode}
@@ -21386,8 +21991,9 @@
 \ifdefequal{\LWR at mynexttoken}{\par}%
     {\let\mynext\LWR at donothing}{}%
 %    \end{macrocode}
-% no action for an \cs{end} token
 %
+% No action for an \cs{end} token.
+%
 % Add similar to the above for any other non-data tokens
 % which might appear in the table.
 %
@@ -21452,7 +22058,7 @@
 
 
 
-% \subsection{New \env{tabular} environment}
+% \subsection{HTML \env{tabular} environment}
 
 % \codehtml
 %    \begin{macrocode}
@@ -21507,7 +22113,7 @@
 \newcommand*{\LWR at HTMLhline}[1][]{%
     \ifbool{FormatWP}%
     {\LWR at docmidrule{1-\arabic{LWR at tabletotalcols}}}%
-    {\booltrue{LWR at doinghline}}%
+    {\addtocounter{LWR at hlines}{1}}%
     \LWR at getmynexttoken}%
 }
 {
@@ -21514,7 +22120,7 @@
 \newcommand*{\LWR at HTMLhline}{%
     \ifbool{FormatWP}%
     {\LWR at docmidrule{1-\arabic{LWR at tabletotalcols}}}%
-    {\booltrue{LWR at doinghline}}%
+    {\addtocounter{LWR at hlines}{1}}%
     \LWR at getmynexttoken}%
 }
 }% AtBeginDocument
@@ -21577,7 +22183,8 @@
 %    \end{macrocode}
 % Not yet doing any rules:
 %    \begin{macrocode}
-\global\boolfalse{LWR at doinghline}%
+\setcounter{LWR at hlines}{0}%
+\setcounter{LWR at hdashedlines}{0}%
 \global\boolfalse{LWR at doingtbrule}%
 \global\boolfalse{LWR at doingcmidrule}%
 %    \end{macrocode}
@@ -21679,7 +22286,8 @@
                 {\booltrue{LWR at doingtbrule}}%
             }%
     \LWR at getmynexttoken}%
-%
+%    \end{macrocode}
+%    \begin{macrocode}
 \DeclareDocumentCommand{\midrule}{o d()}%
     {%
         \IfValueTF{##1}%
@@ -21687,29 +22295,67 @@
             {%
                 \ifbool{FormatWP}%
                 {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
-                {\booltrue{LWR at doinghline}}%
+                {\addtocounter{LWR at hlines}{1}}%
             }%
     \LWR at getmynexttoken}%
-%
-\DeclareDocumentCommand{\cmidrule}{O{\LWR at cmidrulewidth} d() m}%
-{\LWR at docmidrule[##1](##2){##3}\LWR at getmynexttoken}%
-%
-\DeclareDocumentCommand{\bottomrule}{o d()}%
-    {%
-        \IfValueTF{##1}%
+%    \end{macrocode}
+%    \begin{macrocode}
+\DeclareDocumentCommand{\cmidrule}{O{\LWR at cmidrulewidth} d() m}{%
+    \LWR at docmidrule[##1](##2){##3}%
+    \LWR at getmynexttoken%
+}%
+%    \end{macrocode}
+%    \begin{macrocode}
+\DeclareDocumentCommand{\bottomrule}{o d()}{%
+    \IfValueTF{##1}%
+        {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
+        {%
+            \ifbool{FormatWP}%
             {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
-            {%
-                \ifbool{FormatWP}%
-                {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
-                {\booltrue{LWR at doingtbrule}}%
-            }%
-    \LWR at getmynexttoken}%
-%
+            {\booltrue{LWR at doingtbrule}}%
+        }%
+    \LWR at getmynexttoken%
+}%
+%    \end{macrocode}
+%    \begin{macrocode}
 \DeclareDocumentCommand{\addlinespace}{o}{}%
+%    \end{macrocode}
+%    \begin{macrocode}
 \DeclareDocumentCommand{\morecmidrules}{}{}%
+%    \end{macrocode}
+%    \begin{macrocode}
 \DeclareDocumentCommand{\specialrule}{m m m d()}%
     {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}\LWR at getmynexttoken}%
 %    \end{macrocode}
+%    \begin{macrocode}
+\DeclareDocumentCommand{\hdashline}{o}{%
+    \ifbool{FormatWP}%
+        {\LWR at docdashline{1-\arabic{LWR at tabletotalcols}}}%
+        {\addtocounter{LWR at hdashedlines}{1}}%
+    \LWR at getmynexttoken%
+}%
+%    \end{macrocode}
+%    \begin{macrocode}
+\DeclareDocumentCommand{\cdashline}{m}{%
+    \LWR at docdashline{##1}\LWR at getmynexttoken%
+}%
+%    \end{macrocode}
+%    \begin{macrocode}
+\DeclareDocumentCommand{\firsthdashline}{o}{%
+    \ifbool{FormatWP}%
+        {\LWR at docdashline{1-\arabic{LWR at tabletotalcols}}}%
+        {\addtocounter{LWR at hdashedlines}{1}}%
+    \LWR at getmynexttoken%
+}%
+%    \end{macrocode}
+%    \begin{macrocode}
+\DeclareDocumentCommand{\lasthdashline}{o}{%
+    \ifbool{FormatWP}%
+        {\LWR at docdashline{1-\arabic{LWR at tabletotalcols}}}%
+        {\addtocounter{LWR at hdashedlines}{1}}%
+    \LWR at getmynexttoken%
+}%
+%    \end{macrocode}
 % The following create data cells and will have no more data in this cell,
 % so we do not want to look ahead for a possible data cell,
 % so do not want to use \cs{LWR at getmynexttoken}.
@@ -23040,30 +23686,17 @@
 \IfFileExists{\jobname.#1}{%
 \LWR at traceinfo{LWR at myshorttoc: loading}%
 %    \end{macrocode}
-% Make |@| a regular letter.
+%
 % Many of the commands in the file will have |@| characters in them, so |@|
 % \watchout
 % must be made a regular letter.
-%
-% ^^A *88*
-% ^^A For \prog{pdflatex}, also change to |latin1| encoding.
-% ^^A When reading back a file with accented characters,
-% ^^A \watchout[disabled]
-% ^^A the encoding change seems to be required, rather than leaving it |utf8|.
 %    \begin{macrocode}
 \begingroup%
-%    \end{macrocode}
-% ^^A \ifxetexorluatex%
-% ^^A \else
-% ^^A \inputencoding{latin1}% currently disabled
-% ^^A \fi
-%    \begin{macrocode}
 \makeatletter%
 %    \end{macrocode}
 % Read in the \TOC\ file:
 %    \begin{macrocode}
 \@input{\jobname.#1}%
-% \makeatother
 \endgroup%
 }%
 {}%
@@ -23809,7 +24442,7 @@
 \RenewDocumentCommand{\InlineClass}{o m +m}{##3}%
 \RenewDocumentEnvironment{BlockClass}{o m}{}{}%
 \renewcommand{\BlockClassSingle}[2]{##2}%
-\LetLtxMacro{\hspace}{\LWR at orighspace}%
+\LetLtxMacro\hspace\LWR at orighspace%
 %    \end{macrocode}
 % \changes{v0.48}{2018/02/04}{Fix: Spacing in \SVG\ math, \env{lateximage}, \tikz.}
 %    \begin{macrocode}
@@ -23832,6 +24465,7 @@
 %    \end{macrocode}
 %    \begin{macrocode}
 \let\,\LWR at origcomma% disable HTML short unbreakable space
+\let\thinspace\LWR at origthinspace% disable HTML short unbreakable space
 \let\textellipsis\LWR at origtextellipsis%
 \let\textless\LWR at origtextless%
 \let\textgreater\LWR at origtextgreater%
@@ -23893,7 +24527,7 @@
 \LetLtxMacro\mbox\LWR at origmbox%
 %    \end{macrocode}
 %    \begin{macrocode}
-\let\makebox\LWR at origmakebox%
+\LetLtxMacro\makebox\LWR at origmakebox%
 \let\fbox\LWRprint at fbox%
 \let\fboxBlock\LWRprint at fbox%
 \LetLtxMacro\fminipage\LWRprint at fminipage%
@@ -27802,19 +28436,35 @@
 % Prints the text with the current font choices.
 %
 % \changes{v0.48}{2018/02/02}{Added.  Improves font control.}
+% \changes{v0.56}{2018/04/27}{Added \attribute{span.textbf}, etc.}
 %    \begin{macrocode}
 \newcommand*{\LWR at textcurrentfont}[1]{%
-\csuse{text\LWR at f@family}{%
-\csuse{text\LWR at f@series}{%
-\csuse{text\LWR at f@shape}{%
-#1%
-}%
-}%
-}%
+\InlineClass{%
+        text\LWR at f@family\LWR at origtilde{}%
+        text\LWR at f@series\LWR at origtilde{}%
+        text\LWR at f@shape%
+    }%
+    {#1}%
 }
 %    \end{macrocode}
 % \end{macro}
 
+% \begin{environment}{LWR at blocktextcurrentfont}
+%
+% Prints the contents with the current font choices.
+%
+% \changes{v0.56}{2018/05/09}{Added \attribute{div.textbf}, etc.}
+%    \begin{macrocode}
+\newenvironment*{LWR at blocktextcurrentfont}{%
+\BlockClass{%
+        text\LWR at f@family\LWR at origtilde{}%
+        text\LWR at f@series\LWR at origtilde{}%
+        text\LWR at f@shape%
+    }%
+}{\endBlockClass}
+%    \end{macrocode}
+% \end{environment}
+
 % \changes{v0.48}{2018/02/02}{Improved font control.}
 % \changes{v0.50}{2018/02/20}{Robustify macros.}
 %
@@ -28034,9 +28684,11 @@
 % |\,| must be redefined after |\RequirePackage{printlen}|
 
 % \changes{v0.45}{2017/12/29}{Improved: Robust \cs{\,}, \cs{~}, and \cs{textellipsis} commands.}
+% \changes{v0.56}{2018/05/09}{Added \cs{thinspace}.}
 % Direct-formatting space commands become \HTML\ entities:
 %    \begin{macrocode}
 \renewrobustcmd*{\,}{\HTMLunicode{202f}}	% HTML thin non-breakable space
+\renewrobustcmd*{\thinspace}{\HTMLunicode{202f}}    % HTML thin non-breakable space
 %    \end{macrocode}
 % ^^A \renewcommand*{\,}{\HTMLunicode{2009}}	% HTML thin wrappable space
 % ^^A \renewcommand*{\,}{\HTMLentity{nbsp}}	% regular-width non-breakable space
@@ -28309,7 +28961,7 @@
 %
 % Handles special minipage \& horizontal space interactions.
 %    \begin{macrocode}
-\LetLtxMacro{\hspace}{\LWR at hspace}
+\LetLtxMacro\hspace\LWR at hspace
 %    \end{macrocode}
 % \end{macro}
 
@@ -29983,8 +30635,129 @@
 %
 %
 %
+% \iffalse
+%<*arydshln>
+% \fi
 %
+% \part{lwarp-arydshln.sty}
+
+% \section{arydshln}
+%
+% \credits{Hiroshi Nakashima}
+%
+% \DescribePackage{arydshln}
+% \pkg{arydshln} heavily patches tabular code, so the
+% actual package is not used.
+% \pkg{arydshln} is emulated for \HTML\ \env{tabular},
+% and reverts to solid rules for \SVG\ math \env{array}
+% and \env{tabular} in a \env{lateximage}.
+%
+% CSS is not able to display a double-dashed border, so
+% a single-dashed rule is displayed as a single-dashed border, and
+% a double-dashed rule is displayed as a thicker single-dashed border.
+%
+% \changes{v0.56}{2018/05/02}{\pkg{arydshln}: Added.}
+%
+% \codehtml
+%
+% \pkg{array} is required to allow \cs{newcolumn} below.
+%    \begin{macrocode}
+\RequirePackage{array}
+%    \end{macrocode}
+%    \begin{macrocode}
+\LWR at ProvidesPackageDrop{arydshln}
+%    \end{macrocode}
+%
+% Ignored, but included for source compatibility:
+%    \begin{macrocode}
+\newdimen\dashlinedash \dashlinedash4pt %
+\newdimen\dashlinegap \dashlinegap4pt %
+\let\hdashlinewidth\dashlinedash
+\let\hdashlinegap\dashlinegap
+
+\def\ADLnullwide{}
+\def\ADLsomewide{}
+\def\ADLnullwidehline{}
+\def\ADLsomewidehline{}
+
+\def\ADLactivate{}
+\def\ADLinactivate{}
+\newcommand*{\ADLdrawingmode}[1]{}
+\newcommand*{\ADLnoshorthanded}{}
+\newcommand*{\dashgapcolor}[2][]{}
+\newcommand*{\nodashgapcolor}{}
+%    \end{macrocode}
+%
+% In a \env{lateximage}, revert to solid vertical rules:
+%    \begin{macrocode}
+\appto\LWR at restoreorigformatting{
+\newcolumntype{:}{|}%
+\newcolumntype{;}[1]{|}%
+\LetLtxMacro\hdashline\hline%
+}
+%    \end{macrocode}
+%
+%
+% Some of these macros are already defined as temporary placeholders in the
+% \pkg{lwarp} core, so they must be redefined here.
+%
+% The emulated defaults also work for an emulated print mode inside a \env{lateximage}:
+%    \begin{macrocode}
+\def\hdashline{
+%     \adl at hdashline\adl at ihdashline
+    \adl at hdashline\adl at inactivehdl
+}
+\def\adl at hdashline#1{\noalign{\ifnum0=`}\fi
+%         \ifadl at zwhrule \vskip-\arrayrulewidth
+%         \else
+%             \adl at hline\adl at connect\arrayrulewidth
+                \hrule \@height \arrayrulewidth% lwarp
+%         \fi
+        \@ifnextchar[%]
+                     {#1}%
+                     {#1[%
+%                          \dashlinedash/\dashlinegap
+                        1pt/1pt
+                     ]}}
+% \def\adl at ihdashline[#1/#2]{\ifnum0=`{\fi}%
+%         \multispan{\adl at columns}\unskip \adl at hcline\z@[#1/#2]%
+%         \noalign{\ifnum0=`}\fi
+%         \futurelet\@tempa\adl at xhline}
+\def\adl at inactivehdl[#1/#2]{
+%         \ifadl at zwhrule \vskip-\arrayrulewidth \fi
+        \hrule\@height\arrayrulewidth
+        \futurelet\@tempa\adl at xhline}
+\def\adl at xhline{\ifx\@tempa\hline \adl at ixhline\fi
+        \ifx\@tempa\hdashline \adl at ixhline\fi
+        \ifnum0=`{\fi}}
+\def\adl at ixhline{\vskip\doublerulesep \adl at hline\relax\doublerulesep}
+\def\adl at hline#1#2{%
+% \@tempcnta#2
+%         \global\advance\adl at totalheight\@tempcnta
+%         \xdef\adl at rowsL{\adl at rowsL
+%                 (#1/\number\@tempcnta);}%
+%         \xdef\adl at rowsR{\adl at rowsR
+%                 (#1/\number\@tempcnta);}
+}
+
+\def\cdashline#1{\noalign{\ifnum0=`}\fi
+        \@ifnextchar[%]
+%                      {\adl at cdline[#1]}%
+%                      {\adl at cdline[#1][\dashlinedash/\dashlinegap]}
+                     {\adl at inactivecdl[#1]}%
+                     {\adl at inactivecdl[#1][\dashlinedash/\dashlinegap]}
+}
+
+\def\adl at inactivecdl[#1-#2][#3]{\ifnum0=`{\fi}\cline{#1-#2}}
+%    \end{macrocode}
+
 % \iffalse
+%</arydshln>
+% \fi
+%
+%
+%
+% \iffalse
 %<*atbegshi>
 % \fi
 %
@@ -35139,8 +35912,7 @@
 %
 % Float styles are ignored.
 %    \begin{macrocode}
-\newcommand{\floatstyle}[1]{%
-}
+\newcommand{\floatstyle}[1]{}
 %    \end{macrocode}
 % \end{noindmacro}
 
@@ -39373,8 +40145,37 @@
 %
 %
 %
+% \iffalse
+%<*lua-check-hyphen>
+% \fi
 %
+% \part{lwarp-lua-check-hyphen.sty}
+%
+% \section{lua-check-hyphen}
+%
+% \DescribePackage{lua-check-hyphen}
+% \pkg{lua-check-hyphen} is ignored.
+%
+% \changes{v0.56}{2018/04/26}{\pkg{lua-check-hyphen}: Added.}
+%
+% \codehtml
+%
+%    \begin{macrocode}
+\LWR at ProvidesPackageDrop{lua-check-hyphen}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\newcommand*{\LuaCheckHyphen}[1]{}
+%    \end{macrocode}
+%
 % \iffalse
+%</lua-check-hyphen>
+% \fi
+%
+%
+%
+%
+% \iffalse
 %<*luacolor>
 % \fi
 %
@@ -39905,7 +40706,7 @@
 % \env{mdframed} environment may not work with the \HTML\ versions of the following,
 % so restore them to their originals while inside \env{mdframed}:
 %    \begin{macrocode}
-\LetLtxMacro{\hspace}{\LWR at orighspace}%
+\LetLtxMacro\hspace\LWR at orighspace%
 \LetLtxMacro\rule\LWR at origrule%
 \LetLtxMacro\makebox\LWR at origmakebox%
 \LWR at startpars%
@@ -41067,6 +41868,7 @@
 %    \begin{macrocode}
 \LWR at tdstartstyles%
 \LWR at addcmidrulewidth%
+\LWR at addcdashline%
 \LWR at addtabularrulecolors%
 \LWR at tdendstyles%
 }%
@@ -42414,6 +43216,8 @@
 % \pkg{paralist} is supported with minor changes.
 
 % \changes{v0.34}{2017/07/27}{\pkg{paralist}: Added.}
+% \changes{v0.56}{2018/05/06}{\pkg{paralist}: Fixes for
+%   \env{compactenum}, \env{compactitem}, \env{compactdesc}.}
 %
 % \codehtml
 %    \begin{macrocode}
@@ -42422,12 +43226,12 @@
 %
 % The compact environments are identical to the regular ones:
 %    \begin{macrocode}
-\AtBeginEnvironment{compactitem}{\LWR at itemizestart}
-\AtBeginEnvironment{compactenum}{\LWR at enumeratestart}
-\AtBeginEnvironment{compactdesc}{\LWR at descriptionstart}
-\AtEndEnvironment{compactitem}{\LWR at listend}
-\AtEndEnvironment{compactenum}{\LWR at listend}
-\AtEndEnvironment{compactdesc}{\LWR at listend}
+\LetLtxMacro\compactitem\itemize
+\LetLtxMacro\compactenum\enumerate
+\LetLtxMacro\compactdesc\description
+\LetLtxMacro\endcompactitem\enditemize
+\LetLtxMacro\endcompactenum\endenumerate
+\LetLtxMacro\endcompactdesc\enddescription
 %    \end{macrocode}
 %
 % For the inline environments, revert \cs{item} to its original print-mode version:
@@ -42450,9 +43254,82 @@
 %
 %
 %
+% \iffalse
+%<*parnotes>
+% \fi
 %
+% \part{lwarp-parnotes.sty}
 %
+% \section{parnotes}
+%
+% \credits{Chelsea Hughes}
+%
+% \DescribePackage{parnotes}
+% \pkg{parnotes} is supported with some patches.
+%
+% \changes{v0.56}{2018/05/08}{\pkg{parnotes}: Added.}
+%
+% \codehtml
+%
+%    \begin{macrocode}
+\LWR at ProvidesPackagePass{parnotes}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\long\def\PN at parnote@real#1#2{%
+    \parnotemark{#1}%
+    % Unless this is the first parnote in \PN at text, add a separator first
+    \unless\ifx\PN at text\@empty\g at addto@macro\PN at text{\parnoteintercmd}\fi
+    % Redefine \@currentlabel to the parnote label, so \label works
+    \g at addto@macro\PN at text{%
+%         \phantomsection%
+        \def\@currentlabel{#1}%
+        \def\cref at currentlabel{%        lwarp
+            [parnotemark][\arabic{parnotemark}][]\theparnotemark%
+        }%
+    }%
+    \g at addto@macro\PN at text{%
+        \LWR at textcurrentfont{%          lwarp
+            \parnotemark{#1}\nolinebreak\thinspace#2%
+        }%
+    }%
+}
+
+\def\PN at parnotes@real{%
+    % We call \par later, so this avoids recursion with \PN at parnotes@auto
+    \PN at inparnotestrue
+    \unless\ifvmode\par\fi
+    % Avoid page breaks between a paragraph and its parnotes
+    \nopagebreak\addvspace{\parnotevskip}%
+    \LWR at forcenewpage%                  lwarp
+    \begin{BlockClass}{footnotes}%      lwarp
+    {\parnotefmt{\PN at text}\par}%
+    \end{BlockClass}%                   lwarp
+    \global\def\PN at text{}%
+    \addvspace{\parnotevskip}%
+    %
+    % These can be enabled or disabled by package options
+    %
+    \PN at disable@indent
+    \PN at reset@optional
+    \PN at inparnotesfalse
+}
+
+\AtBeginDocument{
+\crefname{parnotemark}{paragraph note}{paragraph notes}
+\Crefname{parnotemark}{Paragraph note}{Paragraph notes}
+}
+%    \end{macrocode}
+%
 % \iffalse
+%</parnotes>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
 %<*parskip>
 % \fi
 
@@ -42910,8 +43787,55 @@
 %
 %
 %
+% \iffalse
+%<*quoting>
+% \fi
 %
+% \part{lwarp-quoting.sty}
+
+% \section{quoting}
+%
+% \credits{Thomas Titz}
+%
+% \DescribePackage{quoting}
+% \pkg{quoting} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.56}{2018/05/09}{\pkg{quoting}: Added.}
+%
+% \codehtml
+%
+%    \begin{macrocode}
+\LWR at ProvidesPackagePass{quoting}
+%    \end{macrocode}
+
+%    \begin{macrocode}
+\xpatchcmd{\quoting}{\quo at begintext}
+    {\begin{LWR at blocktextcurrentfont}\quo at begintext}
+    {}
+    {
+        \PackageError{lwarp}
+        {Unable to patch the quoting package}
+        {Please contact the author of lwarp.}
+    }
+\xpatchcmd{\endquoting}{\quo at endtext}
+    {\quo at endtext\end{LWR at blocktextcurrentfont}}
+    {}
+    {
+        \PackageError{lwarp}
+        {Unable to patch the quoting package}
+        {Please contact the author of lwarp.}
+    }
+%    \end{macrocode}
+
 % \iffalse
+%</quoting>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
 %<*ragged2e>
 % \fi
 %
@@ -47327,10 +48251,39 @@
 %
 %
 %
+% \iffalse
+%<*tocenter>
+% \fi
 %
+% \part{lwarp-tocenter.sty}
 %
+% \section{tocenter}
 %
+% \DescribePackage{tocenter}
+% \pkg{tocenter} is ignored.
+%
+% \changes{v0.56}{2018/04/26}{\pkg{tocenter}: Added.}
+%
+% \codehtml
+%
+%    \begin{macrocode}
+\LWR at ProvidesPackageDrop{tocenter}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\NewDocumentCommand{\ToCenter}{s o m m}{}
+\NewDocumentCommand{\FromMargins}{s o m m m m}{}
+%    \end{macrocode}
+%
 % \iffalse
+%</tocenter>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
 %<*tocloft>
 % \fi
 
@@ -48278,7 +49231,7 @@
     {%
         text-decoration:underline;%
         text-decoration-skip: auto;%
-        text-decoration-style:dotted%
+        text-decoration-style: dotted%
     }%
     {dotuline}{#1}%
 }
@@ -48333,9 +49286,34 @@
 %
 %
 %
+% \iffalse
+%<*underscore>
+% \fi
 %
+% \part{lwarp-underscore.sty}
 %
+% \section{underscore}
+%
+% \DescribePackage{underscore}
+% \pkg{underscore} is ignored.
+%
+% \changes{v0.56}{2018/05/09}{\pkg{underscore}: Added.}
+%
+% \codehtml
+%
+%    \begin{macrocode}
+\LWR at ProvidesPackageDrop{underscore}
+%    \end{macrocode}
+%
 % \iffalse
+%</underscore>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
 %<*upref>
 % \fi
 %

Modified: trunk/Master/texmf-dist/source/latex/lwarp/lwarp.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/lwarp/lwarp.ins	2018-05-12 21:24:16 UTC (rev 47694)
+++ trunk/Master/texmf-dist/source/latex/lwarp/lwarp.ins	2018-05-12 21:24:56 UTC (rev 47695)
@@ -52,6 +52,7 @@
 \file{lwarp-appendix.sty}{\from{lwarp.dtx}{appendix}}
 \file{lwarp-arabicfront.sty}{\from{lwarp.dtx}{arabicfront}}
 \file{lwarp-array.sty}{\from{lwarp.dtx}{array}}
+\file{lwarp-arydshln.sty}{\from{lwarp.dtx}{arydshln}}
 \file{lwarp-atbegshi.sty}{\from{lwarp.dtx}{atbegshi}}
 \file{lwarp-authblk.sty}{\from{lwarp.dtx}{authblk}}
 \file{lwarp-axodraw2.sty}{\from{lwarp.dtx}{axodraw2}}
@@ -174,6 +175,7 @@
 \file{lwarp-ltcaption.sty}{\from{lwarp.dtx}{ltcaption}}
 \file{lwarp-ltxgrid.sty}{\from{lwarp.dtx}{ltxgrid}}
 \file{lwarp-ltxtable.sty}{\from{lwarp.dtx}{ltxtable}}
+\file{lwarp-lua-check-hyphen.sty}{\from{lwarp.dtx}{lua-check-hyphen}}
 \file{lwarp-luacolor.sty}{\from{lwarp.dtx}{luacolor}}
 \file{lwarp-luatodonotes.sty}{\from{lwarp.dtx}{luatodonotes}}
 \file{lwarp-magaz.sty}{\from{lwarp.dtx}{magaz}}
@@ -212,6 +214,7 @@
 \file{lwarp-pagenote.sty}{\from{lwarp.dtx}{pagenote}}
 \file{lwarp-pagesel.sty}{\from{lwarp.dtx}{pagesel}}
 \file{lwarp-paralist.sty}{\from{lwarp.dtx}{paralist}}
+\file{lwarp-parnotes.sty}{\from{lwarp.dtx}{parnotes}}
 \file{lwarp-parskip.sty}{\from{lwarp.dtx}{parskip}}
 \file{lwarp-pbox.sty}{\from{lwarp.dtx}{pbox}}
 \file{lwarp-pdfrender.sty}{\from{lwarp.dtx}{pdfrender}}
@@ -224,6 +227,7 @@
 \file{lwarp-prettyref.sty}{\from{lwarp.dtx}{prettyref}}
 \file{lwarp-preview.sty}{\from{lwarp.dtx}{preview}}
 \file{lwarp-quotchap.sty}{\from{lwarp.dtx}{quotchap}}
+\file{lwarp-quoting.sty}{\from{lwarp.dtx}{quoting}}
 \file{lwarp-ragged2e.sty}{\from{lwarp.dtx}{ragged2e}}
 \file{lwarp-realscripts.sty}{\from{lwarp.dtx}{realscripts}}
 \file{lwarp-relsize.sty}{\from{lwarp.dtx}{relsize}}
@@ -277,6 +281,7 @@
 \file{lwarp-titling.sty}{\from{lwarp.dtx}{titling}}
 \file{lwarp-tocbasic.sty}{\from{lwarp.dtx}{tocbasic}}
 \file{lwarp-tocbibind.sty}{\from{lwarp.dtx}{tocbibind}}
+\file{lwarp-tocenter.sty}{\from{lwarp.dtx}{tocenter}}
 \file{lwarp-tocloft.sty}{\from{lwarp.dtx}{tocloft}}
 \file{lwarp-tocstyle.sty}{\from{lwarp.dtx}{tocstyle}}
 \file{lwarp-todo.sty}{\from{lwarp.dtx}{todo}}
@@ -286,6 +291,7 @@
 \file{lwarp-turnthepage.sty}{\from{lwarp.dtx}{turnthepage}}
 \file{lwarp-typearea.sty}{\from{lwarp.dtx}{typearea}}
 \file{lwarp-ulem.sty}{\from{lwarp.dtx}{ulem}}
+\file{lwarp-underscore.sty}{\from{lwarp.dtx}{underscore}}
 \file{lwarp-upref.sty}{\from{lwarp.dtx}{upref}}
 \file{lwarp-url.sty}{\from{lwarp.dtx}{url}}
 \file{lwarp-verse.sty}{\from{lwarp.dtx}{verse}}

Added: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-arydshln.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-arydshln.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-arydshln.sty	2018-05-12 21:24:56 UTC (rev 47695)
@@ -0,0 +1,72 @@
+%%
+%% This is file `lwarp-arydshln.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% lwarp.dtx  (with options: `arydshln')
+%% This is a generated file.
+%% Copyright 2016-2018 Brian Dunn
+%% 
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%   http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+
+\RequirePackage{array}
+\LWR at ProvidesPackageDrop{arydshln}
+\newdimen\dashlinedash \dashlinedash4pt %
+\newdimen\dashlinegap \dashlinegap4pt %
+\let\hdashlinewidth\dashlinedash
+\let\hdashlinegap\dashlinegap
+
+\def\ADLnullwide{}
+\def\ADLsomewide{}
+\def\ADLnullwidehline{}
+\def\ADLsomewidehline{}
+
+\def\ADLactivate{}
+\def\ADLinactivate{}
+\newcommand*{\ADLdrawingmode}[1]{}
+\newcommand*{\ADLnoshorthanded}{}
+\newcommand*{\dashgapcolor}[2][]{}
+\newcommand*{\nodashgapcolor}{}
+\appto\LWR at restoreorigformatting{
+\newcolumntype{:}{|}%
+\newcolumntype{;}[1]{|}%
+\LetLtxMacro\hdashline\hline%
+}
+\def\hdashline{
+    \adl at hdashline\adl at inactivehdl
+}
+\def\adl at hdashline#1{\noalign{\ifnum0=`}\fi
+                \hrule \@height \arrayrulewidth% lwarp
+        \@ifnextchar[%]
+                     {#1}%
+                     {#1[%
+                        1pt/1pt
+                     ]}}
+\def\adl at inactivehdl[#1/#2]{
+        \hrule\@height\arrayrulewidth
+        \futurelet\@tempa\adl at xhline}
+\def\adl at xhline{\ifx\@tempa\hline \adl at ixhline\fi
+        \ifx\@tempa\hdashline \adl at ixhline\fi
+        \ifnum0=`{\fi}}
+\def\adl at ixhline{\vskip\doublerulesep \adl at hline\relax\doublerulesep}
+\def\adl at hline#1#2{%
+}
+
+\def\cdashline#1{\noalign{\ifnum0=`}\fi
+        \@ifnextchar[%]
+                     {\adl at inactivecdl[#1]}%
+                     {\adl at inactivecdl[#1][\dashlinedash/\dashlinegap]}
+}
+
+\def\adl at inactivecdl[#1-#2][#3]{\ifnum0=`{\fi}\cline{#1-#2}}
+
+\endinput
+%%
+%% End of file `lwarp-arydshln.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-arydshln.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-float.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-float.sty	2018-05-12 21:24:16 UTC (rev 47694)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-float.sty	2018-05-12 21:24:56 UTC (rev 47695)
@@ -36,8 +36,7 @@
 \SetupFloatingEnvironment{#1}{placement=#2}%
 }
 
-\newcommand{\floatstyle}[1]{%
-}
+\newcommand{\floatstyle}[1]{}
 
 \NewDocumentCommand{\restylefloat}{s m}{%
 }

Added: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-lua-check-hyphen.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-lua-check-hyphen.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-lua-check-hyphen.sty	2018-05-12 21:24:56 UTC (rev 47695)
@@ -0,0 +1,22 @@
+%%
+%% This is file `lwarp-lua-check-hyphen.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% lwarp.dtx  (with options: `lua-check-hyphen')
+%% This is a generated file.
+%% Copyright 2016-2018 Brian Dunn
+%% 
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%   http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+\LWR at ProvidesPackageDrop{lua-check-hyphen}
+\newcommand*{\LuaCheckHyphen}[1]{}
+\endinput
+%%
+%% End of file `lwarp-lua-check-hyphen.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-lua-check-hyphen.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-mdframed.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-mdframed.sty	2018-05-12 21:24:16 UTC (rev 47694)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-mdframed.sty	2018-05-12 21:24:56 UTC (rev 47695)
@@ -68,7 +68,7 @@
 {box-shadow: none ;}
 \LWR at orignewline
 "}
-\LetLtxMacro{\hspace}{\LWR at orighspace}%
+\LetLtxMacro\hspace\LWR at orighspace%
 \LetLtxMacro\rule\LWR at origrule%
 \LetLtxMacro\makebox\LWR at origmakebox%
 \LWR at startpars%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-multirow.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-multirow.sty	2018-05-12 21:24:16 UTC (rev 47694)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-multirow.sty	2018-05-12 21:24:56 UTC (rev 47695)
@@ -42,6 +42,7 @@
 "%
 \LWR at tdstartstyles%
 \LWR at addcmidrulewidth%
+\LWR at addcdashline%
 \LWR at addtabularrulecolors%
 \LWR at tdendstyles%
 }%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-paralist.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-paralist.sty	2018-05-12 21:24:16 UTC (rev 47694)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-paralist.sty	2018-05-12 21:24:56 UTC (rev 47695)
@@ -17,12 +17,12 @@
 %% version 2005/12/01 or later.
 
 \LWR at ProvidesPackagePass{paralist}
-\AtBeginEnvironment{compactitem}{\LWR at itemizestart}
-\AtBeginEnvironment{compactenum}{\LWR at enumeratestart}
-\AtBeginEnvironment{compactdesc}{\LWR at descriptionstart}
-\AtEndEnvironment{compactitem}{\LWR at listend}
-\AtEndEnvironment{compactenum}{\LWR at listend}
-\AtEndEnvironment{compactdesc}{\LWR at listend}
+\LetLtxMacro\compactitem\itemize
+\LetLtxMacro\compactenum\enumerate
+\LetLtxMacro\compactdesc\description
+\LetLtxMacro\endcompactitem\enditemize
+\LetLtxMacro\endcompactenum\endenumerate
+\LetLtxMacro\endcompactdesc\enddescription
 \AtBeginEnvironment{inparaitem}{\LetLtxMacro\item\LWR at origitem}
 \AtBeginEnvironment{inparaenum}{\LetLtxMacro\item\LWR at origitem}
 \AtBeginEnvironment{inparadesc}{\LetLtxMacro\item\LWR at origitem}

Added: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-parnotes.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-parnotes.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-parnotes.sty	2018-05-12 21:24:56 UTC (rev 47695)
@@ -0,0 +1,63 @@
+%%
+%% This is file `lwarp-parnotes.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% lwarp.dtx  (with options: `parnotes')
+%% This is a generated file.
+%% Copyright 2016-2018 Brian Dunn
+%% 
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%   http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+\LWR at ProvidesPackagePass{parnotes}
+\long\def\PN at parnote@real#1#2{%
+    \parnotemark{#1}%
+    % Unless this is the first parnote in \PN at text, add a separator first
+    \unless\ifx\PN at text\@empty\g at addto@macro\PN at text{\parnoteintercmd}\fi
+    % Redefine \@currentlabel to the parnote label, so \label works
+    \g at addto@macro\PN at text{%
+        \def\@currentlabel{#1}%
+        \def\cref at currentlabel{%        lwarp
+            [parnotemark][\arabic{parnotemark}][]\theparnotemark%
+        }%
+    }%
+    \g at addto@macro\PN at text{%
+        \LWR at textcurrentfont{%          lwarp
+            \parnotemark{#1}\nolinebreak\thinspace#2%
+        }%
+    }%
+}
+
+\def\PN at parnotes@real{%
+    % We call \par later, so this avoids recursion with \PN at parnotes@auto
+    \PN at inparnotestrue
+    \unless\ifvmode\par\fi
+    % Avoid page breaks between a paragraph and its parnotes
+    \nopagebreak\addvspace{\parnotevskip}%
+    \LWR at forcenewpage%                  lwarp
+    \begin{BlockClass}{footnotes}%      lwarp
+    {\parnotefmt{\PN at text}\par}%
+    \end{BlockClass}%                   lwarp
+    \global\def\PN at text{}%
+    \addvspace{\parnotevskip}%
+    %
+    % These can be enabled or disabled by package options
+    %
+    \PN at disable@indent
+    \PN at reset@optional
+    \PN at inparnotesfalse
+}
+
+\AtBeginDocument{
+\crefname{parnotemark}{paragraph note}{paragraph notes}
+\Crefname{parnotemark}{Paragraph note}{Paragraph notes}
+}
+\endinput
+%%
+%% End of file `lwarp-parnotes.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-parnotes.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-quoting.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-quoting.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-quoting.sty	2018-05-12 21:24:56 UTC (rev 47695)
@@ -0,0 +1,40 @@
+%%
+%% This is file `lwarp-quoting.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% lwarp.dtx  (with options: `quoting')
+%% This is a generated file.
+%% Copyright 2016-2018 Brian Dunn
+%% 
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%   http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+
+\LWR at ProvidesPackagePass{quoting}
+
+\xpatchcmd{\quoting}{\quo at begintext}
+    {\begin{LWR at blocktextcurrentfont}\quo at begintext}
+    {}
+    {
+        \PackageError{lwarp}
+        {Unable to patch the quoting package}
+        {Please contact the author of lwarp.}
+    }
+\xpatchcmd{\endquoting}{\quo at endtext}
+    {\quo at endtext\end{LWR at blocktextcurrentfont}}
+    {}
+    {
+        \PackageError{lwarp}
+        {Unable to patch the quoting package}
+        {Please contact the author of lwarp.}
+    }
+
+\endinput
+%%
+%% End of file `lwarp-quoting.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-quoting.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-tocenter.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-tocenter.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-tocenter.sty	2018-05-12 21:24:56 UTC (rev 47695)
@@ -0,0 +1,23 @@
+%%
+%% This is file `lwarp-tocenter.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% lwarp.dtx  (with options: `tocenter')
+%% This is a generated file.
+%% Copyright 2016-2018 Brian Dunn
+%% 
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%   http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+\LWR at ProvidesPackageDrop{tocenter}
+\NewDocumentCommand{\ToCenter}{s o m m}{}
+\NewDocumentCommand{\FromMargins}{s o m m m m}{}
+\endinput
+%%
+%% End of file `lwarp-tocenter.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-tocenter.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-ulem.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-ulem.sty	2018-05-12 21:24:16 UTC (rev 47694)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-ulem.sty	2018-05-12 21:24:56 UTC (rev 47695)
@@ -69,7 +69,7 @@
     {%
         text-decoration:underline;%
         text-decoration-skip: auto;%
-        text-decoration-style:dotted%
+        text-decoration-style: dotted%
     }%
     {dotuline}{#1}%
 }

Added: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-underscore.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-underscore.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-underscore.sty	2018-05-12 21:24:56 UTC (rev 47695)
@@ -0,0 +1,21 @@
+%%
+%% This is file `lwarp-underscore.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% lwarp.dtx  (with options: `underscore')
+%% This is a generated file.
+%% Copyright 2016-2018 Brian Dunn
+%% 
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%   http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+\LWR at ProvidesPackageDrop{underscore}
+\endinput
+%%
+%% End of file `lwarp-underscore.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-underscore.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp.sty	2018-05-12 21:24:16 UTC (rev 47694)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp.sty	2018-05-12 21:24:56 UTC (rev 47695)
@@ -17,7 +17,7 @@
 %% version 2005/12/01 or later.
 \NeedsTeXFormat{LaTeX2e}[1999/12/01]
 \ProvidesPackage{lwarp}
-    [2018/04/26 v0.55  Allows LaTeX to directly produce HTML5 output.]
+    [2018/05/12 v0.56  Allows LaTeX to directly produce HTML5 output.]
 
 
 
@@ -394,6 +394,7 @@
 \LWR at loadafter{ltcaption}
 \LWR at loadafter{ltxgrid}
 \LWR at loadafter{ltxtable}
+\LWR at loadafter{lua-check-hyphen}
 \LWR at loadafter{luacolor}
 \LWR at loadafter{luatodonotes}
 \LWR at loadafter{magaz}
@@ -429,6 +430,7 @@
 \LWR at notmemoirloadafter{pagenote}
 \LWR at loadafter{pagesel}
 \LWR at loadafter{paralist}
+\LWR at loadafter{parnotes}
 \LWR at notmemoirloadafter{parskip}
 \LWR at loadafter{pbox}
 \LWR at loadafter{pdfrender}
@@ -441,6 +443,7 @@
 \LWR at loadafter{prettyref}
 \LWR at loadafter{preview}
 \LWR at loadafter{quotchap}
+\LWR at loadafter{quoting}
 \LWR at loadafter{ragged2e}
 \LWR at loadafter{realscripts}
 \LWR at loadafter{relsize}
@@ -488,6 +491,7 @@
 \LWR at loadafter{titletoc}
 \LWR at notmemoirloadafter{titling}
 \LWR at notmemoirloadafter{tocbibind}
+\LWR at loadafter{tocenter}
 \LWR at notmemoirloadafter{tocloft}
 \LWR at loadafter{tocstyle}
 \LWR at loadafter{todo}
@@ -496,6 +500,7 @@
 \LWR at loadafter{trivfloat}
 \LWR at loadafter{turnthepage}
 \LWR at loadafter{ulem}
+\LWR at loadafter{underscore}
 \LWR at loadafter{upref}
 \LWR at loadafter{url}
 \LWR at loadafter{varioref}% no lwarp package provided
@@ -938,6 +943,7 @@
 \LetLtxMacro\LWR at origmakebox\makebox
 \chardef\LWR at origpound=`\#
 \let\LWR at origcomma\,
+\let\LWR at origthinspace\thinspace
 \let\LWR at origtilde~
 \let\LWR at origenskip\enskip
 \let\LWR at origquad\quad
@@ -1138,6 +1144,7 @@
 }
 \immediate\write\LWR at quickfile{htmlfilename = "\HTMLFilename"}
 \immediate\write\LWR at quickfile{latexmk = "\ifbool{LWR at latexmk}{true}{false}"}
+\immediate\write\LWR at quickfile{shellescape = "\ifshellescape true\else false\fi"}
 \immediate\write\LWR at quickfile{xindylanguage = "\LWR at xindyLanguage"}
 \immediate\write\LWR at quickfile{xindycodepage = "\LWR at xindyCodepage"}
 \immediate\write\LWR at quickfile{xindystyle = "\LWR at xindyStyle"}
@@ -1168,6 +1175,7 @@
 }
 \immediate\write\LWR at quickfile{htmlfilename = "\HTMLFilename"}
 \immediate\write\LWR at quickfile{latexmk = "\ifbool{LWR at latexmk}{true}{false}"}
+\immediate\write\LWR at quickfile{shellescape = "\ifshellescape true\else false\fi"}
 \immediate\write\LWR at quickfile{xindylanguage = "\LWR at xindyLanguage"}
 \immediate\write\LWR at quickfile{xindycodepage = "\LWR at xindyCodepage"}
 \immediate\write\LWR at quickfile{xindystyle = "\LWR at xindyStyle"}
@@ -1237,7 +1245,7 @@
 
 div.hidden, span.hidden { display: none ; }
 
-kbd {
+kbd, span.texttt {
     font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console",
         "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono",
         "Courier New", monospace;
@@ -1246,22 +1254,24 @@
 
 pre { padding: 3pt ; }
 
-span.strong { font-weight: bold; }
+span.strong, span.textbf, div.strong, div.textbf { font-weight: bold; }
 
-span.textmd { font-weight: normal; }
+span.textit, div.textit { font-style: italic; }
 
-span.textsc { font-variant: small-caps; }
+span.textmd, div.textmd { font-weight: normal; }
 
-span.textsl { font-style: oblique; }
+span.textsc, div.textsc { font-variant: small-caps; }
 
-span.textup { font-variant: normal; }
+span.textsl, div.textsl { font-style: oblique; }
 
-span.textrm {
+span.textup, div.textup { font-variant: normal; }
+
+span.textrm, div.textrm {
     font-family: "DejaVu Serif", "Bitstream Vera Serif",
     "Lucida Bright", Georgia, serif;
 }
 
-span.textsf {
+span.textsf, div.textsf {
      font-family: "DejaVu Sans", "Bitstream Vera Sans",
         Geneva, Verdana, sans-serif ;
 }
@@ -1540,8 +1550,7 @@
 
 .footnotes {
     font-size: .85em ;
-    margin: 3ex 1em 0ex 1em ;
-    padding-bottom: 1ex ;
+    margin: 3ex 2em 0ex 2em ;
     border-top: 1px solid silver ;
 }
 
@@ -1583,7 +1592,7 @@
     { margin-bottom: 2ex ; }
 
 section.textbody div.footnotes{
-    margin: 3ex 0em 0ex 0em ;
+    margin: 3ex 2em 0ex 2em ;
     border-bottom: 2px solid silver ;
 }
 
@@ -2055,8 +2064,15 @@
 table td.tdB { text-align: center ; vertical-align: top ; }
 
 table td.tvertbarl { border-left: 1px solid black }
+table td.tvertbarldouble { border-left: 4px double black }
 table td.tvertbarr { border-right: 1px solid black }
+table td.tvertbarrdouble { border-right: 4px double black }
 
+table td.tvertbarldash { border-left: 1px dashed black }
+table td.tvertbarldoubledash { border-left: 2px dashed black }
+table td.tvertbarrdash { border-right: 1px dashed black }
+table td.tvertbarrdoubledash { border-right: 2px dashed black }
+
 /* for cmidrules: */
 table td.tdrule {
     border-top: 1px solid #A0A0A0 ;
@@ -3103,7 +3119,7 @@
 
 -- Print the usage of the lwarpmk command:
 
-printversion = "v0.55"
+printversion = "v0.56"
 
 function printhelp ()
 print ("lwarpmk: Use lwarpmk -h or lwarpmk --help for help.") ;
@@ -3126,6 +3142,7 @@
     For use with latexmk or a Makefile:
     Converts project_html.pdf to project_html.html and individual HTML files.
     Finishes the HTML conversion even if there was a compile error.
+lwarpmk pdftosvg <list of file names>: Converts each PDF file to SVG.
 lwarpmk clean [project]: Remove .aux, .toc, .lof/t, .idx, .ind, .log, *_html_inc.*, .gl*
 lwarpmk cleanall [project]: Remove auxiliary files and also project.pdf, *.html
 lwarpmk cleanlimages: Removes all images from the "lateximages" directory.
@@ -3148,6 +3165,7 @@
 homehtmlfilename = "index"  (or perhaps the project name)
 htmlfilename = ""  (or "projectname" - filename prefix)
 latexmk = "false"  (or "true" to use latexmk to build PDFs)
+shellescape = "false"
 xindylanguge = "english"  (use a language supported by xindy)
 xindycodepage = "utf8"  (use a codepage supported by xindy)
 xindystyle = "lwarp.xdy" (or a custom file based on lwarp.xdy)
@@ -3154,7 +3172,7 @@
 pdftotextenc = "UTF-8"  (use an encoding supported by pdftotext)
 --
 Filenames must contain only letters, numbers, underscore, or dash.
-Values must be in "quotes".
+Values must be in upright "quotes".
 
 ]] ) ;
 end
@@ -3198,13 +3216,13 @@
 local conffile = "lwarpmk.conf"
 -- Optional configuration filename:
 if ( arg[2] ~= nil ) then conffile = arg[2]..".lwarpmkconf" end
--- Default xindy language:
+-- Additional defaults:
+opsystem = "Unix"
+latexmk = "false"
+shellescape = "false"
 xindylanguage = "english"
--- Default xindy codepage:
 xindycodepage = "utf8"
--- Default xindystyle:
 xindystyle = "lwarp.xdy"
--- Default pdftotext encoding:
 pdftotextenc = "UTF-8"
 -- Verify the file exists:
 if (lfs.attributes(conffile,"mode")==nil) then
@@ -3260,6 +3278,7 @@
 elseif ( cvarname == "homehtmlfilename" ) then homehtmlfilename = cvalue
 elseif ( cvarname == "htmlfilename" ) then htmlfilename = cvalue
 elseif ( cvarname == "latexmk" ) then latexmk = cvalue
+elseif ( cvarname == "shellescape" ) then shellescape = cvalue
 elseif ( cvarname == "xindylanguage" ) then xindylanguage = cvalue
 elseif ( cvarname == "xindycodepage" ) then xindycodepage = cvalue
 elseif ( cvarname == "xindystyle" ) then xindystyle = cvalue
@@ -3353,7 +3372,13 @@
 
 function onetime (fsuffix)
 print("lwarpmk: Compiling with " .. latexname .. " " .. sourcename..fsuffix)
-err = os.execute(latexname .. " " .. sourcename..fsuffix)
+local thisshellescape = " "
+if ( shellescape == "true" ) then
+    thisshellescape = " -shell-escape "
+else
+    thisshellescape = " "
+end
+err = os.execute(latexname .. thisshellescape .. sourcename..fsuffix)
 if ( err ~= 0 ) then
     print ("lwarpmk: ===")
     print ("lwarpmk: Compile error.")
@@ -3618,6 +3643,13 @@
 -- Use latexmk to compile source and index:
 -- fsuffix is "" for print, or "_html" for HTML
 function compilelatexmk ( fsuffix )
+-- Maybe select the shell-escape option:
+local thisshellescape = " "
+if ( shellescape == "true" ) then
+    thisshellescape = " -shell-escape "
+else
+    thisshellescape = " "
+end
 -- The recorder option is required to detect changes in <project>.tex
 -- while we are loading <project>_html.tex.
 err=os.execute ( "latexmk -pdf -dvi- -ps- -recorder "
@@ -3629,7 +3661,7 @@
     .. "  -C " .. xindycodepage
     .. "  -L " .. xindylanguage .. " /"
     .. opquote
-    .. " -pdflatex=\"" .. latexname .." %O %S\" "
+    .. " -pdflatex=\"" .. latexname .. thisshellescape .." %O %S\" "
     .. sourcename..fsuffix ..".tex" ) ;
 if ( err ~= 0 ) then
     print ("lwarpmk: ===")
@@ -3637,8 +3669,22 @@
     print ("lwarpmk: ===")
     os.exit(1)
 end
-end
+end -- function
 
+-- Converts PDF files to SVG files.
+-- The filenames are arg[2] and up.
+-- arg[1] is the command "pdftosvg".
+function convertpdftosvg ()
+for i = 2 , #arg do
+    if (lfs.attributes(arg[i],"mode")==nil) then
+        print ("lwarpmk: File \"" .. arg[i] .. "\" does not exist.")
+    else
+        print ("lwarpmk: Converting \"" .. arg[i] .. "\"")
+        os.execute ( "pdftocairo -svg " .. arg[i] )
+    end -- if
+end -- do
+end --function
+
 -- lwarpmk --version :
 
 if (arg[1] == "--version") then
@@ -3843,6 +3889,12 @@
 os.execute ( rmname .. " lateximages/*" )
 print ("lwarpmk: Done.")
 
+-- lwarpmk pdftosvg <list of file names>
+-- Convert PDf files to SVG using pdftocairo
+elseif arg[1] == "pdftosvg" then
+convertpdftosvg ()
+print ("lwarpmk: Done.")
+
 -- lwarpmk with no argument :
 
 elseif (arg[1] == nil) then
@@ -4517,6 +4569,8 @@
 {}%
 }
 
+\def\PN at parnotes@auto{}%
+
 \newcommand*{\LWR at openparagraph}
 {%
 \ifbool{LWR at doingstartpars}%
@@ -4527,6 +4581,7 @@
     }% nested par tags?
     {}% no nested par tags
     {% yes nest par tags
+        \PN at parnotes@auto%
         \LWR at htmltagc{\LWR at tagregularparagraph}%
         \global\booltrue{LWR at doingapar}%
         \let\par\LWR at closeparagraph%
@@ -4557,6 +4612,7 @@
         \LWR at orignewline%
         \global\boolfalse{LWR at doingapar}%
         \global\boolfalse{LWR at minipagethispar}%
+        \PN at parnotes@auto%
     }% end of yes nest par tags
 }% end of handling pars
 {% not handling pars
@@ -6034,9 +6090,9 @@
 \LWR at stoppars%
 \LWR at setlatestname{#1}%
 \LWR at startnewdepth{\LWR at depthlistitem}{\LWR at printclosedescitem}%
-\LetLtxMacro{\hspace}{\LWR at nohspace}%
+\LetLtxMacro\hspace\LWR at nohspace%
 \LWR at origitem[]%
-\LetLtxMacro{\hspace}{\LWR at hspace}%
+\LetLtxMacro\hspace\LWR at hspace%
 \LWR at htmltag{dt}#1\LWR at htmltag{/dt}%
 \LWR at orignewline%
 \LWR at htmltag{dd}%
@@ -6101,10 +6157,13 @@
 
 \end{warpHTML}
 
+\begin{warpHTML}
+\LetLtxMacro\hdashline\hline
+\LetLtxMacro\cdashline\cline
+\LetLtxMacro\firsthdashline\hline
+\LetLtxMacro\lasthdashline\hline
 
 
-\begin{warpHTML}
-
 \newcommand\LWR at mynexttoken\relax
 
 
@@ -6130,9 +6189,10 @@
 \newbool{LWR at tabularcelladded}
 \boolfalse{LWR at tabularcelladded}
 
-\newbool{LWR at doinghline}
-\boolfalse{LWR at doinghline}
+\newcounter{LWR at hlines}
 
+\newcounter{LWR at hdashedlines}
+
 \newbool{LWR at doingtbrule}
 \boolfalse{LWR at doingtbrule}
 
@@ -6261,7 +6321,8 @@
     not bool {LWR at exitingtabular} or%
     bool{LWR at doingtbrule} or%
     bool{LWR at doingcmidrule} or%
-    bool{LWR at doinghline} or%
+    test{\ifnumcomp{\value{LWR at hlines}}{>}{0}} or%
+    test{\ifnumcomp{\value{LWR at hdashedlines}}{>}{0}} or%
     bool{LWR at startedrow}%
 }{%
 \begingroup%
@@ -6305,7 +6366,8 @@
 \@rowc at lors%
 \global\booltrue{LWR at intabularmetadata}%
 \global\boolfalse{LWR at startedrow}%
-\global\boolfalse{LWR at doinghline}%
+\setcounter{LWR at hlines}{0}%
+\setcounter{LWR at hdashedlines}{0}%
 \global\boolfalse{LWR at doingtbrule}%
 \global\boolfalse{LWR at doingcmidrule}%
 \LWR at clearmidrules%
@@ -6315,6 +6377,16 @@
 \LWR at getmynexttoken%
 }
 
+\newcommand*{\LWR at columnspeclookahead}[1]{%
+\setcounter{LWR at tempcountone}{\value{LWR at tablecolspecindex}}%
+\addtocounter{LWR at tempcountone}{#1}%
+\fullexpandarg%
+\StrChar{\LWR at origcolspec}{\arabic{LWR at tempcountone}}[\LWR at strresulttwo]%
+\exploregroups%
+\StrChar{\LWR at strresulttwo}{1}[\LWR at strresulttwo]%
+\noexploregroups%
+}
+
 \newcommand*{\LWR at colparameter}{}
 \newcommand*{\LWR at parseatcolumn}{%
 \LWR at traceinfo{at column}%
@@ -6321,7 +6393,8 @@
 \addtocounter{LWR at tablecolspecindex}{1}%
 \LWR at traceinfo{about to read the next token:}%
 \expandarg%
-\StrChar{\LWR at origcolspec}{\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]
+\StrChar{\LWR at origcolspec}%
+    {\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]
 \fullexpandarg%
 \LWR at traceinfo{have now read the next token}%
 \ifnumcomp{\value{LWR at tabletotalcols}}{=}{0}%
@@ -6333,7 +6406,8 @@
 }%
 {% not at the left edge:
     \LWR at traceinfo{not at the left edge}%
-    \LWR at setexparray{LWR at colatspec}{\arabic{LWR at tabletotalcols}}{\LWR at colparameter}%
+    \LWR at setexparray{LWR at colatspec}%
+        {\arabic{LWR at tabletotalcols}}{\LWR at colparameter}%
     \LWR at traceinfo{at \arabic{LWR at tabletotalcols}: %
     \LWR at getexparray{LWR at colatspec}{\arabic{LWR at tabletotalcols}}}%
 }%
@@ -6345,7 +6419,8 @@
 \addtocounter{LWR at tablecolspecindex}{1}%
 \LWR at traceinfo{about to read the next token:}%
 \expandarg%
-\StrChar{\LWR at origcolspec}{\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]
+\StrChar{\LWR at origcolspec}%
+    {\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]
 \fullexpandarg%
 \LWR at traceinfo{have now read the next token}%
 \ifnumcomp{\value{LWR at tabletotalcols}}{=}{0}%
@@ -6355,7 +6430,8 @@
 }%
 {% not at the left edge:
     \LWR at traceinfo{not at the left edge}%
-    \LWR at setexparray{LWR at colbangspec}{\arabic{LWR at tabletotalcols}}{\LWR at colparameter}%
+    \LWR at setexparray{LWR at colbangspec}%
+        {\arabic{LWR at tabletotalcols}}{\LWR at colparameter}%
     \LWR at traceinfo{bang \arabic{LWR at tabletotalcols}: \LWR at colparameter!}%
 }%
 \let\LWR at colparameter\relax%
@@ -6364,9 +6440,11 @@
 \newcommand*{\LWR at parsebeforecolumn}{%
 \addtocounter{LWR at tablecolspecindex}{1}%
 \expandarg%
-\StrChar{\LWR at origcolspec}{\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]%
+\StrChar{\LWR at origcolspec}%
+    {\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]%
 \fullexpandarg%
-\LWR at setexparray{LWR at colbeforespec}{\arabic{LWR at tabletotalcolsnext}}{\LWR at colparameter}%
+\LWR at setexparray{LWR at colbeforespec}%
+    {\arabic{LWR at tabletotalcolsnext}}{\LWR at colparameter}%
 \let\LWR at colparameter\relax%
 \booltrue{LWR at validtablecol}%
 }
@@ -6373,23 +6451,64 @@
 \newcommand*{\LWR at parseaftercolumn}{%
 \addtocounter{LWR at tablecolspecindex}{1}%
 \expandarg%
-\StrChar{\LWR at origcolspec}{\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]%
+\StrChar{\LWR at origcolspec}%
+    {\arabic{LWR at tablecolspecindex}}[\LWR at colparameter]%
 \fullexpandarg%
-\LWR at setexparray{LWR at colafterspec}{\arabic{LWR at tabletotalcols}}{\LWR at colparameter}%
+\LWR at setexparray{LWR at colafterspec}%
+    {\arabic{LWR at tabletotalcols}}{\LWR at colparameter}%
 \let\LWR at colparameter\relax%
 \booltrue{LWR at validtablecol}%
 }
 \newcommand*{\LWR at parsebarcolumn}{%
-\LWR at traceinfo{bar column}%
+\LWR at traceinfo{LWR at parsebarcolumn}%
 \ifnumcomp{\value{LWR at tabletotalcols}}{=}{0}%
 {% left edge of the table:
-    \LWR at setexparray{LWR at colbarspec}{leftedge}{tvertbarl}%
+    \edef\LWR at tempone{\LWR at getexparray{LWR at colbarspec}{leftedge}}%
+    \ifdefstring{\LWR at tempone}{tvertbarl}%
+    {\LWR at setexparray{LWR at colbarspec}{leftedge}{tvertbarldouble}}%
+    {\LWR at setexparray{LWR at colbarspec}{leftedge}{tvertbarl}}%
 }%
 {% not at the left edge:
-    \LWR at setexparray{LWR at colbarspec}{\arabic{LWR at tabletotalcols}}{tvertbarr}%
+    \edef\LWR at tempone{%
+        \LWR at getexparray{LWR at colbarspec}{\arabic{LWR at tabletotalcols}}%
+    }%
+    \ifdefstring{\LWR at tempone}{tvertbarr}%
+    {%
+        \LWR at setexparray{LWR at colbarspec}%
+            {\arabic{LWR at tabletotalcols}}{tvertbarrdouble}%
+    }%
+    {%
+        \LWR at setexparray{LWR at colbarspec}%
+            {\arabic{LWR at tabletotalcols}}{tvertbarr}%
+    }%
 }%
 \booltrue{LWR at validtablecol}%
 }
+\newcommand*{\LWR at parsecoloncolumn}{%
+\LWR at traceinfo{LWR at parsecoloncolumn}%
+\ifnumcomp{\value{LWR at tabletotalcols}}{=}{0}%
+{% left edge of the table:
+    \edef\LWR at tempone{\LWR at getexparray{LWR at colbarspec}{leftedge}}%
+    \ifdefstring{\LWR at tempone}{tvertbarldash}%
+    {\LWR at setexparray{LWR at colbarspec}{leftedge}{tvertbarldoubledash}}%
+    {\LWR at setexparray{LWR at colbarspec}{leftedge}{tvertbarldash}}%
+}%
+{% not at the left edge:
+    \edef\LWR at tempone{%
+        \LWR at getexparray{LWR at colbarspec}{\arabic{LWR at tabletotalcols}}%
+    }%
+    \ifdefstring{\LWR at tempone}{tvertbarrdash}%
+    {\LWR at setexparray{LWR at colbarspec}%
+        {\arabic{LWR at tabletotalcols}}{tvertbarrdoubledash}}%
+    {\LWR at setexparray{LWR at colbarspec}%
+        {\arabic{LWR at tabletotalcols}}{tvertbarrdash}}%
+}%
+\booltrue{LWR at validtablecol}%
+}
+\newcommand*{\LWR at parsesemicoloncolumn}{%
+\LWR at parsecoloncolumn%
+\addtocounter{LWR at tablecolspecindex}{1}%
+}
 \newcommand*{\LWR at parsenormalcolumn}[1]{%
 \appto\LWR at tablecolspec{#1}%
 \addtocounter{LWR at tabletotalcols}{1}%
@@ -6408,6 +6527,12 @@
 \addtocounter{LWR at tablecolspecindex}{1}%
 }
 
+\newcommand*{\LWR at parsewcolumn}{%
+\LWR at columnspeclookahead{1}%
+\expandafter\LWR at parsenormalcolumn\expandafter{\LWR at strresulttwo}%
+\addtocounter{LWR at tablecolspecindex}{2}%
+}
+
 \newcommand*{\LWR at parseDcolumn}[1]{%
 \LWR at parsenormalcolumn{#1}%
 \addtocounter{LWR at tablecolspecindex}{3}%
@@ -6451,7 +6576,8 @@
 \boolfalse{LWR at opttablecol}%
 \whileboolexpr{%
     not test{%
-        \ifnumcomp{\value{LWR at tablecolspecindex}}{>}{\value{LWR at tablecolspecwidth}}%
+        \ifnumcomp{\value{LWR at tablecolspecindex}}{>}%
+            {\value{LWR at tablecolspecwidth}}%
     }%
 }%
 {%
@@ -6471,15 +6597,20 @@
 \IfStrEq{\LWR at strresult}{C}{\LWR at parsenormalcolumn{c}}{}%
 \IfStrEq{\LWR at strresult}{R}{\LWR at parsenormalcolumn{r}}{}%
 \IfStrEq{\LWR at strresult}{J}{\LWR at parsenormalcolumn{l}}{}%
-\IfStrEq{\LWR at strresult}{S}{\LWR at parsenormalcolumn{r}}{}%
+\IfStrEq{\LWR at strresult}{S}{\LWR at parsenormalcolumn{c}}{}%
+\IfStrEq{\LWR at strresult}{s}{\LWR at parsenormalcolumn{c}}{}%
 \IfStrEq{\LWR at strresult}{\detokenize{@}}{\LWR at parseatcolumn}{}%
 \IfStrEq{\LWR at strresult}{!}{\LWR at parsebangcolumn}{}%
 \IfStrEq{\LWR at strresult}{>}{\LWR at parsebeforecolumn}{}%
 \IfStrEq{\LWR at strresult}{<}{\LWR at parseaftercolumn}{}%
 \IfStrEq{\LWR at strresult}{|}{\LWR at parsebarcolumn}{}%
+\IfStrEq{\LWR at strresult}{:}{\LWR at parsecoloncolumn}{}%
+\IfStrEq{\LWR at strresult}{;}{\LWR at parsesemicoloncolumn}{}%
 \IfStrEq{\LWR at strresult}{p}{\LWR at parsepcolumn{p}}{}%
 \IfStrEq{\LWR at strresult}{m}{\LWR at parsepcolumn{m}}{}%
 \IfStrEq{\LWR at strresult}{b}{\LWR at parsepcolumn{b}}{}%
+\IfStrEq{\LWR at strresult}{w}{\LWR at parsewcolumn}{}%
+\IfStrEq{\LWR at strresult}{W}{\LWR at parsewcolumn}{}%
 \IfStrEq{\LWR at strresult}{D}{\LWR at parseDcolumn{c}}{}%
 \IfStrEq{\LWR at strresult}{X}{\LWR at parsenormalcolumn{X}}{}%
 \IfStrEq{\LWR at strresult}{P}{\LWR at parsepcolumn{P}}{}%
@@ -6493,7 +6624,7 @@
 \IfStrEq{\LWR at strresult}{]}{\boolfalse{LWR at opttablecol}}{}%
 \addtocounter{LWR at tablecolspecindex}{1}%
 }% whiledo
-\LWR at traceinfo{LWR at parsetablecols: done}%
+\LWR at traceinfo{LWR at parsetablecols: Final table column spec: !\LWR at tablecolspec!}%
 }%
 
  \@ifundefined{rownum}{\newcount\rownum}{}
@@ -6526,16 +6657,12 @@
 {% not started the row
     \global\booltrue{LWR at startedrow}%
     \global\booltrue{LWR at intabularmetadata}%
-    \ifbool{LWR at doinghline}%
+    \ifboolexpr{%
+        test{\ifnumcomp{\value{LWR at hlines}}{>}{0}} or%
+        test{\ifnumcomp{\value{LWR at hdashedlines}}{>}{0}}%
+    }%
     {%
-        \ifdefvoid{\LWR at ruleHTMLcolor}{%
-            \LWR at htmltag{tr class="hline" }%
-        }{%
-            \LWR at htmltag{%
-                tr class="hline" %
-                style="border-top: 1px solid \LWR at origpound\LWR at ruleHTMLcolor "%
-            }%
-        }%
+        \LWR at htmltag{tr class="hline" }%
         \LWR at orignewline%
     }%
     {% not doing hline
@@ -6545,8 +6672,9 @@
                 \LWR at htmltag{tr class="tbrule"}%
             }{%
                 \LWR at htmltag{%
-                    tr class="tbrule" %
-                    style="border-top: 1px solid \LWR at origpound\LWR at ruleHTMLcolor "%
+                    tr class="tbrule" % space
+                    style="border-top: 1px solid % space
+                        \LWR at origpound\LWR at ruleHTMLcolor "%
                 }%
             }%
             \LWR at orignewline%
@@ -6582,6 +6710,7 @@
         "%
         \LWR at tdstartstyles%
         \LWR at addcmidrulewidth%
+        \LWR at addcdashline%
         \LWR at addtabularrulecolors%
         \LWR at tdendstyles%
     }%
@@ -6620,7 +6749,8 @@
     \ifbool{LWR at exitingtabular}{}%
     {% not exiting tabular
         \LWR at tabularleftedge%
-        \StrChar{\LWR at tablecolspec}{\arabic{LWR at tablecolindex}}[\LWR at strresult]%
+        \StrChar{\LWR at tablecolspec}%
+            {\arabic{LWR at tablecolindex}}[\LWR at strresult]%
 \LWR at traceinfo{LWR at tabledatasinglecolumntag: about to print td tag}%
         \LWR at htmltag{td class="td%
         \LWR at strresult%
@@ -6630,7 +6760,9 @@
         "%
         \LWR at tdstartstyles%
         \LWR at addcmidrulewidth%
-        \StrChar{\LWR at tablecolspec}{\arabic{LWR at tablecolindex}}[\LWR at thiscolspec]%
+        \LWR at addcdashline%
+        \StrChar{\LWR at tablecolspec}%
+            {\arabic{LWR at tablecolindex}}[\LWR at thiscolspec]%
         \LWR at addformatwpalignment{\LWR at thiscolspec}%
         \LWR at addtabularrowcolor%
         \LWR at addtabularrulecolors%
@@ -6667,6 +6799,7 @@
 
 
 
+
 \newcounter{LWR at midrulecounter}
 
 \newlength{\LWR at heavyrulewidth}
@@ -6686,7 +6819,8 @@
 \setcounter{LWR at midrulecounter}{1}%
 \whileboolexpr{%
     not test{%
-        \ifnumcomp{\value{LWR at midrulecounter}}{>}{\value{LWR at tablecolspecwidth}}%
+        \ifnumcomp{\value{LWR at midrulecounter}}{>}%
+            {\value{LWR at tablecolspecwidth}}%
     }%
 }%
 {%
@@ -6694,6 +6828,7 @@
 \setlength{\LWR at thiscmidrulewidth}{\LWR at cmidrulewidth}%
 \LWR at setexparray{LWR at trimlrules}{\arabic{LWR at midrulecounter}}{}%
 \LWR at setexparray{LWR at trimrrules}{\arabic{LWR at midrulecounter}}{}%
+\LWR at setexparray{LWR at cdashlines}{\arabic{LWR at midrulecounter}}{N}%
 \addtocounter{LWR at midrulecounter}{1}%
 }%
 }
@@ -6714,13 +6849,35 @@
 \booltrue{LWR at doingcmidrule}%
 }
 
-\NewDocumentCommand{\LWR at docmidrule}{O{\LWR at cmidrulewidth} D(){} >{\SplitArgument{1}{-}}m}%
-{\LWR at subcmidrule{#1}{#2}#3}
+\NewDocumentCommand{\LWR at docmidrule}
+    {O{\LWR at cmidrulewidth} D(){} >{\SplitArgument{1}{-}}m}
+    {\LWR at subcmidrule{#1}{#2}#3}
 
-\newlength{\LWR at templengthone}%
-\newlength{\LWR at templengthtwo}%
-\newlength{\LWR at templengththree}%
+\newcommand*{\LWR at subcdashline}[2]{%
+\setcounter{LWR at midrulecounter}{#1}%
+\whileboolexpr{%
+    not test {%
+        \ifnumcomp{\value{LWR at midrulecounter}}{>}{#2}%
+    }%
+}%
+{%
+    \LWR at setexparray{LWR at cdashlines}{\arabic{LWR at midrulecounter}}{Y}%
+    \addtocounter{LWR at midrulecounter}{1}%
+}% whiledo
+\booltrue{LWR at doingcmidrule}%
+}
 
+\NewDocumentCommand{\LWR at docdashline}
+    {>{\SplitArgument{1}{-}}m}%
+    {%
+        \LWR at subcdashline#1%
+    }
+
+\newlength{\LWR at templengthone}
+\newlength{\LWR at templengthtwo}
+\newlength{\LWR at templengththree}
+\newcounter{LWR at tempcountone}
+
 \newboolean{LWR at tdhavecellstyle}
 
 \newcommand*{\LWR at tdstartstyles}{\global\boolfalse{LWR at tdhavecellstyle}}
@@ -6790,6 +6947,19 @@
 \LWR at addrulewidth{\LWR at thiscmidrulewidth}{\LWR at cmidrulewidth}%
 }
 
+\newcommand{\LWR at addcdashline}{%
+\edef\LWR at tempone{%
+    \LWR at getexparray{LWR at cdashlines}{\arabic{LWR at tablecolindex}}%
+}%
+\ifdefstring{\LWR at tempone}{Y}{%
+    \LWR at tdaddstyle%
+    border-top: 1pt dashed %
+    \ifdefvoid{\LWR at ruleHTMLcolor}%
+        {black}%
+        {\LWR at origpound\LWR at ruleHTMLcolor}%
+}{}%
+}
+
 \newcommand*{\LWR at WPcell}[2]{%
 \LWR at tdaddstyle%
 \LWR at origmbox{text-align:#1}; \LWR at origmbox{vertical-align:#2}%
@@ -6827,15 +6997,49 @@
 }
 
 \newcommand*{\LWR at addtabularhrulecolor}{%
-\ifboolexpr {
-    bool{LWR at doinghline} or
-    bool{LWR at doingtbrule}
+\ifboolexpr{%
+    test{\ifnumcomp{\value{LWR at hlines}}{>}{0}} or%
+    test{\ifnumcomp{\value{LWR at hdashedlines}}{>}{0}} or%
+    bool{LWR at doingtbrule}%
 }{%
-    \ifdefvoid{\LWR at ruleHTMLcolor}{}%
+    \ifdefvoid{\LWR at ruleHTMLcolor}%
     {%
-        \LWR at tdaddstyle%
-        border-top: 1px solid \LWR at origpound\LWR at ruleHTMLcolor%
-    }{}%
+        \ifnumcomp{\value{LWR at hlines}}{>}{1}%
+        {%
+            \LWR at tdaddstyle%
+            border-top: 4px double%
+        }{% else
+        \ifnumcomp{\value{LWR at hdashedlines}}{>}{1}%
+        {%
+            \LWR at tdaddstyle%
+            border-top: 2px dashed%
+        }{% else
+        \ifnumcomp{\value{LWR at hdashedlines}}{=}{1}%
+        {%
+            \LWR at tdaddstyle%
+            border-top: 1px dashed%
+        }{}}}%
+    }%
+    {%
+        \ifnumcomp{\value{LWR at hlines}}{>}{1}%
+        {%
+            \LWR at tdaddstyle%
+            border-top: 4px double \LWR at origpound\LWR at ruleHTMLcolor%
+        }{% else
+        \ifnumcomp{\value{LWR at hdashedlines}}{>}{1}%
+        {%
+            \LWR at tdaddstyle%
+            border-top: 2px dashed \LWR at origpound\LWR at ruleHTMLcolor%
+        }{% else
+        \ifnumcomp{\value{LWR at hdashedlines}}{=}{1}%
+        {%
+            \LWR at tdaddstyle%
+            border-top: 1px dashed \LWR at origpound\LWR at ruleHTMLcolor%
+        }{% else
+            \LWR at tdaddstyle%
+            border-top: 1px solid \LWR at origpound\LWR at ruleHTMLcolor%
+        }}}%
+    }%
 }{}%
 }
 
@@ -6846,14 +7050,44 @@
         \edef\LWR at tempone{\LWR at getexparray{LWR at colbarspec}{leftedge}}%
         \ifdefstring{\LWR at tempone}{tvertbarl}{%
                 \LWR at tdaddstyle%
-                border-left: 1px solid \LWR at origpound\LWR at vertruleHTMLcolor%
+                border-left: 1px solid % space
+                    \LWR at origpound\LWR at vertruleHTMLcolor%
         }{}%
+        \ifdefstring{\LWR at tempone}{tvertbarldouble}{%
+                \LWR at tdaddstyle%
+                border-left: 4px double % space
+                    \LWR at origpound\LWR at vertruleHTMLcolor%
+        }{}%
+        \ifdefstring{\LWR at tempone}{tvertbarldash}{%
+                \LWR at tdaddstyle%
+                border-left: 1px dashed % space
+                    \LWR at origpound\LWR at vertruleHTMLcolor%
+        }{}%
+        \ifdefstring{\LWR at tempone}{tvertbarldoubledash}{%
+                \LWR at tdaddstyle%
+                border-left: 2px dashed % space
+                    \LWR at origpound\LWR at vertruleHTMLcolor%
+        }{}%
     }{}%
-    \edef\LWR at tempone{\LWR at getexparray{LWR at colbarspec}{\arabic{LWR at tablecolindex}}}%
+    \edef\LWR at tempone{%
+        \LWR at getexparray{LWR at colbarspec}{\arabic{LWR at tablecolindex}}%
+    }%
     \ifdefstring{\LWR at tempone}{tvertbarr}{%
             \LWR at tdaddstyle%
             border-right: 1px solid \LWR at origpound\LWR at vertruleHTMLcolor%
     }{}%
+    \ifdefstring{\LWR at tempone}{tvertbarrdouble}{%
+            \LWR at tdaddstyle%
+            border-right: 4px double \LWR at origpound\LWR at vertruleHTMLcolor%
+    }{}%
+    \ifdefstring{\LWR at tempone}{tvertbarrdash}{%
+            \LWR at tdaddstyle%
+            border-right: 1px dashed \LWR at origpound\LWR at vertruleHTMLcolor%
+    }{}%
+    \ifdefstring{\LWR at tempone}{tvertbarrdoubledash}{%
+            \LWR at tdaddstyle%
+            border-right: 2px dashed \LWR at origpound\LWR at vertruleHTMLcolor%
+    }{}%
 }%
 }
 
@@ -6889,8 +7123,11 @@
 \newcounter{LWR at tablemulticolswidth}
 \newcounter{LWR at tablemulticolspos}
 
-\newbool{LWR at mcolvertbarl}
-\newbool{LWR at mcolvertbarr}
+\newcounter{LWR at mcolvertbarsl}
+\newcounter{LWR at mcolvertbarsr}
+\newcounter{LWR at mcolvertbarsldash}
+\newcounter{LWR at mcolvertbarsrdash}
+\newboolean{LWR at mcolvertbaronleft}%
 
 \newcommand*{\LWR at printmccoltype}[1]{%
 \LWR at traceinfo{lwr at printmccoltype -#1-}%
@@ -6904,19 +7141,41 @@
 \IfStrEq{\LWR at strresult}{P}{P}{}%
 \IfStrEq{\LWR at strresult}{M}{M}{}%
 \IfStrEq{\LWR at strresult}{B}{B}{}%
-\IfStrEq{\LWR at strresult}{S}{r}{}%
+\IfStrEq{\LWR at strresult}{w}{w}{}%
+\IfStrEq{\LWR at strresult}{W}{W}{}%
+\IfStrEq{\LWR at strresult}{S}{c}{}%
+\IfStrEq{\LWR at strresult}{s}{c}{}%
 \IfStrEq{\LWR at strresult}{X}{p}{}%
-\IfStrEq{\LWR at strresult}{|}{%
-    \ifnumcomp{\value{LWR at tablemulticolspos}}{=}{1}% left edge?
-        {\booltrue{LWR at mcolvertbarl}}% left edge
-        {\booltrue{LWR at mcolvertbarr}}% not left edge
-}{}%
+\IfStrEq{\LWR at strresult}{|}%
+{%
+    \ifbool{LWR at mcolvertbaronleft}%
+        {\addtocounter{LWR at mcolvertbarsl}{1}}% left edge
+        {\addtocounter{LWR at mcolvertbarsr}{1}}% not left edge
+}%
+{%
+    \IfStrEq{\LWR at strresult}{:}%
+    {%
+        \ifbool{LWR at mcolvertbaronleft}%
+            {\addtocounter{LWR at mcolvertbarsldash}{1}}% left edge
+            {\addtocounter{LWR at mcolvertbarsrdash}{1}}% not left edge
+    }%
+    {%
+        \IfStrEq{\LWR at strresult}{;}%
+        {%
+            \ifbool{LWR at mcolvertbaronleft}%
+                {\addtocounter{LWR at mcolvertbarsldash}{1}}% left edge
+                {\addtocounter{LWR at mcolvertbarsrdash}{1}}% not left edge
+        }%
+        {\setboolean{LWR at mcolvertbaronleft}{false}}%
+    }%
+}%
 \LWR at traceinfo{lwr at printmccoltype done}%
 }
 
-\newcommand*{\LWR at multicolpartext}{%
+\newcommand*{\LWR at multicolpartext}[1]{%
 \LWR at startpars%
 \LWR at multicoltext%
+\addtocounter{LWR at tablemulticolspos}{#1}%
 \LWR at stoppars%
 }
 
@@ -6942,15 +7201,23 @@
 \addtocounter{LWR at tablemulticolspos}{3}% skip parameters
 \LWR at multicoltext%
 }{}%
-\IfStrEq{\LWR at strresult}{p}{\LWR at multicolpartext}{}%
-\IfStrEq{\LWR at strresult}{m}{\LWR at multicolpartext}{}%
-\IfStrEq{\LWR at strresult}{b}{\LWR at multicolpartext}{}%
-\IfStrEq{\LWR at strresult}{P}{\LWR at multicolpartext}{}%
-\IfStrEq{\LWR at strresult}{M}{\LWR at multicolpartext}{}%
-\IfStrEq{\LWR at strresult}{B}{\LWR at multicolpartext}{}%
-\IfStrEq{\LWR at strresult}{S}{\LWR at multicolpartext}{}%
-\IfStrEq{\LWR at strresult}{X}{\LWR at multicolpartext}{}%
+\IfStrEq{\LWR at strresult}{p}{\LWR at multicolpartext{0}}{}%
+\IfStrEq{\LWR at strresult}{m}{\LWR at multicolpartext{0}}{}%
+\IfStrEq{\LWR at strresult}{b}{\LWR at multicolpartext{0}}{}%
+\IfStrEq{\LWR at strresult}{P}{\LWR at multicolpartext{0}}{}%
+\IfStrEq{\LWR at strresult}{M}{\LWR at multicolpartext{0}}{}%
+\IfStrEq{\LWR at strresult}{B}{\LWR at multicolpartext{0}}{}%
+\IfStrEq{\LWR at strresult}{w}{\LWR at multicolpartext{3}}{}%
+\IfStrEq{\LWR at strresult}{W}{\LWR at multicolpartext{3}}{}%
+\IfStrEq{\LWR at strresult}{S}{\LWR at multicoltext}{}%
+\IfStrEq{\LWR at strresult}{s}{\LWR at multicoltext}{}%
+\IfStrEq{\LWR at strresult}{X}{\LWR at multicolpartext{0}}{}%
 \IfStrEq{\LWR at strresult}{|}{\LWR at multicolskip}{}%
+\IfStrEq{\LWR at strresult}{:}{\LWR at multicolskip}{}%
+\IfStrEq{\LWR at strresult}{;}{%
+    \LWR at multicolskip%
+    \addtocounter{LWR at tablemulticolspos}{1}% skip parameter
+}{}%
 \IfStrEq{\LWR at strresult}{\detokenize{@}}{\LWR at multicolother{#1}}{}%
 \IfStrEq{\LWR at strresult}{\detokenize{!}}{\LWR at multicolother{#1}}{}%
 \IfStrEq{\LWR at strresult}{\detokenize{>}}{\LWR at multicolother{#1}}{}%
@@ -6965,8 +7232,9 @@
 \setcounter{LWR at tablemulticolswidth}{\LWR at strresult}%
 \whileboolexpr{%
     not test {%
-        \ifnumcomp{\value{LWR at tablemulticolspos}}{>}{\value{LWR at tablemulticolswidth}}%
-    }
+        \ifnumcomp{\value{LWR at tablemulticolspos}}{>}%
+            {\value{LWR at tablemulticolswidth}}%
+    }%
 }%
 {%
 #2{#1}%
@@ -6977,14 +7245,38 @@
 
 \newcommand*{\LWR at addmulticolvertrulecolor}{%
 \ifbool{LWR at tabularmutemods}{}{%
-    \ifbool{LWR at mcolvertbarl}{%
+    \ifnumcomp{\value{LWR at mcolvertbarsl}}{=}{1}{%
         \LWR at tdaddstyle%
         border-left: 1px solid \LWR at origpound\LWR at vertruleHTMLcolor%
     }{}%
-    \ifbool{LWR at mcolvertbarr}{%
+    \ifnumcomp{\value{LWR at mcolvertbarsl}}{>}{1}{%
         \LWR at tdaddstyle%
+        border-left: 4px double \LWR at origpound\LWR at vertruleHTMLcolor%
+    }{}%
+    \ifnumcomp{\value{LWR at mcolvertbarsldash}}{=}{1}{%
+        \LWR at tdaddstyle%
+        border-left: 1px dashed \LWR at origpound\LWR at vertruleHTMLcolor%
+    }{}%
+    \ifnumcomp{\value{LWR at mcolvertbarsldash}}{>}{1}{%
+        \LWR at tdaddstyle%
+        border-left: 2px dashed \LWR at origpound\LWR at vertruleHTMLcolor%
+    }{}%
+    \ifnumcomp{\value{LWR at mcolvertbarsr}}{=}{1}{%
+        \LWR at tdaddstyle%
         border-right: 1px solid \LWR at origpound\LWR at vertruleHTMLcolor%
     }{}%
+    \ifnumcomp{\value{LWR at mcolvertbarsr}}{>}{1}{%
+        \LWR at tdaddstyle%
+        border-right: 4px double \LWR at origpound\LWR at vertruleHTMLcolor%
+    }{}%
+    \ifnumcomp{\value{LWR at mcolvertbarsrdash}}{=}{1}{%
+        \LWR at tdaddstyle%
+        border-right: 1px dashed \LWR at origpound\LWR at vertruleHTMLcolor%
+    }{}%
+    \ifnumcomp{\value{LWR at mcolvertbarsrdash}}{>}{1}{%
+        \LWR at tdaddstyle%
+        border-right: 2px dashed \LWR at origpound\LWR at vertruleHTMLcolor%
+    }{}%
 }%
 }
 
@@ -7011,18 +7303,28 @@
 }% vpos?
 }% rows?
  class="td%
-\boolfalse{LWR at mcolvertbarl}%
-\boolfalse{LWR at mcolvertbarr}%
+\setcounter{LWR at mcolvertbarsl}{0}%
+\setcounter{LWR at mcolvertbarsr}{0}%
+\setcounter{LWR at mcolvertbarsldash}{0}%
+\setcounter{LWR at mcolvertbarsrdash}{0}%
+\setboolean{LWR at mcolvertbaronleft}{true}%
 \LWR at parsemulticolumnalignment{#5}{\LWR at printmccoltype}%
 \LWR at subaddcmidruletrim%
 {\LWR at getexparray{LWR at trimlrules}{\arabic{LWR at tablecolindex}}}%
 {\LWR at getexparray{LWR at trimrrules}{\arabic{LWR at lastmulticolumn}}}%
-\ifbool{LWR at mcolvertbarl}{ tvertbarl}{}%
-\ifbool{LWR at mcolvertbarr}{ tvertbarr}{}%
-"%
+\ifnumcomp{\value{LWR at mcolvertbarsl}}{=}{1}{ tvertbarl}{}%
+\ifnumcomp{\value{LWR at mcolvertbarsl}}{>}{1}{ tvertbarldouble}{}%
+\ifnumcomp{\value{LWR at mcolvertbarsr}}{=}{1}{ tvertbarr}{}%
+\ifnumcomp{\value{LWR at mcolvertbarsr}}{>}{1}{ tvertbarrdouble}{}%
+\ifnumcomp{\value{LWR at mcolvertbarsldash}}{=}{1}{ tvertbarldash}{}%
+\ifnumcomp{\value{LWR at mcolvertbarsldash}}{>}{1}{ tvertbarldoubledash}{}%
+\ifnumcomp{\value{LWR at mcolvertbarsrdash}}{=}{1}{ tvertbarrdash}{}%
+\ifnumcomp{\value{LWR at mcolvertbarsrdash}}{>}{1}{ tvertbarrdoubledash}{}%
+"% NOT A TYPO
 \LWR at tdstartstyles%
 \LWR at addtabularrowcolor%
 \LWR at addcmidrulewidth%
+\LWR at addcdashline%
 \LWR at addtabularhrulecolor%
 \LWR at addmulticolvertrulecolor%
 \LWR at addformatwpalignment{#5}%
@@ -7054,7 +7356,9 @@
 }% optional given
 {\LWR at setlatestname{#3}}% no optional
 \LWR at tabularhtmlcolumns{1}{\arabic{LWR at tabletotalcols}}
-\LWR at domulticolumn{\arabic{LWR at tabletotalcols}}{\arabic{LWR at tabhtmlcoltotal}}{P}%
+\LWR at domulticolumn{\arabic{LWR at tabletotalcols}}%
+    {\arabic{LWR at tabhtmlcoltotal}}%
+    {P}%
 {% \LWR at domulticolumn
 \IfBooleanTF{#1}% star?
 {% yes star
@@ -7243,6 +7547,8 @@
     {\let\mynext\LWR at donothing}{}%
 \ifdefequal{\LWR at mynexttoken}{\cmidrule}%
     {\let\mynext\LWR at donothing}{}%
+\ifdefequal{\LWR at mynexttoken}{\morecmidrules}%
+    {\let\mynext\LWR at donothing}{}%
 \ifdefequal{\LWR at mynexttoken}{\specialrule}%
     {\let\mynext\LWR at donothing}{}%
 \ifdefequal{\LWR at mynexttoken}{\cline}%
@@ -7263,6 +7569,14 @@
     {\let\mynext\LWR at donothing}{}%
 \ifdefequal{\LWR at mynexttoken}{\rdelim}%
     {\let\mynext\LWR at donothing}{}%
+\ifdefequal{\LWR at mynexttoken}{\hdashline}%
+    {\let\mynext\LWR at donothing}{}%
+\ifdefequal{\LWR at mynexttoken}{\cdashline}%
+    {\let\mynext\LWR at donothing}{}%
+\ifdefequal{\LWR at mynexttoken}{\firsthdashline}%
+    {\let\mynext\LWR at donothing}{}%
+\ifdefequal{\LWR at mynexttoken}{\lasthdashline}%
+    {\let\mynext\LWR at donothing}{}%
 \ifdefequal{\LWR at mynexttoken}{\par}%
     {\let\mynext\LWR at donothing}{}%
 \LWR at traceinfo{LWR at tabledatacolumntag: about to do mynext}%
@@ -7311,7 +7625,7 @@
 \newcommand*{\LWR at HTMLhline}[1][]{%
     \ifbool{FormatWP}%
     {\LWR at docmidrule{1-\arabic{LWR at tabletotalcols}}}%
-    {\booltrue{LWR at doinghline}}%
+    {\addtocounter{LWR at hlines}{1}}%
     \LWR at getmynexttoken}%
 }
 {
@@ -7318,7 +7632,7 @@
 \newcommand*{\LWR at HTMLhline}{%
     \ifbool{FormatWP}%
     {\LWR at docmidrule{1-\arabic{LWR at tabletotalcols}}}%
-    {\booltrue{LWR at doinghline}}%
+    {\addtocounter{LWR at hlines}{1}}%
     \LWR at getmynexttoken}%
 }
 }% AtBeginDocument
@@ -7347,7 +7661,8 @@
 \LWR at traceinfo{LWR at tabular started}%
 \addtocounter{LWR at tabulardepth}{1}%
 \global\boolfalse{LWR at startedrow}%
-\global\boolfalse{LWR at doinghline}%
+\setcounter{LWR at hlines}{0}%
+\setcounter{LWR at hdashedlines}{0}%
 \global\boolfalse{LWR at doingtbrule}%
 \global\boolfalse{LWR at doingcmidrule}%
 \LWR at nullifyNoAutoSpacing%
@@ -7395,25 +7710,48 @@
             {%
                 \ifbool{FormatWP}%
                 {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
-                {\booltrue{LWR at doinghline}}%
+                {\addtocounter{LWR at hlines}{1}}%
             }%
     \LWR at getmynexttoken}%
-\DeclareDocumentCommand{\cmidrule}{O{\LWR at cmidrulewidth} d() m}%
-{\LWR at docmidrule[##1](##2){##3}\LWR at getmynexttoken}%
-\DeclareDocumentCommand{\bottomrule}{o d()}%
-    {%
-        \IfValueTF{##1}%
+\DeclareDocumentCommand{\cmidrule}{O{\LWR at cmidrulewidth} d() m}{%
+    \LWR at docmidrule[##1](##2){##3}%
+    \LWR at getmynexttoken%
+}%
+\DeclareDocumentCommand{\bottomrule}{o d()}{%
+    \IfValueTF{##1}%
+        {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
+        {%
+            \ifbool{FormatWP}%
             {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
-            {%
-                \ifbool{FormatWP}%
-                {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}}%
-                {\booltrue{LWR at doingtbrule}}%
-            }%
-    \LWR at getmynexttoken}%
+            {\booltrue{LWR at doingtbrule}}%
+        }%
+    \LWR at getmynexttoken%
+}%
 \DeclareDocumentCommand{\addlinespace}{o}{}%
 \DeclareDocumentCommand{\morecmidrules}{}{}%
 \DeclareDocumentCommand{\specialrule}{m m m d()}%
     {\LWR at docmidrule[##1](){1-\arabic{LWR at tabletotalcols}}\LWR at getmynexttoken}%
+\DeclareDocumentCommand{\hdashline}{o}{%
+    \ifbool{FormatWP}%
+        {\LWR at docdashline{1-\arabic{LWR at tabletotalcols}}}%
+        {\addtocounter{LWR at hdashedlines}{1}}%
+    \LWR at getmynexttoken%
+}%
+\DeclareDocumentCommand{\cdashline}{m}{%
+    \LWR at docdashline{##1}\LWR at getmynexttoken%
+}%
+\DeclareDocumentCommand{\firsthdashline}{o}{%
+    \ifbool{FormatWP}%
+        {\LWR at docdashline{1-\arabic{LWR at tabletotalcols}}}%
+        {\addtocounter{LWR at hdashedlines}{1}}%
+    \LWR at getmynexttoken%
+}%
+\DeclareDocumentCommand{\lasthdashline}{o}{%
+    \ifbool{FormatWP}%
+        {\LWR at docdashline{1-\arabic{LWR at tabletotalcols}}}%
+        {\addtocounter{LWR at hdashedlines}{1}}%
+    \LWR at getmynexttoken%
+}%
 \renewcommand{\multicolumn}{\LWR at htmlmulticolumn}%
 \renewcommand*{\mrowcell}{%
     \LWR at maybenewtablerow%
@@ -8250,7 +8588,7 @@
 \RenewDocumentCommand{\InlineClass}{o m +m}{##3}%
 \RenewDocumentEnvironment{BlockClass}{o m}{}{}%
 \renewcommand{\BlockClassSingle}[2]{##2}%
-\LetLtxMacro{\hspace}{\LWR at orighspace}%
+\LetLtxMacro\hspace\LWR at orighspace%
 \LetLtxMacro\hfill\LWR at orighfill%
 \LetLtxMacro\hfil\LWR at orighfil%
 \LetLtxMacro\rule\LWR at origrule%
@@ -8265,6 +8603,7 @@
 \let\raggedleft\LWR at origraggedleft%
 \let\centering\LWR at origcentering%
 \let\,\LWR at origcomma% disable HTML short unbreakable space
+\let\thinspace\LWR at origthinspace% disable HTML short unbreakable space
 \let\textellipsis\LWR at origtextellipsis%
 \let\textless\LWR at origtextless%
 \let\textgreater\LWR at origtextgreater%
@@ -8321,7 +8660,7 @@
 \LetLtxMacro\resizebox\LWR at origresizebox%
 \let\framebox\LWR at origframebox%
 \LetLtxMacro\mbox\LWR at origmbox%
-\let\makebox\LWR at origmakebox%
+\LetLtxMacro\makebox\LWR at origmakebox%
 \let\fbox\LWRprint at fbox%
 \let\fboxBlock\LWRprint at fbox%
 \LetLtxMacro\fminipage\LWRprint at fminipage%
@@ -10145,15 +10484,22 @@
 \newcommand*{\LWR at f@shape}{up}
 
 \newcommand*{\LWR at textcurrentfont}[1]{%
-\csuse{text\LWR at f@family}{%
-\csuse{text\LWR at f@series}{%
-\csuse{text\LWR at f@shape}{%
-#1%
-}%
-}%
-}%
+\InlineClass{%
+        text\LWR at f@family\LWR at origtilde{}%
+        text\LWR at f@series\LWR at origtilde{}%
+        text\LWR at f@shape%
+    }%
+    {#1}%
 }
 
+\newenvironment*{LWR at blocktextcurrentfont}{%
+\BlockClass{%
+        text\LWR at f@family\LWR at origtilde{}%
+        text\LWR at f@series\LWR at origtilde{}%
+        text\LWR at f@shape%
+    }%
+}{\endBlockClass}
+
 \renewrobustcmd*{\mdseries}{\renewcommand*{\LWR at f@series}{md}}
 
 \renewrobustcmd*{\bfseries}{\renewcommand*{\LWR at f@series}{bf}}
@@ -10224,6 +10570,7 @@
 
 
 \renewrobustcmd*{\,}{\HTMLunicode{202f}} % HTML thin non-breakable space
+\renewrobustcmd*{\thinspace}{\HTMLunicode{202f}}    % HTML thin non-breakable space
 
 \renewrobustcmd*{~}{\HTMLentity{nbsp}}
 
@@ -10321,7 +10668,7 @@
 }
 \NewDocumentCommand{\LWR at nohspace}{s m}{}
 
-\LetLtxMacro{\hspace}{\LWR at hspace}
+\LetLtxMacro\hspace\LWR at hspace
 
 \NewDocumentCommand{\LWR at vspace}{s m}{}
 \LetLtxMacro\vspace\LWR at vspace



More information about the tex-live-commits mailing list