diff options
Diffstat (limited to 'tests/translittest.cpp')
-rw-r--r-- | tests/translittest.cpp | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/tests/translittest.cpp b/tests/translittest.cpp new file mode 100644 index 0000000..1b2bddf --- /dev/null +++ b/tests/translittest.cpp @@ -0,0 +1,142 @@ +#include <iostream> +#include <string> + +#include "unicode/udata.h" /* Data structures */ +#include "unicode/ures.h" /* Data structures */ +#include "unicode/utypes.h" /* Basic ICU data types */ +#include "unicode/ucnv.h" /* C Converter API */ +#include "unicode/convert.h" /* C++ Converter API */ +#include "unicode/ustring.h" /* some more string fcns*/ + +#include "unicode/translit.h" + +#include "utf8transliterator.h" + +// Print the given string to stdout +void uprintf(const UnicodeString &str) { + char *buf = 0; + int32_t len = str.length(); + // int32_t bufLen = str.extract(0, len, buf); // Preflight + /* Preflighting seems to be broken now, so assume 1-1 conversion, + plus some slop. */ + int32_t bufLen = len + 16; + int32_t actualLen; + buf = new char[bufLen + 1]; + actualLen = str.extract(0, len, buf/*, bufLen*/); // Default codepage conversion + buf[actualLen] = 0; + //printf("%s", buf); + std::cout << buf; + delete buf; +} + + +int main() { + + + UErrorCode status = U_ZERO_ERROR; + UDataMemory *pappData = udata_open("/usr/local/lib/sword/swicu", + "res", "root", &status); + if (U_FAILURE(status)) + { + std::cout << "error: " << status << ":" << + u_errorName(status) << std::endl; + return 0; + } + UChar * uBuf; + UChar * target; + UConverter *conv; + //UParseError perr = U_ZERO_ERROR; + int32_t uBufSize = 0, uLength = 0; + void * pAppData=NULL; + char * samplestring = "If this compiles and runs without errors, apparently ICU is working."; + //ures_open("/usr/local/lib/sword/swicu.dat", + // NULL, &status); + //UDataMemory *pappData = udata_open("/usr/local/lib/sword/swicu", +// "res", "root", &status); + if (U_FAILURE(status)) + { + std::cout << "error: " << status << ":" << + u_errorName(status) << std::endl; + return 0; + } + //UDataMemory *pappData2 = udata_open("/usr/local/lib/sword/swicu", +// "res", "translit_Latin_Gothic", &status); + std::cout << status << std::endl; + if (U_FAILURE(status)) + { + std::cout << "error: " << status << ":" << + u_errorName(status) << std::endl; + return 0; + } + std::cout << "available " << Transliterator::countAvailableIDs() << std::endl; + //udata_setAppData("/usr/local/lib/sword/swicu.dat" , pAppData, &status); + //if (U_FAILURE(status)) + //{ + //std::cout << "error: " << status << ":" << + // u_errorName(status) << std::endl; + //return 0; + //} + + int32_t i_ids = Transliterator::countAvailableIDs(); + + std::cout << "available " << i_ids << std::endl; + for (int i=0; i<i_ids;i++) + { + std::cout << "id " << i << ": "; + uprintf(Transliterator::getAvailableID(i)); + std::cout << std::endl; + } + + + //UTF8Transliterator utran = new UTF8Transliterator(); + std::cout << "creating transliterator 2" << std::endl; + Transliterator *btrans = Transliterator::createInstance("NFD;Latin-Greek;NFC", + UTRANS_FORWARD, status); + if (U_FAILURE(status)) + { + std::cout << "error: " << status << ":" << + u_errorName(status) << std::endl; + return 0; + } + std::cout << "creating transliterator 1" << std::endl; + Transliterator *trans = Transliterator::createInstance("NFD;Latin-Gothic;NFC", + UTRANS_FORWARD, status); + if (U_FAILURE(status)) + { + delete btrans; + std::cout << "error: " << status << ":" << + u_errorName(status) << std::endl; + return 0; + } + + std::cout << "deleting transliterator 1" << std::endl; + delete trans; + std::cout << "deleting transliterator 2" << std::endl; + delete btrans; + std::cout << "the rest" << std::endl; + uLength = strlen(samplestring); + conv = ucnv_open("utf-8", &status); + if (U_FAILURE(status)) + { + std::cout << "error: " << status << ":" << + u_errorName(status) << std::endl; + return 0; + } + uBufSize = (uLength/ucnv_getMinCharSize(conv)); + uBuf = (UChar*)malloc(uBufSize * sizeof(UChar)); + + target = uBuf; + + ucnv_toUChars(conv, target, uLength, + samplestring, uLength, &status); + if (U_FAILURE(status)) + { + std::cout << "error: " << status << ":" << + u_errorName(status) << std::endl; + return 0; + } + + cout << samplestring << endl; + + return 0; +} |