- From: Robin Berjon via cvs-syncmail <cvsmail@w3.org>
- Date: Wed, 07 Sep 2011 15:31:45 +0000
- To: public-dap-commits@w3.org
Update of /sources/public/2009/dap/ReSpec.js/js
In directory hutz:/tmp/cvs-serv11640
Modified Files:
respec.js
Log Message:
dictionaries are now supported as well
Index: respec.js
===================================================================
RCS file: /sources/public/2009/dap/ReSpec.js/js/respec.js,v
retrieving revision 1.158
retrieving revision 1.159
diff -u -d -r1.158 -r1.159
--- respec.js 24 Aug 2011 12:35:03 -0000 1.158
+++ respec.js 7 Sep 2011 15:31:43 -0000 1.159
@@ -1448,7 +1448,7 @@
var inf = w.definition(idl);
var df = w.makeMarkup();
idl.parentNode.replaceChild(df, idl);
- if (inf.type == "interface" || inf.type == "exception") infNames.push(inf.id);
+ if (inf.type == "interface" || inf.type == "exception" || inf.type == "dictionary") infNames.push(inf.id);
}
document.normalize();
var ants = document.querySelectorAll("a:not([href])");
@@ -1607,6 +1607,7 @@
str = this.parseExtendedAttributes(str, def);
if (str.indexOf("interface") == 0) this.interface(def, str, idl);
else if (str.indexOf("exception") == 0) this.exception(def, str, idl);
+ else if (str.indexOf("dictionary") == 0) this.dictionary(def, str, idl);
else if (str.indexOf("typedef") == 0) this.typedef(def, str, idl);
else if (/\bimplements\b/.test(str)) this.implements(def, str, idl);
else error("Expected definition, got: " + str);
@@ -1629,6 +1630,20 @@
return inf;
},
+ dictionary: function (inf, str, idl) {
+ inf.type = "dictionary";
+ var match = /^\s*dictionary\s+([A-Za-z][A-Za-z0-9]*)(?:\s+:\s*([^{]+)\s*)?/.exec(str);
+ if (match) {
+ inf.id = match[1];
+ inf.refId = this._id(inf.id);
+ if (match[2]) inf.superclasses = match[2].split(/\s*,\s*/);
+ }
+ else {
+ error("Expected dictionary, got: " + str);
+ }
+ return inf;
+ },
+
exception: function (exc, str, idl) {
exc.type = "exception";
var match = /^\s*exception\s+([A-Za-z][A-Za-z0-9]*)\s*/.exec(str);
@@ -1696,6 +1711,9 @@
if (obj.type == "exception") {
mem = this.exceptionMember(dt, dd);
}
+ else if (obj.type == "dictionary") {
+ mem = this.dictionaryMember(dt, dd);
+ }
else {
mem = this.interfaceMember(dt, dd);
}
@@ -1755,7 +1773,41 @@
}
// NOTHING MATCHED
- error("Expected interface member, got: " + str);
+ error("Expected exception member, got: " + str);
+ },
+
+ dictionaryMember: function (dt, dd) {
+ var mem = { children: [] };
+ var str = this._norm(dt.textContent);
+ mem.description = sn.documentFragment();
+ sn.copyChildren(dd, mem.description);
+ str = this.parseExtendedAttributes(str, mem);
+
+ // MEMBER
+ var match = /^\s*([^=]+\??)\s+([^=\s]+)(?:\s*=\s*(.*))?$/.exec(str);
+ // var match = /^\s*(.*?)\s+(\S+)\s*$/.exec(str);
+ if (match) {
+ mem.type = "member";
+ var type = match[1];
+ mem.id = match[2];
+ mem.refId = this._id(mem.id);
+ mem.default = match[3];
+ mem.nullable = false;
+ if (/\?$/.test(type)) {
+ type = type.replace(/\?$/, "");
+ mem.nullable = true;
+ }
+ mem.array = false;
+ if (/\[\]$/.test(type)) {
+ type = type.replace(/\[\]$/, "");
+ mem.array = true;
+ }
+ mem.datatype = type;
+ return mem;
+ }
+
+ // NOTHING MATCHED
+ error("Expected dictionary member, got: " + str);
},
interfaceMember: function (dt, dd) {
@@ -2082,6 +2134,48 @@
return df;
}
+ else if (obj.type == "dictionary") {
+ var df = sn.documentFragment();
+ var curLnk = "widl-" + obj.refId + "-";
+ var things = obj.children;
+ if (things.length == 0) return df;
+ if (!this.noIDLSorting) {
+ things.sort(function (a, b) {
+ if (a.id < b.id) return -1;
+ if (a.id > b.id) return 1;
+ return 0;
+ });
+ }
+
+ var sec = sn.element("section", {}, df);
+ sn.element("h2", {}, sec, "Members");
+ var dl = sn.element("dl", { "class": "members" }, sec);
+ for (var j = 0; j < things.length; j++) {
+ var it = things[j];
+ var dt = sn.element("dt", { id: curLnk + it.refId }, dl);
+ sn.element("code", {}, dt, it.id);
+ var desc = sn.element("dd", {}, dl, [it.description]);
+ sn.text(" of type ", dt);
+ if (it.array) sn.text("array of ", dt);
+ var span = sn.element("span", { "class": "idlMemberType" }, dt);
+ var matched = /^sequence<(.+)>$/.exec(it.datatype);
+ if (matched) {
+ sn.text("sequence<", span);
+ sn.element("a", {}, span, matched[1]);
+ sn.text(">", span);
+ }
+ else {
+ sn.element("a", {}, span, it.datatype);
+ }
+ if (it.nullable) sn.text(", nullable", dt);
+ if (it.default) {
+ sn.text(", defaulting to ", dt);
+ sn.element("code", {}, dt, [sn.text(it.default)]);
+ }
+ }
+ return df;
+ }
+
else if (obj.type == "interface") {
var df = sn.documentFragment();
var curLnk = "widl-" + obj.refId + "-";
@@ -2330,6 +2424,31 @@
str += this._idn(indent) + "};</span>\n";
return str;
}
+ else if (obj.type == "dictionary") {
+ var str = "<span class='idlDictionary' id='idl-def-" + obj.refId + "'>";
+ if (obj.extendedAttributes) str += this._idn(indent) + "[<span class='extAttr'>" + obj.extendedAttributes + "</span>]\n";
+ str += this._idn(indent) + "dictionary <span class='idlDictionaryID'>" + obj.id + "</span>";
+ if (obj.superclasses && obj.superclasses.length) str += " : " +
+ obj.superclasses.map(function (it) {
+ return "<span class='idlSuperclass'><a>" + it + "</a></span>"
+ })
+ .join(", ");
+ str += " {\n";
+ var max = 0;
+ obj.children.forEach(function (it, idx) {
+ var len = it.datatype.length;
+ if (it.nullable) len = len + 1;
+ if (it.array) len = len + 2;
+ max = (len > max) ? len : max;
+ });
+ var curLnk = "widl-" + obj.refId + "-";
+ for (var i = 0; i < obj.children.length; i++) {
+ var ch = obj.children[i];
+ str += this.writeMember(ch, max, indent + 1, curLnk);
+ }
+ str += this._idn(indent) + "};</span>\n";
+ return str;
+ }
},
writeField: function (attr, max, indent, curLnk) {
@@ -2441,6 +2560,20 @@
return str;
},
+ writeMember: function (memb, max, indent, curLnk) {
+ var str = "<span class='idlMember'>";
+ str += this._idn(indent);
+ var pad = max - memb.datatype.length;
+ if (memb.nullable) pad = pad - 1;
+ var nullable = memb.nullable ? "?" : "";
+ str += "<span class='idlMemberType'><a>" + memb.datatype + "</a>" + nullable + "</span> ";
+ for (var i = 0; i < pad; i++) str += " ";
+ str += "<span class='idlMemberName'><a href='#" + curLnk + memb.refId + "'>" + memb.id + "</a></span>";
+ if (memb.default) str += " = <span class='idlMemberValue'>" + memb.default + "</span>"
+ str += ";</span>\n";
+ return str;
+ },
+
writeDatatype: function (dt) {
var matched = /^sequence<(.+)>$/.exec(dt);
if (matched) {
Received on Wednesday, 7 September 2011 15:31:51 UTC