]> git.lyx.org Git - lyx.git/blobdiff - src/Chktex.C
* src/LyXAction.C: mark goto-clear-bookmark as working without buffer
[lyx.git] / src / Chktex.C
index 87a8c18972b34c038a4f93d57dfbf646d6823da1..981999f303fb0c5b33275982cabc356d824e91ae 100644 (file)
@@ -1,42 +1,41 @@
-/* This file is part of
- * ====================================================== 
- * 
- *           LyX, The Document Processor        
- *          Copyright 1995 Matthias Ettrich
- *           Copyright 1995-2000 The LyX Team.
+/**
+ * \file Chktex.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
- *           This file is Copyright 1997-1998
- *           Asger Alstrup
+ * \author Asger Alstrup
  *
- * ====================================================== 
+ * Full author contact details are available in file CREDITS.
  */
 
 #include <config.h>
 
-#include <fstream>
-#include <cstdlib> // atoi
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
 #include "Chktex.h"
+#include "gettext.h"
+
 #include "LaTeX.h" // TeXErrors
+
+#include "support/convert.h"
+#include "support/docstream.h"
 #include "support/filetools.h"
-#include "lyxlex.h"
-#include "support/FileInfo.h"
-#include "debug.h"
-#include "support/syscall.h"
-#include "support/syscontr.h"
-#include "support/path.h"
-#include "gettext.h"
+#include "support/lstrings.h"
+#include "support/systemcall.h"
+
+#include <boost/format.hpp>
+
+
+namespace lyx {
+
+using support::changeExtension;
+using support::FileName;
+using support::makeAbsPath;
+using support::onlyFilename;
+using support::split;
+using support::Systemcall;
 
-using std::ifstream;
 using std::getline;
+using std::string;
 
-/*
- * CLASS Chktex
- */
 
 Chktex::Chktex(string const & chktex, string const & f, string const & p)
                : cmd(chktex), file(f), path(p)
@@ -47,10 +46,10 @@ Chktex::Chktex(string const & chktex, string const & f, string const & p)
 int Chktex::run(TeXErrors &terr)
 {
        // run bibtex
-       string log = OnlyFilename(ChangeExtension(file, ".log"));
+       string log = onlyFilename(changeExtension(file, ".log"));
        string tmp = cmd + " -q -v0 -b0 -x " + file + " -o " + log;
-        Systemcalls one;
-       int result= one.startscript(Systemcalls::System, tmp);
+       Systemcall one;
+       int result = one.startscript(Systemcall::Wait, tmp);
        if (result == 0) {
                result = scanLogFile(terr);
        } else {
@@ -62,24 +61,47 @@ int Chktex::run(TeXErrors &terr)
 
 int Chktex::scanLogFile(TeXErrors & terr)
 {
-       string token;
        int retval = 0;
 
-       string tmp = OnlyFilename(ChangeExtension(file, ".log"));
+       // FIXME: Find out whether onlyFilename() is really needed,
+       // or whether makeAbsPath(onlyFilename()) is a noop here
+       FileName const tmp(makeAbsPath(onlyFilename(changeExtension(file, ".log"))));
 
-       ifstream ifs(tmp.c_str());
+#if USE_BOOST_FORMAT
+       boost::basic_format<char_type> msg(_("ChkTeX warning id # %1$d"));
+#else
+       docstring const msg(_("ChkTeX warning id # "));
+#endif
+       docstring token;
+       // FIXME UNICODE
+       // We have no idea what the encoding of the error file is
+       idocfstream ifs(tmp.toFilesystemEncoding().c_str());
        while (getline(ifs, token)) {
-               string srcfile, line, pos, warno, warning;
+               docstring srcfile;
+               docstring line;
+               docstring pos;
+               docstring warno;
+               docstring warning;
                token = split(token, srcfile, ':');
                token = split(token, line, ':');
                token = split(token, pos, ':');
                token = split(token, warno, ':');
                token = split(token, warning, ':');
 
-               int lineno = atoi(line.c_str());
-               warno = _("ChkTeX warning id #") + warno;
-               terr.insertError(lineno, warno, warning);
+               int const lineno = convert<int>(line);
+
+#if USE_BOOST_FORMAT
+               msg % warno;
+               terr.insertError(lineno, msg.str(), warning);
+               msg.clear();
+#else
+               terr.insertError(lineno, msg + warno, warning);
+#endif
+
                ++retval;
        }
        return retval;
 }
+
+
+} // namespace lyx