contrib/liborcus/bugfix-0.18.0-unset-border-colors.patch.1

237 lines
12 KiB
Groff

diff --git a/src/liborcus/xls_xml_context.cpp b/src/liborcus/xls_xml_context.cpp
index 85916fc7..739678ee 100644
--- a/src/liborcus/xls_xml_context.cpp
+++ b/src/liborcus/xls_xml_context.cpp
@@ -1292,7 +1292,7 @@ void xls_xml_context::start_element_border(const xml_token_attrs_t& attrs)
{
ss::border_direction_t dir = ss::border_direction_t::unknown;
ss::border_style_t style = ss::border_style_t::unknown;
- ss::color_rgb_t color;
+ std::optional<ss::color_rgb_t> color;
long weight = 0;
for (const xml_token_attr_t& attr : attrs)
@@ -1950,8 +1950,14 @@ void xls_xml_context::commit_default_style()
{
for (const border_style_type& b : m_default_style->borders)
{
- border_style->set_style(b.dir, b.style);
- border_style->set_color(b.dir, 255, b.color.red, b.color.green, b.color.blue);
+ if (b.dir == ss::border_direction_t::unknown)
+ continue;
+
+ if (b.style != ss::border_style_t::unknown)
+ border_style->set_style(b.dir, b.style);
+
+ if (b.color)
+ border_style->set_color(b.dir, 255, b.color->red, b.color->green, b.color->blue);
}
}
@@ -2109,8 +2115,14 @@ void xls_xml_context::commit_styles()
for (const border_style_type& b : style->borders)
{
- border_style->set_style(b.dir, b.style);
- border_style->set_color(b.dir, 255, b.color.red, b.color.green, b.color.blue);
+ if (b.dir == ss::border_direction_t::unknown)
+ continue;
+
+ if (b.style != ss::border_style_t::unknown)
+ border_style->set_style(b.dir, b.style);
+
+ if (b.color)
+ border_style->set_color(b.dir, 255, b.color->red, b.color->green, b.color->blue);
}
size_t border_id = border_style->commit();
diff --git a/src/liborcus/xls_xml_context.hpp b/src/liborcus/xls_xml_context.hpp
index 9f00bb07..d7377e42 100644
--- a/src/liborcus/xls_xml_context.hpp
+++ b/src/liborcus/xls_xml_context.hpp
@@ -127,7 +127,7 @@ class xls_xml_context : public xml_context_base
{
spreadsheet::border_direction_t dir = spreadsheet::border_direction_t::unknown;
spreadsheet::border_style_t style = spreadsheet::border_style_t::unknown;
- spreadsheet::color_rgb_t color;
+ std::optional<spreadsheet::color_rgb_t> color;
};
struct font_style_type
diff --git a/src/orcus_test_xls_xml.cpp b/src/orcus_test_xls_xml.cpp
index 627c957d..f20603c6 100644
--- a/src/orcus_test_xls_xml.cpp
+++ b/src/orcus_test_xls_xml.cpp
@@ -756,73 +756,171 @@ void test_xls_xml_cell_borders_directions()
case ss::border_direction_t::top:
assert(border->top.style);
assert(*border->top.style == ss::border_style_t::thin);
+ assert(!border->top.border_color);
+ assert(!border->top.border_width);
assert(!border->bottom.style);
+ assert(!border->bottom.border_color);
+ assert(!border->bottom.border_width);
assert(!border->left.style);
+ assert(!border->left.border_color);
+ assert(!border->left.border_width);
assert(!border->right.style);
+ assert(!border->right.border_color);
+ assert(!border->right.border_width);
assert(!border->diagonal.style);
+ assert(!border->diagonal.border_color);
+ assert(!border->diagonal.border_width);
assert(!border->diagonal_bl_tr.style);
+ assert(!border->diagonal_bl_tr.border_color);
+ assert(!border->diagonal_bl_tr.border_width);
assert(!border->diagonal_tl_br.style);
+ assert(!border->diagonal_tl_br.border_color);
+ assert(!border->diagonal_tl_br.border_width);
break;
case ss::border_direction_t::left:
assert(!border->top.style);
+ assert(!border->top.border_color);
+ assert(!border->top.border_width);
assert(!border->bottom.style);
+ assert(!border->bottom.border_color);
+ assert(!border->bottom.border_width);
assert(border->left.style);
assert(*border->left.style == ss::border_style_t::thin);
+ assert(!border->left.border_color);
+ assert(!border->left.border_width);
assert(!border->right.style);
+ assert(!border->right.border_color);
+ assert(!border->right.border_width);
assert(!border->diagonal.style);
+ assert(!border->diagonal.border_color);
+ assert(!border->diagonal.border_width);
assert(!border->diagonal_bl_tr.style);
+ assert(!border->diagonal_bl_tr.border_color);
+ assert(!border->diagonal_bl_tr.border_width);
assert(!border->diagonal_tl_br.style);
+ assert(!border->diagonal_tl_br.border_color);
+ assert(!border->diagonal_tl_br.border_width);
break;
case ss::border_direction_t::right:
assert(!border->top.style);
+ assert(!border->top.border_color);
+ assert(!border->top.border_width);
assert(!border->bottom.style);
+ assert(!border->bottom.border_color);
+ assert(!border->bottom.border_width);
assert(!border->left.style);
+ assert(!border->left.border_color);
+ assert(!border->left.border_width);
assert(border->right.style);
assert(*border->right.style == ss::border_style_t::thin);
+ assert(!border->right.border_color);
+ assert(!border->right.border_width);
assert(!border->diagonal.style);
+ assert(!border->diagonal.border_color);
+ assert(!border->diagonal.border_width);
assert(!border->diagonal_bl_tr.style);
+ assert(!border->diagonal_bl_tr.border_color);
+ assert(!border->diagonal_bl_tr.border_width);
assert(!border->diagonal_tl_br.style);
+ assert(!border->diagonal_tl_br.border_color);
+ assert(!border->diagonal_tl_br.border_width);
break;
case ss::border_direction_t::bottom:
assert(!border->top.style);
+ assert(!border->top.border_color);
+ assert(!border->top.border_width);
assert(border->bottom.style);
assert(*border->bottom.style == ss::border_style_t::thin);
+ assert(!border->bottom.border_color);
+ assert(!border->bottom.border_width);
assert(!border->left.style);
+ assert(!border->left.border_color);
+ assert(!border->left.border_width);
assert(!border->right.style);
+ assert(!border->right.border_color);
+ assert(!border->right.border_width);
assert(!border->diagonal.style);
+ assert(!border->diagonal.border_color);
+ assert(!border->diagonal.border_width);
assert(!border->diagonal_bl_tr.style);
+ assert(!border->diagonal_bl_tr.border_color);
+ assert(!border->diagonal_bl_tr.border_width);
assert(!border->diagonal_tl_br.style);
+ assert(!border->diagonal_tl_br.border_color);
+ assert(!border->diagonal_tl_br.border_width);
break;
case spreadsheet::border_direction_t::diagonal:
assert(!border->top.style);
+ assert(!border->top.border_color);
+ assert(!border->top.border_width);
assert(!border->bottom.style);
+ assert(!border->bottom.border_color);
+ assert(!border->bottom.border_width);
assert(!border->left.style);
+ assert(!border->left.border_color);
+ assert(!border->left.border_width);
assert(!border->right.style);
+ assert(!border->right.border_color);
+ assert(!border->right.border_width);
assert(!border->diagonal.style);
+ assert(!border->diagonal.border_color);
+ assert(!border->diagonal.border_width);
assert(border->diagonal_bl_tr.style);
assert(*border->diagonal_bl_tr.style == ss::border_style_t::thin);
+ assert(!border->diagonal_bl_tr.border_color);
+ assert(!border->diagonal_bl_tr.border_width);
assert(border->diagonal_tl_br.style);
assert(*border->diagonal_tl_br.style == ss::border_style_t::thin);
+ assert(!border->diagonal_tl_br.border_color);
+ assert(!border->diagonal_tl_br.border_width);
break;
case spreadsheet::border_direction_t::diagonal_tl_br:
assert(!border->top.style);
+ assert(!border->top.border_color);
+ assert(!border->top.border_width);
assert(!border->bottom.style);
+ assert(!border->bottom.border_color);
+ assert(!border->bottom.border_width);
assert(!border->left.style);
+ assert(!border->left.border_color);
+ assert(!border->left.border_width);
assert(!border->right.style);
+ assert(!border->right.border_color);
+ assert(!border->right.border_width);
assert(!border->diagonal.style);
+ assert(!border->diagonal.border_color);
+ assert(!border->diagonal.border_width);
assert(!border->diagonal_bl_tr.style);
+ assert(!border->diagonal_bl_tr.border_color);
+ assert(!border->diagonal_bl_tr.border_width);
assert(border->diagonal_tl_br.style);
assert(*border->diagonal_tl_br.style == ss::border_style_t::thin);
+ assert(!border->diagonal_tl_br.border_color);
+ assert(!border->diagonal_tl_br.border_width);
break;
case spreadsheet::border_direction_t::diagonal_bl_tr:
assert(!border->top.style);
+ assert(!border->top.border_color);
+ assert(!border->top.border_width);
assert(!border->bottom.style);
+ assert(!border->bottom.border_color);
+ assert(!border->bottom.border_width);
assert(!border->left.style);
+ assert(!border->left.border_color);
+ assert(!border->left.border_width);
assert(!border->right.style);
+ assert(!border->right.border_color);
+ assert(!border->right.border_width);
assert(!border->diagonal.style);
+ assert(!border->diagonal.border_color);
+ assert(!border->diagonal.border_width);
assert(border->diagonal_bl_tr.style);
assert(*border->diagonal_bl_tr.style == ss::border_style_t::thin);
+ assert(!border->diagonal_bl_tr.border_color);
+ assert(!border->diagonal_bl_tr.border_width);
assert(!border->diagonal_tl_br.style);
+ assert(!border->diagonal_tl_br.border_color);
+ assert(!border->diagonal_tl_br.border_width);
break;
default:
assert(!"unhandled direction!");