diff -r 000000000000 -r 42188c7ea2d9 Orb/Doxygen/src/message.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Orb/Doxygen/src/message.cpp Thu Jan 21 17:29:01 2010 +0000 @@ -0,0 +1,196 @@ +/****************************************************************************** + * + * + * + * Copyright (C) 1997-2008 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 +#include +#include +#include "config.h" +#include "util.h" +#include "debug.h" +#include "doxygen.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 (filePostextPos) // $file,$text,$line +// { +// warnFormatOrder = 4; +// } +// } +// else if (filePostextPos) // $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 = 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 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[40960]; + vsprintf(text, fmt, args); + QCString fileSubst = file==0 ? "" : 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( + substitute( + outputFormat, + "$file",fileSubst + ), + "$text",textSubst + ), + "$line",lineSubst + ), + "$version",versionSubst + ), + "%","%%" + )+'\n'; + + // print resulting message + fprintf(warnFile,"%s",msgText.data()); +} + +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_cont(const char *fmt, ...) +{ + if (!Config_getBool("WARNINGS")) + return; + va_list args; + va_start(args, fmt); + vfprintf(warnFile, fmt, args); + va_end(args); +} + +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); +}