diff options
author | Karl Berry <karl@freefriends.org> | 2022-12-01 20:34:06 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-12-01 20:34:06 +0000 |
commit | baa75267e750da57535514a8803619b47a2f29b0 (patch) | |
tree | b4c318dff5526db8b6a7ee4c7c232a74e8857d08 /Master/texmf-dist/tex | |
parent | f91df3afc27db0229f91c92d4bdb016453d10469 (diff) |
fvextra (1dec22)
git-svn-id: svn://tug.org/texlive/trunk@65158 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/fvextra/fvextra.sty | 581 |
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} |