Vladimir
Задача - протестируй свой рендер
Anton
Anton
что ты там блять сравнивать собрался?
Anton
лил
Anton
для гуев нормально еще e2e относительно, и то не везде
Anton
это тебе не web dom
Vladimir
В Рич тексте
Vladimir
Или чем там?
Anton
Anton
щас расплачусь нахуй
Anton
выходным буфером?
Anton
Это грубо говоря тупо само дерево протестит
Vladimir
Нету выходного буфера?
Anton
ну окей, я сделаю тесты рекурсивные для узлов что он их правильно обрабатывает и инлайнит
Anton
и что?
Anton
в котором по пизде едет все и вся
Vladimir
Как ты из жсона получаешь текст буфер с визуальной хуйней
Anton
изза того что "парсер из ада" не умеет в инлайны
Vladimir
У ГТК точно есть язык разметки
Anton
он может только выделять шаблоны и определенные куски текста
Vladimir
Или ты как-то по особому это делаешь
Anton
которые сука даже подсчету нормально не подвергаются, даже с учетом прозрачности до тупости в работе с длиной в строках питона
Anton
а я textview юзаю
Vladimir
Т.е. я правильно понимаю у тебя преобразование Wiki ast -> text + span атрибуты?
Alexander
блэт ты понимаешь как TextView процессоры рендера устроены?
Э не, я не про рендер данных по шаблону говорил, а про рендер распарсенных структур назад в разметку.
С визуальным рендерингом всё сложнее, без человека который сравнит "до" и "после" и придёт к выводу "хрен с ним, покатит", не выйдет 😊
Vladimir
Или из чего текст вию вообще рендерит
Anton
Anton
или какой особый смысл тестить структуры выходные
Anton
на питоне
Vladimir
Ещё раз
Anton
когда мне надо сделать парсер для раста
Anton
с другой архитектурой и подходом
Vladimir
Vladimir
Всмысле другой архитектурой?
Anton
Т.е. я правильно понимаю у тебя преобразование Wiki ast -> text + span атрибуты?
Есть wikitext он превращается сначала в рекурсивную струкутру из узлов привязанных к тексту, потом я делаю инлайнинг - разбиваю строку по типу: [ text_note, tag[text_node, tag, template], template, ..etc ]
После чего делаю перебор и вставляю в конец буфера, при этом к конкретному буферу сразу же нельзя поставить пометку (специфика работы textview процессора), и сохраняю текст например тега определенного, потом я ищу этот текст и применяю к нему тег.
Vladimir
Ну вот у тебя есть два места где можно тесты написать
Anton
нельзя просто взять и вставить новый буфер с предустановленным тегом, без инлайнинга с эскейпом и тд, и пост-рендеринга стилей
Anton
ну ваще никак
Vladimir
1) взять wiki -> json ибо это представление и в расте останется, без этого сразу никак
Vladimir
А второе json ast -> в данные твоего инлайнера
Anton
ну это можно сказать будет удобно если парсер на расте писать с одной стороны
Vladimir
?
Anton
с другой, я хочу чтобы в парсере на расте была более прозначная архитектура, и инлайнинг немного по другому был
Anton
ибо тот что сейчас конченый прям по всем фронтам
Vladimir
Ну от аст ты не избпвишься
Vladimir
Точнее незачем
Anton
неа
Anton
изначальный ast будет в любом случае
Anton
я говорю о структуре инлайнера
Anton
и способов обработки дерева
Anton
мне не нравится что питоновский парсер отдельно куски берет
Vladimir
Яснл
Anton
при чем по байтам порой проебывается
Vladimir
Всмысле отдельно куски
Alexander
Что тесты должны проверить?
Что всё парсится так же корректно, как и до преобразования.
Что все функции выполняются.
А что ещё проверять?
В твоём случае проще будет сразу на расте с тестами писать.
Сравнивать структуру со структурой в тестах будет очень болезненно.
Сравнивать строку "[[заголовок]]" с аналогичной строкой "[[заголовок]]" будет значительно проще, даже если внутри все распарсенные структуры десять раз поменяются, как оно хранится.
Anton
тоесть что он дает: вот у тебя текст, ты его парсишь - получаешь wiki узел. И из этого узла ты можешь запросить массивы типов разметок: тоесть Node: get_templates, get_filters, get_tags, и тд, которые тоже являются узлами, и хранят свой кусочек вики текста
Anton
в итоге получается абсолютно неудобный инлайнинг
Anton
просто дико неудобный
Vladimir
А как ты хочешь
Anton
ска я сохраняю ранжи текста, типо range_node = (my_global_text.find(tag_text), len(tag_text))
Anton
причем рекурсивно
Anton
и потом по этим ранжам начала узлов тегов и тд
Anton
я определяю фором обычным какие диапазоны у мест где реально текст
Anton
А как ты хочешь
чтобы частично текст сразу же инлайнился, тоесть получив из основного узла всякие теги разметки - он их абстрагировал с привязкой к основному тексту для быстрой разбивки
Vladimir
Почему ты сам не можешь обойти АСТ и заинлайнить
Anton
причем сразу с удалением символов разметки, это позволит мне сразу вставить текст всего глобального узла, а потом поверх него рекурсивно накатывать по ранжам тегов их стили
Vladimir
Ну короче, это по любому не часть парсера
Anton
с одной стороны да, с другой нет
Anton
главная для меня часть при построении парсера, это его адекватное использование относительно инлайнинга, и если будет возможность сделать наложение поверх плейн текста
Vladimir
Наложение поверх плейн текста?
Vladimir
Имхо у тебя требования какие-то пиздецовые
Vladimir
Опиши их формально
Vladimir
Чтоб мы посмотрели и сказали где ты не прав
Anton
Ну смотри например у меня есть строка типо:
=== Прощай Мир ===
'''Жирный тег {{template | с еще одним темплейтом внутри 'курсивчик'}}''' - некий ебаный текст, [тыкни сюда|ссылочка епт]
AST это превратит сначала в рекурсивные ноды с разными типами, питухон просто выдаст мне массивы типов шаблонов из этого текста, которые я потом сам должен буду раскрывать рекурсивно в структуру. И потом инлайнер должен будет запоминать ранжи типо:
[(25, 65, "template", my_node), etc..]
И потом делать разбивку и определять что вот тут между тегами у меня есть обычный текст, и так опять таки фором инлайнить по очереди ранжей псевдорекурсивно.
А я хочу чтобы он без рекурсии сразу определял мне основной плейн текст типо:
Прощай Мир
Жирный тег с еще одним темплейтом внутри курсивчик - некий ебаный текст, тыкни сюда
И уже заранее имел глобальный рендж без текста вроде:
[(0, 25, "heading"), (25, 45, "text"), etc...]
Причем не на последней стадии, и без лишней рекурсии, с двойным поиском текста как это вынуждено сделано сейчас.
Anton
К тому же с таким подходом обработки ранжей, я смогу сделать так чтобы интерфейсы разных шаблонов могли асинхронно рендерится внутри контекста
Anton
Потому что сейчас изза этой поебистики у меня даже вариантов вменяемых нет, в каком месте я могу собрать все шаблоны и остановив мир все их асинхронно обработать