Skip to content

Commit

Permalink
Fix simpletypes
Browse files Browse the repository at this point in the history
  • Loading branch information
themaxi committed Feb 17, 2022
1 parent db01ee3 commit 2691c98
Show file tree
Hide file tree
Showing 16 changed files with 38 additions and 20 deletions.
2 changes: 1 addition & 1 deletion parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,8 @@ func (opt *Options) Parse() (err error) {

switch element := token.(type) {
case xml.StartElement:

opt.InElement = element.Name.Local

funcName := fmt.Sprintf("On%s", MakeFirstUpperCase(opt.InElement))
if err = callFuncByName(opt, funcName, []reflect.Value{reflect.ValueOf(element), reflect.ValueOf(opt.ProtoTree)}); err != nil {
return
Expand Down
1 change: 1 addition & 0 deletions xmlElement.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ func (opt *Options) OnElement(ele xml.StartElement, protoTree []interface{}) (er

if attr.Name.Local == "name" {
e.Name = attr.Value
// fmt.Println(e, protoTree)
}
if attr.Name.Local == "type" {
e.Type, err = opt.GetValueType(attr.Value, protoTree)
Expand Down
4 changes: 2 additions & 2 deletions xmlExtension.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,11 @@ func (opt *Options) OnExtension(ele xml.StartElement, protoTree []interface{}) (
// EndExtension handles parsing event on the extension end elements.
func (opt *Options) EndExtension(ele xml.EndElement, protoTree []interface{}) (err error) {
if opt.Attribute.Len() > 0 && opt.SimpleType.Peek() != nil {
opt.Attribute.Peek().(*Attribute).Type, err = opt.GetValueType(opt.SimpleType.Pop().(*SimpleType).Base, opt.ProtoTree)
opt.Attribute.Peek().(*Attribute).Type, err = opt.GetValueType(opt.SimpleType.Peek().(*SimpleType).Base, opt.ProtoTree)
if err != nil {
return
}
opt.CurrentEle = ""
}
return
}
}
2 changes: 1 addition & 1 deletion xmlFractionDigits.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import "encoding/xml"
// than zero.
func (opt *Options) EndFractionDigits(ele xml.EndElement, protoTree []interface{}) (err error) {
if opt.SimpleType.Len() > 0 && opt.Element.Len() > 0 {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Pop().(*SimpleType).Base, opt.ProtoTree); err != nil {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Peek().(*SimpleType).Base, opt.ProtoTree); err != nil {
return
}
opt.CurrentEle = ""
Expand Down
2 changes: 1 addition & 1 deletion xmlLength.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import "encoding/xml"
// equal to or greater than zero.
func (opt *Options) EndLength(ele xml.EndElement, protoTree []interface{}) (err error) {
if opt.SimpleType.Len() > 0 && opt.Element.Len() > 0 {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Pop().(*SimpleType).Base, opt.ProtoTree); err != nil {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Peek().(*SimpleType).Base, opt.ProtoTree); err != nil {
return
}
opt.CurrentEle = ""
Expand Down
2 changes: 1 addition & 1 deletion xmlMaxExclusive.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import "encoding/xml"
// be less than this value).
func (opt *Options) EndMaxExclusive(ele xml.EndElement, protoTree []interface{}) (err error) {
if opt.SimpleType.Len() > 0 && opt.Element.Len() > 0 {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Pop().(*SimpleType).Base, opt.ProtoTree); err != nil {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Peek().(*SimpleType).Base, opt.ProtoTree); err != nil {
return
}
opt.CurrentEle = ""
Expand Down
2 changes: 1 addition & 1 deletion xmlMaxInclusive.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import "encoding/xml"
// be less than or equal to this value).
func (opt *Options) EndMaxInclusive(ele xml.EndElement, protoTree []interface{}) (err error) {
if opt.SimpleType.Len() > 0 && opt.Element.Len() > 0 {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Pop().(*SimpleType).Base, opt.ProtoTree); err != nil {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Peek().(*SimpleType).Base, opt.ProtoTree); err != nil {
return
}
opt.CurrentEle = ""
Expand Down
2 changes: 1 addition & 1 deletion xmlMaxLength.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import "encoding/xml"
// equal to or greater than zero.
func (opt *Options) EndMaxLength(ele xml.EndElement, protoTree []interface{}) (err error) {
if opt.SimpleType.Len() > 0 && opt.Element.Len() > 0 {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Pop().(*SimpleType).Base, opt.ProtoTree); err != nil {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Peek().(*SimpleType).Base, opt.ProtoTree); err != nil {
return
}
opt.CurrentEle = ""
Expand Down
2 changes: 1 addition & 1 deletion xmlMinExclusive.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import "encoding/xml"
// be greater than this value).
func (opt *Options) EndMinExclusive(ele xml.EndElement, protoTree []interface{}) (err error) {
if opt.SimpleType.Len() > 0 && opt.Element.Len() > 0 {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Pop().(*SimpleType).Base, opt.ProtoTree); err != nil {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Peek().(*SimpleType).Base, opt.ProtoTree); err != nil {
return
}
opt.CurrentEle = ""
Expand Down
2 changes: 1 addition & 1 deletion xmlMinInclusive.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import "encoding/xml"
// be greater than or equal to this value).
func (opt *Options) EndMinInclusive(ele xml.EndElement, protoTree []interface{}) (err error) {
if opt.SimpleType.Len() > 0 && opt.Element.Len() > 0 {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Pop().(*SimpleType).Base, opt.ProtoTree); err != nil {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Peek().(*SimpleType).Base, opt.ProtoTree); err != nil {
return
}
opt.CurrentEle = ""
Expand Down
6 changes: 4 additions & 2 deletions xmlMinLength.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,16 @@

package xgen

import "encoding/xml"
import (
"encoding/xml"
)

// EndMinLength handles parsing event on the minLength end elements. MinLength
// specifies the minimum number of characters or list items allowed. Must be
// equal to or greater than zero.
func (opt *Options) EndMinLength(ele xml.EndElement, protoTree []interface{}) (err error) {
if opt.SimpleType.Len() > 0 && opt.Element.Len() > 0 {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Pop().(*SimpleType).Base, opt.ProtoTree); err != nil {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Peek().(*SimpleType).Base, opt.ProtoTree); err != nil {
return
}
opt.CurrentEle = ""
Expand Down
4 changes: 2 additions & 2 deletions xmlPattern.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@ import "encoding/xml"
// defines the exact sequence of characters that are acceptable.
func (opt *Options) EndPattern(ele xml.EndElement, protoTree []interface{}) (err error) {
if opt.Attribute.Len() > 0 && opt.SimpleType.Peek() != nil {
opt.Attribute.Peek().(*Attribute).Type, err = opt.GetValueType(opt.SimpleType.Pop().(*SimpleType).Base, opt.ProtoTree)
opt.Attribute.Peek().(*Attribute).Type, err = opt.GetValueType(opt.SimpleType.Peek().(*SimpleType).Base, opt.ProtoTree)
if err != nil {
return
}
opt.CurrentEle = ""
}
if opt.SimpleType.Len() > 0 && opt.Element.Len() > 0 {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Pop().(*SimpleType).Base, opt.ProtoTree); err != nil {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Peek().(*SimpleType).Base, opt.ProtoTree); err != nil {
return
}
opt.CurrentEle = ""
Expand Down
2 changes: 1 addition & 1 deletion xmlRestriction.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ func (opt *Options) OnRestriction(ele xml.StartElement, protoTree []interface{})
// EndRestriction handles parsing event on the restriction end elements.
func (opt *Options) EndRestriction(ele xml.EndElement, protoTree []interface{}) (err error) {
if opt.Attribute.Len() > 0 && opt.SimpleType.Peek() != nil {
opt.Attribute.Peek().(*Attribute).Type, err = opt.GetValueType(opt.SimpleType.Pop().(*SimpleType).Base, opt.ProtoTree)
opt.Attribute.Peek().(*Attribute).Type, err = opt.GetValueType(opt.SimpleType.Peek().(*SimpleType).Base, opt.ProtoTree)
if err != nil {
return
}
Expand Down
21 changes: 18 additions & 3 deletions xmlSimpleType.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@

package xgen

import "encoding/xml"
import (
"encoding/xml"
)

// OnSimpleType handles parsing event on the simpleType start elements. The
// simpleType element defines a simple type and specifies the constraints and
Expand All @@ -31,18 +33,31 @@ func (opt *Options) OnSimpleType(ele xml.StartElement, protoTree []interface{})

// EndSimpleType handles parsing event on the simpleType end elements.
func (opt *Options) EndSimpleType(ele xml.EndElement, protoTree []interface{}) (err error) {

if opt.SimpleType.Len() > 0 && opt.Attribute.Len() > 0 {
opt.Attribute.Peek().(*Attribute).Type = opt.SimpleType.Pop().(*SimpleType).Base
return
}
if ele.Name.Local == opt.CurrentEle && opt.ComplexType.Len() == 1 {

if opt.ComplexType.Len() == 1 {
opt.ProtoTree = append(opt.ProtoTree, opt.ComplexType.Pop())
opt.CurrentEle = ""
}

if ele.Name.Local == opt.CurrentEle && !opt.InUnion {
if !opt.InUnion {
opt.ProtoTree = append(opt.ProtoTree, opt.SimpleType.Pop())
opt.CurrentEle = ""
}
// if ele.Name.Local == opt.CurrentEle && opt.ComplexType.Len() == 1 {
// fmt.Println("THIS1")
// opt.ProtoTree = append(opt.ProtoTree, opt.ComplexType.Pop())
// opt.CurrentEle = ""
// }

// if ele.Name.Local == opt.CurrentEle && !opt.InUnion {
// fmt.Println("THIS2")
// opt.ProtoTree = append(opt.ProtoTree, opt.SimpleType.Pop())
// opt.CurrentEle = ""
// }
return
}
2 changes: 1 addition & 1 deletion xmlTotalDigits.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import "encoding/xml"
// than zero.
func (opt *Options) EndTotalDigits(ele xml.EndElement, protoTree []interface{}) (err error) {
if opt.SimpleType.Len() > 0 && opt.Element.Len() > 0 {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Pop().(*SimpleType).Base, opt.ProtoTree); err != nil {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Peek().(*SimpleType).Base, opt.ProtoTree); err != nil {
return
}
opt.CurrentEle = ""
Expand Down
2 changes: 1 addition & 1 deletion xmlWhiteSpace.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import "encoding/xml"
// carriage returns) is handled.
func (opt *Options) EndWhiteSpace(ele xml.EndElement, protoTree []interface{}) (err error) {
if opt.SimpleType.Len() > 0 && opt.Element.Len() > 0 {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Pop().(*SimpleType).Base, opt.ProtoTree); err != nil {
if opt.Element.Peek().(*Element).Type, err = opt.GetValueType(opt.SimpleType.Peek().(*SimpleType).Base, opt.ProtoTree); err != nil {
return
}
opt.CurrentEle = ""
Expand Down

0 comments on commit 2691c98

Please sign in to comment.