]> git.lyx.org Git - lyx.git/blobdiff - src/OutputParams.h
Remove all uses of Q_WS_* macros
[lyx.git] / src / OutputParams.h
index 4fb9b74840707ecfd411aa0a2cd185519f40dd53..65b4fc266f83975822775666a0cccf6d14ee4f00 100644 (file)
 #ifndef OUTPUTPARAMS_H
 #define OUTPUTPARAMS_H
 
-#include <string>
 
-#include "support/types.h"
-#include <boost/shared_ptr.hpp>
 #include "Changes.h"
 
+#include <memory>
+#include <set>
+
 
 namespace lyx {
 
@@ -26,17 +26,38 @@ class Encoding;
 class ExportData;
 class Font;
 class Language;
+class InsetArgument;
+
+
+enum class Flavor : int {
+       DviLuaTeX,
+       LaTeX,
+       LuaTeX,
+       PdfLaTeX,
+       XeTeX,
+       DocBook5,
+       Html,
+       Text,
+       LyX
+};
+
+enum class CtObject : int {
+       Normal,
+       Object,
+       DisplayObject,
+       UDisplayObject,
+       OmitObject
+};
 
 
 class OutputParams {
 public:
-       enum FLAVOR {
-               LATEX,
-               PDFLATEX,
-               XETEX,
-               XML,
-               HTML,
-               TEXT
+       enum MathFlavor {
+               NotApplicable,
+               MathAsMathML,
+               MathAsHTML,
+               MathAsImages,
+               MathAsLaTeX
        };
 
        enum TableCell {
@@ -57,46 +78,104 @@ public:
        /** The file that we export depends occasionally on what is to
            compile the file.
        */
-       FLAVOR flavor;
-       
+       Flavor flavor = Flavor::LaTeX;
+       /// is it some flavor of LaTeX?
+       bool isLaTeX() const;
+       /// does this flavour support full unicode?
+       bool isFullUnicode() const;
+       /// Do we use the bidi package (which does some reordering and stuff)?
+       bool useBidiPackage() const;
+
+       /// Same, but for math output, which only matter is XHTML output.
+       MathFlavor math_flavor = NotApplicable;
+
        /** Are we to write a 'nice' LaTeX file or not.
-           This esentially seems to mean whether InsetInclude, InsetGraphics
+           This essentially seems to mean whether InsetInclude, InsetGraphics
            and InsetExternal should add the absolute path to any external
            files or not.
+           Non-nice LaTeX also includes additional safe line breaks in order to
+           increase the precision of forward/reverse search and error reporting.
+       */
+       bool nice = false;
+
+       /** Is this a real child (i.e., compiled as a child)?
+           This depends on wherefrom we export the buffer. Even children
+           that have a master can be compiled standalone.
        */
-       bool nice;
+       mutable bool is_child = false;
 
        /** moving_arg == true means that the environment in which the inset
            is typeset is a moving argument. The inset should take care about
            fragile commands by preceding the latex with \\protect.
        */
-       bool moving_arg;
+       bool moving_arg = false;
 
        /** intitle == true means that the environment in which the
            inset is typeset is part of a title (before a \\maketitle).
            Footnotes in such environments have moving arguments.
        */
-       bool intitle;
+       bool intitle = false;
+
+       /** need_maketitle == true means that the last layout was a title layout
+        * this is to track when \maketitle needs to be output.
+       */
+       mutable bool need_maketitle = false;
 
-       /** inulemcmd == true means that the environment in which the
-           inset is typeset is part of a ulem command (\uline, \uuline,
-           \uwave, or \sout). Insets that output latex commands relying
-           on local assignments (such as \cite) should enclose such
+       /** have_maketitle == true means that \maketitle already has been output.
+       */
+       mutable bool have_maketitle = false;
+
+       /** inbranch == true means that the environment being typeset
+           is inside an active branch inset.
+       */
+       bool inbranch = false;
+
+       /** inulemcmd > 0 means that the environment in which the
+           inset is typeset is part of a ulem or soul command (e.g., \uline,
+           \uuline, \uwave, \sout or \xout). Insets that output latex commands
+           relying on local assignments (such as \cite) should enclose such
            commands in \mbox{} in order to avoid breakage.
        */
-       mutable bool inulemcmd;
+       mutable int inulemcmd = 0;
 
        /** the font at the point where the inset is
-        */
-       Font const * local_font;
+        *
+        * Note from lasgouttes: I have doubts on the semantics of this
+        * variable. Until this is sorted out, here are some notes on the
+        * history of local_font.
+        *
+        * A research that excludes test and assignment [*] shows that
+        * this is only used to remember language, which is a different
+        * story (and not changed by this patch). The only exception being
+        * in InsetMathHull::getCtObject and InsetMathNest::latex to
+        * support change tracking in insets, but I am not 100% sure that
+        * this is required. And historically [**] local_font used to be
+        * local_lang; it may be good to return to this simpler variable
+        * later.
+        *
+        *  [*] git grep local_font src|grep -v 'local_font [!=]*='
+        *
+        * [**] before afed118a, which improved support for InsetLine;
+        * however, since 0e7ab29f, InsetLine does not depend on the
+        * current font anymore.
+       */
+       Font const * local_font = nullptr;
 
-       /** Document language babel name
+       /** Document language lyx name
         */
-       mutable std::string document_language;
+       std::string document_language;
+
+       /// main font encoding of the document
+       std::string main_fontenc;
 
        /** The master language. Non-null only for child documents.
+           Note that this is not the language of the top level master, but
+           of the direct parent for nested includes.
         */
-       mutable Language const * master_language;
+       mutable Language const * master_language = nullptr;
+
+       /// Active characters
+       std::string active_chars;
 
        /** Current stream encoding. Only used for LaTeX.
            This must be set to the document encoding (via the constructor)
@@ -120,42 +199,85 @@ public:
        /** free_spacing == true means that the inset is in a free-spacing
            paragraph.
        */
-       bool free_spacing;
+       bool free_spacing = false;
 
        /** This var is set by the return value from BufferParams::writeLaTeX
        */
-       bool use_babel;
+       bool use_babel = false;
+
+       /** Do we use polyglossia (instead of babel)?
+       */
+       bool use_polyglossia = false;
+
+       /** Do we use hyperref?
+       */
+       bool use_hyperref = false;
+
+       /// Do we use the CJK package?
+       bool use_CJK = false;
 
        /** Are we generating multiple indices?
        */
-       bool use_indices;
+       bool use_indices = false;
 
        /** Are we using japanese (pLaTeX)?
        */
-       bool use_japanese;
+       bool use_japanese = false;
 
        /** Customized bibtex_command
        */
-       mutable std::string bibtex_command;
+       std::string bibtex_command;
 
        /** Customized index_command
        */
-       mutable std::string index_command;
+       std::string index_command;
+
+       /** Hyperref driver
+       */
+       std::string hyperref_driver;
 
        /** Line length to use with plaintext or LaTeX export.
        */
-       size_type linelen;
+       size_type linelen = 0;
 
        /** The depth of the current paragraph, set for plaintext
         *  export and used by InsetTabular
         */
-       int depth;
+       int depth = 0;
 
-       /** Export data filled in by the latex(), docbook() etc methods.
+       /** Export data filled in by the latex(), docbook(), etc. methods.
            This is a hack: Make it possible to add stuff to constant
            OutputParams instances.
        */
-       boost::shared_ptr<ExportData> exportdata;
+       std::shared_ptr<ExportData> exportdata;
+
+       /** Store labels, index entries, etc. (in \ref post_macro)
+        *  and output them later. This is used in particular to get
+        *  labels and index entries (and potentially other fragile commands)
+        *  outside of moving arguments (bug 2154)
+        */
+       bool postpone_fragile_stuff = false;
+
+       /** Stuff to be postponed and output after the current macro
+        *  (if \ref postpone_fragile_stuff is true). Used for labels and index
+        *  entries in commands with moving arguments (\\section, \\caption etc.)
+        */
+       mutable docstring post_macro;
+
+       /** Whether we in a command that is not \\long (i.e. cannot have multiple
+        *  paragraphs)
+        */
+       mutable bool isNonLong = false;
+
+       /** Whether we are entering a display math inset.
+        *  Needed to correctly strike out deleted math in change tracking.
+        */
+       mutable bool inDisplayMath = false;
+
+       /** Whether we are leaving a display math inset.
+        *  Needed to correctly track nested ulem commands in change tracking.
+        */
+       mutable bool wasDisplayMath = false;
 
        /** Whether we are inside a comment inset. Insets that are including
         *  external files like InsetGraphics, InsetInclude and InsetExternal
@@ -163,70 +285,174 @@ public:
         *  something with the included files (e.g. copying, converting)
         *  if this flag is true, since they may not exist.
         */
-       bool inComment;
+       bool inComment = false;
+
+       /** Whether we are inside an include inset. 
+        */
+       bool inInclude = false;
+
+       /** Whether a btUnit (for multiple biblographies) is open.
+        */
+       mutable bool openbtUnit = false;
+
+       /** Process only the children's aux files with BibTeX.
+        *  This is necessary with chapterbib.
+        */
+       bool only_childbibs = false;
 
        /** Whether we are in a table cell.
         *  For newline, it matters whether its content is aligned or not.
-         */
-       TableCell inTableCell;
+       */
+       TableCell inTableCell = NO;
 
        /** Whether we are inside a float or subfloat.
         *  Needed for subfloat detection on the command line.
         */
-       Float inFloat;
+       Float inFloat = NONFLOAT;
 
        /** Whether we are inside an index inset.
         *  ERT needs to know this, due to the active chars.
         */
-       bool inIndexEntry;
+       bool inIndexEntry = false;
+
+       /** Whether we are inside an IPA inset.
+        *  Needed for proper IPA output.
+        */
+       bool inIPA = false;
 
        /** Whether we are inside an inset that is logically deleted.
         *  A value > 0 indicates a deleted inset.
-         */
-       int inDeletedInset;
+       */
+       int inDeletedInset = 0;
 
        /** The change information of the outermost logically deleted inset.
         *  changeOfDeletedInset shall only be evaluated if inDeletedInset > 0.
-         */ 
-       Change changeOfDeletedInset;
+       */
+       Change changeOfDeletedInset {Change::UNCHANGED};
+
+       /** What kind of change tracking object is this?
+        * Relevant for strikeout method in output
+        */
+       mutable CtObject ctObject = CtObject::Normal;
 
        /** allow output of only part of the top-level paragraphs
         *  par_begin: beginning paragraph
         */
-       pit_type par_begin;
+       mutable pit_type par_begin = 0;
 
        /** allow output of only part of the top-level paragraphs
         *  par_end: par_end-1 is the ending paragraph
         *  if par_begin=par_end, output all paragraphs
         */
-       pit_type par_end;
+       mutable pit_type par_end = 0;
+
+       /// Id of the last paragraph before an inset
+       mutable int lastid = -1;
+
+       /// Last position in the last paragraph before an inset
+       mutable pos_type lastpos = 0;
 
        /// is this the last paragraph in the current buffer/inset?
-       bool isLastPar;
-       
+       bool isLastPar = false;
+
 
-       /** whether or not do actual file copying and image conversion
+       /** whether or not to do actual file copying and image conversion
         *  This mode will be used to preview the source code
         */
-       bool dryrun;
-       
+       bool dryrun = false;
+
+       /// whether to display output errors or not
+       bool silent = false;
+
        /// Should we output verbatim or escape LaTeX's special chars?
-       bool verbatim;
-       
+       bool pass_thru = false;
+
+       /// Should we output verbatim specific chars?
+       docstring pass_thru_chars;
+
+       /// A specific newline macro
+       std::string newlinecmd;
+
        /// Should we output captions?
-       bool html_disable_captions;
-       
+       bool html_disable_captions = false;
+
        /// Are we already in a paragraph?
-       bool html_in_par;
-       
+       bool html_in_par = false;
+
        /// Does the present context even permit paragraphs?
-       bool html_make_pars;
-       
+       bool html_make_pars = true;
+
+       /// Are we already in a paragraph?
+       bool docbook_in_par = false;
+
+       /// Is this element's allowMultiPar useable or not?
+       bool docbook_consider_allow_multi_par = true;
+
+       /// Does the present context even permit paragraphs?
+       bool docbook_make_pars = true;
+
+       /// Are paragraphs mandatory in this context?
+       bool docbook_force_pars = false;
+
+       /// Anchors that should not be output (LyX-side identifier, not DocBook-side).
+       std::set<docstring> docbook_anchors_to_ignore;
+
+       /// Is the current context a float (such as a table or a figure)?
+       bool docbook_in_float = false;
+
+       /// Is the current context a listing?
+       bool docbook_in_listing = false;
+
+       /// Is the current context a table?
+       bool docbook_in_table = false;
+
+       /// Should the layouts that should/must go into <info> be generated?
+       bool docbook_generate_info = true;
+
+       /// Should wrappers be ignored? Mostly useful to avoid generation of <abstract>.
+       bool docbook_ignore_wrapper = false;
+
+       /// Some parameters are output before the rest of the paragraph, they should not be generated a second time.
+       std::set<InsetArgument const *> docbook_prepended_arguments = {};
+
+       /// Some parameters are output after the rest of the paragraph, they should not be generated a second time.
+       std::set<InsetArgument const *> docbook_appended_arguments = {};
+
        /// Are we generating this material for inclusion in a TOC-like entity?
-       bool for_toc;
-       
+       bool for_toc = false;
+
+       /// Are we generating this material for inclusion in a tooltip?
+       bool for_tooltip = false;
+
+       /// Are we generating this material for use by advanced search?
+       enum Search {
+               NoSearch = 0,
+               SearchWithDeleted = 1,
+               SearchWithoutDeleted = 2,
+               SearchQuick = 4,
+               SearchNonOutput = 8
+       };
+               
+       inline bool find_effective(void) const { return (for_search != OutputParams::NoSearch); }
+       inline bool find_with_non_output() const { return ((for_search & OutputParams::SearchNonOutput) != 0); }
+       inline bool find_with_deleted() const { return ((for_search & OutputParams::SearchWithDeleted) != 0); }
+       inline void find_set_feature(enum Search set_) { for_search = set_; }
+       inline void find_add_feature(enum Search add_) { for_search |= add_; }
+       inline void find_clean_features(void) { for_search = OutputParams::NoSearch; }
+
+       /// Are we generating this material for instant preview?
+       bool for_preview = false;
+
        /// Include all children notwithstanding the use of \includeonly
-       bool includeall;
+       bool includeall = false;
+
+       /// Explicit output folder, if any is desired
+       std::string export_folder;
+
+       /// A postponed \\noindent (after VSpace)
+       mutable bool need_noindent = false;
+private:
+       int for_search = NoSearch;
 };