43 lines
1.0 KiB
Go
43 lines
1.0 KiB
Go
package nip54
|
|
|
|
import (
|
|
"strings"
|
|
"unicode"
|
|
|
|
"github.com/sivukhin/godjot/djot_parser"
|
|
"github.com/sivukhin/godjot/html_writer"
|
|
"golang.org/x/text/transform"
|
|
"golang.org/x/text/unicode/norm"
|
|
)
|
|
|
|
func NormalizeIdentifier(name string) string {
|
|
res, _, _ := transform.Bytes(norm.NFKC, []byte(name))
|
|
runes := []rune(strings.ToLower(string(res)))
|
|
|
|
words := make([]string, 0, 3)
|
|
word := make([]rune, 0, 12)
|
|
for _, letter := range runes {
|
|
if unicode.IsLetter(letter) || unicode.IsNumber(letter) {
|
|
word = append(word, letter)
|
|
} else if len(word) > 0 {
|
|
words = append(words, string(word))
|
|
word = make([]rune, 0, 12)
|
|
}
|
|
}
|
|
if len(word) > 0 {
|
|
words = append(words, string(word))
|
|
}
|
|
|
|
return strings.Join(words, "-")
|
|
}
|
|
|
|
func ArticleAsHTML(content string) string {
|
|
ast := djot_parser.BuildDjotAst([]byte(content))
|
|
context := djot_parser.NewConversionContext("html", djot_parser.DefaultConversionRegistry)
|
|
writer := &html_writer.HtmlWriter{}
|
|
for _, node := range ast {
|
|
context.ConvertDjotToHtml(writer, node)
|
|
}
|
|
return writer.String()
|
|
}
|