Pipeline
- Analisar Markdown em IR (
markdownToIR) - texto simples e intervalos de estilo (negrito, itálico, tachado, código, bloco de código, spoiler, citação em bloco, cabeçalho 1-6) e intervalos de links. Os deslocamentos são unidades de código UTF-16, para que os intervalos de estilo do Signal se alinhem diretamente à sua API. As tabelas são analisadas somente quando o canal adota um modo de tabela. - Dividir a IR em partes (
chunkMarkdownIR/renderMarkdownIRChunksWithinLimit)- a divisão ocorre no texto da IR antes da renderização, portanto os estilos embutidos e links são segmentados por parte, em vez de serem interrompidos em um limite.
- Renderizar por canal (
renderMarkdownWithMarkers) - um mapa de marcadores de estilo transforma os intervalos na marcação nativa do canal.
Exemplo de IR
Markdown de entrada: OC_I18N_900000 IR (esquemática): OC_I18N_900001Tratamento de tabelas
markdown.tables controla como um canal converte tabelas Markdown, por
canal e, opcionalmente, por conta:
Padrões de Plugin por canal: Signal, WhatsApp e Matrix usam
bullets por padrão; Mattermost usa off; Telegram usa block por padrão (que
é resolvido como code, a menos que a conta tenha richMessages ativado). Qualquer
canal sem um padrão explícito do Plugin usa code.
OC_I18N_900002
Regras de divisão em partes
- Os limites das partes vêm dos adaptadores/configurações do canal e se aplicam ao texto da IR, não à saída renderizada.
- Blocos de código delimitados são mantidos como um único bloco com uma nova linha ao final, para que os canais renderizem corretamente o delimitador de fechamento.
- Prefixos de listas e citações em bloco fazem parte do texto da IR, portanto a divisão nunca ocorre no meio de um prefixo.
- Estilos embutidos nunca são divididos entre partes; o renderizador reabre um estilo aberto no início da parte seguinte.
Política de links
- Slack:
[label](url)-><url|label>; URLs simples permanecem simples. - Telegram:
[label](url)-><a href="url">label</a>(modo de análise HTML). - Signal:
[label](url)->label (url), a menos que o rótulo já corresponda à URL.
Spoilers
Marcadores de spoiler (||spoiler||) são analisados para o Signal (mapeados para intervalos de estilo
SPOILER) e o Telegram (mapeados para <tg-spoiler>). Outros canais tratam
||...|| como texto simples.
Adicionar ou atualizar um formatador de canal
- Analise uma única vez com
markdownToIR(...), fornecendo opções apropriadas ao canal (autolink,headingStyle,blockquotePrefix,tableMode). - Renderize com
renderMarkdownWithMarkers(...)e um mapa de marcadores de estilo (ou lógica personalizada de intervalos de estilo para transportes como o Signal). - Divida em partes com
chunkMarkdownIR(...)ourenderMarkdownIRChunksWithinLimit(...)antes de renderizar cada parte. - Conecte o adaptador para chamar o novo divisor e renderizador a partir do caminho de envio de saída.
- Teste com testes de formatação e um teste de entrega de saída, caso o canal divida mensagens em partes.
Armadilhas comuns
- Tokens entre sinais de maior e menor do Slack (
<@U123>,<#C123>,<https://...>) devem sobreviver ao escape; HTML bruto ainda precisa ser escapado com segurança. - O HTML do Telegram exige o escape do texto fora das tags para evitar marcação inválida.
- Os intervalos de estilo do Signal usam deslocamentos UTF-16, não deslocamentos de pontos de código.
- Preserve as novas linhas finais em blocos de código delimitados, para que o marcador de fechamento fique em sua própria linha.
Relacionado
Streaming e divisão em partes
Comportamento do streaming de saída, limites das partes e entrega específica por canal.
Prompt do sistema
O que o modelo vê antes da conversa, incluindo arquivos injetados do espaço de trabalho.