diff --git a/about.json b/about.json index 584391e0..bab662cb 100644 --- a/about.json +++ b/about.json @@ -1,6 +1,6 @@ { "app": { "name": "jsdoc-3", - "version": "0.0.0+2010-06-27-2042" + "version": "0.0.0+2010-07-04-2302" } } diff --git a/modules/jsdoc/doclet.js b/modules/jsdoc/doclet.js index a2ef2e57..66a1b3ac 100644 --- a/modules/jsdoc/doclet.js +++ b/modules/jsdoc/doclet.js @@ -246,15 +246,9 @@ for (var i = 0, leni = tags.length; i < leni; i++) { tagAbout = tagDictionary.lookUp(tags[i].name); - if (tags[i].name === 'private') { - tags[tags.length] = parse_tag.fromText('access private'); - } - else if (tags[i].name === 'protected') { - tags[tags.length] = parse_tag.fromText('access protected'); - } - else if (tags[i].name === 'public') { - tags[tags.length] = parse_tag.fromText('access public'); - } + if (tagAbout.setsDocletAccess) { + tags[tags.length] = parse_tag.fromText('access '+tags[i].name); + } else if (tags[i].name === 'const') { tags[tags.length] = parse_tag.fromText('attribute constant'); } @@ -280,7 +274,7 @@ taggedMemberof = memberof = tags[i].value; } - if ( tagAbout.canProvideName/*nameables.indexOf(tags[i].name) > -1*/ ) { + if ( tagAbout.setsDocletName/*nameables.indexOf(tags[i].name) > -1*/ ) { if (tags[i].name === 'property' && (isa === 'constructor')) { // to avoid backwards compatability conflicts we just ignore a @property in a doclet after a @constructor } diff --git a/modules/jsdoc/name.js b/modules/jsdoc/name.js index fd7c2d87..fc6f8c36 100644 --- a/modules/jsdoc/name.js +++ b/modules/jsdoc/name.js @@ -11,7 +11,8 @@ (function() { var Token = Packages.org.mozilla.javascript.Token, - currentModule = ''; + currentModule = '', + tagDictionary = require('jsdoc/tagdictionary'); exports.setCurrentModule = function(moduleName) { currentModule = moduleName; @@ -29,8 +30,9 @@ memberof = doclet.tagValue('memberof') || '', path, shortname, - prefix, - supportedNamespaces = ['module', 'event', 'file']; + prefix; + //, + //supportedNamespaces = ['module', 'event', 'file']; // only keep the first word of the first tagged name name = name.split(/\s+/g)[0]; @@ -55,9 +57,9 @@ if (memberof) { doclet.setTag('memberof', memberof); } } - // if name doesn't already have a doc-namespace and needs one + // if name doesn't already have a docspace and needs one // the namespace should appear in the path but not the name - if (supportedNamespaces.indexOf(isa) > -1) { + if (tagDictionary.lookUp(isa).isDocspace) { if ( /^[a-z_$-]+:(\S+)/i.test(name) ) { name = RegExp.$1; } diff --git a/modules/jsdoc/tagdictionary.js b/modules/jsdoc/tagdictionary.js index a75a446b..5b158f26 100644 --- a/modules/jsdoc/tagdictionary.js +++ b/modules/jsdoc/tagdictionary.js @@ -46,8 +46,9 @@ //// default properties of all tags TagDefinition.prototype = { isExported : false, // this tag should appear as a top level property in the doclet? - canProvideIsa : false, // the name of this tag is used to define the doclet's isa property - canProvideName : false, // this tag can be used to name the doclet + setsDocletIsa : false, // the name of this tag is used to define the doclet's isa property + setsDocletName : false, // this tag can be used to name the doclet + setsDocletAccess: false, isDocspace : false, // the name of this tag becomes the docspace for the doclet name, like "event:" canHaveType : false, // this tag can have a {type} canHavePname : false, // this tag can have a parameter-type name @@ -57,14 +58,14 @@ //// default event handlers? // TagDefinition.prototype.onAddTagToDoclet = function(tag, doclet) { -// if (this.canProvideIsa) { +// if (this.setsDocletIsa) { // if (doclet.isa) { // throw 'Overwriting existing isa in doclet: was "'+doclet.isa+'", now "'+this.title+'"'; // } // doclet.isa = this.title; // } // -// if (this.canProvideName) { +// if (this.setsDocletName) { // if (doclet.name) { // throw 'Overwriting existing name in doclet: was "'+doclet.name+'", now "'+this.title+'"'; // } @@ -99,32 +100,32 @@ // @namespace new TagDefinition('namespace', { - canProvideIsa: true, - canProvideName: true + setsDocletIsa: true, + setsDocletName: true }); // @constructor new TagDefinition('constructor', { - canProvideIsa: true, - canProvideName: true + setsDocletIsa: true, + setsDocletName: true }); // @const new TagDefinition('const', { - canProvideIsa: true, - canProvideName: true + setsDocletIsa: true, + setsDocletName: true }); // @enum new TagDefinition('enum', { - canProvideIsa: true, - canProvideName: true + setsDocletIsa: true, + setsDocletName: true }); // @file|overview|fileoverview new TagDefinition('file', { - canProvideIsa: true, - canProvideName: true, + setsDocletIsa: true, + setsDocletName: true, isDocspace: true }); @@ -133,7 +134,7 @@ canHaveType: true, canHavePname: true, canHavePdesc: true, - canProvideName: true + setsDocletName: true }); // @property @@ -141,20 +142,20 @@ canHaveType: true, canHavePname: true, canHavePdesc: true, - canProvideName: true + setsDocletName: true }); // @event new TagDefinition('event', { - canProvideIsa: true, - canProvideName: true, + setsDocletIsa: true, + setsDocletName: true, isDocspace: true }); // @module new TagDefinition('module', { - canProvideIsa: true, - canProvideName: true, + setsDocletIsa: true, + setsDocletName: true, isDocspace: true }); @@ -185,4 +186,21 @@ canHavePdesc: true }); + // @private + new TagDefinition('private', { + setsDocletAccess: true + }); + + // @protected + new TagDefinition('protected', { + setsDocletAccess: true + }); + + // @public + new TagDefinition('public', { + setsDocletAccess: true + }); + + + })(); \ No newline at end of file diff --git a/test/runall.js b/test/runall.js index ffe33169..9817e896 100644 --- a/test/runall.js +++ b/test/runall.js @@ -5,6 +5,7 @@ load(BASEDIR + '/test/tests/04_jsdoc_docset.js'); load(BASEDIR + '/test/tests/05_jsdoc_doclet.js'); load(BASEDIR + '/test/tests/06_jsdoc_tag.js'); +load(BASEDIR + '/test/tests/09_tag_desc.js'); load(BASEDIR + '/test/tests/10_tag_constructor.js'); load(BASEDIR + '/test/tests/11_tag_namespace.js'); load(BASEDIR + '/test/tests/12_tag_property.js'); @@ -18,6 +19,6 @@ load(BASEDIR + '/test/tests/20_tag_file.js'); // see http://visionmedia.github.com/jspec/ JSpec.run({ reporter: JSpec.reporters.Terminal, - failuresOnly: false + failuresOnly: true }) .report(); \ No newline at end of file diff --git a/test/tests/09_tag_desc.js b/test/tests/09_tag_desc.js new file mode 100644 index 00000000..e6e76ff1 --- /dev/null +++ b/test/tests/09_tag_desc.js @@ -0,0 +1,63 @@ +(function() { + var jsdoc, + doclets; + + JSpec.describe('@desc', function() { + + before(function() { + // docsets can only be created by parsers + jsdoc = { + tag: require('jsdoc/tag'), + parser: require('jsdoc/parser') + }; + jsdoc.parser.parseFiles(BASEDIR + 'test/tests/09_tag_desc.js'); + doclets = jsdoc.parser.result; + }); + + describe('A doclet that starts with untagged text', function() { + it('should have an `desc` property set to the text', function() { + var doclet = doclets[0].toObject(); + expect(doclet).to(have_property, 'desc'); + expect(doclet.desc).to(eql, 'Here is Edward Bear, coming downstairs now,\nbump,\n bump,\n bump'); + }); + }); + + describe('A doclet that has a @desc tag', function() { + it('should have an `desc` property set to the text of that tag', function() { + var doclet = doclets[1].toObject(); + expect(doclet).to(have_property, 'desc'); + expect(doclet.desc).to(eql, 'Here is Edward Bear, coming downstairs now, bump, bump, bump'); + }); + }); + + describe('A doclet that has a @description tag', function() { + it('should have an `desc` property set to the text of that tag', function() { + var doclet = doclets[2].toObject(); + expect(doclet).to(have_property, 'desc'); + expect(doclet.desc).to(eql, 'Here is Edward Bear, coming downstairs now, bump, bump, bump'); + }); + }); + }); +})(); + +(function testarea() { + + /** + * Here is Edward Bear, coming downstairs now, + * bump, + * bump, + * bump + * @namespace Poo + */ + + /** + @namespace Bear + @desc Here is Edward Bear, coming downstairs now, bump, bump, bump + */ + + /** + @namespace Winnie + @description Here is Edward Bear, coming downstairs now, bump, bump, bump + */ + +})(); \ No newline at end of file