Sto cercando di imparare a scrivere regole markdown per implementare nuove funzionalità bbcode usando questa guida, ma ho molta difficoltà a seguire il flusso perché c’è così tanto che non è spiegato:
Ho anche consultato la documentazione di markdown-it, ma è molto scarna e sembra essere principalmente una panoramica ad alto livello del funzionamento del sistema. Ecco alcune domande specifiche che ho:
La guida contiene questa riga: // standard markdown it inline extension goes here.
Cos’è l’estensione inline standard di markdown-it? È qui che si definiscono le regole che vengono inviate al ruler? Perché restituisce false?
Quali sono i tipi di token? Vedo esempi come 'link_open' e 'html_inline': da dove provengono? Esiste un elenco statico da qualche parte di quelli disponibili? Posso aggiungerne di nuovi? Come fa il parser a sapere cosa fare con questi?
Come funziona questo? Come fa il parser a sapere cosa fa 'code_inline'? Cosa fa la funzione state.push() e come è inteso il suo utilizzo?
Sento di essere vicino a “capire”, ma penso mi manchino alcuni concetti. Ho scritto la regola più basilare e sembra funzionare: mi serve solo una migliore comprensione per andare avanti. Qualsiasi aiuto sarebbe apprezzato!
Innanzitutto, sto cercando di creare un bbcode [table] come punto di partenza. Sono consapevole che Markdown supporta già le tabelle, ma (assumendo di poter implementare il supporto per gli altri nostri bbcodes) stiamo migrando circa 20 milioni di post su Discourse, quindi desidero garantire una retrocompatibilità corretta per gli bbcodes esistenti. Inoltre, l’uso del carattere pipe in Markdown rende praticamente impossibile l’elaborazione dei post per convertire le tabelle.
Il tag table che ho creato finora viene continuamente eliminato. È presente nel post, ma continua (presumo) a essere rimosso dallo scrubber. Ecco cosa ho attualmente:
Ho provato altre formattazioni della whitelist e della funzione wrap basandomi su altri esempi che ho visto, ma finora nulla funziona. Quindi presumo che ci sia qualcosa di fondamentale nel modo in cui funziona il sistema che non ho ancora compreso. Sto cercando di acquisire una migliore comprensione per poter ottenere risultati coerenti in futuro.
Abbiamo un elenco semplice di BBCode che stiamo cercando di supportare, come ha spiegato @Ghan, perché siamo un forum con oltre 20 milioni di messaggi. Non siamo affatto una comunità piccola e questa non è stata una decisione facile da prendere, ma abbiamo stabilito che Discourse è il software migliore per noi in futuro. Abbiamo risolto l’importazione; l’unica cosa che ci impedisce di migrare è capire questo ultimo passaggio. Ora potrei essere convinto a eliminare le tabelle, dato che vogliamo rimuovere qualsiasi BBCode già supportato da Discourse o Markdown. Tuttavia, le tabelle sono un caso che non può essere semplicemente riconvertito nella versione Markdown, poiché sostituire i tag td, tr e così via con la corretta sintassi Markdown non è semplice, anzi, per quanto ne so, quasi impossibile. Quindi eliminarle va bene, anche se non possono essere riconvertite facilmente; ma imparare come farlo ci aiuterà molto probabilmente a risolvere anche tutto il resto.
Siamo riusciti a eliminare [h1], ad esempio, perché è davvero semplice da modificare: tutti i tag H devono semplicemente diventare il numero corrispondente di #.
Abbiamo un elenco completo all’indirizzo: Tutorial - RpNation - BBcode Guide | RpNation e altri ancora oltre a quelli discussi in questo thread sono già stati rimossi perché erano molto semplici da trovare e sostituire con l’equivalente Markdown.
So che questo post è del 2020, ma dato che non ha mai ricevuto risposta (se non dire “guarda altro codice” e “le tabelle sono troppo difficili”), ho pensato di contribuire e spiegare come posso aiutare, dato che sto scrivendo il mio plugin bbcode e ho dovuto faticare senza alcuna documentazione.
Ho dato un’occhiata alla tua sintassi bbcode [table], ed è un plugin perfettamente ragionevole da creare, è solo un po’ di wrapping. Seriamente, non credo che Sam abbia nemmeno guardato il link che hai inviato, perché il tuo formato bbcode per le tabelle è praticamente il formato della tabella html, ma con tag bbcode.
Questo post ha davvero aiutato a spiegare un po’ come fare questo.
Non ho tempo al momento per spiegare come fare quello che vuoi fare (e testarlo per vedere se funziona davvero), quindi al momento posso dirti che i tipi di token html_raw e html_block sono piuttosto utili. Inoltre, il modo migliore per capire se sta effettivamente funzionando è inserire console.log() nella funzione wrap, e poi vedere cosa stai effettivamente ricevendo nella console (e vedere se quello che stai facendo funziona, senza doversi preoccupare dell’aggressivo sanitizer di Discourse).
Abbiamo iniziato a lavorare su un nuovo plugin bbcode dopo aver fatto alcuni progressi con le estensioni markdown, ma alla fine abbiamo deciso che non avrebbe funzionato bene come speravamo. Speriamo di aver completato gli ultimi 3 entro quest’estate e poi di migrare poco dopo.
Le tabelle, tuttavia, molto probabilmente non avranno un equivalente bbcode e agli utenti verrà indicato di utilizzare la versione markdown. A nessuno piacciono le tabelle.