X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetTabular.h;h=5602984b3339be79d73199034f71ebdb36436489;hb=8124e6c02ea1fd6779bb6c47ffe2bca2c8bd2d97;hp=8420a48fefe2f1503a735c3b333e7505328ec03d;hpb=c7896cf922f8297ba9bbfc0fa13b99ccaf9168a5;p=lyx.git diff --git a/src/insets/InsetTabular.h b/src/insets/InsetTabular.h index 8420a48fef..5602984b33 100644 --- a/src/insets/InsetTabular.h +++ b/src/insets/InsetTabular.h @@ -24,6 +24,7 @@ #ifndef INSET_TABULAR_H #define INSET_TABULAR_H +#include "BufferParams.h" #include "Changes.h" #include "InsetText.h" @@ -701,7 +702,7 @@ public: /// can return different things. this is because cellIndex(r,c) /// returns the VISIBLE cell at r,c, which may be the same as the /// cell at the previous row or column, if we're dealing with some - /// multirow or multicell. + /// multirow or multicolumn. std::shared_ptr cellInset(idx_type cell); std::shared_ptr cellInset(row_type row, col_type column); InsetTableCell const * cellInset(idx_type cell) const; @@ -849,6 +850,24 @@ public: /// typedef std::vector column_vector; +private: + // Determines the style of borders, per row. + class XmlRowWiseBorders { + public: + // Whether to draw double bottom line. + bool completeBorder = true; + + // Whether to draw booktabs' thicker lines. + bool completeBorderAbove = true; + bool completeBorderBelow = true; + + // Size of the borders. + double borderBottomWidth = 1.0; + double borderBottomWidthComplete = 3.0; + double borderTopWidth = 1.0; + }; + +public: /// idx_type numberofcells; /// @@ -900,54 +919,12 @@ public: /// BoxType useBox(idx_type cell) const; /// - // helper function for Latex - /// - void TeXTopHLine(otexstream &, row_type row, std::list, - std::list) const; - /// - void TeXBottomHLine(otexstream &, row_type row, std::list, - std::list) const; - /// - void TeXCellPreamble(otexstream &, idx_type cell, bool & ismulticol, bool & ismultirow, - bool const bidi) const; - /// - void TeXCellPostamble(otexstream &, idx_type cell, bool ismulticol, bool ismultirow) const; - /// - void TeXLongtableHeaderFooter(otexstream &, OutputParams const &, std::list, - std::list) const; + bool hasNewlines(idx_type cell) const; /// bool isValidRow(row_type const row) const; /// void TeXRow(otexstream &, row_type const row, OutputParams const &, std::list, std::list) const; - /// - // helper functions for plain text - /// - bool plaintextTopHLine(odocstringstream &, row_type row, - std::vector const &) const; - /// - bool plaintextBottomHLine(odocstringstream &, row_type row, - std::vector const &) const; - /// - void plaintextPrintCell(odocstringstream &, - OutputParams const &, - idx_type cell, row_type row, col_type column, - std::vector const &, - bool onlydata, size_t max_length) 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; - - /// Transforms the vertical alignment of the given cell as a prebaked XML attribute (for HTML and CALS). - std::string getVAlignAsXmlAttribute(idx_type cell) const; /// change associated Buffer void setBuffer(Buffer & buffer); @@ -959,6 +936,66 @@ public: private: Buffer * buffer_; + /// + // helper function for DocBook + /// + /// Determines whether the tabular item should be generated as DocBook or XHTML. + enum class XmlOutputFormat : bool { + XHTML = true, + DOCBOOK = false + }; + + /// Transforms the vertical alignment of the given cell as prebaked CSS (for HTML tables in HTML output). + std::string getHAlignAsXmlAttribute(idx_type cell) const; + /// Transforms the vertical alignment of the given cell as a prebaked XML attribute (for CALS or HTML tables in DocBook). + std::string getHAlignAsCssAttribute(idx_type cell) const; + /// Transforms the vertical alignment of the given cell as prebaked CSS (for HTML tables in HTML output). + std::string getVAlignAsCssAttribute(idx_type cell) const; + /// Transforms the vertical alignment of the given cell as a prebaked XML attribute (for CALS or HTML tables in DocBook). + std::string getVAlignAsXmlAttribute(idx_type cell) const; + + /// Helpers for XML tables (XHTML or DocBook). + docstring xmlRow(XMLStream & xs, row_type row, OutputParams const &, + bool header, XmlOutputFormat output_format, + BufferParams::TableOutput docbook_table_output = BufferParams::TableOutput::HTMLTable) const; + void xmlHeader(XMLStream & xs, OutputParams const &, XmlOutputFormat output_format) const; + void xmlFooter(XMLStream & xs, OutputParams const &, XmlOutputFormat output_format) const; + void xmlBody(XMLStream & xs, OutputParams const &, XmlOutputFormat output_format) const; + XmlRowWiseBorders computeXmlBorders(row_type row) const; + std::vector computeCssStylePerCell(row_type row, col_type col, idx_type cell) const; + + /// + // helper functions for plain text + /// + bool plaintextTopHLine(odocstringstream &, row_type row, + std::vector const &) const; + /// + bool plaintextBottomHLine(odocstringstream &, row_type row, + std::vector const &) const; + /// + void plaintextPrintCell(odocstringstream &, + OutputParams const &, + idx_type cell, row_type row, col_type column, + std::vector const &, + bool onlydata, size_t max_length) const; + + /// + // helper function for LaTeX + /// + void TeXTopHLine(otexstream &, row_type row, std::list, + std::list) const; + /// + void TeXBottomHLine(otexstream &, row_type row, std::list, + std::list) const; + /// + void TeXCellPreamble(otexstream &, idx_type cell, bool & ismulticol, bool & ismultirow, + bool const bidi) const; + /// + void TeXCellPostamble(otexstream &, idx_type cell, bool ismulticol, bool ismultirow) const; + /// + void TeXLongtableHeaderFooter(otexstream &, OutputParams const &, std::list, + std::list) const; + }; // Tabular @@ -1093,7 +1130,7 @@ public: /// docstring completionPrefix(Cursor const & cur) const override; /// - bool insertCompletion(Cursor & cur, docstring const & s, bool finished) override; + bool insertCompletion(Cursor & cur, docstring const & s, bool /*finished*/) override; /// void completionPosAndDim(Cursor const &, int & x, int & y, Dimension & dim) const override; /// @@ -1113,7 +1150,8 @@ public: docstring asString(idx_type stidx, idx_type enidx, bool intoInsets = true); /// ParagraphList asParList(idx_type stidx, idx_type enidx); - + /// + bool confirmDeletion() const override { return true; } /// Returns whether the cell in the specified row and column is selected. bool isCellSelected(Cursor & cur, row_type row, col_type col) const; ///