121 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// create language files from environment
 | 
						|
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"flag"
 | 
						|
	"fmt"
 | 
						|
	"os"
 | 
						|
	"path"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"git.defalsify.org/vise.git/lang"
 | 
						|
	"git.defalsify.org/vise.git/logging"
 | 
						|
	"git.grassecon.net/grassrootseconomics/visedriver/config"
 | 
						|
)
 | 
						|
 | 
						|
const (
 | 
						|
	changeHeadSrc = `LOAD reset_account_authorized 0
 | 
						|
LOAD reset_incorrect_pin 0
 | 
						|
CATCH incorrect_pin flag_incorrect_pin 1
 | 
						|
CATCH pin_entry flag_account_authorized 0
 | 
						|
`
 | 
						|
 | 
						|
	selectSrc = `LOAD set_language 6
 | 
						|
RELOAD set_language
 | 
						|
CATCH terms flag_account_created 0
 | 
						|
MOVE language_changed
 | 
						|
`
 | 
						|
)
 | 
						|
 | 
						|
var (
 | 
						|
	logg   = logging.NewVanilla()
 | 
						|
	mouts  string
 | 
						|
	incmps string
 | 
						|
)
 | 
						|
 | 
						|
func toLanguageLabel(ln lang.Language) string {
 | 
						|
	s := ln.Name
 | 
						|
	v := strings.Split(s, " (")
 | 
						|
	if len(v) > 1 {
 | 
						|
		s = v[0]
 | 
						|
	}
 | 
						|
	return s
 | 
						|
}
 | 
						|
 | 
						|
func toLanguageKey(ln lang.Language) string {
 | 
						|
	s := toLanguageLabel(ln)
 | 
						|
	return strings.ToLower(s)
 | 
						|
}
 | 
						|
 | 
						|
func main() {
 | 
						|
	var srcDir string
 | 
						|
 | 
						|
	flag.StringVar(&srcDir, "o", ".", "resource dir write to")
 | 
						|
	flag.Parse()
 | 
						|
 | 
						|
	logg.Infof("start command", "dir", srcDir)
 | 
						|
 | 
						|
	err := config.LoadConfig()
 | 
						|
	if err != nil {
 | 
						|
		fmt.Fprintf(os.Stderr, "config load error: %v", err)
 | 
						|
		os.Exit(1)
 | 
						|
	}
 | 
						|
	logg.Tracef("using languages", "lang", config.Languages)
 | 
						|
 | 
						|
	for i, v := range config.Languages {
 | 
						|
		ln, err := lang.LanguageFromCode(v)
 | 
						|
		if err != nil {
 | 
						|
			fmt.Fprintf(os.Stderr, "error parsing language: %s\n", v)
 | 
						|
			os.Exit(1)
 | 
						|
		}
 | 
						|
		n := i + 1
 | 
						|
		s := toLanguageKey(ln)
 | 
						|
		mouts += fmt.Sprintf("MOUT %s %v\n", s, n)
 | 
						|
		v = "set_" + ln.Code
 | 
						|
		incmps += fmt.Sprintf("INCMP %s %v\n", v, n)
 | 
						|
 | 
						|
		p := path.Join(srcDir, v)
 | 
						|
		w, err := os.OpenFile(p, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0600)
 | 
						|
		if err != nil {
 | 
						|
			fmt.Fprintf(os.Stderr, "failed open language set template output: %v\n", err)
 | 
						|
			os.Exit(1)
 | 
						|
		}
 | 
						|
		s = toLanguageLabel(ln)
 | 
						|
		defer w.Close()
 | 
						|
		_, err = w.Write([]byte(s))
 | 
						|
		if err != nil {
 | 
						|
			fmt.Fprintf(os.Stderr, "failed write select language vis output: %v\n", err)
 | 
						|
			os.Exit(1)
 | 
						|
		}
 | 
						|
	}
 | 
						|
	src := mouts + "HALT\n" + incmps
 | 
						|
	src += "INCMP . *\n"
 | 
						|
 | 
						|
	p := path.Join(srcDir, "select_language.vis")
 | 
						|
	w, err := os.OpenFile(p, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0600)
 | 
						|
	if err != nil {
 | 
						|
		fmt.Fprintf(os.Stderr, "failed open select language vis output: %v\n", err)
 | 
						|
		os.Exit(1)
 | 
						|
	}
 | 
						|
	defer w.Close()
 | 
						|
	_, err = w.Write([]byte(src))
 | 
						|
	if err != nil {
 | 
						|
		fmt.Fprintf(os.Stderr, "failed write select language vis output: %v\n", err)
 | 
						|
		os.Exit(1)
 | 
						|
	}
 | 
						|
 | 
						|
	src = changeHeadSrc + src
 | 
						|
	p = path.Join(srcDir, "change_language.vis")
 | 
						|
	w, err = os.OpenFile(p, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0600)
 | 
						|
	if err != nil {
 | 
						|
		fmt.Fprintf(os.Stderr, "failed open select language vis output: %v\n", err)
 | 
						|
		os.Exit(1)
 | 
						|
	}
 | 
						|
	defer w.Close()
 | 
						|
	_, err = w.Write([]byte(src))
 | 
						|
	if err != nil {
 | 
						|
		fmt.Fprintf(os.Stderr, "failed write select language vis output: %v\n", err)
 | 
						|
		os.Exit(1)
 | 
						|
	}
 | 
						|
}
 |