git.iko.soy/typeable/pandoc
on master help sign in
Changes for skylighting-0.5.

This fixes a bug in 2.0.4, whereby pandoc could not read the theme files generated with `--print-highlight-style`. It also fixes some CSS issues involving line numbers. Highlighted code blocks are now enclosed in a div with class sourceCode. Highlighting CSS no longer sets a generic color for pre and code; we only set these for class `sourceCode`. This will close #4133 and #4128.

commit5e039d913f0f8db2e7fc8ea37dee30b174c4594f authorJohn MacFarlane <jgm@berkeley.edu> dateFri 8 Dec 2017, 12:16 (9 years ago) parent1cd785f
9 files changed+106−86
pandoc.cabal+1−1 src/Text/Pandoc/App.hs+2−1 src/Text/Pandoc/Writers/Docx.hs+3−3 src/Text/Pandoc/Writers/Ms.hs+2−2 stack.pkg.yaml+1−1 stack.yaml+1−2 test/lhs-test.html+37−27 test/lhs-test.html+lhs+37−27 test/lhs-test.latex+22−22
pandoc.cabal+1−1
@@ -322,7 +322,7 @@ library
322322 tagsoup >= 0.14.2 && < 0.15,
323323 base64-bytestring >= 0.1 && < 1.1,
324324 zlib >= 0.5 && < 0.7,
325− skylighting >= 0.4.4.1 && < 0.5,
325+ skylighting >= 0.5 && < 0.6,
326326 data-default >= 0.4 && < 0.8,
327327 temporary >= 1.1 && < 1.3,
328328 blaze-html >= 0.5 && < 0.10,
src/Text/Pandoc/App.hs+2−1
@@ -1074,7 +1074,8 @@ options =
10741074 (map T.pack
10751075 ["text-color"
10761076 ,"background-color"
1077− ,"line-numbers"
1077+ ,"line-number-color"
1078+ ,"line-number-background-color"
10781079 ,"bold"
10791080 ,"italic"
10801081 ,"underline"
src/Text/Pandoc/Writers/Docx.hs+3−3
@@ -625,12 +625,12 @@ styleToOpenXml sm style =
625625 [ mknode "w:u" [] () | tokFeature tokenUnderline toktype ]
626626 ]
627627 tokStyles = tokenStyles style
628− tokFeature f toktype = maybe False f $ lookup toktype tokStyles
628+ tokFeature f toktype = maybe False f $ M.lookup toktype tokStyles
629629 tokCol toktype = maybe "auto" (drop 1 . fromColor)
630− $ (tokenColor =<< lookup toktype tokStyles)
630+ $ (tokenColor =<< M.lookup toktype tokStyles)
631631 `mplus` defaultColor style
632632 tokBg toktype = maybe "auto" (drop 1 . fromColor)
633− $ (tokenBackground =<< lookup toktype tokStyles)
633+ $ (tokenBackground =<< M.lookup toktype tokStyles)
634634 `mplus` backgroundColor style
635635 parStyle | hasStyleName "Source Code" (sParaStyleMap sm) = Nothing
636636 | otherwise = Just $
src/Text/Pandoc/Writers/Ms.hs+2−2
@@ -586,7 +586,7 @@ styleToMs sty = vcat $ colordefs ++ map (toMacro sty) alltoktypes
586586 allcolors = catMaybes $ ordNub $
587587 [defaultColor sty, backgroundColor sty,
588588 lineNumberColor sty, lineNumberBackgroundColor sty] ++
589− concatMap (colorsForToken. snd) (tokenStyles sty)
589+ concatMap (colorsForToken. snd) (Map.toList (tokenStyles sty))
590590 colorsForToken ts = [tokenColor ts, tokenBackground ts]
591591
592592hexColor :: Color -> String
@@ -611,7 +611,7 @@ toMacro sty toktype =
611611 resetfont = if tokBold || tokItalic
612612 then text "\\\\f[C]"
613613 else empty
614− tokSty = lookup toktype (tokenStyles sty)
614+ tokSty = Map.lookup toktype (tokenStyles sty)
615615 tokCol = (tokSty >>= tokenColor) `mplus` defaultColor sty
616616 -- tokBg = (tokSty >>= tokenBackground) `mplus` backgroundColor sty
617617 tokBold = fromMaybe False (tokenBold <$> tokSty)
stack.pkg.yaml+1−1
@@ -16,7 +16,7 @@ extra-deps:
1616- pandoc-types-1.17.3
1717- hslua-0.9.3
1818- hslua-module-text-0.1.2
19−- skylighting-0.4.4.1
19+- skylighting-0.5
2020- texmath-0.10
2121- cmark-gfm-0.1.1
2222- QuickCheck-2.10.0.1
stack.yaml+1−2
@@ -5,12 +5,11 @@ flags:
55 old-locale: false
66 network-uri: true
77packages:
8−- '.'
98extra-deps:
109- pandoc-types-1.17.3
1110- hslua-0.9.3
1211- hslua-module-text-0.1.2
13−- skylighting-0.4.4.1
12+- skylighting-0.5
1413- texmath-0.10
1514- cmark-gfm-0.1.1
1615- QuickCheck-2.10.0.1
test/lhs-test.html+37−27
@@ -13,16 +13,24 @@
1313 div.column{display: inline-block; vertical-align: top; width: 50%;}
1414 </style>
1515 <style type="text/css">
16−a.sourceLine { display: inline-block; min-height: 1.25em; }
16+a.sourceLine { display: inline-block; line-height: 1.25; }
1717a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }
18+a.sourceLine:empty { height: 1.2em; position: absolute; }
1819.sourceCode { overflow: visible; }
19−code.sourceCode { white-space: pre; }
20+code.sourceCode { white-space: pre; position: relative; }
21+div.sourceCode { margin: 1em 0; }
22+pre.sourceCode { margin: 0; }
23+@media screen {
24+div.sourceCode { overflow: auto; }
25+}
2026@media print {
2127code.sourceCode { white-space: pre-wrap; }
2228a.sourceLine { text-indent: -1em; padding-left: 1em; }
2329}
2430pre.numberSource a.sourceLine
2531 { position: relative; }
32+pre.numberSource a.sourceLine:empty
33+ { position: absolute; }
2634pre.numberSource a.sourceLine::before
2735 { content: attr(data-line-number);
2836 position: absolute; left: -5em; text-align: right; vertical-align: baseline;
@@ -34,38 +42,40 @@ pre.numberSource a.sourceLine::before
3442 color: #aaaaaa;
3543 }
3644pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
45+div.sourceCode
46+ { }
3747@media screen {
38−a.sourceLine::before { text-decoration: underline; color: initial; }
48+a.sourceLine::before { text-decoration: underline; }
3949}
40−code span.kw { color: #007020; font-weight: bold; } /* Keyword */
41−code span.dt { color: #902000; } /* DataType */
42−code span.dv { color: #40a070; } /* DecVal */
50+code span.al { color: #ff0000; font-weight: bold; } /* Alert */
51+code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
52+code span.at { color: #7d9029; } /* Attribute */
4353code span.bn { color: #40a070; } /* BaseN */
44−code span.fl { color: #40a070; } /* Float */
54+code span.bu { } /* BuiltIn */
55+code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
4556code span.ch { color: #4070a0; } /* Char */
46−code span.st { color: #4070a0; } /* String */
57+code span.cn { color: #880000; } /* Constant */
4758code span.co { color: #60a0b0; font-style: italic; } /* Comment */
48−code span.ot { color: #007020; } /* Other */
49−code span.al { color: #ff0000; font-weight: bold; } /* Alert */
50−code span.fu { color: #06287e; } /* Function */
59+code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
60+code span.do { color: #ba2121; font-style: italic; } /* Documentation */
61+code span.dt { color: #902000; } /* DataType */
62+code span.dv { color: #40a070; } /* DecVal */
5163code span.er { color: #ff0000; font-weight: bold; } /* Error */
52−code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
53−code span.cn { color: #880000; } /* Constant */
54−code span.sc { color: #4070a0; } /* SpecialChar */
55−code span.vs { color: #4070a0; } /* VerbatimString */
56−code span.ss { color: #bb6688; } /* SpecialString */
64+code span.ex { } /* Extension */
65+code span.fl { color: #40a070; } /* Float */
66+code span.fu { color: #06287e; } /* Function */
5767code span.im { } /* Import */
58−code span.va { color: #19177c; } /* Variable */
59−code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
68+code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
69+code span.kw { color: #007020; font-weight: bold; } /* Keyword */
6070code span.op { color: #666666; } /* Operator */
61−code span.bu { } /* BuiltIn */
62−code span.ex { } /* Extension */
71+code span.ot { color: #007020; } /* Other */
6372code span.pp { color: #bc7a00; } /* Preprocessor */
64−code span.at { color: #7d9029; } /* Attribute */
65−code span.do { color: #ba2121; font-style: italic; } /* Documentation */
66−code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
67−code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
68−code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
73+code span.sc { color: #4070a0; } /* SpecialChar */
74+code span.ss { color: #bb6688; } /* SpecialString */
75+code span.st { color: #4070a0; } /* String */
76+code span.va { color: #19177c; } /* Variable */
77+code span.vs { color: #4070a0; } /* VerbatimString */
78+code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
6979 </style>
7080 <!--[if lt IE 9]>
7181 <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
@@ -75,9 +85,9 @@ code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Infor
7585<h1 id="lhs-test">lhs test</h1>
7686<p><code>unsplit</code> is an arrow that takes a pair of values and combines them to
7787return a single value:</p>
78−<pre class="sourceCode literate haskell" id="cb1"><code class="sourceCode haskell"><a class="sourceLine" id="cb1-1" data-line-number="1"><span class="ot">unsplit ::</span> (<span class="dt">Arrow</span> a) <span class="ot">=&gt;</span> (b <span class="ot">-&gt;</span> c <span class="ot">-&gt;</span> d) <span class="ot">-&gt;</span> a (b, c) d</a>
88+<div class="sourceCode" id="cb1"><pre class="sourceCode literate haskell"><code class="sourceCode haskell"><a class="sourceLine" id="cb1-1" data-line-number="1"><span class="ot">unsplit ::</span> (<span class="dt">Arrow</span> a) <span class="ot">=&gt;</span> (b <span class="ot">-&gt;</span> c <span class="ot">-&gt;</span> d) <span class="ot">-&gt;</span> a (b, c) d</a>
7989<a class="sourceLine" id="cb1-2" data-line-number="2">unsplit <span class="fu">=</span> arr <span class="fu">.</span> uncurry</a>
80−<a class="sourceLine" id="cb1-3" data-line-number="3"> <span class="co">-- arr (\op (x,y) -&gt; x `op` y)</span></a></code></pre>
90+<a class="sourceLine" id="cb1-3" data-line-number="3"> <span class="co">-- arr (\op (x,y) -&gt; x `op` y)</span></a></code></pre></div>
8191<p><code>(***)</code> combines two arrows into a new arrow by running the two arrows on a
8292pair of values (one arrow on the first item of the pair and one arrow on the
8393second item of the pair).</p>
test/lhs-test.html+lhs+37−27
@@ -13,16 +13,24 @@
1313 div.column{display: inline-block; vertical-align: top; width: 50%;}
1414 </style>
1515 <style type="text/css">
16−a.sourceLine { display: inline-block; min-height: 1.25em; }
16+a.sourceLine { display: inline-block; line-height: 1.25; }
1717a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }
18+a.sourceLine:empty { height: 1.2em; position: absolute; }
1819.sourceCode { overflow: visible; }
19−code.sourceCode { white-space: pre; }
20+code.sourceCode { white-space: pre; position: relative; }
21+div.sourceCode { margin: 1em 0; }
22+pre.sourceCode { margin: 0; }
23+@media screen {
24+div.sourceCode { overflow: auto; }
25+}
2026@media print {
2127code.sourceCode { white-space: pre-wrap; }
2228a.sourceLine { text-indent: -1em; padding-left: 1em; }
2329}
2430pre.numberSource a.sourceLine
2531 { position: relative; }
32+pre.numberSource a.sourceLine:empty
33+ { position: absolute; }
2634pre.numberSource a.sourceLine::before
2735 { content: attr(data-line-number);
2836 position: absolute; left: -5em; text-align: right; vertical-align: baseline;
@@ -34,38 +42,40 @@ pre.numberSource a.sourceLine::before
3442 color: #aaaaaa;
3543 }
3644pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
45+div.sourceCode
46+ { }
3747@media screen {
38−a.sourceLine::before { text-decoration: underline; color: initial; }
48+a.sourceLine::before { text-decoration: underline; }
3949}
40−code span.kw { color: #007020; font-weight: bold; } /* Keyword */
41−code span.dt { color: #902000; } /* DataType */
42−code span.dv { color: #40a070; } /* DecVal */
50+code span.al { color: #ff0000; font-weight: bold; } /* Alert */
51+code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
52+code span.at { color: #7d9029; } /* Attribute */
4353code span.bn { color: #40a070; } /* BaseN */
44−code span.fl { color: #40a070; } /* Float */
54+code span.bu { } /* BuiltIn */
55+code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
4556code span.ch { color: #4070a0; } /* Char */
46−code span.st { color: #4070a0; } /* String */
57+code span.cn { color: #880000; } /* Constant */
4758code span.co { color: #60a0b0; font-style: italic; } /* Comment */
48−code span.ot { color: #007020; } /* Other */
49−code span.al { color: #ff0000; font-weight: bold; } /* Alert */
50−code span.fu { color: #06287e; } /* Function */
59+code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
60+code span.do { color: #ba2121; font-style: italic; } /* Documentation */
61+code span.dt { color: #902000; } /* DataType */
62+code span.dv { color: #40a070; } /* DecVal */
5163code span.er { color: #ff0000; font-weight: bold; } /* Error */
52−code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
53−code span.cn { color: #880000; } /* Constant */
54−code span.sc { color: #4070a0; } /* SpecialChar */
55−code span.vs { color: #4070a0; } /* VerbatimString */
56−code span.ss { color: #bb6688; } /* SpecialString */
64+code span.ex { } /* Extension */
65+code span.fl { color: #40a070; } /* Float */
66+code span.fu { color: #06287e; } /* Function */
5767code span.im { } /* Import */
58−code span.va { color: #19177c; } /* Variable */
59−code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
68+code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
69+code span.kw { color: #007020; font-weight: bold; } /* Keyword */
6070code span.op { color: #666666; } /* Operator */
61−code span.bu { } /* BuiltIn */
62−code span.ex { } /* Extension */
71+code span.ot { color: #007020; } /* Other */
6372code span.pp { color: #bc7a00; } /* Preprocessor */
64−code span.at { color: #7d9029; } /* Attribute */
65−code span.do { color: #ba2121; font-style: italic; } /* Documentation */
66−code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
67−code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
68−code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
73+code span.sc { color: #4070a0; } /* SpecialChar */
74+code span.ss { color: #bb6688; } /* SpecialString */
75+code span.st { color: #4070a0; } /* String */
76+code span.va { color: #19177c; } /* Variable */
77+code span.vs { color: #4070a0; } /* VerbatimString */
78+code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
6979 </style>
7080 <!--[if lt IE 9]>
7181 <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
@@ -75,9 +85,9 @@ code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Infor
7585<h1 id="lhs-test">lhs test</h1>
7686<p><code>unsplit</code> is an arrow that takes a pair of values and combines them to
7787return a single value:</p>
78−<pre class="sourceCode literate literatehaskell" id="cb1"><code class="sourceCode literatehaskell"><a class="sourceLine" id="cb1-1" data-line-number="1"><span class="ot">&gt; unsplit ::</span> (<span class="dt">Arrow</span> a) <span class="ot">=&gt;</span> (b <span class="ot">-&gt;</span> c <span class="ot">-&gt;</span> d) <span class="ot">-&gt;</span> a (b, c) d</a>
88+<div class="sourceCode" id="cb1"><pre class="sourceCode literate literatehaskell"><code class="sourceCode literatehaskell"><a class="sourceLine" id="cb1-1" data-line-number="1"><span class="ot">&gt; unsplit ::</span> (<span class="dt">Arrow</span> a) <span class="ot">=&gt;</span> (b <span class="ot">-&gt;</span> c <span class="ot">-&gt;</span> d) <span class="ot">-&gt;</span> a (b, c) d</a>
7989<a class="sourceLine" id="cb1-2" data-line-number="2"><span class="ot">&gt;</span> unsplit <span class="fu">=</span> arr <span class="fu">.</span> uncurry</a>
80−<a class="sourceLine" id="cb1-3" data-line-number="3"><span class="ot">&gt;</span> <span class="co">-- arr (\op (x,y) -&gt; x `op` y)</span></a></code></pre>
90+<a class="sourceLine" id="cb1-3" data-line-number="3"><span class="ot">&gt;</span> <span class="co">-- arr (\op (x,y) -&gt; x `op` y)</span></a></code></pre></div>
8191<p><code>(***)</code> combines two arrows into a new arrow by running the two arrows on a
8292pair of values (one arrow on the first item of the pair and one arrow on the
8393second item of the pair).</p>
test/lhs-test.latex+22−22
@@ -39,37 +39,37 @@
3939\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
4040% Add ',fontsize=\small' for more characters per line
4141\newenvironment{Shaded}{}{}
42−\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
43−\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{#1}}
44−\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
42+\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
43+\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
44+\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{#1}}
4545\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
46−\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
47−\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{#1}}
46+\newcommand{\BuiltInTok}[1]{#1}
4847\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
49−\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
50−\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
51−\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
52−\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{#1}}
53−\newcommand{\ImportTok}[1]{#1}
5448\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{#1}}}
55−\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{#1}}}
56−\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
5749\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
58−\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
59−\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{#1}}
60−\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{#1}}
50+\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{#1}}
6151\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
62−\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{#1}}
63−\newcommand{\BuiltInTok}[1]{#1}
52+\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{#1}}
53+\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
54+\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{#1}}}
55+\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
6456\newcommand{\ExtensionTok}[1]{#1}
57+\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
58+\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{#1}}
59+\newcommand{\ImportTok}[1]{#1}
60+\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
61+\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
62+\newcommand{\NormalTok}[1]{#1}
63+\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{#1}}
64+\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
6565\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{#1}}
66−\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{#1}}
6766\newcommand{\RegionMarkerTok}[1]{#1}
68−\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
67+\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
68+\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{#1}}
69+\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
70+\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{#1}}
71+\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
6972\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
70−\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
71−\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
72−\newcommand{\NormalTok}[1]{#1}
7373\setlength{\emergencystretch}{3em} % prevent overfull lines
7474\providecommand{\tightlist}{%
7575 \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}