diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/fvextra/fvextra.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/fvextra/fvextra.sty | 575 |
1 files changed, 532 insertions, 43 deletions
diff --git a/Master/texmf-dist/tex/latex/fvextra/fvextra.sty b/Master/texmf-dist/tex/latex/fvextra/fvextra.sty index 00e5bbed774..45388f31463 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} - [2016/06/28 v1.0 fvextra - extensions and patches for fancyvrb] + [2016/07/14 v1.1 fvextra - extensions and patches for fancyvrb] \RequirePackage{ifthen} \RequirePackage{etoolbox} \RequirePackage{fancyvrb} @@ -35,14 +35,8 @@ \@ifpackageloaded{csquotes}% {\PackageWarning{fvextra}{csquotes should be loaded after fvextra, % to avoid a warning from the lineno package}}{} -\@ifpackageloaded{minted}% - {\PackageError{fvextra}% - {fvextra must be loaded before minted}% - {fvextra must be loaded before minted}} -\@ifpackageloaded{pythontex}% - {\PackageError{fvextra}% - {fvextra must be loaded before pythontex}% - {fvextra must be loaded before pythontex}} +\def\FV@Space@ifx{\FV@Space} +\def\FV@Tab@ifx{\FV@Tab} \let\FV@FormattingPrepHook\@empty \expandafter\def\expandafter\FV@FormattingPrep\expandafter{% \expandafter\FV@FormattingPrepHook\FV@FormattingPrep} @@ -68,7 +62,27 @@ \let\]\FV@rightsquarebracket } %$ <- highlighting \def\FancyVerbSpace{\textvisiblespace} +\newcounter{FV@TrueTabGroupLevel} +\def\FV@@ObeyTabs#1{% + \let\FV@Space@Orig\FV@Space + \let\FV@Space\FV@Space@ObeyTabs + \setcounter{FV@TrueTabGroupLevel}{\the\currentgrouplevel}% + \addtocounter{FV@TrueTabGroupLevel}{1}% + \setbox\FV@TabBox=\hbox{#1}\box\FV@TabBox + \let\FV@Space\FV@Space@Orig} \def\FV@TrueTab{% + \ifnum\value{FV@TrueTabGroupLevel}=\the\currentgrouplevel\relax + \expandafter\FV@TrueTab@NoGroup + \else + \expandafter\FV@TrueTab@Group + \fi} +\let\FV@TrueTabSaveWidth\relax +\newcounter{FV@TrueTabCounter} +\def\FV@TrueTabSaveWidth@Save{% + \expandafter\xdef\csname FV@TrueTab:Width\arabic{FV@TrueTabCounter}\endcsname{% + \number\@tempdima}% + \stepcounter{FV@TrueTabCounter}} +\def\FV@TrueTab@NoGroup{% \egroup \@tempdima=\FV@ObeyTabSize sp\relax \@tempcnta=\wd\FV@TabBox @@ -76,8 +90,62 @@ \divide\@tempcnta\@tempdima \multiply\@tempdima\@tempcnta \advance\@tempdima-\wd\FV@TabBox + \FV@TrueTabSaveWidth \setbox\FV@TabBox=\hbox\bgroup \unhbox\FV@TabBox\hbox to\@tempdima{\hss\FV@TabChar}} +\newboolean{FV@ObeyTabs@Whitespace@Tab} +\def\FV@TrueTab@Group{% + \booltrue{FV@ObeyTabs@Whitespace@Tab}% + \gdef\FV@TmpWhitespace{\FV@Tab@ifx}% + \FV@ObeyTabs@ScanWhitespace} +\def\FV@Space@ObeyTabs{% + \ifnum\value{FV@TrueTabGroupLevel}=\the\currentgrouplevel\relax + \expandafter\FV@Space@ObeyTabs@NoGroup + \else + \expandafter\FV@Space@ObeyTabs@Group + \fi} +\def\FV@Space@ObeyTabs@NoGroup{\FV@Space@Orig} +\def\FV@Space@ObeyTabs@Group{% + \boolfalse{FV@ObeyTabs@Whitespace@Tab}% + \gdef\FV@TmpWhitespace{\FV@Space@ifx}% + \FV@ObeyTabs@ScanWhitespace} +\def\FV@ObeyTabs@ScanWhitespace{% + \@ifnextchar\FV@Space@ifx% + {\FV@TrueTab@CaptureWhitespace@Space}% + {\ifx\@let@token\FV@Tab@ifx + \expandafter\FV@TrueTab@CaptureWhitespace@Tab + \else + \expandafter\FV@ObeyTabs@ResolveWhitespace + \fi}} +\def\FV@TrueTab@CaptureWhitespace@Space#1{% + \g@addto@macro\FV@TmpWhitespace{\FV@Space@ifx}% + \FV@ObeyTabs@ScanWhitespace} +\def\FV@TrueTab@CaptureWhitespace@Tab#1{% + \booltrue{FV@ObeyTabs@Whitespace@Tab}% + \g@addto@macro\FV@TmpWhitespace{\FV@Tab@ifx}% + \FV@ObeyTabs@ScanWhitespace} +\newbox\FV@TabBox@Group +\def\FV@TrueTab@Group@Expand{% + \egroup + \@tempdima=\FV@ObeyTabSize sp\relax + \@tempcnta=\wd\FV@TabBox@Group + \advance\@tempcnta\FV@@ObeyTabSize\relax + \divide\@tempcnta\@tempdima + \multiply\@tempdima\@tempcnta + \advance\@tempdima-\wd\FV@TabBox@Group + \FV@TrueTabSaveWidth + \setbox\FV@TabBox@Group=\hbox\bgroup + \unhbox\FV@TabBox@Group\hbox to\@tempdima{\hss\FV@TabChar}} +\def\FV@ObeyTabs@ResolveWhitespace{% + \let\FV@Space\FV@Space@Orig + \let\FV@Tab\FV@TrueTab@Group@Expand + \expandafter\FV@ObeyTabs@ResolveWhitespace@i\expandafter{\FV@TmpWhitespace}% + \let\FV@Space\FV@Space@ObeyTabs + \let\FV@Tab\FV@TrueTab} +\def\FV@ObeyTabs@ResolveWhitespace@i#1{% + \ifbool{FV@ObeyTabs@Whitespace@Tab}% + {\setbox\FV@TabBox@Group=\hbox{#1}\box\FV@TabBox@Group}% + {#1}} \def\FancyVerbMathSpace{ } \def\FV@SetupMathSpace{% \everymath\expandafter{\the\everymath\let\FV@Space\FancyVerbMathSpace}} @@ -122,16 +190,78 @@ \kern\FV@FrameSep\relax \penalty\@M \endgroup} +\define@key{FV}{rulecolor}{% + \ifstrempty{#1}% + {\let\FancyVerbRuleColor\relax}% + {\ifstrequal{#1}{none}% + {\let\FancyVerbRuleColor\relax}% + {\def\@tempa{#1}% + \FV@KVProcess@RuleColor#1\FV@Undefined}}} +\def\FV@KVProcess@RuleColor#1#2\FV@Undefined{% + \ifx#1\color + \else + \expandafter\def\expandafter\@tempa\expandafter{% + \expandafter\color\expandafter{\@tempa}}% + \fi + \let\FancyVerbRuleColor\@tempa} +\fvset{rulecolor=none} +\define@key{FV}{fillcolor}{% + \ifstrempty{#1}% + {\let\FancyVerbFillColor\relax}% + {\ifstrequal{#1}{none}% + {\let\FancyVerbFillColor\relax}% + {\def\@tempa{#1}% + \FV@KVProcess@FillColor#1\FV@Undefined}}} +\def\FV@KVProcess@FillColor#1#2\FV@Undefined{% + \ifx#1\color + \else + \expandafter\def\expandafter\@tempa\expandafter{% + \expandafter\color\expandafter{\@tempa}}% + \fi + \let\FancyVerbFillColor\@tempa} +\fvset{fillcolor=none} \define@booleankey{FV}{linenos}% {\@nameuse{FV@Numbers@left}}{\@nameuse{FV@Numbers@none}} \define@key{FV}{tab}{\def\FancyVerbTab{#1}} +\define@key{FV}{tabcolor}% + {\ifstrempty{#1}% + {\let\FV@TabColor\relax}% + {\ifstrequal{#1}{none}% + {\let\FV@TabColor\relax}% + {\def\FV@TabColor{\textcolor{#1}}}}} +\define@booleankey{FV}{showtabs}% + {\def\FV@TabChar{\FV@TabColor{\FancyVerbTab}}}% + {\let\FV@TabChar\relax} +\fvset{tabcolor=none, showtabs=false} \define@key{FV}{space}{\def\FancyVerbSpace{#1}} +\define@key{FV}{spacecolor}% + {\ifstrempty{#1}% + {\let\FV@SpaceColor\relax}% + {\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} \define@booleankey{FV}{mathescape}% {\let\FancyVerbMathEscape\FV@MathEscape}% {\let\FancyVerbMathEscape\relax} -\FV@AddToHook\FV@CatCodesHook\FancyVerbMathEscape \def\FV@MathEscape{\catcode`\$=3\catcode`\^=7\catcode`\_=8\relax} +\FV@AddToHook\FV@CatCodesHook\FancyVerbMathEscape \fvset{mathescape=false} +\newbool{FV@CurlyQuotes} +\define@booleankey{FV}{curlyquotes}% + {\booltrue{FV@CurlyQuotes}}% + {\boolfalse{FV@CurlyQuotes}} +\def\FancyVerbCurlyQuotes{% + \ifbool{FV@CurlyQuotes}% + {\expandafter\def\expandafter\@noligs\expandafter{\@noligs + \begingroup\lccode`\~=`\`\lowercase{\endgroup\def~}{`}% + \begingroup\lccode`\~=`\'\lowercase{\endgroup\def~}{'}}}% + {}} +\g@addto@macro\FV@FormattingPrepHook{\FancyVerbCurlyQuotes} +\fvset{curlyquotes=false} \def\FancyVerbFormatLine#1{#1} \def\FancyVerbFormatText#1{#1} \def\FV@ListProcessLine@NoBreak#1{% @@ -140,11 +270,16 @@ \hbox to \linewidth{% \FV@LeftListNumber \FV@LeftListFrame - \FancyVerbFormatLine{\FV@ObeyTabs{\FancyVerbFormatText{#1}}}\hss + \FancyVerbFormatLine{% + \FancyVerbHighlightLine{% + \FV@ObeyTabs{\FancyVerbFormatText{#1}}}}\hss \FV@RightListFrame \FV@RightListNumber}% \hss}} -\def\FV@BProcessLine#1{\hbox{\FancyVerbFormatLine{\FV@ObeyTabs{\FancyVerbFormatText{#1}}}}} +\def\FV@BProcessLine#1{% + \hbox{\FancyVerbFormatLine{% + \FancyVerbHighlightLine{% + \FV@ObeyTabs{\FancyVerbFormatText{#1}}}}}} \newbool{FV@NumberFirstLine} \define@booleankey{FV}{numberfirstline}% {\booltrue{FV@NumberFirstLine}}% @@ -308,6 +443,93 @@ \fi}{}% \fi}% } +\define@key{FV}{highlightlines}{\def\FV@HighlightLinesList{#1}}% +\fvset{highlightlines=} +\define@key{FV}{highlightcolor}{\def\FancyVerbHighlightColor{#1}}% +\let\FancyVerbHighlightColor\@empty +\ifcsname definecolor\endcsname +\ifx\definecolor\relax +\else + \definecolor{FancyVerbHighlightColor}{HTML}{E0FFFF} + \fvset{highlightcolor=FancyVerbHighlightColor} +\fi\fi +\AtBeginDocument{% + \ifx\FancyVerbHighlightColor\@empty + \ifcsname definecolor\endcsname + \ifx\definecolor\relax + \else + \definecolor{FancyVerbHighlightColor}{rgb}{0,1,1} + \fvset{highlightcolor=FancyVerbHighlightColor} + \fi\fi + \fi} +\def\FancyVerbHighlightLine#1{#1} +\def\FV@HighlightLine#1{% + \@tempcnta=\c@FancyVerbLine + \@tempcntb=\c@FancyVerbLine + \ifcsname FV@HighlightLine:\number\@tempcnta\endcsname + \advance\@tempcntb\m@ne + \ifcsname FV@HighlightLine:\number\@tempcntb\endcsname + \advance\@tempcntb\tw@ + \ifcsname FV@HighlightLine:\number\@tempcntb\endcsname + \let\FV@HighlightLine@Next\FancyVerbHighlightLineMiddle + \else + \let\FV@HighlightLine@Next\FancyVerbHighlightLineLast + \fi + \else + \advance\@tempcntb\tw@ + \ifcsname FV@HighlightLine:\number\@tempcntb\endcsname + \let\FV@HighlightLine@Next\FancyVerbHighlightLineFirst + \else + \let\FV@HighlightLine@Next\FancyVerbHighlightLineSingle + \fi + \fi + \else + \let\FV@HighlightLine@Next\FancyVerbHighlightLineNormal + \fi + \FV@HighlightLine@Next{#1}% +} +\def\FancyVerbHighlightLineNormal#1{#1} +\newlength{\FV@TmpLength} +\def\FancyVerbHighlightLineFirst#1{% + \setlength{\FV@TmpLength}{\fboxsep}% + \setlength{\fboxsep}{0pt}% + \colorbox{\FancyVerbHighlightColor}{% + \setlength{\fboxsep}{\FV@TmpLength}% + \rlap{\strut#1}% + \hspace{\linewidth}}} +\let\FancyVerbHighlightLineMiddle\FancyVerbHighlightLineFirst +\let\FancyVerbHighlightLineLast\FancyVerbHighlightLineFirst +\let\FancyVerbHighlightLineSingle\FancyVerbHighlightLineFirst +\def\FV@HighlightLinesPrep{% + \ifx\FV@HighlightLinesList\@empty + \else + \let\FancyVerbHighlightLine\FV@HighlightLine + \expandafter\FV@HighlightLinesPrep@i + \fi} +\def\FV@HighlightLinesPrep@i{% + \renewcommand{\do}[1]{% + \ifstrempty{##1}{}{\FV@HighlightLinesParse##1-\FV@Undefined}}% + \expandafter\docsvlist\expandafter{\FV@HighlightLinesList}} +\def\FV@HighlightLinesParse#1-#2\FV@Undefined{% + \ifstrempty{#2}% + {\FV@HighlightLinesParse@Single{#1}}% + {\FV@HighlightLinesParse@Range{#1}#2\relax}} +\def\FV@HighlightLinesParse@Single#1{% + \expandafter\let\csname FV@HighlightLine:\detokenize{#1}\endcsname\relax} +\newcounter{FV@HighlightLinesStart} +\newcounter{FV@HighlightLinesStop} +\def\FV@HighlightLinesParse@Range#1#2-{% + \setcounter{FV@HighlightLinesStart}{#1}% + \setcounter{FV@HighlightLinesStop}{#2}% + \stepcounter{FV@HighlightLinesStop}% + \FV@HighlightLinesParse@Range@Loop} +\def\FV@HighlightLinesParse@Range@Loop{% + \ifnum\value{FV@HighlightLinesStart}<\value{FV@HighlightLinesStop}\relax + \expandafter\let\csname FV@HighlightLine:\arabic{FV@HighlightLinesStart}\endcsname\relax + \stepcounter{FV@HighlightLinesStart}% + \expandafter\FV@HighlightLinesParse@Range@Loop + \fi} +\g@addto@macro\FV@FormattingPrepHook{\FV@HighlightLinesPrep} \newboolean{FV@BreakLines} \define@booleankey{FV}{breaklines}% {\FV@BreakLinestrue @@ -440,7 +662,6 @@ {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}% {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}}% {}}% - \else \fi \g@addto@macro\FV@BreakAfter@Def{% \@namedef{FV@BreakAfter@Token\detokenize{##1}}{}}% @@ -451,7 +672,20 @@ \FV@BreakAfter@Def \fi } -\g@addto@macro\FV@FormattingPrepHook{\FV@BreakBeforePrep\FV@BreakAfterPrep} +\g@addto@macro\FV@FormattingPrepHook{% + \ifcsname pdfmatch\endcsname + \ifx\pdfmatch\relax + \else + \ifcsname inputencodingname\endcsname + \ifx\inputencodingname\relax + \else + \ifdefstring{\inputencodingname}{utf8}% + {\let\FV@BreakBeforePrep\FV@BreakBeforePrep@UTF + \let\FV@BreakAfterPrep\FV@BreakAfterPrep@UTF}% + {}% + \fi\fi + \fi\fi + \FV@BreakBeforePrep\FV@BreakAfterPrep} \define@key{FV}{breakanywheresymbolpre}{% \ifstrempty{#1}% {\def\FancyVerbBreakAnywhereSymbolPre{}}% @@ -500,12 +734,12 @@ \ifx\FV@NextChar\FV@Undefined\relax \let\FV@Next=\relax \else - \expandafter\ifx\FV@NextChar\FV@Space\relax - \g@addto@macro{\FV@LineIndentChars}{\FV@Space}% + \ifx\FV@NextChar\FV@Space@ifx\relax + \g@addto@macro{\FV@LineIndentChars}{\FV@Space@ifx}% \let\FV@Next=\FV@GetLineIndent \else - \expandafter\ifx\FV@NextChar\FV@Tab\relax - \g@addto@macro{\FV@LineIndentChars}{\FV@Tab}% + \ifx\FV@NextChar\FV@Tab@ifx\relax + \g@addto@macro{\FV@LineIndentChars}{\FV@Tab@ifx}% \let\FV@Next=\FV@GetLineIndent \else \let\FV@Next=\FV@CleanRemainingChars @@ -514,27 +748,30 @@ \fi \FV@Next } -\newcounter{FV@TrueTabCounter} -\def\FV@TrueTab@SaveWidths{% - \egroup - \@tempdima=\FV@ObeyTabSize sp\relax - \@tempcnta=\wd\FV@TabBox - \advance\@tempcnta\FV@@ObeyTabSize\relax - \divide\@tempcnta\@tempdima - \multiply\@tempdima\@tempcnta - \advance\@tempdima-\wd\FV@TabBox - \expandafter\xdef\csname FV@TrueTab@Width\arabic{FV@TrueTabCounter}\endcsname{% - \number\@tempdima}% - \stepcounter{FV@TrueTabCounter}% - \setbox\FV@TabBox=\hbox\bgroup - \unhbox\FV@TabBox\hbox to\@tempdima{\hss\FV@TabChar}} -\def\FV@TrueTab@UseWidths{% - \@tempdima=\csname FV@TrueTab@Width\arabic{FV@TrueTabCounter}\endcsname sp\relax +\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{}% \let\FV@LastToken=\FV@Undefined + \ifcsname pdfmatch\endcsname + \ifx\pdfmatch\relax + \else + \ifcsname inputencodingname\endcsname + \ifx\inputencodingname\relax + \else + \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}% + {}% + \fi\fi + \fi\fi \FV@Break@Scan } \def\FV@EndBreak{\FV@TmpLine} @@ -621,7 +858,7 @@ \expandafter\FV@Break@AfterTokenBreak\FV@RescanToken} \def\FV@Break@AfterTokenBreak#1{% \let\FV@LastToken=#1% - \@ifnextchar\FV@Space% + \@ifnextchar\FV@Space@ifx% {\g@addto@macro{\FV@TmpLine}{#1}\FV@Break@Scan}% {\ifthenelse{\boolean{FV@BreakAfterGroup}}% {\ifx\@let@token#1\relax @@ -651,6 +888,252 @@ {\FV@Break@Scan}% {\g@addto@macro{\FV@TmpLine}{\FancyVerbBreakAfterBreak}% \FV@Break@Scan}} +\ifcsname pdfmatch\endcsname +\ifx\pdfmatch\relax +\else +\def\FV@UTF@two@octets#1#2{% + \ifcsname u8:\detokenize{#1#2}\endcsname + \else + #1#2% + \fi + \FV@Break@NextNext{#1#2}} +\def\FV@UTF@three@octets#1#2#3{% + \ifcsname u8:\detokenize{#1#2#3}\endcsname + \else + #1#2#3% + \fi + \FV@Break@NextNext{#1#2#3}} +\def\FV@UTF@four@octets#1#2#3#4{% + \ifcsname u8:\detokenize{#1#2#3#4}\endcsname + \else + #1#2#3#4% + \fi + \FV@Break@NextNext{#1#2#3#4}} +\begingroup +\catcode`\~=13 +\catcode`\"=12 +\def\FV@UTFviii@loop{% + \uccode`\~\count@ + \uppercase\expandafter{\FV@UTFviii@Tmp}% + \advance\count@\@ne + \ifnum\count@<\@tempcnta + \expandafter\FV@UTFviii@loop + \fi} +\count@"C2 +\@tempcnta"E0 +\def\FV@UTFviii@Tmp{\expandafter\gdef\csname FV@U8:\string~\endcsname{% + \FV@UTF@two@octets}} +\FV@UTFviii@loop +\count@"E0 +\@tempcnta"F0 +\def\FV@UTFviii@Tmp{\expandafter\gdef\csname FV@U8:\string~\endcsname{% + \FV@UTF@three@octets}} +\FV@UTFviii@loop +\count@"F0 +\@tempcnta"F4 +\def\FV@UTFviii@Tmp{\expandafter\gdef\csname FV@U8:\string~\endcsname{% + \FV@UTF@four@octets}} +\FV@UTFviii@loop +\endgroup +\def\FV@BreakBeforePrep@UTF{% + \ifx\FV@BreakBefore\@empty\relax + \else + \gdef\FV@BreakBefore@Def{}% + \begingroup + \def\FV@BreakBefore@Process##1{% + \ifcsname FV@U8:\detokenize{##1}\endcsname + \expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{##1}\endcsname + \let\FV@Break@NextNext\FV@BreakBefore@Process@ii + \else + \ifx##1\FV@Undefined + \let\FV@Break@Next\@gobble + \else + \let\FV@Break@Next\FV@BreakBefore@Process@i + \fi + \fi + \FV@Break@Next##1% + }% + \def\FV@BreakBefore@Process@i##1{% + \expandafter\FV@BreakBefore@Process@ii\expandafter{##1}}% + \def\FV@BreakBefore@Process@ii##1{% + \g@addto@macro\FV@BreakBefore@Def{% + \@namedef{FV@BreakBefore@Token\detokenize{##1}}{}}% + \FV@BreakBefore@Process + }% + \FV@EscChars + \expandafter\FV@BreakBefore@Process\FV@BreakBefore\FV@Undefined + \endgroup + \FV@BreakBefore@Def + \fi +} +\def\FV@BreakAfterPrep@UTF{% + \ifx\FV@BreakAfter\@empty\relax + \else + \gdef\FV@BreakAfter@Def{}% + \begingroup + \def\FV@BreakAfter@Process##1{% + \ifcsname FV@U8:\detokenize{##1}\endcsname + \expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{##1}\endcsname + \let\FV@Break@NextNext\FV@BreakAfter@Process@ii + \else + \ifx##1\FV@Undefined + \let\FV@Break@Next\@gobble + \else + \let\FV@Break@Next\FV@BreakAfter@Process@i + \fi + \fi + \FV@Break@Next##1% + }% + \def\FV@BreakAfter@Process@i##1{% + \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}}% + {}% + {\PackageError{fvextra}% + {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}% + {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}}}% + {\ifthenelse{\boolean{FV@BreakAfterGroup}}% + {\PackageError{fvextra}% + {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}% + {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}}% + {}}% + \fi + \g@addto@macro\FV@BreakAfter@Def{% + \@namedef{FV@BreakAfter@Token\detokenize{##1}}{}}% + \FV@BreakAfter@Process + }% + \FV@EscChars + \expandafter\FV@BreakAfter@Process\FV@BreakAfter\FV@Undefined + \endgroup + \FV@BreakAfter@Def + \fi +} +\def\FV@Break@AnyToken@UTF#1{% + \ifcsname FV@U8:\detokenize{#1}\endcsname + \expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{#1}\endcsname + \let\FV@Break@NextNext\FV@Break@AnyToken@UTF@i + \else + \let\FV@Break@Next\FV@Break@AnyToken@UTF@i + \fi + \FV@Break@Next{#1}% +} +\def\FV@Break@AnyToken@UTF@i#1{% + \g@addto@macro{\FV@TmpLine}{\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 + \let\FV@Break@NextNext\FV@Break@BeforeAfterToken@UTF@i + \else + \let\FV@Break@Next\FV@Break@BeforeAfterToken@UTF@i + \fi + \FV@Break@Next{#1}% +} +\def\FV@Break@BeforeAfterToken@UTF@i#1{% + \ifcsname FV@BreakBefore@Token\detokenize{#1}\endcsname + \let\FV@Break@Next\FV@Break@BeforeTokenBreak@UTF + \else + \ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname + \let\FV@Break@Next\FV@Break@AfterTokenBreak@UTF + \else + \let\FV@Break@Next\FV@Break@BeforeAfterTokenNoBreak@UTF + \fi + \fi + \FV@Break@Next{#1}% +} +\def\FV@Break@BeforeAfterTokenNoBreak@UTF#1{% + \g@addto@macro{\FV@TmpLine}{#1}% + \def\FV@LastToken{#1}% + \FV@Break@Scan} +\def\FV@Break@BeforeTokenBreak@UTF#1{% + \def\FV@CurrentToken{#1}% + \ifthenelse{\boolean{FV@BreakBeforeGroup}}% + {\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}% + \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}% + \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 + \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@Space@ifx% + {\g@addto@macro{\FV@TmpLine}{#1}\FV@Break@Scan}% + {\ifthenelse{\boolean{FV@BreakAfterGroup}}% + {\g@addto@macro{\FV@TmpLine}{#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{% + \ifcsname FV@U8:\detokenize{#1}\endcsname + \expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{#1}\endcsname + \let\FV@Break@NextNext\FV@Break@AfterTokenBreak@UTF@i + \else + \def\FV@NextToken{#1}% + \ifx\FV@LastToken\FV@NextToken + \else + \g@addto@macro{\FV@TmpLine}{\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{% + \ifcsname FV@U8:\detokenize{#1}\endcsname + \expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{#1}\endcsname + \let\FV@Break@NextNext\FV@Break@AfterTokenBreak@Group@UTF@ii + \else + \def\FV@NextToken{#1}% + \ifx\FV@LastToken\FV@NextToken + \else + \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakAfterBreak}% + \fi + \let\FV@Break@Next\FV@Break@Scan + \fi + \FV@Break@Next#1} +\fi\fi \def\FV@makeLineNumber{% \hss \FancyVerbBreakSymbolLeftLogic{\FancyVerbBreakSymbolLeft}% @@ -710,17 +1193,20 @@ \advance\linewidth by -\FV@FrameRule \fi \ifx\FV@Tab\FV@TrueTab - \let\FV@Tab\FV@TrueTab@SaveWidths + \let\FV@TrueTabSaveWidth\FV@TrueTabSaveWidth@Save \setcounter{FV@TrueTabCounter}{0}% \fi - \sbox{\FV@LineBox}{\FancyVerbFormatLine{\FV@ObeyTabs{\FancyVerbFormatText{#1}}}}% - \ifx\FV@Tab\FV@TrueTab@SaveWidths - \let\FV@Tab\FV@TrueTab + \sbox{\FV@LineBox}{% + \FancyVerbFormatLine{% + %\FancyVerbHighlightLine %<-- Default definition using \rlap breaks breaking + {\FV@ObeyTabs{\FancyVerbFormatText{#1}}}}}% + \ifx\FV@Tab\FV@TrueTab + \let\FV@TrueTabSaveWidth\relax \fi \ifdim\wd\FV@LineBox>\linewidth \setcounter{FancyVerbLineBreakLast}{0}% \ifx\FV@Tab\FV@TrueTab - \let\FV@Tab\FV@TrueTab@UseWidths + \let\FV@Tab\FV@TrueTab@UseWidth \setcounter{FV@TrueTabCounter}{0}% \fi \FV@SaveLineBox{#1}% @@ -730,17 +1216,20 @@ \FV@SaveLineBox{#1}}% \FV@LeftListNumber \FV@LeftListFrame - \FancyVerbFormatLine{\usebox{\FV@LineBox}}% + \FancyVerbFormatLine{% + \FancyVerbHighlightLine{\usebox{\FV@LineBox}}}% \FV@RightListFrame \FV@RightListNumber - \ifx\FV@Tab\FV@TrueTab@UseWidths + \ifx\FV@Tab\FV@TrueTab@UseWidth \let\FV@Tab\FV@TrueTab \fi \else \FV@LeftListNumber \FV@LeftListFrame \FancyVerbFormatLine{% - \parbox[t]{\linewidth}{\noindent\strut\FV@ObeyTabs{\FancyVerbFormatText{#1}}\strut}}% + \FancyVerbHighlightLine{% + \parbox[t]{\linewidth}{% + \noindent\strut\FV@ObeyTabs{\FancyVerbFormatText{#1}}\strut}}}% \FV@RightListFrame \FV@RightListNumber \fi}% |