summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-11-28 20:59:47 +0000
committerKarl Berry <karl@freefriends.org>2022-11-28 20:59:47 +0000
commita253c35e1f044cd42907d3a626b7fece17995317 (patch)
tree74b6a8d9b82007cf0168454cd8412ac97fa66c42
parent58d15b7a7eeeb7196e5896e8b4ace9e25dc7b470 (diff)
eolang (28nov22)
git-svn-id: svn://tug.org/texlive/trunk@65131 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/latex/eolang/README.md4
-rw-r--r--Master/texmf-dist/doc/latex/eolang/eolang.pdfbin1552474 -> 1746109 bytes
-rw-r--r--Master/texmf-dist/source/latex/eolang/eolang.dtx309
-rw-r--r--Master/texmf-dist/tex/latex/eolang/eolang.sty139
4 files changed, 355 insertions, 97 deletions
diff --git a/Master/texmf-dist/doc/latex/eolang/README.md b/Master/texmf-dist/doc/latex/eolang/README.md
index 86809ceb26f..43774079bc0 100644
--- a/Master/texmf-dist/doc/latex/eolang/README.md
+++ b/Master/texmf-dist/doc/latex/eolang/README.md
@@ -16,8 +16,8 @@ and then use in the preamble:
\begin{document}
\begin{phiquation}
x -> [
- @ -> |foo|(5),
- y -> [ \lambda -> M_1 ]].
+ @ -> foo(5),
+ y -> [ L> M_1 ]].
\end{phiquation}
\end{document}
```
diff --git a/Master/texmf-dist/doc/latex/eolang/eolang.pdf b/Master/texmf-dist/doc/latex/eolang/eolang.pdf
index 0743e93e951..f22ea00e441 100644
--- a/Master/texmf-dist/doc/latex/eolang/eolang.pdf
+++ b/Master/texmf-dist/doc/latex/eolang/eolang.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/latex/eolang/eolang.dtx b/Master/texmf-dist/source/latex/eolang/eolang.dtx
index ee689421618..8a9469e0d79 100644
--- a/Master/texmf-dist/source/latex/eolang/eolang.dtx
+++ b/Master/texmf-dist/source/latex/eolang/eolang.dtx
@@ -50,7 +50,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{eolang}
%<*package>
-[2022-11-18 0.7.0 Formulas and Graphs for EO Programming Language]
+[2022-11-28 0.7.1 Formulas and Graphs for EO Programming Language]
%</package>
%<*driver>
\documentclass{ltxdoc}
@@ -196,8 +196,8 @@
% \begin{document}
% \begin{sodg}
% v0 \\ v0===> \\ v0!!A
-% v1 xy:v0,-.8,2.8 data:42 \\ =>v1
-% v0->v1 a:x rho
+% v1 xy:v0,-.8,2.8 data:42 tag:d_1
+% v0->v1 a:x rho \\ =>v1
% v2 xy:v0,+1,+1 atom:\xi.x+1
% v1->v2 a:|hi| bend:-15
% v2->v0 pi bend:10 % a comment
@@ -212,6 +212,7 @@
% The following markers are supported for a vertex:
% \begin{itemize}\setlength\itemsep{0em}
+% \item ``|tag:<math>|'' puts a custom label |<math>| into the circle,
% \item ``|data:[<box>]|'' makes it a data vertex with an optional attached ``|<box>|''
% (the content of the box may only be numeric data),
% \item ``|atom:[<box>]|'' makes it an atom with an optional attached ``|<box>|''
@@ -250,7 +251,7 @@
% \DescribeMacro{\phic}
% \DescribeMacro{\xmir}
% There is also a no-argument command |\eolang| to help you print the name of
-% \eolang{} language. It understands |anonymous| mode of \href{https://ctan.org/pkg/acmart}{acmart} and prints itself
+% \eolang{} language. It understands the |anonymous| mode of \href{https://ctan.org/pkg/acmart}{acmart} and prints itself
% differently, to double-blind your paper. There is also |\phic| command to print
% the name of \phic{}, also sensitive to |anonymous| mode. The macro |\xmir| prints "XMIR".
% \docshotOptions{firstline=4,lastline=10}
@@ -271,7 +272,7 @@
% \DescribeMacro{\phiWave}
% \DescribeMacro{\phiDotted}
% A few simple commands are defined to help you render arrows.
-% It is recommende not to use them directly, but use |!->| instead. However, if you
+% It is recommended not to use them directly, but use |!->| instead. However, if you
% want to use |\phiConst|, wrap it in |\mathrel| for better display:
% \docshotOptions{firstline=6,lastline=12}
% \begin{docshot}
@@ -281,17 +282,36 @@
% \usepackage{eolang}
% \begin{document}\noindent
% If $x$ is an identifier and $y$ is
-% an objects, then $x \phiConst y$
+% an object, then $x \phiConst y$
% makes $y$ a constant,
% $x \phiWave y$ makes it a decoratee
-% of arbitrary number of control-flow
-% objects, while $x \phiDotted y$
-% makes it a special attribute.
+% of an arbitrary number of objects,
+% while $x \phiDotted y$ makes it
+% a special attribute.
+% \end{document}
+% \end{docshot}
+
+% \DescribeMacro{\phiOset}
+% \DescribeMacro{\phiUset}
+% If you want to put a text over an arrow or under it, use |\phiOset| and |\phiUset| respectively:
+% \docshotOptions{firstline=6,lastline=11}
+% \begin{docshot}
+% \documentclass{article}
+% \pagestyle{empty}
+% \usepackage[paperwidth=3in]{geometry}
+% \usepackage{eolang}
+% \begin{document}\noindent
+% When the names of attributes and their
+% values don't matter, we use an arrow
+% with a star, for example:
+% \begin{phiquation*}
+% [[ \phiOset{*}{->} ]].
+% \end{phiquation*}
% \end{document}
% \end{docshot}
% \DescribeMacro{\phiMany}
-% Sometimes you may need to simplify the way you describe an object:
+% Sometimes you may need to simplify the way you describe an object (the typesetting is a bit off, but this is not because of us, but because of \href{https://tex.stackexchange.com/questions/664772}{this}):
% \docshotOptions{firstline=6,lastline=14}
% \begin{docshot}
% \documentclass{article}
@@ -311,10 +331,30 @@
% \end{document}
% \end{docshot}
+% \DescribeMacro{\phiSaveTo}
+% \DescribeMacro{\sodgSaveTo}
+% If you want to use |phiquation| or |sodg| environments inside |tabular| or any other environment or command, you won't be able to do this, because |phiquation| and |sodg| are ``verbatim'' environments. |\phiSaveTo| and |\sodgSaveTo| commands will help you in this situation. You use them right before |\begin{phiquation}| or |\begin{sodg}| respectively --- the content of the equation or the graph won't be rendered, but instead saved to the file. Later, inside |tabular|, you can use it through the |\input| macro (don't forget the |\parbox|):
+% \docshotOptions{firstline=5,lastline=12}
+% \begin{docshot}
+% \documentclass{article}
+% \usepackage{eolang}
+% \pagestyle{empty}
+% \begin{document}
+% \phiSaveTo{a}
+% \begin{phiquation*}
+% [[ x -> [[D>42]] ]]
+% \end{phiquation*}
+% \begin{tabular}{p{.5in}l}
+% Free: & $[[x -> ?]]$ \\
+% Bound: & \parbox{1in}{\input{a}} \\
+% \end{tabular}
+% \end{document}
+% \end{docshot}
+
% \section{Package Options}
% \DescribeMacro{tmpdir}
-% The default location of temp files is |_eolang|. You can change this using |tmpdir| option:
+% The default location of temp files is |_eolang|. You can change this with the help of the |tmpdir| package option:
%\iffalse
%<*verb>
%\fi
@@ -326,7 +366,7 @@
%\fi
% \DescribeMacro{nodollar}
-% You may disable special treatment of the dollar sign:
+% You may disable the special treatment of the dollar sign by using the |nodollar| package option:
%\iffalse
%<*verb>
%\fi
@@ -359,7 +399,7 @@
% \end{document}
% \end{docshot}
-% This is how you can use |\dfrac| from |amsmath| for large inference rules,
+% This is how you can use |\dfrac| from \href{https://ctan.org/pkg/amsmath}{amsmath} for large inference rules,
% with the help of |\begin{split}| and |\end{split}|:
% \docshotOptions{firstline=6,lastline=15}
% \begin{docshot}
@@ -381,7 +421,7 @@
% \end{document}
% \end{docshot}
-% The |phiquation| environment may be used together with \href{https://ctan.org/pkg/acmart}{acmart}:
+% The |phiquation| environment may be used together with the \href{https://ctan.org/pkg/acmart}{acmart} package:
% \begin{docshot}
% \documentclass{acmart}
% \usepackage{eolang}
@@ -396,7 +436,7 @@
% \end{document}
% \end{docshot}
-% It's possible to use |\label| inside |phiquation| environment:
+% It's possible to use |\label| inside the |phiquation| environment (pay attention to how you can disable our custom parsing of math formulas by means of curled brackets around the ``|4|'' number):
% \docshotOptions{firstline=6,lastline=13}
% \begin{docshot}
% \documentclass{article}
@@ -407,7 +447,7 @@
% Discriminant can be calculated using
% the following simple formula:
% \begin{phiquation}
-% D = b{^2} - 4ac.
+% D = b{^2} - {4}ac.
% \label{d}
% \end{phiquation}
% Eq.~\ref{d} is also widely used in
@@ -415,6 +455,36 @@
% \end{document}
% \end{docshot}
+% You can add comments to your equations, using the |&&| command (pay attention, the text inside |\text{}| is not processed and treated like a plain text):
+% \docshotOptions{firstline=6,lastline=10}
+% \begin{docshot}
+% \documentclass{article}
+% \usepackage[paperwidth=4in]{geometry}
+% \usepackage{eolang}
+% \pagestyle{empty}
+% \begin{document}
+% \begin{phiquation*}
+% [[ 0->x ]] && \text{This is formation}
+% [[ 0->? ]] && \text{Abstraction}
+% x(D>42) && \text{Application}
+% \end{phiquation*}
+% \end{document}
+% \end{docshot}
+
+% If you don't use |nodollar| package option, you can still use normal parsing of the dollar sign, by means of |\(...\)| syntax:
+% \docshotOptions{firstline=6,lastline=8}
+% \begin{docshot}
+% \documentclass{article}
+% \usepackage[paperwidth=3in]{geometry}
+% \usepackage{eolang}
+% \pagestyle{empty}
+% \begin{document}\noindent
+% The object formation $[[0->x]]$
+% may be replaced with a formula
+% \( Q \times a^2 \).
+% \end{document}
+% \end{docshot}
+
% The |phiquation| environment will automatically align formulas by the first
% arrow, if there are only left-aligned formulas:
% \docshotOptions{firstline=5,lastline=10}
@@ -440,7 +510,7 @@
% \thispagestyle{empty}
% \begin{document}
% \begin{phiquation*}
-% [[ b -> ? ]], \\
+% [[ b -> ? ]],
% [[ @ -> TRUE, \Delta ..> 42 ]], \\
% \Delta = |43-09|.
% \end{phiquation*}
@@ -604,23 +674,24 @@
% \begin{macro}{eolang-phi.pl}
% \changes{0.0.2}{2022/10/21}{The symbols ``\texttt{[}'' and ``\texttt{]}'' replaced with ``\texttt{[[}'' and ``\texttt{]]}'' for abstract object brackets, because they conflicted with normal square brackets}
% \changes{0.0.2}{2022/10/21}{New symbol added for basket slots}
-% \changes{0.0.2}{2022/10/21}{Parsing of symbols ``\texttt{@},'' ``\texttt{\^{}},'' and ``\texttt{\&}'' enabled (\texttt{\char`\\varphi}, \texttt{\char`\\rho}, and \texttt{\char`\\sigma})}
+% \changes{0.0.2}{2022/10/21}{Parsing of the symbols ``\texttt{@},'' ``\texttt{\^{}},'' and ``\texttt{\&}'' enabled (\texttt{\char`\\varphi}, \texttt{\char`\\rho}, and \texttt{\char`\\sigma})}
% \changes{0.1.0}{2022/10/26}{A new Perl script "\texttt{eolang-phi.pl}" added for parsing of phi expressions.}
% \changes{0.2.0}{2022/10/29}{Numbers automatically render as \texttt{\char`\\texttt}. No need to use vertical bars around them anymore.}
% \changes{0.3.0}{2022/10/30}{New arrow added, that looks like \texttt{\char`\\leadsto}.}
% \changes{0.5.0}{2022/11/11}{Automated formatting of \texttt{TRUE} and \texttt{FALSE} added.}
-% \changes{0.5.0}{2022/11/13}{A new syntax introduced for \texttt{\char`\\alpha}-attributes: \texttt{0->}.}
+% \changes{0.5.0}{2022/11/13}{A new syntax introduced for the \texttt{\char`\\alpha} attributes: \texttt{0->}.}
% \changes{0.5.0}{2022/11/14}{It's possible to use double names for attributes, such as \texttt{0/g->}.}
% \changes{0.7.0}{2022/11/17}{Object names are automatically converted to \texttt{\char`\\texttt}, provided their names include two or more symbols.}
% \changes{0.7.0}{2022/11/17}{Text in quotes is automatically converted to \texttt{\char`\\texttt}.}
% \changes{0.7.0}{2022/11/17}{New syntax sugar constructs added: \texttt{D>} and \texttt{L>} for \texttt{\char`\\Delta} and \texttt{\char`\\lambda} with a dotted arrow respectively.}
% \changes{0.7.0}{2022/11/18}{New syntax sugar for $\Phi$, just using capital ``\texttt{Q}'' is enough.}
+% \changes{0.8.0}{2022/11/21}{Inside \texttt{phiquation} any text inside the \texttt{\char`\\text} macro is not processed.}
% Then, we create a Perl script for |phiquation| processing using |VerbatimOut| environment from
% \href{https://ctan.org/pkg/fancyvrb}{fancyvrb}:
% \begin{macrocode}
\makeatletter
\begin{VerbatimOut}{\eolang@tmpdir/eolang-phi.pl}
-$env = $ARGV[0];
+$macro = $ARGV[0];
open(my $fh, '<', $ARGV[1]);
my $tex; { local $/; $tex = <$fh>; }
print '% This file is auto-generated', "\n";
@@ -639,42 +710,78 @@ print '% ---', "\n";
$tex =~ s/%.*\n/\n/g;
$tex =~ s/^\s+|\s+$//g;
my $gathered = (0 == $tex =~ /\n\s+/g);
-if ($env ne 'phiq') {
- $tex =~ s/\s+\\\n\s*//g;
+if ($gathered) {
+ print '% The "gathered" is used since all lines are left-aligned' . "\n";
+}
+my $align = 0;
+print '% The "align" is NOT used by default' . "\n";
+if (index($tex, '&&') >= 0) {
+ $macro =~ s/equation/align/g;
+ $align = 1;
+ print '% The "align" is used because of && seen in the text' . "\n";
+}
+if ($macro ne 'phiq') {
$tex =~ s/\\\\\n/\n\n/g;
+ $tex =~ s/\\\n\s*//g;
$tex =~ s/\n*(\\label\{[^\}]+\})\n*/\1/g;
+ $tex =~ s/\n{3,}/\n\n/g;
}
-$tex =~ s/&/\\sigma{}/g;
+my @texts = ();
+sub trep {
+ my ($s) = @_;
+ my $open = 0;
+ my $p = 0;
+ for (; $p < length($s); $p++) {
+ $c = substr($s, $p, 1);
+ if ($c eq '}') {
+ if ($open eq 0) {
+ last;
+ }
+ $open--;
+ }
+ if ($c eq '{') {
+ $open++;
+ }
+ }
+ push(@texts, substr($s, 0, $p));
+ return '{TEXT' . (0+@texts - 1) . '}' . substr($s, $p + 1);
+}
+$tex =~ s/\\text\{(.+)/trep("$1")/ge;
+$tex =~ s/(?<![{&])&(?![&}])/\\sigma{}/g;
$tex =~ s/([^\\{a-z0-9]|^)Q(?![a-z0-9])/\1\\Phi{}/g;
$tex =~ s/([^\\{a-z0-9]|^)D>/\1\\Delta{}..>/g;
$tex =~ s/([^\\{a-z0-9]|^)L>/\1\\lambda{}..>/g;
$tex =~ s/"([^"]+)"/|"\1"|/g;
-$tex =~ s/([ )(.>\/]|^)([a-z0-9]{2,})(?=[ )(.-])/\1|\2|/g;
+$tex =~ s/(^|(?<=[\s)(\]\[,.>\/]))([a-z][a-z0-9]+)(?=[\s)(\]\[,.-]|$)/|\2|/g;
$tex =~ s/([^^_]|^)([0-9]+|\*)\/(\\?[a-z]+|\|[a-z]+\|)
(->|\.\.>|~>|:=|!->)/\1\\alpha_{\2}\\vert{}\3\\space{}\4/xg;
$tex =~ s/([^^_]|^)([0-9]+|\*)
(->|\.\.>|~>|:=|!->)/\1\\alpha_{\2}\\space{}\3/xg;
-if ($env ne 'phiq') {
+if ($macro ne 'phiq') {
$tex =~ s/\\begin\{split\}\n/\\begin{split}&/g;
$tex =~ s/\n\s*\\end\{split\}/\\end{split}/g;
$tex =~ s/\n\n/\\\\&/g;
- $tex =~ s/\n/\\\\[-4pt]&/g;
+ $tex =~ s/\n/\\phiEOL{}\n&/g;
+ $tex =~ s/\\\\/\\\\\n/g;
$tex =~ s/([^&\s])\s{2}([^\s])/\1 \2/g;
$tex =~ s/\s{2}/ \\quad{}/g;
- my @leads = $tex =~ /&[^\s]+\s(->|:=|=)/g;
- my @eols = $tex =~ /&/g;
$tex = '&' . $tex;
+ my $lead = '[^\s]+\s(->|:=|=)';
+ my @leads = $tex =~ /&${lead}/g;
+ my @eols = $tex =~ /&/g;
if (0+@leads == 0+@eols && 0+@eols > 0) {
- $tex =~ s/&([^\s\}]+)\s/\1&/g;
+ $tex =~ s/&${lead}/\1&/g;
$gathered = 0;
+ print '% The "gathered" is NOT used because all ' .
+ (0+@eols) . ' lines are ' . (0+@leads) . " leads\n";
}
}
$tex =~ s/\$/\\xi{}/g;
$tex =~ s/(?<!\{)\^/\\rho{}/g;
$tex =~ s/\[\[/\\llbracket\\mathrel{}/g;
$tex =~ s/\]\]/\\mathrel{}\\rrbracket{}/g;
-$tex =~ s/([\s,>\(])([0-9A-F]{2}(?:-[0-9A-F]{2})+|
- [0-9]+(?:\.[0-9]+)?)/\1|\2|/xg;
+$tex =~ s/([\s,>(])([0-9A-F]{2}(?:-[0-9A-F]{2})+|
+ [0-9]+(?:\.[0-9]+)?)(?!\{)/\1|\2|/xg;
$tex =~ s/TRUE/|TRUE|/g;
$tex =~ s/FALSE/|FALSE|/g;
$tex =~ s/\?/\\varnothing{}/g;
@@ -687,30 +794,37 @@ $tex =~ s/:=/\\mathrel{\\vDash}/g;
$tex =~ s/\.\.>/\\mathrel{\\phiDotted}/g;
$tex =~ s/\|{2,}/|/g;
$tex =~ s/\|([^\|]+)\|/\\textnormal{\\texttt{\1}}{}/g;
-if ($env eq 'phiq') {
+$tex =~ s/\{TEXT(\d+)\}/'\\text{' . @texts[$1] . '}';/ge;
+if ($macro eq 'phiq') {
print '$' if ($tex ne '');
} else {
- print '\begin{', $env, '}';
- if ($gathered) {
- print '\begin{gathered}';
- } else {
- print '\begin{split}';
+ print '\begin{', $macro, "}\n";
+ if (not($align)) {
+ if ($gathered) {
+ print '\begin{gathered}';
+ } else {
+ print '\begin{split}';
+ }
+ print "\n";
}
}
-if ($gathered) {
- $tex =~ s/(\\\\(?:\[[^\]]+\])?)&/\1/g;
+if ($gathered and not($align)) {
$tex =~ s/^&//g;
+ $tex =~ s/\n&/\n/g;
}
print $tex;
-if ($env eq 'phiq') {
+if ($macro eq 'phiq') {
print '$' if ($tex ne '');
} else {
- if ($gathered) {
- print '\end{gathered}';
- } else {
- print '\end{split}';
+ if (not($align)) {
+ print "\n";
+ if ($gathered) {
+ print '\end{gathered}';
+ } else {
+ print '\end{split}';
+ }
}
- print '\end{', $env, '}';
+ print "\n" . '\end{' . $macro . '}';
}
print '\endinput';
\end{VerbatimOut}
@@ -720,8 +834,18 @@ print '\endinput';
% \end{macrocode}
% \end{macro}
+% \begin{macro}{\phiSaveTo}
+% \changes{0.8.0}{2022/11/20}{The output of the \texttt{phiquation} environment can be redirected to a file.}
+% Then, we define the |\phiSaveTo| command to instruct the |phiquation| environment that the output should not be sent to the document but saved to the file instead:
+% \begin{macrocode}
+\makeatletter
+\newcommand\phiSaveTo[1]{\def\eolang@phiSaveTo{#1}}
+\makeatother
+% \end{macrocode}
+% \end{macro}
+
% \begin{macro}{phiquation}
-% Then, we define |phiquation| and |phiquation*| environments through a supplementary
+% Then, we define the |phiquation| and the |phiquation*| environments through a supplementary
% |\eolang@process| command:
% \begin{macrocode}
\makeatletter\newcommand\eolang@process[1]{
@@ -733,8 +857,10 @@ print '\endinput';
perl "\eolang@tmpdir/eolang-phi.pl"
'#1'
"\eolang@tmpdir/\jobname/\hash.tex"
- \ifdefined\eolang@nocomments | perl -pe 's/\%.*(\\n|$)//g'\fi}%
+ \ifdefined\eolang@nocomments | perl -pe 's/\%.*(\\n|$)//g'\fi
+ \ifdefined\eolang@phiSaveTo > \eolang@phiSaveTo\fi}%
\setcounter{FancyVerbLine}{\value{eolang@lineno}}%
+ \def\eolang@phiSaveTo{\relax}%
}
\newenvironment{phiquation*}%
{\catcode`\|=12 \VerbatimEnvironment%
@@ -774,7 +900,7 @@ print '\endinput';
% \end{macro}
% \begin{macro}{nodollar}
-% \changes{0.7.0}{2022/11/18}{Now it is possible to use dollar sign instead of \texttt{\char`\\phiq}.}
+% \changes{0.7.0}{2022/11/18}{Now it is possible to use dollar sign instead of the \texttt{\char`\\phiq} command.}
% Then, we redefine dollar sign:
% \begin{macrocode}
\ifdefined\eolang@nodollar\else
@@ -790,15 +916,16 @@ print '\endinput';
% \begin{macro}{eolang-sodg.pl}
% \changes{0.0.2}{2022/10/24}{The Perl file now has a fixed name, which doesn't depend on the name of the TeX job. This file may be shared among jobs, no need to make it uniquely named.}
% \changes{0.1.0}{2022/10/26}{There are two Perl scripts now: one for \texttt{phiquation}, another one for \texttt{sodg}.}
-% \changes{0.2.0}{2022/10/28}{The content of \texttt{atom} and \texttt{data} boxes is parsed automatically as formulas and numbers, respectively.}
-% \changes{0.4.0}{2022/10/31}{Labels on the edges are automatically printed as math formulas. Also, boxes are prefixed with \texttt{\char`\\Delta} and \texttt{\char`\\lambda} commands.}
+% \changes{0.2.0}{2022/10/28}{The content of the \texttt{atom} and the \texttt{data} boxes is parsed automatically as formulas and numbers, respectively.}
+% \changes{0.4.0}{2022/10/31}{Labels on the edges are automatically printed as math formulas. Also, boxes are prefixed with the \texttt{\char`\\Delta} and the \texttt{\char`\\lambda} commands.}
% \changes{0.4.0}{2022/10/31}{Relative positioning of vertices fixed.}
-% \changes{0.4.0}{2022/10/31}{Transforming arrows added with \texttt{=>} syntax, also markers with exclamation mark syntax.}
+% \changes{0.4.0}{2022/10/31}{Transforming arrows added with the \texttt{=>} syntax, also markers with exclamation mark syntax.}
% \changes{0.5.0}{2022/11/09}{New syntax introduced that allows to make clones of vertices and all their dependants.}
-% \changes{0.5.0}{2022/11/09}{Now edges may have \texttt{break} attribute, to make them shorter.}
-% \changes{0.5.0}{2022/11/10}{It is possible to use multiple ``equaltion sign'' symbols for transition arrows \texttt{=>}.}
-% \changes{0.5.0}{2022/11/12}{It is possible to use tikz commands inside \texttt{sodg} environment.}
-% \changes{0.6.0}{2022/11/13}{The attribute \texttt{rrho} is retired, now \texttt{rho} works just fine in all situations.}
+% \changes{0.5.0}{2022/11/09}{Now edges may have the \texttt{break} attribute, to make them shorter.}
+% \changes{0.5.0}{2022/11/10}{It is possible to use multiple the ``equaltion sign'' symbols for transition arrows \texttt{=>}.}
+% \changes{0.5.0}{2022/11/12}{It is possible to use TikZ commands inside the \texttt{sodg} environment.}
+% \changes{0.6.0}{2022/11/13}{The \texttt{rrho} attribute is retired, now \texttt{rho} works just fine in all situations.}
+% \changes{0.8.0}{2022/11/20}{The \texttt{tag} attribute is introduced for changing labels inside a vertex circle.}
% Then, we create a Perl script for |sodg| graphs processing using |VerbatimOut| from
% \href{https://ctan.org/pkg/fancyvrb}{fancyvrb}:
% \begin{macrocode}
@@ -1037,8 +1164,20 @@ for (my $c = 0; $c < 0+@cmds; $c++) {
print ',phi-object';
}
print ']';
- print ' (', $head, ')';
- print ' {$' . vertex($head) . '$}';
+ print ' (' . $head . ')';
+ print ' {';
+ if (exists $opts{'tag'}) {
+ my $t = $opts{'tag'};
+ if (index($t, '$') == -1) {
+ $t = '$' . $t . '$';
+ } else {
+ $t = fmt($t);
+ }
+ print $t;
+ } else {
+ print '$' . vertex($head) . '$';
+ }
+ print '}';
if (exists $opts{'box'}) {
print ' node[phi-box] at (';
print $head, '.south east) {';
@@ -1077,7 +1216,6 @@ print '\endinput';
\RequirePackage{tikz}
\usetikzlibrary{arrows}
\usetikzlibrary{shapes}
- \usetikzlibrary{snakes}
\usetikzlibrary{decorations}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{decorations.pathreplacing}
@@ -1173,6 +1311,16 @@ print '\endinput';
% \end{macrocode}
% \end{macro}
+% \begin{macro}{\sodgSaveTo}
+% \changes{0.8.0}{2022/11/20}{The output of the \texttt{sodg} environment can be redirected to a file.}
+% Then, we define the |\sodgSaveTo| command to instruct the |sodg| environment that the output should not be sent to the document but saved to the file instead:
+% \begin{macrocode}
+\makeatletter
+\newcommand\sodgSaveTo[1]{\def\eolang@sodgSaveTo{#1}}
+\makeatother
+% \end{macrocode}
+% \end{macro}
+
% \begin{macro}{sodg}
% \changes{0.0.2}{2022/10/20}{The environment \texttt{phigure} renamed to \texttt{sodg} for the sake of better semantic. The graph in the picture is solely a SODG graph, that's why the name \texttt{sodg} is better.}
% Then, we create a new environment |sodg|, as suggested
@@ -1192,9 +1340,11 @@ print '\endinput';
\iexec[trace,stdout=\eolang@tmpdir/\jobname/\hash-post.tex]{
perl "\eolang@tmpdir/eolang-sodg.pl"
"\eolang@tmpdir/\jobname/\hash.tex"
- \ifdefined\eolang@nocomments | perl -pe 's/\%.*(\\n|$)//g'\fi}%
+ \ifdefined\eolang@nocomments | perl -pe 's/\%.*(\\n|$)//g'\fi
+ \ifdefined\eolang@sodgSaveTo > \eolang@sodgSaveTo\fi}%
\catcode`\$\active%
\setcounter{FancyVerbLine}{\value{eolang@lineno}}%
+ \def\eolang@sodgSaveTo{\relax}%
}\makeatother
% \end{macrocode}
% \end{macro}
@@ -1202,7 +1352,7 @@ print '\endinput';
% \begin{macro}{\eolang}
% Then, we define a simple supplementary command to help you print \eolang{}, the name of our language.
% \changes{0.1.0}{2022/10/25}{New command \texttt{\char`\\eolang} added to print the name of the language in both
-% normal and anonymous mode of \texttt{acmart}.}
+% normal and the anonymous mode of \texttt{acmart}.}
% \begin{macrocode}
\newcommand\eolang{%
\ifdefined\anon%
@@ -1217,15 +1367,15 @@ print '\endinput';
% \begin{macro}{\phic}
% Then, we define a simple supplementary command to help you print \phic{}, the name of our formal apparatus.
% \changes{0.1.0}{2022/10/25}{New command \texttt{\char`\\phic} prints the name of $\varphi$-calculus in both
-% normal and anonymous mode of \texttt{acmart}.}
+% normal and the anonymous mode of \texttt{acmart}.}
% \begin{macrocode}
\RequirePackage{hyperref}
\newcommand\phic{%
\ifdefined\anon%
- \anon[\texorpdfstring{$\alpha$}{a}-calculus]
- {\texorpdfstring{$\varphi$}{phi}-calculus}%
+ \anon[\texorpdfstring{$\alpha$}{a}-cal\-cu\-lus]
+ {\texorpdfstring{$\varphi$}{phi}-cal\-cu\-lus}%
\else%
- \texorpdfstring{$\varphi$}{phi}-calculus%
+ \texorpdfstring{$\varphi$}{phi}-cal\-cu\-lus%
\fi%
}
% \end{macrocode}
@@ -1233,7 +1383,7 @@ print '\endinput';
% \begin{macro}{\xmir}
% Then, we define a simple supplementary command to help you print \xmir{}, the name of our XML-based format of program representation.
-% \changes{0.2.0}{2022/10/28}{New command \texttt{\char`\\xmir} prints XMIR in both normal and anonymous mode of \texttt{acmart}.}
+% \changes{0.2.0}{2022/10/28}{New command \texttt{\char`\\xmir} prints XMIR in both normal and the anonymous mode of \texttt{acmart}.}
% \begin{macrocode}
\newcommand\xmir{%
\ifdefined\anon%
@@ -1275,12 +1425,37 @@ print '\endinput';
% \end{macrocode}
% \end{macro}
+% \begin{macro}{\phiOset}
+% \changes{0.8.0}{2022/11/20}{New commands \texttt{\char`\\phiOset} and \texttt{\char`\\phiUset} help position text over and under an arrow.}
+% Then, we define two commands to position a text over and under an arrow, as suggested \href{https://tex.stackexchange.com/a/194805/1449}{here}:
+% \begin{macrocode}
+\makeatletter
+\newcommand{\phiOset}[2]{%
+ \mathrel{\mathop{#2}\limits^{
+ \vbox to 0ex{\kern-2\ex@
+ \hbox{$\scriptscriptstyle#1$}\vss}}}}
+\newcommand{\phiUset}[2]{%
+ \mathrel{\mathop{#2}\limits_{
+ \vbox to 0ex{\kern-6.3\ex@
+ \hbox{$\scriptscriptstyle#1$}\vss}}}}
+\makeatother
+% \end{macrocode}
+% \end{macro}
+
% \begin{macro}{\phiMany}
% \changes{0.5.0}{2022/11/10}{New command \texttt{\char`\\phiMany} enables iterating over an arrow.}
-% Then, we define a command to an arrow with iterating indecies:
+% Then, we define a command for an arrow with iterating indecies:
% \begin{macrocode}
\newcommand\phiMany[3]{%
- \overunderset{\scriptscriptstyle #3}{\scriptscriptstyle #2}{#1}}
+ \phiOset{#3}{\phiUset{#2}{#1}}}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\phiEOL}
+% \changes{0.9.0}{2022/11/24}{New command \texttt{\char`\\phiEOL} added, instead of \texttt{\char`\\\char`\\[-4pt]}.}
+% Then, we define a command for line breaks in formulas:
+% \begin{macrocode}
+\newcommand\phiEOL{\\[-4pt]}
% \end{macrocode}
% \end{macro}
diff --git a/Master/texmf-dist/tex/latex/eolang/eolang.sty b/Master/texmf-dist/tex/latex/eolang/eolang.sty
index 824fe933e2f..ff8b74b6f5b 100644
--- a/Master/texmf-dist/tex/latex/eolang/eolang.sty
+++ b/Master/texmf-dist/tex/latex/eolang/eolang.sty
@@ -31,7 +31,11 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{eolang}
-[2022-11-18 0.7.0 Formulas and Graphs for EO Programming Language]
+[2022-11-28 0.7.1 Formulas and Graphs for EO Programming Language]
+
+
+
+
@@ -98,7 +102,7 @@
\makeatletter
\begin{VerbatimOut}{\eolang@tmpdir/eolang-phi.pl}
-$env = $ARGV[0];
+$macro = $ARGV[0];
open(my $fh, '<', $ARGV[1]);
my $tex; { local $/; $tex = <$fh>; }
print '% This file is auto-generated', "\n";
@@ -117,42 +121,78 @@ print '% ---', "\n";
$tex =~ s/%.*\n/\n/g;
$tex =~ s/^\s+|\s+$//g;
my $gathered = (0 == $tex =~ /\n\s+/g);
-if ($env ne 'phiq') {
- $tex =~ s/\s+\\\n\s*//g;
+if ($gathered) {
+print '% The "gathered" is used since all lines are left-aligned' . "\n";
+}
+my $align = 0;
+print '% The "align" is NOT used by default' . "\n";
+if (index($tex, '&&') >= 0) {
+ $macro =~ s/equation/align/g;
+ $align = 1;
+ print '% The "align" is used because of && seen in the text' . "\n";
+}
+if ($macro ne 'phiq') {
$tex =~ s/\\\\\n/\n\n/g;
+ $tex =~ s/\\\n\s*//g;
$tex =~ s/\n*(\\label\{[^\}]+\})\n*/\1/g;
+ $tex =~ s/\n{3,}/\n\n/g;
+}
+my @texts = ();
+sub trep {
+ my ($s) = @_;
+ my $open = 0;
+ my $p = 0;
+ for (; $p < length($s); $p++) {
+ $c = substr($s, $p, 1);
+ if ($c eq '}') {
+ if ($open eq 0) {
+ last;
+ }
+ $open--;
+ }
+ if ($c eq '{') {
+ $open++;
+ }
}
-$tex =~ s/&/\\sigma{}/g;
+ push(@texts, substr($s, 0, $p));
+ return '{TEXT' . (0+@texts - 1) . '}' . substr($s, $p + 1);
+}
+$tex =~ s/\\text\{(.+)/trep("$1")/ge;
+$tex =~ s/(?<![{&])&(?![&}])/\\sigma{}/g;
$tex =~ s/([^\\{a-z0-9]|^)Q(?![a-z0-9])/\1\\Phi{}/g;
$tex =~ s/([^\\{a-z0-9]|^)D>/\1\\Delta{}..>/g;
$tex =~ s/([^\\{a-z0-9]|^)L>/\1\\lambda{}..>/g;
$tex =~ s/"([^"]+)"/|"\1"|/g;
-$tex =~ s/([ )(.>\/]|^)([a-z0-9]{2,})(?=[ )(.-])/\1|\2|/g;
+$tex =~ s/(^|(?<=[\s)(\]\[,.>\/]))([a-z][a-z0-9]+)(?=[\s)(\]\[,.-]|$)/|\2|/g;
$tex =~ s/([^^_]|^)([0-9]+|\*)\/(\\?[a-z]+|\|[a-z]+\|)
(->|\.\.>|~>|:=|!->)/\1\\alpha_{\2}\\vert{}\3\\space{}\4/xg;
$tex =~ s/([^^_]|^)([0-9]+|\*)
(->|\.\.>|~>|:=|!->)/\1\\alpha_{\2}\\space{}\3/xg;
-if ($env ne 'phiq') {
+if ($macro ne 'phiq') {
$tex =~ s/\\begin\{split\}\n/\\begin{split}&/g;
$tex =~ s/\n\s*\\end\{split\}/\\end{split}/g;
$tex =~ s/\n\n/\\\\&/g;
- $tex =~ s/\n/\\\\[-4pt]&/g;
+ $tex =~ s/\n/\\phiEOL{}\n&/g;
+ $tex =~ s/\\\\/\\\\\n/g;
$tex =~ s/([^&\s])\s{2}([^\s])/\1 \2/g;
$tex =~ s/\s{2}/ \\quad{}/g;
- my @leads = $tex =~ /&[^\s]+\s(->|:=|=)/g;
- my @eols = $tex =~ /&/g;
$tex = '&' . $tex;
+ my $lead = '[^\s]+\s(->|:=|=)';
+ my @leads = $tex =~ /&${lead}/g;
+ my @eols = $tex =~ /&/g;
if (0+@leads == 0+@eols && 0+@eols > 0) {
- $tex =~ s/&([^\s\}]+)\s/\1&/g;
+ $tex =~ s/&${lead}/\1&/g;
$gathered = 0;
+ print '% The "gathered" is NOT used because all ' .
+ (0+@eols) . ' lines are ' . (0+@leads) . " leads\n";
}
}
$tex =~ s/\$/\\xi{}/g;
$tex =~ s/(?<!\{)\^/\\rho{}/g;
$tex =~ s/\[\[/\\llbracket\\mathrel{}/g;
$tex =~ s/\]\]/\\mathrel{}\\rrbracket{}/g;
-$tex =~ s/([\s,>\(])([0-9A-F]{2}(?:-[0-9A-F]{2})+|
- [0-9]+(?:\.[0-9]+)?)/\1|\2|/xg;
+$tex =~ s/([\s,>(])([0-9A-F]{2}(?:-[0-9A-F]{2})+|
+ [0-9]+(?:\.[0-9]+)?)(?!\{)/\1|\2|/xg;
$tex =~ s/TRUE/|TRUE|/g;
$tex =~ s/FALSE/|FALSE|/g;
$tex =~ s/\?/\\varnothing{}/g;
@@ -165,30 +205,37 @@ $tex =~ s/:=/\\mathrel{\\vDash}/g;
$tex =~ s/\.\.>/\\mathrel{\\phiDotted}/g;
$tex =~ s/\|{2,}/|/g;
$tex =~ s/\|([^\|]+)\|/\\textnormal{\\texttt{\1}}{}/g;
-if ($env eq 'phiq') {
+$tex =~ s/\{TEXT(\d+)\}/'\\text{' . @texts[$1] . '}';/ge;
+if ($macro eq 'phiq') {
print '$' if ($tex ne '');
} else {
- print '\begin{', $env, '}';
+ print '\begin{', $macro, "}\n";
+ if (not($align)) {
if ($gathered) {
print '\begin{gathered}';
} else {
print '\begin{split}';
}
+ print "\n";
+ }
}
-if ($gathered) {
- $tex =~ s/(\\\\(?:\[[^\]]+\])?)&/\1/g;
+if ($gathered and not($align)) {
$tex =~ s/^&//g;
+ $tex =~ s/\n&/\n/g;
}
print $tex;
-if ($env eq 'phiq') {
+if ($macro eq 'phiq') {
print '$' if ($tex ne '');
} else {
+ if (not($align)) {
+ print "\n";
if ($gathered) {
print '\end{gathered}';
} else {
print '\end{split}';
}
- print '\end{', $env, '}';
+ }
+ print "\n" . '\end{' . $macro . '}';
}
print '\endinput';
\end{VerbatimOut}
@@ -196,6 +243,10 @@ print '\endinput';
'\eolang@tmpdir/eolang-phi.pl' saved^^J}%
\makeatother
+\makeatletter
+\newcommand\phiSaveTo[1]{\def\eolang@phiSaveTo{#1}}
+\makeatother
+
\makeatletter\newcommand\eolang@process[1]{
\def\hash{\eolang@mdfive
{\eolang@tmpdir/\jobname/phiquation.tex}}%
@@ -205,8 +256,10 @@ print '\endinput';
perl "\eolang@tmpdir/eolang-phi.pl"
'#1'
"\eolang@tmpdir/\jobname/\hash.tex"
- \ifdefined\eolang@nocomments | perl -pe 's/\%.*(\\n|$)//g'\fi}%
+ \ifdefined\eolang@nocomments | perl -pe 's/\%.*(\\n|$)//g'\fi
+ \ifdefined\eolang@phiSaveTo > \eolang@phiSaveTo\fi}%
\setcounter{FancyVerbLine}{\value{eolang@lineno}}%
+ \def\eolang@phiSaveTo{\relax}%
}
\newenvironment{phiquation*}%
{\catcode`\|=12 \VerbatimEnvironment%
@@ -480,8 +533,20 @@ for (my $c = 0; $c < 0+@cmds; $c++) {
print ',phi-object';
}
print ']';
- print ' (', $head, ')';
- print ' {$' . vertex($head) . '$}';
+ print ' (' . $head . ')';
+ print ' {';
+ if (exists $opts{'tag'}) {
+ my $t = $opts{'tag'};
+ if (index($t, '$') == -1) {
+ $t = '$' . $t . '$';
+ } else {
+ $t = fmt($t);
+ }
+ print $t;
+ } else {
+ print '$' . vertex($head) . '$';
+ }
+ print '}';
if (exists $opts{'box'}) {
print ' node[phi-box] at (';
print $head, '.south east) {';
@@ -509,7 +574,6 @@ print '\endinput';
\RequirePackage{tikz}
\usetikzlibrary{arrows}
\usetikzlibrary{shapes}
- \usetikzlibrary{snakes}
\usetikzlibrary{decorations}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{decorations.pathreplacing}
@@ -598,6 +662,10 @@ print '\endinput';
above=2pt,sloped/.append style={transform shape},
font={\scriptsize},color=black]
+\makeatletter
+\newcommand\sodgSaveTo[1]{\def\eolang@sodgSaveTo{#1}}
+\makeatother
+
\makeatletter\newenvironment{sodg}%
{\catcode`\|=12 \VerbatimEnvironment%
\setcounter{eolang@lineno}{\value{FancyVerbLine}}%
@@ -612,9 +680,11 @@ print '\endinput';
\iexec[trace,stdout=\eolang@tmpdir/\jobname/\hash-post.tex]{
perl "\eolang@tmpdir/eolang-sodg.pl"
"\eolang@tmpdir/\jobname/\hash.tex"
- \ifdefined\eolang@nocomments | perl -pe 's/\%.*(\\n|$)//g'\fi}%
+ \ifdefined\eolang@nocomments | perl -pe 's/\%.*(\\n|$)//g'\fi
+ \ifdefined\eolang@sodgSaveTo > \eolang@sodgSaveTo\fi}%
\catcode`\$\active%
\setcounter{FancyVerbLine}{\value{eolang@lineno}}%
+ \def\eolang@sodgSaveTo{\relax}%
}\makeatother
\newcommand\eolang{%
@@ -628,10 +698,10 @@ print '\endinput';
\RequirePackage{hyperref}
\newcommand\phic{%
\ifdefined\anon%
- \anon[\texorpdfstring{$\alpha$}{a}-calculus]
- {\texorpdfstring{$\varphi$}{phi}-calculus}%
+ \anon[\texorpdfstring{$\alpha$}{a}-cal\-cu\-lus]
+ {\texorpdfstring{$\varphi$}{phi}-cal\-cu\-lus}%
\else%
- \texorpdfstring{$\varphi$}{phi}-calculus%
+ \texorpdfstring{$\varphi$}{phi}-cal\-cu\-lus%
\fi%
}
@@ -653,8 +723,21 @@ print '\endinput';
\newcommand\phiSlot[1]{%
\xrightarrow{\text{\sffamily\scshape #1}}}
+\makeatletter
+\newcommand{\phiOset}[2]{%
+ \mathrel{\mathop{#2}\limits^{
+ \vbox to 0ex{\kern-2\ex@
+ \hbox{$\scriptscriptstyle#1$}\vss}}}}
+\newcommand{\phiUset}[2]{%
+ \mathrel{\mathop{#2}\limits_{
+ \vbox to 0ex{\kern-6.3\ex@
+ \hbox{$\scriptscriptstyle#1$}\vss}}}}
+\makeatother
+
\newcommand\phiMany[3]{%
- \overunderset{\scriptscriptstyle #3}{\scriptscriptstyle #2}{#1}}
+ \phiOset{#3}{\phiUset{#2}{#1}}}
+
+\newcommand\phiEOL{\\[-4pt]}
\RequirePackage{trimclip}
\RequirePackage{amsfonts}