summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/fvextra
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-07-14 21:40:44 +0000
committerKarl Berry <karl@freefriends.org>2016-07-14 21:40:44 +0000
commitd3fb5eda09daee697bb9d6f9a0779c9d385ced62 (patch)
treeef665c5e31b28d47e220c5117453cb37ec536cc8 /Master/texmf-dist/tex/latex/fvextra
parentf6512b3997a8ac7dd05b2bd15a0b70be17e8cab6 (diff)
fvextra (14jul16)
git-svn-id: svn://tug.org/texlive/trunk@41697 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/fvextra')
-rw-r--r--Master/texmf-dist/tex/latex/fvextra/fvextra.sty575
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}%