X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fdebug.cpp;h=3026df09f203b005af601e954e77ca3ac98b9452;hb=cc2835392294fb1e82a89b2ec3803f78c9183f18;hp=6f3ce34e09064e94a567db8fc392635d95660626;hpb=12efe108db4fa722c480bee7cb8f65e8303c6901;p=lyx.git diff --git a/src/support/debug.cpp b/src/support/debug.cpp index 6f3ce34e09..3026df09f2 100644 --- a/src/support/debug.cpp +++ b/src/support/debug.cpp @@ -14,14 +14,15 @@ #include "support/convert.h" #include "support/debug.h" +#include "support/FileName.h" #include "support/gettext.h" #include "support/lstrings.h" -#include "support/FileName.h" #include "support/ProgressInterface.h" #include #include + using namespace std; using namespace lyx::support; @@ -29,15 +30,15 @@ namespace lyx { namespace { -struct ErrorItem { +struct DebugErrorItem { Debug::Type level; char const * name; char const * desc; }; -ErrorItem errorTags[] = { - { Debug::NONE, "none", N_("No debugging message")}, +DebugErrorItem errorTags[] = { + { Debug::NONE, "none", N_("No debugging messages")}, { Debug::INFO, "info", N_("General information")}, { Debug::INIT, "init", N_("Program initialisation")}, { Debug::KEY, "key", N_("Keyboard events handling")}, @@ -58,7 +59,7 @@ ErrorItem errorTags[] = { { Debug::INSETS, "insets", N_("LyX Insets")}, { Debug::FILES, "files", N_("Files used by LyX")}, { Debug::WORKAREA, "workarea", N_("Workarea events")}, - { Debug::INSETTEXT, "insettext", N_("Insettext/tabular messages")}, + { Debug::CLIPBOARD, "clipboard", N_("Clipboard handling")}, { Debug::GRAPHICS, "graphics", N_("Graphics conversion and loading")}, { Debug::CHANGES, "changes", N_("Change tracking")}, { Debug::EXTERNAL, "external", N_("External template/inset messages")}, @@ -76,18 +77,23 @@ ErrorItem errorTags[] = { int const numErrorTags = sizeof(errorTags)/sizeof(errorTags[0]); -} // namespace anon +} // namespace -const std::vector Debug::levels() +int Debug::levelCount() { - std::vector vec; - for (int i = 0 ; i < numErrorTags ; ++i) { - vec.push_back(errorTags[i].level); - } - return vec; + return numErrorTags; } + +Debug::Type Debug::value(int idx) +{ + if (idx > 0 && idx < numErrorTags) + return errorTags[idx].level; + return Debug::NONE; +} + + string const Debug::description(Debug::Type val) { for (int i = 0 ; i < numErrorTags ; ++i) { @@ -138,10 +144,10 @@ Debug::Type Debug::value(string const & val) void Debug::showLevel(ostream & os, Debug::Type level) { // Show what features are traced - for (int i = 0; i != numErrorTags; ++i) { + for (int i = 0; i < numErrorTags; ++i) { if (errorTags[i].level != Debug::ANY - && errorTags[i].level != Debug::NONE - && errorTags[i].level & level) { + && errorTags[i].level != Debug::NONE + && errorTags[i].level & level) { // avoid to_utf8(_(...)) re-entrance problem docstring const s = _(errorTags[i].desc); os << to_utf8(bformat(_("Debugging `%1$s' (%2$s)"), @@ -177,7 +183,7 @@ void LyXErr::enable() bool LyXErr::debugging(Debug::Type t) const { - return (dt & t); + return (dt_ & t); } @@ -185,55 +191,78 @@ void LyXErr::endl() { if (enabled_) { stream() << std::endl; - if (second_used_) - second() << "\n"; + if (second_enabled_) + secondStream() << std::endl; } } +char const * LyXErr::stripName(char const * n) +{ + string const name = n; + // find the last occurence of /src/ in name + size_t pos = name.rfind("/src/"); + if (pos == string::npos) + pos = name.rfind("\\src\\"); + if (pos == string::npos) + return n; + else + return n + pos + 5; +} + + // It seems not possible to instantiate operator template out of class body -#define STREAM_OPERATOR(t) \ -{\ - if (l.enabled()){\ - l.stream() << t;\ - if (l.second_used()){\ - l.second() << t;\ - ProgressInterface::instance()->lyxerrFlush();\ - }\ - }\ - return l;\ +template +LyXErr & toStream(LyXErr & l, T t) +{ + if (l.enabled()){ + l.stream() << t; + if (l.secondEnabled()) { + l.secondStream() << t; + ProgressInterface::instance()->lyxerrFlush(); + } + } + return l; } LyXErr & operator<<(LyXErr & l, void const * t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr & operator<<(LyXErr & l, char const * t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr & operator<<(LyXErr & l, char t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr & operator<<(LyXErr & l, int t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr & operator<<(LyXErr & l, unsigned int t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr & operator<<(LyXErr & l, long t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr & operator<<(LyXErr & l, unsigned long t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } +#ifdef LYX_USE_LONG_LONG +LyXErr & operator<<(LyXErr & l, long long t) +{ return toStream(l, t); } +LyXErr & operator<<(LyXErr & l, unsigned long long t) +{ return toStream(l, t); } +#endif LyXErr & operator<<(LyXErr & l, double t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr & operator<<(LyXErr & l, string const & t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr & operator<<(LyXErr & l, docstring const & t) -STREAM_OPERATOR(to_utf8(t)); +{ return toStream(l, to_utf8(t)); } LyXErr & operator<<(LyXErr & l, FileName const & t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr & operator<<(LyXErr & l, ostream &(*t)(ostream &)) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr & operator<<(LyXErr & l, ios_base &(*t)(ios_base &)) -STREAM_OPERATOR(t) +{ return toStream(l, t); } // The global instance LyXErr lyxerr; + + } // namespace lyx