aboutsummaryrefslogtreecommitdiff
path: root/tvloader/parser2v1/parse_relationship.go
diff options
context:
space:
mode:
Diffstat (limited to 'tvloader/parser2v1/parse_relationship.go')
-rw-r--r--tvloader/parser2v1/parse_relationship.go52
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)
+}