/
gulpfile.js
128 lines (97 loc) · 3.53 KB
/
gulpfile.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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
const
gulp = require('gulp'),
less = require('less'),
fs = require('fs'),
path = require('path'),
lessPluginCleanCSS = require('less-plugin-clean-css'),
cleanCSSPlugin = new lessPluginCleanCSS({advanced: true}),
webfontSrc = require("@vusion/webfonts-generator"),
exec = require("child_process").execSync,
Parser = require("dom-parser");
lessSrcFile = "src/less/style.less",
lessPagesFile = "src/less/pages.less";
let codepoints = require("./codepoints.json");
var webfont = async function(options) {
return new Promise((resolve, reject) => {
webfontSrc(options, (err, result) => {
resolve(result);
});
});
};
gulp.task('default', async () => {
exec("mkdir -p public/latest");
exec("cp -r src/svg public/img");
let files = fs.readdirSync("src/svg");
let lastCode = null;
for(let file in files) {
files[file] = "src/svg/"+files[file];
}
for(let point in codepoints) {
if(point.endsWith("-1")) {
continue;
}
codepoints[point] = codepoints[point].replace("\\", "0x");
lastCode = codepoints[point];
}
lastCode++;
let result = await webfont({
files,
dest: "public/latest",
fontName: "ci",
types: ["svg", "ttf", "woff", "woff2", "eot"],
startCodepoint: lastCode,
codepoints
});
let parser = new Parser(),
doc = parser.parseFromString(result.svg),
codes = {};
for(let glyph of doc.getElementsByTagName("glyph")) {
let name = glyph.getAttribute("glyph-name");
if(name.endsWith("-1")) {
continue;
}
codes[name] = glyph.getAttribute("unicode").replace("&#x", "\\").replace(";", "");
}
const codepointsJson = JSON.stringify(codes);
fs.writeFileSync("./public/latest/ci.json", codepointsJson);
fs.writeFileSync("codepoints.json", codepointsJson);
let lessSrcString = fs.readFileSync(lessSrcFile).toString();
let extraLess = "";
for(let code in codes) {
extraLess += `&.ci-${code}:before { content: "${codes[code]}"; }`;
}
lessSrcString = lessSrcString.replace("{icons}", extraLess);
less.render(lessSrcString, {
filename: path.resolve(lessSrcFile),
plugins: [cleanCSSPlugin]
}).then(output => fs.writeFileSync("public/latest/ci.css", output.css));
});
function html(done) {
exec("mkdir -p public/img");
exec("cp -r src/img/* public/img");
for(let filename of fs.readdirSync("src/html/pages/")) {
let file = fs.readFileSync("src/html/pages/"+filename).toString();
file = file.replace(/\{\{include:(.*?)\}\}/g, function(matches, n1) {
return fs.readFileSync("src/html/includes/"+n1+".html");
});
file = file.replace(/\{\{var:(.*?)\}\}/g, function(matches, n1) {
return {
title: filename !== "index.html" ? filename.replace(".html", "") + " - Cythral Icons" : "Cythral Icons",
year: new Date().getFullYear()
}[n1] || "";
});
fs.writeFileSync("public/"+filename, file);
}
done();
}
function css(done) {
exec("mkdir -p public/css");
let lessPagesString = fs.readFileSync(lessPagesFile).toString();
less.render(lessPagesString, {
filename: path.resolve(lessPagesFile),
plugins: [cleanCSSPlugin]
})
.then(output => fs.writeFileSync("public/css/pages.css", output.css))
.then(() => done());
}
gulp.task("pages", gulp.parallel(html, css));