mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 19:07:45 +00:00
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:
parent
1f27196ce3
commit
e0baae5091
@ -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] != '-'));
|
||||
}
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user