-
Notifications
You must be signed in to change notification settings - Fork 92
/
Copy pathbuild.js
87 lines (75 loc) · 2.56 KB
/
build.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
const fs = require("fs");
const util = require("util");
const xml2js = require("xml2js");
const handlebars = require("handlebars");
const glob = require("glob");
fs.createReadStream("LICENSE").pipe(
fs.createWriteStream("BootstrapSnippets/LICENSE.txt")
);
var parser = new xml2js.Parser({
async: false,
explicitRoot: false,
explicitArray: false,
ignoreAttrs: false
});
glob(
__dirname + "/BootstrapSnippets/Snippets/HTML/Bootstrap/*.snippet",
function(err, files) {
var snippets = [];
files.forEach(function(file) {
fs.readFile(file, { encoding: "utf8" }, function(err, data) {
parser.parseString(data, function(err, result) {
var snippet = {
file: file,
title: result.CodeSnippet.Header.Title,
shortcut: result.CodeSnippet.Header.Shortcut,
description: result.CodeSnippet.Header.Description,
language: result.CodeSnippet.Snippet.Code.$.Language,
declarations: []
};
if (
result.CodeSnippet.Snippet.Declarations &&
result.CodeSnippet.Snippet.Declarations.Literal
) {
if (util.isArray(result.CodeSnippet.Snippet.Declarations.Literal)) {
result.CodeSnippet.Snippet.Declarations.Literal.forEach(function(
declaration
) {
snippet.declarations[snippet.declarations.length] = {
id: declaration.ID,
tooltip: declaration.ToolTip,
default: declaration.Default
};
});
} else {
snippet.declarations[snippet.declarations.length] = {
id: result.CodeSnippet.Snippet.Declarations.Literal.ID,
tooltip:
result.CodeSnippet.Snippet.Declarations.Literal.ToolTip,
default: result.CodeSnippet.Snippet.Declarations.Literal.Default
};
}
}
snippets[snippets.length] = snippet;
if (snippets.length == files.length) {
processSnippets(snippets);
}
});
});
});
}
);
function processSnippets(snippets) {
snippets.sort(function(a, b) {
var keyA = a.shortcut,
keyB = b.shortcut;
if (keyA < keyB) return -1;
if (keyA > keyB) return 1;
return 0;
});
fs.readFile("snippet-listing-markdown.handlebars", function(err, data) {
var template = handlebars.compile(data.toString());
var markdown = template({ snippets: snippets });
fs.writeFileSync("snippet-listing.md", markdown);
});
}