*
* \author Asger Alstrup
* \author Lars Gullik Bjønnes
- * \author Richard Heck (XHTML output)
+ * \author Richard Kimberly Heck (XHTML output)
* \author Jean-Marc Lasgouttes
* \author Angus Leeming
* \author John Levon
{
char_type const c = owner_->getUChar(bparams, runparams, i);
- if (style.pass_thru || runparams.pass_thru
+ if (style.pass_thru || runparams.pass_thru || runparams.for_search
|| contains(style.pass_thru_chars, c)
|| contains(runparams.pass_thru_chars, c)) {
- if (c != '\0') {
+ if (runparams.for_search) {
+ if (c == '\\')
+ os << "\\\\";
+ else if (c == '{')
+ os << "\\braceleft ";
+ else if (c == '}')
+ os << "\\braceright ";
+ else if (c != '\0')
+ os.put(c);
+ }
+ else if (c != '\0') {
Encoding const * const enc = runparams.encoding;
if (enc && !enc->encodable(c))
throw EncodingException(c);
&& !runparams.inIPA
// TODO #10961: && not in inset Flex Code
// TODO #10961: && not in layout LyXCode
- && (!bparams.useNonTeXFonts || runparams.flavor != FLAVOR::XETEX)) {
+ && (!bparams.useNonTeXFonts || runparams.flavor != Flavor::XeTeX)) {
if (c == 0x2013) {
// en-dash
os << "--";
features.addPreambleSnippet(os.release(), true);
}
- if (features.runparams().flavor == FLAVOR::HTML
+ if (features.runparams().flavor == Flavor::Html
&& layout_->htmltitle()) {
features.setHTMLTitle(owner_->asString(AS_STR_INSETS | AS_STR_SKIPDELETE));
}
} else if (!bp.use_dash_ligatures
&& (c == 0x2013 || c == 0x2014)
&& bp.useNonTeXFonts
- && features.runparams().flavor == FLAVOR::XETEX)
+ && features.runparams().flavor == Flavor::XeTeX)
// XeTeX's dash behaviour is determined via a global setting
features.require("xetexdashbreakstate");
BufferEncodings::validate(c, features);
c == META_INSET
&& getInset(i)
&& getInset(i)->allowMultiPar()
- && getInset(i)->lyxCode() != ERT_CODE;
+ && getInset(i)->lyxCode() != ERT_CODE
+ && getInset(i)->producesOutput();
bool closeLanguage = false;
bool lang_switched_at_inset = false;
os << "}";
alien_script.clear();
}
- bool needPar = false;
if (in_ct_deletion) {
// We have to close and then reopen \lyxdeleted,
// as strikeout needs to be on lowest level.
// Force language closing
current_font.setLanguage(basefont.language());
Font const nextfont = (i == body_pos-1) ? basefont : current_font;
+ bool needPar = false;
column += running_font.latexWriteEndChanges(
os, bparams, runparams, basefont,
nextfont, needPar);
if (in_ct_deletion) {
// We have to close and then reopen \lyxdeleted,
// as strikeout needs to be on lowest level.
- bool needPar = false;
OutputParams rp = runparams;
+ bool needPar = false;
column += running_font.latexWriteEndChanges(
os, bparams, rp, basefont,
basefont, needPar);
alien_script.clear();
}
+ Font const font = empty()
+ ? getLayoutFont(bparams, real_outerfont)
+ : getFont(bparams, size() - 1, real_outerfont);
+
+ InsetText const * textinset = inInset().asInsetText();
+
+ bool const maintext = textinset
+ ? textinset->text().isMainText()
+ : false;
+
+ size_t const numpars = textinset
+ ? textinset->text().paragraphs().size()
+ : 0;
+
+ bool needPar = false;
+
+ if (style.resfont.size() != font.fontInfo().size()
+ && (!runparams.isLastPar || maintext
+ || (numpars > 1 && d->ownerCode() != CELL_CODE
+ && (inInset().getLayout().isDisplay()
+ || parInline)))
+ && !style.isCommand()) {
+ needPar = true;
+ }
+
// If we have an open font definition, we have to close it
if (open_font) {
// Make sure that \\par is done with the font of the last
// We must not change the font for the last paragraph
// of non-multipar insets, tabular cells or commands,
// since this produces unwanted whitespace.
-
- Font const font = empty()
- ? getLayoutFont(bparams, real_outerfont)
- : getFont(bparams, size() - 1, real_outerfont);
-
- InsetText const * textinset = inInset().asInsetText();
-
- bool const maintext = textinset
- ? textinset->text().isMainText()
- : false;
-
- size_t const numpars = textinset
- ? textinset->text().paragraphs().size()
- : 0;
-
- bool needPar = false;
-
- if (style.resfont.size() != font.fontInfo().size()
- && (!runparams.isLastPar || maintext
- || (numpars > 1 && d->ownerCode() != CELL_CODE
- && (inInset().getLayout().isDisplay()
- || parInline)))
- && !style.isCommand()) {
- needPar = true;
- }
#ifdef FIXED_LANGUAGE_END_DETECTION
if (next_) {
running_font.latexWriteEndChanges(os, bparams,
running_font.latexWriteEndChanges(os, bparams, runparams,
basefont, basefont, needPar);
#endif
- if (needPar) {
- // The \par could not be inserted at the same nesting
- // level of the font size change, so do it now.
- os << "{\\" << font.latexSize() << "\\par}";
- }
+ }
+ if (needPar) {
+ // The \par could not be inserted at the same nesting
+ // level of the font size change, so do it now.
+ os << "{\\" << font.latexSize() << "\\par}";
}
column += Changes::latexMarkChange(os, bparams, runningChange,
int i = 0;
pos_type const parsize = d->text_.size();
for (i = 0; i < strsize && pos < parsize; ++i, ++pos) {
+ // ignore deleted matter
+ if (!del && isDeleted(pos)) {
+ if (pos == parsize - 1)
+ break;
+ pos++;
+ --i;
+ continue;
+ }
// Ignore "invisible" letters such as ligature breaks
// and hyphenation chars while searching
- while (pos < parsize - 1 && isInset(pos)) {
+ bool nonmatch = false;
+ while (pos < parsize && isInset(pos)) {
Inset const * inset = getInset(pos);
- if (!inset->isLetter())
+ if (!inset->isLetter() && !inset->isChar())
break;
odocstringstream os;
inset->toString(os);
- if (!os.str().empty())
- break;
+ if (!os.str().empty()) {
+ int const insetstringsize = os.str().length();
+ for (int j = 0; j < insetstringsize && pos < parsize; ++i, ++j) {
+ if (str[i] != os.str()[j]) {
+ nonmatch = true;
+ break;
+ }
+ }
+ }
pos++;
}
+ if (nonmatch || i == strsize)
+ break;
if (cs && str[i] != d->text_[pos])
break;
if (!cs && uppercase(str[i]) != uppercase(d->text_[pos]))
break;
- if (!del && isDeleted(pos))
- break;
}
if (i != strsize)