Hi,
From: Tomohiro KUBOTA <[EMAIL PROTECTED]>
Subject: Locale Patch Improvement
Date: Wed, 28 Mar 2001 20:50:19 +0900
> I will write a patch to do this soon.
I wrote the patch.
diff -ruN cvs-2001-03-29/src/defaultfont.c locale3/src/defaultfont.c
--- cvs-2001-03-29/src/defaultfont.c Fri Mar 23 15:15:37 2001
+++ locale3/src/defaultfont.c Wed Mar 28 22:48:16 2001
@@ -142,20 +142,29 @@
const struct defaultfont defaultfont[] = {
#ifdef MULTICHAR_SET
- { ENC_EUCJ, "eucj", {NFONT_LIST_EUCJ}, {MFONT_LIST_EUCJ} },
- { ENC_SJIS, "sjis", {NFONT_LIST_EUCJ}, {MFONT_LIST_EUCJ} },
- { ENC_GB, "gb", {NFONT_LIST_GB}, {MFONT_LIST_GB} },
- { ENC_BIG5, "big5", {NFONT_LIST_BIG5}, {MFONT_LIST_BIG5} },
- { ENC_EUCKR, "euckr", {NFONT_LIST_EUCKR}, {MFONT_LIST_EUCKR} },
+ { ENC_EUCJ, "eucj", EUCJ_NFONTS, EUCJ_FONT0,
+ {NFONT_LIST_EUCJ}, {MFONT_LIST_EUCJ} },
+ { ENC_SJIS, "sjis", EUCJ_NFONTS, EUCJ_FONT0,
+ {NFONT_LIST_EUCJ}, {MFONT_LIST_EUCJ} },
+ { ENC_GB, "gb", GB_NFONTS, GB_FONT0,
+ {NFONT_LIST_GB}, {MFONT_LIST_GB} },
+ { ENC_BIG5, "big5", BIG5_NFONTS, BIG5_FONT0,
+ {NFONT_LIST_BIG5}, {MFONT_LIST_BIG5} },
+ { ENC_EUCKR, "euckr", EUCKR_NFONTS, EUCKR_FONT0,
+ {NFONT_LIST_EUCKR}, {MFONT_LIST_EUCKR} },
#endif /* MULTICHAR_SET */
#if 0
/* sample for font specification when common rule for ISO-8859-x
* is not satisfying */
- { ENC_ISO8859_1, "noenc", {NFONT_LIST_1}, {MFONT_LIST_NULL} },
+ { ENC_ISO8859_1, "noenc", ISO88591_NFONTS, ISO88591_FONT0,
+ {NFONT_LIST_1}, {MFONT_LIST_NULL} },
#endif
- { ENC_KOI8R, "noenc", {NFONT_LIST_KOI8R}, {MFONT_LIST_NULL} },
- { ENC_KOI8U, "noenc", {NFONT_LIST_KOI8U}, {MFONT_LIST_NULL} },
- { ENC_DUMMY, "noenc", {MFONT_LIST_NULL}, {MFONT_LIST_NULL} }
+ { ENC_KOI8R, "noenc", KOI8R_NFONTS, KOI8R_FONT0,
+ {NFONT_LIST_KOI8R}, {MFONT_LIST_NULL} },
+ { ENC_KOI8U, "noenc", KOI8U_NFONTS, KOI8U_FONT0,
+ {NFONT_LIST_KOI8U}, {MFONT_LIST_NULL} },
+ { ENC_DUMMY, "noenc", 0, 0,
+ {MFONT_LIST_NULL}, {MFONT_LIST_NULL} }
};
/* special common rule for ISO-8859-x */
@@ -258,7 +267,9 @@
#ifdef MULTICHAR_SET
rxvt_set_multichar_encoding(r, defaultfont[j].encoding_method);
#endif
- for (k = 0; k < NFONTS; k++) {
+ r->h->nfonts = defaultfont[j].nfonts;
+ r->h->fnum = r->h->font0_idx = defaultfont[j].font0_idx;
+ for (k = 0; k < MAX_NFONTS; k++) {
if (rs[Rs_font + k] == NULL)
rs[Rs_font + k] = defaultfont[j].font[k];
#ifdef MULTICHAR_SET
@@ -282,11 +293,16 @@
/* fallback for ISO-8859-* encodings */
k = encoding - ENC_ISO8859_1 + 1;
MIN_IT(k, 99999);
- } else
+ r->h->nfonts = ISO8859X_NFONTS;
+ r->h->fnum = r->h->font0_idx = ISO8859X_FONT0;
+ } else {
/* fallback for "C", "POSIX", and invalid locales */
k = 0;
+ r->h->nfonts = DEFAULT_NFONTS;
+ r->h->fnum = r->h->font0_idx = DEFAULT_FONT0;
+ }
- for (j = 0; j < NFONTS; j++) {
+ for (j = 0; j < MAX_NFONTS; j++) {
if (rs[Rs_font + j] == NULL) {
if (k == 0)
rs[Rs_font + j] = def_fontName[j];
diff -ruN cvs-2001-03-29/src/defaultfont.h locale3/src/defaultfont.h
--- cvs-2001-03-29/src/defaultfont.h Fri Mar 23 15:15:37 2001
+++ locale3/src/defaultfont.h Thu Mar 29 22:00:59 2001
@@ -58,13 +58,17 @@
/*
* Used for tables of encoding labels -> Rxvt internal informations.
+ *
+ * font0_idx is the default font in the list (starting at 0)
*/
struct defaultfont {
const enum enc_label enc_label;
const char *encoding_method;
- const char *font[7];
- const char *mfont[7];
+ const int nfonts;
+ const int font0_idx;
+ const char *font[MAX_NFONTS];
+ const char *mfont[MAX_NFONTS];
};
@@ -78,6 +82,8 @@
* Default fonts when encoding is not valid or not specified.
*/
+#define DEFAULT_NFONTS 7
+#define DEFAULT_FONT0 2
#define NFONT_LIST \
"7x14", "6x10", "6x13", "8x13", "8x16", "10x20", "12x24"
#ifdef MULTICHAR_SET /* multichar glyph language support */
@@ -117,49 +123,51 @@
* These definitions should be brushed up by native speakers.
*/
+#define EUCJ_NFONTS 6
+#define EUCJ_FONT0 2
#define NFONT_LIST_EUCJ \
A_14, \
"-misc-fixed-medium-r-normal--10-90-75-75-c-50-iso8859-1",/*na*/\
- A_12, A_14, A_16, A_18, A_24
+ A_12, A_16, A_18, A_24, NULL
#define MFONT_LIST_EUCJ \
"-misc-fixed-medium-r-normal--14-130-75-75-c-140-jisx0208.1983-0",/*xf*/\
"-misc-fixed-medium-r-normal--10-90-75-75-c-100-jisx0208.1983-0",/*na*/\
"-misc-fixed-medium-r-normal--12-110-75-75-c-120-jisx0208.1983-0",/*ak*/\
- "-misc-fixed-medium-r-normal--14-130-75-75-c-140-jisx0208.1983-0",/*xf*/\
"-jis-fixed-medium-r-normal--16-150-75-75-c-160-jisx0208.1983-0",/*xf*/\
"-jis-gothic-medium-r-normal--18-170-75-75-c-180-jisx0208.1983-0",/*pd*/\
- "-jis-fixed-medium-r-normal--24-230-75-75-c-240-jisx0208.1983-0" /*xf*/
+ "-jis-fixed-medium-r-normal--24-230-75-75-c-240-jisx0208.1983-0",/*xf*/\
+ NULL
-#define NFONT_LIST_GB A_16, A_16, A_16, A_16, A_24, A_24, A_24
+#define GB_NFONTS 2
+#define GB_FONT0 0
+#define NFONT_LIST_GB A_16, A_24, NULL, NULL, NULL, NULL, NULL
#define MFONT_LIST_GB \
"-isas-song ti-medium-r-normal--16-160-72-72-c-160-gb2312.1980-0",/*xf*/\
- "-isas-song ti-medium-r-normal--16-160-72-72-c-160-gb2312.1980-0",/*xf*/\
- "-isas-song ti-medium-r-normal--16-160-72-72-c-160-gb2312.1980-0",/*xf*/\
- "-isas-song ti-medium-r-normal--16-160-72-72-c-160-gb2312.1980-0",/*xf*/\
- "-isas-song ti-medium-r-normal--24-240-72-72-c-240-gb2312.1980-0",/*xf*/\
"-isas-song ti-medium-r-normal--24-240-72-72-c-240-gb2312.1980-0",/*xf*/\
- "-isas-song ti-medium-r-normal--24-240-72-72-c-240-gb2312.1980-0" /*xf*/
+ NULL, NULL, NULL, NULL, NULL
-#define NFONT_LIST_BIG5 A_16, A_16, A_16, A_16, A_24, A_24, A_24
+#define BIG5_NFONTS 2
+#define BIG5_FONT0 0
+#define NFONT_LIST_BIG5 A_16, A_24, NULL, NULL, NULL, NULL, NULL
#define MFONT_LIST_BIG5 \
"-eten-fixed-medium-r-normal--16-150-75-75-c-160-big5-0",/*pd*/\
- "-eten-fixed-medium-r-normal--16-150-75-75-c-160-big5-0",/*pd*/\
- "-eten-fixed-medium-r-normal--16-150-75-75-c-160-big5-0",/*pd*/\
- "-eten-fixed-medium-r-normal--16-150-75-75-c-160-big5-0",/*pd*/\
"-eten-fixed-medium-r-normal--24-230-75-75-c-240-big5-0",/*pd*/\
- "-eten-fixed-medium-r-normal--24-230-75-75-c-240-big5-0",/*pd*/\
- "-eten-fixed-medium-r-normal--24-230-75-75-c-240-big5-0" /*pd*/
+ NULL, NULL, NULL, NULL, NULL
-#define NFONT_LIST_EUCKR A_16, A_12, A_14, A_16, A_18, A_20, A_24
+#define EUCKR_NFONTS 6
+#define EUCKR_FONT0 2
+#define NFONT_LIST_EUCKR A_16, A_12, A_14, A_18, A_20, A_24, NULL
#define MFONT_LIST_EUCKR \
"-daewoo-mincho-medium-r-normal--16-120-100-100-c-160-ksc5601.1987-0",/*xf*/\
"-baekmuk-batang-medium-r-normal--12-120-75-75-m-120-ksc5601.1987-0",/*ba*/\
"-baekmuk-batang-medium-r-normal--14-140-75-75-m-140-ksc5601.1987-0",/*ba*/\
- "-daewoo-mincho-medium-r-normal--16-120-100-100-c-160-ksc5601.1987-0",/*xf*/\
"-baekmuk-batang-medium-r-normal--18-180-75-75-m-180-ksc5601.1987-0",/*ba*/\
"-baekmuk-batang-medium-r-normal--20-200-75-75-m-200-ksc5601.1987-0",/*ba*/\
"-daewoo-mincho-medium-r-normal--24-170-100-100-c-240-ksc5601.1987-0",/*xf*/\
+ NULL
+#define KOI8R_NFONTS 7
+#define KOI8R_FONT0 2
#define NFONT_LIST_KOI8R \
"-misc-fixed-medium-r-normal--14-130-75-75-c-70-koi8-r",/*xf*/\
"-misc-fixed-medium-r-normal--10-100-75-75-c-60-koi8-r",/*xf*/\
@@ -168,6 +176,9 @@
"-misc-fixed-medium-r-normal--15-140-75-75-c-90-koi8-r",/*xf*/\
"-misc-fixed-medium-r-normal--18-120-100-100-c-90-koi8-r",/*xf*/\
"-misc-fixed-medium-r-normal--20-200-75-75-c-100-koi8-r" /*xf*/
+
+#define KOI8U_NFONTS 7
+#define KOI8U_FONT0 2
#define NFONT_LIST_KOI8U \
"-cronyx-fixed-medium-r-normal--14-130-75-75-c-70-koi8-u",/*cr*/\
"-cronyx-fixed-medium-r-normal--10-100-75-75-c-60-koi8-u",/*cr*/\
@@ -179,6 +190,8 @@
/* special common rule for ISO-8859-* */
+#define ISO8859X_NFONTS 7
+#define ISO8859X_FONT0 2
#define NFONT_LIST_ISO8859X \
"-misc-fixed-medium-r-normal--14-130-75-75-c-70-iso8859-%d", /*xf*/ \
"-misc-fixed-medium-r-normal--10-100-75-75-c-60-iso8859-%d", /*xf*/ \
diff -ruN cvs-2001-03-29/src/feature.h locale3/src/feature.h
--- cvs-2001-03-29/src/feature.h Thu Mar 29 22:32:53 2001
+++ locale3/src/feature.h Wed Mar 28 22:28:03 2001
@@ -423,13 +423,8 @@
#define SUPPORT_BROKEN_APPS_WHICH_RELY_ON_UNDEFINED_BW_BEHAVIOUR_AS_XTERM
/*
- * List of default fonts available
- * NFONTS is the number of fonts in the list
- * FONT0_IDX is the default font in the list (starting at 0)
- * Sizes between multi-char fonts sets (MFONT_LIST) and single-char font
- * sets (NFONT_LIST) have been matched up
+ * MAX_NFONTS is the maximum allowed number of fonts in the list
*/
-#define NFONTS 7
-#define FONT0_IDX 2
+#define MAX_NFONTS 7
#endif
diff -ruN cvs-2001-03-29/src/init.c locale3/src/init.c
--- cvs-2001-03-29/src/init.c Thu Mar 29 22:32:54 2001
+++ locale3/src/init.c Wed Mar 28 22:44:38 2001
@@ -158,7 +158,6 @@
h->cmd_pid = -1;
r->cmd_fd = r->tty_fd = r->Xfd = -1;
h->PrivateModes = h->SavedModes = PrivMode_Default;
- h->fnum = FONT0_IDX; /* logical font number */
r->TermWin.focus = 1;
r->TermWin.ncol = 80;
r->TermWin.nrow = 24;
diff -ruN cvs-2001-03-29/src/main.c locale3/src/main.c
--- cvs-2001-03-29/src/main.c Thu Mar 29 22:32:54 2001
+++ locale3/src/main.c Wed Mar 28 22:42:13 2001
@@ -469,20 +469,15 @@
char tmpbuf[64];
#endif
-#if (FONT0_IDX == 0)
-# define IDX2FNUM(i) (i)
-# define FNUM2IDX(f) (f)
-#else
-# define IDX2FNUM(i) ((i) == 0 ? FONT0_IDX : ((i) <= FONT0_IDX ? ((i)-1) : (i)))
-# define FNUM2IDX(f) ((f) == FONT0_IDX ? 0 : ((f) < FONT0_IDX ? ((f)+1) : (f)))
-#endif
-#define FNUM_RANGE(i) ((i) <= 0 ? 0 : ((i) >= NFONTS ? (NFONTS-1) : (i)))
+#define IDX2FNUM(i) ((i) == 0 ? r->h->font0_idx : ((i) <= r->h->font0_idx ?
+((i)-1) : (i)))
+#define FNUM2IDX(f) ((f) == r->h->font0_idx ? 0 : ((f) < r->h->font0_idx ? ((f)+1)
+: (f)))
+#define FNUM_RANGE(i) ((i) <= 0 ? 0 : ((i) >= r->h->nfonts ? (r->h->nfonts-1) : (i)))
if (!init) {
pf = r->h->fnum;
switch (fontname[0]) {
case '\0':
- r->h->fnum = FONT0_IDX;
+ r->h->fnum = r->h->font0_idx;
fontname = NULL;
break;
@@ -503,7 +498,7 @@
default:
if (fontname[1] != '\0' && !isdigit(fontname[1]))
return;
- if (idx < 0 || idx >= (NFONTS))
+ if (idx < 0 || idx >= (r->h->nfonts))
return;
r->h->fnum = IDX2FNUM(idx);
break;
@@ -516,7 +511,7 @@
return;
else
/* search for existing fontname */
- for (idx = 0; idx < NFONTS; idx++)
+ for (idx = 0; idx < r->h->nfonts; idx++)
if (!STRCMP(r->h->rs[Rs_font + idx], fontname)) {
r->h->fnum = IDX2FNUM(idx);
fontname = NULL;
@@ -1098,7 +1093,7 @@
XFontSet prev_fontset;
int success = 0;
- if (idx < 0 || idx >= NFONTS)
+ if (idx < 0 || idx >= r->h->nfonts)
return;
D_MAIN((stderr, "rxvt_setTermFontSet()"));
prev_fontset = r->TermWin.fontset;
diff -ruN cvs-2001-03-29/src/rxvt.h locale3/src/rxvt.h
--- cvs-2001-03-29/src/rxvt.h Thu Mar 29 22:32:55 2001
+++ locale3/src/rxvt.h Wed Mar 28 22:43:14 2001
@@ -599,10 +599,10 @@
Rs_color,
_Rs_color = Rs_color + NRS_COLORS - 1,
Rs_font,
- _Rs_font = Rs_font + NFONTS - 1,
+ _Rs_font = Rs_font + MAX_NFONTS - 1,
#ifdef MULTICHAR_SET
Rs_mfont,
- _Rs_mfont = Rs_mfont + NFONTS - 1,
+ _Rs_mfont = Rs_mfont + MAX_NFONTS - 1,
Rs_multichar_encoding,
Rs_mc_hack,
#endif
@@ -1000,6 +1000,8 @@
refresh_count,
refresh_limit,
fnum, /* logical font number */
+ font0_idx, /* logical font number for default font */
+ nfonts, /* num of fonts available in current locale */
last_bot, /* scrollbar last bottom position */
last_top, /* scrollbar last top position */
last_state, /* scrollbar last state */
@@ -1143,7 +1145,7 @@
char *v_bufstr; /* beginning of area to write */
char *v_bufptr; /* end of area to write */
char *v_bufend; /* end of physical buffer */
- char *newfont[NFONTS];
+ char *newfont[MAX_NFONTS];
/* command input buffering */
unsigned char *cmdbuf_ptr, *cmdbuf_endp;
unsigned char cmdbuf_base[BUFSIZ];
diff -ruN cvs-2001-03-29/src/xdefaults.c locale3/src/xdefaults.c
--- cvs-2001-03-29/src/xdefaults.c Thu Mar 29 22:32:57 2001
+++ locale3/src/xdefaults.c Wed Mar 28 22:42:38 2001
@@ -170,49 +170,49 @@
#endif
STRG(Rs_font + 0, "font", "fn", "fontname", "normal text font"),
/* fonts: command-line option = resource name */
-#if NFONTS > 1
+#if MAX_NFONTS > 1
RSTRG(Rs_font + 1, "font1", "fontname"),
#endif
-#if NFONTS > 2
+#if MAX_NFONTS > 2
RSTRG(Rs_font + 2, "font2", "fontname"),
#endif
-#if NFONTS > 3
+#if MAX_NFONTS > 3
RSTRG(Rs_font + 3, "font3", "fontname"),
#endif
-#if NFONTS > 4
+#if MAX_NFONTS > 4
RSTRG(Rs_font + 4, "font4", "fontname"),
#endif
-#if NFONTS > 5
+#if MAX_NFONTS > 5
RSTRG(Rs_font + 5, "font5", "fontname"),
#endif
-#if NFONTS > 6
+#if MAX_NFONTS > 6
RSTRG(Rs_font + 6, "font6", "fontname"),
#endif
-#if NFONTS > 7
+#if MAX_NFONTS > 7
RSTRG(Rs_font + 7, "font7", "fontname"),
#endif
#ifdef MULTICHAR_SET
STRG(Rs_mfont + 0, "mfont", "fm", "fontname", "multichar font"),
/* fonts: command-line option = resource name */
-# if NFONTS > 1
+# if MAX_NFONTS > 1
RSTRG(Rs_mfont + 1, "mfont1", "fontname"),
# endif
-# if NFONTS > 2
+# if MAX_NFONTS > 2
RSTRG(Rs_mfont + 2, "mfont2", "fontname"),
# endif
-# if NFONTS > 3
+# if MAX_NFONTS > 3
RSTRG(Rs_mfont + 3, "mfont3", "fontname"),
# endif
-# if NFONTS > 4
+# if MAX_NFONTS > 4
RSTRG(Rs_mfont + 4, "mfont4", "fontname"),
# endif
-# if NFONTS > 5
+# if MAX_NFONTS > 5
RSTRG(Rs_mfont + 5, "mfont5", "fontname"),
# endif
-# if NFONTS > 6
+# if MAX_NFONTS > 6
RSTRG(Rs_mfont + 6, "mfont6", "fontname"),
# endif
-# if NFONTS > 7
+# if MAX_NFONTS > 7
RSTRG(Rs_mfont + 7, "mfont7", "fontname"),
# endif
#endif /* MULTICHAR_SET */