commit ec016162470a08072ed59080efd357bc90a7efb1
Author: Thibaut Cuvelier <[email protected]>
Date:   Fri Apr 1 04:01:40 2022 +0200

    XHTML/DocBook: merge code duplicates for horizontal alignment.
---
 src/insets/InsetTabular.cpp |   86 +++++++++++++++----------------------------
 src/insets/InsetTabular.h   |    2 +
 2 files changed, 32 insertions(+), 56 deletions(-)

diff --git a/src/insets/InsetTabular.cpp b/src/insets/InsetTabular.cpp
index 092c868..761cb4c 100644
--- a/src/insets/InsetTabular.cpp
+++ b/src/insets/InsetTabular.cpp
@@ -3639,6 +3639,33 @@ std::string Tabular::getVAlignAsXmlAttribute(idx_type 
cell) const
 }
 
 
+std::string Tabular::getHAlignAsXmlAttribute(idx_type cell, bool is_xhtml) 
const
+{
+       // TODO: the Boolean flag isn't really clean; switch to an enum at some 
point.
+       switch (getAlignment(cell)) {
+       case LYX_ALIGN_LEFT:
+               return "align='left'";
+       case LYX_ALIGN_RIGHT:
+               return "align='right'";
+
+       default:
+               // HTML only supports left, right, and center.
+               if (is_xhtml)
+                       return "align='center'";
+
+               // DocBook also has justify and decimal.
+               if (getAlignment(cell) == LYX_ALIGN_BLOCK) {
+                       return "align='justify'";
+               } else if (getAlignment(cell) == LYX_ALIGN_DECIMAL) {
+                       Language const *tlang = 
buffer().paragraphs().front().getParLanguage(buffer().params());
+                       return "align='char' char='" + 
to_utf8(tlang->decimalSeparator()) + "'";
+               } else {
+                       return "align='center'";
+               }
+       }
+}
+
+
 void Tabular::docbookRowAsHTML(XMLStream & xs, row_type row,
                   OutputParams const & runparams, bool header) const
 {
@@ -3659,27 +3686,7 @@ void Tabular::docbookRowAsHTML(XMLStream & xs, row_type 
row,
                        attr << "style=\"width: " << hwidth << ";\" ";
                }
 
-               attr << "align='";
-               switch (getAlignment(cell)) {
-               case LYX_ALIGN_BLOCK:
-                       attr << "justify";
-                       break;
-               case LYX_ALIGN_DECIMAL: {
-                       Language const *tlang = 
buffer().paragraphs().front().getParLanguage(buffer().params());
-                       attr << "char' char='" << 
to_utf8(tlang->decimalSeparator());
-               }
-                       break;
-               case LYX_ALIGN_LEFT:
-                       attr << "left";
-                       break;
-               case LYX_ALIGN_RIGHT:
-                       attr << "right";
-                       break;
-               default:
-                       attr << "center";
-                       break;
-               }
-               attr << "' " << getVAlignAsXmlAttribute(cell);
+               attr << getHAlignAsXmlAttribute(cell, false) << " " << 
getVAlignAsXmlAttribute(cell);
 
                if (isMultiColumn(cell))
                        attr << " colspan='" << columnSpan(cell) << "'";
@@ -3713,28 +3720,7 @@ void Tabular::docbookRowAsCALS(XMLStream & xs, row_type 
row,
 
                stringstream attr;
 
-               attr << "align='";
-               switch (getAlignment(cell)) {
-               case LYX_ALIGN_BLOCK:
-                       attr << "justify";
-                       break;
-               case LYX_ALIGN_DECIMAL: {
-                       Language const *tlang = 
buffer().paragraphs().front().getParLanguage(buffer().params());
-                       attr << "char' char='" << 
to_utf8(tlang->decimalSeparator());
-               }
-                       break;
-               case LYX_ALIGN_LEFT:
-                       attr << "left";
-                       break;
-               case LYX_ALIGN_RIGHT:
-                       attr << "right";
-                       break;
-
-               default:
-                       attr << "center";
-                       break;
-               }
-               attr << "' " << getVAlignAsXmlAttribute(cell);
+               attr << getHAlignAsXmlAttribute(cell, false) << " " << 
getVAlignAsXmlAttribute(cell);
 
                if (isMultiColumn(cell))
                        attr << " colspan='" << columnSpan(cell) << "'";
@@ -3874,19 +3860,7 @@ docstring Tabular::xhtmlRow(XMLStream & xs, row_type row,
                        attr << "style=\"width: " << hwidth << ";\" ";
                }
 
-               attr << "align='";
-               switch (getAlignment(cell)) {
-               case LYX_ALIGN_LEFT:
-                       attr << "left";
-                       break;
-               case LYX_ALIGN_RIGHT:
-                       attr << "right";
-                       break;
-               default:
-                       attr << "center";
-                       break;
-               }
-               attr << "' " << getVAlignAsXmlAttribute(cell);
+               attr << getHAlignAsXmlAttribute(cell, true) << " " << 
getVAlignAsXmlAttribute(cell);
 
                if (isMultiColumn(cell))
                        attr << " colspan='" << columnSpan(cell) << "'";
diff --git a/src/insets/InsetTabular.h b/src/insets/InsetTabular.h
index 8420a48..f42f5bc 100644
--- a/src/insets/InsetTabular.h
+++ b/src/insets/InsetTabular.h
@@ -947,6 +947,8 @@ public:
                           bool header = false) const;
 
        /// Transforms the vertical alignment of the given cell as a prebaked 
XML attribute (for HTML and CALS).
+       std::string getHAlignAsXmlAttribute(idx_type cell, bool is_xhtml = 
true) const;
+       /// Transforms the vertical alignment of the given cell as a prebaked 
XML attribute (for HTML and CALS).
        std::string getVAlignAsXmlAttribute(idx_type cell) const;
 
        /// change associated Buffer
-- 
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to