+31
-1
src/escpos/document.gleam
+31
-1
src/escpos/document.gleam
···
66
66
}
67
67
68
68
pub fn build(document: List(Command)) -> CommandBuffer {
69
-
build_ast(document)
69
+
upside_down_pass(document)
70
+
|> build_ast
70
71
|> compile_ast
71
72
|> CommandBuffer
72
73
}
···
121
122
122
123
pub fn font(f: protocol.Font) -> Modifier {
123
124
Font(f)
125
+
}
126
+
127
+
@internal
128
+
pub fn upside_down_pass(commands: List(Command)) -> List(Command) {
129
+
do_upside_down_pass(commands, [])
130
+
|> list.reverse
131
+
}
132
+
133
+
fn do_upside_down_pass(
134
+
commands: List(Command),
135
+
acc: List(Command),
136
+
) -> List(Command) {
137
+
case commands {
138
+
[] -> acc
139
+
[cmd, ..rest] -> {
140
+
case cmd {
141
+
Styled(mods, cmds) -> {
142
+
let styled_acc =
143
+
case set.contains(mods, UpsideDown) {
144
+
True -> do_upside_down_pass(list.reverse(cmds), [])
145
+
False -> do_upside_down_pass(cmds, [])
146
+
}
147
+
|> list.reverse
148
+
do_upside_down_pass(rest, [Styled(mods, styled_acc), ..acc])
149
+
}
150
+
_ -> do_upside_down_pass(rest, [cmd, ..acc])
151
+
}
152
+
}
153
+
}
124
154
}
125
155
126
156
fn build_ast(commands: List(Command)) -> List(AST) {
+93
-58
test/escpos_test.gleam
+93
-58
test/escpos_test.gleam
···
1
1
import escpos
2
+
import escpos/document
2
3
import escpos/printer
3
4
import escpos/protocol
4
5
import gleeunit
···
11
12
printer.connect("localhost", 9100)
12
13
}
13
14
14
-
fn test_print(
15
-
printer: printer.Printer,
16
-
name: String,
17
-
commands: fn(escpos.CommandBuffer) -> escpos.CommandBuffer,
18
-
) {
19
-
escpos.new()
20
-
|> escpos.writeln("----- " <> name)
21
-
|> commands
22
-
|> escpos.new_line
23
-
|> printer.print(printer)
15
+
pub fn upside_down_test() {
16
+
let input = [
17
+
document.write("Hello, World!"),
18
+
document.styled([document.upside_down()], [
19
+
document.write("Hello"),
20
+
document.write("Australia!"),
21
+
document.styled([document.bold()], [
22
+
document.write("Hello"),
23
+
document.write("Joe!"),
24
+
document.styled([document.upside_down()], [
25
+
document.write("Hello"),
26
+
document.write("New Zealand!"),
27
+
]),
28
+
]),
29
+
]),
30
+
]
31
+
let result = [
32
+
document.write("Hello, World!"),
33
+
document.styled([document.upside_down()], [
34
+
document.styled([document.bold()], [
35
+
document.write("Hello"),
36
+
document.write("Joe!"),
37
+
document.styled([document.upside_down()], [
38
+
document.write("New Zealand!"),
39
+
document.write("Hello"),
40
+
]),
41
+
]),
42
+
document.write("Australia!"),
43
+
document.write("Hello"),
44
+
]),
45
+
]
46
+
assert document.upside_down_pass(input) == result
24
47
}
25
48
26
-
pub fn print_test() {
27
-
let assert Ok(printer) = setup_printer()
28
-
29
-
let assert Ok(Nil) =
30
-
test_print(printer, "writeln", escpos.write(_, "Hello, World!"))
31
-
32
-
let assert Ok(Nil) =
33
-
test_print(printer, "font B", fn(b) {
34
-
escpos.set_font(b, protocol.FontB)
35
-
|> escpos.write("Hello, World!")
36
-
|> escpos.reset_font
37
-
})
38
-
39
-
let assert Ok(Nil) =
40
-
test_print(printer, "font C", fn(b) {
41
-
escpos.set_font(b, protocol.FontC)
42
-
|> escpos.write("Hello, World!")
43
-
|> escpos.reset_font
44
-
})
45
-
46
-
let assert Ok(Nil) =
47
-
test_print(printer, "high text size", fn(b) {
48
-
escpos.set_text_size(b, 1, 8)
49
-
|> escpos.write("Hello, World!")
50
-
|> escpos.reset_text_size
51
-
})
52
-
53
-
let assert Ok(Nil) =
54
-
test_print(printer, "wide text size", fn(b) {
55
-
escpos.set_text_size(b, 8, 1)
56
-
|> escpos.write("Hello, World!")
57
-
|> escpos.reset_text_size
58
-
})
59
-
60
-
let assert Ok(Nil) =
61
-
test_print(printer, "large text size", fn(b) {
62
-
escpos.set_text_size(b, 3, 3)
63
-
|> escpos.write("Hello, World!")
64
-
|> escpos.reset_text_size
65
-
})
66
-
67
-
let assert Ok(Nil) =
68
-
test_print(printer, "line feed 5", escpos.line_feed(_, 1))
69
-
70
-
let assert Ok(Nil) = test_print(printer, "partial cut", escpos.partial_cut)
71
-
72
-
printer.disconnect(printer)
73
-
}
49
+
// fn test_print(
50
+
// printer: printer.Printer,
51
+
// name: String,
52
+
// commands: fn(printer.CommandBuffer) -> escpos.CommandBuffer,
53
+
// ) {
54
+
// escpos.new()
55
+
// |> escpos.writeln("----- " <> name)
56
+
// |> commands
57
+
// |> escpos.new_line
58
+
// |> printer.print(printer)
59
+
// }
60
+
//
61
+
// pub fn print_test() {
62
+
// let assert Ok(printer) = setup_printer()
63
+
//
64
+
// let assert Ok(Nil) =
65
+
// test_print(printer, "writeln", escpos.write(_, "Hello, World!"))
66
+
//
67
+
// let assert Ok(Nil) =
68
+
// test_print(printer, "font B", fn(b) {
69
+
// escpos.set_font(b, protocol.FontB)
70
+
// |> escpos.write("Hello, World!")
71
+
// |> escpos.reset_font
72
+
// })
73
+
//
74
+
// let assert Ok(Nil) =
75
+
// test_print(printer, "font C", fn(b) {
76
+
// escpos.set_font(b, protocol.FontC)
77
+
// |> escpos.write("Hello, World!")
78
+
// |> escpos.reset_font
79
+
// })
80
+
//
81
+
// let assert Ok(Nil) =
82
+
// test_print(printer, "high text size", fn(b) {
83
+
// escpos.set_text_size(b, 1, 8)
84
+
// |> escpos.write("Hello, World!")
85
+
// |> escpos.reset_text_size
86
+
// })
87
+
//
88
+
// let assert Ok(Nil) =
89
+
// test_print(printer, "wide text size", fn(b) {
90
+
// escpos.set_text_size(b, 8, 1)
91
+
// |> escpos.write("Hello, World!")
92
+
// |> escpos.reset_text_size
93
+
// })
94
+
//
95
+
// let assert Ok(Nil) =
96
+
// test_print(printer, "large text size", fn(b) {
97
+
// escpos.set_text_size(b, 3, 3)
98
+
// |> escpos.write("Hello, World!")
99
+
// |> escpos.reset_text_size
100
+
// })
101
+
//
102
+
// let assert Ok(Nil) =
103
+
// test_print(printer, "line feed 5", escpos.line_feed(_, 1))
104
+
//
105
+
// let assert Ok(Nil) = test_print(printer, "partial cut", escpos.partial_cut)
106
+
//
107
+
// printer.disconnect(printer)
108
+
// }
74
109
75
110
pub fn protocol_character_size_test() {
76
111
assert protocol.character_size(2, 2) == <<29, "!", 0:1, 1:3, 0:1, 1:3>>