feat: adjusted Text parser to support char in the string (#2189)

Current implementation does not handle e.g.

```
$type $interface.displayName ($interface.BSDName)
```

This changes to a regex parser that does allow this.

Signed-off-by: Luke Hamburg <1992842+luckman212@users.noreply.github.com>
This commit is contained in:
Luke Hamburg
2024-10-27 07:21:18 -04:00
committed by GitHub
parent bd3da697cd
commit 27216355d9

View File

@@ -74,15 +74,28 @@ public class TextWidget: WidgetWrapper {
self.display()
})
}
static public func parseText(_ raw: String) -> [KeyValue_t] {
var pairs: [KeyValue_t] = []
raw.split(separator: " ", omittingEmptySubsequences: true).filter({ $0.hasPrefix("$") }).forEach { v in
let arr = v.split(separator: ".", omittingEmptySubsequences: true)
guard let key = arr.first else { return }
let value = arr.count == 1 ? nil : arr.last
pairs.append(KeyValue_t(key: String(key), value: String(value ?? "")))
do {
let regex = try NSRegularExpression(pattern: "(\\$[a-zA-Z0-9_]+)(?:\\.([a-zA-Z0-9_]+))?")
let matches = regex.matches(in: raw, range: NSRange(raw.startIndex..., in: raw))
for match in matches {
if let keyRange = Range(match.range(at: 1), in: raw) {
let key = String(raw[keyRange])
let value: String?
if match.range(at: 2).location != NSNotFound, let valueRange = Range(match.range(at: 2), in: raw) {
value = String(raw[valueRange])
} else {
value = nil
}
pairs.append(KeyValue_t(key: key, value: value ?? ""))
}
}
} catch {
print("Error creating regex: \(error.localizedDescription)")
}
return pairs
}
}