X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetTabular.h;h=5602984b3339be79d73199034f71ebdb36436489;hb=8124e6c02ea1fd6779bb6c47ffe2bca2c8bd2d97;hp=2ee107a1926946ce8948eb4f300c33df2a988a11;hpb=2a594d3e90a673c56df9766658a79cf0bcaeb9a8;p=lyx.git diff --git a/src/insets/InsetTabular.h b/src/insets/InsetTabular.h index 2ee107a192..5602984b33 100644 --- a/src/insets/InsetTabular.h +++ b/src/insets/InsetTabular.h @@ -24,9 +24,12 @@ #ifndef INSET_TABULAR_H #define INSET_TABULAR_H +#include "BufferParams.h" +#include "Changes.h" #include "InsetText.h" #include "support/Length.h" +#include "support/types.h" #include #include @@ -66,11 +69,13 @@ public: /// void toggleFixedWidth(bool fw) { isFixedWidth = fw; } /// + void toggleVarWidth(bool vw) { isVarwidth = vw; } + /// void toggleMultiCol(bool m) { isMultiColumn = m; } /// void toggleMultiRow(bool m) { isMultiRow = m; } /// - void setContentAlignment(LyXAlignment al) {contentAlign = al; } + void setContentAlignment(LyXAlignment al) { contentAlign = al; } /// writes the contents of the cell as a string, optionally /// descending into insets docstring asString(bool intoInsets = true); @@ -87,6 +92,10 @@ public: bool inheritFont() const override { return false; } /// Can the cell contain several paragraphs? bool allowMultiPar() const override { return !isMultiRow && (!isMultiColumn || isFixedWidth); } + /// + bool canPaintChange(BufferView const &) const override { return false; } + /// This assures we never output \maketitle in table cells + bool isInTitle() const override { return true; } private: /// InsetTableCell() = delete; @@ -119,6 +128,8 @@ private: /// bool isFixedWidth; /// + bool isVarwidth; + /// bool isMultiColumn; /// bool isMultiRow; @@ -132,8 +143,6 @@ private: /// bool usePlainLayout() const override { return true; } /// - bool forcePlainLayout(idx_type = 0) const override; - /// bool allowParagraphCustomization(idx_type = 0) const override; /// bool forceLocalFontSwitch() const override; @@ -333,6 +342,12 @@ public: /// SET_INNER_LINES, /// + TOGGLE_INNER_LINES, + /// + TOGGLE_BORDER_LINES, + /// + TOGGLE_ALL_LINES, + /// LAST_ACTION }; /// @@ -419,12 +434,6 @@ public: bool empty; }; - /// type for row numbers - typedef size_t row_type; - /// type for column numbers - typedef size_t col_type; - /// type for cell indices - typedef size_t idx_type; /// index indicating an invalid position static const idx_type npos = static_cast(-1); @@ -443,6 +452,18 @@ public: /// 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 true if there is an outside border around the selection + bool outsideBorders(row_type sel_row_start, row_type sel_row_end, + col_type sel_col_start, col_type sel_col_end) const; + /// Returns true if there are inside lines in the selection + bool innerBorders(row_type sel_row_start, row_type sel_row_end, + col_type sel_col_start, col_type sel_col_end) const; + /// Sets the grid lines in the selection + /// if \p setLinesInnerOnly is true, outside borders are excluded + /// if \p setLines is true the lines are set otherwise they are unset + void setLines(row_type const sel_row_start, row_type const sel_row_end, + col_type const sel_col_start, col_type const sel_col_end, + bool setLinesInnerOnly, bool setLines); /// Returns whether the top line is trimmed left and/or right std::pair topLineTrim(idx_type const cell) const; /// Returns whether the bottom line is trimmed left and/or right @@ -550,9 +571,11 @@ public: /// void insertRow(row_type row, bool copy); /// - void moveColumn(col_type col, ColDirection direction); + void moveColumn(col_type col_start, col_type col_end, + ColDirection direction); /// - void moveRow(row_type row, RowDirection direction); + void moveRow(row_type row_start, row_type row_end, + RowDirection direction); /// void appendColumn(col_type column); /// @@ -679,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; @@ -827,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; /// @@ -878,51 +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; /// change associated Buffer void setBuffer(Buffer & buffer); @@ -934,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 @@ -976,9 +1038,7 @@ public: bool canTrackChanges() const override { return true; } /// bool canPaintChange(BufferView const &) const override { return true; } - /** 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 override { return false; } /// bool allowMultiPar() const override; @@ -987,7 +1047,7 @@ public: // bool isTable() const override { return true; } /// - RowFlags rowFlags() const override; + int rowFlags() const override; /// void latex(otexstream &, OutputParams const &) const override; /// @@ -1036,8 +1096,6 @@ public: /// should all paragraphs be output with "Standard" layout? bool allowParagraphCustomization(idx_type cell = 0) const override; /// - bool forcePlainLayout(idx_type cell = 0) const override; - /// void addPreview(DocIterator const & inset_pos, graphics::PreviewLoader &) const override; @@ -1072,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; /// @@ -1092,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; ///