⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iso2022_jp2.h

📁 libiconv是一个很不错的字符集转换库。程序接口也很简单
💻 H
📖 第 1 页 / 共 2 页
字号:
          conv->ostate = state;          return 0;        }        break;      case 'k':        if (state3 == STATE_TAG_LANGUAGE) {          state3 = STATE_TAG_LANGUAGE_k;          COMBINE_STATE;          conv->ostate = state;          return 0;        }        break;      case 'o':        if (state3 == STATE_TAG_LANGUAGE_k) {          state3 = STATE_TAG_LANGUAGE_ko;          COMBINE_STATE;          conv->ostate = state;          return 0;        }        break;      case 'z':        if (state3 == STATE_TAG_LANGUAGE) {          state3 = STATE_TAG_LANGUAGE_z;          COMBINE_STATE;          conv->ostate = state;          return 0;        }        break;      case 'h':        if (state3 == STATE_TAG_LANGUAGE_z) {          state3 = STATE_TAG_LANGUAGE_zh;          COMBINE_STATE;          conv->ostate = state;          return 0;        }        break;      case 0x7f:        state3 = STATE_TAG_NONE;        COMBINE_STATE;        conv->ostate = state;        return 0;      default:        break;    }    /* Other tag characters reset the tag parsing state or are ignored. */    if (state3 >= STATE_TAG_LANGUAGE)      state3 = STATE_TAG_NONE;    COMBINE_STATE;    conv->ostate = state;    return 0;  }  if (state3 >= STATE_TAG_LANGUAGE)    state3 = STATE_TAG_NONE;  /* Try ASCII. */  ret = ascii_wctomb(conv,buf,wc,1);  if (ret != RET_ILUNI) {    if (ret != 1) abort();    if (buf[0] < 0x80) {      int count = (state1 == STATE_ASCII ? 1 : 4);      if (n < count)        return RET_TOOSMALL;      if (state1 != STATE_ASCII) {        r[0] = ESC;        r[1] = '(';        r[2] = 'B';        r += 3;        state1 = STATE_ASCII;      }      r[0] = buf[0];      if (wc == 0x000a || wc == 0x000d)        state2 = STATE_G2_NONE;      COMBINE_STATE;      conv->ostate = state;      return count;    }  }  conversion_list = conversion_lists[state3];  do {    switch (conversion_list & ((1 << 3) - 1)) {      case european:        /* Try ISO-8859-1. */        ret = iso8859_1_wctomb(conv,buf,wc,1);        if (ret != RET_ILUNI) {          if (ret != 1) abort();          if (buf[0] >= 0x80) {            int count = (state2 == STATE_G2_ISO8859_1 ? 3 : 6);            if (n < count)              return RET_TOOSMALL;            if (state2 != STATE_G2_ISO8859_1) {              r[0] = ESC;              r[1] = '.';              r[2] = 'A';              r += 3;              state2 = STATE_G2_ISO8859_1;            }            r[0] = ESC;            r[1] = 'N';            r[2] = buf[0]-0x80;            COMBINE_STATE;            conv->ostate = state;            return count;          }        }        /* Try ISO-8859-7. */        ret = iso8859_7_wctomb(conv,buf,wc,1);        if (ret != RET_ILUNI) {          if (ret != 1) abort();          if (buf[0] >= 0x80) {            int count = (state2 == STATE_G2_ISO8859_7 ? 3 : 6);            if (n < count)              return RET_TOOSMALL;            if (state2 != STATE_G2_ISO8859_7) {              r[0] = ESC;              r[1] = '.';              r[2] = 'F';              r += 3;              state2 = STATE_G2_ISO8859_7;            }            r[0] = ESC;            r[1] = 'N';            r[2] = buf[0]-0x80;            COMBINE_STATE;            conv->ostate = state;            return count;          }        }        break;      case japanese:        /* Try JIS X 0201-1976 Roman. */        ret = jisx0201_wctomb(conv,buf,wc,1);        if (ret != RET_ILUNI) {          if (ret != 1) abort();          if (buf[0] < 0x80) {            int count = (state1 == STATE_JISX0201ROMAN ? 1 : 4);            if (n < count)              return RET_TOOSMALL;            if (state1 != STATE_JISX0201ROMAN) {              r[0] = ESC;              r[1] = '(';              r[2] = 'J';              r += 3;              state1 = STATE_JISX0201ROMAN;            }            r[0] = buf[0];            if (wc == 0x000a || wc == 0x000d)              state2 = STATE_G2_NONE;            COMBINE_STATE;            conv->ostate = state;            return count;          }        }        /* Try JIS X 0208-1990 in place of JIS X 0208-1978 and           JIS X 0208-1983. */        ret = jisx0208_wctomb(conv,buf,wc,2);        if (ret != RET_ILUNI) {          if (ret != 2) abort();          if (buf[0] < 0x80 && buf[1] < 0x80) {            int count = (state1 == STATE_JISX0208 ? 2 : 5);            if (n < count)              return RET_TOOSMALL;            if (state1 != STATE_JISX0208) {              r[0] = ESC;              r[1] = '$';              r[2] = 'B';              r += 3;              state1 = STATE_JISX0208;            }            r[0] = buf[0];            r[1] = buf[1];            COMBINE_STATE;            conv->ostate = state;            return count;          }        }        /* Try JIS X 0212-1990. */        ret = jisx0212_wctomb(conv,buf,wc,2);        if (ret != RET_ILUNI) {          if (ret != 2) abort();          if (buf[0] < 0x80 && buf[1] < 0x80) {            int count = (state1 == STATE_JISX0212 ? 2 : 6);            if (n < count)              return RET_TOOSMALL;            if (state1 != STATE_JISX0212) {              r[0] = ESC;              r[1] = '$';              r[2] = '(';              r[3] = 'D';              r += 4;              state1 = STATE_JISX0212;            }            r[0] = buf[0];            r[1] = buf[1];            COMBINE_STATE;            conv->ostate = state;            return count;          }        }        break;      case chinese:        /* Try GB 2312-1980. */        ret = gb2312_wctomb(conv,buf,wc,2);        if (ret != RET_ILUNI) {          if (ret != 2) abort();          if (buf[0] < 0x80 && buf[1] < 0x80) {            int count = (state1 == STATE_GB2312 ? 2 : 5);            if (n < count)              return RET_TOOSMALL;            if (state1 != STATE_GB2312) {              r[0] = ESC;              r[1] = '$';              r[2] = 'A';              r += 3;              state1 = STATE_GB2312;            }            r[0] = buf[0];            r[1] = buf[1];            COMBINE_STATE;            conv->ostate = state;            return count;          }        }        break;      case korean:        /* Try KS C 5601-1992. */        ret = ksc5601_wctomb(conv,buf,wc,2);        if (ret != RET_ILUNI) {          if (ret != 2) abort();          if (buf[0] < 0x80 && buf[1] < 0x80) {            int count = (state1 == STATE_KSC5601 ? 2 : 6);            if (n < count)              return RET_TOOSMALL;            if (state1 != STATE_KSC5601) {              r[0] = ESC;              r[1] = '$';              r[2] = '(';              r[3] = 'C';              r += 4;              state1 = STATE_KSC5601;            }            r[0] = buf[0];            r[1] = buf[1];            COMBINE_STATE;            conv->ostate = state;            return count;          }        }        break;      case other:        /* Try JIS X 0201-1976 Kana. This is not officially part of           ISO-2022-JP-2, according to RFC 1554. Therefore we try this           only after all other attempts. */        ret = jisx0201_wctomb(conv,buf,wc,1);        if (ret != RET_ILUNI) {          if (ret != 1) abort();          if (buf[0] >= 0x80) {            int count = (state1 == STATE_JISX0201KATAKANA ? 1 : 4);            if (n < count)              return RET_TOOSMALL;            if (state1 != STATE_JISX0201KATAKANA) {              r[0] = ESC;              r[1] = '(';              r[2] = 'I';              r += 3;              state1 = STATE_JISX0201KATAKANA;            }            r[0] = buf[0]-0x80;            COMBINE_STATE;            conv->ostate = state;            return count;          }        }        break;      default:        abort();    }    conversion_list = conversion_list >> 3;  } while (conversion_list != 0);  return RET_ILUNI;}static intiso2022_jp2_reset (conv_t conv, unsigned char *r, int n){  state_t state = conv->ostate;  SPLIT_STATE;  (void)state2;  (void)state3;  if (state1 != STATE_ASCII) {    if (n < 3)      return RET_TOOSMALL;    r[0] = ESC;    r[1] = '(';    r[2] = 'B';    /* conv->ostate = 0; will be done by the caller */    return 3;  } else    return 0;}#undef COMBINE_STATE#undef SPLIT_STATE#undef STATE_TAG_LANGUAGE_zh#undef STATE_TAG_LANGUAGE_z#undef STATE_TAG_LANGUAGE_ko#undef STATE_TAG_LANGUAGE_k#undef STATE_TAG_LANGUAGE_ja#undef STATE_TAG_LANGUAGE_j#undef STATE_TAG_LANGUAGE#undef STATE_TAG_NONE#undef STATE_G2_ISO8859_7#undef STATE_G2_ISO8859_1#undef STATE_G2_NONE#undef STATE_KSC5601#undef STATE_GB2312#undef STATE_JISX0212#undef STATE_JISX0208#undef STATE_JISX0201KATAKANA#undef STATE_JISX0201ROMAN#undef STATE_ASCII

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -