178 lines
3.4 KiB
Go
178 lines
3.4 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
type Card struct {
|
|
Name map[string]string
|
|
Description map[string]string
|
|
Copies int
|
|
}
|
|
|
|
type Sigil struct {
|
|
Card
|
|
Initials map[string]string
|
|
}
|
|
|
|
type Action struct {
|
|
Card
|
|
Instant map[string]string
|
|
Persistent bool
|
|
}
|
|
|
|
type Mission struct {
|
|
Card
|
|
Points int
|
|
}
|
|
|
|
type Stance struct {
|
|
Card
|
|
Type string
|
|
AgainstBetrayal int
|
|
AgainstBargain int
|
|
}
|
|
|
|
type Final struct {
|
|
Card
|
|
Priority int
|
|
}
|
|
|
|
func main() {
|
|
lang := os.Args[1]
|
|
|
|
si, _ := os.Open("cards/sigils.json")
|
|
defer si.Close()
|
|
dec := json.NewDecoder(si)
|
|
sigils := []Sigil{}
|
|
if err := dec.Decode(&sigils); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
fmt.Print("\n% SIGILS\n")
|
|
|
|
for _, sig := range sigils {
|
|
name, ex := sig.Name[lang]
|
|
if !ex {
|
|
panic(fmt.Sprintf("No '%v' language Name for card %v", lang, sig))
|
|
}
|
|
|
|
desc, ex := sig.Description[lang]
|
|
if !ex {
|
|
panic(fmt.Sprintf("No '%v' language Description for action card %v", lang, sig))
|
|
}
|
|
|
|
init, ex := sig.Initials[lang]
|
|
if !ex {
|
|
panic(fmt.Sprintf("No '%v' language Initials for action card %v", lang, sig))
|
|
}
|
|
|
|
for i := 0; i < sig.Copies; i++ {
|
|
fmt.Printf("\\sigil{%v}{%v}{%v}\n", name, desc, init)
|
|
}
|
|
}
|
|
|
|
a, _ := os.Open("cards/actions.json")
|
|
defer a.Close()
|
|
dec = json.NewDecoder(a)
|
|
actions := []Action{}
|
|
if err := dec.Decode(&actions); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
fmt.Print("\n% ACTIONS\n")
|
|
|
|
for _, act := range actions {
|
|
name, ex := act.Name[lang]
|
|
if !ex {
|
|
panic(fmt.Sprintf("No '%v' language Name for card %v", lang, act))
|
|
}
|
|
|
|
desc, ex := act.Description[lang]
|
|
if !ex {
|
|
panic(fmt.Sprintf("No '%v' language Description for action card %v", lang, act))
|
|
}
|
|
|
|
var inst string
|
|
if act.Instant != nil {
|
|
inst, ex = act.Instant[lang]
|
|
if !ex {
|
|
panic(fmt.Sprintf("No '%v' language Instant for action card %v", lang, act))
|
|
}
|
|
}
|
|
|
|
var pers string
|
|
if act.Persistent {
|
|
pers = "true"
|
|
}
|
|
|
|
for i := 0; i < act.Copies; i++ {
|
|
fmt.Printf("\\action{%v}{%v}{%v}{%v}\n", name, desc, inst, pers)
|
|
}
|
|
}
|
|
|
|
s, _ := os.Open("cards/stances.json")
|
|
defer s.Close()
|
|
dec = json.NewDecoder(s)
|
|
stances := []Stance{}
|
|
if err := dec.Decode(&stances); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
fmt.Print("\n% STANCES\n")
|
|
for _, stn := range stances {
|
|
name, ex := stn.Name[lang]
|
|
if !ex {
|
|
panic(fmt.Sprintf("No '%v' language Name for stance card %v", lang, stn))
|
|
}
|
|
|
|
desc, ex := stn.Description[lang]
|
|
if !ex {
|
|
panic(fmt.Sprintf("No '%v' language Description for stance card %v", lang, stn))
|
|
}
|
|
|
|
stancetype := strings.ToUpper(stn.Type)
|
|
|
|
for i := 0; i < stn.Copies; i++ {
|
|
fmt.Printf("\\stance{%v}{%v}{%v}{%v}{%v}\n", name, desc, stancetype, stn.AgainstBargain, stn.AgainstBetrayal)
|
|
}
|
|
}
|
|
|
|
f, _ := os.Open("cards/finals.json")
|
|
defer f.Close()
|
|
dec = json.NewDecoder(f)
|
|
finals := []Final{}
|
|
if err := dec.Decode(&finals); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
fmt.Print("\n% FINALS\n")
|
|
for _, fin := range finals {
|
|
name, ex := fin.Name[lang]
|
|
if !ex {
|
|
panic(fmt.Sprintf("No '%v' language Name for final card %v", lang, fin))
|
|
}
|
|
|
|
desc, ex := fin.Description[lang]
|
|
if !ex {
|
|
panic(fmt.Sprintf("No '%v' language Description for final card %v", lang, fin))
|
|
}
|
|
|
|
for i := 0; i < fin.Copies; i++ {
|
|
fmt.Printf("\\final{%v}{%v}{%v}\n", name, desc, fin.Priority)
|
|
}
|
|
}
|
|
|
|
//TODO
|
|
m, _ := os.Open("cards/missions.json")
|
|
defer f.Close()
|
|
dec = json.NewDecoder(m)
|
|
missions := []Mission{}
|
|
if err := dec.Decode(&missions); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|