avoid the single dash (hard hyphen) or apostrophe enclosed by white space is treated as a real word

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@38306 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Stephan Witt 2011-04-08 13:20:26 +00:00
parent 1f27196ce3
commit e0baae5091
2 changed files with 34 additions and 13 deletions

View File

@ -2847,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] != '-'));
}

View File

@ -420,6 +420,9 @@ public:
bool isChar(pos_type pos) const;
/// True if the element at this point is a space
bool isSpace(pos_type pos) const;
/// True if the element at this point is a hard hyphen or a apostrophe
/// If it is enclosed by spaces return false
bool isHardHyphenOrApostrophe(pos_type pos) const;
/// returns true if at least one line break or line separator has been deleted
/// at the beginning of the paragraph (either physically or logically)