/
pattern.go
114 lines (104 loc) · 2.25 KB
/
pattern.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package main
import (
"fmt"
"io"
"net/http"
"os"
"sort"
"strings"
)
var filemapping = map[string]string{
"bg": "bg",
"ca": "ca",
"cs": "cs",
"cy": "cy",
"da": "da",
"de": "de-1996",
"el": "el-monoton",
"en": "en-gb",
"en_gb": "en-gb",
"en_us": "en-us",
"eo": "eo",
"es": "es",
"et": "et",
"eu": "eu",
"fi": "fi",
"fr": "fr",
"ga": "ga",
"gl": "gl",
"grc": "grc",
"gu": "gu",
"hi": "hi",
"hr": "hr",
"hu": "hu",
"hy": "hy",
"id": "id",
"is": "is",
"it": "it",
"ku": "kmr",
"kn": "kn",
"lt": "lt",
"ml": "ml",
"lv": "lv",
"nb": "nb",
"nl": "nl",
"nn": "nn",
"no": "nb",
"pl": "pl",
"pt": "pt",
"ro": "ro",
"ru": "ru",
"sk": "sk",
"sl": "sl",
"sc": "sr-cyrl",
"sv": "sv",
"tr": "tr",
"uk": "uk",
}
func langNameToVarName(lang string) string {
ret := []string{}
for _, ln := range strings.Split(lang, "_") {
ret = append(ret, ln)
}
return strings.Join(ret, "")
}
// Download hyphenation patterns and put them into a map in the file
// document/hyphenationpatterns.go.
func createPatterns() error {
languagesSorted := make([]string, 0, len(filemapping))
for k := range filemapping {
languagesSorted = append(languagesSorted, k)
}
sort.Strings(languagesSorted)
out, err := os.Create("frontend/hyphenationpatterns.go")
if err != nil {
return err
}
fmt.Fprintln(out, "// Generated from go generate. Do not edit.")
fmt.Fprintln(out, "")
fmt.Fprintln(out, "package frontend")
fmt.Fprintln(out, "")
fmt.Fprintln(out, "var hyphenationpatterns = map[string]string{")
for _, langname := range languagesSorted {
filename := filemapping[langname]
url := "https://ftp.gwdg.de/pub/ctan/language/hyph-utf8/tex/generic/hyph-utf8/patterns/txt/hyph-" + filename + ".pat.txt"
fmt.Println("Download from", url)
resp, err := http.Get(url)
if err != nil {
return err
}
if resp.StatusCode != http.StatusOK {
fmt.Println(resp.Status)
}
defer resp.Body.Close()
fmt.Fprintf(out, "\t%q: ", langNameToVarName(langname))
fmt.Fprintln(out, "`")
_, err = io.Copy(out, resp.Body)
if err != nil {
return err
}
fmt.Fprintln(out, "`,")
}
fmt.Fprintln(out, "}")
return out.Close()
}