Home | History | Annotate | Download | only in node
      1 /*
      2  * Author: Heidi Pan <heidi.pan (at) intel.com>
      3  * Copyright (c) 2015 Intel Corporation.
      4  *
      5  * Permission is hereby granted, free of charge, to any person obtaining
      6  * a copy of this software and associated documentation files (the
      7  * "Software"), to deal in the Software without restriction, including
      8  * without limitation the rights to use, copy, modify, merge, publish,
      9  * distribute, sublicense, and/or sell copies of the Software, and to
     10  * permit persons to whom the Software is furnished to do so, subject to
     11  * the following conditions:
     12  *
     13  * The above copyright notice and this permission notice shall be
     14  * included in all copies or substantial portions of the Software.
     15  *
     16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     19  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
     20  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
     21  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
     22  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     23  */
     24 
     25 // dependencies
     26 var xml2js  = require('./xml2js')
     27   , fs      = require('fs')
     28   , Promise = require('bluebird')
     29   , opts    = require('commander')
     30   , _       = require('lodash')
     31   , mkdirp  = require('mkdirp');
     32 
     33 
     34 // parse command line arguments
     35 _.extend(opts, { addOptions: function(module) { return module.addOptions(opts); } });
     36 opts
     37   .option('-m, --module [module]', 'module name for which to build documentation', 'mraa')
     38   .option('-f, --formats [formats]', 'format for js comments', 'yuidoc,ternjs')
     39   .option('-o, --outdir [directory]', 'top directory to build documentation', __dirname + '/jsdoc')
     40   .addOptions(xml2js)
     41   .parse(process.argv);
     42 
     43 
     44 // use promise-style programming rather than spaghetti callbacks
     45 Promise.promisifyAll(fs);
     46 Promise.promisifyAll(mkdirp);
     47 
     48 
     49 // main
     50 xml2js.parse().then(function(specjs) {
     51   var formats = opts.formats.split(',');
     52   Promise.all(_.map(formats, function(format) {
     53     var generateDocs = require(__dirname + '/generators/' + format + '/generator');
     54     var dir = opts.outdir + '/' + format + '/' + specjs.MODULE;
     55     return mkdirp.mkdirpAsync(dir).then(function() {
     56       return fs.writeFileAsync(dir + '/doc.js', generateDocs(specjs));
     57     });
     58   }));
     59 });
     60