aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2022-02-16 23:31:41 +0700
committerShulhan <ms@kilabit.info>2022-02-16 23:31:41 +0700
commitbe8999f3656cc8613bddbdbd294f5f111b6f9d0b (patch)
tree879157b6947f9ca6617e35ed704a8dd21c6b7bce
parentba2c636fd48d96e806906258d91816f4626542ae (diff)
downloadasciidoctor-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 "&#10063; bc" instead of "&#10063; abc". This commit fix this issue.
-rw-r--r--element.go12
-rw-r--r--element_test.go54
2 files changed, 64 insertions, 2 deletions
diff --git a/element.go b/element.go
index 933692f..bdaf4c3 100644
--- a/element.go
+++ b/element.go
@@ -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("&#10063; a\n"),
+ expRoles: []string{classNameChecklist},
+ expLevel: 1,
+ }, {
+ desc: "With checked box, using 'x'",
+ line: []byte("* [x] \t a"),
+ expRaw: []byte("&#10003; a\n"),
+ expRoles: []string{classNameChecklist},
+ expLevel: 1,
+ }, {
+ desc: "With checked box, using 'X'",
+ line: []byte("* [X] \t a"),
+ expRaw: []byte("&#10003; a\n"),
+ expRoles: []string{classNameChecklist},
+ expLevel: 1,
+ }, {
+ desc: "With checked box, using '*'",
+ line: []byte("* [*] \t a"),
+ expRaw: []byte("&#10003; 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