aboutsummaryrefslogtreecommitdiffstats
path: root/docs/src/reader.js
blob: 8ea59af923d4cca9780c2192384328c58fb59edb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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
97
98
99
/**
 * All reading related code here. This is so that we can separate the async code from sync code
 * for testability
 */

exports.collect = collect;

require.paths.push(__dirname);
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)) {
        console.log("reading " + file + ".......");
        work = Q.when(qfs.read(file), 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$/)) {
         console.log("reading " + file + ".......");
         work2 = Q.when(qfs.read(file), 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;
}