summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Verschelde <remi@verschelde.fr>2016-02-17 23:04:42 +0100
committerRémi Verschelde <remi@verschelde.fr>2016-02-17 23:04:42 +0100
commit77fd9b1c57107ec15193eed96b9a9b10dcc8418f (patch)
tree72087f23f6884a6f2062b2e81ba4e8831e7bffab
parentf0971ccf5f4a2d693a4e0debca5a1902a2498e76 (diff)
parente5389288dddb3b0ba33b0c0da3c33d49dc69223a (diff)
Merge pull request #3749 from akien-mga/pr-codeblock
Implement support for [codeblock] tag in help
-rw-r--r--doc/base/classes.xml63
-rw-r--r--doc/tools/makerst.py49
-rw-r--r--tools/editor/editor_help.cpp2
3 files changed, 80 insertions, 34 deletions
diff --git a/doc/base/classes.xml b/doc/base/classes.xml
index 164557578d..f4035b50be 100644
--- a/doc/base/classes.xml
+++ b/doc/base/classes.xml
@@ -9606,26 +9606,26 @@ This approximation makes straight segments between each point, then subdivides t
</class>
<class name="Directory" inherits="Reference" category="Core">
<brief_description>
- Directory type.
+ Type used to handle the filesystem.
</brief_description>
<description>
Directory type. Is used to manage directories and their content (not restricted to the project folder).
-
-How to iterate through the files of a directory example:
-
-func dir(path):
- var d = Directory.new()
- if d.open( path )==0:
- d.list_dir_begin()
- var file_name = d.get_next()
- while(file_name!=""):
- if d.current_is_dir():
- print("Is directory: " + file_name)
- else:
- print("Is File:" + file_name)
- file_name = d.get_next()
- else:
- print("Some open Error, maybe directory not found?")
+ Example for how to iterate through the files of a directory:
+ [codeblock]
+ func dir(path):
+ var d = Directory.new()
+ if d.open( path )==0:
+ d.list_dir_begin()
+ var file_name = d.get_next()
+ while(file_name!=""):
+ if d.current_is_dir():
+ print("Found directory: " + file_name)
+ else:
+ print("Found file:" + file_name)
+ file_name = d.get_next()
+ else:
+ print("Some open Error, maybe directory not found?")
+ [/codeblock]
</description>
<methods>
<method name="open">
@@ -12949,9 +12949,8 @@ Returns an empty String "" at the end of the list.
</argument>
<description>
Connect to a host. This needs to be done before any requests are sent.
-The host should not have http:// prepended but will strip the protocol identifier if provided.
-
-verify_host will check the SSL identity of the host if set to true.
+ The host should not have http:// prepended but will strip the protocol identifier if provided.
+ verify_host will check the SSL identity of the host if set to true.
</description>
</method>
<method name="set_connection">
@@ -12974,11 +12973,13 @@ verify_host will check the SSL identity of the host if set to true.
<description>
Sends a request to the connected host. The url is what is normally behind the hostname, i.e. in [code]http://somehost.com/index.php[/code], url would be "index.php".
Headers are HTTP request headers.
- To create a POST request with query strings to push to the server, do::
- var fields = {"username" : "user", "password" : "pass"}
- var queryString = httpClient.query_string_from_dict(fields)
- var headers = ["Content-Type: application/x-www-form-urlencoded", "Content-Length: " + str(queryString.length())]
- var result = httpClient.request(httpClient.METHOD_POST, "index.php", headers, queryString)
+ To create a POST request with query strings to push to the server, do:
+ [codeblock]
+ var fields = {"username" : "user", "password" : "pass"}
+ var queryString = httpClient.query_string_from_dict(fields)
+ var headers = ["Content-Type: application/x-www-form-urlencoded", "Content-Length: " + str(queryString.length())]
+ var result = httpClient.request(httpClient.METHOD_POST, "index.php", headers, queryString)
+ [/codeblock]
</description>
</method>
<method name="send_body_text">
@@ -13086,10 +13087,12 @@ verify_host will check the SSL identity of the host if set to true.
<argument index="0" name="fields" type="Dictionary">
</argument>
<description>
- Generates a GET/POST application/x-www-form-urlencoded style query string from a provided dictionary, e.g.::
- var fields = {"username": "user", "password": "pass"}
- String queryString = httpClient.query_string_from_dict(fields)
- returns:= "username=user&amp;password=pass"
+ Generates a GET/POST application/x-www-form-urlencoded style query string from a provided dictionary, e.g.:
+ [codeblock]
+ var fields = {"username": "user", "password": "pass"}
+ String queryString = httpClient.query_string_from_dict(fields)
+ returns:= "username=user&amp;password=pass"
+ [/codeblock]
</description>
</method>
</methods>
@@ -17992,7 +17995,7 @@ verify_host will check the SSL identity of the host if set to true.
<description>
MultiMesh provides low level mesh instancing. If the amount of [Mesh] instances needed goes from hundreds to thousands (and most need to be visible at close proximity) creating such a large amount of [MeshInstance] nodes may affect performance by using too much CPU or video memory.
For this case a MultiMesh becomes very useful, as it can draw thousands of instances with little API overhead.
- As a drawback, if the instances are too far away of each other, performance may be reduced as every single instance will always rendered (they are spatially indexed as one, for the whole object).
+ As a drawback, if the instances are too far away of each other, performance may be reduced as every single instance will always rendered (they are spatially indexed as one, for the whole object).
Since instances may have any behavior, the AABB used for visibility must be provided by the user, or generated with [method generate_aabb].
</description>
<methods>
diff --git a/doc/tools/makerst.py b/doc/tools/makerst.py
index 1e2d276fb3..6311be767c 100644
--- a/doc/tools/makerst.py
+++ b/doc/tools/makerst.py
@@ -100,7 +100,7 @@ def make_class_list(class_list, columns):
def rstize_text(text,cclass):
- # Linebreak + tabs in the XML should become two line breaks
+ # Linebreak + tabs in the XML should become two line breaks unless in a "codeblock"
pos = 0
while True:
pos = text.find('\n', pos)
@@ -112,8 +112,40 @@ def rstize_text(text,cclass):
pos += 1
post_text = text[pos+1:]
- text = pre_text + "\n\n" + post_text
- pos += 2
+ # Handle codeblocks
+ if post_text.startswith("[codeblock]"):
+ end_pos = post_text.find("[/codeblock]")
+ if end_pos == -1:
+ sys.exit("ERROR! [codeblock] without a closing tag!")
+
+ code_text = post_text[len("[codeblock]"):end_pos]
+ post_text = post_text[end_pos:]
+
+ # Remove extraneous tabs
+ code_pos = 0
+ while True:
+ code_pos = code_text.find('\n', code_pos)
+ if code_pos == -1:
+ break
+
+ to_skip = 0
+ while code_pos+to_skip+1 < len(code_text) and code_text[code_pos+to_skip+1] == '\t':
+ to_skip += 1
+
+ if len(code_text[code_pos+to_skip+1:])==0:
+ code_text = code_text[:code_pos] + "\n"
+ code_pos += 1
+ else:
+ code_text = code_text[:code_pos] + "\n " + code_text[code_pos+to_skip+1:]
+ code_pos += 5 - to_skip
+
+ text = pre_text + "\n[codeblock]" + code_text + post_text
+ pos += len("\n[codeblock]" + code_text)
+
+ # Handle normal text
+ else:
+ text = pre_text + "\n\n" + post_text
+ pos += 2
# Escape * character to avoid interpreting it as emphasis
pos = 0
@@ -179,6 +211,13 @@ def rstize_text(text,cclass):
tag_text = ''
elif cmd == '/center':
tag_text = ''
+ elif cmd == 'codeblock':
+ tag_text = '\n::\n'
+ elif cmd == '/codeblock':
+ tag_text = ''
+ # Strip newline if the tag was alone on one
+ if pre_text[-1] == '\n':
+ pre_text = pre_text[:-1]
elif cmd == 'br':
# Make a new paragraph instead of a linebreak, rst is not so linebreak friendly
tag_text = '\n\n'
@@ -310,6 +349,10 @@ def make_rst_class(node):
f = open("class_"+name.lower() + '.rst', 'wb')
+ # Warn contributors not to edit this file directly
+ f.write(".. Generated automatically by doc/tools/makerst.py in Godot's source tree.\n")
+ f.write(".. DO NOT EDIT THIS FILE, but the doc/base/classes.xml source instead.\n\n")
+
f.write(".. _class_"+name+":\n\n")
f.write(make_heading(name, '='))
diff --git a/tools/editor/editor_help.cpp b/tools/editor/editor_help.cpp
index 2ece518f8d..ddcb634151 100644
--- a/tools/editor/editor_help.cpp
+++ b/tools/editor/editor_help.cpp
@@ -1201,7 +1201,7 @@ void EditorHelp::_add_text(const String& p_bbcode) {
class_desc->push_font(get_font("italic","Fonts"));
pos=brk_end+1;
tag_stack.push_front(tag);
- } else if (tag=="code") {
+ } else if (tag=="code" || tag=="codeblock") {
//use monospace font
class_desc->push_font(get_font("source","EditorFonts"));