Implement italic font support.
							parent
							
								
									56c551e4f4
								
							
						
					
					
						commit
						462a966ee2
					
				
							
								
								
									
										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 | ||||
|  |  | |||
							
								
								
									
										10
									
								
								config.def.h
								
								
								
								
							
							
						
						
									
										10
									
								
								config.def.h
								
								
								
								
							|  | @ -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 | ||||
|  | @ -29,9 +31,9 @@ static const char *colorname[] = { | |||
| 	"magenta", | ||||
| 	"cyan", | ||||
| 	"white", | ||||
| 	 | ||||
| 
 | ||||
| 	[255] = 0, | ||||
| 	 | ||||
| 
 | ||||
| 	/* more colors can be added after 255 to use with DefaultXX */ | ||||
| 	"#cccccc", | ||||
| 	"#333333", | ||||
|  | @ -50,11 +52,11 @@ static const char *colorname[] = { | |||
|    Mask value: | ||||
|    * Use XK_ANY_MOD to match the key no matter modifiers state | ||||
|    * Use XK_NO_MOD to match the key alone (no modifiers) | ||||
|     | ||||
| 
 | ||||
|       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