Options = imports.Options.Options;
-DocTag = imports.DocTag.DocTag;
+
/**
* DocTag - represents a single A=b tag.
* @class DocTag
DocTag = XObject.define(
+
+/**
+ * @constructor
+ * @arg {String} src
+ */
+
function(src) {
this.title = "";
this.type = "";
}
}
catch(e) {
- if (Options.LOG) Options.warn(e);
+ if (Options.LOG) Options.LOG.warn(e);
else throw e;
}
this.desc = src; // whatever is left
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?