core: refactor colorization

This commit is contained in:
hellerve 2018-08-06 17:19:39 +02:00
parent 5b10412647
commit ede08bcc72
3 changed files with 59 additions and 48 deletions

56
core/Color.carp Normal file
View File

@ -0,0 +1,56 @@
(defmodule Color
(hidden table)
(def table
[[@"black" @"30"]
[@"red" @"31"]
[@"green" @"32"]
[@"yellow" @"33"]
[@"blue" @"34"]
[@"magenta" @"35"]
[@"cyan" @"36"]
[@"white" @"37"]
[@"reset" @"0"]
[@"none" @"0"]
[@"bold" @"1"]
[@"italic" @"3"]
[@"underline" @"4"]
[@"blink-slow" @"5"]
[@"blink-rapid" @"6"]
[@"bg-black" @"40"]
[@"bg-red" @"41"]
[@"bg-green" @"42"]
[@"bg-yellow" @"43"]
[@"bg-blue" @"44"]
[@"bg-magenta" @"45"]
[@"bg-cyan" @"46"]
[@"bg-white" @"47"]])
(hidden len-table)
(def len-table (Array.length &table))
(doc color "Generates ANSI coloration.")
(defn color [cname]
(let [res ""]
(do
(for [i 0 len-table]
(if (String.= cname (Array.nth (Array.nth &table i) 0))
(do
(set! res (Array.nth (Array.nth &table i) 1))
(break))
()))
(String.append "\x1b[" &(String.append res "m")))))
(doc colorize "Wraps a string in ANSI coloration and prints it.")
(defn colorize [cname s]
(String.append &(color cname) &(String.append s &(color "reset"))))
)
(defmodule IO
(doc color "Sets the output color using ANSI.")
(defn color [cname]
(print &(Color.color cname)))
(doc colorize "Wraps a string in ANSI coloration and prints it.")
(defn colorize [cname s]
(print &(Color.colorize cname s)))
)

View File

@ -1,47 +1,4 @@
(defmodule IO (load "Color.carp")
(hidden color-table)
(def color-table
[[@"black" @"30"]
[@"red" @"31"]
[@"green" @"32"]
[@"yellow" @"33"]
[@"blue" @"34"]
[@"magenta" @"35"]
[@"cyan" @"36"]
[@"white" @"37"]
[@"reset" @"0"]
[@"none" @"0"]
[@"bold" @"1"]
[@"italic" @"3"]
[@"underline" @"4"]
[@"blink-slow" @"5"]
[@"blink-rapid" @"6"]
[@"bg-black" @"40"]
[@"bg-red" @"41"]
[@"bg-green" @"42"]
[@"bg-yellow" @"43"]
[@"bg-blue" @"44"]
[@"bg-magenta" @"45"]
[@"bg-cyan" @"46"]
[@"bg-white" @"47"]])
(hidden len-color-table)
(def len-color-table (Array.length &color-table))
(hidden color-name-to-ansi)
(defn color-name-to-ansi [cname]
(let [res @""]
(do
(for [i 0 len-color-table]
(if (String.= cname (Array.nth (Array.nth &color-table i) 0))
(set! res @(Array.nth (Array.nth &color-table i) 1))
()))
(StringCopy.append @"\x1b[" (StringCopy.append res @"m")))))
(hidden color)
(defn color [cname]
(print &(color-name-to-ansi cname)))
)
(defmodule Test (defmodule Test
(deftype State [passed Int, failed Int]) (deftype State [passed Int, failed Int])
@ -50,9 +7,7 @@
(defn handler [state expected actual descr what op] (defn handler [state expected actual descr what op]
(if (op expected actual) (if (op expected actual)
(do (do
(IO.color "green") (IO.colorize "green" &(str* @"Test '" @descr @"' passed\n"))
(IO.println &(str* @"Test '" @descr @"' passed"))
(IO.color "reset")
(State.update-passed (State.copy state) Int.inc)) (State.update-passed (State.copy state) Int.inc))
(do (do
(IO.color "red") (IO.color "red")

View File

@ -1 +1 @@
<html><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"><link href="carp_style.css" rel="stylesheet"></head><body><div class="content"><div class="logo"><a href="http://github.com/carp-lang/Carp"><img src="logo.png"></a><div class="title">core</div><div class="index"><ul><li><a href="Dynamic.html">Dynamic</a></li><li><a href="Int.html">Int</a></li><li><a href="Long.html">Long</a></li><li><a href="Bool.html">Bool</a></li><li><a href="Float.html">Float</a></li><li><a href="Double.html">Double</a></li><li><a href="Vector2.html">Vector2</a></li><li><a href="V2.html">V2</a></li><li><a href="Vector3.html">Vector3</a></li><li><a href="V3.html">V3</a></li><li><a href="VectorN.html">VectorN</a></li><li><a href="VN.html">VN</a></li><li><a href="Geometry.html">Geometry</a></li><li><a href="Statistics.html">Statistics</a></li><li><a href="String.html">String</a></li><li><a href="Char.html">Char</a></li><li><a href="Pattern.html">Pattern</a></li><li><a href="Array.html">Array</a></li><li><a href="IO.html">IO</a></li><li><a href="System.html">System</a></li><li><a href="Debug.html">Debug</a></li><li><a href="Test.html">Test</a></li><li><a href="Bench.html">Bench</a></li><li><a href="Map.html">Map</a></li></ul></div></div><h1>IO</h1><div class="binder"><a href="#EOF" class="anchor"><h3 id="EOF">EOF</h3></a><div class="description">external</div><p class="sig">Char</p><span></span><p class="doc">the End-Of-File character as a literal.</p></div><div class="binder"><a href="#exit" class="anchor"><h3 id="exit">exit</h3></a><div class="description">external</div><p class="sig">(λ [Int] a)</p><span></span><p class="doc">exit the current program with a return code.</p></div><div class="binder"><a href="#fclose" class="anchor"><h3 id="fclose">fclose</h3></a><div class="description">external</div><p class="sig">(λ [(Ptr FILE)] ())</p><span></span><p class="doc">closes a file pointer.</p></div><div class="binder"><a href="#fgetc" class="anchor"><h3 id="fgetc">fgetc</h3></a><div class="description">external</div><p class="sig">(λ [(Ptr FILE)] Char)</p><span></span><p class="doc">gets a character from a file pointer.</p></div><div class="binder"><a href="#fopen" class="anchor"><h3 id="fopen">fopen</h3></a><div class="description">external</div><p class="sig">(λ [&amp;String, &amp;String] (Ptr FILE))</p><span></span><p class="doc">opens a file by name using a mode (one or multiple of [r]ead, [w]rite, and [a]ppend), returns a file pointer.</p></div><div class="binder"><a href="#fwrite" class="anchor"><h3 id="fwrite">fwrite</h3></a><div class="description">external</div><p class="sig">(λ [a, Int, Int, (Ptr FILE)] ())</p><span></span><p class="doc">writes to a file pointer.</p></div><div class="binder"><a href="#get-char" class="anchor"><h3 id="get-char">get-char</h3></a><div class="description">external</div><p class="sig">(λ [] Char)</p><span></span><p class="doc">gets a character from stdin.</p></div><div class="binder"><a href="#get-line" class="anchor"><h3 id="get-line">get-line</h3></a><div class="description">external</div><p class="sig">(λ [] String)</p><span></span><p class="doc">gets a line from stdin.</p></div><div class="binder"><a href="#print" class="anchor"><h3 id="print">print</h3></a><div class="description">external</div><p class="sig">(λ [&amp;String] ())</p><span></span><p class="doc">prints a string ref to stdout, does not append a newline.</p></div><div class="binder"><a href="#println" class="anchor"><h3 id="println">println</h3></a><div class="description">external</div><p class="sig">(λ [&amp;String] ())</p><span></span><p class="doc">prints a string ref to stdout, appends a newline.</p></div><div class="binder"><a href="#read-&gt;EOF" class="anchor"><h3 id="read-&gt;EOF">read-&gt;EOF</h3></a><div class="description">defn</div><p class="sig">(λ [&amp;String] String)</p><pre class="args">(read-&gt;EOF filename)</pre><p class="doc">reads a file given by name until the End-Of-File character is reached.</p></div><div class="binder"><a href="#read-file" class="anchor"><h3 id="read-file">read-file</h3></a><div class="description">external</div><p class="sig">(λ [&amp;String] String)</p><span></span><p class="doc">returns the contents of a file passed as argument as a string.</p></div></div></body></html> <html><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"><link href="carp_style.css" rel="stylesheet"></head><body><div class="content"><div class="logo"><a href="http://github.com/carp-lang/Carp"><img src="logo.png"></a><div class="title">core</div><div class="index"><ul><li><a href="Dynamic.html">Dynamic</a></li><li><a href="Int.html">Int</a></li><li><a href="Long.html">Long</a></li><li><a href="Bool.html">Bool</a></li><li><a href="Float.html">Float</a></li><li><a href="Double.html">Double</a></li><li><a href="Vector2.html">Vector2</a></li><li><a href="V2.html">V2</a></li><li><a href="Vector3.html">Vector3</a></li><li><a href="V3.html">V3</a></li><li><a href="VectorN.html">VectorN</a></li><li><a href="VN.html">VN</a></li><li><a href="Geometry.html">Geometry</a></li><li><a href="Statistics.html">Statistics</a></li><li><a href="String.html">String</a></li><li><a href="Char.html">Char</a></li><li><a href="Pattern.html">Pattern</a></li><li><a href="Array.html">Array</a></li><li><a href="IO.html">IO</a></li><li><a href="System.html">System</a></li><li><a href="Debug.html">Debug</a></li><li><a href="Test.html">Test</a></li><li><a href="Bench.html">Bench</a></li><li><a href="Map.html">Map</a></li></ul></div></div><h1>IO</h1><div class="binder"><a href="#EOF" class="anchor"><h3 id="EOF">EOF</h3></a><div class="description">external</div><p class="sig">Char</p><span></span><p class="doc">the End-Of-File character as a literal.</p></div><div class="binder"><a href="#color" class="anchor"><h3 id="color">color</h3></a><div class="description">defn</div><p class="sig">(λ [&amp;String] ())</p><pre class="args">(color cname)</pre><p class="doc">Sets the output color using ANSI.</p></div><div class="binder"><a href="#colorize" class="anchor"><h3 id="colorize">colorize</h3></a><div class="description">defn</div><p class="sig">(λ [&amp;String, &amp;String] ())</p><pre class="args">(colorize cname s)</pre><p class="doc">Wraps a string in ANSI coloration and prints it.</p></div><div class="binder"><a href="#exit" class="anchor"><h3 id="exit">exit</h3></a><div class="description">external</div><p class="sig">(λ [Int] a)</p><span></span><p class="doc">exit the current program with a return code.</p></div><div class="binder"><a href="#fclose" class="anchor"><h3 id="fclose">fclose</h3></a><div class="description">external</div><p class="sig">(λ [(Ptr FILE)] ())</p><span></span><p class="doc">closes a file pointer.</p></div><div class="binder"><a href="#fgetc" class="anchor"><h3 id="fgetc">fgetc</h3></a><div class="description">external</div><p class="sig">(λ [(Ptr FILE)] Char)</p><span></span><p class="doc">gets a character from a file pointer.</p></div><div class="binder"><a href="#fopen" class="anchor"><h3 id="fopen">fopen</h3></a><div class="description">external</div><p class="sig">(λ [&amp;String, &amp;String] (Ptr FILE))</p><span></span><p class="doc">opens a file by name using a mode (one or multiple of [r]ead, [w]rite, and [a]ppend), returns a file pointer.</p></div><div class="binder"><a href="#fwrite" class="anchor"><h3 id="fwrite">fwrite</h3></a><div class="description">external</div><p class="sig">(λ [a, Int, Int, (Ptr FILE)] ())</p><span></span><p class="doc">writes to a file pointer.</p></div><div class="binder"><a href="#get-char" class="anchor"><h3 id="get-char">get-char</h3></a><div class="description">external</div><p class="sig">(λ [] Char)</p><span></span><p class="doc">gets a character from stdin.</p></div><div class="binder"><a href="#get-line" class="anchor"><h3 id="get-line">get-line</h3></a><div class="description">external</div><p class="sig">(λ [] String)</p><span></span><p class="doc">gets a line from stdin.</p></div><div class="binder"><a href="#print" class="anchor"><h3 id="print">print</h3></a><div class="description">external</div><p class="sig">(λ [&amp;String] ())</p><span></span><p class="doc">prints a string ref to stdout, does not append a newline.</p></div><div class="binder"><a href="#println" class="anchor"><h3 id="println">println</h3></a><div class="description">external</div><p class="sig">(λ [&amp;String] ())</p><span></span><p class="doc">prints a string ref to stdout, appends a newline.</p></div><div class="binder"><a href="#read-&gt;EOF" class="anchor"><h3 id="read-&gt;EOF">read-&gt;EOF</h3></a><div class="description">defn</div><p class="sig">(λ [&amp;String] String)</p><pre class="args">(read-&gt;EOF filename)</pre><p class="doc">reads a file given by name until the End-Of-File character is reached.</p></div><div class="binder"><a href="#read-file" class="anchor"><h3 id="read-file">read-file</h3></a><div class="description">external</div><p class="sig">(λ [&amp;String] String)</p><span></span><p class="doc">returns the contents of a file passed as argument as a string.</p></div></div></body></html>