#!/usr/bin/env python3 """Генератор тестовых файлов mdview2 для проверки лимита 256 КБ и путей обрыва. Результат кладётся рядом со скриптом (examples/mdview2/testfiles/): BIG.MD — ~216 КБ обычной прозы (CP866): успешный рендер большого файла. TABLES.MD — таблично-тяжёлый (ASCII): пробивает кап контент-кэша (40 стр./набор), т.к. неровные таблицы (короткие ячейки + один широкий столбец) раздувают число (символ,атрибут)-ячеек кратно относительно источника. LINES.MD — ~22000 коротких строк (ASCII): пробивает лимит строк (18432). Запуск: python3 gen_testfiles.py """ import os HERE = os.path.dirname(os.path.abspath(__file__)) ROOT = os.path.dirname(HERE) def write(name, data): path = os.path.join(HERE, name) mode = 'wb' if isinstance(data, (bytes, bytearray)) else 'w' with open(path, mode) as f: f.write(data) print(f"{name}: {os.path.getsize(path)} bytes") # --- BIG.MD: склейка README + READMEBG ×2, перекодировано в CP866 ----------- big = bytearray() for _ in range(2): for fn in ('README.MD', 'READMEBG.MD'): with open(os.path.join(ROOT, fn), encoding='utf-8') as f: big += f.read().encode('cp866', errors='replace') write('BIG.MD', bytes(big)) # --- TABLES.MD: неровные таблицы -> исчерпание контент-кэша ------------------ # Один широкий столбец (72 симв.) на таблицу задаёт ширину; остальные ячейки # короткие, но при рендере добиваются до этой ширины -> ~80 ячеек/строка из # ~8 байт источника. ~300 таблиц × 30 строк дают ~840K ячеек (1.68 МБ контента) # при ~108 КБ источника -> кап 640 КБ/набор пробивается, строк (~11K) < 18432, # значит первой срабатывает причина TRUNC_CONTENT. NT, ROWS = 300, 30 wide = 'x' * 72 out = ['# Tables test - content cache exhaustion trigger', ''] for t in range(NT): out.append(f'## Table {t + 1}') out.append('| Column A | B |') out.append('|---|---|') out.append(f'| {wide} | y |') for r in range(ROWS): out.append(f'| a{r} | b |') out.append('') write('TABLES.MD', '\n'.join(out) + '\n') # --- LINES.MD: масса коротких строк -> исчерпание лимита строк --------------- # 22000 коротких непустых строк = 22000 экранных сегментов > 18432; контент # мал (~9 ячеек/строка), поэтому первой срабатывает причина TRUNC_LINES. N = 22000 out = ['# Short lines test - line limit trigger', ''] out += [f'row {i:05d}' for i in range(1, N + 1)] write('LINES.MD', '\n'.join(out) + '\n')