package document import ( "fmt" "regexp" "strings" ) var kbdMapping = map[string]string{ "ctrl": "\\LKeyStrg", "tux": "\\LKeyTux", "win": "\\LKeyWin", "menu": "\\LKeyMenu", "strg": "\\LKeyStrg", "alt": "\\LKeyAlt", "altgr": "\\LKeyAltGr", "shift": "\\LKeyShift", "enter": "\\LKeyEnter", "tab": "\\LKeyTab", "capslock": "\\LKeyCapsLock", "pos": "\\LKeyPos", "entf": "\\LKeyEntf", "del": "\\LKeyDel", "ins": "\\LKeyIns", "einf": "\\LKeyEinf", "leer": "\\LKeyLeer", "space": "\\LKeySpace", "esc": "\\LKeyEsc", "ende": "\\LKeyEnde", "back": "\\LKeyBack", "up": "\\LKeyUp", "dwon": "\\LKeyDown", "left": "\\LKeyLeft", "right": "\\LKeyRight", "pgup": "\\LKeyPgUp", "pgdown": "\\LKeyPgDown", } func convertCircledNumbers(content string) string { circleMap := map[string]string{ "➊": "\\large\\libertineGlyph{uni2776}\\normalsize", "➋": "\\large\\libertineGlyph{uni2777}\\normalsize", "➌": "\\large\\libertineGlyph{uni2778}\\normalsize", "➍": "\\large\\libertineGlyph{uni2779}\\normalsize", "➎": "\\large\\libertineGlyph{uni277A}\\normalsize", "➏": "\\large\\libertineGlyph{uni277B}\\normalsize", "➐": "\\large\\libertineGlyph{uni277C}\\normalsize", "➑": "\\large\\libertineGlyph{uni277D}\\normalsize", "➒": "\\large\\libertineGlyph{uni277E}\\normalsize", "➓": "\\large\\libertineGlyph{uni277F}\\normalsize", "⓫": "\\large\\libertineGlyph{uni24EB}\\normalsize", "⓬": "\\large\\libertineGlyph{uni24EC}\\normalsize", "⓭": "\\large\\libertineGlyph{uni24ED}\\normalsize", "⓮": "\\large\\libertineGlyph{uni24EE}\\normalsize", "⓯": "\\large\\libertineGlyph{uni24EF}\\normalsize", "⓰": "\\large\\libertineGlyph{uni24F0}\\normalsize", "⓱": "\\large\\libertineGlyph{uni24F1}\\normalsize", "⓲": "\\large\\libertineGlyph{uni24F2}\\normalsize", "⓳": "\\large\\libertineGlyph{uni24F3}\\normalsize", "⓴": "\\large\\libertineGlyph{uni24F4}\\normalsize", } for k, v := range circleMap { content = strings.Replace(content, k, v, -1) } return content } func replaceKbd(content string) string { regEx := regexp.MustCompile(`(?P<match><kbd[^>]*>(?P<key>[^<]*)</kbd>)`) matches := regEx.FindAllStringSubmatch(content, -1) if matches == nil { return content } for _, match := range matches { result := make(map[string]string) for i, name := range regEx.SubexpNames() { if i != 0 && name != "" { result[name] = match[i] } } r, ok := kbdMapping[strings.ToLower(result["key"])] if !ok { runes := []rune(result["key"]) for _, k := range runes { h := strings.ToUpper(fmt.Sprintf("uni%04x", k)) r += fmt.Sprintf("\\biolinumKeyGlyph{%s}", h) } } content = strings.Replace(content, result["match"], r, -1) } return content }