summaryrefslogtreecommitdiff
path: root/macros/luatex/latex/longmath/longmath-doc.cls
diff options
context:
space:
mode:
Diffstat (limited to 'macros/luatex/latex/longmath/longmath-doc.cls')
-rw-r--r--macros/luatex/latex/longmath/longmath-doc.cls168
1 files changed, 168 insertions, 0 deletions
diff --git a/macros/luatex/latex/longmath/longmath-doc.cls b/macros/luatex/latex/longmath/longmath-doc.cls
new file mode 100644
index 0000000000..04ce8b2e3d
--- /dev/null
+++ b/macros/luatex/latex/longmath/longmath-doc.cls
@@ -0,0 +1,168 @@
+%%
+%% longmath-doc.cls is part of longmath version 0.1.
+%%
+%% (c) 2024 Hans-Jürgen Matschull
+%%
+%% 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.
+%%
+%% This work has the LPPL maintenance status 'maintained'.
+%%
+%% The Current Maintainer of this work is Hans-Jürgen Matschull
+%%
+%% see README for a list of files belonging to longmath.
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{longmath-doc}[2024/03/25]
+\LoadClass[a4paper,10pt]{scrartcl}
+\RequirePackage{geometry}
+\geometry{hmargin=20mm,vmargin={20mm,30mm}}
+\RequirePackage{tikz}
+
+\let\codefont\normalsize
+\let\execfont\normalsize
+
+\definecolor{pcol}{rgb}{0.1 0.0 0.3}
+\definecolor{pcol}{rgb}{0.1 0.0 0.3}
+
+\RequirePackage[no-math]{fontspec}
+\setmainfont{Linux Libertine}
+\setmonofont[Scale=0.80]{Cascadia Mono PL}
+\setsansfont[Scale=0.85]{Droid Sans}
+
+
+\RequirePackage{unicode-math}
+\setmathfont{Tex Gyre Pagella Math}
+
+\RequirePackage{amsmath}
+
+\def\p#1{\textcolor{pcol}{\textsf{#1}}}
+
+\definecolor{code}{rgb}{0.4 0.6 0.8}
+\definecolor{exec}{rgb}{0.8 0.6 0.3}
+
+\colorlet{codeback}{code!02!white}
+\colorlet{execback}{exec!03!white}
+\colorlet{whiteback}{white}
+
+\colorlet{codebord}{code!50!gray}
+\colorlet{execbord}{exec!50!gray}
+\colorlet{whitebord}{white}
+
+\definecolor{codetext}{rgb}{0.0 0.0 0.1}
+\definecolor{codeword}{rgb}{0.2 0.0 0.2}
+\definecolor{codedefn}{rgb}{0.1 0.2 0.1}
+\definecolor{codenumb}{rgb}{0.1 0.0 0.3}
+\definecolor{codepunc}{rgb}{0.4 0.2 0.0}
+\definecolor{codestring}{rgb}{0.4 0.0 0.0}
+\definecolor{codekey}{rgb}{0.5 0.3 0.0}
+\definecolor{codemacro}{rgb}{0.2 0.0 0.2}
+\definecolor{codeluac}{rgb}{0.3 0.0 0.1}
+\definecolor{codemath}{rgb}{0.4 0.2 0.0}
+\definecolor{codeoper}{rgb}{0.2 0.0 0.2}
+\definecolor{codegroup}{rgb}{0.6 0.3 0.0}
+\definecolor{coderest}{rgb}{0.9 0.0 0.9}
+\definecolor{codespace}{rgb}{0.0 0.0 0.0}
+\definecolor{codecomm}{rgb}{0.3 0.3 0.3}
+
+\newcatcodetable\longmathdoc@cctable@
+\savecatcodetable\longmathdoc@cctable@
+\newcount\longmathdoc@ccnum@
+\longmathdoc@ccnum@=\the\longmathdoc@cctable@
+
+\setbox0\hbox{\codefont\texttt{0}}
+\newdimen\ttwidth\ttwidth=\wd0
+
+\directlua{ longmathdoc = require 'longmath-doc.lua' }
+
+\newsavebox{\codebox}
+\newsavebox{\execbox}
+\newdimen\boxsize
+\newdimen\codesize
+\newdimen\execsize
+\newdimen\halfsize
+\newdimen\fullsize
+
+\newif\ifcode
+
+\def\skipin{\ifhmode\par\fi\ifdim\prevdepth>\dp\strutbox\relax\vskip-0.5\fboxsep\fi}
+\def\skipex{\ifhmode\par\fi\ifdim\prevdepth>\dp\strutbox\relax\vskip 1.0\fboxsep\fi}
+
+\def\xpar{\vskip 0.5\fboxsep\par}
+
+\fboxsep = 1.1mm
+
+\def\codeframe#1{\fcolorbox{#1bord}{#1back}{\box\codebox}}
+\def\execframe#1{\fcolorbox{#1bord}{#1back}{\box\execbox}}
+
+\def\.{\strut\\}
+\def\:{\strut\\[-1.9\baselineskip]}
+
+\def\startcode#1{\begingroup\let\do\@makeother\dospecials\@makeother\"\directlua{longmathdoc.readcode('#1')}}
+\def\startexec{\begin{lrbox}{\execbox}\begin{minipage}[t]{\execsize}
+\execfont\abovedisplayskip 5pt \abovedisplayshortskip 5pt }
+\def\stopexec{\end{minipage}\end{lrbox}\dp\execbox = \dimexpr \dp\execbox + 2pt \relax }
+
+\def\makecodebox{\begin{lrbox}{\codebox}\begin{minipage}[t]{\codesize}\codefont\ttfamily
+ \directlua{longmathdoc.writecode()}\end{minipage}\end{lrbox}}
+
+\newenvironment{code*}
+{\xpar\startcode{code*}}
+{\codesize = \dimexpr \linewidth - 2 \fboxrule - 2 \fboxsep \relax
+ \makecodebox\skipin\par\codeframe{code}\xpar}
+
+\newenvironment{code+}
+{\par\startcode{code+}}
+{\global\codetrue \global\codesize = \codesize }
+
+\newenvironment{code}
+{\par\startcode{code}}
+{\halfsize = \dimexpr 0.5 \linewidth - 2 \fboxrule - 2 \fboxsep - 0.5 \parskip \relax
+ \global\codetrue \ifdim \codesize < \halfsize \relax \global\codesize = \halfsize \fi}
+
+\def\makesize{
+ \ifcode
+ \execsize = \dimexpr \linewidth - 4 \fboxrule - 4 \fboxsep - 1.2 \parskip - \codesize \relax
+ \else
+ \execsize = \dimexpr \linewidth - 2 \fboxrule - 2 \fboxsep \relax
+ \fi
+}
+
+\newenvironment{exec}
+{\makesize\makecodebox\startexec\raggedright}
+{\stopexec\skipin\ifcode\doublebox{code}{exec}\else\xpar\execframe{exec}\fi\global\codefalse\xpar}
+
+\newenvironment{exec*}
+{\makesize\makecodebox\startexec}
+{\stopexec\skipin\ifcode\doublebox{code}{exec}\else\xpar\execframe{exec}\fi\global\codefalse\xpar}
+
+\def\doublebox#1#2{%
+ \ifdim \ht\codebox>\ht\execbox \ht\execbox=\ht\codebox \else \ht\codebox=\ht\execbox \fi
+ \ifdim \dp\codebox>\dp\execbox \dp\execbox=\dp\codebox \else \dp\codebox=\dp\execbox \fi
+ \xpar\codeframe{#1}\hfill\execframe{#2}
+}
+
+\def\ecomm{\quad}
+\def\bcomm{\egroup}
+\begingroup\catcode`\{=\active\global\let{\bcomm\endgroup
+\def\comm{\par\skipex\noindent $\bullet$ \bgroup\aftergroup\ecomm\bgroup\catcode`\{=\active}
+
+\begingroup
+\catcode`"\active
+\gdef\verbA{\begingroup\let\do\@makeother\dospecials\let"\verbB\directlua{ longmathdoc.readstring() }}
+\gdef\verbB{\endgroup\directlua{ longmathdoc.writestring() }}
+\gdef"{\verbA}
+\endgroup
+
+\def\verbC#1{\texttt{\textcolor{codetext!50!black}{#1}}}
+
+\catcode`°\active \def°#1°{\textsl{#1}}
+
+\AtBeginDocument{\catcode`"\active}
+
+\endinput