#include "Inset.h"
+#include "Length.h"
+#include "MailInset.h"
namespace lyx {
class LaTeXFeatures;
-/// Used to insert different kinds of spaces
-class InsetSpace : public InsetOld {
+class InsetSpaceParams {
public:
-
/// The different kinds of spaces we support
enum Kind {
/// Normal space ('\ ')
/// \enspace (0.5em breakable)
ENSKIP,
/// Negative thin space ('\negthinspace')
- NEGTHIN
+ NEGTHIN,
+ /// rubber length
+ HFILL,
+ /// \hspace*{\fill}
+ HFILL_PROTECTED,
+ /// rubber length, filled with dots
+ DOTFILL,
+ /// rubber length, filled with a rule
+ HRULEFILL,
+ /// \hspace{length}
+ CUSTOM,
+ /// \hspace*{length}
+ CUSTOM_PROTECTED
};
+ ///
+ InsetSpaceParams() : kind(NORMAL), length(Length()) {}
+ ///
+ void write(std::ostream & os) const;
+ ///
+ void read(Lexer & lex);
+ ///
+ Kind kind;
+ ///
+ Length length;
+};
+/// Used to insert different kinds of spaces
+class InsetSpace : public Inset {
+public:
///
InsetSpace();
+ ///
+ ~InsetSpace();
///
explicit
- InsetSpace(Kind k);
+ InsetSpace(InsetSpaceParams par);
+ ///
+ InsetSpaceParams params() const { return params_; }
///
- Kind kind() const;
+ InsetSpaceParams::Kind kind() const;
///
- bool metrics(MetricsInfo &, Dimension &) const;
+ Length length() const;
+ ///
+ docstring toolTip(BufferView const & bv, int x, int y) const;
+ ///
+ void metrics(MetricsInfo &, Dimension &) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///
- void write(Buffer const &, std::ostream &) const;
+ void write(std::ostream &) const;
/// Will not be used when lyxf3
- void read(Buffer const &, LyXLex & lex);
+ void read(Lexer & lex);
///
- int latex(Buffer const &, odocstream &,
- OutputParams const &) const;
+ int latex(odocstream &, OutputParams const &) const;
///
- int plaintext(Buffer const &, odocstream &,
- OutputParams const &) const;
+ int plaintext(odocstream &, OutputParams const &) const;
///
- int docbook(Buffer const &, odocstream &,
- OutputParams const &) const;
+ int docbook(odocstream &, OutputParams const &) const;
/// the string that is passed to the TOC
- virtual int textString(Buffer const &, odocstream &,
- OutputParams const &) const;
+ void textString(odocstream &) const;
///
- InsetBase::Code lyxCode() const { return InsetBase::SPACE_CODE; }
- /// We don't need \begin_inset and \end_inset
- bool directWrite() const { return true; }
+ InsetCode lyxCode() const { return SPACE_CODE; }
+ /// is this an expandible space (rubber length)?
+ bool isStretchableSpace() const;
// should this inset be handled like a normal charater
- bool isChar() const;
+ bool isChar() const { return true; }
/// is this equivalent to a letter?
- bool isLetter() const;
+ bool isLetter() const { return false; }
/// is this equivalent to a space (which is BTW different from
// a line separator)?
- bool isSpace() const;
+ bool isSpace() const { return true; }
private:
- virtual std::auto_ptr<InsetBase> doClone() const;
+ virtual Inset * clone() const { return new InsetSpace(*this); }
+ ///
+ void doDispatch(Cursor & cur, FuncRequest & cmd);
- /// And which kind is this?
- Kind kind_;
+ ///
+ InsetSpaceParams params_;
+};
+
+
+class InsetSpaceMailer : public MailInset {
+public:
+ ///
+ InsetSpaceMailer(InsetSpace & inset);
+ ///
+ virtual Inset & inset() const { return inset_; }
+ ///
+ virtual std::string const & name() const { return name_; }
+ ///
+ virtual std::string const inset2string(Buffer const &) const;
+ ///
+ static void string2params(std::string const &, InsetSpaceParams &);
+ ///
+ static std::string const params2string(InsetSpaceParams const &);
+private:
+ ///
+ static std::string const name_;
+ ///
+ InsetSpace & inset_;
};