本文整理汇总了C++中chartorune函数的典型用法代码示例。如果您正苦于以下问题:C++ chartorune函数的具体用法?C++ chartorune怎么用?C++ chartorune使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了chartorune函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: _fmtcpy
int
_fmtcpy(Fmt *f, void *vm, int n, int sz)
{
Rune *rt, *rs, r;
char *t, *s, *m, *me;
ulong fl;
int nc, w;
m = vm;
me = m + sz;
w = f->width;
fl = f->flags;
if((fl & FmtPrec) && n > f->prec)
n = f->prec;
if(f->runes){
if(!(fl & FmtLeft) && _rfmtpad(f, w - n) < 0)
return -1;
rt = f->to;
rs = f->stop;
for(nc = n; nc > 0; nc--){
r = *(uchar*)m;
if(r < Runeself)
m++;
else if((me - m) >= UTFmax || fullrune(m, me-m))
m += chartorune(&r, m);
else
break;
FMTRCHAR(f, rt, rs, r);
}
f->nfmt += rt - (Rune *)f->to;
f->to = rt;
if(m < me)
return -1;
if(fl & FmtLeft && _rfmtpad(f, w - n) < 0)
return -1;
}else{
if(!(fl & FmtLeft) && _fmtpad(f, w - n) < 0)
return -1;
t = f->to;
s = f->stop;
for(nc = n; nc > 0; nc--){
r = *(uchar*)m;
if(r < Runeself)
m++;
else if((me - m) >= UTFmax || fullrune(m, me-m))
m += chartorune(&r, m);
else
break;
FMTRUNE(f, t, s, r);
}
f->nfmt += t - (char *)f->to;
f->to = t;
if(fl & FmtLeft && _fmtpad(f, w - n) < 0)
return -1;
}
return 0;
}
开发者ID:AndreasBriese,项目名称:node9,代码行数:57,代码来源:dofmt.c
示例2: equtf
/*
* Do p and q point at equal utf codes
*/
int
equtf(uint8_t *p, uint8_t *q)
{
Rune pr, qr;
if(*p!=*q)
return 0;
chartorune(&pr, (char*)p);
chartorune(&qr, (char*)q);
return pr == qr;
}
开发者ID:dancrossnyc,项目名称:harvey,代码行数:14,代码来源:glob.c
示例3: strncmpcanon
static int strncmpcanon(const char *a, const char *b, int n)
{
Rune ra, rb;
int c;
while (n--) {
if (!*a) return -1;
if (!*b) return 1;
a += chartorune(&ra, a);
b += chartorune(&rb, b);
c = canon(ra) - canon(rb);
if (c)
return c;
}
return 0;
}
开发者ID:MajenkoLibraries,项目名称:MuJS,代码行数:15,代码来源:regexp.c
示例4: memimagestring
Point
memimagestring(Memimage *b, Point p, Memimage *color, Point cp, Memsubfont *f, char *cs)
{
int w, width;
uchar *s;
Rune c;
Fontchar *i;
s = (uchar*)cs;
for(; (c=*s); p.x+=width, cp.x+=width){
width = 0;
if(c < Runeself)
s++;
else{
w = chartorune(&c, (char*)s);
if(w == 0){
s++;
continue;
}
s += w;
}
if(c >= f->n)
continue;
// i = f->info+c;
i = &(f->info[c]);
width = i->width;
memdraw(b, Rect(p.x+i->left, p.y+i->top, p.x+i->left+(i[1].x-i[0].x), p.y+i->bottom),
color, cp, f->bits, Pt(i->x, i->top), SoverD);
}
return p;
}
开发者ID:0intro,项目名称:drawterm,代码行数:31,代码来源:string.c
示例5: Str_search
V7_PRIVATE enum v7_err Str_search(struct v7_c_func_arg *cfa) {
#define v7 (cfa->v7) /* Needed for TRY() macro below */
struct v7_val *arg = cfa->args[0];
struct Resub sub;
int shift = -1, utf_shift = -1;
if (cfa->num_args > 0) {
TRY(check_str_re_conv(v7, &arg, 1));
TRY(regex_check_prog(arg));
if (!re_exec(arg->v.str.prog, arg->fl.fl, cfa->this_obj->v.str.buf, &sub))
shift = sub.sub[0].start - cfa->this_obj->v.str.buf;
}
if (shift > 0) { /* calc shift for UTF-8 */
Rune rune;
const char *str = cfa->this_obj->v.str.buf;
utf_shift = 0;
do {
str += chartorune(&rune, str);
utf_shift++;
} while (str - cfa->this_obj->v.str.buf < shift);
}
v7_push_number(v7, utf_shift);
return V7_OK;
#undef v7
}
开发者ID:amihwan,项目名称:v7,代码行数:25,代码来源:string.c
示例6: getchr
int
getchr(void)
{
char s[UTFmax];
int i;
Rune r;
if(lastc = peekc) {
peekc = 0;
return lastc;
}
if(globp) {
if((lastc=*globp++) != 0)
return lastc;
globp = 0;
return EOF;
}
for(i=0;;) {
if(read(0, s+i, 1) <= 0)
return lastc = EOF;
i++;
if(fullrune(s, i))
break;
}
chartorune(&r, s);
lastc = r;
return lastc;
}
开发者ID:00001,项目名称:plan9port,代码行数:29,代码来源:ed.c
示例7: exportname
/* From Plan 9 to Unix */
char*
exportname(char* name)
{
Rune r;
int nr;
char *uxname;
char *up;
if (name == 0 ||
(utfrune(name, altspc) == 0 &&
utfrune(name,altlparen) == 0 &&
utfrune(name,altrparen) == 0 &&
utfrune(name,altamp) == 0 &&
utfrune(name,altquote) == 0))
return name;
up = uxname = emalloc(strlen(name) + 1);
names[nnames++] = uxname;
while(*name != 0){
nr = chartorune(&r, name);
if (r == altspc)
r = ' ';
if (r == altlparen)
r = '(';
if (r == altrparen)
r = ')';
if (r == altamp)
r = '&';
if (r == altquote)
r = '\'';
up += runetochar(up, &r);
name += nr;
}
*up = 0;
return uxname;
}
开发者ID:CoryXie,项目名称:nix-os,代码行数:36,代码来源:trfs.c
示例8: utfrune
char*
utfrune(char *s, long c)
{
long c1;
Rune r;
int n;
if(c < Runesync) /* not part of utf sequence */
return strchr(s, c);
for(;;) {
c1 = *(uchar*)s;
if(c1 < Runeself) { /* one byte rune */
if(c1 == 0)
return 0;
if(c1 == c)
return s;
s++;
continue;
}
n = chartorune(&r, s);
if(r == c)
return s;
s += n;
}
return 0;
}
开发者ID:0intro,项目名称:drawterm,代码行数:27,代码来源:utfrune.c
示例9: buildmap
static void
buildmap(Biobuf *fp) /* map goes from char name to value to print via *string() */
{
uchar *p, *line, ch[100];
int val;
Rune r;
curmap++;
if(curmap >= NMAP) {
fprint(2, "proof: out of char maps; recompile\n");
exits("charmap");
}
while ((line = Brdline(fp, '\n'))!= 0) {
if (line[0] == '\n')
return;
line[Blinelen(fp)-1] = 0;
scanstr((char *) line, (char *) ch, (char **) &p);
if (ch[0] == '\0') {
fprint(2, "bad map file line '%s'\n", (char*)line);
continue;
}
val = strtol((char *) p, 0, 10);
dprint(2, "buildmap %s (%x %x) %s %d\n", (char*)ch, ch[0], ch[1], (char*)p, val);
chartorune(&r, (char*)ch);
if(utflen((char*)ch)==1 && r<QUICK)
charmap[curmap].quick[r] = val;
else
addmap(curmap, strdup((char *) ch), val); /* put somewhere else */
}
}
开发者ID:grobe0ba,项目名称:plan9front,代码行数:30,代码来源:font.c
示例10: Bgetrune
long
Bgetrune(Biobuf *bp)
{
int c, i;
Rune rune;
char str[UTFmax];
c = Bgetc(bp);
if(c < Runeself) { /* one char */
bp->runesize = 1;
return c;
}
str[0] = c;
for(i=1;;) {
c = Bgetc(bp);
if(c < 0)
return c;
str[i++] = c;
if(fullrune(str, i)) {
bp->runesize = chartorune(&rune, str);
while(i > bp->runesize) {
Bungetc(bp);
i--;
}
return rune;
}
}
}
开发者ID:GregBowyer,项目名称:wmii,代码行数:30,代码来源:bgetrune.c
示例11: fmtstrcpy
/* public helper routine: fmt out a null terminated string already in hand */
int
fmtstrcpy(Fmt *f, char *s)
{
int i, j;
if(!s)
return __fmtcpy(f, "<nil>", 5, 5);
/* if precision is specified, make sure we don't wander off the end */
if(f->flags & FmtPrec){
#ifdef PLAN9PORT
Rune r;
i = 0;
for(j=0; j<f->prec && s[i]; j++)
i += chartorune(&r, s+i);
#else
/* ANSI requires precision in bytes, not Runes */
for(i=0; i<f->prec; i++)
if(s[i] == 0)
break;
j = utfnlen(s, i); /* won't print partial at end */
#endif
return __fmtcpy(f, s, j, i);
}
return __fmtcpy(f, s, utflen(s), strlen(s));
}
开发者ID:fizx,项目名称:libregexp9,代码行数:26,代码来源:dofmt.c
示例12: fmtr
void
fmtr(char *f)
{
int i, w, cw;
Rune r;
static int nstart;
USED(f);
if(nstart)
xprint("%*c", 3*nstart, ' ');
for(i=nstart; i<ndata; )
if(data[i] < Runeself)
onefmtc(data[i++]);
else{
w = chartorune(&r, (char *)data+i);
if(w == 1 || i + w>nread)
onefmtc(data[i++]);
else{
cw = w;
if(i + w>ndata)
cw = ndata - i;
xprint(rfmt[0][0], r);
xprint("%*c", 3*cw-3, ' ');
i += w;
}
}
if(i > ndata)
nstart = i - ndata;
else
nstart = 0;
}
开发者ID:bbarker,项目名称:plan9,代码行数:31,代码来源:xd.c
示例13: dataclass
/*
* classify by initial contents of file
*/
HContents
dataclass(HConnect *hc, char *buf, int n)
{
HContents conts;
Rune r;
int c, m;
for(; n > 0; n -= m){
c = *buf;
if(c < Runeself){
if(c < 32 && c != '\n' && c != '\r' && c != '\t' && c != '\v'){
conts.type = nil;
conts.encoding = nil;
return conts;
}
m = 1;
}else{
m = chartorune(&r, buf);
if(r == Runeerror){
conts.type = nil;
conts.encoding = nil;
return conts;
}
}
buf += m;
}
conts.type = hmkcontent(hc, "text", "plain", nil);
conts.encoding = nil;
return conts;
}
开发者ID:AustenConrad,项目名称:plan-9,代码行数:33,代码来源:content.c
示例14: termscreenputs
static void
termscreenputs(char *s, int n)
{
int i, locked;
Rune r;
char buf[4];
lock(&screenlock);
locked = drawcanqlock();
while(n > 0){
i = chartorune(&r, s);
if(i == 0){
s++;
--n;
continue;
}
memmove(buf, s, i);
buf[i] = 0;
n -= i;
s += i;
screenputc(buf);
}
if(locked)
drawqunlock();
screenflush();
unlock(&screenlock);
}
开发者ID:npe9,项目名称:harvey,代码行数:27,代码来源:term.c
示例15: pstr
static void pstr(const char *s)
{
static const char *HEX = "0123456789ABCDEF";
Rune c;
pc('"');
while (*s) {
s += chartorune(&c, s);
switch (c) {
case '"': ps("\\\""); break;
case '\\': ps("\\\\"); break;
case '\b': ps("\\b"); break;
case '\f': ps("\\f"); break;
case '\n': ps("\\n"); break;
case '\r': ps("\\r"); break;
case '\t': ps("\\t"); break;
default:
if (c < ' ' || c > 127) {
ps("\\u");
pc(HEX[(c>>12)&15]);
pc(HEX[(c>>8)&15]);
pc(HEX[(c>>4)&15]);
pc(HEX[c&15]);
} else {
pc(c); break;
}
}
开发者ID:UIKit0,项目名称:mujs,代码行数:26,代码来源:jsdump.c
示例16: httpfmt
int
httpfmt(Fmt *f)
{
char buf[HMaxWord*2];
Rune r;
char *t, *s;
Htmlesc *l;
s = va_arg(f->args, char*);
for(t = buf; t < buf + sizeof(buf) - 8; ){
s += chartorune(&r, s);
if(r == 0)
break;
for(l = htmlesc; l->name != nil; l++)
if(l->value == r)
break;
if(l->name != nil){
strcpy(t, l->name);
t += strlen(t);
}else
*t++ = r;
}
*t = 0;
return fmtstrcpy(f, buf);
}
开发者ID:00001,项目名称:plan9port,代码行数:25,代码来源:httpfmt.c
示例17: specialout
void
specialout(char *stoken) {
Rune rune;
chartorune(&rune, stoken);
glyphout(rune, stoken, TRUE);
}
开发者ID:aahud,项目名称:harvey,代码行数:7,代码来源:utils.c
示例18: varname
/*
* extract a variable name
*/
static Bufblock*
varname(char **s)
{
Bufblock *b;
char *cp;
Rune r;
int n;
b = newbuf();
cp = *s;
for(;;){
n = chartorune(&r, cp);
if (!WORDCHR(r))
break;
rinsert(b, r);
cp += n;
}
if (b->current == b->start){
SYNERR(-1);
fprint(2, "missing variable name <%s>\n", *s);
freebuf(b);
return 0;
}
*s = cp;
insert(b, 0);
return b;
}
开发者ID:JamesLinus,项目名称:LiteBSD-Ports,代码行数:30,代码来源:varsub.c
示例19: cvttorunes
void
cvttorunes(char *p, int n, Rune *r, int *nb, int *nr, int *nulls)
{
uchar *q;
Rune *s;
int j, w;
/*
* Always guaranteed that n bytes may be interpreted
* without worrying about partial runes. This may mean
* reading up to UTFmax-1 more bytes than n; the caller
* knows this. If n is a firm limit, the caller should
* set p[n] = 0.
*/
q = (uchar*)p;
s = r;
for(j=0; j<n; j+=w){
if(*q < Runeself){
w = 1;
*s = *q++;
}else{
w = chartorune(s, (char*)q);
q += w;
}
if(*s)
s++;
else if(nulls)
*nulls = TRUE;
}
*nb = (char*)q-p;
*nr = s-r;
}
开发者ID:carriercomm,项目名称:plan9-gpl,代码行数:32,代码来源:util.c
示例20: ekeyslave
static void
ekeyslave(int fd)
{
Rune r;
char t[1+UTFmax], k[10];
int kr, kn, w;
if(eforkslave(Ekeyboard) < MAXSLAVE)
return;
kn = 0;
t[0] = Skeyboard;
for(;;){
while(!fullrune(k, kn)){
kr = read(fd, k+kn, sizeof k - kn);
if(kr <= 0)
goto breakout;
kn += kr;
}
w = chartorune(&r, k);
kn -= w;
memmove(t+1, k, w);
memmove(k, &k[w], kn);
if(write(epipe[1], t, sizeof(t)) != sizeof(t))
break;
}
breakout:;
t[0] = MAXSLAVE;
write(epipe[1], t, 1);
_exits(0);
}
开发者ID:grobe0ba,项目名称:plan9front,代码行数:30,代码来源:event.c
注:本文中的chartorune函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论