mirror of
https://github.com/carp-lang/Carp.git
synced 2024-10-26 13:51:50 +03:00
core: refactor colorization
This commit is contained in:
parent
5b10412647
commit
ede08bcc72
56
core/Color.carp
Normal file
56
core/Color.carp
Normal 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)))
|
||||||
|
)
|
@ -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")
|
||||||
|
@ -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">(λ [&String, &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">(λ [&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">(λ [&String] ())</p><span></span><p class="doc">prints a string ref to stdout, appends a newline.</p></div><div class="binder"><a href="#read->EOF" class="anchor"><h3 id="read->EOF">read->EOF</h3></a><div class="description">defn</div><p class="sig">(λ [&String] String)</p><pre class="args">(read->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">(λ [&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">(λ [&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">(λ [&String, &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">(λ [&String, &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">(λ [&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">(λ [&String] ())</p><span></span><p class="doc">prints a string ref to stdout, appends a newline.</p></div><div class="binder"><a href="#read->EOF" class="anchor"><h3 id="read->EOF">read->EOF</h3></a><div class="description">defn</div><p class="sig">(λ [&String] String)</p><pre class="args">(read->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">(λ [&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>
|
Loading…
Reference in New Issue
Block a user