mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-26 11:16:55 +00:00
XHTML/CALS tables: create helper functions to share more code.
This commit is contained in:
parent
88f767e492
commit
50374e38e1
@ -3809,6 +3809,66 @@ docstring Tabular::xmlRow(XMLStream & xs, row_type row, OutputParams const & run
|
||||
}
|
||||
|
||||
|
||||
void Tabular::xmlHeader(XMLStream & xs, OutputParams const & runparams) const
|
||||
{
|
||||
// Output the header of the table. For both HTML and CALS, this is surrounded by a thead.
|
||||
bool const have_first_head = haveLTFirstHead(false);
|
||||
// if we have a first head, then we are going to ignore the
|
||||
// headers for the additional pages, since there aren't any
|
||||
// in HTML or DocBook.
|
||||
bool const have_head = !have_first_head && haveLTHead(false);
|
||||
|
||||
if (have_head || have_first_head) {
|
||||
xs << xml::StartTag("thead") << xml::CR();
|
||||
for (row_type r = 0; r < nrows(); ++r) {
|
||||
if (((have_first_head && row_info[r].endfirsthead) ||
|
||||
(have_head && row_info[r].endhead)) &&
|
||||
!row_info[r].caption) {
|
||||
xmlRow(xs, r, runparams, true, false, buffer().params().docbook_table_output);
|
||||
}
|
||||
}
|
||||
xs << xml::EndTag("thead");
|
||||
xs << xml::CR();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Tabular::xmlFooter(XMLStream & xs, OutputParams const & runparams) const
|
||||
{
|
||||
// Output the footer of the table. For both HTML and CALS, this is surrounded by a tfoot and output just after
|
||||
// the header (and before the body).
|
||||
bool const have_last_foot = haveLTLastFoot(false);
|
||||
bool const have_foot = !have_last_foot && haveLTFoot(false);
|
||||
|
||||
if (have_foot || have_last_foot) {
|
||||
xs << xml::StartTag("tfoot") << xml::CR();
|
||||
for (row_type r = 0; r < nrows(); ++r) {
|
||||
if (((have_last_foot && row_info[r].endlastfoot) ||
|
||||
(have_foot && row_info[r].endfoot)) &&
|
||||
!row_info[r].caption) {
|
||||
xmlRow(xs, r, runparams, false, false, buffer().params().docbook_table_output);
|
||||
}
|
||||
}
|
||||
xs << xml::EndTag("tfoot");
|
||||
xs << xml::CR();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Tabular::xmlBody(XMLStream & xs, OutputParams const & runparams) const
|
||||
{
|
||||
// Output the main part of the table. The tbody container is mandatory for CALS, but optional for HTML (only if
|
||||
// there is no header and no footer). It never hurts to have it, though.
|
||||
xs << xml::StartTag("tbody");
|
||||
xs << xml::CR();
|
||||
for (row_type r = 0; r < nrows(); ++r)
|
||||
if (isValidRow(r))
|
||||
xmlRow(xs, r, runparams, false, false, buffer().params().docbook_table_output);
|
||||
xs << xml::EndTag("tbody");
|
||||
xs << xml::CR();
|
||||
}
|
||||
|
||||
|
||||
void Tabular::docbook(XMLStream & xs, OutputParams const & runparams) const
|
||||
{
|
||||
// Some tables are inline. Likely limitation: cannot output a table within a table; is that really a limitation?
|
||||
@ -3848,52 +3908,9 @@ void Tabular::docbook(XMLStream & xs, OutputParams const & runparams) const
|
||||
}
|
||||
}
|
||||
|
||||
// Output the header of the table. For both HTML and CALS, this is surrounded by a thead.
|
||||
bool const havefirsthead = haveLTFirstHead(false);
|
||||
// if we have a first head, then we are going to ignore the
|
||||
// headers for the additional pages, since there aren't any
|
||||
// in DocBook. this test accomplishes that.
|
||||
bool const havehead = !havefirsthead && haveLTHead(false);
|
||||
if (havehead || havefirsthead) {
|
||||
xs << xml::StartTag("thead") << xml::CR();
|
||||
for (row_type r = 0; r < nrows(); ++r) {
|
||||
if (((havefirsthead && row_info[r].endfirsthead) ||
|
||||
(havehead && row_info[r].endhead)) &&
|
||||
!row_info[r].caption) {
|
||||
xmlRow(xs, r, runparams, true, false, buffer().params().docbook_table_output);
|
||||
}
|
||||
}
|
||||
xs << xml::EndTag("thead");
|
||||
xs << xml::CR();
|
||||
}
|
||||
|
||||
// Output the footer of the table. For both HTML and CALS, this is surrounded by a tfoot and output just after
|
||||
// the header (and before the body).
|
||||
bool const havelastfoot = haveLTLastFoot(false);
|
||||
// as before.
|
||||
bool const havefoot = !havelastfoot && haveLTFoot(false);
|
||||
if (havefoot || havelastfoot) {
|
||||
xs << xml::StartTag("tfoot") << xml::CR();
|
||||
for (row_type r = 0; r < nrows(); ++r) {
|
||||
if (((havelastfoot && row_info[r].endlastfoot) ||
|
||||
(havefoot && row_info[r].endfoot)) &&
|
||||
!row_info[r].caption) {
|
||||
xmlRow(xs, r, runparams, false, false, buffer().params().docbook_table_output);
|
||||
}
|
||||
}
|
||||
xs << xml::EndTag("tfoot");
|
||||
xs << xml::CR();
|
||||
}
|
||||
|
||||
// Output the main part of the table. The tbody container is mandatory for CALS, but optional for HTML (only if
|
||||
// there is no header and no footer). It never hurts to have it, though.
|
||||
xs << xml::StartTag("tbody");
|
||||
xs << xml::CR();
|
||||
for (row_type r = 0; r < nrows(); ++r)
|
||||
if (isValidRow(r))
|
||||
xmlRow(xs, r, runparams, false, false, buffer().params().docbook_table_output);
|
||||
xs << xml::EndTag("tbody");
|
||||
xs << xml::CR();
|
||||
xmlHeader(xs, runparams);
|
||||
xmlFooter(xs, runparams);
|
||||
xmlBody(xs, runparams);
|
||||
|
||||
// If this method started the table tag, also make it close it.
|
||||
if (!runparams.docbook_in_table) {
|
||||
@ -3938,48 +3955,10 @@ docstring Tabular::xhtml(XMLStream & xs, OutputParams const & runparams) const
|
||||
xs << xml::StartTag("table");
|
||||
xs << xml::CR();
|
||||
|
||||
// output header info
|
||||
bool const havefirsthead = haveLTFirstHead(false);
|
||||
// if we have a first head, then we are going to ignore the
|
||||
// headers for the additional pages, since there aren't any
|
||||
// in XHTML. this test accomplishes that.
|
||||
bool const havehead = !havefirsthead && haveLTHead(false);
|
||||
if (havehead || havefirsthead) {
|
||||
xs << xml::StartTag("thead");
|
||||
xs << xml::CR();
|
||||
for (row_type r = 0; r < nrows(); ++r) {
|
||||
if (((havefirsthead && row_info[r].endfirsthead) ||
|
||||
(havehead && row_info[r].endhead)) &&
|
||||
!row_info[r].caption) {
|
||||
ret += xmlRow(xs, r, runparams, true);
|
||||
}
|
||||
}
|
||||
xs << xml::EndTag("thead");
|
||||
xs << xml::CR();
|
||||
}
|
||||
// output footer info
|
||||
bool const havelastfoot = haveLTLastFoot(false);
|
||||
// as before.
|
||||
bool const havefoot = !havelastfoot && haveLTFoot(false);
|
||||
if (havefoot || havelastfoot) {
|
||||
xs << xml::StartTag("tfoot") << xml::CR();
|
||||
for (row_type r = 0; r < nrows(); ++r) {
|
||||
if (((havelastfoot && row_info[r].endlastfoot) ||
|
||||
(havefoot && row_info[r].endfoot)) &&
|
||||
!row_info[r].caption) {
|
||||
ret += xmlRow(xs, r, runparams);
|
||||
}
|
||||
}
|
||||
xs << xml::EndTag("tfoot");
|
||||
xs << xml::CR();
|
||||
}
|
||||
xmlHeader(xs, runparams);
|
||||
xmlFooter(xs, runparams);
|
||||
xmlBody(xs, runparams);
|
||||
|
||||
xs << xml::StartTag("tbody") << xml::CR();
|
||||
for (row_type r = 0; r < nrows(); ++r)
|
||||
if (isValidRow(r))
|
||||
ret += xmlRow(xs, r, runparams);
|
||||
xs << xml::EndTag("tbody");
|
||||
xs << xml::CR();
|
||||
xs << xml::EndTag("table");
|
||||
xs << xml::CR();
|
||||
if (is_long_tabular) {
|
||||
|
@ -957,6 +957,9 @@ public:
|
||||
docstring xmlRow(XMLStream & xs, row_type row, OutputParams const &,
|
||||
bool header = false, bool is_xhtml = true,
|
||||
BufferParams::TableOutput docbook_table_output = BufferParams::TableOutput::HTMLTable) const;
|
||||
void xmlHeader(XMLStream & xs, OutputParams const &) const;
|
||||
void xmlFooter(XMLStream & xs, OutputParams const &) const;
|
||||
void xmlBody(XMLStream & xs, OutputParams const &) const;
|
||||
XmlRowWiseBorders computeXmlBorders(row_type row) const;
|
||||
std::vector<std::string> computeCssStylePerCell(row_type row, col_type col, idx_type cell) const;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user