From 3b0791d972c58c6336867c20e99b049b06b34515 Mon Sep 17 00:00:00 2001 From: Ramprakash Goyal Date: Wed, 3 Jun 2026 11:27:40 +0530 Subject: [PATCH] Add SVG parser extensions for Incorrect labels for candidate (have: '(coachSVG:)', expected: '(fullPath:)') Incorrect labels for candidate (have: '(coachSVG:)', expected: '(text:)') --- Source/svg/SVGParser.swift | 49 ++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/Source/svg/SVGParser.swift b/Source/svg/SVGParser.swift index 58bf22c6..6a948593 100644 --- a/Source/svg/SVGParser.swift +++ b/Source/svg/SVGParser.swift @@ -896,11 +896,16 @@ open class SVGParser { return 0 } - fileprivate func getTag(_ element: XMLHash.XMLElement) -> [String] { - let id = element.allAttributes["id"]?.text - return id.map { [$0] } ?? [] - } +// fileprivate func getTag(_ element: XMLHash.XMLElement) -> [String] { +// let id = element.allAttributes["id"]?.text +// return id.map { [$0] } ?? [] +// } + fileprivate func getTag(_ element: SWXMLHash.XMLElement) -> [String] { + return ["id","data-inventory-class","data-seat-properties"] + .compactMap { element.allAttributes[$0]?.text } + } + fileprivate func getOpacity(_ styleParts: [String: String]) -> Double { if let opacityAttr = styleParts["opacity"] { return getOpacity(opacityAttr) @@ -2269,3 +2274,39 @@ fileprivate extension CharacterSet { static let transformationAttributeCharacters = CharacterSet.latinAlphabet } + +extension SVGParser { + + public struct CoachNode { + public let node: Group + public let defs: [String: Image] + } + + public class func parse(coachSVG: String) -> CoachNode? { + let parser = SVGParser(coachSVG) + + guard let node = try? parser.parse() else { + return nil + } + + let defs = parser.defNodes + .filter { $0.key.hasPrefix("sfseat") || $0.key.hasPrefix("sbseat") } + .compactMap { try? parser.parseNode($0.value) } + .filter { !$0.tag.isEmpty } + .reduce(into: [String: Image]()) { + + guard let tag = $1.tag.first, + let group = $1 as? Group, + let image = group.contents.first as? Image else { + return + } + + $0[tag] = image + } + + return CoachNode( + node: node, + defs: defs + ) + } +}