summaryrefslogtreecommitdiffstats
path: root/packages/gitbook-markdown/lib
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2015-01-19 10:26:48 +0100
committerSamy Pessé <samypesse@gmail.com>2016-12-22 15:00:28 +0100
commit58b771ec31c556c83f4ae8f6f1e08610b6ced082 (patch)
tree462baee9a94c588af6c4178d9e38899b9697ff30 /packages/gitbook-markdown/lib
parent3f1041209582c26abc595be9c2c99189f5b85f3f (diff)
downloadgitbook-58b771ec31c556c83f4ae8f6f1e08610b6ced082.zip
gitbook-58b771ec31c556c83f4ae8f6f1e08610b6ced082.tar.gz
gitbook-58b771ec31c556c83f4ae8f6f1e08610b6ced082.tar.bz2
Add glossary parser and associated tests
Diffstat (limited to 'packages/gitbook-markdown/lib')
-rw-r--r--packages/gitbook-markdown/lib/glossary.js48
-rw-r--r--packages/gitbook-markdown/lib/index.js3
2 files changed, 50 insertions, 1 deletions
diff --git a/packages/gitbook-markdown/lib/glossary.js b/packages/gitbook-markdown/lib/glossary.js
new file mode 100644
index 0000000..549e9fd
--- /dev/null
+++ b/packages/gitbook-markdown/lib/glossary.js
@@ -0,0 +1,48 @@
+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;
diff --git a/packages/gitbook-markdown/lib/index.js b/packages/gitbook-markdown/lib/index.js
index 15a7f54..54381a3 100644
--- a/packages/gitbook-markdown/lib/index.js
+++ b/packages/gitbook-markdown/lib/index.js
@@ -3,6 +3,7 @@ var _ = require("lodash");
module.exports = {
parse: {
- summary: require("./summary")
+ summary: require("./summary"),
+ glossary: require("./glossary")
}
};