NAT case-insensitive selectByName

This commit is contained in:
2021-09-07 12:51:32 -06:00
parent 0d156bbcc5
commit 387b2a99e4
2 changed files with 9 additions and 6 deletions

View File

@@ -211,4 +211,7 @@
files (VarText null)] files (VarText null)]
(doFor e entries (doFor e entries
(addFiles archive e files)) (addFiles archive e files))
entries)) entries)
(defCommand SelectByName [name (Text null)]
(SelectEntries (nameSystem.getEntries name)) []))

View File

@@ -2,16 +2,16 @@
(prop :Map<String,Array<Entry>> entriesByName (new Map)) (prop :Map<String,Array<Entry>> entriesByName (new Map))
// Stores a map of named entries, for instant lookup by name // Stores a case-insensitive map of named entries, for instant lookup by name
(defNew [] (defNew []
(super (super
->[archive e] (hasComponent e Name) ->[archive e] (hasComponent e Name)
->[archive e] (let [name (readComponent archive e Name)] ->[archive e] (let [name (readComponent archive e Name)]
(if (entriesByName.exists name) (if (entriesByName.exists (name.toLowerCase))
(.push (dictGet entriesByName name) e) (.push (dictGet entriesByName (name.toLowerCase)) e)
(dictSet entriesByName name [e])) (dictSet entriesByName (name.toLowerCase) [e]))
// Because the if statement doesn't unify by type :( // Because the if statement doesn't unify by type :(
null))) null)))
(method :Array<Entry> getEntries [name] (method :Array<Entry> getEntries [name]
(or (dictGet entriesByName name) [])) (or (dictGet entriesByName (name.toLowerCase)) []))