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