aboutsummaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
0 files changed, 0 insertions, 0 deletions
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
/**
 * All reading related code here. This is so that we can separate the async code from sync code
 * for testability
 */

exports.collect = collect;

var ngdoc = require('./ngdoc.js'),
    Q = require('qq'),
    qfs = require('q-fs');

var NEW_LINE = /\n\r?/;

function collect() {
  var allDocs = [];

  //collect docs in JS Files
  var path = 'src';
  var promiseA = Q.when(qfs.listTree(path), function(files) {
    var done;
    //read all files in parallel.
    files.forEach(function(file) {
      var work;
      if(/\.js$/.test(file)) {
        work = Q.when(qfs.read(file, 'b'), function(content) {
          processJsFile(content, file).forEach (function(doc) {
            allDocs.push(doc);
          });
        });
      }
      done = Q.when(done, function() {
        return work;
      });
    });
    return done;
  });

   //collect all ng Docs in Content Folder
   var path2 = 'docs/content';
   var promiseB = Q.when(qfs.listTree(path2), function(files){
     var done2;
     files.forEach(function(file) {
       var work2;
       if (file.match(/\.ngdoc$/)) {
         work2 = Q.when(qfs.read(file, 'b'), function(content){
            var section = '@section ' + file.split('/')[2] + '\n';
            allDocs.push(new ngdoc.Doc(section + content.toString(),file, 1).parse());
          });
       }
       done2 = Q.when(done2, function() {
         return work2;
       });
     });
     return done2;
   });

  return Q.join(promiseA, promiseB, function() {
    return allDocs;
  });
}

function processJsFile(content, file) {
  var docs = [];
  var lines = content.toString().split(NEW_LINE);
  var text;
  var startingLine ;
  var match;
  var inDoc = false;

  lines.forEach(function(line, lineNumber){
    lineNumber++;
    // is the comment starting?
    if (!inDoc && (match = line.match(/^\s*\/\*\*\s*(.*)$/))) {
      line = match[1];
      inDoc = true;
      text = [];
      startingLine = lineNumber;
    }
    // are we done?
    if (inDoc && line.match(/\*\//)) {
      text = text.join('\n');
      text = text.replace(/^\n/, '');
      if (text.match(/@ngdoc/)){
        //console.log(file, startingLine)
        docs.push(new ngdoc.Doc('@section api\n' + text, file, startingLine).parse());
      }
      doc = null;
      inDoc = false;
    }
    // is the comment add text
    if (inDoc){
      text.push(line.replace(/^\s*\*\s?/, ''));
    }
  });
  return docs;
}