#include <algorithm>
#include <fstream>
+#include <csignal>
#include "lyxparagraph.h"
#include "support/textutils.h"
#include "LaTeXFeatures.h"
#include "insets/insetinclude.h"
#include "insets/insetbib.h"
+#include "insets/insettext.h"
#include "support/filetools.h"
#include "lyx_gui_misc.h"
#include "texrow.h"
#include "support/lyxmanip.h"
+#include "BufferView.h"
using std::ostream;
using std::endl;
itemdepth = 0;
next = 0;
previous = 0;
+#ifndef NEW_INSETS
footnoteflag = LyXParagraph::NO_FOOTNOTE;
footnotekind = LyXParagraph::FOOTNOTE; // should not be needed
-
+#endif
align = LYX_ALIGN_BLOCK;
#ifndef NEW_TABULAR
previous = par;
previous->next = this;
// end
+#ifndef NEW_INSETS
footnoteflag = LyXParagraph::NO_FOOTNOTE;
footnotekind = LyXParagraph::FOOTNOTE;
-
+#endif
#ifndef NEW_TABULAR
/* table stuff -- begin*/
table = 0;
if (footnoteflag != LyXParagraph::NO_FOOTNOTE
|| !previous
- || previous->footnoteflag == LyXParagraph::NO_FOOTNOTE){
+ || previous->footnoteflag == LyXParagraph::NO_FOOTNOTE) {
// The beginning or the end of a footnote environment?
if (footflag != footnoteflag) {
<< (*cit).font.stateText(0)
<< endl;
}
-#if 0
+
Language const * language = (*cit).font.language();
if (language != doc_language) {
features.UsedLanguages.insert(language);
lyxerr[Debug::LATEX] << "Found language "
- << language->lang << endl;
+ << language->lang() << endl;
}
-#endif
- }
-
- // This is not efficient. I plan to use the code above, after I
- // change the fontlist handling.
- for (size_type i = 0; i < size(); ++i) {
- Language const * language =
- GetFontSettings(params, i).language();
- if (language != doc_language)
- features.UsedLanguages.insert(language);
}
// then the insets
if ((minibuffer_char == LyXParagraph::META_INSET) &&
!InsertInsetAllowed(minibuffer_inset))
return false;
+#ifdef NEW_WAY
+ if (minibuffer_char == LyXParagraph::META_INSET)
+ InsertInset(pos, minibuffer_inset, minibuffer_font);
+ else
+ InsertChar(pos, minibuffer_char, minibuffer_font);
+#else
InsertChar(pos, minibuffer_char);
SetFont(pos, minibuffer_font);
if (minibuffer_char == LyXParagraph::META_INSET)
InsertInset(pos, minibuffer_inset);
+#endif
return true;
}
// > because last is the next unused position, and you can
// use it if you want
if (pos > size()) {
+#ifndef NEW_INSETS
if (next && next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE)
NextAfterFootnote()->Erase(pos - text.size() - 1);
else
+#endif
lyxerr.debug() << "ERROR (LyXParagraph::Erase): "
"position does not exist." << endl;
return;
}
}
text.erase(text.begin() + pos);
+
// Erase entries in the tables.
- for (FontList::iterator it = fontlist.begin();
- it != fontlist.end(); ++it) {
- if (pos >= (*it).pos && pos <= (*it).pos_end) {
- if ((*it).pos == (*it).pos_end) {
- // If it is a multi-character font
- // entry, we just make it smaller
- // (see update below), otherwise we
- // should delete it.
- fontlist.erase(it);
- break;
- }
+ FontList::iterator it = lower_bound(fontlist.begin(),
+ fontlist.end(),
+ pos, matchFT());
+ if (it != fontlist.end() && (*it).pos == pos &&
+ (pos == 0 ||
+ (it != fontlist.begin() && (*(it-1)).pos == pos - 1))) {
+ // If it is a multi-character font
+ // entry, we just make it smaller
+ // (see update below), otherwise we
+ // should delete it.
+ unsigned int i = it - fontlist.begin();
+ fontlist.erase(fontlist.begin() + i);
+ it = fontlist.begin() + i;
+ if (i > 0 && i < fontlist.size() &&
+ fontlist[i-1].font == fontlist[i].font) {
+ fontlist.erase(fontlist.begin() + i-1);
+ it = fontlist.begin() + i-1;
}
}
+
// Update all other entries.
- for (FontList::iterator it = fontlist.begin();
- it != fontlist.end(); ++it) {
- if ((*it).pos > pos)
- (*it).pos--;
- if ((*it).pos_end >= pos)
- (*it).pos_end--;
- }
+ for (; it != fontlist.end(); ++it)
+ --(*it).pos;
// Update the inset table.
for (InsetList::iterator it = upper_bound(insetlist.begin(),
void LyXParagraph::InsertChar(LyXParagraph::size_type pos, char c)
{
+#ifndef NEW_WAY
// > because last is the next unused position, and you can
// use it if you want
if (pos > size()) {
+#ifndef NEW_INSETS
if (next
&& next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE)
NextAfterFootnote()->InsertChar(pos - text.size() - 1,
c);
else
+#endif
lyxerr.debug() << "ERROR (LyXParagraph::InsertChar): "
"position does not exist." << endl;
return;
}
text.insert(text.begin() + pos, c);
// Update the font table.
- for (FontList::iterator it = fontlist.begin();
- it != fontlist.end(); ++it) {
- if ((*it).pos >= pos)
- (*it).pos++;
- if ((*it).pos_end >= pos)
- (*it).pos_end++;
+ for (FontList::iterator it = lower_bound(fontlist.begin(),
+ fontlist.end(),
+ pos, matchFT());
+ it != fontlist.end(); ++it)
+ ++(*it).pos;
+
+ // Update the inset table.
+ for (InsetList::iterator it = lower_bound(insetlist.begin(),
+ insetlist.end(),
+ pos, matchIT());
+ it != insetlist.end(); ++it)
+ ++(*it).pos;
+#else
+ LyXFont f(LyXFont::ALL_INHERIT);
+ InsertChar(pos, c, f);
+#endif
+}
+
+
+#ifdef NEW_WAY
+void LyXParagraph::InsertChar(LyXParagraph::size_type pos,
+ char c, LyXFont const & font)
+{
+ // > because last is the next unused position, and you can
+ // use it if you want
+ if (pos > size()) {
+#ifndef NEW_INSETS
+ if (next
+ && next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE)
+ NextAfterFootnote()->InsertChar(pos - text.size() - 1,
+ c);
+ else
+#endif
+ lyxerr.debug() << "ERROR (LyXParagraph::InsertChar): "
+ "position does not exist." << endl;
+ return;
}
+ text.insert(text.begin() + pos, c);
+ // Update the font table.
+ for (FontList::iterator it = lower_bound(fontlist.begin(),
+ fontlist.end(),
+ pos, matchFT());
+ it != fontlist.end(); ++it)
+ ++(*it).pos;
// Update the inset table.
for (InsetList::iterator it = lower_bound(insetlist.begin(),
pos, matchIT());
it != insetlist.end(); ++it)
++(*it).pos;
+
+ SetFont(pos, font);
}
+#endif
void LyXParagraph::InsertInset(LyXParagraph::size_type pos,
Inset * inset)
{
+#ifdef NEW_WAY
+ LyXFont f(LyXFont::ALL_INHERIT);
+ InsertInset(pos, inset, f);
+#else
// > because last is the next unused position, and you can
// use it if you want
if (pos > size()) {
+#ifndef NEW_INSETS
if (next
&& next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE)
NextAfterFootnote()
->InsertInset(pos - text.size() - 1, inset);
- else
+ else
+#endif
lyxerr << "ERROR (LyXParagraph::InsertInset): "
"position does not exist: " << pos << endl;
return;
if (inset_owner)
inset->setOwner(inset_owner);
}
+#endif
}
+#ifdef NEW_WAY
+void LyXParagraph::InsertInset(LyXParagraph::size_type pos,
+ Inset * inset, LyXFont const & font)
+{
+ Assert(inset);
+
+ // > because last is the next unused position, and you can
+ // use it if you want
+ if (pos > size()) {
+#ifndef NEW_INSETS
+ if (next
+ && next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE)
+ NextAfterFootnote()
+ ->InsertInset(pos - text.size() - 1,
+ inset, font);
+ else
+#endif
+ lyxerr << "ERROR (LyXParagraph::InsertInset): "
+ "position does not exist: " << pos << endl;
+ return;
+ }
+
+ InsertChar(pos, META_INSET, font);
+ Assert(text[pos] == META_INSET);
+
+ // Add a new entry in the inset table.
+ InsetList::iterator it = lower_bound(insetlist.begin(),
+ insetlist.end(),
+ pos, matchIT());
+ if (it != insetlist.end() && (*it).pos == pos)
+ lyxerr << "ERROR (LyXParagraph::InsertInset): "
+ "there is an inset in position: " << pos << endl;
+ else
+ insetlist.insert(it, InsetTable(pos, inset));
+ if (inset_owner)
+ inset->setOwner(inset_owner);
+}
+#endif
+
+
bool LyXParagraph::InsertInsetAllowed(Inset * inset)
{
if (inset_owner)
Inset * LyXParagraph::GetInset(LyXParagraph::size_type pos)
{
if (pos >= size()) {
+#ifndef NEW_INSETS
if (next
&& next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE)
return NextAfterFootnote()
->GetInset(pos - text.size() - 1);
- else {
+ else
+#endif
lyxerr << "ERROR (LyXParagraph::GetInset): "
"position does not exist: "
<< pos << endl;
- }
+
return 0;
}
// Find the inset.
lyxerr << "ERROR (LyXParagraph::GetInset): "
"Inset does not exist: " << pos << endl;
+ //::raise(SIGSTOP);
+
// text[pos] = ' '; // WHY!!! does this set the pos to ' '????
// Did this commenting out introduce a bug? So far I have not
// see any, please enlighten me. (Lgb)
Inset const * LyXParagraph::GetInset(LyXParagraph::size_type pos) const
{
if (pos >= size()) {
+#ifndef NEW_INSETS
if (next
&& next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE)
return NextAfterFootnote()
->GetInset(pos - text.size() - 1);
- else {
+ else
+#endif
lyxerr << "ERROR (LyXParagraph::GetInset): "
"position does not exist: "
<< pos << endl;
- }
+
return 0;
}
// Find the inset.
lyxerr << "ERROR (LyXParagraph::GetInset): "
"Inset does not exist: " << pos << endl;
+ //::raise(SIGSTOP);
//text[pos] = ' '; // WHY!!! does this set the pos to ' '????
// Did this commenting out introduce a bug? So far I have not
// see any, please enlighten me. (Lgb)
LyXParagraph::size_type pos) const
{
if (pos < size()) {
-#ifdef SORTED_FONT_LIST
- for (FontList::const_iterator cit = fontlist.begin();
- cit != fontlist.end() && pos <= (*cit).pos_end; ++cit)
- if (pos >= (*cit).pos)
- return (*cit).font;
-#else
- for (FontList::const_iterator cit = fontlist.begin();
- cit != fontlist.end(); ++cit)
- if (pos >= (*cit).pos && pos <= (*cit).pos_end)
- return (*cit).font;
-#endif
+ FontList::const_iterator cit = lower_bound(fontlist.begin(),
+ fontlist.end(),
+ pos, matchFT());
+ if (cit != fontlist.end())
+ return (*cit).font;
}
// > because last is the next unused position, and you can
// use it if you want
else if (pos > size()) {
+#ifndef NEW_INSETS
if (next
&& next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE)
return NextAfterFootnote()
->GetFontSettings(bparams,
pos - text.size() - 1);
- else {
+ else
+#endif
// Why is it an error to ask for the font of a
// position that does not exist? Would it be
// enough for this to be enabled on debug?
"position does not exist. "
<< pos << " (" << static_cast<int>(pos)
<< ")" << endl;
- }
} else if (pos > 0) {
return GetFontSettings(bparams, pos - 1);
} else // pos = size() = 0
LyXFont LyXParagraph::GetFirstFontSettings() const
{
if (size() > 0) {
-#ifdef SORTED_FONT_LIST
- if (!fontlist.empty() && fontlist.front().pos == 0)
- return fontlist.front().font;
-#else
- for (FontList::const_iterator cit = fontlist.begin();
- cit != fontlist.end(); ++cit)
- if (0 >= (*cit).pos && 0 <= (*cit).pos_end)
- return (*cit).font;
-#endif
- } else if (next && next->footnoteflag != LyXParagraph::NO_FOOTNOTE)
+ if (!fontlist.empty())
+ return fontlist[0].font;
+ }
+
+#ifndef NEW_INSETS
+ else if (next && next->footnoteflag != LyXParagraph::NO_FOOTNOTE)
return NextAfterFootnote()->GetFirstFontSettings();
+#endif
return LyXFont(LyXFont::ALL_INHERIT);
}
LyXParagraph::size_type endpos) const
{
LyXFont::FONT_SIZE maxsize = LyXFont::SIZE_TINY;
- for (FontList::const_iterator cit = fontlist.begin();
- cit != fontlist.end(); ++cit) {
- if (startpos <= (*cit).pos_end && endpos >= (*cit).pos) {
- LyXFont::FONT_SIZE size = (*cit).font.size();
- if (size > maxsize && size <= LyXFont::SIZE_HUGER)
- maxsize = size;
- }
+ if (fontlist.empty())
+ return maxsize;
+
+ FontList::const_iterator end_it = lower_bound(fontlist.begin(),
+ fontlist.end(),
+ endpos, matchFT());
+ if (end_it != fontlist.end())
+ ++end_it;
+
+ for (FontList::const_iterator cit = lower_bound(fontlist.begin(),
+ fontlist.end(),
+ startpos, matchFT());
+ cit != end_it; ++cit) {
+ LyXFont::FONT_SIZE size = (*cit).font.size();
+ if (size > maxsize && size <= LyXFont::SIZE_HUGER)
+ maxsize = size;
}
return maxsize;
}
// > because last is the next unused position, and you can
// use it if you want
else if (pos > size()) {
+#ifndef NEW_INSETS
if (next && next->footnoteflag != LyXParagraph::NO_FOOTNOTE)
return NextAfterFootnote()
->GetChar(pos - text.size() - 1);
- else {
+ else
+#endif
+ {
lyxerr << "ERROR (LyXParagraph::GetChar): "
"position does not exist."
<< pos << " (" << static_cast<int>(pos)
// Assert(false); // This triggers sometimes...
// Why?
}
+
return '\0';
- } else {
+ }
+
+#ifndef NEW_INSETS
+ else {
// We should have a footnote environment.
if (!next || next->footnoteflag == LyXParagraph::NO_FOOTNOTE) {
// Notice that LyX does request the
}
return '\0'; // to shut up gcc
}
+#endif
}
// > because last is the next unused position, and you can
// use it if you want
else if (pos > size()) {
+#ifndef NEW_INSETS
if (next && next->footnoteflag != LyXParagraph::NO_FOOTNOTE)
return NextAfterFootnote()
->GetChar(pos - text.size() - 1);
- else {
+ else
+#endif
+ {
lyxerr << "ERROR (LyXParagraph::GetChar const): "
"position does not exist."
<< pos << " (" << static_cast<int>(pos)
Assert(false);
}
return '\0';
- } else {
+ }
+#ifndef NEW_INSETS
+ else {
// We should have a footnote environment.
if (!next || next->footnoteflag == LyXParagraph::NO_FOOTNOTE) {
// Notice that LyX does request the
}
return '\0'; // to shut up gcc
}
+#endif
}
LyXParagraph::size_type LyXParagraph::Last() const
{
+#ifndef NEW_INSETS
if (next && next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE)
return text.size() + NextAfterFootnote()->Last() + 1;
// the 1 is the symbol
// for the footnote
else
+#endif
return text.size();
}
// > because last is the next unused position, and you can
// use it if you want
if (pos > size()) {
+#ifndef NEW_INSETS
if (next
&& next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE)
return NextAfterFootnote()
->ParFromPos(pos - text.size() - 1);
- else
+ else
+#endif
lyxerr << "ERROR (LyXParagraph::ParFromPos): "
"position does not exist." << endl;
return this;
// > because last is the next unused position, and you can
// use it if you want
if (pos > size()) {
+#ifndef NEW_INSETS
if (next
&& next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE)
return NextAfterFootnote()
->PositionInParFromPos(pos - text.size() - 1);
- else
+ else
+#endif
lyxerr <<
"ERROR (LyXParagraph::PositionInParFromPos): "
"position does not exist." << endl;
// > because last is the next unused position, and you can
// use it if you want
if (pos > size()) {
+#ifndef NEW_INSETS
if (next &&
next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) {
NextAfterFootnote()->SetFont(pos - text.size() - 1,
font);
- } else {
+ } else
+#endif
lyxerr << "ERROR (LyXParagraph::SetFont): "
"position does not exist." << endl;
- }
+
return;
}
- LyXFont patternfont(LyXFont::ALL_INHERIT);
// First, reduce font against layout/label font
// Update: The SetCharFont() routine in text2.C already
// No need to simplify this because it will disappear
// in a new kernel. (Asger)
// Next search font table
- FontList::iterator tmp = fontlist.begin();
- for (; tmp != fontlist.end(); ++tmp) {
- if (pos >= (*tmp).pos && pos <= (*tmp).pos_end) {
- break;
- }
- }
- if (tmp == fontlist.end()) { // !found
- // if we did not find a font entry, but if the font at hand
- // is the same as default, we just forget it
- if (font == patternfont) return;
-
- // ok, we did not find a font entry. But maybe there is exactly
- // the needed font ientry one position left
- FontList::iterator tmp2 = fontlist.begin();
- for (; tmp2 != fontlist.end(); ++tmp2) {
- if (pos - 1 >= (*tmp2).pos
- && pos - 1 <= (*tmp2).pos_end)
- break;
- }
- if (tmp2 != fontlist.end()) {
- // ok there is one, maybe it is exactly
- // the needed font
- if ((*tmp2).font == font) {
- // put the position under the font
- (*tmp2).pos_end++;
- return;
- }
- }
- // Add a new entry in the
- // fontlist for the position
- FontTable ft;
- ft.pos = pos;
- ft.pos_end = pos;
- ft.font = font; // or patternfont
- // It seems that using font instead of patternfont here
- // fixes all the problems. This also surfaces a "bug" in
- // the old code.
- fontlist.insert(fontlist.begin(), ft);
- } else if ((*tmp).pos != (*tmp).pos_end) { // we found a font entry. maybe we have to split it and create a new one.
-
-// more than one character
- if (pos == (*tmp).pos) {
- // maybe we should enlarge the left fonttable
- FontList::iterator tmp2 = fontlist.begin();
- for (; tmp2 != fontlist.end(); ++tmp2) {
- if (pos - 1 >= (*tmp2).pos
- && pos - 1 <= (*tmp2).pos_end)
- break;
- }
- // Is there is one, and is it exactly
- // the needed font?
- if (tmp2 != fontlist.end() &&
- (*tmp2).font == font) {
- // Put the position under the font
- (*tmp2).pos_end++;
- (*tmp).pos++;
- return;
- }
- // Add a new entry in the
- // fontlist for the position
- FontTable ft;
- ft.pos = pos + 1;
- ft.pos_end = (*tmp).pos_end;
- ft.font = (*tmp).font;
- (*tmp).pos_end = pos;
- (*tmp).font = font;
- fontlist.insert(fontlist.begin(), ft);
- } else if (pos == (*tmp).pos_end) {
- // Add a new entry in the
- // fontlist for the position
- FontTable ft;
- ft.pos = (*tmp).pos;
- ft.pos_end = (*tmp).pos_end - 1;
- ft.font = (*tmp).font;
- (*tmp).pos = (*tmp).pos_end;
- (*tmp).font = font;
- fontlist.insert(fontlist.begin(), ft);
- } else {
- // Add a new entry in the
- // fontlist for the position
- FontTable ft;
- ft.pos = (*tmp).pos;
- ft.pos_end = pos - 1;
- ft.font = (*tmp).font;
-
- FontTable ft2;
- ft2.pos = pos + 1;
- ft2.pos_end = (*tmp).pos_end;
- ft2.font = (*tmp).font;
-
- (*tmp).pos = pos;
- (*tmp).pos_end = pos;
- (*tmp).font = font;
-
- fontlist.insert(fontlist.begin(), ft);
- fontlist.insert(fontlist.begin(), ft2);
- }
- } else {
- (*tmp).font = font;
+ FontList::iterator it = lower_bound(fontlist.begin(),
+ fontlist.end(),
+ pos, matchFT());
+ unsigned int i = it - fontlist.begin();
+ bool notfound = it == fontlist.end();
+
+ if (!notfound && fontlist[i].font == font)
+ return;
+
+ bool begin = pos == 0 || notfound ||
+ (i > 0 && fontlist[i-1].pos == pos - 1);
+ // Is position pos is a beginning of a font block?
+ bool end = !notfound && fontlist[i].pos == pos;
+ // Is position pos is the end of a font block?
+ if (begin && end) { // A single char block
+ if (i+1 < fontlist.size() &&
+ fontlist[i+1].font == font) {
+ // Merge the singleton block with the next block
+ fontlist.erase(fontlist.begin() + i);
+ if (i > 0 && fontlist[i-1].font == font)
+ fontlist.erase(fontlist.begin() + i-1);
+ } else if (i > 0 && fontlist[i-1].font == font) {
+ // Merge the singleton block with the previous block
+ fontlist[i-1].pos = pos;
+ fontlist.erase(fontlist.begin() + i);
+ } else
+ fontlist[i].font = font;
+ } else if (begin) {
+ if (i > 0 && fontlist[i-1].font == font)
+ fontlist[i-1].pos = pos;
+ else
+ fontlist.insert(fontlist.begin() + i,
+ FontTable(pos, font));
+ } else if (end) {
+ fontlist[i].pos = pos - 1;
+ if (!(i+1 < fontlist.size() &&
+ fontlist[i+1].font == font))
+ fontlist.insert(fontlist.begin() + i+1,
+ FontTable(pos, font));
+ } else { // The general case. The block is splitted into 3 blocks
+ fontlist.insert(fontlist.begin() + i,
+ FontTable(pos - 1, fontlist[i].font));
+ fontlist.insert(fontlist.begin() + i+1, FontTable(pos, font));
}
}
// This function is able to hide closed footnotes.
LyXParagraph * LyXParagraph::Next()
{
+#ifndef NEW_INSETS
if (next && next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) {
LyXParagraph * tmp = next;
while (tmp
else
return next; // This should never happen!
} else
+#endif
return next;
}
LyXParagraph * LyXParagraph::NextAfterFootnote()
{
+#ifndef NEW_INSETS
if (next && next->footnoteflag != LyXParagraph::NO_FOOTNOTE) {
LyXParagraph * tmp = next;
while (tmp && tmp->footnoteflag != LyXParagraph::NO_FOOTNOTE)
else
return next; // This should never happen!
} else
+#endif
return next;
}
LyXParagraph const * LyXParagraph::NextAfterFootnote() const
{
+#ifndef NEW_INSETS
if (next && next->footnoteflag != LyXParagraph::NO_FOOTNOTE) {
LyXParagraph * tmp = next;
while (tmp && tmp->footnoteflag != LyXParagraph::NO_FOOTNOTE)
else
return next; // This should never happen!
} else
+#endif
return next;
}
LyXParagraph * LyXParagraph::PreviousBeforeFootnote()
{
+#ifndef NEW_INSETS
LyXParagraph * tmp;
if (previous && previous->footnoteflag != LyXParagraph::NO_FOOTNOTE) {
tmp = previous;
else
return previous; // This should never happen!
} else
+#endif
return previous;
}
LyXParagraph * LyXParagraph::LastPhysicalPar()
{
+#ifndef NEW_INSETS
if (footnoteflag != LyXParagraph::NO_FOOTNOTE)
return this;
tmp = tmp->NextAfterFootnote();
return tmp;
+#else
+ return this;
+#endif
}
LyXParagraph const * LyXParagraph::LastPhysicalPar() const
{
+#ifndef NEW_INSETS
if (footnoteflag != LyXParagraph::NO_FOOTNOTE)
return this;
&& tmp->next->footnoteflag != LyXParagraph::NO_FOOTNOTE)
tmp = tmp->NextAfterFootnote();
- return tmp;
+ return tmp;
+#else
+ return this;
+#endif
}
LyXParagraph * LyXParagraph::FirstPhysicalPar()
{
+#ifndef NEW_INSETS
if (!IsDummy())
return this;
LyXParagraph * tmppar = this;
return this;
} else
return tmppar;
+#else
+ return this;
+#endif
}
LyXParagraph const * LyXParagraph::FirstPhysicalPar() const
{
+#ifndef NEW_INSETS
if (!IsDummy())
return this;
LyXParagraph const * tmppar = this;
return this;
} else
return tmppar;
+#else
+ return this;
+#endif
}
LyXParagraph * tmp = previous;
if (!tmp)
return tmp;
-
+
+#ifndef NEW_INSETS
if (tmp->previous
&& tmp->previous->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) {
tmp = tmp->previous;
else
return previous;
} else
+#endif
return previous;
}
LyXParagraph * tmp = previous;
if (!tmp)
return tmp;
-
+#ifndef NEW_INSETS
if (tmp->previous
&& tmp->previous->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) {
tmp = tmp->previous;
else
return previous;
} else
+#endif
return previous;
}
LyXParagraph * firstpar = FirstPhysicalPar();
LyXParagraph * tmp = new LyXParagraph(par);
-
+
+#ifndef NEW_INSETS
tmp->footnoteflag = footnoteflag;
tmp->footnotekind = footnotekind;
-
+#endif
// this is an idea for a more userfriendly layout handling, I will
// see what the users say
void LyXParagraph::MakeSameLayout(LyXParagraph const * par)
{
par = par->FirstPhysicalPar();
+#ifndef NEW_INSETS
footnoteflag = par->footnoteflag;
footnotekind = par->footnotekind;
-
+#endif
layout = par->layout;
align = par-> align;
SetLabelWidthString(par->labelwidthstring);
}
+#ifndef NEW_INSETS
LyXParagraph * LyXParagraph::FirstSelfrowPar()
{
LyXParagraph * tmppar = this;
else
return tmppar;
}
+#endif
+
int LyXParagraph::StripLeadingSpaces(LyXTextClassList::size_type tclass)
{
par = par->FirstPhysicalPar();
return (
+#ifndef NEW_INSETS
par->footnoteflag == footnoteflag &&
par->footnotekind == footnotekind &&
-
+#endif
par->layout == layout &&
par->align == align &&
}
// delete the next paragraph
- LyXParagraph *ppar = the_next->previous;
- LyXParagraph *npar = the_next->next;
+ LyXParagraph * ppar = the_next->previous;
+ LyXParagraph * npar = the_next->next;
delete the_next;
ppar->next = npar;
}
+#ifndef NEW_INSETS
void LyXParagraph::OpenFootnote(LyXParagraph::size_type pos)
{
LyXParagraph * par = ParFromPos(pos);
par = par->next;
}
}
+#endif
int LyXParagraph::GetEndLabel(BufferParams const & bparams) const
{
bool need_par = SimpleTeXOnePar(buf, bparams, os, texrow, moving_arg);
+#ifndef NEW_INSETS
// Spit out footnotes
LyXParagraph * par = next;
if (lyxrc.rtl_support) {
par = par->next;
}
}
+#endif
// Make sure that \\par is done with the font of the last
// character if this has another size as the default.
}
-#if 0
-bool LyXParagraph::RoffContTableRows(ostream & os,
- LyXParagraph::size_type i,
- int actcell)
-{
- if (!table)
- return false;
-
- LyXFont font1(LyXFont::ALL_INHERIT);
- LyXFont font2;
- Inset * inset;
- char c;
-
- string fname2 = TmpFileName(string(), "RAT2");
- int lastpos = i;
- int cell = table->CellHasContRow(actcell);
- ++actcell;
- while(cell >= 0) {
- // first find the right position
- i = lastpos;
- for (; i < size() && actcell < cell; ++i) {
- c = GetChar(i);
- if (c == LyXParagraph::META_NEWLINE)
- ++actcell;
- }
- lastpos = i;
- c = GetChar(i);
- if ((c != ' ') && (c != LyXParagraph::META_NEWLINE))
- os << " ";
- for (; i < size()
- && (c = GetChar(i)) != LyXParagraph::META_NEWLINE;
- ++i) {
- font2 = GetFontSettings(i);
- if (font1.latex() != font2.latex()) {
- if (font2.latex() != LyXFont::OFF)
- continue;
- }
- c = GetChar(i);
- switch (c) {
- case LyXParagraph::META_INSET:
- if ((inset = GetInset(i))) {
-#ifdef HAVE_SSTREAM
- stringstream ss(ios::in | ios::out);
- inset->Ascii(buffer, ss);
- ss.seekp(0);
- ss.get(c);
- while (!ss) {
- if (c == '\\')
- os << "\\\\";
- else
- os << c;
- ss.get(c);
- }
-#else
- strstream ss;
- inset->Ascii(buffer, ss);
- ss.seekp(0);
- ss.get(c);
- while (!ss) {
- if (c == '\\')
- os << "\\\\";
- else
- os << c;
- ss.get(c);
- }
- delete [] ss.str();
-#endif
- }
- break;
- case LyXParagraph::META_NEWLINE:
- break;
- case LyXParagraph::META_HFILL:
- break;
- case '\\':
- os << "\\\\";
- break;
- default:
- if (c != '\0')
- os << c;
- else
- lyxerr.debug() << "RoffAsciiTable: "
- "NULL char in structure."
- << endl;
- break;
- }
- }
- cell = table->CellHasContRow(actcell);
- }
- return true;
-}
-#endif
-
-
LyXParagraph * LyXParagraph::TeXDeeper(Buffer const * buf,
BufferParams const & bparams,
ostream & os, TexRow & texrow,
}
+#ifndef NEW_INSETS
LyXParagraph * LyXParagraph::TeXFootnote(Buffer const * buf,
BufferParams const & bparams,
ostream & os, TexRow & texrow,
return (footnoteflag == LyXParagraph::NO_FOOTNOTE && previous
&& previous->footnoteflag != LyXParagraph::NO_FOOTNOTE);
}
-
+#endif
void LyXParagraph::SetPExtraType(BufferParams const & bparams,
int type, char const * width,
}
}
+#ifndef NEW_INSETS
if (next && next->footnoteflag != LyXParagraph::NO_FOOTNOTE
&& footnoteflag == LyXParagraph::NO_FOOTNOTE)
s += NextAfterFootnote()->String(buffer, false);
- if (!IsDummy()) {
+ if (!IsDummy())
+#endif
+ {
if (isRightToLeftPar(bparams))
reverse(s.begin() + len,s.end());
}
return s;
}
+
+
+void LyXParagraph::SetInsetOwner(Inset *i)
+{
+ inset_owner = i;
+ for (InsetList::const_iterator cit = insetlist.begin();
+ cit != insetlist.end(); ++cit) {
+ if ((*cit).inset)
+ (*cit).inset->setOwner(i);
+ }
+}
+
+
+void LyXParagraph::deleteInsetsLyXText(BufferView * bv)
+{
+ // then the insets
+ for (InsetList::const_iterator cit = insetlist.begin();
+ cit != insetlist.end(); ++cit) {
+ if ((*cit).inset) {
+ if ((*cit).inset->IsTextInset()) {
+ static_cast<InsetText *>((*cit).inset)->
+ deleteLyXText(bv);
+ }
+ }
+ }
+}