From 218e1b4b3ed517f1440065c6c01df7e2b8bcff1e Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sun, 16 Feb 2014 18:50:30 +0100 Subject: 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. --- sys/src/cmd/mothra/rdhtml.c | 34 +++++++++++++++++++++------------- 1 file 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; -- cgit v1.2.3