1 | var gsub = require('./utils').gsub,
|
2 | yaml = require('js-yaml'),
|
3 | _ = require('underscore');
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | exports.underscores = function (doc) {
|
9 |
|
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 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 | exports.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 |
|
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 |
|
66 |
|
67 |
|
68 | exports.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 | };
|