bool Paragraph::isMultiLingual(BufferParams const & bparams) const
{
- Language const * doc_language = bparams.language;
+ Language const * doc_language = bparams.language;
FontList::const_iterator cit = d->fontlist_.begin();
FontList::const_iterator end = d->fontlist_.end();
}
+void Paragraph::getLanguages(std::set<Language const *> & languages) const
+{
+ FontList::const_iterator cit = d->fontlist_.begin();
+ FontList::const_iterator end = d->fontlist_.end();
+
+ for (; cit != end; ++cit) {
+ Language const * lang = cit->font().language();
+ if (lang != ignore_language &&
+ lang != latex_language)
+ languages.insert(lang);
+ }
+}
+
+
docstring Paragraph::asString(int options) const
{
return asString(0, size(), options);
odocstringstream os;
if (beg == 0
- && options & AS_STR_LABEL
- && !d->params_.labelString().empty())
+ && options & AS_STR_LABEL
+ && !d->params_.labelString().empty())
os << d->params_.labelString() << ' ';
for (pos_type i = beg; i < end; ++i) {
if (!speller)
return false;
+ if (!d->layout_->spellcheck || !inInset().allowSpellCheck())
+ return false;
+
locateWord(from, to, WHOLE_WORD);
if (from == to || from >= pos_type(d->text_.size()))
return false;
docstring word = asString(from, to, AS_STR_INSETS);
- string lang_code;
- string lang_variety;
- if (!lyxrc.spellchecker_alt_lang.empty())
- lang_variety = split(lyxrc.spellchecker_alt_lang, lang_code, '-');
- else {
- lang_code = getFontSettings(
- d->inset_owner_->buffer().params(), from).language()->code();
- lang_variety = getFontSettings(
- d->inset_owner_->buffer().params(), from).language()->variety();
- }
- wl = WordLangTuple(word, lang_code, lang_variety);
- SpellChecker::Result res = speller->check(wl);
+ // Ignore words with digits
+ // FIXME: make this customizable
+ // (note that hunspell ignores words with digits by default)
+ bool const ignored = hasDigit(word);
+ Language * lang = const_cast<Language *>(getFontSettings(
+ d->inset_owner_->buffer().params(), from).language());
+ if (lang == d->inset_owner_->buffer().params().language
+ && !lyxrc.spellchecker_alt_lang.empty()) {
+ string lang_code;
+ string const lang_variety =
+ split(lyxrc.spellchecker_alt_lang, lang_code, '-');
+ lang->setCode(lang_code);
+ lang->setVariety(lang_variety);
+ }
+ wl = WordLangTuple(word, lang);
+ SpellChecker::Result res = ignored ?
+ SpellChecker::OK : speller->check(wl);
+#if 0
+// FIXME: the code below makes aspell abort if a word in an unknown
+// language is checked.
// Just ignore any error that the spellchecker reports.
// FIXME: we should through out an exception and catch it in the GUI to
// display the error.
if (!speller->error().empty())
return false;
+#endif
bool const misspelled = res != SpellChecker::OK
&& res != SpellChecker::IGNORED_WORD;