aboutsummaryrefslogtreecommitdiff
path: root/core/text.nom
blob: d4cd227fc159fc29281c974071a5e89a6a848a8e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/usr/bin/env nomsu -V4.8.10
#
    This file contains some definitions of text escape sequences, including ANSI console
    color codes.

use "core/metaprogramming.nom"
use "core/operators.nom"
use "core/control_flow.nom"

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

test:
    assume "\[1, 2, 3]" == "[1, 2, 3]"
    assume "foo = \(1 + 2)!" == "foo = 3!"
    assume "one\ntwo" == "\
        ..one
        two"
    assume "nogap" == "\
        ..no\
        ..gap"
    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\ntwo\n"::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)

# 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.action.%name = ([]-> %lua)