/* ******************************************************************************* * * 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; }