Конвеєр
- Перетворення Markdown на IR (
markdownToIR) — звичайний текст разом із діапазонами стилів (жирний, курсив, закреслений, код, блок коду, спойлер, цитата, заголовки 1–6) і діапазонами посилань. Зміщення вимірюються кодовими одиницями UTF-16, тому діапазони стилів Signal безпосередньо узгоджуються з його API. Таблиці аналізуються лише тоді, коли канал використовує режим таблиць. - Поділ IR на частини (
chunkMarkdownIR/renderMarkdownIRChunksWithinLimit) — поділ виконується над текстом IR до формування виводу, тому вбудовані стилі та посилання розрізаються для кожної частини, а не розриваються на межі. - Формування виводу для кожного каналу (
renderMarkdownWithMarkers) — мапа маркерів стилів перетворює діапазони на нативну розмітку каналу.
Приклад IR
Вхідний Markdown: OC_I18N_900000 IR (схематично): OC_I18N_900001Обробка таблиць
markdown.tables визначає, як канал перетворює таблиці Markdown, окремо для
кожного каналу та, за потреби, для кожного облікового запису:
Типові значення Plugin для кожного каналу: Signal, WhatsApp і Matrix типово використовують
bullets; Mattermost типово використовує off; Telegram типово використовує block (який
перетворюється на code, якщо для облікового запису не ввімкнено richMessages). Будь-який
канал без явно заданого типового значення Plugin використовує code.
OC_I18N_900002
Правила поділу на частини
- Обмеження розміру частин надходять від адаптерів або конфігурації каналів і застосовуються до тексту IR, а не до сформованого виводу.
- Огороджені блоки коду зберігаються як один блок із завершальним символом нового рядка, щоб канали правильно відображали завершальну огорожу.
- Префікси списків і цитат є частиною тексту IR, тому поділ на частини ніколи не розриває префікс.
- Вбудовані стилі ніколи не розділяються між частинами; засіб формування виводу повторно відкриває активний стиль на початку наступної частини.
Політика посилань
- Slack:
[label](url)-><url|label>; URL без підпису залишаються без змін. - Telegram:
[label](url)-><a href="url">label</a>(режим аналізу HTML). - Signal:
[label](url)->label (url), якщо підпис ще не збігається з URL.
Спойлери
Маркери спойлерів (||spoiler||) аналізуються для Signal (перетворюються на діапазони стилю SPOILER)
і Telegram (перетворюються на <tg-spoiler>). Інші канали сприймають
||...|| як звичайний текст.
Додавання або оновлення засобу форматування каналу
- Виконайте аналіз один раз за допомогою
markdownToIR(...), передавши доречні для каналу параметри (autolink,headingStyle,blockquotePrefix,tableMode). - Сформуйте вивід за допомогою
renderMarkdownWithMarkers(...)і мапи маркерів стилів (або спеціальної логіки діапазонів стилів для транспортів на кшталт Signal). - Поділіть на частини за допомогою
chunkMarkdownIR(...)абоrenderMarkdownIRChunksWithinLimit(...)перед формуванням виводу кожної частини. - Підключіть адаптер, щоб він викликав новий засіб поділу на частини та формування виводу зі шляху вихідного надсилання.
- Протестуйте за допомогою тестів форматування та тесту вихідного доставлення, якщо канал ділить повідомлення на частини.
Поширені проблеми
- Токени Slack у кутових дужках (
<@U123>,<#C123>,<https://...>) мають зберігатися під час екранування; необроблений HTML усе одно потрібно безпечно екранувати. - HTML у Telegram потребує екранування тексту поза тегами, щоб уникнути пошкодженої розмітки.
- Діапазони стилів Signal використовують зміщення UTF-16, а не зміщення кодових точок.
- Зберігайте завершальні символи нового рядка в огороджених блоках коду, щоб завершальний маркер опинявся в окремому рядку.
Пов’язані матеріали
Потокове передавання та поділ на частини
Поведінка вихідного потокового передавання, межі частин і доставлення з урахуванням особливостей каналів.
Системна підказка
Що бачить модель перед розмовою, зокрема впроваджені файли робочого простору.