mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-17 16:15:22 +00:00
49 lines
1.1 KiB
JavaScript
49 lines
1.1 KiB
JavaScript
var _ = require('lodash');
|
|
var kramed = require('kramed');
|
|
|
|
// Get all the pairs of header + paragraph in a list of nodes
|
|
function groups(nodes) {
|
|
// A list of next nodes
|
|
var next = nodes.slice(1).concat(null);
|
|
|
|
return _.reduce(nodes, function(accu, node, idx) {
|
|
// Skip
|
|
if(!(
|
|
node.type === 'heading' &&
|
|
(next[idx] && next[idx].type === 'paragraph')
|
|
)) {
|
|
return accu;
|
|
}
|
|
|
|
// Add group
|
|
accu.push([
|
|
node,
|
|
next[idx]
|
|
]);
|
|
|
|
return accu;
|
|
}, []);
|
|
}
|
|
|
|
function parseGlossary(src) {
|
|
var nodes = kramed.lexer(src);
|
|
|
|
return groups(nodes)
|
|
.map(function(pair) {
|
|
// Simplify each group to a simple object with name/description
|
|
return {
|
|
name: pair[0].text,
|
|
id: entryId(pair[0].text),
|
|
description: pair[1].text,
|
|
};
|
|
});
|
|
}
|
|
|
|
// Normalizes a glossary entry's name to create an ID
|
|
function entryId(name) {
|
|
return name.toLowerCase();
|
|
}
|
|
|
|
module.exports = parseGlossary;
|
|
module.exports.entryId = entryId;
|