mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-12 22:14:35 +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
|
bool Paragraph::isWordSeparator(pos_type pos) const
|
||||||
{
|
{
|
||||||
if (Inset const * inset = getInset(pos))
|
|
||||||
return !inset->isLetter();
|
|
||||||
if (pos == size())
|
if (pos == size())
|
||||||
return true;
|
return true;
|
||||||
char_type const c = d->text_[pos];
|
if (Inset const * inset = getInset(pos))
|
||||||
// if we have a hard hyphen (no en- or emdash),
|
return !inset->isLetter();
|
||||||
|
// if we have a hard hyphen (no en- or emdash) or apostrophe
|
||||||
// we pass this to the spell checker
|
// we pass this to the spell checker
|
||||||
if (c == '-') {
|
// FIXME: this method is subject to change, visit
|
||||||
int j = pos + 1;
|
// https://bugzilla.mozilla.org/show_bug.cgi?id=355178
|
||||||
if ((j == size() || d->text_[j] != '-')
|
// to get an impression how complex this is.
|
||||||
&& (pos == 0 || d->text_[pos - 1] != '-'))
|
if (isHardHyphenOrApostrophe(pos))
|
||||||
return false;
|
return false;
|
||||||
}
|
char_type const c = d->text_[pos];
|
||||||
// We want to pass the ' and escape chars to the spellchecker
|
// We want to pass the escape chars to the spellchecker
|
||||||
static docstring const quote = from_utf8(lyxrc.spellchecker_esc_chars + '\'');
|
docstring const escape_chars = from_utf8(lyxrc.spellchecker_esc_chars);
|
||||||
return (!isLetterChar(c) && !isDigitASCII(c) && !contains(quote, c));
|
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;
|
bool isChar(pos_type pos) const;
|
||||||
/// True if the element at this point is a space
|
/// True if the element at this point is a space
|
||||||
bool isSpace(pos_type pos) const;
|
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
|
/// returns true if at least one line break or line separator has been deleted
|
||||||
/// at the beginning of the paragraph (either physically or logically)
|
/// at the beginning of the paragraph (either physically or logically)
|
||||||
|
Loading…
Reference in New Issue
Block a user