| 1137 | } |
| 1138 | |
| 1139 | static Error _parse_methods(Ref<XMLParser> &parser, Vector<DocData::MethodDoc> &methods) { |
| 1140 | String section = parser->get_node_name(); |
| 1141 | String element = section.substr(0, section.length() - 1); |
| 1142 | |
| 1143 | while (parser->read() == OK) { |
| 1144 | if (parser->get_node_type() == XMLParser::NODE_ELEMENT) { |
| 1145 | if (parser->get_node_name() == element) { |
| 1146 | DocData::MethodDoc method; |
| 1147 | ERR_FAIL_COND_V(!parser->has_attribute("name"), ERR_FILE_CORRUPT); |
| 1148 | method.name = parser->get_named_attribute_value("name"); |
| 1149 | if (parser->has_attribute("qualifiers")) { |
| 1150 | method.qualifiers = parser->get_named_attribute_value("qualifiers"); |
| 1151 | } |
| 1152 | #ifndef DISABLE_DEPRECATED |
| 1153 | if (parser->has_attribute("is_deprecated")) { |
| 1154 | method.is_deprecated = parser->get_named_attribute_value("is_deprecated").to_lower() == "true"; |
| 1155 | } |
| 1156 | if (parser->has_attribute("is_experimental")) { |
| 1157 | method.is_experimental = parser->get_named_attribute_value("is_experimental").to_lower() == "true"; |
| 1158 | } |
| 1159 | #endif |
| 1160 | if (parser->has_attribute("deprecated")) { |
| 1161 | method.is_deprecated = true; |
| 1162 | method.deprecated_message = parser->get_named_attribute_value("deprecated"); |
| 1163 | } |
| 1164 | if (parser->has_attribute("experimental")) { |
| 1165 | method.is_experimental = true; |
| 1166 | method.experimental_message = parser->get_named_attribute_value("experimental"); |
| 1167 | } |
| 1168 | if (parser->has_attribute("keywords")) { |
| 1169 | method.keywords = parser->get_named_attribute_value("keywords"); |
| 1170 | } |
| 1171 | |
| 1172 | while (parser->read() == OK) { |
| 1173 | if (parser->get_node_type() == XMLParser::NODE_ELEMENT) { |
| 1174 | String name = parser->get_node_name(); |
| 1175 | if (name == "return") { |
| 1176 | ERR_FAIL_COND_V(!parser->has_attribute("type"), ERR_FILE_CORRUPT); |
| 1177 | method.return_type = parser->get_named_attribute_value("type"); |
| 1178 | if (parser->has_attribute("enum")) { |
| 1179 | method.return_enum = parser->get_named_attribute_value("enum"); |
| 1180 | if (parser->has_attribute("is_bitfield")) { |
| 1181 | method.return_is_bitfield = parser->get_named_attribute_value("is_bitfield").to_lower() == "true"; |
| 1182 | } |
| 1183 | } |
| 1184 | } else if (name == "returns_error") { |
| 1185 | ERR_FAIL_COND_V(!parser->has_attribute("number"), ERR_FILE_CORRUPT); |
| 1186 | method.errors_returned.push_back(parser->get_named_attribute_value("number").to_int()); |
| 1187 | } else if (name == "param") { |
| 1188 | DocData::ArgumentDoc argument; |
| 1189 | ERR_FAIL_COND_V(!parser->has_attribute("name"), ERR_FILE_CORRUPT); |
| 1190 | argument.name = parser->get_named_attribute_value("name"); |
| 1191 | ERR_FAIL_COND_V(!parser->has_attribute("type"), ERR_FILE_CORRUPT); |
| 1192 | argument.type = parser->get_named_attribute_value("type"); |
| 1193 | if (parser->has_attribute("enum")) { |
| 1194 | argument.enumeration = parser->get_named_attribute_value("enum"); |
| 1195 | if (parser->has_attribute("is_bitfield")) { |
| 1196 | argument.is_bitfield = parser->get_named_attribute_value("is_bitfield").to_lower() == "true"; |
no test coverage detected