X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftabular.h;h=2486a71e2ddeb2b10f5f11534860d952f6858ac2;hb=eead5ba43d0ddf06544ad1b40063981d3788c635;hp=5af58996edc2a3c3448dfc4e3faa8276a46924dc;hpb=63d5070bc3fc82f12e4bae453191e8f153b8524b;p=lyx.git diff --git a/src/tabular.h b/src/tabular.h index 5af58996ed..2486a71e2d 100644 --- a/src/tabular.h +++ b/src/tabular.h @@ -1,10 +1,10 @@ // -*- C++ -*- /* This file is part of - * ====================================================== - * + * ====================================================== + * * LyX, The Document Processor - * - * Copyright 2000 The LyX Team. + * + * Copyright 2000-2001 The LyX Team. * * @author: Jürgen Vigna * @@ -12,22 +12,16 @@ #ifndef TABULAR_H #define TABULAR_H -#ifdef __GNUG__ -#pragma interface -#endif +#include "lyxlength.h" +#include "insets/insettext.h" #include #include -#include "lyxlex.h" -#include "LString.h" -#include "insets/insettext.h" - class InsetTabular; -class LaTeXFeatures; -class Buffer; +class LatexRunParams; -/* The features the text class offers for tables */ +/* The features the text class offers for tables */ /// class LyXTabular { @@ -57,6 +51,8 @@ public: /// ALIGN_CENTER, /// + ALIGN_BLOCK, + /// VALIGN_TOP, /// VALIGN_BOTTOM, @@ -108,12 +104,16 @@ public: SET_USEBOX, /// SET_LTHEAD, + UNSET_LTHEAD, /// SET_LTFIRSTHEAD, + UNSET_LTFIRSTHEAD, /// SET_LTFOOT, + UNSET_LTFOOT, /// SET_LTLASTFOOT, + UNSET_LTLASTFOOT, /// SET_LTNEWPAGE, /// @@ -152,154 +152,149 @@ public: BOX_MINIPAGE = 2 }; - /* konstruktor */ - /// - LyXTabular(InsetTabular *, int columns_arg, int rows_arg); - /// - LyXTabular(InsetTabular *, LyXTabular const &); + struct ltType { + // constructor + ltType(); + // we have this header type (is set in the getLT... functions) + bool set; + // double borders on top + bool topDL; + // double borders on bottom + bool bottomDL; + // used for FirstHeader & LastFooter and if this is true + // all the rows marked as FirstHeader or LastFooter are + // ignored in the output and it is set to be empty! + bool empty; + }; + + /// constructor + LyXTabular(BufferParams const &, + InsetTabular *, int columns_arg, int rows_arg); + /// sort of copy constructor + LyXTabular(BufferParams const &, + InsetTabular *, LyXTabular const &); /// explicit LyXTabular(Buffer const *, InsetTabular *, LyXLex & lex); - /// - LyXTabular & operator=(LyXTabular const &); - /// - LyXTabular * Clone(InsetTabular *); - + /// Returns true if there is a topline, returns false if not - bool TopLine(int cell, bool onlycolumn = false) const; + bool topLine(int cell, bool onlycolumn = false) const; /// Returns true if there is a topline, returns false if not - bool BottomLine(int cell, bool onlycolumn = false) const; + bool bottomLine(int cell, bool onlycolumn = false) const; /// Returns true if there is a topline, returns false if not - bool LeftLine(int cell, bool onlycolumn = false) const; + bool leftLine(int cell, bool onlycolumn = false) const; /// Returns true if there is a topline, returns false if not - bool RightLine(int cell, bool onlycolumn = false) const; - + bool rightLine(int cell, bool onlycolumn = false) const; + /// - bool TopAlreadyDrawed(int cell) const; + bool topAlreadyDrawn(int cell) const; /// - bool LeftAlreadyDrawed(int cell) const; + bool leftAlreadyDrawn(int cell) const; /// - bool IsLastRow(int cell) const; - + bool isLastRow(int cell) const; + /// - int GetAdditionalHeight(int cell) const; + int getAdditionalHeight(int row) const; /// - int GetAdditionalWidth(int cell) const; - + int getAdditionalWidth(int cell) const; + /* returns the maximum over all rows */ /// - int GetWidthOfColumn(int cell) const; + int getWidthOfColumn(int cell) const; /// - int GetWidthOfTabular() const; + int getWidthOfTabular() const; /// - int GetAscentOfRow(int row) const; + int getAscentOfRow(int row) const; /// - int GetDescentOfRow(int row) const; + int getDescentOfRow(int row) const; /// - int GetHeightOfTabular() const; - /// Returns true if a complete update is necessary, otherwise false - bool SetAscentOfRow(int row, int height); - /// Returns true if a complete update is necessary, otherwise false - bool SetDescentOfRow(int row, int height); - /// Returns true if a complete update is necessary, otherwise false - bool SetWidthOfCell(int cell, int new_width); + int getHeightOfTabular() const; /// Returns true if a complete update is necessary, otherwise false - bool SetAllLines(int cell, bool line); + bool setAscentOfRow(int row, int height); /// Returns true if a complete update is necessary, otherwise false - bool SetTopLine(int cell, bool line, bool onlycolumn=false); + bool setDescentOfRow(int row, int height); /// Returns true if a complete update is necessary, otherwise false - bool SetBottomLine(int cell, bool line, bool onlycolumn=false); - /// Returns true if a complete update is necessary, otherwise false - bool SetLeftLine(int cell, bool line, bool onlycolumn=false); - /// Returns true if a complete update is necessary, otherwise false - bool SetRightLine(int cell, bool line, bool onlycolumn=false); - /// Returns true if a complete update is necessary, otherwise false - bool SetAlignment(int cell, LyXAlignment align, bool onlycolumn = false); - /// Returns true if a complete update is necessary, otherwise false - bool SetVAlignment(int cell, VAlignment align, bool onlycolumn = false); + bool setWidthOfCell(int cell, int new_width); /// - bool SetColumnPWidth(int cell, string const & width); + void setAllLines(int cell, bool line); /// - bool SetMColumnPWidth(int cell, string const & width); + void setTopLine(int cell, bool line, bool onlycolumn = false); /// - bool SetAlignSpecial(int cell, string const & special, Feature what); + void setBottomLine(int cell, bool line, bool onlycolumn = false); /// - LyXAlignment GetAlignment(int cell, bool onlycolumn = false) const; + void setLeftLine(int cell, bool line, bool onlycolumn = false); /// - VAlignment GetVAlignment(int cell, bool onlycolumn = false) const; + void setRightLine(int cell, bool line, bool onlycolumn = false); /// - string const GetPWidth(int cell) const; + void setAlignment(int cell, LyXAlignment align, + bool onlycolumn = false); /// - string const GetColumnPWidth(int cell) const; + void setVAlignment(int cell, VAlignment align, + bool onlycolumn = false); /// - string const GetMColumnPWidth(int cell) const; + void setColumnPWidth(int cell, LyXLength const & width); /// - string const GetAlignSpecial(int cell, int what) const; + bool setMColumnPWidth(int cell, LyXLength const & width); /// - int GetWidthOfCell(int cell) const; + void setAlignSpecial(int cell, string const & special, Feature what); /// - int GetBeginningOfTextInCell(int cell) const; + LyXAlignment getAlignment(int cell, bool onlycolumn = false) const; /// - void AppendRow(int cell); + VAlignment getVAlignment(int cell, bool onlycolumn = false) const; /// - void DeleteRow(int row); + LyXLength const getPWidth(int cell) const; /// - void AppendColumn(int cell); + LyXLength const getColumnPWidth(int cell) const; /// - void DeleteColumn(int column); + LyXLength const getMColumnPWidth(int cell) const; /// - bool IsFirstCellInRow(int cell) const; + string const getAlignSpecial(int cell, int what) const; /// - int GetFirstCellInRow(int row) const; + int getWidthOfCell(int cell) const; /// - bool IsLastCellInRow(int cell) const; + int getBeginningOfTextInCell(int cell) const; /// - int GetLastCellInRow(int row) const; + void appendRow(BufferParams const &, int cell); /// - int GetNumberOfCells() const; + void deleteRow(int row); /// - int NumberOfCellsInRow(int cell) const; + void appendColumn(BufferParams const &, int cell); /// - void Write(Buffer const *, std::ostream &) const; + void deleteColumn(int column); /// - void Read(Buffer const *, LyXLex &); + bool isFirstCellInRow(int cell) const; /// - void OldFormatRead(LyXLex &, string const &); - // - // helper function for Latex returns number of newlines + int getFirstCellInRow(int row) const; /// - int TeXTopHLine(std::ostream &, int row) const; + bool isLastCellInRow(int cell) const; /// - int TeXBottomHLine(std::ostream &, int row) const; + int getLastCellInRow(int row) const; /// - int TeXCellPreamble(std::ostream &, int cell) const; + int getNumberOfCells() const; /// - int TeXCellPostamble(std::ostream &, int cell) const; + int numberOfCellsInRow(int cell) const; /// - int Latex(Buffer const *, std::ostream &, bool, bool) const; + void write(Buffer const *, std::ostream &) const; /// - int DocBook(Buffer const * buf, std::ostream & os) const; + void read(Buffer const *, LyXLex &); /// - // helper function for Latex returns number of newlines - /// - int AsciiTopHLine(std::ostream &, int row, - std::vector const &) const; - /// - int AsciiBottomHLine(std::ostream &, int row, - std::vector const &) const; + int latex(Buffer const *, std::ostream &, + LatexRunParams const &) const; + // + int linuxdoc(Buffer const * buf, std::ostream & os) const; /// - int AsciiPrintCell(Buffer const *, std::ostream &, int cell, int row, - int column, std::vector const &) const; + int docbook(Buffer const * buf, std::ostream & os, bool mixcont) const; /// - int Ascii(Buffer const *, std::ostream &) const; + int ascii(Buffer const *, std::ostream &, int const depth, + bool onlydata, unsigned char delim) const; /// - bool IsMultiColumn(int cell, bool real = false) const; + bool isMultiColumn(int cell, bool real = false) const; /// - void SetMultiColumn(int cell, int number); + void setMultiColumn(Buffer *, int cell, int number); /// - int UnsetMultiColumn(int cell); // returns number of new cells + int unsetMultiColumn(int cell); // returns number of new cells /// - bool IsPartOfMultiColumn(int row, int column) const; + bool isPartOfMultiColumn(int row, int column) const; /// int row_of_cell(int cell) const; /// @@ -307,71 +302,91 @@ public: /// int right_column_of_cell(int cell) const; /// - void SetLongTabular(bool); + void setLongTabular(bool); /// - bool IsLongTabular() const; + bool isLongTabular() const; /// - void SetRotateTabular(bool); + void setRotateTabular(bool); /// - bool GetRotateTabular() const; + bool getRotateTabular() const; /// - void SetRotateCell(int cell, bool); + void setRotateCell(int cell, bool); /// - bool GetRotateCell(int cell) const; + bool getRotateCell(int cell) const; /// - bool NeedRotating() const; + bool needRotating() const; /// - bool IsLastCell(int cell) const; + bool isLastCell(int cell) const; /// - int GetCellAbove(int cell) const; + int getCellAbove(int cell) const; /// - int GetCellBelow(int cell) const; + int getCellBelow(int cell) const; /// - int GetLastCellAbove(int cell) const; + int getLastCellAbove(int cell) const; /// - int GetLastCellBelow(int cell) const; + int getLastCellBelow(int cell) const; /// - int GetCellNumber(int row, int column) const; + int getCellNumber(int row, int column) const; /// - void SetUsebox(int cell, BoxType); + void setUsebox(int cell, BoxType); /// - BoxType GetUsebox(int cell) const; + BoxType getUsebox(int cell) const; // - // Long Tabular Options + // Long Tabular Options support functions + /// + bool checkLTType(int row, ltType const &) const; + /// + void setLTHead(int row, bool flag, ltType const &, bool first); + /// + bool getRowOfLTHead(int row, ltType &) const; + /// + bool getRowOfLTFirstHead(int row, ltType &) const; + /// + void setLTFoot(int row, bool flag, ltType const &, bool last); /// - void SetLTHead(int cell, bool first); + bool getRowOfLTFoot(int row, ltType &) const; /// - bool GetRowOfLTHead(int cell, int & row) const; + bool getRowOfLTLastFoot(int row, ltType &) const; /// - bool GetRowOfLTFirstHead(int cell, int & row) const; + void setLTNewPage(int row, bool what); /// - void SetLTFoot(int cell, bool last); + bool getLTNewPage(int row) const; /// - bool GetRowOfLTFoot(int cell, int & row) const; + bool haveLTHead() const; /// - bool GetRowOfLTLastFoot(int cell, int & row) const; + bool haveLTFirstHead() const; /// - void SetLTNewPage(int cell, bool what); + bool haveLTFoot() const; /// - bool GetLTNewPage(int cell) const; + bool haveLTLastFoot() const; /// - InsetText * GetCellInset(int cell) const; + // end longtable support /// - InsetText * GetCellInset(int row, int column) const; + InsetText & getCellInset(int cell) const; + /// + InsetText & getCellInset(int row, int column) const; + /// Search for \param inset in the tabular, with the + /// additional hint that it could be at \param maybe_cell + int getCellFromInset(InsetOld const * inset, int maybe_cell = -1) const; /// int rows() const { return rows_; } /// int columns() const { return columns_;} /// - InsetTabular * owner() const { return owner_; } + void validate(LaTeXFeatures &) const; /// - void Validate(LaTeXFeatures &) const; - -private: ////////////////////////////////////////////////////////////////// + void getLabelList(std::vector &) const; + /// + /// recalculate the widths/heights only! + void reinit(); + /// +//private: + /// + mutable int cur_cell; /// struct cellstruct { /// - cellstruct(); + cellstruct(BufferParams const &); /// int cellno; /// @@ -397,10 +412,11 @@ private: ////////////////////////////////////////////////////////////////// /// string align_special; /// - string p_width; // this is only set for multicolumn!!! + LyXLength p_width; // this is only set for multicolumn!!! /// InsetText inset; }; + cellstruct & cellinfo_of_cell(int cell) const; /// typedef std::vector cell_vector; /// @@ -411,14 +427,23 @@ private: ////////////////////////////////////////////////////////////////// /// rowstruct(); /// - bool top_line; - /// - bool bottom_line; - /// int ascent_of_row; /// int descent_of_row; + /// + bool top_line; + /// + bool bottom_line; /// This are for longtabulars only + /// a row of endhead + bool endhead; + /// a row of endfirsthead + bool endfirsthead; + /// a row of endfoot + bool endfoot; + /// row of endlastfoot + bool endlastfoot; + /// row for a pagebreak bool newpage; }; /// @@ -439,19 +464,13 @@ private: ////////////////////////////////////////////////////////////////// /// int width_of_column; /// - string p_width; + LyXLength p_width; /// string align_special; }; /// typedef std::vector column_vector; - /// - void ReadNew(Buffer const * buf, std::istream & is, - LyXLex & lex, string const & l); - /// - void ReadOld(Buffer const * buf, std::istream & is, - LyXLex & lex, string const & l); /// int rows_; /// @@ -474,43 +493,78 @@ private: ////////////////////////////////////////////////////////////////// bool rotate; // // for long tabulars - /// + // bool is_long_tabular; - /// row of endhead - int endhead; - /// row of endfirsthead - int endfirsthead; - /// row of endfoot - int endfoot; - /// row of endlastfoot - int endlastfoot; + /// endhead data + ltType endhead; + /// endfirsthead data + ltType endfirsthead; + /// endfoot data + ltType endfoot; + /// endlastfoot data + ltType endlastfoot; + // /// InsetTabular * owner_; - + /// - void Init(int columns_arg, int rows_arg); + void init(BufferParams const &, + int columns_arg, int rows_arg, LyXTabular const * lt = 0); /// - void Reinit(); + void Reinit(bool reset_widths = true); /// void set_row_column_number_info(bool oldformat = false); /// Returns true if a complete update is necessary, otherwise false - bool SetWidthOfMulticolCell(int cell, int new_width); + bool setWidthOfMulticolCell(int cell, int new_width); /// - void recalculateMulticolCells(int cell, int new_width); + void recalculateMulticolumnsOfColumn(int column); /// Returns true if change - bool calculate_width_of_column(int column); + void calculate_width_of_column(int column); /// bool calculate_width_of_column_NMC(int column); // no multi cells /// void calculate_width_of_tabular(); /// - cellstruct * cellinfo_of_cell(int cell) const; - /// void delete_column(int column); /// int cells_in_multicolumn(int cell) const; /// - BoxType UseParbox(int cell) const; + BoxType useParbox(int cell) const; + /// + void setHeaderFooterRows(int header, int fheader, int footer, int lfooter); + /// + // helper function for Latex returns number of newlines + /// + int TeXTopHLine(std::ostream &, int row) const; + /// + int TeXBottomHLine(std::ostream &, int row) const; + /// + int TeXCellPreamble(std::ostream &, int cell) const; + /// + int TeXCellPostamble(std::ostream &, int cell) const; + /// + int TeXLongtableHeaderFooter(std::ostream &, Buffer const * buf, + LatexRunParams const &) const; + /// + bool isValidRow(int const row) const; + /// + int TeXRow(std::ostream &, int const row, Buffer const * buf, + LatexRunParams const &) const; + /// + // helper function for ASCII returns number of newlines + /// + int asciiTopHLine(std::ostream &, int row, + std::vector const &) const; + /// + int asciiBottomHLine(std::ostream &, int row, + std::vector const &) const; + /// + int asciiPrintCell(Buffer const *, std::ostream &, + int cell, int row, int column, + std::vector const &, + bool onlydata) const; + /// auxiliary function for docbook + int docbookRow(Buffer const * buf, std::ostream & os, int row) const; }; #endif