⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stringwidth.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <draw.h>int_stringnwidth(Font *f, char *s, Rune *r, int len){	int wid, twid, n, max, l;	char *name;	enum { Max = 64 };	ushort cbuf[Max];	Rune rune, **rptr;	char *subfontname, **sptr;	Font *def;	if(s == nil){		s = "";		sptr = nil;	}else		sptr = &s;	if(r == nil){		r = L"";		rptr = nil;	}else		rptr = &r;	twid = 0;	while(len>0 && (*s || *r)){		max = Max;		if(len < max)			max = len;		n = 0;		while((l = cachechars(f, sptr, rptr, cbuf, max, &wid, &subfontname)) <= 0){			if(++n > 10){				if(*r)					rune = *r;				else					chartorune(&rune, s);				if(f->name != nil)					name = f->name;				else					name = "unnamed font";				fprint(2, "stringwidth: bad character set for rune 0x%.4ux in %s\n", rune, name);				return twid;			}			if(subfontname){				if(_getsubfont(f->display, subfontname) == 0){					def = f->display->defaultfont;					if(def && f!=def)						f = def;					else						break;				}			}		}		agefont(f);		twid += wid;		len -= l;	}	return twid;}intstringnwidth(Font *f, char *s, int len){	return _stringnwidth(f, s, nil, len);}intstringwidth(Font *f, char *s){	return _stringnwidth(f, s, nil, 1<<24);}Pointstringsize(Font *f, char *s){	return Pt(_stringnwidth(f, s, nil, 1<<24), f->height);}intrunestringnwidth(Font *f, Rune *r, int len){	return _stringnwidth(f, nil, r, len);}intrunestringwidth(Font *f, Rune *r){	return _stringnwidth(f, nil, r, 1<<24);}Pointrunestringsize(Font *f, Rune *r){	return Pt(_stringnwidth(f, nil, r, 1<<24), f->height);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -