Bene, ho speso più di quanto vorrei ammettere per convertire e correggere contenuti danneggiati dopo l’aggiornamento al nuovo plugin matematico, quindi pubblico qui i comandi importanti che ho utilizzato (scusate l’hackery grezzo, ero troppo pigro). Era ancora necessaria una correzione manuale di alcuni contenuti, ma nel nostro caso non molta.
NOTA: Questo è a scopo ispirativo. Ricorda la poesia “Non mi assumo alcuna responsabilità…”. Non eseguire questo codice alla cieca se non lo capisci.
# sostituisci \\ in \ (che traduce anche \\\\ in \\)
Post.where('raw ~ ?', "\\\\\\\\").each{|p| p.raw=p.raw.gsub(/\\\\\\\\/, "\\\\"); p.save; print "."; $stdout.flush;}; puts "";
# sostituisci {align} con {aligned} e rimuovi tutte le versioni con asterisco
Post.where('raw ~ ?', "\\\\begin\\{align").each{|p| p.raw=p.raw.gsub(/(begin|end)\\{align.*?\\}/, "\\\\1{aligned}"); p.save; print "."; $stdout.flush;}; puts "";
# sostituisci {array} con {matrix} e rimuovi tutte le versioni con asterisco
Post.where('raw ~ ?', "\\\\begin\\{array").each{|p| p.raw=p.raw.gsub(/(begin|end)\\{array\\*?\\}/, "\\\\1{matrix}"); p.save; print "."; $stdout.flush;}; puts "";
# sostituisci `\begin{equation}` con `$$`
Post.where('raw ~ ?', "\\\\begin\\{equation").each{|p| p.raw=p.raw.gsub(/\s*\\(begin|end)\\{equation\\*?\\}\s*/, "$$"); p.save; print "."; $stdout.flush;}; puts "";
# aggiungi nuove righe prima e dopo `$$`
Post.where('raw ~ ?', "\\$\\$").each{|p| p.raw=p.raw.gsub(/\$\$/,"\n$$\n"); p.save; print "."; $stdout.flush;}; puts "";
# aggiungi `$$` prima e dopo i blocchi `{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 "";
# ... correggi i doppi `$$` in `{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 "";
## applica i due comandi precedenti ad altri ambienti che potresti avere oltre a {aligned}
# CORREZIONE MANUALE RACCOMANDATA PER QUANTO SEGUE:
# Post in cui `$$` appaiono nell'ambiente quotato `> `. Solo i `$$` di apertura e
# chiusura devono essere preceduti, cioè `> $$`, il contenuto intermedio non deve esserlo
# altrimenti viene renderizzato come segni di maggiore-uguale matematici.
# Esegui questo per identificare i post:
Post.where('raw ~ ?', ">\s*\n\s*\$\$").each{|p| puts "https://discourse.domain.com/p/#{p.id}";};
# ... OPPURE, esegui questo per tentare una correzione automatizzata, sebbene rischiosa
# (ha funzionato bene per noi, alcuni post hanno richiesto ulteriore lavoro manuale):
Post.where('raw ~ ?', ">\s*\n\s*\$\$").each{|p| p.raw=p.raw.gsub(/(\>\s*)\$\$(.*?)\$\$\s*?\n/m,"\\1>\n$$\\2>\n$$\n>"); p.save; print "."; $stdout.flush;}; puts "";
# Cosmetico, opzionale: sostituisci 3+ nuove righe consecutive con 2 nuove righe
Post.where('raw ~ ?', "\\n{3,}").each{|p| p.raw=p.raw.gsub(/\n{3,}/,"\n\n"); p.save; print "."; $stdout.flush;}; puts "";
# Opzionale: sostituisci 2+ nuove righe consecutive prima e dopo `$$`
# con una singola nuova riga
# ATTENZIONE: va bene nella versione attuale del plugin, ma potrebbe essere visualizzato
# diversamente in una versione futura (?). Ad esempio, in Latex reale, una riga vuota
# dopo $$ prima del testo fa una differenza nello spazio verticale.
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 "";