1// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2 3package parser2v3 4 5import ( 6 "fmt" 7 "strings" 8) 9 10func (parser *tvParser2_3) parsePairForRelationship2_3(tag string, value string) error { 11 if parser.rln == nil { 12 return fmt.Errorf("no relationship struct created in parser rln pointer") 13 } 14 15 if tag == "Relationship" { 16 // parse the value to see if it's a valid relationship format 17 sp := strings.SplitN(value, " ", -1) 18 19 // filter out any purely-whitespace items 20 var rp []string 21 for _, v := range sp { 22 v = strings.TrimSpace(v) 23 if v != "" { 24 rp = append(rp, v) 25 } 26 } 27 28 if len(rp) != 3 { 29 return fmt.Errorf("invalid relationship format for %s", value) 30 } 31 32 aID, err := extractDocElementID(strings.TrimSpace(rp[0])) 33 if err != nil { 34 return err 35 } 36 parser.rln.RefA = aID 37 parser.rln.Relationship = strings.TrimSpace(rp[1]) 38 // NONE and NOASSERTION are permitted on right side 39 permittedSpecial := []string{"NONE", "NOASSERTION"} 40 bID, err := extractDocElementSpecial(strings.TrimSpace(rp[2]), permittedSpecial) 41 if err != nil { 42 return err 43 } 44 parser.rln.RefB = bID 45 return nil 46 } 47 48 if tag == "RelationshipComment" { 49 parser.rln.RelationshipComment = value 50 return nil 51 } 52 53 return fmt.Errorf("received unknown tag %v in Relationship section", tag) 54} 55