Investiguei a citação de matemática (estou pensando em escrever um PR ou contribuir para um).
Documentando alguns pensamentos e descobertas iniciais aqui.
- Parece que a citação passa por estes componentes principais:
- Função
buildQuote TopicController.selectedText- O conteúdo passado para a citação vem de
this.quoteState.buffer– isso é preenchido emQuoteButton._selectionChanged(talvez em outros lugares também) - Isso chama
selectedText - que chama
toMarkdown
- Função
- A função
buildQuoterecebe um objeto de postagem – acho que é uma descrição JSON completa da postagem exemplo.
Então, minha impressão inicial é que um destes pontos pode ser corrigido:
toMarkdowncorresponde a elementos contra várias tags HTML; mathjax usa elementos personalizados, acho que são detectáveis (talvez não renderização SVG), talvez katex também?selectedTextfaz alguma correspondência para elementos como blocos de código e onebox – pode detectar elementos mathjax/katex e transformá-los? (Nota: provavelmente é uma boa ideia ter um hook ou algo assim aqui para que a lógica de transformação possa ser adicionada ao plugin discourse-math em vez da base de código principal do discourse).- os outros pontos não parecem tão adequados quanto estes dois.
Alguns outros pensamentos sobre abordagens e como obter a matemática bruta.
Dependendo de como katex / mathjax+svg[1] funcionam, toda instância de matemática deve ter um elemento HTML raiz, acho eu (possivelmente múltiplos, pois existem alguns elementos ocultos para acessibilidade e outras coisas). Então, se soubermos os locais onde a matemática existe, podemos analisar a postagem bruta em busca de instâncias de conteúdo delimitadas por $ (mas os interpretadores são complicados – talvez já exista um na base de código?)
Alternativamente, mathjax pelo menos tem um recurso de clique com o botão direito \u003e ver-tex (que deve ser a string literal entre pares de $); não tenho certeza de como me conectar a isso, mas se houver uma maneira de fazer isso para mathjax v2, v3 e katex, então deve ser possível usá-lo para substituir a matemática formatada selecionada por $...$ (nota: isso funciona para matemática inline, é preciso cobrir o caso para o outro tipo também – que usa delimitadores $$...$$ ou [/.../].)
Problemas atuais:
- Não sei como implementar um hook ou se há algo melhor para usar / uma maneira melhor de fazer isso na base de código do discourse.
- Vários desconhecidos sobre mathjax/katex que precisam ser investigados.
- Elementos HTML – como detectá-los de forma confiável?
- Como obter o código TeX bruto?
Se alguém tiver outras ideias sobre onde/o que corrigir, outros métodos de implementação possíveis ou qualquer outra coisa, por favor, poste-os.
Acho que talvez mathjax+svg não seja suportado, então isso talvez não seja um problema ↩︎