Eh bien, j’ai passé plus de temps que je ne voudrais l’admettre à convertir et à corriger du contenu cassé après la mise à niveau vers le nouveau plugin mathématique, alors je publie ici les commandes importantes que j’ai utilisées (excusez le hackage moche, j’étais trop paresseux). Une correction manuelle du contenu était toujours nécessaire, mais pas tant que ça dans notre cas.
NOTE : Ceci est à titre d’inspiration. Rappelez-vous le poème « Je n’assume aucune responsabilité… ». N’exécutez pas cela aveuglément si vous ne le comprenez pas.
# remplace \\\\ par \\ (ce qui traduit aussi \\\\\\\\ par \\\\)
Post.where('raw ~ ?', "\\\\\\\\").each{|p| p.raw=p.raw.gsub(/\\\\\\\\/, "\\\\"); p.save; print "."; $stdout.flush;}; puts "";
# remplace {align} par {aligned} et supprime toutes les versions étoilées
Post.where('raw ~ ?', "\\\\begin\\{align").each{|p| p.raw=p.raw.gsub(/(begin|end)\\{align.*?\\}/, "\\\\1{aligned}"); p.save; print "."; $stdout.flush;}; puts "";
# remplace {array} par {matrix} et supprime toutes les versions étoilées
Post.where('raw ~ ?', "\\\\begin\\{array").each{|p| p.raw=p.raw.gsub(/(begin|end)\\{array\\*?\\}/, "\\\\1{matrix}"); p.save; print "."; $stdout.flush;}; puts "";
# remplace `\\begin{equation}` par `$$`
Post.where('raw ~ ?', "\\\\begin\\{equation").each{|p| p.raw=p.raw.gsub(/\s*\\\\(begin|end)\\{equation\\*?\\}\s*/, "$$"); p.save; print "."; $stdout.flush;}; puts "";
# ajoute des sauts de ligne avant et après `$$`
Post.where('raw ~ ?', "\\$\\$").each{|p| p.raw=p.raw.gsub(/\$\$/,"\\n$$\\n"); p.save; print "."; $stdout.flush;}; puts "";
# ajoute `$$` avant et après les blocs `{aligned}`
Post.where('raw ~ ?', "\\\\begin\\{align").each{|p| p.raw=p.raw.gsub(/\s*(\\\\begin\\{align})/m,"\\n$$\\n\\\\1").gsub(/(\\\\end\\{align.*?\\})\s*/m,"\\\\1\\n$$\\n"); p.save; print "."; $stdout.flush;}; puts "";
# ... corrige les doubles `$$` dans `{aligned}`
Post.where('raw ~ ?', "\\\\begin\\{aligned").each{|p| p.raw=p.raw.gsub(/(\\\\end\\{align.*?\\}\\n\\$\\$)\\n\\$\\$/,"\\\\1").gsub(/\\$\\$\\n(\\$\\$\\n\\\\begin\\{align)/,"\\\\1"); p.save; print "."; $stdout.flush;}; puts "";
## applique les deux commandes ci-dessus à d'autres environnements que vous pourriez avoir en plus de {aligned}
# CORRECTION MANUELLE RECOMMANDÉE POUR CE QUI SUIT :
# Posts où `$$` apparaissent dans un environnement cité `> ` . Seuls les `$$` d'ouverture et
# de fermeture doivent être précédés, c'est-à-dire `> $$`, le contenu entre les deux ne doit pas
# l'être, sinon il est rendu comme des signes mathématiques supérieur à.
# Exécutez ceci pour identifier les posts :
Post.where('raw ~ ?', ">\\s*\\n\\s*\\$\\$").each{|p| puts "https://discourse.domain.com/p/#{p.id}";};
# ... OU, exécutez ceci pour tenter une correction automatisée, bien que risquée
# (a bien fonctionné pour nous, quelques posts ont nécessité des travaux manuels supplémentaires) :
Post.where('raw ~ ?', ">\\s*\\n\\s*\\$\\$").each{|p| p.raw=p.raw.gsub(/(\u003e\s*)\$\$(.*?)\$\$\s*?\n/m,"\\1\u003e $$\\2\u003e $$\n\u003e"); p.save; print "."; $stdout.flush;}; puts "";
# Cosmétique, facultatif : remplace 3+ sauts de ligne consécutifs par 2 sauts de ligne
Post.where('raw ~ ?', "\\n{3,}").each{|p| p.raw=p.raw.gsub(/\n{3,}/,"\n\n"); p.save; print "."; $stdout.flush;}; puts "";
# Facultatif : remplace 2+ sauts de ligne consécutifs avant et après `$$`
# par un seul saut de ligne
# ATTENTION : cela fonctionne dans la version actuelle du plugin, mais cela peut s'afficher
# différemment dans une future version (?). Par exemple, en Latex réel, une ligne vide
# après $$ avant le texte fait une différence dans l'espacement vertical.
Post.where('raw ~ ?', "\\n\\$\\$\\n{2,}|\\n{2,}\\$\\$").each{|p| p.raw=p.raw.gsub(/\n\$\$\n{2,}/,"\\n$$\\n").gsub(/\n{2,}\$\$/,"\\n$$"); p.save; print "."; $stdout.flush;}; puts "";