/**
* @file Parser
*
* @summary This is a wrapper around jsdoc parsing infrastructure that generates doc description
*
* @version ${ pkg.version }
* @author ${ pkg.author.name }
*
* @license ${ pkg.license }.
* @copyright ${ pkg.author.name }
* @name parser.js
* @unknownTag tag
*/
(function(){
'use strict';
// Dependencies
var augment = require('jsdoc/lib/jsdoc/augment');
var borrow = require('jsdoc/lib/jsdoc/borrow');
var parser = require('jsdoc/lib/jsdoc/src/parser');
var handlers = require('jsdoc/lib/jsdoc/src/handlers');
var Parser = function(infs){
// Start by resolving defaults for the infos object
infs = infs || {};
var informations = {
name: '',
kind: 'package',
longname: '',
description: '',
version: '',
licenses: []
};
Object.keys(informations).forEach(function(key){
if(key in infs)
informations[key] = infs[key];
});
if(!informations.longname)
informations.longname = informations.kind + ':' + informations.name;
// Create actual jsdoc parser
var innerParser = new parser.Parser();
// Attach handles
handlers.attachTo(innerParser);
// Set file list up
var parsedFiles = informations.files = [];
// Do parse
this.parse = function(vinyl){
var data = vinyl.contents.toString('utf8');
// Don't treat empty files
if (data.length) {
innerParser._parseSourceCode(data, vinyl.path);
parsedFiles.push(vinyl.path);
}
};
this.complete = function(){
// Get buffer
var buf = innerParser._resultBuffer;
// Push generic package infos
buf.push(informations);
// Borrow and augment shit
borrow.indexAll(buf);
augment.addInherited(buf);
borrow.resolveBorrows(buf);
// Return buf
return buf;
};
};
module.exports = Parser;
}());