1
0
mirror of https://github.com/ret-Phoenix/SmartConfigurator.git synced 2026-06-18 01:06:18 +02:00
Files
SmartConfigurator/scripts/generator.js
T

292 lines
7.5 KiB
JavaScript

fso = new ActiveXObject("Scripting.FileSystemObject");
var WshShell = WScript.CreateObject("WScript.Shell");
function echo(prmTxt)
{
with (new ActiveXObject("WScript.Shell")) res = Popup("<"+prmTxt+">", 0, "title", 0);
}
function JSTrim(vValue)
{
return vValue.replace(/(^\s*)|(\s*$)/g, "");
}
function setDefaultCfg() {
Folder = fso.GetFolder('configs/')
Files = new Enumerator(Folder.Files);
cfgName = '';
for (var i=0; i < Folder.Files.Count; i++)
{
if (Files.item()!=undefined)
{
cfgName += Files.item().Name + "\r\n";
}
Files.moveNext()
}
vRes = SelectValue(cfgName);
wtiteToResultFile('configs/default.txt', vRes);
wtiteToResultFile('tmp/module.txt', '');
WScript.Quit(1);
return;
}
function readFile(fileName) {
fs = new ActiveXObject("Scripting.FileSystemObject");
t_file = fs.OpenTextFile(fileName, 1);
str = t_file.ReadAll();
t_file.Close();
fs= 0;
return str;
}
function SelectValue(values, header) {
wtiteToResultFile("tmp/app.txt",values);
WshShell.Run("system\\SelectValueSharp.exe tmp/app.txt", 1, true);
strFromFile = readFile("tmp/app.txt");
return strFromFile;
}
function ResultList(prmStr, prmCaption)
{
wtiteToResultFile("tmp/app.txt",prmStr);
WshShell.Run("system\\SelectValueSharp.exe tmp/app.txt", 1, true);
str = readFile("tmp/app.txt");
return str;
}
function GetFromClipboard() {
f=fso.OpenTextFile('tmp/module.txt',1);
var textFromFile = f.ReadAll();
if (!textFromFile) {
return;
}
return textFromFile;
}
function choiceMDObject() {
// Âûáîð òåêóùåãî ôàéëà ìåòàäàííûõ
File = fso.GetFile("configs/default.txt");
TextStream = File.OpenAsTextStream(1);
cfg_file_name = TextStream.ReadLine();
File = fso.GetFile("configs/"+cfg_file_name);
TextStream = File.OpenAsTextStream(1);
// Ïîëó÷àåì ñïèñîê äîñòóïíûõ îáúåêòîâ ìåòàäàííûõ
str = TextStream.ReadLine();
File = 0;
str1 = str.replace(/\,/g,"\r\n");
// Âûáèðàåì Îáúåêò
md_obj = ResultList(str1,"");
// Íàõîäèì íîìåð ñòðîêè â ôàéëå äëÿ äàííîãî îáúåêòà ìåòàäàííûõ
var lList = str1.split('\r').join('').split('\n');
pos = -1;
for (var i = 0; i < lList.length; i++) {
if (lList[i]==md_obj) {
pos = i;
}
}
// Ïîëó÷àåì ñòðóêòóðó îáúåêòà ìåòàäàííûõ
str = TextStream.ReadAll();
var lList = str.split('\r').join('').split('\n');
str = lList[pos];
return str;
}
function wtiteToResultFile(file_name, file_data) {
f = fso.CreateTextFile(file_name, true);
f.Write(file_data);
f.Close();
}
function ModuleFromSimpleToManagment()
{
var str = choiceMDObject();
if (str == "") {
wtiteToResultFile("tmp/module.txt","");
WScript.Quit(0);
return;
}
// Ïîëó÷àåì ðåêâèçèòû øàïêè
item_ar = str.split('|');
str_items = item_ar[1];
// Ïîëó÷àåì íàçâàíèÿ òàáëè÷íûõ ÷àñòåé
for (var i = 2; i < item_ar.length; i++) {
item_ar_sub = item_ar[i].split(',');
str_items = str_items + item_ar_sub[0] + ",";
}
// Ïðåîáðàçóåì èäåíòèôèêàòîðû äëÿ çàìåíû
str_items = str_items.replace(/\,/g,'|');
str_items = str_items.substring(0,str_items.length-1);
// Âûáèðàåì íàçâàíèå îñíîâíîãî ðåêâèçèòà ôîðìû
result = ResultList("Îáúåêò\r\nÎò÷åò\r\n","Ðåêâèçèò");
var re = new RegExp("[\\W]("+str_items+").\\W", "ig");
str_module = GetFromClipboard();
// Ïðîèçâîäèì çàìåíó êîäà
// 1. Îáðàìëÿåì ïðîáåëàìè óïðàâëÿþùèå ñèìâîëû
str_module = str_module.replace(/[\*\-\+\=\/\(]/g,' $& ');
// 2. Äîáàâëÿåì íàçâàíèå îñíîâíîãî ðåêâèçèòà â ìîäóëå
str_module = str_module.replace(re," "+result+".$&").replace(/\.\s/g, '.');
// Ïèøåì ðåçóëüòàò â ôàéë
wtiteToResultFile("tmp/module.txt",str_module);
}
function printArrayToCodeGen(text, arr, start_pos, prefix) {
for (var i = start_pos; i < arr.length; i++) {
if (arr[i] != '') {
text += prefix + '.' +arr[i] + ' = ;\r\n';
}
}
return text;
}
function generateCodeMDObject(md_obj_part) {
var strMetadata = choiceMDObject();
if (strMetadata == "") {
wtiteToResultFile("tmp/module.txt","");
WScript.Quit(0);
return;
}
listVars = ('äîê,ñïð,çàïèñü').replace(/\,/g,'\r\n');
var varName = SelectValue(listVars);
// Ïîëó÷àåì ðåêâèçèòû øàïêè
item_ar = strMetadata.split('|');
md_type = item_ar[0];
md_type_ar = md_type.split('.');
text = '';
if ((md_type_ar[0] == 'Äîêóìåíò') || (md_type_ar[0] == 'Ñïðàâî÷íèê')) {
if (md_type_ar[0] == 'Äîêóìåíò') {
text += varName + ' = Äîêóìåíòû.' + md_type_ar[1] + '.ÑîçäàòüÄîêóìåíò();\n'
}
if (md_type_ar[0] == 'Ñïðàâî÷íèê') {
text += varName + ' = Ñïðàâî÷íèêè.' + md_type_ar[1] + '.ÑîçäàòüÝëåìåíò();\n'
}
// Øàïêà
text = printArrayToCodeGen(text, item_ar[1].split(','),0,varName);
if (md_obj_part == 'Øàïêà') {
wtiteToResultFile('tmp/module.txt', text);
WScript.Quit(1);
return;
}
if (md_obj_part == 'Òàáëè÷íàÿ ÷àñòü') {
text = '';
details_list = '';
// Ïîëó÷àåì íàçâàíèÿ òàáëè÷íûõ ÷àñòåé
for (var i = 2; i < item_ar.length; i++) {
item_ar_sub = item_ar[i].split(',');
details_list += item_ar_sub[0] + '\r\n';
}
detName = SelectValue(details_list,'');
if (detName == "") {
wtiteToResultFile('tmp/module.txt', '');
WScript.Quit(0);
return;
}
for (var i = 2; i < item_ar.length; i++) {
item_ar_sub = item_ar[i].split(',');
if (item_ar_sub[0] == detName) {
text += 'Ñòðîêà = ' + varName + '.' + item_ar_sub[0] + '.Äîáàâèòü();\r\n';
text = printArrayToCodeGen(text, item_ar[i].split(','), 1, 'Ñòðîêà');
text += '\r\n\r\n';
}
}
wtiteToResultFile('tmp/module.txt', text);
WScript.Quit(1);
return;
}
text += '\r\n\r\n';
// Ïîëó÷àåì íàçâàíèÿ òàáëè÷íûõ ÷àñòåé
for (var i = 2; i < item_ar.length; i++) {
item_ar_sub = item_ar[i].split(',');
text += 'Ñòðîêà = ' + varName + '.' + item_ar_sub[0] + '.Äîáàâèòü();\r\n';
text = printArrayToCodeGen(text, item_ar[i].split(','), 1, 'Ñòðîêà');
text += '\r\n\r\n';
}
}
else {
text += varName + ' = Äâèæåíèÿ.' + md_type_ar[1] + '.Äîáàâèòü();\r\n'
// Ñòàíäàðòíûå ðåêâèçèòû
text += '\r\n';
text += '// Ñòàíäàðòíûå ðåêâèçèòû';
text += '\r\n';
text = printArrayToCodeGen(text, item_ar[1].split(','),0,varName);
// Ïîëó÷àåì èçìåðåíèÿ
text += '\r\n// Èçìåðåíèÿ\r\n';
text = printArrayToCodeGen(text, item_ar[2].split(','), 0, varName);
// Ïîëó÷àåì ðåñóðñû
text += '\r\n// Ðåñóðñû\r\n';
text = printArrayToCodeGen(text, item_ar[3].split(','), 0, varName);
// Ïîëó÷àåì ðåêâèçèòû
text += '\r\n// Ðåêâèçèòû\r\n';
text = printArrayToCodeGen(text, item_ar[4].split(','), 0, varName);
}
wtiteToResultFile('tmp/module.txt', text);
}
function codeGenerator() {
lstrRes = ("Îáúåêò ìåòàäàííûõ,Òàáëè÷íàÿ ÷àñòü,Øàïêà,Êîíôèãóðàöèÿ ïî óìîë÷àíèþ").replace(/\,/g,'\r\n');;
vRes = SelectValue(lstrRes);
if (vRes == 'Êîíôèãóðàöèÿ ïî óìîë÷àíèþ') {
setDefaultCfg();
}
else {
generateCodeMDObject(vRes);
}
}
function Run() {
arg=WScript.Arguments;
fso = new ActiveXObject("Scripting.FileSystemObject");
if (arg(0) != 'null') {
f=fso.OpenTextFile(arg(0),1);
var lTxt=f.ReadAll();
var lList =lTxt.split('\r').join('').split('\n');
f.close();
}
switch (arg(1)) {
case "simple-managment":
ModuleFromSimpleToManagment();
break;
case "generator":
codeGenerator();
break;
default:
return; // íå äîëæíî áûòü â ïðèíöèïå
}
}
Run();