summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/fvextra/fvextra.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/fvextra/fvextra.sty')
-rw-r--r--Master/texmf-dist/tex/latex/fvextra/fvextra.sty433
1 files changed, 382 insertions, 51 deletions
diff --git a/Master/texmf-dist/tex/latex/fvextra/fvextra.sty b/Master/texmf-dist/tex/latex/fvextra/fvextra.sty
index 93f61af57a0..c28d864ad41 100644
--- a/Master/texmf-dist/tex/latex/fvextra/fvextra.sty
+++ b/Master/texmf-dist/tex/latex/fvextra/fvextra.sty
@@ -20,7 +20,7 @@
%%
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesPackage{fvextra}
- [2022/11/30 v1.5 fvextra - extensions and patches for fancyvrb]
+ [2023/11/19 v1.6 fvextra - extensions and patches for fancyvrb]
\RequirePackage{etoolbox}
\RequirePackage{fancyvrb}
\RequirePackage{upquote}
@@ -34,6 +34,11 @@
\@ifpackageloaded{csquotes}%
{\PackageWarning{fvextra}{csquotes should be loaded after fvextra, %
to avoid a warning from the lineno package}}{}
+\begingroup
+\catcode`\ =\active%
+\gdef\FV@ActiveSpaceToken{ }%
+\endgroup%
+\edef\FV@SpaceCatTen{\detokenize{ }}
\def\FV@FVSpaceToken{\FV@Space}
\def\FV@FVTabToken{\FV@Tab}
\def\FVExtraDoSpecials{%
@@ -1183,9 +1188,179 @@
\Verb[#1]{#2}%
\expandafter\end\expandafter{\FV@EnvironName}}
\def\endVerbEnv{\global\let\FV@EnvironName\relax}
+\define@key{FV}{writefilehandle}{%
+ \FV@SetWrite#1\FV@Sentinel}
+\def\FV@SetWrite#1#2\FV@Sentinel{%
+ \let\FancyVerbWriteFileHandle\relax
+ \if\relax\detokenize{#2}\relax
+ \let\FancyVerbWriteFileHandle#1\relax
+ \fi
+ \ifx\FancyVerbWriteFileHandle\relax
+ \PackageError{fvextra}%
+ {Missing or invalid file handle for write}%
+ {Need file handle from \string\newwrite}%
+ \fi}
+\let\FancyVerbWriteFileHandle\relax
+\define@key{FV}{writer}{%
+ \let\FV@Writer#1\relax}
+\def\FancyVerbDefaultWriter#1{%
+ \immediate\write\FancyVerbWriteFileHandle{\detokenize{#1}}}
+\fvset{writer=\FancyVerbDefaultWriter}
+\newcounter{FancyVerbWriteLine}
+\def\VerbatimWrite{%
+ \FV@Environment
+ {codes=,commandchars=none,commentchar=none,defineactive,%
+ gobble=0,formatcom=,firstline,lastline}%
+ {VerbatimWrite}}
+\def\FVB@VerbatimWrite{%
+ \@bsphack
+ \begingroup
+ \setcounter{FancyVerbWriteLine}{0}%
+ \let\c@FancyVerbLine\c@FancyVerbWriteLine
+ \FV@UseKeyValues
+ \FV@DefineWhiteSpace
+ \def\FV@Space{\space}%
+ \FV@DefineTabOut
+ \let\FV@ProcessLine\FV@Writer
+ \let\FV@FontScanPrep\relax
+ \let\@noligs\relax
+ \FancyVerbDefineActive
+ \FancyVerbFormatCom
+ \FV@Scan}
+\def\FVE@VerbatimWrite{%
+ \endgroup
+ \@esphack}
+\def\endVerbatimWrite{\FVE@VerbatimWrite}
+\define@key{FV}{afterbuffer}{%
+ \def\FV@afterbuffer{#1}}
+\fvset{afterbuffer=}
+\newcounter{FancyVerbBufferIndex}
+\define@key{FV}{bufferer}{%
+ \let\FV@Bufferer=#1\relax}
+\def\FancyVerbDefaultBufferer#1{%
+ \expandafter\xdef\csname\FancyVerbBufferLineName\arabic{FancyVerbBufferIndex}\endcsname{%
+ \detokenize{#1}}}
+\fvset{bufferer=\FancyVerbDefaultBufferer}
+\define@key{FV}{bufferlengthname}{%
+ \ifcsname c@#1\endcsname
+ \else
+ \newcounter{#1}%
+ \fi
+ \def\FV@bufferlengthname{#1}}
+\fvset{bufferlengthname=FancyVerbBufferLength}
+\define@key{FV}{bufferlinename}{%
+ \def\FancyVerbBufferLineName{#1}}
+\fvset{bufferlinename=FancyVerbBufferLine}
+\define@key{FV}{buffername}{%
+ \fvset{bufferlengthname=#1length,bufferlinename=#1line}}
+\newbool{FV@globalbuffer}
+\define@booleankey{FV}{globalbuffer}%
+ {\booltrue{FV@globalbuffer}}%
+ {\boolfalse{FV@globalbuffer}}
+\fvset{globalbuffer=false}
+\newcounter{FancyVerbBufferLine}
+\newcounter{FV@oldbufferlength}
+\newbool{FV@globalbuffer@tmp}
+\let\FV@bufferlengthname@tmp\relax
+\let\FancyVerbBufferLineName@tmp\relax
+\let\FV@afterbuffer@tmp\relax
+\def\VerbatimBuffer{%
+ \FV@Environment
+ {codes=,commandchars=none,commentchar=none,defineactive,%
+ gobble=0,formatcom=,firstline,lastline}%
+ {VerbatimBuffer}}
+\def\FVB@VerbatimBuffer{%
+ \@bsphack
+ \begingroup
+ \setcounter{FancyVerbBufferLine}{0}%
+ \let\c@FancyVerbLine\c@FancyVerbBufferLine
+ \setcounter{FancyVerbBufferIndex}{0}%
+ \setcounter{FV@oldbufferlength}{\expandafter\value\expandafter{\FV@bufferlengthname}}%
+ \expandafter\setcounter\expandafter{\FV@bufferlengthname}{0}%
+ \FV@UseKeyValues
+ \ifbool{FV@globalbuffer}%
+ {\global\booltrue{FV@globalbuffer@tmp}}%
+ {\global\boolfalse{FV@globalbuffer@tmp}}%
+ \global\let\FV@bufferlengthname@tmp\FV@bufferlengthname
+ \global\let\FancyVerbBufferLineName@tmp\FancyVerbBufferLineName
+ \global\let\FV@afterbuffer@tmp\FV@afterbuffer
+ \FV@DefineWhiteSpace
+ \def\FV@ProcessLine{\stepcounter{FancyVerbBufferIndex}\FV@Bufferer}%
+ \let\FV@FontScanPrep\relax
+ \let\@noligs\relax
+ \FancyVerbDefineActive
+ \FancyVerbFormatCom
+ \FV@Scan}
+\def\FVE@VerbatimBuffer{%
+ \endgroup
+ \@esphack
+ \expandafter\setcounter\expandafter{\FV@bufferlengthname@tmp}%
+ {\value{FancyVerbBufferIndex}}%
+ \setcounter{FancyVerbBufferIndex}{0}%
+ \begingroup
+ \FV@afterbuffer@tmp
+ \endgroup
+ \ifbool{FV@globalbuffer@tmp}%
+ {}%
+ {\ifnum\value{FV@oldbufferlength}>%
+ \expandafter\value\expandafter{\FV@bufferlengthname@tmp}\relax
+ \expandafter\setcounter\expandafter{\FV@bufferlengthname@tmp}%
+ {\value{FV@oldbufferlength}}%
+ \fi
+ \loop\unless\ifnum\expandafter\value\expandafter{\FV@bufferlengthname@tmp}=0\relax
+ \expandafter\global\expandafter\let\csname
+ \FancyVerbBufferLineName@tmp
+ \expandafter\arabic\expandafter{\FV@bufferlengthname@tmp}%
+ \endcsname\FV@Undefined
+ \expandafter\addtocounter\expandafter{\FV@bufferlengthname@tmp}{-1}%
+ \repeat}}
+\def\endVerbatimBuffer{\FVE@VerbatimBuffer}
+\newcommand{\VerbatimInsertBuffer}[1][]{%
+ \begingroup
+ \def\FV@KeyValues{#1}%
+ \def\FV@Scan{%
+ \FV@CatCodes
+ \xdef\FV@EnvironName{Verbatim}%
+ \ifnum\expandafter\value\expandafter{\FV@bufferlengthname}=\z@\relax
+ \PackageError{fvextra}%
+ {Buffer length counter \FV@bufferlengthname\space is invalid or zero}%
+ {}%
+ \let\FV@GetLine\relax
+ \fi
+ \FV@GetLine}%
+ \let\FV@CheckScan\relax
+ \setcounter{FancyVerbBufferIndex}{1}%
+ \def\VerbatimInsertBuffer@def@FV@Line##1{%
+ \FVExtraRetokenizeVArg{\def\FV@Line}{}{##1}}
+ \def\FancyVerbGetLine{%
+ \ifnum\value{FancyVerbBufferIndex}>%
+ \expandafter\value\expandafter{\FV@bufferlengthname}\relax
+ \global\let\FV@EnvironName\relax
+ \let\next\relax
+ \else
+ \ifcsname \FancyVerbBufferLineName\arabic{FancyVerbBufferIndex}\endcsname
+ \expandafter\let\expandafter\FV@Line@Buffer
+ \csname\FancyVerbBufferLineName\arabic{FancyVerbBufferIndex}\endcsname
+ \expandafter\VerbatimInsertBuffer@def@FV@Line\expandafter{\FV@Line@Buffer}%
+ \def\next{\FV@PreProcessLine\FV@GetLine}%
+ \stepcounter{FancyVerbBufferIndex}%
+ \else
+ \def\next{%
+ \PackageError{fvextra}%
+ {Buffer with line macro named
+ "\FancyVerbBufferLineName\arabic{FancyVerbBufferIndex}" does not exist}%
+ {Check bufferlinename, bufferlengthname, and globalbuffer settings}%
+ }%
+ \fi
+ \fi
+ \next}%
+ \FVB@Verbatim
+ \FVE@Verbatim
+ \setcounter{FancyVerbBufferIndex}{0}%
+ \endgroup}
\def\FV@Command#1#2{%
\FVExtra@ifstarVArg
- {\def\FV@KeyValues{#1,showspaces}\FV@@Command{#2}}%
+ {\def\FV@KeyValues{#1,showspaces,showtabs}\FV@@Command{#2}}%
{\def\FV@KeyValues{#1}\FV@@Command{#2}}}
\def\FV@@Command#1{%
\FVExtra@ifnextcharVArg[%
@@ -1210,7 +1385,13 @@
\expandafter\protected\expandafter\def\@tempc{\FV@Command{#4}{#3}}}%
\expandafter\@tempb\@tempa}%
{#1{#2}{\FV@Command{#4}{#3}}}}}
-\def\FancyVerbSpace{\textvisiblespace}
+\def\FancyVerbSpace{%
+ \makebox[0.5em]{%
+ \kern.07em
+ \vrule height.3ex
+ \hrulefill
+ \vrule height.3ex
+ \kern.07em}}
\newcounter{FV@TrueTabGroupLevel}
\def\FV@@ObeyTabs#1{%
\let\FV@Space@Orig\FV@Space
@@ -1383,6 +1564,11 @@
{\def\FV@TabChar{\FV@TabColor{\FancyVerbTab}}}%
{\let\FV@TabChar\relax}
\fvset{tabcolor=none, showtabs=false}
+\newbool{FV@showspaces}
+\define@booleankey{FV}{showspaces}%
+ {\booltrue{FV@showspaces}}%
+ {\boolfalse{FV@showspaces}}
+\fvset{showspaces=false}
\define@key{FV}{space}{\def\FancyVerbSpace{#1}}
\define@key{FV}{spacecolor}%
{\ifstrempty{#1}%
@@ -1390,14 +1576,43 @@
{\ifstrequal{#1}{none}%
{\let\FV@SpaceColor\relax}%
{\def\FV@SpaceColor{\textcolor{#1}}}}}
-\define@booleankey{FV}{showspaces}%
- {\def\FV@Space{\FV@SpaceColor{\FancyVerbSpace}}}%
- {\def\FV@Space{\ }}
-\fvset{spacecolor=none, showspaces=false}
+\fvset{spacecolor=none}
+\define@key{FV}{spacebreak}{%
+ \def\FancyVerbSpaceBreak{#1}}
+\fvset{spacebreak=\discretionary{}{}{}}
+\newbool{FV@breakcollapsespaces}
+\define@booleankey{FV}{breakcollapsespaces}%
+ {\booltrue{FV@breakcollapsespaces}}%
+ {\boolfalse{FV@breakcollapsespaces}}%
+\fvset{breakcollapsespaces=true}
+\def\FV@DefFVSpace{%
+ \ifbool{FV@showspaces}%
+ {\ifbool{FV@breaklines}%
+ {\ifcsname FV@BreakBefore@Token\FV@SpaceCatTen\endcsname
+ \def\FV@Space{\FV@SpaceColor{\FancyVerbSpace}}%
+ \else\ifcsname FV@BreakAfter@Token\FV@SpaceCatTen\endcsname
+ \def\FV@Space{\FV@SpaceColor{\FancyVerbSpace}}%
+ \else
+ \def\FV@Space{\FV@SpaceColor{\FancyVerbSpace}\FancyVerbSpaceBreak}%
+ \fi\fi}%
+ {\def\FV@Space{\FV@SpaceColor{\FancyVerbSpace}}}}%
+ {\ifbool{FV@breaklines}%
+ {\ifcsname FV@BreakBefore@Token\FV@SpaceCatTen\endcsname
+ \def\FV@Space{\mbox{\FV@SpaceCatTen}}%
+ \else\ifcsname FV@BreakAfter@Token\FV@SpaceCatTen\endcsname
+ \def\FV@Space{\mbox{\FV@SpaceCatTen}}%
+ \else
+ \ifbool{FV@breakcollapsespaces}%
+ {\def\FV@Space{\FV@SpaceCatTen}}%
+ {\def\FV@Space{\mbox{\FV@SpaceCatTen}\FancyVerbSpaceBreak}}%
+ \fi\fi}%
+ {\def\FV@Space{\FV@SpaceCatTen}}}}%
+\AtEndOfPackage{%
+ \g@addto@macro\FV@FormattingPrep@PreHook{\FV@DefFVSpace}}
\define@booleankey{FV}{mathescape}%
{\let\FancyVerbMathEscape\FV@MathEscape}%
{\let\FancyVerbMathEscape\relax}
-\def\FV@MathEscape{\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax}
+\def\FV@MathEscape{\catcode`\$=3\catcode`\&=4\catcode`\^=7\catcode`\_=8\relax}
\FV@AddToHook\FV@CatCodesHook\FancyVerbMathEscape
\fvset{mathescape=false}
\define@booleankey{FV}{beameroverlays}%
@@ -2132,11 +2347,24 @@
\def\FV@Break@GroupTemplate#1{{#1}}
\def\FV@Break@NBToken#1{%
\FV@BreakBuffer@Append{#1}%
- \let\FV@Break@LastToken=\FV@Undefined
+ \let\FV@LastToken=\FV@Undefined
\FV@Break@Scan}
\def\FV@Break@AnyToken#1{%
- \FV@BreakBuffer@Append{\FancyVerbBreakAnywhereBreak#1}%
- \FV@Break@Scan}
+ \ifx\FV@FVSpaceToken#1\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\let\FV@LastToken=#1\FV@BreakBuffer@Append{#1}\FV@Break@Scan}%
+ {\ifx\FV@LastToken\FV@FVSpaceToken
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\let\FV@LastToken=#1%
+ \FV@BreakBuffer@Append{#1}\FV@Break@Scan}%
+ {\let\FV@LastToken=#1%
+ \FV@BreakBuffer@Append{\FancyVerbBreakAnywhereBreak#1}\FV@Break@Scan}}}
\def\FV@Break@BeforeAfterToken#1{%
\ifcsname FV@BreakBefore@Token\detokenize{#1}\endcsname
\let\FV@Break@Next\FV@Break@BeforeTokenBreak
@@ -2156,11 +2384,19 @@
\def\FV@Break@BeforeTokenBreak#1{%
\ifbool{FV@breakbeforeinrun}%
{\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
- \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
+ \ifx#1\FV@FVSpaceToken
+ \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
+ \else
+ \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
+ \fi
\let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan
\def\FV@RescanToken{#1}%
\else
- \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
+ \ifx#1\FV@FVSpaceToken
+ \FV@BreakBuffer@Append{\FancyVerbSpaceBreak#1}%
+ \else
+ \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
+ \fi
\let\FV@Break@Next\FV@Break@Scan
\let\FV@LastToken=#1%
\fi}%
@@ -2175,11 +2411,19 @@
\fi
\else
\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
- \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
+ \ifx#1\FV@FVSpaceToken
+ \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
+ \else
+ \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
+ \fi
\let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan
\def\FV@RescanToken{#1}%
\else
- \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
+ \ifx#1\FV@FVSpaceToken
+ \FV@BreakBuffer@Append{\FancyVerbSpaceBreak#1}%
+ \else
+ \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
+ \fi
\let\FV@Break@Next\FV@Break@Scan
\let\FV@LastToken=#1%
\fi
@@ -2190,32 +2434,58 @@
\def\FV@Break@AfterTokenBreak#1{%
\let\FV@LastToken=#1%
\@ifnextchar\FV@FVSpaceToken%
- {\FV@BreakBuffer@Append{#1}\FV@Break@Scan}%
- {\ifbool{FV@breakafterinrun}%
- {\FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}%
- \let\FV@Break@Next\FV@Break@Scan}%
- {\ifx\@let@token#1\relax
+ {\ifx#1\FV@FVSpaceToken
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\FV@Break@AfterTokenBreak@i{#1}}%
+ {\FV@BreakBuffer@Append{#1}%
+ \FV@Break@Scan}}%
+ {\FV@Break@AfterTokenBreak@i{#1}}}
+\def\FV@Break@AfterTokenBreak@i#1{%
+ \ifbool{FV@breakafterinrun}%
+ {\ifx#1\FV@FVSpaceToken
+ \FV@BreakBuffer@Append{#1\FancyVerbSpaceBreak}%
+ \else
+ \FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}%
+ \fi
+ \let\FV@Break@Next\FV@Break@Scan}%
+ {\ifx\@let@token#1\relax
+ \FV@BreakBuffer@Append{#1}%
+ \let\FV@Break@Next\FV@Break@Scan
+ \else
+ \expandafter\ifx\csname @let@token\endcsname\bgroup\relax
\FV@BreakBuffer@Append{#1}%
- \let\FV@Break@Next\FV@Break@Scan
+ \let\FV@Break@Next\FV@Break@AfterTokenBreak@Group
\else
- \expandafter\ifx\csname @let@token\endcsname\bgroup\relax
- \FV@BreakBuffer@Append{#1}%
- \let\FV@Break@Next\FV@Break@AfterTokenBreak@Group
+ \ifx#1\FV@FVSpaceToken
+ \FV@BreakBuffer@Append{#1\FancyVerbSpaceBreak}%
\else
\FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}%
- \let\FV@Break@Next\FV@Break@Scan
\fi
- \fi}%
- \FV@Break@Next}%
+ \let\FV@Break@Next\FV@Break@Scan
+ \fi
+ \fi}%
+ \FV@Break@Next
}
\def\FV@Break@AfterTokenBreak@Group#1{%
\ifstrempty{#1}%
{\FV@BreakBuffer@Append{{}}%
\@ifnextchar\FV@LastToken%
{\FV@Break@Scan}%
- {\FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
+ {\ifx\FV@LastToken\FV@FVSpaceToken
+ \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
+ \else
+ \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
+ \fi
\FV@Break@Scan}}%
- {\FV@Break@Group{#1}}}
+ {\ifx\FV@LastToken\FV@FVSpaceToken
+ \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
+ \else
+ \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
+ \fi
+ \FV@Break@Group{#1}}}
\ifFV@pdfTeXinputenc
\def\FV@BreakBeforePrep@UTF{%
\ifx\FV@BreakBefore\@empty\relax
@@ -2304,8 +2574,23 @@
\FV@Break@Next{#1}%
}
\def\FV@Break@AnyToken@UTF@i#1{%
- \FV@BreakBuffer@Append{\FancyVerbBreakAnywhereBreak#1}%
- \FV@Break@Scan}
+ \def\FV@CurrentToken{#1}%
+ \ifx\FV@CurrentToken\FV@ActiveSpaceToken\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\let\FV@LastToken\FV@CurrentToken
+ \FV@BreakBuffer@Append{#1}\FV@Break@Scan}%
+ {\ifx\FV@LastToken\FV@ActiveSpaceToken
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\let\FV@LastToken\FV@CurrentToken
+ \FV@BreakBuffer@Append{#1}\FV@Break@Scan}%
+ {\let\FV@LastToken\FV@CurrentToken
+ \FV@BreakBuffer@Append{\FancyVerbBreakAnywhereBreak#1}\FV@Break@Scan}}}
\def\FV@Break@BeforeAfterToken@UTF#1{%
\ifcsname FV@U8:\detokenize{#1}\endcsname
\expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{#1}\endcsname
@@ -2335,11 +2620,19 @@
\def\FV@CurrentToken{#1}%
\ifbool{FV@breakbeforeinrun}%
{\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
- \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
+ \ifx\FV@CurrentToken\FV@ActiveSpaceToken
+ \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
+ \else
+ \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
+ \fi
\let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan@UTF
\def\FV@RescanToken{#1}%
\else
- \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
+ \ifx\FV@CurrentToken\FV@ActiveSpaceToken
+ \FV@BreakBuffer@Append{\FancyVerbSpaceBreak#1}%
+ \else
+ \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
+ \fi
\let\FV@Break@Next\FV@Break@Scan
\def\FV@LastToken{#1}%
\fi}%
@@ -2354,11 +2647,19 @@
\fi
\else
\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
- \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
+ \ifx\FV@CurrentToken\FV@ActiveSpaceToken
+ \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
+ \else
+ \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
+ \fi
\let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan@UTF
\def\FV@RescanToken{#1}%
\else
- \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
+ \ifx\FV@CurrentToken\FV@ActiveSpaceToken
+ \FV@BreakBuffer@Append{\FancyVerbSpaceBreak#1}%
+ \else
+ \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
+ \fi
\let\FV@Break@Next\FV@Break@Scan
\def\FV@LastToken{#1}%
\fi
@@ -2369,27 +2670,43 @@
\def\FV@Break@AfterTokenBreak@UTF#1{%
\def\FV@LastToken{#1}%
\@ifnextchar\FV@FVSpaceToken%
- {\FV@BreakBuffer@Append{#1}\FV@Break@Scan}%
- {\ifbool{FV@breakafterinrun}%
- {\FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}%
- \let\FV@Break@Next\FV@Break@Scan}%
+ {\ifx\FV@LastToken\FV@ActiveSpaceToken
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\FV@Break@AfterTokenBreak@UTF@i{#1}}%
{\FV@BreakBuffer@Append{#1}%
- \ifx\@let@token\bgroup\relax
- \let\FV@Break@Next\FV@Break@AfterTokenBreak@Group@UTF
- \else
- \let\FV@Break@Next\FV@Break@AfterTokenBreak@UTF@i
- \fi}%
- \FV@Break@Next}%
-}
+ \FV@Break@Scan}}%
+ {\FV@Break@AfterTokenBreak@UTF@i{#1}}}
\def\FV@Break@AfterTokenBreak@UTF@i#1{%
+ \ifbool{FV@breakafterinrun}%
+ {\ifx\FV@LastToken\FV@ActiveSpaceToken
+ \FV@BreakBuffer@Append{#1\FancyVerbSpaceBreak}%
+ \else
+ \FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}%
+ \fi
+ \let\FV@Break@Next\FV@Break@Scan}%
+ {\FV@BreakBuffer@Append{#1}%
+ \expandafter\ifx\csname @let@token\endcsname\bgroup\relax
+ \let\FV@Break@Next\FV@Break@AfterTokenBreak@Group@UTF
+ \else
+ \let\FV@Break@Next\FV@Break@AfterTokenBreak@UTF@ii
+ \fi}%
+ \FV@Break@Next}
+\def\FV@Break@AfterTokenBreak@UTF@ii#1{%
\ifcsname FV@U8:\detokenize{#1}\endcsname
\expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{#1}\endcsname
- \let\FV@UTF@octets@after\FV@Break@AfterTokenBreak@UTF@i
+ \let\FV@UTF@octets@after\FV@Break@AfterTokenBreak@UTF@ii
\else
\def\FV@NextToken{#1}%
\ifx\FV@LastToken\FV@NextToken
\else
- \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
+ \ifx\FV@LastToken\FV@ActiveSpaceToken
+ \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
+ \else
+ \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
+ \fi
\fi
\let\FV@Break@Next\FV@Break@Scan
\fi
@@ -2398,9 +2715,19 @@
\ifstrempty{#1}%
{\FV@BreakBuffer@Append{{}}%
\@ifnextchar\bgroup
- {\FV@Break@Group}%
+ {\ifx\FV@LastToken\FV@ActiveSpaceToken
+ \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
+ \else
+ \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
+ \fi
+ \FV@Break@Group}%
{\FV@Break@AfterTokenBreak@Group@UTF@i}}%
- {\FV@Break@Group{#1}}}
+ {\ifx\FV@LastToken\FV@ActiveSpaceToken
+ \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
+ \else
+ \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
+ \fi
+ \FV@Break@Group{#1}}}
\def\FV@Break@AfterTokenBreak@Group@UTF@i#1{%
\ifcsname FV@U8:\detokenize{#1}\endcsname
\expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{#1}\endcsname
@@ -2409,7 +2736,11 @@
\def\FV@NextToken{#1}%
\ifx\FV@LastToken\FV@NextToken
\else
- \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
+ \ifx\FV@LastToken\FV@ActiveSpaceToken
+ \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
+ \else
+ \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
+ \fi
\fi
\let\FV@Break@Next\FV@Break@Scan
\fi