summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/attributes-test.h3
-rw-r--r--src/attributes.cpp2
-rw-r--r--src/attributes.h2
-rw-r--r--src/libnrtype/Layout-TNG-Input.cpp7
-rw-r--r--src/style-enums.h39
-rw-r--r--src/style.cpp27
-rw-r--r--src/style.h8
7 files changed, 49 insertions, 39 deletions
diff --git a/src/attributes-test.h b/src/attributes-test.h
index 411304ec3..e197deedf 100644
--- a/src/attributes-test.h
+++ b/src/attributes-test.h
@@ -43,6 +43,7 @@ public:
SVG 2: text-decoration-fill, text-decoration-stroke
SVG 2: solid-color, solid-opacity
SVG 2: Hatches and Meshes
+ CSS 3: text-orientation
CSS 3: font-variant-xxx, font-feature-settings
*/
struct {char const *attr; bool supported;} const all_attrs[] = {
@@ -69,7 +70,6 @@ struct {char const *attr; bool supported;} const all_attrs[] = {
{"baseProfile", false},
{"bbox", true},
{"bias", true},
- {"block-progression", true},
{"by", true},
{"calcMode", true},
{"cap-height", true},
@@ -334,6 +334,7 @@ struct {char const *attr; bool supported;} const all_attrs[] = {
{"widths", true},
{"word-spacing", true},
{"writing-mode", true},
+ {"text-orientation", true},
{"x", true},
{"x-height", true},
{"x1", true},
diff --git a/src/attributes.cpp b/src/attributes.cpp
index 991834cb2..a237f8861 100644
--- a/src/attributes.cpp
+++ b/src/attributes.cpp
@@ -440,8 +440,8 @@ static SPStyleProp const props[] = {
/* Text (css3) */
{SP_PROP_DIRECTION, "direction"},
- {SP_PROP_BLOCK_PROGRESSION, "block-progression"},
{SP_PROP_WRITING_MODE, "writing-mode"},
+ {SP_PROP_TEXT_ORIENTATION, "text-orientation"},
{SP_PROP_UNICODE_BIDI, "unicode-bidi"},
{SP_PROP_ALIGNMENT_BASELINE, "alignment-baseline"},
{SP_PROP_BASELINE_SHIFT, "baseline-shift"},
diff --git a/src/attributes.h b/src/attributes.h
index 47f1388b0..42ec99d8f 100644
--- a/src/attributes.h
+++ b/src/attributes.h
@@ -444,8 +444,8 @@ enum SPAttributeEnum {
SP_PROP_TEXT_TRANSFORM,
SP_PROP_DIRECTION,
- SP_PROP_BLOCK_PROGRESSION,
SP_PROP_WRITING_MODE,
+ SP_PROP_TEXT_ORIENTATION,
SP_PROP_UNICODE_BIDI,
SP_PROP_ALIGNMENT_BASELINE,
SP_PROP_BASELINE_SHIFT,
diff --git a/src/libnrtype/Layout-TNG-Input.cpp b/src/libnrtype/Layout-TNG-Input.cpp
index c9cfe81cc..9c2fc5c11 100644
--- a/src/libnrtype/Layout-TNG-Input.cpp
+++ b/src/libnrtype/Layout-TNG-Input.cpp
@@ -172,11 +172,6 @@ float Layout::InputStreamTextSource::styleComputeFontSize() const
return medium_font_size * inherit_multiplier;
}
-static const Layout::EnumConversionItem enum_convert_spstyle_block_progression_to_direction[] = {
- {SP_CSS_BLOCK_PROGRESSION_TB, Layout::TOP_TO_BOTTOM},
- {SP_CSS_BLOCK_PROGRESSION_LR, Layout::LEFT_TO_RIGHT},
- {SP_CSS_BLOCK_PROGRESSION_RL, Layout::RIGHT_TO_LEFT}};
-
static const Layout::EnumConversionItem enum_convert_spstyle_writing_mode_to_direction[] = {
{SP_CSS_WRITING_MODE_LR_TB, Layout::TOP_TO_BOTTOM},
{SP_CSS_WRITING_MODE_RL_TB, Layout::TOP_TO_BOTTOM},
@@ -190,8 +185,6 @@ Layout::Direction Layout::InputStreamTextSource::styleGetBlockProgression() cons
SPStyle const *this_style = style;
for ( ; ; ) {
- if (this_style->block_progression.set)
- return (Layout::Direction)_enum_converter(this_style->block_progression.computed, enum_convert_spstyle_block_progression_to_direction, sizeof(enum_convert_spstyle_block_progression_to_direction)/sizeof(enum_convert_spstyle_block_progression_to_direction[0]));
if (this_style->writing_mode.set)
return (Layout::Direction)_enum_converter(this_style->writing_mode.computed, enum_convert_spstyle_writing_mode_to_direction, sizeof(enum_convert_spstyle_writing_mode_to_direction)/sizeof(enum_convert_spstyle_writing_mode_to_direction[0]));
if (this_style->object == NULL || this_style->object->parent == NULL) break;
diff --git a/src/style-enums.h b/src/style-enums.h
index dfc99282c..03255b3b1 100644
--- a/src/style-enums.h
+++ b/src/style-enums.h
@@ -163,12 +163,6 @@ enum SPCSSDirection {
SP_CSS_DIRECTION_RTL
};
-enum SPCSSBlockProgression {
- SP_CSS_BLOCK_PROGRESSION_TB,
- SP_CSS_BLOCK_PROGRESSION_RL,
- SP_CSS_BLOCK_PROGRESSION_LR
-};
-
enum SPCSSWritingMode {
SP_CSS_WRITING_MODE_LR_TB,
SP_CSS_WRITING_MODE_RL_TB,
@@ -176,6 +170,16 @@ enum SPCSSWritingMode {
SP_CSS_WRITING_MODE_TB_LR
};
+// CSS WRITING MODES 3
+enum SPCSSTextOrientation {
+ SP_CSS_TEXT_ORIENTATION_MIXED,
+ SP_CSS_TEXT_ORIENTATION_UPRIGHT,
+ SP_CSS_TEXT_ORIENTATION_SIDEWAYS_RIGHT,
+ SP_CSS_TEXT_ORIENTATION_SIDEWAYS_LEFT,
+ SP_CSS_TEXT_ORIENTATION_SIDEWAYS,
+ SP_CSS_TEXT_ORIENTATION_USE_GLYPH_ORIENTATION
+};
+
enum SPTextAnchor {
SP_CSS_TEXT_ANCHOR_START,
SP_CSS_TEXT_ANCHOR_MIDDLE,
@@ -489,13 +493,6 @@ static SPStyleEnum const enum_direction[] = {
{NULL, -1}
};
-static SPStyleEnum const enum_block_progression[] = {
- {"tb", SP_CSS_BLOCK_PROGRESSION_TB},
- {"rl", SP_CSS_BLOCK_PROGRESSION_RL},
- {"lr", SP_CSS_BLOCK_PROGRESSION_LR},
- {NULL, -1}
-};
-
static SPStyleEnum const enum_writing_mode[] = {
/* Note that using the same enumerator for lr as lr-tb means we write as lr-tb even if the
* input file said lr. We prefer writing lr-tb on the grounds that the spec says the initial
@@ -504,12 +501,28 @@ static SPStyleEnum const enum_writing_mode[] = {
* ECMA scripts may be surprised to find tb-rl in DOM if they set the attribute to rl, so
* sharing enumerators for different strings may be a bug (once we support ecma script).
*/
+ // SVG 1.1 Deprecated but still must be supported in SVG 2.
{"lr-tb", SP_CSS_WRITING_MODE_LR_TB},
{"rl-tb", SP_CSS_WRITING_MODE_RL_TB},
{"tb-rl", SP_CSS_WRITING_MODE_TB_RL},
{"lr", SP_CSS_WRITING_MODE_LR_TB},
{"rl", SP_CSS_WRITING_MODE_RL_TB},
{"tb", SP_CSS_WRITING_MODE_TB_RL},
+ // SVG 2 & CSS 3 Writing Modes
+ {"horizontal-tb", SP_CSS_WRITING_MODE_LR_TB}, // This is correct, 'direction' distinguishes between 'lr' and 'rl'.
+ {"vertical-rl", SP_CSS_WRITING_MODE_TB_RL},
+ {"vertical-lr", SP_CSS_WRITING_MODE_TB_LR},
+ {NULL, -1}
+};
+
+// CSS WRITING MODES 3
+static SPStyleEnum const enum_text_orientation[] = {
+ {"mixed", SP_CSS_TEXT_ORIENTATION_MIXED}, // Default
+ {"upright", SP_CSS_TEXT_ORIENTATION_UPRIGHT},
+ {"sideways-right", SP_CSS_TEXT_ORIENTATION_SIDEWAYS_RIGHT},
+ {"sideways-left", SP_CSS_TEXT_ORIENTATION_SIDEWAYS_LEFT},
+ {"sideways", SP_CSS_TEXT_ORIENTATION_SIDEWAYS},
+ {"use-glyph-orientation", SP_CSS_TEXT_ORIENTATION_USE_GLYPH_ORIENTATION},
{NULL, -1}
};
diff --git a/src/style.cpp b/src/style.cpp
index 0cb5db0a7..369127792 100644
--- a/src/style.cpp
+++ b/src/style.cpp
@@ -136,8 +136,8 @@ SPStyle::SPStyle(SPDocument *document_in, SPObject *object_in) :
text_transform( "text-transform", enum_text_transform, SP_CSS_TEXT_TRANSFORM_NONE ),
direction( "direction", enum_direction, SP_CSS_DIRECTION_LTR ),
- block_progression("block-progression", enum_block_progression, SP_CSS_BLOCK_PROGRESSION_TB),
writing_mode( "writing-mode", enum_writing_mode, SP_CSS_WRITING_MODE_LR_TB ),
+ text_orientation( "text-orientation",enum_text_orientation,SP_CSS_TEXT_ORIENTATION_MIXED ),
baseline_shift(),
text_anchor( "text-anchor", enum_text_anchor, SP_CSS_TEXT_ANCHOR_START ),
white_space( "white-space", enum_white_space, SP_CSS_WHITE_SPACE_NORMAL ),
@@ -318,9 +318,9 @@ SPStyle::SPStyle(SPDocument *document_in, SPObject *object_in) :
_properties.push_back( &word_spacing );
_properties.push_back( &text_transform );
- _properties.push_back( &direction );
- _properties.push_back( &block_progression );
_properties.push_back( &writing_mode );
+ _properties.push_back( &direction );
+ _properties.push_back( &text_orientation );
_properties.push_back( &baseline_shift );
_properties.push_back( &text_anchor );
_properties.push_back( &white_space );
@@ -413,8 +413,8 @@ SPStyle::SPStyle(SPDocument *document_in, SPObject *object_in) :
// _propmap.insert( std::make_pair( text_transform.name, reinterpret_cast<SPIBasePtr>(&SPStyle::text_transform ) ) );
// _propmap.insert( std::make_pair( direction.name, reinterpret_cast<SPIBasePtr>(&SPStyle::direction ) ) );
- // _propmap.insert( std::make_pair( block_progression.name, reinterpret_cast<SPIBasePtr>(&SPStyle::block_progression ) ) );
// _propmap.insert( std::make_pair( writing_mode.name, reinterpret_cast<SPIBasePtr>(&SPStyle::writing_mode ) ) );
+ // _propmap.insert( std::make_pair( text_orientation.name, reinterpret_cast<SPIBasePtr>(&SPStyle::text_orientation ) ) );
// _propmap.insert( std::make_pair( baseline_shift.name, reinterpret_cast<SPIBasePtr>(&SPStyle::baseline_shift ) ) );
// _propmap.insert( std::make_pair( text_anchor.name, reinterpret_cast<SPIBasePtr>(&SPStyle::text_anchor ) ) );
// _propmap.insert( std::make_pair( white_space.name, reinterpret_cast<SPIBasePtr>(&SPStyle::white_space ) ) );
@@ -778,12 +778,12 @@ SPStyle::readIfUnset( gint id, gchar const *val ) {
case SP_PROP_DIRECTION:
direction.readIfUnset( val );
break;
- case SP_PROP_BLOCK_PROGRESSION:
- block_progression.readIfUnset( val );
- break;
case SP_PROP_WRITING_MODE:
writing_mode.readIfUnset( val );
break;
+ case SP_PROP_TEXT_ORIENTATION:
+ text_orientation.readIfUnset( val );
+ break;
case SP_PROP_TEXT_ANCHOR:
text_anchor.readIfUnset( val );
break;
@@ -1689,16 +1689,19 @@ sp_style_unset_property_attrs(SPObject *o)
repr->setAttribute("text-anchor", NULL);
}
if (style->white_space.set) {
- repr->setAttribute("white_space", NULL);
+ repr->setAttribute("white-space", NULL);
}
if (style->shape_inside.set) {
- repr->setAttribute("shape_inside", NULL);
+ repr->setAttribute("shape-inside", NULL);
}
if (style->shape_padding.set) {
- repr->setAttribute("shape_padding", NULL);
+ repr->setAttribute("shape-padding", NULL);
}
if (style->writing_mode.set) {
- repr->setAttribute("writing_mode", NULL);
+ repr->setAttribute("writing-mode", NULL);
+ }
+ if (style->text_orientation.set) {
+ repr->setAttribute("text-orientation", NULL);
}
if (style->filter.set) {
repr->setAttribute("filter", NULL);
@@ -1781,8 +1784,8 @@ sp_css_attr_unset_text(SPCSSAttr *css)
sp_repr_css_set_property(css, "word-spacing", NULL);
sp_repr_css_set_property(css, "text-transform", NULL);
sp_repr_css_set_property(css, "direction", NULL);
- sp_repr_css_set_property(css, "block-progression", NULL);
sp_repr_css_set_property(css, "writing-mode", NULL);
+ sp_repr_css_set_property(css, "text-orientation", NULL);
sp_repr_css_set_property(css, "text-anchor", NULL);
sp_repr_css_set_property(css, "white-space", NULL);
sp_repr_css_set_property(css, "shape-inside", NULL);
diff --git a/src/style.h b/src/style.h
index 02432d3e7..3948b876c 100644
--- a/src/style.h
+++ b/src/style.h
@@ -142,12 +142,12 @@ public:
SPIEnum text_transform;
/* CSS3 Text */
- /** text direction (css3 text 3.2) */
+ /** text direction (svg1.1) */
SPIEnum direction;
- /** block progression (css3 text 3.2) */
- SPIEnum block_progression;
- /** Writing mode (css3 text 3.2 and svg1.1 10.7.2) */
+ /** Writing mode (svg1.1 10.7.2, CSS Writing Modes 3) */
SPIEnum writing_mode;
+ /** Text orientation (CSS Writing Modes 3) */
+ SPIEnum text_orientation;
/** Baseline shift (svg1.1 10.9.2) */
SPIBaselineShift baseline_shift;