112 if ((
int)msg.size() <= lineWidth) {
116 size_t nextLineBreak = msg.find(
'\n');
117 size_t spaceAfterLine = msg.find(
' ', lineWidth);
118 while (spaceAfterLine != std::string::npos) {
119 if (nextLineBreak == std::string::npos || nextLineBreak > spaceAfterLine) {
120 msg = msg.replace(spaceAfterLine, 1,
"\n");
121 pos = spaceAfterLine + 1;
123 pos = nextLineBreak + 1;
125 spaceAfterLine = msg.find(
' ', pos + lineWidth);
126 nextLineBreak = msg.find(
'\n', pos);
142 msg =
build(msg, addType);
154 msg =
build(msg, addType);
157 i->inform(msg,
true);
196 inform(
toString(i.second) +
" total messages of type: " + i.first);
257 _putenv_s(
"LANGUAGE", locale.data());
259 setenv(
"LANGUAGE", locale.data(),
true);
262 if (!setlocale(LC_MESSAGES,
"")) {
265 const char* sumoPath = getenv(
"SUMO_HOME");
266 if (sumoPath ==
nullptr) {
267 if (!bindtextdomain(
"sumo",
nullptr)) {
268 WRITE_WARNING(
TL(
"Environment variable SUMO_HOME is not set, could not find localized messages."));
272 const std::string path = sumoPath + std::string(
"/data/locale/");
273 if (!bindtextdomain(
"sumo", path.data())) {
278 bind_textdomain_codeset(
"sumo",
"UTF-8");
281 SetConsoleOutputCP(CP_UTF8);
300 if (oc.
getBool(
"no-warnings")) {
304 if (oc.
isSet(
"log",
false)) {
307 if (!oc.
getBool(
"no-warnings")) {
311 if (oc.
getBool(
"log.timestamps")) {
314 if (oc.
getBool(
"log.processid")) {
318 if (oc.
isSet(
"message-log",
false)) {
322 if (oc.
isSet(
"error-log",
false)) {
348 std::stringstream prefix;
351 prefix << GetCurrentProcessId();
361 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)