X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetQuotes.h;h=f9dd5aeafa789cd98cdbc77db267c0bb5c13b39e;hb=239b9919ffe28338d789e6dc9122228f77ab77a7;hp=3ff1cd37503c0336d043604fd771a4c673003a09;hpb=32871c1284f15265f652ff01c438e539a7c8181f;p=lyx.git diff --git a/src/insets/InsetQuotes.h b/src/insets/InsetQuotes.h index 3ff1cd3750..f9dd5aeafa 100644 --- a/src/insets/InsetQuotes.h +++ b/src/insets/InsetQuotes.h @@ -5,6 +5,7 @@ * Licence details can be found in the file COPYING. * * \author Jean-Marc Lasgouttes + * \author Jürgen Spitzmüller * * Full author contact details are available in file CREDITS. */ @@ -12,54 +13,106 @@ #ifndef INSET_QUOTES_H #define INSET_QUOTES_H - #include "Inset.h" -#include "support/types.h" +#include "support/docstring.h" namespace lyx { -class BufferParams; -class Language; -class LaTeXFeatures; - - /** Quotes. Used for the various quotes. German, English, French, all either double or single **/ -class InsetQuotes : public Inset { +class InsetQuotesParams { public: /// - enum quote_language { + enum QuoteStyle { + /// + EnglishQuotes, + /// + SwedishQuotes, + /// + GermanQuotes, + /// + PolishQuotes, + /// + SwissQuotes, + /// + DanishQuotes, /// - EnglishQ, + PlainQuotes, /// - SwedishQ, + BritishQuotes, /// - GermanQ, + SwedishGQuotes, /// - PolishQ, + FrenchQuotes, /// - FrenchQ, + FrenchINQuotes, /// - DanishQ + RussianQuotes, + /// + CJKQuotes, + /// + CJKAngleQuotes, + /// + DynamicQuotes }; /// - enum quote_side { + enum QuoteSide { /// - LeftQ, + OpeningQuote, /// - RightQ + ClosingQuote }; /// - enum quote_times { + enum QuoteLevel { /// - SingleQ, + SecondaryQuotes, /// - DoubleQ + PrimaryQuotes }; + /// Returns the unicode character of a given quote + char_type getQuoteChar(QuoteStyle const &, QuoteLevel const &, + QuoteSide const &) const; + /// Returns a map of quotation marks + std::map getTypes() const; + /// + docstring getLaTeXQuote(char_type c, std::string const &) const; + /// + docstring getHTMLQuote(char_type c) const; + /// Returns a descriptive label of a style suitable for dialog and menu + docstring const getGuiLabel(QuoteStyle const & qs, + bool langdef = false); + /// Returns a descriptive label of a given char + docstring const getShortGuiLabel(docstring const string); + /// + int stylescount() const; + /// Returns the matching style shortcut char + char getStyleChar(QuoteStyle const & style) const; + /// Returns the quote style from the shortcut string + QuoteStyle getQuoteStyle(std::string const & s, + bool const allow_wildcards = false, + QuoteStyle fallback = EnglishQuotes); + /// Returns the quote sind from the shortcut string + QuoteSide getQuoteSide(std::string const & s, + bool const allow_wildcards = false, + QuoteSide fallback = OpeningQuote); + /// Returns the quote level from the shortcut string + QuoteLevel getQuoteLevel(std::string const & s, + bool const allow_wildcards = false, + QuoteLevel fallback = PrimaryQuotes); +}; +/// +extern InsetQuotesParams quoteparams; + +/** Quotes. + Used for the various quotes. German, English, French, all either + double or single **/ +class InsetQuotes : public Inset +{ +public: /** The constructor works like this: \begin{itemize} \item fls <- french single quote left @@ -67,63 +120,94 @@ public: \item etc. \end{itemize} */ - explicit - InsetQuotes(std::string const & str = "eld"); - /// Create the right quote inset after character c - InsetQuotes(char_type c, BufferParams const & params); + explicit InsetQuotes(Buffer * buf, std::string const & str = "eld"); /// Direct access to inner/outer quotation marks - InsetQuotes(char_type c, quote_language l, quote_times t); + InsetQuotes(Buffer * buf, char_type c, InsetQuotesParams::QuoteLevel level, + std::string const & side = std::string(), + std::string const & style = std::string()); /// - docstring insetName() const { return from_ascii("Quotes"); } + docstring layoutName() const; /// - bool metrics(MetricsInfo &, Dimension &) const; + void metrics(MetricsInfo &, Dimension &) const; /// void draw(PainterInfo & pi, int x, int y) const; -#if 0 /// - LyXFont const convertFont(LyXFont const & font) const; -#endif + void write(std::ostream &) const; + /// + void read(Lexer & lex); /// - void write(Buffer const &, std::ostream &) const; + bool getStatus(Cursor &, FuncRequest const &, FuncStatus &) const; /// - void read(Buffer const &, Lexer & lex); + void latex(otexstream &, OutputParams const &) const; /// - int latex(Buffer const &, odocstream &, OutputParams const &) const; + int plaintext(odocstringstream & ods, OutputParams const & op, + size_t max_length = INT_MAX) const; /// - int plaintext(Buffer const &, odocstream &, OutputParams const &) const; + int docbook(odocstream &, OutputParams const &) const; + /// + docstring xhtml(XHTMLStream &, OutputParams const &) const; + + /// + void toString(odocstream &) const; /// - int docbook(Buffer const &, odocstream &, OutputParams const &) const; + void forOutliner(docstring &, size_t const maxlen, bool const) const; - /// the string that is passed to the TOC - virtual void textString(Buffer const &, odocstream &) const; + /// Update the contextual information of this inset + void updateBuffer(ParIterator const &, UpdateType); /// void validate(LaTeXFeatures &) const; /// - Inset::Code lyxCode() const; - // should this inset be handled like a normal character + std::string contextMenuName() const; + /// + InsetCode lyxCode() const { return QUOTE_CODE; } + /// should this inset be handled like a normal character bool isChar() const { return true; } + /// Returns the current quote type + std::string getType() const; + private: - virtual std::auto_ptr doClone() const; + /// + Inset * clone() const { return new InsetQuotes(*this); } + /// Decide whether we need left or right quotation marks + void setSide(char_type c); /// - quote_language language_; + void parseString(std::string const &, + bool const allow_wildcards = false); /// - quote_side side_; + docstring displayString() const; /// - quote_times times_; + docstring getQuoteEntity() const; + /// + InsetQuotesParams::QuoteStyle getStyle(std::string const &); - /** The parameters of the constructor are the language, the - side and the multiplicity of the quote. - */ - InsetQuotes(quote_language l, quote_side s, quote_times t); - /// Decide whether we need left or right quotation marks - void getPosition(char_type c); /// - void parseString(std::string const &); + InsetQuotesParams::QuoteStyle style_; + /// + InsetQuotesParams::QuoteSide side_; + /// + InsetQuotesParams::QuoteLevel level_; + /// + InsetQuotesParams::QuoteStyle global_style_; + /// + std::string fontenc_; + /// Code of the contextual language + std::string context_lang_; + /// Is this in a pass-thru context? + bool pass_thru_; + /// Do we use fontspec? + bool fontspec_; + /// + friend class InsetQuotesParams; + +protected: + /// \name Protected functions inherited from Inset class + //@{ /// - lyx::docstring const dispString(Language const *) const; + void doDispatch(Cursor & cur, FuncRequest & cmd); + //@} }; } // namespace lyx