From c1c32688a4afc43f6addb99b8b5fa878944a70e3 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Mon, 14 Jan 2019 15:42:48 -0800 Subject: Overhaul in progress, mostly working. Moved all the nomsu packages into lib/, including core/*. Changes to how nomsu environments and importing work. --- lib/core/text.nom | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 lib/core/text.nom (limited to 'lib/core/text.nom') diff --git a/lib/core/text.nom b/lib/core/text.nom new file mode 100644 index 0000000..1351af6 --- /dev/null +++ b/lib/core/text.nom @@ -0,0 +1,78 @@ +#!/usr/bin/env nomsu -V6.14 +# + This file contains some definitions of text escape sequences, including ANSI console + color codes. + +use "core/metaprogramming" +use "core/operators" +use "core/control_flow" + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +test: + assume "\[1, 2, 3]" == "[1, 2, 3]" + assume "foo = \(1 + 2)!" == "foo = 3!" + assume (" + one + two + ") == (" + one + two + ") + assume "nogap" == "nogap" + assume (["x", "y"], joined with ",") == "x,y" + assume (["x", "y"], joined) == "xy" + assume ("BAR", byte 2) == 65 + assume ("BAR", bytes 1 to 2) == [66, 65] + assume ("asdf", capitalized) == "Asdf" + assume ("asdf", uppercase) == "ASDF" + assume ("asdf", with "s" -> "X") == "aXdf" + assume + (" + one + two + + "), lines + ..== ["one", "two", ""] + + ($spec とは $body) parses as ($spec means $body) + +test: + $こんにちは = "こんにちは" + ($ と言う) とは "\($)世界" + assume ($こんにちは と言う) == "こんにちは世界" + +($expr for $match in $text matching $patt) compiles to: + define mangler + return + Lua (" + (function() + local \(mangle "comprehension") = List{} + for \($match as lua expr) in (\($text as lua expr)):gmatch(\($patt as lua expr)) do + \(mangle "comprehension")[#\(mangle "comprehension")+1] = \($expr as lua) + end + return \(mangle "comprehension") + end)() + ") + +test: + assume "\n" == (newline) + +test: + assume (0xDEADBEEF as hex) == "0xDEADBEEF" + +externally ($num as hex) means: + if ($num < 0): + return ("-0x%X", formatted with (- $num)) + ..else: + return ("0x%X", formatted with $num) + +# Text literals +$escapes = { + .nl = "\n", .newline = "\n", .tab = "\t", .bell = "\a", .cr = "\r", ."carriage return" = "\r" + .backspace = "\b", ."form feed" = "\f", .formfeed = "\f", ."vertical tab" = "\v" +} + +for $name = $str in $escapes: + with [$lua = (Lua (quote $str))]: + $(COMPILE RULES).$name = (-> $lua) -- cgit v1.2.3