/// specified by the latex macro \p ltx, to \p os starting from \p i.
/// \return the number of characters written.
int writeScriptChars(odocstream & os, docstring const & ltx,
- Change &, Encoding const &, pos_type & i);
+ Change const &, Encoding const &, pos_type & i);
/// This could go to ParagraphParameters if we want to.
int startTeXParParams(BufferParams const &, odocstream &, TexRow &,
///
void latexSpecialChar(
odocstream & os,
- OutputParams & runparams,
- Font & running_font,
- Change & running_change,
+ OutputParams const & runparams,
+ Font const & running_font,
+ Change const & running_change,
Layout const & style,
pos_type & i,
unsigned int & column);
bool latexSpecialT1(
char_type const c,
odocstream & os,
- pos_type & i,
+ pos_type i,
unsigned int & column);
///
bool latexSpecialTypewriter(
char_type const c,
odocstream & os,
- pos_type & i,
+ pos_type i,
unsigned int & column);
///
bool latexSpecialPhrase(
odocstream & os,
pos_type & i,
unsigned int & column,
- OutputParams & runparams);
+ OutputParams const & runparams);
///
void validate(LaTeXFeatures & features,
// Paragraph::insertInset() can be used in cut/copy/paste operation where
// d->inset_owner_ is not set yet.
- if (d->inset_owner_ && d->inset_owner_->insetAllowed(inset->lyxCode()))
+ if (d->inset_owner_ && !d->inset_owner_->insetAllowed(inset->lyxCode()))
return false;
d->insertChar(pos, META_INSET, change);
int Paragraph::Private::writeScriptChars(odocstream & os,
docstring const & ltx,
- Change & runningChange,
+ Change const & runningChange,
Encoding const & encoding,
pos_type & i)
{
void Paragraph::Private::latexSpecialChar(
odocstream & os,
- OutputParams & runparams,
- Font & running_font,
- Change & running_change,
+ OutputParams const & runparams,
+ Font const & running_font,
+ Change const & running_change,
Layout const & style,
pos_type & i,
unsigned int & column)
bool Paragraph::Private::latexSpecialT1(char_type const c, odocstream & os,
- pos_type & i, unsigned int & column)
+ pos_type i, unsigned int & column)
{
switch (c) {
case '>':
bool Paragraph::Private::latexSpecialTypewriter(char_type const c, odocstream & os,
- pos_type & i, unsigned int & column)
+ pos_type i, unsigned int & column)
{
switch (c) {
case '-':
bool Paragraph::Private::latexSpecialPhrase(odocstream & os, pos_type & i,
- unsigned int & column, OutputParams & runparams)
+ unsigned int & column, OutputParams const & runparams)
{
// FIXME: if we have "LaTeX" with a font
// change in the middle (before the 'T', then
break;
// Write font changes
- Font font2 = getFontSettings(bparams, i);
+ Font const & font2 = getFontSettings(bparams, i);
if (font2 != font1) {
font2.lyxWriteChanges(font1, os);
column = 0;
}
// Gets uninstantiated font setting at position.
-Font const Paragraph::getFontSettings(BufferParams const & bparams,
+Font const & Paragraph::getFontSettings(BufferParams const & bparams,
pos_type pos) const
{
if (pos > size()) {
if (pos == size() && !empty())
return getFontSettings(bparams, pos - 1);
- return Font(inherit_font, getParLanguage(bparams));
+ // Optimisation: avoid a full font instantiation if there is no
+ // language change from previous call.
+ static Font previous_font;
+ static Language const * previous_lang = 0;
+ Language const * lang = getParLanguage(bparams);
+ if (lang != previous_lang) {
+ previous_lang = lang;
+ previous_font = Font(inherit_font, lang);
+ }
+ return previous_font;
}
// Gets uninstantiated font setting at position 0
-Font const Paragraph::getFirstFontSettings(BufferParams const & bparams) const
+Font const & Paragraph::getFirstFontSettings(BufferParams const & bparams) const
{
if (!empty() && !d->fontlist_.empty())
return d->fontlist_.begin()->font();
- return Font(inherit_font, bparams.language);
+ // Optimisation: avoid a full font instantiation if there is no
+ // language change from previous call.
+ static Font previous_font;
+ static Language const * previous_lang = 0;
+ if (bparams.language != previous_lang) {
+ previous_lang = bparams.language;
+ previous_font = Font(inherit_font, bparams.language);
+ }
+
+ return previous_font;
}
Font font = getFontSettings(bparams, pos);
pos_type const body_pos = beginOfBody();
+ FontInfo & fi = font.fontInfo();
if (pos < body_pos)
- font.fontInfo().realize(d->layout_->labelfont);
+ fi.realize(d->layout_->labelfont);
else
- font.fontInfo().realize(d->layout_->font);
+ fi.realize(d->layout_->font);
- font.fontInfo().realize(outerfont.fontInfo());
- font.fontInfo().realize(bparams.getFont().fontInfo());
+ fi.realize(outerfont.fontInfo());
+ fi.realize(bparams.getFont().fontInfo());
return font;
}
for (pos_type i = beg; i < end; ++i) {
char_type const c = d->text_[i];
- if (isPrintable(c) || c == '\t')
+ if (isPrintable(c) || c == '\t'
+ || (c == '\n' && options & AS_STR_NEWLINES))
os.put(c);
else if (c == META_INSET && options & AS_STR_INSETS)
getInset(i)->textString(os);