Remove the cruft of the user to have to define the different font styles.
This commit is contained in:
		
							
								
								
									
										60
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										60
									
								
								st.c
									
									
									
									
									
								
							@ -336,6 +336,7 @@ static int isfullutf8(char *, int);
 | 
				
			|||||||
static void *xmalloc(size_t);
 | 
					static void *xmalloc(size_t);
 | 
				
			||||||
static void *xrealloc(void *, size_t);
 | 
					static void *xrealloc(void *, size_t);
 | 
				
			||||||
static void *xcalloc(size_t nmemb, size_t size);
 | 
					static void *xcalloc(size_t nmemb, size_t size);
 | 
				
			||||||
 | 
					static char *smstrcat(char *, ...);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void (*handler[LASTEvent])(XEvent *) = {
 | 
					static void (*handler[LASTEvent])(XEvent *) = {
 | 
				
			||||||
	[KeyPress] = kpress,
 | 
						[KeyPress] = kpress,
 | 
				
			||||||
@ -393,6 +394,44 @@ xcalloc(size_t nmemb, size_t size) {
 | 
				
			|||||||
	return p;
 | 
						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
 | 
					int
 | 
				
			||||||
utf8decode(char *s, long *u) {
 | 
					utf8decode(char *s, long *u) {
 | 
				
			||||||
	uchar c;
 | 
						uchar c;
 | 
				
			||||||
@ -2017,11 +2056,22 @@ xinitfont(Font *f, char *fontstr) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
initfonts(char *fontstr, char *bfontstr, char *ifontstr, char *ibfontstr) {
 | 
					initfonts(char *fontstr) {
 | 
				
			||||||
 | 
						char *fstr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	xinitfont(&dc.font, fontstr);
 | 
						xinitfont(&dc.font, fontstr);
 | 
				
			||||||
	xinitfont(&dc.bfont, bfontstr);
 | 
					
 | 
				
			||||||
	xinitfont(&dc.ifont, ifontstr);
 | 
						fstr = smstrcat(fontstr, ":weight=bold", NULL);
 | 
				
			||||||
	xinitfont(&dc.ibfont, ibfontstr);
 | 
						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
 | 
					void
 | 
				
			||||||
@ -2037,7 +2087,7 @@ xinit(void) {
 | 
				
			|||||||
	xw.vis = XDefaultVisual(xw.dpy, xw.scr);
 | 
						xw.vis = XDefaultVisual(xw.dpy, xw.scr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* font */
 | 
						/* font */
 | 
				
			||||||
	initfonts(FONT, BOLDFONT, ITALICFONT, ITALICBOLDFONT);
 | 
						initfonts(FONT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* XXX: Assuming same size for bold font */
 | 
						/* XXX: Assuming same size for bold font */
 | 
				
			||||||
	xw.cw = dc.font.rbearing - dc.font.lbearing;
 | 
						xw.cw = dc.font.rbearing - dc.font.lbearing;
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user