codegen
This commit is contained in:
parent
ed3cb294c9
commit
d53212326d
|
@ -9,8 +9,8 @@ ARG NODE_VERSION="none"
|
||||||
RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi
|
RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi
|
||||||
|
|
||||||
# [Optional] Uncomment this section to install additional OS packages.
|
# [Optional] Uncomment this section to install additional OS packages.
|
||||||
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
|
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
|
||||||
# && apt-get -y install --no-install-recommends <your-package-list-here>
|
&& apt-get -y install --no-install-recommends graphviz
|
||||||
|
|
||||||
# [Optional] Uncomment the next lines to use go get to install anything else you need
|
# [Optional] Uncomment the next lines to use go get to install anything else you need
|
||||||
# USER vscode
|
# USER vscode
|
||||||
|
|
|
@ -0,0 +1,304 @@
|
||||||
|
package analyze
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"encoding/xml"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
"legendsbrowser/util"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"sort"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"text/template"
|
||||||
|
|
||||||
|
"github.com/iancoleman/strcase"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Analyze(filex string) {
|
||||||
|
files, err := filepath.Glob("*.xml")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
fmt.Println(files)
|
||||||
|
|
||||||
|
files = []string{filex}
|
||||||
|
|
||||||
|
a := NewAnalyzeData()
|
||||||
|
|
||||||
|
for _, file := range files {
|
||||||
|
xmlFile, err := os.Open(file)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Successfully Opened", file)
|
||||||
|
defer xmlFile.Close()
|
||||||
|
|
||||||
|
converter := util.NewConvertReader(xmlFile)
|
||||||
|
analyze(converter, a)
|
||||||
|
}
|
||||||
|
|
||||||
|
createMetadata(a)
|
||||||
|
}
|
||||||
|
|
||||||
|
type analyzeData struct {
|
||||||
|
path []string
|
||||||
|
types *map[string]bool
|
||||||
|
fields *map[string]bool
|
||||||
|
isString *map[string]bool
|
||||||
|
multiple *map[string]bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewAnalyzeData() analyzeData {
|
||||||
|
path := make([]string, 0)
|
||||||
|
types := make(map[string]bool, 0)
|
||||||
|
fields := make(map[string]bool, 0)
|
||||||
|
isString := make(map[string]bool, 0)
|
||||||
|
multiple := make(map[string]bool, 0)
|
||||||
|
|
||||||
|
return analyzeData{
|
||||||
|
path: path,
|
||||||
|
types: &types,
|
||||||
|
fields: &fields,
|
||||||
|
isString: &isString,
|
||||||
|
multiple: &multiple,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func analyzeElement(d *xml.Decoder, a analyzeData) error {
|
||||||
|
if len(a.path) > 1 {
|
||||||
|
(*a.fields)[strings.Join(a.path, ">")] = true
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
data []byte
|
||||||
|
)
|
||||||
|
value := true
|
||||||
|
|
||||||
|
fields := make(map[string]bool)
|
||||||
|
|
||||||
|
Loop:
|
||||||
|
for {
|
||||||
|
tok, err := d.Token()
|
||||||
|
if err == io.EOF {
|
||||||
|
break Loop
|
||||||
|
} else if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
switch t := tok.(type) {
|
||||||
|
case xml.StartElement:
|
||||||
|
value = false
|
||||||
|
|
||||||
|
(*a.types)[strings.Join(a.path, ">")] = true
|
||||||
|
|
||||||
|
a2 := a
|
||||||
|
a2.path = append(a.path, t.Name.Local)
|
||||||
|
|
||||||
|
if _, ok := fields[t.Name.Local]; ok {
|
||||||
|
(*a.multiple)[strings.Join(a2.path, ">")] = true
|
||||||
|
}
|
||||||
|
fields[t.Name.Local] = true
|
||||||
|
|
||||||
|
analyzeElement(d, a2)
|
||||||
|
|
||||||
|
case xml.CharData:
|
||||||
|
data = append(data, t...)
|
||||||
|
|
||||||
|
case xml.EndElement:
|
||||||
|
if value {
|
||||||
|
if _, err := strconv.Atoi(string(data)); err != nil {
|
||||||
|
(*a.isString)[strings.Join(a.path, ">")] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if t.Name.Local == "type" {
|
||||||
|
a.path[len(a.path)-2] = a.path[len(a.path)-2] + strcase.ToCamel(string(data))
|
||||||
|
fmt.Println(a.path)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func analyze(r io.Reader, a analyzeData) error {
|
||||||
|
d := xml.NewDecoder(r)
|
||||||
|
return analyzeElement(d, a)
|
||||||
|
}
|
||||||
|
|
||||||
|
func createMetadata(a analyzeData) {
|
||||||
|
ts := util.Keys(*a.types)
|
||||||
|
sort.Strings(ts)
|
||||||
|
|
||||||
|
fs := util.Keys(*a.fields)
|
||||||
|
sort.Strings(fs)
|
||||||
|
|
||||||
|
objects := make(map[string]Object, 0)
|
||||||
|
|
||||||
|
for _, k := range ts {
|
||||||
|
if ok, _ := isArray(k, fs); !ok {
|
||||||
|
n := k
|
||||||
|
if strings.Contains(k, ">") {
|
||||||
|
n = k[strings.LastIndex(k, ">")+1:]
|
||||||
|
}
|
||||||
|
|
||||||
|
if n == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
objFields := make(map[string]Field, 0)
|
||||||
|
|
||||||
|
fmt.Println("\n", n)
|
||||||
|
for _, f := range fs {
|
||||||
|
if strings.HasPrefix(f, k+">") {
|
||||||
|
fn := f[len(k)+1:]
|
||||||
|
if !strings.Contains(fn, ">") {
|
||||||
|
fmt.Println(" ", fn)
|
||||||
|
|
||||||
|
if ok, elements := isArray(f, fs); ok {
|
||||||
|
el := elements[strings.LastIndex(elements, ">")+1:]
|
||||||
|
objFields[fn] = Field{
|
||||||
|
Name: strcase.ToCamel(fn),
|
||||||
|
Type: "array",
|
||||||
|
ElementType: &(el),
|
||||||
|
}
|
||||||
|
} else if ok, _ := isObject(f, fs); ok {
|
||||||
|
objFields[fn] = Field{
|
||||||
|
Name: strcase.ToCamel(fn),
|
||||||
|
Type: "object",
|
||||||
|
Multiple: (*a.multiple)[f],
|
||||||
|
}
|
||||||
|
} else if (*a.isString)[f] {
|
||||||
|
objFields[fn] = Field{
|
||||||
|
Name: strcase.ToCamel(fn),
|
||||||
|
Type: "string",
|
||||||
|
Multiple: (*a.multiple)[f],
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
objFields[fn] = Field{
|
||||||
|
Name: strcase.ToCamel(fn),
|
||||||
|
Type: "int",
|
||||||
|
Multiple: (*a.multiple)[f],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
objects[n] = Object{
|
||||||
|
Name: strcase.ToCamel(n),
|
||||||
|
Id: (*a.fields)[k+">id"],
|
||||||
|
Named: (*a.fields)[k+">name"],
|
||||||
|
Typed: (*a.fields)[k+">type"],
|
||||||
|
Fields: objFields,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
file, _ := json.MarshalIndent(objects, "", " ")
|
||||||
|
_ = ioutil.WriteFile("model.json", file, 0644)
|
||||||
|
|
||||||
|
f, err := os.Create("contributors.go")
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
err = packageTemplate.Execute(f, struct {
|
||||||
|
Objects map[string]Object
|
||||||
|
}{
|
||||||
|
Objects: objects,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func isArray(typ string, types []string) (bool, string) {
|
||||||
|
fc := 0
|
||||||
|
elements := ""
|
||||||
|
|
||||||
|
for _, t := range types {
|
||||||
|
if !strings.HasPrefix(t, typ+">") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
f := t[len(typ)+1:]
|
||||||
|
if strings.Contains(f, ">") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
fc++
|
||||||
|
elements = t
|
||||||
|
}
|
||||||
|
return fc == 1, elements
|
||||||
|
}
|
||||||
|
|
||||||
|
func isObject(typ string, types []string) (bool, string) {
|
||||||
|
fc := 0
|
||||||
|
|
||||||
|
for _, t := range types {
|
||||||
|
if !strings.HasPrefix(t, typ+">") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
fc++
|
||||||
|
}
|
||||||
|
return fc > 0, typ
|
||||||
|
}
|
||||||
|
|
||||||
|
type Object struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Id bool `json:"id,omitempty"`
|
||||||
|
Named bool `json:"named,omitempty"`
|
||||||
|
Typed bool `json:"typed,omitempty"`
|
||||||
|
Fields map[string]Field `json:"fields"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Field struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
Multiple bool `json:"multiple,omitempty"`
|
||||||
|
ElementType *string `json:"elements,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f Field) TypeLine(objects map[string]Object) string {
|
||||||
|
n := f.Name
|
||||||
|
|
||||||
|
if n == "Id" || n == "Name" {
|
||||||
|
n = n + "_"
|
||||||
|
}
|
||||||
|
|
||||||
|
m := ""
|
||||||
|
if f.Multiple {
|
||||||
|
m = "[]"
|
||||||
|
}
|
||||||
|
t := f.Type
|
||||||
|
if f.Type == "array" {
|
||||||
|
t = "map[int]*" + objects[*f.ElementType].Name
|
||||||
|
}
|
||||||
|
if f.Type == "object" {
|
||||||
|
t = f.Name
|
||||||
|
}
|
||||||
|
j := "`json:\"" + strcase.ToLowerCamel(f.Name) + "\"`"
|
||||||
|
return fmt.Sprintf("%s %s%s %s", n, m, t, j)
|
||||||
|
}
|
||||||
|
|
||||||
|
var packageTemplate = template.Must(template.New("").Parse(`// Code generated by go generate; DO NOT EDIT.
|
||||||
|
package generate
|
||||||
|
|
||||||
|
{{- range $name, $obj := .Objects }}
|
||||||
|
type {{ $obj.Name }} struct {
|
||||||
|
{{- range $fname, $field := $obj.Fields }}
|
||||||
|
{{ $field.TypeLine $.Objects }}
|
||||||
|
{{- end }}
|
||||||
|
}
|
||||||
|
|
||||||
|
{{- if $obj.Id }}
|
||||||
|
func (x *{{ $obj.Name }}) Id() int { return x.Id_ }
|
||||||
|
{{- end }}
|
||||||
|
{{- if $obj.Named }}
|
||||||
|
func (x *{{ $obj.Name }}) Name() string { return x.Name_ }
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- end }}
|
||||||
|
`))
|
|
@ -0,0 +1,745 @@
|
||||||
|
// Code generated by go generate; DO NOT EDIT.
|
||||||
|
package generate
|
||||||
|
type Artifact struct {
|
||||||
|
AbsTileX int `json:"absTileX"`
|
||||||
|
AbsTileY int `json:"absTileY"`
|
||||||
|
AbsTileZ int `json:"absTileZ"`
|
||||||
|
HolderHfid int `json:"holderHfid"`
|
||||||
|
Id_ int `json:"id"`
|
||||||
|
Item Item `json:"item"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
StructureLocalId int `json:"structureLocalId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
}
|
||||||
|
func (x *Artifact) Id() int { return x.Id_ }
|
||||||
|
func (x *Artifact) Name() string { return x.Name_ }
|
||||||
|
type DanceForm struct {
|
||||||
|
Description string `json:"description"`
|
||||||
|
Id_ int `json:"id"`
|
||||||
|
}
|
||||||
|
func (x *DanceForm) Id() int { return x.Id_ }
|
||||||
|
type DfWorld struct {
|
||||||
|
Artifacts map[int]*Artifact `json:"artifacts"`
|
||||||
|
DanceForms map[int]*DanceForm `json:"danceForms"`
|
||||||
|
Entities map[int]*Entity `json:"entities"`
|
||||||
|
EntityPopulations map[int]* `json:"entityPopulations"`
|
||||||
|
HistoricalEras map[int]*HistoricalEra `json:"historicalEras"`
|
||||||
|
HistoricalEventCollections map[int]*HistoricalEventCollection `json:"historicalEventCollections"`
|
||||||
|
HistoricalEvents map[int]*HistoricalEvent `json:"historicalEvents"`
|
||||||
|
HistoricalFigures map[int]*HistoricalFigure `json:"historicalFigures"`
|
||||||
|
MusicalForms map[int]*MusicalForm `json:"musicalForms"`
|
||||||
|
PoeticForms map[int]*PoeticForm `json:"poeticForms"`
|
||||||
|
Regions map[int]*Region `json:"regions"`
|
||||||
|
Sites map[int]*Site `json:"sites"`
|
||||||
|
UndergroundRegions map[int]*UndergroundRegion `json:"undergroundRegions"`
|
||||||
|
WorldConstructions string `json:"worldConstructions"`
|
||||||
|
WrittenContents map[int]*WrittenContent `json:"writtenContents"`
|
||||||
|
}
|
||||||
|
type Entity struct {
|
||||||
|
Id_ int `json:"id"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
}
|
||||||
|
func (x *Entity) Id() int { return x.Id_ }
|
||||||
|
func (x *Entity) Name() string { return x.Name_ }
|
||||||
|
type EntityFormerPositionLink struct {
|
||||||
|
EndYear int `json:"endYear"`
|
||||||
|
EntityId int `json:"entityId"`
|
||||||
|
PositionProfileId int `json:"positionProfileId"`
|
||||||
|
StartYear int `json:"startYear"`
|
||||||
|
}
|
||||||
|
type EntityLink struct {
|
||||||
|
EntityId int `json:"entityId"`
|
||||||
|
LinkStrength int `json:"linkStrength"`
|
||||||
|
LinkType string `json:"linkType"`
|
||||||
|
}
|
||||||
|
type EntityPositionLink struct {
|
||||||
|
EntityId int `json:"entityId"`
|
||||||
|
PositionProfileId int `json:"positionProfileId"`
|
||||||
|
StartYear int `json:"startYear"`
|
||||||
|
}
|
||||||
|
type EntitySquadLink struct {
|
||||||
|
EntityId int `json:"entityId"`
|
||||||
|
SquadId int `json:"squadId"`
|
||||||
|
SquadPosition int `json:"squadPosition"`
|
||||||
|
StartYear int `json:"startYear"`
|
||||||
|
}
|
||||||
|
type HfLink struct {
|
||||||
|
Hfid int `json:"hfid"`
|
||||||
|
LinkStrength int `json:"linkStrength"`
|
||||||
|
LinkType string `json:"linkType"`
|
||||||
|
}
|
||||||
|
type HfSkill struct {
|
||||||
|
Skill string `json:"skill"`
|
||||||
|
TotalIp int `json:"totalIp"`
|
||||||
|
}
|
||||||
|
type HistoricalEra struct {
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
StartYear int `json:"startYear"`
|
||||||
|
}
|
||||||
|
func (x *HistoricalEra) Name() string { return x.Name_ }
|
||||||
|
type HistoricalEvent struct {
|
||||||
|
Id_ int `json:"id"`
|
||||||
|
Seconds72 int `json:"seconds72"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
Year int `json:"year"`
|
||||||
|
}
|
||||||
|
func (x *HistoricalEvent) Id() int { return x.Id_ }
|
||||||
|
type HistoricalEventAddHfEntityLink struct {
|
||||||
|
CivId int `json:"civId"`
|
||||||
|
Hfid int `json:"hfid"`
|
||||||
|
Link string `json:"link"`
|
||||||
|
PositionId int `json:"positionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventAddHfHfLink struct {
|
||||||
|
Hfid int `json:"hfid"`
|
||||||
|
HfidTarget int `json:"hfidTarget"`
|
||||||
|
}
|
||||||
|
type HistoricalEventArtifactClaimFormed struct {
|
||||||
|
ArtifactId int `json:"artifactId"`
|
||||||
|
Circumstance string `json:"circumstance"`
|
||||||
|
Claim string `json:"claim"`
|
||||||
|
EntityId int `json:"entityId"`
|
||||||
|
HistFigureId int `json:"histFigureId"`
|
||||||
|
PositionProfileId int `json:"positionProfileId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventArtifactCreated struct {
|
||||||
|
ArtifactId int `json:"artifactId"`
|
||||||
|
HistFigureId int `json:"histFigureId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
UnitId int `json:"unitId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventArtifactLost struct {
|
||||||
|
ArtifactId int `json:"artifactId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventArtifactStored struct {
|
||||||
|
ArtifactId int `json:"artifactId"`
|
||||||
|
HistFigureId int `json:"histFigureId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
UnitId int `json:"unitId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventAssumeIdentity struct {
|
||||||
|
IdentityId int `json:"identityId"`
|
||||||
|
TargetEnid int `json:"targetEnid"`
|
||||||
|
TricksterHfid int `json:"tricksterHfid"`
|
||||||
|
}
|
||||||
|
type HistoricalEventAttackedSite struct {
|
||||||
|
AttackerCivId int `json:"attackerCivId"`
|
||||||
|
AttackerGeneralHfid int `json:"attackerGeneralHfid"`
|
||||||
|
DefenderCivId int `json:"defenderCivId"`
|
||||||
|
DefenderGeneralHfid int `json:"defenderGeneralHfid"`
|
||||||
|
SiteCivId int `json:"siteCivId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventBodyAbused struct {
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventCeremony struct {
|
||||||
|
CivId int `json:"civId"`
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
OccasionId int `json:"occasionId"`
|
||||||
|
ScheduleId int `json:"scheduleId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventChangeHfJob struct {
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
Hfid int `json:"hfid"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventChangeHfState struct {
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
Hfid int `json:"hfid"`
|
||||||
|
Mood string `json:"mood"`
|
||||||
|
Reason string `json:"reason"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
State string `json:"state"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventChangedCreatureType struct {
|
||||||
|
ChangeeHfid int `json:"changeeHfid"`
|
||||||
|
ChangerHfid int `json:"changerHfid"`
|
||||||
|
NewCaste string `json:"newCaste"`
|
||||||
|
NewRace string `json:"newRace"`
|
||||||
|
OldCaste string `json:"oldCaste"`
|
||||||
|
OldRace string `json:"oldRace"`
|
||||||
|
}
|
||||||
|
type HistoricalEventCompetition struct {
|
||||||
|
CivId int `json:"civId"`
|
||||||
|
CompetitorHfid []int `json:"competitorHfid"`
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
OccasionId int `json:"occasionId"`
|
||||||
|
ScheduleId int `json:"scheduleId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
WinnerHfid int `json:"winnerHfid"`
|
||||||
|
}
|
||||||
|
type HistoricalEventCreatedSite struct {
|
||||||
|
BuilderHfid int `json:"builderHfid"`
|
||||||
|
CivId int `json:"civId"`
|
||||||
|
SiteCivId int `json:"siteCivId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventCreatedStructure struct {
|
||||||
|
BuilderHfid int `json:"builderHfid"`
|
||||||
|
CivId int `json:"civId"`
|
||||||
|
SiteCivId int `json:"siteCivId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
StructureId int `json:"structureId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventCreatedWorldConstruction struct {
|
||||||
|
CivId int `json:"civId"`
|
||||||
|
MasterWcid int `json:"masterWcid"`
|
||||||
|
SiteCivId int `json:"siteCivId"`
|
||||||
|
SiteId1 int `json:"siteId1"`
|
||||||
|
SiteId2 int `json:"siteId2"`
|
||||||
|
Wcid int `json:"wcid"`
|
||||||
|
}
|
||||||
|
type HistoricalEventCreatureDevoured struct {
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventEntityAllianceFormed struct {
|
||||||
|
InitiatingEnid int `json:"initiatingEnid"`
|
||||||
|
JoiningEnid int `json:"joiningEnid"`
|
||||||
|
}
|
||||||
|
type HistoricalEventEntityBreachFeatureLayer struct {
|
||||||
|
CivEntityId int `json:"civEntityId"`
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
SiteEntityId int `json:"siteEntityId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventEntityCreated struct {
|
||||||
|
EntityId int `json:"entityId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
StructureId int `json:"structureId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventFailedFrameAttempt struct {
|
||||||
|
ConvicterEnid int `json:"convicterEnid"`
|
||||||
|
Crime string `json:"crime"`
|
||||||
|
FooledHfid int `json:"fooledHfid"`
|
||||||
|
FramerHfid int `json:"framerHfid"`
|
||||||
|
TargetHfid int `json:"targetHfid"`
|
||||||
|
}
|
||||||
|
type HistoricalEventFieldBattle struct {
|
||||||
|
AttackerCivId int `json:"attackerCivId"`
|
||||||
|
AttackerGeneralHfid int `json:"attackerGeneralHfid"`
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
DefenderCivId int `json:"defenderCivId"`
|
||||||
|
DefenderGeneralHfid int `json:"defenderGeneralHfid"`
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventGamble struct {
|
||||||
|
GamblerHfid int `json:"gamblerHfid"`
|
||||||
|
NewAccount int `json:"newAccount"`
|
||||||
|
OldAccount int `json:"oldAccount"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
StructureId int `json:"structureId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventHfAbducted struct {
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SnatcherHfid int `json:"snatcherHfid"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
TargetHfid int `json:"targetHfid"`
|
||||||
|
}
|
||||||
|
type HistoricalEventHfAttackedSite struct {
|
||||||
|
AttackerHfid int `json:"attackerHfid"`
|
||||||
|
DefenderCivId int `json:"defenderCivId"`
|
||||||
|
SiteCivId int `json:"siteCivId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventHfConvicted struct {
|
||||||
|
ConvictedHfid int `json:"convictedHfid"`
|
||||||
|
ConvicterEnid int `json:"convicterEnid"`
|
||||||
|
Crime string `json:"crime"`
|
||||||
|
PrisonMonths int `json:"prisonMonths"`
|
||||||
|
}
|
||||||
|
type HistoricalEventHfDestroyedSite struct {
|
||||||
|
AttackerHfid int `json:"attackerHfid"`
|
||||||
|
DefenderCivId int `json:"defenderCivId"`
|
||||||
|
SiteCivId int `json:"siteCivId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventHfDied struct {
|
||||||
|
Cause string `json:"cause"`
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
Hfid int `json:"hfid"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SlayerCaste string `json:"slayerCaste"`
|
||||||
|
SlayerHfid int `json:"slayerHfid"`
|
||||||
|
SlayerItemId int `json:"slayerItemId"`
|
||||||
|
SlayerRace string `json:"slayerRace"`
|
||||||
|
SlayerShooterItemId int `json:"slayerShooterItemId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventHfGainsSecretGoal struct {
|
||||||
|
Hfid int `json:"hfid"`
|
||||||
|
SecretGoal string `json:"secretGoal"`
|
||||||
|
}
|
||||||
|
type HistoricalEventHfNewPet struct {
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
GroupHfid int `json:"groupHfid"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventHfRelationshipDenied struct {
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
Reason string `json:"reason"`
|
||||||
|
ReasonId int `json:"reasonId"`
|
||||||
|
Relationship string `json:"relationship"`
|
||||||
|
SeekerHfid int `json:"seekerHfid"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
TargetHfid int `json:"targetHfid"`
|
||||||
|
}
|
||||||
|
type HistoricalEventHfSimpleBattleEvent struct {
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
Group1Hfid int `json:"group1Hfid"`
|
||||||
|
Group2Hfid int `json:"group2Hfid"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
Subtype string `json:"subtype"`
|
||||||
|
}
|
||||||
|
type HistoricalEventHfTravel struct {
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
GroupHfid int `json:"groupHfid"`
|
||||||
|
Return string `json:"return"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventHfWounded struct {
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
WoundeeHfid int `json:"woundeeHfid"`
|
||||||
|
WounderHfid int `json:"wounderHfid"`
|
||||||
|
}
|
||||||
|
type HistoricalEventHfsFormedReputationRelationship struct {
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
HfRep1Of2 string `json:"hfRep1Of2"`
|
||||||
|
HfRep2Of1 string `json:"hfRep2Of1"`
|
||||||
|
Hfid1 int `json:"hfid1"`
|
||||||
|
Hfid2 int `json:"hfid2"`
|
||||||
|
IdentityId1 int `json:"identityId1"`
|
||||||
|
IdentityId2 int `json:"identityId2"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventItemStolen struct {
|
||||||
|
Circumstance string `json:"circumstance"`
|
||||||
|
CircumstanceId int `json:"circumstanceId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventKnowledgeDiscovered struct {
|
||||||
|
First string `json:"first"`
|
||||||
|
Hfid int `json:"hfid"`
|
||||||
|
Knowledge string `json:"knowledge"`
|
||||||
|
}
|
||||||
|
type HistoricalEventMasterpieceItem struct {
|
||||||
|
EntityId int `json:"entityId"`
|
||||||
|
Hfid int `json:"hfid"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SkillAtTime int `json:"skillAtTime"`
|
||||||
|
}
|
||||||
|
type HistoricalEventMerchant struct {
|
||||||
|
DepotEntityId int `json:"depotEntityId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
TraderEntityId int `json:"traderEntityId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventPerformance struct {
|
||||||
|
CivId int `json:"civId"`
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
OccasionId int `json:"occasionId"`
|
||||||
|
ScheduleId int `json:"scheduleId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventPlunderedSite struct {
|
||||||
|
AttackerCivId int `json:"attackerCivId"`
|
||||||
|
DefenderCivId int `json:"defenderCivId"`
|
||||||
|
Detected string `json:"detected"`
|
||||||
|
SiteCivId int `json:"siteCivId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventProcession struct {
|
||||||
|
CivId int `json:"civId"`
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
OccasionId int `json:"occasionId"`
|
||||||
|
ScheduleId int `json:"scheduleId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventRazedStructure struct {
|
||||||
|
CivId int `json:"civId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
StructureId int `json:"structureId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventReclaimSite struct {
|
||||||
|
CivId int `json:"civId"`
|
||||||
|
SiteCivId int `json:"siteCivId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventRemoveHfEntityLink struct {
|
||||||
|
CivId int `json:"civId"`
|
||||||
|
Hfid int `json:"hfid"`
|
||||||
|
Link string `json:"link"`
|
||||||
|
PositionId int `json:"positionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventRemoveHfHfLink struct {
|
||||||
|
Hfid int `json:"hfid"`
|
||||||
|
HfidTarget int `json:"hfidTarget"`
|
||||||
|
}
|
||||||
|
type HistoricalEventSiteDispute struct {
|
||||||
|
Dispute string `json:"dispute"`
|
||||||
|
EntityId1 int `json:"entityId1"`
|
||||||
|
EntityId2 int `json:"entityId2"`
|
||||||
|
SiteId1 int `json:"siteId1"`
|
||||||
|
SiteId2 int `json:"siteId2"`
|
||||||
|
}
|
||||||
|
type HistoricalEventSiteTakenOver struct {
|
||||||
|
AttackerCivId int `json:"attackerCivId"`
|
||||||
|
DefenderCivId int `json:"defenderCivId"`
|
||||||
|
NewSiteCivId int `json:"newSiteCivId"`
|
||||||
|
SiteCivId int `json:"siteCivId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventSquadVsSquad struct {
|
||||||
|
AHfid int `json:"aHfid"`
|
||||||
|
ASquadId int `json:"aSquadId"`
|
||||||
|
DEffect int `json:"dEffect"`
|
||||||
|
DInteraction int `json:"dInteraction"`
|
||||||
|
DNumber int `json:"dNumber"`
|
||||||
|
DRace int `json:"dRace"`
|
||||||
|
DSlain int `json:"dSlain"`
|
||||||
|
DSquadId int `json:"dSquadId"`
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
StructureId int `json:"structureId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventTacticalSituation struct {
|
||||||
|
ATacticianHfid int `json:"aTacticianHfid"`
|
||||||
|
ATacticsRoll int `json:"aTacticsRoll"`
|
||||||
|
DTacticianHfid int `json:"dTacticianHfid"`
|
||||||
|
DTacticsRoll int `json:"dTacticsRoll"`
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
Situation string `json:"situation"`
|
||||||
|
Start string `json:"start"`
|
||||||
|
StructureId int `json:"structureId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventWrittenContentComposed struct {
|
||||||
|
Circumstance string `json:"circumstance"`
|
||||||
|
CircumstanceId int `json:"circumstanceId"`
|
||||||
|
HistFigureId int `json:"histFigureId"`
|
||||||
|
Reason string `json:"reason"`
|
||||||
|
ReasonId int `json:"reasonId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
WcId int `json:"wcId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventCollection struct {
|
||||||
|
EndSeconds72 int `json:"endSeconds72"`
|
||||||
|
EndYear int `json:"endYear"`
|
||||||
|
Event []int `json:"event"`
|
||||||
|
Eventcol []int `json:"eventcol"`
|
||||||
|
Id_ int `json:"id"`
|
||||||
|
StartSeconds72 int `json:"startSeconds72"`
|
||||||
|
StartYear int `json:"startYear"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
}
|
||||||
|
func (x *HistoricalEventCollection) Id() int { return x.Id_ }
|
||||||
|
type HistoricalEventCollectionBattle struct {
|
||||||
|
AttackingHfid []int `json:"attackingHfid"`
|
||||||
|
AttackingSquadDeaths []int `json:"attackingSquadDeaths"`
|
||||||
|
AttackingSquadEntityPop []int `json:"attackingSquadEntityPop"`
|
||||||
|
AttackingSquadNumber []int `json:"attackingSquadNumber"`
|
||||||
|
AttackingSquadRace []string `json:"attackingSquadRace"`
|
||||||
|
AttackingSquadSite []int `json:"attackingSquadSite"`
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
DefendingHfid []int `json:"defendingHfid"`
|
||||||
|
DefendingSquadDeaths []int `json:"defendingSquadDeaths"`
|
||||||
|
DefendingSquadEntityPop []int `json:"defendingSquadEntityPop"`
|
||||||
|
DefendingSquadNumber []int `json:"defendingSquadNumber"`
|
||||||
|
DefendingSquadRace []string `json:"defendingSquadRace"`
|
||||||
|
DefendingSquadSite []int `json:"defendingSquadSite"`
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
IndividualMerc []string `json:"individualMerc"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
NoncomHfid []int `json:"noncomHfid"`
|
||||||
|
Outcome string `json:"outcome"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
WarEventcol int `json:"warEventcol"`
|
||||||
|
}
|
||||||
|
func (x *HistoricalEventCollectionBattle) Name() string { return x.Name_ }
|
||||||
|
type HistoricalEventCollectionBeastAttack struct {
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
DefendingEnid int `json:"defendingEnid"`
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
Ordinal int `json:"ordinal"`
|
||||||
|
ParentEventcol int `json:"parentEventcol"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventCollectionDuel struct {
|
||||||
|
AttackingHfid int `json:"attackingHfid"`
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
DefendingHfid int `json:"defendingHfid"`
|
||||||
|
FeatureLayerId int `json:"featureLayerId"`
|
||||||
|
Ordinal int `json:"ordinal"`
|
||||||
|
ParentEventcol int `json:"parentEventcol"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SubregionId int `json:"subregionId"`
|
||||||
|
}
|
||||||
|
type HistoricalEventCollectionOccasion struct {
|
||||||
|
CivId int `json:"civId"`
|
||||||
|
OccasionId int `json:"occasionId"`
|
||||||
|
Ordinal int `json:"ordinal"`
|
||||||
|
}
|
||||||
|
type HistoricalEventCollectionSiteConquered struct {
|
||||||
|
AttackingEnid int `json:"attackingEnid"`
|
||||||
|
DefendingEnid int `json:"defendingEnid"`
|
||||||
|
Ordinal int `json:"ordinal"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
WarEventcol int `json:"warEventcol"`
|
||||||
|
}
|
||||||
|
type HistoricalEventCollectionWar struct {
|
||||||
|
AggressorEntId int `json:"aggressorEntId"`
|
||||||
|
DefenderEntId int `json:"defenderEntId"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
}
|
||||||
|
func (x *HistoricalEventCollectionWar) Name() string { return x.Name_ }
|
||||||
|
type HistoricalFigure struct {
|
||||||
|
Appeared int `json:"appeared"`
|
||||||
|
AssociatedType string `json:"associatedType"`
|
||||||
|
BirthSeconds72 int `json:"birthSeconds72"`
|
||||||
|
BirthYear int `json:"birthYear"`
|
||||||
|
Caste string `json:"caste"`
|
||||||
|
CurrentIdentityId int `json:"currentIdentityId"`
|
||||||
|
DeathSeconds72 int `json:"deathSeconds72"`
|
||||||
|
DeathYear int `json:"deathYear"`
|
||||||
|
Deity string `json:"deity"`
|
||||||
|
EntPopId int `json:"entPopId"`
|
||||||
|
EntityFormerPositionLink []EntityFormerPositionLink `json:"entityFormerPositionLink"`
|
||||||
|
EntityLink []EntityLink `json:"entityLink"`
|
||||||
|
EntityPositionLink []EntityPositionLink `json:"entityPositionLink"`
|
||||||
|
EntityReputation map[int]* `json:"entityReputation"`
|
||||||
|
EntitySquadLink EntitySquadLink `json:"entitySquadLink"`
|
||||||
|
Force string `json:"force"`
|
||||||
|
Goal []string `json:"goal"`
|
||||||
|
HfLink []HfLink `json:"hfLink"`
|
||||||
|
HfSkill []HfSkill `json:"hfSkill"`
|
||||||
|
HoldsArtifact int `json:"holdsArtifact"`
|
||||||
|
Id_ int `json:"id"`
|
||||||
|
InteractionKnowledge []string `json:"interactionKnowledge"`
|
||||||
|
IntrigueActor IntrigueActor `json:"intrigueActor"`
|
||||||
|
IntriguePlot []IntriguePlot `json:"intriguePlot"`
|
||||||
|
JourneyPet []string `json:"journeyPet"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
Race string `json:"race"`
|
||||||
|
RelationshipProfileHfHistorical RelationshipProfileHfHistorical `json:"relationshipProfileHfHistorical"`
|
||||||
|
RelationshipProfileHfVisual []RelationshipProfileHfVisual `json:"relationshipProfileHfVisual"`
|
||||||
|
SiteLink SiteLink `json:"siteLink"`
|
||||||
|
Sphere []string `json:"sphere"`
|
||||||
|
UsedIdentityId int `json:"usedIdentityId"`
|
||||||
|
VagueRelationship []VagueRelationship `json:"vagueRelationship"`
|
||||||
|
}
|
||||||
|
func (x *HistoricalFigure) Id() int { return x.Id_ }
|
||||||
|
func (x *HistoricalFigure) Name() string { return x.Name_ }
|
||||||
|
type IntrigueActor struct {
|
||||||
|
Hfid int `json:"hfid"`
|
||||||
|
LocalId int `json:"localId"`
|
||||||
|
Role string `json:"role"`
|
||||||
|
Strategy string `json:"strategy"`
|
||||||
|
}
|
||||||
|
type IntriguePlot struct {
|
||||||
|
ActorId int `json:"actorId"`
|
||||||
|
ArtifactId int `json:"artifactId"`
|
||||||
|
EntityId int `json:"entityId"`
|
||||||
|
LocalId int `json:"localId"`
|
||||||
|
OnHold string `json:"onHold"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
}
|
||||||
|
type Item struct {
|
||||||
|
NameString string `json:"nameString"`
|
||||||
|
PageNumber int `json:"pageNumber"`
|
||||||
|
PageWrittenContentId int `json:"pageWrittenContentId"`
|
||||||
|
WritingWrittenContentId int `json:"writingWrittenContentId"`
|
||||||
|
}
|
||||||
|
type MusicalForm struct {
|
||||||
|
Description string `json:"description"`
|
||||||
|
Id_ int `json:"id"`
|
||||||
|
}
|
||||||
|
func (x *MusicalForm) Id() int { return x.Id_ }
|
||||||
|
type PoeticForm struct {
|
||||||
|
Description string `json:"description"`
|
||||||
|
Id_ int `json:"id"`
|
||||||
|
}
|
||||||
|
func (x *PoeticForm) Id() int { return x.Id_ }
|
||||||
|
type Region struct {
|
||||||
|
Id_ int `json:"id"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
}
|
||||||
|
func (x *Region) Id() int { return x.Id_ }
|
||||||
|
func (x *Region) Name() string { return x.Name_ }
|
||||||
|
type RelationshipProfileHfHistorical struct {
|
||||||
|
Fear int `json:"fear"`
|
||||||
|
HfId int `json:"hfId"`
|
||||||
|
Love int `json:"love"`
|
||||||
|
Loyalty int `json:"loyalty"`
|
||||||
|
Respect int `json:"respect"`
|
||||||
|
Trust int `json:"trust"`
|
||||||
|
}
|
||||||
|
type RelationshipProfileHfVisual struct {
|
||||||
|
Fear int `json:"fear"`
|
||||||
|
HfId int `json:"hfId"`
|
||||||
|
KnownIdentityId int `json:"knownIdentityId"`
|
||||||
|
LastMeetSeconds72 int `json:"lastMeetSeconds72"`
|
||||||
|
LastMeetYear int `json:"lastMeetYear"`
|
||||||
|
Love int `json:"love"`
|
||||||
|
Loyalty int `json:"loyalty"`
|
||||||
|
MeetCount int `json:"meetCount"`
|
||||||
|
RepFriendly int `json:"repFriendly"`
|
||||||
|
RepInformationSource int `json:"repInformationSource"`
|
||||||
|
Respect int `json:"respect"`
|
||||||
|
Trust int `json:"trust"`
|
||||||
|
}
|
||||||
|
type Site struct {
|
||||||
|
Id_ int `json:"id"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
}
|
||||||
|
func (x *Site) Id() int { return x.Id_ }
|
||||||
|
type SiteCamp struct {
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
Rectangle string `json:"rectangle"`
|
||||||
|
}
|
||||||
|
func (x *SiteCamp) Name() string { return x.Name_ }
|
||||||
|
type SiteCave struct {
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
Rectangle string `json:"rectangle"`
|
||||||
|
Structures map[int]*Structure `json:"structures"`
|
||||||
|
}
|
||||||
|
func (x *SiteCave) Name() string { return x.Name_ }
|
||||||
|
type SiteDarkFortress struct {
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
Rectangle string `json:"rectangle"`
|
||||||
|
Structures map[int]*Structure `json:"structures"`
|
||||||
|
}
|
||||||
|
func (x *SiteDarkFortress) Name() string { return x.Name_ }
|
||||||
|
type SiteDarkPits struct {
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
Rectangle string `json:"rectangle"`
|
||||||
|
}
|
||||||
|
func (x *SiteDarkPits) Name() string { return x.Name_ }
|
||||||
|
type SiteForestRetreat struct {
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
Rectangle string `json:"rectangle"`
|
||||||
|
Structures map[int]*Structure `json:"structures"`
|
||||||
|
}
|
||||||
|
func (x *SiteForestRetreat) Name() string { return x.Name_ }
|
||||||
|
type SiteFortress struct {
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
Rectangle string `json:"rectangle"`
|
||||||
|
Structures map[int]*Structure `json:"structures"`
|
||||||
|
}
|
||||||
|
func (x *SiteFortress) Name() string { return x.Name_ }
|
||||||
|
type SiteHamlet struct {
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
Rectangle string `json:"rectangle"`
|
||||||
|
Structures map[int]*Structure `json:"structures"`
|
||||||
|
}
|
||||||
|
func (x *SiteHamlet) Name() string { return x.Name_ }
|
||||||
|
type SiteHillocks struct {
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
Rectangle string `json:"rectangle"`
|
||||||
|
}
|
||||||
|
func (x *SiteHillocks) Name() string { return x.Name_ }
|
||||||
|
type SiteLabyrinth struct {
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
Rectangle string `json:"rectangle"`
|
||||||
|
}
|
||||||
|
func (x *SiteLabyrinth) Name() string { return x.Name_ }
|
||||||
|
type SiteLair struct {
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
Rectangle string `json:"rectangle"`
|
||||||
|
}
|
||||||
|
func (x *SiteLair) Name() string { return x.Name_ }
|
||||||
|
type SiteShrine struct {
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
Rectangle string `json:"rectangle"`
|
||||||
|
}
|
||||||
|
func (x *SiteShrine) Name() string { return x.Name_ }
|
||||||
|
type SiteTown struct {
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
Rectangle string `json:"rectangle"`
|
||||||
|
Structures map[int]*Structure `json:"structures"`
|
||||||
|
}
|
||||||
|
func (x *SiteTown) Name() string { return x.Name_ }
|
||||||
|
type SiteVault struct {
|
||||||
|
Coords string `json:"coords"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
Rectangle string `json:"rectangle"`
|
||||||
|
}
|
||||||
|
func (x *SiteVault) Name() string { return x.Name_ }
|
||||||
|
type SiteLink struct {
|
||||||
|
EntityId int `json:"entityId"`
|
||||||
|
LinkType string `json:"linkType"`
|
||||||
|
OccupationId int `json:"occupationId"`
|
||||||
|
SiteId int `json:"siteId"`
|
||||||
|
SubId int `json:"subId"`
|
||||||
|
}
|
||||||
|
type Structure struct {
|
||||||
|
LocalId int `json:"localId"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
}
|
||||||
|
type StructureTemple struct {
|
||||||
|
EntityId int `json:"entityId"`
|
||||||
|
Name_ string `json:"name"`
|
||||||
|
}
|
||||||
|
func (x *StructureTemple) Name() string { return x.Name_ }
|
||||||
|
type UndergroundRegion struct {
|
||||||
|
Id_ int `json:"id"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
}
|
||||||
|
func (x *UndergroundRegion) Id() int { return x.Id_ }
|
||||||
|
type VagueRelationship struct {
|
||||||
|
ChildhoodFriend string `json:"childhoodFriend"`
|
||||||
|
Hfid int `json:"hfid"`
|
||||||
|
JealousObsession string `json:"jealousObsession"`
|
||||||
|
WarBuddy string `json:"warBuddy"`
|
||||||
|
}
|
||||||
|
type WrittenContent struct {
|
||||||
|
AuthorHfid int `json:"authorHfid"`
|
||||||
|
AuthorRoll int `json:"authorRoll"`
|
||||||
|
Form string `json:"form"`
|
||||||
|
FormId int `json:"formId"`
|
||||||
|
Id_ int `json:"id"`
|
||||||
|
Style []string `json:"style"`
|
||||||
|
Title string `json:"title"`
|
||||||
|
}
|
||||||
|
func (x *WrittenContent) Id() int { return x.Id_ }
|
|
@ -0,0 +1,7 @@
|
||||||
|
//go:build ignore
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
// func main() {
|
||||||
|
// generate.Generate()
|
||||||
|
// }
|
|
@ -0,0 +1,64 @@
|
||||||
|
package generate
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
"text/template"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Generate() {
|
||||||
|
const url = "https://github.com/golang/go/raw/master/CONTRIBUTORS"
|
||||||
|
|
||||||
|
rsp, err := http.Get(url)
|
||||||
|
die(err)
|
||||||
|
defer rsp.Body.Close()
|
||||||
|
|
||||||
|
sc := bufio.NewScanner(rsp.Body)
|
||||||
|
carls := []string{}
|
||||||
|
|
||||||
|
for sc.Scan() {
|
||||||
|
if strings.Contains(sc.Text(), "Carl") {
|
||||||
|
carls = append(carls, sc.Text())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
die(sc.Err())
|
||||||
|
|
||||||
|
f, err := os.Create("contributors.go")
|
||||||
|
die(err)
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
packageTemplate.Execute(f, struct {
|
||||||
|
Timestamp time.Time
|
||||||
|
URL string
|
||||||
|
Carls []string
|
||||||
|
}{
|
||||||
|
Timestamp: time.Now(),
|
||||||
|
URL: url,
|
||||||
|
Carls: carls,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func die(err error) {
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var packageTemplate = template.Must(template.New("").Parse(`// Code generated by go generate; DO NOT EDIT.
|
||||||
|
// This file was generated by robots at
|
||||||
|
// {{ .Timestamp }}
|
||||||
|
// using data from
|
||||||
|
// {{ .URL }}
|
||||||
|
package project
|
||||||
|
|
||||||
|
var Contributors = []string{
|
||||||
|
{{- range .Carls }}
|
||||||
|
{{ printf "%q" . }},
|
||||||
|
{{- end }}
|
||||||
|
}
|
||||||
|
`))
|
25
main.go
25
main.go
|
@ -1,23 +1,40 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"legendsbrowser/analyze"
|
||||||
"legendsbrowser/model"
|
"legendsbrowser/model"
|
||||||
"legendsbrowser/server"
|
"legendsbrowser/server"
|
||||||
"net/http"
|
"net/http"
|
||||||
_ "net/http/pprof"
|
_ "net/http/pprof"
|
||||||
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
"github.com/pkg/profile"
|
||||||
)
|
)
|
||||||
|
|
||||||
var world model.World
|
var world model.World
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// defer profile.Start(profile.MemProfile).Stop()
|
var a string
|
||||||
// go func() {
|
flag.StringVar(&a, "a", "", "analyze a file")
|
||||||
// http.ListenAndServe(":8081", nil)
|
flag.Parse()
|
||||||
// }()
|
|
||||||
|
if len(a) == 0 {
|
||||||
|
fmt.Println("Usage: defaults.go -a")
|
||||||
|
flag.PrintDefaults()
|
||||||
|
os.Exit(1)
|
||||||
|
} else {
|
||||||
|
analyze.Analyze(a)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
defer profile.Start(profile.MemProfile).Stop()
|
||||||
|
go func() {
|
||||||
|
http.ListenAndServe(":8081", nil)
|
||||||
|
}()
|
||||||
|
|
||||||
fmt.Println("Hallo Welt!")
|
fmt.Println("Hallo Welt!")
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,9 +1,6 @@
|
||||||
package model
|
package model
|
||||||
|
|
||||||
import "encoding/xml"
|
|
||||||
|
|
||||||
type HistoricalEvent struct {
|
type HistoricalEvent struct {
|
||||||
XMLName xml.Name `xml:"historical_event" json:"-"`
|
|
||||||
Id_ int `xml:"id" json:"id"`
|
Id_ int `xml:"id" json:"id"`
|
||||||
Year int `xml:"year" json:"year"`
|
Year int `xml:"year" json:"year"`
|
||||||
Seconds int `xml:"seconds72" json:"seconds72"`
|
Seconds int `xml:"seconds72" json:"seconds72"`
|
||||||
|
@ -226,7 +223,7 @@ type HistoricalEvent struct {
|
||||||
WounderHfid *int `xml:"wounder_hfid" json:"wounderHfid,omitempty" legend:"hf"`
|
WounderHfid *int `xml:"wounder_hfid" json:"wounderHfid,omitempty" legend:"hf"`
|
||||||
WrongfulConviction *string `xml:"wrongful_conviction" json:"wrongfulConviction,omitempty"`
|
WrongfulConviction *string `xml:"wrongful_conviction" json:"wrongfulConviction,omitempty"`
|
||||||
|
|
||||||
OtherElements
|
//OtherElements
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *HistoricalEvent) Id() int { return r.Id_ }
|
func (r *HistoricalEvent) Id() int { return r.Id_ }
|
||||||
|
|
|
@ -1,40 +1,34 @@
|
||||||
package model
|
package model
|
||||||
|
|
||||||
import "encoding/xml"
|
|
||||||
|
|
||||||
type Region struct {
|
type Region struct {
|
||||||
XMLName xml.Name `xml:"region" json:"-"`
|
|
||||||
NamedObject
|
NamedObject
|
||||||
Type string `xml:"type" json:"type"`
|
Type string `xml:"type" json:"type"`
|
||||||
OtherElements
|
// OtherElements
|
||||||
EventObject
|
EventObject
|
||||||
}
|
}
|
||||||
|
|
||||||
type UndergroundRegion struct {
|
type UndergroundRegion struct {
|
||||||
XMLName xml.Name `xml:"underground_region" json:"-"`
|
|
||||||
NamedObject
|
NamedObject
|
||||||
Type string `xml:"type" json:"type"`
|
Type string `xml:"type" json:"type"`
|
||||||
Depth *int `xml:"depth" json:"depth,omitempty"`
|
Depth *int `xml:"depth" json:"depth,omitempty"`
|
||||||
OtherElements
|
// OtherElements
|
||||||
EventObject
|
EventObject
|
||||||
}
|
}
|
||||||
|
|
||||||
type Landmass struct {
|
type Landmass struct {
|
||||||
XMLName xml.Name `xml:"landmass" json:"-"`
|
|
||||||
NamedObject
|
NamedObject
|
||||||
OtherElements
|
// OtherElements
|
||||||
EventObject
|
EventObject
|
||||||
}
|
}
|
||||||
|
|
||||||
type Site struct {
|
type Site struct {
|
||||||
XMLName xml.Name `xml:"site" json:"-"`
|
|
||||||
NamedObject
|
NamedObject
|
||||||
Type string `xml:"type" json:"type"`
|
Type string `xml:"type" json:"type"`
|
||||||
Coords string `xml:"coords" json:"coords"`
|
Coords string `xml:"coords" json:"coords"`
|
||||||
Rectangle string `xml:"rectangle" json:"rectangle"`
|
Rectangle string `xml:"rectangle" json:"rectangle"`
|
||||||
Structures []Structure `xml:"structures>structure" json:"structures"`
|
Structures []Structure `xml:"structures>structure" json:"structures"`
|
||||||
|
|
||||||
OtherElements
|
// OtherElements
|
||||||
EventObject
|
EventObject
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,23 +36,20 @@ type Site struct {
|
||||||
// func (obj Site) name() string { return obj.Name }
|
// func (obj Site) name() string { return obj.Name }
|
||||||
|
|
||||||
type Structure struct {
|
type Structure struct {
|
||||||
XMLName xml.Name `xml:"structure" json:"-"`
|
|
||||||
LocalId int `xml:"local_id" json:"localId"`
|
LocalId int `xml:"local_id" json:"localId"`
|
||||||
Name string `xml:"name" json:"name"`
|
Name string `xml:"name" json:"name"`
|
||||||
Type string `xml:"type" json:"type"`
|
Type string `xml:"type" json:"type"`
|
||||||
OtherElements
|
// OtherElements
|
||||||
EventObject
|
EventObject
|
||||||
}
|
}
|
||||||
|
|
||||||
type WorldConstruction struct {
|
type WorldConstruction struct {
|
||||||
XMLName xml.Name `xml:"world_construction" json:"-"`
|
|
||||||
NamedObject
|
NamedObject
|
||||||
OtherElements
|
// OtherElements
|
||||||
EventObject
|
EventObject
|
||||||
}
|
}
|
||||||
|
|
||||||
type Artifact struct {
|
type Artifact struct {
|
||||||
XMLName xml.Name `xml:"artifact" json:"-"`
|
|
||||||
NamedObject
|
NamedObject
|
||||||
SiteId int `xml:"site_id" json:"siteId"`
|
SiteId int `xml:"site_id" json:"siteId"`
|
||||||
AbsTileX *int `xml:"abs_tile_x" json:"absTileX,omitempty"`
|
AbsTileX *int `xml:"abs_tile_x" json:"absTileX,omitempty"`
|
||||||
|
@ -69,13 +60,12 @@ type Artifact struct {
|
||||||
StructureLocalId *int `xml:"structure_local_id" json:"structureLocalId,omitempty"`
|
StructureLocalId *int `xml:"structure_local_id" json:"structureLocalId,omitempty"`
|
||||||
SubregionId *int `xml:"subregion_id" json:"subregionId,omitempty"`
|
SubregionId *int `xml:"subregion_id" json:"subregionId,omitempty"`
|
||||||
|
|
||||||
OtherElements
|
// OtherElements
|
||||||
|
|
||||||
EventObject
|
EventObject
|
||||||
}
|
}
|
||||||
|
|
||||||
type HistoricalFigure struct {
|
type HistoricalFigure struct {
|
||||||
XMLName xml.Name `xml:"historical_figure" json:"-"`
|
|
||||||
NamedObject
|
NamedObject
|
||||||
|
|
||||||
Race *string `xml:"race" json:"race"`
|
Race *string `xml:"race" json:"race"`
|
||||||
|
@ -115,7 +105,7 @@ type HistoricalFigure struct {
|
||||||
// UsedIdentityId *[]int `xml:"used_identity_id" json:"usedIdentityId,omitempty" legend:"entity"`
|
// UsedIdentityId *[]int `xml:"used_identity_id" json:"usedIdentityId,omitempty" legend:"entity"`
|
||||||
// // vague_relationship object
|
// // vague_relationship object
|
||||||
|
|
||||||
OtherElements
|
// OtherElements
|
||||||
|
|
||||||
EventObject
|
EventObject
|
||||||
}
|
}
|
||||||
|
@ -123,7 +113,6 @@ type HistoricalFigure struct {
|
||||||
func (r *HistoricalFigure) Type() string { return "hf" }
|
func (r *HistoricalFigure) Type() string { return "hf" }
|
||||||
|
|
||||||
type HistoricalEventCollection struct {
|
type HistoricalEventCollection struct {
|
||||||
XMLName xml.Name `xml:"historical_event_collection" json:"-"`
|
|
||||||
NamedObject
|
NamedObject
|
||||||
Year int `xml:"year"`
|
Year int `xml:"year"`
|
||||||
Seconds int `xml:"seconds72"`
|
Seconds int `xml:"seconds72"`
|
||||||
|
@ -175,45 +164,38 @@ type HistoricalEventCollection struct {
|
||||||
DefendingSquadAnimated *[]string `xml:"defending_squad_animated" json:"defendingSquadAnimated,omitempty"`
|
DefendingSquadAnimated *[]string `xml:"defending_squad_animated" json:"defendingSquadAnimated,omitempty"`
|
||||||
TargetEntityId *int `xml:"target_entity_id" json:"targetEntityId,omitempty" legend:"entity"`
|
TargetEntityId *int `xml:"target_entity_id" json:"targetEntityId,omitempty" legend:"entity"`
|
||||||
|
|
||||||
OtherElements
|
// OtherElements
|
||||||
}
|
}
|
||||||
|
|
||||||
type Entity struct {
|
type Entity struct {
|
||||||
XMLName xml.Name `xml:"entity" json:"-"`
|
|
||||||
NamedObject
|
NamedObject
|
||||||
OtherElements
|
// OtherElements
|
||||||
EventObject
|
EventObject
|
||||||
}
|
}
|
||||||
|
|
||||||
type EntityPopulation struct {
|
type EntityPopulation struct {
|
||||||
XMLName xml.Name `xml:"entity_population" json:"-"`
|
// OtherElements
|
||||||
OtherElements
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type HistoricalEra struct {
|
type HistoricalEra struct {
|
||||||
XMLName xml.Name `xml:"historical_era" json:"-"`
|
|
||||||
NamedObject
|
NamedObject
|
||||||
StartYear *int `xml:"start_year" json:"startYear,omitempty"`
|
StartYear *int `xml:"start_year" json:"startYear,omitempty"`
|
||||||
OtherElements
|
// OtherElements
|
||||||
}
|
}
|
||||||
|
|
||||||
type DanceForm struct {
|
type DanceForm struct {
|
||||||
XMLName xml.Name `xml:"dance_form" json:"-"`
|
|
||||||
ArtForm
|
ArtForm
|
||||||
}
|
}
|
||||||
|
|
||||||
type MusicalForm struct {
|
type MusicalForm struct {
|
||||||
XMLName xml.Name `xml:"musical_form" json:"-"`
|
|
||||||
ArtForm
|
ArtForm
|
||||||
}
|
}
|
||||||
|
|
||||||
type PoeticForm struct {
|
type PoeticForm struct {
|
||||||
XMLName xml.Name `xml:"poetic_form" json:"-"`
|
|
||||||
ArtForm
|
ArtForm
|
||||||
}
|
}
|
||||||
|
|
||||||
type WrittenContent struct {
|
type WrittenContent struct {
|
||||||
XMLName xml.Name `xml:"written_content" json:"-"`
|
|
||||||
NamedObject
|
NamedObject
|
||||||
|
|
||||||
AuthorHfid *int `xml:"author_hfid" json:"authorHfid,omitempty" legend:"hf"`
|
AuthorHfid *int `xml:"author_hfid" json:"authorHfid,omitempty" legend:"hf"`
|
||||||
|
@ -223,7 +205,7 @@ type WrittenContent struct {
|
||||||
Style *[]string `xml:"style" json:"style,omitempty"`
|
Style *[]string `xml:"style" json:"style,omitempty"`
|
||||||
Title *string `xml:"title" json:"title,omitempty"`
|
Title *string `xml:"title" json:"title,omitempty"`
|
||||||
|
|
||||||
OtherElements
|
// OtherElements
|
||||||
EventObject
|
EventObject
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,6 +214,6 @@ type ArtForm struct {
|
||||||
|
|
||||||
Description *string `xml:"description" json:"description,omitempty"`
|
Description *string `xml:"description" json:"description,omitempty"`
|
||||||
|
|
||||||
OtherElements
|
// OtherElements
|
||||||
EventObject
|
EventObject
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"legendsbrowser/util"
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -15,22 +15,6 @@ type World struct {
|
||||||
Name string `xml:"name"`
|
Name string `xml:"name"`
|
||||||
AltName string `xml:"altname"`
|
AltName string `xml:"altname"`
|
||||||
|
|
||||||
// Regions []*Region `xml:"regions>region"`
|
|
||||||
// UndergroundRegions []*UndergroundRegion `xml:"underground_regions>underground_region"`
|
|
||||||
// Landmasses []*Landmass `xml:"landmasses>landmass"`
|
|
||||||
// Sites []*Site `xml:"sites>site"`
|
|
||||||
// WorldConstructions []*WorldConstruction `xml:"world_constructions>world_construction"`
|
|
||||||
// Artifacts []*Artifact `xml:"artifacts>artifact"`
|
|
||||||
// HistoricalFigures []*HistoricalFigure //`xml:"historical_figures>historical_figure"`
|
|
||||||
// HistoricalEvents []*HistoricalEvent //`xml:"historical_events>historical_event"`
|
|
||||||
// HistoricalEventCollections []*HistoricalEventCollection `xml:"historical_event_collections>historical_event_collection"`
|
|
||||||
// HistoricalEras []*HistoricalEra `xml:"historical_eras>historical_era"`
|
|
||||||
// Entities []*Entity `xml:"entities>entity"`
|
|
||||||
// EntityPopulations []*EntityPopulation `xml:"entity_populations>entity_population"`
|
|
||||||
// DanceForms []*DanceForm `xml:"dance_forms>dance_form"`
|
|
||||||
// MusicalForms []*MusicalForm `xml:"musical_forms>musical_form"`
|
|
||||||
// PoeticForms []*PoeticForm `xml:"poetic_forms>poetic_form"`
|
|
||||||
// WrittenContents []*WrittenContent `xml:"written_contents>written_content"`
|
|
||||||
OtherElements
|
OtherElements
|
||||||
|
|
||||||
RegionMap map[int]*Region `xml:"regions>region"`
|
RegionMap map[int]*Region `xml:"regions>region"`
|
||||||
|
@ -45,32 +29,11 @@ type World struct {
|
||||||
HistoricalEraMap map[int]*HistoricalEra `xml:"historical_eras>historical_era"`
|
HistoricalEraMap map[int]*HistoricalEra `xml:"historical_eras>historical_era"`
|
||||||
EntityMap map[int]*Entity `xml:"entities>entity"`
|
EntityMap map[int]*Entity `xml:"entities>entity"`
|
||||||
DanceFormMap map[int]*DanceForm `xml:"dance_forms>dance_form"`
|
DanceFormMap map[int]*DanceForm `xml:"dance_forms>dance_form"`
|
||||||
MusicalFormMap map[int]*MusicalForm //`xml:"musical_forms>musical_form"`
|
MusicalFormMap map[int]*MusicalForm `xml:"musical_forms>musical_form"`
|
||||||
PoeticFormMap map[int]*PoeticForm // `xml:"poetic_forms>poetic_form"`
|
PoeticFormMap map[int]*PoeticForm `xml:"poetic_forms>poetic_form"`
|
||||||
WrittenContentMap map[int]*WrittenContent `xml:"written_contents>written_content"`
|
WrittenContentMap map[int]*WrittenContent `xml:"written_contents>written_content"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var cp437 = []byte(" \t\n \r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ CueaaaaceeeiiiAAEaAooouuyOU faiounN ")
|
|
||||||
|
|
||||||
// var cp437 = []byte(" \t\n \r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñÑ ")
|
|
||||||
|
|
||||||
type ConvertReader struct {
|
|
||||||
r io.Reader
|
|
||||||
read int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *ConvertReader) Read(b []byte) (n int, err error) {
|
|
||||||
n, err = c.r.Read(b)
|
|
||||||
if c.read == 0 && n > 35 {
|
|
||||||
copy(b[30:35], []byte("UTF-8"))
|
|
||||||
}
|
|
||||||
c.read += n
|
|
||||||
for i := range b {
|
|
||||||
b[i] = cp437[b[i]]
|
|
||||||
}
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (w *World) Load(file string) {
|
func (w *World) Load(file string) {
|
||||||
xmlFile, err := os.Open(file)
|
xmlFile, err := os.Open(file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -80,7 +43,7 @@ func (w *World) Load(file string) {
|
||||||
fmt.Println("Successfully Opened users.xml")
|
fmt.Println("Successfully Opened users.xml")
|
||||||
defer xmlFile.Close()
|
defer xmlFile.Close()
|
||||||
|
|
||||||
converter := &ConvertReader{r: xmlFile}
|
converter := util.NewConvertReader(xmlFile)
|
||||||
|
|
||||||
// byteValue, _ := io.ReadAll(converter)
|
// byteValue, _ := io.ReadAll(converter)
|
||||||
// fmt.Println(len(byteValue))
|
// fmt.Println(len(byteValue))
|
||||||
|
@ -182,7 +145,6 @@ Loop:
|
||||||
f.Set(reflect.MakeMapWithSize(ty.Type, 0))
|
f.Set(reflect.MakeMapWithSize(ty.Type, 0))
|
||||||
}
|
}
|
||||||
parseMap(d, ty, f)
|
parseMap(d, ty, f)
|
||||||
val.Field(ty.Index[0]).SetMapIndex(reflect.ValueOf(6), reflect.New(ty.Type.Elem().Elem()))
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
d.Skip()
|
d.Skip()
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
package util
|
||||||
|
|
||||||
|
import "io"
|
||||||
|
|
||||||
|
var cp437 = []byte(" \t\n \r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ CueaaaaceeeiiiAAEaAooouuyOU faiounN ")
|
||||||
|
|
||||||
|
// var cp437 = []byte(" \t\n \r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñÑ ")
|
||||||
|
|
||||||
|
type ConvertReader struct {
|
||||||
|
r io.Reader
|
||||||
|
read int
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewConvertReader(r io.Reader) *ConvertReader {
|
||||||
|
return &ConvertReader{r: r}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ConvertReader) Read(b []byte) (n int, err error) {
|
||||||
|
n, err = c.r.Read(b)
|
||||||
|
if c.read == 0 && n > 35 {
|
||||||
|
copy(b[30:35], []byte("UTF-8"))
|
||||||
|
}
|
||||||
|
c.read += n
|
||||||
|
for i := range b {
|
||||||
|
b[i] = cp437[b[i]]
|
||||||
|
}
|
||||||
|
return n, err
|
||||||
|
}
|
Loading…
Reference in New Issue