Skip to content

Normalizzazione EOL: Sia "\r" che "\n" dovrebbero produrre EOL nativo #18

Description

@tajmone

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?

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions