From 667010554b30c46e35b9cad62edcfa01e37e1576 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Wed, 24 Apr 2013 20:13:18 +0200 Subject: make all the commands agnostic about Rune width. (from sources) --- sys/src/cmd/rc/lex.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'sys/src/cmd/rc/lex.c') diff --git a/sys/src/cmd/rc/lex.c b/sys/src/cmd/rc/lex.c index 369348328..fecd0ec64 100644 --- a/sys/src/cmd/rc/lex.c +++ b/sys/src/cmd/rc/lex.c @@ -166,15 +166,25 @@ addtok(char *p, int val) char* addutf(char *p, int c) { - p = addtok(p, c); - if(twobyte(c)) /* 2-byte escape */ - return addtok(p, advance()); - if(threebyte(c)){ /* 3-byte escape */ + uchar b, m; + int i; + + p = addtok(p, c); /* 1-byte UTF runes are special */ + if(onebyte(c)) + return p; + + m = 0xc0; + b = 0x80; + for(i=1; i < UTFmax; i++){ + if((c&m) == b) + break; p = addtok(p, advance()); - return addtok(p, advance()); + b = m; + m = (m >> 1)|0x80; } return p; } + int lastdol; /* was the last token read '$' or '$#' or '"'? */ int lastword; /* was the last token read a word or compound word terminator? */ -- cgit v1.2.3