From 18c08f65d6b3dd7918a1f6c1d08f30262497af56 Mon Sep 17 00:00:00 2001 From: SaviHex Date: Sat, 6 Jun 2020 22:26:35 -0300 Subject: [PATCH] Added a "title" attribute for the link tag in the docs xml --- doc/classes/KinematicBody2D.xml | 2 +- editor/doc_data.cpp | 11 +++++++++-- editor/doc_data.h | 7 ++++++- editor/editor_help.cpp | 4 ++-- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/doc/classes/KinematicBody2D.xml b/doc/classes/KinematicBody2D.xml index 6b2bbeb895f..f0f4d838219 100644 --- a/doc/classes/KinematicBody2D.xml +++ b/doc/classes/KinematicBody2D.xml @@ -9,7 +9,7 @@ [b]Kinematic characters:[/b] KinematicBody2D also has an API for moving objects (the [method move_and_collide] and [method move_and_slide] methods) while performing collision tests. This makes them really useful to implement characters that collide against a world, but that don't require advanced physics. - https://docs.godotengine.org/en/latest/tutorials/physics/kinematic_character_2d.html + https://docs.godotengine.org/en/latest/tutorials/physics/kinematic_character_2d.html https://docs.godotengine.org/en/latest/tutorials/physics/using_kinematic_body_2d.html diff --git a/editor/doc_data.cpp b/editor/doc_data.cpp index 53641da0e9c..c52d91b03db 100644 --- a/editor/doc_data.cpp +++ b/editor/doc_data.cpp @@ -881,9 +881,14 @@ Error DocData::_load(Ref parser) { String name3 = parser->get_node_name(); if (name3 == "link") { + TutorialDoc tutorial; + if (parser->has_attribute("title")) { + tutorial.title = parser->get_attribute_value("title"); + } parser->read(); if (parser->get_node_type() == XMLParser::NODE_TEXT) { - c.tutorials.push_back(parser->get_node_data().strip_edges()); + tutorial.link = parser->get_node_data().strip_edges(); + c.tutorials.push_back(tutorial); } } else { ERR_FAIL_V_MSG(ERR_FILE_CORRUPT, "Invalid tag in doc file: " + name3 + "."); @@ -1055,7 +1060,9 @@ Error DocData::save_classes(const String &p_default_path, const Map"); for (int i = 0; i < c.tutorials.size(); i++) { - _write_string(f, 2, "" + c.tutorials.get(i).xml_escape() + ""); + TutorialDoc tutorial = c.tutorials.get(i); + String title_attribute = (!tutorial.title.empty()) ? " title=\"" + tutorial.title.xml_escape() + "\"" : ""; + _write_string(f, 2, "" + tutorial.link.xml_escape() + ""); } _write_string(f, 1, ""); diff --git a/editor/doc_data.h b/editor/doc_data.h index 8c93bfa5970..1880be81ed5 100644 --- a/editor/doc_data.h +++ b/editor/doc_data.h @@ -82,13 +82,18 @@ public: } }; + struct TutorialDoc { + String link; + String title; + }; + struct ClassDoc { String name; String inherits; String category; String brief_description; String description; - Vector tutorials; + Vector tutorials; Vector methods; Vector signals; Vector constants; diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp index 30cf7d1e7a6..bad22034233 100644 --- a/editor/editor_help.cpp +++ b/editor/editor_help.cpp @@ -480,8 +480,8 @@ void EditorHelp::_update_doc() { class_desc->add_newline(); for (int i = 0; i < cd.tutorials.size(); i++) { - const String link = DTR(cd.tutorials[i]); - String linktxt = link; + const String link = DTR(cd.tutorials[i].link); + String linktxt = (cd.tutorials[i].title.empty()) ? link : DTR(cd.tutorials[i].title); const int seppos = linktxt.find("//"); if (seppos != -1) { linktxt = link.right(seppos + 2);