shikiml
Version:
Markup mathematical formulae by ASCII-art
138 lines (132 loc) • 2.77 kB
JavaScript
/**
* shikiml
*
* Copyright (c) 2017 Yuichiro MORIGUCHI
*
* This software is released under the MIT License.
* http://opensource.org/licenses/mit-license.php
**/
var fs = require('fs'),
readline = require('readline'),
common = require('./shiki-common.js'),
stream,
reader,
questions,
setting,
locale;
function endAction(setting) {
var replaced,
tmp;
replaced = common.replaceTemplateFile("shiki-template.html", setting);
fs.writeFileSync(setting.file, replaced);
tmp = fs.readFileSync(__dirname + "/shiki.js", 'utf8');
fs.writeFileSync("shiki." + common.version + ".js", tmp);
}
function giveQuestion(state) {
var question = questions[state],
text;
text = question.question;
if(question.def) {
text += " [";
text += question.def;
text += "]";
}
text += ":";
stream.question(text, function(answer) {
var ans = answer ? answer : question.def,
i,
choice;
for(i = 0; i < question.choice.length; i++) {
choice = question.choice[i];
if(choice.pattern === true || choice.pattern.test(ans)) {
if(choice.action) {
choice.action(ans, setting);
}
if(choice.to) {
giveQuestion(choice.to);
} else {
endAction(setting);
stream.close();
}
return;
}
}
});
}
function scaffold(file, opt) {
setting = opt ? opt : {};
setting.setting = {};
setting.version = common.version;
setting.file = file;
locale = "";
stream = readline.createInterface({
input: process.stdin,
output: process.stdout
});
giveQuestion("init");
}
questions = {
"init": {
question: "Do you use MathJax which cdnjs.cloudflare.com provides?",
def: "y",
choice: [
{
pattern: /^y(es?)?$/i,
to: "version"
},
{
pattern: true,
to: "url"
}
]
},
"version": {
question: "Please enter version of MathJax",
def: "2.7.1",
choice: [
{
pattern: true,
action: function(input, setting) {
setting.setting.url = "https://cdnjs.cloudflare.com/ajax/libs/mathjax/" +
input +
"/MathJax.js?config=TeX-MML-AM_CHTML";
},
to: "multibyte"
}
]
},
"url": {
question: "Please enter the URL of MathJax",
def: "",
choice: [
{
pattern: true,
action: function(input, setting) {
setting.setting.url = input;
},
to: "multibyte"
}
]
},
"multibyte": {
question: "Do you use some Unicode characters as 2 characters width?",
def: "y",
choice: [
{
pattern: /^y(es?)?$/i,
action: function(input, setting) {
setting.setting.greekBytes = setting.setting.mathBytes = 2;
},
to: null
},
{
pattern: true,
action: function(input, setting) {
setting.setting.greekBytes = setting.setting.mathBytes = 1;
},
to: null
}
]
}
};
module.exports.scaffold = scaffold;