4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
7 * \author Jean-Marc Lasgouttes
9 * Full author contact details are available in file CREDITS.
24 * Small helper struct that holds font properties.
25 * The names are in LyX language, not LaTeX.
26 * We don't use Font, because it pulls in a lot of dependencies and has
27 * more strings than needed (e.g. font family error1 etc.).
28 * If more font related stuff is needed, it might be good to change to
53 bool operator==(TeXFont const &, TeXFont const &);
56 inline bool operator!=(TeXFont const & f1, TeXFont const & f2)
58 return !operator==(f1, f2);
62 /// Output changed font parameters if \p oldfont and \p newfont differ
63 void output_font_change(std::ostream & os, TeXFont const & oldfont,
64 TeXFont const & newfont);
70 * Every bit of text has a corresponding context.
71 * Usage: Parsing begins with a global context. A new context is opened for
72 * every new LaTeX group, e.g. at the beginning of a new environment.
73 * The old context is used again after the group is closed.
75 * Since not all paragraph parameters in LyX have the same scoping as their
76 * LaTeX counterpart we may have to transfer context properties (e. g. the
77 * font) from and to the parent context.
81 Context(bool need_layout_,
82 TeX2LyXDocClass const & textclass_,
83 Layout const * layout_ = 0,
84 Layout const * parent_layout_= 0,
85 TeXFont const & font_ = normalfont);
88 /// Output a \\begin_layout if requested
89 void check_layout(std::ostream & os);
91 /// Output a \\end_layout if needed
92 void check_end_layout(std::ostream & os);
94 /// Output a \\begin_deeper if needed
95 void check_deeper(std::ostream & os);
97 /// Output a \\end_deeper if needed
98 void check_end_deeper(std::ostream & os);
100 /// dump content on stream (for debugging purpose), with
101 /// description \c desc.
102 void dump(std::ostream &, std::string const & desc = "context") const;
104 /// Are we just beginning a new paragraph?
105 bool atParagraphStart() const { return need_layout; }
107 /// Begin an item in a list environment
110 /// Start a new paragraph
111 void new_paragraph(std::ostream & os);
113 /// Add extra stuff if not already there
114 void add_extra_stuff(std::string const &);
117 * Add paragraph-level extra stuff if not already there. This
118 * will be reset at the next check_layout()
120 void add_par_extra_stuff(std::string const &);
122 /// Do we need to output some \\begin_layout command before the
125 /// Do we need to output some \\end_layout command
126 bool need_end_layout;
127 /// We may need to add something after each \\begin_layout command
128 std::string extra_stuff;
129 /// We may need to add something after this \\begin_layout command
130 std::string par_extra_stuff;
131 /// We may need to add something at the beginning of a list.
132 std::string list_extra_stuff;
133 /// Stuff between list begin and first item
134 std::string list_preamble;
135 /// A LaTeXParam to be ignored in parsing.
136 std::string latexparam;
137 /// If there has been an \\begin_deeper, we'll need a matching
139 bool need_end_deeper;
140 /// If we are in an itemize-like environment, we need an \item
141 /// for each paragraph, otherwise this has to be a deeper
144 /// If we are in an itemize-like environment, this marks
145 /// the text before the first \item. Typically, list
146 /// parameters (such as lengths) are adjusted here.
147 bool in_list_preamble;
148 /// Store commands that should not be converted
149 /// (stored without \\)
150 std::set<std::string> pass_thru_cmds;
151 /// we are handling a standard paragraph in an itemize-like
153 bool deeper_paragraph;
155 * Inside of unknown environments we may not allow font and layout
157 * Otherwise things like
158 * \\large\\begin{foo}\\huge bar\\end{foo}
161 bool new_layout_allowed;
162 /// May -- be converted to endash and --- to emdash?
163 bool merging_hyphens_allowed;
164 /// Did we output anything yet in any context?
167 /// The textclass of the document. Could actually be a global variable
168 TeX2LyXDocClass const & textclass;
169 /// The layout of the current paragraph
170 Layout const * layout;
171 /// The layout of the outer paragraph (for environment layouts)
172 Layout const * parent_layout;
173 /// font attributes of this context
175 /// font attributes of normal text
176 static TeXFont normalfont;
177 /// Table rotation angle
185 void begin_layout(std::ostream & os, Layout const * const & l);