Uma execução do modelo de investigação multi-fonte produziu um bom relatório sobre instrumentos de investimento, e depois imprimiu-o mal. Noventa e cinco marcadores na forma [^1] estavam dentro do texto corrido, e nove linhas na forma [^1]: amontoavam-se por baixo. Tanto na web como no telemóvel.
A causa é que as notas de rodapé não fazem parte do markdown. É uma extensão, e nenhum dos dois motores de markdown que distribuímos — um na web, outro no telemóvel — a implementa. Estávamos a pedir ao modelo exatamente essa forma, e depois a apresentá-la como texto literal.
Um só reescritor, dois motores
Em vez de ensinar a mesma extensão aos dois motores de renderização, os marcadores são reescritos antes de qualquer um deles os ver, numa ligação simples que ambos já apresentam de forma idêntica. As definições são retiradas e devolvidas separadamente, e o que se seguia a elas permanece como o final do documento. Os parênteses retos ficam dentro do texto da ligação, para que citações empilhadas se leiam [1][2], e não 12.
Na web, a citação é desenhada em sobrescrito, as definições são apresentadas como uma lista com âncoras reais, clicar numa desloca-se até ela e faz a linha piscar, e o número na lista salta de volta para o primeiro lugar onde foi citada. Passar o cursor por cima mostra a definição sem se mover. No telemóvel, os mesmos marcadores são desenhados na cor de destaque, e tocar num desloca o painel até à linha correspondente. As ligações que não são citações continuam a abrir num navegador, como antes.
Os cartões de fontes debaixo de um relatório nunca foram afetados — vêm de outro lado e sempre estiveram corretos.
E na transferência
Um relatório que transferes como .docx, .pdf ou .md passava por outro conversor, que imprimia os marcadores em bruto diretamente no documento. Uma especificação de documento não tem sobrescrito, por isso uma citação imprime-se [3], e cada definição abre a sua própria linha começando com [3]. As linhas de continuação indentadas juntam-se à sua definição. Os números no ficheiro são os números do ecrã.
A primeira tentativa estava errada de uma forma para a qual já tínhamos proteção
A primeira versão transformava os números de nota de rodapé em simples ligações de fragmento — href="#fn-3". Sob o <base href="/"> de que uma aplicação de página única precisa, um fragmento nu resolve-se em relação à raiz do sítio, por isso a ligação aponta para a página inicial. O gestor de cliques cancelava a navegação, por isso funcionava — e continuaria a funcionar até alguém tocar no gestor.
Uma verificação que já tínhamos precisamente para este padrão ficou vermelha na execução local antes do push. Os números são agora botões; deslocam-se, movem o foco, e respeitam a preferência de movimento reduzido do leitor.