mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
Wrap rotated cells with linebreaks in varwidth
Fixes: #8085
(cherry picked from commit 88e5e5fd34
)
This commit is contained in:
parent
c41f9f7ed7
commit
f6a8810d9d
@ -263,6 +263,8 @@ string const tostr(Tabular::BoxType const & num)
|
|||||||
return "parbox";
|
return "parbox";
|
||||||
case Tabular::BOX_MINIPAGE:
|
case Tabular::BOX_MINIPAGE:
|
||||||
return "minipage";
|
return "minipage";
|
||||||
|
case Tabular::BOX_VARWIDTH:
|
||||||
|
return "varwidth";
|
||||||
}
|
}
|
||||||
return string();
|
return string();
|
||||||
}
|
}
|
||||||
@ -325,6 +327,8 @@ bool string2type(string const & str, Tabular::BoxType & num)
|
|||||||
num = Tabular::BOX_PARBOX;
|
num = Tabular::BOX_PARBOX;
|
||||||
else if (str == "minipage")
|
else if (str == "minipage")
|
||||||
num = Tabular::BOX_MINIPAGE;
|
num = Tabular::BOX_MINIPAGE;
|
||||||
|
else if (str == "varwidth")
|
||||||
|
num = Tabular::BOX_VARWIDTH;
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
@ -1916,12 +1920,11 @@ void Tabular::setUsebox(idx_type cell, BoxType type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// FIXME: Remove this routine because we cannot insert \parboxes when the user
|
|
||||||
// adds line breaks, see bug 4886.
|
|
||||||
Tabular::BoxType Tabular::getUsebox(idx_type cell) const
|
Tabular::BoxType Tabular::getUsebox(idx_type cell) const
|
||||||
{
|
{
|
||||||
if ((!column_info[cellColumn(cell)].p_width.zero() && !isMultiColumn(cell)) ||
|
if (getRotateCell(cell) == 0
|
||||||
(isMultiColumn(cell) && !cellInfo(cell).p_width.zero()))
|
&& ((!column_info[cellColumn(cell)].p_width.zero() && !isMultiColumn(cell)) ||
|
||||||
|
(isMultiColumn(cell) && !cellInfo(cell).p_width.zero())))
|
||||||
return BOX_NONE;
|
return BOX_NONE;
|
||||||
if (cellInfo(cell).usebox > 1)
|
if (cellInfo(cell).usebox > 1)
|
||||||
return cellInfo(cell).usebox;
|
return cellInfo(cell).usebox;
|
||||||
@ -2454,7 +2457,21 @@ void Tabular::TeXCellPreamble(otexstream & os, idx_type cell,
|
|||||||
}
|
}
|
||||||
os << "]{" << from_ascii(getPWidth(cell).asLatexString())
|
os << "]{" << from_ascii(getPWidth(cell).asLatexString())
|
||||||
<< "}\n";
|
<< "}\n";
|
||||||
|
} else if (getUsebox(cell) == BOX_VARWIDTH) {
|
||||||
|
os << "\\begin{varwidth}[";
|
||||||
|
switch (valign) {
|
||||||
|
case LYX_VALIGN_TOP:
|
||||||
|
os << 't';
|
||||||
|
break;
|
||||||
|
case LYX_VALIGN_MIDDLE:
|
||||||
|
os << 'm';
|
||||||
|
break;
|
||||||
|
case LYX_VALIGN_BOTTOM:
|
||||||
|
os << 'b';
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
os << "]{\\linewidth}\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2470,6 +2487,8 @@ void Tabular::TeXCellPostamble(otexstream & os, idx_type cell,
|
|||||||
os << '}';
|
os << '}';
|
||||||
else if (getUsebox(cell) == BOX_MINIPAGE)
|
else if (getUsebox(cell) == BOX_MINIPAGE)
|
||||||
os << breakln << "\\end{minipage}";
|
os << breakln << "\\end{minipage}";
|
||||||
|
else if (getUsebox(cell) == BOX_VARWIDTH)
|
||||||
|
os << breakln << "\\end{varwidth}";
|
||||||
if (getRotateCell(cell) != 0)
|
if (getRotateCell(cell) != 0)
|
||||||
os << breakln << "\\end{turn}";
|
os << breakln << "\\end{turn}";
|
||||||
if (ismultirow)
|
if (ismultirow)
|
||||||
@ -3444,6 +3463,8 @@ void Tabular::validate(LaTeXFeatures & features) const
|
|||||||
for (idx_type cell = 0; cell < numberofcells; ++cell) {
|
for (idx_type cell = 0; cell < numberofcells; ++cell) {
|
||||||
if (isMultiRow(cell))
|
if (isMultiRow(cell))
|
||||||
features.require("multirow");
|
features.require("multirow");
|
||||||
|
if (getUsebox(cell) == BOX_VARWIDTH)
|
||||||
|
features.require("varwidth");
|
||||||
if (getVAlignment(cell) != LYX_VALIGN_TOP
|
if (getVAlignment(cell) != LYX_VALIGN_TOP
|
||||||
|| !getPWidth(cell).zero())
|
|| !getPWidth(cell).zero())
|
||||||
features.require("array");
|
features.require("array");
|
||||||
@ -3466,11 +3487,12 @@ Tabular::BoxType Tabular::useParbox(idx_type cell) const
|
|||||||
ParagraphList const & parlist = cellInset(cell)->paragraphs();
|
ParagraphList const & parlist = cellInset(cell)->paragraphs();
|
||||||
ParagraphList::const_iterator cit = parlist.begin();
|
ParagraphList::const_iterator cit = parlist.begin();
|
||||||
ParagraphList::const_iterator end = parlist.end();
|
ParagraphList::const_iterator end = parlist.end();
|
||||||
|
bool const turned = getRotateCell(cell) != 0;
|
||||||
|
|
||||||
for (; cit != end; ++cit)
|
for (; cit != end; ++cit)
|
||||||
for (int i = 0; i < cit->size(); ++i)
|
for (int i = 0; i < cit->size(); ++i)
|
||||||
if (cit->isNewline(i))
|
if (cit->isNewline(i))
|
||||||
return BOX_PARBOX;
|
return turned ? BOX_VARWIDTH : BOX_PARBOX;
|
||||||
|
|
||||||
return BOX_NONE;
|
return BOX_NONE;
|
||||||
}
|
}
|
||||||
|
@ -339,7 +339,9 @@ public:
|
|||||||
///
|
///
|
||||||
BOX_PARBOX = 1,
|
BOX_PARBOX = 1,
|
||||||
///
|
///
|
||||||
BOX_MINIPAGE = 2
|
BOX_MINIPAGE = 2,
|
||||||
|
///
|
||||||
|
BOX_VARWIDTH = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
enum CaptionType {
|
enum CaptionType {
|
||||||
|
@ -17,6 +17,8 @@ What's new
|
|||||||
|
|
||||||
- Add support for non-ASCII characters in hyperlinks (bug 11165).
|
- Add support for non-ASCII characters in hyperlinks (bug 11165).
|
||||||
|
|
||||||
|
- Support rotated table cells with linebreaks (bug 8085).
|
||||||
|
|
||||||
|
|
||||||
* MISCELLANEOUS
|
* MISCELLANEOUS
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user