kramdown-ansi 0.4.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,11 @@
1
+ # Version information for the Kramdown gem.
2
+ #
3
+ # This module is auto-generated by GemHadar and exposes the
4
+ # current release version as a set of constants. Do not edit it
5
+ # by hand; it is rewritten on every `rake version` invocation.
1
6
  module Kramdown
2
- # Kramdown version
3
- VERSION = '0.4.1'
7
+ # The current version of the Kramdown gem as a String.
8
+ VERSION = '0.6.0'
4
9
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
10
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
11
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
@@ -0,0 +1,28 @@
1
+ HTML Elements
2
+
3
+ Emphasis
4
+
5
+ italic i and italic em
6
+
7
+ Strong
8
+
9
+ bold b and bold strong
10
+
11
+ Strikethrough
12
+
13
+ strikethrough and html s tag and del tag
14
+
15
+ Underline
16
+
17
+ Code
18
+
19
+ tt text
20
+
21
+ Mark
22
+
23
+ marked
24
+
25
+ Passthrough (no style)
26
+
27
+ span text and subscript and superscript
28
+ and small text
@@ -0,0 +1,28 @@
1
+ # HTML Elements
2
+
3
+ ## Emphasis
4
+
5
+ <i>italic i</i> and <em>italic em</em>
6
+
7
+ ## Strong
8
+
9
+ <b>bold b</b> and <strong>bold strong</strong>
10
+
11
+ ## Strikethrough
12
+
13
+ ~~strikethrough~~ and <s>html s tag</s> and <del>del tag</del>
14
+
15
+ ## Underline
16
+
17
+ ## Code
18
+
19
+ <tt>tt text</tt>
20
+
21
+ ## Mark
22
+
23
+ <mark>marked</mark>
24
+
25
+ ## Passthrough (no style)
26
+
27
+ <span>span text</span> and <sub>subscript</sub> and <sup>superscript</sup>
28
+ and <small>small text</small>
@@ -0,0 +1,348 @@
1
+ ╭───┬───╮
2
+ │ A │ B │
3
+ ├───┼───┤
4
+ │ 1 │ 2 │
5
+ ╰───┴───╯
6
+
7
+ Case 00 — Table at Document Start
8
+
9
+ Case 01 — Column Count Mismatch
10
+
11
+ Header has 3 columns, data rows have 5 and 1.
12
+
13
+ ╭──────────┬───┬───┬───┬───╮
14
+ │ A │ B │ C │ │ │
15
+ ├──────────┼───┼───┼───┼───┤
16
+ │ 1 │ 2 │ 3 │ 4 │ 5 │
17
+ ├──────────┼───┼───┼───┼───┤
18
+ │ only-one │ │ │ │ │
19
+ ├──────────┼───┼───┼───┼───┤
20
+ │ a │ b │ c │ d │ │
21
+ ╰──────────┴───┴───┴───┴───╯
22
+
23
+ Case 02 — No Leading / Trailing Pipes
24
+
25
+ GFM allows omitting the outer |. Renderer must still split on inner
26
+ pipes.
27
+
28
+ ╭───┬───┬───╮
29
+ │ A │ B │ C │
30
+ ├───┼───┼───┤
31
+ │ 1 │ 2 │ 3 │
32
+ ├───┼───┼───┤
33
+ │ 4 │ 5 │ 6 │
34
+ ╰───┴───┴───╯
35
+
36
+ Case 03 — Escaped Pipe in Cell
37
+
38
+ \| should render as a literal |, not split the column.
39
+
40
+ ╭───────────────────────┬───────╮
41
+ │ Col │ Value │
42
+ ├───────────────────────┼───────┤
43
+ │ a\|b │ 1 │
44
+ ├───────────────────────┼───────┤
45
+ │ x \| y │ 2 │
46
+ ├───────────────────────┼───────┤
47
+ │ no-escape-but-literal │ pipe │
48
+ ╰───────────────────────┴───────╯
49
+
50
+ Case 04 — Empty Cells
51
+
52
+ ╭──────┬─────┬───────╮
53
+ │ A │ B │ C │
54
+ ├──────┼─────┼───────┤
55
+ │ │ │ │
56
+ ├──────┼─────┼───────┤
57
+ │ left │ │ right │
58
+ ├──────┼─────┼───────┤
59
+ │ │ mid │ │
60
+ ├──────┼─────┼───────┤
61
+ │ │ │ │
62
+ ╰──────┴─────┴───────╯
63
+
64
+ Case 05 — Single-Column Table
65
+
66
+ ╭───────╮
67
+ │ Only │
68
+ ├───────┤
69
+ │ one │
70
+ ├───────┤
71
+ │ two │
72
+ ├───────┤
73
+ │ three │
74
+ ╰───────╯
75
+
76
+ Case 06 — Header + Alignment Only (No Data Rows)
77
+
78
+ not a table
79
+
80
+ | X | Y | Z |
81
+ |:-:|:-:|:-:|
82
+
83
+ Case 07 — Back-to-Back Tables (No Blank Line)
84
+
85
+ ╭─────┬─────╮
86
+ │ T1a │ T1b │
87
+ ├─────┼─────┤
88
+ │ a │ b │
89
+ ╰─────┴─────╯
90
+
91
+ ╭─────┬─────╮
92
+ │ T2a │ T2b │
93
+ ├─────┼─────┤
94
+ │ c │ d │
95
+ ╰─────┴─────╯
96
+
97
+ Case 08 — Full-Width / Variable-Width Unicode
98
+
99
+ CJK, emoji (double-width), combining marks — column widths will lie.
100
+
101
+ ╭─────────┬─────────┬──────────────────────────╮
102
+ │ Char │ Width │ Note │
103
+ ├─────────┼─────────┼──────────────────────────┤
104
+ │ 你 │ 2 cells │ CJK │
105
+ ├─────────┼─────────┼──────────────────────────┤
106
+ │ 💜 │ 2 cells │ Emoji │
107
+ ├─────────┼─────────┼──────────────────────────┤
108
+ │ e\u0301 │ 1+0 │ Combining acute │
109
+ ├─────────┼─────────┼──────────────────────────┤
110
+ │ ☝ │ 2 cells │ DBCS symbol │
111
+ ├─────────┼─────────┼──────────────────────────┤
112
+ │ | │ 1 cell │ Looks like a pipe, isn't │
113
+ ╰─────────┴─────────┴──────────────────────────╯
114
+
115
+ Case 09 — Markdown Inside Cells
116
+
117
+ Bold, italic, code, links, strikethrough, nested.
118
+
119
+ ╭───────────────────┬─────────╮
120
+ │ Cell │ Renders │
121
+ ├───────────────────┼─────────┤
122
+ │ **bold** │ bold │
123
+ ├───────────────────┼─────────┤
124
+ │ *it* │ it │
125
+ ├───────────────────┼─────────┤
126
+ │ `code` │ code │
127
+ ├───────────────────┼─────────┤
128
+ │ [link](https://x) │ ]8;;https://x\link]8;;\ │
129
+ ├───────────────────┼─────────┤
130
+ │ ~~gone~~ │ gone │
131
+ ├───────────────────┼─────────┤
132
+ │ **_both_** │ both │
133
+ ╰───────────────────┴─────────╯
134
+
135
+ Case 10 — Alignment Row Has Wrong Column Count
136
+
137
+ | A | B | C |
138
+ |:-:|:-:|
139
+
140
+ Case 11 — Table Split by Blank Line
141
+
142
+ ╭───┬───╮
143
+ │ A │ B │
144
+ ├───┼───┤
145
+ │ 1 │ 2 │
146
+ ╰───┴───╯
147
+
148
+ ╭───┬───╮
149
+ │ A │ B │
150
+ ├───┼───┤
151
+ │ 3 │ 4 │
152
+ ╰───┴───╯
153
+
154
+ Case 12 — Excessive Whitespace Padding
155
+
156
+ ╭───┬───┬───╮
157
+ │ A │ B │ C │
158
+ ├───┼───┼───┤
159
+ │ 1 │ 2 │ 3 │
160
+ ╰───┴───┴───╯
161
+
162
+ Case 13 — <br> and HTML in Cells
163
+
164
+ ╭──────┬─────────────────────╮
165
+ │ Cell │ Content │
166
+ ├──────┼─────────────────────┤
167
+ │ br │ line1line2 │
168
+ ├──────┼─────────────────────┤
169
+ │ html │ <span>inline</span> │
170
+ ├──────┼─────────────────────┤
171
+ │ both │ bold italic │
172
+ ╰──────┴─────────────────────╯
173
+
174
+ Case 14 — Pipe at Both Ends, Nothing Between
175
+
176
+ ╭───╮
177
+ │ │
178
+ ├───┤
179
+ │ │
180
+ ╰───╯
181
+
182
+ Case 15 — One Data Row, 10 Columns
183
+
184
+ ╭───┬───┬───┬───┬───┬───┬───┬───┬───┬────╮
185
+ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │
186
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼────┤
187
+ │ a │ b │ c │ d │ e │ f │ g │ h │ i │ j │
188
+ ╰───┴───┴───┴───┴───┴───┴───┴───┴───┴────╯
189
+
190
+ Case 16 — Alignment Row with Mixed/Invalid Markers
191
+
192
+ ╭───┬───┬───╮
193
+ │ A │ B │ C │
194
+ ├───┼───┼───┤
195
+ │ l │ r │ d │
196
+ ╰───┴───┴───╯
197
+
198
+ Case 17 — Table at Document Start, Glued to Following Header
199
+
200
+ ╭───┬───╮
201
+ │ a │ b │
202
+ ├───┼───┤
203
+ │ 1 │ 2 │
204
+ ╰───┴───╯
205
+
206
+ next section
207
+
208
+ Case 18 — Table Glued to Preceding Header
209
+
210
+ heading
211
+
212
+ ╭───┬───╮
213
+ │ a │ b │
214
+ ├───┼───┤
215
+ │ 1 │ 2 │
216
+ ╰───┴───╯
217
+
218
+ Case 19 — Single Column, No Trailing Pipe on Header
219
+
220
+ ╭─────────╮
221
+ │ a table │
222
+ ├─────────┤
223
+ │ hi │
224
+ ╰─────────╯
225
+
226
+ Case 20 — Not a Table: Single Pipe Line
227
+
228
+ ╭─────────────╮
229
+ │ not a table │
230
+ ╰─────────────╯
231
+
232
+ Case 21 — Not a Table: Header + Sep, No Body, Missing Closing Pipe
233
+
234
+ |not a table
235
+ |-|
236
+
237
+ Case 22 — Table After Code Block, Glued
238
+
239
+ some code
240
+ 
241
+ ╭───┬───╮
242
+ │ a │ b │
243
+ ├───┼───┤
244
+ │ 1 │ 2 │
245
+ ╰───┴───╯
246
+
247
+ Case 23 — Table After List Item, Glued
248
+
249
+ · item one
250
+
251
+ · item two
252
+
253
+ ╭───┬───╮
254
+ │ a │ b │
255
+ ├───┼───┤
256
+ │ 1 │ 2 │
257
+ ╰───┴───╯
258
+
259
+ Case 24 — No Leading Pipe on Separator
260
+
261
+ ╭───┬───╮
262
+ │ a │ b │
263
+ ╰───┴───╯
264
+
265
+ ╭───┬───┬───╮
266
+ │ │ 1 │ 2 │
267
+ ╰───┴───┴───╯
268
+
269
+ Case 25 — No Leading Pipe on Body Row
270
+
271
+ | a | b |
272
+ |---|---|
273
+
274
+ ╭───┬───╮
275
+ │ 1 │ 2 │
276
+ ╰───┴───╯
277
+
278
+ Case 26 — Indented Table Inside Ordered List
279
+
280
+ 1. Flatten it.
281
+
282
+ ╭─────────┬─────┬───────╮
283
+ │ Service │ Sub │ Value │
284
+ ╰─────────┴─────┴───────╯
285
+
286
+ |:--------|:----|:------|
287
+
288
+ ╭─────────────┬───────────────┬────╮
289
+ │ ollama_chat │ kramdown-ansi │ 🟢 │
290
+ ╰─────────────┴───────────────┴────╯
291
+
292
+ ────────────────────────────────────────────────────────────────────────────────
293
+
294
+ ╭──────┬────────────────────────────────────────────────────────────────╮
295
+ │ Case │ What It Stresses │
296
+ ├──────┼────────────────────────────────────────────────────────────────┤
297
+ │ 01 │ Column count validation / overflow / underflow │
298
+ ├──────┼────────────────────────────────────────────────────────────────┤
299
+ │ 02 │ Pipe-stripping logic (leading/trailing optional) │
300
+ ├──────┼────────────────────────────────────────────────────────────────┤
301
+ │ 03 │ Escape sequence handling (\|) │
302
+ ├──────┼────────────────────────────────────────────────────────────────┤
303
+ │ 04 │ Empty-string cell rendering, border alignment │
304
+ ├──────┼────────────────────────────────────────────────────────────────┤
305
+ │ 05 │ Single-column edge (degenerate table) │
306
+ ├──────┼────────────────────────────────────────────────────────────────┤
307
+ │ 06 │ Zero data rows — does it draw a header-only box? │
308
+ ├──────┼────────────────────────────────────────────────────────────────┤
309
+ │ 07 │ Consecutive tables — does the second become data of the first? │
310
+ ├──────┼────────────────────────────────────────────────────────────────┤
311
+ │ 08 │ Unicode width calculation for column sizing │
312
+ ├──────┼────────────────────────────────────────────────────────────────┤
313
+ │ 09 │ Inline markdown rendering inside a table cell │
314
+ ├──────┼────────────────────────────────────────────────────────────────┤
315
+ │ 10 │ Alignment row with fewer columns than header │
316
+ ├──────┼────────────────────────────────────────────────────────────────┤
317
+ │ 11 │ Blank line splitting one table into two │
318
+ ├──────┼────────────────────────────────────────────────────────────────┤
319
+ │ 12 │ Whitespace normalization / trimming │
320
+ ├──────┼────────────────────────────────────────────────────────────────┤
321
+ │ 13 │ Raw HTML + <br> in cell context │
322
+ ├──────┼────────────────────────────────────────────────────────────────┤
323
+ │ 14 │ Cell with only whitespace — empty or not? │
324
+ ├──────┼────────────────────────────────────────────────────────────────┤
325
+ │ 15 │ Very wide table — does it wrap or overflow? │
326
+ ├──────┼────────────────────────────────────────────────────────────────┤
327
+ │ 16 │ Non-standard alignment markers │
328
+ ├──────┼────────────────────────────────────────────────────────────────┤
329
+ │ 17 │ Table at doc start, glued to following header │
330
+ ├──────┼────────────────────────────────────────────────────────────────┤
331
+ │ 18 │ Table glued to preceding header (no blank before) │
332
+ ├──────┼────────────────────────────────────────────────────────────────┤
333
+ │ 19 │ Single col, missing closing pipe on header │
334
+ ├──────┼────────────────────────────────────────────────────────────────┤
335
+ │ 20 │ Not a table: single pipe line │
336
+ ├──────┼────────────────────────────────────────────────────────────────┤
337
+ │ 21 │ Not a table: header + sep, no body, missing pipe │
338
+ ├──────┼────────────────────────────────────────────────────────────────┤
339
+ │ 22 │ Table after code block, no blank between │
340
+ ├──────┼────────────────────────────────────────────────────────────────┤
341
+ │ 23 │ Table after list item, no blank between │
342
+ ├──────┼────────────────────────────────────────────────────────────────┤
343
+ │ 24 │ No leading pipe on separator row │
344
+ ├──────┼────────────────────────────────────────────────────────────────┤
345
+ │ 25 │ No leading pipe on body row │
346
+ ├──────┼────────────────────────────────────────────────────────────────┤
347
+ │ 26 │ Indented table inside ordered list item │
348
+ ╰──────┴────────────────────────────────────────────────────────────────╯
@@ -0,0 +1,236 @@
1
+ | A | B |
2
+ |---|---|
3
+ | 1 | 2 |
4
+
5
+ ## Case 00 — Table at Document Start
6
+
7
+ ## Case 01 — Column Count Mismatch
8
+
9
+ Header has 3 columns, data rows have 5 and 1.
10
+
11
+ | A | B | C |
12
+ |:-:|:-:|:-:|
13
+ | 1 | 2 | 3 | 4 | 5 |
14
+ | only-one |
15
+ | a | b | c | d |
16
+
17
+ ## Case 02 — No Leading / Trailing Pipes
18
+
19
+ GFM allows omitting the outer `|`. Renderer must still split on inner pipes.
20
+
21
+ | A | B | C
22
+ |:-:|:-:|:-:
23
+ | 1 | 2 | 3
24
+ | 4 | 5 | 6
25
+
26
+ ## Case 03 — Escaped Pipe in Cell
27
+
28
+ `\|` should render as a literal `|`, not split the column.
29
+
30
+ | Col | Value |
31
+ |:----|:------|
32
+ | `a\|b` | 1 |
33
+ | `x \| y` | 2 |
34
+ | no-escape-but-literal | pipe |
35
+
36
+ ## Case 04 — Empty Cells
37
+
38
+ | A | B | C |
39
+ |:-:|:-:|:-:|
40
+ | | | |
41
+ | left | | right |
42
+ | | mid | |
43
+ | | | |
44
+
45
+ ## Case 05 — Single-Column Table
46
+
47
+ | Only |
48
+ |:-----|
49
+ | one |
50
+ | two |
51
+ | three |
52
+
53
+ ## Case 06 — Header + Alignment Only (No Data Rows)
54
+
55
+ not a table
56
+
57
+ | X | Y | Z |
58
+ |:-:|:-:|:-:|
59
+
60
+ ## Case 07 — Back-to-Back Tables (No Blank Line)
61
+
62
+ | T1a | T1b |
63
+ |:----|:----|
64
+ | a | b |
65
+ | T2a | T2b |
66
+ |:----|:----|
67
+ | c | d |
68
+
69
+ ## Case 08 — Full-Width / Variable-Width Unicode
70
+
71
+ CJK, emoji (double-width), combining marks — column widths will *lie*.
72
+
73
+ | Char | Width | Note |
74
+ |:-----|:------|:-----|
75
+ | `你` | 2 cells | CJK |
76
+ | `💜` | 2 cells | Emoji |
77
+ | `e\u0301` | 1+0 | Combining acute |
78
+ | `☝` | 2 cells | DBCS symbol |
79
+ | `|` | 1 cell | Looks like a pipe, isn't |
80
+
81
+ ## Case 09 — Markdown *Inside* Cells
82
+
83
+ Bold, italic, code, links, strikethrough, nested.
84
+
85
+ | Cell | Renders |
86
+ |:-----|:--------|
87
+ | `**bold**` | **bold** |
88
+ | `*it*` | *it* |
89
+ | `` `code` `` | `code` |
90
+ | `[link](https://x)` | [link](https://x) |
91
+ | `~~gone~~` | ~~gone~~ |
92
+ | `**_both_**` | **_both_** |
93
+
94
+ ## Case 10 — Alignment Row Has Wrong Column Count
95
+
96
+ | A | B | C |
97
+ |:-:|:-:|
98
+
99
+ ## Case 11 — Table Split by Blank Line
100
+
101
+ | A | B |
102
+ |:-:|:-:|
103
+ | 1 | 2 |
104
+
105
+ | A | B |
106
+ |:-:|:-:|
107
+ | 3 | 4 |
108
+
109
+ ## Case 12 — Excessive Whitespace Padding
110
+
111
+ | A | B | C |
112
+ | :---: | :---: | :---: |
113
+ | 1 | 2 | 3 |
114
+
115
+ ## Case 13 — `<br>` and HTML in Cells
116
+
117
+ | Cell | Content |
118
+ |:-----|:--------|
119
+ | br | line1<br>line2 |
120
+ | html | `<span>inline</span>` |
121
+ | both | **bold** <br> *italic* |
122
+
123
+ ## Case 14 — Pipe at Both Ends, Nothing Between
124
+
125
+ | |
126
+ |:-:|
127
+ | |
128
+
129
+ ## Case 15 — One Data Row, 10 Columns
130
+
131
+ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
132
+ |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:--:|
133
+ | a | b | c | d | e | f | g | h | i | j |
134
+
135
+ ## Case 16 — Alignment Row with Mixed/Invalid Markers
136
+
137
+ | A | B | C |
138
+ |:--|--:|---|
139
+ | l | r | d |
140
+
141
+ ## Case 17 — Table at Document Start, Glued to Following Header
142
+
143
+ | a | b |
144
+ |---|---|
145
+ | 1 | 2 |
146
+ # next section
147
+
148
+ ## Case 18 — Table Glued to Preceding Header
149
+
150
+ # heading
151
+ | a | b |
152
+ |---|---|
153
+ | 1 | 2 |
154
+
155
+ ## Case 19 — Single Column, No Trailing Pipe on Header
156
+
157
+ | a table
158
+ |-|
159
+ |hi|
160
+
161
+ ## Case 20 — Not a Table: Single Pipe Line
162
+
163
+ |not a table
164
+
165
+ ## Case 21 — Not a Table: Header + Sep, No Body, Missing Closing Pipe
166
+
167
+ |not a table
168
+ |-|
169
+
170
+ ## Case 22 — Table After Code Block, Glued
171
+
172
+ ```
173
+ some code
174
+ ```
175
+ | a | b |
176
+ |---|---|
177
+ | 1 | 2 |
178
+
179
+ ## Case 23 — Table After List Item, Glued
180
+
181
+ - item one
182
+ - item two
183
+ | a | b |
184
+ |---|---|
185
+ | 1 | 2 |
186
+
187
+ ## Case 24 — No Leading Pipe on Separator
188
+
189
+ | a | b |
190
+ :---|---:
191
+ | 1 | 2 |
192
+
193
+ ## Case 25 — No Leading Pipe on Body Row
194
+
195
+ | a | b |
196
+ |---|---|
197
+ 1 | 2
198
+
199
+ ## Case 26 — Indented Table Inside Ordered List
200
+
201
+ 1. **Flatten it.**
202
+
203
+ | Service | Sub | Value |
204
+ |:--------|:----|:------|
205
+ | `ollama_chat` | `kramdown-ansi` | 🟢 |
206
+
207
+ ---
208
+
209
+ | Case | What It Stresses |
210
+ |:-----|:-----------------|
211
+ | 01 | Column count validation / overflow / underflow |
212
+ | 02 | Pipe-stripping logic (leading/trailing optional) |
213
+ | 03 | Escape sequence handling (`\|`) |
214
+ | 04 | Empty-string cell rendering, border alignment |
215
+ | 05 | Single-column edge (degenerate table) |
216
+ | 06 | Zero data rows — does it draw a header-only box? |
217
+ | 07 | Consecutive tables — does the second become data of the first? |
218
+ | 08 | Unicode width calculation for column sizing |
219
+ | 09 | Inline markdown rendering *inside* a table cell |
220
+ | 10 | Alignment row with fewer columns than header |
221
+ | 11 | Blank line splitting one table into two |
222
+ | 12 | Whitespace normalization / trimming |
223
+ | 13 | Raw HTML + `<br>` in cell context |
224
+ | 14 | Cell with only whitespace — empty or not? |
225
+ | 15 | Very wide table — does it wrap or overflow? |
226
+ | 16 | Non-standard alignment markers |
227
+ | 17 | Table at doc start, glued to following header |
228
+ | 18 | Table glued to preceding header (no blank before) |
229
+ | 19 | Single col, missing closing pipe on header |
230
+ | 20 | Not a table: single pipe line |
231
+ | 21 | Not a table: header + sep, no body, missing pipe |
232
+ | 22 | Table after code block, no blank between |
233
+ | 23 | Table after list item, no blank between |
234
+ | 24 | No leading pipe on separator row |
235
+ | 25 | No leading pipe on body row |
236
+ | 26 | Indented table inside ordered list item |
@@ -1,5 +1,3 @@
1
- require 'spec_helper'
2
-
3
1
  describe Kramdown::ANSI::Pager do
4
2
  let :command do
5
3
  'cat'
@@ -1,6 +1,3 @@
1
- require 'spec_helper'
2
-
3
-
4
1
  describe Kramdown::ANSI::Styles do
5
2
  describe '.from_json' do
6
3
  it 'configures styles from JSON' do