X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetSpace.h;h=e401d6d9ae7586624cfbd1abe910d239a8aa519b;hb=997f0621c5346bb623cf86713c4fe1be0c941104;hp=b254556185e5377aa0eb83abe154f17390eeed3b;hpb=fb6af9a08a84b1c35356df4ecb6d8dfe31c8cf55;p=lyx.git diff --git a/src/insets/InsetSpace.h b/src/insets/InsetSpace.h index b254556185..e401d6d9ae 100644 --- a/src/insets/InsetSpace.h +++ b/src/insets/InsetSpace.h @@ -6,8 +6,8 @@ * * \author Asger Alstrup Nielsen * \author Jean-Marc Lasgouttes - * \author Lars Gullik Bjønnes - * \author Jürgen Spitzmüller + * \author Lars Gullik Bjønnes + * \author Jürgen Spitzmüller * * Full author contact details are available in file CREDITS. */ @@ -15,83 +15,159 @@ #ifndef INSET_SPACE_H #define INSET_SPACE_H - #include "Inset.h" +#include "support/Length.h" + namespace lyx { class LaTeXFeatures; -/// Used to insert different kinds of spaces -class InsetSpace : public Inset { -public: - +struct InsetSpaceParams { /// The different kinds of spaces we support enum Kind { /// Normal space ('\ ') NORMAL, /// Protected (no break) space ('~') PROTECTED, + /// Visible ("open box") space ('\textvisiblespace') + VISIBLE, /// Thin space ('\,') THIN, + /// Medium space ('\:') + MEDIUM, + /// Thick space ('\;') + THICK, /// \quad (1em) QUAD, /// \qquad (2em) QQUAD, /// \enspace (0.5em unbreakable) ENSPACE, - /// \enspace (0.5em breakable) + /// \enskip (0.5em breakable) ENSKIP, /// Negative thin space ('\negthinspace') - NEGTHIN + NEGTHIN, + /// Negative medium space ('\negmedspace') + NEGMEDIUM, + /// Negative thick space ('\negthickspace') + NEGTHICK, + /// rubber length + HFILL, + /// \hspace*{\fill} + HFILL_PROTECTED, + /// rubber length, filled with dots + DOTFILL, + /// rubber length, filled with a rule + HRULEFILL, + /// rubber length, filled with a left arrow + LEFTARROWFILL, + /// rubber length, filled with a right arrow + RIGHTARROWFILL, + // rubber length, filled with an up brace + UPBRACEFILL, + // rubber length, filled with a down brace + DOWNBRACEFILL, + /// \hspace{length} + CUSTOM, + /// \hspace*{length} + CUSTOM_PROTECTED }; + /// + explicit InsetSpaceParams(bool m = false) : kind(NORMAL), math(m) {} + /// + void write(std::ostream & os) const; + /// + void read(Lexer & lex); + /// + Kind kind; + /// + GlueLength length; + /** + * Whether these params are to be used in mathed. + * This determines the set of valid kinds. + */ + bool math; +}; + +/// Used to insert different kinds of spaces +class InsetSpace : public Inset +{ +public: /// - InsetSpace(); + InsetSpace() : Inset(0) {} + /// + explicit InsetSpace(InsetSpaceParams const & params); + /// + InsetSpaceParams const & params() const { return params_; } + /// + InsetSpaceParams::Kind kind() const; /// - explicit - InsetSpace(Kind k); + static void string2params(std::string const &, InsetSpaceParams &); /// - Kind kind() const; + static std::string params2string(InsetSpaceParams const &); /// - void metrics(MetricsInfo &, Dimension &) const; + GlueLength length() const; + /// - void draw(PainterInfo & pi, int x, int y) const; + docstring toolTip(BufferView const & bv, int x, int y) const override; + /// unprotected spaces allow line breaking after them + int rowFlags() const override; /// - void write(Buffer const &, std::ostream &) const; + void metrics(MetricsInfo &, Dimension &) const override; + /// + void draw(PainterInfo & pi, int x, int y) const override; + /// + void write(std::ostream &) const override; /// Will not be used when lyxf3 - void read(Buffer const &, Lexer & lex); + void read(Lexer & lex) override; /// - int latex(Buffer const &, odocstream &, - OutputParams const &) const; + void latex(otexstream &, OutputParams const &) const override; /// - int plaintext(Buffer const &, odocstream &, - OutputParams const &) const; + int plaintext(odocstringstream & ods, OutputParams const & op, + size_t max_length = INT_MAX) const override; /// - int docbook(Buffer const &, odocstream &, - OutputParams const &) const; - /// the string that is passed to the TOC - virtual int textString(Buffer const &, odocstream &, - OutputParams const &) const; + void docbook(XMLStream &, OutputParams const &) const override; /// - Inset::Code lyxCode() const { return Inset::SPACE_CODE; } - /// We don't need \begin_inset and \end_inset - bool directWrite() const { return true; } - - // should this inset be handled like a normal charater - bool isChar() const; + docstring xhtml(XMLStream &, OutputParams const &) const override; + /// + void validate(LaTeXFeatures & features) const override; + /// + void toString(odocstream &) const override; + /// + void forOutliner(docstring &, size_t const, bool const) const override; + /// + bool hasSettings() const override { return true; } + /// + bool clickable(BufferView const &, int, int) const override { return true; } + /// + InsetCode lyxCode() const override { return SPACE_CODE; } + /// does this inset try to use all available space (like \\hfill does)? + bool isHfill() const override; + /// should this inset be handled like a normal character? + bool isChar() const override { return true; } /// is this equivalent to a letter? - bool isLetter() const; + bool isLetter() const override { return false; } /// is this equivalent to a space (which is BTW different from // a line separator)? - bool isSpace() const; -private: - virtual Inset * clone() const; + bool isSpace() const override { return true; } + /// + std::string contextMenuName() const override; +protected: + /// + Inset * clone() const override { return new InsetSpace(*this); } + /// + void doDispatch(Cursor & cur, FuncRequest & cmd) override; +public: + /// + bool getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus &) const override; - /// And which kind is this? - Kind kind_; +private: + /// + InsetSpaceParams params_; };