diff options
Diffstat (limited to 'editor/doc/doc_data.cpp')
-rw-r--r-- | editor/doc/doc_data.cpp | 68 |
1 files changed, 47 insertions, 21 deletions
diff --git a/editor/doc/doc_data.cpp b/editor/doc/doc_data.cpp index 3434aa33f9..91a29f5717 100644 --- a/editor/doc/doc_data.cpp +++ b/editor/doc/doc_data.cpp @@ -58,7 +58,7 @@ void DocData::merge_from(const DocData &p_data) { for (int i = 0; i < c.methods.size(); i++) { - MethodDoc &m = c.methods[i]; + MethodDoc &m = c.methods.write[i]; for (int j = 0; j < cf.methods.size(); j++) { @@ -72,13 +72,13 @@ void DocData::merge_from(const DocData &p_data) { Vector<bool> arg_used; arg_used.resize(arg_count); for (int l = 0; l < arg_count; ++l) - arg_used[l] = false; + arg_used.write[l] = false; // also there is no guarantee that argument ordering will match, so we // have to check one by one so we make sure we have an exact match for (int k = 0; k < arg_count; ++k) { for (int l = 0; l < arg_count; ++l) if (cf.methods[j].arguments[k].type == m.arguments[l].type && !arg_used[l]) { - arg_used[l] = true; + arg_used.write[l] = true; break; } } @@ -98,7 +98,7 @@ void DocData::merge_from(const DocData &p_data) { for (int i = 0; i < c.signals.size(); i++) { - MethodDoc &m = c.signals[i]; + MethodDoc &m = c.signals.write[i]; for (int j = 0; j < cf.signals.size(); j++) { @@ -113,7 +113,7 @@ void DocData::merge_from(const DocData &p_data) { for (int i = 0; i < c.constants.size(); i++) { - ConstantDoc &m = c.constants[i]; + ConstantDoc &m = c.constants.write[i]; for (int j = 0; j < cf.constants.size(); j++) { @@ -128,7 +128,7 @@ void DocData::merge_from(const DocData &p_data) { for (int i = 0; i < c.properties.size(); i++) { - PropertyDoc &p = c.properties[i]; + PropertyDoc &p = c.properties.write[i]; for (int j = 0; j < cf.properties.size(); j++) { @@ -146,7 +146,7 @@ void DocData::merge_from(const DocData &p_data) { for (int i = 0; i < c.theme_properties.size(); i++) { - PropertyDoc &p = c.theme_properties[i]; + PropertyDoc &p = c.theme_properties.write[i]; for (int j = 0; j < cf.theme_properties.size(); j++) { @@ -233,7 +233,12 @@ void DocData::generate(bool p_basic_types) { c.category = ClassDB::get_category(name); List<PropertyInfo> properties; - ClassDB::get_property_list(name, &properties, true); + if (name == "ProjectSettings") { + //special case for project settings, so settings can be documented + ProjectSettings::get_singleton()->get_property_list(&properties); + } else { + ClassDB::get_property_list(name, &properties, true); + } for (List<PropertyInfo>::Element *E = properties.front(); E; E = E->next()) { if (E->get().usage & PROPERTY_USAGE_GROUP || E->get().usage & PROPERTY_USAGE_CATEGORY || E->get().usage & PROPERTY_USAGE_INTERNAL) @@ -530,13 +535,14 @@ void DocData::generate(bool p_basic_types) { } List<StringName> constants; - Variant::get_numeric_constants_for_type(Variant::Type(i), &constants); + Variant::get_constants_for_type(Variant::Type(i), &constants); for (List<StringName>::Element *E = constants.front(); E; E = E->next()) { ConstantDoc constant; constant.name = E->get(); - constant.value = itos(Variant::get_numeric_constant_value(Variant::Type(i), E->get())); + Variant value = Variant::get_constant_value(Variant::Type(i), E->get()); + constant.value = value.get_type() == Variant::INT ? itos(value) : value.get_construct_string(); c.constants.push_back(constant); } } @@ -567,6 +573,9 @@ void DocData::generate(bool p_basic_types) { PropertyDoc pd; Engine::Singleton &s = E->get(); + if (!s.ptr) { + continue; + } pd.name = s.name; pd.type = s.ptr->get_class(); while (String(ClassDB::get_parent_class(pd.type)) != "Object") @@ -807,9 +816,24 @@ Error DocData::_load(Ref<XMLParser> parser) { if (parser->get_node_type() == XMLParser::NODE_TEXT) c.description = parser->get_node_data(); } else if (name == "tutorials") { - parser->read(); - if (parser->get_node_type() == XMLParser::NODE_TEXT) - c.tutorials = parser->get_node_data(); + while (parser->read() == OK) { + + if (parser->get_node_type() == XMLParser::NODE_ELEMENT) { + + String name = parser->get_node_name(); + + if (name == "link") { + + parser->read(); + if (parser->get_node_type() == XMLParser::NODE_TEXT) + c.tutorials.push_back(parser->get_node_data().strip_edges()); + } else { + ERR_EXPLAIN("Invalid tag in doc file: " + name); + ERR_FAIL_V(ERR_FILE_CORRUPT); + } + } else if (parser->get_node_type() == XMLParser::NODE_ELEMENT_END && parser->get_node_name() == "tutorials") + break; //end of <tutorials> + } } else if (name == "demos") { parser->read(); if (parser->get_node_type() == XMLParser::NODE_TEXT) @@ -984,7 +1008,9 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri _write_string(f, 2, c.description.strip_edges().xml_escape()); _write_string(f, 1, "</description>"); _write_string(f, 1, "<tutorials>"); - _write_string(f, 2, c.tutorials.strip_edges().xml_escape()); + for (int i = 0; i < c.tutorials.size(); i++) { + _write_string(f, 2, "<link>" + c.tutorials.get(i).xml_escape() + "</link>"); + } _write_string(f, 1, "</tutorials>"); _write_string(f, 1, "<demos>"); _write_string(f, 2, c.demos.strip_edges().xml_escape()); @@ -995,7 +1021,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri for (int i = 0; i < c.methods.size(); i++) { - MethodDoc &m = c.methods[i]; + const MethodDoc &m = c.methods[i]; String qualifiers; if (m.qualifiers != "") @@ -1015,7 +1041,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri for (int j = 0; j < m.arguments.size(); j++) { - ArgumentDoc &a = m.arguments[j]; + const ArgumentDoc &a = m.arguments[j]; String enum_text; if (a.enumeration != String()) { @@ -1050,7 +1076,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri if (c.properties[i].enumeration != String()) { enum_text = " enum=\"" + c.properties[i].enumeration + "\""; } - PropertyDoc &p = c.properties[i]; + const PropertyDoc &p = c.properties[i]; _write_string(f, 2, "<member name=\"" + p.name + "\" type=\"" + p.type + "\" setter=\"" + p.setter + "\" getter=\"" + p.getter + "\"" + enum_text + ">"); _write_string(f, 3, p.description.strip_edges().xml_escape()); _write_string(f, 2, "</member>"); @@ -1065,11 +1091,11 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri _write_string(f, 1, "<signals>"); for (int i = 0; i < c.signals.size(); i++) { - MethodDoc &m = c.signals[i]; + const MethodDoc &m = c.signals[i]; _write_string(f, 2, "<signal name=\"" + m.name + "\">"); for (int j = 0; j < m.arguments.size(); j++) { - ArgumentDoc &a = m.arguments[j]; + const ArgumentDoc &a = m.arguments[j]; _write_string(f, 3, "<argument index=\"" + itos(j) + "\" name=\"" + a.name.xml_escape() + "\" type=\"" + a.type.xml_escape() + "\">"); _write_string(f, 3, "</argument>"); } @@ -1088,7 +1114,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri for (int i = 0; i < c.constants.size(); i++) { - ConstantDoc &k = c.constants[i]; + const ConstantDoc &k = c.constants[i]; if (k.enumeration != String()) { _write_string(f, 2, "<constant name=\"" + k.name + "\" value=\"" + k.value + "\" enum=\"" + k.enumeration + "\">"); } else { @@ -1107,7 +1133,7 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri _write_string(f, 1, "<theme_items>"); for (int i = 0; i < c.theme_properties.size(); i++) { - PropertyDoc &p = c.theme_properties[i]; + const PropertyDoc &p = c.theme_properties[i]; _write_string(f, 2, "<theme_item name=\"" + p.name + "\" type=\"" + p.type + "\">"); _write_string(f, 2, "</theme_item>"); } |