|
@@ -336,6 +336,7 @@ static int isfullutf8(char *, int);
|
|
|
static void *xmalloc(size_t);
|
|
|
static void *xrealloc(void *, size_t);
|
|
|
static void *xcalloc(size_t nmemb, size_t size);
|
|
|
+static char *smstrcat(char *, ...);
|
|
|
|
|
|
static void (*handler[LASTEvent])(XEvent *) = {
|
|
|
[KeyPress] = kpress,
|
|
@@ -393,6 +394,44 @@ xcalloc(size_t nmemb, size_t size) {
|
|
|
return p;
|
|
|
}
|
|
|
|
|
|
+char *
|
|
|
+smstrcat(char *src, ...)
|
|
|
+{
|
|
|
+ va_list fmtargs;
|
|
|
+ char *ret, *p, *v;
|
|
|
+ int len, slen, flen;
|
|
|
+
|
|
|
+ len = slen = strlen(src);
|
|
|
+
|
|
|
+ va_start(fmtargs, src);
|
|
|
+ for(;;) {
|
|
|
+ v = va_arg(fmtargs, char *);
|
|
|
+ if(v == NULL)
|
|
|
+ break;
|
|
|
+ len += strlen(v);
|
|
|
+ }
|
|
|
+ va_end(fmtargs);
|
|
|
+
|
|
|
+ p = ret = xmalloc(len+1);
|
|
|
+ memmove(p, src, slen);
|
|
|
+ p += slen;
|
|
|
+
|
|
|
+ va_start(fmtargs, src);
|
|
|
+ for(;;) {
|
|
|
+ v = va_arg(fmtargs, char *);
|
|
|
+ if(v == NULL)
|
|
|
+ break;
|
|
|
+ flen = strlen(v);
|
|
|
+ memmove(p, v, flen);
|
|
|
+ p += flen;
|
|
|
+ }
|
|
|
+ va_end(fmtargs);
|
|
|
+
|
|
|
+ ret[len] = '\0';
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
int
|
|
|
utf8decode(char *s, long *u) {
|
|
|
uchar c;
|
|
@@ -2017,11 +2056,22 @@ xinitfont(Font *f, char *fontstr) {
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-initfonts(char *fontstr, char *bfontstr, char *ifontstr, char *ibfontstr) {
|
|
|
+initfonts(char *fontstr) {
|
|
|
+ char *fstr;
|
|
|
+
|
|
|
xinitfont(&dc.font, fontstr);
|
|
|
- xinitfont(&dc.bfont, bfontstr);
|
|
|
- xinitfont(&dc.ifont, ifontstr);
|
|
|
- xinitfont(&dc.ibfont, ibfontstr);
|
|
|
+
|
|
|
+ fstr = smstrcat(fontstr, ":weight=bold", NULL);
|
|
|
+ xinitfont(&dc.bfont, fstr);
|
|
|
+ free(fstr);
|
|
|
+
|
|
|
+ fstr = smstrcat(fontstr, ":slant=italic,oblique", NULL);
|
|
|
+ xinitfont(&dc.ifont, fstr);
|
|
|
+ free(fstr);
|
|
|
+
|
|
|
+ fstr = smstrcat(fontstr, ":weight=bold:slant=italic,oblique", NULL);
|
|
|
+ xinitfont(&dc.ibfont, fstr);
|
|
|
+ free(fstr);
|
|
|
}
|
|
|
|
|
|
void
|
|
@@ -2037,7 +2087,7 @@ xinit(void) {
|
|
|
xw.vis = XDefaultVisual(xw.dpy, xw.scr);
|
|
|
|
|
|
/* font */
|
|
|
- initfonts(FONT, BOLDFONT, ITALICFONT, ITALICBOLDFONT);
|
|
|
+ initfonts(FONT);
|
|
|
|
|
|
/* XXX: Assuming same size for bold font */
|
|
|
xw.cw = dc.font.rbearing - dc.font.lbearing;
|