diff options
Diffstat (limited to 'tvloader/parser2v1/parse_relationship.go')
-rw-r--r-- | tvloader/parser2v1/parse_relationship.go | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/tvloader/parser2v1/parse_relationship.go b/tvloader/parser2v1/parse_relationship.go new file mode 100644 index 0000000..2b9b8cc --- /dev/null +++ b/tvloader/parser2v1/parse_relationship.go @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later + +package parser2v1 + +import ( + "fmt" + "strings" +) + +func (parser *tvParser2_1) parsePairForRelationship2_1(tag string, value string) error { + if parser.rln == nil { + return fmt.Errorf("no relationship struct created in parser rln pointer") + } + + if tag == "Relationship" { + // parse the value to see if it's a valid relationship format + sp := strings.SplitN(value, " ", -1) + + // filter out any purely-whitespace items + var rp []string + for _, v := range sp { + v = strings.TrimSpace(v) + if v != "" { + rp = append(rp, v) + } + } + + if len(rp) != 3 { + return fmt.Errorf("invalid relationship format for %s", value) + } + + aID, err := extractDocElementID(strings.TrimSpace(rp[0])) + if err != nil { + return err + } + parser.rln.RefA = aID + parser.rln.Relationship = strings.TrimSpace(rp[1]) + bID, err := extractDocElementID(strings.TrimSpace(rp[2])) + if err != nil { + return err + } + parser.rln.RefB = bID + return nil + } + + if tag == "RelationshipComment" { + parser.rln.RelationshipComment = value + return nil + } + + return fmt.Errorf("received unknown tag %v in Relationship section", tag) +} |