Hello community, here is the log from the commit of package xiterm checked in at Fri Feb 2 16:17:14 CET 2007. -------- --- xiterm/xiterm.changes 2006-08-15 14:29:40.000000000 +0200 +++ /mounts/work_src_done/STABLE/xiterm/xiterm.changes 2007-02-02 14:50:08.000000000 +0100 @@ -1,0 +2,6 @@ +Fri Feb 2 14:47:52 CET 2007 - uli@suse.de + +- fbiterm: add support for combining characters (fixes Thai, Lao), + remove getenv() call from inner loop, minor optimizations + +------------------------------------------------------------------- New: ---- fbiterm-combine-optimize.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xiterm.spec ++++++ --- /var/tmp/diff_new_pack.Gh3220/_old 2007-02-02 16:16:51.000000000 +0100 +++ /var/tmp/diff_new_pack.Gh3220/_new 2007-02-02 16:16:51.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package xiterm (Version 0.5.20040304) # -# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2007 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine # package are under the same license as the package itself. # @@ -24,12 +24,12 @@ %define xincludes /usr/X11R6/include %define xlibraries /usr/X11R6/%{_lib} %endif -License: IBM Public License, Other License(s), see package +License: IBM Public License Group: System/X11/Terminals Autoreqprov: on Provides: locale(xorg-x11:ja;ko;zh) Version: 0.5.20040304 -Release: 43 +Release: 77 # cvs -d:pserver:anonymous@www.openi18n.org:/cvsroot login (no password to login) # cvs -d:pserver:anonymous@www.openi18n.org:/cvsroot co iterm # tar jcvf iterm-0.5.20040304.tar.bz2 iterm @@ -42,6 +42,7 @@ Patch4: enable-scrollbar.patch Patch5: fbiterm-exit-code.dif Patch6: fbiterm-devconsole.dif +Patch7: fbiterm-combine-optimize.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build Summary: Internationalized Terminal Emulator for X11 @@ -149,6 +150,7 @@ %patch4 -p 1 -b .enable-scrollbar %patch5 -p 0 -b .exit-code %patch6 -p 0 +%patch7 find . -name CVS -type d | xargs rm -rf find . -type f | xargs chmod u+w for i in INSTALL* README* @@ -306,6 +308,9 @@ /usr/include/Iterm*.h %changelog -n xiterm +* Fri Feb 02 2007 - uli@suse.de +- fbiterm: add support for combining characters (fixes Thai, Lao), + remove getenv() call from inner loop, minor optimizations * Tue Aug 15 2006 - mfabian@suse.de - prefer fonts in /usr/share/fonts over fonts in /usr/lib/X11/fonts (move to X11R7). ++++++ fbiterm-combine-optimize.patch ++++++ --- unix/fbiterm/src/fb_true16.c +++ unix/fbiterm/src/fb_true16.c @@ -92,23 +92,27 @@ return; } +extern char* iterm_bold; + void fb_true16_draw_char (unsigned char *dst, int offset, unsigned char *bits, int cell_width, const xCharInfo *info, - const TermFont *base) + const TermFont *base, int blank) { int x, y; int height; unsigned short *dst16; height = (int)base->ascent - (int)info->ascent; +#if 0 /* redundant */ for (y = 0; y < height; y++) { dst16 = (unsigned short *) (dst + offset); for (x = 0; x < cell_width; x++) *dst16++ = bgcmap; dst += pIterm->fb->line_length; } +#endif height = (int)info->ascent + (int)info->descent; for (y = 0; y < height; y++) @@ -121,7 +125,8 @@ c = cc = (c1 << 24) + (c2 << 16) + (c3 << 8) + c4; dst16 = (unsigned short *) (dst + offset); for (x = 0; x < info->leftSideBearing; x++) { - *dst16++ = bgcmap; + if(blank) *dst16 = bgcmap; + dst16++; } for (; x < info->rightSideBearing; x++, dst16++) { @@ -135,7 +140,7 @@ *(dst16) = boldcmap; else { - if (getenv ("ITERM_BOLD") != NULL) + if (iterm_bold) *(dst16) = boldcmap; else *(dst16) = fgcmap; @@ -143,17 +148,18 @@ } else { - *(dst16) = bgcmap; + if(blank) *(dst16) = bgcmap; } } c <<= 1; } - for (; x < cell_width; x++) - *dst16++ = bgcmap; + for (; x < cell_width; x++, dst16++) + if(blank) *dst16 = bgcmap; + dst += pIterm->fb->line_length; } height = (int)base->descent - (int)info->descent; - for (y = 0; y < height; y++) { + if(blank) for (y = 0; y < height; y++) { dst16 = (unsigned short *) (dst + offset); for (x = 0; x < cell_width; x++) *dst16++ = bgcmap; @@ -172,6 +178,7 @@ mbstate_t ps; const xCharInfo *cinfo; const TermFont *base; + int blank; if (pIterm->lock) return; @@ -199,6 +206,7 @@ wchar_t wc; int wlen; + blank = 1; if (i >= length) break; @@ -220,14 +228,20 @@ bits = get_glyph2 (pIterm->mb_font, wc, &height, &cinfo); wlen = wcwidth (wc); w = pIterm->asc_font->cell_width * (wlen > 0 ? wlen : 1); + if(wlen == 0 && startx >= 2 * w) { + startx -= (2 * w); + blank = 0; + } } } else break; + //printf("%s: w %d wcwidth %d blank %d bits %x\n",__FUNCTION__,w,wcwidth(wc),blank,(unsigned int*)bits); + i += len; dst = (char *) (pIterm->fb->buf + starty); - fb_true16_draw_char (dst, startx, bits, w, cinfo, base); + fb_true16_draw_char (dst, startx, bits, w, cinfo, base, blank); startx += (2 * w); } return; --- unix/fbiterm/src/fb_true24.c +++ unix/fbiterm/src/fb_true24.c @@ -93,11 +93,13 @@ return; } +extern char* iterm_bold; + void fb_true24_draw_char (unsigned char *dst, int offset, unsigned char *bits, int cell_width, const xCharInfo *info, - const TermFont *base) + const TermFont *base, int blank) { int x, y; int height; @@ -107,6 +109,7 @@ * this shouldn't work on some architectures because of word boundary!! */ +#if 0 /* redundant */ height = (int)base->ascent - (int)info->ascent; for (y = 0; y < height; y++) { for (x = 0; x < cell_width; x++) { @@ -115,6 +118,7 @@ } dst += pIterm->fb->line_length; } +#endif height = info->ascent + info->descent; for (y = 0; y < height; y++) @@ -127,7 +131,7 @@ c = cc = (c1 << 24) + (c2 << 16) + (c3 << 8) + c4; for (x = 0; x < info->leftSideBearing; x++) { dst24 = (unsigned int *) (dst + offset + 3 * x); - *dst24 = bgcmap; + if(blank) *dst24 = bgcmap; } for (; x < info->rightSideBearing; x++) { @@ -143,7 +147,7 @@ *(dst24) = boldcmap; else { - if (getenv ("ITERM_BOLD") != NULL) + if (iterm_bold) *(dst24) = boldcmap; else *(dst24) = fgcmap; @@ -151,19 +155,19 @@ } else { - *(dst24) = bgcmap; + if(blank) *(dst24) = bgcmap; } } c <<= 1; } for (; x < cell_width; x++) { dst24 = (unsigned int *) (dst + offset + 3 * x); - *dst24 = bgcmap; + if(blank) *dst24 = bgcmap; } dst += pIterm->fb->line_length; } height = base->descent - info->descent; - for (y = 0; y < height; y++) { + if(blank) for (y = 0; y < height; y++) { for (x = 0; x < cell_width; x++) { dst24 = (unsigned int *) (dst + offset + 3 * x); *dst24 = bgcmap; @@ -183,6 +187,7 @@ mbstate_t ps; const xCharInfo *cinfo; const TermFont *base; + int blank; if (pIterm->lock) return; @@ -210,6 +215,7 @@ wchar_t wc; int wlen; + blank = 1; if (i >= length) break; @@ -231,6 +237,10 @@ bits = get_glyph2 (pIterm->mb_font, wc, &height, &cinfo); wlen = wcwidth (wc); w = pIterm->asc_font->cell_width * (wlen > 0 ? wlen : 1); + if(wlen == 0 && startx >= 3 * w) { + startx -= (3 * w); + blank = 0; + } } } else @@ -238,7 +248,7 @@ i += len; dst = (char *) (pIterm->fb->buf + starty); - fb_true24_draw_char (dst, startx, bits, w, cinfo, base); + fb_true24_draw_char (dst, startx, bits, w, cinfo, base, blank); startx += (3 * w); } return; --- unix/fbiterm/src/fb_true8.c +++ unix/fbiterm/src/fb_true8.c @@ -82,23 +82,27 @@ return; } +extern char* iterm_bold; + void fb_true8_draw_char (unsigned char *dst, int offset, unsigned char *bits, int cell_width, const xCharInfo *info, - const TermFont *base) + const TermFont *base, int blank) { int x, y; int height; unsigned char *dst8; height = (int)base->ascent - (int)info->ascent; +#if 0 /* redundant */ for (y = 0; y < height; y++) { dst8 = (unsigned char *) (dst + offset); for (x = 0; x < cell_width; x++) *dst8++ = (char) bgcmap; dst += pIterm->fb->line_length; } +#endif height = info->ascent + info->descent; for (y = 0; y < height; y++) @@ -111,7 +115,8 @@ c = cc = (c1 << 24) + (c2 << 16) + (c3 << 8) + c4; dst8 = (unsigned char *) (dst + offset); for (x = 0; x < info->leftSideBearing; x++) { - *dst8++ = (char) bgcmap; + if(blank) *dst8 = (char) bgcmap; + dst8++; } for (; x < info->rightSideBearing; x++, dst8++) { @@ -125,23 +130,24 @@ *(dst8) = (char) fgcmap | 0x08; else { - if (getenv ("ITERM_BOLD") != NULL) + if (iterm_bold) *(dst8) = (char) fgcmap | 0x08; else *(dst8) = (char) fgcmap; } } else - *(dst8) = (char) bgcmap; + if(blank) *(dst8) = (char) bgcmap; } c <<= 1; } - for (; x < cell_width; x++) - *dst8++ = (char) bgcmap; + for (; x < cell_width; x++, dst8++) + if(blank) *dst8 = (char) bgcmap; + dst += pIterm->fb->line_length; } height = base->descent - info->descent; - for (y = 0; y < height; y++) { + if(blank) for (y = 0; y < height; y++) { dst8 = (unsigned char *) (dst + offset); for (x = 0; x < cell_width; x++) *dst8++ = (char) bgcmap; @@ -160,6 +166,7 @@ mbstate_t ps; const xCharInfo *cinfo; const TermFont *base; + int blank; if (pIterm->lock) return; @@ -187,6 +194,7 @@ wchar_t wc; int wlen; + blank = 1; if (i >= length) break; @@ -208,6 +216,10 @@ bits = get_glyph2 (pIterm->mb_font, wc, &height, &cinfo); wlen = wcwidth (wc); w = pIterm->asc_font->cell_width * (wlen > 0 ? wlen : 1); + if(wlen == 0 && startx >= w) { + startx -= w; + blank = 0; + } } } else @@ -215,7 +227,7 @@ i += len; dst = (char *) (pIterm->fb->buf + starty); - fb_true8_draw_char (dst, startx, bits, w, cinfo, base); + fb_true8_draw_char (dst, startx, bits, w, cinfo, base, blank); startx += w; } return; --- unix/fbiterm/src/fbiterm.c +++ unix/fbiterm/src/fbiterm.c @@ -63,6 +63,8 @@ exit (0); } +char* iterm_bold = 0; + int main (int argc, char *argv[]) { @@ -71,6 +73,8 @@ int fontsize = 0; char **prog_args; + iterm_bold = getenv("ITERM_BOLD"); + setlocale (LC_ALL, ""); /* allocate memory for Iterm structure */ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org