diff --git a/Frameworks/bundles/src/item.cc b/Frameworks/bundles/src/item.cc index a8beac8f..bef47f0f 100644 --- a/Frameworks/bundles/src/item.cc +++ b/Frameworks/bundles/src/item.cc @@ -72,64 +72,70 @@ namespace bundles _required_bundles.clear(); _required_executables.clear(); - plist::get_key_path(plist, kFieldIsDisabled, _disabled); - plist::get_key_path(plist, kFieldIsDeleted, _deleted); - plist::get_key_path(plist, kFieldHideFromUser, _hidden_from_user); - - iterate(pair, plist) + for(auto const& pair : plist) { static std::set const stringKeys = { kFieldName, kFieldKeyEquivalent, kFieldTabTrigger, kFieldScopeSelector, kFieldSemanticClass, kFieldContentMatch, kFieldGrammarFirstLineMatch, kFieldGrammarScope, kFieldGrammarInjectionSelector }; static std::set const arrayKeys = { kFieldDropExtension, kFieldGrammarExtension }; - if(pair->first == kFieldScopeSelector) + if(pair.first == kFieldScopeSelector) { - if(std::string const* str = boost::get(&pair->second)) + if(std::string const* str = boost::get(&pair.second)) _scope_selector = *str; } - else if(stringKeys.find(pair->first) != stringKeys.end()) + else if(stringKeys.find(pair.first) != stringKeys.end()) { - if(std::string const* str = boost::get(&pair->second)) - _fields.insert(std::make_pair(pair->first, *str)); + if(std::string const* str = boost::get(&pair.second)) + _fields.insert(std::make_pair(pair.first, *str)); } - else if(arrayKeys.find(pair->first) != arrayKeys.end()) + else if(arrayKeys.find(pair.first) != arrayKeys.end()) { - if(plist::array_t const* array = boost::get(&pair->second)) + if(plist::array_t const* array = boost::get(&pair.second)) { iterate(any, *array) { if(std::string const* str = boost::get(&*any)) - _fields.insert(std::make_pair(pair->first, *str)); + _fields.insert(std::make_pair(pair.first, *str)); } } } - else if(pair->first == kFieldSettingName) + else if(pair.first == kFieldSettingName) { // initialize from a tmSettings file - if(plist::dictionary_t const* dictionary = boost::get(&pair->second)) + if(plist::dictionary_t const* dictionary = boost::get(&pair.second)) { iterate(dictPair, *dictionary) - _fields.insert(std::make_pair(pair->first, dictPair->first)); + _fields.insert(std::make_pair(pair.first, dictPair->first)); } - else if(plist::array_t const* array = boost::get(&pair->second)) + else if(plist::array_t const* array = boost::get(&pair.second)) { iterate(any, *array) // initialize from cache { if(std::string const* str = boost::get(&*any)) - _fields.insert(std::make_pair(pair->first, *str)); + _fields.insert(std::make_pair(pair.first, *str)); } } } - } - - plist::array_t require; - if(plist::get_key_path(plist, kFieldRequiredItems, require)) - { - iterate(it, require) + else if(pair.first == kFieldIsDisabled) { - std::string name; - oak::uuid_t uuid; - if(plist::get_key_path(*it, kFieldName, name) && plist::get_key_path(*it, kFieldUUID, uuid)) - _required_bundles.emplace_back(name, uuid); + _disabled = plist::is_true(pair.second); + } + else if(pair.first == kFieldIsDeleted) + { + _deleted = plist::is_true(pair.second); + } + else if(pair.first == kFieldHideFromUser) + { + _hidden_from_user = plist::is_true(pair.second); + } + else if(pair.first == kFieldRequiredItems && boost::get(&pair.second)) + { + for(auto const& dict : boost::get(pair.second)) + { + std::string name; + oak::uuid_t uuid; + if(plist::get_key_path(dict, kFieldName, name) && plist::get_key_path(dict, kFieldUUID, uuid)) + _required_bundles.emplace_back(name, uuid); + } } }