File: fancyvrb.hva

package info (click to toggle)
hevea 2.38-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,824 kB
  • sloc: ml: 19,525; sh: 505; makefile: 311; ansic: 132
file content (136 lines) | stat: -rw-r--r-- 5,244 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
\@primitives{fancyvrb}
\usepackage{keyval}
%%%%%%%%
\def\verb@background{background-color:white;}
\let\verb@fillcolor\relax
\def\verb@margin{margin:1em 0pt;}
\def\verb@border{border:none;}
\def\verb@bordercolor{border-color:black;}
\def\verb@borderwidth{border-width:2px;}
\def\verb@padding{padding:0.5em 0.5em;}
\def\verb@style{\verb@margin\verb@border\verb@bordercolor\verb@borderwidth\verb@padding\verb@fillcolor}
%%%%%%%% Helper
\newtokens{\verb@start}\newtokens{\verb@start@line}
\def\verb@warn#1#2{\hva@warn{fancyvrb, unknown value #1 for key #2}}
\def\verb@getcolor#1{\bgroup\let\color\@getstylecolor#1\egroup}
\let\verb@getlength\@getlength
%%%%%%%%% Font change, probably quite brittle
\def\verb@size{}
\def\verb@fontsize@key#1{\def\verb@size{#1}}
\define@key{fancyvrb}{fontsize}{\verb@fontsize@key{#1}}
\def\verb@shape{}
\def\verb@fontshape@key#1{\def\verb@shape{\csname #1shape\endcsname}}
\define@key{fancyvrb}{fontshape}{\verb@fontshape@key{#1}}
\addtokens{\verb@start}{\verb@size\verb@shape}
%%%%%%% Labels
%Positioning, depending upon two booleans
\newif\ifverb@top\newif\ifverb@bot
\def\verb@fmt@label#1{\bgroup\@styleattr{code}{class="verb"}#1\egroup}
\def\verb@top@top
  {\@open{div}{style="\verb@margin"}\let\verb@margin\relax%
  \@open{div}{style="text-align:center;"}\verb@fmt@label{\verb@label@top}\@close{div}}
\def\verb@top@bot{\@open{div}{style="\verb@margin"}\let\verb@margin\relax}
\def\verb@bot@bot
  {\@open{div}{style="text-align:center;"}\verb@fmt@label{\verb@label@bot}\@close{div}\@close{div}}
\def\verb@bot@top{\@close{div}}
\def\verb@top
{\ifverb@top\verb@top@top
\else\ifverb@bot\verb@top@bot\else\relax\fi
\else\relax\fi}
\def\verb@bot
{\ifverb@bot\verb@bot@bot
\else\ifverb@top\verb@bot@top\else\relax\fi
\else\relax\fi}
% Key
\newcommand{\verb@labelkey}[2][]
  {\def\verb@test{#1}%
  \ifx\verb@test\@empty%
    \def\verb@label@top{#2}\def\verb@label@bot{#2}%
    \verb@toptrue\verb@botfalse
  \else
    \def\verb@label@top{#1}\def\verb@label@bot{#2}%
    \verb@toptrue\verb@bottrue
  \fi}
\define@key{fancyvrb}{label}{\@callopt{\verb@labelkey}{#1}}
% Label position
\define@key{fancyvrb}{labelposition}{\verb@pos@set{#1}}
% Delayed position change
\addtokens{\verb@start}{\verb@pos}
\let\verb@pos@default\relax
\let\verb@pos\verb@pos@default
\def\verb@pos@none{\verb@topfalse\verb@botfalse}
\def\verb@pos@all{\verb@toptrue\verb@bottrue}
\def\verb@pos@topline{\verb@toptrue\verb@botfalse}
\def\verb@pos@bottomline{\verb@topfalse\verb@bottrue}
\def\verb@pos@set#1{%
\ifu\csname verb@pos@#1\endcsname\verb@warn{#1}{labelposition}%
\else\let\verb@pos\csname verb@pos@#1\endcsname\fi}
%%%%%%%%%%%
% Framing %
%%%%%%%%%%%
\define@key
  {fancyvrb}
  {framerule}
  {\def\verb@borderwidth{border-width:\verb@getlength{#1};}}
\define@key
  {fancyvrb}
  {framesep}
  {\def\verb@padding{padding:\verb@getlength{#1} 0.5em;}}
\define@key
  {fancyvrb}
  {rulecolor}
  {\def\verb@bordercolor{border-color:\verb@getcolor{#1};}}
\define@key
  {fancyvrb}
  {fillcolor}
  {\def\verb@fillcolor{background-color:\verb@getcolor{#1};}}
%% Frame key
\def\verb@frame@single{\def\verb@border{border:solid;}}
\def\verb@frame@lines{\def\verb@border{border-top-style:solid;border-bottom-style:solid;}}
\def\verb@frame@none{\let\verb@border\relax}
\def\verb@frame@leftline{\def\verb@border{border-left:solid;}\def\verb@padding{padding:2pt;}}
\def\verb@frame@topline{\def\verb@border{border-top:solid;}}
\def\verb@frame@bottomline{\def\verb@border{border-bottom:solid;}}
\newcommand{\verb@frame@key}[1]
{\ifu\csname verb@frame@#1\endcsname
\verb@warn{#1}{frame}%
\else\csname verb@frame@#1\endcsname\fi}
\define@key{fancyvrb}{frame}{\verb@frame@key{#1}}
%%%%%%%%% Line numbers
% counter, with initial value settings
\newcounter{verb@count}
\def\verb@fst@auto{\setcounter{verb@count}{0}}
\def\verb@fst@int#1{\setcounter{verb@count}{#1}\addtocounter{verb@count}{-1}}
\let\verb@fst@last\relax
\let\verb@start@num\verb@fst@auto
\newcommand{\verb@pad}[1]{\@pad{\@print{ }}{3}{#1}  }
\newcommand{\verb@num}{\stepcounter{verb@count}\verb@pad{\theverb@count}}
\def\verb@activate@num
{\addtokens{\verb@start}{\verb@start@num}%
\addtokens{\verb@start@line}{\verb@num}}
\let\verb@num@left\verb@activate@num
\def\verb@num@right
{\hva@warn{fancyvrb, 'right' value for key numbers changed into 'left'}%
\verb@num@left}
\let\verb@num@none\relax
\newcommand{\verb@numbers@key}[1]
  {\ifu\csname verb@num@#1\endcsname\verb@warn{#1}{numbers}%
  \else\csname verb@num@#1\endcsname\fi}
\define@key{fancyvrb}{numbers}{\verb@numbers@key{#1}}
% first number
\newcommand{\verb@firstnumber@key}[1]
{\ifu\csname verb@fst@#1\endcsname\def\verb@start@num{\verb@fst@int{#1}}%
\else\let\verb@start@num\csname verb@fst@#1\endcsname\fi}
\define@key{fancyvrb}{firstnumber}{\verb@firstnumber@key{#1}}
%%%%%%%%%% User command
\newcommand{\fvset}[1]{\@setkeys{fancyvrb}{#1}}
\newenvironment{Verbatim}[1][]
  {\@setkeys{fancyvrb}{#1}%
  \verb@start%
  \def\endVerbatim{\@endVerbatim\@close{div}\verb@bot}%
  \ifthenelse{\equal{\verb@fillcolor}{}}{\let\verb@background\relax}{}%
  \verb@top%
  \@open{div}{style="\verb@style"}\@Verbatim{margin:0pt;padding:0pt;\verb@background}}
  {}
\newcommand{\VerbatimInput}[2][]
  {\@scaninput{\begin{Verbatim}[#1]}{#2}{\end{Verbatim}}}