for (InsetList::iterator it = insetlist.begin();
it != insetlist.end(); ++it) {
- delete (*it).inset;
+ delete it->inset;
}
// ale970302
void Paragraph::writeFile(Buffer const * buf, ostream & os,
- BufferParams const & bparams,
- depth_type dth) const
+ BufferParams const & bparams,
+ depth_type dth) const
{
// The beginning or end of a deeper (i.e. nested) area?
if (dth != params().depth()) {
// Write font changes
LyXFont font2 = getFontSettings(bparams, i);
if (font2 != font1) {
- font2.lyxWriteChanges(font1, os);
+ font2.lyxWriteChanges(font1, bparams.language, os);
column = 0;
font1 = font2;
}
for (Pimpl::FontList::const_iterator cit = pimpl_->fontlist.begin();
cit != pimpl_->fontlist.end(); ++cit) {
- if ((*cit).font().noun() == LyXFont::ON) {
+ if (cit->font().noun() == LyXFont::ON) {
lyxerr[Debug::LATEX] << "font.noun: "
- << (*cit).font().noun()
+ << cit->font().noun()
<< endl;
features.noun = true;
lyxerr[Debug::LATEX] << "Noun enabled. Font: "
- << (*cit).font().stateText(0)
+ << cit->font().stateText(0)
<< endl;
}
- switch ((*cit).font().color()) {
+ switch (cit->font().color()) {
case LColor::none:
case LColor::inherit:
case LColor::ignore:
+ // probably we should put here all interface colors used for
+ // font displaying! For now I just add this ones I know of (Jug)
+ case LColor::latex:
+ case LColor::note:
break;
default:
features.color = true;
lyxerr[Debug::LATEX] << "Color enabled. Font: "
- << (*cit).font().stateText(0)
+ << cit->font().stateText(0)
<< endl;
}
- Language const * language = (*cit).font().language();
- if (language->babel() != doc_language->babel()) {
+ Language const * language = cit->font().language();
+ if (language != ignore_language &&
+ language != inherit_language &&
+ language->babel() != doc_language->babel())
+ {
features.UsedLanguages.insert(language);
lyxerr[Debug::LATEX] << "Found language "
<< language->babel() << endl;
// then the insets
for (InsetList::const_iterator cit = insetlist.begin();
cit != insetlist.end(); ++cit) {
- if ((*cit).inset)
- (*cit).inset->validate(features);
+ if (cit->inset)
+ cit->inset->validate(features);
}
}
lower_bound(insetlist.begin(),
insetlist.end(),
search_elem, Pimpl::matchIT());
- if (it != insetlist.end() && (*it).pos == pos)
- (*it).inset = 0;
+ if (it != insetlist.end() && it->pos == pos)
+ it->inset = 0;
} else {
minibuffer_inset = 0;
minibuffer_char = ' ';
bool Paragraph::insertFromMinibuffer(Paragraph::size_type pos)
{
if ((minibuffer_char == Paragraph::META_INSET) &&
- !insertInsetAllowed(minibuffer_inset))
+ !insetAllowed(minibuffer_inset->lyxCode()))
return false;
if (minibuffer_char == Paragraph::META_INSET)
insertInset(pos, minibuffer_inset, minibuffer_font);
- else
- insertChar(pos, minibuffer_char, minibuffer_font);
+ else {
+ LyXFont f = minibuffer_font;
+ if (checkInsertChar(f))
+ insertChar(pos, minibuffer_char, f);
+ }
return true;
}
}
+bool Paragraph::checkInsertChar(LyXFont & font)
+{
+ if (pimpl_->inset_owner)
+ return pimpl_->inset_owner->checkInsertChar(font);
+ return true;
+}
+
+
void Paragraph::insertChar(Paragraph::size_type pos,
Paragraph::value_type c)
{
}
-bool Paragraph::insertInsetAllowed(Inset * inset)
+bool Paragraph::insetAllowed(Inset::Code code)
{
//lyxerr << "Paragraph::InsertInsetAllowed" << endl;
if (pimpl_->inset_owner)
- return pimpl_->inset_owner->insertInsetAllowed(inset);
+ return pimpl_->inset_owner->insetAllowed(code);
return true;
}
InsetList::iterator it = lower_bound(insetlist.begin(),
insetlist.end(),
search_inset, Pimpl::matchIT());
- if (it != insetlist.end() && (*it).pos == pos)
- return (*it).inset;
+ if (it != insetlist.end() && it->pos == pos)
+ return it->inset;
lyxerr << "ERROR (Paragraph::GetInset): "
"Inset does not exist: " << pos << endl;
InsetList::const_iterator cit = lower_bound(insetlist.begin(),
insetlist.end(),
search_inset, Pimpl::matchIT());
- if (cit != insetlist.end() && (*cit).pos == pos)
- return (*cit).inset;
+ if (cit != insetlist.end() && cit->pos == pos)
+ return cit->inset;
lyxerr << "ERROR (Paragraph::GetInset): "
"Inset does not exist: " << pos << endl;
// Gets uninstantiated font setting at position.
LyXFont const Paragraph::getFontSettings(BufferParams const & bparams,
- Paragraph::size_type pos) const
+ Paragraph::size_type pos) const
{
lyx::Assert(pos <= size());
Pimpl::FontList::const_iterator cit = lower_bound(pimpl_->fontlist.begin(),
pimpl_->fontlist.end(),
search_font, Pimpl::matchFT());
- if (cit != pimpl_->fontlist.end())
- return (*cit).font();
-
- if (pos == size() && size())
- return getFontSettings(bparams, pos - 1);
-
- return LyXFont(LyXFont::ALL_INHERIT, getParLanguage(bparams));
+ LyXFont retfont;
+ if (cit != pimpl_->fontlist.end()) {
+ retfont = cit->font();
+ } else if (pos == size() && size()) {
+ retfont = getFontSettings(bparams, pos - 1);
+ } else
+ retfont = LyXFont(LyXFont::ALL_INHERIT, getParLanguage(bparams));
+ if (retfont.language() == inherit_language)
+ retfont.setLanguage(bparams.language);
+
+ return retfont;
}
else
layoutfont = layout.font;
tmpfont = getFontSettings(bparams, pos);
- tmpfont.realize(layoutfont);
+ tmpfont.realize(layoutfont, bparams.language);
} else {
// process layoutfont for pos == -1 and labelfont for pos < -1
if (pos == -1)
if (par) {
tmpfont.realize(textclasslist.
Style(bparams.textclass,
- par->getLayout()).font);
+ par->getLayout()).font, bparams.language);
par_depth = par->getDepth();
}
}
tmpfont.realize(textclasslist
.TextClass(bparams.textclass)
- .defaultfont());
+ .defaultfont(), bparams.language);
return tmpfont;
}
pimpl_->fontlist.end(),
start_search, Pimpl::matchFT());
cit != end_it; ++cit) {
- LyXFont::FONT_SIZE size = (*cit).font().size();
+ LyXFont::FONT_SIZE size = cit->font().size();
if (size > maxsize && size <= LyXFont::SIZE_HUGER)
maxsize = size;
}
}
-// return an string of the current word, and the end of the word in lastpos.
-string const Paragraph::getWord(Paragraph::size_type & lastpos) const
-{
- lyx::Assert(lastpos >= 0);
-
- // the current word is defined as starting at the first character
- // from the immediate left of lastpospos which meets the definition
- // of IsLetter(), continuing to the last character to the right
- // of this meeting IsLetter.
-
- string theword;
-
- // grab a word
-
- // move back until we have a letter
-
- //there's no real reason to have firstpos & lastpos as
- //separate variables as this is written, but maybe someon
- // will want to return firstpos in the future.
-
- //since someone might have typed a punctuation first
- int firstpos = lastpos;
-
- while ((firstpos >= 0) && !isLetter(firstpos))
- --firstpos;
-
- // now find the beginning by looking for a nonletter
-
- while ((firstpos>= 0) && isLetter(firstpos))
- --firstpos;
-
- // the above is now pointing to the preceeding non-letter
- ++firstpos;
- lastpos = firstpos;
-
- // so copy characters into theword until we get a nonletter
- // note that this can easily exceed lastpos, wich means
- // that if used in the middle of a word, the whole word
- // is included
-
- while (isLetter(lastpos)) theword += getChar(lastpos++);
-
- return theword;
-}
-
-
void Paragraph::setFont(Paragraph::size_type pos,
LyXFont const & font)
{
// create a new paragraph
Paragraph * tmp = new Paragraph(this);
// remember to set the inset_owner
- tmp->setInsetOwner(InInset());
+ tmp->setInsetOwner(inInset());
// this is an idea for a more userfriendly layout handling, I will
// see what the users say
// Find the entry.
for (InsetList::const_iterator cit = insetlist.begin();
cit != insetlist.end(); ++cit) {
- if ((*cit).inset == inset) {
- return (*cit).pos;
+ if (cit->inset == inset) {
+ return cit->pos;
}
}
if (inset == bibkey)
Language const * doc_language = bparams.language;
Language const * previous_language = previous_
? previous_->getParLanguage(bparams) : doc_language;
+ if (language == ignore_language || language == inherit_language)
+ lyxerr << "1:" << language->lang() << endl;
if (language->babel() != doc_language->babel() &&
language->babel() != previous_language->babel()) {
os << subst(lyxrc.language_command_begin, "$$lang",
}
if (bparams.inputenc == "auto" &&
- language->encoding() != previous_language->encoding()) {
+ language->encoding() != previous_language->encoding())
+ {
os << "\\inputencoding{"
<< language->encoding()->LatexName()
<< "}" << endl;
texrow.newline();
}
-
+
switch (style.latextype) {
case LATEX_COMMAND:
os << '\\'
os << "}";
if (language->babel() != doc_language->babel() &&
- (!next_
- || next_->getParLanguage(bparams)->babel() != language->babel())) {
+ (!next_ ||
+ next_->getParLanguage(bparams)->babel() != language->babel()))
+ {
os << endl
<< subst(lyxrc.language_command_end, "$$lang",
doc_language->babel());
// If we have an open font definition, we have to close it
if (open_font) {
+#ifdef FIXED_LANGUAGE_END_DETECTION
if (next_) {
running_font
.latexWriteEndChanges(os, basefont,
- next_->getFont(bparams,
- 0));
+ next_->getFont(bparams,
+ 0));
} else {
running_font.latexWriteEndChanges(os, basefont,
- basefont);
+ basefont);
}
+#else
+#ifdef WITH_WARNINGS
+#warning For now we ALWAYS have to close the foreign font settings if they are
+#warning there as we start another \selectlanguage with the next paragraph if
+#warning we are in need of this. This should be fixed sometime (Jug)
+#endif
+ running_font.latexWriteEndChanges(os, basefont, basefont);
+#endif
}
// Needed if there is an optional argument but no contents.
Language const *
Paragraph::getParLanguage(BufferParams const & bparams) const
{
- if (size() > 0)
- return getFirstFontSettings().language();
- else if (previous_)
+ if (size() > 0) {
+ Language const * lang = getFirstFontSettings().language();
+#warning We should make this somewhat better, any ideas? (Jug)
+ if (lang == inherit_language || lang == ignore_language)
+ lang = bparams.language;
+ return lang;
+ } else if (previous_)
return previous_->getParLanguage(bparams);
else
return bparams.language;
Language const * doc_language = bparams.language;
for (Pimpl::FontList::const_iterator cit = pimpl_->fontlist.begin();
cit != pimpl_->fontlist.end(); ++cit)
- if ((*cit).font().language() != doc_language)
+ if (cit->font().language() != inherit_language &&
+ cit->font().language() != ignore_language &&
+ cit->font().language() != doc_language)
return true;
return false;
}
s += c;
else if (c == META_INSET &&
getInset(i)->lyxCode() == Inset::MATH_CODE) {
- std::ostringstream ost;
+ ostringstream ost;
getInset(i)->ascii(buffer, ost);
s += subst(ost.str().c_str(),'\n',' ');
}
Paragraph::size_type beg,
Paragraph::size_type end)
{
- std::ostringstream ost;
+ ostringstream ost;
if (beg == 0 && !params().labelString().empty())
ost << params().labelString() << ' ';
pimpl_->inset_owner = i;
for (InsetList::const_iterator cit = insetlist.begin();
cit != insetlist.end(); ++cit) {
- if ((*cit).inset)
- (*cit).inset->setOwner(i);
+ if (cit->inset)
+ cit->inset->setOwner(i);
}
}
// then the insets
for (InsetList::const_iterator cit = insetlist.begin();
cit != insetlist.end(); ++cit) {
- if ((*cit).inset) {
- if ((*cit).inset->isTextInset()) {
+ if (cit->inset) {
+ if (cit->inset->isTextInset()) {
static_cast<UpdatableInset *>
- ((*cit).inset)->deleteLyXText(bv, true);
+ (cit->inset)->deleteLyXText(bv, true);
}
}
}
// then the insets
for (InsetList::const_iterator cit = insetlist.begin();
cit != insetlist.end(); ++cit) {
- if ((*cit).inset) {
- if ((*cit).inset->isTextInset()) {
+ if (cit->inset) {
+ if (cit->inset->isTextInset()) {
static_cast<UpdatableInset *>
- ((*cit).inset)->resizeLyXText(bv, true);
+ (cit->inset)->resizeLyXText(bv, true);
}
}
}
}
-Inset * Paragraph::InInset() const
+Inset * Paragraph::inInset() const
{
return pimpl_->inset_owner;
}
Paragraph::inset_iterator::inset_iterator(Paragraph::InsetList::iterator const & iter)
: it(iter)
-{
-
-}
+{}
Paragraph::inset_iterator Paragraph::inset_iterator_begin()
return pimpl_->params;
}
+
ParagraphParameters const & Paragraph::params() const
{
return pimpl_->params;
}
+
Paragraph * Paragraph::getParFromID(int id) const
{
return pimpl_->getParFromID(id);