|
|
|
@ -12,17 +12,26 @@ type Page struct { |
|
|
|
Items []SheetItem |
|
|
|
} |
|
|
|
|
|
|
|
type SheetItem interface{ |
|
|
|
type SheetItem interface { |
|
|
|
Name() string |
|
|
|
} |
|
|
|
|
|
|
|
type Block struct { |
|
|
|
Name string |
|
|
|
name string |
|
|
|
Items []SheetItem |
|
|
|
} |
|
|
|
|
|
|
|
func (self *Block) Name() string { |
|
|
|
return self.name |
|
|
|
} |
|
|
|
|
|
|
|
type Variable struct { |
|
|
|
Type VariableType |
|
|
|
Name string |
|
|
|
name string |
|
|
|
} |
|
|
|
|
|
|
|
func (self *Variable) Name() string { |
|
|
|
return self.name |
|
|
|
} |
|
|
|
|
|
|
|
type CharacterSheet struct { |
|
|
|
@ -99,7 +108,7 @@ func parseVariable(root xmlNode, sheet *CharacterSheet, defaults *Variable) (*Va |
|
|
|
ret.Type = t |
|
|
|
typeOk = true |
|
|
|
case "name": |
|
|
|
ret.Name = attrVal |
|
|
|
ret.name = attrVal |
|
|
|
nameOk = true |
|
|
|
} |
|
|
|
} |
|
|
|
@ -108,7 +117,7 @@ func parseVariable(root xmlNode, sheet *CharacterSheet, defaults *Variable) (*Va |
|
|
|
return nil, errors.New("Unnamed variable") |
|
|
|
} |
|
|
|
if !typeOk { |
|
|
|
return nil, errors.New("No type provided for variable \"" + ret.Name + "\"") |
|
|
|
return nil, errors.New("No type provided for variable \"" + ret.Name() + "\"") |
|
|
|
} |
|
|
|
|
|
|
|
return ret, nil |
|
|
|
@ -123,17 +132,19 @@ func parseBlock(root xmlNode, sheet *CharacterSheet) (*Block, error) { |
|
|
|
|
|
|
|
switch attrName { |
|
|
|
case "name": |
|
|
|
ret.Name = attrVal |
|
|
|
ret.name = attrVal |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
for i := 0; i < len(root.Nodes); i++ { |
|
|
|
item, err := parseItem(root.Nodes[i], sheet) |
|
|
|
items, err := parseItem(root.Nodes[i], sheet) |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
|
|
|
|
ret.Items = append(ret.Items, item) |
|
|
|
for _, item := range(items) { |
|
|
|
ret.Items = append(ret.Items, item) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return ret, nil |
|
|
|
@ -233,12 +244,14 @@ func parsePage(root xmlNode, sheet *CharacterSheet) (*Page, error) { |
|
|
|
ret := &Page{} |
|
|
|
|
|
|
|
for i := 0; i < len(root.Nodes); i++ { |
|
|
|
item, err := parseItem(root.Nodes[i], sheet) |
|
|
|
items, err := parseItem(root.Nodes[i], sheet) |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
|
|
|
|
ret.Items = append(ret.Items, item) |
|
|
|
for _, item := range(items) { |
|
|
|
ret.Items = append(ret.Items, item) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return ret, nil |
|
|
|
|