front-matter-markdown
Version:
get the config and toc object from the markdown string.
81 lines (71 loc) • 2.12 kB
JavaScript
(function() {
var AstHeadingsToFileObject, isArray, isString;
isArray = require('util-ex/lib/is/type/array');
isString = require('util-ex/lib/is/type/string');
module.exports = AstHeadingsToFileObject = (function() {
var textToObject;
function AstHeadingsToFileObject(nodes) {
var contents, lastObj, level, parents, result;
contents = [];
result = {
contents: contents
};
level = nodes[0].level;
lastObj = null;
parents = [result];
nodes.forEach(function(node, i) {
var obj, parent;
obj = textToObject(node);
if (node.level > level) {
contents = lastObj.contents = [];
parents.push(lastObj);
level = node.level;
} else if (node.level < level) {
parent = parents.pop() || result;
contents = parent.contents;
level = node.level;
}
contents.push(obj);
return lastObj = obj;
});
if (!result.contents.length) {
result = null;
}
return result;
}
AstHeadingsToFileObject.textToObject = textToObject = function(textNode) {
var result;
result = {};
if (isString(textNode.text)) {
result.title = textNode.text;
} else if (!isArray(textNode.text)) {
textNode = textNode.text;
if (textNode.type === 'link') {
result.title = textNode.text;
result.path = textNode.href;
if (textNode.title) {
result.hint = textNode.title;
}
} else {
result.title = textNode;
}
} else {
result.title = [];
textNode.text.forEach(function(n) {
if (n.type === 'link') {
result.title.push(n.text);
result.path = n.href;
if (n.title) {
return result.hint = n.title;
}
} else {
return result.title.push(n);
}
});
}
return result;
};
return AstHeadingsToFileObject;
})();
}).call(this);
//# sourceMappingURL=ast-headings-to-file-object.js.map