@@ -177,6 +177,20 @@ void EditorHelp::_class_desc_resized() {
177
177
class_desc->add_theme_style_override (" normal" , class_desc_stylebox);
178
178
}
179
179
180
+ String EditorHelp::_convert_case (const String &p_name) {
181
+ switch ((int )EDITOR_GET (" text_editor/help/class_reference_language" )) {
182
+ case 0 : // GDScript
183
+ return p_name;
184
+ case 1 : {
185
+ // C#
186
+ bool first_is_underscore = p_name[0 ] == ' _' ;
187
+ String result = p_name.capitalize ();
188
+ return (first_is_underscore ? " _" : " " ) + result.replace (" " , " " );
189
+ }
190
+ }
191
+ return p_name;
192
+ }
193
+
180
194
void EditorHelp::_add_type (const String &p_type, const String &p_enum) {
181
195
String t = p_type;
182
196
if (t.empty ()) {
@@ -263,7 +277,7 @@ void EditorHelp::_add_method(const DocData::MethodDoc &p_method, bool p_overview
263
277
}
264
278
265
279
class_desc->push_color (headline_color);
266
- _add_text (p_method.name );
280
+ _add_text (_convert_case ( p_method.name ) );
267
281
class_desc->pop ();
268
282
269
283
if (p_overview && p_method.description != " " ) {
@@ -558,7 +572,7 @@ void EditorHelp::_update_doc() {
558
572
class_desc->push_meta (" @member " + cd.properties [i].name );
559
573
}
560
574
561
- _add_text (cd.properties [i].name );
575
+ _add_text (_convert_case ( cd.properties [i].name ) );
562
576
563
577
if (describe) {
564
578
class_desc->pop ();
@@ -1013,7 +1027,7 @@ void EditorHelp::_update_doc() {
1013
1027
class_desc->push_cell ();
1014
1028
class_desc->push_font (doc_code_font);
1015
1029
class_desc->push_color (headline_color);
1016
- _add_text (cd.properties [i].name );
1030
+ _add_text (_convert_case ( cd.properties [i].name ) );
1017
1031
class_desc->pop (); // color
1018
1032
1019
1033
if (cd.properties [i].default_value != " " ) {
@@ -1048,10 +1062,10 @@ void EditorHelp::_update_doc() {
1048
1062
if (method_map[cd.properties [i].setter ].arguments .size () > 1 ) {
1049
1063
// Setters with additional arguments are exposed in the method list, so we link them here for quick access.
1050
1064
class_desc->push_meta (" @method " + cd.properties [i].setter );
1051
- class_desc->add_text (cd.properties [i].setter + TTR (" (value)" ));
1065
+ class_desc->add_text (_convert_case ( cd.properties [i].setter ) + TTR (" (value)" ));
1052
1066
class_desc->pop ();
1053
1067
} else {
1054
- class_desc->add_text (cd.properties [i].setter + TTR (" (value)" ));
1068
+ class_desc->add_text (_convert_case ( cd.properties [i].setter ) + TTR (" (value)" ));
1055
1069
}
1056
1070
class_desc->pop (); // color
1057
1071
class_desc->push_color (comment_color);
@@ -1072,10 +1086,10 @@ void EditorHelp::_update_doc() {
1072
1086
if (method_map[cd.properties [i].getter ].arguments .size () > 0 ) {
1073
1087
// Getters with additional arguments are exposed in the method list, so we link them here for quick access.
1074
1088
class_desc->push_meta (" @method " + cd.properties [i].getter );
1075
- class_desc->add_text (cd.properties [i].getter + " ()" );
1089
+ class_desc->add_text (_convert_case ( cd.properties [i].getter ) + " ()" );
1076
1090
class_desc->pop ();
1077
1091
} else {
1078
- class_desc->add_text (cd.properties [i].getter + " ()" );
1092
+ class_desc->add_text (_convert_case ( cd.properties [i].getter ) + " ()" );
1079
1093
}
1080
1094
class_desc->pop (); // color
1081
1095
class_desc->push_color (comment_color);
@@ -1252,6 +1266,55 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) {
1252
1266
1253
1267
String bbcode = p_bbcode.dedent ().replace (" \t " , " " ).replace (" \r " , " " ).strip_edges ();
1254
1268
1269
+ // Select the correct code examples
1270
+ switch ((int )EDITOR_GET (" text_editor/help/class_reference_examples" )) {
1271
+ case 0 : // GDScript
1272
+ bbcode = bbcode.replace (" [gdscript]" , " [codeblock]" );
1273
+ bbcode = bbcode.replace (" [/gdscript]" , " [/codeblock]" );
1274
+
1275
+ for (int pos = bbcode.find (" [csharp]" ); pos != -1 ; pos = bbcode.find (" [csharp]" )) {
1276
+ if (bbcode.find (" [/csharp]" ) == -1 ) {
1277
+ WARN_PRINT (" Unclosed [csharp] block or parse fail in code (search for tag errors)" );
1278
+ break ;
1279
+ }
1280
+
1281
+ bbcode.erase (pos, bbcode.find (" [/csharp]" ) + 9 - pos);
1282
+ while (bbcode[pos] == ' \n ' ) {
1283
+ bbcode.erase (pos, 1 );
1284
+ }
1285
+ }
1286
+ break ;
1287
+ case 1 : // C#
1288
+ bbcode = bbcode.replace (" [csharp]" , " [codeblock]" );
1289
+ bbcode = bbcode.replace (" [/csharp]" , " [/codeblock]" );
1290
+
1291
+ for (int pos = bbcode.find (" [gdscript]" ); pos != -1 ; pos = bbcode.find (" [gdscript]" )) {
1292
+ if (bbcode.find (" [/gdscript]" ) == -1 ) {
1293
+ WARN_PRINT (" Unclosed [gdscript] block or parse fail in code (search for tag errors)" );
1294
+ break ;
1295
+ }
1296
+
1297
+ bbcode.erase (pos, bbcode.find (" [/gdscript]" ) + 11 - pos);
1298
+ while (bbcode[pos] == ' \n ' ) {
1299
+ bbcode.erase (pos, 1 );
1300
+ }
1301
+ }
1302
+ break ;
1303
+ case 2 : // GDScript and C#
1304
+ bbcode = bbcode.replace (" [csharp]" , " [b]C#:[/b]\n [codeblock]" );
1305
+ bbcode = bbcode.replace (" [gdscript]" , " [b]GDScript:[/b]\n [codeblock]" );
1306
+
1307
+ bbcode = bbcode.replace (" [/csharp]" , " [/codeblock]" );
1308
+ bbcode = bbcode.replace (" [/gdscript]" , " [/codeblock]" );
1309
+ break ;
1310
+ }
1311
+
1312
+ // Remove codeblocks (they would be printed otherwise)
1313
+ bbcode = bbcode.replace (" [codeblocks]\n " , " " );
1314
+ bbcode = bbcode.replace (" \n [/codeblocks]" , " " );
1315
+ bbcode = bbcode.replace (" [codeblocks]" , " " );
1316
+ bbcode = bbcode.replace (" [/codeblocks]" , " " );
1317
+
1255
1318
// remove extra new lines around code blocks
1256
1319
bbcode = bbcode.replace (" [codeblock]\n " , " [codeblock]" );
1257
1320
bbcode = bbcode.replace (" \n [/codeblock]" , " [/codeblock]" );
0 commit comments