Skip to content

Commit d904841

Browse files
authoredDec 26, 2024··
Merge pull request #131 from JohannesKaufmann/improve-nested-lists
improve-nested-lists
2 parents 5a52a80 + 0191495 commit d904841

File tree

8 files changed

+305
-5
lines changed

8 files changed

+305
-5
lines changed
 

‎go.mod

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ module github.com/JohannesKaufmann/html-to-markdown/v2
33
go 1.22.1
44

55
require (
6-
github.com/JohannesKaufmann/dom v0.1.1-0.20240706125338-ff9f3b772364
6+
github.com/JohannesKaufmann/dom v0.2.0
77
github.com/agnivade/levenshtein v1.2.0
8-
github.com/andybalholm/cascadia v1.3.2
8+
github.com/andybalholm/cascadia v1.3.3
99
github.com/muesli/termenv v0.15.2
1010
github.com/sebdah/goldie/v2 v2.5.5
1111
github.com/yuin/goldmark v1.7.8
12-
golang.org/x/net v0.32.0
12+
golang.org/x/net v0.33.0
1313
)
1414

1515
require (

‎go.sum

+38
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
github.com/JohannesKaufmann/dom v0.1.1-0.20240706125338-ff9f3b772364 h1:TDlO/A2QqlNhdvH+hDnu8cv1rouhfHgLwhGzJeHGgFQ=
22
github.com/JohannesKaufmann/dom v0.1.1-0.20240706125338-ff9f3b772364/go.mod h1:U+fBZLZTYiZCOwQUT04V3J4I+0TxyLNnj0R8nBlO4fk=
3+
github.com/JohannesKaufmann/dom v0.2.0 h1:1bragmEb19K8lHAqgFgqCpiPCFEZMTXzOIEjuxkUfLQ=
4+
github.com/JohannesKaufmann/dom v0.2.0/go.mod h1:57iSUl5RKric4bUkgos4zu6Xt5LMHUnw3TF1l5CbGZo=
35
github.com/agnivade/levenshtein v1.2.0 h1:U9L4IOT0Y3i0TIlUIDJ7rVUziKi/zPbrJGaFrtYH3SY=
46
github.com/agnivade/levenshtein v1.2.0/go.mod h1:QVVI16kDrtSuwcpd0p1+xMC6Z/VfhtCyDIjcwga4/DU=
57
github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss=
68
github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
9+
github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM=
10+
github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA=
711
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q=
812
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
913
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
@@ -13,6 +17,7 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
1317
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1418
github.com/dgryski/trifles v0.0.0-20230903005119-f50d829f2e54 h1:SG7nF6SRlWhcT7cNTs5R6Hk4V2lcmLz2NsG2VnInyNo=
1519
github.com/dgryski/trifles v0.0.0-20230903005119-f50d829f2e54/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
20+
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
1621
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
1722
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
1823
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
@@ -44,18 +49,35 @@ github.com/yuin/goldmark v1.7.8 h1:iERMLn0/QJeHFhxSt3p6PeN9mGnvIKSpG9YYorDMnic=
4449
github.com/yuin/goldmark v1.7.8/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
4550
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
4651
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
52+
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
53+
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
54+
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
55+
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
4756
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
4857
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
58+
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
59+
golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
60+
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
4961
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
5062
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
5163
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
5264
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
5365
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
66+
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
67+
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
68+
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
69+
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
5470
golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI=
5571
golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs=
72+
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
73+
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
5674
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
5775
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
5876
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
77+
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
78+
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
79+
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
80+
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
5981
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
6082
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
6183
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -64,21 +86,37 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
6486
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
6587
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
6688
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
89+
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
90+
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
91+
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
92+
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
6793
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
6894
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
95+
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
6996
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
7097
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
7198
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
7299
golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
100+
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
101+
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
102+
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
103+
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
104+
golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
73105
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
74106
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
75107
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
76108
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
77109
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
110+
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
111+
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
112+
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
113+
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
78114
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
79115
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
80116
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
81117
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
118+
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
119+
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
82120
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
83121
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
84122
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

‎internal/domutils/list_items.go

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package domutils
2+
3+
import (
4+
"context"
5+
"strings"
6+
7+
"github.com/JohannesKaufmann/dom"
8+
"golang.org/x/net/html"
9+
"golang.org/x/net/html/atom"
10+
)
11+
12+
// MoveListItems moves non-"li" nodes into the previous "li" nodes.
13+
func MoveListItems(ctx context.Context, n *html.Node) {
14+
if n.Type == html.ElementNode && (n.Data == "ol" || n.Data == "ul") {
15+
var previousLi *html.Node
16+
17+
// Collect children to avoid modifying the slice while iterating.
18+
children := dom.AllChildNodes(n)
19+
20+
for _, child := range children {
21+
if child.Type == html.ElementNode && child.Data == "li" {
22+
previousLi = child
23+
} else if child.Type == html.TextNode && strings.TrimSpace(child.Data) == "" {
24+
// Skip the node, probably just formatting of code
25+
} else {
26+
// We expect that inside an "ol"/"ul" there are *only* "li" nodes.
27+
// But sometimes that is not the case...
28+
29+
if previousLi != nil {
30+
// There is a previous "li" node,
31+
// so we move this content into the other "li" node.
32+
n.RemoveChild(child)
33+
34+
previousLi.AppendChild(child)
35+
} else {
36+
// There is no previous "li" node,
37+
// so we wrap this node with it's own "li" node.
38+
39+
newNode := &html.Node{
40+
Type: html.ElementNode,
41+
DataAtom: atom.Li,
42+
Data: "li",
43+
}
44+
previousLi = dom.WrapNode(child, newNode)
45+
}
46+
}
47+
}
48+
}
49+
50+
for c := n.FirstChild; c != nil; c = c.NextSibling {
51+
MoveListItems(ctx, c)
52+
}
53+
}

‎internal/domutils/list_items_test.go

+123
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
package domutils
2+
3+
import (
4+
"context"
5+
"testing"
6+
7+
"github.com/JohannesKaufmann/html-to-markdown/v2/internal/tester"
8+
)
9+
10+
func TestMoveListItems(t *testing.T) {
11+
runs := []struct {
12+
desc string
13+
input string
14+
expected string
15+
}{
16+
{
17+
desc: "not needed in normal list",
18+
input: "<div><ul><li>A</li><li>B</li><li>C</li></ul></div>",
19+
expected: `
20+
├─body
21+
│ ├─div
22+
│ │ ├─ul
23+
│ │ │ ├─li
24+
│ │ │ │ ├─#text "A"
25+
│ │ │ ├─li
26+
│ │ │ │ ├─#text "B"
27+
│ │ │ ├─li
28+
│ │ │ │ ├─#text "C"
29+
`,
30+
},
31+
{
32+
desc: "#text moves into the previous li",
33+
input: "<ul><li>A</li>B</ul>",
34+
expected: `
35+
├─body
36+
│ ├─ul
37+
│ │ ├─li
38+
│ │ │ ├─#text "A"
39+
│ │ │ ├─#text "B"
40+
`,
41+
},
42+
{
43+
desc: "div moves into the previous li",
44+
input: "<ul><li>A</li><div>B</div></ul>",
45+
expected: `
46+
├─body
47+
│ ├─ul
48+
│ │ ├─li
49+
│ │ │ ├─#text "A"
50+
│ │ │ ├─div
51+
│ │ │ │ ├─#text "B"
52+
`,
53+
},
54+
{
55+
desc: "ol moves into the previous li",
56+
input: "<ul><li>A</li><ol><li>B</li></ol></ul>",
57+
expected: `
58+
├─body
59+
│ ├─ul
60+
│ │ ├─li
61+
│ │ │ ├─#text "A"
62+
│ │ │ ├─ol
63+
│ │ │ │ ├─li
64+
│ │ │ │ │ ├─#text "B"
65+
`,
66+
},
67+
{
68+
desc: "no existing li",
69+
input: "<ul><span>A</span><span>B</span></ul>",
70+
expected: `
71+
├─body
72+
│ ├─ul
73+
│ │ ├─li
74+
│ │ │ ├─span
75+
│ │ │ │ ├─#text "A"
76+
│ │ │ ├─span
77+
│ │ │ │ ├─#text "B"
78+
`,
79+
},
80+
{
81+
desc: "basic moved list",
82+
input: `
83+
<ol>
84+
<li>One</li>
85+
<li>Two</li>
86+
<ol>
87+
<li>Two point one</li>
88+
<li>Two point two</li>
89+
</ol>
90+
</ol>
91+
`,
92+
expected: `
93+
├─body
94+
│ ├─ol
95+
│ │ ├─#text "\n\t"
96+
│ │ ├─li
97+
│ │ │ ├─#text "One"
98+
│ │ ├─#text "\n\t"
99+
│ │ ├─li
100+
│ │ │ ├─#text "Two"
101+
│ │ │ ├─ol
102+
│ │ │ │ ├─#text "\n\t\t"
103+
│ │ │ │ ├─li
104+
│ │ │ │ │ ├─#text "Two point one"
105+
│ │ │ │ ├─#text "\n\t\t"
106+
│ │ │ │ ├─li
107+
│ │ │ │ │ ├─#text "Two point two"
108+
│ │ │ │ ├─#text "\n\t"
109+
│ │ ├─#text "\n\t"
110+
│ │ ├─#text "\n"
111+
`,
112+
},
113+
}
114+
for _, run := range runs {
115+
t.Run(run.desc, func(t *testing.T) {
116+
doc := tester.Parse(t, run.input, "")
117+
118+
MoveListItems(context.TODO(), doc)
119+
120+
tester.ExpectRepresentation(t, doc, "output", run.expected)
121+
})
122+
}
123+
}

‎plugin/commonmark/handle_pre_render.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,10 @@ func (c *commonmark) handlePreRender(ctx converter.Context, doc *html.Node) {
8585
domutils.RemoveRedundant(doc, nameIsBothLink)
8686
domutils.SwapTags(ctx, doc, nameIsBoldOrItalic, nameIsLink)
8787

88-
// - - - Headings - - - //
88+
// - - - Heading - - - //
8989
domutils.SwapTags(ctx, doc, nameIsLink, nameIsHeading)
9090
domutils.LeafBlockAlternatives(ctx, doc)
91+
92+
// - - - List - - - //
93+
domutils.MoveListItems(ctx, doc)
9194
}

‎plugin/commonmark/testdata/GoldenFiles/link.out.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ Wir freuen uns über eine [Mail](mailto:hi@example.com?body=Hello%0AJohannes)!
7979
<!--list with link-->
8080

8181
- [a(b)\[c\]](/page.html)
82-
- [a\]](/page.html)
82+
83+
[a\]](/page.html)
8384

8485
<!--TODO: list with paragraph-->
8586

‎plugin/commonmark/testdata/GoldenFiles/list.in.html

+50
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,56 @@
173173
</div>
174174

175175

176+
<!-- nesting -->
177+
<ol>
178+
<ol>
179+
<ol>
180+
<ol>
181+
<ol>
182+
<li>lots of list containers</li>
183+
</ol>
184+
</ol>
185+
</ol>
186+
</ol>
187+
</ol>
188+
189+
<hr />
190+
191+
<ol>
192+
<li>
193+
<ol>
194+
<li>
195+
<ol>
196+
<li>lots of list items</li>
197+
</ol>
198+
</li>
199+
</ol>
200+
</li>
201+
</ol>
202+
203+
204+
<!-- with other elements inside the list -->
205+
<ol>
206+
<div>A 1 (div)</div>
207+
A 2 (#text)
208+
<li>A 3 (li)</li>
209+
A 4 (#text)
210+
211+
<ol>
212+
<li>B 1 (li)</li>
213+
<ol>
214+
<li>C 1 (li)</li>
215+
<div>C 2 (div)</div>
216+
<div>C 3 (div)</div>
217+
</ol>
218+
219+
<div>B 2 (div)</div>
220+
<li>B 3 (li)</li>
221+
</ol>
222+
</ol>
223+
224+
225+
<!-- with breaks -->
176226
<ul>
177227
<li>
178228
<p>Start Line</p>

‎plugin/commonmark/testdata/GoldenFiles/list.out.md

+32
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,38 @@ text between
132132

133133
<!--THE END-->
134134

135+
<!-- nesting -->
136+
137+
1. 1. 1. 1. 1. lots of list containers
138+
139+
* * *
140+
141+
1. 1. 1. lots of list items
142+
143+
<!--THE END-->
144+
145+
<!-- with other elements inside the list -->
146+
147+
1. A 1 (div)
148+
149+
A 2 (#text)
150+
2. A 3 (li) A 4 (#text)
151+
152+
1. B 1 (li)
153+
154+
1. C 1 (li)
155+
156+
C 2 (div)
157+
158+
C 3 (div)
159+
160+
B 2 (div)
161+
2. B 3 (li)
162+
163+
<!--THE END-->
164+
165+
<!-- with breaks -->
166+
135167
- Start Line
136168

137169
End Line

0 commit comments

Comments
 (0)
Please sign in to comment.