[valadoc] libvaladoc: Escape names if necessary
- From: Florian Brosch <flobrosch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [valadoc] libvaladoc: Escape names if necessary
- Date: Wed, 17 Oct 2012 19:52:53 +0000 (UTC)
commit 6d999ad7427d475b1a969709e843dc33c058262c
Author: Florian Brosch <flo brosch gmail com>
Date: Mon Oct 15 03:58:31 2012 +0200
libvaladoc: Escape names if necessary
src/libvaladoc/api/node.vala | 367 +++++++++++++++++++++++++++++++++++++++++-
1 files changed, 364 insertions(+), 3 deletions(-)
---
diff --git a/src/libvaladoc/api/node.vala b/src/libvaladoc/api/node.vala
index b2fb2ab..c97d366 100644
--- a/src/libvaladoc/api/node.vala
+++ b/src/libvaladoc/api/node.vala
@@ -58,8 +58,13 @@ public abstract class Valadoc.Api.Node : Item, Browsable, Documentation, Compara
per_name_children = new HashMap<string,Node> ();
per_type_children = new HashMap<NodeType?, Gee.List<Node>> (int_hash, int_equal);
+ if (name != null && (is_keyword (name) || name[0].isdigit ())) {
+ this.name = "@" + name;
+ } else {
+ this.name = name;
+ }
+
this.parent = parent;
- this.name = name;
this.file = file;
}
@@ -89,7 +94,11 @@ public abstract class Valadoc.Api.Node : Item, Browsable, Documentation, Compara
public void add_child (Symbol child) {
if (child.name != null) {
- per_name_children.set (child.name, child);
+ if (child.name[0] == '@') {
+ per_name_children.set (child.name.next_char (), child);
+ } else {
+ per_name_children.set (child.name, child);
+ }
} else {
// Special case for the root namespace
per_name_children.set ("", child);
@@ -259,7 +268,11 @@ public abstract class Valadoc.Api.Node : Item, Browsable, Documentation, Compara
}
public Node? find_by_name (string name) {
- return per_name_children.get (name);
+ if (name[0] == '@') {
+ return per_name_children.get (name.next_char ());
+ } else {
+ return per_name_children.get (name);
+ }
}
private Namespace? _nspace = null;
@@ -340,5 +353,353 @@ public abstract class Valadoc.Api.Node : Item, Browsable, Documentation, Compara
public int compare_to (Node node) {
return strcmp (name, node.name);
}
+
+ private bool is_keyword (string name) {
+ switch (name[0]) {
+ case 'a':
+ switch (name[1]) {
+ case 'b':
+ return name == "abstract";
+
+ case 's':
+ if (name[2] == '\0') {
+ return true;
+ }
+
+ return name == "async";
+ }
+ break;
+
+ case 'b':
+ switch (name[1]) {
+ case 'a':
+ return name == "base";
+
+ case 'r':
+ return name == "break";
+ }
+ break;
+
+ case 'c':
+ switch (name[1]) {
+ case 'a':
+ switch (name[2]) {
+ case 's':
+ return name == "case";
+
+ case 't':
+ return name == "catch";
+ }
+ break;
+
+ case 'l':
+ return name == "class";
+
+ case 'o':
+ if (name[2] != 'n') {
+ return false;
+ }
+
+ switch (name[3]) {
+ case 's':
+ if (name[4] == 't') {
+ switch (name[5]) {
+ case '\0':
+ return true;
+
+ case 'r':
+ return name == "construct";
+ }
+ }
+ break;
+
+ case 't':
+ return name == "continue";
+ }
+ break;
+ }
+ break;
+
+ case 'd':
+ switch (name[1]) {
+ case 'e':
+ switch (name[2]) {
+ case 'f':
+ return name == "default";
+
+ case 'l':
+ if (name[3] != 'e') {
+ return false;
+ }
+
+ switch (name[4]) {
+ case 'g':
+ return name == "delegate";
+
+ case 't':
+ return name == "delete";
+ }
+ break;
+ }
+ break;
+
+ case 'o':
+ return name[2] == '\0';
+
+ case 'y':
+ return name == "dynamic";
+ }
+ break;
+
+ case 'e':
+ switch (name[1]) {
+ case 'l':
+ return name == "else";
+
+ case 'n':
+ switch (name[2]) {
+ case 's':
+ return name == "ensures";
+
+ case 'u':
+ return name == "enum";
+ }
+ break;
+
+ case 'r':
+ return name == "errordomain";
+
+ case 'x':
+ return name == "extern";
+ }
+ break;
+
+ case 'f':
+ switch (name[1]) {
+ case 'a':
+ return name == "false";
+
+ case 'i':
+ return name == "finally";
+
+ case 'o':
+ if (name[2] != 'r') {
+ return false;
+ }
+
+ switch (name[3]) {
+ case '\0':
+ return true;
+
+ case 'e':
+ return name == "foreach";
+ }
+ break;
+ }
+ break;
+
+ case 'g':
+ return name == "get";
+
+ case 'i':
+ switch (name[1]) {
+ case 'f':
+ return name[2] == '\0';
+
+ case 'n':
+ switch (name[2]) {
+ case '\0':
+ return true;
+
+ case 'l':
+ return name == "inline";
+
+ case 't':
+ return name == "interface" || name == "internal";
+ }
+ break;
+
+ case 's':
+ return name[2] == '\0';
+ }
+ break;
+
+ case 'l':
+ return name == "lock";
+
+ case 'n':
+ switch (name[1]) {
+ case 'a':
+ return name == "namespace";
+
+ case 'e':
+ return name == "new";
+
+ case 'u':
+ return name == "null";
+ }
+ break;
+
+ case 'o':
+ switch (name[1]) {
+ case 'u':
+ return name == "out";
+
+ case 'v':
+ return name == "override";
+
+ case 'w':
+ return name == "owned";
+ }
+ break;
+
+ case 'p':
+ switch (name[1]) {
+ case 'a':
+ return name == "params";
+
+ case 'r':
+ switch (name[2]) {
+ case 'i':
+ return name == "private";
+
+ case 'o':
+ return name == "protected";
+ }
+ break;
+ case 'u':
+ return name == "public";
+ }
+ break;
+
+ case 'r':
+ if (name[1] != 'e') {
+ return false;
+ }
+
+ switch (name[2]) {
+ case 'f':
+ return name[3] == '\0';
+
+ case 'q':
+ return name == "requires";
+
+ case 't':
+ return name == "return";
+ }
+ break;
+
+ case 's':
+ switch (name[1]) {
+ case 'e':
+ switch (name[2]) {
+ case 'a':
+ return name == "sealed";
+
+ case 't':
+ return name[3] == '\0';
+ }
+ break;
+
+ case 'i':
+ switch (name[2]) {
+ case 'g':
+ return name == "signal";
+ case 'z':
+ return name == "sizeof";
+ }
+ break;
+
+ case 't':
+ switch (name[2]) {
+ case 'a':
+ return name == "static";
+
+ case 'r':
+ return name == "struct";
+ }
+ break;
+
+ case 'w':
+ return name == "switch";
+ }
+ break;
+
+ case 't':
+ switch (name[1]) {
+ case 'h':
+ switch (name[2]) {
+ case 'i':
+ return name == "this";
+
+ case 'r':
+ if (name[3] == 'o' && name[4] == 'w') {
+ return name[5] == '\0' || (name[5] == 's' && name[6] == '\0');
+ }
+ break;
+ }
+ break;
+
+ case 'r':
+ switch (name[2]) {
+ case 'u':
+ return name == "true";
+
+ case 'y':
+ return name[3] == '\0';
+ }
+ break;
+
+ case 'y':
+ return name == "typeof";
+ }
+ break;
+
+ case 'u':
+ switch (name[1]) {
+ case 'n':
+ return name == "unowned";
+
+ case 's':
+ return name == "using";
+ }
+ break;
+
+ case 'v':
+ switch (name[1]) {
+ case 'a':
+ return name == "var";
+
+ case 'i':
+ return name == "virtual";
+
+ case 'o':
+ switch (name[2]) {
+ case 'i':
+ return name == "void";
+
+ case 'l':
+ return name == "volatile";
+ }
+ break;
+ }
+ break;
+
+ case 'w':
+ switch (name[1]) {
+ case 'e':
+ return name == "weak";
+
+ case 'h':
+ return name == "while";
+ }
+ break;
+
+ case 'y':
+ return name == "yield";
+ }
+
+ return false;
+ }
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]