docblock-parser
Version:
A standalone docblock parser
46 lines (39 loc) • 1.26 kB
JavaScript
;
var consumeTil = require('./consumeTil');
var predicates = require('./predicates');
var rtrim = function rtrim(x) {
return x.replace(/\s*$/, '');
};
var emptyLines = consumeTil(function (x) {
return x.trim() !== '';
});
var multilineTilTag = consumeTil(predicates.isTagLine, rtrim);
var multilineTilEmptyLineOrTag = consumeTil(function (x, i) {
return i > 0 && predicates.isEmptyLine(x) || predicates.isTagLine(x);
}, rtrim);
var booleanTag = function booleanTag(docblock) {
docblock.pop();
return true;
};
var singleParameterTag = function singleParameterTag(docblock) {
var hasSeenNonEmptyLine = false;
var value = consumeTil(function (line) {
var prev = hasSeenNonEmptyLine;
hasSeenNonEmptyLine = line.trim() !== '';
return prev;
}, rtrim)(docblock);
return value;
};
var multiParameterTag = function multiParameterTag(delimiter) {
return function (docblock) {
return multilineTilEmptyLineOrTag(docblock).replace('\n', ' ').split(delimiter);
};
};
module.exports = {
emptyLines: emptyLines,
multilineTilTag: multilineTilTag,
multilineTilEmptyLineOrTag: multilineTilEmptyLineOrTag,
booleanTag: booleanTag,
singleParameterTag: singleParameterTag,
multiParameterTag: multiParameterTag
};