/**
* @file charconv_libjcode.c
*
*
* @brief 文字コード変換 (libjcode 使用)
*
* 日本語の文字コード(JIS,EUC,SJIS)の相互変換のみ可能である.
*
*
*
*
* @brief Character set conversion using libjcode
*
* Only conversion between Japanese character set (jis, euc-jp, shift-jis)
* is supported.
*
*
*
* @author Akinobu LEE
* @date Thu Feb 17 16:02:41 2005
*
* $Revision: 1.4 $
*
*/
/*
* Copyright (c) 1991-2012 Kawahara Lab., Kyoto University
* Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology
* Copyright (c) 2005-2012 Julius project team, Nagoya Institute of Technology
* All rights reserved
*/
#include "app.h"
#ifdef CHARACTER_CONVERSION
#ifdef USE_LIBJCODE
#include "libjcode/jlib.h"
static int convert_to = SJIS; ///< Conversion target
/**
* Setup charset conversion for libjcode.
*
* @param fromcode [in] input charset name (ignored, will be auto-detected)
* @param tocode [in] output charset name, or NULL when disable conversion
* @param enable_conv [out] return whether conversion should be enabled or not
*
* @return TRUE on success, FALSE on failure (unknown name).
*/
boolean
charconv_libjcode_setup(char *fromcode, char *tocode, boolean *enable_conv)
{
if (tocode == NULL) {
/* disable conversion */
*enable_conv = FALSE;
} else {
if (strmatch(tocode, "sjis")
|| strmatch(tocode, "sjis-win")
|| strmatch(tocode, "shift-jis")
|| strmatch(tocode, "shift_jis")) {
convert_to = SJIS;
} else if (strmatch(tocode, "euc-jp")
|| strmatch(tocode, "euc")
|| strmatch(tocode, "eucjp")) {
convert_to = EUC;
} else if (strmatch(tocode, "jis")) {
convert_to = JIS;
} else {
jlog("Error: charconv_libjcode: character set \"%s\" not supported\n", tocode);
jlog("Error: charconv_libjcode: only \"sjis\", \"euc-jp\" and \"jis\" can be used with libjcode.\n");
*enable_conv = FALSE;
return FALSE;
}
*enable_conv = TRUE;
}
return TRUE;
}
/**
* Apply charset conversion to a string using libjcode.
*
* @param instr [in] source string
* @param outstr [out] destination buffer
* @param maxoutlen [in] allocated length of outstr in byte.
*
* @return either of instr or outstr, that holds the result string.
*
*/
char *
charconv_libjcode(char *instr, char *outstr, int maxoutlen)
{
switch(convert_to) {
case SJIS:
toStringSJIS(instr, outstr, maxoutlen);
break;
case EUC:
toStringEUC(instr, outstr, maxoutlen);
break;
case JIS:
toStringJIS(instr, outstr, maxoutlen);
break;
}
return(outstr);
}
#endif /* USE_LIBJCODE */
#endif /* CHARACTER_CONVERSION */