diff options
Diffstat (limited to 'editor/doc/doc_data.cpp')
-rw-r--r-- | editor/doc/doc_data.cpp | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/editor/doc/doc_data.cpp b/editor/doc/doc_data.cpp index 3434aa33f9..542dca74e0 100644 --- a/editor/doc/doc_data.cpp +++ b/editor/doc/doc_data.cpp @@ -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) @@ -567,6 +572,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 +815,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 +1007,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()); |