// -*- C++ -*-
/**
- * \file sp_ispell.h
- * Copyright 2002 the LyX Team
- * Read the file COPYING
+ * \file ispell.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
*
* \author unknown
+ * \author John Levon
+ *
+ * Full author contact details are available in file CREDITS.
*/
#ifndef SP_ISPELL_H
#define SP_ISPELL_H
-#include <cstdio>
-
#include "SpellBase.h"
+#include <boost/scoped_ptr.hpp>
+
+#include <cstdio>
+
class BufferParams;
+namespace lyx {
+namespace support {
+class ForkedProcess;
+}
+}
/// i/a spell process-based spellchecker
class ISpell : public SpellBase {
public:
- ISpell(BufferParams const & params, string const & lang);
+ ISpell(BufferParams const & params, std::string const & lang);
~ISpell();
/// return true if the spellchecker instance still exists
virtual bool alive();
- /// clean up on messy exit
- virtual void cleanUp();
-
/// check the given word and return the result
- virtual enum Result check(string const & word);
-
- /// finish this spellchecker instance
- virtual void close();
+ virtual enum Result check(WordLangTuple const & word);
/// insert the given word into the personal dictionary
- virtual void insert(string const & word);
+ virtual void insert(WordLangTuple const & word);
/// accept the given word temporarily
- virtual void accept(string const & word);
+ virtual void accept(WordLangTuple const & word);
- /// return the next near miss after a MISSED result
- virtual string const nextMiss();
+ /// return the next near miss after a SUGGESTED_WORDS result
+ virtual std::string const nextMiss();
- /// give an error message on messy exit
- virtual string const error();
+ /// give an error message on messy exit
+ virtual std::string const error();
private:
+ /// read some data. Returns true on an error. Sets err_read
+ /// to true if the data was from stderr.
+ bool select(bool & err_read);
+
/// instream to communicate with ispell
FILE * in;
/// outstream to communicate with ispell
FILE * out;
+ /// errstream for ispell
+ FILE * inerr;
+
+ /// pipe fds
+ int pipein[2];
+ int pipeout[2];
+ int pipeerr[2];
+
+ /// buffer for reading
+ char buf[BUFSIZ];
+
/// spell error
- char const * error_;
- /// the fd of the outgoing pipe
- int isp_fd;
+ std::string error_;
+
+ boost::scoped_ptr<lyx::support::ForkedProcess> child_;
// vileness below ... please FIXME
/// str ???