Implement italic font support.
This commit is contained in:
		
							
								
								
									
										1
									
								
								TODO
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								TODO
									
									
									
									
									
								
							| @@ -4,7 +4,6 @@ vt emulation | ||||
| * implement BCE right | ||||
| * color definition in CSI | ||||
| 	* implement CSI parsing | ||||
| * implement real italic | ||||
| * make the keypad keys really work | ||||
| 	* kf0 .. kf44 | ||||
| 	* kend, kel, kent, kfnd, ked, kext | ||||
|   | ||||
| @@ -1,6 +1,8 @@ | ||||
|  | ||||
| #define FONT "-*-*-medium-r-*-*-*-120-75-75-*-60-*-*" | ||||
| #define BOLDFONT "-*-*-bold-r-*-*-*-120-75-75-*-60-*-*" | ||||
| /* If italic is not availbel, fall back to bold. */ | ||||
| #define ITALICFONT "-*-*-medium-o-*-*-*-120-75-75-*-60-*-*," BOLDFONT | ||||
|  | ||||
| /* Space in pixels around the terminal buffer */ | ||||
| #define BORDER 2 | ||||
| @@ -54,7 +56,7 @@ static const char *colorname[] = { | ||||
|       key,        mask,  output */ | ||||
| static Key key[] = { | ||||
| 	{ XK_BackSpace, XK_NO_MOD, "\177" }, | ||||
|    	{ XK_Insert,    XK_NO_MOD, "\033[2~" }, | ||||
| 	{ XK_Insert,    XK_NO_MOD, "\033[2~" }, | ||||
| 	{ XK_Delete,    XK_NO_MOD, "\033[3~" }, | ||||
| 	{ XK_Home,      XK_NO_MOD, "\033[1~" }, | ||||
| 	{ XK_End,       XK_NO_MOD, "\033[4~" }, | ||||
|   | ||||
							
								
								
									
										30
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								st.c
									
									
									
									
									
								
							| @@ -76,6 +76,7 @@ enum glyph_attribute { | ||||
| 	ATTR_UNDERLINE = 2, | ||||
| 	ATTR_BOLD      = 4, | ||||
| 	ATTR_GFX       = 8, | ||||
| 	ATTR_ITALIC    = 16, | ||||
| }; | ||||
|  | ||||
| enum cursor_movement { | ||||
| @@ -238,7 +239,7 @@ typedef struct { | ||||
| 		short lbearing; | ||||
| 		short rbearing; | ||||
| 		XFontSet set; | ||||
| 	} font, bfont; | ||||
| 	} font, bfont, ifont; | ||||
| } DC; | ||||
|  | ||||
| static void die(const char*, ...); | ||||
| @@ -1122,8 +1123,8 @@ tsetattr(int *attr, int l) { | ||||
| 		case 1: | ||||
| 			term.c.attr.mode |= ATTR_BOLD; | ||||
| 			break; | ||||
| 		case 3: /* enter standout (highlight) mode TODO: make it italic */ | ||||
| 			term.c.attr.mode |= ATTR_REVERSE; | ||||
| 		case 3: /* enter standout (highlight) */ | ||||
| 			term.c.attr.mode |= ATTR_ITALIC; | ||||
| 			break; | ||||
| 		case 4: | ||||
| 			term.c.attr.mode |= ATTR_UNDERLINE; | ||||
| @@ -1134,8 +1135,8 @@ tsetattr(int *attr, int l) { | ||||
| 		case 22: | ||||
| 			term.c.attr.mode &= ~ATTR_BOLD; | ||||
| 			break; | ||||
| 		case 23: /* leave standout (highlight) mode TODO: make it italic */ | ||||
| 			term.c.attr.mode &= ~ATTR_REVERSE; | ||||
| 		case 23: /* leave standout (highlight) mode */ | ||||
| 			term.c.attr.mode &= ~ATTR_ITALIC; | ||||
| 			break; | ||||
| 		case 24: | ||||
| 			term.c.attr.mode &= ~ATTR_UNDERLINE; | ||||
| @@ -1886,14 +1887,20 @@ xgetfontinfo(XFontSet set, int *ascent, int *descent, short *lbearing, short *rb | ||||
| } | ||||
|  | ||||
| void | ||||
| initfonts(char *fontstr, char *bfontstr) { | ||||
| 	if((dc.font.set = xinitfont(fontstr)) == NULL || | ||||
| 	   (dc.bfont.set = xinitfont(bfontstr)) == NULL) | ||||
| 		die("Can't load font %s\n", dc.font.set ? BOLDFONT : FONT); | ||||
| initfonts(char *fontstr, char *bfontstr, char *ifontstr) { | ||||
| 	if((dc.font.set = xinitfont(fontstr)) == NULL) | ||||
| 		die("Can't load font %s\n", fontstr); | ||||
| 	if((dc.bfont.set = xinitfont(bfontstr)) == NULL) | ||||
| 		die("Can't load bfont %s\n", bfontstr); | ||||
| 	if((dc.ifont.set = xinitfont(ifontstr)) == NULL) | ||||
| 		die("Can't load ifont %s\n", ifontstr); | ||||
|  | ||||
| 	xgetfontinfo(dc.font.set, &dc.font.ascent, &dc.font.descent, | ||||
| 	    &dc.font.lbearing, &dc.font.rbearing); | ||||
| 	xgetfontinfo(dc.bfont.set, &dc.bfont.ascent, &dc.bfont.descent, | ||||
| 	    &dc.bfont.lbearing, &dc.bfont.rbearing); | ||||
| 	xgetfontinfo(dc.ifont.set, &dc.ifont.ascent, &dc.ifont.descent, | ||||
| 	    &dc.ifont.lbearing, &dc.ifont.rbearing); | ||||
| } | ||||
|  | ||||
| void | ||||
| @@ -1927,7 +1934,7 @@ xinit(void) { | ||||
| 	} | ||||
|  | ||||
| 	/* font */ | ||||
| 	initfonts(FONT, BOLDFONT); | ||||
| 	initfonts(FONT, BOLDFONT, ITALICFONT); | ||||
|  | ||||
| 	/* XXX: Assuming same size for bold font */ | ||||
| 	xw.cw = dc.font.rbearing - dc.font.lbearing; | ||||
| @@ -2002,6 +2009,9 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { | ||||
| 		fontset = dc.bfont.set; | ||||
| 	} | ||||
|  | ||||
| 	if(base.mode & ATTR_ITALIC) | ||||
| 		fontset = dc.ifont.set; | ||||
|  | ||||
| 	XSetBackground(xw.dpy, dc.gc, dc.col[bg]); | ||||
| 	XSetForeground(xw.dpy, dc.gc, dc.col[fg]); | ||||
|  | ||||
|   | ||||
							
								
								
									
										10
									
								
								st.info
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								st.info
									
									
									
									
									
								
							| @@ -83,15 +83,16 @@ st| simpleterm, | ||||
| 	op=\E[39;49m, | ||||
| 	pairs#64, | ||||
| 	rc=\E8, | ||||
| 	rs1=\Ec, | ||||
| 	rs2=\E[4l\E>, | ||||
| 	rev=\E[7m, | ||||
| 	ri=\EM, | ||||
| 	ritm=\E[23m, | ||||
| 	rmacs=\E(B, | ||||
| 	rmcup=\E[?1049l, | ||||
| 	rmkx=\E>, | ||||
| #	rmkx=\E>, | ||||
| 	rmso=\E[23m, | ||||
| 	rmul=\E[m, | ||||
| 	rs1=\Ec, | ||||
| 	rs2=\E[4l\E>, | ||||
| 	sc=\E7, | ||||
| 	setab=\E[4%p1%dm, | ||||
| 	setaf=\E[3%p1%dm, | ||||
| @@ -99,9 +100,10 @@ st| simpleterm, | ||||
| 	setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, | ||||
| 	sgr0=\E[0m, | ||||
| 	sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m, | ||||
| 	sitm=\E[3m, | ||||
| 	smacs=\E(0, | ||||
| 	smcup=\E[?1049h, | ||||
| 	smkx=\E=, | ||||
| #	smkx=\E=, | ||||
| 	smso=\E[3m, | ||||
| 	smul=\E[4m, | ||||
| 	tbc=\E[3g, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user