From 16ba7692c220257a329ef34c3e7597ced1d43ef5 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Fri, 24 Jul 2020 14:45:30 +0000 Subject: [PATCH] fpspreadsheet: Refactor style reading in ODS reader git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7559 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../source/common/fpsopendocument.pas | 30 +++++++++++++++++++ .../fpspreadsheet/tests/spreadtestgui.lpi | 6 ++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/components/fpspreadsheet/source/common/fpsopendocument.pas b/components/fpspreadsheet/source/common/fpsopendocument.pas index 9951a6361..09c3a1a18 100644 --- a/components/fpspreadsheet/source/common/fpsopendocument.pas +++ b/components/fpspreadsheet/source/common/fpsopendocument.pas @@ -142,6 +142,7 @@ type procedure ReadShapes(ATableNode: TDOMNode); procedure ReadSheetProtection(ANode: TDOMNode; ASheet: TsBasicWorksheet); procedure ReadSheets(ANode: TDOMNode); + procedure ReadStyle_ParagraphProperties(ANode: TDOMNode; var AFormat: TsCellFormat); procedure ReadTableStyle(AStyleNode: TDOMNode); protected @@ -4736,6 +4737,32 @@ begin end; end; +procedure TsSpreadOpenDocReader.ReadStyle_ParagraphProperties(ANode: TDOMNode; + var AFormat: TsCellFormat); +var + s: String; +begin + // Horizontal text alignment + s := GetAttrValue(ANode, 'fo:text-align'); + if s = 'start' then + AFormat.HorAlignment := haLeft + else if s = 'end' then + AFormat.HorAlignment := haRight + else if s = 'center' then + AFormat.HorAlignment := haCenter; + if AFormat.HorAlignment <> haDefault then + Include(AFormat.UsedFormattingFields, uffHorAlign); + + // BiDi mode + s := GetAttrValue(ANode, 'style:writing-mode'); + if s = 'lr-tb' then + AFormat.BiDiMode := bdRTL + else if s = 'rl-tb' then + AFormat.BiDiMode := bdRTL; + if AFormat.BiDiMode <> bdDefault then + Include(AFormat.UsedFormattingFields, uffBiDi); +end; + procedure TsSpreadOpenDocReader.ReadStyles(AStylesNode: TDOMNode); var styleNode: TDOMNode; @@ -5097,6 +5124,8 @@ begin else if nodeName = 'style:paragraph-properties' then begin + ReadStyle_ParagraphProperties(styleChildNode, fmt); + (* // Horizontal text alignment s := GetAttrValue(styleChildNode, 'fo:text-align'); if s = 'start' then @@ -5115,6 +5144,7 @@ begin fmt.BiDiMode := bdRTL; if fmt.BiDiMode <> bdDefault then Include(fmt.UsedFormattingFields, uffBiDi); + *) end; styleChildNode := styleChildNode.NextSibling; end; diff --git a/components/fpspreadsheet/tests/spreadtestgui.lpi b/components/fpspreadsheet/tests/spreadtestgui.lpi index 7dc947e60..c1922ef74 100644 --- a/components/fpspreadsheet/tests/spreadtestgui.lpi +++ b/components/fpspreadsheet/tests/spreadtestgui.lpi @@ -1,11 +1,13 @@ - + + + + - <ResourceType Value="res"/> </General>