コード例 #1
0
ファイル: charset.c プロジェクト: atshakil/w3m
wc_ces
wc_locale_to_ces(char *locale)
{
    char *p = locale;
    char buf[8];
    int n;

    if (*p == 'C' && *(p+1) == '\0')
	return WC_CES_US_ASCII;
#ifdef HAVE_LANGINFO_CODESET
    {
	char *cs = nl_langinfo(CODESET);
	if (cs && strcmp(cs, "US-ASCII"))
	    return wc_charset_to_ces(cs);
    }
#endif
    for (n = 0; *p && *p != '.' && n < 7; p++) {
	if ((unsigned char)*p > 0x20)
	    buf[n++] = tolower(*p);
    }
    buf[n] = 0;
    if (*p == '.') {
	p++;
	if (! strcasecmp(p, "euc")) {
	    switch (buf[0]) {
	    case 'j':
		WcLocale = WC_LOCALE_JA_JP;
		break;
	    case 'k':
		WcLocale = WC_LOCALE_KO_KR;
		break;
	    case 'z':
	        if (!strcmp(buf, "zh_tw"))
		    WcLocale = WC_LOCALE_ZH_TW;
	        else if (!strcmp(buf, "zh_hk"))
		    WcLocale = WC_LOCALE_ZH_HK;
		else
		    WcLocale = WC_LOCALE_ZH_CN;
		break;
	    default:
		WcLocale = 0;
		break;
	    }
	}
	return wc_charset_to_ces(p);
    }

    if (!strcmp(buf, "japanese"))
	return WC_CES_SHIFT_JIS;
    if (!strcmp(buf, "zh_tw") ||
	!strcmp(buf, "zh_hk"))
	return WC_CES_BIG5;
    for (n = 0; lang_ces_table[n].lang; n++) {
	if (!strncmp(buf, lang_ces_table[n].lang, 2))
	    return lang_ces_table[n].ces;
    }
    return WC_CES_ISO_8859_1;
}
コード例 #2
0
ファイル: charset.c プロジェクト: atshakil/w3m
wc_ces
wc_guess_charset(char *charset, wc_ces orig)
{
    wc_ces guess;

    if (charset == NULL || *charset == '\0')
	return orig;
    guess = wc_charset_to_ces(charset);
    return guess ? guess : orig;
}
コード例 #3
0
wc_ces wc_guess_charset( char *charset, wc_ces orig )
{
  int eax;
  wc_ces guess;
  if ( charset == 0 || ( charset[0] & 255 ) == 0 )
  {
    orig/*error:'I'*/ = orig;
  }
  else
  {
    guess = wc_charset_to_ces( charset );
    if ( guess != 0 )
    {
      guess/*error:'I'*/ = guess;
    }
    else
    {
      orig/*error:'I'*/ = orig;
    }
  }
  return guess;
}
コード例 #4
0
wc_ces wc_locale_to_ces( char *locale )
{
  int eax;
  char *p = locale;
  char buf[6];
  int n;
  if ( p[0] == 'C' && ( p[1] & 255 ) == 0 )
  {
    return lang_ces_table[ n ].ces;
  }
  else
  {
    char *cs = nl_langinfo( 14 );
    if ( cs != 0 && strcmp( cs, "US-ASCII" ) != 0 )
      wc_charset_to_ces( cs );
      return lang_ces_table[ n ].ces;
    else
    {
      n = 0;
      for ( ; ( p[0] & 255 ) != 0 && p[0] != '.' && n <= 4; p++ )
      {
        if ( p[0] < 32 )
        {
          buf[ n ] = tolower( p[0] );
          n++;
        }
        //p++;
      }
      buf[ n ] = 0;
      if ( p[0] == '.' )
      {
        p++;
        if ( strcasecmp( p, "euc" ) == 0 )
        {
          switch ( buf[0] )
          {
          case 106:
            WcLocale = 1;
            break;
          case 107:
            WcLocale = 5;
            break;
          case 122:
            if ( strcmp( buf, "zh_tw" ) == 0 )
              WcLocale = 3;
            else
            {
              if ( strcmp( buf, "zh_hk" ) == 0 )
                WcLocale = 4;
              else
                WcLocale = 2;
            }
            break;
          default:
            WcLocale = 0;
            break;
          }
        }
        wc_charset_to_ces( p );
      }
      else
      {
        if ( strcmp( buf, "japanese" ) == 0 )
        {
          return lang_ces_table[ n ].ces;
        }
        else
        {
          if ( strcmp( buf, "zh_tw" ) == 0 || strcmp( buf, "zh_hk" ) == 0 )
          {
            return lang_ces_table[ n ].ces;
          }
          else
          {
            n = 0;
            for ( ; lang_ces_table[ n ].lang != 0; n++ )
            {
              if ( strncmp( buf, lang_ces_table[ n ].lang, 2 ) == 0 )
              {
                lang_ces_table[ n ].ces/*error:'I'*/ = lang_ces_table[ n ].ces;
                break;
              }
              else
              {
                //n++;
              }
            }
          }
        }
      }
    }
  }
コード例 #5
0
wc_ces wc_charset_short_to_ces( char *charset )
{
  int eax;
  char *p = charset;
  char buf[16];
  wc_ces ces = wc_charset_to_ces( charset );
  int n;
  if ( ces != 0 )
  {
  }
  else
  {
    n = 0;
    for ( ; ( p[0] & 255 ) != 0 && n <= 14; p++ )
    {
      if ( p[0] < 32 && p[0] != '_' && p[0] != '-' )
      {
        buf[ n ] = tolower( p[0] );
        n++;
      }
      //p++;
    }
    buf[ n ] = 0;
    p = buf;
    switch ( p[0] )
    {
    case 101:
      switch ( p[1] )
      {
        break;
      default:
        break;
      case 106:
        break;
      case 99:
        break;
      case 116:
        break;
      case 107:
        break;
      }
      break;
    case 106:
      p++;
      if ( p[0] == 'o' )
      {
      }
      else
      {
        if ( p[0] == 'p' )
          p++;
        if ( p[0] == '2' )
        {
        }
        else
        {
          if ( p[0] == '3' )
          {
          }
          else
          {
          }
        }
      }
      break;
    case 115:
      break;
    case 103:
      break;
    case 98:
      break;
    case 104:
      if ( p[1] == 'k' )
      {
      }
      else
      {
      }
      break;
    case 107:
      if ( p[1] == 'o' )
      {
      }
      else
      {
      }
      break;
    case 108:
      n = atoi( &p[1] );
      if ( n >= 1 && n <= 16 && n != 12 )
      {
      }
      else
      {
      }
      break;
    case 116:
      if ( p[1] == 'c' )
      {
      }
      else
      {
      }
      break;
    case 110:
      break;
    case 118:
      if ( p[1] == 'p' )
      {
      }
      else
      {
      }
      break;
    case 117:
      if ( p[1] == '7' )
      {
      }
      else
      {
      }
      break;
    case 97:
      break;
    case 99:
      break;
    case 119:
      n = atoi( &p[1] );
      switch ( n )
      {
      case 1250:
        break;
      case 1251:
        break;
      case 1252:
        break;
      case 1253:
        break;
      case 1254:
        break;
      case 1255:
        break;
      case 1256:
        break;
      case 1257:
        break;
      case 1258:
        break;
      default:
        break;
      }
      break;
    case 114:
      break;
    default:
      break;
    }
  }
  if ( ( 0 ^ 0 ) != 0 )
  {
    __stack_chk_fail( );
  }
  return ces;
}
コード例 #6
0
ファイル: charset.c プロジェクト: atshakil/w3m
wc_ces
wc_charset_short_to_ces(char *charset)
{
    char *p = charset;
    char buf[16];
    wc_ces ces;
    int n;

    ces = wc_charset_to_ces(charset);
    if (ces)
	return ces;

    for (n = 0; *p && n < 15; p++) {
	if ((unsigned char)*p > 0x20 && *p != '_' && *p != '-')
	    buf[n++] = tolower(*p);
    }
    buf[n] = 0;
    p = buf;
    switch (*p) {
    case 'e':
	switch (*(p+1)) {
	case 'j': return WC_CES_EUC_JP;
	case 'c': return WC_CES_EUC_CN;
	case 't': return WC_CES_EUC_TW;
	case 'k': return WC_CES_EUC_KR;
	}
	return WC_CES_EUC_JP;
    case 'j':
	p++;
	if (*p == 'o')
	    return WC_CES_JOHAB;
	if (*p == 'p')
	   p++;
	if (*p == '2')
	   return WC_CES_ISO_2022_JP_2;
	if (*p == '3')
	   return WC_CES_ISO_2022_JP_3;
	return WC_CES_ISO_2022_JP;
    case 's':
	return WC_CES_SHIFT_JIS;
    case 'g':
	return WC_CES_EUC_CN;
    case 'b':
	return WC_CES_BIG5;
    case 'h':
	if (*(p+1) == 'k')
	    return WC_CES_HKSCS;
	return WC_CES_HZ_GB_2312;
    case 'k':
	if (*(p+1) == 'o')
	    return WC_CES_KOI8_R;
	return WC_CES_ISO_2022_KR;
    case 'l':
	n = atoi(p + 1);
	if (n >= 1 && n <= 16 && n != 12)
	    return (WC_CES_E_ISO_8859 | n);
	return WC_CES_ISO_8859_1;
    case 't':
	if (*(p+1) == 'c')
	    return WC_CES_TCVN_5712;
	return WC_CES_TIS_620;
    case 'n':
	return WC_CES_NEXTSTEP;
    case 'v':
	if (*(p+1) == 'p')
	    return WC_CES_VPS;
	return WC_CES_VISCII_11;
#ifdef USE_UNICODE
    case 'u':
	if (*(p+1) == '7')
	    return WC_CES_UTF_7;
	return WC_CES_UTF_8;
#endif
    case 'a':
	return WC_CES_US_ASCII;
    case 'c':
	return WC_CES_ISO_2022_CN;
    case 'w':
	p++;
	if (*p >= '1' &&  *p <= '9')
	    return wc_codepage(atoi(p));
	break;
    case 'r':
	return WC_CES_RAW;
    }
    return 0;
}
コード例 #7
0
ファイル: charset.c プロジェクト: atshakil/w3m
wc_ces
wc_charset_to_ces(char *charset)
{
    char *p = charset;
    char buf[16];
    int n;

    if (tolower(*p) == 'x' && *(p+1) == '-')
	p += 2;
    for (n = 0; *p && n < 15; p++) {
	if ((unsigned char)*p > 0x20 && *p != '_' && *p != '-')
	    buf[n++] = tolower(*p);
    }
    buf[n] = 0;
    p = buf;
    switch (*p) {
    case 'e':
	if (! strncmp(p, "euc", 3)) {
	    p += 3;
	    switch (*p) {
	    case 'j': return WC_CES_EUC_JP;
	    case 'c': return WC_CES_EUC_CN;
	    case 't': return WC_CES_EUC_TW;
	    case 'k': return WC_CES_EUC_KR;
	    }
	    switch (WcLocale) {
	    case WC_LOCALE_JA_JP: return WC_CES_EUC_JP;
	    case WC_LOCALE_ZH_CN: return WC_CES_EUC_CN;
	    case WC_LOCALE_ZH_TW: return WC_CES_EUC_TW;
	    case WC_LOCALE_ZH_HK: return WC_CES_EUC_CN;
	    case WC_LOCALE_KO_KR: return WC_CES_EUC_KR;
	    }
	    return WC_CES_EUC_JP;
        }
	break;
    case 'i':
	if (! strncmp(p, "iso2022", 7)) {
	    p += 7;
	    switch (*p) {
	    case 'j':
		if (! strncmp(p, "jp2", 3))
		    return WC_CES_ISO_2022_JP_2;
		if (! strncmp(p, "jp3", 3))
		    return WC_CES_ISO_2022_JP_3;
		return WC_CES_ISO_2022_JP;
	    case 'c': return WC_CES_ISO_2022_CN;
	    case 'k': return WC_CES_ISO_2022_KR;
	    }
	    return WC_CES_ISO_2022_JP;
	} else if (! strncmp(p, "iso8859", 7)) {
	    n = atoi(p + 7);
	    if (n >= 1 && n <= 16 && n != 12)
		return (WC_CES_E_ISO_8859 | n);
	    return WC_CES_ISO_8859_1;
	} else if (! strncmp(p, "ibm", 3)) {
	    p += 3;
	    if (*p >= '1' && *p <= '9')
	    	return wc_codepage(atoi(p));
	    return wc_charset_to_ces(p);
	}
	break;
    case 'j':
	if (! strncmp(p, "johab", 5))
	    return WC_CES_JOHAB;
	if (! strncmp(p, "jis", 3))
	    return WC_CES_ISO_2022_JP;
	break;
    case 's':
	if (! strncmp(p, "shiftjisx0213", 13) ||
	    ! strncmp(p, "sjisx0213", 9))
	    return WC_CES_SHIFT_JISX0213;
	if (! strncmp(p, "shiftjis", 8) ||
	    ! strncmp(p, "sjis", 4))
	    return WC_CES_SHIFT_JIS;
	break;
    case 'p':
	if (! strncmp(p, "pck", 3))
	    return WC_CES_SHIFT_JIS;
	break;
    case 'g':
	if (! strncmp(p, "gb18030", 7) ||
	    ! strncmp(p, "gbk2k", 5))
	    return WC_CES_GB18030;
	if (! strncmp(p, "gbk", 3))
	    return WC_CES_GBK;
	if (! strncmp(p, "gb2312", 6))
	    return WC_CES_EUC_CN;
	break;
    case 'b':
	if (! strncmp(p, "big5hkscs", 9))
	    return WC_CES_HKSCS;
	if (! strncmp(p, "big5", 4))
	    return WC_CES_BIG5;
	break;
    case 'h':
	if (! strncmp(p, "hz", 2))
	    return WC_CES_HZ_GB_2312;
	if (! strncmp(p, "hkscs", 5))
	    return WC_CES_HKSCS;
	break;
    case 'k':
	if (! strncmp(p, "koi8r", 5))
	    return WC_CES_KOI8_R;
	if (! strncmp(p, "koi8u", 5))
	    return WC_CES_KOI8_U;
	if (! strncmp(p, "ksx1001", 7))
	    return WC_CES_EUC_KR;
	if (! strncmp(p, "ksc5601", 7))
	    return WC_CES_EUC_KR;
	break;
    case 't':
	if (! strncmp(p, "tis620", 6))
	    return WC_CES_TIS_620;
	if (! strncmp(p, "tcvn", 4))
	    return WC_CES_TCVN_5712;
	break;
    case 'n':
	if (! strncmp(p, "next", 4))
	    return WC_CES_NEXTSTEP;
	break;
    case 'v':
	if (! strncmp(p, "viet", 4)) {
	    p += 4;
	    if (! strncmp(p, "tcvn", 4))
		return WC_CES_TCVN_5712;
	}
	if (! strncmp(p, "viscii", 6))
	    return WC_CES_VISCII_11;
	if (! strncmp(p, "vps", 3))
	    return WC_CES_VPS;
	break;
    case 'u':
#ifdef USE_UNICODE
	if (! strncmp(p, "utf8", 4))
	    return WC_CES_UTF_8;
	if (! strncmp(p, "utf7", 4))
	    return WC_CES_UTF_7;
#endif
	if (! strncmp(p, "uhc", 3))
	    return WC_CES_UHC;
	if (! strncmp(p, "ujis", 4))
	    return WC_CES_EUC_JP;
	if (! strncmp(p, "usascii", 7))
	    return WC_CES_US_ASCII;
	break;
    case 'a':
	if (! strncmp(p, "ascii", 5))
	    return WC_CES_US_ASCII;
	break;
    case 'c':
	if (! strncmp(p, "cngb", 4))
	    return WC_CES_EUC_CN;
	if (*(p+1) != 'p')
	    break;
	p += 2;
	if (*p >= '1' &&  *p <= '9')
	    return wc_codepage(atoi(p));
	break;
    case 'w':
	if (strncmp(p, "windows", 7))
	    break;
	p += 7;
	if (! strncmp(p, "31j", 3))
	    return WC_CES_CP932;
	if (*p >= '1' &&  *p <= '9')
	    return wc_codepage(atoi(p));
	break;
    }
    return 0;
}