aboutsummaryrefslogtreecommitdiff
path: root/cmd/ucdgen/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/ucdgen/main.go')
-rw-r--r--cmd/ucdgen/main.go98
1 files changed, 98 insertions, 0 deletions
diff --git a/cmd/ucdgen/main.go b/cmd/ucdgen/main.go
new file mode 100644
index 0000000..6d7d33e
--- /dev/null
+++ b/cmd/ucdgen/main.go
@@ -0,0 +1,98 @@
+package main
+
+import (
+ "fmt"
+ "net/http"
+ "os"
+ "strings"
+ "text/template"
+
+ "github.com/nihei9/vartan/ucd"
+)
+
+func main() {
+ err := gen()
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "%v\n", err)
+ os.Exit(1)
+ }
+}
+
+func gen() error {
+ var propValAliases *ucd.PropertyValueAliases
+ {
+ resp, err := http.Get("https://www.unicode.org/Public/13.0.0/ucd/PropertyValueAliases.txt")
+ if err != nil {
+ return err
+ }
+ defer resp.Body.Close()
+ propValAliases, err = ucd.ParsePropertyValueAliases(resp.Body)
+ if err != nil {
+ return err
+ }
+ }
+ var unicodeData *ucd.UnicodeData
+ {
+ resp, err := http.Get("https://www.unicode.org/Public/13.0.0/ucd/UnicodeData.txt")
+ if err != nil {
+ return err
+ }
+ defer resp.Body.Close()
+ unicodeData, err = ucd.ParseUnicodeData(resp.Body, propValAliases)
+ if err != nil {
+ return err
+ }
+ }
+ var scripts *ucd.Scripts
+ {
+ resp, err := http.Get("https://www.unicode.org/Public/13.0.0/ucd/Scripts.txt")
+ if err != nil {
+ return err
+ }
+ defer resp.Body.Close()
+ scripts, err = ucd.ParseScripts(resp.Body, propValAliases)
+ if err != nil {
+ return err
+ }
+ }
+ var propList *ucd.PropList
+ {
+ resp, err := http.Get("https://www.unicode.org/Public/13.0.0/ucd/PropList.txt")
+ if err != nil {
+ return err
+ }
+ defer resp.Body.Close()
+ propList, err = ucd.ParsePropList(resp.Body)
+ if err != nil {
+ return err
+ }
+ }
+ tmpl, err := template.ParseFiles("../ucd/codepoint.go.tmpl")
+ if err != nil {
+ return err
+ }
+ var b strings.Builder
+ err = tmpl.Execute(&b, struct {
+ GeneratorName string
+ UnicodeData *ucd.UnicodeData
+ Scripts *ucd.Scripts
+ PropList *ucd.PropList
+ PropertyValueAliases *ucd.PropertyValueAliases
+ }{
+ GeneratorName: "generator/main.go",
+ UnicodeData: unicodeData,
+ Scripts: scripts,
+ PropList: propList,
+ PropertyValueAliases: propValAliases,
+ })
+ if err != nil {
+ return err
+ }
+ f, err := os.OpenFile("../ucd/codepoint.go", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
+ if err != nil {
+ return err
+ }
+ defer f.Close()
+ fmt.Fprint(f, b.String())
+ return nil
+}