È possibile modificare le impostazioni di configurazione attuali relative al tipografo Markdown (noto anche come ‘punteggiatura intelligente’) per abilitare i segni di punteggiatura Unicode, come le virgolette e le trattine, ma disabilitare (c), ™ e potenzialmente altri glifi specializzati di questo tipo?
Questo problema si presenta soprattutto nelle liste numerate. Ad esempio:
(a) mela
(b) banana
(c) copyright?
(d) data
Questo stile di enumerazione è molto comune nelle leggi, nei contratti, nelle policy e in altri testi formali influenzati dallo stile legale. È anche uno stile di scaletta molto diffuso. Faceva parte dello stile di scaletta ‘standard’ che mi è stato insegnato quando ero studente delle scuole elementari negli Stati Uniti.
Vedo che le impostazioni attuali offrono una certa flessibilità riguardo alla punteggiatura, ma, per quanto ne so, non sembrano esserci modi per abilitare la punteggiatura intelligente senza abilitare anche i simboli intelligenti.
Non ho opinioni forti al riguardo: mi sembra che la necessità di digitare il simbolo del copyright sia così rara che questa scorciatoia possa essere rimossa. Il bilanciamento tra un’utilità estremamente rara e un formato abbastanza comune (ma poco elegante) come (a) (b) (c) mi porta a essere favorevole alla rimozione completa di questa specifica scorciatoia, @sam.
Non sembra molto configurabile; dovremmo patchare markdown.it per supportare questa flessibilità o semplicemente scrivere la nostra versione basata su markdown.it.
L’unica soluzione banale è disattivare l’intera funzionalità.
Il lato positivo è che il motore è piuttosto configurabile: potremmo disattivare le regole in markdown.it, copiare il codice e implementare le nostre sostituzioni proprio come ha fatto @Roman → .
Alcuni giorni di lavoro per ripulire il tutto sarebbero un peccato, dato che significherebbe distribuire lo stesso codice due volte, ma è in qualche modo inevitabile se lo stiamo forkando.
A partire dal commit 7b8969ce5cb2edc54f2c1aa39a85a3a08076337d su markdown-it master, il file sorgente rilevante è lib/rules_core/replacements.js e il fixture di test rilevante è test/fixtures/markdown-it/typographer.txt.
Tutte le sostituzioni sono codificate in modo statico. Includono (c) → (c), (tm) → ™, (r) → (r) e (p) → (p), che sono raggruppati come “abbreviazioni contestualizzate”.
Per completezza, non ottengo (p) per §. Dovrebbe quasi certamente essere ℗, il simbolo del fonoregistro, al suo posto.
Proverò a esaminare la questione per vedere se riesco a creare una patch che renda la funzionalità “typographer” più configurabile.
Il maintainer è estremamente reattivo. Chiude le mie PR in pochi minuti
Da quanto leggo, è molto, molto riluttante a introdurre qualsiasi breaking change, anche nelle nuove versioni major, persino per cose come il rendering di (P) come §. È anche allergico all’idea di permettere opzioni nello stile typographer: {A: true, B: false}, anche quando typographer: true rimane funzionale, a causa della complessità percepita.
Leggo tra le righe, ed è un russo che scrive in inglese. Ma ho la sensazione che consideri markdown-it come un progetto “finito”.
Con tutto il rispetto, potrebbe valere la pena fare un fork dell’implementazione, riscriverla come ES Modules e rimuovere tutte le funzionalità di tipo plugin attualmente incluse, sia la linkificazione che le sostituzioni, incluse quelle tipografiche per la punteggiatura.
Il manutentore non è interessato a punti riguardanti il codice duplicato nei bundle privi di numeri. Né è interessato a modifiche non distruttive dell’API che non siano “richieste dal 100% degli utenti” o che blocchino l’implementazione dei plugin. Questo crea una situazione di stallo, dato che stanno distribuendo due sottomoduli molto orientati ai plugin, per la linkificazione e la punteggiatura intelligente, che secondo questa filosofia dovrebbero essere effettivamente in piccoli pacchetti npm separati. Succede.
Per contestualizzare, ci sono state release significative di markdown-it in un passato relativamente recente. In particolare, un miglioramento delle prestazioni da parte di Alex Kocharin a novembre dello scorso anno.
Per correggere (c), gestire (p) e fare qualsiasi altra cosa vogliamo con le frecce e simili, la soluzione migliore è probabilmente proporre una patch che rimuova i sottomoduli di linkificazione e punteggiatura intelligente dal core e li carichi invece come plugin in Discourse. Utilizzare un’azione GitHub o un job cron per monitorare il ramo master di markdown-it e tentare un rebase automatico. Se il manutentore rimane così conservativo riguardo ai cambiamenti, la patch dovrebbe applicarsi correttamente per molto tempo. A meno che non compiano un grande salto, come riscrivere il tutto in ES Modules invece di CommonJS.
Ne abbiamo discusso internamente e abbiamo deciso di effettuare un hard fork di typographer.
Disabiliteremo fondamentalmente typographer in markdown.it e ne implementeremo una copia in Discourse. markdown.it è incredibilmente estendibile, si tratta principalmente di “copia-incolla”.
Una volta completato il copia-incolla, potremo aggiungere test, personalizzare e modificare alcune delle regole.
Ciao, scusa se riapro questa discussione. Dato che sto cercando un modo per disabilitare ... -> …, volevo sapere se questa funzionalità ha fatto qualche progresso e se in futuro potremo abilitare o disabilitare singole regole.
Beh, l’ho già provato, ma apparentemente non funziona. Non importa se abilito o disabilito il tipografo, le sostituzioni vengono sempre effettuate (e, a proposito, (c) non sembra funzionare)