forked from Pr-Mex/vanessa-automation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAddMainPageMD.os
176 lines (127 loc) · 8.45 KB
/
AddMainPageMD.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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#Использовать v8runner
#Использовать logos
Перем Лог;
Процедура ВставитьВMDСсылкуВидео(ИмяФайла, СсылкаВидео)
Текст = Новый ЧтениеТекста;
Текст.Открыть(ИмяФайла, "UTF-8");
ТекстФайла = Текст.Прочитать();
Текст.Закрыть();
МассивСтрок = СтрРазделить(ТекстФайла, Символы.ПС);
МассивСтрок.Вставить(0, СтрШаблон("##### [Ссылка на видео](%1)", СсылкаВидео));
ТекстФайла = СтрСоединить(МассивСтрок, Символы.ПС);
ЗТ = Новый ЗаписьТекста(ИмяФайла,"UTF-8",, Ложь);
ЗТ.Записать(ТекстФайла);
ЗТ.Закрыть();
КонецПроцедуры
Функция ДанныеВидео(ИмяФайла)
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ИмяФайла, "UTF-8");
Данные = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Возврат Данные;
КонецФункции
Процедура ВыполнитьОбработку(ПутьККаталогу, ФайлОглавленияVA, ПутьКДаннымВидео, Знач ПрефиксГиперссылок)
Если Прав(ПрефиксГиперссылок, 1) <> "/" Тогда
ПрефиксГиперссылок = ПрефиксГиперссылок + "/";
КонецЕсли;
НомерРелиза = "";
ТекСтр = Лев(ПрефиксГиперссылок, СтрДлина(ПрефиксГиперссылок) - 1);
МассивСтрок = СтрРазделить(ТекСтр, "/");
Если МассивСтрок.Количество() > 0 Тогда
НомерРелиза = МассивСтрок[МассивСтрок.Количество()-1];
КонецЕсли;
ДанныеВидео = ДанныеВидео(ПутьКДаннымВидео);
Текст = Новый ЧтениеТекста;
Текст.Открыть(ФайлОглавленияVA, "UTF-8");
ТекстФайлаОглавления = Текст.Прочитать();
Текст.Закрыть();
ТекстФайлаОглавления = УбратьЛишиниеСтрокиИзНачальнойСтраницы(ТекстФайлаОглавления);
Ссылки = Новый Соответствие;
ПолныйПутьКФайлуФичи = Новый Соответствие;
Файлы = НайтиФайлы(ПутьККаталогу, "*.MD", Истина);
Для Каждого Файл Из Файлы Цикл
ИмяБезРасширения = Файл.ИмяБезРасширения;
Если ИмяБезРасширения = "index" Тогда
Продолжить;
КонецЕсли;
Нашли = Ложь;
Для Каждого ТекВидео Из ДанныеВидео Цикл
Если НРег(ТекВидео.ИмяФайлаБезРасширения) = НРег(ИмяБезРасширения) Тогда
Нашли = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если НЕ Нашли Тогда
ВызватьИсключение "Не найдены данные видео по файлу: " + Файл.ПолноеИмя;
КонецЕсли;
Ссылки.Вставить(НРег(ИмяБезРасширения), ТекВидео.СсылкаИнтернет);
ПолныйПутьКФайлуФичи.Вставить(НРег(ИмяБезРасширения), ТекВидео.ПолноеИмя);
КонецЦикла;
МассивСтрок = СтрРазделить(ТекстФайлаОглавления, Символы.ПС);
Для Сч = 0 По МассивСтрок.Количество()-1 Цикл
ТекСтр = МассивСтрок[Сч];
СтрокаПоиска = "[Запустить урок]";
Поз = Найти(ТекСтр, СтрокаПоиска);
Если Поз = 0 Тогда
Продолжить;
КонецЕсли;
ТекСтр = СокрЛП(Сред(ТекСтр, Поз + СтрДлина(СтрокаПоиска)));
ТекСтр = СтрЗаменить(ТекСтр, "(", "");
ТекСтр = СтрЗаменить(ТекСтр, ")", "");
Ссылка = Ссылки[НРег(ТекСтр)];
Если Ссылка = Неопределено Тогда
ВызватьИсключение "Не найдена ссылка на видео для: " + ТекСтр;
КонецЕсли;
ПутьКФайлуФичи = ПолныйПутьКФайлуФичи[НРег(ТекСтр)];
ПутьКФайлуФичи = СтрЗаменить(ПутьКФайлуФичи, "/", "\");
СтрокаПоискаФичи = "\features\";
Поз = Найти(ПутьКФайлуФичи, СтрокаПоискаФичи);
Если Поз = 0 Тогда
ВызватьИсключение СтрШаблон("В строке <%1> не найдена строка <%2>.", ПутьКФайлуФичи, СтрокаПоискаФичи);
КонецЕсли;
ОкончаниеПути = Сред(ПутьКФайлуФичи, Поз + СтрДлина(СтрокаПоискаФичи));
ОкончаниеПути = СтрЗаменить(ОкончаниеПути, "\", "/");
ОкончаниеПути = Лев(ОкончаниеПути, СтрДлина(ОкончаниеПути) - СтрДлина(".feature"));
ОкончаниеПути = СтрЗаменить(ОкончаниеПути, " ", "");
ТекСтр = МассивСтрок[Сч];
СтрокаПоиска = "![]";
Поз = Найти(ТекСтр, СтрокаПоиска);
Если Поз = 0 Тогда
ВызватьИсключение "Не найдена строка " + СтрокаПоиска + " в " + ТекСтр;
КонецЕсли;
ТекСтр = Лев(ТекСтр, Поз - 1);
ТекСтр = ТекСтр
+ СтрШаблон(" [(Видео)](%1) [(PDF)](%2) [(MD)](%3)",
Ссылка,
ПрефиксГиперссылок + "PDF/" + ОкончаниеПути + ".pdf",
"https://github.com/Pr-Mex/vanessa-automation/tree/develop/docs/MainHelp/" + НомерРелиза + "/" + ОкончаниеПути + ".MD"
);
МассивСтрок[Сч] = ТекСтр;
КонецЦикла;
ТекстФайлаОглавления = СтрСоединить(МассивСтрок, Символы.ПС);
ИмяФайлаНачальнойСтраницы = ОбъединитьПути(ПутьККаталогу, "index.MD");
ЗТ = Новый ЗаписьТекста(ИмяФайлаНачальнойСтраницы,"UTF-8",, Ложь);
ЗТ.Записать(ТекстФайлаОглавления);
ЗТ.Закрыть();
Сообщить("Записан файл: " + ИмяФайлаНачальнойСтраницы);
КонецПроцедуры
Функция УбратьЛишиниеСтрокиИзНачальнойСтраницы(Знач Стр)
Результат = Новый Массив;
МассивСтрок = СтрРазделить(Стр, Символы.ПС);
Для Каждого ТекСтр Из МассивСтрок Цикл
Если Лев(ТекСтр, 1) = ">" Тогда
Продолжить;
КонецЕсли;
Результат.Добавить(ТекСтр);
КонецЦикла;
Возврат СтрСоединить(Результат, Символы.ПС);
КонецФункции
Лог = Логирование.ПолучитьЛог("vb.compile.log");
Лог.УстановитьУровень(УровниЛога.Отладка);
Если АргументыКоманднойСтроки.Количество() = 0 Тогда
Лог.Ошибка("Не переданы параметры!");
ИначеЕсли АргументыКоманднойСтроки.Количество() <> 4 Тогда
Лог.Ошибка("Скрипт принимает четыре параметра!");
Иначе
ВыполнитьОбработку(АргументыКоманднойСтроки[0], АргументыКоманднойСтроки[1], АргументыКоманднойСтроки[2], АргументыКоманднойСтроки[3]);
КонецЕсли;