Secondo me Polygen dovrebbe gestire in maniera diversa le sequenze di fine riga (EOL). Allo stato attuale, sta all'utente specificare se usare LF o CRLF tramite le sequenze escape \n e \r.
Oggigiorno, il modo in cui vengono usate le EOL è cambiato dall'epoca in cui Polygen fu creato. Oggi l'aspettativa è che \n produca la sequenza EOL nativa del sistema operativo (CRLF su Windows, LF negli altri OS).
Allo stato attuale, le EOL creano problemi quando si reindirizza l'output di Polygen ad altre applicazioni. Per esempio, pandoc si aspetta un EOL nativo, e in Windows ignorerà le sequenze LF o CR; lo stesso vale per la maggior parte delle applicazioni moderne.
Il problema è che, attualmente, chi scrive grammatiche per Linux o Mac tende a usare \n per le nuove righe, mentre chi le scrive per Windows tende a usare \r\n — in realtà, nella maggior parte dei casi viene usato solo \n, ma in alcuni contesti di Windows è necessario usare \r\n per preservare la nuova riga (p.es: markdown e altri formati di testo).
La soluzione ideale, a mio avviso sarebbe questa:
\n dovrebbe essere interpretata da Polygen come EOL nativa.
\r dovrebbe essere deprecata, ma preservata per ragioni di retrocompatibilità, e trattata come se fosse \n.
- Occorrenze di
\r\n dovrebbero essere trattate come un singolo \n (per evitare che una interruzione di riga venga interpretata come doppia)
- Una nuova opzione da riga di comando dovrebbe consentire l'override della EOL nativa:
-eol lf per imporre \n = LF (possibili valori per -eol: lf|crlf|cr).
Quest'ultima opzione si rivelerebbe fondamentale nella creazione di script Shell o Batch, dove è necessario usare \n e \r\n rispettivamente, a prescindere dall'OS su cui si sta lavorando.
In teoria, oggi CR non viene più usato come carattere EOL, veniva usato solo dai primi OS del Machintosh, ma vale comunque la pena di offrire la possibilità di utilizzarlo tramite opzioni riga di comando.
Praticamente, Polygen dovrebbe normalizzare i caratteri EOL nel suo output — convertendo tutte le occorrenze di \n e \r nel carattere EOL nativo, o in quello specificato tramite opzioni, e normalizzare anche eventuali caratteri EOL introdotti tramite Ascii escapes (\010 e \013).
Ho altresì notato che il comportamento di Polygen riguardo alle EOL è diverso quando si usa l'opzione -o DEST: in questo caso il carattere EOL è quello nativo dell'OS.
Che ne pensi?
Secondo me Polygen dovrebbe gestire in maniera diversa le sequenze di fine riga (EOL). Allo stato attuale, sta all'utente specificare se usare
LFoCRLFtramite le sequenze escape\ne\r.Oggigiorno, il modo in cui vengono usate le EOL è cambiato dall'epoca in cui Polygen fu creato. Oggi l'aspettativa è che
\nproduca la sequenza EOL nativa del sistema operativo (CRLFsu Windows,LFnegli altri OS).Allo stato attuale, le EOL creano problemi quando si reindirizza l'output di Polygen ad altre applicazioni. Per esempio, pandoc si aspetta un EOL nativo, e in Windows ignorerà le sequenze
LFoCR; lo stesso vale per la maggior parte delle applicazioni moderne.Il problema è che, attualmente, chi scrive grammatiche per Linux o Mac tende a usare
\nper le nuove righe, mentre chi le scrive per Windows tende a usare\r\n— in realtà, nella maggior parte dei casi viene usato solo\n, ma in alcuni contesti di Windows è necessario usare\r\nper preservare la nuova riga (p.es: markdown e altri formati di testo).La soluzione ideale, a mio avviso sarebbe questa:
\ndovrebbe essere interpretata da Polygen come EOL nativa.\rdovrebbe essere deprecata, ma preservata per ragioni di retrocompatibilità, e trattata come se fosse\n.\r\ndovrebbero essere trattate come un singolo\n(per evitare che una interruzione di riga venga interpretata come doppia)-eol lfper imporre\n = LF(possibili valori per-eol:lf|crlf|cr).Quest'ultima opzione si rivelerebbe fondamentale nella creazione di script Shell o Batch, dove è necessario usare
\ne\r\nrispettivamente, a prescindere dall'OS su cui si sta lavorando.In teoria, oggi
CRnon viene più usato come carattere EOL, veniva usato solo dai primi OS del Machintosh, ma vale comunque la pena di offrire la possibilità di utilizzarlo tramite opzioni riga di comando.Praticamente, Polygen dovrebbe normalizzare i caratteri EOL nel suo output — convertendo tutte le occorrenze di
\ne\rnel carattere EOL nativo, o in quello specificato tramite opzioni, e normalizzare anche eventuali caratteri EOL introdotti tramite Ascii escapes (\010e\013).Ho altresì notato che il comportamento di Polygen riguardo alle EOL è diverso quando si usa l'opzione
-o DEST: in questo caso il carattere EOL è quello nativo dell'OS.Che ne pensi?