#define INSET_TABULAR_H
#include "InsetText.h"
-#include "Length.h"
+
+#include "support/Length.h"
#include <climits>
#include <iosfwd>
class Lexer;
class OutputParams;
class Paragraph;
-class XHTMLStream;
+class XMLStream;
///
{
public:
///
- InsetTableCell(Buffer * buf);
+ explicit InsetTableCell(Buffer * buf);
///
InsetCode lyxCode() const { return CELL_CODE; }
///
/// descending into insets
docstring asString(bool intoInsets = true);
///
- docstring xhtml(XHTMLStream &, OutputParams const &) const;
+ docstring xhtml(XMLStream &, OutputParams const &) const;
+ ///
+ void docbook(XMLStream &, OutputParams const &) const;
///
void addToToc(DocIterator const & di, bool output_active,
UpdateType utype, TocBackend & backend) const;
///
void metrics(MetricsInfo &, Dimension &) const;
+ /// Needs to be same as InsetTabular
+ bool inheritFont() const { return false; }
+ /// Can the cell contain several paragraphs?
+ bool allowMultiPar() const { return !isMultiRow && (!isMultiColumn || isFixedWidth); }
private:
/// unimplemented
InsetTableCell();
// FIXME: Here the thoughts from the comment above also apply.
///
LyXAlignment contentAlign;
- /// should paragraph indendation be omitted in any case?
+ /// should paragraph indentation be omitted in any case?
bool neverIndent() const { return true; }
///
LyXAlignment contentAlignment() const { return contentAlign; }
virtual bool forceLocalFontSwitch() const;
/// Is the width forced to some value?
bool hasFixedWidth() const { return isFixedWidth; }
- /// Can the cell contain several paragraphs?
- bool allowMultiPar() const { return !isMultiRow && (!isMultiColumn || isFixedWidth); }
};
///FIXME: remove
TOGGLE_LINE_RIGHT,
///
+ SET_LTRIM_TOP,
+ ///
+ SET_RTRIM_TOP,
+ ///
+ SET_LTRIM_BOTTOM,
+ ///
+ SET_RTRIM_BOTTOM,
+ ///
+ TOGGLE_LTRIM_TOP,
+ ///
+ TOGGLE_RTRIM_TOP,
+ ///
+ TOGGLE_LTRIM_BOTTOM,
+ ///
+ TOGGLE_RTRIM_BOTTOM,
+ ///
ALIGN_LEFT,
///
ALIGN_RIGHT,
///
SET_ALL_LINES,
///
+ RESET_FORMAL_DEFAULT,
+ ///
UNSET_ALL_LINES,
///
TOGGLE_LONGTABULAR,
///
SET_TABULAR_WIDTH,
///
+ SET_INNER_LINES,
+ ///
LAST_ACTION
};
///
/// Returns true if there is a topline, returns false if not
bool bottomLine(idx_type cell) const;
/// Returns true if there is a topline, returns false if not
- bool leftLine(idx_type cell) const;
+ /// If \p ignore_bt is true, we return the state as if booktabs was
+ /// not used
+ bool leftLine(idx_type cell, bool const ignore_bt = false) const;
/// Returns true if there is a topline, returns false if not
- bool rightLine(idx_type cell) const;
+ /// If \p ignore_bt is true, we return the state as if booktabs was
+ /// not used
+ bool rightLine(idx_type cell, bool const ignore_bt = false) const;
+ /// Returns whether the top line is trimmed left and/or right
+ std::pair<bool, bool> topLineTrim(idx_type const cell) const;
+ /// Returns whether the bottom line is trimmed left and/or right
+ std::pair<bool, bool> bottomLineTrim(idx_type const cell) const;
/// return space occupied by the second horizontal line and
/// interline space above row \p row in pixels
///
void setBottomLine(idx_type cell, bool line);
///
+ void setTopLineLTrim(idx_type cell, bool val);
+ ///
+ void setBottomLineLTrim(idx_type cell, bool val);
+ ///
+ void setTopLineRTrim(idx_type cell, bool val);
+ ///
+ void setBottomLineRTrim(idx_type cell, bool val);
+ ///
+ void setTopLineTrim(idx_type cell, std::pair<bool, bool>);
+ ///
+ void setBottomLineTrim(idx_type cell, std::pair<bool, bool>);
+ ///
void setLeftLine(idx_type cell, bool line);
///
void setRightLine(idx_type cell, bool line);
///
void appendRow(row_type row);
///
- void deleteRow(row_type row);
+ void deleteRow(row_type row, bool const force = false);
///
void copyRow(row_type row);
///
///
void appendColumn(col_type column);
///
- void deleteColumn(col_type column);
+ void deleteColumn(col_type column, bool const force = false);
///
void copyColumn(col_type column);
///
void insertColumn(col_type column, bool copy);
///
- idx_type getFirstCellInRow(row_type row) const;
+ idx_type getFirstCellInRow(row_type row, bool const ct = false) const;
///
- idx_type getLastCellInRow(row_type row) const;
+ idx_type getLastCellInRow(row_type row, bool const ct = false) const;
+ ///
+ idx_type getFirstRow(bool const ct = false) const;
+ ///
+ idx_type getLastRow(bool const ct = false) const;
///
idx_type numberOfCellsInRow(row_type row) const;
///
void read(Lexer &);
///
void latex(otexstream &, OutputParams const &) const;
+ /// serialise the table in DocBook, according to buffer parameters
+ void docbook(XMLStream &, OutputParams const &) const;
///
- int docbook(odocstream & os, OutputParams const &) const;
- ///
- docstring xhtml(XHTMLStream & os, OutputParams const &) const;
+ docstring xhtml(XMLStream &, OutputParams const &) const;
///
void plaintext(odocstringstream &,
OutputParams const & runparams, int const depth,
class CellData {
public:
///
- CellData(Buffer *);
+ explicit CellData(Buffer *);
///
CellData(CellData const &);
///
///
bool right_line;
///
+ bool top_line_rtrimmed;
+ ///
+ bool top_line_ltrimmed;
+ ///
+ bool bottom_line_rtrimmed;
+ ///
+ bool bottom_line_ltrimmed;
+ ///
BoxType usebox;
///
int rotate;
bool newpage;
/// caption
bool caption;
+ ///
+ Change change;
};
///
typedef std::vector<RowData> row_vector;
docstring decimal_point;
///
bool varwidth;
+ ///
+ Change change;
};
///
typedef std::vector<ColumnData> column_vector;
///
bool setFixedWidth(row_type r, col_type c);
/// return true of update is needed
- bool updateColumnWidths();
+ bool updateColumnWidths(MetricsInfo & mi);
///
idx_type columnSpan(idx_type cell) const;
///
///
// helper function for Latex
///
- void TeXTopHLine(otexstream &, row_type row, std::string const & lang,
+ void TeXTopHLine(otexstream &, row_type row, std::list<col_type>,
std::list<col_type>) const;
///
- void TeXBottomHLine(otexstream &, row_type row, std::string const & lang,
+ void TeXBottomHLine(otexstream &, row_type row, std::list<col_type>,
std::list<col_type>) const;
///
void TeXCellPreamble(otexstream &, idx_type cell, bool & ismulticol, bool & ismultirow,
///
void TeXCellPostamble(otexstream &, idx_type cell, bool ismulticol, bool ismultirow) const;
///
- void TeXLongtableHeaderFooter(otexstream &, OutputParams const &, std::list<col_type>) const;
+ void TeXLongtableHeaderFooter(otexstream &, OutputParams const &, std::list<col_type>,
+ std::list<col_type>) const;
///
bool isValidRow(row_type const row) const;
///
void TeXRow(otexstream &, row_type const row,
- OutputParams const &, std::list<col_type>) const;
+ OutputParams const &, std::list<col_type>, std::list<col_type>) const;
///
// helper functions for plain text
///
idx_type cell, row_type row, col_type column,
std::vector<unsigned int> const &,
bool onlydata, size_t max_length) const;
- /// auxiliary function for docbook
- int docbookRow(odocstream & os, row_type, OutputParams const &) const;
- ///
- docstring xhtmlRow(XHTMLStream & xs, row_type, OutputParams const &,
+ /// auxiliary function for DocBook
+ void docbookRow(XMLStream &, row_type, OutputParams const &,
+ bool header = false) const;
+ /// auxiliary function for DocBook: export this row as HTML
+ void docbookRowAsHTML(XMLStream &, row_type, OutputParams const &,
+ bool header) const;
+ /// auxiliary function for DocBook: export this row as CALS
+ void docbookRowAsCALS(XMLStream &, row_type, OutputParams const &) const;
+ ///
+ docstring xhtmlRow(XMLStream & xs, row_type, OutputParams const &,
bool header = false) const;
/// change associated Buffer
bool canTrackChanges() const { return true; }
///
bool canPaintChange(BufferView const &) const { return true; }
- /** returns false if, when outputing LaTeX, font changes should
+ /** returns false if, when outputting LaTeX, font changes should
be closed before generating this inset. This is needed for
insets that may contain several paragraphs */
bool inheritFont() const { return false; }
///
+ bool allowMultiPar() const;
+ ///
bool allowsCaptionVariation(std::string const &) const;
//
bool isTable() const { return true; }
///
- DisplayType display() const;
+ RowFlags rowFlags() const;
///
void latex(otexstream &, OutputParams const &) const;
///
int plaintext(odocstringstream & ods, OutputParams const & op,
size_t max_length = INT_MAX) const;
///
- int docbook(odocstream &, OutputParams const &) const;
+ void docbook(XMLStream &, OutputParams const &) const;
///
- docstring xhtml(XHTMLStream &, OutputParams const &) const;
+ docstring xhtml(XMLStream &, OutputParams const &) const;
///
void validate(LaTeXFeatures & features) const;
///
///
Text * getText(int) const;
+ /// does the inset contain changes ?
+ bool isChanged() const;
/// set the change for the entire inset
void setChange(Change const & change);
/// accept the changes within the inset
/// can we go further down on mouse click?
bool descendable(BufferView const &) const { return true; }
/// Update the counters of this inset and of its contents
- void updateBuffer(ParIterator const &, UpdateType);
+ void updateBuffer(ParIterator const &, UpdateType, bool const deleted = false);
///
void addToToc(DocIterator const & di, bool output_active,
UpdateType utype, TocBackend & backend) const;
/// writes the cells between stidx and enidx as a string, optionally
/// descending into the insets
docstring asString(idx_type stidx, idx_type enidx, bool intoInsets = true);
+ ///
+ ParagraphList asParList(idx_type stidx, idx_type enidx);
/// Returns whether the cell in the specified row and column is selected.
bool isCellSelected(Cursor & cur, row_type row, col_type col) const;