193 lines
5.1 KiB
JavaScript
193 lines
5.1 KiB
JavaScript
|
||
|
||
// // // //
|
||
|
||
|
||
Перевести = мир =>
|
||
{
|
||
var функция = null;
|
||
var класс = null;
|
||
var одиночка = false;
|
||
var свойства = [];
|
||
|
||
вывод.value = "";
|
||
var строки = ввод.value.split(/\n/);
|
||
|
||
for (var номер in строки)
|
||
{
|
||
var строка = строки[номер].trim();
|
||
//console.debug("строка", номер, строка);
|
||
|
||
if (!функция && строка.startsWith(мир.перевод.функция))
|
||
{
|
||
var конец = строка.indexOf("(");
|
||
функция = строка.substring(мир.перевод.функция.length, конец);
|
||
//console.debug("функция", функция);
|
||
}
|
||
else if (!класс && строка.startsWith(мир.перевод.класс))
|
||
{
|
||
класс = строка.substring(мир.перевод.класс.length);
|
||
//console.debug("класс", класс);
|
||
}
|
||
else if (функция && строка.startsWith(мир.перевод.свойство))
|
||
{
|
||
var конец = строка.indexOf(")");
|
||
var название = строка.substring(мир.перевод.свойство.length, конец);
|
||
|
||
var начало = строка.indexOf(мир.перевод.значение);
|
||
var конецСвойства = строка.indexOf("(", конец + 1);
|
||
if (конецСвойства == -1)
|
||
{
|
||
конецСвойства = строка.indexOf(")", конец + 1);
|
||
}
|
||
var значение = строка.substring(начало + мир.перевод.значение.length, конецСвойства);
|
||
свойства.push({
|
||
"название": название,
|
||
"значение": значение,
|
||
});
|
||
//console.debug("свойство", название, "значение", значение);
|
||
}
|
||
else if (функция && строка.includes(мир.перевод.одиночка))
|
||
{
|
||
одиночка = true;
|
||
}
|
||
else if (функция && строка == "}")
|
||
{
|
||
var экземпляр = "instance";
|
||
if (одиночка)
|
||
{
|
||
экземпляр = "_" + класс;
|
||
}
|
||
var содержимое = "";
|
||
for (var номер in свойства)
|
||
{
|
||
var свойство = свойства[номер];
|
||
содержимое += ` ${экземпляр}.${свойство.название} = ${свойство.значение}()\n`;
|
||
}
|
||
if (!одиночка)
|
||
{
|
||
вывод.value += `
|
||
|
||
func ${функция}() -> ${класс} {
|
||
let ${экземпляр} = ${класс}()
|
||
${содержимое}
|
||
return ${экземпляр}
|
||
}
|
||
|
||
`;
|
||
}
|
||
else
|
||
{
|
||
вывод.value += `
|
||
|
||
private var ${экземпляр}: ${класс}!
|
||
|
||
func ${функция}() -> ${класс} {
|
||
if let ${экземпляр} = ${экземпляр} {
|
||
return ${экземпляр}
|
||
}
|
||
|
||
${экземпляр} = ${класс}()
|
||
${содержимое}
|
||
return ${экземпляр}
|
||
}
|
||
|
||
`;
|
||
}
|
||
функция = null;
|
||
класс = null;
|
||
одиночка = false;
|
||
свойства = [];
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ЗадатьНастройкиПеревода = мир =>
|
||
{
|
||
мир.перевод = {
|
||
"функция": "dynamic func ",
|
||
"класс": "typealias Class = ",
|
||
"свойство": "definition?.injectProperty(#selector(getter: Class.",
|
||
"значение": "with: ",
|
||
"одиночка": "scope",
|
||
};
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
Продублировать = мир =>
|
||
{
|
||
вывод.value = ввод.value;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ОтслеживатьОбновлениеОкнаВвода = мир =>
|
||
{
|
||
ввод.addEventListener(
|
||
"input",
|
||
function() {
|
||
мир.уведомить("обновили окно ввода");
|
||
},
|
||
false
|
||
);
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СоздатьОкнаВводаИВывода = мир =>
|
||
{
|
||
document.body.innerHTML = `
|
||
<textarea id="ввод"></textarea>
|
||
<textarea id="вывод"></textarea>
|
||
`;
|
||
|
||
мир.ввод = document.getElementById("ввод");
|
||
мир.вывод = document.getElementById("вывод");
|
||
|
||
var вид = document.createElement("style");
|
||
document.head.appendChild(вид);
|
||
вид.innerHTML = `
|
||
#ввод
|
||
{
|
||
position: fixed;
|
||
left: 0;
|
||
width: 50%;
|
||
height: 100%;
|
||
top: 0;
|
||
bottom: 0;
|
||
}
|
||
#вывод
|
||
{
|
||
position: fixed;
|
||
right: 0;
|
||
width: 50%;
|
||
height: 100%;
|
||
top: 0;
|
||
bottom: 0;
|
||
}
|
||
`;
|
||
|
||
};
|
||
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ВывестиПриветствиеОтRemoveTyphoon = мир =>
|
||
{
|
||
console.debug("Привет от Remove Typhoon");
|
||
};
|
||
|