forked from gitter-badger/kojura
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest.os
86 lines (64 loc) · 3.34 KB
/
test.os
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
Перем КодУзла;
Функция ВыгрузитьУзел(Узел, Знач Уровень)
Перем Элементы;
Если НЕ ТипЗнч(Узел) = Тип("Структура") Тогда
Если ТипЗнч(Узел) = Тип("Строка") Тогда
Кавычки = """";
Иначе
Кавычки = "";
КонецЕсли;
Возврат Кавычки + Узел + Кавычки + ";";
КонецЕсли;
Элементы = Уровень + "Новый Структура(""КодУзла, ";
Запятая = "";
Кавычка = "";
Значения = "";
Уровень = Уровень + " ";
Для каждого Элемент Из Узел Цикл
Если ТипЗнч(Элемент.Значение) = Тип("Строка") Тогда
Кавычки = """";
Иначе
Кавычки = "";
КонецЕсли;
Элементы = Элементы + Кавычка + Запятая + Элемент.Ключ;
Если ТипЗнч(Элемент.Значение) = Тип("Структура") Тогда
Значения = Значения + Запятая + Символы.ПС + ВыгрузитьУзел(Элемент.Значение, Уровень) + Символы.ПС + Уровень + ")";
Иначе
Значение = Элемент.Значение;
Если Значение = Неопределено Тогда
Значение = "Неопределено";
КонецЕсли;
Значения = Значения + Запятая + Символы.ПС + Уровень + Кавычки + Значение + Кавычки;
КонецЕсли;
Запятая = ", ";
Кавычка = "";
КонецЦикла;
Если НЕ Значения = "" Тогда
Элементы = Элементы + """," + КодУзла + ", " + Значения;
КодУзла = КодУзла + 1;
КонецЕсли;
Возврат Элементы;
КонецФункции // ВыгрузитьУзел()
Функция СтруктуруВСтрокуВнутр(Объект)
ДанныеЗаг = "";
ДанныеТело = "";
Для каждого элОбъект Из Объект Цикл
ДанныеЗаг = ДанныеЗаг + "
|Перем " + элОбъект.Ключ + " Экспорт;";
ДанныеТело = ДанныеТело + "
|" + элОбъект.Ключ + " = " + ВыгрузитьУзел(элОбъект.Значение, "") + "
|);";
КонецЦикла;
Возврат ДанныеЗаг + ДанныеТело;
КонецФункции // СтруктуруВСтрокуВнутр()
ПодключитьСценарий("src/Кожура/Ext/ObjectModule.bsl", "Кожура");
КодУзла = 0;
Кожура = Новый Кожура;
ЧтениеТекста = Новый ЧтениеТекста("test.jur", "UTF-8");
Исходник = ЧтениеТекста.Прочитать();
Парсер = Кожура.Парсер(Исходник);
Список = Кожура.Разобрать(Парсер);
FormResult = Новый ТекстовыйДокумент;
FormResult.SetText(СтруктуруВСтрокуВнутр(Новый Структура("Данные", Список)));
FormResult.Записать("datalisp.os");
Сообщить(Кожура.Пуск(Исходник));