Initial XHTML support for InsetTabular.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@32524 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Richard Heck 2009-12-14 15:39:13 +00:00
parent c4701b2256
commit dadda4cb44
2 changed files with 117 additions and 1 deletions

View File

@ -38,6 +38,7 @@
#include "LyXRC.h" #include "LyXRC.h"
#include "MetricsInfo.h" #include "MetricsInfo.h"
#include "OutputParams.h" #include "OutputParams.h"
#include "output_xhtml.h"
#include "Paragraph.h" #include "Paragraph.h"
#include "ParagraphParameters.h" #include "ParagraphParameters.h"
#include "ParIterator.h" #include "ParIterator.h"
@ -2632,6 +2633,98 @@ int Tabular::docbook(odocstream & os, OutputParams const & runparams) const
} }
docstring Tabular::xhtmlRow(XHTMLStream & xs, row_type row,
OutputParams const & runparams) const
{
/* for (col_type i = 0; i < column_info.size(); ++i) {
os << "<colspec colname=\"col" << i << "\" align=\"";
switch (column_info[i].alignment) {
case LYX_ALIGN_LEFT:
os << "left";
break;
case LYX_ALIGN_RIGHT:
os << "right";
break;
default:
os << "center";
break;
}
os << '"';
if (runparams.flavor == OutputParams::XML)
os << '/';
os << ">\n";
++ret;
} */
docstring ret;
idx_type cell = getFirstCellInRow(row);
xs << StartTag("tr");
for (col_type j = 0; j < column_info.size(); ++j) {
if (isPartOfMultiColumn(row, j))
continue;
stringstream attr;
attr << "align='";
switch (getAlignment(cell)) {
case LYX_ALIGN_LEFT:
attr << "left";
break;
case LYX_ALIGN_RIGHT:
attr << "right";
break;
default:
attr << "center";
break;
}
attr << "'";
attr << " valign='";
switch (getVAlignment(cell)) {
case LYX_VALIGN_TOP:
attr << "top";
break;
case LYX_VALIGN_BOTTOM:
attr << "bottom";
break;
case LYX_VALIGN_MIDDLE:
attr << "middle";
}
attr << "'";
if (isMultiColumn(cell))
attr << " colspan='" << j + columnSpan(cell) - 1<< "'";
xs << StartTag("td", attr.str());
ret += cellInset(cell)->xhtml(xs, runparams);
xs << EndTag("td");
++cell;
}
xs << EndTag("tr");
return ret;
}
docstring Tabular::xhtml(XHTMLStream & xs, OutputParams const & runparams) const
{
docstring ret;
xs << StartTag("table");
// It's unclear to me if we need to mess with the long table stuff.
// We can borrow that too from docbook, if so.
xs << StartTag("tbody");
for (row_type i = 0; i < row_info.size(); ++i) {
if (isValidRow(i)) {
ret += xhtmlRow(xs, i, runparams);
}
}
xs << EndTag("tbody");
xs << EndTag("table");
return ret;
}
bool Tabular::plaintextTopHLine(odocstream & os, row_type row, bool Tabular::plaintextTopHLine(odocstream & os, row_type row,
vector<unsigned int> const & clen) const vector<unsigned int> const & clen) const
{ {
@ -2956,6 +3049,14 @@ docstring InsetTableCell::asString(bool intoInsets)
} }
docstring InsetTableCell::xhtml(XHTMLStream & xs, OutputParams const & rp) const
{
if (!isFixedWidth)
return InsetText::insetAsXHTML(xs, rp, InsetText::JustText);
return InsetText::xhtml(xs, rp);
}
///////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////
// //
@ -4218,6 +4319,12 @@ int InsetTabular::docbook(odocstream & os, OutputParams const & runparams) const
} }
docstring InsetTabular::xhtml(XHTMLStream & xs, OutputParams const & rp) const
{
return tabular.xhtml(xs, rp);
}
void InsetTabular::validate(LaTeXFeatures & features) const void InsetTabular::validate(LaTeXFeatures & features) const
{ {
tabular.validate(features); tabular.validate(features);

View File

@ -55,6 +55,7 @@ class InsetTableCell;
class FuncStatus; class FuncStatus;
class Lexer; class Lexer;
class Paragraph; class Paragraph;
class XHTMLStream;
namespace frontend { class Painter; } namespace frontend { class Painter; }
@ -368,9 +369,11 @@ public:
void read(Lexer &); void read(Lexer &);
/// ///
int latex(odocstream &, OutputParams const &) const; int latex(odocstream &, OutputParams const &) const;
// ///
int docbook(odocstream & os, OutputParams const &) const; int docbook(odocstream & os, OutputParams const &) const;
/// ///
docstring xhtml(XHTMLStream & os, OutputParams const &) const;
///
void plaintext(odocstream &, void plaintext(odocstream &,
OutputParams const & runparams, int const depth, OutputParams const & runparams, int const depth,
bool onlydata, char_type delim) const; bool onlydata, char_type delim) const;
@ -645,6 +648,8 @@ public:
bool onlydata) const; bool onlydata) const;
/// auxiliary function for docbook /// auxiliary function for docbook
int docbookRow(odocstream & os, row_type, OutputParams const &) const; int docbookRow(odocstream & os, row_type, OutputParams const &) const;
///
docstring xhtmlRow(XHTMLStream & xs, row_type, OutputParams const &) const;
/// change associated Buffer /// change associated Buffer
void setBuffer(Buffer & buffer); void setBuffer(Buffer & buffer);
@ -677,6 +682,8 @@ public:
/// writes the contents of the cell as a string, optionally /// writes the contents of the cell as a string, optionally
/// descending into insets /// descending into insets
docstring asString(bool intoInsets = true); docstring asString(bool intoInsets = true);
///
docstring xhtml(XHTMLStream &, OutputParams const &) const;
private: private:
/// unimplemented /// unimplemented
InsetTableCell(); InsetTableCell();
@ -773,6 +780,8 @@ public:
/// ///
int docbook(odocstream &, OutputParams const &) const; int docbook(odocstream &, OutputParams const &) const;
/// ///
docstring xhtml(XHTMLStream &, OutputParams const &) const;
///
void validate(LaTeXFeatures & features) const; void validate(LaTeXFeatures & features) const;
/// ///
InsetCode lyxCode() const { return TABULAR_CODE; } InsetCode lyxCode() const { return TABULAR_CODE; }