#include "LyXRC.h"
#include "MetricsInfo.h"
#include "OutputParams.h"
+#include "output_xhtml.h"
#include "Paragraph.h"
#include "ParagraphParameters.h"
#include "ParIterator.h"
}
+docstring Tabular::xhtmlRow(XHTMLStream & xs, row_type row,
+ OutputParams const & runparams) const
+{
+ docstring ret;
+ idx_type cell = getFirstCellInRow(row);
+
+ xs << html::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='" << columnSpan(cell) << "'";
+
+ xs << html::StartTag("td", attr.str());
+ ret += cellInset(cell)->xhtml(xs, runparams);
+ xs << html::EndTag("td");
+ ++cell;
+ }
+ xs << html::EndTag("tr");
+ return ret;
+}
+
+
+docstring Tabular::xhtml(XHTMLStream & xs, OutputParams const & runparams) const
+{
+ docstring ret;
+ // 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 << html::StartTag("tbody");
+ for (row_type i = 0; i < row_info.size(); ++i) {
+ if (isValidRow(i)) {
+ ret += xhtmlRow(xs, i, runparams);
+ }
+ }
+ xs << html::EndTag("tbody");
+ return ret;
+}
+
+
bool Tabular::plaintextTopHLine(odocstream & os, row_type row,
vector<unsigned int> const & clen) const
{
}
+docstring InsetTableCell::xhtml(XHTMLStream & xs, OutputParams const & rp) const
+{
+ if (!isFixedWidth)
+ return InsetText::insetAsXHTML(xs, rp, InsetText::JustText);
+ return InsetText::xhtml(xs, rp);
+}
+
+
/////////////////////////////////////////////////////////////////////
//
cur.pit() = 0;
cur.pos() = cur.lastpos(); // FIXME crude guess
}
+ cur.setCurrentFont();
// FIXME: this accesses the position cache before it is initialized
//resetPos(cur);
//cur.bv().fitCursor();
}
-void InsetTabular::updateLabels(ParIterator const & it)
+void InsetTabular::updateLabels(ParIterator const & it, UpdateType utype)
{
// In a longtable, tell captions what the current float is
Counters & cnts = buffer().masterBuffer()->params().documentClass().counters();
it2.forwardPos();
size_t const end = it2.nargs();
for ( ; it2.idx() < end; it2.top().forwardIdx())
- buffer().updateLabels(it2);
+ buffer().updateLabels(it2, utype);
//reset afterwards
if (tabular.is_long_tabular)
TextMetrics const & tm =
cur.bv().textMetrics(cell(cur.idx())->getText(0));
cur.pos() = tm.x2pos(cur.pit(), 0, cur.targetX());
+ cur.setCurrentFont();
}
}
if (sl == cur.top()) {
if (cur.selIsMultiCell()) {
cur.pit() = cur.lastpit();
cur.pos() = cur.lastpos();
+ cur.setCurrentFont();
return;
}
break;
ParagraphMetrics const & pm =
tm.parMetrics(cur.lastpit());
cur.pos() = tm.x2pos(cur.pit(), pm.rows().size()-1, cur.targetX());
+ cur.setCurrentFont();
}
}
if (sl == cur.top()) {
if (cur.selIsMultiCell()) {
cur.pit() = 0;
cur.pos() = cur.lastpos();
+ cur.setCurrentFont();
return;
}
break;
}
+docstring InsetTabular::xhtml(XHTMLStream & xs, OutputParams const & rp) const
+{
+ // 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.
+ xs << html::StartTag("table");
+ docstring ret = tabular.xhtml(xs, rp);
+ xs << html::EndTag("table");
+ return ret;
+}
+
+
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.addPreambleSnippet("<style type=\"text/css\">\n"
+ "table { border: 1px solid black; display: inline-block; }\n"
+ "td { border: 1px solid black; padding: 0.5ex; }\n"
+ "</style>");
}
break;
}
-
+ cur.setCurrentFont();
resetPos(cur);
}
break;
}
-
+ cur.setCurrentFont();
resetPos(cur);
}
cell_pos.push_back(CursorSlice(*const_cast<InsetTabular *>(this)));
for (row_type i = 0; i < rows; ++i) {
for (col_type j = 0; j < columns; ++j) {
- cell_pos.top().idx() = index(i, j);
+ cell_pos.top().idx() = tabular.cellIndex(i, j);
tabular.cellInset(i, j)->addPreview(cell_pos, loader);
}
}