X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FOutputParams.h;h=5503d8b7cd191b1f2c944abd14b69fa18ce320b0;hb=38c2cde0d8695ac5287bae218c4a33a2acf18ef8;hp=8ef73f58eeb0ccd46d250431847e90dbb8b4ca91;hpb=fc6ce7cd08562fd7bab4427880b46390bb7d2f07;p=lyx.git diff --git a/src/OutputParams.h b/src/OutputParams.h index 8ef73f58ee..5503d8b7cd 100644 --- a/src/OutputParams.h +++ b/src/OutputParams.h @@ -12,10 +12,10 @@ #ifndef OUTPUTPARAMS_H #define OUTPUTPARAMS_H -#include -#include "support/types.h" -#include +#include "Changes.h" + +#include namespace lyx { @@ -24,31 +24,82 @@ namespace lyx { class Encoding; class ExportData; class Font; - +class Language; class OutputParams { public: enum FLAVOR { + DVILUATEX, LATEX, + LUATEX, PDFLATEX, - XML + XETEX, + XML, + HTML, + TEXT, + LYX + }; + + enum MathFlavor { + NotApplicable, + MathAsMathML, + MathAsHTML, + MathAsImages, + MathAsLaTeX + }; + + enum TableCell { + NO, + PLAIN, + ALIGNED + }; + + enum Float { + NONFLOAT, + MAINFLOAT, + SUBFLOAT + }; + + enum CtObject { + CT_NORMAL, + CT_OBJECT, + CT_DISPLAYOBJECT, + CT_UDISPLAYOBJECT, + CT_OMITOBJECT }; OutputParams(Encoding const *); ~OutputParams(); - /** The latex that we export depends occasionally on what is to + /** The file that we export depends occasionally on what is to compile the file. */ FLAVOR flavor; + /// 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; /** Are we to write a 'nice' LaTeX file or not. This esentially 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; + /** 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. + */ + mutable bool is_child; + /** 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. @@ -61,23 +112,48 @@ public: */ bool intitle; + /** inbranch == true means that the environment being typeset + is inside an active branch inset. + */ + bool inbranch; + + /** 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 int inulemcmd; + /** the font at the point where the inset is */ Font const * local_font; /** Document language babel 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; + + /// Active characters + std::string active_chars; /** Current stream encoding. Only used for LaTeX. This must be set to the document encoding (via the constructor) before output starts. Afterwards it must be kept up to date for - each single character (\see Paragraph::simpleTeXOnePar). + each single character (\sa Paragraph::latex). This does also mean that you need to set it back if you use a copy (e.g. in insets): \code int InsetFoo::latex(..., OutputParams const & runparams_in) const { - OutputParams runparams(runparams_in); + OutputParams runparams(runparams_in); runparams.inComment = true; ... InsetBla::latex(..., runparams); @@ -97,7 +173,37 @@ public: */ bool use_babel; - /** Line length to use with plaintext export. + /** Do we use polyglossia (instead of babel)? + */ + bool use_polyglossia; + + /// Do we use the CJK package? + bool use_CJK; + + /** Are we generating multiple indices? + */ + bool use_indices; + + /** Are we using japanese (pLaTeX)? + */ + bool use_japanese; + + /** Customized bibtex_command + */ + std::string bibtex_command; + + /** Customized index_command + */ + std::string index_command; + + /// The Xindy language module + std::string xindy_language; + + /** Hyperref driver + */ + std::string hyperref_driver; + + /** Line length to use with plaintext or LaTeX export. */ size_type linelen; @@ -110,7 +216,30 @@ public: 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; + + /** 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 are entering a display math inset. + * Needed to correctly strike out deleted math in change tracking. + */ + mutable bool inDisplayMath; + + /** Whether we are leaving a display math inset. + * Needed to correctly track nested ulem commands in change tracking. + */ + mutable bool wasDisplayMath; /** Whether we are inside a comment inset. Insets that are including * external files like InsetGraphics, InsetInclude and InsetExternal @@ -120,21 +249,114 @@ public: */ bool inComment; - /** allow output of only part of the top-level paragraphs + /** Whether a btUnit (for multiple biblographies) is open. + */ + mutable bool openbtUnit; + + /** Process only the children's aux files with BibTeX. + * This is necessary with chapterbib. + */ + bool only_childbibs; + + /** Whether we are in a table cell. + * For newline, it matters whether its content is aligned or not. + */ + TableCell inTableCell; + + /** Whether we are inside a float or subfloat. + * Needed for subfloat detection on the command line. + */ + Float inFloat; + + /** Whether we are inside an index inset. + * ERT needs to know this, due to the active chars. + */ + bool inIndexEntry; + + /** Whether we are inside an IPA inset. + * Needed for proper IPA output. + */ + bool inIPA; + + /** Whether we are inside an inset that is logically deleted. + * A value > 0 indicates a deleted inset. + */ + int inDeletedInset; + + /** The change information of the outermost logically deleted inset. + * changeOfDeletedInset shall only be evaluated if inDeletedInset > 0. + */ + Change changeOfDeletedInset; + + /** What kind of change tracking object is this? + * Relevant for strikeout method in output + */ + mutable CtObject ctObject; + + /** allow output of only part of the top-level paragraphs * par_begin: beginning paragraph */ - pit_type par_begin; + mutable pit_type par_begin; - /** allow output of only part of the top-level paragraphs + /** 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; + + /// Id of the last paragraph before an inset + mutable int lastid; + + /// Last position in the last paragraph before an inset + mutable pos_type lastpos; + + /// is this the last paragraph in the current buffer/inset? + bool isLastPar; - /** 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; + + /// whether to display output errors or not + bool silent; + + /// Should we output verbatim or escape LaTeX's special chars? + bool pass_thru; + + /// 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; + + /// Are we already in a paragraph? + bool html_in_par; + + /// Does the present context even permit paragraphs? + bool html_make_pars; + + /// Are we generating this material for inclusion in a TOC-like entity? + bool for_toc; + + /// Are we generating this material for inclusion in a tooltip? + bool for_tooltip; + + /// Are we generating this material for use by advanced search? + bool for_search; + + /// Are we generating this material for instant preview? + bool for_preview; + + /// Include all children notwithstanding the use of \includeonly + bool includeall; + + /// Explicit output folder, if any is desired + std::string export_folder; };