-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathtoJSON.js
94 lines (80 loc) · 2.96 KB
/
toJSON.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
/* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
/* vim: set ts=2 et sw=2 tw=80: */
/*
* Copyright (c) 2013 The MathJax Consortium
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
// Process the config options and command arguments
var config = require("./config.js");
if (process.argv.length != 3) {
console.log("usage: nodejs toJSON.js MATHJAXPATH");
process.exit(1);
}
var gMathJaxPath = process.argv[2];
// Fake MathJax variable to simulate features used by the localization files.
MathJax = {};
require("./MathJax.js");
MathJax.Localization.loadAll(config.languages, config.domains, gMathJaxPath)
// Generate the JSON data
var fs = require("fs");
// Create the JSON directory if it does not exist
var dir = "./JSON/";
if (!fs.existsSync(dir)) fs.mkdirSync(dir);
for (var language in MathJax.Localization.strings) {
// Create the language directory if it does not exist
var dir = "./JSON/" + language + "/";
if (!fs.existsSync(dir)) fs.mkdirSync(dir);
// Create files for each domain
var domains = MathJax.Localization.strings[language].domains;
for (var d in domains) {
var file = dir + (d === "_" ? language : d) + ".json";
// Convert the string to WikiMedia format
var strings = domains[d].strings;
for (var id in strings) {
strings[id] = MathJax.Localization.processString(strings[id]);
// fredw: TODO escape jquery.i18n syntax e.g. $ signs?
};
// If the JSON file already exists, merge the MathJax strings into it.
if (fs.existsSync(file)) {
var mathjaxStrings = strings;
strings = require(file);
MathJax.Hub.Insert(strings, mathjaxStrings);
}
// Write the JSON object for that domain
var fd = fs.openSync(file, "w");
console.log("Creating " + file)
fs.writeSync(fd, "{\n");
var first = true;
for (var id in strings) {
if (!first) { fs.writeSync(fd, ',\n'); }
var s = strings[id];
if (id === "@metadata") {
var jsonstring = '"@metadata": ' +
JSON.stringify(s, null, " ").replace(/[\u007f-\uffff]/g,
function(c) {
return '\\u'+('0000'+c.charCodeAt(0).toString(16)).slice(-4);
}
);
fs.writeSync(fd, jsonstring.replace(/^/gm, " "));
} else {
fs.writeSync(fd, ' "' + id + '": ');
fs.writeSync(fd, '"' + MathJax.Hub.EscapeNonAscii(s, false) + '"');
}
first = false;
}
fs.writeSync(fd, "\n}");
fs.closeSync(fd);
}
}