workreport-manager/export/latex/stringutil/latexize.go

52 lines
1.6 KiB
Go

package stringutil
import (
"strings"
"git.dekart811.net/icedream/workreportmgr/internal/util"
"github.com/russross/blackfriday"
)
const (
enabledExtensions = 0 |
blackfriday.EXTENSION_NO_INTRA_EMPHASIS |
blackfriday.EXTENSION_TABLES |
blackfriday.EXTENSION_FENCED_CODE |
blackfriday.EXTENSION_AUTOLINK |
blackfriday.EXTENSION_STRIKETHROUGH |
blackfriday.EXTENSION_SPACE_HEADERS |
blackfriday.EXTENSION_HEADER_IDS |
blackfriday.EXTENSION_BACKSLASH_LINE_BREAK |
blackfriday.EXTENSION_DEFINITION_LISTS
)
var additionalTexReplacements = []Converter{
// NewStringConverter("{", "\\{"),
// NewStringConverter("}", "\\}"),
// NewStringConverter("\\", "\\textbackslash{}"),
//
// NewStringConverter("&", "\\&"),
// NewStringConverter("%", "\\%"),
// NewStringConverter("$", "\\$"),
// NewStringConverter("#", "\\#"),
// NewStringConverter("_", "\\_"),
// NewStringConverter("~", "\\textasciitilde{}"),
// NewStringConverter("^", "\\textasciicircum{}"),
// NewStringConverter("ß", "\\ss{}"),
NewSimpleRegexConverter(`"([^"]+)"`, `\enquote{$1}`),
// NewSimpleRegexConverter("`([^`]+)`", "\\verb`$1`"),
}
/*
Latexize takes an input text as parsed from the value of any field in a project
file and turns it into LaTeX code.
*/
func Latexize(input string) string {
renderer := util.DocumentlessRenderer{Renderer: blackfriday.LatexRenderer(0)}
renderedString := string(blackfriday.Markdown([]byte(input), renderer, enabledExtensions))
renderedString = CustomEscape(renderedString, additionalTexReplacements...)
renderedString = strings.TrimSpace(renderedString)
return renderedString
}