Table of Contents
- Парсинг и утилиты (parsing.js)
- Обзор
- Парсинг блоков
- Работа с миксинами
- getMixinName(line)
- getMixinArgCount(line)
- findMixinArgRange(line, argIndex)
- extractMixinArgValue(line, argIndex)
- replaceMixinArgQuoted(line, argIndex, newValue)
- replaceMixinArgRaw(line, argIndex, newValue)
- replaceObjectPropInArg(rawArg, key, newValue)
- Определение типов полей
- guessAutoMixinField(rawArg, argIndex)
- guessObjectFieldByKey(key, value)
- shouldExposeObjectField(key)
- parseMixinObjectArg(rawArg)
- parseQuotedArgs(line)
- Парсинг текстовых полей
- Парсинг списков
- Парсинг секций
- parseSections(content)
- parseAtIndent(lines, targetIndent)
- guessSectionLabel(lines)
- rebuildContentFromSections(parsed)
- normalizeSpacers(sections, topVal, bottomVal)
- Mixin Rules
Парсинг и утилиты (parsing.js)
Обзор
parsing.js — ядро работы с Pug-кодом. Парсит блоки, миксины, аргументы, секции, поля.
Парсинг блоков
parseBlocks(text)
Разбивает текст Block.pug на отдельные блоки:
- Разделитель: строка начинающаяся с
// - Имя блока: текст после
// - Содержимое: все строки до следующего
// - Фильтр: блоки "Доп. текст" исключаются
Работа с миксинами
getMixinName(line)
Извлекает имя: +buttonRounded(...) → "buttonRounded"
getMixinArgCount(line)
Считает аргументы (учитывая вложенные скобки и кавычки), макс 12.
findMixinArgRange(line, argIndex)
Находит позицию n-го аргумента в строке. Обрабатывает:
- Вложенные скобки
(()) - Вложенные фигурные скобки
{{}} - Строки в одинарных и двойных кавычках
- Запятые как разделители
Возвращает: {start, end} — позиции в строке.
extractMixinArgValue(line, argIndex)
Получает значение аргумента, убирая кавычки.
replaceMixinArgQuoted(line, argIndex, newValue)
Заменяет значение аргумента, сохраняя кавычки.
replaceMixinArgRaw(line, argIndex, newValue)
Заменяет значение без добавления кавычек.
replaceObjectPropInArg(rawArg, key, newValue)
Заменяет значение свойства в объектном аргументе:
{hidePrice: true, showOldPrice: false} → {hidePrice: false, showOldPrice: false}
Определение типов полей
guessAutoMixinField(rawArg, argIndex)
Автоопределение типа по содержимому:
- Запятые + цифры →
mixin-ids {→ объект (парсить отдельно)http//→mixin-href- Иначе →
mixin-text
guessObjectFieldByKey(key, value)
По имени ключа:
url,href,link→hrefsrc,image,img→src- Иначе →
text
shouldExposeObjectField(key)
Фильтрует служебные ключи: class, style, id, data-* → false.
parseMixinObjectArg(rawArg)
Парсит {key: "value", key2: value2} → [{key, value, raw}].
parseQuotedArgs(line)
Находит все строковые аргументы с их позициями в строке.
Парсинг текстовых полей
splitTextField(line)
Находит текстовое содержимое после Pug-тега:
span.font.h2.blackText ТЕКСТ → {tagEnd: 25, text: "ТЕКСТ"}
getParagraphMeta(line)
Возвращает метаданные текстового поля. Исключает структурные теги (tr, td, table, thead, tbody, th).
Парсинг списков
getListItemRanges(lines)
Находит элементы списков — группы строк формата:
tr
tdFixed(width="...")
span.text ТЕКСТ
Возвращает: [{start, end}] — диапазоны строк для каждого элемента.
getListItemTextLine(lines, range)
Находит строку span.text внутри элемента списка.
Парсинг секций
parseSections(content)
Разбирает сложные блоки (карточки товаров) на секции:
- Определяет уровень вложенности (indent)
- Ищет
trна целевом indent - Группирует строки между
trи+spacerLineв секции - Определяет количество колонок
parseAtIndent(lines, targetIndent)
Парсит структуру на заданном уровне:
tr→ начало секции+spacerLine(N)→ спейсер между секциями
guessSectionLabel(lines)
Определяет тип секции по содержимому:
+button→ "Кнопка"img(→ "Картинка"+products→ "Товары"h1/h2/h3→ "Заголовок"span.text→ "Текст"- Иначе → "Ссылка"
rebuildContentFromSections(parsed)
Собирает контент блока обратно из разобранной структуры секций.
normalizeSpacers(sections, topVal, bottomVal)
Нормализует значения спейсеров между секциями.
Mixin Rules
normalizeMixinRules(rules)
Валидирует массив правил: проверяет наличие mixin и args, нормализует типы.
getMixinRulesForLine(line, mixinRules)
Находит правила, применимые к данной строке миксина. Матчит по имени миксина.
getDefaultMixinFieldLabel(type)
Дефолтные лейблы: mixin-text → "Текст", mixin-href → "Ссылка", mixin-ids → "ID", mixin-opts → "Опции".