3282 lines
105 KiB
TeX
3282 lines
105 KiB
TeX
%%
|
|
%% This is file `fvextra.sty',
|
|
%% generated with the docstrip utility.
|
|
%%
|
|
%% The original source files were:
|
|
%%
|
|
%% fvextra.dtx (with options: `package')
|
|
%%
|
|
%% This is a generated file.
|
|
%%
|
|
%% Copyright (C) 2016-2024 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
|
|
%% of this license or (at your option) any later version.
|
|
%% The latest version of this license is in
|
|
%% http://www.latex-project.org/lppl.txt
|
|
%% and version 1.3 or later is part of all distributions of LaTeX
|
|
%% version 2005/12/01 or later.
|
|
%%
|
|
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
|
|
\ProvidesPackage{fvextra}
|
|
[2024/11/17 v1.10.0 fvextra - extensions and patches for fancyvrb]
|
|
\RequirePackage{etoolbox}
|
|
\RequirePackage{fancyvrb}
|
|
\RequirePackage{upquote}
|
|
\AtEndPreamble{%
|
|
\ifx\encodingdefault\upquote@OTone
|
|
\ifx\ttdefault\upquote@cmtt\else\RequirePackage{textcomp}\fi
|
|
\else
|
|
\RequirePackage{textcomp}
|
|
\fi}
|
|
\RequirePackage{lineno}
|
|
\@ifpackageloaded{csquotes}%
|
|
{\PackageWarning{fvextra}{csquotes should be loaded after fvextra, %
|
|
to avoid a warning from the lineno package}}{}
|
|
\begingroup
|
|
\catcode`\ =\active%
|
|
\gdef\FV@ActiveSpaceToken{ }%
|
|
\endgroup%
|
|
\edef\FV@SpaceCatTen{{\detokenize{ }}}
|
|
\def\FV@FVSpaceToken{\FV@Space}
|
|
\def\FV@FVTabToken{\FV@Tab}
|
|
\def\FVExtraDoSpecials{%
|
|
\do\ \do\!\do\"\do\#\do\$\do\%\do\&\do\'\do\(\do\)\do\*\do\+\do\,\do\-%
|
|
\do\.\do\/\do\:\do\;\do\<\do\=\do\>\do\?\do\@\do\[\do\\\do\]\do\^\do\_%
|
|
\do\`\do\{\do\|\do\}\do\~}
|
|
\begingroup
|
|
\def\do#1{%
|
|
\expandafter\global\expandafter
|
|
\let\csname FV@Special:\expandafter\@gobble\detokenize{#1}\endcsname\relax}
|
|
\FVExtraDoSpecials
|
|
\endgroup
|
|
\begingroup
|
|
\catcode`\<=11
|
|
\catcode`\>=11
|
|
\gdef\FV@Sentinel{\FV@<Sentinel>}
|
|
\endgroup
|
|
\begingroup
|
|
\catcode`\^^M=\active%
|
|
\gdef\FV@OuterDefEOLEmpty{\outer\def^^M{}}%
|
|
\endgroup
|
|
\begingroup
|
|
\catcode`\^^M=\active%
|
|
\gdef\FV@DefEOLEmpty{\def^^M{}}%
|
|
\endgroup
|
|
\begingroup
|
|
\catcode`\^^B=\active
|
|
\gdef\FV@OuterDefSTXEmpty{\outer\def^^B{}}
|
|
\endgroup
|
|
\begingroup
|
|
\catcode`\^^C=\active
|
|
\gdef\FV@OuterDefETXEmpty{\outer\def^^C{}}
|
|
\endgroup
|
|
\newif\ifFV@pdfTeXinputenc
|
|
\FV@pdfTeXinputencfalse
|
|
\ifcsname pdfmatch\endcsname
|
|
\ifx\pdfmatch\relax
|
|
\else
|
|
\@ifpackageloaded{inputenc}%
|
|
{\ifcsname inputencodingname\endcsname
|
|
\ifx\inputencodingname\relax
|
|
\else
|
|
\FV@pdfTeXinputenctrue
|
|
\fi\fi}
|
|
{}%
|
|
\fi\fi
|
|
\ifFV@pdfTeXinputenc
|
|
\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@UTF@two@octets#1#2{%
|
|
\ifcsname u8:\detokenize{#1#2}\endcsname
|
|
\else
|
|
#1#2%
|
|
\fi
|
|
\FV@UTF@octets@after{#1#2}}
|
|
\def\FV@UTF@three@octets#1#2#3{%
|
|
\ifcsname u8:\detokenize{#1#2#3}\endcsname
|
|
\else
|
|
#1#2#3%
|
|
\fi
|
|
\FV@UTF@octets@after{#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@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` }%
|
|
\let\do\@makeother\FVExtraDoSpecials
|
|
\catcode`\ =\FV@TmpSpaceCat\relax
|
|
\catcode`\{=1
|
|
\catcode`\}=2
|
|
\@ifnextchar#1{\endgroup#2}{\endgroup#3}}
|
|
\begingroup
|
|
\catcode`\*=12
|
|
\gdef\FVExtra@ifstarVArg#1{\FVExtra@ifnextcharVArg*{\@firstoftwo{#1}}}
|
|
\endgroup
|
|
\def\FV@ReadOArgContinue#1[#2]{#1{#2}}
|
|
\newcommand{\FVExtraReadOArgBeforeVArg}[2][]{%
|
|
\FVExtra@ifnextcharVArg[%
|
|
{\FV@ReadOArgContinue{#2}}%
|
|
{\FV@ReadOArgContinue{#2}[#1]}}
|
|
\newcommand{\FVExtraReadOArgBeforeVEnv}[2][]{%
|
|
\begingroup
|
|
\catcode`\^^M=\active
|
|
\@ifnextchar[%
|
|
{\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
|
|
\ifdefstring{\inputencodingname}{utf8}%
|
|
{\let\FV@ReadVArg@Char\FV@ReadVArg@Char@UTF}%
|
|
{}%
|
|
\fi
|
|
\edef\FV@TmpSpaceCat{\the\catcode` }%
|
|
\let\do\@makeother\FVExtraDoSpecials
|
|
\catcode`\^^B=\active
|
|
\FV@OuterDefSTXEmpty
|
|
\catcode`\^^C=\active
|
|
\FV@OuterDefETXEmpty
|
|
\begingroup
|
|
\catcode`\ =\FV@TmpSpaceCat\relax
|
|
\catcode`\{=1
|
|
\catcode`\}=2
|
|
\@ifnextchar\bgroup
|
|
{\endgroup
|
|
\catcode`\{=1
|
|
\catcode`\}=2
|
|
\catcode`\ =\active
|
|
\catcode`\^^I=\active
|
|
\FV@ReadVArg@Group{#1}}%
|
|
{\endgroup
|
|
\catcode`\ =\active
|
|
\catcode`\^^I=\active
|
|
\FV@ReadVArg@Char{#1}}}
|
|
\def\FVExtraReadVArgSingleLine#1{%
|
|
\begingroup
|
|
\ifFV@pdfTeXinputenc
|
|
\ifdefstring{\inputencodingname}{utf8}%
|
|
{\let\FV@ReadVArg@Char\FV@ReadVArg@Char@UTF}%
|
|
{}%
|
|
\fi
|
|
\edef\FV@TmpSpaceCat{\the\catcode` }%
|
|
\let\do\@makeother\FVExtraDoSpecials
|
|
\catcode`\^^B=\active
|
|
\FV@OuterDefSTXEmpty
|
|
\catcode`\^^C=\active
|
|
\FV@OuterDefETXEmpty
|
|
\catcode`\^^M=\active
|
|
\FV@OuterDefEOLEmpty
|
|
\begingroup
|
|
\catcode`\ =\FV@TmpSpaceCat\relax
|
|
\catcode`\{=1
|
|
\catcode`\}=2
|
|
\@ifnextchar\bgroup
|
|
{\endgroup
|
|
\catcode`\{=1
|
|
\catcode`\}=2
|
|
\catcode`\ =\active
|
|
\catcode`\^^I=\active
|
|
\FV@ReadVArg@Group{#1}}%
|
|
{\endgroup
|
|
\catcode`\ =\active
|
|
\catcode`\^^I=\active
|
|
\FV@ReadVArg@Char{#1}}}
|
|
\def\FV@ReadVArg@Group#1#2{%
|
|
\endgroup
|
|
#1{#2}}
|
|
\def\FV@ReadVArg@Char#1#2{%
|
|
\expandafter\expandafter\expandafter
|
|
\if\expandafter\expandafter\expandafter\relax\expandafter\@gobble\detokenize{#2}\relax
|
|
\expandafter\@gobble
|
|
\else
|
|
\expandafter\@firstofone
|
|
\fi
|
|
{\PackageError{fvextra}%
|
|
{Verbatim delimiters must be single characters, not commands}%
|
|
{Try a different delimiter}}%
|
|
\def\FV@ReadVArg@Char@i##1##2#2{%
|
|
\endgroup
|
|
##1{##2}}%
|
|
\FV@ReadVArg@Char@i{#1}}%
|
|
\ifFV@pdfTeXinputenc
|
|
\def\FV@ReadVArg@Char@UTF#1#2{%
|
|
\expandafter\expandafter\expandafter
|
|
\if\expandafter\expandafter\expandafter\relax\expandafter\@gobble\detokenize{#2}\relax
|
|
\expandafter\@gobble
|
|
\else
|
|
\expandafter\@firstofone
|
|
\fi
|
|
{\PackageError{fvextra}%
|
|
{Verbatim delimiters must be single characters, not commands}%
|
|
{Try a different delimiter}}%
|
|
\ifcsname FV@U8:\detokenize{#2}\endcsname
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\def\FV@UTF@octets@after##1{\FV@ReadVArg@Char@UTF@i{#1}{##1}}%
|
|
\csname FV@U8:\detokenize{#2}\endcsname#2}%
|
|
{\FV@ReadVArg@Char@UTF@i{#1}{#2}}}
|
|
\def\FV@ReadVArg@Char@UTF@i#1#2{%
|
|
\def\FV@ReadVArg@Char@i##1##2#2{%
|
|
\endgroup
|
|
##1{##2}}%
|
|
\FV@ReadVArg@Char@i{#1}}%
|
|
\fi
|
|
\newbool{FV@vargsingleline}
|
|
\define@booleankey{FV}{vargsingleline}%
|
|
{\booltrue{FV@vargsingleline}}
|
|
{\boolfalse{FV@vargsingleline}}
|
|
\fvset{vargsingleline=false}
|
|
\def\FVExtrapdfstringdef#1#2{%
|
|
\AfterPreamble{%
|
|
\ifcsname pdfstringdef\endcsname
|
|
\ifx\pdfstringdef\relax
|
|
\else
|
|
\pdfstringdef#1{#2}%
|
|
\fi\fi}}
|
|
\def\FVExtrapdfstringdefDisableCommands#1{%
|
|
\AfterPreamble{%
|
|
\ifcsname pdfstringdefDisableCommands\endcsname
|
|
\ifx\pdfstringdefDisableCommands\relax
|
|
\else
|
|
\pdfstringdefDisableCommands{#1}%
|
|
\fi\fi}}
|
|
\long\def\FVExtraAlwaysUnexpanded#1{%
|
|
\unexpanded{\FVExtraAlwaysUnexpanded{#1}}}
|
|
\FVExtrapdfstringdefDisableCommands{%
|
|
\long\def\FVExtraAlwaysUnexpanded#1{#1}}
|
|
\newbool{FVExtraRobustCommandExpanded}
|
|
\protected\def\FVExtraRobustCommand#1#2{%
|
|
\ifx#2\FVExtraAlwaysUnexpanded
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\booltrue{FVExtraRobustCommandExpanded}\FV@RobustCommand@i{#1}}%
|
|
{\boolfalse{FVExtraRobustCommandExpanded}#1}}
|
|
\FVExtrapdfstringdefDisableCommands{%
|
|
\def\FVExtraRobustCommand{}}
|
|
\def\FV@RobustCommand@i#1#2{\expandafter#1\@gobble#2}
|
|
\def\FVExtraUnexpandedReadStarOArgMArg#1#{%
|
|
\FV@UnexpandedReadStarOArgMArg@i{#1}}
|
|
\def\FV@UnexpandedReadStarOArgMArg@i#1#2{%
|
|
\FVExtraAlwaysUnexpanded{\FVExtraUnexpandedReadStarOArgMArg#1{#2}}}
|
|
\FVExtrapdfstringdefDisableCommands{%
|
|
\makeatletter
|
|
\def\FV@UnexpandedReadStarOArgMArg@i#1#2{#2}%
|
|
\makeatother}
|
|
\def\FVExtraUseVerbUnexpandedReadStarOArgMArg#1#{%
|
|
\FV@UseVerbUnexpandedReadStarOArgMArg@i{#1}}
|
|
\def\FV@UseVerbUnexpandedReadStarOArgMArg@i#1#2{%
|
|
\FVExtraAlwaysUnexpanded{\FVExtraUseVerbUnexpandedReadStarOArgMArg#1{#2}}}
|
|
\FVExtrapdfstringdefDisableCommands{%
|
|
\makeatletter
|
|
\def\FV@UseVerbUnexpandedReadStarOArgMArg@i#1#2{%
|
|
\ifcsname FV@SVRaw@#2\endcsname
|
|
\expandafter\expandafter\expandafter\FVExtraPDFStringVerbatimDetokenize
|
|
\expandafter\expandafter\expandafter{\csname FV@SVRaw@#2\endcsname}%
|
|
\fi}%
|
|
\makeatother}
|
|
\def\FVExtraUnexpandedReadStarOArgBVArg#1#{%
|
|
\FV@UnexpandedReadStarOArgBVArg@i{#1}}
|
|
\def\FV@UnexpandedReadStarOArgBVArg@i#1#2{%
|
|
\FVExtraAlwaysUnexpanded{\FVExtraUnexpandedReadStarOArgBVArg#1{#2}}}
|
|
\FVExtrapdfstringdefDisableCommands{%
|
|
\makeatletter
|
|
\def\FV@UnexpandedReadStarOArgBVArg@i#1#2{%
|
|
\FVExtraPDFStringVerbatimDetokenize{#2}}%
|
|
\makeatother}
|
|
\def\FVExtraUnexpandedReadStarOArgBEscVArg#1#{%
|
|
\FV@UnexpandedReadStarOArgBEscVArg@i{#1}}
|
|
\def\FV@UnexpandedReadStarOArgBEscVArg@i#1#2{%
|
|
\FVExtraAlwaysUnexpanded{\FVExtraUnexpandedReadStarOArgBEscVArg#1{#2}}}
|
|
\FVExtrapdfstringdefDisableCommands{%
|
|
\makeatletter
|
|
\def\FV@UnexpandedReadStarOArgBEscVArg@i#1#2{%
|
|
\FVExtraPDFStringEscapedVerbatimDetokenize{#2}}%
|
|
\makeatother}
|
|
\def\FVExtraUnexpandedReadStarOArgMArgBVArg#1#{%
|
|
\FV@UnexpandedReadStarOArgMArgBVArg@i{#1}}
|
|
\def\FV@UnexpandedReadStarOArgMArgBVArg@i#1#2{%
|
|
\FV@UnexpandedReadStarOArgMArgBVArg@ii{#1}{#2}}
|
|
\def\FV@UnexpandedReadStarOArgMArgBVArg@ii#1#2#3#{%
|
|
\FV@UnexpandedReadStarOArgMArgBVArg@iii{#1}{#2}{#3}}
|
|
\def\FV@UnexpandedReadStarOArgMArgBVArg@iii#1#2#3#4{%
|
|
\FVExtraAlwaysUnexpanded{\FVExtraUnexpandedReadStarOArgMArgBVArg#1{#2}#3{#4}}}
|
|
\FVExtrapdfstringdefDisableCommands{%
|
|
\makeatletter
|
|
\def\FV@UnexpandedReadStarOArgMArgBVArg@iii#1#2#3#4{%
|
|
\FVExtraPDFStringVerbatimDetokenize{#4}}%
|
|
\makeatother}
|
|
\def\FVExtraPDFStringEscapeChar#1{%
|
|
\ifcsname FV@PDFStringEscapeChar@#1\endcsname
|
|
\csname FV@PDFStringEscapeChar@#1\endcsname
|
|
\else
|
|
#1%
|
|
\fi}
|
|
\begingroup
|
|
\catcode`\&=14
|
|
\catcode`\%=12&
|
|
\catcode`\(=12&
|
|
\catcode`\)=12&
|
|
\catcode`\^^J=12&
|
|
\catcode`\^^M=12&
|
|
\catcode`\^^I=12&
|
|
\catcode`\^^H=12&
|
|
\catcode`\^^L=12&
|
|
\catcode`\!=0\relax&
|
|
!catcode`!\=12!relax&
|
|
!expandafter!gdef!csname FV@PDFStringEscapeChar@\!endcsname{\\}&
|
|
!expandafter!gdef!csname FV@PDFStringEscapeChar@%!endcsname{\%}&
|
|
!expandafter!gdef!csname FV@PDFStringEscapeChar@(!endcsname{\(}&
|
|
!expandafter!gdef!csname FV@PDFStringEscapeChar@)!endcsname{\)}&
|
|
!expandafter!gdef!csname FV@PDFStringEscapeChar@^^J!endcsname{\n}&
|
|
!expandafter!gdef!csname FV@PDFStringEscapeChar@^^M!endcsname{\r}&
|
|
!expandafter!gdef!csname FV@PDFStringEscapeChar@^^I!endcsname{\t}&
|
|
!expandafter!gdef!csname FV@PDFStringEscapeChar@^^H!endcsname{\b}&
|
|
!expandafter!gdef!csname FV@PDFStringEscapeChar@^^L!endcsname{\f}&
|
|
!catcode`!\=0!relax&
|
|
\endgroup
|
|
\def\FVExtraPDFStringEscapeChars#1{%
|
|
\FV@PDFStringEscapeChars#1\FV@Sentinel}
|
|
\def\FV@PDFStringEscapeChars#1{%
|
|
\ifx#1\FV@Sentinel
|
|
\else
|
|
\FVExtraPDFStringEscapeChar{#1}%
|
|
\expandafter\FV@PDFStringEscapeChars
|
|
\fi}%
|
|
\begingroup
|
|
\catcode`\ =10
|
|
\catcode`\a=11
|
|
\catcode`\<=11
|
|
\catcode`\>=11
|
|
\catcode`\^^C=\active
|
|
\gdef\FVExtraVerbatimDetokenize#1{%
|
|
\FV@VDetok@Scan{}#1^^C \FV@<Sentinel>}
|
|
\gdef\FV@VDetok@Scan#1 #2\FV@<Sentinel>{%
|
|
\if\relax\detokenize{#2}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@VDetok@ScanEnd#1}%
|
|
{\FV@VDetok@ScanCont{#1}{#2}}}
|
|
\gdef\FV@VDetok@ScanEnd#1^^C{%
|
|
\if\relax\detokenize{#1}\relax
|
|
\expandafter\@gobble
|
|
\else
|
|
\expandafter\@firstofone
|
|
\fi
|
|
{\expandafter\FV@VDetok@ScanGroup\@gobble#1{\FV@<Sentinel>}}}
|
|
\begingroup
|
|
\catcode`\ =12%
|
|
\gdef\FV@VDetok@ScanCont#1#2{%
|
|
\if\relax\detokenize{#1}\relax%
|
|
\expandafter\@gobble%
|
|
\else%
|
|
\expandafter\@firstofone%
|
|
\fi%
|
|
{\expandafter\FV@VDetok@ScanGroup\@gobble#1{\FV@<Sentinel>}}%
|
|
%<-catcode 12 space
|
|
\FV@VDetok@Scan{}#2\FV@<Sentinel>}%
|
|
\endgroup
|
|
\gdef\FV@VDetok@ScanGroup#1#{%
|
|
\FV@VDetok@ScanToken#1\FV@Sentinel
|
|
\FV@VDetok@ScanGroup@i}
|
|
\gdef\FV@VDetok@ScanGroup@i#1{%
|
|
\if\relax\detokenize{#1}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@VDetok@ScanEmptyGroup}%
|
|
{\FV@VDetok@ScanGroup@ii{}#1\FV@<Sentinel>^^C}}
|
|
\begingroup
|
|
\catcode`\(=1
|
|
\catcode`\)=2
|
|
\catcode`\{=12
|
|
\catcode`\}=12
|
|
\gdef\FV@VDetok@ScanEmptyGroup({}\FV@VDetok@ScanGroup)
|
|
\endgroup
|
|
\begingroup
|
|
\catcode`\(=1
|
|
\catcode`\)=2
|
|
\catcode`\{=12
|
|
\catcode`\}=12
|
|
\gdef\FV@VDetok@ScanGroup@ii#1\FV@<Sentinel>#2^^C(%
|
|
\if\relax\detokenize(#2)\relax
|
|
\expandafter\@firstofone
|
|
\else
|
|
\expandafter\@gobble
|
|
\fi
|
|
({\FV@VDetok@Scan#1^^C \FV@<Sentinel>}\FV@VDetok@ScanGroup))
|
|
\endgroup
|
|
\gdef\FV@VDetok@ScanToken#1{%
|
|
\ifx\FV@Sentinel#1%
|
|
\expandafter\@gobble
|
|
\else
|
|
\expandafter\@firstofone
|
|
\fi
|
|
{\expandafter\FV@VDetok@ScanToken@i\detokenize{#1}^^C \FV@<Sentinel>}}
|
|
\gdef\FV@VDetok@ScanToken@i#1 #2\FV@<Sentinel>{%
|
|
\if\relax\detokenize{#2}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@VDetok@ScanTokenNoSpace#1}%
|
|
{\FV@VDetok@ScanTokenWithSpace{#1}}}
|
|
\gdef\FV@VDetok@ScanTokenNoSpace#1^^C{#1\FV@VDetok@ScanToken}
|
|
\gdef\FV@VDetok@ScanTokenWithSpace#1{%
|
|
\if\relax\detokenize{#1}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@VDetok@ScanTokenActiveSpace}%
|
|
{\FV@VDetok@ScanTokenWithSpace@i#1\FV@<Sentinel>}}
|
|
\begingroup
|
|
\catcode`\ =12%
|
|
\gdef\FV@VDetok@ScanTokenActiveSpace{ \FV@VDetok@ScanToken}%
|
|
\endgroup
|
|
\gdef\FV@VDetok@ScanTokenWithSpace@i#1#2\FV@<Sentinel>{%
|
|
\if\relax\detokenize{#2}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@VDetok@ScanTokenEscSpace{#1}}%
|
|
{\FV@VDetok@ScanTokenCW{#1#2}}}
|
|
\begingroup
|
|
\catcode`\ =12%
|
|
\gdef\FV@VDetok@ScanTokenEscSpace#1{#1 \FV@VDetok@ScanToken}%
|
|
\endgroup
|
|
\begingroup
|
|
\catcode`\ =12%
|
|
\gdef\FV@VDetok@ScanTokenCW#1#2{%
|
|
\ifcat\noexpand#2a%
|
|
\expandafter\@firstoftwo%
|
|
\else%
|
|
\expandafter\@secondoftwo%
|
|
\fi%
|
|
{#1 \FV@VDetok@ScanToken#2}%
|
|
{#1\FV@VDetok@ScanToken#2}}%
|
|
\endgroup
|
|
\gdef\FVExtraPDFStringVerbatimDetokenize#1{%
|
|
\FV@PDFStrVDetok@Scan{}#1^^C \FV@<Sentinel>}
|
|
\gdef\FV@PDFStrVDetok@Scan#1 #2\FV@<Sentinel>{%
|
|
\if\relax\detokenize{#2}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@PDFStrVDetok@ScanEnd#1}%
|
|
{\FV@PDFStrVDetok@ScanCont{#1}{#2}}}
|
|
\gdef\FV@PDFStrVDetok@ScanEnd#1^^C{%
|
|
\if\relax\detokenize{#1}\relax
|
|
\expandafter\@gobble
|
|
\else
|
|
\expandafter\@firstofone
|
|
\fi
|
|
{\expandafter\FV@PDFStrVDetok@ScanGroup\@gobble#1{\FV@<Sentinel>}}}
|
|
\begingroup
|
|
\catcode`\ =12%
|
|
\gdef\FV@PDFStrVDetok@ScanCont#1#2{%
|
|
\if\relax\detokenize{#1}\relax%
|
|
\expandafter\@gobble%
|
|
\else%
|
|
\expandafter\@firstofone%
|
|
\fi%
|
|
{\expandafter\FV@PDFStrVDetok@ScanGroup\@gobble#1{\FV@<Sentinel>}}%
|
|
%<-catcode 12 space
|
|
\FV@PDFStrVDetok@Scan{}#2\FV@<Sentinel>}%
|
|
\endgroup
|
|
\gdef\FV@PDFStrVDetok@ScanGroup#1#{%
|
|
\FV@PDFStrVDetok@ScanToken#1\FV@Sentinel
|
|
\FV@PDFStrVDetok@ScanGroup@i}
|
|
\gdef\FV@PDFStrVDetok@ScanGroup@i#1{%
|
|
\if\relax\detokenize{#1}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@PDFStrVDetok@ScanEmptyGroup}%
|
|
{\FV@PDFStrVDetok@ScanGroup@ii{}#1\FV@<Sentinel>^^C}}
|
|
\begingroup
|
|
\catcode`\(=1
|
|
\catcode`\)=2
|
|
\catcode`\{=12
|
|
\catcode`\}=12
|
|
\gdef\FV@PDFStrVDetok@ScanEmptyGroup({}\FV@PDFStrVDetok@ScanGroup)
|
|
\endgroup
|
|
\begingroup
|
|
\catcode`\(=1
|
|
\catcode`\)=2
|
|
\catcode`\{=12
|
|
\catcode`\}=12
|
|
\gdef\FV@PDFStrVDetok@ScanGroup@ii#1\FV@<Sentinel>#2^^C(%
|
|
\if\relax\detokenize(#2)\relax
|
|
\expandafter\@firstofone
|
|
\else
|
|
\expandafter\@gobble
|
|
\fi
|
|
({\FV@PDFStrVDetok@Scan#1^^C \FV@<Sentinel>}\FV@PDFStrVDetok@ScanGroup))
|
|
\endgroup
|
|
\gdef\FV@PDFStrVDetok@ScanToken#1{%
|
|
\ifx\FV@Sentinel#1%
|
|
\expandafter\@gobble
|
|
\else
|
|
\expandafter\@firstofone
|
|
\fi
|
|
{\expandafter\FV@PDFStrVDetok@ScanToken@i\detokenize{#1}^^C \FV@<Sentinel>}}
|
|
\gdef\FV@PDFStrVDetok@ScanToken@i#1 #2\FV@<Sentinel>{%
|
|
\if\relax\detokenize{#2}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@PDFStrVDetok@ScanTokenNoSpace#1}%
|
|
{\FV@PDFStrVDetok@ScanTokenWithSpace{#1}}}
|
|
\gdef\FV@PDFStrVDetok@ScanTokenNoSpace#1^^C{%
|
|
\FVExtraPDFStringEscapeChars{#1}\FV@PDFStrVDetok@ScanToken}
|
|
\gdef\FV@PDFStrVDetok@ScanTokenWithSpace#1{%
|
|
\if\relax\detokenize{#1}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@PDFStrVDetok@ScanTokenActiveSpace}%
|
|
{\FV@PDFStrVDetok@ScanTokenWithSpace@i#1\FV@<Sentinel>}}
|
|
\begingroup
|
|
\catcode`\!=0\relax
|
|
\catcode`\\=12!relax
|
|
!gdef!FV@PDFStrVDetok@ScanTokenActiveSpace{\040!FV@PDFStrVDetok@ScanToken}%
|
|
!catcode`!\=0!relax
|
|
\endgroup
|
|
\gdef\FV@PDFStrVDetok@ScanTokenWithSpace@i#1#2\FV@<Sentinel>{%
|
|
\if\relax\detokenize{#2}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@PDFStrVDetok@ScanTokenEscSpace{#1}}%
|
|
{\FV@PDFStrVDetok@ScanTokenCW{#1#2}}}
|
|
\begingroup
|
|
\catcode`\!=0\relax
|
|
\catcode`\\=12!relax
|
|
!gdef!FV@PDFStrVDetok@ScanTokenEscSpace#1{%
|
|
!FVExtraPDFStringEscapeChar{#1}\040!FV@PDFStrVDetok@ScanToken}%
|
|
!catcode`!\=0!relax
|
|
\endgroup
|
|
\begingroup
|
|
\catcode`\ =12%
|
|
\gdef\FV@PDFStrVDetok@ScanTokenCW#1#2{%
|
|
\ifcat\noexpand#2a%
|
|
\expandafter\@firstoftwo%
|
|
\else%
|
|
\expandafter\@secondoftwo%
|
|
\fi%
|
|
{\FVExtraPDFStringEscapeChars{#1} \FV@PDFStrVDetok@ScanToken#2}%
|
|
{\FVExtraPDFStringEscapeChars{#1}\FV@PDFStrVDetok@ScanToken#2}}
|
|
\endgroup
|
|
\gdef\FVExtraEscapedVerbatimDetokenize#1{%
|
|
\FV@EscVDetok@Scan{}#1^^C \FV@<Sentinel>}
|
|
\gdef\FV@EscVDetok@Scan#1 #2\FV@<Sentinel>{%
|
|
\if\relax\detokenize{#2}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@EscVDetok@ScanEnd#1}%
|
|
{\FV@EscVDetok@ScanCont{#1}{#2}}}
|
|
\gdef\FV@EscVDetok@ScanEnd#1^^C{%
|
|
\if\relax\detokenize{#1}\relax
|
|
\expandafter\@gobble
|
|
\else
|
|
\expandafter\@firstofone
|
|
\fi
|
|
{\expandafter\FV@EscVDetok@ScanGroup\@gobble#1{\FV@<Sentinel>}}}
|
|
\begingroup
|
|
\catcode`\ =12%
|
|
\gdef\FV@EscVDetok@ScanCont#1#2{%
|
|
\if\relax\detokenize{#1}\relax%
|
|
\expandafter\@gobble%
|
|
\else%
|
|
\expandafter\@firstofone%
|
|
\fi%
|
|
{\expandafter\FV@EscVDetok@ScanGroup\@gobble#1{\FV@<Sentinel>}}%
|
|
%<-catcode 12 space
|
|
\FV@EscVDetok@Scan{}#2\FV@<Sentinel>}%
|
|
\endgroup
|
|
\gdef\FV@EscVDetok@ScanGroup#1#{%
|
|
\FV@EscVDetok@ScanToken#1\FV@Sentinel
|
|
\FV@EscVDetok@ScanGroup@i}
|
|
\gdef\FV@EscVDetok@ScanGroup@i#1{%
|
|
\if\relax\detokenize{#1}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@EscVDetok@ScanEmptyGroup}%
|
|
{\FV@EscVDetok@ScanGroup@ii{}#1\FV@<Sentinel>^^C}}
|
|
\begingroup
|
|
\catcode`\(=1
|
|
\catcode`\)=2
|
|
\catcode`\{=12
|
|
\catcode`\}=12
|
|
\gdef\FV@EscVDetok@ScanEmptyGroup({}\FV@EscVDetok@ScanGroup)
|
|
\endgroup
|
|
\begingroup
|
|
\catcode`\(=1
|
|
\catcode`\)=2
|
|
\catcode`\{=12
|
|
\catcode`\}=12
|
|
\gdef\FV@EscVDetok@ScanGroup@ii#1\FV@<Sentinel>#2^^C(%
|
|
\if\relax\detokenize(#2)\relax
|
|
\expandafter\@firstofone
|
|
\else
|
|
\expandafter\@gobble
|
|
\fi
|
|
({\FV@EscVDetok@Scan#1^^C \FV@<Sentinel>}\FV@EscVDetok@ScanGroup))
|
|
\endgroup
|
|
\gdef\FV@EscVDetok@ScanToken#1{%
|
|
\ifx\FV@Sentinel#1%
|
|
\expandafter\@gobble
|
|
\else
|
|
\expandafter\@firstofone
|
|
\fi
|
|
{\expandafter\FV@EscVDetok@ScanToken@i\detokenize{#1}^^C \FV@<Sentinel>}}
|
|
\gdef\FV@EscVDetok@ScanToken@i#1 #2\FV@<Sentinel>{%
|
|
\if\relax\detokenize{#2}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@EscVDetok@ScanTokenNoSpace#1}%
|
|
{\FV@EscVDetok@ScanTokenWithSpace{#1}}}
|
|
\gdef\FV@EscVDetok@ScanTokenNoSpace#1#2^^C{%
|
|
\if\relax\detokenize{#2}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{#1\FV@EscVDetok@ScanToken}%
|
|
{#2\FV@EscVDetok@ScanToken}}
|
|
\gdef\FV@REscVDetok@ScanTokenNoSpace#1#2^^C{%
|
|
\if\relax\detokenize{#2}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{#1\FV@EscVDetok@ScanToken}%
|
|
{\ifcsname FV@Special:\detokenize{#2}\endcsname#2\else\noexpand\FV@<InvalidEscape>\fi
|
|
\FV@EscVDetok@ScanToken}}
|
|
\gdef\FV@EscVDetok@ScanTokenWithSpace#1{%
|
|
\if\relax\detokenize{#1}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@EscVDetok@ScanTokenActiveSpace}%
|
|
{\FV@EscVDetok@ScanTokenWithSpace@i#1\FV@<Sentinel>}}
|
|
\begingroup
|
|
\catcode`\ =12%
|
|
\gdef\FV@EscVDetok@ScanTokenActiveSpace{ \FV@EscVDetok@ScanToken}%
|
|
\endgroup
|
|
\gdef\FV@EscVDetok@ScanTokenWithSpace@i#1#2\FV@<Sentinel>{%
|
|
\if\relax\detokenize{#2}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@EscVDetok@ScanTokenEscSpace{#1}}%
|
|
{\FV@EscVDetok@ScanTokenCW{#1}{#2}}}
|
|
\gdef\FV@REscVDetok@ScanTokenWithSpace@i#1#2\FV@<Sentinel>{%
|
|
\if\relax\detokenize{#2}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@EscVDetok@ScanTokenEscSpace{#1}}%
|
|
{\noexpand\FV@<InvalidEscape>\FV@EscVDetok@ScanToken}}
|
|
\begingroup
|
|
\catcode`\ =12%
|
|
\gdef\FV@EscVDetok@ScanTokenEscSpace#1{ \FV@EscVDetok@ScanToken}%
|
|
\endgroup
|
|
\begingroup
|
|
\catcode`\ =12%
|
|
\gdef\FV@EscVDetok@ScanTokenCW#1#2#3{%
|
|
\ifcat\noexpand#2a%
|
|
\expandafter\@firstoftwo%
|
|
\else%
|
|
\expandafter\@secondoftwo%
|
|
\fi%
|
|
{#2 \FV@EscVDetok@ScanToken#3}%
|
|
{#2\FV@EscVDetok@ScanToken#3}}
|
|
\endgroup
|
|
\gdef\FVExtraPDFStringEscapedVerbatimDetokenize#1{%
|
|
\FV@PDFStrEscVDetok@Scan{}#1^^C \FV@<Sentinel>}
|
|
\gdef\FV@PDFStrEscVDetok@Scan#1 #2\FV@<Sentinel>{%
|
|
\if\relax\detokenize{#2}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@PDFStrEscVDetok@ScanEnd#1}%
|
|
{\FV@PDFStrEscVDetok@ScanCont{#1}{#2}}}
|
|
\gdef\FV@PDFStrEscVDetok@ScanEnd#1^^C{%
|
|
\if\relax\detokenize{#1}\relax
|
|
\expandafter\@gobble
|
|
\else
|
|
\expandafter\@firstofone
|
|
\fi
|
|
{\expandafter\FV@PDFStrEscVDetok@ScanGroup\@gobble#1{\FV@<Sentinel>}}}
|
|
\begingroup
|
|
\catcode`\!=0\relax
|
|
\catcode`\\=12!relax
|
|
!gdef!FV@PDFStrEscVDetok@ScanCont#1#2{%
|
|
!if!relax!detokenize{#1}!relax
|
|
!expandafter!@gobble
|
|
!else
|
|
!expandafter!@firstofone
|
|
!fi
|
|
{!expandafter!FV@PDFStrEscVDetok@ScanGroup!@gobble#1{!FV@<Sentinel>}}%
|
|
\040%<-space
|
|
!FV@PDFStrEscVDetok@Scan{}#2!FV@<Sentinel>}%
|
|
!catcode`!\=0!relax
|
|
\endgroup
|
|
\gdef\FV@PDFStrEscVDetok@ScanGroup#1#{%
|
|
\FV@PDFStrEscVDetok@ScanToken#1\FV@Sentinel
|
|
\FV@PDFStrEscVDetok@ScanGroup@i}
|
|
\gdef\FV@PDFStrEscVDetok@ScanGroup@i#1{%
|
|
\if\relax\detokenize{#1}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@PDFStrEscVDetok@ScanEmptyGroup}%
|
|
{\FV@PDFStrEscVDetok@ScanGroup@ii{}#1\FV@<Sentinel>^^C}}
|
|
\begingroup
|
|
\catcode`\(=1
|
|
\catcode`\)=2
|
|
\catcode`\{=12
|
|
\catcode`\}=12
|
|
\gdef\FV@PDFStrEscVDetok@ScanEmptyGroup({}\FV@PDFStrEscVDetok@ScanGroup)
|
|
\endgroup
|
|
\begingroup
|
|
\catcode`\(=1
|
|
\catcode`\)=2
|
|
\catcode`\{=12
|
|
\catcode`\}=12
|
|
\gdef\FV@PDFStrEscVDetok@ScanGroup@ii#1\FV@<Sentinel>#2^^C(%
|
|
\if\relax\detokenize(#2)\relax
|
|
\expandafter\@firstofone
|
|
\else
|
|
\expandafter\@gobble
|
|
\fi
|
|
({\FV@PDFStrEscVDetok@Scan#1^^C \FV@<Sentinel>}\FV@PDFStrEscVDetok@ScanGroup))
|
|
\endgroup
|
|
\gdef\FV@PDFStrEscVDetok@ScanToken#1{%
|
|
\ifx\FV@Sentinel#1%
|
|
\expandafter\@gobble
|
|
\else
|
|
\expandafter\@firstofone
|
|
\fi
|
|
{\expandafter\FV@PDFStrEscVDetok@ScanToken@i\detokenize{#1}^^C \FV@<Sentinel>}}
|
|
\gdef\FV@PDFStrEscVDetok@ScanToken@i#1 #2\FV@<Sentinel>{%
|
|
\if\relax\detokenize{#2}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@PDFStrEscVDetok@ScanTokenNoSpace#1}%
|
|
{\FV@PDFStrEscVDetok@ScanTokenWithSpace{#1}}}
|
|
\gdef\FV@PDFStrEscVDetok@ScanTokenNoSpace#1#2^^C{%
|
|
\if\relax\detokenize{#2}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FVExtraPDFStringEscapeChar{#1}\FV@PDFStrEscVDetok@ScanToken}%
|
|
{\FVExtraPDFStringEscapeChar{#2}\FV@PDFStrEscVDetok@ScanToken}}
|
|
\gdef\FV@PDFStrEscVDetok@ScanTokenWithSpace#1{%
|
|
\if\relax\detokenize{#1}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@PDFStrEscVDetok@ScanTokenActiveSpace}%
|
|
{\FV@PDFStrEscVDetok@ScanTokenWithSpace@i#1\FV@<Sentinel>}}
|
|
\begingroup
|
|
\catcode`\!=0\relax
|
|
\catcode`\\=12!relax
|
|
!gdef!FV@PDFStrEscVDetok@ScanTokenActiveSpace{\040!FV@PDFStrEscVDetok@ScanToken}%
|
|
!catcode`!\=0!relax
|
|
\endgroup
|
|
\gdef\FV@PDFStrEscVDetok@ScanTokenWithSpace@i#1#2\FV@<Sentinel>{%
|
|
\if\relax\detokenize{#2}\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@PDFStrEscVDetok@ScanTokenEscSpace{#1}}%
|
|
{\FV@PDFStrEscVDetok@ScanTokenCW{#1}{#2}}}
|
|
\begingroup
|
|
\catcode`\!=0\relax
|
|
\catcode`\\=12!relax
|
|
!gdef!FV@PDFStrEscVDetok@ScanTokenEscSpace#1{\040!FV@PDFStrEscVDetok@ScanToken}
|
|
!catcode`!\=0!relax
|
|
\endgroup
|
|
\begingroup
|
|
\catcode`\ =12%
|
|
\gdef\FV@PDFStrEscVDetok@ScanTokenCW#1#2#3{%
|
|
\ifcat\noexpand#2a%
|
|
\expandafter\@firstoftwo%
|
|
\else%
|
|
\expandafter\@secondoftwo%
|
|
\fi%
|
|
{\FVExtraPDFStringEscapeChars{#2} \FV@PDFStrEscVDetok@ScanToken#3}%
|
|
{\FVExtraPDFStringEscapeChars{#2}\FV@PDFStrEscVDetok@ScanToken#3}}
|
|
\endgroup
|
|
\gdef\FVExtraDetokenizeVArg#1#2{%
|
|
\begingroup
|
|
\catcode`\^^C=\active
|
|
\let^^C\FV@Sentinel
|
|
\edef\FV@Tmp{\FVExtraVerbatimDetokenize{#2}}%
|
|
\expandafter\FV@DetokenizeVArg@i\expandafter{\FV@Tmp}{#1}}
|
|
\gdef\FV@DetokenizeVArg@i#1#2{%
|
|
\endgroup
|
|
#2{#1}}
|
|
\gdef\FVExtraDetokenizeEscVArg#1#2{%
|
|
\begingroup
|
|
\catcode`\^^C=\active
|
|
\let^^C\FV@Sentinel
|
|
\edef\FV@Tmp{\FVExtraEscapedVerbatimDetokenize{#2}}%
|
|
\expandafter\FV@DetokenizeVArg@i\expandafter{\FV@Tmp}{#1}}
|
|
\gdef\FVExtraDetokenizeREscVArg#1#2{%
|
|
\begingroup
|
|
\catcode`\^^C=\active
|
|
\let^^C\FV@Sentinel
|
|
\let\FV@EscVDetok@ScanTokenNoSpace\FV@REscVDetok@ScanTokenNoSpace
|
|
\let\FV@EscVDetok@ScanTokenWithSpace@i\FV@REscVDetok@ScanTokenWithSpace@i
|
|
\edef\FV@Tmp{\FVExtraEscapedVerbatimDetokenize{#2}}%
|
|
\expandafter\FV@DetokenizeREscVArg@InvalidEscapeCheck\FV@Tmp\FV@<InvalidEscape>\FV@<Sentinel>
|
|
\expandafter\FV@DetokenizeVArg@i\expandafter{\FV@Tmp}{#1}}
|
|
\gdef\FV@DetokenizeREscVArg@InvalidEscapeCheck#1\FV@<InvalidEscape>#2\FV@<Sentinel>{%
|
|
\if\relax\detokenize{#2}\relax
|
|
\expandafter\@gobble
|
|
\else
|
|
\expandafter\@firstofone
|
|
\fi
|
|
{\PackageError{fvextra}%
|
|
{Invalid backslash escape; only escape ASCII symbols and punctuation}%
|
|
{Only use \@backslashchar <char> for ASCII symbols and punctuation}}}
|
|
\endgroup
|
|
\begingroup
|
|
\catcode`\^^C=\active%
|
|
\catcode`\^^M=\active%
|
|
\gdef\FV@RetokVArg@Read#1^^C^^M{%
|
|
\endgroup%
|
|
\def\FV@TmpRetoked{#1}}%
|
|
\endgroup
|
|
\begingroup
|
|
\catcode`\^^B=\active
|
|
\catcode`\^^C=\active
|
|
\gdef\FVExtraRetokenizeVArg#1#2#3{%
|
|
\begingroup
|
|
#2%
|
|
\catcode`\^^B=\active
|
|
\catcode`\^^C=\active
|
|
\catcode`\^^M=\active
|
|
\let^^B\FV@RetokVArg@Read
|
|
\let^^C\@empty
|
|
\FV@DefEOLEmpty
|
|
\scantokens{^^B#3^^C}%
|
|
\expandafter\FV@RetokenizeVArg@i\expandafter{\FV@TmpRetoked}{#1}}%
|
|
\gdef\FV@RetokenizeVArg@i#1#2{%
|
|
#2{#1}}
|
|
\endgroup
|
|
\let\FV@FormattingPrep@PreHook\@empty
|
|
\let\FV@FormattingPrep@PostHook\@empty
|
|
\expandafter\def\expandafter\FV@FormattingPrep\expandafter{%
|
|
\expandafter\FV@FormattingPrep@PreHook\FV@FormattingPrep\FV@FormattingPrep@PostHook}
|
|
\let\FV@PygmentsHook\relax
|
|
\g@addto@macro\FV@FormattingPrep@PreHook{\FV@PygmentsHook}
|
|
\edef\FV@hashchar{\string#}
|
|
\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
|
|
\let\{\@charlb
|
|
\let\}\@charrb
|
|
\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{%
|
|
\expandafter\def\expandafter\FV@InlineKeyValues\expandafter{%
|
|
\FV@InlineKeyValues#1,}}
|
|
|
|
\def\FV@UseInlineKeyValues{%
|
|
\expandafter\fvset\expandafter{\FV@InlineKeyValues}%
|
|
\FV@ApplyBreakAnywhereInlineStretch}
|
|
\newbool{FV@extra}
|
|
\define@booleankey{FV}{extra}%
|
|
{\booltrue{FV@extra}}%
|
|
{\boolfalse{FV@extra}}
|
|
\fvset{extra=true}
|
|
\def\FancyVerbFormatInline#1{#1}
|
|
\def\Verb{%
|
|
\FVExtraRobustCommand\RobustVerb\FVExtraUnexpandedReadStarOArgBVArg}
|
|
\protected\def\RobustVerb{\FV@Command{}{Verb}}
|
|
\FVExtrapdfstringdefDisableCommands{%
|
|
\def\RobustVerb{}}
|
|
\let\FVC@Verb@FV\FVC@Verb
|
|
\def\FVC@Verb{%
|
|
\begingroup
|
|
\FV@UseInlineKeyValues\FV@UseKeyValues
|
|
\ifFV@extra
|
|
\expandafter\endgroup\expandafter\FVC@Verb@Extra
|
|
\else
|
|
\expandafter\endgroup\expandafter\FVC@Verb@FV
|
|
\fi}
|
|
\def\FVC@Verb@Extra{%
|
|
\ifbool{FVExtraRobustCommandExpanded}%
|
|
{\@ifnextchar\bgroup
|
|
{\FVC@Verb@Extra@i}%
|
|
{\PackageError{fvextra}%
|
|
{\string\Verb\space delimiters must be paired curly braces in this context}%
|
|
{Use curly braces as delimiters}}}%
|
|
{\FVC@Verb@Extra@i}}
|
|
\def\FVC@Verb@Extra@i{%
|
|
\begingroup
|
|
\ifbool{FV@vargsingleline}%
|
|
{\let\FV@Reader\FVExtraReadVArgSingleLine}%
|
|
{\let\FV@Reader\FVExtraReadVArg}%
|
|
\FV@Reader{%
|
|
\FV@UseInlineKeyValues\FV@UseKeyValues\FV@FormattingPrep
|
|
\FVExtraDetokenizeVArg{%
|
|
\FVExtraRetokenizeVArg{\FVC@Verb@Extra@ii}{\FV@CatCodes}}}}
|
|
\def\FVC@Verb@Extra@ii#1{%
|
|
\ifx\FancyVerbBackgroundColor\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\ifbool{FV@breaklines}%
|
|
{\FV@InsertBreaks{\FancyVerbFormatInline}{#1}}%
|
|
{\mbox{\FancyVerbFormatInline{#1}}}}%
|
|
{\setlength{\FV@TmpLength}{\fboxsep}%
|
|
\ifx\FancyVerbBackgroundColorPadding\relax
|
|
\setlength{\fboxsep}{0pt}%
|
|
\else
|
|
\setlength{\fboxsep}{\FancyVerbBackgroundColorPadding}%
|
|
\fi
|
|
\colorbox{\FancyVerbBackgroundColor}{%
|
|
\setlength{\fboxsep}{\FV@TmpLength}%
|
|
\FancyVerbBackgroundColorVPhantom\FancyVerbFormatInline{#1}}}%
|
|
\endgroup}
|
|
\let\FVC@SaveVerb@FV\FVC@SaveVerb
|
|
\def\FVC@SaveVerb{%
|
|
\begingroup
|
|
\FV@UseInlineKeyValues\FV@UseKeyValues
|
|
\ifFV@extra
|
|
\expandafter\endgroup\expandafter\FVC@SaveVerb@Extra
|
|
\else
|
|
\expandafter\endgroup\expandafter\FVC@SaveVerb@FV
|
|
\fi}
|
|
\def\FVC@SaveVerb@Extra#1{%
|
|
\@namedef{FV@SV@#1}{}%
|
|
\@namedef{FV@SVRaw@#1}{}%
|
|
\begingroup
|
|
\ifbool{FV@vargsingleline}%
|
|
{\let\FV@Reader\FVExtraReadVArgSingleLine}%
|
|
{\let\FV@Reader\FVExtraReadVArg}%
|
|
\FV@Reader{%
|
|
\FVC@SaveVerb@Extra@i{#1}}}
|
|
\def\FVC@SaveVerb@Extra@i#1#2{%
|
|
\FV@UseInlineKeyValues\FV@UseKeyValues\FV@FormattingPrep
|
|
\FVExtraDetokenizeVArg{%
|
|
\FVExtraRetokenizeVArg{\FVC@SaveVerb@Extra@ii{#1}{#2}}{\FV@CatCodes}}{#2}}
|
|
\def\FVC@SaveVerb@Extra@ii#1#2#3{%
|
|
\global\let\FV@AfterSave\FancyVerbAfterSave
|
|
\endgroup
|
|
\@namedef{FV@SV@#1}{#3}%
|
|
\@namedef{FV@SVRaw@#1}{#2}%
|
|
\FV@AfterSave}%
|
|
\newbool{FV@retokenize}
|
|
\define@booleankey{FV}{retokenize}%
|
|
{\booltrue{FV@retokenize}}{\boolfalse{FV@retokenize}}
|
|
\def\UseVerb{%
|
|
\FVExtraRobustCommand\RobustUseVerb\FVExtraUseVerbUnexpandedReadStarOArgMArg}
|
|
\protected\def\RobustUseVerb{\FV@Command{}{UseVerb}}
|
|
\FVExtrapdfstringdefDisableCommands{%
|
|
\def\RobustUseVerb{}}
|
|
\let\FVC@UseVerb@FV\FVC@UseVerb
|
|
\def\FVC@UseVerb{%
|
|
\begingroup
|
|
\FV@UseInlineKeyValues\FV@UseKeyValues
|
|
\ifFV@extra
|
|
\expandafter\endgroup\expandafter\FVC@UseVerb@Extra
|
|
\else
|
|
\expandafter\endgroup\expandafter\FVC@UseVerb@FV
|
|
\fi}
|
|
\def\FVC@UseVerb@Extra#1{%
|
|
\@ifundefined{FV@SV@#1}%
|
|
{\FV@Error{Short verbatim text never saved to name `#1'}\FV@eha}%
|
|
{\begingroup
|
|
\FV@UseInlineKeyValues\FV@UseKeyValues\FV@FormattingPrep
|
|
\ifbool{FV@retokenize}%
|
|
{\expandafter\let\expandafter\FV@Tmp\csname FV@SVRaw@#1\endcsname
|
|
\expandafter\FV@UseVerb@Extra@Retok\expandafter{\FV@Tmp}}%
|
|
{\expandafter\let\expandafter\FV@Tmp\csname FV@SV@#1\endcsname
|
|
\expandafter\FV@UseVerb@Extra\expandafter{\FV@Tmp}}}}
|
|
\def\FV@UseVerb@Extra@Retok#1{%
|
|
\FVExtraDetokenizeVArg{%
|
|
\FVExtraRetokenizeVArg{\FV@UseVerb@Extra}{\FV@CatCodes}}{#1}}
|
|
\let\FV@UseVerb@Extra\FVC@Verb@Extra@ii
|
|
\def\EscVerb{%
|
|
\FVExtraRobustCommand\RobustEscVerb\FVExtraUnexpandedReadStarOArgBEscVArg}
|
|
\protected\def\RobustEscVerb{\FV@Command{}{EscVerb}}
|
|
\FVExtrapdfstringdefDisableCommands{%
|
|
\def\RobustEscVerb{}}
|
|
\def\FVC@EscVerb{%
|
|
\@ifnextchar\bgroup
|
|
{\FVC@EscVerb@i}%
|
|
{\PackageError{fvextra}%
|
|
{Invalid argument; argument must be delimited by paired curly braces}%
|
|
{Delimit argument with curly braces}}}
|
|
\def\FVC@EscVerb@i#1{%
|
|
\begingroup
|
|
\FV@UseInlineKeyValues\FV@UseKeyValues\FV@FormattingPrep
|
|
\FVExtraDetokenizeREscVArg{%
|
|
\FVExtraRetokenizeVArg{\FVC@EscVerb@ii}{\FV@CatCodes}}{#1}}
|
|
\let\FVC@EscVerb@ii\FVC@Verb@Extra@ii
|
|
\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}
|
|
\define@key{FV}{writefilehandle}{%
|
|
\FV@SetWrite#1\FV@Sentinel}
|
|
\def\FV@SetWrite#1#2\FV@Sentinel{%
|
|
\let\FancyVerbWriteFileHandle\relax
|
|
\if\relax\detokenize{#2}\relax
|
|
\let\FancyVerbWriteFileHandle#1\relax
|
|
\fi
|
|
\ifx\FancyVerbWriteFileHandle\relax
|
|
\PackageError{fvextra}%
|
|
{Missing or invalid file handle for write}%
|
|
{Need file handle from \string\newwrite}%
|
|
\fi}
|
|
\let\FancyVerbWriteFileHandle\relax
|
|
\define@key{FV}{writer}{%
|
|
\let\FV@Writer#1\relax}
|
|
\def\FancyVerbDefaultWriter#1{%
|
|
\immediate\write\FancyVerbWriteFileHandle{\detokenize{#1}}}
|
|
\fvset{writer=\FancyVerbDefaultWriter}
|
|
\newcounter{FancyVerbWriteLine}
|
|
\def\VerbatimWrite{%
|
|
\FV@Environment
|
|
{codes=,commandchars=none,commentchar=none,defineactive,%
|
|
gobble=0,formatcom=,firstline,lastline}%
|
|
{VerbatimWrite}}
|
|
\def\FVB@VerbatimWrite{%
|
|
\@bsphack
|
|
\begingroup
|
|
\setcounter{FancyVerbWriteLine}{0}%
|
|
\let\c@FancyVerbLine\c@FancyVerbWriteLine
|
|
\FV@UseKeyValues
|
|
\FV@DefineWhiteSpace
|
|
\def\FV@Space{\space}%
|
|
\FV@DefineTabOut
|
|
\let\FV@ProcessLine\FV@Writer
|
|
\let\FV@FontScanPrep\relax
|
|
\let\@noligs\relax
|
|
\FancyVerbDefineActive
|
|
\FancyVerbFormatCom
|
|
\FV@Scan}
|
|
\def\FVE@VerbatimWrite{%
|
|
\endgroup
|
|
\@esphack}
|
|
\def\endVerbatimWrite{\FVE@VerbatimWrite}
|
|
\define@key{FV}{afterbuffer}{%
|
|
\def\FV@afterbuffer{#1}}
|
|
\fvset{afterbuffer=}
|
|
\def\FancyVerbBufferIndex{0}
|
|
\define@key{FV}{bufferer}{%
|
|
\let\FV@Bufferer=#1\relax}
|
|
\def\FancyVerbDefaultBufferer#1{%
|
|
\expandafter\xdef\csname\FancyVerbBufferLineName\FancyVerbBufferIndex\endcsname{%
|
|
\detokenize{#1}}}
|
|
\fvset{bufferer=\FancyVerbDefaultBufferer}
|
|
\define@key{FV}{bufferlengthname}{%
|
|
\ifcsname#1\endcsname
|
|
\else
|
|
\expandafter\xdef\csname#1\endcsname{0}%
|
|
\fi
|
|
\def\FV@bufferlengthname{#1}%
|
|
\expandafter\def\expandafter\FV@bufferlengthmacro\expandafter{%
|
|
\csname#1\endcsname}}
|
|
\fvset{bufferlengthname=FancyVerbBufferLength}
|
|
\define@key{FV}{bufferlinename}{%
|
|
\def\FancyVerbBufferLineName{#1}}
|
|
\fvset{bufferlinename=FancyVerbBufferLine}
|
|
\define@key{FV}{buffername}{%
|
|
\fvset{bufferlengthname=#1length,bufferlinename=#1line}}
|
|
\newbool{FV@globalbuffer}
|
|
\define@booleankey{FV}{globalbuffer}%
|
|
{\booltrue{FV@globalbuffer}}%
|
|
{\boolfalse{FV@globalbuffer}}
|
|
\fvset{globalbuffer=false}
|
|
\newcounter{FancyVerbBufferLine}
|
|
\newbool{FV@globalbuffer@tmp}
|
|
\let\FV@oldbufferlength\relax
|
|
\let\FV@bufferlengthmacro@tmp\relax
|
|
\let\FancyVerbBufferLineName@tmp\relax
|
|
\let\FV@afterbuffer@tmp\relax
|
|
\def\VerbatimBuffer{%
|
|
\FV@Environment
|
|
{codes=,commandchars=none,commentchar=none,defineactive,%
|
|
gobble=0,formatcom=,firstline,lastline}%
|
|
{VerbatimBuffer}}
|
|
\def\FVB@VerbatimBuffer{%
|
|
\@bsphack
|
|
\begingroup
|
|
\FV@UseKeyValues
|
|
\setcounter{FancyVerbBufferLine}{\FV@bufferlengthmacro}%
|
|
\let\c@FancyVerbLine\c@FancyVerbBufferLine
|
|
\xdef\FancyVerbBufferIndex{\FV@bufferlengthmacro}%
|
|
\ifbool{FV@globalbuffer}%
|
|
{\global\booltrue{FV@globalbuffer@tmp}}%
|
|
{\global\boolfalse{FV@globalbuffer@tmp}%
|
|
\expandafter\global\expandafter\let\expandafter\FV@oldbufferlength\FV@bufferlengthmacro
|
|
\global\let\FV@bufferlengthmacro@tmp\FV@bufferlengthmacro
|
|
\global\let\FancyVerbBufferLineName@tmp\FancyVerbBufferLineName}%
|
|
\global\let\FV@afterbuffer@tmp\FV@afterbuffer
|
|
\FV@DefineWhiteSpace
|
|
\def\FV@ProcessLine{%
|
|
\xdef\FancyVerbBufferIndex{\the\numexpr\FancyVerbBufferIndex+1\relax}%
|
|
\FV@Bufferer}%
|
|
\let\FV@FontScanPrep\relax
|
|
\let\@noligs\relax
|
|
\FancyVerbDefineActive
|
|
\FancyVerbFormatCom
|
|
\FV@Scan}
|
|
\def\FVE@VerbatimBuffer{%
|
|
\expandafter\xdef\FV@bufferlengthmacro{\FancyVerbBufferIndex}%
|
|
\gdef\FancyVerbBufferIndex{0}%
|
|
\endgroup
|
|
\@esphack
|
|
\begingroup
|
|
\FV@afterbuffer@tmp
|
|
\global\let\FV@afterbuffer@tmp\relax
|
|
\endgroup
|
|
\ifbool{FV@globalbuffer@tmp}%
|
|
{}%
|
|
{\loop\unless\ifnum\FV@bufferlengthmacro@tmp=\FV@oldbufferlength\relax
|
|
\expandafter\global\expandafter\let\csname
|
|
\FancyVerbBufferLineName@tmp\FV@bufferlengthmacro@tmp
|
|
\endcsname\FV@Undefined
|
|
\expandafter\xdef\FV@bufferlengthmacro@tmp{%
|
|
\the\numexpr\FV@bufferlengthmacro@tmp-1\relax}%
|
|
\repeat
|
|
\global\let\FV@bufferlengthmacro@tmp\relax
|
|
\global\let\FancyVerbBufferLineName@tmp\relax}%
|
|
\global\let\FV@oldbufferlength\relax}
|
|
\def\endVerbatimBuffer{\FVE@VerbatimBuffer}
|
|
\define@key{FV}{insertenvname}{%
|
|
\def\FV@VerbatimInsertEnvName{#1}}
|
|
\fvset{insertenvname=Verbatim}
|
|
\def\FV@Environment@InsertBuffer#1#2{%
|
|
\def\FV@KeyValues{#1}%
|
|
\FV@GetKeyValues{\@nameuse{FVB@#2}}}
|
|
\def\FV@Scan@InsertBuffer{%
|
|
\FV@CatCodes
|
|
\xdef\FV@EnvironName{\FV@VerbatimInsertEnvName}%
|
|
\ifnum\FV@bufferlengthmacro=\z@\relax
|
|
\PackageError{fvextra}%
|
|
{Buffer length macro \expandafter\string\FV@bufferlengthmacro\space is invalid or zero}%
|
|
{}%
|
|
\let\FV@GetLine\relax
|
|
\fi
|
|
\FV@BeginScanning}%
|
|
\def\VerbatimInsertBuffer@def@FV@Line#1{%
|
|
\FVExtraRetokenizeVArg{\def\FV@Line}{}{#1}}
|
|
\def\FancyVerbGetLine@VerbatimInsertBuffer{%
|
|
\ifnum\FancyVerbBufferIndex>\FV@bufferlengthmacro\relax
|
|
\global\let\FV@EnvironName\relax
|
|
\let\next\relax
|
|
\else
|
|
\ifcsname\FancyVerbBufferLineName\FancyVerbBufferIndex\endcsname
|
|
\expandafter\let\expandafter\FV@Line@Buffer
|
|
\csname\FancyVerbBufferLineName\FancyVerbBufferIndex\endcsname
|
|
\expandafter\VerbatimInsertBuffer@def@FV@Line\expandafter{\FV@Line@Buffer}%
|
|
\def\next{\FV@PreProcessLine\FV@GetLine}%
|
|
\xdef\FancyVerbBufferIndex{\the\numexpr\FancyVerbBufferIndex+1\relax}%
|
|
\else
|
|
\def\next{%
|
|
\PackageError{fvextra}%
|
|
{Buffer with line macro named
|
|
"\FancyVerbBufferLineName\FancyVerbBufferIndex" does not exist}%
|
|
{Check bufferlinename, bufferlengthname, and globalbuffer settings}%
|
|
}%
|
|
\fi
|
|
\fi
|
|
\next}
|
|
\newcommand{\VerbatimInsertBuffer}[1][]{%
|
|
\begingroup
|
|
\let\FV@Scan\FV@Scan@InsertBuffer
|
|
\let\FV@CheckScan\relax
|
|
\let\FV@Environment\FV@Environment@InsertBuffer
|
|
\let\FancyVerbGetLine\FancyVerbGetLine@VerbatimInsertBuffer
|
|
\gdef\FancyVerbBufferIndex{1}%
|
|
\VerbatimInsertBuffer@i{#1}%
|
|
\gdef\FancyVerbBufferIndex{0}%
|
|
\endgroup
|
|
\@doendpe}
|
|
\begingroup
|
|
\catcode`\^^M=\active
|
|
\gdef\VerbatimInsertBuffer@i#1{%
|
|
\begingroup%
|
|
\fvset{#1}%
|
|
\global\let\FV@CurrentVerbatimInsertEnvName\FV@VerbatimInsertEnvName%
|
|
\endgroup%
|
|
\csname \FV@CurrentVerbatimInsertEnvName\endcsname[#1]^^M%
|
|
\csname end\FV@CurrentVerbatimInsertEnvName\endcsname%
|
|
\global\let\FV@CurrentVerbatimInsertEnvName\FV@Undefined}%
|
|
\endgroup
|
|
\newcommand{\VerbatimClearBuffer}[1][]{%
|
|
\begingroup
|
|
\def\FV@KeyValues{#1}%
|
|
\FV@UseKeyValues
|
|
\xdef\FancyVerbBufferIndex{\FV@bufferlengthmacro}%
|
|
\expandafter\xdef\FV@bufferlengthmacro{0}%
|
|
\loop\unless\ifnum\FancyVerbBufferIndex<1\relax
|
|
\expandafter\global\expandafter\let
|
|
\csname\FancyVerbBufferLineName\FancyVerbBufferIndex\endcsname
|
|
\FV@Undefined
|
|
\xdef\FancyVerbBufferIndex{\the\numexpr\FancyVerbBufferIndex-1\relax}%
|
|
\repeat
|
|
\gdef\FancyVerbBufferIndex{0}%
|
|
\endgroup}
|
|
\def\FV@Command#1#2{%
|
|
\FVExtra@ifstarVArg
|
|
{\def\FV@KeyValues{#1,showspaces,showtabs}\FV@@Command{#2}}%
|
|
{\def\FV@KeyValues{#1}\FV@@Command{#2}}}
|
|
\def\FV@@Command#1{%
|
|
\FVExtra@ifnextcharVArg[%
|
|
{\FV@GetKeyValues{\@nameuse{FVC@#1}}}%
|
|
{\@nameuse{FVC@#1}}}
|
|
\def\@CustomVerbatimCommand#1#2#3#4{%
|
|
\begingroup\fvset{#4}\endgroup
|
|
\@ifundefined{FVC@#3}%
|
|
{\FV@Error{Command `\string#3' is not a FancyVerb command.}\@eha}%
|
|
{\ifcsname Robust#3\endcsname
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\expandafter\let\expandafter\@tempa\csname #3\endcsname
|
|
\def\@tempb##1##2##3{%
|
|
\expandafter\def\expandafter\@tempc\expandafter{%
|
|
\csname Robust\expandafter\@gobble\string#2\endcsname}%
|
|
\def\@tempd####1{%
|
|
#1{#2}{##1####1##3}}%
|
|
\expandafter\@tempd\@tempc
|
|
\expandafter\protected\expandafter\def\@tempc{\FV@Command{#4}{#3}}}%
|
|
\expandafter\@tempb\@tempa}%
|
|
{#1{#2}{\FV@Command{#4}{#3}}}}}
|
|
\def\FancyVerbSpace{%
|
|
\makebox[0.5em]{%
|
|
\kern.07em
|
|
\vrule height.3ex
|
|
\hrulefill
|
|
\vrule height.3ex
|
|
\kern.07em}}
|
|
\newcounter{FV@TrueTabGroupLevel}
|
|
\def\FV@@ObeyTabs#1{%
|
|
\let\FV@Space@Orig\FV@Space
|
|
\let\FV@Space\FV@Space@ObeyTabs
|
|
\edef\FV@TmpCurrentGroupLevel{\the\currentgrouplevel}%
|
|
\setcounter{FV@TrueTabGroupLevel}{\FV@TmpCurrentGroupLevel}%
|
|
\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
|
|
\advance\@tempcnta\FV@@ObeyTabSize\relax
|
|
\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}}
|
|
\newbool{FV@ObeyTabs@Whitespace@Tab}
|
|
\def\FV@TrueTab@Group{%
|
|
\booltrue{FV@ObeyTabs@Whitespace@Tab}%
|
|
\gdef\FV@TmpWhitespace{\FV@FVTabToken}%
|
|
\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@FVSpaceToken}%
|
|
\FV@ObeyTabs@ScanWhitespace}
|
|
\def\FV@ObeyTabs@ScanWhitespace{%
|
|
\@ifnextchar\FV@FVSpaceToken%
|
|
{\FV@TrueTab@CaptureWhitespace@Space}%
|
|
{\ifx\@let@token\FV@FVTabToken
|
|
\expandafter\FV@TrueTab@CaptureWhitespace@Tab
|
|
\else
|
|
\expandafter\FV@ObeyTabs@ResolveWhitespace
|
|
\fi}}
|
|
\def\FV@TrueTab@CaptureWhitespace@Space#1{%
|
|
\g@addto@macro\FV@TmpWhitespace{\FV@FVSpaceToken}%
|
|
\FV@ObeyTabs@ScanWhitespace}
|
|
\def\FV@TrueTab@CaptureWhitespace@Tab#1{%
|
|
\booltrue{FV@ObeyTabs@Whitespace@Tab}%
|
|
\g@addto@macro\FV@TmpWhitespace{\FV@FVTabToken}%
|
|
\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}}
|
|
\g@addto@macro\FV@FormattingPrep@PreHook{\FV@SetupMathSpace}
|
|
\begingroup
|
|
\catcode`\'=\active
|
|
\catcode`\^=7
|
|
\gdef\FV@pr@m@s{%
|
|
\ifx'\@let@token
|
|
\expandafter\pr@@@s
|
|
\else
|
|
\ifx^\@let@token
|
|
\expandafter\expandafter\expandafter\pr@@@t
|
|
\else
|
|
\egroup
|
|
\fi
|
|
\fi}
|
|
\endgroup
|
|
\def\FV@SetupMathFont{%
|
|
\everymath\expandafter{\the\everymath\fontfamily{\familydefault}\selectfont}}
|
|
\g@addto@macro\FV@FormattingPrep@PreHook{\FV@SetupMathFont}
|
|
\def\FV@SetupMathLigs{%
|
|
\everymath\expandafter{%
|
|
\the\everymath
|
|
\let\pr@m@s\FV@pr@m@s
|
|
\begingroup\lccode`\~=`\'\lowercase{\endgroup\def~}{%
|
|
\ifmmode\expandafter\active@math@prime\else'\fi}%
|
|
\begingroup\lccode`\~=`\`\lowercase{\endgroup\def~}{`}%
|
|
\begingroup\lccode`\~=`\<\lowercase{\endgroup\def~}{<}%
|
|
\begingroup\lccode`\~=`\>\lowercase{\endgroup\def~}{>}%
|
|
\begingroup\lccode`\~=`\,\lowercase{\endgroup\def~}{,}%
|
|
\begingroup\lccode`\~=`\-\lowercase{\endgroup\def~}{-}%
|
|
}%
|
|
}
|
|
\g@addto@macro\FV@FormattingPrep@PreHook{\FV@SetupMathLigs}
|
|
\def\FV@BeginListFrame@Lines{%
|
|
\begingroup
|
|
\lineskip\z@skip
|
|
\FV@SingleFrameLine{\z@}%
|
|
\kern-0.5\baselineskip\relax
|
|
\baselineskip\z@skip
|
|
\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}
|
|
\newbool{FV@showspaces}
|
|
\define@booleankey{FV}{showspaces}%
|
|
{\booltrue{FV@showspaces}}%
|
|
{\boolfalse{FV@showspaces}}
|
|
\fvset{showspaces=false}
|
|
\define@key{FV}{space}{\def\FancyVerbSpace{#1}}
|
|
\define@key{FV}{spacecolor}%
|
|
{\ifstrempty{#1}%
|
|
{\let\FV@SpaceColor\relax}%
|
|
{\ifstrequal{#1}{none}%
|
|
{\let\FV@SpaceColor\relax}%
|
|
{\def\FV@SpaceColor{\textcolor{#1}}}}}
|
|
\fvset{spacecolor=none}
|
|
\define@key{FV}{spacebreak}{%
|
|
\def\FancyVerbSpaceBreak{#1}}
|
|
\fvset{spacebreak=\discretionary{}{}{}}
|
|
\newbool{FV@breakcollapsespaces}
|
|
\define@booleankey{FV}{breakcollapsespaces}%
|
|
{\booltrue{FV@breakcollapsespaces}}%
|
|
{\boolfalse{FV@breakcollapsespaces}}%
|
|
\fvset{breakcollapsespaces=true}
|
|
\def\FV@DefFVSpace{%
|
|
\ifbool{FV@showspaces}%
|
|
{\ifbool{FV@breaklines}%
|
|
{\ifcsname FV@BreakBefore@Token\FV@SpaceCatTen\endcsname
|
|
\def\FV@Space{\FV@SpaceColor{\FancyVerbSpace}}%
|
|
\else\ifcsname FV@BreakAfter@Token\FV@SpaceCatTen\endcsname
|
|
\def\FV@Space{\FV@SpaceColor{\FancyVerbSpace}}%
|
|
\else
|
|
\def\FV@Space{\FV@SpaceColor{\FancyVerbSpace}\FancyVerbSpaceBreak}%
|
|
\fi\fi}%
|
|
{\def\FV@Space{\FV@SpaceColor{\FancyVerbSpace}}}}%
|
|
{\ifbool{FV@breaklines}%
|
|
{\ifcsname FV@BreakBefore@Token\FV@SpaceCatTen\endcsname
|
|
\def\FV@Space{\mbox{\FV@SpaceCatTen}}%
|
|
\else\ifcsname FV@BreakAfter@Token\FV@SpaceCatTen\endcsname
|
|
\def\FV@Space{\mbox{\FV@SpaceCatTen}}%
|
|
\else
|
|
\ifbool{FV@breakcollapsespaces}%
|
|
{\def\FV@Space{\FV@SpaceCatTen}}%
|
|
{\def\FV@Space{\mbox{\FV@SpaceCatTen}\FancyVerbSpaceBreak}}%
|
|
\fi\fi}%
|
|
{\def\FV@Space{\FV@SpaceCatTen}}}}%
|
|
\AtEndOfPackage{%
|
|
\g@addto@macro\FV@FormattingPrep@PreHook{\FV@DefFVSpace}}
|
|
\define@booleankey{FV}{mathescape}%
|
|
{\let\FancyVerbMathEscape\FV@MathEscape}%
|
|
{\let\FancyVerbMathEscape\relax}
|
|
\def\FV@MathEscape{\catcode`\$=3\catcode`\&=4\catcode`\^=7\catcode`\_=8\relax}
|
|
\FV@AddToHook\FV@CatCodesHook\FancyVerbMathEscape
|
|
\fvset{mathescape=false}
|
|
\define@booleankey{FV}{beameroverlays}%
|
|
{\let\FancyVerbBeamerOverlays\FV@BeamerOverlays}%
|
|
{\let\FancyVerbBeamerOverlays\relax}
|
|
\def\FV@BeamerOverlays{%
|
|
\expandafter\def\expandafter\@noligs\expandafter{\@noligs
|
|
\catcode`\<=12\catcode`\>=12\relax}}
|
|
\FV@AddToHook\FV@FormattingPrep@PreHook\FancyVerbBeamerOverlays
|
|
\fvset{beameroverlays=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@FormattingPrep@PreHook{\FancyVerbCurlyQuotes}
|
|
\fvset{curlyquotes=false}
|
|
\define@key{FV}{fontencoding}%
|
|
{\ifstrempty{#1}%
|
|
{\let\FV@FontEncoding\relax}%
|
|
{\ifstrequal{#1}{none}%
|
|
{\let\FV@FontEncoding\relax}%
|
|
{\def\FV@FontEncoding{\fontencoding{#1}}}}}
|
|
\expandafter\def\expandafter\FV@SetupFont\expandafter{%
|
|
\expandafter\FV@FontEncoding\FV@SetupFont}
|
|
\fvset{fontencoding=none}
|
|
\def\FancyVerbFormatLine#1{#1}
|
|
\def\FancyVerbFormatText#1{#1}
|
|
\def\FV@ListProcessLine@NoBreak#1{%
|
|
\hbox to \hsize{%
|
|
\kern\leftmargin
|
|
\hbox to \linewidth{%
|
|
\FV@LeftListNumber
|
|
\FV@LeftListFrame
|
|
\FV@BGColor@List{%
|
|
\FancyVerbFormatLine{%
|
|
\FancyVerbHighlightLine{%
|
|
\FV@ObeyTabs{\FancyVerbFormatText{#1}}}}}\hss
|
|
\FV@RightListFrame
|
|
\FV@RightListNumber}%
|
|
\hss}}
|
|
\def\FV@BProcessLine#1{%
|
|
\hbox{\FancyVerbFormatLine{%
|
|
\ifx\FancyVerbBackgroundColor\relax
|
|
\else
|
|
\expandafter\FancyVerbBackgroundColorVPhantom
|
|
\fi
|
|
\FancyVerbHighlightLine{%
|
|
\FV@ObeyTabs{\FancyVerbFormatText{#1}}}}}}
|
|
\newbool{FV@NumberFirstLine}
|
|
\define@booleankey{FV}{numberfirstline}%
|
|
{\booltrue{FV@NumberFirstLine}}%
|
|
{\boolfalse{FV@NumberFirstLine}}
|
|
\fvset{numberfirstline=false}
|
|
\newbool{FV@StepNumberFromFirst}
|
|
\define@booleankey{FV}{stepnumberfromfirst}%
|
|
{\booltrue{FV@StepNumberFromFirst}}%
|
|
{\boolfalse{FV@StepNumberFromFirst}}
|
|
\fvset{stepnumberfromfirst=false}
|
|
\newbool{FV@StepNumberOffsetValues}
|
|
\define@booleankey{FV}{stepnumberoffsetvalues}%
|
|
{\booltrue{FV@StepNumberOffsetValues}}%
|
|
{\boolfalse{FV@StepNumberOffsetValues}}
|
|
\fvset{stepnumberoffsetvalues=false}
|
|
\def\FV@Numbers@left{%
|
|
\let\FV@RightListNumber\relax
|
|
\def\FV@LeftListNumber{%
|
|
\ifx\FancyVerbStartNum\z@
|
|
\let\FancyVerbStartNum\@ne
|
|
\fi
|
|
\ifbool{FV@StepNumberFromFirst}%
|
|
{\@tempcnta=\FV@CodeLineNo
|
|
\@tempcntb=\FancyVerbStartNum
|
|
\advance\@tempcntb\FV@StepNumber
|
|
\divide\@tempcntb\FV@StepNumber
|
|
\multiply\@tempcntb\FV@StepNumber
|
|
\advance\@tempcnta\@tempcntb
|
|
\advance\@tempcnta-\FancyVerbStartNum
|
|
\@tempcntb=\@tempcnta}%
|
|
{\ifbool{FV@StepNumberOffsetValues}%
|
|
{\@tempcnta=\FV@CodeLineNo
|
|
\@tempcntb=\FV@CodeLineNo}%
|
|
{\@tempcnta=\c@FancyVerbLine
|
|
\@tempcntb=\c@FancyVerbLine}}%
|
|
\divide\@tempcntb\FV@StepNumber
|
|
\multiply\@tempcntb\FV@StepNumber
|
|
\ifnum\@tempcnta=\@tempcntb
|
|
\if@FV@NumberBlankLines
|
|
\hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
|
|
\else
|
|
\ifx\FV@Line\empty
|
|
\else
|
|
\hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
|
|
\fi
|
|
\fi
|
|
\else
|
|
\ifbool{FV@NumberFirstLine}{%
|
|
\ifnum\FV@CodeLineNo=\FancyVerbStartNum
|
|
\hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
|
|
\fi}{}%
|
|
\fi}%
|
|
}
|
|
\def\FV@Numbers@right{%
|
|
\let\FV@LeftListNumber\relax
|
|
\def\FV@RightListNumber{%
|
|
\ifx\FancyVerbStartNum\z@
|
|
\let\FancyVerbStartNum\@ne
|
|
\fi
|
|
\ifbool{FV@StepNumberFromFirst}%
|
|
{\@tempcnta=\FV@CodeLineNo
|
|
\@tempcntb=\FancyVerbStartNum
|
|
\advance\@tempcntb\FV@StepNumber
|
|
\divide\@tempcntb\FV@StepNumber
|
|
\multiply\@tempcntb\FV@StepNumber
|
|
\advance\@tempcnta\@tempcntb
|
|
\advance\@tempcnta-\FancyVerbStartNum
|
|
\@tempcntb=\@tempcnta}%
|
|
{\ifbool{FV@StepNumberOffsetValues}%
|
|
{\@tempcnta=\FV@CodeLineNo
|
|
\@tempcntb=\FV@CodeLineNo}%
|
|
{\@tempcnta=\c@FancyVerbLine
|
|
\@tempcntb=\c@FancyVerbLine}}%
|
|
\divide\@tempcntb\FV@StepNumber
|
|
\multiply\@tempcntb\FV@StepNumber
|
|
\ifnum\@tempcnta=\@tempcntb
|
|
\if@FV@NumberBlankLines
|
|
\hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}%
|
|
\else
|
|
\ifx\FV@Line\empty
|
|
\else
|
|
\hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}%
|
|
\fi
|
|
\fi
|
|
\else
|
|
\ifbool{FV@NumberFirstLine}{%
|
|
\ifnum\FV@CodeLineNo=\FancyVerbStartNum
|
|
\hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
|
|
\fi}{}%
|
|
\fi}%
|
|
}
|
|
\def\FV@Numbers@both{%
|
|
\def\FV@LeftListNumber{%
|
|
\ifx\FancyVerbStartNum\z@
|
|
\let\FancyVerbStartNum\@ne
|
|
\fi
|
|
\ifbool{FV@StepNumberFromFirst}%
|
|
{\@tempcnta=\FV@CodeLineNo
|
|
\@tempcntb=\FancyVerbStartNum
|
|
\advance\@tempcntb\FV@StepNumber
|
|
\divide\@tempcntb\FV@StepNumber
|
|
\multiply\@tempcntb\FV@StepNumber
|
|
\advance\@tempcnta\@tempcntb
|
|
\advance\@tempcnta-\FancyVerbStartNum
|
|
\@tempcntb=\@tempcnta}%
|
|
{\ifbool{FV@StepNumberOffsetValues}%
|
|
{\@tempcnta=\FV@CodeLineNo
|
|
\@tempcntb=\FV@CodeLineNo}%
|
|
{\@tempcnta=\c@FancyVerbLine
|
|
\@tempcntb=\c@FancyVerbLine}}%
|
|
\divide\@tempcntb\FV@StepNumber
|
|
\multiply\@tempcntb\FV@StepNumber
|
|
\ifnum\@tempcnta=\@tempcntb
|
|
\if@FV@NumberBlankLines
|
|
\hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
|
|
\else
|
|
\ifx\FV@Line\empty
|
|
\else
|
|
\hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
|
|
\fi
|
|
\fi
|
|
\else
|
|
\ifbool{FV@NumberFirstLine}{%
|
|
\ifnum\FV@CodeLineNo=\FancyVerbStartNum
|
|
\hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
|
|
\fi}{}%
|
|
\fi}%
|
|
\def\FV@RightListNumber{%
|
|
\ifx\FancyVerbStartNum\z@
|
|
\let\FancyVerbStartNum\@ne
|
|
\fi
|
|
\ifbool{FV@StepNumberFromFirst}%
|
|
{\@tempcnta=\FV@CodeLineNo
|
|
\@tempcntb=\FancyVerbStartNum
|
|
\advance\@tempcntb\FV@StepNumber
|
|
\divide\@tempcntb\FV@StepNumber
|
|
\multiply\@tempcntb\FV@StepNumber
|
|
\advance\@tempcnta\@tempcntb
|
|
\advance\@tempcnta-\FancyVerbStartNum
|
|
\@tempcntb=\@tempcnta}%
|
|
{\ifbool{FV@StepNumberOffsetValues}%
|
|
{\@tempcnta=\FV@CodeLineNo
|
|
\@tempcntb=\FV@CodeLineNo}%
|
|
{\@tempcnta=\c@FancyVerbLine
|
|
\@tempcntb=\c@FancyVerbLine}}%
|
|
\divide\@tempcntb\FV@StepNumber
|
|
\multiply\@tempcntb\FV@StepNumber
|
|
\ifnum\@tempcnta=\@tempcntb
|
|
\if@FV@NumberBlankLines
|
|
\hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}%
|
|
\else
|
|
\ifx\FV@Line\empty
|
|
\else
|
|
\hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}%
|
|
\fi
|
|
\fi
|
|
\else
|
|
\ifbool{FV@NumberFirstLine}{%
|
|
\ifnum\FV@CodeLineNo=\FancyVerbStartNum
|
|
\hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
|
|
\fi}{}%
|
|
\fi}%
|
|
}
|
|
\define@key{FV}{backgroundcolor}{%
|
|
\def\FancyVerbBackgroundColor{#1}%
|
|
\ifx\FancyVerbBackgroundColor\FV@None
|
|
\let\FancyVerbBackgroundColor\relax
|
|
\else\ifx\FancyVerbBackgroundColor\@empty
|
|
\let\FancyVerbBackgroundColor\relax
|
|
\fi\fi}%
|
|
\fvset{backgroundcolor=none}
|
|
\define@key{FV}{bgcolor}{%
|
|
\fvset{backgroundcolor=#1}}
|
|
\define@key{FV}{backgroundcolorvphantom}{%
|
|
\def\FancyVerbBackgroundColorVPhantom{#1}%
|
|
\ifx\FancyVerbBackgroundColorVPhantom\FV@None
|
|
\let\FancyVerbBackgroundColorVPhantom\relax
|
|
\else\ifx\FancyVerbBackgroundColorVPhantom\@empty
|
|
\let\FancyVerbBackgroundColorVPhantom\relax
|
|
\fi\fi}
|
|
\fvset{backgroundcolorvphantom=\vphantom{\"Apgjy}}
|
|
\define@key{FV}{bgcolorvphantom}{%
|
|
\fvset{backgroundcolorvphantom=#1}}
|
|
\let\FancyVerbBackgroundColorPadding\relax
|
|
\def\FV@backgroundcolorpadding@none@framenotsingle{%
|
|
\fvset{frame=none,framerule,rulecolor=none}}
|
|
\def\FV@backgroundcolorpadding@dim@framenotsingle{%
|
|
\fvset{frame=single,framerule=0pt,rulecolor=\FancyVerbBackgroundColor}}
|
|
\define@key{FV}{backgroundcolorpadding}{%
|
|
\def\FancyVerbBackgroundColorPadding{#1}%
|
|
\ifx\FancyVerbBackgroundColorPadding\FV@None
|
|
\let\FancyVerbBackgroundColorPadding\relax
|
|
\else\ifx\FancyVerbBackgroundColorPadding\@empty
|
|
\let\FancyVerbBackgroundColorPadding\relax
|
|
\fi\fi
|
|
\let\FV@Next\relax
|
|
\ifx\FancyVerbBackgroundColorPadding\relax
|
|
\ifx\FV@BeginListFrame\FV@BeginListFrame@Single
|
|
\else
|
|
\let\FV@Next\FV@backgroundcolorpadding@none@framenotsingle
|
|
\fi
|
|
\ifx\FV@LeftListFrame\FV@LeftListFrame@Single
|
|
\else
|
|
\let\FV@Next\FV@backgroundcolorpadding@none@framenotsingle
|
|
\fi
|
|
\ifx\FV@RightListFrame\FV@RightListFrame@Single
|
|
\else
|
|
\let\FV@Next\FV@backgroundcolorpadding@none@framenotsingle
|
|
\fi
|
|
\ifx\FV@EndListFrame\FV@EndListFrame@Single
|
|
\else
|
|
\let\FV@Next\FV@backgroundcolorpadding@none@framenotsingle
|
|
\fi
|
|
\FV@Next
|
|
\fvset{framesep,fillcolor=none}%
|
|
\else
|
|
\ifx\FV@BeginListFrame\FV@BeginListFrame@Single
|
|
\else
|
|
\let\FV@Next\FV@backgroundcolorpadding@dim@framenotsingle
|
|
\fi
|
|
\ifx\FV@LeftListFrame\FV@LeftListFrame@Single
|
|
\else
|
|
\let\FV@Next\FV@backgroundcolorpadding@dim@framenotsingle
|
|
\fi
|
|
\ifx\FV@RightListFrame\FV@RightListFrame@Single
|
|
\else
|
|
\let\FV@Next\FV@backgroundcolorpadding@dim@framenotsingle
|
|
\fi
|
|
\ifx\FV@EndListFrame\FV@EndListFrame@Single
|
|
\else
|
|
\let\FV@Next\FV@backgroundcolorpadding@dim@framenotsingle
|
|
\fi
|
|
\FV@Next
|
|
\fvset{framesep=#1,fillcolor=\FancyVerbBackgroundColor}%
|
|
\fi}
|
|
\define@key{FV}{bgcolorpadding}{\fvset{backgroundcolorpadding=#1}}
|
|
\def\FV@BGColor@List#1{%
|
|
\ifx\FancyVerbBackgroundColor\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{#1}%
|
|
{\setlength{\FV@TmpLength}{\fboxsep}%
|
|
\setlength{\fboxsep}{0pt}%
|
|
\colorbox{\FancyVerbBackgroundColor}{%
|
|
\setlength{\fboxsep}{\FV@TmpLength}%
|
|
\rlap{\FancyVerbBackgroundColorVPhantom\strut#1}%
|
|
\hspace{\linewidth}%
|
|
\ifx\FV@RightListFrame\relax\else
|
|
\hspace{-\FV@FrameSep}%
|
|
\hspace{-\FV@FrameRule}%
|
|
\fi
|
|
\ifx\FV@LeftListFrame\relax\else
|
|
\hspace{-\FV@FrameSep}%
|
|
\hspace{-\FV@FrameRule}%
|
|
\fi}%
|
|
\hss}}
|
|
\let\FV@BVerbatimBegin@NoBGColor\FV@BVerbatimBegin
|
|
\let\FV@BVerbatimEnd@NoBGColor\FV@BVerbatimEnd
|
|
\def\FV@BVerbatimBegin{%
|
|
\begingroup
|
|
\FV@UseKeyValues
|
|
\FV@FormattingPrep
|
|
\let\FV@FormattingPrep\relax
|
|
\FV@ObeyTabsInit
|
|
\let\FV@ObeyTabsInit\relax
|
|
\ifx\FancyVerbBackgroundColor\relax
|
|
\expandafter\FV@BVerbatimBegin@NoBGColor
|
|
\else
|
|
\expandafter\FV@BVerbatimBegin@BGColor
|
|
\fi}
|
|
\def\FV@BVerbatimEnd{%
|
|
\ifx\FancyVerbBackgroundColor\relax
|
|
\expandafter\FV@BVerbatimEnd@NoBGColor
|
|
\else
|
|
\expandafter\FV@BVerbatimEnd@BGColor
|
|
\fi
|
|
\endgroup}
|
|
\def\FV@BVerbatimBegin@BGColor{%
|
|
\gdef\FV@TheVerbatim{}%
|
|
\ifx\FV@boxwidth\relax
|
|
\gdef\FV@boxwidth@tmp{0pt}%
|
|
\def\FV@ProcessLine##1{%
|
|
\sbox{\FV@LineBox}{\FV@BProcessLine{##1}}%
|
|
\ifdim\wd\FV@LineBox>\FV@boxwidth@tmp\relax
|
|
\xdef\FV@boxwidth@tmp{\the\wd\FV@LineBox}%
|
|
\fi
|
|
\expandafter\gdef\expandafter\FV@TheVerbatim\expandafter{%
|
|
\FV@TheVerbatim\FV@ProcessLine{##1}}}%
|
|
\else
|
|
\def\FV@ProcessLine##1{%
|
|
\expandafter\gdef\expandafter\FV@TheVerbatim\expandafter{%
|
|
\FV@TheVerbatim\FV@ProcessLine{##1}}}%
|
|
\fi}
|
|
\def\FV@BVerbatimEnd@BGColor{%
|
|
\ifx\FV@boxwidth\relax
|
|
\let\FV@boxwidth\FV@boxwidth@tmp
|
|
\global\let\FV@boxwidth@tmp\FV@Undefined
|
|
\fi
|
|
\setlength{\FV@TmpLength}{\fboxsep}%
|
|
\ifx\FancyVerbBackgroundColorPadding\relax
|
|
\setlength{\fboxsep}{0pt}%
|
|
\else
|
|
\setlength{\fboxsep}{\FancyVerbBackgroundColorPadding}%
|
|
\fi
|
|
\colorbox{\FancyVerbBackgroundColor}{%
|
|
\setlength{\fboxsep}{\FV@TmpLength}%
|
|
\FV@BVerbatimBegin@NoBGColor\FV@TheVerbatim\FV@BVerbatimEnd@NoBGColor}%
|
|
\gdef\FV@TheVerbatim{}}
|
|
\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}{rgb}{0.878, 1, 1}
|
|
\fvset{highlightcolor=FancyVerbHighlightColor}
|
|
\fi\fi
|
|
\AtBeginDocument{%
|
|
\ifx\FancyVerbHighlightColor\@empty
|
|
\ifcsname definecolor\endcsname
|
|
\ifx\definecolor\relax
|
|
\else
|
|
\definecolor{FancyVerbHighlightColor}{rgb}{0.878, 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}%
|
|
\ifx\FV@RightListFrame\relax\else
|
|
\hspace{-\FV@FrameSep}%
|
|
\hspace{-\FV@FrameRule}%
|
|
\fi
|
|
\ifx\FV@LeftListFrame\relax\else
|
|
\hspace{-\FV@FrameSep}%
|
|
\hspace{-\FV@FrameRule}%
|
|
\fi
|
|
}%
|
|
\hss
|
|
}
|
|
\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@FormattingPrep@PreHook{\FV@HighlightLinesPrep}
|
|
\def\FV@StepLineNo@Patch@HighlightLine{%
|
|
\ifcsname FV@HighlightLine:\number\c@FancyVerbLine\endcsname
|
|
\@tempcnta=\c@FancyVerbLine
|
|
\advance\@tempcnta\@ne
|
|
\ifcsname FV@HighlightLine:\number\@tempcnta\endcsname
|
|
\else
|
|
\expandafter\let
|
|
\csname FV@HighlightLine:\number\c@FancyVerbLine\endcsname\FV@Undefined
|
|
\fi
|
|
\fi}
|
|
\patchcmd{\FV@StepLineNo}%
|
|
{\ifx\FV@Line\empty}%
|
|
{\ifx\FV@Line\empty\FV@StepLineNo@Patch@HighlightLine}%
|
|
{}%
|
|
{\PackageError{fvextra}%
|
|
{Failed to patch \string\FV@StepLineNo\ to make highlightlines
|
|
compatible with numberblanklines}%
|
|
{Failed to patch \string\FV@StepLineNo\ to make highlightlines
|
|
compatible with numberblanklines}}
|
|
\newcount\FV@LoopCount
|
|
\newbox\FV@NCharsBox
|
|
\def\FV@SetToWidthNChars#1#2{%
|
|
\FV@LoopCount=#2\relax
|
|
\ifnum\FV@LoopCount>0
|
|
\def\FV@NChars{}%
|
|
\loop
|
|
\ifnum\FV@LoopCount>0
|
|
\expandafter\def\expandafter\FV@NChars\expandafter{\FV@NChars x}%
|
|
\fi
|
|
\advance\FV@LoopCount by -1
|
|
\ifnum\FV@LoopCount>0
|
|
\repeat
|
|
\setbox\FV@NCharsBox\hbox{\FV@NChars}%
|
|
#1=\wd\FV@NCharsBox
|
|
\else
|
|
#1=0pt\relax
|
|
\fi
|
|
}
|
|
\newbool{FV@breaklines}
|
|
\define@booleankey{FV}{breaklines}%
|
|
{\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
|
|
\FV@BreakLinesIndentationHook
|
|
\fi}
|
|
\newdimen\FV@BreakIndent
|
|
\newcount\FV@BreakIndentNChars
|
|
\define@key{FV}{breakindent}{%
|
|
\FV@BreakIndent=#1\relax
|
|
\FV@BreakIndentNChars=0\relax}
|
|
\define@key{FV}{breakindentnchars}{\FV@BreakIndentNChars=#1\relax}
|
|
\g@addto@macro\FV@BreakLinesIndentationHook{%
|
|
\ifnum\FV@BreakIndentNChars>0
|
|
\FV@SetToWidthNChars{\FV@BreakIndent}{\FV@BreakIndentNChars}%
|
|
\fi}
|
|
\fvset{breakindentnchars=0}
|
|
\newbool{FV@breakautoindent}
|
|
\define@booleankey{FV}{breakautoindent}%
|
|
{\booltrue{FV@breakautoindent}}{\boolfalse{FV@breakautoindent}}
|
|
\fvset{breakautoindent=true}
|
|
\define@key{FV}{breaksymbolleft}{\def\FancyVerbBreakSymbolLeft{#1}}
|
|
\define@key{FV}{breaksymbol}{\fvset{breaksymbolleft=#1}}
|
|
\fvset{breaksymbolleft=\tiny\ensuremath{\hookrightarrow}}
|
|
\define@key{FV}{breaksymbolright}{\def\FancyVerbBreakSymbolRight{#1}}
|
|
\fvset{breaksymbolright={}}
|
|
\newdimen\FV@BreakSymbolSepLeft
|
|
\newcount\FV@BreakSymbolSepLeftNChars
|
|
\define@key{FV}{breaksymbolsepleft}{%
|
|
\FV@BreakSymbolSepLeft=#1\relax
|
|
\FV@BreakSymbolSepLeftNChars=0\relax}
|
|
\define@key{FV}{breaksymbolsep}{\fvset{breaksymbolsepleft=#1}}
|
|
\define@key{FV}{breaksymbolsepleftnchars}{\FV@BreakSymbolSepLeftNChars=#1\relax}
|
|
\define@key{FV}{breaksymbolsepnchars}{\fvset{breaksymbolsepleftnchars=#1}}
|
|
\g@addto@macro\FV@BreakLinesIndentationHook{%
|
|
\ifnum\FV@BreakSymbolSepLeftNChars>0
|
|
\FV@SetToWidthNChars{\FV@BreakSymbolSepLeft}{\FV@BreakSymbolSepLeftNChars}%
|
|
\fi}
|
|
\fvset{breaksymbolsepleftnchars=2}
|
|
\newdimen\FV@BreakSymbolSepRight
|
|
\newcount\FV@BreakSymbolSepRightNChars
|
|
\define@key{FV}{breaksymbolsepright}{%
|
|
\FV@BreakSymbolSepRight=#1\relax
|
|
\FV@BreakSymbolSepRightNChars=0\relax}
|
|
\define@key{FV}{breaksymbolseprightnchars}{\FV@BreakSymbolSepRightNChars=#1\relax}
|
|
\g@addto@macro\FV@BreakLinesIndentationHook{%
|
|
\ifnum\FV@BreakSymbolSepRightNChars>0
|
|
\FV@SetToWidthNChars{\FV@BreakSymbolSepRight}{\FV@BreakSymbolSepRightNChars}%
|
|
\fi}
|
|
\fvset{breaksymbolseprightnchars=2}
|
|
\newdimen\FV@BreakSymbolIndentLeft
|
|
\newcount\FV@BreakSymbolIndentLeftNChars
|
|
\define@key{FV}{breaksymbolindentleft}{%
|
|
\FV@BreakSymbolIndentLeft=#1\relax
|
|
\FV@BreakSymbolIndentLeftNChars=0\relax}
|
|
\define@key{FV}{breaksymbolindent}{\fvset{breaksymbolindentleft=#1}}
|
|
\define@key{FV}{breaksymbolindentleftnchars}{\FV@BreakSymbolIndentLeftNChars=#1\relax}
|
|
\define@key{FV}{breaksymbolindentnchars}{\fvset{breaksymbolindentleftnchars=#1}}
|
|
\g@addto@macro\FV@BreakLinesIndentationHook{%
|
|
\ifnum\FV@BreakSymbolIndentLeftNChars>0
|
|
\FV@SetToWidthNChars{\FV@BreakSymbolIndentLeft}{\FV@BreakSymbolIndentLeftNChars}%
|
|
\fi}
|
|
\fvset{breaksymbolindentleftnchars=4}
|
|
\newdimen\FV@BreakSymbolIndentRight
|
|
\newcount\FV@BreakSymbolIndentRightNChars
|
|
\define@key{FV}{breaksymbolindentright}{%
|
|
\FV@BreakSymbolIndentRight=#1\relax
|
|
\FV@BreakSymbolIndentRightNChars=0\relax}
|
|
\define@key{FV}{breaksymbolindentrightnchars}{\FV@BreakSymbolIndentRightNChars=#1\relax}
|
|
\g@addto@macro\FV@BreakLinesIndentationHook{%
|
|
\ifnum\FV@BreakSymbolIndentRightNChars>0
|
|
\FV@SetToWidthNChars{\FV@BreakSymbolIndentRight}{\FV@BreakSymbolIndentRightNChars}%
|
|
\fi}
|
|
\fvset{breaksymbolindentrightnchars=4}
|
|
\newcommand{\FancyVerbBreakSymbolLeftLogic}[1]{%
|
|
\ifnum\value{linenumber}=1\relax\else{#1}\fi}
|
|
\newcounter{FancyVerbLineBreakLast}
|
|
\newcommand{\FV@SetLineBreakLast}{%
|
|
\setcounter{FancyVerbLineBreakLast}{\value{linenumber}}}
|
|
\newcommand{\FancyVerbBreakSymbolRightLogic}[1]{%
|
|
\ifnum\value{linenumber}=\value{FancyVerbLineBreakLast}\relax\else{#1}\fi}
|
|
\let\FancyVerbBreakStart\relax
|
|
\let\FancyVerbBreakStop\relax
|
|
\let\FV@Break@DefaultToken\FV@Break@NBToken
|
|
\newbool{FV@breakanywhere}
|
|
\define@booleankey{FV}{breakanywhere}%
|
|
{\booltrue{FV@breakanywhere}%
|
|
\let\FancyVerbBreakStart\FV@Break
|
|
\let\FancyVerbBreakStop\FV@EndBreak
|
|
\let\FV@Break@DefaultToken\FV@Break@AnyToken}%
|
|
{\boolfalse{FV@breakanywhere}%
|
|
\let\FancyVerbBreakStart\relax
|
|
\let\FancyVerbBreakStop\relax
|
|
\let\FV@Break@DefaultToken\FV@Break@NBToken}
|
|
\fvset{breakanywhere=false}
|
|
\define@key{FV}{breakanywhereinlinestretch}{%
|
|
\def\FV@breakanywhereinlinestretch{#1}%
|
|
\ifx\FV@breakanywhereinlinestretch\FV@None
|
|
\let\FV@breakanywhereinlinestretch\relax
|
|
\else\ifx\FV@breakanywhereinlinestretch\@empty
|
|
\let\FV@breakanywhereinlinestretch\relax
|
|
\fi\fi}
|
|
\fvset{breakanywhereinlinestretch=none}
|
|
\def\FV@ApplyBreakAnywhereInlineStretch{%
|
|
\ifx\FV@breakanywhereinlinestretch\relax
|
|
\else
|
|
\let\FancyVerbBreakAnywhereBreak@Orig\FancyVerbBreakAnywhereBreak
|
|
\def\FancyVerbBreakAnywhereBreak{%
|
|
\nobreak\hspace{0pt plus \FV@breakanywhereinlinestretch}%
|
|
\FancyVerbBreakAnywhereBreak@Orig}%
|
|
\fi}
|
|
\define@key{FV}{breakbefore}{%
|
|
\ifstrempty{#1}%
|
|
{\let\FV@BreakBefore\@empty
|
|
\let\FancyVerbBreakStart\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@DefaultToken\FV@Break@BeforeAfterToken}%
|
|
}
|
|
\fvset{breakbefore={}}
|
|
\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
|
|
\gdef\FV@BreakBefore@Def{}%
|
|
\begingroup
|
|
\def\FV@BreakBefore@Process##1##2\FV@Undefined{%
|
|
\expandafter\FV@BreakBefore@Process@i\expandafter{##1}%
|
|
\expandafter\ifx\expandafter\relax\detokenize{##2}\relax
|
|
\else
|
|
\FV@BreakBefore@Process##2\FV@Undefined
|
|
\fi
|
|
}%
|
|
\def\FV@BreakBefore@Process@i##1{%
|
|
\g@addto@macro\FV@BreakBefore@Def{%
|
|
\@namedef{FV@BreakBefore@Token\detokenize{##1}}{}}%
|
|
}%
|
|
\FV@EscChars
|
|
\expandafter\FV@BreakBefore@Process\FV@BreakBefore\FV@Undefined
|
|
\endgroup
|
|
\FV@BreakBefore@Def
|
|
\FV@BreakBeforePrep@PygmentsHook
|
|
\fi
|
|
}
|
|
\let\FV@BreakBeforePrep@PygmentsHook\relax
|
|
\define@key{FV}{breakafter}{%
|
|
\ifstrempty{#1}%
|
|
{\let\FV@BreakAfter\@empty
|
|
\let\FancyVerbBreakStart\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@DefaultToken\FV@Break@BeforeAfterToken}%
|
|
}
|
|
\fvset{breakafter={}}
|
|
\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
|
|
\gdef\FV@BreakAfter@Def{}%
|
|
\begingroup
|
|
\def\FV@BreakAfter@Process##1##2\FV@Undefined{%
|
|
\expandafter\FV@BreakAfter@Process@i\expandafter{##1}%
|
|
\expandafter\ifx\expandafter\relax\detokenize{##2}\relax
|
|
\else
|
|
\FV@BreakAfter@Process##2\FV@Undefined
|
|
\fi
|
|
}%
|
|
\def\FV@BreakAfter@Process@i##1{%
|
|
\ifcsname FV@BreakBefore@Token\detokenize{##1}\endcsname
|
|
\ifbool{FV@breakbeforeinrun}%
|
|
{\ifbool{FV@breakafterinrun}%
|
|
{}%
|
|
{\PackageError{fvextra}%
|
|
{Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}%
|
|
{Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}}}%
|
|
{\ifbool{FV@breakafterinrun}%
|
|
{\PackageError{fvextra}%
|
|
{Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}%
|
|
{Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}}%
|
|
{}}%
|
|
\fi
|
|
\g@addto@macro\FV@BreakAfter@Def{%
|
|
\@namedef{FV@BreakAfter@Token\detokenize{##1}}{}}%
|
|
}%
|
|
\FV@EscChars
|
|
\expandafter\FV@BreakAfter@Process\FV@BreakAfter\FV@Undefined
|
|
\endgroup
|
|
\FV@BreakAfter@Def
|
|
\FV@BreakAfterPrep@PygmentsHook
|
|
\fi
|
|
}
|
|
\let\FV@BreakAfterPrep@PygmentsHook\relax
|
|
\g@addto@macro\FV@FormattingPrep@PreHook{%
|
|
\ifFV@pdfTeXinputenc
|
|
\ifdefstring{\inputencodingname}{utf8}%
|
|
{\let\FV@BreakBeforePrep\FV@BreakBeforePrep@UTF
|
|
\let\FV@BreakAfterPrep\FV@BreakAfterPrep@UTF}%
|
|
{}%
|
|
\fi
|
|
\FV@BreakBeforePrep\FV@BreakAfterPrep}
|
|
\define@key{FV}{breakanywheresymbolpre}{%
|
|
\ifstrempty{#1}%
|
|
{\def\FancyVerbBreakAnywhereSymbolPre{}}%
|
|
{\def\FancyVerbBreakAnywhereSymbolPre{\hbox{#1}}}}
|
|
\fvset{breakanywheresymbolpre={\,\footnotesize\ensuremath{_\rfloor}}}
|
|
\define@key{FV}{breakanywheresymbolpost}{%
|
|
\ifstrempty{#1}%
|
|
{\def\FancyVerbBreakAnywhereSymbolPost{}}%
|
|
{\def\FancyVerbBreakAnywhereSymbolPost{\hbox{#1}}}}
|
|
\fvset{breakanywheresymbolpost={}}
|
|
\define@key{FV}{breakbeforesymbolpre}{%
|
|
\ifstrempty{#1}%
|
|
{\def\FancyVerbBreakBeforeSymbolPre{}}%
|
|
{\def\FancyVerbBreakBeforeSymbolPre{\hbox{#1}}}}
|
|
\fvset{breakbeforesymbolpre={\,\footnotesize\ensuremath{_\rfloor}}}
|
|
\define@key{FV}{breakbeforesymbolpost}{%
|
|
\ifstrempty{#1}%
|
|
{\def\FancyVerbBreakBeforeSymbolPost{}}%
|
|
{\def\FancyVerbBreakBeforeSymbolPost{\hbox{#1}}}}
|
|
\fvset{breakbeforesymbolpost={}}
|
|
\define@key{FV}{breakaftersymbolpre}{%
|
|
\ifstrempty{#1}%
|
|
{\def\FancyVerbBreakAfterSymbolPre{}}%
|
|
{\def\FancyVerbBreakAfterSymbolPre{\hbox{#1}}}}
|
|
\fvset{breakaftersymbolpre={\,\footnotesize\ensuremath{_\rfloor}}}
|
|
\define@key{FV}{breakaftersymbolpost}{%
|
|
\ifstrempty{#1}%
|
|
{\def\FancyVerbBreakAfterSymbolPost{}}%
|
|
{\def\FancyVerbBreakAfterSymbolPost{\hbox{#1}}}}
|
|
\fvset{breakaftersymbolpost={}}
|
|
\newcommand{\FancyVerbBreakAnywhereBreak}{%
|
|
\discretionary{\FancyVerbBreakAnywhereSymbolPre}%
|
|
{\FancyVerbBreakAnywhereSymbolPost}{}}
|
|
\newcommand{\FancyVerbBreakBeforeBreak}{%
|
|
\discretionary{\FancyVerbBreakBeforeSymbolPre}%
|
|
{\FancyVerbBreakBeforeSymbolPost}{}}
|
|
\newcommand{\FancyVerbBreakAfterBreak}{%
|
|
\discretionary{\FancyVerbBreakAfterSymbolPre}%
|
|
{\FancyVerbBreakAfterSymbolPost}{}}
|
|
\newbool{FV@breaknonspaceingroup}
|
|
\define@booleankey{FV}{breaknonspaceingroup}%
|
|
{\booltrue{FV@breaknonspaceingroup}}%
|
|
{\boolfalse{FV@breaknonspaceingroup}}
|
|
\fvset{breaknonspaceingroup=false}
|
|
\newbool{FV@breakpreferspaces}
|
|
\booltrue{FV@breakpreferspaces}
|
|
\define@booleankey{FV}{breakpreferspaces}%
|
|
{\booltrue{FV@breakpreferspaces}}%
|
|
{\boolfalse{FV@breakpreferspaces}}
|
|
\def\FV@BreakHyphenation{%
|
|
\finalhyphendemerits=0\relax
|
|
\ifbool{FV@breakpreferspaces}{}{\linepenalty=\@M\relax}}
|
|
\g@addto@macro\FV@FormattingPrep@PreHook{\FV@BreakHyphenation}
|
|
\newsavebox{\FV@LineBox}
|
|
\newsavebox{\FV@LineIndentBox}
|
|
\let\FV@LineIndentChars\@empty
|
|
\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@GetLineIndent@End
|
|
\fi
|
|
\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}}
|
|
\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
|
|
\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
|
|
\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
|
|
\gdef\FV@Break@Scan{%
|
|
\@ifnextchar\FancyVerbBreakStart%
|
|
{}%
|
|
{\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
|
|
\let\FV@Break@Next\FV@Break@Token
|
|
\fi\fi\fi\fi\fi
|
|
\FV@Break@Next}}
|
|
\endgroup
|
|
\begingroup
|
|
\catcode`\$=3%
|
|
\gdef\FV@Break@Math$#1${%
|
|
\FV@BreakBufferStart{\FV@Break@NBToken}#1\FV@BreakBufferStop{\FV@Break@MathTemplate}}
|
|
\gdef\FV@Break@MathTemplate#1{$#1$}
|
|
\endgroup
|
|
\def\FV@Break@Group#1{%
|
|
\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@LastToken=\FV@Undefined
|
|
\FV@Break@Scan}
|
|
\def\FV@Break@AnyToken#1{%
|
|
\ifx\FV@FVSpaceToken#1\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\let\FV@LastToken=#1\FV@BreakBuffer@Append{#1}\FV@Break@Scan}%
|
|
{\ifx\FV@LastToken\FV@FVSpaceToken
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\let\FV@LastToken=#1%
|
|
\FV@BreakBuffer@Append{#1}\FV@Break@Scan}%
|
|
{\let\FV@LastToken=#1%
|
|
\FV@BreakBuffer@Append{\FancyVerbBreakAnywhereBreak#1}\FV@Break@Scan}}}
|
|
\def\FV@Break@BeforeAfterToken#1{%
|
|
\ifcsname FV@BreakBefore@Token\detokenize{#1}\endcsname
|
|
\let\FV@Break@Next\FV@Break@BeforeTokenBreak
|
|
\else
|
|
\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
|
|
\let\FV@Break@Next\FV@Break@AfterTokenBreak
|
|
\else
|
|
\let\FV@Break@Next\FV@Break@BeforeAfterTokenNoBreak
|
|
\fi
|
|
\fi
|
|
\FV@Break@Next{#1}%
|
|
}
|
|
\def\FV@Break@BeforeAfterTokenNoBreak#1{%
|
|
\FV@BreakBuffer@Append{#1}%
|
|
\let\FV@LastToken=#1%
|
|
\FV@Break@Scan}
|
|
\def\FV@Break@BeforeTokenBreak#1{%
|
|
\ifbool{FV@breakbeforeinrun}%
|
|
{\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
|
|
\ifx#1\FV@FVSpaceToken
|
|
\FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
|
|
\else
|
|
\FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
|
|
\fi
|
|
\let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan
|
|
\def\FV@RescanToken{#1}%
|
|
\else
|
|
\ifx#1\FV@FVSpaceToken
|
|
\FV@BreakBuffer@Append{\FancyVerbSpaceBreak#1}%
|
|
\else
|
|
\FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
|
|
\fi
|
|
\let\FV@Break@Next\FV@Break@Scan
|
|
\let\FV@LastToken=#1%
|
|
\fi}%
|
|
{\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
|
|
\FV@BreakBuffer@Append{#1}%
|
|
\let\FV@Break@Next\FV@Break@Scan
|
|
\let\FV@LastToken=#1%
|
|
\fi
|
|
\else
|
|
\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
|
|
\ifx#1\FV@FVSpaceToken
|
|
\FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
|
|
\else
|
|
\FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
|
|
\fi
|
|
\let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan
|
|
\def\FV@RescanToken{#1}%
|
|
\else
|
|
\ifx#1\FV@FVSpaceToken
|
|
\FV@BreakBuffer@Append{\FancyVerbSpaceBreak#1}%
|
|
\else
|
|
\FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
|
|
\fi
|
|
\let\FV@Break@Next\FV@Break@Scan
|
|
\let\FV@LastToken=#1%
|
|
\fi
|
|
\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%
|
|
{\ifx#1\FV@FVSpaceToken
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@Break@AfterTokenBreak@i{#1}}%
|
|
{\FV@BreakBuffer@Append{#1}%
|
|
\FV@Break@Scan}}%
|
|
{\FV@Break@AfterTokenBreak@i{#1}}}
|
|
\def\FV@Break@AfterTokenBreak@i#1{%
|
|
\ifbool{FV@breakafterinrun}%
|
|
{\ifx#1\FV@FVSpaceToken
|
|
\FV@BreakBuffer@Append{#1\FancyVerbSpaceBreak}%
|
|
\else
|
|
\FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}%
|
|
\fi
|
|
\let\FV@Break@Next\FV@Break@Scan}%
|
|
{\ifx\@let@token#1\relax
|
|
\FV@BreakBuffer@Append{#1}%
|
|
\let\FV@Break@Next\FV@Break@Scan
|
|
\else
|
|
\expandafter\ifx\csname @let@token\endcsname\bgroup\relax
|
|
\FV@BreakBuffer@Append{#1}%
|
|
\let\FV@Break@Next\FV@Break@AfterTokenBreak@Group
|
|
\else
|
|
\ifx#1\FV@FVSpaceToken
|
|
\FV@BreakBuffer@Append{#1\FancyVerbSpaceBreak}%
|
|
\else
|
|
\FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}%
|
|
\fi
|
|
\let\FV@Break@Next\FV@Break@Scan
|
|
\fi
|
|
\fi}%
|
|
\FV@Break@Next
|
|
}
|
|
\def\FV@Break@AfterTokenBreak@Group#1{%
|
|
\ifstrempty{#1}%
|
|
{\FV@BreakBuffer@Append{{}}%
|
|
\@ifnextchar\FV@LastToken%
|
|
{\FV@Break@Scan}%
|
|
{\ifx\FV@LastToken\FV@FVSpaceToken
|
|
\FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
|
|
\else
|
|
\FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
|
|
\fi
|
|
\FV@Break@Scan}}%
|
|
{\ifx\FV@LastToken\FV@FVSpaceToken
|
|
\FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
|
|
\else
|
|
\FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
|
|
\fi
|
|
\FV@Break@Group{#1}}}
|
|
\ifFV@pdfTeXinputenc
|
|
\def\FV@BreakBeforePrep@UTF{%
|
|
\ifx\FV@BreakBefore\@empty\relax
|
|
\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@UTF@octets@after\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
|
|
\FV@BreakBeforePrep@PygmentsHook
|
|
\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@UTF@octets@after\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
|
|
\ifbool{FV@breakbeforeinrun}%
|
|
{\ifbool{FV@breakafterinrun}%
|
|
{}%
|
|
{\PackageError{fvextra}%
|
|
{Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}%
|
|
{Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}}}%
|
|
{\ifbool{FV@breakafterinrun}%
|
|
{\PackageError{fvextra}%
|
|
{Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}%
|
|
{Conflicting breakbeforeinrun and breakafterinrun 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
|
|
\FV@BreakAfterPrep@PygmentsHook
|
|
\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@UTF@octets@after\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{%
|
|
\def\FV@CurrentToken{#1}%
|
|
\ifx\FV@CurrentToken\FV@ActiveSpaceToken\relax
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\let\FV@LastToken\FV@CurrentToken
|
|
\FV@BreakBuffer@Append{#1}\FV@Break@Scan}%
|
|
{\ifx\FV@LastToken\FV@ActiveSpaceToken
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\let\FV@LastToken\FV@CurrentToken
|
|
\FV@BreakBuffer@Append{#1}\FV@Break@Scan}%
|
|
{\let\FV@LastToken\FV@CurrentToken
|
|
\FV@BreakBuffer@Append{\FancyVerbBreakAnywhereBreak#1}\FV@Break@Scan}}}
|
|
\def\FV@Break@BeforeAfterToken@UTF#1{%
|
|
\ifcsname FV@U8:\detokenize{#1}\endcsname
|
|
\expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{#1}\endcsname
|
|
\let\FV@UTF@octets@after\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{%
|
|
\FV@BreakBuffer@Append{#1}%
|
|
\def\FV@LastToken{#1}%
|
|
\FV@Break@Scan}
|
|
\def\FV@Break@BeforeTokenBreak@UTF#1{%
|
|
\def\FV@CurrentToken{#1}%
|
|
\ifbool{FV@breakbeforeinrun}%
|
|
{\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
|
|
\ifx\FV@CurrentToken\FV@ActiveSpaceToken
|
|
\FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
|
|
\else
|
|
\FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
|
|
\fi
|
|
\let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan@UTF
|
|
\def\FV@RescanToken{#1}%
|
|
\else
|
|
\ifx\FV@CurrentToken\FV@ActiveSpaceToken
|
|
\FV@BreakBuffer@Append{\FancyVerbSpaceBreak#1}%
|
|
\else
|
|
\FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
|
|
\fi
|
|
\let\FV@Break@Next\FV@Break@Scan
|
|
\def\FV@LastToken{#1}%
|
|
\fi}%
|
|
{\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
|
|
\FV@BreakBuffer@Append{#1}%
|
|
\let\FV@Break@Next\FV@Break@Scan
|
|
\def\FV@LastToken{#1}%
|
|
\fi
|
|
\else
|
|
\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname
|
|
\ifx\FV@CurrentToken\FV@ActiveSpaceToken
|
|
\FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
|
|
\else
|
|
\FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}%
|
|
\fi
|
|
\let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan@UTF
|
|
\def\FV@RescanToken{#1}%
|
|
\else
|
|
\ifx\FV@CurrentToken\FV@ActiveSpaceToken
|
|
\FV@BreakBuffer@Append{\FancyVerbSpaceBreak#1}%
|
|
\else
|
|
\FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}%
|
|
\fi
|
|
\let\FV@Break@Next\FV@Break@Scan
|
|
\def\FV@LastToken{#1}%
|
|
\fi
|
|
\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%
|
|
{\ifx\FV@LastToken\FV@ActiveSpaceToken
|
|
\expandafter\@firstoftwo
|
|
\else
|
|
\expandafter\@secondoftwo
|
|
\fi
|
|
{\FV@Break@AfterTokenBreak@UTF@i{#1}}%
|
|
{\FV@BreakBuffer@Append{#1}%
|
|
\FV@Break@Scan}}%
|
|
{\FV@Break@AfterTokenBreak@UTF@i{#1}}}
|
|
\def\FV@Break@AfterTokenBreak@UTF@i#1{%
|
|
\ifbool{FV@breakafterinrun}%
|
|
{\ifx\FV@LastToken\FV@ActiveSpaceToken
|
|
\FV@BreakBuffer@Append{#1\FancyVerbSpaceBreak}%
|
|
\else
|
|
\FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}%
|
|
\fi
|
|
\let\FV@Break@Next\FV@Break@Scan}%
|
|
{\FV@BreakBuffer@Append{#1}%
|
|
\expandafter\ifx\csname @let@token\endcsname\bgroup\relax
|
|
\let\FV@Break@Next\FV@Break@AfterTokenBreak@Group@UTF
|
|
\else
|
|
\let\FV@Break@Next\FV@Break@AfterTokenBreak@UTF@ii
|
|
\fi}%
|
|
\FV@Break@Next}
|
|
\def\FV@Break@AfterTokenBreak@UTF@ii#1{%
|
|
\ifcsname FV@U8:\detokenize{#1}\endcsname
|
|
\expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{#1}\endcsname
|
|
\let\FV@UTF@octets@after\FV@Break@AfterTokenBreak@UTF@ii
|
|
\else
|
|
\def\FV@NextToken{#1}%
|
|
\ifx\FV@LastToken\FV@NextToken
|
|
\else
|
|
\ifx\FV@LastToken\FV@ActiveSpaceToken
|
|
\FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
|
|
\else
|
|
\FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
|
|
\fi
|
|
\fi
|
|
\let\FV@Break@Next\FV@Break@Scan
|
|
\fi
|
|
\FV@Break@Next#1}
|
|
\def\FV@Break@AfterTokenBreak@Group@UTF#1{%
|
|
\ifstrempty{#1}%
|
|
{\FV@BreakBuffer@Append{{}}%
|
|
\@ifnextchar\bgroup
|
|
{\ifx\FV@LastToken\FV@ActiveSpaceToken
|
|
\FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
|
|
\else
|
|
\FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
|
|
\fi
|
|
\FV@Break@Group}%
|
|
{\FV@Break@AfterTokenBreak@Group@UTF@i}}%
|
|
{\ifx\FV@LastToken\FV@ActiveSpaceToken
|
|
\FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
|
|
\else
|
|
\FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
|
|
\fi
|
|
\FV@Break@Group{#1}}}
|
|
\def\FV@Break@AfterTokenBreak@Group@UTF@i#1{%
|
|
\ifcsname FV@U8:\detokenize{#1}\endcsname
|
|
\expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{#1}\endcsname
|
|
\let\FV@UTF@octets@after\FV@Break@AfterTokenBreak@Group@UTF@i
|
|
\else
|
|
\def\FV@NextToken{#1}%
|
|
\ifx\FV@LastToken\FV@NextToken
|
|
\else
|
|
\ifx\FV@LastToken\FV@ActiveSpaceToken
|
|
\FV@BreakBuffer@Append{\FancyVerbSpaceBreak}%
|
|
\else
|
|
\FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}%
|
|
\fi
|
|
\fi
|
|
\let\FV@Break@Next\FV@Break@Scan
|
|
\fi
|
|
\FV@Break@Next#1}
|
|
\fi
|
|
\def\FV@makeLineNumber{%
|
|
\hss
|
|
\FancyVerbBreakSymbolLeftLogic{\FancyVerbBreakSymbolLeft}%
|
|
\hbox to \FV@BreakSymbolSepLeft{\hfill}%
|
|
\rlap{\hskip\linewidth
|
|
\hbox to \FV@BreakSymbolSepRight{\hfill}%
|
|
\FancyVerbBreakSymbolRightLogic{\FancyVerbBreakSymbolRight}%
|
|
\FV@SetLineBreakLast
|
|
}%
|
|
}
|
|
\def\FV@RaggedRight{%
|
|
\let\\\@centercr
|
|
\@rightskip\@flushglue\rightskip\@rightskip\leftskip\z@skip\parindent\z@}
|
|
\newdimen\FV@LineWidth
|
|
\def\FV@SaveLineBox#1{%
|
|
\savebox{\FV@LineBox}{%
|
|
\advance\FV@LineWidth by -\FV@BreakIndent
|
|
\hbox to \FV@BreakIndent{\hfill}%
|
|
\ifbool{FV@breakautoindent}%
|
|
{\let\FV@LineIndentChars\@empty
|
|
\FV@GetLineIndent#1\FV@Sentinel
|
|
\savebox{\FV@LineIndentBox}{\FV@LineIndentChars}%
|
|
\hbox to \wd\FV@LineIndentBox{\hfill}%
|
|
\advance\FV@LineWidth by -\wd\FV@LineIndentBox
|
|
\setcounter{FV@TrueTabCounter}{0}}%
|
|
{}%
|
|
\ifdefempty{\FancyVerbBreakSymbolLeft}{}%
|
|
{\hbox to \FV@BreakSymbolIndentLeft{\hfill}%
|
|
\advance\FV@LineWidth by -\FV@BreakSymbolIndentLeft}%
|
|
\ifdefempty{\FancyVerbBreakSymbolRight}{}%
|
|
{\advance\FV@LineWidth by -\FV@BreakSymbolIndentRight}%
|
|
\parbox[t]{\FV@LineWidth}{%
|
|
\FV@RaggedRight
|
|
\leftlinenumbers*
|
|
\begin{internallinenumbers*}%
|
|
\let\makeLineNumber\FV@makeLineNumber
|
|
\noindent\hspace*{-\FV@BreakIndent}%
|
|
\ifdefempty{\FancyVerbBreakSymbolLeft}{}{%
|
|
\hspace*{-\FV@BreakSymbolIndentLeft}}%
|
|
\ifbool{FV@breakautoindent}%
|
|
{\hspace*{-\wd\FV@LineIndentBox}}%
|
|
{}%
|
|
\FV@BreakByTokenAnywhereHook
|
|
\strut\FV@InsertBreaks{\FancyVerbFormatText}{#1}\nobreak\strut
|
|
\end{internallinenumbers*}
|
|
}%
|
|
\ifdefempty{\FancyVerbBreakSymbolRight}{}%
|
|
{\hbox to \FV@BreakSymbolIndentRight{\hfill}}%
|
|
}%
|
|
}
|
|
\let\FV@BreakByTokenAnywhereHook\relax
|
|
\def\FV@ListProcessLine@Break#1{%
|
|
\hbox to \hsize{%
|
|
\kern\leftmargin
|
|
\hbox to \linewidth{%
|
|
\FV@LineWidth\linewidth
|
|
\ifx\FV@RightListFrame\relax\else
|
|
\advance\FV@LineWidth by -\FV@FrameSep
|
|
\advance\FV@LineWidth by -\FV@FrameRule
|
|
\fi
|
|
\ifx\FV@LeftListFrame\relax\else
|
|
\advance\FV@LineWidth by -\FV@FrameSep
|
|
\advance\FV@LineWidth by -\FV@FrameRule
|
|
\fi
|
|
\ifx\FV@Tab\FV@TrueTab
|
|
\let\FV@TrueTabSaveWidth\FV@TrueTabSaveWidth@Save
|
|
\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}}}}}%
|
|
\ifx\FV@Tab\FV@TrueTab
|
|
\let\FV@TrueTabSaveWidth\relax
|
|
\fi
|
|
\ifdim\wd\FV@LineBox>\FV@LineWidth
|
|
\setcounter{FancyVerbLineBreakLast}{0}%
|
|
\ifx\FV@Tab\FV@TrueTab
|
|
\let\FV@Tab\FV@TrueTab@UseWidth
|
|
\setcounter{FV@TrueTabCounter}{0}%
|
|
\fi
|
|
\FV@SaveLineBox{#1}%
|
|
\ifdefempty{\FancyVerbBreakSymbolRight}{}{%
|
|
\let\FV@SetLineBreakLast\relax
|
|
\setcounter{FV@TrueTabCounter}{0}%
|
|
\FV@SaveLineBox{#1}}%
|
|
\FV@LeftListNumber
|
|
\FV@LeftListFrame
|
|
\FV@BGColor@List{%
|
|
\FancyVerbFormatLine{%
|
|
\FancyVerbHighlightLine{\usebox{\FV@LineBox}}}}%
|
|
\FV@RightListFrame
|
|
\FV@RightListNumber
|
|
\ifx\FV@Tab\FV@TrueTab@UseWidth
|
|
\let\FV@Tab\FV@TrueTab
|
|
\fi
|
|
\else
|
|
\let\FancyVerbBreakStart\relax
|
|
\let\FancyVerbBreakStop\relax
|
|
\FV@LeftListNumber
|
|
\FV@LeftListFrame
|
|
\FV@BGColor@List{%
|
|
\FancyVerbFormatLine{%
|
|
\FancyVerbHighlightLine{%
|
|
\parbox[t]{\FV@LineWidth}{%
|
|
\noindent\strut\FV@ObeyTabs{\FancyVerbFormatText{#1}}\strut}}}}%
|
|
\FV@RightListFrame
|
|
\FV@RightListNumber
|
|
\fi}%
|
|
\hss}\baselineskip\z@\lineskip\z@}
|
|
\def\FV@BreakBeforePrep@Pygments#1{%
|
|
\ifcsname FV@BreakBefore@Token\@backslashchar\endcsname
|
|
\@namedef{FV@BreakBefore@Token#1Zbs }{}%
|
|
\fi
|
|
\ifcsname FV@BreakBefore@Token\FV@underscorechar\endcsname
|
|
\@namedef{FV@BreakBefore@Token#1Zus }{}%
|
|
\fi
|
|
\ifcsname FV@BreakBefore@Token\@charlb\endcsname
|
|
\@namedef{FV@BreakBefore@Token#1Zob }{}%
|
|
\fi
|
|
\ifcsname FV@BreakBefore@Token\@charrb\endcsname
|
|
\@namedef{FV@BreakBefore@Token#1Zcb }{}%
|
|
\fi
|
|
\ifcsname FV@BreakBefore@Token\detokenize{^}\endcsname
|
|
\@namedef{FV@BreakBefore@Token#1Zca }{}%
|
|
\fi
|
|
\ifcsname FV@BreakBefore@Token\FV@ampchar\endcsname
|
|
\@namedef{FV@BreakBefore@Token#1Zam }{}%
|
|
\fi
|
|
\ifcsname FV@BreakBefore@Token\detokenize{<}\endcsname
|
|
\@namedef{FV@BreakBefore@Token#1Zlt }{}%
|
|
\fi
|
|
\ifcsname FV@BreakBefore@Token\detokenize{>}\endcsname
|
|
\@namedef{FV@BreakBefore@Token#1Zgt }{}%
|
|
\fi
|
|
\ifcsname FV@BreakBefore@Token\FV@hashchar\endcsname
|
|
\@namedef{FV@BreakBefore@Token#1Zsh }{}%
|
|
\fi
|
|
\ifcsname FV@BreakBefore@Token\@percentchar\endcsname
|
|
\@namedef{FV@BreakBefore@Token#1Zpc }{}%
|
|
\fi
|
|
\ifcsname FV@BreakBefore@Token\FV@dollarchar\endcsname
|
|
\@namedef{FV@BreakBefore@Token#1Zdl }{}%
|
|
\fi
|
|
\ifcsname FV@BreakBefore@Token\detokenize{-}\endcsname
|
|
\@namedef{FV@BreakBefore@Token#1Zhy }{}%
|
|
\fi
|
|
\ifcsname FV@BreakBefore@Token\detokenize{'}\endcsname
|
|
\@namedef{FV@BreakBefore@Token#1Zsq }{}%
|
|
\fi
|
|
\ifcsname FV@BreakBefore@Token\detokenize{"}\endcsname
|
|
\@namedef{FV@BreakBefore@Token#1Zdq }{}%
|
|
\fi
|
|
\ifcsname FV@BreakBefore@Token\FV@tildechar\endcsname
|
|
\@namedef{FV@BreakBefore@Token#1Zti }{}%
|
|
\fi
|
|
\ifcsname FV@BreakBefore@Token\detokenize{@}\endcsname
|
|
\@namedef{FV@BreakBefore@Token#1Zat }{}%
|
|
\fi
|
|
\ifcsname FV@BreakBefore@Token\detokenize{[}\endcsname
|
|
\@namedef{FV@BreakBefore@Token#1Zlb }{}%
|
|
\fi
|
|
\ifcsname FV@BreakBefore@Token\detokenize{]}\endcsname
|
|
\@namedef{FV@BreakBefore@Token#1Zrb }{}%
|
|
\fi
|
|
}
|
|
\def\FV@BreakAfterPrep@Pygments#1{%
|
|
\ifcsname FV@BreakAfter@Token\@backslashchar\endcsname
|
|
\@namedef{FV@BreakAfter@Token#1Zbs }{}%
|
|
\fi
|
|
\ifcsname FV@BreakAfter@Token\FV@underscorechar\endcsname
|
|
\@namedef{FV@BreakAfter@Token#1Zus }{}%
|
|
\fi
|
|
\ifcsname FV@BreakAfter@Token\@charlb\endcsname
|
|
\@namedef{FV@BreakAfter@Token#1Zob }{}%
|
|
\fi
|
|
\ifcsname FV@BreakAfter@Token\@charrb\endcsname
|
|
\@namedef{FV@BreakAfter@Token#1Zcb }{}%
|
|
\fi
|
|
\ifcsname FV@BreakAfter@Token\detokenize{^}\endcsname
|
|
\@namedef{FV@BreakAfter@Token#1Zca }{}%
|
|
\fi
|
|
\ifcsname FV@BreakAfter@Token\FV@ampchar\endcsname
|
|
\@namedef{FV@BreakAfter@Token#1Zam }{}%
|
|
\fi
|
|
\ifcsname FV@BreakAfter@Token\detokenize{<}\endcsname
|
|
\@namedef{FV@BreakAfter@Token#1Zlt }{}%
|
|
\fi
|
|
\ifcsname FV@BreakAfter@Token\detokenize{>}\endcsname
|
|
\@namedef{FV@BreakAfter@Token#1Zgt }{}%
|
|
\fi
|
|
\ifcsname FV@BreakAfter@Token\FV@hashchar\endcsname
|
|
\@namedef{FV@BreakAfter@Token#1Zsh }{}%
|
|
\fi
|
|
\ifcsname FV@BreakAfter@Token\@percentchar\endcsname
|
|
\@namedef{FV@BreakAfter@Token#1Zpc }{}%
|
|
\fi
|
|
\ifcsname FV@BreakAfter@Token\FV@dollarchar\endcsname
|
|
\@namedef{FV@BreakAfter@Token#1Zdl }{}%
|
|
\fi
|
|
\ifcsname FV@BreakAfter@Token\detokenize{-}\endcsname
|
|
\@namedef{FV@BreakAfter@Token#1Zhy }{}%
|
|
\fi
|
|
\ifcsname FV@BreakAfter@Token\detokenize{'}\endcsname
|
|
\@namedef{FV@BreakAfter@Token#1Zsq }{}%
|
|
\fi
|
|
\ifcsname FV@BreakAfter@Token\detokenize{"}\endcsname
|
|
\@namedef{FV@BreakAfter@Token#1Zdq }{}%
|
|
\fi
|
|
\ifcsname FV@BreakAfter@Token\FV@tildechar\endcsname
|
|
\@namedef{FV@BreakAfter@Token#1Zti }{}%
|
|
\fi
|
|
\ifcsname FV@BreakAfter@Token\detokenize{@}\endcsname
|
|
\@namedef{FV@BreakAfter@Token#1Zat }{}%
|
|
\fi
|
|
\ifcsname FV@BreakAfter@Token\detokenize{[}\endcsname
|
|
\@namedef{FV@BreakAfter@Token#1Zlb }{}%
|
|
\fi
|
|
\ifcsname FV@BreakAfter@Token\detokenize{]}\endcsname
|
|
\@namedef{FV@BreakAfter@Token#1Zrb }{}%
|
|
\fi
|
|
}
|
|
\newbool{FV@breakbytoken}
|
|
\define@booleankey{FV}{breakbytoken}%
|
|
{\booltrue{FV@breakbytoken}}%
|
|
{\boolfalse{FV@breakbytoken}\boolfalse{FV@breakbytokenanywhere}}
|
|
\newbool{FV@breakbytokenanywhere}
|
|
\define@booleankey{FV}{breakbytokenanywhere}%
|
|
{\booltrue{FV@breakbytokenanywhere}\booltrue{FV@breakbytoken}}%
|
|
{\boolfalse{FV@breakbytokenanywhere}\boolfalse{FV@breakbytoken}}
|
|
\def\FancyVerbBreakByTokenAnywhereBreak{\allowbreak{}}
|
|
\def\VerbatimPygments#1#2{%
|
|
\def\FV@PygmentsHook{\FV@VerbatimPygments{#1}{#2}}}
|
|
\def\FV@VerbatimPygments#1#2{%
|
|
\edef\FV@PYG@Literal{\expandafter\FV@DetokMacro@StripSpace\detokenize{#1}}%
|
|
\def\FV@BreakBeforePrep@PygmentsHook{%
|
|
\expandafter\FV@BreakBeforePrep@Pygments\expandafter{\FV@PYG@Literal}}%
|
|
\def\FV@BreakAfterPrep@PygmentsHook{%
|
|
\expandafter\FV@BreakAfterPrep@Pygments\expandafter{\FV@PYG@Literal}}%
|
|
\ifx#2\relax
|
|
\let\FV@PYG=#1\relax
|
|
\else
|
|
\let\FV@PYG=#2\relax
|
|
\fi
|
|
\ifbool{FV@breakbytoken}%
|
|
{\ifbool{FV@breakbytokenanywhere}%
|
|
{\def\FV@BreakByTokenAnywhereHook{%
|
|
\def\FV@BreakByTokenAnywhereBreak{%
|
|
\let\FV@BreakByTokenAnywhereBreak\FancyVerbBreakByTokenAnywhereBreak}}%
|
|
\def#1##1##2{%
|
|
\FV@BreakByTokenAnywhereBreak
|
|
\leavevmode\hbox{\FV@PYG{##1}{##2}}}}%
|
|
{\def#1##1##2{%
|
|
\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}
|
|
%% \Finale
|
|
\endinput
|
|
%%
|
|
%% End of file `fvextra.sty'.
|