153 lines
3.4 KiB
Go
153 lines
3.4 KiB
Go
/*
|
||
* Copyright (c) 2018 Arnaud Ysmal. All Rights Reserved.
|
||
*
|
||
* Redistribution and use in source and binary forms, with or without
|
||
* modification, are permitted provided that the following conditions
|
||
* are met:
|
||
* 1. Redistributions of source code must retain the above copyright
|
||
* notice, this list of conditions and the following disclaimer.
|
||
* 2. Redistributions in binary form must reproduce the above copyright
|
||
* notice, this list of conditions and the following disclaimer in the
|
||
* documentation and/or other materials provided with the distribution.
|
||
*
|
||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||
* SUCH DAMAGE.
|
||
*/
|
||
|
||
package tex
|
||
|
||
import (
|
||
"jsonresume/model"
|
||
"jsonresume/themes"
|
||
"path"
|
||
"strings"
|
||
"text/template"
|
||
)
|
||
|
||
const (
|
||
packageDirectory = "themes/tex"
|
||
fileTemplate = "resume_template.tex"
|
||
)
|
||
|
||
var Theme = themes.Theme{
|
||
Name: "tex",
|
||
Directory: packageDirectory,
|
||
Functions: template.FuncMap{"md2tex": md2tex},
|
||
}
|
||
|
||
func init() {
|
||
t, _ := Asset(path.Join(packageDirectory, fileTemplate))
|
||
Theme.Template = string(t)
|
||
(&Theme).Register()
|
||
}
|
||
|
||
type replacement struct {
|
||
o string
|
||
n string
|
||
}
|
||
|
||
var latexAccents = []replacement{
|
||
{"\\", "\\\\"},
|
||
{"{", "\\{"},
|
||
{"}", "\\}"},
|
||
|
||
{"à", "\\`a"},
|
||
{"è", "\\`e"},
|
||
{"ì", "\\`\\i"},
|
||
{"ò", "\\`o"},
|
||
{"ù", "\\`u"},
|
||
{"ỳ", "\\`y"},
|
||
{"À", "\\`A"},
|
||
{"È", "\\`E"},
|
||
{"Ì", "\\`\\I"},
|
||
{"Ò", "\\`O"},
|
||
{"Ù", "\\`U"},
|
||
{"Ỳ", "\\`Y"},
|
||
{"á", "\\'a"},
|
||
{"é", "\\'e"},
|
||
{"í", "\\'\\i"},
|
||
{"ó", "\\'o"},
|
||
{"ú", "\\'u"},
|
||
{"ý", "\\'y"},
|
||
{"Á", "\\'A"},
|
||
{"É", "\\'E"},
|
||
{"Í", "\\'\\I"},
|
||
{"Ó", "\\'O"},
|
||
{"Ú", "\\'U"},
|
||
{"Ý", "\\'Y"},
|
||
{"â", "\\^a"},
|
||
{"ê", "\\^e"},
|
||
{"î", "\\^\\i"},
|
||
{"ô", "\\^o"},
|
||
{"û", "\\^u"},
|
||
{"ŷ", "\\^y"},
|
||
{"Â", "\\^A"},
|
||
{"Ê", "\\^E"},
|
||
{"Î", "\\^\\I"},
|
||
{"Ô", "\\^O"},
|
||
{"Û", "\\^U"},
|
||
{"Ŷ", "\\^Y"},
|
||
{"ä", "\\\"a"},
|
||
{"ë", "\\\"e"},
|
||
{"ï", "\\\"\\i"},
|
||
{"ö", "\\\"o"},
|
||
{"ü", "\\\"u"},
|
||
{"ÿ", "\\\"y"},
|
||
{"Ä", "\\\"A"},
|
||
{"Ë", "\\\"E"},
|
||
{"Ï", "\\\"\\I"},
|
||
{"Ö", "\\\"O"},
|
||
{"Ü", "\\\"U"},
|
||
{"Ÿ", "\\\"Y"},
|
||
{"ç", "\\c{c}"},
|
||
{"Ç", "\\c{C}"},
|
||
{"œ", "\\oe{}"},
|
||
{"Œ", "{\\OE}"},
|
||
{"æ", "{\\ae}"},
|
||
{"Æ", "{\\AE}"},
|
||
{"å", "{\\aa}"},
|
||
{"Å", "{\\AA}"},
|
||
{"–", "--"},
|
||
{"—", "---"},
|
||
{"ø", "{\\o}"},
|
||
{"Ø", "{\\O}"},
|
||
{"ß", "{\\ss}"},
|
||
{"¡", "{!`}"},
|
||
{"¿", "{?`}"},
|
||
{"~", "\\~"},
|
||
{"&", "\\&"},
|
||
{"$", "\\$"},
|
||
{"%", "\\%"},
|
||
{"#", "\\#"},
|
||
{"_", "\\_"},
|
||
{"≥", "$\\ge$"},
|
||
{"≤", "$\\le$"},
|
||
{"≠", "$\\neq$"},
|
||
{"ı", "{\\i}"},
|
||
{"µ", "$\\mu$"},
|
||
{"°", "$\\deg$"},
|
||
{"‘", "`"},
|
||
{"’", "'"},
|
||
{"“", "``"},
|
||
{"”", "''"},
|
||
{"‚", ","},
|
||
{"„", ",,"},
|
||
}
|
||
|
||
func md2tex(s string) string {
|
||
for _, r := range latexAccents {
|
||
s = strings.Replace(s, r.o, r.n, -1)
|
||
}
|
||
|
||
return model.MarkdownURLRegexp.ReplaceAllString(s, `\href{$2}{$1}`)
|
||
}
|