mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-15 23:49:37 +00:00
875f7d42e2
As this required to first generate the paragraph before outputting it if necessary, tests like XMLStream::isTagOpen no more worked properly. This also refactors table handling to get rid of that case (and make code easier to read).
398 lines
9.7 KiB
C++
398 lines
9.7 KiB
C++
// -*- C++ -*-
|
|
/**
|
|
* \file OutputParams.h
|
|
* This file is part of LyX, the document processor.
|
|
* Licence details can be found in the file COPYING.
|
|
*
|
|
* \author Angus Leeming
|
|
*
|
|
* Full author contact details are available in file CREDITS.
|
|
*/
|
|
|
|
#ifndef OUTPUTPARAMS_H
|
|
#define OUTPUTPARAMS_H
|
|
|
|
|
|
#include "Changes.h"
|
|
|
|
#include <memory>
|
|
#include <set>
|
|
|
|
|
|
namespace lyx {
|
|
|
|
|
|
class Encoding;
|
|
class ExportData;
|
|
class Font;
|
|
class Language;
|
|
|
|
class OutputParams {
|
|
public:
|
|
enum FLAVOR {
|
|
DVILUATEX,
|
|
LATEX,
|
|
LUATEX,
|
|
PDFLATEX,
|
|
XETEX,
|
|
DOCBOOK5,
|
|
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 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 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;
|
|
|
|
/** 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.
|
|
*/
|
|
bool moving_arg;
|
|
|
|
/** 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;
|
|
|
|
/** 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;
|
|
|
|
/** have_maketitle == true means that \maketitle already hase been output.
|
|
*/
|
|
mutable bool have_maketitle;
|
|
|
|
/** 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 lyx name
|
|
*/
|
|
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 (\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);
|
|
runparams.inComment = true;
|
|
...
|
|
InsetBla::latex(..., runparams);
|
|
...
|
|
runparams_in.encoding = runparams.encoding;
|
|
}
|
|
\endcode
|
|
*/
|
|
mutable Encoding const * encoding;
|
|
|
|
/** free_spacing == true means that the inset is in a free-spacing
|
|
paragraph.
|
|
*/
|
|
bool free_spacing;
|
|
|
|
/** This var is set by the return value from BufferParams::writeLaTeX
|
|
*/
|
|
bool use_babel;
|
|
|
|
/** Do we use polyglossia (instead of babel)?
|
|
*/
|
|
bool use_polyglossia;
|
|
|
|
/** Do we use hyperref?
|
|
*/
|
|
bool use_hyperref;
|
|
|
|
/// 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;
|
|
|
|
/** Hyperref driver
|
|
*/
|
|
std::string hyperref_driver;
|
|
|
|
/** Line length to use with plaintext or LaTeX export.
|
|
*/
|
|
size_type linelen;
|
|
|
|
/** The depth of the current paragraph, set for plaintext
|
|
* export and used by InsetTabular
|
|
*/
|
|
int depth;
|
|
|
|
/** Export data filled in by the latex(), docbook(), etc. methods.
|
|
This is a hack: Make it possible to add stuff to constant
|
|
OutputParams instances.
|
|
*/
|
|
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;
|
|
|
|
/** 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
|
|
* may only write the usual output and must not attempt to do
|
|
* something with the included files (e.g. copying, converting)
|
|
* if this flag is true, since they may not exist.
|
|
*/
|
|
bool inComment;
|
|
|
|
/** 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
|
|
*/
|
|
mutable pit_type par_begin;
|
|
|
|
/** 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
|
|
*/
|
|
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 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 already in a paragraph?
|
|
bool docbook_in_par;
|
|
|
|
/// Does the present context even permit paragraphs?
|
|
bool docbook_make_pars;
|
|
|
|
/// Are paragraphs mandatory in this context?
|
|
bool docbook_force_pars;
|
|
|
|
/// 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;
|
|
|
|
/// Is the current context a listing?
|
|
bool docbook_in_listing;
|
|
|
|
/// Is the current context a table?
|
|
bool docbook_in_table;
|
|
|
|
/// 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;
|
|
};
|
|
|
|
|
|
} // namespace lyx
|
|
|
|
#endif // NOT OUTPUTPARAMS_H
|