237 lines
12 KiB
Groff
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!");
|