UNPKG

2.1 kBJavaScriptView Raw
1var gsub = require('./utils').gsub,
2 yaml = require('js-yaml'),
3 _ = require('underscore');
4
5
6// github-flavored-markdown underscore changes
7
8exports.underscores = function (doc) {
9 // prevent foo_bar_baz from ending up with an italic word in the middle
10 doc.markdown = gsub(doc.markdown,
11 /(^(?! {4}|\t)\w+_\w+_\w[\w_]*)/, function (match) {
12 var count = 0;
13 for (var i = 0; i < match.length; i++) {
14 if (match[i] == '_') count++;
15 }
16 if (count === 2) {
17 return match.replace(/_/g, '\\_');
18 }
19 return match;
20 }
21 );
22 return doc;
23};
24
25// github-flavored-markdown newline changes - currently BROKEN
26
27// in very clear cases, let newlines become <br /> tags
28/*doc.markdown = gsub(doc.markdown,
29 /(\A|^$\n)(^\w[^\n]*\n)(^\w[^\n]*$)+/m, function (match, group1) {
30 return match.replace(/^(.+)$/, group1 + ' ');
31 }
32);*/
33
34exports.metadata = function (doc) {
35 var key;
36 var lines = doc.markdown.split('\n');
37 doc.metadata = {};
38
39 while (lines.length) {
40 var match = /^(\S+):\s+(.*)$/.exec(lines[0]);
41 if (match) {
42 var key = match[1];
43 doc.metadata[key] = match[2];
44 lines.shift();
45 }
46 else {
47 var continued_value = /^\s+(.+)$/.exec(lines[0]);
48 // strip empty lines
49 if (/^\s*$/.exec(lines[0])) {
50 lines.shift();
51 }
52 else if (continued_value && key) {
53 doc.metadata[key] += '\n' + continued_value[1];
54 lines.shift();
55 }
56 else break;
57 }
58 }
59 doc.markdown = lines.join('\n');
60 return doc;
61};
62
63
64/**
65 * Parses Jekyll-style YAML front matter (similar to metadata parser above)
66 */
67
68exports.yamlFrontMatter = function (doc) {
69 var m = /^---\n([\s\S]*)---\n*/.exec(doc.markdown);
70 if (m) {
71 doc.metadata = {};
72 doc.metadata = _.extend(doc.metadata, yaml.load(m[1]));
73 doc.markdown = doc.markdown.substr(m[0].length);
74 }
75 return doc;
76};