| 115 | } |
| 116 | |
| 117 | void MakeUnit(const mdf::IXmlNode &unit, mdf::detail::BlockPropertyList &dest) { |
| 118 | mdf::IXmlNode::ChildList list; |
| 119 | unit.GetChildList(list); |
| 120 | |
| 121 | std::ostringstream desc; |
| 122 | std::string name; |
| 123 | std::string display_name; |
| 124 | std::string ref; |
| 125 | for (const auto &c : list) { |
| 126 | if (c->IsTagName("SHORT_NAME")) { |
| 127 | name = c->Value<std::string>(); |
| 128 | } else if (c->IsTagName("DISPLAY-NAME")) { |
| 129 | display_name = c->Value<std::string>(); |
| 130 | } else if (c->IsTagName("PHYSICAL-DIMENSION-REF")) { |
| 131 | ref = c->Attribute<std::string>("ID"); |
| 132 | } else if (c->IsTagName("DESC")) { |
| 133 | const auto lang = c->Attribute<std::string>("xml:lang"); |
| 134 | const auto d = c->Value<std::string>(); |
| 135 | if (lang.empty()) { |
| 136 | if (desc.str().empty()) { |
| 137 | desc << d; |
| 138 | } else { |
| 139 | desc << ", " << d; |
| 140 | } |
| 141 | } else { |
| 142 | if (desc.str().empty()) { |
| 143 | desc << lang << ":" << d; |
| 144 | } else { |
| 145 | desc << ", " << lang << ":" << d; |
| 146 | } |
| 147 | } |
| 148 | } |
| 149 | } |
| 150 | std::ostringstream d; |
| 151 | d << "Ref: " << ref; |
| 152 | |
| 153 | if (!desc.str().empty()) { |
| 154 | d << ", " << desc.str(); |
| 155 | } |
| 156 | |
| 157 | dest.emplace_back(name, display_name, d.str()); |
| 158 | } |
| 159 | |
| 160 | void MakeUnitList(const mdf::IXmlNode &root, |
| 161 | mdf::detail::BlockPropertyList &dest) { |
no test coverage detected