Use cmark-gfm by default, adapt CLI args, use escapes via find and replace if discount must be used.

This commit is contained in:
bratekarate 2024-10-03 02:25:06 +02:00
parent 845e87b521
commit 22aa7cf966
No known key found for this signature in database
GPG Key ID: 7FA4488395F8E7F3
1 changed files with 22 additions and 14 deletions

16
main.go
View File

@ -88,7 +88,7 @@ func highlight(w io.Writer, source, lexer, style string) error {
return f.Format(w, s, it) return f.Format(w, s, it)
} }
const Version = "0.1.2" const Version = "0.1.3"
func main() { func main() {
css := flag.String("css", "", "Path to a CSS import to include at the beginning of the output") css := flag.String("css", "", "Path to a CSS import to include at the beginning of the output")
@ -119,6 +119,7 @@ func main() {
bs := bufio.NewScanner(r) bs := bufio.NewScanner(r)
lang := "" lang := ""
needCSS := false needCSS := false
cmark, lookErr := exec.LookPath("cmark-gfm")
for bs.Scan() { for bs.Scan() {
text := bs.Text() text := bs.Text()
trimmed := strings.TrimSpace(text) trimmed := strings.TrimSpace(text)
@ -141,6 +142,12 @@ func main() {
currentCodeBlock.WriteString(text) currentCodeBlock.WriteString(text)
currentCodeBlock.WriteByte('\n') currentCodeBlock.WriteByte('\n')
} else { } else {
/* If cmark is not installed then discount will be used, and we have to
* do some encoding ourselves. */
if lookErr != nil {
text = strings.Replace(text, "\\<", "&lt;", -1)
text = strings.Replace(text, "\\>", "&gt;", -1)
}
out.WriteString(text) out.WriteString(text)
out.WriteByte('\n') out.WriteByte('\n')
} }
@ -157,12 +164,13 @@ func main() {
checkError(writeErr, "writing data to temporary file") checkError(writeErr, "writing data to temporary file")
// shell out to markdown because of // shell out to markdown because of
// https://github.com/russross/blackfriday/issues/403 // https://github.com/russross/blackfriday/issues/403
cmark, lookErr := exec.LookPath("cmark") var args []string
args := []string{cmark, "--unsafe", f.Name()}
if lookErr != nil { if lookErr != nil {
cmark, lookErr = exec.LookPath("markdown") cmark, lookErr = exec.LookPath("markdown")
checkError(lookErr, "finding markdown binary") checkError(lookErr, "finding markdown binary")
args = []string{cmark, f.Name()} args = []string{cmark, "-f", "smarty,pants", f.Name()}
} else {
args = []string{cmark, "--smart", "--unsafe", "--extension", "table", f.Name()}
} }
execErr := localExec(cmark, args, []string{}) execErr := localExec(cmark, args, []string{})
checkError(execErr, "executing markdown binary") checkError(execErr, "executing markdown binary")