X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FParagraph.cpp;h=9dda69e063063ccb1727c1df4daed8a82dbc1c9e;hb=b65d0c087bc8cc61ec898210852c7ea39ab64ee4;hp=81deac4f393a180862e33f1d0a76661f671bf6eb;hpb=40ed86b4169609916d43898474cfb006059a2bdb;p=lyx.git diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index 81deac4f39..9dda69e063 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -2731,10 +2731,11 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf, bool emph_flag = false; bool bold_flag = false; - string closing_tag; Layout const & style = *d->layout_; + xs.startParagraph(); + if (!runparams.for_toc && runparams.html_make_pars) { // generate a magic label for this paragraph string const attr = "id='" + magicLabel() + "'"; @@ -2814,6 +2815,7 @@ docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf, } xs.closeFontTags(); + xs.endParagraph(); return retval; } @@ -2845,22 +2847,40 @@ bool Paragraph::isLineSeparator(pos_type pos) const bool Paragraph::isWordSeparator(pos_type pos) const { - if (Inset const * inset = getInset(pos)) - return !inset->isLetter(); if (pos == size()) return true; - char_type const c = d->text_[pos]; - // if we have a hard hyphen (no en- or emdash), + if (Inset const * inset = getInset(pos)) + return !inset->isLetter(); + // if we have a hard hyphen (no en- or emdash) or apostrophe // we pass this to the spell checker - if (c == '-') { - int j = pos + 1; - if ((j == size() || d->text_[j] != '-') - && (pos == 0 || d->text_[pos - 1] != '-')) - return false; - } - // We want to pass the ' and escape chars to the spellchecker - static docstring const quote = from_utf8(lyxrc.spellchecker_esc_chars + '\''); - return (!isLetterChar(c) && !isDigitASCII(c) && !contains(quote, c)); + // FIXME: this method is subject to change, visit + // https://bugzilla.mozilla.org/show_bug.cgi?id=355178 + // to get an impression how complex this is. + if (isHardHyphenOrApostrophe(pos)) + return false; + char_type const c = d->text_[pos]; + // We want to pass the escape chars to the spellchecker + docstring const escape_chars = from_utf8(lyxrc.spellchecker_esc_chars); + return !isLetterChar(c) && !isDigitASCII(c) && !contains(escape_chars, c); +} + + +bool Paragraph::isHardHyphenOrApostrophe(pos_type pos) const +{ + pos_type const psize = size(); + if (pos >= psize) + return false; + char_type const c = d->text_[pos]; + if (c != '-' && c != '\'') + return false; + int nextpos = pos + 1; + int prevpos = pos > 0 ? pos - 1 : 0; + if ((nextpos == psize || isSpace(nextpos)) + && (pos == 0 || isSpace(prevpos))) + return false; + return c == '\'' + || ((nextpos == psize || d->text_[nextpos] != '-') + && (pos == 0 || d->text_[prevpos] != '-')); } @@ -3781,9 +3801,9 @@ void Paragraph::spellCheck() const bool Paragraph::isMisspelled(pos_type pos, bool check_boundary) const { bool result = SpellChecker::misspelled(d->speller_state_.getState(pos)); - if (result || pos <= 0 || pos >= size()) + if (result || pos <= 0 || pos > size()) return result; - if (check_boundary && isWordSeparator(pos)) + if (check_boundary && (pos == size() || isWordSeparator(pos))) result = SpellChecker::misspelled(d->speller_state_.getState(pos - 1)); return result; }