110 if ((
int)msg.size() <= lineWidth) {
114 size_t nextLineBreak = msg.find(
'\n');
115 size_t spaceAfterLine = msg.find(
' ', lineWidth);
116 while (spaceAfterLine != std::string::npos) {
117 if (nextLineBreak == std::string::npos || nextLineBreak > spaceAfterLine) {
118 msg = msg.replace(spaceAfterLine, 1,
"\n");
119 pos = spaceAfterLine + 1;
121 pos = nextLineBreak + 1;
123 spaceAfterLine = msg.find(
' ', pos + lineWidth);
124 nextLineBreak = msg.find(
'\n', pos);
140 msg =
build(msg, addType);
152 msg =
build(msg, addType);
155 i->inform(msg,
true);
194 inform(
toString(i.second) +
" total messages of type: " + i.first);
255 _putenv_s(
"LANGUAGE", locale.data());
257 setenv(
"LANGUAGE", locale.data(),
true);
260 if (!setlocale(LC_MESSAGES,
"")) {
263 const char* sumoPath = getenv(
"SUMO_HOME");
264 if (sumoPath ==
nullptr) {
265 if (!bindtextdomain(
"sumo",
nullptr)) {
266 WRITE_WARNING(
TL(
"Environment variable SUMO_HOME is not set, could not find localized messages."));
270 const std::string path = sumoPath + std::string(
"/data/locale/");
271 if (!bindtextdomain(
"sumo", path.data())) {
276 bind_textdomain_codeset(
"sumo",
"UTF-8");
279 SetConsoleOutputCP(CP_UTF8);
298 if (oc.
getBool(
"no-warnings")) {
302 if (oc.
isSet(
"log",
false)) {
305 if (!oc.
getBool(
"no-warnings")) {
309 if (oc.
getBool(
"log.timestamps")) {
312 if (oc.
getBool(
"log.processid")) {
316 if (oc.
isSet(
"message-log",
false)) {
320 if (oc.
isSet(
"error-log",
false)) {
346 std::stringstream prefix;
349 prefix << GetCurrentProcessId();
359 myType(type), myWasInformed(false), myAggregationThreshold(-1) {
#define WRITE_WARNINGF(...)
#define WRITE_WARNING(msg)
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
virtual void addRetriever(OutputDevice *retriever)
Adds a further retriever to the instance responsible for a certain msg type.
std::vector< std::string > myInitialMessages
storage for initial messages
bool wasInformed() const
Returns the information whether any messages were added.
static MsgHandler * getErrorInstance()
Returns the instance to add errors to.
virtual void inform(std::string msg, bool addType=true)
adds a new error to the list
static void enableDebugGLMessages(bool enable)
enable/disable gl-debug messages
static std::string insertLineBreaks(std::string msg, int lineWidth)
reformats a long string to contain newline after a certain line length in px (depending on the curren...
virtual void endProcessMsg(std::string msg)
Ends a process information.
std::string buildProcessIdPrefix() const
std::string build(const std::string &msg, bool addType)
Builds the string which includes the mml-message type.
static Factory myFactory
The function to call for new MsgHandlers, nullptr means use default constructor.
bool myWasInformed
information whether an output occurred at all
static bool myWriteTimestamps
Whether to prefix every message with a time stamp.
static void setupI18n(const std::string &locale="")
set up gettext stuff
static void initOutputOptions()
init output options
static MsgHandler * myErrorInstance
The instance to handle errors.
static MsgHandler * myMessageInstance
The instance to handle normal messages.
bool isRetriever(OutputDevice *retriever) const
Returns whether the given output device retrieves messages from the handler.
static MsgHandler * getWarningInstance()
Returns the instance to add warnings to.
std::map< const std::string, int > myAggregationCount
count for messages of the same type
static void enableDebugMessages(bool enable)
enable/disable debug messages
static bool myAmProcessingProcess
Information whether a process information is printed to cout.
std::vector< OutputDevice * > myRetrievers
The list of retrievers that shall be informed about new messages or errors.
MsgHandler *(* Factory)(MsgType)
virtual ~MsgHandler()
destructor
virtual void clear(bool resetInformed=true)
Clears information whether an error occurred previously and print aggregated message summary.
void setAggregationThreshold(const int thresh)
static MsgHandler * myWarningInstance
The instance to handle warnings.
virtual void endProcessMsg2(bool success, long duration=-1)
Ends a process information with predefined messages.
virtual void beginProcessMsg(std::string msg, bool addType=true)
Begins a process information.
static bool myWriteDebugMessages
Flag to enable or disable debug output.
static bool myWriteDebugGLMessages
Flag to enable or disable GL specific debug output.
static std::string myWarningPrefix
The possibly translated warning prefix (mainly for speedup)
static bool myWriteProcessId
Whether to prefix every message with the process id.
static void cleanupOnEnd()
Removes pending handler.
static std::string myErrorPrefix
The possibly translated error prefix (mainly for speedup)
static void removeRetrieverFromAllInstances(OutputDevice *out)
ensure that that given output device is no longer used as retriever by any instance
virtual void removeRetriever(OutputDevice *retriever)
Removes the retriever from the handler.
int myAggregationThreshold
do not output more messages of the same type if the count exceeds this threshold
@ MT_MESSAGE
The message is only something to show.
@ MT_ERROR
The message is an error.
@ MT_WARNING
The message is a warning.
MsgHandler(MsgType type)
standard constructor
static MsgHandler * getMessageInstance()
Returns the instance to add normal messages to.
A storage for options typed value containers)
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
int getInt(const std::string &name) const
Returns the int-value of the named option (only for Option_Integer)
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
static OptionsCont & getOptions()
Retrieves the options.
Static storage of an output device and its base (abstract) implementation.
static OutputDevice & getDevice(const std::string &name, bool usePrefix=true)
Returns the described OutputDevice.
#define UNUSED_PARAMETER(x)