/* * This file is a part of Winix * and is distributed under the 2-Clause BSD licence. * Author: Tomasz Sowa */ /* * Copyright (c) 2011-2021, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * */ #include "slog.h" #include "utf8/utf8.h" namespace Winix { SLog::SLog() { cur = 0; locale = 0; } void SLog::SetCur(Cur * pcur) { cur = pcur; } void SLog::SetLocale(Locale * plocale) { locale = plocale; } SLog & SLog::operator<<(const void * s) { return PutLog(s); } SLog & SLog::operator<<(const char * s) { return PutLog(s); } SLog & SLog::operator<<(const std::string * s) { return PutLog(s); } SLog & SLog::operator<<(const std::string & s) { return PutLog(s); } SLog & SLog::operator<<(const wchar_t * s) { return PutLog(s); } SLog & SLog::operator<<(const std::wstring * s) { return PutLog(s); } SLog & SLog::operator<<(const std::wstring & s) { return PutLog(s); } SLog & SLog::operator<<(int s) { return PutLog(s); } SLog & SLog::operator<<(long s) { return PutLog(s); } SLog & SLog::operator<<(char s) { return PutLog(s); } SLog & SLog::operator<<(wchar_t s) { return PutLog(s); } SLog & SLog::operator<<(size_t s) { return PutLog(s); } SLog & SLog::operator<<(double s) { return PutLog(s); } SLog & SLog::operator<<(const pt::Date & date) { return PutLog(date); } SLog & SLog::operator<<(LogManipulators m) { if( cur && cur->session ) { TextStream & buf = cur->session->log_buffer; switch(m) { case logend: buf << '\n'; if( buf.Size() > WINIX_SLOG_MAX_LOG_SIZE ) { buf.Clear(); (*this) << logwarning << T("slog_turn_over") << " " << WINIX_SLOG_MAX_LOG_SIZE << logend; } break; case loginfo: case logwarning: case logerror: buf << (wchar_t)(int)m; break; default: break; } } return *this; } SLog & SLog::TranslateText(const char * str) { pt::utf8_to_wide(str, key_temp); return TranslateText(key_temp.c_str()); } SLog & SLog::TranslateText(const wchar_t * str) { if( cur && cur->session ) { const std::wstring * trans = 0; if( locale ) trans = &locale->Get(str); // !! IMPROVE ME "Not translated" add to locale if( !trans || trans->empty() ) cur->session->log_buffer << "Not translated: " << str; else cur->session->log_buffer << trans; } return *this; } SLog & SLog::operator<<(const TranslateTextHelper & raw) { return TranslateText(raw.par); } SLog & SLog::operator<<(const TranslateTextHelper & raw) { return TranslateText(raw.par); } SLog & SLog::operator<<(TranslateTextHelper raw) { return TranslateText(raw.par->c_str()); } SLog & SLog::operator<<(TranslateTextHelper raw) { return TranslateText(raw.par->c_str()); } SLog & SLog::operator<<(TranslateTextHelper raw) { return TranslateText(raw.par.c_str()); } SLog & SLog::operator<<(TranslateTextHelper raw) { return TranslateText(raw.par.c_str()); } } // namespace Winix