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.sty581
1 files changed, 407 insertions, 174 deletions
diff --git a/Master/texmf-dist/tex/latex/fvextra/fvextra.sty b/Master/texmf-dist/tex/latex/fvextra/fvextra.sty
index 948c22af560..93f61af57a0 100644
--- a/Master/texmf-dist/tex/latex/fvextra/fvextra.sty
+++ b/Master/texmf-dist/tex/latex/fvextra/fvextra.sty
@@ -8,7 +8,7 @@
%%
%% This is a generated file.
%%
-%% Copyright (C) 2016-2017 by Geoffrey M. Poore <gpoore@gmail.com>
+%% Copyright (C) 2016-2022 by Geoffrey M. Poore <gpoore@gmail.com>
%% --------------------------------------------------------------------------
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
@@ -20,8 +20,7 @@
%%
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesPackage{fvextra}
- [2019/02/04 v1.4 fvextra - extensions and patches for fancyvrb]
-\RequirePackage{ifthen}
+ [2022/11/30 v1.5 fvextra - extensions and patches for fancyvrb]
\RequirePackage{etoolbox}
\RequirePackage{fancyvrb}
\RequirePackage{upquote}
@@ -127,6 +126,18 @@
\fi
\FV@UTF@octets@after{#1#2#3#4}}
\fi
+\long\def\FVExtra@ifnextcharAny#1#2#3{%
+ \let\reserved@d= #1%
+ \def\reserved@a{#2}%
+ \def\reserved@b{#3}%
+ \futurelet\@let@token\FVExtra@ifnchAny}
+\def\FVExtra@ifnchAny{%
+ \ifx\@let@token\reserved@d
+ \expandafter\reserved@a
+ \else
+ \expandafter\reserved@b
+ \fi}
+
\long\def\FVExtra@ifnextcharVArg#1#2#3{%
\begingroup
\edef\FV@TmpSpaceCat{\the\catcode` }%
@@ -148,8 +159,26 @@
\begingroup
\catcode`\^^M=\active
\@ifnextchar[%
- {\endgroup\FV@ReadOArgContinue{#2}}%
- {\endgroup\FV@ReadOArgContinue{#2}[#1]}}
+ {\endgroup\FVExtraReadOArgBeforeVEnv@i{#2}}%
+ {\endgroup\FVExtraReadOArgBeforeVEnv@i{#2}[#1]}}
+\def\FVExtraReadOArgBeforeVEnv@i#1[#2]{%
+ \begingroup
+ \catcode`\^^M=\active
+ \FVExtraReadOArgBeforeVEnv@ii{#1}{#2}}
+\begingroup
+\catcode`\^^M=\active%
+\gdef\FVExtraReadOArgBeforeVEnv@ii#1#2#3^^M{%
+ \endgroup%
+ \FVExtraReadOArgBeforeVEnv@iii{#1}{#2}{#3}}%
+\endgroup%
+\def\FVExtraReadOArgBeforeVEnv@iii#1#2#3{%
+ \if\relax\detokenize{#3}\relax
+ \else
+ \PackageError{fvextra}%
+ {Discarded invalid text while checking for optional argument of verbatim environment}%
+ {Discarded invalid text while checking for optional argument of verbatim environment}%
+ \fi
+ #1{#2}}
\def\FVExtraReadVArg#1{%
\begingroup
\ifFV@pdfTeXinputenc
@@ -290,6 +319,15 @@
\def\FV@UnexpandedReadStarOArgBEscVArg@i#1#2{%
\FVExtraPDFStringEscapedVerbatimDetokenize{#2}}%
\makeatother}
+\def\FVExtraUnexpandedReadStarOArgMArgBVArg#1#{%
+ \FV@UnexpandedReadStarOArgMArgBVArg@i{#1}}
+\def\FV@UnexpandedReadStarOArgMArgBVArg@i#1#2#3{%
+ \FVExtraAlwaysUnexpanded{\FVExtraUnexpandedReadStarOArgMArgBVArg#1{#2}{#3}}}
+\FVExtrapdfstringdefDisableCommands{%
+ \makeatletter
+ \def\FV@UnexpandedReadStarOArgMArgBVArg@i#1#2#3{%
+ \FVExtraPDFStringVerbatimDetokenize{#3}}%
+ \makeatother}
\def\FVExtraPDFStringEscapeChar#1{%
\ifcsname FV@PDFStringEscapeChar@#1\endcsname
\csname FV@PDFStringEscapeChar@#1\endcsname
@@ -888,9 +926,11 @@
\edef\FV@dollarchar{\string$}
\edef\FV@ampchar{\string&}
\edef\FV@underscorechar{\string_}
+\edef\FV@caretchar{\string^}
\edef\FV@tildechar{\string~}
\edef\FV@leftsquarebracket{\string[}
\edef\FV@rightsquarebracket{\string]}
+\edef\FV@commachar{\string,}
\newcommand{\FV@EscChars}{%
\let\#\FV@hashchar
\let\%\@percentchar
@@ -899,11 +939,13 @@
\let\$\FV@dollarchar
\let\&\FV@ampchar
\let\_\FV@underscorechar
+ \let\^\FV@caretchar
\let\\\@backslashchar
\let~\FV@tildechar
\let\~\FV@tildechar
\let\[\FV@leftsquarebracket
\let\]\FV@rightsquarebracket
+ \let\,\FV@commachar
} %$ <- highlighting
\def\FV@InlineKeyValues{}
\def\fvinlineset#1{%
@@ -917,6 +959,7 @@
{\booltrue{FV@extra}}%
{\boolfalse{FV@extra}}
\fvset{extra=true}
+\def\FancyVerbFormatInline#1{#1}
\def\Verb{%
\FVExtraRobustCommand\RobustVerb\FVExtraUnexpandedReadStarOArgBVArg}
\protected\def\RobustVerb{\FV@Command{}{Verb}}
@@ -946,12 +989,12 @@
\FVExtraDetokenizeVArg{%
\FVExtraRetokenizeVArg{\FVC@Verb@Extra@ii}{\FV@CatCodes}}}}
\def\FVC@Verb@Extra@ii#1{%
- \ifFV@BreakLines
+ \ifFV@breaklines
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
- {\FancyVerbBreakStart#1\FancyVerbBreakStop}%
+ {\FV@InsertBreaks{\FancyVerbFormatInline}{#1}}%
{\mbox{#1}}%
\endgroup}
\let\FVC@SaveVerb@FV\FVC@SaveVerb
@@ -1010,12 +1053,12 @@
\FVExtraDetokenizeVArg{%
\FVExtraRetokenizeVArg{\FV@UseVerb@Extra}{\FV@CatCodes}}{#1}}
\def\FV@UseVerb@Extra#1{%
- \ifFV@BreakLines
+ \ifFV@breaklines
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
- {\FancyVerbBreakStart#1\FancyVerbBreakStop}%
+ {\FV@InsertBreaks{\FancyVerbFormatInline}{#1}}%
{\mbox{#1}}%
\endgroup}
\def\EscVerb{%
@@ -1035,14 +1078,111 @@
\FVExtraDetokenizeREscVArg{%
\FVExtraRetokenizeVArg{\FVC@EscVerb@ii}{\FV@CatCodes}}{#1}}
\def\FVC@EscVerb@ii#1{%
- \ifFV@BreakLines
+ \ifFV@breaklines
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
- {\FancyVerbBreakStart#1\FancyVerbBreakStop}%
+ {\FV@InsertBreaks{\FancyVerbFormatInline}{#1}}%
{\mbox{#1}}%
\endgroup}
+\def\VerbEnv{%
+ \ifcsname @currenvir\endcsname
+ \ifx\@currenvir\@empty
+ \PackageError{fvextra}{VerbEnv is an environment}{VerbEnv is an environment}%
+ \else
+ \ifx\@currenvir\relax
+ \PackageError{fvextra}{VerbEnv is an environment}{VerbEnv is an environment}%
+ \fi
+ \fi
+ \else
+ \PackageError{fvextra}{VerbEnv is an environment}{VerbEnv is an environment}%
+ \fi
+ \VerbatimEnvironment
+ \FVExtraReadOArgBeforeVEnv{\expandafter\VerbEnv@i\expandafter{\FV@EnvironName}}}
+\def\VerbEnv@i#1#2{%
+ \begingroup
+ \let\do\@makeother\FVExtraDoSpecials
+ \catcode`\ =\active
+ \catcode`\^^I=\active
+ \catcode`\^^M=\active
+ \VerbEnv@ii{#1}{#2}}
+\begingroup
+\catcode`\!=0
+\catcode`\<=1
+\catcode`\>=2
+!catcode`!\=12
+!catcode`!{=12
+!catcode`!}=12
+!catcode`!^^M=!active%
+!gdef!VerbEnv@ii#1#2#3^^M<%
+ !endgroup%
+ !def!VerbEnv@CheckLine##1\end{#1}##2!FV@Sentinel<%
+ !if!relax!detokenize<##2>!relax%
+ !else%
+ !PackageError<fvextra><Missing environment contents><Missing environment contents>%
+ !let!VerbEnv@iii!VerbEnv@iii@Error%
+ !fi>%
+ !VerbEnv@CheckLine#3\end{#1}!FV@Sentinel%
+ !VerbEnv@iii<#1><#2><#3>>%
+!endgroup%
+\def\VerbEnv@iii@Error#1#2#3{}
+\def\VerbEnv@iii#1#2#3{%
+ \begingroup
+ \let\do\@makeother\FVExtraDoSpecials
+ \catcode`\ =10\relax
+ \catcode`\^^M=\active
+ \VerbEnv@iv{#1}{#2}{#3}}
+\begingroup
+\catcode`\!=0
+\catcode`\<=1
+\catcode`\>=2
+!catcode`!\=12
+!catcode`!{=12
+!catcode`!}=12
+!catcode`!^^M=!active%
+!gdef!VerbEnv@iv#1#2#3#4^^M<%
+ !endgroup%
+ !def!VerbEnv@CheckEndDelim##1\end{#1}##2!FV@Sentinel<%
+ !if!relax!detokenize<##2>!relax%
+ !PackageError<fvextra><Missing end for environment !FV@EnvironName><Add environment end>%
+ !let!VerbEnv@v!VerbEnv@v@Error%
+ !else%
+ !VerbEnv@CheckEndLeading##1!FV@Sentinel%
+ !VerbEnv@CheckEndTrailing##2!FV@Sentinel%
+ !fi>%
+ !def!VerbEnv@CheckEndTrailing##1\end{#1}!FV@Sentinel<%
+ !if!relax!detokenize<##1>!relax%
+ !else%
+ !PackageError<fvextra>%
+ <Discarded text after end of environment !FV@EnvironName>%
+ <Discarded text after end of environment !FV@EnvironName>%
+ !let!VerbEnv@v!VerbEnv@v@Error%
+ !fi>%
+ !VerbEnv@CheckEndDelim#4\end{#1}!FV@Sentinel%
+ !VerbEnv@v<#2><#3>>%
+!endgroup
+\def\VerbEnv@CheckEndLeading{%
+ \FVExtra@ifnextcharAny\@sptoken%
+ {\VerbEnv@CheckEndLeading@Continue}%
+ {\ifx\@let@token\FV@Sentinel
+ \expandafter\VerbEnv@CheckEndLeading@End
+ \else
+ \expandafter\VerbEnv@CheckEndLeading@EndError
+ \fi}}
+\def\VerbEnv@CheckEndLeading@Continue#1{%
+ \VerbEnv@CheckEndLeading}
+\def\VerbEnv@CheckEndLeading@End#1\FV@Sentinel{}
+\def\VerbEnv@CheckEndLeading@EndError{%
+ \PackageError{fvextra}%
+ {Discarded text before end of environment \FV@EnvironName}%
+ {Discarded text before end of environment \FV@EnvironName}%
+ \let\VerbEnv@v\VerbEnv@v@Error}
+\def\VerbEnv@v@Error#1#2{}
+\def\VerbEnv@v#1#2{%
+ \Verb[#1]{#2}%
+ \expandafter\end\expandafter{\FV@EnvironName}}
+\def\endVerbEnv{\global\let\FV@EnvironName\relax}
\def\FV@Command#1#2{%
\FVExtra@ifstarVArg
{\def\FV@KeyValues{#1,showspaces}\FV@@Command{#2}}%
@@ -1103,7 +1243,7 @@
\FV@TrueTabSaveWidth
\setbox\FV@TabBox=\hbox\bgroup
\unhbox\FV@TabBox\hbox to\@tempdima{\hss\FV@TabChar}}
-\newboolean{FV@ObeyTabs@Whitespace@Tab}
+\newbool{FV@ObeyTabs@Whitespace@Tab}
\def\FV@TrueTab@Group{%
\booltrue{FV@ObeyTabs@Whitespace@Tab}%
\gdef\FV@TmpWhitespace{\FV@FVTabToken}%
@@ -1587,16 +1727,25 @@
#1=0pt\relax
\fi
}
-\newboolean{FV@BreakLines}
+\newbool{FV@breaklines}
\define@booleankey{FV}{breaklines}%
- {\FV@BreakLinestrue
- \let\FV@ListProcessLine\FV@ListProcessLine@Break}%
- {\FV@BreakLinesfalse
- \let\FV@ListProcessLine\FV@ListProcessLine@NoBreak}
+ {\booltrue{FV@breaklines}%
+ \let\FV@ListProcessLine\FV@ListProcessLine@Break}%
+ {\boolfalse{FV@breaklines}%
+ \let\FV@ListProcessLine\FV@ListProcessLine@NoBreak}
\AtEndOfPackage{\fvset{breaklines=false}}
+\def\FV@BreakLinesLuaTeXHook{%
+ \expandafter\def\expandafter\@noligs\expandafter{\@noligs
+ \begingroup\lccode`\~=`\-\lowercase{\endgroup\def~}{\leavevmode\kern\z@\mbox{-}}}}
+\ifcsname directlua\endcsname
+ \ifx\directlua\relax
+ \else
+ \FV@AddToHook\FV@FormattingPrep@PreHook\FV@BreakLinesLuaTeXHook
+ \fi
+\fi
\def\FV@BreakLinesIndentationHook{}
\g@addto@macro\FV@FormattingPrep@PostHook{%
- \ifFV@BreakLines
+ \ifFV@breaklines
\FV@BreakLinesIndentationHook
\fi}
\newdimen\FV@BreakIndent
@@ -1610,9 +1759,9 @@
\FV@SetToWidthNChars{\FV@BreakIndent}{\FV@BreakIndentNChars}%
\fi}
\fvset{breakindentnchars=0}
-\newboolean{FV@BreakAutoIndent}
+\newbool{FV@breakautoindent}
\define@booleankey{FV}{breakautoindent}%
- {\FV@BreakAutoIndenttrue}{\FV@BreakAutoIndentfalse}
+ {\booltrue{FV@breakautoindent}}{\boolfalse{FV@breakautoindent}}
\fvset{breakautoindent=true}
\define@key{FV}{breaksymbolleft}{\def\FancyVerbBreakSymbolLeft{#1}}
\define@key{FV}{breaksymbol}{\fvset{breaksymbolleft=#1}}
@@ -1676,33 +1825,35 @@
\ifnum\value{linenumber}=\value{FancyVerbLineBreakLast}\relax\else{#1}\fi}
\let\FancyVerbBreakStart\relax
\let\FancyVerbBreakStop\relax
-\let\FV@Break@Token\relax
-\newboolean{FV@BreakAnywhere}
+\let\FV@Break@DefaultToken\FV@Break@NBToken
+\newbool{FV@breakanywhere}
\define@booleankey{FV}{breakanywhere}%
- {\FV@BreakAnywheretrue
+ {\booltrue{FV@breakanywhere}%
\let\FancyVerbBreakStart\FV@Break
\let\FancyVerbBreakStop\FV@EndBreak
- \let\FV@Break@Token\FV@Break@AnyToken}%
- {\FV@BreakAnywherefalse
+ \let\FV@Break@DefaultToken\FV@Break@AnyToken}%
+ {\boolfalse{FV@breakanywhere}%
\let\FancyVerbBreakStart\relax
- \let\FancyVerbBreakStop\relax}
+ \let\FancyVerbBreakStop\relax
+ \let\FV@Break@DefaultToken\FV@Break@NBToken}
\fvset{breakanywhere=false}
\define@key{FV}{breakbefore}{%
\ifstrempty{#1}%
{\let\FV@BreakBefore\@empty
\let\FancyVerbBreakStart\relax
- \let\FancyVerbBreakStop\relax}%
+ \let\FancyVerbBreakStop\relax
+ \let\FV@Break@DefaultToken\FV@Break@NBToken}%
{\def\FV@BreakBefore{#1}%
\let\FancyVerbBreakStart\FV@Break
\let\FancyVerbBreakStop\FV@EndBreak
- \let\FV@Break@Token\FV@Break@BeforeAfterToken}%
+ \let\FV@Break@DefaultToken\FV@Break@BeforeAfterToken}%
}
\fvset{breakbefore={}}
-\newboolean{FV@BreakBeforeGroup}
-\define@booleankey{FV}{breakbeforegroup}%
- {\FV@BreakBeforeGrouptrue}%
- {\FV@BreakBeforeGroupfalse}%
-\fvset{breakbeforegroup=true}
+\newbool{FV@breakbeforeinrun}
+\define@booleankey{FV}{breakbeforeinrun}%
+ {\booltrue{FV@breakbeforeinrun}}%
+ {\boolfalse{FV@breakbeforeinrun}}%
+\fvset{breakbeforeinrun=false}
\def\FV@BreakBeforePrep{%
\ifx\FV@BreakBefore\@empty\relax
\else
@@ -1731,18 +1882,19 @@
\ifstrempty{#1}%
{\let\FV@BreakAfter\@empty
\let\FancyVerbBreakStart\relax
- \let\FancyVerbBreakStop\relax}%
+ \let\FancyVerbBreakStop\relax
+ \let\FV@Break@DefaultToken\FV@Break@NBToken}%
{\def\FV@BreakAfter{#1}%
\let\FancyVerbBreakStart\FV@Break
\let\FancyVerbBreakStop\FV@EndBreak
- \let\FV@Break@Token\FV@Break@BeforeAfterToken}%
+ \let\FV@Break@DefaultToken\FV@Break@BeforeAfterToken}%
}
\fvset{breakafter={}}
-\newboolean{FV@BreakAfterGroup}
-\define@booleankey{FV}{breakaftergroup}%
- {\FV@BreakAfterGrouptrue}%
- {\FV@BreakAfterGroupfalse}%
-\fvset{breakaftergroup=true}
+\newbool{FV@breakafterinrun}
+\define@booleankey{FV}{breakafterinrun}%
+ {\booltrue{FV@breakafterinrun}}%
+ {\boolfalse{FV@breakafterinrun}}%
+\fvset{breakafterinrun=false}
\def\FV@BreakAfterPrep{%
\ifx\FV@BreakAfter\@empty\relax
\else
@@ -1757,16 +1909,16 @@
}%
\def\FV@BreakAfter@Process@i##1{%
\ifcsname FV@BreakBefore@Token\detokenize{##1}\endcsname
- \ifthenelse{\boolean{FV@BreakBeforeGroup}}%
- {\ifthenelse{\boolean{FV@BreakAfterGroup}}%
+ \ifbool{FV@breakbeforeinrun}%
+ {\ifbool{FV@breakafterinrun}%
{}%
{\PackageError{fvextra}%
- {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}%
- {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}}}%
- {\ifthenelse{\boolean{FV@BreakAfterGroup}}%
+ {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}%
+ {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}}}%
+ {\ifbool{FV@breakafterinrun}%
{\PackageError{fvextra}%
- {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}%
- {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}}%
+ {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}%
+ {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}}%
{}}%
\fi
\g@addto@macro\FV@BreakAfter@Def{%
@@ -1827,80 +1979,163 @@
\newcommand{\FancyVerbBreakAfterBreak}{%
\discretionary{\FancyVerbBreakAfterSymbolPre}%
{\FancyVerbBreakAfterSymbolPost}{}}
+\newbool{FV@breaknonspaceingroup}
+\define@booleankey{FV}{breaknonspaceingroup}%
+ {\booltrue{FV@breaknonspaceingroup}}%
+ {\boolfalse{FV@breaknonspaceingroup}}
+\fvset{breaknonspaceingroup=false}
\newsavebox{\FV@LineBox}
\newsavebox{\FV@LineIndentBox}
\let\FV@LineIndentChars\@empty
-\def\FV@CleanRemainingChars#1\FV@Undefined{}
-\def\FV@GetLineIndent{\afterassignment\FV@CheckIndentChar\let\FV@NextChar=}
-\def\FV@CheckIndentChar{%
- \ifx\FV@NextChar\FV@Undefined\relax
- \let\FV@Next=\relax
- \else
- \ifx\FV@NextChar\FV@FVSpaceToken\relax
- \g@addto@macro{\FV@LineIndentChars}{\FV@FVSpaceToken}%
- \let\FV@Next=\FV@GetLineIndent
- \else
- \ifx\FV@NextChar\FV@FVTabToken\relax
- \g@addto@macro{\FV@LineIndentChars}{\FV@FVTabToken}%
- \let\FV@Next=\FV@GetLineIndent
+\def\FV@GetLineIndent{%
+ \@ifnextchar\FV@Sentinel
+ {\FV@GetLineIndent@End}%
+ {\ifx\@let@token\FV@FVSpaceToken
+ \let\FV@Next\FV@GetLineIndent@Whitespace
+ \else\ifx\@let@token\FV@FVTabToken
+ \let\FV@Next\FV@GetLineIndent@Whitespace
+ \else\ifcsname FV@PYG@Redefed\endcsname
+ \ifx\@let@token\FV@PYG@Redefed
+ \let\FV@Next\FV@GetLineIndent@Pygments
\else
- \let\FV@Next=\FV@CleanRemainingChars
+ \let\FV@Next\FV@GetLineIndent@End
\fi
- \fi
- \fi
- \FV@Next
-}
+ \else
+ \let\FV@Next\FV@GetLineIndent@End
+ \fi\fi\fi
+ \FV@Next}}
+\def\FV@GetLineIndent@End#1\FV@Sentinel{}
+\def\FV@GetLineIndent@Whitespace#1{%
+ \expandafter\def\expandafter\FV@LineIndentChars\expandafter{\FV@LineIndentChars#1}%
+ \FV@GetLineIndent}
+\def\FV@GetLineIndent@Pygments#1#2#3{%
+ \FV@GetLineIndent#3}
\def\FV@TrueTab@UseWidth{%
\@tempdima=\csname FV@TrueTab:Width\arabic{FV@TrueTabCounter}\endcsname sp\relax
\stepcounter{FV@TrueTabCounter}%
\hbox to\@tempdima{\hss\FV@TabChar}}
-\def\FV@Break{%
- \def\FV@TmpLine{}%
+\newcounter{FV@BreakBufferDepth}
+\def\FV@BreakBuffer@Append#1{%
+ \expandafter\def\expandafter\FV@BreakBuffer\expandafter{\FV@BreakBuffer#1}}
+\def\FV@BreakBufferStart{%
+ \FV@BreakBufferStart@i}
+\def\FV@BreakBufferStart@i#1{%
+ \ifnum\value{FV@BreakBufferDepth}>0\relax
+ \expandafter\let\csname FV@BreakBuffer\arabic{FV@BreakBufferDepth}\endcsname
+ \FV@BreakBuffer
+ \expandafter\let\csname FV@Break@Token\arabic{FV@BreakBufferDepth}\endcsname
+ \FV@Break@Token
+ \fi
+ \def\FV@BreakBuffer{}%
+ \let\FV@Break@Token=#1%
+ \stepcounter{FV@BreakBufferDepth}%
\let\FV@LastToken=\FV@Undefined
- \ifFV@pdfTeXinputenc
- \ifdefstring{\inputencodingname}{utf8}%
- {\ifx\FV@Break@Token\FV@Break@AnyToken
- \let\FV@Break@Token\FV@Break@AnyToken@UTF
- \else
- \ifx\FV@Break@Token\FV@Break@BeforeAfterToken
- \let\FV@Break@Token\FV@Break@BeforeAfterToken@UTF
- \fi
- \fi}%
- {}%
+ \FV@Break@Scan}
+\newbool{FV@UserMacroBreaks}
+\def\FV@BreakBufferStop{%
+ \FV@BreakBufferStop@i}
+\def\FV@BreakBufferStop@i#1{%
+ \addtocounter{FV@BreakBufferDepth}{-1}%
+ \let\FV@LastToken=\FV@Undefined
+ \ifnum\value{FV@BreakBufferDepth}<0\relax
+ \PackageError{fvextra}%
+ {Line break insertion error (extra \string\FancyVerbBreakStop?)}%
+ {Line break insertion error (extra \string\FancyVerbBreakStop?)}%
+ \def\FV@BreakBuffer{}%
\fi
- \FV@Break@Scan
-}
-\def\FV@EndBreak{\FV@TmpLine}
+ \ifnum\value{FV@BreakBufferDepth}>0\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\expandafter\FV@BreakBufferStop@ii\expandafter{\FV@BreakBuffer}{#1}}%
+ {\ifbool{FV@UserMacroBreaks}%
+ {\expandafter\let\expandafter\FV@BreakBuffer\expandafter\FV@Undefined\FV@BreakBuffer}%
+ {}}}
+\def\FV@BreakBufferStop@ii#1#2{%
+ \ifstrempty{#2}%
+ {\FV@BreakBufferStop@iii{#1}}%
+ {\expandafter\FV@BreakBufferStop@iii\expandafter{#2{#1}}}}
+\def\FV@BreakBufferStop@iii#1{%
+ \expandafter\let\expandafter\FV@BreakBufferUpLevel
+ \csname FV@BreakBuffer\arabic{FV@BreakBufferDepth}\endcsname
+ \expandafter\def\expandafter\FV@BreakBuffer\expandafter{\FV@BreakBufferUpLevel#1}%
+ \expandafter\let\expandafter\FV@Break@Token
+ \csname FV@Break@Token\arabic{FV@BreakBufferDepth}\endcsname
+ \FV@Break@Scan}
+\def\FV@InsertBreaks#1#2{%
+ \ifx\FancyVerbBreakStart\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {#1{#2}}%
+ {\ifFV@pdfTeXinputenc
+ \ifdefstring{\inputencodingname}{utf8}%
+ {\ifx\FV@Break@DefaultToken\FV@Break@AnyToken
+ \let\FV@Break@DefaultToken\FV@Break@AnyToken@UTF
+ \else
+ \ifx\FV@Break@DefaultToken\FV@Break@BeforeAfterToken
+ \let\FV@Break@DefaultToken\FV@Break@BeforeAfterToken@UTF
+ \fi
+ \fi}%
+ {}%
+ \fi
+ \setcounter{FV@BreakBufferDepth}{0}%
+ \boolfalse{FV@UserMacroBreaks}%
+ \FancyVerbBreakStart#2\FancyVerbBreakStop
+ \setcounter{FV@BreakBufferDepth}{0}%
+ \booltrue{FV@UserMacroBreaks}%
+ \expandafter\FV@InsertBreaks@i\expandafter{\FV@BreakBuffer}{#1}}}
+\def\FV@InsertBreaks@i#1#2{%
+ \let\FV@BreakBuffer\FV@Undefined
+ #2{#1}}
+\def\FV@Break{%
+ \FV@BreakBufferStart{\FV@Break@DefaultToken}}
+\def\FV@EndBreak{%
+ \FV@BreakBufferStop{}}
\begingroup
-\catcode`\$=3%
+\catcode`\$=3
\gdef\FV@Break@Scan{%
- \@ifnextchar\FV@EndBreak%
+ \@ifnextchar\FancyVerbBreakStart%
{}%
- {\ifx\@let@token$\relax
+ {\ifx\@let@token\FancyVerbBreakStop
+ \let\FV@Break@Next\relax
+ \else\ifx\@let@token\FV@BreakBufferStart
+ \let\FV@Break@Next\relax
+ \else\ifx\@let@token\FV@BreakBufferStop
+ \let\FV@Break@Next\relax
+ \else\ifx\@let@token$
\let\FV@Break@Next\FV@Break@Math
+ \else\ifx\@let@token\bgroup
+ \let\FV@Break@Next\FV@Break@Group
\else
- \ifx\@let@token\bgroup\relax
- \let\FV@Break@Next\FV@Break@Group
- \else
- \let\FV@Break@Next\FV@Break@Token
- \fi
- \fi
- \FV@Break@Next}%
-}
+ \let\FV@Break@Next\FV@Break@Token
+ \fi\fi\fi\fi\fi
+ \FV@Break@Next}}
\endgroup
\begingroup
\catcode`\$=3%
\gdef\FV@Break@Math$#1${%
- \g@addto@macro{\FV@TmpLine}{$#1$}%
- \let\FV@LastToken=\FV@Undefined
- \FV@Break@Scan}
+ \FV@BreakBufferStart{\FV@Break@NBToken}#1\FV@BreakBufferStop{\FV@Break@MathTemplate}}
+\gdef\FV@Break@MathTemplate#1{$#1$}
\endgroup
\def\FV@Break@Group#1{%
- \g@addto@macro{\FV@TmpLine}{{#1}}%
- \ifstrempty{#1}{}{\let\FV@LastToken=\FV@Undefined}%
+ \ifstrempty{#1}%
+ {\FV@BreakBuffer@Append{{}}%
+ \FV@Break@Scan}%
+ {\ifbool{FV@breaknonspaceingroup}%
+ {\FV@BreakBufferStart{\FV@Break@DefaultToken}%
+ #1\FV@BreakBufferStop{\FV@Break@GroupTemplate}}%
+ {\FV@BreakBufferStart{\FV@Break@NBToken}%
+ #1\FV@BreakBufferStop{\FV@Break@GroupTemplate}}}}
+\def\FV@Break@GroupTemplate#1{{#1}}
+\def\FV@Break@NBToken#1{%
+ \FV@BreakBuffer@Append{#1}%
+ \let\FV@Break@LastToken=\FV@Undefined
\FV@Break@Scan}
\def\FV@Break@AnyToken#1{%
- \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakAnywhereBreak#1}%
+ \FV@BreakBuffer@Append{\FancyVerbBreakAnywhereBreak#1}%
\FV@Break@Scan}
\def\FV@Break@BeforeAfterToken#1{%
\ifcsname FV@BreakBefore@Token\detokenize{#1}\endcsname
@@ -1915,75 +2150,72 @@
\FV@Break@Next{#1}%
}
\def\FV@Break@BeforeAfterTokenNoBreak#1{%
- \g@addto@macro{\FV@TmpLine}{#1}%
+ \FV@BreakBuffer@Append{#1}%
\let\FV@LastToken=#1%
\FV@Break@Scan}
\def\FV@Break@BeforeTokenBreak#1{%
- \ifthenelse{\boolean{FV@BreakBeforeGroup}}%
+ \ifbool{FV@breakbeforeinrun}%
+ {\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
+ \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
+ \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan
+ \def\FV@RescanToken{#1}%
+ \else
+ \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
+ \let\FV@Break@Next\FV@Break@Scan
+ \let\FV@LastToken=#1%
+ \fi}%
{\ifx#1\FV@LastToken\relax
\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
\let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan
\def\FV@RescanToken{#1}%
\else
- \g@addto@macro{\FV@TmpLine}{#1}%
+ \FV@BreakBuffer@Append{#1}%
\let\FV@Break@Next\FV@Break@Scan
\let\FV@LastToken=#1%
\fi
\else
\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
- \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakBeforeBreak}%
+ \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
\let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan
\def\FV@RescanToken{#1}%
\else
- \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakBeforeBreak#1}%
+ \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
\let\FV@Break@Next\FV@Break@Scan
\let\FV@LastToken=#1%
\fi
\fi}%
- {\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
- \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakBeforeBreak}%
- \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan
- \def\FV@RescanToken{#1}%
- \else
- \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakBeforeBreak#1}%
- \let\FV@Break@Next\FV@Break@Scan
- \let\FV@LastToken=#1%
- \fi}%
\FV@Break@Next}
\def\FV@Break@BeforeTokenBreak@AfterRescan{%
\expandafter\FV@Break@AfterTokenBreak\FV@RescanToken}
\def\FV@Break@AfterTokenBreak#1{%
\let\FV@LastToken=#1%
\@ifnextchar\FV@FVSpaceToken%
- {\g@addto@macro{\FV@TmpLine}{#1}\FV@Break@Scan}%
- {\ifthenelse{\boolean{FV@BreakAfterGroup}}%
+ {\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
- \g@addto@macro{\FV@TmpLine}{#1}%
+ \FV@BreakBuffer@Append{#1}%
\let\FV@Break@Next\FV@Break@Scan
\else
- \ifx\@let@token\bgroup\relax
- \g@addto@macro{\FV@TmpLine}{#1}%
+ \expandafter\ifx\csname @let@token\endcsname\bgroup\relax
+ \FV@BreakBuffer@Append{#1}%
\let\FV@Break@Next\FV@Break@AfterTokenBreak@Group
\else
- \g@addto@macro{\FV@TmpLine}{#1\FancyVerbBreakAfterBreak}%
+ \FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}%
\let\FV@Break@Next\FV@Break@Scan
\fi
\fi}%
- {\g@addto@macro{\FV@TmpLine}{#1\FancyVerbBreakAfterBreak}%
- \let\FV@Break@Next\FV@Break@Scan}%
\FV@Break@Next}%
}
\def\FV@Break@AfterTokenBreak@Group#1{%
- \g@addto@macro{\FV@TmpLine}{{#1}}%
\ifstrempty{#1}%
- {\let\FV@Break@Next\FV@Break@AfterTokenBreak@Group@i}%
- {\let\FV@Break@Next\FV@Break@Scan\let\FV@LastToken=\FV@Undefined}%
- \FV@Break@Next}
-\def\FV@Break@AfterTokenBreak@Group@i{%
- \@ifnextchar\FV@LastToken%
- {\FV@Break@Scan}%
- {\g@addto@macro{\FV@TmpLine}{\FancyVerbBreakAfterBreak}%
- \FV@Break@Scan}}
+ {\FV@BreakBuffer@Append{{}}%
+ \@ifnextchar\FV@LastToken%
+ {\FV@Break@Scan}%
+ {\FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
+ \FV@Break@Scan}}%
+ {\FV@Break@Group{#1}}}
\ifFV@pdfTeXinputenc
\def\FV@BreakBeforePrep@UTF{%
\ifx\FV@BreakBefore\@empty\relax
@@ -2039,16 +2271,16 @@
\expandafter\FV@BreakAfter@Process@ii\expandafter{##1}}%
\def\FV@BreakAfter@Process@ii##1{%
\ifcsname FV@BreakBefore@Token\detokenize{##1}\endcsname
- \ifthenelse{\boolean{FV@BreakBeforeGroup}}%
- {\ifthenelse{\boolean{FV@BreakAfterGroup}}%
+ \ifbool{FV@breakbeforeinrun}%
+ {\ifbool{FV@breakafterinrun}%
{}%
{\PackageError{fvextra}%
- {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}%
- {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}}}%
- {\ifthenelse{\boolean{FV@BreakAfterGroup}}%
+ {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}%
+ {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}}}%
+ {\ifbool{FV@breakafterinrun}%
{\PackageError{fvextra}%
- {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}%
- {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}}%
+ {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}%
+ {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}}%
{}}%
\fi
\g@addto@macro\FV@BreakAfter@Def{%
@@ -2072,7 +2304,7 @@
\FV@Break@Next{#1}%
}
\def\FV@Break@AnyToken@UTF@i#1{%
- \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakAnywhereBreak#1}%
+ \FV@BreakBuffer@Append{\FancyVerbBreakAnywhereBreak#1}%
\FV@Break@Scan}
\def\FV@Break@BeforeAfterToken@UTF#1{%
\ifcsname FV@U8:\detokenize{#1}\endcsname
@@ -2096,57 +2328,57 @@
\FV@Break@Next{#1}%
}
\def\FV@Break@BeforeAfterTokenNoBreak@UTF#1{%
- \g@addto@macro{\FV@TmpLine}{#1}%
+ \FV@BreakBuffer@Append{#1}%
\def\FV@LastToken{#1}%
\FV@Break@Scan}
\def\FV@Break@BeforeTokenBreak@UTF#1{%
\def\FV@CurrentToken{#1}%
- \ifthenelse{\boolean{FV@BreakBeforeGroup}}%
+ \ifbool{FV@breakbeforeinrun}%
+ {\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
+ \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
+ \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan@UTF
+ \def\FV@RescanToken{#1}%
+ \else
+ \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
+ \let\FV@Break@Next\FV@Break@Scan
+ \def\FV@LastToken{#1}%
+ \fi}%
{\ifx\FV@CurrentToken\FV@LastToken\relax
\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
\let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan@UTF
\def\FV@RescanToken{#1}%
\else
- \g@addto@macro{\FV@TmpLine}{#1}%
+ \FV@BreakBuffer@Append{#1}%
\let\FV@Break@Next\FV@Break@Scan
\def\FV@LastToken{#1}%
\fi
\else
\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
- \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakBeforeBreak}%
+ \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
\let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan@UTF
\def\FV@RescanToken{#1}%
\else
- \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakBeforeBreak#1}%
+ \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
\let\FV@Break@Next\FV@Break@Scan
\def\FV@LastToken{#1}%
\fi
\fi}%
- {\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
- \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakBeforeBreak}%
- \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan@UTF
- \def\FV@RescanToken{#1}%
- \else
- \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakBeforeBreak#1}%
- \let\FV@Break@Next\FV@Break@Scan
- \def\FV@LastToken{#1}%
- \fi}%
\FV@Break@Next}
\def\FV@Break@BeforeTokenBreak@AfterRescan@UTF{%
\expandafter\FV@Break@AfterTokenBreak@UTF\expandafter{\FV@RescanToken}}
\def\FV@Break@AfterTokenBreak@UTF#1{%
\def\FV@LastToken{#1}%
\@ifnextchar\FV@FVSpaceToken%
- {\g@addto@macro{\FV@TmpLine}{#1}\FV@Break@Scan}%
- {\ifthenelse{\boolean{FV@BreakAfterGroup}}%
- {\g@addto@macro{\FV@TmpLine}{#1}%
+ {\FV@BreakBuffer@Append{#1}\FV@Break@Scan}%
+ {\ifbool{FV@breakafterinrun}%
+ {\FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}%
+ \let\FV@Break@Next\FV@Break@Scan}%
+ {\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}%
- {\g@addto@macro{\FV@TmpLine}{#1\FancyVerbBreakAfterBreak}%
- \let\FV@Break@Next\FV@Break@Scan}%
\FV@Break@Next}%
}
\def\FV@Break@AfterTokenBreak@UTF@i#1{%
@@ -2157,30 +2389,27 @@
\def\FV@NextToken{#1}%
\ifx\FV@LastToken\FV@NextToken
\else
- \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakAfterBreak}%
+ \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
\fi
\let\FV@Break@Next\FV@Break@Scan
\fi
\FV@Break@Next#1}
\def\FV@Break@AfterTokenBreak@Group@UTF#1{%
- \g@addto@macro{\FV@TmpLine}{{#1}}%
\ifstrempty{#1}%
- {\let\FV@Break@Next\FV@Break@AfterTokenBreak@Group@UTF@i}%
- {\let\FV@Break@Next\FV@Break@Scan\let\FV@LastToken=\FV@Undefined}%
- \FV@Break@Next}
-\def\FV@Break@AfterTokenBreak@Group@UTF@i{%
- \@ifnextchar\bgroup%
- {\FV@Break@Scan}%
- {\FV@Break@AfterTokenBreak@Group@UTF@ii}}
-\def\FV@Break@AfterTokenBreak@Group@UTF@ii#1{%
+ {\FV@BreakBuffer@Append{{}}%
+ \@ifnextchar\bgroup
+ {\FV@Break@Group}%
+ {\FV@Break@AfterTokenBreak@Group@UTF@i}}%
+ {\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
- \let\FV@UTF@octets@after\FV@Break@AfterTokenBreak@Group@UTF@ii
+ \let\FV@UTF@octets@after\FV@Break@AfterTokenBreak@Group@UTF@i
\else
\def\FV@NextToken{#1}%
\ifx\FV@LastToken\FV@NextToken
\else
- \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakAfterBreak}%
+ \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
\fi
\let\FV@Break@Next\FV@Break@Scan
\fi
@@ -2204,9 +2433,9 @@
\savebox{\FV@LineBox}{%
\advance\FV@LineWidth by -\FV@BreakIndent
\hbox to \FV@BreakIndent{\hfill}%
- \ifthenelse{\boolean{FV@BreakAutoIndent}}%
+ \ifbool{FV@breakautoindent}%
{\let\FV@LineIndentChars\@empty
- \FV@GetLineIndent#1\FV@Undefined
+ \FV@GetLineIndent#1\FV@Sentinel
\savebox{\FV@LineIndentBox}{\FV@LineIndentChars}%
\hbox to \wd\FV@LineIndentBox{\hfill}%
\advance\FV@LineWidth by -\wd\FV@LineIndentBox
@@ -2225,12 +2454,11 @@
\noindent\hspace*{-\FV@BreakIndent}%
\ifdefempty{\FancyVerbBreakSymbolLeft}{}{%
\hspace*{-\FV@BreakSymbolIndentLeft}}%
- \ifthenelse{\boolean{FV@BreakAutoIndent}}%
+ \ifbool{FV@breakautoindent}%
{\hspace*{-\wd\FV@LineIndentBox}}%
{}%
\FV@BreakByTokenAnywhereHook
- \strut\FancyVerbFormatText{%
- \FancyVerbBreakStart #1\FancyVerbBreakStop}\nobreak\strut
+ \strut\FV@InsertBreaks{\FancyVerbFormatText}{#1}\nobreak\strut
\end{internallinenumbers*}
}%
\ifdefempty{\FancyVerbBreakSymbolRight}{}%
@@ -2256,6 +2484,8 @@
\setcounter{FV@TrueTabCounter}{0}%
\fi
\sbox{\FV@LineBox}{%
+ \let\FancyVerbBreakStart\relax
+ \let\FancyVerbBreakStop\relax
\FancyVerbFormatLine{%
%\FancyVerbHighlightLine %<-- Default definition using \rlap breaks breaking
{\FV@ObeyTabs{\FancyVerbFormatText{#1}}}}}%
@@ -2283,6 +2513,8 @@
\let\FV@Tab\FV@TrueTab
\fi
\else
+ \let\FancyVerbBreakStart\relax
+ \let\FancyVerbBreakStop\relax
\FV@LeftListNumber
\FV@LeftListFrame
\FancyVerbFormatLine{%
@@ -2423,9 +2655,9 @@
\def\FV@BreakAfterPrep@PygmentsHook{%
\expandafter\FV@BreakAfterPrep@Pygments\expandafter{\FV@PYG@Literal}}%
\ifx#2\relax
- \let\FV@PYG#1%
+ \let\FV@PYG=#1\relax
\else
- \let\FV@PYG#2%
+ \let\FV@PYG=#2\relax
\fi
\ifbool{FV@breakbytoken}%
{\ifbool{FV@breakbytokenanywhere}%
@@ -2439,6 +2671,7 @@
\leavevmode\hbox{\FV@PYG{##1}{##2}}}}}%
{\def#1##1##2{%
\FV@PYG{##1}{\FancyVerbBreakStart##2\FancyVerbBreakStop}}}%
+ \let\FV@PYG@Redefed=#1\relax
}
\let\FV@BreakByTokenAnywhereBreak\relax
\def\FV@DetokMacro@StripSpace#1 {#1}