Skip to content

Commit

Permalink
🎨 Protyle Support input superscript/subscript via <sup>/<sub> siy…
Browse files Browse the repository at this point in the history
  • Loading branch information
88250 committed Apr 26, 2024
1 parent af196e6 commit 3786f77
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 5 deletions.
2 changes: 1 addition & 1 deletion javascript/lute.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion javascript/lute.min.js.map

Large diffs are not rendered by default.

8 changes: 8 additions & 0 deletions parse/code_span.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,10 @@ func (t *Tree) parseCodeSpan(block *ast.Node, ctx *InlineContext) (ret *ast.Node
content.WriteString("</kbd>")
} else if "u" == n.TextMarkType {
content.WriteString("</u>")
} else if "sup" == n.TextMarkType {
content.WriteString("</sup>")
} else if "sub" == n.TextMarkType {
content.WriteString("</sub>")
}
}
return ast.WalkContinue
Expand All @@ -89,6 +93,10 @@ func (t *Tree) parseCodeSpan(block *ast.Node, ctx *InlineContext) (ret *ast.Node
content.WriteString("<kbd>")
} else if "u" == n.TextMarkType {
content.WriteString("<u>")
} else if "sup" == n.TextMarkType {
content.WriteString("<sup>")
} else if "sub" == n.TextMarkType {
content.WriteString("<sub>")
}

content.WriteString(n.TextMarkTextContent)
Expand Down
8 changes: 7 additions & 1 deletion parse/inline_html.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,12 @@ func (t *Tree) parseInlineHTML(ctx *InlineContext) (ret *ast.Node) {
} else if bytes.Equal(tags, []byte("<u>")) {
ret = t.processSpanTag(tags, "<u>", "</u>", ctx)
return
} else if bytes.Equal(tags, []byte("<sup>")) {
ret = t.processSpanTag(tags, "<sup>", "</sup>", ctx)
return
} else if bytes.Equal(tags, []byte("<sub>")) {
ret = t.processSpanTag(tags, "<sub>", "</sub>", ctx)
return
}
}
ret = &ast.Node{Type: ast.NodeInlineHTML, Tokens: tags}
Expand Down Expand Up @@ -165,7 +171,7 @@ func (t *Tree) processSpanTag(tags []byte, startTag, endTag string, ctx *InlineC

var typ string
startTagLen := len(startTag)
if "<kbd>" == startTag || "<u>" == startTag {
if "<kbd>" == startTag || "<u>" == startTag || "<sup>" == startTag || "<sub>" == startTag {
if !t.Context.ParseOption.HTMLTag2TextMark {
ret = &ast.Node{Type: ast.NodeInlineHTML, Tokens: tags}
return
Expand Down
2 changes: 2 additions & 0 deletions test/p2p_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ import (

var inlineMd2BlockDOM = []parseTest{

{"4", "<sub>foo</sub>", "<div data-node-id=\"20060102150405-1a2b3c4\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\"><div contenteditable=\"true\" spellcheck=\"false\"><span data-type=\"sub\">foo</span></div><div class=\"protyle-attr\" contenteditable=\"false\">\u200b</div></div>"},
{"3", "<sup>foo</sup>", "<div data-node-id=\"20060102150405-1a2b3c4\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\"><div contenteditable=\"true\" spellcheck=\"false\"><span data-type=\"sup\">foo</span></div><div class=\"protyle-attr\" contenteditable=\"false\">\u200b</div></div>"},
{"2", "<kbd>foo</kbd>", "<div data-node-id=\"20060102150405-1a2b3c4\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\"><div contenteditable=\"true\" spellcheck=\"false\">\u200b<span data-type=\"kbd\">\u200bfoo</span>\u200b</div><div class=\"protyle-attr\" contenteditable=\"false\">\u200b</div></div>"},
{"1", "<span data-type=\"strong\">foo</span>", "<div data-node-id=\"20060102150405-1a2b3c4\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\"><div contenteditable=\"true\" spellcheck=\"false\"><span data-type=\"strong\">foo</span></div><div class=\"protyle-attr\" contenteditable=\"false\">\u200b</div></div>"},
{"0", "~**foo**~\u200b~bar~\n", "<div data-node-id=\"20060102150405-1a2b3c4\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\"><div contenteditable=\"true\" spellcheck=\"false\"><span data-type=\"sub strong\">foo</span>\u200b<span data-type=\"sub\">bar</span>\n</div><div class=\"protyle-attr\" contenteditable=\"false\">\u200b</div></div>"},
Expand Down
5 changes: 3 additions & 2 deletions test/spin_block_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (

var spinBlockDOMTests = []*parseTest{

{"221", "<div data-node-id=\"20240426212823-zc3bwdg\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20240426213148\"><div contenteditable=\"true\" spellcheck=\"false\"><span data-type=\"sup\">foo</span>1</div><div class=\"protyle-attr\" contenteditable=\"false\">​</div></div>", "<div data-node-id=\"20240426212823-zc3bwdg\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20240426213148\"><div contenteditable=\"true\" spellcheck=\"false\"><span data-type=\"sup\">foo</span>1</div><div class=\"protyle-attr\" contenteditable=\"false\">\u200b</div></div>"},
{"220", "<div data-node-id=\"20240406201950-ondcs0z\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20240406203205\"><div contenteditable=\"true\" spellcheck=\"false\">**<wbr><span data-type=\"strong code\">​foo</span>​ bar**</div><div class=\"protyle-attr\" contenteditable=\"false\">​</div></div>", "<div data-node-id=\"20240406201950-ondcs0z\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20240406203205\"><div contenteditable=\"true\" spellcheck=\"false\"><span data-type=\"strong\"><wbr></span><span data-type=\"strong code\">\u200bfoo</span>\u200b<span data-type=\"strong\"> bar</span></div><div class=\"protyle-attr\" contenteditable=\"false\">\u200b</div></div>"},
{"219", "<div data-node-id=\"20240223104817-jwe0s0i\" data-node-index=\"0\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20240223105202\"><div contenteditable=\"true\" spellcheck=\"false\">**foo<span data-type=\"strong\">bar</span>**<wbr></div><div class=\"protyle-attr\" contenteditable=\"false\">​</div></div>", "<div data-node-id=\"20240223104817-jwe0s0i\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20240223105202\"><div contenteditable=\"true\" spellcheck=\"false\"><span data-type=\"strong\">foo</span><span data-type=\"strong\">bar</span><wbr></div><div class=\"protyle-attr\" contenteditable=\"false\">\u200b</div></div>"},
{"218", "<div data-node-id=\"20240220135823-c72c5az\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20240220140355\"><div contenteditable=\"true\" spellcheck=\"false\">foo #<span data-type=\"block-ref\" data-subtype=\"s\" data-id=\"20231110084827-sk6tvfp\">bar</span>#<wbr> baz</div><div class=\"protyle-attr\" contenteditable=\"false\">​</div></div>", "<div data-node-id=\"20240220135823-c72c5az\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20240220140355\"><div contenteditable=\"true\" spellcheck=\"false\">foo <span data-type=\"tag block-ref\" data-subtype=\"s\" data-id=\"20231110084827-sk6tvfp\">\u200bbar</span>\u200b<wbr> baz</div><div class=\"protyle-attr\" contenteditable=\"false\">\u200b</div></div>"},
Expand Down Expand Up @@ -91,8 +92,8 @@ var spinBlockDOMTests = []*parseTest{
{"151", "<div data-node-id=\"20220925235751-8inr7bl\" data-node-index=\"0\" data-type=\"NodeTable\" class=\"table\" updated=\"20220926120735\" colgroup=\"\" style=\"\"><div contenteditable=\"false\" style=\"\"><table contenteditable=\"true\" spellcheck=\"false\"><colgroup><col></colgroup><thead><tr><th>col1</th></tr></thead><tbody><tr><td><span data-type=\"a\" data-href=\"https://github.com/siyuan-note/siyuan/issues/5966\">foo<br></span><span data-type=\"a\" data-href=\"https://github.com/siyuan-note/siyuan/issues/5966\">bar</span><br></td></tr></tbody></table><div class=\"protyle-action__table\"><div class=\"table__resize\" data-col-index=\"0\" style=\"height:71px;left: 66px;display:block\"></div><div class=\"table__select\"></div></div></div><div class=\"protyle-attr\" contenteditable=\"false\">​</div></div>", "<div data-node-id=\"20220925235751-8inr7bl\" data-node-index=\"1\" data-type=\"NodeTable\" class=\"table\" updated=\"20220926120735\" colgroup=\"\"><div contenteditable=\"false\"><table contenteditable=\"true\" spellcheck=\"false\"><colgroup><col /></colgroup><thead><tr><th>col1</th></tr></thead><tbody><tr><td><span data-type=\"a\" data-href=\"https://github.com/siyuan-note/siyuan/issues/5966\">foo</span><br /><span data-type=\"a\" data-href=\"https://github.com/siyuan-note/siyuan/issues/5966\">bar</span><br /></td></tr></tbody></table><div class=\"protyle-action__table\"><div class=\"table__resize\"></div><div class=\"table__select\"></div></div></div><div class=\"protyle-attr\" contenteditable=\"false\">\u200b</div></div>"},
{"150", "<div data-node-id=\"20220925225448-5k419wu\" data-node-index=\"0\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20220925225502\"><div contenteditable=\"true\" spellcheck=\"false\"><span data-type=\"virtual-block-ref\"><span data-type=\"block-ref\" data-id=\"20220925224818-n7b8985\" data-subtype=\"s\">bar</span></span> test</div><div class=\"protyle-attr\" contenteditable=\"false\">​</div></div>", "<div data-node-id=\"20220925225448-5k419wu\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20220925225502\"><div contenteditable=\"true\" spellcheck=\"false\"><span data-type=\"block-ref\" data-subtype=\"s\" data-id=\"20220925224818-n7b8985\">bar</span> test</div><div class=\"protyle-attr\" contenteditable=\"false\">\u200b</div></div>"},
{"149", "<div data-node-id=\"20060102150405-1a2b3c4\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20060102150405\"><div contenteditable=\"true\" spellcheck=\"false\">foo<span data-type=\"inline-memo\" data-inline-memo-content=\"这里是对 bar 的备注\">bar</span>baz</div><div class=\"protyle-attr\" contenteditable=\"false\">​</div></div>", "<div data-node-id=\"20060102150405-1a2b3c4\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20060102150405\"><div contenteditable=\"true\" spellcheck=\"false\">foo<span data-type=\"inline-memo\" data-inline-memo-content=\"这里是对 bar 的备注\">bar</span>baz</div><div class=\"protyle-attr\" contenteditable=\"false\">​</div></div>"},
{"148", "<div data-node-id=\"20220916213304-uoayj2q\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20220916213403\"><div contenteditable=\"true\" spellcheck=\"false\">foo<span data-type=\"search-mark\">bar</span>baz</div><div class=\"protyle-attr\" contenteditable=\"false\">&ZeroWidthSpace;</div></div>", "<div data-node-id=\"20220916213304-uoayj2q\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20220916213403\"><div contenteditable=\"true\" spellcheck=\"false\">foobarbaz</div><div class=\"protyle-attr\" contenteditable=\"false\">\u200b</div></div>"},
{"147", "<div data-node-id=\"20220915195318-c629idi\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20220915213441\"><div contenteditable=\"true\" spellcheck=\"false\"><span data-type=\"strong em\">foo</span><span data-type=\"em strong\">bar</span> </div><div class=\"protyle-attr\" contenteditable=\"false\">&ZeroWidthSpace;</div></div>", "<div data-node-id=\"20220915195318-c629idi\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20220915213441\"><div contenteditable=\"true\" spellcheck=\"false\"><span data-type=\"em strong\">foobar</span></div><div class=\"protyle-attr\" contenteditable=\"false\">\u200b</div></div>"},
{"148", "<div data-node-id=\"20220916213304-uoayj2q\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20220916213403\"><div contenteditable=\"true\" spellcheck=\"false\">foo<span data-type=\"search-mark\">bar</span>baz</div><div class=\"protyle-attr\" contenteditable=\"false\"></div></div>", "<div data-node-id=\"20220916213304-uoayj2q\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20220916213403\"><div contenteditable=\"true\" spellcheck=\"false\">foobarbaz</div><div class=\"protyle-attr\" contenteditable=\"false\">\u200b</div></div>"},
{"147", "<div data-node-id=\"20220915195318-c629idi\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20220915213441\"><div contenteditable=\"true\" spellcheck=\"false\"><span data-type=\"strong em\">foo</span><span data-type=\"em strong\">bar</span> </div><div class=\"protyle-attr\" contenteditable=\"false\"></div></div>", "<div data-node-id=\"20220915195318-c629idi\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20220915213441\"><div contenteditable=\"true\" spellcheck=\"false\"><span data-type=\"em strong\">foobar</span></div><div class=\"protyle-attr\" contenteditable=\"false\">\u200b</div></div>"},
{"146", "<div data-node-id=\"20220914111848-5d0bx7j\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20220914111851\"><div contenteditable=\"true\" spellcheck=\"false\">&lt;kbd&gt;<wbr></div><div class=\"protyle-attr\" contenteditable=\"false\">​</div></div>", "<div data-node-id=\"20220914111848-5d0bx7j\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20220914111851\"><div contenteditable=\"true\" spellcheck=\"false\">&lt;kbd&gt;<wbr></div><div class=\"protyle-attr\" contenteditable=\"false\">\u200b</div></div>"},
{"145", "<div data-node-id=\"20220914003309-k70r1tj\" data-node-index=\"1\" data-type=\"NodeTable\" class=\"table\" updated=\"20220914003911\" colgroup=\"\"><div contenteditable=\"false\"><table contenteditable=\"true\" spellcheck=\"false\"><colgroup><col></colgroup><thead><tr><th>col<wbr></th></tr></thead><tbody><tr><td><span data-type=\"inline-math\" data-subtype=\"math\" data-content=\"foo|bar\" contenteditable=\"false\" class=\"render-node\" data-render=\"true\">​<span class=\"katex\"><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:1em;vertical-align:-0.25em;\"></span><span class=\"mord mathnormal\" style=\"margin-right:0.10764em;\">f</span><span class=\"mord mathnormal\">oo</span><span class=\"mord\">∣</span><span class=\"mord mathnormal\">ba</span><span class=\"mord mathnormal\" style=\"margin-right:0.02778em;\">r</span></span></span></span></span>​</td></tr></tbody></table><div class=\"protyle-action__table\"><div class=\"table__resize\" data-col-index=\"0\" style=\"height:71px;left: 74px;display:block\"></div><div class=\"table__select\"></div></div></div><div class=\"protyle-attr\" contenteditable=\"false\">​</div></div>", "<div data-node-id=\"20220914003309-k70r1tj\" data-node-index=\"1\" data-type=\"NodeTable\" class=\"table\" updated=\"20220914003911\" colgroup=\"\"><div contenteditable=\"false\"><table contenteditable=\"true\" spellcheck=\"false\"><colgroup><col /></colgroup><thead><tr><th>col<wbr></th></tr></thead><tbody><tr><td><span data-type=\"inline-math\" data-subtype=\"math\" data-content=\"foo&#124;bar\" contenteditable=\"false\" class=\"render-node\"></span></td></tr></tbody></table><div class=\"protyle-action__table\"><div class=\"table__resize\"></div><div class=\"table__select\"></div></div></div><div class=\"protyle-attr\" contenteditable=\"false\">\u200b</div></div>"},
{"144", "<div data-node-id=\"20220902112701-l51n0n7\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20220902115152\"><div contenteditable=\"true\" spellcheck=\"false\">**<wbr>foo<span data-type=\"strong em\">bar</span></div><div class=\"protyle-attr\" contenteditable=\"false\">​</div></div>", "<div data-node-id=\"20220902112701-l51n0n7\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20220902115152\"><div contenteditable=\"true\" spellcheck=\"false\">**<wbr>foo<span data-type=\"strong em\">bar</span></div><div class=\"protyle-attr\" contenteditable=\"false\">\u200b</div></div>"},
Expand Down

0 comments on commit 3786f77

Please sign in to comment.