DocTag = XObject.define(
+
+/**
+ * @constructor
+ * @arg {String} src
+ */
+
function(src) {
this.title = "";
this.type = "";
if (typeof src != "string") throw "src must be a string not "+(typeof src);
if (src.match(/^\s*\{/)) {
- var typeRange = src.balance("{", "}");
+ var typeRange = this.balance(src,"{", "}");
if (typeRange[1] == -1) {
throw "Malformed comment tag ignored. Tag type requires an opening { and a closing }: "+src;
}
// is optional?
if (src.charAt(0) == "[") {
- var nameRange = src.balance("[", "]");
+ var nameRange = this.balance(src,"[", "]");
if (nameRange[1] == -1) {
throw "Malformed comment tag ignored. Tag optional name requires an opening [ and a closing ]: "+src;
}
}
return src;
- }
+ },
+
+ balance : function(str, open, close) {
+ var i = 0;
+ while (str.charAt(i) != open) {
+ if (i == str.length) return [-1, -1];
+ i++;
+ }
+
+ var j = i+1;
+ var balance = 1;
+ while (j < str.length) {
+ if (str.charAt(j) == open) balance++;
+ if (str.charAt(j) == close) balance--;
+ if (balance == 0) break;
+ j++;
+ if (j == str.length) return [-1, -1];
+ }
+
+ return [i, j];
+}
+
+
+
});
// cached support?