packages feed

hscolour-1.14: docs/hscolour/Language/Haskell/HsColour/LaTeX.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
<title>Language/Haskell/HsColour/LaTeX.hs</title>
</head>
<body>
<pre><a name="line-1"></a><font color=Blue>-- | Formats Haskell source code using LaTeX macros.</font>
<a name="line-2"></a><u><font color=Green>module</font></u> Language<font color=Cyan>.</font>Haskell<font color=Cyan>.</font>HsColour<font color=Cyan>.</font>LaTeX <font color=Cyan>(</font>hscolour<font color=Cyan>)</font> <u><font color=Green>where</font></u>
<a name="line-3"></a>
<a name="line-4"></a><u><font color=Green>import</font></u> Language<font color=Cyan>.</font>Haskell<font color=Cyan>.</font>HsColour<font color=Cyan>.</font>Classify <u><font color=Green>as</font></u> Classify
<a name="line-5"></a><u><font color=Green>import</font></u> Language<font color=Cyan>.</font>Haskell<font color=Cyan>.</font>HsColour<font color=Cyan>.</font>Colourise
<a name="line-6"></a><u><font color=Green>import</font></u> Language<font color=Cyan>.</font>Haskell<font color=Cyan>.</font>HsColour<font color=Cyan>.</font>General
<a name="line-7"></a>
<a name="line-8"></a><a name="hscolour"></a><font color=Blue>-- | Formats Haskell source code as a complete LaTeX document.</font>
<a name="line-9"></a>hscolour <font color=Red>::</font> ColourPrefs <font color=Blue>-- ^ Colour preferences.</font>
<a name="line-10"></a>         <font color=Red>-&gt;</font> Bool        <font color=Blue>-- ^ Whether output should be partial (= no prologue).</font>
<a name="line-11"></a>         <font color=Red>-&gt;</font> String      <font color=Blue>-- ^ Haskell source code.</font>
<a name="line-12"></a>         <font color=Red>-&gt;</font> String      <font color=Blue>-- ^ A LaTeX document\/fragment containing the coloured </font>
<a name="line-13"></a>                        <font color=Blue>--   Haskell source code.</font>
<a name="line-14"></a>hscolour pref partial <font color=Red>=</font>
<a name="line-15"></a>  <font color=Cyan>(</font> <u><font color=Green>if</font></u> partial <u><font color=Green>then</font></u> id <u><font color=Green>else</font></u> top'n'tail<font color=Cyan>)</font>
<a name="line-16"></a>  <font color=Cyan>.</font> concatMap <font color=Cyan>(</font>renderToken pref<font color=Cyan>)</font>
<a name="line-17"></a>  <font color=Cyan>.</font> tokenise
<a name="line-18"></a>
<a name="line-19"></a><a name="top'n'tail"></a>top'n'tail <font color=Red>::</font> String <font color=Red>-&gt;</font> String
<a name="line-20"></a>top'n'tail  <font color=Red>=</font> <font color=Cyan>(</font>latexPrefix<font color=Cyan>++</font><font color=Cyan>)</font> <font color=Cyan>.</font> <font color=Cyan>(</font><font color=Cyan>++</font>latexSuffix<font color=Cyan>)</font>
<a name="line-21"></a>
<a name="line-22"></a><a name="renderToken"></a><font color=Blue>-- | Wrap each lexeme in the appropriate LaTeX macro.</font>
<a name="line-23"></a><font color=Blue>--   TODO: filter dangerous characters like "{}_$"</font>
<a name="line-24"></a>renderToken <font color=Red>::</font> ColourPrefs <font color=Red>-&gt;</font> <font color=Cyan>(</font>TokenType<font color=Cyan>,</font>String<font color=Cyan>)</font> <font color=Red>-&gt;</font> String
<a name="line-25"></a>renderToken pref <font color=Cyan>(</font>Space<font color=Cyan>,</font>text<font color=Cyan>)</font> <font color=Red>=</font> filterSpace text
<a name="line-26"></a>renderToken pref <font color=Cyan>(</font>cls<font color=Cyan>,</font>text<font color=Cyan>)</font>   <font color=Red>=</font>
<a name="line-27"></a>  <u><font color=Green>let</font></u> symb <font color=Red>=</font> <u><font color=Green>case</font></u> cls <u><font color=Green>of</font></u>
<a name="line-28"></a>              String <font color=Red>-&gt;</font> <font color=Magenta>"``"</font> <font color=Cyan>++</font> <font color=Cyan>(</font>dropFirst <font color=Magenta>'\"'</font> <font color=Cyan>$</font> dropLast <font color=Magenta>'\"'</font> <font color=Cyan>$</font> text<font color=Cyan>)</font> <font color=Cyan>++</font> <font color=Magenta>"''"</font>
<a name="line-29"></a>              <u><font color=Green>_</font></u>      <font color=Red>-&gt;</font> text
<a name="line-30"></a>      style <font color=Red>=</font> colourise pref cls
<a name="line-31"></a>      <font color=Cyan>(</font>pre<font color=Cyan>,</font> post<font color=Cyan>)</font> <font color=Red>=</font> unzip <font color=Cyan>$</font> map latexHighlight style
<a name="line-32"></a>  <u><font color=Green>in</font></u> concat pre <font color=Cyan>++</font> filterSpecial symb <font color=Cyan>++</font> concat post
<a name="line-33"></a>
<a name="line-34"></a><a name="filterSpace"></a><font color=Blue>-- | Filter white space characters.</font>
<a name="line-35"></a>filterSpace <font color=Red>::</font> String
<a name="line-36"></a>            <font color=Red>-&gt;</font> String
<a name="line-37"></a>filterSpace <font color=Cyan>(</font><font color=Magenta>'\n'</font><b><font color=Red>:</font></b>ss<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'\\'</font><b><font color=Red>:</font></b><font color=Magenta>'\\'</font><b><font color=Red>:</font></b><font color=Cyan>(</font>filterSpace ss<font color=Cyan>)</font>
<a name="line-38"></a>filterSpace <font color=Cyan>(</font><font color=Magenta>' '</font><b><font color=Red>:</font></b>ss<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"\\hsspace "</font><font color=Cyan>++</font><font color=Cyan>(</font>filterSpace ss<font color=Cyan>)</font>
<a name="line-39"></a>filterSpace <font color=Cyan>(</font><font color=Magenta>'\t'</font><b><font color=Red>:</font></b>ss<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"\\hstab "</font><font color=Cyan>++</font><font color=Cyan>(</font>filterSpace ss<font color=Cyan>)</font>
<a name="line-40"></a>filterSpace <font color=Cyan>(</font>c<b><font color=Red>:</font></b>ss<font color=Cyan>)</font>    <font color=Red>=</font> c<b><font color=Red>:</font></b><font color=Cyan>(</font>filterSpace ss<font color=Cyan>)</font>
<a name="line-41"></a>filterSpace []        <font color=Red>=</font> []
<a name="line-42"></a>
<a name="line-43"></a><a name="filterSpecial"></a><font color=Blue>-- | Filters the characters "#$%&amp;~_^\{}" which are special</font>
<a name="line-44"></a><font color=Blue>--   in LaTeX.</font>
<a name="line-45"></a>filterSpecial <font color=Red>::</font> String  <font color=Blue>-- ^ The string to filter. </font>
<a name="line-46"></a>              <font color=Red>-&gt;</font> String  <font color=Blue>-- ^ The LaTeX-safe string.</font>
<a name="line-47"></a>filterSpecial <font color=Cyan>(</font><font color=Magenta>'#'</font><b><font color=Red>:</font></b>cs<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>'\\'</font><b><font color=Red>:</font></b><font color=Magenta>'#'</font><b><font color=Red>:</font></b><font color=Cyan>(</font>filterSpecial cs<font color=Cyan>)</font>
<a name="line-48"></a>filterSpecial <font color=Cyan>(</font><font color=Magenta>'$'</font><b><font color=Red>:</font></b>cs<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>'\\'</font><b><font color=Red>:</font></b><font color=Magenta>'$'</font><b><font color=Red>:</font></b><font color=Cyan>(</font>filterSpecial cs<font color=Cyan>)</font>
<a name="line-49"></a>filterSpecial <font color=Cyan>(</font><font color=Magenta>'%'</font><b><font color=Red>:</font></b>cs<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>'\\'</font><b><font color=Red>:</font></b><font color=Magenta>'%'</font><b><font color=Red>:</font></b><font color=Cyan>(</font>filterSpecial cs<font color=Cyan>)</font>
<a name="line-50"></a>filterSpecial <font color=Cyan>(</font><font color=Magenta>'&amp;'</font><b><font color=Red>:</font></b>cs<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>'\\'</font><b><font color=Red>:</font></b><font color=Magenta>'&amp;'</font><b><font color=Red>:</font></b><font color=Cyan>(</font>filterSpecial cs<font color=Cyan>)</font>
<a name="line-51"></a>filterSpecial <font color=Cyan>(</font><font color=Magenta>'~'</font><b><font color=Red>:</font></b>cs<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"\\tilde{ }"</font><font color=Cyan>++</font><font color=Cyan>(</font>filterSpecial cs<font color=Cyan>)</font>
<a name="line-52"></a>filterSpecial <font color=Cyan>(</font><font color=Magenta>'_'</font><b><font color=Red>:</font></b>cs<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>'\\'</font><b><font color=Red>:</font></b><font color=Magenta>'_'</font><b><font color=Red>:</font></b><font color=Cyan>(</font>filterSpecial cs<font color=Cyan>)</font>
<a name="line-53"></a>filterSpecial <font color=Cyan>(</font><font color=Magenta>'^'</font><b><font color=Red>:</font></b>cs<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"\\ensuremath{\\hat{ }}"</font><font color=Cyan>++</font><font color=Cyan>(</font>filterSpecial cs<font color=Cyan>)</font>
<a name="line-54"></a>filterSpecial <font color=Cyan>(</font><font color=Magenta>'\\'</font><b><font color=Red>:</font></b>cs<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"$\\backslash$"</font><font color=Cyan>++</font><font color=Cyan>(</font>filterSpecial cs<font color=Cyan>)</font>
<a name="line-55"></a>filterSpecial <font color=Cyan>(</font><font color=Magenta>'{'</font><b><font color=Red>:</font></b>cs<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>'\\'</font><b><font color=Red>:</font></b><font color=Magenta>'{'</font><b><font color=Red>:</font></b><font color=Cyan>(</font>filterSpecial cs<font color=Cyan>)</font>
<a name="line-56"></a>filterSpecial <font color=Cyan>(</font><font color=Magenta>'}'</font><b><font color=Red>:</font></b>cs<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>'\\'</font><b><font color=Red>:</font></b><font color=Magenta>'}'</font><b><font color=Red>:</font></b><font color=Cyan>(</font>filterSpecial cs<font color=Cyan>)</font>
<a name="line-57"></a>filterSpecial <font color=Cyan>(</font><font color=Magenta>'|'</font><b><font color=Red>:</font></b>cs<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"\\ensuremath{|}"</font><font color=Cyan>++</font><font color=Cyan>(</font>filterSpecial cs<font color=Cyan>)</font>
<a name="line-58"></a>filterSpecial <font color=Cyan>(</font><font color=Magenta>'&lt;'</font><b><font color=Red>:</font></b><font color=Magenta>'-'</font><b><font color=Red>:</font></b>cs<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"\\ensuremath{\\leftarrow}"</font><font color=Cyan>++</font><font color=Cyan>(</font>filterSpecial cs<font color=Cyan>)</font>
<a name="line-59"></a>filterSpecial <font color=Cyan>(</font><font color=Magenta>'&lt;'</font><b><font color=Red>:</font></b>cs<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"\\ensuremath{\\langle}"</font><font color=Cyan>++</font><font color=Cyan>(</font>filterSpecial cs<font color=Cyan>)</font>
<a name="line-60"></a>filterSpecial <font color=Cyan>(</font><font color=Magenta>'-'</font><b><font color=Red>:</font></b><font color=Magenta>'&gt;'</font><b><font color=Red>:</font></b>cs<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"\\ensuremath{\\rightarrow}"</font><font color=Cyan>++</font><font color=Cyan>(</font>filterSpecial cs<font color=Cyan>)</font>
<a name="line-61"></a>filterSpecial <font color=Cyan>(</font><font color=Magenta>'&gt;'</font><b><font color=Red>:</font></b>cs<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"\\ensuremath{\\rangle}"</font><font color=Cyan>++</font><font color=Cyan>(</font>filterSpecial cs<font color=Cyan>)</font>
<a name="line-62"></a>filterSpecial <font color=Cyan>(</font>c<b><font color=Red>:</font></b>cs<font color=Cyan>)</font>    <font color=Red>=</font> c<b><font color=Red>:</font></b><font color=Cyan>(</font>filterSpecial cs<font color=Cyan>)</font>
<a name="line-63"></a>filterSpecial []        <font color=Red>=</font> []
<a name="line-64"></a>
<a name="line-65"></a>
<a name="line-66"></a><a name="latexHighlight"></a><font color=Blue>-- | Constructs the appropriate LaTeX macro for the given style.</font>
<a name="line-67"></a>latexHighlight <font color=Red>::</font> Highlight <font color=Red>-&gt;</font> <font color=Cyan>(</font>String<font color=Cyan>,</font> String<font color=Cyan>)</font>
<a name="line-68"></a>latexHighlight Normal         <font color=Red>=</font> <font color=Cyan>(</font><font color=Magenta>"{\\rm{}"</font><font color=Cyan>,</font> <font color=Magenta>"}"</font><font color=Cyan>)</font>
<a name="line-69"></a>latexHighlight Bold           <font color=Red>=</font> <font color=Cyan>(</font><font color=Magenta>"{\\bf{}"</font><font color=Cyan>,</font> <font color=Magenta>"}"</font><font color=Cyan>)</font>
<a name="line-70"></a>latexHighlight Dim            <font color=Red>=</font> <font color=Cyan>(</font><font color=Magenta>""</font><font color=Cyan>,</font> <font color=Magenta>""</font><font color=Cyan>)</font>
<a name="line-71"></a>latexHighlight Underscore     <font color=Red>=</font> <font color=Cyan>(</font><font color=Magenta>"\\underline{"</font><font color=Cyan>,</font> <font color=Magenta>"}"</font><font color=Cyan>)</font>
<a name="line-72"></a>latexHighlight Blink          <font color=Red>=</font> <font color=Cyan>(</font><font color=Magenta>""</font><font color=Cyan>,</font> <font color=Magenta>""</font><font color=Cyan>)</font>
<a name="line-73"></a>latexHighlight ReverseVideo   <font color=Red>=</font> <font color=Cyan>(</font><font color=Magenta>""</font><font color=Cyan>,</font> <font color=Magenta>""</font><font color=Cyan>)</font>
<a name="line-74"></a>latexHighlight Concealed      <font color=Red>=</font> <font color=Cyan>(</font><font color=Magenta>"\\conceal{"</font><font color=Cyan>,</font> <font color=Magenta>"}"</font><font color=Cyan>)</font>
<a name="line-75"></a>latexHighlight <font color=Cyan>(</font>Foreground c<font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font><font color=Magenta>"\\textcolor{"</font><font color=Cyan>++</font> latexColour c <font color=Cyan>++</font><font color=Magenta>"}{"</font><font color=Cyan>,</font> <font color=Magenta>"}"</font><font color=Cyan>)</font>
<a name="line-76"></a>latexHighlight <font color=Cyan>(</font>Background c<font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font><font color=Magenta>"\\colorbox{"</font><font color=Cyan>++</font> latexColour c <font color=Cyan>++</font><font color=Magenta>"}{"</font><font color=Cyan>,</font> <font color=Magenta>"}"</font><font color=Cyan>)</font>
<a name="line-77"></a>latexHighlight Italic         <font color=Red>=</font> <font color=Cyan>(</font><font color=Magenta>"{\\it{}"</font><font color=Cyan>,</font> <font color=Magenta>"}"</font><font color=Cyan>)</font>
<a name="line-78"></a>
<a name="line-79"></a><a name="latexColour"></a><font color=Blue>-- | Translate a 'Colour' into a LaTeX colour name.</font>
<a name="line-80"></a>latexColour <font color=Red>::</font> Colour <font color=Red>-&gt;</font> String
<a name="line-81"></a>latexColour Black   <font color=Red>=</font> <font color=Magenta>"black"</font>
<a name="line-82"></a>latexColour Red     <font color=Red>=</font> <font color=Magenta>"red"</font>
<a name="line-83"></a>latexColour Green   <font color=Red>=</font> <font color=Magenta>"green"</font>
<a name="line-84"></a>latexColour Yellow  <font color=Red>=</font> <font color=Magenta>"yellow"</font>
<a name="line-85"></a>latexColour Blue    <font color=Red>=</font> <font color=Magenta>"blue"</font>
<a name="line-86"></a>latexColour Magenta <font color=Red>=</font> <font color=Magenta>"magenta"</font>
<a name="line-87"></a>latexColour Cyan    <font color=Red>=</font> <font color=Magenta>"cyan"</font>
<a name="line-88"></a>latexColour White   <font color=Red>=</font> <font color=Magenta>"white"</font>
<a name="line-89"></a>
<a name="line-90"></a><a name="latexPrefix"></a><font color=Blue>-- | Generic LaTeX document preamble.</font>
<a name="line-91"></a>latexPrefix <font color=Red>=</font> unlines
<a name="line-92"></a>    <font color=Red>[</font><font color=Magenta>"\\documentclass[a4paper, 12pt]{article}"</font>
<a name="line-93"></a>    <font color=Cyan>,</font><font color=Magenta>"\\usepackage[usenames]{color}"</font>
<a name="line-94"></a>    <font color=Cyan>,</font><font color=Magenta>"\\usepackage{hyperref}"</font>
<a name="line-95"></a>    <font color=Cyan>,</font><font color=Magenta>"\\newsavebox{\\spaceb}"</font>
<a name="line-96"></a>    <font color=Cyan>,</font><font color=Magenta>"\\newsavebox{\\tabb}"</font>
<a name="line-97"></a>    <font color=Cyan>,</font><font color=Magenta>"\\savebox{\\spaceb}[1ex]{~}"</font>
<a name="line-98"></a>    <font color=Cyan>,</font><font color=Magenta>"\\savebox{\\tabb}[4ex]{~}"</font>
<a name="line-99"></a>    <font color=Cyan>,</font><font color=Magenta>"\\newcommand{\\hsspace}{\\usebox{\\spaceb}}"</font>
<a name="line-100"></a>    <font color=Cyan>,</font><font color=Magenta>"\\newcommand{\\hstab}{\\usebox{\\tabb}}"</font>
<a name="line-101"></a>    <font color=Cyan>,</font><font color=Magenta>"\\newcommand{\\conceal}[1]{}"</font>
<a name="line-102"></a>    <font color=Cyan>,</font><font color=Magenta>"\\begin{document}"</font>
<a name="line-103"></a>    <font color=Cyan>,</font><font color=Magenta>"\\noindent"</font>
<a name="line-104"></a>    <font color=Red>]</font>
<a name="line-105"></a>
<a name="line-106"></a><a name="latexSuffix"></a><font color=Blue>-- | Generic LaTeX document postamble.</font>
<a name="line-107"></a>latexSuffix <font color=Red>=</font> unlines
<a name="line-108"></a>    <font color=Red>[</font><font color=Magenta>""</font>
<a name="line-109"></a>    <font color=Cyan>,</font><font color=Magenta>"\\end{document}"</font>
<a name="line-110"></a>    <font color=Red>]</font>
</pre>
</body>
</html>