]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetTabular.cpp
Merge branch 'master' into biblatex2
[lyx.git] / src / insets / InsetTabular.cpp
index 2f2c3729f77efa385bfc08e7e9c3b62b3e86645d..bf21ae73f148c7b3288663f975186e23b4e02c8d 100644 (file)
@@ -543,7 +543,7 @@ InsetTableCell splitCell(InsetTableCell & head, docstring const & align_d, bool
 {
        InsetTableCell tail = InsetTableCell(head);
        DocIterator const dit = separatorPos(&head, align_d);
-       hassep = dit;
+       hassep = (bool)dit;
        if (hassep) {
                pit_type const psize = head.paragraphs().front().size();
                head.paragraphs().front().eraseChars(dit.pos(), psize, false);
@@ -1033,7 +1033,7 @@ bool Tabular::updateColumnWidths()
                        idx_type const i = cellIndex(r, c);
                        if (columnSpan(i) == 1) {
                                if (getAlignment(i) == LYX_ALIGN_DECIMAL
-                                       && cell_info[r][c].decimal_width!=0)
+                                       && cell_info[r][c].decimal_width != 0)
                                        new_width = max(new_width, cellInfo(i).width
                                                + max_dwidth[c] - cellInfo(i).decimal_width);
                                else
@@ -2708,7 +2708,7 @@ void Tabular::TeXRow(otexstream & os, row_type row,
 void Tabular::latex(otexstream & os, OutputParams const & runparams) const
 {
        bool const is_tabular_star = !tabular_width.zero();
-       RowEntry pos = TexRow::textEntry(runparams.lastid, runparams.lastpos);
+       TexRow::RowEntry pos = TexRow::textEntry(runparams.lastid, runparams.lastpos);
 
        //+---------------------------------------------------------------------
        //+                      first the opening preamble                    +
@@ -2762,6 +2762,7 @@ void Tabular::latex(otexstream & os, OutputParams const & runparams) const
                        os << column_info[c].align_special;
                } else {
                        if (!column_info[c].p_width.zero()) {
+                               bool decimal = false;
                                switch (column_info[c].alignment) {
                                case LYX_ALIGN_LEFT:
                                        os << ">{\\raggedright}";
@@ -2776,24 +2777,49 @@ void Tabular::latex(otexstream & os, OutputParams const & runparams) const
                                case LYX_ALIGN_BLOCK:
                                case LYX_ALIGN_LAYOUT:
                                case LYX_ALIGN_SPECIAL:
+                                       break;
                                case LYX_ALIGN_DECIMAL:
+                                       os << ">{\\raggedleft}";
+                                       decimal = true;
                                        break;
                                }
 
+                               char valign = 'p';
                                switch (column_info[c].valignment) {
                                case LYX_VALIGN_TOP:
-                                       os << 'p';
+                                       // this is the default
                                        break;
                                case LYX_VALIGN_MIDDLE:
-                                       os << 'm';
+                                       valign = 'm';
                                        break;
                                case LYX_VALIGN_BOTTOM:
-                                       os << 'b';
+                                       valign = 'b';
                                        break;
-                       }
-                               os << '{'
-                                  << from_ascii(column_info[c].p_width.asLatexString())
-                                  << '}';
+                               }
+                               os << valign;
+
+                               // Fixed-width cells with alignment at decimal separator
+                               // are output as two cells of half the width with the decimal
+                               // separator as column sep. This effectively puts the content
+                               // centered, which differs from the normal decimal sep alignment
+                               // and is not ideal, but we cannot do better ATM (see #9568).
+                               // FIXME: Implement proper decimal sep alignment, e.g. via siunitx.
+                               if (decimal) {
+                                       docstring const halffixedwith =
+                                               from_ascii(Length(column_info[c].p_width.value() / 2,
+                                                                 column_info[c].p_width.unit()).asLatexString());
+                                       os << '{'
+                                          << halffixedwith
+                                          << '}'
+                                          << "@{\\extracolsep{0pt}" << column_info[c].decimal_point << "}"
+                                          << valign
+                                          << '{'
+                                          << halffixedwith
+                                          << '}';
+                               } else
+                                       os << '{'
+                                          << from_ascii(column_info[c].p_width.asLatexString())
+                                          << '}';
                        } else {
                                switch (column_info[c].alignment) {
                                case LYX_ALIGN_LEFT:
@@ -5092,13 +5118,7 @@ docstring InsetTabular::xhtml(XHTMLStream & xs, OutputParams const & rp) const
 void InsetTabular::validate(LaTeXFeatures & features) const
 {
        tabular.validate(features);
-       // FIXME XHTML
-       // It'd be better to be able to get this from an InsetLayout, but at present
-       // InsetLayouts do not seem really to work for things that aren't InsetTexts.
-       if (features.runparams().flavor == OutputParams::HTML)
-               features.addCSSSnippet(
-                       "table { border: 1px solid black; display: inline-block; }\n"
-                       "td { border: 1px solid black; padding: 0.5ex; }");
+       features.useInsetLayout(getLayout());
 }