diff options
| author | Shulhan <ms@kilabit.info> | 2022-02-16 23:31:41 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2022-02-16 23:31:41 +0700 |
| commit | be8999f3656cc8613bddbdbd294f5f111b6f9d0b (patch) | |
| tree | 879157b6947f9ca6617e35ed704a8dd21c6b7bce | |
| parent | ba2c636fd48d96e806906258d91816f4626542ae (diff) | |
| download | asciidoctor-go-be8999f3656cc8613bddbdbd294f5f111b6f9d0b.tar.xz | |
all: fix list check box text get cut one character
Given the following asciidoc check box markup,
* [ ] abc
It will rendereded as "❏ bc" instead of "❏ abc".
This commit fix this issue.
| -rw-r--r-- | element.go | 12 | ||||
| -rw-r--r-- | element_test.go | 54 |
2 files changed, 64 insertions, 2 deletions
@@ -496,14 +496,22 @@ func (el *element) parseListUnorderedItem(line []byte) { if bytes.Equal(checklist, []byte("[ ]")) { sym = symbolUnchecked } else if bytes.Equal(checklist, []byte("[x]")) || + bytes.Equal(checklist, []byte("[X]")) || bytes.Equal(checklist, []byte("[*]")) { sym = symbolChecked } - if len(sym) > 0 { + if len(sym) != 0 { el.WriteString(sym) el.WriteByte(' ') - line = line[x+2:] el.addRole(classNameChecklist) + x += 3 + for ; x < len(line); x++ { + if line[x] == ' ' || line[x] == '\t' { + continue + } + break + } + } } el.Write(line[x:]) diff --git a/element_test.go b/element_test.go index a53b6ff..8f0f1a4 100644 --- a/element_test.go +++ b/element_test.go @@ -33,6 +33,60 @@ func TestAdocNode_parseListDescriptionItem(t *testing.T) { } } +func TestElement_parseListUnorderedItem(t *testing.T) { + cases := []struct { + desc string + line []byte + expRaw []byte + expRoles []string + expLevel int + }{{ + desc: "With text", + line: []byte("* \t a"), + expRaw: []byte("a\n"), + expLevel: 1, + }, { + desc: "With unchecked box, no text", + line: []byte("* [ ]"), + expRaw: []byte("[ ]\n"), + expLevel: 1, + }, { + desc: "With unchecked box", + line: []byte("* [ ] \t a"), + expRaw: []byte("❏ a\n"), + expRoles: []string{classNameChecklist}, + expLevel: 1, + }, { + desc: "With checked box, using 'x'", + line: []byte("* [x] \t a"), + expRaw: []byte("✓ a\n"), + expRoles: []string{classNameChecklist}, + expLevel: 1, + }, { + desc: "With checked box, using 'X'", + line: []byte("* [X] \t a"), + expRaw: []byte("✓ a\n"), + expRoles: []string{classNameChecklist}, + expLevel: 1, + }, { + desc: "With checked box, using '*'", + line: []byte("* [*] \t a"), + expRaw: []byte("✓ a\n"), + expRoles: []string{classNameChecklist}, + expLevel: 1, + }} + + for _, c := range cases { + el := &element{} + el.raw = el.raw[:0] + el.parseListUnorderedItem(c.line) + + test.Assert(t, c.desc+" - level", c.expLevel, el.level) + test.Assert(t, c.desc+" - roles", c.expRoles, el.roles) + test.Assert(t, c.desc+" - raw", c.expRaw, el.raw) + } +} + func TestAdocNode_postConsumeTable(t *testing.T) { cases := []struct { desc string |
