summaryrefslogtreecommitdiff
path: root/src/message.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/message.cpp')
-rw-r--r--src/message.cpp196
1 files changed, 196 insertions, 0 deletions
diff --git a/src/message.cpp b/src/message.cpp
new file mode 100644
index 0000000..dcf1707
--- /dev/null
+++ b/src/message.cpp
@@ -0,0 +1,196 @@
+/******************************************************************************
+ *
+ * $Id: message.cpp,v 1.9 2001/03/19 19:27:41 root Exp $
+ *
+ * Copyright (C) 1997-2012 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <qdatetime.h>
+#include "config.h"
+#include "util.h"
+#include "debug.h"
+#include "doxygen.h"
+#include "portable.h"
+
+static QCString outputFormat;
+//static int warnFormatOrder; // 1 = $file,$line,$text
+// // 2 = $text,$line,$file
+// // 3 = $line,$text,$file
+// // 4 = $file,$text,$line
+// // 5 = $text,$file,$line
+// // 6 = $line,$file,$text
+
+static FILE *warnFile = stderr;
+
+void initWarningFormat()
+{
+// int filePos = Config_getString("WARN_FORMAT").find("$file");
+// int linePos = Config_getString("WARN_FORMAT").find("$line");
+// int textPos = Config_getString("WARN_FORMAT").find("$text");
+//
+// // sort items on position (there are 6 cases)
+// warnFormatOrder = 1;
+// if (filePos>linePos && filePos>textPos)
+// {
+// if (linePos>textPos) // $text,$line,$file
+// {
+// warnFormatOrder = 2;
+// }
+// else // $line,$text,$file
+// {
+// warnFormatOrder = 3;
+// }
+// }
+// else if (filePos<linePos && filePos<textPos)
+// {
+// if (linePos>textPos) // $file,$text,$line
+// {
+// warnFormatOrder = 4;
+// }
+// }
+// else if (filePos<linePos && filePos>textPos) // $text,$file,$line
+// {
+// warnFormatOrder = 5;
+// }
+// else // $line,$file,$text
+// {
+// warnFormatOrder = 6;
+// }
+// outputFormat =
+// substitute(
+// substitute(
+// substitute(
+// Config_getString("WARN_FORMAT"),
+// "$file","%s"
+// ),
+// "$text","%s"
+// ),
+// "$line","%d"
+// )+'\n';
+
+ // replace(QRegExp("\\$file"),"%s").
+ // replace(QRegExp("\\$text"),"%s").
+ // replace(QRegExp("\\$line"),"%d")+
+ // '\n';
+
+ outputFormat = Config_getString("WARN_FORMAT");
+
+ if (!Config_getString("WARN_LOGFILE").isEmpty())
+ {
+ warnFile = portable_fopen(Config_getString("WARN_LOGFILE"),"w");
+ }
+ if (!warnFile) // point it to something valid, because warn() relies on it
+ {
+ warnFile = stderr;
+ }
+}
+
+
+void msg(const char *fmt, ...)
+{
+ if (!Config_getBool("QUIET"))
+ {
+ if (Debug::isFlagSet(Debug::Time))
+ {
+ printf("%.3f sec: ",((double)Doxygen::runningTime.elapsed())/1000.0);
+ }
+ va_list args;
+ va_start(args, fmt);
+ vfprintf(stdout, fmt, args);
+ va_end(args);
+ }
+}
+
+static void format_warn(const char *file,int line,const char *text)
+{
+ QCString fileSubst = file==0 ? "<unknown>" : file;
+ QCString lineSubst; lineSubst.setNum(line);
+ QCString textSubst = text;
+ QCString versionSubst;
+ if (file) // get version from file name
+ {
+ bool ambig;
+ FileDef *fd=findFileDef(Doxygen::inputNameDict,file,ambig);
+ if (fd)
+ {
+ versionSubst = fd->getVersion();
+ }
+ }
+ // substitute markers by actual values
+ QCString msgText =
+ substitute(
+ substitute(
+ substitute(
+ substitute(
+ outputFormat,
+ "$file",fileSubst
+ ),
+ "$text",textSubst
+ ),
+ "$line",lineSubst
+ ),
+ "$version",versionSubst
+ )+'\n';
+
+ // print resulting message
+ fwrite(msgText.data(),1,msgText.length(),warnFile);
+}
+
+static void do_warn(const char *tag, const char *file, int line, const char *fmt, va_list args)
+{
+ if (!Config_getBool(tag)) return; // warning type disabled
+ char text[4096];
+ vsnprintf(text, 4096, fmt, args);
+ text[4095]='\0';
+ format_warn(file,line,text);
+}
+
+void warn(const char *file,int line,const char *fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ do_warn("WARNINGS", file, line, fmt, args);
+ va_end(args);
+}
+
+void warn_simple(const char *file,int line,const char *text)
+{
+ if (!Config_getBool("WARNINGS")) return; // warning type disabled
+ format_warn(file,line,text);
+}
+
+void warn_undoc(const char *file,int line,const char *fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ do_warn("WARN_IF_UNDOCUMENTED", file, line, fmt, args);
+ va_end(args);
+}
+
+void warn_doc_error(const char *file,int line,const char *fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ do_warn("WARN_IF_DOC_ERROR", file, line, fmt, args);
+ va_end(args);
+}
+
+void err(const char *fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ vfprintf(warnFile, fmt, args);
+ va_end(args);
+}