#include <fstream>
+#if !defined(__WIN32)
+#include <termios.h>
+#else
+inline int isatty(int dummy) { return 0; }
+#endif
+
+
#include "log.hh"
#include "script.hh"
}
-std::ostream& log(std::clog);
+log::log(enum level level) :
+ level_(level)
+{
+ if (isatty(1) == 0)
+ switch (level)
+ {
+ case log::error: prefix_ = " error: "; break;
+ case log::warning: prefix_ = "warning: "; break;
+ case log::info: prefix_ = " info: "; break;
+ case log::debug: prefix_ = " debug: "; break;
+ case log::none: break;
+ }
+ else
+ switch (level)
+ {
+ case log::error: prefix_ = "\033[30;101m error: "; break;
+ case log::warning: prefix_ = "\033[30;103mwarning: "; break;
+ case log::info: prefix_ = " info: "; break;
+ case log::debug: prefix_ = "\033[2m debug: "; break;
+ case log::none: break;
+ }
+}
+
+std::ostream& operator << (class log& log, log::endl_ endl)
+{
+ if (log::global_level_ < log.level_) return null_log;
+ if (isatty(1) == 0) return moof::log << std::endl;
+ else return moof::log << "\033[0m" << std::endl;
+}
+
+std::ostream& operator << (std::ostream& stream, log::endl_ endl)
+{
+ if (isatty(1) == 0) return stream << std::endl;
+ else return stream << "\033[0m" << std::endl;
+}
+
+
+std::ostream& log(std::cout);
static std::ofstream null_log_;
std::ostream& null_log(null_log_);
-class log log_error( log::error, " error: ");
-class log log_warning(log::warning, "warning: ");
-class log log_info( log::info, " info: ");
+class log log_error(log::error);
+class log log_warning(log::warning);
+class log log_info(log::info);
+class log log_debug(log::debug);
static int log_script(script& script, enum log::level level)
{
- static class log* logs[] = {0, &log_error, &log_warning, &log_info};
+ static class log* logs[] = {0, &log_error, &log_warning, &log_info, &log_debug};
script::slot param = script[1];
boost::bind(log_script, _1, log::info));
script.import_function("print",
boost::bind(log_script, _1, log::info));
+ script.import_function("LogDebug",
+ boost::bind(log_script, _1, log::debug));
}