diff --git a/include/orcus/spreadsheet/import_interface.hpp b/include/orcus/spreadsheet/import_interface.hpp index ff833fccbb0136f6a1b17cb8ce57daef988e633c..ed67859dc12e24b8a597b2d2b089700d8f4bdcda 100644 --- a/include/orcus/spreadsheet/import_interface.hpp +++ b/include/orcus/spreadsheet/import_interface.hpp @@ -114,7 +114,7 @@ public: virtual void set_border_style(orcus::spreadsheet::border_direction_t dir, border_style_t style) = 0; virtual void set_border_color( orcus::spreadsheet::border_direction_t dir, color_elem_t alpha, color_elem_t red, color_elem_t green, color_elem_t blue) = 0; - virtual void set_border_width(border_direction_t dir, length_t width) = 0; + virtual void set_border_width(border_direction_t dir, double width, orcus::length_unit_t unit) = 0; virtual size_t commit_border() = 0; // cell protection diff --git a/include/orcus/spreadsheet/styles.hpp b/include/orcus/spreadsheet/styles.hpp index de3e96b555a0bbf97cb29803004db4265c36912c..f6a9de873cd134d588b5bd9370dbd50728a9bfbd 100644 --- a/include/orcus/spreadsheet/styles.hpp +++ b/include/orcus/spreadsheet/styles.hpp @@ -171,7 +171,7 @@ public: virtual void set_border_style(border_direction_t dir, border_style_t style); virtual void set_border_color( border_direction_t dir, color_elem_t alpha, color_elem_t red, color_elem_t green, color_elem_t blue); - virtual void set_border_width(border_direction_t dir,length_t length); + virtual void set_border_width(border_direction_t dir, double width, orcus::length_unit_t unit); virtual size_t commit_border(); virtual void set_cell_hidden(bool b); diff --git a/include/orcus/spreadsheet/types.hpp b/include/orcus/spreadsheet/types.hpp index 394e4b2625740fe100a99c020794d21184bf1a64..1abeb4b7c61df98caf0775ef7ef9ca035b5cf598 100644 --- a/include/orcus/spreadsheet/types.hpp +++ b/include/orcus/spreadsheet/types.hpp @@ -55,7 +55,9 @@ enum class border_style_t medium_dashed, slant_dash_dot, thick, - thin + thin, + double_thin, + fine_dashed }; enum class formula_grammar_t diff --git a/src/liborcus/odf_helper.cpp b/src/liborcus/odf_helper.cpp index f83f8b00f3ccf2779aaf50241d9d47e1003b66f4..f402d795b81d6a87c63942b0cdcf191dcf5afd56 100644 --- a/src/liborcus/odf_helper.cpp +++ b/src/liborcus/odf_helper.cpp @@ -26,17 +26,10 @@ odf_border_style_map::entry odf_border_style_entries[] = { MDDS_ASCII("dash-dot-dot"), spreadsheet::border_style_t::dash_dot_dot}, { MDDS_ASCII("dashed"), spreadsheet::border_style_t::dashed}, { MDDS_ASCII("dotted"), spreadsheet::border_style_t::dotted}, - { MDDS_ASCII("double-border"), spreadsheet::border_style_t::double_border}, - { MDDS_ASCII("hair"), spreadsheet::border_style_t::hair}, - { MDDS_ASCII("medium"), spreadsheet::border_style_t::medium}, - { MDDS_ASCII("medium-dash-dot"), spreadsheet::border_style_t::medium_dash_dot}, - { MDDS_ASCII("medium-dash-dot-dot"), spreadsheet::border_style_t::medium_dash_dot_dot}, - { MDDS_ASCII("medium-dashed"), spreadsheet::border_style_t::medium_dashed}, + { MDDS_ASCII("double-thin"), spreadsheet::border_style_t::double_thin}, + { MDDS_ASCII("fine-dashed"), spreadsheet::border_style_t::fine_dashed}, { MDDS_ASCII("none"), spreadsheet::border_style_t::none}, - { MDDS_ASCII("slant-dash-dot"), spreadsheet::border_style_t::slant_dash_dot}, { MDDS_ASCII("solid"), spreadsheet::border_style_t::solid}, - { MDDS_ASCII("thick"), spreadsheet::border_style_t::thick}, - { MDDS_ASCII("thin"), spreadsheet::border_style_t::thin}, { MDDS_ASCII("unknown"), spreadsheet::border_style_t::unknown} }; diff --git a/src/liborcus/odf_styles_context.cpp b/src/liborcus/odf_styles_context.cpp index 415ccfc475d063fd513ef3171b28ee44466358b4..2260e6d26f1dacba54f6ae55b4dd5e083e49db5f 100644 --- a/src/liborcus/odf_styles_context.cpp +++ b/src/liborcus/odf_styles_context.cpp @@ -618,7 +618,7 @@ void styles_context::start_element(xmlns_id_t ns, xml_token_t name, const std::v { mp_styles->set_border_color(itr->first, 0, itr->second.red, itr->second.green, itr->second.blue); mp_styles->set_border_style(itr->first, itr->second.border_style); - mp_styles->set_border_width(itr->first, itr->second.border_width); + mp_styles->set_border_width(itr->first, itr->second.border_width.value, itr->second.border_width.unit); } } diff --git a/src/liborcus/odf_styles_context_test.cpp b/src/liborcus/odf_styles_context_test.cpp index 95d57971a84453b54006c5b7fee033fc2f328f84..99e31b79c3abb667239334c8f92b3aaae60c3461 100644 --- a/src/liborcus/odf_styles_context_test.cpp +++ b/src/liborcus/odf_styles_context_test.cpp @@ -59,10 +59,10 @@ void test_odf_border(orcus::spreadsheet::import_styles &styles) assert(cell_format); const orcus::spreadsheet::border_t* cell_border = styles.get_border(border); - assert(cell_border->top.style == orcus::spreadsheet::border_style_t::thick); - assert(cell_border->bottom.style == orcus::spreadsheet::border_style_t::thick); - assert(cell_border->left.style == orcus::spreadsheet::border_style_t::thick); - assert(cell_border->right.style == orcus::spreadsheet::border_style_t::thick); + assert(cell_border->top.style == orcus::spreadsheet::border_style_t::dotted); + assert(cell_border->bottom.style == orcus::spreadsheet::border_style_t::dotted); + assert(cell_border->left.style == orcus::spreadsheet::border_style_t::dotted); + assert(cell_border->right.style == orcus::spreadsheet::border_style_t::dotted); assert(cell_border->top.border_color.red == 0xff); assert(cell_border->bottom.border_color.green == 0xcc); assert(cell_border->left.border_color.blue == 0x12); @@ -77,8 +77,8 @@ void test_odf_border(orcus::spreadsheet::import_styles &styles) assert(cell_format); cell_border = styles.get_border(border); - assert(cell_border->top.style == orcus::spreadsheet::border_style_t::solid); - assert(cell_border->bottom.style == orcus::spreadsheet::border_style_t::thin); + assert(cell_border->top.style == orcus::spreadsheet::border_style_t::fine_dashed); + assert(cell_border->bottom.style == orcus::spreadsheet::border_style_t::double_thin); assert(cell_border->left.style == orcus::spreadsheet::border_style_t::none); assert(cell_border->right.style == orcus::spreadsheet::border_style_t::dash_dot_dot); assert(cell_border->top.border_color.red == 0xff); @@ -95,8 +95,8 @@ void test_odf_border(orcus::spreadsheet::import_styles &styles) assert(cell_format); cell_border = styles.get_border(border); - assert(cell_border->diagonal_bl_tr.style == orcus::spreadsheet::border_style_t::medium); - assert(cell_border->diagonal_tl_br.style == orcus::spreadsheet::border_style_t::medium_dash_dot); + assert(cell_border->diagonal_bl_tr.style == orcus::spreadsheet::border_style_t::dashed); + assert(cell_border->diagonal_tl_br.style == orcus::spreadsheet::border_style_t::dash_dot); assert(cell_border->diagonal_bl_tr.border_color.red == 0xff); assert(cell_border->diagonal_tl_br.border_color.green == 0x00); assert(cell_border->diagonal_tl_br.border_width.value == 0.74); diff --git a/src/spreadsheet/styles.cpp b/src/spreadsheet/styles.cpp index 6f2397276530974edde2e27478a39fcc4a80e998..90ecef94223eaa1ca274c55d068dcff1b85d54b9 100644 --- a/src/spreadsheet/styles.cpp +++ b/src/spreadsheet/styles.cpp @@ -283,11 +283,14 @@ void import_styles::set_border_color( p->border_color = color_t(alpha, red, green, blue); } -void import_styles::set_border_width(border_direction_t dir, length_t width) +void import_styles::set_border_width(border_direction_t dir, double width, orcus::length_unit_t unit) { border_attrs_t* p = get_border_attrs(m_cur_border, dir); if (p) - p->border_width = width; + { + p->border_width.value = width; + p->border_width.unit = unit; + } } size_t import_styles::commit_border() diff --git a/test/ods/styles/cell-styles.xml b/test/ods/styles/cell-styles.xml index 070f7ee6725d5cf677430af84eaf4cfb5f549a92..f78e789979c7f9457552c38e4ab12cdb8163b8ca 100644 --- a/test/ods/styles/cell-styles.xml +++ b/test/ods/styles/cell-styles.xml @@ -1,16 +1,16 @@ - + - + - + - +