78 lines
2.1 KiB
Plaintext
78 lines
2.1 KiB
Plaintext
#!/usr/bin/env nomsu -V7.0.0
|
|
###
|
|
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") = a_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"
|
|
|
|
external:
|
|
($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 |