From 670efa8f646218f2a378f0cc614c4c37a9f6b89a Mon Sep 17 00:00:00 2001 From: Guillaume Munch Date: Sun, 19 Jun 2016 03:39:38 +0100 Subject: [PATCH] Rationalise includes Modifying TexRow.h or texstream.h no longer triggers the recompilation of the complete source tree. --- src/Buffer.cpp | 23 +++++++++---------- src/Buffer.h | 6 ++--- src/BufferParams.cpp | 1 + src/Changes.cpp | 1 + src/Changes.h | 4 ++-- src/Compare.cpp | 1 + src/Converter.h | 1 - src/Cursor.cpp | 4 ++-- src/Font.cpp | 1 + src/Format.cpp | 1 + src/LaTeXFonts.cpp | 1 + src/PDFOptions.cpp | 1 + src/Paragraph.cpp | 4 ++-- src/TexRow.cpp | 20 ++++++++--------- src/TexRow.h | 33 ++++++++++++++-------------- src/frontends/qt4/FindAndReplace.cpp | 1 + src/frontends/qt4/GuiViewSource.cpp | 1 + src/frontends/qt4/GuiViewSource.h | 8 ++++++- src/graphics/PreviewLoader.cpp | 4 ++-- src/graphics/epstools.cpp | 1 + src/insets/ExternalSupport.cpp | 1 + src/insets/ExternalSupport.h | 4 +++- src/insets/InsetArgument.cpp | 6 +++-- src/insets/InsetBibtex.cpp | 1 + src/insets/InsetBox.cpp | 2 ++ src/insets/InsetCaption.cpp | 2 ++ src/insets/InsetCitation.cpp | 1 + src/insets/InsetCommand.cpp | 1 + src/insets/InsetExternal.cpp | 10 ++++----- src/insets/InsetFloat.cpp | 10 ++++----- src/insets/InsetFloatList.cpp | 1 + src/insets/InsetGraphics.cpp | 1 + src/insets/InsetHyperlink.cpp | 1 + src/insets/InsetIPA.cpp | 6 ++--- src/insets/InsetIPAMacro.cpp | 1 + src/insets/InsetInclude.cpp | 4 ++-- src/insets/InsetIndex.cpp | 4 ++-- src/insets/InsetLine.cpp | 1 + src/insets/InsetListings.cpp | 4 ++-- src/insets/InsetNewline.cpp | 1 + src/insets/InsetNewpage.cpp | 1 + src/insets/InsetNomencl.cpp | 1 + src/insets/InsetPhantom.cpp | 1 + src/insets/InsetPreview.cpp | 4 ++-- src/insets/InsetQuotes.cpp | 1 + src/insets/InsetRef.cpp | 1 + src/insets/InsetSeparator.cpp | 1 + src/insets/InsetSpace.cpp | 1 + src/insets/InsetSpecialChar.cpp | 1 + src/insets/InsetTabular.cpp | 5 +++-- src/insets/InsetText.cpp | 1 + src/insets/InsetVSpace.cpp | 1 + src/insets/InsetWrap.cpp | 1 + src/lyxfind.cpp | 9 +++----- src/mathed/InsetMath.cpp | 9 +++----- src/mathed/InsetMath.h | 5 +++-- src/mathed/InsetMathGrid.cpp | 9 ++++---- src/mathed/InsetMathHull.cpp | 24 ++++++++------------ src/mathed/InsetMathNest.cpp | 8 +++---- src/mathed/MacroTable.cpp | 3 +-- src/mathed/MathFactory.cpp | 4 ++-- src/mathed/MathMacroTemplate.cpp | 3 +-- src/mathed/MathStream.cpp | 13 ++++++----- src/mathed/MathStream.h | 7 ++++-- src/mathed/MathSupport.cpp | 9 +++----- src/output_latex.cpp | 1 + src/tex2lyx/dummy_impl.cpp | 13 ----------- src/texstream.cpp | 25 ++++++++++++++++++--- src/texstream.h | 26 +++++++++++++++------- 69 files changed, 210 insertions(+), 157 deletions(-) diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 08f31484fe..a64e4b68ea 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -57,6 +57,7 @@ #include "PDFOptions.h" #include "SpellChecker.h" #include "sgml.h" +#include "texstream.h" #include "TexRow.h" #include "Text.h" #include "TextClass.h" @@ -1684,7 +1685,7 @@ bool Buffer::makeLaTeXFile(FileName const & fname, ErrorList & errorList = d->errorLists["Export"]; errorList.clear(); bool failed_export = false; - otexstream os(ofs, d->texrow); + otexstream os(ofs); // make sure we are ready to export // this needs to be done before we validate @@ -1694,7 +1695,6 @@ bool Buffer::makeLaTeXFile(FileName const & fname, updateMacroInstances(OutputUpdate); try { - os.texrow().reset(); writeLaTeXSource(os, original_path, runparams, output); } catch (EncodingException const & e) { @@ -1725,6 +1725,8 @@ bool Buffer::makeLaTeXFile(FileName const & fname, lyx_exit(1); } + d->texrow = move(os.texrow()); + ofs.close(); if (ofs.fail()) { failed_export = true; @@ -3715,14 +3717,13 @@ unique_ptr Buffer::getSourceCode(odocstream & os, string const & format, LaTeXFeatures features(*this, params(), runparams); params().validate(features); runparams.use_polyglossia = features.usePolyglossia(); - texrow = make_unique(); - texrow->newline(); - texrow->newline(); // latex or literate - otexstream ots(os, *texrow); - + otexstream ots(os); + // output above + ots.texrow().newlines(2); // the real stuff latexParagraphs(*this, text(), ots, runparams); + texrow = ots.releaseTexRow(); texrow->finalize(); // Restore the parenthood @@ -3758,13 +3759,13 @@ unique_ptr Buffer::getSourceCode(odocstream & os, string const & format, writeDocBookSource(os, absFileName(), runparams, output); } else { // latex or literate - texrow = make_unique(); - texrow->newline(); - texrow->newline(); - otexstream ots(os, *texrow); + otexstream ots(os); + // output above + ots.texrow().newlines(2); if (master) runparams.is_child = true; writeLaTeXSource(ots, string(), runparams, output); + texrow = ots.releaseTexRow(); texrow->finalize(); } } diff --git a/src/Buffer.h b/src/Buffer.h index 7acf1f3042..477a8ac8ad 100644 --- a/src/Buffer.h +++ b/src/Buffer.h @@ -13,7 +13,6 @@ #define BUFFER_H #include "OutputEnums.h" -#include "OutputParams.h" #include "support/unique_ptr.h" #include "support/strfwd.h" @@ -51,6 +50,7 @@ class MacroData; class MacroNameSet; class MacroSet; class OutputParams; +class otexstream; class Paragraph; class ParConstIterator; class ParIterator; @@ -325,13 +325,13 @@ public: method with a string stream if the output is supposed to go to a file. \code ofdocstream ofs; - otexstream os(ofs, texrow); + otexstream os(ofs); ofs.open("test.tex"); writeLaTeXSource(os, ...); ofs.close(); \endcode is NOT equivalent to \code odocstringstream oss; - otexstream os(oss, texrow); + otexstream os(oss); writeLaTeXSource(os, ...); ofdocstream ofs; ofs.open("test.tex"); diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index d2218e073d..7af439705a 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -38,6 +38,7 @@ #include "LyXRC.h" #include "OutputParams.h" #include "Spacing.h" +#include "texstream.h" #include "TexRow.h" #include "VSpace.h" #include "PDFOptions.h" diff --git a/src/Changes.cpp b/src/Changes.cpp index 1626f50f39..0d464d8fa2 100644 --- a/src/Changes.cpp +++ b/src/Changes.cpp @@ -22,6 +22,7 @@ #include "MetricsInfo.h" #include "OutputParams.h" #include "Paragraph.h" +#include "texstream.h" #include "TocBackend.h" #include "support/debug.h" diff --git a/src/Changes.h b/src/Changes.h index 96383967b9..ea6e4b3931 100644 --- a/src/Changes.h +++ b/src/Changes.h @@ -21,8 +21,6 @@ #include "support/types.h" #include "support/lyxtime.h" -#include "texstream.h" - #include @@ -32,9 +30,11 @@ class AuthorList; class Buffer; class DocIterator; class OutputParams; +class otexstream; class PainterInfo; class FontInfo; + class Change { public: /// the type of change diff --git a/src/Compare.cpp b/src/Compare.cpp index 68570b85b5..b2f64390f0 100644 --- a/src/Compare.cpp +++ b/src/Compare.cpp @@ -19,6 +19,7 @@ #include "insets/InsetText.h" +#include "support/docstream.h" #include "support/lassert.h" #include "support/lyxalgo.h" #include "support/qstring_helpers.h" diff --git a/src/Converter.h b/src/Converter.h index 9a72d8c708..082b2d358a 100644 --- a/src/Converter.h +++ b/src/Converter.h @@ -29,7 +29,6 @@ class Buffer; class ErrorList; class Format; class Formats; -class OutputParams; /// diff --git a/src/Cursor.cpp b/src/Cursor.cpp index 2894f9d71f..8d5c63b55e 100644 --- a/src/Cursor.cpp +++ b/src/Cursor.cpp @@ -31,6 +31,7 @@ #include "Paragraph.h" #include "ParIterator.h" #include "Row.h" +#include "texstream.h" #include "Text.h" #include "TextMetrics.h" #include "TocBackend.h" @@ -1566,8 +1567,7 @@ void Cursor::normalize() << pos() << ' ' << lastpos() << " in idx: " << idx() << " in atom: '"; odocstringstream os; - TexRow texrow(false); - otexrowstream ots(os,texrow); + otexrowstream ots(os, false); WriteStream wi(ots, false, true, WriteStream::wsDefault); inset().asInsetMath()->write(wi); lyxerr << to_utf8(os.str()) << endl; diff --git a/src/Font.cpp b/src/Font.cpp index f0814a3a3e..0ca4080db3 100644 --- a/src/Font.cpp +++ b/src/Font.cpp @@ -25,6 +25,7 @@ #include "LyXRC.h" #include "output_latex.h" #include "OutputParams.h" +#include "texstream.h" #include "support/lassert.h" #include "support/convert.h" diff --git a/src/Format.cpp b/src/Format.cpp index eba00b95df..503bfc58ab 100644 --- a/src/Format.cpp +++ b/src/Format.cpp @@ -23,6 +23,7 @@ #include "support/gettext.h" #include "support/lstrings.h" #include "support/mutex.h" +#include "support/docstream.h" #include "support/os.h" #include "support/PathChanger.h" #include "support/Systemcall.h" diff --git a/src/LaTeXFonts.cpp b/src/LaTeXFonts.cpp index 676179f5a5..bc4151cb25 100644 --- a/src/LaTeXFonts.cpp +++ b/src/LaTeXFonts.cpp @@ -19,6 +19,7 @@ #include "support/convert.h" #include "support/debug.h" +#include "support/docstream.h" #include "support/FileName.h" #include "support/filetools.h" #include "support/gettext.h" diff --git a/src/PDFOptions.cpp b/src/PDFOptions.cpp index 6734beaafa..77763bef3a 100644 --- a/src/PDFOptions.cpp +++ b/src/PDFOptions.cpp @@ -15,6 +15,7 @@ #include "Encoding.h" #include "Lexer.h" +#include "texstream.h" #include "support/convert.h" #include "support/debug.h" diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index c29ca4cb93..507702f90d 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -40,6 +40,7 @@ #include "ParagraphParameters.h" #include "SpellChecker.h" #include "sgml.h" +#include "texstream.h" #include "TextClass.h" #include "TexRow.h" #include "Text.h" @@ -1377,13 +1378,12 @@ void Paragraph::Private::validate(LaTeXFeatures & features) const BufferParams const & bp = features.runparams().is_child ? buf.masterParams() : buf.params(); Font f; - TexRow texrow; // Using a string stream here circumvents the encoding // switching machinery of odocstream. Therefore the // output is wrong if this paragraph contains content // that needs to switch encoding. odocstringstream ods; - otexstream os(ods, texrow); + otexstream os(ods, false); if (is_command) { os << '\\' << from_ascii(layout_->latexname()); // we have to provide all the optional arguments here, even though diff --git a/src/TexRow.cpp b/src/TexRow.cpp index 21be0b8e30..4e23cf7641 100644 --- a/src/TexRow.cpp +++ b/src/TexRow.cpp @@ -53,7 +53,7 @@ void TexRow::RowEntryList::forceAddEntry(RowEntry const & entry) } -TexRow::TextEntry TexRow::RowEntryList::getTextEntry() const +TextEntry TexRow::RowEntryList::getTextEntry() const { if (text_entry_ < size()) return operator[](text_entry_).text; @@ -61,7 +61,7 @@ TexRow::TextEntry TexRow::RowEntryList::getTextEntry() const } -TexRow::RowEntry TexRow::RowEntryList::entry() const +RowEntry TexRow::RowEntryList::entry() const { if (0 < size()) return operator[](0); @@ -77,8 +77,8 @@ void TexRow::RowEntryList::append(RowEntryList const & row) } -TexRow::TextEntry const TexRow::text_none = { -1, 0 }; -TexRow::RowEntry const TexRow::row_none = { false, { TexRow::text_none } }; +TextEntry const TexRow::text_none = { -1, 0 }; +RowEntry const TexRow::row_none = { false, { TexRow::text_none } }; bool TexRow::isNone(TextEntry const & t) @@ -101,7 +101,7 @@ void TexRow::reset(bool enable) } -TexRow::RowEntry TexRow::textEntry(int id, int pos) +RowEntry TexRow::textEntry(int id, int pos) { RowEntry entry; entry.is_math = false; @@ -111,7 +111,7 @@ TexRow::RowEntry TexRow::textEntry(int id, int pos) } -TexRow::RowEntry TexRow::mathEntry(uid_type id, idx_type cell) +RowEntry TexRow::mathEntry(uid_type id, idx_type cell) { RowEntry entry; entry.is_math = true; @@ -121,8 +121,8 @@ TexRow::RowEntry TexRow::mathEntry(uid_type id, idx_type cell) } -bool operator==(TexRow::RowEntry const & entry1, - TexRow::RowEntry const & entry2) +bool operator==(RowEntry const & entry1, + RowEntry const & entry2) { return entry1.is_math == entry2.is_math && (entry1.is_math @@ -216,7 +216,7 @@ bool TexRow::getIdFromRow(int row, int & id, int & pos) const } -TexRow::RowEntry TexRow::rowEntryFromCursorSlice(CursorSlice const & slice) +RowEntry TexRow::rowEntryFromCursorSlice(CursorSlice const & slice) { RowEntry entry; InsetMath * insetMath = slice.asInsetMath(); @@ -408,7 +408,7 @@ std::pair TexRow::rowFromDocIterator(DocIterator const & dit) const // matches either at a deeper level, or at the same level but not // before. for (size_t i = best_slice; i < n; ++i) { - TexRow::RowEntry entry_i = rowEntryFromCursorSlice(dit[i]); + RowEntry entry_i = rowEntryFromCursorSlice(dit[i]); if (sameParOrInsetMath(*it, entry_i)) { if (comparePos(*it, entry_i) >= 0 && (i > best_slice diff --git a/src/TexRow.h b/src/TexRow.h index c072ec18ab..9e41b0ab06 100644 --- a/src/TexRow.h +++ b/src/TexRow.h @@ -46,26 +46,27 @@ typedef void const * uid_type; typedef size_t idx_type; +/// an individual par id/pos <=> row mapping +struct TextEntry { int id; int pos; }; + +/// an individual math id/cell <=> row mapping +struct MathEntry { uid_type id; idx_type cell; }; + +/// a container for passing entries around +struct RowEntry { + bool is_math;// true iff the union is a math + union { + struct TextEntry text; + struct MathEntry math; + }; +}; + + /// Represents the correspondence between paragraphs and the generated /// LaTeX file class TexRow { public: - /// an individual par id/pos <=> row mapping - struct TextEntry { int id; int pos; }; - - /// an individual math id/cell <=> row mapping - struct MathEntry { uid_type id; idx_type cell; }; - - /// a container for passing entries around - struct RowEntry { - bool is_math;// true iff the union is a math - union { - struct TextEntry text; - struct MathEntry math; - }; - }; - // For each row we store a list of one special TextEntry and several // RowEntries. (The order is important.) We only want one text entry // because we do not want to store every position in the lyx file. On the @@ -205,7 +206,7 @@ private: bool enabled_; }; -bool operator==(TexRow::RowEntry const &, TexRow::RowEntry const &); +bool operator==(RowEntry const &, RowEntry const &); LyXErr & operator<<(LyXErr &, TexRow &); diff --git a/src/frontends/qt4/FindAndReplace.cpp b/src/frontends/qt4/FindAndReplace.cpp index ac7084a55b..4411074de7 100644 --- a/src/frontends/qt4/FindAndReplace.cpp +++ b/src/frontends/qt4/FindAndReplace.cpp @@ -33,6 +33,7 @@ #include "frontends/alert.h" #include "support/debug.h" +#include "support/docstream.h" #include "support/filetools.h" #include "support/FileName.h" #include "support/gettext.h" diff --git a/src/frontends/qt4/GuiViewSource.cpp b/src/frontends/qt4/GuiViewSource.cpp index 46dd35884e..4be43e259e 100644 --- a/src/frontends/qt4/GuiViewSource.cpp +++ b/src/frontends/qt4/GuiViewSource.cpp @@ -22,6 +22,7 @@ #include "Cursor.h" #include "Format.h" #include "Paragraph.h" +#include "TexRow.h" #include "support/debug.h" #include "support/lassert.h" diff --git a/src/frontends/qt4/GuiViewSource.h b/src/frontends/qt4/GuiViewSource.h index 428da05011..dbe36c7ec7 100644 --- a/src/frontends/qt4/GuiViewSource.h +++ b/src/frontends/qt4/GuiViewSource.h @@ -18,20 +18,26 @@ #include "Buffer.h" #include "DockView.h" -#include "TexRow.h" #include #include #include + class QTextDocument; + namespace lyx { + +class TexRow; + + namespace frontend { class GuiViewSource; class LaTeXHighlighter; + class ViewSourceWidget : public QWidget, public Ui::ViewSourceUi { Q_OBJECT diff --git a/src/graphics/PreviewLoader.cpp b/src/graphics/PreviewLoader.cpp index bc174daa81..1f78d77c7f 100644 --- a/src/graphics/PreviewLoader.cpp +++ b/src/graphics/PreviewLoader.cpp @@ -25,6 +25,7 @@ #include "output.h" #include "OutputParams.h" #include "TexRow.h" +#include "texstream.h" #include "frontends/Application.h" // hexName @@ -625,8 +626,7 @@ void PreviewLoader::Impl::startLoading(bool wait) return; } - TexRow texrow; - otexstream os(of, texrow); + otexstream os(of); OutputParams runparams(&enc); LaTeXFeatures features(buffer_, buffer_.params(), runparams); diff --git a/src/graphics/epstools.cpp b/src/graphics/epstools.cpp index 17aedfcb0a..2fd67dcf8a 100644 --- a/src/graphics/epstools.cpp +++ b/src/graphics/epstools.cpp @@ -26,6 +26,7 @@ #include "Format.h" #include "support/debug.h" +#include "support/docstream.h" #include "support/filetools.h" #include "support/FileName.h" #include "support/regex.h" diff --git a/src/insets/ExternalSupport.cpp b/src/insets/ExternalSupport.cpp index 7ea6d566fd..f208a953d3 100644 --- a/src/insets/ExternalSupport.cpp +++ b/src/insets/ExternalSupport.cpp @@ -22,6 +22,7 @@ #include "Exporter.h" #include "Format.h" #include "Mover.h" +#include "texstream.h" #include "frontends/alert.h" diff --git a/src/insets/ExternalSupport.h b/src/insets/ExternalSupport.h index 1000735fb9..cd42572137 100644 --- a/src/insets/ExternalSupport.h +++ b/src/insets/ExternalSupport.h @@ -13,13 +13,15 @@ #ifndef EXTERNALSUPPORT_H #define EXTERNALSUPPORT_H -#include "texstream.h" +#include + namespace lyx { class Buffer; class ExportData; class InsetExternalParams; +class otexstream; namespace external { diff --git a/src/insets/InsetArgument.cpp b/src/insets/InsetArgument.cpp index b65257af97..da807d201a 100644 --- a/src/insets/InsetArgument.cpp +++ b/src/insets/InsetArgument.cpp @@ -24,6 +24,8 @@ #include "Lexer.h" #include "OutputParams.h" #include "ParIterator.h" +#include "TexRow.h" +#include "texstream.h" #include "support/convert.h" #include "support/debug.h" @@ -268,9 +270,8 @@ void InsetArgument::latexArgument(otexstream & os, OutputParams const & runparams_in, docstring const & ldelim, docstring const & rdelim, docstring const & presetarg) const { - TexRow texrow; odocstringstream ss; - otexstream ots(ss, texrow); + otexstream ots(ss); OutputParams runparams = runparams_in; if (!pass_thru_chars_.empty()) runparams.pass_thru_chars += pass_thru_chars_; @@ -281,6 +282,7 @@ void InsetArgument::latexArgument(otexstream & os, str = presetarg + sep + str; if (ldelim != "{" && support::contains(str, rdelim)) str = '{' + str + '}'; + // TODO: append texrow information os << ldelim << str << rdelim; } diff --git a/src/insets/InsetBibtex.cpp b/src/insets/InsetBibtex.cpp index e3202ec5d3..13c91b0739 100644 --- a/src/insets/InsetBibtex.cpp +++ b/src/insets/InsetBibtex.cpp @@ -27,6 +27,7 @@ #include "output_xhtml.h" #include "OutputParams.h" #include "PDFOptions.h" +#include "texstream.h" #include "TextClass.h" #include "frontends/alert.h" diff --git a/src/insets/InsetBox.cpp b/src/insets/InsetBox.cpp index ea18afa0d9..28d79c08de 100644 --- a/src/insets/InsetBox.cpp +++ b/src/insets/InsetBox.cpp @@ -27,6 +27,8 @@ #include "Lexer.h" #include "MetricsInfo.h" #include "output_xhtml.h" +#include "TexRow.h" +#include "texstream.h" #include "TextClass.h" #include "support/debug.h" diff --git a/src/insets/InsetCaption.cpp b/src/insets/InsetCaption.cpp index 05b7dc7766..613249b6b2 100644 --- a/src/insets/InsetCaption.cpp +++ b/src/insets/InsetCaption.cpp @@ -32,6 +32,8 @@ #include "OutputParams.h" #include "Paragraph.h" #include "ParIterator.h" +#include "TexRow.h" +#include "texstream.h" #include "TextClass.h" #include "TextMetrics.h" #include "TocBackend.h" diff --git a/src/insets/InsetCitation.cpp b/src/insets/InsetCitation.cpp index 2b9033f42d..13fddd7802 100644 --- a/src/insets/InsetCitation.cpp +++ b/src/insets/InsetCitation.cpp @@ -24,6 +24,7 @@ #include "LaTeXFeatures.h" #include "output_xhtml.h" #include "ParIterator.h" +#include "texstream.h" #include "TocBackend.h" #include "support/debug.h" diff --git a/src/insets/InsetCommand.cpp b/src/insets/InsetCommand.cpp index fcda3cd2b9..879d9a35e0 100644 --- a/src/insets/InsetCommand.cpp +++ b/src/insets/InsetCommand.cpp @@ -21,6 +21,7 @@ #include "FuncStatus.h" #include "Lexer.h" #include "MetricsInfo.h" +#include "texstream.h" #include "insets/InsetBox.h" #include "insets/InsetBranch.h" diff --git a/src/insets/InsetExternal.cpp b/src/insets/InsetExternal.cpp index 5a7a07a8e3..1a19748041 100644 --- a/src/insets/InsetExternal.cpp +++ b/src/insets/InsetExternal.cpp @@ -30,6 +30,7 @@ #include "MetricsInfo.h" #include "OutputParams.h" #include "output_latex.h" +#include "texstream.h" #include "TocBackend.h" #include "frontends/alert.h" @@ -560,9 +561,8 @@ static bool isPreviewWanted(InsetExternalParams const & params) static docstring latexString(InsetExternal const & inset) { - TexRow texrow; odocstringstream ods; - otexstream os(ods, texrow); + otexstream os(ods, false); // We don't need to set runparams.encoding since it is not used by // latex(). OutputParams runparams(0); @@ -730,8 +730,7 @@ int InsetExternal::plaintext(odocstringstream & os, if (runparams.for_tooltip) return 0; - TexRow texrow; - otexstream ots(os, texrow); + otexstream ots(os, false); ots << '\n'; // output external material on a new line external::writeExternal(params_, "Ascii", buffer(), ots, *(runparams.exportdata), false, @@ -743,9 +742,8 @@ int InsetExternal::plaintext(odocstringstream & os, int InsetExternal::docbook(odocstream & os, OutputParams const & runparams) const { - TexRow texrow; odocstringstream ods; - otexstream ots(ods, texrow); + otexstream ots(ods, false); external::writeExternal(params_, "DocBook", buffer(), ots, *(runparams.exportdata), false, runparams.dryrun || runparams.inComment); diff --git a/src/insets/InsetFloat.cpp b/src/insets/InsetFloat.cpp index ae1bf63816..8d35c646cc 100644 --- a/src/insets/InsetFloat.cpp +++ b/src/insets/InsetFloat.cpp @@ -29,6 +29,8 @@ #include "Lexer.h" #include "output_xhtml.h" #include "ParIterator.h" +#include "TexRow.h" +#include "texstream.h" #include "TextClass.h" #include "support/debug.h" @@ -493,9 +495,8 @@ bool InsetFloat::allowsCaptionVariation(std::string const & newtype) const docstring InsetFloat::getCaption(OutputParams const & runparams) const { - TexRow texrow(false); odocstringstream ods; - otexstream os(ods, texrow); + otexstream os(ods, false); getCaption(os, runparams); return ods.str(); } @@ -514,15 +515,14 @@ void InsetFloat::getCaption(otexstream & os, ins->getArgs(os, runparams); os << '['; - TexRow texrow; odocstringstream ods; - otexstream oss(ods, texrow); + otexstream oss(ods); ins->getArgument(oss, runparams); docstring arg = ods.str(); // Protect ']' if (arg.find(']') != docstring::npos) arg = '{' + arg + '}'; - os.append(arg, texrow); + os.append(arg, move(oss.texrow())); os << ']'; } diff --git a/src/insets/InsetFloatList.cpp b/src/insets/InsetFloatList.cpp index 6deb46ce2d..2d9c33d503 100644 --- a/src/insets/InsetFloatList.cpp +++ b/src/insets/InsetFloatList.cpp @@ -26,6 +26,7 @@ #include "Lexer.h" #include "Paragraph.h" #include "output_xhtml.h" +#include "texstream.h" #include "TextClass.h" #include "TocBackend.h" diff --git a/src/insets/InsetGraphics.cpp b/src/insets/InsetGraphics.cpp index dc617fb177..85f1a07c42 100644 --- a/src/insets/InsetGraphics.cpp +++ b/src/insets/InsetGraphics.cpp @@ -68,6 +68,7 @@ TODO #include "OutputParams.h" #include "output_xhtml.h" #include "sgml.h" +#include "texstream.h" #include "TocBackend.h" #include "frontends/alert.h" diff --git a/src/insets/InsetHyperlink.cpp b/src/insets/InsetHyperlink.cpp index 54f1f2c765..8b3433c944 100644 --- a/src/insets/InsetHyperlink.cpp +++ b/src/insets/InsetHyperlink.cpp @@ -22,6 +22,7 @@ #include "LaTeXFeatures.h" #include "OutputParams.h" #include "output_xhtml.h" +#include "texstream.h" #include "support/docstream.h" #include "support/FileName.h" diff --git a/src/insets/InsetIPA.cpp b/src/insets/InsetIPA.cpp index 1da5a24299..3876358315 100644 --- a/src/insets/InsetIPA.cpp +++ b/src/insets/InsetIPA.cpp @@ -22,6 +22,7 @@ #include "MetricsInfo.h" #include "OutputParams.h" #include "RenderPreview.h" +#include "texstream.h" #include "frontends/Painter.h" @@ -120,9 +121,8 @@ void InsetIPA::addPreview(DocIterator const & inset_pos, void InsetIPA::preparePreview(DocIterator const & pos) const { - TexRow texrow; - odocstringstream str; - otexstream os(str, texrow); + odocstringstream str; + otexstream os(str, false); OutputParams runparams(&pos.buffer()->params().encoding()); latex(os, runparams); docstring const snippet = str.str(); diff --git a/src/insets/InsetIPAMacro.cpp b/src/insets/InsetIPAMacro.cpp index fd96a19e74..0d7a41b0fb 100644 --- a/src/insets/InsetIPAMacro.cpp +++ b/src/insets/InsetIPAMacro.cpp @@ -23,6 +23,7 @@ #include "Lexer.h" #include "MetricsInfo.h" #include "output_xhtml.h" +#include "texstream.h" #include "frontends/FontMetrics.h" #include "frontends/Painter.h" diff --git a/src/insets/InsetInclude.cpp b/src/insets/InsetInclude.cpp index 1031f3a557..47c9a61343 100644 --- a/src/insets/InsetInclude.cpp +++ b/src/insets/InsetInclude.cpp @@ -36,6 +36,7 @@ #include "output_plaintext.h" #include "output_xhtml.h" #include "OutputParams.h" +#include "texstream.h" #include "TextClass.h" #include "TocBackend.h" @@ -1085,9 +1086,8 @@ bool preview_wanted(InsetCommandParams const & params, Buffer const & buffer) docstring latexString(InsetInclude const & inset) { - TexRow texrow; odocstringstream ods; - otexstream os(ods, texrow); + otexstream os(ods, false); // We don't need to set runparams.encoding since this will be done // by latex() anyway. OutputParams runparams(0); diff --git a/src/insets/InsetIndex.cpp b/src/insets/InsetIndex.cpp index aff40805d4..5c8a9dd78f 100644 --- a/src/insets/InsetIndex.cpp +++ b/src/insets/InsetIndex.cpp @@ -28,6 +28,7 @@ #include "output_latex.h" #include "output_xhtml.h" #include "sgml.h" +#include "texstream.h" #include "TextClass.h" #include "TocBackend.h" @@ -74,9 +75,8 @@ void InsetIndex::latex(otexstream & os, OutputParams const & runparams_in) const } // get contents of InsetText as LaTeX and plaintext - TexRow texrow; odocstringstream ourlatex; - otexstream ots(ourlatex, texrow); + otexstream ots(ourlatex); InsetText::latex(ots, runparams); odocstringstream ourplain; InsetText::plaintext(ourplain, runparams); diff --git a/src/insets/InsetLine.cpp b/src/insets/InsetLine.cpp index 087dba7df2..73ce540169 100644 --- a/src/insets/InsetLine.cpp +++ b/src/insets/InsetLine.cpp @@ -25,6 +25,7 @@ #include "MetricsInfo.h" #include "OutputParams.h" #include "output_xhtml.h" +#include "texstream.h" #include "Text.h" #include "frontends/FontMetrics.h" diff --git a/src/insets/InsetListings.cpp b/src/insets/InsetListings.cpp index 91125d8895..e4b8c7f1ee 100644 --- a/src/insets/InsetListings.cpp +++ b/src/insets/InsetListings.cpp @@ -30,6 +30,7 @@ #include "output_xhtml.h" #include "OutputParams.h" #include "TextClass.h" +#include "texstream.h" #include "support/debug.h" #include "support/docstream.h" @@ -395,9 +396,8 @@ docstring InsetListings::getCaption(OutputParams const & runparams) const if (ins == 0) return docstring(); - TexRow texrow; odocstringstream ods; - otexstream os(ods, texrow); + otexstream os(ods, false); ins->getArgs(os, runparams); ins->getArgument(os, runparams); diff --git a/src/insets/InsetNewline.cpp b/src/insets/InsetNewline.cpp index 99cbf14470..411da120eb 100644 --- a/src/insets/InsetNewline.cpp +++ b/src/insets/InsetNewline.cpp @@ -21,6 +21,7 @@ #include "MetricsInfo.h" #include "OutputParams.h" #include "output_xhtml.h" +#include "texstream.h" #include "frontends/Application.h" #include "frontends/FontMetrics.h" diff --git a/src/insets/InsetNewpage.cpp b/src/insets/InsetNewpage.cpp index 418bf8b361..b369ce1b7e 100644 --- a/src/insets/InsetNewpage.cpp +++ b/src/insets/InsetNewpage.cpp @@ -20,6 +20,7 @@ #include "MetricsInfo.h" #include "OutputParams.h" #include "output_xhtml.h" +#include "texstream.h" #include "Text.h" #include "TextMetrics.h" diff --git a/src/insets/InsetNomencl.cpp b/src/insets/InsetNomencl.cpp index f75ef15cd5..2595b14a69 100644 --- a/src/insets/InsetNomencl.cpp +++ b/src/insets/InsetNomencl.cpp @@ -31,6 +31,7 @@ #include "OutputParams.h" #include "output_xhtml.h" #include "sgml.h" +#include "texstream.h" #include "TocBackend.h" #include "frontends/FontMetrics.h" diff --git a/src/insets/InsetPhantom.cpp b/src/insets/InsetPhantom.cpp index c6efe9a9c9..8fb9d949c7 100644 --- a/src/insets/InsetPhantom.cpp +++ b/src/insets/InsetPhantom.cpp @@ -28,6 +28,7 @@ #include "Lexer.h" #include "MetricsInfo.h" #include "OutputParams.h" +#include "texstream.h" #include "TextClass.h" #include "support/docstream.h" diff --git a/src/insets/InsetPreview.cpp b/src/insets/InsetPreview.cpp index 7577741175..53cfb23266 100644 --- a/src/insets/InsetPreview.cpp +++ b/src/insets/InsetPreview.cpp @@ -19,6 +19,7 @@ #include "MetricsInfo.h" #include "OutputParams.h" #include "RenderPreview.h" +#include "texstream.h" #include "frontends/Painter.h" @@ -81,9 +82,8 @@ void InsetPreview::addPreview(DocIterator const & inset_pos, void InsetPreview::preparePreview(DocIterator const & pos) const { - TexRow texrow; odocstringstream str; - otexstream os(str, texrow); + otexstream os(str, false); OutputParams runparams(&pos.buffer()->params().encoding()); latex(os, runparams); diff --git a/src/insets/InsetQuotes.cpp b/src/insets/InsetQuotes.cpp index ba5a127564..84e004bb42 100644 --- a/src/insets/InsetQuotes.cpp +++ b/src/insets/InsetQuotes.cpp @@ -24,6 +24,7 @@ #include "MetricsInfo.h" #include "OutputParams.h" #include "output_xhtml.h" +#include "texstream.h" #include "frontends/FontMetrics.h" #include "frontends/Painter.h" diff --git a/src/insets/InsetRef.cpp b/src/insets/InsetRef.cpp index 7731ad8242..146a85dd49 100644 --- a/src/insets/InsetRef.cpp +++ b/src/insets/InsetRef.cpp @@ -23,6 +23,7 @@ #include "output_xhtml.h" #include "ParIterator.h" #include "sgml.h" +#include "texstream.h" #include "TocBackend.h" #include "support/debug.h" diff --git a/src/insets/InsetSeparator.cpp b/src/insets/InsetSeparator.cpp index 27aeb7c62b..9beda1d0cf 100644 --- a/src/insets/InsetSeparator.cpp +++ b/src/insets/InsetSeparator.cpp @@ -20,6 +20,7 @@ #include "MetricsInfo.h" #include "OutputParams.h" #include "output_xhtml.h" +#include "texstream.h" #include "frontends/Application.h" #include "frontends/FontMetrics.h" diff --git a/src/insets/InsetSpace.cpp b/src/insets/InsetSpace.cpp index 6ab6f9a8d7..7d76f3f62e 100644 --- a/src/insets/InsetSpace.cpp +++ b/src/insets/InsetSpace.cpp @@ -27,6 +27,7 @@ #include "MetricsInfo.h" #include "OutputParams.h" #include "output_xhtml.h" +#include "texstream.h" #include "support/debug.h" #include "support/docstream.h" diff --git a/src/insets/InsetSpecialChar.cpp b/src/insets/InsetSpecialChar.cpp index 8671d2b7d0..3d32f406ea 100644 --- a/src/insets/InsetSpecialChar.cpp +++ b/src/insets/InsetSpecialChar.cpp @@ -20,6 +20,7 @@ #include "Lexer.h" #include "MetricsInfo.h" #include "output_xhtml.h" +#include "texstream.h" #include "frontends/FontMetrics.h" #include "frontends/Painter.h" diff --git a/src/insets/InsetTabular.cpp b/src/insets/InsetTabular.cpp index 7804232d4d..0834f1a68f 100644 --- a/src/insets/InsetTabular.cpp +++ b/src/insets/InsetTabular.cpp @@ -45,6 +45,8 @@ #include "Paragraph.h" #include "ParagraphParameters.h" #include "ParIterator.h" +#include "TexRow.h" +#include "texstream.h" #include "TextClass.h" #include "TextMetrics.h" @@ -2685,8 +2687,7 @@ void Tabular::TeXRow(otexstream & os, row_type row, void Tabular::latex(otexstream & os, OutputParams const & runparams) const { bool const is_tabular_star = !tabular_width.zero(); - TexRow::RowEntry pos = TexRow::textEntry(runparams.lastid, - runparams.lastpos); + RowEntry pos = TexRow::textEntry(runparams.lastid, runparams.lastpos); //+--------------------------------------------------------------------- //+ first the opening preamble + diff --git a/src/insets/InsetText.cpp b/src/insets/InsetText.cpp index 99b1381f93..b67f6b4948 100644 --- a/src/insets/InsetText.cpp +++ b/src/insets/InsetText.cpp @@ -48,6 +48,7 @@ #include "Row.h" #include "sgml.h" #include "TexRow.h" +#include "texstream.h" #include "TextClass.h" #include "Text.h" #include "TextMetrics.h" diff --git a/src/insets/InsetVSpace.cpp b/src/insets/InsetVSpace.cpp index 7edbebf3b4..461933cb56 100644 --- a/src/insets/InsetVSpace.cpp +++ b/src/insets/InsetVSpace.cpp @@ -24,6 +24,7 @@ #include "MetricsInfo.h" #include "OutputParams.h" #include "output_xhtml.h" +#include "texstream.h" #include "Text.h" #include "support/debug.h" diff --git a/src/insets/InsetWrap.cpp b/src/insets/InsetWrap.cpp index 00223ad532..c8c0ef82f5 100644 --- a/src/insets/InsetWrap.cpp +++ b/src/insets/InsetWrap.cpp @@ -27,6 +27,7 @@ #include "LaTeXFeatures.h" #include "Lexer.h" #include "output_xhtml.h" +#include "texstream.h" #include "TextClass.h" #include "support/debug.h" diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp index 69a9b80883..cc8d1cf12f 100644 --- a/src/lyxfind.cpp +++ b/src/lyxfind.cpp @@ -727,9 +727,8 @@ private: static docstring buffer_to_latex(Buffer & buffer) { OutputParams runparams(&buffer.params().encoding()); - TexRow texrow(false); odocstringstream ods; - otexstream os(ods, texrow); + otexstream os(ods, false); runparams.nice = true; runparams.flavor = OutputParams::LATEX; runparams.linelen = 80; //lyxrc.plaintext_linelen; @@ -1048,9 +1047,8 @@ docstring latexifyFromCursor(DocIterator const & cur, int len) Buffer const & buf = *cur.buffer(); LBUFERR(buf.params().isLatex()); - TexRow texrow(false); odocstringstream ods; - otexstream os(ods, texrow); + otexstream os(ods, false); OutputParams runparams(&buf.params().encoding()); runparams.nice = false; runparams.flavor = OutputParams::LATEX; @@ -1395,9 +1393,8 @@ static void findAdvReplace(BufferView * bv, FindAndReplaceOptions const & opt, M LYXERR(Debug::FIND, "After pasteParagraphList() cur=" << cur << endl); sel_len = repl_buffer.paragraphs().begin()->size(); } else if (cur.inMathed()) { - TexRow texrow(false); odocstringstream ods; - otexstream os(ods, texrow); + otexstream os(ods, false); OutputParams runparams(&repl_buffer.params().encoding()); runparams.nice = false; runparams.flavor = OutputParams::LATEX; diff --git a/src/mathed/InsetMath.cpp b/src/mathed/InsetMath.cpp index f71febc06d..87952f5679 100644 --- a/src/mathed/InsetMath.cpp +++ b/src/mathed/InsetMath.cpp @@ -53,8 +53,7 @@ void InsetMath::dump() const { lyxerr << "---------------------------------------------" << endl; odocstringstream os; - TexRow texrow(false); - otexrowstream ots(os,texrow); + otexrowstream ots(os, false); WriteStream wi(ots, false, true, WriteStream::wsDefault); write(wi); lyxerr << to_utf8(os.str()); @@ -158,8 +157,7 @@ HullType InsetMath::getType() const ostream & operator<<(ostream & os, MathAtom const & at) { odocstringstream oss; - TexRow texrow(false); - otexrowstream ots(oss,texrow); + otexrowstream ots(oss, false); WriteStream wi(ots, false, false, WriteStream::wsDefault); at->write(wi); return os << to_utf8(oss.str()); @@ -168,8 +166,7 @@ ostream & operator<<(ostream & os, MathAtom const & at) odocstream & operator<<(odocstream & os, MathAtom const & at) { - TexRow texrow(false); - otexrowstream ots(os,texrow); + otexrowstream ots(os, false); WriteStream wi(ots, false, false, WriteStream::wsDefault); at->write(wi); return os; diff --git a/src/mathed/InsetMath.h b/src/mathed/InsetMath.h index 088fce6c2b..3bab681df8 100644 --- a/src/mathed/InsetMath.h +++ b/src/mathed/InsetMath.h @@ -17,8 +17,6 @@ #include "insets/Inset.h" -#include "TexRow.h" - namespace lyx { @@ -93,6 +91,9 @@ class TextPainter; class TextMetricsInfo; class ReplaceData; +/// Type of unique identifiers for math insets (used in TexRow) +typedef void const * uid_type; + class InsetMath : public Inset { public: diff --git a/src/mathed/InsetMathGrid.cpp b/src/mathed/InsetMathGrid.cpp index 1c830c1ffb..f2d88a2bdf 100644 --- a/src/mathed/InsetMathGrid.cpp +++ b/src/mathed/InsetMathGrid.cpp @@ -22,10 +22,11 @@ #include "Buffer.h" #include "BufferParams.h" #include "BufferView.h" -#include "CutAndPaste.h" -#include "FuncStatus.h" #include "Cursor.h" +#include "CutAndPaste.h" #include "FuncRequest.h" +#include "FuncStatus.h" +#include "TexRow.h" #include "frontends/Clipboard.h" #include "frontends/Painter.h" @@ -1268,8 +1269,8 @@ void InsetMathGrid::write(WriteStream & os, for (col_type col = beg_col; col < end_col;) { int nccols = 1; idx_type const idx = index(row, col); - TexRow::RowEntry entry = os.texrow().mathEntry(id(),idx); - os.texrow().startMath(id(),idx); + RowEntry entry = TexRow::mathEntry(id(),idx); + os.texrow().start(entry); if (col >= lastcol) { ++col; continue; diff --git a/src/mathed/InsetMathHull.cpp b/src/mathed/InsetMathHull.cpp index 88a4c1d328..5dffc3d605 100644 --- a/src/mathed/InsetMathHull.cpp +++ b/src/mathed/InsetMathHull.cpp @@ -43,6 +43,7 @@ #include "Paragraph.h" #include "ParIterator.h" #include "sgml.h" +#include "TexRow.h" #include "TextClass.h" #include "TextPainter.h" #include "TocBackend.h" @@ -614,8 +615,7 @@ void InsetMathHull::metricsT(TextMetricsInfo const & mi, Dimension & dim) const InsetMathGrid::metricsT(mi, dim); } else { odocstringstream os; - TexRow texrow(false); - otexrowstream ots(os,texrow); + otexrowstream ots(os, false); WriteStream wi(ots, false, true, WriteStream::wsDefault); write(wi); dim.wid = os.str().size(); @@ -631,8 +631,7 @@ void InsetMathHull::drawT(TextPainter & pain, int x, int y) const InsetMathGrid::drawT(pain, x, y); } else { odocstringstream os; - TexRow texrow(false); - otexrowstream ots(os,texrow); + otexrowstream ots(os, false); WriteStream wi(ots, false, true, WriteStream::wsDefault); write(wi); pain.draw(x, y, os.str().c_str()); @@ -651,8 +650,7 @@ static docstring latexString(InsetMathHull const & inset) static Encoding const * encoding = 0; if (inset.isBufferValid()) encoding = &(inset.buffer().params().encoding()); - TexRow texrow(false); - otexrowstream ots(ls,texrow); + otexrowstream ots(ls, false); WriteStream wi(ots, false, true, WriteStream::wsPreview, encoding); inset.write(wi); return ls.str(); @@ -2182,8 +2180,7 @@ bool InsetMathHull::searchForward(BufferView * bv, string const & str, void InsetMathHull::write(ostream & os) const { odocstringstream oss; - TexRow texrow(false); - otexrowstream ots(oss,texrow); + otexrowstream ots(oss, false); WriteStream wi(ots, false, false, WriteStream::wsDefault); oss << "Formula "; write(wi); @@ -2226,8 +2223,7 @@ int InsetMathHull::plaintext(odocstringstream & os, } odocstringstream oss; - TexRow texrow(false); - otexrowstream ots(oss,texrow); + otexrowstream ots(oss, false); Encoding const * const enc = encodings.fromLyXName("utf8"); WriteStream wi(ots, false, true, WriteStream::wsDefault, enc); @@ -2269,8 +2265,7 @@ int InsetMathHull::docbook(odocstream & os, OutputParams const & runparams) cons ++ms.tab(); ms.cr(); ms.os() << '<' << bname << '>'; odocstringstream ls; - TexRow texrow; - otexstream ols(ls, texrow); + otexstream ols(ls); if (runparams.flavor == OutputParams::XML) { ms << MTag("alt role='tex' "); // Workaround for db2latex: db2latex always includes equations with @@ -2288,7 +2283,7 @@ int InsetMathHull::docbook(odocstream & os, OutputParams const & runparams) cons } else { ms << MTag("alt role='tex'"); latex(ols, runparams); - res = texrow.rows(); + res = ols.texrow().rows(); ms << from_utf8(subst(subst(to_utf8(ls.str()), "&", "&"), "<", "<")); ms << ETag("alt"); } @@ -2537,8 +2532,7 @@ docstring InsetMathHull::xhtml(XHTMLStream & xs, OutputParams const & op) const // Unfortunately, we cannot use latexString() because we do not want // $...$ or whatever. odocstringstream ls; - TexRow texrow(false); - otexrowstream ots(ls,texrow); + otexrowstream ots(ls, false); WriteStream wi(ots, false, true, WriteStream::wsPreview); ModeSpecifier specifier(wi, MATH_MODE); mathAsLatex(wi); diff --git a/src/mathed/InsetMathNest.cpp b/src/mathed/InsetMathNest.cpp index 87b7f42d29..223e31afc2 100644 --- a/src/mathed/InsetMathNest.cpp +++ b/src/mathed/InsetMathNest.cpp @@ -52,6 +52,7 @@ #include "LyXRC.h" #include "MetricsInfo.h" #include "OutputParams.h" +#include "TexRow.h" #include "Text.h" #include "frontends/Application.h" @@ -251,8 +252,7 @@ bool InsetMathNest::idxLast(Cursor & cur) const void InsetMathNest::dump() const { odocstringstream oss; - TexRow texrow(false); - otexrowstream ots(oss,texrow); + otexrowstream ots(oss, false); WriteStream os(ots); os << "---------------------------------------------\n"; write(os); @@ -407,8 +407,8 @@ void InsetMathNest::latex(otexstream & os, OutputParams const & runparams) const runparams.dryrun ? WriteStream::wsDryrun : WriteStream::wsDefault, runparams.encoding); wi.canBreakLine(os.canBreakLine()); - Changer dummy = wi.changeRowEntry(os.texrow().textEntry(runparams.lastid, - runparams.lastpos)); + Changer dummy = wi.changeRowEntry(TexRow::textEntry(runparams.lastid, + runparams.lastpos)); write(wi); // Reset parbreak status after a math inset. os.lastChar(0); diff --git a/src/mathed/MacroTable.cpp b/src/mathed/MacroTable.cpp index 9ff4bfef74..5f43fa7994 100644 --- a/src/mathed/MacroTable.cpp +++ b/src/mathed/MacroTable.cpp @@ -200,8 +200,7 @@ int MacroData::write(odocstream & os, bool overwriteRedefinition) const // output template MathMacroTemplate const & tmpl = static_cast(*inset); - TexRow texrow(false); - otexrowstream ots(os,texrow); + otexrowstream ots(os, false); WriteStream wi(ots, false, true, WriteStream::wsDefault); return tmpl.write(wi, overwriteRedefinition); } diff --git a/src/mathed/MathFactory.cpp b/src/mathed/MathFactory.cpp index 82f885b313..f7c21e805e 100644 --- a/src/mathed/MathFactory.cpp +++ b/src/mathed/MathFactory.cpp @@ -73,6 +73,7 @@ #include "LyX.h" // use_gui #include "OutputParams.h" + using namespace std; using namespace lyx::support; @@ -669,9 +670,8 @@ bool createInsetMath_fromDialogStr(docstring const & str, MathData & ar) InsetSpaceParams isp(true); InsetSpace::string2params(to_utf8(str), isp); InsetSpace is(isp); - TexRow texrow; odocstringstream ods; - otexstream os(ods, texrow); + otexstream os(ods, false); Encoding const * const ascii = encodings.fromLyXName("ascii"); OutputParams op(ascii); is.latex(os, op); diff --git a/src/mathed/MathMacroTemplate.cpp b/src/mathed/MathMacroTemplate.cpp index 5c7ae70713..31250e29df 100644 --- a/src/mathed/MathMacroTemplate.cpp +++ b/src/mathed/MathMacroTemplate.cpp @@ -1172,8 +1172,7 @@ void MathMacroTemplate::read(Lexer & lex) void MathMacroTemplate::write(ostream & os) const { odocstringstream oss; - TexRow texrow(false); - otexrowstream ots(oss,texrow); + otexrowstream ots(oss, false); WriteStream wi(ots, false, false, WriteStream::wsDefault); oss << "FormulaMacro\n"; write(wi); diff --git a/src/mathed/MathStream.cpp b/src/mathed/MathStream.cpp index c1c0830f5a..eb567ff19b 100644 --- a/src/mathed/MathStream.cpp +++ b/src/mathed/MathStream.cpp @@ -16,6 +16,8 @@ #include "MathData.h" #include "MathExtern.h" +#include "TexRow.h" + #include "support/docstring.h" #include "support/RefChanger.h" #include "support/textutils.h" @@ -128,7 +130,8 @@ WriteStream::WriteStream(otexrowstream & os, bool fragile, bool latex, : os_(os), fragile_(fragile), firstitem_(false), latex_(latex), output_(output), pendingspace_(false), pendingbrace_(false), textmode_(false), locked_(0), ascii_(0), canbreakline_(true), - line_(0), encoding_(encoding), row_entry_(TexRow::row_none) + line_(0), encoding_(encoding), + row_entry_(make_unique(TexRow::row_none)) {} @@ -177,17 +180,17 @@ void WriteStream::asciiOnly(bool ascii) } -Changer WriteStream::changeRowEntry(TexRow::RowEntry entry) +Changer WriteStream::changeRowEntry(RowEntry entry) { - return make_change(row_entry_, entry); + return make_change(*row_entry_, entry); } bool WriteStream::startOuterRow() { - if (TexRow::isNone(row_entry_)) + if (TexRow::isNone(*row_entry_)) return false; - return texrow().start(row_entry_); + return texrow().start(*row_entry_); } diff --git a/src/mathed/MathStream.h b/src/mathed/MathStream.h index a9465cc494..d1cfb94068 100644 --- a/src/mathed/MathStream.h +++ b/src/mathed/MathStream.h @@ -17,6 +17,7 @@ #include "support/Changer.h" #include "support/strfwd.h" +#include "support/unique_ptr.h" namespace lyx { @@ -25,6 +26,7 @@ class Encoding; class InsetMath; class MathAtom; class MathData; +class RowEntry; // // LaTeX/LyX @@ -88,7 +90,7 @@ public: Encoding const * encoding() const { return encoding_; } /// Temporarily change the TexRow information about the outer row entry. - Changer changeRowEntry(TexRow::RowEntry entry); + Changer changeRowEntry(RowEntry entry); /// TexRow::starts the innermost outer math inset /// returns true if the outer row entry will appear at this line bool startOuterRow(); @@ -120,7 +122,8 @@ private: /// Encoding const * encoding_; /// Row entry we are in - TexRow::RowEntry row_entry_; + /// (it is a pointer to allow forward-declaration) + unique_ptr row_entry_; }; /// diff --git a/src/mathed/MathSupport.cpp b/src/mathed/MathSupport.cpp index e18a351c82..42f737654d 100644 --- a/src/mathed/MathSupport.cpp +++ b/src/mathed/MathSupport.cpp @@ -919,8 +919,7 @@ bool isAlphaSymbol(MathAtom const & at) docstring asString(MathData const & ar) { odocstringstream os; - TexRow texrow(false); - otexrowstream ots(os,texrow); + otexrowstream ots(os, false); WriteStream ws(ots); ws << ar; return os.str(); @@ -938,8 +937,7 @@ void asArray(docstring const & str, MathData & ar, Parse::flags pf) docstring asString(InsetMath const & inset) { odocstringstream os; - TexRow texrow(false); - otexrowstream ots(os,texrow); + otexrowstream ots(os, false); WriteStream ws(ots); inset.write(ws); return os.str(); @@ -949,8 +947,7 @@ docstring asString(InsetMath const & inset) docstring asString(MathAtom const & at) { odocstringstream os; - TexRow texrow(false); - otexrowstream ots(os,texrow); + otexrowstream ots(os, false); WriteStream ws(ots); at->write(ws); return os.str(); diff --git a/src/output_latex.cpp b/src/output_latex.cpp index 5d385e5e09..370b7a0842 100644 --- a/src/output_latex.cpp +++ b/src/output_latex.cpp @@ -23,6 +23,7 @@ #include "OutputParams.h" #include "Paragraph.h" #include "ParagraphParameters.h" +#include "texstream.h" #include "TextClass.h" #include "insets/InsetBibitem.h" diff --git a/src/tex2lyx/dummy_impl.cpp b/src/tex2lyx/dummy_impl.cpp index 7807a7d2d8..7709663914 100644 --- a/src/tex2lyx/dummy_impl.cpp +++ b/src/tex2lyx/dummy_impl.cpp @@ -47,19 +47,6 @@ namespace Alert { } -// -// Dummy TexRow support (needed by docstream) -// - - -void TexRow::newline() -{} - - -void TexRow::newlines(int) -{} - - // // Dummy LyXRC support // diff --git a/src/texstream.cpp b/src/texstream.cpp index 16f8dfbe68..f748f8a4d2 100644 --- a/src/texstream.cpp +++ b/src/texstream.cpp @@ -11,6 +11,9 @@ #include #include "texstream.h" + +#include "TexRow.h" + #include "support/lstrings.h" #include "support/unicode.h" @@ -30,10 +33,26 @@ using lyx::support::split; namespace lyx { -void otexrowstream::append(docstring const & str, TexRow const & texrow) +otexrowstream::otexrowstream(odocstream & os, bool enable) + : os_(os), texrow_(make_unique(enable)) +{} + + +otexrowstream::~otexrowstream() = default; + + +unique_ptr && otexrowstream::releaseTexRow() +{ + auto p = make_unique(); + swap(texrow_, p); + return move(p); +} + + +void otexrowstream::append(docstring const & str, TexRow texrow) { os_ << str; - texrow_.append(texrow); + texrow_->append(move(texrow)); } @@ -41,7 +60,7 @@ void otexrowstream::put(char_type const & c) { os_.put(c); if (c == '\n') - texrow_.newline(); + texrow_->newline(); } diff --git a/src/texstream.h b/src/texstream.h index c81bbf9a84..f6f4211335 100644 --- a/src/texstream.h +++ b/src/texstream.h @@ -12,11 +12,17 @@ #ifndef LYX_TEXSTREAM_H #define LYX_TEXSTREAM_H -#include "TexRow.h" #include "support/docstream.h" +#include "support/unique_ptr.h" namespace lyx { +class TexRow; + + +// declared below +class otexstringstream; + /** Wrapper class for odocstream. This class is used to automatically count the lines of the exported latex code. @@ -25,21 +31,24 @@ namespace lyx { class otexrowstream { public: /// - otexrowstream(odocstream & os, TexRow & texrow) - : os_(os), texrow_(texrow) {} + explicit otexrowstream(odocstream & os, bool enable = true); + /// defaulted + ~otexrowstream(); /// odocstream & os() { return os_; } /// - TexRow & texrow() { return texrow_; } + TexRow & texrow() { return *texrow_; } + /// + unique_ptr && releaseTexRow(); /// void put(char_type const & c); /// - void append(docstring const &, TexRow const &); + void append(docstring const & str, TexRow texrow); private: /// odocstream & os_; /// - TexRow & texrow_; + unique_ptr texrow_; }; /// @@ -70,8 +79,8 @@ otexrowstream & operator<<(otexrowstream & ots, Type value); class otexstream : public otexrowstream { public: /// - otexstream(odocstream & os, TexRow & texrow) - : otexrowstream(os, texrow), canbreakline_(false), + explicit otexstream(odocstream & os, bool enable = true) + : otexrowstream(os, enable), canbreakline_(false), protectspace_(false), parbreak_(true), lastchar_(0) {} /// void put(char_type const & c); @@ -135,6 +144,7 @@ otexstream & operator<<(otexstream &, char); template otexstream & operator<<(otexstream & ots, Type value); + } #endif -- 2.39.2