| lm::read_accumulate("Uses", uses_strings), | lm::read_accumulate("Uses", uses_strings), | ||||
| lm::read_accumulate("Links", links_strings), | lm::read_accumulate("Links", links_strings), | ||||
| lm::read_required("Name", ret.name), | lm::read_required("Name", ret.name), | ||||
| lm::ignore_x_keys(), | |||||
| lm::reject_unknown()); | lm::reject_unknown()); | ||||
| extend(ret.uses, ranges::views::transform(uses_strings, lm::split_usage_string)); | extend(ret.uses, ranges::views::transform(uses_strings, lm::split_usage_string)); |
| } | } | ||||
| }; | }; | ||||
| class ignore_x_keys { | |||||
| public: | |||||
| bool operator()(std::string_view, std::string_view key, std::string_view) const { | |||||
| return key.find("X-") == 0; | |||||
| } | |||||
| }; | |||||
| class reject_unknown { | class reject_unknown { | ||||
| public: | public: | ||||
| int operator()(std::string_view context, std::string_view key, std::string_view) const { | int operator()(std::string_view context, std::string_view key, std::string_view) const { |