summaryrefslogtreecommitdiffstats
path: root/src/style-internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/style-internal.h')
-rw-r--r--src/style-internal.h79
1 files changed, 75 insertions, 4 deletions
diff --git a/src/style-internal.h b/src/style-internal.h
index a8f0c5096..1ddab30f1 100644
--- a/src/style-internal.h
+++ b/src/style-internal.h
@@ -501,12 +501,83 @@ public:
public:
SPStyleEnum const *enums;
- unsigned value : 8;
- unsigned computed: 8;
+ unsigned value : 16; // 9 bits required for 'font-variant-east-asian'
+ unsigned computed: 16;
private:
- unsigned value_default : 8;
- unsigned computed_default: 8; // for font-weight
+ unsigned value_default : 16;
+ unsigned computed_default: 16; // for font-weight
+};
+
+
+/// SPIEnum w/ bits, allows values with multiple key words.
+class SPIEnumBits : public SPIEnum
+{
+
+public:
+ SPIEnumBits() :
+ SPIEnum( "anonymous_enumbits", NULL )
+ {}
+
+ SPIEnumBits( Glib::ustring const &name, SPStyleEnum const *enums, unsigned value = 0, bool inherits = true ) :
+ SPIEnum( name, enums, value, inherit )
+ {}
+
+ virtual ~SPIEnumBits()
+ {}
+
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+
+};
+
+
+/// SPIEnum w/ extra bits. The 'font-variants-ligatures' property is a complete mess that needs
+/// special handling. For OpenType fonts the values 'common-ligatures', 'contextual',
+/// 'no-discretionary-ligatures', and 'no-historical-ligatures' are not useful but we still must be
+/// able to parse them.
+class SPILigatures : public SPIEnum
+{
+
+public:
+ SPILigatures() :
+ SPIEnum( "anonymous_enumligatures", NULL )
+ {}
+
+ SPILigatures( Glib::ustring const &name, SPStyleEnum const *enums) :
+ SPIEnum( name, enums, SP_CSS_FONT_VARIANT_LIGATURES_NORMAL )
+ {}
+
+ virtual ~SPILigatures()
+ {}
+
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
+};
+
+
+/// SPIEnum w/ extra bits. The 'font-variants-numeric' property is a complete mess that needs
+/// special handling. Multiple key words can be specified, some exclusive of others.
+class SPINumeric : public SPIEnum
+{
+
+public:
+ SPINumeric() :
+ SPIEnum( "anonymous_enumnumeric", NULL )
+ {}
+
+ SPINumeric( Glib::ustring const &name, SPStyleEnum const *enums) :
+ SPIEnum( name, enums, SP_CSS_FONT_VARIANT_NUMERIC_NORMAL )
+ {}
+
+ virtual ~SPINumeric()
+ {}
+
+ virtual void read( gchar const *str );
+ virtual const Glib::ustring write( guint const flags = SP_STYLE_FLAG_IFSET,
+ SPIBase const *const base = NULL ) const;
};