Skip to content

Commit 54868a0

Browse files
committed
рефакторинг
1 parent 17c81cf commit 54868a0

9 files changed

Lines changed: 349 additions & 415 deletions

src/internal/block/Классы/MarkdownПарсерЗаголовковATX.os

Lines changed: 3 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989

9090
Функция ОчиститьСодержимое(Знач Сырой)
9191
// Срезать хвостовые пробелы/табы.
92-
Сырой = ПравыйStrip(Сырой);
92+
Сырой = MarkdownБлочныеУтилиты.ПравыйStrip(Сырой);
9393

9494
// Найти трейлинговую последовательность '#'.
9595
Длина = СтрДлина(Сырой);
@@ -105,42 +105,15 @@
105105
Или Сред(Сырой, Индекс, 1) = " "
106106
Или Сред(Сырой, Индекс, 1) = Символы.Таб Тогда
107107
Сырой = Лев(Сырой, Индекс);
108-
Сырой = ПравыйStrip(Сырой);
108+
Сырой = MarkdownБлочныеУтилиты.ПравыйStrip(Сырой);
109109
КонецЕсли;
110110
КонецЕсли;
111111

112112
// Срезать ведущие пробелы/табы (один или несколько разделителей после открывающих '#').
113-
Сырой = ЛевыйStrip(Сырой);
113+
Сырой = MarkdownБлочныеУтилиты.ЛевыйStrip(Сырой);
114114
Возврат Сырой;
115115
КонецФункции
116116

117-
Функция ЛевыйStrip(Знач Стр)
118-
Поз = 1;
119-
Длина = СтрДлина(Стр);
120-
Пока Поз <= Длина Цикл
121-
С = Сред(Стр, Поз, 1);
122-
Если С = " " Или С = Символы.Таб Тогда
123-
Поз = Поз + 1;
124-
Иначе
125-
Прервать;
126-
КонецЕсли;
127-
КонецЦикла;
128-
Возврат Сред(Стр, Поз);
129-
КонецФункции
130-
131-
Функция ПравыйStrip(Знач Стр)
132-
Длина = СтрДлина(Стр);
133-
Пока Длина > 0 Цикл
134-
С = Сред(Стр, Длина, 1);
135-
Если С = " " Или С = Символы.Таб Тогда
136-
Длина = Длина - 1;
137-
Иначе
138-
Прервать;
139-
КонецЕсли;
140-
КонецЦикла;
141-
Возврат Лев(Стр, Длина);
142-
КонецФункции
143-
144117
#КонецОбласти
145118

146119
Процедура ПриСозданииОбъекта()

src/internal/block/Классы/MarkdownПарсерПараграфов.os

Lines changed: 6 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131

3232
// Первую строку добавляем без проверки на setext — setext underline
3333
// должна следовать ПОСЛЕ хотя бы одной строки параграфа.
34-
Строки.Добавить(ЛевыйStrip(Контекст.ТекущаяСтрока()));
34+
Строки.Добавить(MarkdownБлочныеУтилиты.ЛевыйStrip(Контекст.ТекущаяСтрока()));
3535
Контекст.ПродвинутьСтроку();
3636

3737
Пока Не Контекст.КонецИсходника() И Не Контекст.ТекущаяСтрокаПустая() Цикл
@@ -51,12 +51,12 @@
5151
Прервать;
5252
КонецЕсли;
5353

54-
Строки.Добавить(ЛевыйStrip(ТекСтрока));
54+
Строки.Добавить(MarkdownБлочныеУтилиты.ЛевыйStrip(ТекСтрока));
5555
Контекст.ПродвинутьСтроку();
5656
КонецЦикла;
5757

5858
Сырой = СтрСоединить(Строки, Символы.ПС);
59-
Сырой = ПравыйStrip(Сырой);
59+
Сырой = MarkdownБлочныеУтилиты.ПравыйStrip(Сырой);
6060

6161
Если SetextУровень > 0 Тогда
6262
Узел = Новый MarkdownЗаголовок(SetextУровень);
@@ -111,9 +111,9 @@
111111
// принадлежит более «жёсткому» блоку: ATX heading, thematic break,
112112
// fenced code, HTML block type 1-6).
113113
Функция ПрерываетПараграф(Знач Стр)
114-
Если ЭтоATXHeader(Стр) Тогда Возврат Истина; КонецЕсли;
115-
Если ЭтоТематическийРазрыв(Стр) Тогда Возврат Истина; КонецЕсли;
116-
Если ЭтоОткрытиеЗабора(Стр) Тогда Возврат Истина; КонецЕсли;
114+
Если MarkdownБлочныеУтилиты.ЭтоATXHeader(Стр) Тогда Возврат Истина; КонецЕсли;
115+
Если MarkdownБлочныеУтилиты.ЭтоТематическийРазрыв(Стр) Тогда Возврат Истина; КонецЕсли;
116+
Если MarkdownБлочныеУтилиты.ЭтоОткрытиеЗабора(Стр) Тогда Возврат Истина; КонецЕсли;
117117
Если ЭтоНачалоBQ(Стр) Тогда Возврат Истина; КонецЕсли;
118118
Если ЭтоНачалоList(Стр) Тогда Возврат Истина; КонецЕсли;
119119
// HTML blocks типов 1-6 прерывают параграф; тип 7 — НЕТ.
@@ -150,88 +150,6 @@
150150
Возврат Сред(Стр, Поз, 1) = ">";
151151
КонецФункции
152152

153-
Функция ЭтоATXHeader(Знач Стр)
154-
Поз = 1;
155-
Длина = СтрДлина(Стр);
156-
Кол = 0;
157-
Пока Поз <= Длина И Сред(Стр, Поз, 1) = " " И Кол < 4 Цикл
158-
Кол = Кол + 1; Поз = Поз + 1;
159-
КонецЦикла;
160-
Если Кол >= 4 Тогда Возврат Ложь; КонецЕсли;
161-
Решёток = 0;
162-
Пока Поз <= Длина И Сред(Стр, Поз, 1) = "#" Цикл
163-
Решёток = Решёток + 1; Поз = Поз + 1;
164-
КонецЦикла;
165-
Если Решёток < 1 Или Решёток > 6 Тогда Возврат Ложь; КонецЕсли;
166-
Если Поз > Длина Тогда Возврат Истина; КонецЕсли;
167-
Хвост = Сред(Стр, Поз, 1);
168-
Возврат Хвост = " " Или Хвост = Символы.Таб;
169-
КонецФункции
170-
171-
Функция ЭтоТематическийРазрыв(Знач Стр)
172-
Длина = СтрДлина(Стр);
173-
Поз = 1;
174-
Кол = 0;
175-
Пока Поз <= Длина И Сред(Стр, Поз, 1) = " " И Кол < 4 Цикл
176-
Кол = Кол + 1; Поз = Поз + 1;
177-
КонецЦикла;
178-
Если Кол >= 4 Или Поз > Длина Тогда Возврат Ложь; КонецЕсли;
179-
Маркер = Сред(Стр, Поз, 1);
180-
Если Маркер <> "-" И Маркер <> "*" И Маркер <> "_" Тогда Возврат Ложь; КонецЕсли;
181-
КолМаркеров = 0;
182-
Пока Поз <= Длина Цикл
183-
С = Сред(Стр, Поз, 1);
184-
Если С = Маркер Тогда КолМаркеров = КолМаркеров + 1;
185-
ИначеЕсли С <> " " И С <> Символы.Таб Тогда Возврат Ложь;
186-
КонецЕсли;
187-
Поз = Поз + 1;
188-
КонецЦикла;
189-
Возврат КолМаркеров >= 3;
190-
КонецФункции
191-
192-
Функция ЭтоОткрытиеЗабора(Знач Стр)
193-
Длина = СтрДлина(Стр);
194-
Поз = 1;
195-
Кол = 0;
196-
Пока Поз <= Длина И Сред(Стр, Поз, 1) = " " И Кол < 4 Цикл
197-
Кол = Кол + 1; Поз = Поз + 1;
198-
КонецЦикла;
199-
Если Кол >= 4 Или Поз > Длина Тогда Возврат Ложь; КонецЕсли;
200-
Маркер = Сред(Стр, Поз, 1);
201-
Если Маркер <> "`" И Маркер <> "~" Тогда Возврат Ложь; КонецЕсли;
202-
Кол = 0;
203-
Пока Поз <= Длина И Сред(Стр, Поз, 1) = Маркер Цикл
204-
Кол = Кол + 1; Поз = Поз + 1;
205-
КонецЦикла;
206-
Возврат Кол >= 3;
207-
КонецФункции
208-
209-
Функция ЛевыйStrip(Знач Стр)
210-
Поз = 1;
211-
Длина = СтрДлина(Стр);
212-
Пока Поз <= Длина Цикл
213-
С = Сред(Стр, Поз, 1);
214-
Если С = " " Или С = Символы.Таб Тогда
215-
Поз = Поз + 1;
216-
Иначе
217-
Прервать;
218-
КонецЕсли;
219-
КонецЦикла;
220-
Возврат Сред(Стр, Поз);
221-
КонецФункции
222-
223-
Функция ПравыйStrip(Знач Стр)
224-
Длина = СтрДлина(Стр);
225-
Пока Длина > 0 Цикл
226-
С = Сред(Стр, Длина, 1);
227-
Если С = " " Или С = Символы.Таб Тогда
228-
Длина = Длина - 1;
229-
Иначе
230-
Прервать;
231-
КонецЕсли;
232-
КонецЦикла;
233-
Возврат Лев(Стр, Длина);
234-
КонецФункции
235153

236154
Процедура ПриСозданииОбъекта()
237155
_HTMLДетектор = Новый MarkdownПарсерHTMLБлока();

src/internal/block/Классы/MarkdownПарсерСписков.os

Lines changed: 4 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
КонецЕсли;
4949

5050
// Thematic break побеждает list marker (#60).
51-
Если ЭтоТематическийРазрыв(ТекСтр) Тогда Прервать; КонецЕсли;
51+
Если MarkdownБлочныеУтилиты.ЭтоТематическийРазрыв(ТекСтр) Тогда Прервать; КонецЕсли;
5252

5353
Если Маркер = Неопределено Тогда Прервать; КонецЕсли;
5454
Если Маркер.Упорядоченный <> Первый.Упорядоченный Или Маркер.Маркер <> Первый.Маркер Тогда
@@ -322,62 +322,12 @@
322322
КонецФункции
323323

324324
Функция ПрерываетПараграф(Знач Стр)
325-
Если ЭтоATXHeader(Стр) Тогда Возврат Истина; КонецЕсли;
326-
Если ЭтоТематическийРазрыв(Стр) Тогда Возврат Истина; КонецЕсли;
327-
Если ЭтоОткрытиеЗабора(Стр) Тогда Возврат Истина; КонецЕсли;
325+
Если MarkdownБлочныеУтилиты.ЭтоATXHeader(Стр) Тогда Возврат Истина; КонецЕсли;
326+
Если MarkdownБлочныеУтилиты.ЭтоТематическийРазрыв(Стр) Тогда Возврат Истина; КонецЕсли;
327+
Если MarkdownБлочныеУтилиты.ЭтоОткрытиеЗабора(Стр) Тогда Возврат Истина; КонецЕсли;
328328
Возврат Ложь;
329329
КонецФункции
330330

331-
Функция ЭтоATXHeader(Знач Стр)
332-
Длина = СтрДлина(Стр); Поз = 1; Кол = 0;
333-
Пока Поз <= Длина И Сред(Стр, Поз, 1) = " " И Кол < 4 Цикл
334-
Кол = Кол + 1; Поз = Поз + 1;
335-
КонецЦикла;
336-
Если Кол >= 4 Тогда Возврат Ложь; КонецЕсли;
337-
Реш = 0;
338-
Пока Поз <= Длина И Сред(Стр, Поз, 1) = "#" Цикл
339-
Реш = Реш + 1; Поз = Поз + 1;
340-
КонецЦикла;
341-
Если Реш < 1 Или Реш > 6 Тогда Возврат Ложь; КонецЕсли;
342-
Если Поз > Длина Тогда Возврат Истина; КонецЕсли;
343-
Хв = Сред(Стр, Поз, 1);
344-
Возврат Хв = " " Или Хв = Символы.Таб;
345-
КонецФункции
346-
347-
Функция ЭтоТематическийРазрыв(Знач Стр)
348-
Длина = СтрДлина(Стр); Поз = 1; Кол = 0;
349-
Пока Поз <= Длина И Сред(Стр, Поз, 1) = " " И Кол < 4 Цикл
350-
Кол = Кол + 1; Поз = Поз + 1;
351-
КонецЦикла;
352-
Если Кол >= 4 Или Поз > Длина Тогда Возврат Ложь; КонецЕсли;
353-
Маркер = Сред(Стр, Поз, 1);
354-
Если Маркер <> "-" И Маркер <> "*" И Маркер <> "_" Тогда Возврат Ложь; КонецЕсли;
355-
Кол = 0;
356-
Пока Поз <= Длина Цикл
357-
С = Сред(Стр, Поз, 1);
358-
Если С = Маркер Тогда Кол = Кол + 1;
359-
ИначеЕсли С <> " " И С <> Символы.Таб Тогда Возврат Ложь;
360-
КонецЕсли;
361-
Поз = Поз + 1;
362-
КонецЦикла;
363-
Возврат Кол >= 3;
364-
КонецФункции
365-
366-
Функция ЭтоОткрытиеЗабора(Знач Стр)
367-
Длина = СтрДлина(Стр); Поз = 1; Кол = 0;
368-
Пока Поз <= Длина И Сред(Стр, Поз, 1) = " " И Кол < 4 Цикл
369-
Кол = Кол + 1; Поз = Поз + 1;
370-
КонецЦикла;
371-
Если Кол >= 4 Или Поз > Длина Тогда Возврат Ложь; КонецЕсли;
372-
Маркер = Сред(Стр, Поз, 1);
373-
Если Маркер <> "`" И Маркер <> "~" Тогда Возврат Ложь; КонецЕсли;
374-
Кол = 0;
375-
Пока Поз <= Длина И Сред(Стр, Поз, 1) = Маркер Цикл
376-
Кол = Кол + 1; Поз = Поз + 1;
377-
КонецЦикла;
378-
Возврат Кол >= 3;
379-
КонецФункции
380-
381331
#КонецОбласти
382332

383333
#Область Фенс

src/internal/block/Классы/MarkdownПарсерЦитат.os

Lines changed: 3 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,9 @@
7676

7777
Функция ПрерываетПараграф(Знач Стр)
7878
// Те же условия что и в paragraph-парсере: ATX, thematic, fenced, HTML 1-6, lists.
79-
Если ЭтоATXHeader(Стр) Тогда Возврат Истина; КонецЕсли;
80-
Если ЭтоТематическийРазрыв(Стр) Тогда Возврат Истина; КонецЕсли;
81-
Если ЭтоОткрытиеЗабора(Стр) Тогда Возврат Истина; КонецЕсли;
79+
Если MarkdownБлочныеУтилиты.ЭтоATXHeader(Стр) Тогда Возврат Истина; КонецЕсли;
80+
Если MarkdownБлочныеУтилиты.ЭтоТематическийРазрыв(Стр) Тогда Возврат Истина; КонецЕсли;
81+
Если MarkdownБлочныеУтилиты.ЭтоОткрытиеЗабора(Стр) Тогда Возврат Истина; КонецЕсли;
8282
// List-start прерывает lazy-continuation BQ (#235).
8383
ЛистПарсер = Новый MarkdownПарсерСписков();
8484
Маркер = ЛистПарсер.РаспознатьМаркер(Стр);
@@ -95,56 +95,3 @@
9595
Если Тип >= 1 И Тип <= 6 Тогда Возврат Истина; КонецЕсли;
9696
Возврат Ложь;
9797
КонецФункции
98-
99-
Функция ЭтоATXHeader(Знач Стр)
100-
Длина = СтрДлина(Стр);
101-
Поз = 1; Кол = 0;
102-
Пока Поз <= Длина И Сред(Стр, Поз, 1) = " " И Кол < 4 Цикл
103-
Кол = Кол + 1; Поз = Поз + 1;
104-
КонецЦикла;
105-
Если Кол >= 4 Тогда Возврат Ложь; КонецЕсли;
106-
Реш = 0;
107-
Пока Поз <= Длина И Сред(Стр, Поз, 1) = "#" Цикл
108-
Реш = Реш + 1; Поз = Поз + 1;
109-
КонецЦикла;
110-
Если Реш < 1 Или Реш > 6 Тогда Возврат Ложь; КонецЕсли;
111-
Если Поз > Длина Тогда Возврат Истина; КонецЕсли;
112-
Хв = Сред(Стр, Поз, 1);
113-
Возврат Хв = " " Или Хв = Символы.Таб;
114-
КонецФункции
115-
116-
Функция ЭтоТематическийРазрыв(Знач Стр)
117-
Длина = СтрДлина(Стр);
118-
Поз = 1; Кол = 0;
119-
Пока Поз <= Длина И Сред(Стр, Поз, 1) = " " И Кол < 4 Цикл
120-
Кол = Кол + 1; Поз = Поз + 1;
121-
КонецЦикла;
122-
Если Кол >= 4 Или Поз > Длина Тогда Возврат Ложь; КонецЕсли;
123-
Маркер = Сред(Стр, Поз, 1);
124-
Если Маркер <> "-" И Маркер <> "*" И Маркер <> "_" Тогда Возврат Ложь; КонецЕсли;
125-
Кол = 0;
126-
Пока Поз <= Длина Цикл
127-
С = Сред(Стр, Поз, 1);
128-
Если С = Маркер Тогда Кол = Кол + 1;
129-
ИначеЕсли С <> " " И С <> Символы.Таб Тогда Возврат Ложь;
130-
КонецЕсли;
131-
Поз = Поз + 1;
132-
КонецЦикла;
133-
Возврат Кол >= 3;
134-
КонецФункции
135-
136-
Функция ЭтоОткрытиеЗабора(Знач Стр)
137-
Длина = СтрДлина(Стр);
138-
Поз = 1; Кол = 0;
139-
Пока Поз <= Длина И Сред(Стр, Поз, 1) = " " И Кол < 4 Цикл
140-
Кол = Кол + 1; Поз = Поз + 1;
141-
КонецЦикла;
142-
Если Кол >= 4 Или Поз > Длина Тогда Возврат Ложь; КонецЕсли;
143-
Маркер = Сред(Стр, Поз, 1);
144-
Если Маркер <> "`" И Маркер <> "~" Тогда Возврат Ложь; КонецЕсли;
145-
Кол = 0;
146-
Пока Поз <= Длина И Сред(Стр, Поз, 1) = Маркер Цикл
147-
Кол = Кол + 1; Поз = Поз + 1;
148-
КонецЦикла;
149-
Возврат Кол >= 3;
150-
КонецФункции

0 commit comments

Comments
 (0)