diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-02-16 18:50:30 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-02-16 18:50:30 +0100 |
commit | 218e1b4b3ed517f1440065c6c01df7e2b8bcff1e (patch) | |
tree | a498fe08202c3689c38a84c2f129724b4c57d0b9 /sys/src/cmd/mothra | |
parent | c54271a588654289596561104a945100adf917c4 (diff) |
mothra: fix unicode rendering for plaintext
we did the utf-8 to unicode conversion in pl_nextc(),
but the plaintext handler uses pl_readc() which only
translates newlines but otherwise returns bytes.
move unicode conversion in pl_readc() fixes it.
Diffstat (limited to 'sys/src/cmd/mothra')
-rw-r--r-- | sys/src/cmd/mothra/rdhtml.c | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/sys/src/cmd/mothra/rdhtml.c b/sys/src/cmd/mothra/rdhtml.c index fe89b1e98..5fbf0c732 100644 --- a/sys/src/cmd/mothra/rdhtml.c +++ b/sys/src/cmd/mothra/rdhtml.c @@ -172,10 +172,14 @@ int pl_bread(Hglob *g){ } /* * Read a character, translating \r\n, \n\r, \r and \n into \n + * convert to runes. */ int pl_readc(Hglob *g){ - int c; static int peek=-1; + char crune[UTFmax+1]; + int c, n; + Rune r; + if(peek!=-1){ c=peek; peek=-1; @@ -192,6 +196,21 @@ int pl_readc(Hglob *g){ if(c!='\r') peek=c; return '\n'; } + + if(c < Runeself) + return c; + + crune[0]=c; + for (n=1; n<=sizeof(crune); n++){ + if(fullrune(crune, n)){ + chartorune(&r, crune); + return r; + } + c=pl_bread(g); + if(c==EOF) + return EOF; + crune[n]=c; + } return c; } void pl_putback(Hglob *g, int c){ @@ -202,7 +221,6 @@ int pl_nextc(Hglob *g){ int c; int n; Rune r; - char crune[UTFmax+1]; if(g->heof) return EOF; if(g->npeekc!=0) return g->peekc[--g->npeekc]; c=pl_readc(g); @@ -220,19 +238,9 @@ int pl_nextc(Hglob *g){ return '<'; } if(c=='>') return ETAG; - if(c==EOF) return c; - for (n=1; n<=sizeof(crune); n++){ - crune[n-1]=c; - if(fullrune(crune, n)){ - chartorune(&r, crune); - return r; - } - c=pl_readc(g); - if(c==EOF) - return EOF; - } return c; } + char *unquot(char *dst, char *src, int len){ char *e; |