X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FOutputParams.h;h=65b4fc266f83975822775666a0cccf6d14ee4f00;hb=e11c7cb71da01989da9370c10e30af0c6a21a1f4;hp=a3d4fbed983a6032c059635949b62e4a683e3919;hpb=a0043da05f5d32653917d8c551ee50138e639b00;p=lyx.git diff --git a/src/OutputParams.h b/src/OutputParams.h index a3d4fbed98..65b4fc266f 100644 --- a/src/OutputParams.h +++ b/src/OutputParams.h @@ -12,12 +12,12 @@ #ifndef OUTPUTPARAMS_H #define OUTPUTPARAMS_H -#include -#include "support/types.h" -#include #include "Changes.h" +#include +#include + namespace lyx { @@ -26,19 +26,34 @@ 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, @@ -63,49 +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; - + 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; - /** 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 + /** 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; + + /** 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) @@ -129,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; + std::shared_ptr 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 @@ -172,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 = false; + + /// Does the present context even permit paragraphs? + bool html_make_pars = true; + /// Are we already in a paragraph? - bool html_in_par; - + 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 html_make_pars; - + 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 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 be generated? + bool docbook_generate_info = true; + + /// Should wrappers be ignored? Mostly useful to avoid generation of . + 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 docbook_prepended_arguments = {}; + + /// Some parameters are output after the rest of the paragraph, they should not be generated a second time. + std::set 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; };