commit 670efa8f646218f2a378f0cc614c4c37a9f6b89a
Author: Guillaume Munch <[email protected]>
Date: Sun Jun 19 03:39:38 2016 +0100
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 08f3148..a64e4b6 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<TexRow> Buffer::getSourceCode(odocstream &
os, string const & format,
LaTeXFeatures features(*this, params(), runparams);
params().validate(features);
runparams.use_polyglossia = features.usePolyglossia();
- texrow = make_unique<TexRow>();
- 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<TexRow> Buffer::getSourceCode(odocstream &
os, string const & format,
writeDocBookSource(os, absFileName(),
runparams, output);
} else {
// latex or literate
- texrow = make_unique<TexRow>();
- 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 7acf1f3..477a8ac 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 d2218e0..7af4397 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 1626f50..0d464d8 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 9638396..ea6e4b3 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 <vector>
@@ -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 68570b8..b2f6439 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 9a72d8c..082b2d3 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 2894f9d..8d5c63b 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 f0814a3..0ca4080 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 eba00b9..503bfc5 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 676179f..bc4151c 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 6734bea..77763be 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 c29ca4c..507702f 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 21be0b8..4e23cf7 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<int,int> 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 c072ec1..9e41b0a 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 ac7084a..4411074 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 46dd358..4be43e2 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 428da05..dbe36c7 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 <QDockWidget>
#include <QString>
#include <QTimer>
+
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 bc174da..1f78d77 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 17aedfc..2fd67dc 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 7ea6d56..f208a95 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 1000735..cd42572 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 <string>
+
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 b65257a..da807d2 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 e3202ec..13c91b0 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 ea18afa..28d79c0 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 05b7dc7..613249b 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 2b9033f..13fddd7 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 fcda3cd..879d9a3 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 5a7a07a..1a19748 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 ae1bf63..8d35c64 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 6deb46c..2d9c33d 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 dc617fb..85f1a07 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 54f1f2c..8b3433c 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 1da5a24..3876358 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 fd96a19..0d7a41b 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 1031f3a..47c9a61 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 aff4080..5c8a9dd 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 087dba7..73ce540 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 91125d8..e4b8c7f 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 99cbf14..411da12 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 418bf8b..b369ce1 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 f75ef15..2595b14 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 c6efe9a..8fb9d94 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 7577741..53cfb23 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 ba5a127..84e004b 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 7731ad8..146a85d 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 27aeb7c..9beda1d 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 6ab6f9a..7d76f3f 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 8671d2b..3d32f40 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 7804232..0834f1a 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 99b1381..b67f6b4 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 7edbebf..461933c 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 00223ad..c8c0ef8 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 69a9b80..cc8d1cf 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 f71febc..87952f5 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 088fce6..3bab681 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 1c830c1..f2d88a2 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 88a4c1d..5dffc3d 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 87b7f42..223e31a 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 9ff4bfe..5f43fa7 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<MathMacroTemplate const &>(*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 82f885b..f7c21e8 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 5c7ae70..31250e2 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 c1c0830..eb567ff 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<RowEntry>(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 a9465cc..d1cfb94 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<RowEntry> row_entry_;
};
///
diff --git a/src/mathed/MathSupport.cpp b/src/mathed/MathSupport.cpp
index e18a351..42f7376 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 5d385e5..370b7a0 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 7807a7d..7709663 100644
--- a/src/tex2lyx/dummy_impl.cpp
+++ b/src/tex2lyx/dummy_impl.cpp
@@ -48,19 +48,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 16f8dfb..f748f8a 100644
--- a/src/texstream.cpp
+++ b/src/texstream.cpp
@@ -11,6 +11,9 @@
#include <config.h>
#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<TexRow>(enable))
+{}
+
+
+otexrowstream::~otexrowstream() = default;
+
+
+unique_ptr<TexRow> && otexrowstream::releaseTexRow()
+{
+ auto p = make_unique<TexRow>();
+ 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 c81bbf9..f6f4211 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<TexRow> && 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> 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 <typename Type>
otexstream & operator<<(otexstream & ots, Type value);
+
}
#endif