%%
%% This is file `eolang.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% eolang.dtx  (with options: `package')
%% (The MIT License)
%% 
%% Copyright (c) 2021-2022 Yegor Bugayenko
%% 
%% Permission is hereby granted, free of charge, to any person obtaining a copy
%% of this software and associated documentation files (the 'Software'), to deal
%% in the Software without restriction, including without limitation the rights
%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
%% copies of the Software, and to permit persons to whom the Software is
%% furnished to do so, subject to the following conditions:
%% 
%% The above copyright notice and this permission notice shall be included in all
%% copies or substantial portions of the Software.
%% 
%% THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
%% SOFTWARE.



\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{eolang}
[2022-11-28 0.7.1 Formulas and Graphs for EO Programming Language]









































\RequirePackage{stmaryrd}
\RequirePackage{amsmath}
\let\Bbbk\relax\RequirePackage{amssymb}
\RequirePackage{fancyvrb}
\RequirePackage{iexec}

\RequirePackage{pgfopts}
\RequirePackage{ifluatex}
\RequirePackage{ifxetex}
\pgfkeys{
  /eolang/.cd,
  tmpdir/.store in=\eolang@tmpdir,
  tmpdir/.default=_eolang\ifxetex-xe\else\ifluatex-lua\fi\fi,
  nocomments/.store in=\eolang@nocomments,
  tmpdir
}
\ProcessPgfOptions{/eolang}

\iexec[null]{mkdir -p "\eolang@tmpdir/\jobname"}%

\makeatletter\newcounter{eolang@lineno}\makeatother

\RequirePackage{pdftexcmds}
\makeatletter
\newcommand\eolang@mdfive[1]{\pdf@filemdfivesum{#1}}
\makeatother

\makeatletter
\begin{VerbatimOut}{\eolang@tmpdir/eolang-phi.pl}
$macro = $ARGV[0];
open(my $fh, '<', $ARGV[1]);
my $tex; { local $/; $tex = <$fh>; }
print '% This file is auto-generated', "\n";
print '% There are ', length($tex),
  ' chars in the input: ', $ARGV[1], "\n";
print '% ---', "\n";
if (index($tex, "\t") > 0) {
  print "TABS are prohibited!";
  exit 1;
}
my @lines = split (/\n/g, $tex);
foreach my $t (@lines) {
  print '% ', $t, "\n";
}
print '% ---', "\n";
$tex =~ s/%.*\n/\n/g;
$tex =~ s/^\s+|\s+$//g;
my $gathered = (0 == $tex =~ /\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++;
   }
}
  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/(^|(?<=[\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 ($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/\\phiEOL{}\n&/g;
  $tex =~ s/\\\\/\\\\\n/g;
  $tex =~ s/([^&\s])\s{2}([^\s])/\1 \2/g;
  $tex =~ s/\s{2}/ \\quad{}/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/&${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/TRUE/|TRUE|/g;
$tex =~ s/FALSE/|FALSE|/g;
$tex =~ s/\?/\\varnothing{}/g;
$tex =~ s/@/\\varphi{}/g;
$tex =~ s/-([a-z]+)>/\\mathrel{\\phiSlot{\1}}/g;
$tex =~ s/!->/\\mathrel{\\phiConst}/g;
$tex =~ s/->/\\mathrel{\\mapsto}/g;
$tex =~ s/~>/\\mathrel{\\phiWave}/g;
$tex =~ s/:=/\\mathrel{\\vDash}/g;
$tex =~ s/\.\.>/\\mathrel{\\phiDotted}/g;
$tex =~ s/\|{2,}/|/g;
$tex =~ s/\|([^\|]+)\|/\\textnormal{\\texttt{\1}}{}/g;
$tex =~ s/\{TEXT(\d+)\}/'\\text{' . @texts[$1] . '}';/ge;
if ($macro eq 'phiq') {
  print '$' if ($tex ne '');
} else {
  print '\begin{', $macro, "}\n";
  if (not($align)) {
  if ($gathered) {
    print '\begin{gathered}';
  } else {
    print '\begin{split}';
  }
  print "\n";
  }
}
if ($gathered and not($align)) {
  $tex =~ s/^&//g;
  $tex =~ s/\n&/\n/g;
}
print $tex;
if ($macro eq 'phiq') {
  print '$' if ($tex ne '');
} else {
  if (not($align)) {
  print "\n";
  if ($gathered) {
    print '\end{gathered}';
  } else {
    print '\end{split}';
  }
  }
  print "\n" . '\end{' . $macro . '}';
}
print '\endinput';
\end{VerbatimOut}
\message{eolang: File with Perl script
  '\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}}%
  \iexec[null]{cp "\eolang@tmpdir/\jobname/phiquation.tex"
    "\eolang@tmpdir/\jobname/\hash.tex"}%
  \iexec[trace,stdout=\eolang@tmpdir/\jobname/\hash-post.tex]{
    perl "\eolang@tmpdir/eolang-phi.pl"
    '#1'
    "\eolang@tmpdir/\jobname/\hash.tex"
    \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%
\setcounter{eolang@lineno}{\value{FancyVerbLine}}%
\begin{VerbatimOut}
  {\eolang@tmpdir/\jobname/phiquation.tex}}
{\end{VerbatimOut}\eolang@process{equation*}}
\newenvironment{phiquation}%
{\catcode`\|=12 \VerbatimEnvironment%
\setcounter{eolang@lineno}{\value{FancyVerbLine}}%
\begin{VerbatimOut}
  {\eolang@tmpdir/\jobname/phiquation.tex}}
{\end{VerbatimOut}\eolang@process{equation}}
\makeatother

\makeatletter\newcommand\phiq[1]{%
  \iexec[trace,quiet,stdout=\eolang@tmpdir/\jobname/phiq.tex]{
    /bin/echo '\detokenize{#1}'}%
  \def\hash{\eolang@mdfive
    {\eolang@tmpdir/\jobname/phiq.tex}}%
  \iexec[null]{cp "\eolang@tmpdir/\jobname/phiq.tex"
    "\eolang@tmpdir/\jobname/\hash.tex"}%
  \ifdefined\eolang@nodollar\else\catcode`\$=3 \fi%
  \iexec[trace,stdout=\eolang@tmpdir/\jobname/\hash-post.tex]{
    perl \eolang@tmpdir/eolang-phi.pl 'phiq'
    "\eolang@tmpdir/\jobname/\hash.tex"
    \ifdefined\eolang@nocomments | perl -pe 's/\%.*(\\n|$)//g'\fi}%
  \ifdefined\eolang@nodollar\else\catcode`\$\active\fi%
}\makeatother

\ifdefined\eolang@nodollar\else
  \begingroup
  \catcode`\$=\active
  \protected\gdef$#1${\phiq{#1}}
  \endgroup
  \AtBeginDocument{\catcode`\$=\active}
\fi

\makeatletter
\begin{VerbatimOut}{\eolang@tmpdir/eolang-sodg.pl}
sub num {
  my ($i) = @_;
  $i =~ s/(\+|-)\./\10./g;
  return $i;
}
sub fmt {
  my ($tex) = @_;
  $tex =~ s/\|([^\|]+)\|/\\textnormal{\\texttt{\1}}/g;
  return $tex;
}
sub vertex {
  my ($v) = @_;
  if (index($v, 'v0') == 0) {
    return '\Phi';
  } else {
    $v =~ s/^v/v_/g;
    $v =~ s/[^0-9]$//g;
    return $v;
  }
}
sub tailor {
  my ($t, $m) = @_;
  $t =~ s/<([A-Z]?${m}[A-Z]?):([^>]+)>/\2/g;
  $t =~ s/<[A-Z]+:[^>]+>//g;
  return $t;
}
open(my $fh, '<', $ARGV[0]);
my $tex; { local $/; $tex = <$fh>; }
if (index($tex, "\t") > 0) {
  print "TABS are prohibited!";
  exit 1;
}
print '% This file is auto-generated', "\n%\n";
print '% --- there are ', length($tex),
  ' chars in the input (', $ARGV[0], "):\n";
foreach my $t (split (/\n/g, $tex)) {
  print '% ', $t, "\n";
}
print "% ---\n";
$tex =~ s/\\\\/\n/g;
$tex =~ s/\\\n//g;
$tex =~ s/(\\[a-zA-Z]+)\s+/\1/g;
$tex =~ s/\n{2,}/\n/g;
my @cmds = split(/\n/g, $tex);
print '% --- before processing:' . "\n";
foreach my $t (split (/\n/g, $tex)) {
  print '% ', $t, "\n";
}
print '% ---';
print ' (' . (0+@cmds) . " lines)\n";
print '\begin{phicture}', "\n";
for (my $c = 0; $c < 0+@cmds; $c++) {
  my $cmd = $cmds[$c];
  $cmd =~ s/^\s+//g;
  $cmd =~ s/%.*//g;
  my ($head, $tail) = split(/ /, $cmd, 2);
  my %opts = {};
  foreach my $p (split(/ /, $tail)) {
    my ($q, $t) = split(/:/, $p);
    $opts{$q} = $t;
  }
  if (index($head, '->') >= 0) {
    my $draw = '\draw[';
    if (exists $opts{'pi'}) {
      $draw = $draw . '<MB:phi-pi><F:draw=none>';
      if (not exists $opts{'a'}) {
        $opts{'a'} = '\pi';
      }
    }
    if (exists $opts{'rho'} and not(exists $opts{'bend'})) {
      $draw = $draw . '<MB:,phi-rho>';
    }
    $draw = $draw . ']';
    my ($from, $to) = split (/->/, $head);
    $draw = $draw . " (${from}) ";
    if (exists $opts{'bend'}) {
      $draw = $draw . 'edge [<F:draw=none><MF:,bend right=' .
        num($opts{'bend'}) . '>';
      if (exists $opts{'rho'}) {
        $draw = $draw . '<MB:,phi-rho>';
      }
      $draw = $draw . ']';
    } else {
      $draw = $draw . '--';
    }
    if (exists $opts{'a'}) {
      my $a = $opts{'a'};
      if (index($a, '$') == -1) {
        $a = '$' . fmt($a) . '$';
      } else {
        $a = fmt($a);
      }
      $draw = $draw . '<MB: node [phi-attr] {' . $a . '}>';
    }
    if (exists $opts{'break'}) {
      $draw = $draw . '<F: coordinate [pos=' .
        ($opts{'break'} / 100) . '] (break)>';
    }
    $draw = $draw . " (<MF:${to}><B:break-v>)";
    if (exists $opts{'break'}) {
      print tailor($draw, 'F') . ";\n";
      print '  \node[outer sep=.1cm,inner sep=0cm] ' .
        'at (break) (break-v) {$' . vertex($to) .
        '$};' . "\n";
      print '  ' . tailor($draw, 'B');
    } else {
      print tailor($draw, 'M');
    }
  } elsif (index($head, '=>') >= 0) {
    my ($from, $to) = split (/=+>/, $head);
    my $size = () = $head =~ /=/g;
    if ($from eq '') {
      print '\node [phi-arrow, left=' . ($size * 0.6) . 'cm of ' .
        $to . '.center]';
    } elsif ($to eq '') {
      print '\node [phi-arrow, right=' . ($size * 0.6) . 'cm of ' .
        $from . '.center]';
    } else {
      print '\node [phi-arrow] at ($(' .
        $from . ')!0.5!(' . $to . ')$)';
    }
    print '{}';
  } elsif (index($head, '!') >= 0) {
    my ($v, $marker) = split (/!+/, $head);
    my $size = () = $head =~ /!/g;
    print '\node [phi-marker, left=' .
      ($size * 0.6) . 'cm of ' .
      $v . '.center]{' . fmt($marker) . '}';
  } elsif (index($head, '+') >= 0) {
    my ($v, $suffix) = split (/\+/, $head);
    my @friends = ($v);
    foreach my $c (@cmds) {
      $e = $c;
      $e =~ s/^\s+//g;
      my $h = $e;
      $h = substr($e, 0, index($e, ' ')) if index($e, ' ') >= 0;
      foreach my $f (@friends) {
        my $add = '';
        if (index($h, $f . '->') >= 0) {
          $add = substr($h, index($h, '->') + 2);
        }
        if ($h =~ /->\Q${f}\E$/) {
          $add = substr($h, 0, index($h, '->'));
        }
        if (index($e, ' xy:' . $f . ',') >= 0) {
          $add = $h;
        }
        if (index($add, '+') == -1
          and $add ne ''
          and not(grep(/^\Q${add}\E$/, @friends))) {
          push(@friends, $add);
        }
      }
    }
    my @extra = ();
    foreach my $e (@cmds) {
      $m = $e;
      if ($m =~ /^\s*\Q${v}\E\s/) {
        next;
      }
      if ($m =~ /^\s*[^\s]+\+/ and not($m =~ /^\s*\Q${head}\E\s/)) {
        next;
      }
      foreach my $f (@friends) {
        my $h = $f;
        $h =~ s/[a-z]$//g;
        if ($m =~ s/^(\s*)\Q${f}\E\+\Q${suffix}\E\s?/\1${h}${suffix} /g) {
          last;
        }
        $m =~ s/^(\s*)\Q${f}\E\s/\1${h}${suffix} /g;
        $m =~ s/^(\s*)\Q${f}\E->/\1${h}${suffix}->/g;
        $m =~ s/\sxy:\Q${f}\E,/ xy:${h}${suffix},/g;
        $m =~ s/->\Q${f}\E\s/->${h}${suffix} /g;
      }
      if ($m ne $e) {
        push(@extra, ' ' . $m);
      }
    }
    splice(@extra, 0, 0, @extra[-1]);
    splice(@extra, -1, 1);
    splice(@extra, 0, 0, '% clone of ' . $v . ' (' . $head .
      '), friends: [' . join(', ', @friends) . '] in ' .
      (0+@cmds) . ' lines');
    splice(@cmds, $c, 1, @extra);
    print '% cloned ' . $v . ' at line no.' . $c .
      ' (+' . (0+@extra) . ' lines -> ' .
      (0+@cmds) . ' lines total)';
  } elsif ($head =~ /^v[0-9]+[a-z]?$/) {
    print '\node[';
    if (exists $opts{'xy'}) {
      my ($v, $right, $down) = split(/,/, $opts{'xy'});
      my $loc = '';
      if ($down > 0) {
        $loc = 'below ';
      } elsif ($down < 0) {
        $loc = 'above ';
      }
      if ($right > 0) {
        $loc = $loc . 'right';
      } elsif ($right < 0) {
        $loc = $loc . 'left';
      }
      print ',' . $loc . '=';
      print abs(num($down)) . 'cm and ' .
        abs(num($right)) . 'cm of ' . $v . '.center';
    }
    if (exists $opts{'data'}) {
      print ',phi-data';
      if (not $opts{'data'} eq '') {
        my $d = $opts{'data'};
        if (index($d, '|') == -1) {
          $d = '$\Delta\phiDotted\text{' .
            '\textnormal{\texttt{' . fmt($d) . '}}}$';
        } else {
          $d = fmt($d);
        }
        $opts{'box'} = $d;
      }
    } elsif (exists $opts{'atom'}) {
      print ',phi-atom';
      if (not $opts{'atom'} eq '') {
        my $a = $opts{'atom'};
        if (index($a, '$') == -1) {
          $a = '$\lambda\phiDotted{}' . fmt($a) . '$';
        } else {
          $a = fmt($a);
        }
        $opts{'box'} = $a;
      }
    } else {
      print ',phi-object';
    }
    print ']';
    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) {';
      print $opts{'box'}, '}';
    }
  } else {
    print $cmd;
  }
  print ";\n";
}
print '\end{phicture}%', "\n";
print "% --- after processing:\n%";
foreach my $c (@cmds) {
  print '% ', $c, "\n";
}
print '% --- (' . (0+@cmds) . " lines)\n";
print '\endinput';
\end{VerbatimOut}
\message{eolang: File with Perl script
  '\eolang@tmpdir/eolang-sodg.pl' saved^^J}%
\makeatother

\setcounter{FancyVerbLine}{0}

\RequirePackage{tikz}
  \usetikzlibrary{arrows}
  \usetikzlibrary{shapes}
  \usetikzlibrary{decorations}
  \usetikzlibrary{decorations.pathmorphing}
  \usetikzlibrary{decorations.pathreplacing}
  \usetikzlibrary{positioning}
  \usetikzlibrary{calc}
  \usetikzlibrary{math}
  \usetikzlibrary{arrows.meta}

\newenvironment{phicture}%
  {\noindent\begin{tikzpicture}[
    ->,>=stealth',node distance=0,thick,
    pics/parallel arrow/.style={
      code={\draw[-latex,phi-rho] (##1) -- (-##1);}}]}%
  {\end{tikzpicture}}
\tikzstyle{phi-arrow} = [fill=white!80!black, single arrow,
  minimum height=0.5cm, minimum width=0.5cm,
  single arrow head extend=2mm]
\tikzstyle{phi-marker} = [inner sep=0pt, minimum height=1.4em,
  minimum width=1.4em, font={\small\color{white}\ttfamily},
  fill=gray]
\tikzstyle{phi-thing} = [thick,inner sep=0pt,minimum height=2.4em,
  draw,font={\small}]
\tikzstyle{phi-object} = [phi-thing,circle]
\tikzstyle{phi-data} = [phi-thing,regular polygon,
  regular polygon sides=8]
\tikzstyle{phi-empty} = [phi-object]
\tikzset{%
  phi-rho/.style={
    postaction={%
      decoration={
        show path construction,
        curveto code={
          \tikzmath{
            coordinate \I, \F, \v;
            \I = (\tikzinputsegmentfirst);
            \F = (\tikzinputsegmentlast);
            \v = ($(\I) -(\F)$);
            real \d, \a, \r, \t;
            \d = 0.8;
            \t = atan2(\vy, \vx);
            if \vx<0 then { \a = 90; } else { \a = -90; };
            {
              \draw[arrows={-latex}, decorate,
              decoration={%
                snake, amplitude=.4mm,
                segment length=2mm,
                post length=1mm
              }]
              ($(\F)!.5!(\I) +(\t: -\d em) +(\t +\a: 1ex)$)
              -- ++(\t: 2*\d em);
            };
          }
        },
        lineto code={
          \tikzmath{
            coordinate \I, \F, \v;
            \I = (\tikzinputsegmentfirst);
            \F = (\tikzinputsegmentlast);
            \v = ($(\I) -(\F)$);
            real \d, \a, \r, \t;
            \d = 0.8;
            \t = atan2(\vy, \vx);
            if \vx<0 then { \a = 90; } else { \a = -90; };
            {
              \draw[arrows={-latex}, decorate,
              decoration={%
                snake, amplitude=.4mm,
                segment length=2mm,
                post length=1mm}]
              ($(\F)!.5!(\I) +(\t: -\d em) +(\t +\a: 1ex)$)
              -- ++(\t: 2*\d em);
            };
          }
        }
      },
      decorate
    }
  }
}
\tikzstyle{phi-pi} = [draw,dotted]
\tikzstyle{phi-atom} = [phi-object,double]
\tikzstyle{phi-box} = [xshift=-5pt,yshift=3pt,draw,fill=white,
  rectangle,thin,minimum width=1.2em,anchor=north west,
  font={\scriptsize}]
\tikzstyle{phi-attr} = [midway,sloped,inner sep=0pt,
  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}}%
\begin{VerbatimOut}
  {\eolang@tmpdir/\jobname/sodg.tex}}
{\end{VerbatimOut}%
  \def\hash{\eolang@mdfive
    {\eolang@tmpdir/\jobname/sodg.tex}}%
  \iexec[null]{cp "\eolang@tmpdir/\jobname/sodg.tex"
    "\eolang@tmpdir/\jobname/\hash.tex"}%
  \catcode`\$=3 %
  \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@sodgSaveTo > \eolang@sodgSaveTo\fi}%
  \catcode`\$\active%
  \setcounter{FancyVerbLine}{\value{eolang@lineno}}%
  \def\eolang@sodgSaveTo{\relax}%
}\makeatother

\newcommand\eolang{%
  \ifdefined\anon%
    \anon[XYZ]{{\sffamily EO}}%
  \else%
    {\sffamily EO}%
  \fi%
}

\RequirePackage{hyperref}
\newcommand\phic{%
  \ifdefined\anon%
    \anon[\texorpdfstring{$\alpha$}{a}-cal\-cu\-lus]
      {\texorpdfstring{$\varphi$}{phi}-cal\-cu\-lus}%
  \else%
    \texorpdfstring{$\varphi$}{phi}-cal\-cu\-lus%
  \fi%
}

\newcommand\xmir{%
  \ifdefined\anon%
    \anon[XML$^+$]{XMIR}%
  \else%
    XMIR%
  \fi%
}

\newcommand\phiConst{%
  \mathrel{\hspace{.15em}}%
  \mapstochar\mathrel{\hspace{-.15em}}\mapsto}

\newcommand\phiWave{%
  \mapstochar\mathrel{\mspace{0.45mu}}\leadsto}

\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]{%
  \phiOset{#3}{\phiUset{#2}{#1}}}

\newcommand\phiEOL{\\[-4pt]}

\RequirePackage{trimclip}
\RequirePackage{amsfonts}
\makeatletter
\newcommand{\phiDotted}{%
  \mapstochar\mathrel{\mathpalette\phiDotted@\relax}}
\newcommand{\phiDotted@}[2]{%
  \begingroup%
  \settowidth{\dimen\z@}{$\m@th#1\rightarrow$}%
  \settoheight{\dimen\tw@}{$\m@th#1\rightarrow$}%
  \sbox\z@{%
    \makebox[\dimen\z@][s]{%
      \clipbox{0 0 {0.4\width} 0}%
        {\resizebox{\dimen\z@}{\height}%
          {$\m@th#1\dashrightarrow$}}%
      \hss%
      \clipbox{{0.69\width} {-0.1\height} 0
        {-\height}}{$\m@th#1\rightarrow$}%
    }%
  }%
  \ht\z@=\dimen\tw@ \dp\z@=\z@%
  \box\z@%
  \endgroup%
}
\makeatother



\endinput
%%
%% End of file `eolang.sty'.
