X-Git-Url: http://git.roojs.org/?p=gnome.introspection-doc-generator;a=blobdiff_plain;f=JSDOC%2FDocTag.js;h=b7f25ca4ebbc9b6a7f7cf34147ba718749e5d516;hp=092a9ee5c7bfce4dc4b2bb49bd51793a9f9fda15;hb=cc935efc3f7afc2b006802fc8e53ce6f2f49996c;hpb=7d00310a076975bf46a6c818dbe6e568b776c0f6 diff --git a/JSDOC/DocTag.js b/JSDOC/DocTag.js index 092a9ee..b7f25ca 100644 --- a/JSDOC/DocTag.js +++ b/JSDOC/DocTag.js @@ -3,7 +3,9 @@ XObject = imports.XObject.XObject; -DocTag = imports.DocTag.DocTag; +Options = imports.Options.Options; + + /** * DocTag - represents a single A=b tag. * @class DocTag @@ -11,6 +13,12 @@ DocTag = imports.DocTag.DocTag; DocTag = XObject.define( + +/** + * @constructor + * @arg {String} src + */ + function(src) { this.title = ""; this.type = ""; @@ -18,6 +26,7 @@ DocTag = XObject.define( this.isOptional = false; this.defaultValue = ""; this.desc = ""; + this.optvalues = false; if (typeof src != "undefined") { this.parse(src); } @@ -31,12 +40,42 @@ DocTag = XObject.define( isOptional : false, defaultValue : '', desc : '', - - toQDump :function(t) + /** + * serialize.. + */ + toJSON :function(t) { - return JSDOC.toQDump(t, 'JSDOC.DocTag.fromDump({', '})', new JSDOC.DocTag()); - } , - + var ret = { '*object' : 'DocTag' }; + + for (var i in this) { + if (i == 'optvalues') { + ret[i] = this.optvalues; + continue; + } + + switch (typeof(this[i])) { + case 'function': + continue; + continue; + + case 'string': + case 'number': + case 'boolean': + ret[i] = this[i]; continue; + + + + default: + + print("unknown type: (" + i + ")" + typeof(this[i])); + this.toJSON = null; + print(JSON.stringify(this));; + Seed.quit(); + } + } + return ret; + }, + /** @@ -48,9 +87,9 @@ DocTag = XObject.define( try { src = this.nibbleTitle(src); - if (JSDOC.PluginManager) { - JSDOC.PluginManager.run("onDocTagSynonym", this); - } + //if (JSDOC.PluginManager) { + // JSDOC.PluginManager.run("onDocTagSynonym", this); + // } src = this.nibbleType(src); @@ -60,17 +99,37 @@ DocTag = XObject.define( } } catch(e) { - if (JSDOC.opt.LOG) JSDOC.opt.LOG.warn(e); + if (Options.LOG) Options.LOG.warn(e); else throw e; } + + // if type == @cfg, and matches (|....|...) + + src = src.trim(); + if (this.title == "cfg" && src.match(/^\([^)]+\)/)) { + var m = src.match(/^\(([^)]+)\)/); + print(m); + if (m[1].match(/\|/)) { + var opts = m[1].trim().split(/\s*\|\s*/); + this.optvalues = opts; + src = src.substring(m[0].length).trim(); + print(src); + + + } + + + } + + this.desc = src; // whatever is left // example tags need to have whitespace preserved if (this.title != "example") this.desc = this.desc.trim(); - if (JSDOC.PluginManager) { - JSDOC.PluginManager.run("onDocTag", this); - } + //if (JSDOC.PluginManager) { + // JSDOC.PluginManager.run("onDocTag", this); + //} }, /** @@ -104,11 +163,12 @@ DocTag = XObject.define( @param {string} src @return src */ - nibbleType : function(src) { + nibbleType : function(src) + { 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; } @@ -134,7 +194,7 @@ DocTag = XObject.define( // 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; } @@ -160,13 +220,36 @@ DocTag = XObject.define( } 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]; +} + + +}); -JSDOC.DocTag.fromDump = function(t) +// cached support? +DocTag.fromDump = function(t) { - var ns = new JSDOC.DocTag(); + var ns = new DocTag(); for (var i in t) { if (typeof(ns[i]) == "undefined") { println("ERR:no default for DocTag:"+ i);