godot/editor/editor_help.cpp

/**************************************************************************/
/*  editor_help.cpp                                                       */
/**************************************************************************/
/*                         This file is part of:                          */
/*                             GODOT ENGINE                               */
/*                        https://godotengine.org                         */
/**************************************************************************/
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur.                  */
/*                                                                        */
/* Permission is hereby granted, free of charge, to any person obtaining  */
/* a copy of this software and associated documentation files (the        */
/* "Software"), to deal in the Software without restriction, including    */
/* without limitation the rights to use, copy, modify, merge, publish,    */
/* distribute, sublicense, and/or sell copies of the Software, and to     */
/* permit persons to whom the Software is furnished to do so, subject to  */
/* the following conditions:                                              */
/*                                                                        */
/* The above copyright notice and this permission notice shall be         */
/* included in all copies or substantial portions of the Software.        */
/*                                                                        */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,        */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF     */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY   */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,   */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE      */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                 */
/**************************************************************************/

#include "editor_help.h"

#include "core/config/project_settings.h"
#include "core/core_constants.h"
#include "core/extension/gdextension.h"
#include "core/input/input.h"
#include "core/object/script_language.h"
#include "core/os/keyboard.h"
#include "core/string/string_builder.h"
#include "core/version_generated.gen.h"
#include "editor/doc_data_compressed.gen.h"
#include "editor/editor_main_screen.h"
#include "editor/editor_node.h"
#include "editor/editor_paths.h"
#include "editor/editor_property_name_processor.h"
#include "editor/editor_settings.h"
#include "editor/editor_string_names.h"
#include "editor/plugins/script_editor_plugin.h"
#include "editor/themes/editor_scale.h"
#include "scene/gui/line_edit.h"

#include "modules/modules_enabled.gen.h" // For gdscript, mono.

// For syntax highlighting.
#ifdef MODULE_GDSCRIPT_ENABLED
#include "modules/gdscript/editor/gdscript_highlighter.h"
#include "modules/gdscript/gdscript.h"
#endif

// For syntax highlighting.
#ifdef MODULE_MONO_ENABLED
#include "editor/plugins/script_editor_plugin.h"
#include "modules/mono/csharp_script.h"
#endif

#define CONTRIBUTE_URL

#ifdef MODULE_MONO_ENABLED
// Sync with the types mentioned in https://docs.godotengine.org/en/stable/tutorials/scripting/c_sharp/c_sharp_differences.html
const Vector<String> classes_with_csharp_differences = {
	"@GlobalScope",
	"String",
	"NodePath",
	"Signal",
	"Callable",
	"RID",
	"Basis",
	"Transform2D",
	"Transform3D",
	"Rect2",
	"Rect2i",
	"AABB",
	"Quaternion",
	"Projection",
	"Color",
	"Array",
	"Dictionary",
	"PackedByteArray",
	"PackedColorArray",
	"PackedFloat32Array",
	"PackedFloat64Array",
	"PackedInt32Array",
	"PackedInt64Array",
	"PackedStringArray",
	"PackedVector2Array",
	"PackedVector3Array",
	"PackedVector4Array",
	"Variant",
};
#endif

const Vector<String> packed_array_types =;

// TODO: this is sometimes used directly as doc->something, other times as EditorHelp::get_doc_data(), which is thread-safe.
// Might this be a problem?
DocTools *EditorHelp::doc =;
DocTools *EditorHelp::ext_doc =;

static bool _attempt_doc_load(const String &p_class) {}

// Removes unnecessary prefix from p_class_specifier when within the p_edited_class context
static String _contextualize_class_specifier(const String &p_class_specifier, const String &p_edited_class) {}

void EditorHelp::_update_theme_item_cache() {}

void EditorHelp::_search(bool p_search_previous) {}

void EditorHelp::_class_desc_finished() {}

void EditorHelp::_class_list_select(const String &p_select) {}

void EditorHelp::_class_desc_select(const String &p_select) {}

void EditorHelp::_class_desc_input(const Ref<InputEvent> &p_input) {}

void EditorHelp::_class_desc_resized(bool p_force_update_theme) {}

static void _add_type_to_rt(const String &p_type, const String &p_enum, bool p_is_bitfield, RichTextLabel *p_rt, const Control *p_owner_node, const String &p_class) {}

void EditorHelp::_add_type(const String &p_type, const String &p_enum, bool p_is_bitfield) {}

void EditorHelp::_add_type_icon(const String &p_type, int p_size, const String &p_fallback) {}

String EditorHelp::_fix_constant(const String &p_constant) const {}

// Macros for assigning the deprecated/experimental marks to class members in overview.

#define DEPRECATED_DOC_TAG

#define EXPERIMENTAL_DOC_TAG

// Macros for displaying the deprecated/experimental info in class member descriptions.

#define DEPRECATED_DOC_MSG(m_message, m_default_message)

#define EXPERIMENTAL_DOC_MSG(m_message, m_default_message)

void EditorHelp::_add_method(const DocData::MethodDoc &p_method, bool p_overview, bool p_override) {}

void EditorHelp::_add_bulletpoint() {}

void EditorHelp::_push_normal_font() {}

void EditorHelp::_pop_normal_font() {}

void EditorHelp::_push_title_font() {}

void EditorHelp::_pop_title_font() {}

void EditorHelp::_push_code_font() {}

void EditorHelp::_pop_code_font() {}

Error EditorHelp::_goto_desc(const String &p_class) {}

void EditorHelp::_update_method_list(MethodType p_method_type, const Vector<DocData::MethodDoc> &p_methods) {}

void EditorHelp::_update_method_descriptions(const DocData::ClassDoc &p_classdoc, MethodType p_method_type, const Vector<DocData::MethodDoc> &p_methods) {}

void EditorHelp::_update_doc() {}

void EditorHelp::_request_help(const String &p_string) {}

void EditorHelp::_help_callback(const String &p_topic) {}

static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt, const Control *p_owner_node, const String &p_class) {}

void EditorHelp::_add_text(const String &p_bbcode) {}

int EditorHelp::doc_generation_count =;
String EditorHelp::doc_version_hash;
Thread EditorHelp::worker_thread;

void EditorHelp::_wait_for_thread() {}

void EditorHelp::_compute_doc_version_hash() {}

String EditorHelp::get_cache_full_path() {}

void EditorHelp::load_xml_buffer(const uint8_t *p_buffer, int p_size) {}

void EditorHelp::remove_class(const String &p_class) {}

void EditorHelp::_load_doc_thread(void *p_udata) {}

void EditorHelp::_gen_doc_thread(void *p_udata) {}

void EditorHelp::_gen_extensions_docs() {}

void EditorHelp::generate_doc(bool p_use_cache) {}

void EditorHelp::_toggle_scripts_pressed() {}

void EditorHelp::_notification(int p_what) {}

void EditorHelp::go_to_help(const String &p_help) {}

void EditorHelp::go_to_class(const String &p_class) {}

void EditorHelp::update_doc() {}

void EditorHelp::cleanup_doc() {}

Vector<Pair<String, int>> EditorHelp::get_sections() {}

void EditorHelp::scroll_to_section(int p_section_index) {}

void EditorHelp::popup_search() {}

String EditorHelp::get_class() {}

void EditorHelp::search_again(bool p_search_previous) {}

int EditorHelp::get_scroll() const {}

void EditorHelp::set_scroll(int p_scroll) {}

void EditorHelp::update_toggle_scripts_button() {}

void EditorHelp::_bind_methods() {}

void EditorHelp::init_gdext_pointers() {}

EditorHelp::EditorHelp() {}

EditorHelp::~EditorHelp() {}

DocTools *EditorHelp::get_doc_data() {}

/// EditorHelpBit ///

#define HANDLE_DOC

EditorHelpBit::HelpData EditorHelpBit::_get_class_help_data(const StringName &p_class_name) {}

EditorHelpBit::HelpData EditorHelpBit::_get_property_help_data(const StringName &p_class_name, const StringName &p_property_name) {}

EditorHelpBit::HelpData EditorHelpBit::_get_method_help_data(const StringName &p_class_name, const StringName &p_method_name) {}

EditorHelpBit::HelpData EditorHelpBit::_get_signal_help_data(const StringName &p_class_name, const StringName &p_signal_name) {}

EditorHelpBit::HelpData EditorHelpBit::_get_theme_item_help_data(const StringName &p_class_name, const StringName &p_theme_item_name) {}

#undef HANDLE_DOC

void EditorHelpBit::_add_type_to_title(const DocType &p_doc_type) {}

void EditorHelpBit::_update_labels() {}

void EditorHelpBit::_go_to_help(const String &p_what) {}

void EditorHelpBit::_meta_clicked(const String &p_select) {}

void EditorHelpBit::_bind_methods() {}

void EditorHelpBit::_notification(int p_what) {}

void EditorHelpBit::parse_symbol(const String &p_symbol) {}

void EditorHelpBit::set_custom_text(const String &p_type, const String &p_name, const String &p_description) {}

void EditorHelpBit::set_description(const String &p_text) {}

void EditorHelpBit::set_content_height_limits(float p_min, float p_max) {}

void EditorHelpBit::update_content_height() {}

EditorHelpBit::EditorHelpBit(const String &p_symbol) {}

/// EditorHelpBitTooltip ///

void EditorHelpBitTooltip::_start_timer() {}

void EditorHelpBitTooltip::_safe_queue_free() {}

void EditorHelpBitTooltip::_target_gui_input(const Ref<InputEvent> &p_event) {}

void EditorHelpBitTooltip::_notification(int p_what) {}

// Forwards non-mouse input to the parent viewport.
void EditorHelpBitTooltip::_input_from_window(const Ref<InputEvent> &p_event) {}

void EditorHelpBitTooltip::show_tooltip(EditorHelpBit *p_help_bit, Control *p_target) {}

// Copy-paste from `Viewport::_gui_show_tooltip()`.
void EditorHelpBitTooltip::popup_under_cursor() {}

EditorHelpBitTooltip::EditorHelpBitTooltip(Control *p_target) {}

#if defined(MODULE_GDSCRIPT_ENABLED) || defined(MODULE_MONO_ENABLED)
/// EditorHelpHighlighter ///

EditorHelpHighlighter *EditorHelpHighlighter::singleton =;

void EditorHelpHighlighter::create_singleton() {}

void EditorHelpHighlighter::free_singleton() {}

EditorHelpHighlighter *EditorHelpHighlighter::get_singleton() {}

EditorHelpHighlighter::HighlightData EditorHelpHighlighter::_get_highlight_data(Language p_language, const String &p_source, bool p_use_cache) {}

void EditorHelpHighlighter::highlight(RichTextLabel *p_rich_text_label, Language p_language, const String &p_source, bool p_use_cache) {}

void EditorHelpHighlighter::reset_cache() {}

EditorHelpHighlighter::EditorHelpHighlighter() {}

EditorHelpHighlighter::~EditorHelpHighlighter() {}

#endif // defined(MODULE_GDSCRIPT_ENABLED) || defined(MODULE_MONO_ENABLED)

/// FindBar ///

FindBar::FindBar() {}

void FindBar::popup_search() {}

void FindBar::_notification(int p_what) {}

void FindBar::set_rich_text_label(RichTextLabel *p_rich_text_label) {}

bool FindBar::search_next() {}

bool FindBar::search_prev() {}

bool FindBar::_search(bool p_search_previous) {}

void FindBar::_update_results_count() {}

void FindBar::_update_matches_label() {}

void FindBar::_hide_bar() {}

void FindBar::unhandled_input(const Ref<InputEvent> &p_event) {}

void FindBar::_search_text_changed(const String &p_text) {}

void FindBar::_search_text_submitted(const String &p_text) {}