<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ --> <title>Language/Haskell/HsColour/ANSI.hs</title> <link type='text/css' rel='stylesheet' href='hscolour.css' /> </head> <body> <pre><a name="line-1"></a><span class='hs-comment'>-- | Partially taken from Hugs AnsiScreen.hs library:</span> <a name="line-2"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Language</span><span class='hs-varop'>.</span><span class='hs-conid'>Haskell</span><span class='hs-varop'>.</span><span class='hs-conid'>HsColour</span><span class='hs-varop'>.</span><span class='hs-conid'>ANSI</span> <a name="line-3"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>highlightOn</span> <a name="line-4"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>highlightOff</span> <a name="line-5"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>highlight</span> <a name="line-6"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>cleareol</span><span class='hs-layout'>,</span> <span class='hs-varid'>clearbol</span><span class='hs-layout'>,</span> <span class='hs-varid'>clearline</span><span class='hs-layout'>,</span> <span class='hs-varid'>clearDown</span><span class='hs-layout'>,</span> <span class='hs-varid'>clearUp</span><span class='hs-layout'>,</span> <span class='hs-varid'>cls</span> <a name="line-7"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>goto</span> <a name="line-8"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>cursorUp</span><span class='hs-layout'>,</span> <span class='hs-varid'>cursorDown</span><span class='hs-layout'>,</span> <span class='hs-varid'>cursorLeft</span><span class='hs-layout'>,</span> <span class='hs-varid'>cursorRight</span> <a name="line-9"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>savePosition</span><span class='hs-layout'>,</span> <span class='hs-varid'>restorePosition</span> <a name="line-10"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Highlight</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span> <a name="line-11"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Colour</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span> <a name="line-12"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>colourCycle</span> <a name="line-13"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>enableScrollRegion</span><span class='hs-layout'>,</span> <span class='hs-varid'>scrollUp</span><span class='hs-layout'>,</span> <span class='hs-varid'>scrollDown</span> <a name="line-14"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>lineWrap</span> <a name="line-15"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> <a name="line-16"></a> <a name="line-17"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Language</span><span class='hs-varop'>.</span><span class='hs-conid'>Haskell</span><span class='hs-varop'>.</span><span class='hs-conid'>HsColour</span><span class='hs-varop'>.</span><span class='hs-conid'>ColourHighlight</span> <a name="line-18"></a> <a name="line-19"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>List</span> <span class='hs-layout'>(</span><span class='hs-varid'>intersperse</span><span class='hs-layout'>,</span><span class='hs-varid'>isPrefixOf</span><span class='hs-layout'>)</span> <a name="line-20"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Char</span> <span class='hs-layout'>(</span><span class='hs-varid'>isDigit</span><span class='hs-layout'>)</span> <a name="line-21"></a> <a name="line-22"></a> <a name="line-23"></a><span class='hs-comment'>-- Basic screen control codes:</span> <a name="line-24"></a> <a name="line-25"></a><a name="Pos"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Pos</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-conid'>Int</span><span class='hs-layout'>,</span><span class='hs-conid'>Int</span><span class='hs-layout'>)</span> <a name="line-26"></a> <a name="line-27"></a><a name="at"></a><span class='hs-definition'>at</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Pos</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <a name="line-28"></a><a name="goto"></a><span class='hs-comment'>-- | Move the screen cursor to the given position.</span> <a name="line-29"></a><span class='hs-definition'>goto</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <a name="line-30"></a><a name="home"></a><span class='hs-definition'>home</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <a name="line-31"></a><a name="cls"></a><span class='hs-comment'>-- | Clear the screen.</span> <a name="line-32"></a><span class='hs-definition'>cls</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <a name="line-33"></a> <a name="line-34"></a><span class='hs-definition'>at</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-layout'>,</span><span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>goto</span> <span class='hs-varid'>x</span> <span class='hs-varid'>y</span> <span class='hs-varop'>++</span> <span class='hs-varid'>s</span> <a name="line-35"></a><span class='hs-definition'>goto</span> <span class='hs-varid'>x</span> <span class='hs-varid'>y</span> <span class='hs-keyglyph'>=</span> <span class='hs-chr'>'\ESC'</span><span class='hs-conop'>:</span><span class='hs-chr'>'['</span><span class='hs-conop'>:</span><span class='hs-layout'>(</span><span class='hs-varid'>show</span> <span class='hs-varid'>y</span> <span class='hs-varop'>++</span><span class='hs-layout'>(</span><span class='hs-chr'>';'</span><span class='hs-conop'>:</span><span class='hs-varid'>show</span> <span class='hs-varid'>x</span> <span class='hs-varop'>++</span> <span class='hs-str'>"H"</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <a name="line-36"></a><span class='hs-definition'>home</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>goto</span> <span class='hs-num'>1</span> <span class='hs-num'>1</span> <a name="line-37"></a> <a name="line-38"></a><a name="cursorUp"></a><span class='hs-definition'>cursorUp</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESC[A"</span> <a name="line-39"></a><a name="cursorDown"></a><span class='hs-definition'>cursorDown</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESC[B"</span> <a name="line-40"></a><a name="cursorRight"></a><span class='hs-definition'>cursorRight</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESC[C"</span> <a name="line-41"></a><a name="cursorLeft"></a><span class='hs-definition'>cursorLeft</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESC[D"</span> <a name="line-42"></a> <a name="line-43"></a><a name="cleareol"></a><span class='hs-definition'>cleareol</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESC[K"</span> <a name="line-44"></a><a name="clearbol"></a><span class='hs-definition'>clearbol</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESC[1K"</span> <a name="line-45"></a><a name="clearline"></a><span class='hs-definition'>clearline</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESC[2K"</span> <a name="line-46"></a><a name="clearDown"></a><span class='hs-definition'>clearDown</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESC[J"</span> <a name="line-47"></a><a name="clearUp"></a><span class='hs-definition'>clearUp</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESC[1J"</span> <a name="line-48"></a><span class='hs-comment'>-- Choose whichever of the following lines is suitable for your system:</span> <a name="line-49"></a><span class='hs-definition'>cls</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESC[2J"</span> <span class='hs-comment'>-- for PC with ANSI.SYS</span> <a name="line-50"></a><span class='hs-comment'>--cls = "\^L" -- for Sun window</span> <a name="line-51"></a> <a name="line-52"></a><a name="savePosition"></a><span class='hs-definition'>savePosition</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESC7"</span> <a name="line-53"></a><a name="restorePosition"></a><span class='hs-definition'>restorePosition</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESC8"</span> <a name="line-54"></a> <a name="line-55"></a> <a name="line-56"></a><span class='hs-comment'>-- data Colour -- imported from ColourHighlight</span> <a name="line-57"></a><span class='hs-comment'>-- data Highlight -- imported from ColourHighlight</span> <a name="line-58"></a> <a name="line-59"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Enum</span> <span class='hs-conid'>Highlight</span> <span class='hs-keyword'>where</span> <a name="line-60"></a> <span class='hs-varid'>fromEnum</span> <span class='hs-conid'>Normal</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>0</span> <a name="line-61"></a> <span class='hs-varid'>fromEnum</span> <span class='hs-conid'>Bold</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>1</span> <a name="line-62"></a> <span class='hs-varid'>fromEnum</span> <span class='hs-conid'>Dim</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>2</span> <a name="line-63"></a> <span class='hs-varid'>fromEnum</span> <span class='hs-conid'>Underscore</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>4</span> <a name="line-64"></a> <span class='hs-varid'>fromEnum</span> <span class='hs-conid'>Blink</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>5</span> <a name="line-65"></a> <span class='hs-varid'>fromEnum</span> <span class='hs-conid'>ReverseVideo</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>7</span> <a name="line-66"></a> <span class='hs-varid'>fromEnum</span> <span class='hs-conid'>Concealed</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>8</span> <a name="line-67"></a> <span class='hs-varid'>fromEnum</span> <span class='hs-layout'>(</span><span class='hs-conid'>Foreground</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>30</span> <span class='hs-varop'>+</span> <span class='hs-varid'>fromEnum</span> <span class='hs-varid'>c</span> <a name="line-68"></a> <span class='hs-varid'>fromEnum</span> <span class='hs-layout'>(</span><span class='hs-conid'>Background</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>40</span> <span class='hs-varop'>+</span> <span class='hs-varid'>fromEnum</span> <span class='hs-varid'>c</span> <a name="line-69"></a> <span class='hs-varid'>fromEnum</span> <span class='hs-conid'>Italic</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>2</span> <a name="line-70"></a> <a name="line-71"></a><a name="highlight"></a><span class='hs-comment'>-- | Make the given string appear with all of the listed highlights</span> <a name="line-72"></a><span class='hs-definition'>highlight</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Highlight</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <a name="line-73"></a><span class='hs-definition'>highlight</span> <span class='hs-varid'>attrs</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>highlightOn</span> <span class='hs-varid'>attrs</span> <span class='hs-varop'>++</span> <span class='hs-varid'>s</span> <span class='hs-varop'>++</span> <span class='hs-varid'>highlightOff</span> <a name="line-74"></a> <a name="line-75"></a><a name="highlightOn"></a><span class='hs-definition'>highlightOn</span> <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>highlightOn</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Normal</span><span class='hs-keyglyph'>]</span> <a name="line-76"></a><span class='hs-definition'>highlightOn</span> <span class='hs-varid'>attrs</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESC["</span> <a name="line-77"></a> <span class='hs-varop'>++</span> <span class='hs-varid'>concat</span> <span class='hs-layout'>(</span><span class='hs-varid'>intersperse</span> <span class='hs-str'>";"</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-layout'>(</span><span class='hs-varid'>show</span><span class='hs-varop'>.</span><span class='hs-varid'>fromEnum</span><span class='hs-layout'>)</span> <span class='hs-varid'>attrs</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <a name="line-78"></a> <span class='hs-varop'>++</span><span class='hs-str'>"m"</span> <a name="line-79"></a><a name="highlightOff"></a><span class='hs-definition'>highlightOff</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESC[0m"</span> <a name="line-80"></a> <a name="line-81"></a> <a name="line-82"></a><a name="colourCycle"></a><span class='hs-comment'>-- | An infinite supply of colours.</span> <a name="line-83"></a><span class='hs-definition'>colourCycle</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Colour</span><span class='hs-keyglyph'>]</span> <a name="line-84"></a><span class='hs-definition'>colourCycle</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>cycle</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Red</span><span class='hs-layout'>,</span><span class='hs-conid'>Blue</span><span class='hs-layout'>,</span><span class='hs-conid'>Magenta</span><span class='hs-layout'>,</span><span class='hs-conid'>Green</span><span class='hs-layout'>,</span><span class='hs-conid'>Cyan</span><span class='hs-keyglyph'>]</span> <a name="line-85"></a> <a name="line-86"></a> <a name="line-87"></a><a name="enableScrollRegion"></a><span class='hs-comment'>-- | Scrolling</span> <a name="line-88"></a><span class='hs-definition'>enableScrollRegion</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <a name="line-89"></a><span class='hs-definition'>enableScrollRegion</span> <span class='hs-varid'>start</span> <span class='hs-varid'>end</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESC["</span><span class='hs-varop'>++</span><span class='hs-varid'>show</span> <span class='hs-varid'>start</span><span class='hs-varop'>++</span><span class='hs-chr'>';'</span><span class='hs-conop'>:</span><span class='hs-varid'>show</span> <span class='hs-varid'>end</span><span class='hs-varop'>++</span><span class='hs-str'>"r"</span> <a name="line-90"></a> <a name="line-91"></a><a name="scrollDown"></a><span class='hs-definition'>scrollDown</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESCD"</span> <a name="line-92"></a><a name="scrollUp"></a><span class='hs-definition'>scrollUp</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESCM"</span> <a name="line-93"></a> <a name="line-94"></a><a name="lineWrap"></a><span class='hs-comment'>-- Line-wrapping mode</span> <a name="line-95"></a><span class='hs-definition'>lineWrap</span> <span class='hs-conid'>True</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESC[7h"</span> <a name="line-96"></a><span class='hs-definition'>lineWrap</span> <span class='hs-conid'>False</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"\ESC[7l"</span> <a name="line-97"></a> </pre></body> </html>