Skip to content
Snippets Groups Projects
Select Git revision
  • 4132c09d965d94d2dfe7c7203a093162bf41fd77
  • master default protected
  • 1.2.4
  • 1.2.3
  • 1.2.2
  • 1.2.1
  • 1.2.0
  • v1.1.0
8 results

latex_mapping.go

Blame
  • latex_mapping.go 2.90 KiB
    // Copyright 2023 schukai GmbH
    // SPDX-License-Identifier: AGPL-3.0
    
    package document
    
    import (
    	"fmt"
    	"regexp"
    	"strings"
    )
    
    var kbdMappingToLatex = 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 convertCircledNumbersToLatex(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 replaceKbdToLatex(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 := kbdMappingToLatex[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
    
    }