blob: 20c78058df03d8be15707f537261ac9e2bd39d02 [file] [log] [blame]
// © 2017 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
*
* 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;
}