Don't render title as list item

This fixes an issue where "12. April" would get rendered as "1. April" because
it looks like a Markdown list item to our renderer. Now, we parse titles as
titles, instead of standalone text, which causes the renderer to give us the
results we want. This also adds some basic tests for the applyBasicMarkdown()
func.

Closes #470
pull/471/head
Matt Baer 3 years ago
parent e983c4527f
commit 0ddca40529
  1. 8
      postrender.go
  2. 36
      postrender_test.go

@ -11,6 +11,7 @@
package writefreely package writefreely
import ( import (
"bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"html" "html"
@ -191,7 +192,12 @@ func applyBasicMarkdown(data []byte) string {
blackfriday.HTML_SMARTYPANTS_DASHES blackfriday.HTML_SMARTYPANTS_DASHES
// Generate Markdown // Generate Markdown
md := blackfriday.Markdown([]byte(data), blackfriday.HtmlRenderer(htmlFlags, "", ""), mdExtensions) // This passes the supplied title into blackfriday.Markdown() as an H1 header, so we only render HTML that
// belongs in an H1.
md := blackfriday.Markdown(append([]byte("# "), data...), blackfriday.HtmlRenderer(htmlFlags, "", ""), mdExtensions)
// Remove H1 markup
md = bytes.TrimSpace(md) // blackfriday.Markdown adds a newline at the end of the <h1>
md = md[len("<h1>") : len(md)-len("</h1>")]
// Strip out bad HTML // Strip out bad HTML
policy := bluemonday.UGCPolicy() policy := bluemonday.UGCPolicy()
policy.AllowAttrs("class", "id").Globally() policy.AllowAttrs("class", "id").Globally()

@ -0,0 +1,36 @@
/*
* Copyright © 2021 A Bunch Tell LLC.
*
* This file is part of WriteFreely.
*
* WriteFreely is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, included
* in the LICENSE file in this source code package.
*/
package writefreely
import "testing"
func TestApplyBasicMarkdown(t *testing.T) {
tests := []struct {
name string
in string
result string
}{
{"plain", "Hello, World!", "Hello, World!"},
{"multibyte", "こんにちは", `こんにちは`},
{"bold", "**안녕하세요**", `<strong>안녕하세요</strong>`},
{"link", "[WriteFreely](https://writefreely.org)", `<a href="https://writefreely.org" rel="nofollow">WriteFreely</a>`},
{"date", "12. April", `12. April`},
{"table", "| Hi | There |", `| Hi | There |`},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
res := applyBasicMarkdown([]byte(test.in))
if res != test.result {
t.Errorf("%s: wanted %s, got %s", test.name, test.result, res)
}
})
}
}
Loading…
Cancel
Save