node-query/node_modules/grunt-jsdoc/node_modules/jsdoc/lib/jsdoc/tag/dictionary.js

86 lines
1.9 KiB
JavaScript

/**
@overview
@author Michael Mathews <micmath@gmail.com>
@license Apache License 2.0 - See file 'LICENSE.md' in this project.
*/
'use strict';
var hasOwnProp = Object.prototype.hasOwnProperty;
var _tags = {};
var _tagSynonyms = {};
var _namespaces = [];
var dictionary;
/** @private */
function TagDefinition(title, etc) {
var self = this;
etc = etc || {};
this.title = dictionary.normalise(title);
Object.keys(etc).forEach(function(p) {
self[p] = etc[p];
});
}
/** @private */
TagDefinition.prototype.synonym = function(synonymName) {
_tagSynonyms[synonymName.toLowerCase()] = this.title;
return this; // chainable
};
/** @exports jsdoc/tag/dictionary */
dictionary = {
/** @function */
defineTag: function(title, opts) {
var def = new TagDefinition(title, opts);
// all the other dictionary functions use normalised names; we should too.
_tags[def.title] = def;
if (opts && opts.isNamespace) {
_namespaces.push(def.title);
}
return _tags[def.title];
},
/** @function */
lookUp: function(title) {
title = dictionary.normalise(title);
if ( hasOwnProp.call(_tags, title) ) {
return _tags[title];
}
return false;
},
/** @function */
isNamespace: function(kind) {
if (kind) {
kind = dictionary.normalise(kind);
if ( _namespaces.indexOf(kind) !== -1) {
return true;
}
}
return false;
},
/** @function */
normalise: function(title) {
var canonicalName = title.toLowerCase();
if ( hasOwnProp.call(_tagSynonyms, canonicalName) ) {
return _tagSynonyms[canonicalName];
}
return canonicalName;
}
};
require('jsdoc/tag/dictionary/definitions').defineTags(dictionary);
module.exports = dictionary;