lib/panino.js
function parse_files(files, options, callback) {
  var nodes = {
    // root section node
    '': {
      id: '',
      type: 'section',
      children: [],
      description: '',
      short_description: '',
      href: '#',
      root: true,
      file: '',
      line: 0
    }
  };

  var reportObject = { };
  
  async.forEachSeries(files, function (file, next_file) {
    var fn = parsers[path.extname(file)];

    if (!fn) {
      next_file();
      return;
    }

    console.info('Parsing file: ' + file);
    fn(file, options, function (err, file_nodes, file_report) {
      // TODO:  fail on name clash here as well -- as we might get name clash
      //        from different parsers, or even different files
      _.extend(nodes, file_nodes);
      _.extend(reportObject, file_report);
      next_file(err);
    });
  }, function (err) {
    callback(err, nodes, reportObject);
  });
}
function parse_files(files, options, callback) {
  var nodes = {
    // root section node
    '': {
      id: '',
      type: 'section',
      children: [],
      description: '',
      short_description: '',
      href: '#',
      root: true,
      file: '',
      line: 0
    }
  };

  var reportObject = { };
  
  async.forEachSeries(files, function (file, next_file) {
    var fn = parsers[path.extname(file)];

    if (!fn) {
      next_file();
      return;
    }

    console.info('Parsing file: ' + file);
    fn(file, options, function (err, file_nodes, file_report) {
      // TODO:  fail on name clash here as well -- as we might get name clash
      //        from different parsers, or even different files
      _.extend(nodes, file_nodes);
      _.extend(reportObject, file_report);
      next_file(err);
    });
  }, function (err) {
    callback(err, nodes, reportObject);
  });
}
function parse_files ( files , options , callback ) { var nodes = { // root section node '' : { id : '' , type : 'section' , children : [ ] , description : '' , short_description : '' , href : '#' , root : true , file : '' , line : 0 } } ; var reportObject = { } ; async . forEachSeries ( files , function ( file , next_file ) { var fn = parsers [ path . extname ( file ) ] ; if ( ! fn ) { next_file ( ) ; return ; } console . info ( 'Parsing file: ' + file ) ; fn ( file , options , function ( err , file_nodes , file_report ) { // TODO:  fail on name clash here as well -- as we might get name clash //        from different parsers, or even different files _ . extend ( nodes , file_nodes ) ; _ . extend ( reportObject , file_report ) ; next_file ( err ) ; } ) ; } , function ( err ) { callback ( err , nodes , reportObject ) ; } ) ; }
parse all files and prepare a "raw list of nodes
parse all files and prepare a raw list of nodes