-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Unicode Escapes (\uhhhh) #9
Comments
Guarda, ci stavo pensando ancora anni fa e l'avevo pure cominciato ad
implementare, ma non l'ho mai raccontato. Pensavo proprio di aggiungere
questa feature.
E' abbastanza semplice: basta lexare la sequenza e poi convertire dall'AST
usando una libreria per unicode.
Ci sono già gli escape ASCII in Polygen, che 15 anni fa mi sembravano
sufficienti per rappresentare byte qualunque, quindi permettono
ipoteticamente di generare binari qualunque, ma le escape unicode sono
ancora meglio.
Il giorno 16 gennaio 2018 10:05, Tristano Ajmone <notifications@github.com>
ha scritto:
… Sarebbe possibile implementare nella prossima release di Polygen il
support per Unicode escape sequences?
Es: \u262E -> "☮"
Adottando la notazione delle C escape sequences
<https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences>:
\uhhhh e \Uhhhhhhhh (dove *hhhh* ed *hhhhhhhh* sono numeri esadecimali a
4 e 8 cifre).
In teoria dovrebbe potersi implementare senza dover riscrivere porzioni
enormi del codice, se l'output sarà in UTF-8 — che usa un solo byte per i
caratteri Ascii, e 2 o più caratteri per quelli Unicode (e non richede il
BOM).
Allo stato attuale, la presenza di caratteri Unicode nei commenti non
genera problemi con Polygen (ho inserito tra i commenti frasi in ebraico ed
arabo e polygen le ignora). Deduco che nel contesto dei commenti il parser
li considera mere sequenze di byte su cui non fa controlli di alcun tipo.
Il vantaggio di usare escapes anziché HTML entities, oltre ad essere
fruibili in output che non sia html, è che i caratteri generati con escapes
possono essere resi maiuscoli dal backslash. Es:
(* Le entità HTML non possono essere rese maiuscole con backslash. *)(* I caratteri creati con Ascii escape sequence sì. *)
S ::= "è" (* => "è" *) "\n"
"È" (* => "È" *) "\n"
"\232" (* => "è" *) "\n"
\ "\232" (* => "È" *) ;
Il trucco di sopra funziona ovviamente solo con le lettere, ma include
anche le lettere accentate (non so se sia implementato manualmente o da una
libreria OCaml che si occupa delle stringhe e degli escapes, in
quest'ultimo caso una libreria Unicode potrebbe estendere il trucchetto ad
altri alfabeti che contemplano l'uso di maiuscole).
I caratteri dell'esempio sopra ("è" ed "È") sono ancora nel range 0-255,
rappresentabili da un singolo carattere (rientrano nell'ambito Ascii
"esteso", per così dire). Se Polygen fosse in grado di emettere caratteri
Unicode con due o più byte, secondo UTF-8, si dovrebbe poter generare
qualsiasi carattere.
Non so come funziona in OCaml, ma immagino vi siano delle librerie per
gestire questo.
È vero che è attualmente possibile generare qualsiasi carattere Unicode
usando la sua rappresentazione come entità &#??; o &#x??; (es. ק o
ק = ק), ma questo ne limita l'uso all'HTML. (in realtà, facendo il
piping dell output su pandoc impostandolo per la conversione a formato
plain, questi convertirà le entità in caratteri Unicode, usando UTF-8, e
può quindi essere usato come un filtro)
Per chi usa Polygen con la lingua italiana, il limite attuale dei
caratteri Ascii (sia dentro che fuori le stringhe) rende problematico l'uso
di lettere accentate (e ne usiamo tantissime). Se fosse possibile usare
caratteri Unicode nel testo (dentro e fuori le stringhe) — o anche solo le
lettere accentate (che sono pur sempre di un byte) — sarebbe stupendo, ma
credo che questo implicherebbe modifiche al parser dato che il sorgente
andrebbe interpretato con UCS2, usando due byte per ogni carattere — a meno
che, ovviamente, il tutto non possa essere risolto tramite l'aggiornamento
di una libreria.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#9>, or mute the thread
<https://github.com/notifications/unsubscribe-auth/ACcZxpr4LBGlHRcCzLOHV8QZ18JRKz8Qks5tLGY9gaJpZM4RfcUm>
.
|
È verissimo, e sei stato lungimirante già all'epoca. Ho appena pubblicato un tutorial, con tanto di gramamtiche sorgenti da scaricare, che dimostra come produrre testo arabo con Polygen: Il tutorial presenta due approcci:
Quindi, ad oggi è possibile genreare Unicode con Polygen. Certo, è un po' macchinoso, ma basterebbe un piccolo applicativo per convertire le stringhe in ASCII escapes (una cosa realizzabile in mezz'ora, con tanto di GUI) per rendere la cosa una passeggiata. Scrivendo questo tutorial mi è venuto in mente che l'implementazione delle escape Unicode dovrebbe produrre i corrispondenti byte UTF-8 (e non i codepoint Unicode). |
Non serve nessun applicativo, tranquillo lo faccio io con uno zucchero
sintattico
Il giorno dom 21 gen 2018 alle 19:26 Tristano Ajmone <
notifications@github.com> ha scritto:
… Ci sono già gli escape ASCII in Polygen, che 15 anni fa mi sembravano
sufficienti per rappresentare byte qualunque, quindi permettono
ipoteticamente di generare binari qualunque, ma le escape unicode sono
ancora meglio.
È verissimo, e sei stato lungimirante già all'epoca. Ho appena pubblicato
un tutorial, con tanto di gramamtiche sorgenti da scaricare, che dimostra
come produrre testo arabo con Polygen:
- https://github.com/tajmone/Polygen/wiki/Unicode
Il tutorial presenta due approcci:
1. Usando le entità SGML
2. Usando gli escape ASCII per creare un stream di byte UTF-8
Quindi, ad oggi è possibile genreare Unicode con Polygen.
Certo, è un po' macchinoso, ma basterebbe un piccolo applicativo per
convertire le stringhe in ASCII escapes (una cosa realizzabile in mezz'ora,
con tanto di GUI) per rendere la cosa una passeggiata.
Scrivendo questo tutorial mi è venuto in mente che l'implementazione delle
escape Unicode dovrebbe produrre i corrispondenti byte UTF-8 (e non i
codepoint Unicode).
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#9 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/ACcZxt2HfMOGVYWpS58VSODd0-vF_N6qks5tM4FCgaJpZM4RfcUm>
.
|
Sarebbe possibile implementare nella prossima release di Polygen il support per Unicode escape sequences?
Es:
\u262E
-> "☮"Adottando la notazione delle C escape sequences:
\uhhhh
e\Uhhhhhhhh
(dove hhhh ed hhhhhhhh sono numeri esadecimali a 4 e 8 cifre).In teoria dovrebbe potersi implementare senza dover riscrivere porzioni enormi del codice, se l'output sarà in UTF-8 — che usa un solo byte per i caratteri Ascii, e 2 o più caratteri per quelli Unicode (e non richede il BOM).
Allo stato attuale, la presenza di caratteri Unicode nei commenti non genera problemi con Polygen (ho inserito tra i commenti frasi in ebraico ed arabo e polygen le ignora). Deduco che nel contesto dei commenti il parser li considera mere sequenze di byte su cui non fa controlli di alcun tipo.
Il vantaggio di usare escapes anziché HTML entities, oltre ad essere fruibili in output che non sia html, è che i caratteri generati con escapes possono essere resi maiuscoli dal backslash. Es:
Il trucco di sopra funziona ovviamente solo con le lettere, ma include anche le lettere accentate (non so se sia implementato manualmente o da una libreria OCaml che si occupa delle stringhe e degli escapes, in quest'ultimo caso una libreria Unicode potrebbe estendere il trucchetto ad altri alfabeti che contemplano l'uso di maiuscole).
I caratteri dell'esempio sopra ("è" ed "È") sono ancora nel range 0-255, rappresentabili da un singolo carattere (rientrano nell'ambito Ascii "esteso", per così dire). Se Polygen fosse in grado di emettere caratteri Unicode con due o più byte, secondo UTF-8, si dovrebbe poter generare qualsiasi carattere.
Non so come funziona in OCaml, ma immagino vi siano delle librerie per gestire questo.
È vero che è attualmente possibile generare qualsiasi carattere Unicode usando la sua rappresentazione come entità
&#??;
o&#x??;
(es.ק
oק
= ק), ma questo ne limita l'uso all'HTML. (in realtà, facendo il piping dell output su pandoc impostandolo per la conversione a formatoplain
, questi convertirà le entità in caratteri Unicode, usando UTF-8, e può quindi essere usato come un filtro)Per chi usa Polygen con la lingua italiana, il limite attuale dei caratteri Ascii (sia dentro che fuori le stringhe) rende problematico l'uso di lettere accentate (e ne usiamo tantissime). Se fosse possibile usare caratteri Unicode nel testo (dentro e fuori le stringhe) — o anche solo le lettere accentate (che sono pur sempre di un byte) — sarebbe stupendo, ma credo che questo implicherebbe modifiche al parser dato che il sorgente andrebbe interpretato con UCS2, usando due byte per ogni carattere — a meno che, ovviamente, il tutto non possa essere risolto tramite l'aggiornamento di una libreria.
The text was updated successfully, but these errors were encountered: