* 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.
*/
#ifndef INSET_QUOTES_H
#define INSET_QUOTES_H
-
#include "Inset.h"
-#include "support/types.h"
+#include <map>
namespace lyx {
-class BufferParams;
-class Language;
-class LaTeXFeatures;
+///
+enum class QuoteStyle : int {
+ ///
+ English,
+ ///
+ Swedish,
+ ///
+ German,
+ ///
+ Polish,
+ ///
+ Swiss,
+ ///
+ Danish,
+ ///
+ Plain,
+ ///
+ British,
+ ///
+ SwedishG,
+ ///
+ French,
+ ///
+ FrenchIN,
+ ///
+ Russian,
+ ///
+ CJK,
+ ///
+ CJKAngle,
+ ///
+ Hungarian,
+ ///
+ Dynamic
+};
+
+///
+enum class QuoteSide : int {
+ ///
+ Opening,
+ ///
+ Closing
+};
+
+///
+enum class QuoteLevel : int {
+ ///
+ Secondary,
+ ///
+ Primary
+};
/** Quotes.
Used for the various quotes. German, English, French, all either
double or single **/
-class InsetQuotes : public InsetOld {
+class InsetQuotesParams {
public:
- ///
- enum quote_language {
- ///
- EnglishQ,
- ///
- SwedishQ,
- ///
- GermanQ,
- ///
- PolishQ,
- ///
- FrenchQ,
- ///
- DanishQ
- };
- ///
- enum quote_side {
- ///
- LeftQ,
- ///
- RightQ
- };
- ///
- enum quote_times {
- ///
- SingleQ,
- ///
- DoubleQ
- };
+ /// Returns the unicode character of a given quote
+ char_type getQuoteChar(QuoteStyle const &, QuoteLevel const &,
+ QuoteSide const &, bool const rtl = false) const;
+ /// Returns a map of quotation marks
+ std::map<std::string, docstring> getTypes() const;
+ ///
+ docstring getLaTeXQuote(char_type c, std::string const &,
+ bool const rtl = false) const;
+ ///
+ docstring getHTMLQuote(char_type c) const;
+ ///
+ docstring getXMLQuote(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) const;
+ /// Returns a descriptive label of a given char
+ docstring const getShortGuiLabel(docstring const & str) const;
+ ///
+ 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 = QuoteStyle::English) const;
+ /// Returns the quote sind from the shortcut string
+ QuoteSide getQuoteSide(std::string const & s,
+ bool const allow_wildcards = false,
+ QuoteSide fallback = QuoteSide::Opening) const;
+ /// Returns the quote level from the shortcut string
+ QuoteLevel getQuoteLevel(std::string const & s,
+ bool const allow_wildcards = false,
+ QuoteLevel fallback = QuoteLevel::Primary) const;
+};
+
+///
+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
\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, QuoteLevel level,
+ std::string const & side = std::string(),
+ std::string const & style = std::string());
///
- bool metrics(MetricsInfo &, Dimension &) const;
+ docstring layoutName() const override;
///
- void draw(PainterInfo & pi, int x, int y) const;
-#if 0
+ void metrics(MetricsInfo &, Dimension &) const override;
///
- LyXFont const convertFont(LyXFont const & font) const;
-#endif
+ void draw(PainterInfo & pi, int x, int y) const override;
+ ///
+ void write(std::ostream &) const override;
///
- void write(Buffer const &, std::ostream &) const;
+ void read(Lexer & lex) override;
///
- void read(Buffer const &, LyXLex & lex);
+ bool getStatus(Cursor &, FuncRequest const &, FuncStatus &) const 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;
+ void docbook(XMLStream &, OutputParams const &) const override;
+ ///
+ docstring xhtml(XMLStream &, OutputParams const &) const override;
- /// the string that is passed to the TOC
- virtual void textString(Buffer const &, odocstream &) const;
+ ///
+ void toString(odocstream &) const override;
+ ///
+ void forOutliner(docstring &, size_t const maxlen, bool const) const override;
+ /// Update the contextual information of this inset
+ void updateBuffer(ParIterator const &, UpdateType, bool const deleted = false) override;
+
+ ///
+ void validate(LaTeXFeatures &) const override;
///
- void validate(LaTeXFeatures &) const;
+ std::string contextMenuName() const override;
///
- InsetBase::Code lyxCode() const;
- // should this inset be handled like a normal character
- bool isChar() const { return true; }
+ InsetCode lyxCode() const override { return QUOTE_CODE; }
+ /// should this inset be handled like a normal character
+ bool isChar() const override { return true; }
+
+ /// Returns the current quote type
+ std::string getType() const;
private:
- virtual std::auto_ptr<InsetBase> doClone() const;
+ ///
+ Inset * clone() const override { return new InsetQuotes(*this); }
+ /// Decide whether we need left or right quotation marks
+ void setSide(char_type c);
+ ///
+ void parseString(std::string const &,
+ bool const allow_wildcards = false);
///
- quote_language language_;
+ docstring displayString() const;
///
- quote_side side_;
+ docstring getQuoteEntity(bool isHTML) const;
///
- quote_times times_;
+ 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 &);
+ QuoteStyle style_ = QuoteStyle::English;
+ ///
+ QuoteSide side_ = QuoteSide::Opening;
+ ///
+ QuoteLevel level_ = QuoteLevel::Primary;
+ ///
+ QuoteStyle global_style_ = QuoteStyle::English;
+ /// Code of the contextual language
+ std::string context_lang_;
+ /// Is this in a pass-thru context?
+ bool pass_thru_ = false;
+ /// Do we use fontspec?
+ bool fontspec_ = false;
+ /// Do we have an internal font encoding?
+ bool internal_fontenc_ = false;
+ /// Are we writing RTL?
+ bool rtl_ = false;
+ ///
+ friend class InsetQuotesParams;
+
+protected:
+ /// \name Protected functions inherited from Inset class
+ //@{
///
- lyx::docstring const dispString(Language const *) const;
+ void doDispatch(Cursor & cur, FuncRequest & cmd) override;
+ //@}
};
} // namespace lyx