* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
- * \author Lars Gullik Bjønnes
+ * \author Lars Gullik Bjønnes
* \author Jean-Marc Lasgouttes
* \author Angus Leeming
* \author Dekel Tsur
#ifndef FONT_PROPERTIES_H
#define FONT_PROPERTIES_H
-#ifdef TEX2LYX
-#include "tex2lyx/Font.h"
-#else
-
+#include "Color.h"
#include "ColorCode.h"
#include "FontEnums.h"
+#include "support/Changer.h"
+#include "support/strfwd.h"
+
+
namespace lyx {
+namespace support { class Lexer; }
+
///
class FontInfo
{
public:
///
- FontInfo::FontInfo();
+ FontInfo();
///
- FontInfo::FontInfo(
+ FontInfo(
FontFamily family,
FontSeries series,
- FontShape shape,
- FontSize size,
- ColorCode color,
- ColorCode background,
- FontState emph,
- FontState underbar,
- FontState noun,
- FontState number
- ): family_(family), series_(series), shape_(shape), size_(size),
- color_(color), background_(background), emph_(emph),
- underbar_(underbar), noun_(noun), number_(number)
+ FontShape shape,
+ FontSize size,
+ MathStyle style,
+ ColorCode color,
+ ColorCode background,
+ FontState emph,
+ FontState underbar,
+ FontState strikeout,
+ FontState xout,
+ FontState uuline,
+ FontState uwave,
+ FontState noun,
+ FontState number,
+ FontState nospellcheck)
+ : family_(family), series_(series), shape_(shape), size_(size),
+ style_(style), color_(color), background_(background), emph_(emph),
+ underbar_(underbar), strikeout_(strikeout), xout_(xout), uuline_(uuline),
+ uwave_(uwave), noun_(noun), number_(number), nospellcheck_(nospellcheck)
{}
/// Decreases font size by one
/// Increases font size by one
FontInfo & incSize();
- /// Accessor methods.
- ///@{
+ /// \name Accessor methods
+ //@{
FontFamily family() const { return family_; }
void setFamily(FontFamily f) { family_ = f; }
FontSeries series() const { return series_; }
void setShape(FontShape s) { shape_ = s; }
FontSize size() const { return size_; }
void setSize(FontSize s) { size_ = s; }
+ MathStyle style() const {return style_; }
+ void setStyle(MathStyle s) { style_ = s; }
FontState emph() const { return emph_; }
void setEmph(FontState e) { emph_ = e; }
FontState underbar() const { return underbar_; }
void setUnderbar(FontState u) { underbar_ = u; }
+ FontState strikeout() const { return strikeout_; }
+ void setStrikeout(FontState s) { strikeout_ = s; }
+ FontState xout() const { return xout_; }
+ void setXout(FontState s) { xout_ = s; }
+ FontState uuline() const { return uuline_; }
+ void setUuline(FontState s) { uuline_ = s; }
+ FontState uwave() const { return uwave_; }
+ void setUwave(FontState s) { uwave_ = s; }
FontState noun() const { return noun_; }
void setNoun(FontState n) { noun_ = n; }
FontState number() const { return number_; }
void setColor(ColorCode c) { color_ = c; }
ColorCode background() const { return background_; }
void setBackground(ColorCode b) { background_ = b; }
- ///@}
+ FontState nospellcheck() const { return nospellcheck_; }
+ void setNoSpellcheck(FontState n) { nospellcheck_ = n; }
+ //@}
///
void update(FontInfo const & newfont, bool toggleall);
/// Is a given font fully resolved?
bool resolved() const;
+ /// The real color of the font. This can be the color that is
+ /// set for painting, the color of the font or a default color.
+ Color realColor() const;
+ /// Sets the color which is used during painting
+ void setPaintColor(Color c) { paint_color_ = c; }
+
+ /// Compute the font size, taking size and math style into account.
+ double realSize() const;
+
///
- ColorCode realColor() const;
+ docstring asCSS() const;
/// Converts logical attributes to concrete shape attribute
- // Try hard to inline this as it shows up with 4.6 % in the profiler.
+ /// Try hard to inline this as it shows up with 4.6 % in the profiler.
FontShape realShape() const
{
if (noun_ == FONT_ON)
return SMALLCAPS_SHAPE;
if (emph_ == FONT_ON)
- return (shape_ == UP_SHAPE) ? ITALIC_SHAPE : UP_SHAPE;
+ return (shape_ == ITALIC_SHAPE || shape_ == SLANTED_SHAPE)
+ ? UP_SHAPE : ITALIC_SHAPE;
return shape_;
}
case CMEX_FAMILY:
case MSA_FAMILY:
case MSB_FAMILY:
+ case STMARY_FAMILY:
case WASY_FAMILY:
case ESINT_FAMILY:
return true;
}
}
- /*
- FontInfo & operator=(FontInfo const & rhs)
- {
- family_ = rhs.family_;
- series_ = rhs.series_;
- shape_ = rhs.shape_;
- size_ = rhs.size_;
- color_ = rhs.color_;
- background_ = rhs.background_;
- emph_ = rhs.emph_;
- underbar_ = rhs.underbar_;
- noun_ = rhs.noun_;
- number_ = rhs.number_;
- }
- */
+ /// Temporarily replace the color with \param color.
+ Changer changeColor(ColorCode const color);
+ /// Temporarily replace the shape with \param shape.
+ Changer changeShape(FontShape const shape);
+ /// Temporarily replace the style
+ Changer changeStyle(MathStyle style);
+ /// Temporarily replace the FontInfo with \param font, and optionally
+ /// \param realize the \param font against the current FontInfo.
+ Changer change(FontInfo font, bool realize = false);
+
+ /// Build GUI description of font state
+ docstring const stateText(bool const terse = false) const;
private:
friend bool operator==(FontInfo const & lhs, FontInfo const & rhs);
///
FontSize size_;
///
+ MathStyle style_;
+ ///
ColorCode color_;
///
ColorCode background_;
+ /// The color used for painting
+ Color paint_color_;
///
FontState emph_;
///
FontState underbar_;
///
+ FontState strikeout_;
+ ///
+ FontState xout_;
+ ///
+ FontState uuline_;
+ ///
+ FontState uwave_;
+ ///
FontState noun_;
///
FontState number_;
+ ///
+ FontState nospellcheck_;
};
&& lhs.series_ == rhs.series_
&& lhs.shape_ == rhs.shape_
&& lhs.size_ == rhs.size_
+ && lhs.style_ == rhs.style_
&& lhs.color_ == rhs.color_
&& lhs.background_ == rhs.background_
&& lhs.emph_ == rhs.emph_
&& lhs.underbar_ == rhs.underbar_
+ && lhs.strikeout_ == rhs.strikeout_
+ && lhs.xout_ == rhs.xout_
+ && lhs.uuline_ == rhs.uuline_
+ && lhs.uwave_ == rhs.uwave_
&& lhs.noun_ == rhs.noun_
- && lhs.number_ == rhs.number_;
+ && lhs.number_ == rhs.number_
+ && lhs.nospellcheck_ == rhs.nospellcheck_;
}
/// All ignore font.
extern FontInfo const ignore_font;
+/// Set family after LyX text format
+void setLyXFamily(std::string const &, FontInfo &);
+
+/// Set series after LyX text format
+void setLyXSeries(std::string const &, FontInfo &);
+
+/// Set shape after LyX text format
+void setLyXShape(std::string const &, FontInfo &);
+
+/// Set size after LyX text format
+void setLyXSize(std::string const &, FontInfo &);
+
+/// Sets color after LyX text format
+void setLyXColor(std::string const &, FontInfo &);
+
+/// Returns misc flag after LyX text format
+FontState setLyXMisc(std::string const &);
+
+/// Read a font specification from Lexer. Used for layout files.
+FontInfo lyxRead(support::Lexer &, FontInfo const & fi = sane_font);
+
+/// Write a font specification. Used for layout files.
+void lyxWrite(std::ostream &, FontInfo const &, std::string const &, int);
+
} // namespace lyx
-#endif // TEX2LYX_FONT_H
#endif