X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FParagraph.cpp;h=f2709c8b4c196dc9438e3cc14c853d6b5f7b6240;hb=ad3e6c69b2cec7adcdadb2d7853cedd58d305206;hp=1e9f1fb4da3c0ba130745100b3a4eff6bcf2998a;hpb=4bd38d8a09044172b107be30744456012b80fb4f;p=features.git diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index 1e9f1fb4da..f2709c8b4c 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -1209,26 +1209,41 @@ void Paragraph::Private::latexSpecialChar(otexstream & os, { char_type const c = owner_->getUChar(bparams, runparams, i); - if (style.pass_thru || runparams.pass_thru || (runparams.for_searchAdv != OutputParams::NoSearch) + if (style.pass_thru || runparams.pass_thru || runparams.find_effective() || contains(style.pass_thru_chars, c) || contains(runparams.pass_thru_chars, c)) { - if (runparams.for_searchAdv != OutputParams::NoSearch) { - if (c == '\\') + if (runparams.find_effective()) { + switch (c) { + case '\\': os << "\\\\"; - else if (c == '{') + return; + case '{': os << "\\braceleft "; - else if (c == '}') + return; + case '}': os << "\\braceright "; - else if (c != '\0') + return; + case '$': + os << "\\lyxdollar "; + return; + case '~': + os << "\\lyxtilde "; + return; + case ' ': + case '\0': + break; + default: os.put(c); + return; + } } else if (c != '\0') { Encoding const * const enc = runparams.encoding; if (enc && !enc->encodable(c)) throw EncodingException(c); os.put(c); + return; } - return; } // TIPA uses its own T3 encoding @@ -2610,7 +2625,7 @@ void Paragraph::latex(BufferParams const & bparams, runparams); runningChange = Change(Change::UNCHANGED); - os << (isEnvSeparator(i) ? "}]~" : "}] "); + os << ((isEnvSeparator(i) && !runparams.find_effective()) ? "}]~" : "}] "); column +=3; } // For InTitle commands, we have already opened a group @@ -2640,10 +2655,10 @@ void Paragraph::latex(BufferParams const & bparams, // Check whether a display math inset follows bool output_changes; - if (runparams.for_searchAdv == OutputParams::NoSearch) + if (!runparams.find_effective()) output_changes = bparams.output_changes; else - output_changes = ((runparams.for_searchAdv & OutputParams::SearchWithDeleted) != 0); + output_changes = runparams.find_with_deleted(); if (c == META_INSET && i >= start_pos && (end_pos == -1 || i < end_pos)) { if (isDeleted(i)) @@ -3997,6 +4012,8 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf, runparams, i); if (c == ' ' && (style.free_spacing || runparams.free_spacing)) xs << XMLStream::ESCAPE_NONE << " "; + else if (c == '\'') + xs << XMLStream::ESCAPE_NONE << "’"; else xs << c; } @@ -4560,32 +4577,6 @@ void Paragraph::changeCase(BufferParams const & bparams, pos_type pos, } } -static char_type matchquote(char_type in) -{ - switch (in) { - case 0x2018: // Left Single Quotation Mark - case 0x2019: // Right Single Quotation Mark - case 0x201a: // Single Low-9 Quotation Mark - case 0x201b: // Single High-Reversed-9 Quotation Mark - case 0x2039: // Single Left-Pointing Angle Quotation Mark - case 0x203a: // Single Right-Pointing Angle Quotation Mark - return '\''; - case 0x00bb: // Right-Pointing Double Angle Quotation Mark - case 0x00ab: // Left-Pointing Double Angle Quotation Mark - case 0x201e: // Double Low-9 Quotation Mark - case 0x201c: // Left Double Quotation Mark - case 0x201d: // Right Double Quotation Mark - case 0x201f: // Double High-Reversed-9 Quotation Mark - case 0x2e42: // Double Low-Reversed-9 Quotation Mark - case 0x301e: // Double Prime Quotation Mark - case 0x301d: // Reversed Double Prime Quotation Mark - case 0x301f: // Low Double Prime Quotation Mark - return '"'; - default: - return in; - } -} - int Paragraph::find(docstring const & str, bool cs, bool mw, pos_type start_pos, bool del) const { @@ -4612,7 +4603,7 @@ int Paragraph::find(docstring const & str, bool cs, bool mw, odocstringstream os; if (inset->lyxCode() == lyx::QUOTE_CODE) { OutputParams op(0); - op.for_searchAdv = OutputParams::SearchQuick; + op.find_set_feature(OutputParams::SearchQuick); inset->plaintext(os, op); } else { @@ -4622,9 +4613,8 @@ int Paragraph::find(docstring const & str, bool cs, bool mw, if (!insetstring.empty()) { int const insetstringsize = insetstring.length(); for (int j = 0; j < insetstringsize && pos < parsize; ++i, ++j) { - char_type ij = matchquote(insetstring[j]); - if ((cs && str[i] != ij) - || (!cs && uppercase(str[i]) != uppercase(ij))) { + if ((cs && str[i] != insetstring[j]) + || (!cs && uppercase(str[i]) != uppercase(insetstring[j]))) { nonmatch = true; break; } @@ -4634,7 +4624,7 @@ int Paragraph::find(docstring const & str, bool cs, bool mw, } if (nonmatch || i == strsize) break; - char_type dp = matchquote(d->text_[pos]); + char_type dp = d->text_[pos]; if (cs && str[i] != dp) break; if (!cs && uppercase(str[i]) != uppercase(dp))