117 lines
2.7 KiB
C++
117 lines
2.7 KiB
C++
|
/*
|
||
|
*******************************************************************************
|
||
|
*
|
||
|
* Copyright (C) 2003, International Business Machines
|
||
|
* Corporation and others. All Rights Reserved.
|
||
|
*
|
||
|
*******************************************************************************
|
||
|
*
|
||
|
* File uprinter.cpp
|
||
|
*
|
||
|
* Modification History:
|
||
|
*
|
||
|
* Date Name Description
|
||
|
* 03/18/2003 weiv Creation.
|
||
|
*******************************************************************************
|
||
|
*/
|
||
|
|
||
|
#include "uprinter.h"
|
||
|
|
||
|
UPrinter::UPrinter(FILE *file, const char *locale, const char *encoding, UBool transliterateNonPrintable) {
|
||
|
_on = TRUE;
|
||
|
out = u_finit(file, locale, encoding);
|
||
|
strcpy(_locale, locale);
|
||
|
if(transliterateNonPrintable) {
|
||
|
UErrorCode status = U_ZERO_ERROR;
|
||
|
UTransliterator *anyHex = utrans_open("[^\\u000d\\u000a\\u0009\\u0020-\\u007f] Any-Hex/Java", UTRANS_FORWARD, NULL, 0, NULL, &status);
|
||
|
u_fsettransliterator(out, U_WRITE, anyHex, &status);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
UPrinter::UPrinter(const char *name, const char *locale, const char *encoding, UTransliterator *trans, UBool transliterateNonPrintable) {
|
||
|
_on = TRUE;
|
||
|
out = u_fopen(name, "wb", locale, encoding);
|
||
|
u_fputc(0xFEFF, out); // emit a BOM
|
||
|
strcpy(_locale, locale);
|
||
|
if(transliterateNonPrintable) {
|
||
|
UErrorCode status = U_ZERO_ERROR;
|
||
|
if(trans == NULL) {
|
||
|
UTransliterator *anyHex = utrans_open("[^\\u000d\\u000a\\u0009\\u0020-\\u007f] Any-Hex/Java", UTRANS_FORWARD, NULL, 0, NULL, &status);
|
||
|
u_fsettransliterator(out, U_WRITE, anyHex, &status);
|
||
|
} else {
|
||
|
u_fsettransliterator(out, U_WRITE, trans, &status);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
UPrinter::~UPrinter() {
|
||
|
u_fclose(out);
|
||
|
}
|
||
|
|
||
|
void
|
||
|
UPrinter::log(const UnicodeString &string, UBool nl) {
|
||
|
if(_on) {
|
||
|
log(((UnicodeString)string).getTerminatedBuffer(), nl);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void
|
||
|
UPrinter::log(const UChar *string, UBool nl) {
|
||
|
if(_on) {
|
||
|
u_fprintf(out, "%S", string);
|
||
|
if(nl) {
|
||
|
u_fprintf(out, "\n");
|
||
|
}
|
||
|
u_fflush(out);
|
||
|
}
|
||
|
}
|
||
|
/*
|
||
|
void
|
||
|
UPrinter::log(const char *string, UBool nl) {
|
||
|
if(_on) {
|
||
|
u_fprintf(out, "%s", string);
|
||
|
if(nl) {
|
||
|
u_fprintf(out, "\n");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
*/
|
||
|
void
|
||
|
UPrinter::log(const Line *line, UBool nl) {
|
||
|
if(_on) {
|
||
|
log(line->name);
|
||
|
if(line->expLen) {
|
||
|
log("/");
|
||
|
log(line->expansionString);
|
||
|
}
|
||
|
if(nl) {
|
||
|
u_fprintf(out, "\n");
|
||
|
u_fflush(out);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void UPrinter::log(const char *fmt, ...)
|
||
|
{
|
||
|
UChar buffer[4000];
|
||
|
va_list ap;
|
||
|
|
||
|
va_start(ap, fmt);
|
||
|
/* sprintf it just to make sure that the information is valid */
|
||
|
u_vsprintf(buffer, _locale, fmt, ap);
|
||
|
va_end(ap);
|
||
|
if( _on ) {
|
||
|
log(buffer);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void
|
||
|
UPrinter::on(void) {
|
||
|
_on = TRUE;
|
||
|
}
|
||
|
|
||
|
void
|
||
|
UPrinter::off(void) {
|
||
|
_on = FALSE;
|
||
|
}
|