mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-17 15:40:22 +00:00
96 lines
2.4 KiB
JavaScript
96 lines
2.4 KiB
JavaScript
/**
|
|
* 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;
|
|
}
|