#include "version.h"
#include "LaTeX.h"
#include "Chktex.h"
-#include "frontends/LyXView.h"
#include "debug.h"
#include "LaTeXFeatures.h"
#include "lyxtext.h"
#include "iterators.h"
#include "lyxtextclasslist.h"
#include "sgml.h"
+#include "paragraph_funcs.h"
+
+#include "frontends/LyXView.h"
#include "mathed/formulamacro.h"
#include "mathed/formula.h"
#include "insets/insetgraphics.h"
#include "insets/insetfoot.h"
#include "insets/insetmarginal.h"
+#include "insets/insetoptarg.h"
#include "insets/insetminipage.h"
#include "insets/insetfloat.h"
#include "insets/insettabular.h"
namespace {
-const int LYX_FORMAT = 220;
+const int LYX_FORMAT = 221;
} // namespace anon
filename_(file), users(0), ctrs(new Counters)
{
lyxerr[Debug::INFO] << "Buffer::Buffer()" << endl;
-// filename = file;
filepath_ = OnlyPath(file);
-// lyx_clean = true;
-// bak_clean = true;
-// dep_clean = 0;
-// read_only = ronly;
-// unnamed = false;
-// users = 0;
lyxvc.buffer(this);
if (read_only || lyxrc.use_tempdir) {
tmppath = CreateBufferTmpDir();
string last_inset_read;
-#ifndef NO_COMPABILITY
-struct ErtComp
-{
- ErtComp() : active(false), fromlayout(false), in_tabular(false) {
- }
- string contents;
- bool active;
- bool fromlayout;
- bool in_tabular;
- LyXFont font;
-};
-
-std::stack<ErtComp> ert_stack;
-ErtComp ert_comp;
-#endif
-
#ifdef WITH_WARNINGS
#warning And _why_ is this here? (Lgb)
#endif
{
unknown_layouts = 0;
unknown_tokens = 0;
-#ifndef NO_COMPABILITY
- ert_comp.contents.erase();
- ert_comp.active = false;
- ert_comp.fromlayout = false;
- ert_comp.in_tabular = false;
-#endif
+
int pos = 0;
Paragraph::depth_type depth = 0;
bool the_end_read = false;
}
-#ifndef NO_COMPABILITY
-
-Inset * Buffer::isErtInset(Paragraph * par, int pos) const
-{
- Inset * inset;
- if ((par->getChar(pos) == Paragraph::META_INSET) &&
- (inset = par->getInset(pos)) &&
- (inset->lyxCode() == Inset::ERT_CODE))
- {
- return inset;
- }
- return 0;
-}
-
-void Buffer::insertErtContents(Paragraph * par, int & pos, bool set_inactive)
-{
- if (ert_comp.contents.find_first_not_of(' ') != string::npos) {
- // we only skip completely empty ERT (only spaces) otherwise
- // we have to insert it as is.
- string str(ert_comp.contents);
- lyxerr[Debug::INSETS] << "ERT contents:\n'"
- << str << "'" << endl;
- // check if we have already an ert inset a position earlier
- // if this is the case then we should insert the contents
- // inside the other ertinset as it is stupid to have various
- // ert in a row.
- Inset * inset;
- if ((pos > 0) && (inset=isErtInset(par, pos-1))) {
- // get the last paragraph from the inset before
- Paragraph * last = inset->firstParagraph();
- while(last->next())
- last = last->next();
- // create the new paragraph after the last one
- Paragraph * par = new Paragraph(last);
- par->layout(params.getLyXTextClass().defaultLayoutName());
- par->setInsetOwner(last->inInset());
- // set the contents
- LyXFont font(LyXFont::ALL_INHERIT, params.language);
- string::const_iterator cit = str.begin();
- string::const_iterator end = str.end();
- pos_type pos = 0;
- for (; cit != end; ++cit) {
- par->insertChar(pos++, *cit, font);
- }
- } else {
- Inset * inset =
- new InsetERT(params, params.language, str, true);
- par->insertInset(pos++, inset, ert_comp.font);
- }
- }
- ert_comp.contents.erase();
- ert_comp.fromlayout = false;
- if (set_inactive) {
- ert_comp.active = false;
- }
-}
-#endif
-
-
bool
Buffer::parseSingleLyXformat2Token(LyXLex & lex, Paragraph *& par,
Paragraph *& first_par,
)
{
bool the_end_read = false;
-#ifndef NO_COMPABILITY
-#ifndef NO_PEXTRA_REALLY
- // This is super temporary but is needed to get the compability
- // mode for minipages work correctly together with new tabulars.
- static int call_depth;
- ++call_depth;
- bool checkminipage = false;
- static Paragraph * minipar = 0;
- static Paragraph * parBeforeMinipage;
-#endif
-#endif
// The order of the tags tested may seem unnatural, but this
// has been done in order to reduce the number of string
// on large documents like UserGuide to a reduction of a
// factor 5! (JMarc)
if (token[0] != '\\') {
-#ifndef NO_COMPABILITY
- if (ert_comp.active) {
- ert_comp.contents += token;
- } else {
-#endif
for (string::const_iterator cit = token.begin();
cit != token.end(); ++cit) {
par->insertChar(pos, (*cit), font);
++pos;
}
-#ifndef NO_COMPABILITY
- }
-#endif
} else if (token == "\\layout") {
-#ifndef NO_COMPABILITY
- bool old_fromlayout = ert_comp.fromlayout;
- bool create_new_par = true;
- ert_comp.in_tabular = false;
- // Do the insetert.
- if (!par->size() && par->previous() &&
- (par->previous()->size() == 1) &&
- isErtInset(par->previous(), par->previous()->size()-1))
- {
- int p = par->previous()->size();
- insertErtContents(par->previous(), p);
- create_new_par = false;
- } else {
- insertErtContents(par, pos);
- }
-#endif
// reset the font as we start a new layout and if the font is
// not ALL_INHERIT,document_language then it will be set to the
// right values after this tag (Jug 20020420)
if (layoutname.empty()) {
layoutname = tclass.defaultLayoutName();
}
-#ifndef NO_COMPABILITY
- if (compare_ascii_no_case(layoutname, "latex") == 0) {
- ert_comp.active = true;
- ert_comp.fromlayout = true;
- ert_comp.font = font;
- if (old_fromlayout)
- create_new_par = false;
- }
-#endif
bool hasLayout = tclass.hasLayout(layoutname);
if (!hasLayout) {
lyxerr << "Layout '" << layoutname << "' does not"
par->InsertInset(pos, inset, font);
++pos;
} else {
-#endif
-#ifndef NO_COMPABILITY
- if (create_new_par) {
#endif
if (!first_par)
first_par = par;
if (!layout->obsoleted_by().empty())
par->layout(params.getLyXTextClass()[layout->obsoleted_by()]);
par->params().depth(depth);
-#ifndef NO_COMPABILITY
- } else {
- // we duplicate code here because it's easier to remove
- // the code then of NO_COMPATIBILITY
- par->layout(layoutname);
- // Test whether the layout is obsolete.
- LyXLayout_ptr const & layout =
- params.getLyXTextClass()[par->layout()];
- if (!layout->obsoleted_by().empty())
- par->layout(layout->obsoleted_by());
- par->params().depth(depth);
- }
-#endif
#if USE_CAPTION
}
#endif
// But insets should read it, it is a part of
// the inset isn't it? Lgb.
} else if (token == "\\begin_inset") {
-#ifndef NO_COMPABILITY
- insertErtContents(par, pos, false);
- ert_stack.push(ert_comp);
- ert_comp = ErtComp();
-#endif
readInset(lex, par, pos, font);
-#ifndef NO_COMPABILITY
- ert_comp = ert_stack.top();
- ert_stack.pop();
- insertErtContents(par, pos);
-#endif
} else if (token == "\\family") {
lex.next();
font.setLyXFamily(lex.getString());
} else if (token == "\\size") {
lex.next();
font.setLyXSize(lex.getString());
-#ifndef NO_COMPABILITY
- } else if (token == "\\latex") {
- lex.next();
- string const tok = lex.getString();
- if (tok == "no_latex") {
- // Do the insetert.
- insertErtContents(par, pos);
- } else if (tok == "latex") {
- ert_comp.active = true;
- ert_comp.font = font;
- } else if (tok == "default") {
- // Do the insetert.
- insertErtContents(par, pos);
- } else {
- lex.printError("Unknown LaTeX font flag "
- "`$$Token'");
- }
-#endif
} else if (token == "\\lang") {
lex.next();
string const tok = lex.getString();
par->insertInset(pos, inset, font);
++pos;
} else if (token == "\\backslash") {
-#ifndef NO_COMPABILITY
- if (ert_comp.active) {
- ert_comp.contents += "\\";
- } else {
-#endif
par->insertChar(pos, '\\', font);
++pos;
-#ifndef NO_COMPABILITY
- }
-#endif
-#ifndef NO_COMPABILITY
- } else if (token == "\\begin_float") {
- insertErtContents(par, pos);
- //insertErtContents(par, pos, false);
- //ert_stack.push(ert_comp);
- //ert_comp = ErtComp();
-
- // This is the compability reader. It can be removed in
- // LyX version 1.3.0. (Lgb)
- lex.next();
- string const tmptok = lex.getString();
- //lyxerr << "old float: " << tmptok << endl;
-
- Inset * inset = 0;
- stringstream old_float;
-
- if (tmptok == "footnote") {
- inset = new InsetFoot(params);
- old_float << "collapsed true\n";
- } else if (tmptok == "margin") {
- inset = new InsetMarginal(params);
- old_float << "collapsed true\n";
- } else if (tmptok == "fig") {
- inset = new InsetFloat(params, "figure");
- old_float << "wide false\n"
- << "collapsed false\n";
- } else if (tmptok == "tab") {
- inset = new InsetFloat(params, "table");
- old_float << "wide false\n"
- << "collapsed false\n";
- } else if (tmptok == "alg") {
- inset = new InsetFloat(params, "algorithm");
- old_float << "wide false\n"
- << "collapsed false\n";
- } else if (tmptok == "wide-fig") {
- inset = new InsetFloat(params, "figure");
- //InsetFloat * tmp = new InsetFloat("figure");
- //tmp->wide(true);
- //inset = tmp;
- old_float << "wide true\n"
- << "collapsed false\n";
- } else if (tmptok == "wide-tab") {
- inset = new InsetFloat(params, "table");
- //InsetFloat * tmp = new InsetFloat("table");
- //tmp->wide(true);
- //inset = tmp;
- old_float << "wide true\n"
- << "collapsed false\n";
- }
-
- if (!inset) {
-#ifndef NO_PEXTRA_REALLY
- --call_depth;
-#endif
- return false; // no end read yet
- }
-
- // Here we need to check for \end_deeper and handle that
- // before we do the footnote parsing.
- // This _is_ a hack! (Lgb)
- while (true) {
- lex.next();
- string const tmp = lex.getString();
- if (tmp == "\\end_deeper") {
- //lyxerr << "\\end_deeper caught!" << endl;
- if (!depth) {
- lex.printError("\\end_deeper: "
- "depth is already null");
- } else
- --depth;
-
- } else {
- old_float << tmp << ' ';
- break;
- }
- }
-
- old_float << lex.getLongString("\\end_float")
- << "\n\\end_inset\n";
- //lyxerr << "Float Body:\n" << old_float.str() << endl;
- // That this does not work seems like a bug
- // in stringstream. (Lgb)
- istringstream istr(old_float.str());
- LyXLex nylex(0, 0);
- nylex.setStream(istr);
- inset->read(this, nylex);
- par->insertInset(pos, inset, font);
- ++pos;
- insertErtContents(par, pos);
-
- // we have to reset the font as in the old format after a float
- // the font was automatically reset!
- font = LyXFont(LyXFont::ALL_INHERIT, params.language);
-#endif
} else if (token == "\\begin_deeper") {
++depth;
} else if (token == "\\end_deeper") {
} else if (token == "\\defskip") {
lex.nextToken();
params.defskip = VSpace(lex.getString());
-#ifndef NO_COMPABILITY
- } else if (token == "\\epsfig") { // obsolete
- // Indeed it is obsolete, but we HAVE to be backwards
- // compatible until 0.14, because otherwise all figures
- // in existing documents are irretrivably lost. (Asger)
- params.readGraphicsDriver(lex);
-#endif
} else if (token == "\\quotes_language") {
int tmpret = lex.findToken(string_quotes_language);
if (tmpret == -1)
value.keep() ||
(value.kind() != VSpace::LENGTH))
par->params().spaceBottom(value);
-#ifndef NO_COMPABILITY
-#ifndef NO_PEXTRA_REALLY
- } else if (token == "\\pextra_type") {
- lex.nextToken();
- par->params().pextraType(lex.getInteger());
- } else if (token == "\\pextra_width") {
- lex.nextToken();
- par->params().pextraWidth(lex.getString());
- } else if (token == "\\pextra_widthp") {
- lex.nextToken();
- par->params().pextraWidthp(lex.getString());
- } else if (token == "\\pextra_alignment") {
- lex.nextToken();
- par->params().pextraAlignment(lex.getInteger());
- } else if (token == "\\pextra_hfill") {
- lex.nextToken();
- par->params().pextraHfill(lex.getInteger());
- } else if (token == "\\pextra_start_minipage") {
- lex.nextToken();
- par->params().pextraStartMinipage(lex.getInteger());
-#endif
-#endif
} else if (token == "\\labelwidthstring") {
lex.eatLine();
par->params().labelWidthString(lex.getString());
// do not delete this token, it is still needed!
} else if (token == "\\newline") {
-#ifndef NO_COMPABILITY
- if (!ert_comp.in_tabular && ert_comp.active) {
- ert_comp.contents += char(Paragraph::META_NEWLINE);
- } else {
- // Since we cannot know it this is only a regular
- // newline or a tabular cell delimter we have to
- // handle the ERT here.
- insertErtContents(par, pos, false);
-
- par->insertChar(pos, Paragraph::META_NEWLINE, font);
- ++pos;
- }
-#else
par->insertChar(pos, Paragraph::META_NEWLINE, font);
++pos;
-#endif
} else if (token == "\\LyXTable") {
-#ifndef NO_COMPABILITY
- ert_comp.in_tabular = true;
-#endif
Inset * inset = new InsetTabular(*this);
inset->read(this, lex);
par->insertInset(pos, inset, font);
}
par->bibkey->read(this, lex);
} else if (token == "\\the_end") {
-#ifndef NO_COMPABILITY
- //Â If we still have some ert active here we have to insert
- // it so we don't loose it. (Lgb)
- insertErtContents(par, pos);
-#endif
the_end_read = true;
-#ifndef NO_COMPABILITY
-#ifndef NO_PEXTRA_REALLY
- if (minipar == par)
- par = 0;
- minipar = parBeforeMinipage = 0;
-#endif
-#endif
} else {
-#ifndef NO_COMPABILITY
- if (ert_comp.active) {
- ert_comp.contents += token;
- } else {
-#endif
// This should be insurance for the future: (Asger)
++unknown_tokens;
lex.eatLine();
par->insertInset(pos, new_inset, LyXFont(LyXFont::ALL_INHERIT,
params.language));
-#ifndef NO_COMPABILITY
- }
-#endif
}
-#ifndef NO_COMPABILITY
-#ifndef NO_PEXTRA_REALLY
- // I wonder if we could use this blanket fix for all the
- // checkminipage cases...
- // don't forget about ert paragraphs and compatibility read for'em
- if (par && (par->size() || !ert_comp.contents.empty())) {
- // It is possible that this will check to often,
- // but that should not be an correctness issue.
- // Only a speed issue.
- checkminipage = true;
- }
-
- // now check if we have a minipage paragraph as at this
- // point we already read all the necessary data!
- // this cannot be done in layout because there we did
- // not read yet the paragraph PEXTRA-params (Jug)
- //
- // BEGIN pextra_minipage compability
- // This should be removed in 1.3.x (Lgb)
- // I don't think we should remove this so fast (Jug)
-
- // This compability code is not perfect. In a couple
- // of rand cases it fails. When the minipage par is
- // the first par in the document, and when there are
- // none or only one regular paragraphs after the
- // minipage. Currently I am not investing any effort
- // in fixing those cases.
-
-// lyxerr << "Call depth: " << call_depth << endl;
-// lyxerr << "Checkminipage: " << checkminipage << endl;
-
- if (checkminipage && (call_depth == 1)) {
- checkminipage = false;
- if (minipar && (minipar != par) &&
- (par->params().pextraType() == Paragraph::PEXTRA_MINIPAGE)) {
- lyxerr << "minipages in a row" << endl;
- if (par->params().pextraStartMinipage()) {
- lyxerr << "start new minipage" << endl;
- // minipages in a row
- par->previous()->next(0);
- par->previous(0);
-
- Paragraph * tmp = minipar;
- while (tmp) {
- tmp->params().pextraType(0);
- tmp->params().pextraWidth(string());
- tmp->params().pextraWidthp(string());
- tmp->params().pextraAlignment(0);
- tmp->params().pextraHfill(false);
- tmp->params().pextraStartMinipage(false);
- tmp = tmp->next();
- }
- // create a new paragraph to insert the
- // minipages in the following case
- if (par->params().pextraStartMinipage() &&
- !par->params().pextraHfill()) {
- Paragraph * p = new Paragraph;
- p->layout(params.getLyXTextClass().defaultLayoutName());
-
- p->previous(parBeforeMinipage);
- parBeforeMinipage->next(p);
- p->next(0);
- p->params().depth(parBeforeMinipage->params().depth());
- parBeforeMinipage = p;
- }
- InsetMinipage * mini = new InsetMinipage(params);
- mini->pos(static_cast<InsetMinipage::Position>(par->params().pextraAlignment()));
- mini->pageWidth(LyXLength(par->params().pextraWidth()));
- if (!par->params().pextraWidthp().empty()) {
- lyxerr << "WP:" << mini->pageWidth().asString() << endl;
- mini->pageWidth(LyXLength((par->params().pextraWidthp())+"col%"));
- }
- Paragraph * op = mini->firstParagraph();
- mini->inset.paragraph(par);
- //
- // and free the old ones!
- //
- while(op) {
- Paragraph * pp = op->next();
- delete op;
- op = pp;
- }
- // Insert the minipage last in the
- // previous paragraph.
- if (par->params().pextraHfill()) {
- parBeforeMinipage->insertChar
- (parBeforeMinipage->size(),
- Paragraph::META_HFILL, font);
- }
- parBeforeMinipage->insertInset
- (parBeforeMinipage->size(), mini, font);
-
- minipar = par;
- } else {
- lyxerr << "new minipage par" << endl;
- //nothing to do just continue reading
- }
-
- } else if (minipar && (minipar != par)) {
- lyxerr << "last minipage par read" << endl;
- // The last paragraph read was not part of a
- // minipage but the par linked list is...
- // So we need to remove the last par from the
- // rest
- if (par->previous())
- par->previous()->next(0);
- par->previous(parBeforeMinipage);
- parBeforeMinipage->next(par);
- Paragraph * tmp = minipar;
- while (tmp) {
- tmp->params().pextraType(0);
- tmp->params().pextraWidth(string());
- tmp->params().pextraWidthp(string());
- tmp->params().pextraAlignment(0);
- tmp->params().pextraHfill(false);
- tmp->params().pextraStartMinipage(false);
- tmp = tmp->next();
- }
- depth = parBeforeMinipage->params().depth();
- // and set this depth on the par as it has not been set already
- par->params().depth(depth);
- minipar = parBeforeMinipage = 0;
- } else if (!minipar &&
- (par->params().pextraType() == Paragraph::PEXTRA_MINIPAGE)) {
- // par is the first paragraph in a minipage
- lyxerr << "begin minipage" << endl;
- // To minimize problems for
- // the users we will insert
- // the first minipage in
- // a sequence of minipages
- // in its own paragraph.
- Paragraph * p = new Paragraph;
- p->layout(params.getLyXTextClass().defaultLayoutName());
- p->previous(par->previous());
- p->next(0);
- p->params().depth(depth);
- par->params().depth(0);
- depth = 0;
- if (par->previous())
- par->previous()->next(p);
- par->previous(0);
- parBeforeMinipage = p;
- minipar = par;
- if (!first_par || (first_par == par))
- first_par = p;
-
- InsetMinipage * mini = new InsetMinipage(params);
- mini->pos(static_cast<InsetMinipage::Position>(minipar->params().pextraAlignment()));
- mini->pageWidth(LyXLength(minipar->params().pextraWidth()));
- if (!par->params().pextraWidthp().empty()) {
- lyxerr << "WP:" << mini->pageWidth().asString() << endl;
- mini->pageWidth(LyXLength((par->params().pextraWidthp())+"col%"));
- }
-
- Paragraph * op = mini->firstParagraph();
- mini->inset.paragraph(minipar);
- //
- // and free the old ones!
- //
- while(op) {
- Paragraph * pp = op->next();
- delete op;
- op = pp;
- }
-
- // Insert the minipage last in the
- // previous paragraph.
- if (minipar->params().pextraHfill()) {
- parBeforeMinipage->insertChar
- (parBeforeMinipage->size(),
- Paragraph::META_HFILL, font);
- }
- parBeforeMinipage->insertInset
- (parBeforeMinipage->size(), mini, font);
- } else if (par->params().pextraType() == Paragraph::PEXTRA_INDENT) {
- par->params().leftIndent(LyXLength(par->params().pextraWidth()));
- if (!par->params().pextraWidthp().empty()) {
- par->params().leftIndent(LyXLength((par->params().pextraWidthp())+"col%"));
- }
- }
- }
- // End of pextra_minipage compability
- --call_depth;
-#endif
-#endif
return the_end_read;
}
cit != str.end(); ++cit) {
if (*cit == '\n') {
if (autobreakrows && (!par->empty() || layout->keepempty)) {
- par->breakParagraph(params, pos,
- layout->isEnvironment());
+ breakParagraph(params, par, pos,
+ layout->isEnvironment());
par = par->next();
pos = 0;
space_inserted = true;
inset = new InsetFoot(params);
} else if (tmptok == "Marginal") {
inset = new InsetMarginal(params);
+ } else if (tmptok == "OptArg") {
+ inset = new InsetOptArg(params);
} else if (tmptok == "Minipage") {
inset = new InsetMinipage(params);
} else if (tmptok == "Float") {
if (dot != string::npos)
tmp_format.erase(dot, 1);
file_format = strToInt(tmp_format);
+ //lyxerr << "format: " << file_format << endl;
if (file_format == LYX_FORMAT) {
// current format
} else if (file_format > LYX_FORMAT) {
_("Old LyX file format found. "
"Use LyX 0.10.x to read this!"));
return false;
- } else if (file_format < 220) {
+ } else {
string const command = "lyx2lyx "
+ QuoteName(filename_);
cmd_ret const ret = RunCommand(command);
// this will write out all the paragraphs
// using recursive descent.
- paragraphs.begin()->writeFile(this, ofs, params, depth);
+ ParagraphList::iterator pit = paragraphs.begin();
+ ParagraphList::iterator pend = paragraphs.end();
+ for (; pit != pend; ++pit)
+ pit->write(this, ofs, params, depth);
// Write marker that shows file is complete
ofs << "\n\\the_end" << endl;
}
}
+ if (!keys.empty())
+ return keys;
+
// Might be either using bibtex or a child has bibliography
- if (keys.empty()) {
- for (inset_iterator it = inset_const_iterator_begin();
- it != inset_const_iterator_end(); ++it) {
- // Search for Bibtex or Include inset
- if (it->lyxCode() == Inset::BIBTEX_CODE) {
- vector<StringPair> tmp =
- static_cast<InsetBibtex &>(*it).getKeys(this);
- keys.insert(keys.end(), tmp.begin(), tmp.end());
- } else if (it->lyxCode() == Inset::INCLUDE_CODE) {
- vector<StringPair> const tmp =
- static_cast<InsetInclude &>(*it).getKeys();
- keys.insert(keys.end(), tmp.begin(), tmp.end());
- }
+ for (inset_iterator it = inset_const_iterator_begin();
+ it != inset_const_iterator_end(); ++it) {
+ // Search for Bibtex or Include inset
+ if (it->lyxCode() == Inset::BIBTEX_CODE) {
+ vector<StringPair> tmp =
+ static_cast<InsetBibtex &>(*it).getKeys(this);
+ keys.insert(keys.end(), tmp.begin(), tmp.end());
+ } else if (it->lyxCode() == Inset::INCLUDE_CODE) {
+ vector<StringPair> const tmp =
+ static_cast<InsetInclude &>(*it).getKeys();
+ keys.insert(keys.end(), tmp.begin(), tmp.end());
}
}
bool operator==(Buffer::inset_iterator const & iter1,
- Buffer::inset_iterator const & iter2)
+ Buffer::inset_iterator const & iter2)
{
return iter1.pit == iter2.pit
&& (iter1.pit == iter1.pend || iter1.it == iter2.it);
bool operator!=(Buffer::inset_iterator const & iter1,
- Buffer::inset_iterator const & iter2)
+ Buffer::inset_iterator const & iter2)
{
return !(iter1 == iter2);
}
-