📄 encoding.c
字号:
char** def_mfontName;#ifdef MULTICHAR_SET/* EXTPROTO */voidrxvt_decode_euc2jis (unsigned char* str, int len){ register int i; rxvt_dbgmsg ((DBG_DEBUG, DBG_ENCODING, "%s (%s : %d)\n", __func__, str, len)); for (i = 0; i < len; i++) str[i] &= 0x7F;}/* EXTPROTO */voidrxvt_decode_sjis2jis (unsigned char* str, int len){ register int i; unsigned char *high, *low; rxvt_dbgmsg ((DBG_DEBUG, DBG_ENCODING, "%s\n", __func__)); for (i = 0; i < len; i += 2, str += 2) { high = str; low = str + 1; (*high) -= (*high > 0x9F ? 0xB1 : 0x71); *high = (*high) * 2 + 1; if (*low > 0x9E) { *low -= 0x7E; (*high)++; } else { if (*low > 0x7E) (*low)--; *low -= 0x1F; } }}/* EXTPROTO */voidrxvt_decode_gb180302jis (unsigned char* str, int len){ register int i; rxvt_dbgmsg ((DBG_DEBUG, DBG_ENCODING, "%s\n", __func__)); for (i = 0; i < len; i++) str[i] &= 0x7F;}/* EXTPROTO */voidrxvt_set_multichar_encoding (rxvt_t* r, const char* str){ struct KNOWN_ENCODINGS* a; assert (NOT_NULL(str)); rxvt_msg (DBG_INFO, DBG_ENCODING, "trying to set multichar encoding to %s\n", str); a = (struct KNOWN_ENCODINGS*) known_encodings; for (; a->name; a++) { if (0 == STRCASECMP (str, a->name)) { r->encoding_method = a->method; r->h->multichar_decode = a->func; break; } } /* not a known encoding method */ if (IS_NULL(a->name)) { rxvt_msg (DBG_INFO, DBG_ENCODING, "... effectively set to noenc\n"); r->encoding_method = ENC_NOENC; r->h->multichar_decode = rxvt_decode_dummy; } else rxvt_msg (DBG_INFO, DBG_ENCODING, "... effectively set to %s\n", a->name);#ifdef XFT_SUPPORT# ifdef HAVE_ICONV_H if ((iconv_t) -1 != r->TermWin.xfticonv) { iconv_close (r->TermWin.xfticonv); r->TermWin.xfticonv = (iconv_t) -1; } /* ** If encoding method is set AND mfont is loaded, open the ** iconv. Otherwise, xfticonv is -1 */ if (ENC_NOENC != r->encoding_method && NOTSET_OPTION(r, Opt2_xftNomFont)) r->TermWin.xfticonv = iconv_open ("UTF-8", rxvt_encoding_name(r));# endif#endif}#endif /* MULTICHAR_SET *//* EXTPROTO */voidrxvt_decode_dummy (unsigned char* str, int len){ rxvt_dbgmsg ((DBG_DEBUG, DBG_ENCODING, "%s\n", __func__));}/* EXTPROTO */voidrxvt_set_default_locale (rxvt_t* r){ char* locale;#if defined(HAVE_SETLOCALE) || defined(HAVE_XSETLOCALE) char* lc;#endif locale = getenv ("LC_ALL"); if (IS_NULL(locale)) locale = getenv ("LC_CTYPE"); if (IS_NULL(locale)) locale = getenv ("LANG"); #if defined(HAVE_SETLOCALE) || defined(HAVE_XSETLOCALE) lc = setlocale(LC_CTYPE, ""); if (IS_NULL(locale)) locale = lc;#endif rxvt_msg (DBG_INFO, DBG_ENCODING, "set default locale to %s\n", locale ? locale : "none"); r->h->locale = locale;}/* This function get the encoding method from locale. This should be** the *correct* way to specify encoding method. The old way, using** -km option or multichar_encoding resource, should be abandoned in** the future as we steadily migrate to UTF-8.*//* EXTPROTO */char* rxvt_get_encoding_from_locale (rxvt_t* r){ char* enc; if (IS_NULL(r->h->locale)) return NULL;#ifdef HAVE_NL_LANGINFO if (IS_NULL (enc = nl_langinfo (CODESET))) return NULL;#else { char *end; // the codeset is between '.' and '@'. if (IS_NULL(enc = strchr (r->h->locale, '.'))) return NULL; if (!IS_NULL (end = strchr (r->h->locale, '@'))) end[0] = '\0'; enc ++; }#endif if ((char) 0 == *enc) return NULL; return enc;}/* EXTPROTO */char*rxvt_encoding_name (rxvt_t* r){ assert (r->encoding_method >= 0); assert (r->encoding_method <= ENC_ISO8859_15); return encoding_name[r->encoding_method].encname;}#ifdef XFT_SUPPORT/* Fallback XFT fonts *//* EXTPROTO */char*rxvt_fallback_mfont_xft (rxvt_t* r){ assert (r->encoding_method >= 0); assert (r->encoding_method <= ENC_ISO8859_15); return fallback_mfont_list_xft[r->encoding_method].fontname;}/* EXTPROTO */voidrxvt_set_default_font_xft (rxvt_t* r){ if (ISSET_OPTION(r, Opt_xft) && IS_NULL(r->h->rs[Rs_xftfont])) r->h->rs[Rs_xftfont] = DEFAULT_XFT_FONT_NAME;# ifdef MULTICHAR_SET if (ISSET_OPTION(r, Opt_xft) && IS_NULL(r->h->rs[Rs_xftmfont])) r->h->rs[Rs_xftmfont] = rxvt_fallback_mfont_xft (r);# endif}#endif /* XFT_SUPPORT *//* Fallback X11 fonts *//* EXTPROTO */char*rxvt_fallback_mfont_x11 (rxvt_t* r){ assert (r->encoding_method >= 0); assert (r->encoding_method <= ENC_ISO8859_15); return fallback_mfont_list_x11[r->encoding_method].fontname;}/* EXTPROTO */voidrxvt_set_default_font_x11 (rxvt_t* r){ register int i; rxvt_dbgmsg ((DBG_VERBOSE, DBG_ENCODING, "%s\n", __func__)); /* Set default fonts */ def_fontName = (char**) nfont_list[r->encoding_method].font;#ifdef MULTICHAR_SET switch (r->encoding_method) { case ENC_SJIS : def_mfontName = (char**) mfont_list[ENC_SJIS].mfont; break; case ENC_EUCJ : def_mfontName = (char**) mfont_list[ENC_EUCJ].mfont; break; case ENC_GB : def_mfontName = (char**) mfont_list[ENC_GB].mfont; break; case ENC_GBK : def_mfontName = (char**) mfont_list[ENC_GBK].mfont; break; case ENC_GB18030 : def_mfontName = (char**) mfont_list[ENC_GB18030].mfont; break; case ENC_BIG5 : def_mfontName = (char**) mfont_list[ENC_BIG5].mfont; break; case ENC_EUCKR: def_mfontName = (char**) mfont_list[ENC_EUCKR].mfont; break; default: def_mfontName = (char**) mfont_list[r->encoding_method].mfont; break; } /* Found no mfont, fall back to ISO8859-X font */ if (IS_NULL(def_mfontName[0])) { for (i = 0; i < MAX_NFONTS; i ++) { char* ptr = rxvt_malloc (STRLEN(isofont[i])+4); if (r->encoding_method >= ENC_ISO8859_1 && r->encoding_method <= ENC_ISO8859_15) sprintf (ptr, isofont[i], r->encoding_method - ENC_ISO8859_1 + 1); else sprintf (ptr, isofont[i], 1); def_mfontName[i] = ptr; } }#endif /* Found no font, fall back to ISO8859-X font */ if (IS_NULL(def_fontName[0])) { for (i = 0; i < MAX_NFONTS; i ++) { char* ptr = rxvt_malloc (STRLEN(isofont[i])+4);#ifdef MULTICHAR_SET if (r->encoding_method >= ENC_ISO8859_1 && r->encoding_method <= ENC_ISO8859_15) sprintf (ptr, isofont[i], r->encoding_method - ENC_ISO8859_1 + 1); else#endif sprintf (ptr, isofont[i], 1); def_fontName[i] = ptr; } } /* Overrided by -km option or X resources */ for (i = 0; i < MAX_NFONTS; i ++) { if (IS_NULL(r->h->rs[Rs_font +i])) r->h->rs[Rs_font +i] = def_fontName[i];#ifdef MULTICHAR_SET if (IS_NULL(r->h->rs[Rs_mfont +i])) r->h->rs[Rs_mfont +i] = def_mfontName[i];#endif }}/*----------------------- end-of-file (C source) -----------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -