From 30b3429f0e138c93c5f1ba1d1a6d46728c0943e9 Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Tue, 4 Oct 2022 03:00:59 +0000
Subject: CTAN sync 202210040300

---
 macros/latex/contrib/ffcode/ffcode.dtx | 383 +++++++++++++++++++++++++++++++++
 1 file changed, 383 insertions(+)
 create mode 100644 macros/latex/contrib/ffcode/ffcode.dtx

(limited to 'macros/latex/contrib/ffcode/ffcode.dtx')

diff --git a/macros/latex/contrib/ffcode/ffcode.dtx b/macros/latex/contrib/ffcode/ffcode.dtx
new file mode 100644
index 0000000000..c6d717c7b5
--- /dev/null
+++ b/macros/latex/contrib/ffcode/ffcode.dtx
@@ -0,0 +1,383 @@
+% \iffalse meta-comment
+% (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.
+% \fi
+
+% \CheckSum{0}
+%
+% \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
+%   Lower-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
+%   Digits        \0\1\2\3\4\5\6\7\8\9
+%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%   Dollar        \$     Percent       \%     Ampersand     \&
+%   Acute accent  \'     Left paren    \(     Right paren   \)
+%   Asterisk      \*     Plus          \+     Comma         \,
+%   Minus         \-     Point         \.     Solidus       \/
+%   Colon         \:     Semicolon     \;     Less than     \<
+%   Equals        \=     Greater than  \>     Question mark \?
+%   Commercial at \@     Left bracket  \[     Backslash     \\
+%   Right bracket \]     Circumflex    \^     Underscore    \_
+%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%   Right brace   \}     Tilde         \~}
+
+% \GetFileInfo{ffcode.dtx}
+% \DoNotIndex{\endgroup,\begingroup,\let,\else,\fi,\newcommand,\newenvironment}
+
+% \iffalse
+%<*driver>
+\ProvidesFile{ffcode.dtx}
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{ffcode}
+%<*package>
+[03.10.2022 0.5.0 Fixed Font Code]
+%</package>
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage[tt=false,type1=true]{libertine}
+\usepackage{microtype}
+\usepackage{href-ul}
+\usepackage{ffcode}
+\usepackage{amsmath}
+\usepackage{multicol}
+\usepackage{xcolor}
+\PageIndex
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+	\DocInput{ffcode.dtx}
+	\PrintChanges
+	\PrintIndex
+\end{document}
+%</driver>
+% \fi
+
+% \title{|ffcode|: \LaTeX{} Package \\ for Fixed-Font Code Blocks\thanks{The sources are in GitHub at \href{https://github.com/yegor256/ffcode}{yegor256/ffcode}}}
+% \author{Yegor Bugayenko \\ \texttt{yegor256@gmail.com}}
+% \date{\filedate, \fileversion}
+%
+% \maketitle
+%
+% \section{Introduction}
+%
+% This package helps you write source code in your articles
+% and make sure it looks nice. Install it from CTAN and then
+% use like this (pay attention to |\ff| command
+% and |ffcode| environment):
+% \begin{multicols}{2}
+% \setlength{\parskip}{0pt}
+% \raggedcolumns
+%\iffalse
+%<*verb>
+%\fi
+\begin{verbatim}
+\documentclass{article}
+\usepackage{ffcode}
+\begin{document}
+The function \ff{fibo()}
+is recursive:
+\begin{ffcode}
+int fibo(int n) {
+  if (n < 2) {
+    return n; |$\label{ln:ret}$|
+  }
+  return fibo(n-1)+fibo(n-2);
+}
+\end{ffcode}
+The line no.~\ref{ln:ret}
+terminates it.
+\end{document}
+\end{verbatim}
+%\iffalse
+%</verb>
+%\fi
+%
+% \columnbreak
+%
+% The function \ff{fibo()} is recursive:
+%
+%\iffalse
+%<*verb>
+%\fi
+\begin{ffcode}
+int fibo(int n) {
+  if (n < 2) {
+    return n; |$\label{ln:ret}$|
+  }
+  return fibo(n-1)+fibo(n-2);
+}
+\end{ffcode}
+%\iffalse
+%</verb>
+%\fi
+%
+% The line no.~\ref{ln:ret} terminates it.
+% \end{multicols}
+
+% \section{Package Options}
+
+% \begin{macro}{nopygments}
+% You have to run |pdflatex| with |--shell-escape| flag
+% in order to let |minted| (the package we use) to run Pygments
+% and format the code. If you don't want this to happen,
+% just use |nopygments| option.
+% \end{macro}
+
+% \begin{macro}{noframes}
+% If you want to omit the light gray frames around |\ff|
+% texts, use the package option |noframes|.
+% \end{macro}
+
+% \begin{macro}{nobars}
+% To omit the vertical gray bar at the left side of each snippet,
+% use |nobars| option of the package.
+% \end{macro}
+
+% \begin{macro}{nonumbers}
+% To omit the line numbers, use |nonumbers| option of the package.
+% \end{macro}
+
+% \begin{macro}{nocn}
+% By default, the numbering is continuous: line numbers start at the
+% first snippet and increment until the end of the document. If you
+% want them to start from one at each snippet, use |nocn|
+% (stands for ``no continuous numbering'')
+% option of the package.
+% \end{macro}
+
+% \section{Typesetting}
+
+% By the way, the package correctly formats low-height texts, for example, just
+% a dot: \ff{.}
+
+% A pair of vertical lines decorate a TeX command inside the snippet.
+% If you want to print a single vertical line, use this:
+% \ff{|\char`\\vert|}.
+
+% The command |\ff| behaves differently in math mode --- it doesn't
+% add gray frames:
+% \begin{multicols}{2}
+% \setlength{\parskip}{0pt}
+% \raggedcolumns
+%\iffalse
+%<*verb>
+%\fi
+\begin{verbatim}
+\documentclass{article}
+\usepackage{ffcode}
+\begin{document}
+\begin{equation}
+x = \int_\ff{home}^N f(x).
+\end{equation}
+\end{document}
+\end{verbatim}
+%\iffalse
+%</verb>
+%\fi
+%
+% \columnbreak
+%
+%\iffalse
+%<*verb>
+%\fi
+% \begin{equation}
+% x = \int_\ff{home}^N f(x).
+% \end{equation}
+%\iffalse
+%</verb>
+%\fi
+% \end{multicols}
+
+% \section{Line Highlighting}
+
+% You can highlight some lines in your |ffcode| environment,
+% or can use any other additional configuration parameters from
+% |minted| package:
+
+% \begin{multicols}{2}
+% \setlength{\parskip}{0pt}
+% \raggedcolumns
+%\iffalse
+%<*verb>
+%\fi
+\begin{verbatim}
+\documentclass{article}
+\usepackage{ffcode}
+\begin{document}
+\begin{ffcode*}
+  {highlightlines={1,4-5}}
+while (true) {
+  print("Hello!")
+  print("Enter your name:")
+  scan(x)
+  print("You name is " + x)
+}
+\end{ffcode*}
+\end{document}
+\end{verbatim}
+%\iffalse
+%</verb>
+%\fi
+%
+% \columnbreak
+%
+%\iffalse
+%<*verb>
+%\fi
+\begin{ffcode*}{highlightlines={7,10-11}}
+while (true) {
+  print("Hello!")
+  print("Enter your name:")
+  scan(x)
+  print("You name is " + x)
+}
+\end{ffcode*}
+%\iffalse
+%</verb>
+%\fi
+% \end{multicols}
+
+% Using this second argument of |ffcode*| (with the trailing asterisk),
+% you can provide any other options from |minted| package to the
+% snippet.
+
+% \StopEventually{}
+
+% \section{Implementation}
+
+% \changes{v0.2.0}{2021/07/10}{Initial version}
+
+% First, we parse package options:
+%    \begin{macrocode}
+\RequirePackage{xkeyval}
+\makeatletter
+\DeclareOptionX{nopygments}{\PassOptionsToPackage{draft=true}{minted}}
+\newif\ifff@noframes
+\DeclareOptionX{noframes}{\ff@noframestrue}
+\newif\ifff@nobars
+\DeclareOptionX{nobars}{\ff@nobarstrue}
+\newif\ifff@nonumbers
+\DeclareOptionX{nonumbers}{\ff@nonumberstrue}
+\newif\ifff@nocn
+\DeclareOptionX{nocn}{\ff@nocntrue}
+\ProcessOptionsX\relax
+\makeatother
+%    \end{macrocode}
+
+% Then, we configure |minted| package:
+%    \begin{macrocode}
+\RequirePackage{minted}
+\setminted{breaklines}
+\setminted{escapeinside=||,mathescape}
+\setminted{highlightcolor=gray!25}
+\usemintedstyle{bw}
+%    \end{macrocode}
+
+% \begin{macro}{ffcode}
+% Then, we define |ffcode| environment:
+%    \begin{macrocode}
+\makeatletter\ifff@nonumbers
+  \ifff@nobars
+    \newminted[ffcode]{text}{}
+  \else
+    \newminted[ffcode]{text}{framesep=6pt,
+      framerule=1pt,rulecolor=gray,frame=leftline}
+  \fi
+\else
+  \renewcommand{\theFancyVerbLine}{\textcolor{gray}
+    {\tiny\oldstylenums{\ttfamily\arabic{FancyVerbLine}}}}
+  \ifff@nocn
+    \ifff@nobars
+      \newminted[ffcode]{text}{
+        linenos,numbersep=2pt
+      }
+    \else
+      \newminted[ffcode]{text}{
+        framesep=6pt,framerule=1pt,rulecolor=gray,
+        frame=leftline,linenos,numbersep=2pt
+      }
+    \fi
+  \else
+    \ifff@nobars
+      \newminted[ffcode]{text}{
+        firstnumber=last,linenos,numbersep=2pt
+      }
+    \else
+      \newminted[ffcode]{text}{
+        framesep=6pt,framerule=1pt,rulecolor=gray,
+        frame=leftline,firstnumber=last,linenos,numbersep=2pt
+      }
+    \fi
+  \fi
+\fi\makeatother
+%    \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\ff@print}
+% Then, we define supplementary commands |\ff@print| and |\ff@printx|:
+%    \begin{macrocode}
+\makeatletter
+\newcommand\ff@print{\begingroup\obeyspaces\ff@printx}
+\newcommand\ff@printx[1]{\texttt{#1}\endgroup}
+\makeatother
+%    \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\ff@rule}
+% Then, we define supplementary command |\ff@rule|:
+%    \begin{macrocode}
+\makeatletter\newcommand\ff@rule
+  {\vrule height 6pt depth 1pt width 0pt}
+\makeatother
+%    \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\ff}
+% Finally, we define |\ff| command:
+%    \begin{macrocode}
+\makeatletter\ifff@noframes
+  \newcommand\ff[1]{\ff@rule\ff@print{#1}}
+\else
+  \RequirePackage{tcolorbox}
+    \newtcbox\ff@box{nobeforeafter,colframe=gray!80!white,
+    colback=gray!5!white,boxrule=0.1pt,arc=1pt,
+    boxsep=1.2pt,left=0.5pt,right=0.5pt,top=0.2pt,bottom=0.2pt,
+    tcbox raise base}
+  \newcommand\ff[1]{\relax\ifmmode%
+    {\ff@rule\ff@print{#1}}%
+  \else%
+    {\ff@box{\ff@rule\ff@print{#1}}}
+  \fi}
+\fi\makeatother
+%    \end{macrocode}
+% \end{macro}
+
+% \Finale
+
+%\clearpage
+%
+%\PrintChanges
+%\clearpage
+%\PrintIndex
-- 
cgit v1.2.3

