Ejemplo n.º 1
0
void SpellChecker::_checkWord(QTextCursor *cursor)
{
    cursor->select(QTextCursor::WordUnderCursor);
    QString selText = cursor->selectedText();
    static const QRegExp nonDigits("\\D");
    if (!selText.contains(nonDigits))
        return;
    selText = selText.remove(QString::fromUtf8("«"));
    selText = selText.remove(QString::fromUtf8("»"));
    //selText = selText.remove("\"");
    selText = selText.remove(QString::fromUtf8("("));
    selText = selText.remove(QString::fromUtf8(")"));

    if (!checkWordSpelling(selText)) {
        QTextCharFormat fmt = cursor->charFormat();
        fmt.setUnderlineColor(QColor(Qt::red));
        fmt.setUnderlineStyle(QTextCharFormat::SpellCheckUnderline);
        cursor->setCharFormat(fmt);
    } else {
        QTextCharFormat fmt = cursor->charFormat();
        fmt.setUnderlineStyle(QTextCharFormat::NoUnderline);
        cursor->setCharFormat(fmt);
    }
    cursor->clearSelection();
}
Ejemplo n.º 2
0
    bool SpellCheckWorker::checkQuerySpelling(const std::shared_ptr<SpellCheckQueryItem> &queryItem) {
        bool isOk = false;

        const QString &word = queryItem->m_Word;
        const bool isInUserDict = m_UserDictionary.contains(word);

        isOk = isInUserDict || checkWordSpelling(word);
        queryItem->m_IsCorrect = isOk;

        return isOk;
    }
Ejemplo n.º 3
0
QString SpellChecker::checkConcatenation(QTextCursor *cursor)
{
    cursor->movePosition(QTextCursor::PreviousWord);
    cursor->select(QTextCursor::WordUnderCursor);
    QString word1 = cursor->selectedText();
    cursor->movePosition(QTextCursor::NextWord);
    //cursor->movePosition(QTextCursor::NextWord);
    cursor->select(QTextCursor::WordUnderCursor);
    QString word2 = cursor->selectedText();
    cursor->movePosition(QTextCursor::PreviousWord);
    QString word = word1+word2;
    if (checkWordSpelling(word))
        return word;
    return "";
}
Ejemplo n.º 4
0
bool SpellChecker::spellCheck()
{
    if ((spell_checker1 == 0) && (spell_checker2 == 0)) {
        QPixmap icon;
        icon.load(":/warning.png");
        QMessageBox messageBox(QMessageBox::NoIcon, "YAGF", QObject::trUtf8("Required spelling dictionary (%1) is not found.\nSpell-checking is disabled.\nTry to install an appropriate aspell dictionary.").arg(bad_language),
                               QMessageBox::Ok, 0);
        messageBox.setIconPixmap(icon);
        messageBox.exec();
        return false;
    }
    QTextCursor cursor(m_textEdit->document());
    while (!cursor.isNull() && !cursor.atEnd()) {
        if (hasLongHyphen(&cursor)) {
            cursor.select(QTextCursor::WordUnderCursor);
            QString word1 = cursor.selectedText();
            word1.truncate(word1.length()-1);
            cursor.movePosition(QTextCursor::NextWord);
            cursor.select(QTextCursor::WordUnderCursor);
            QString word2 = cursor.selectedText();
            word1 = word1 +word2;
            if (checkWordSpelling(word1)) {
                cursor.movePosition(QTextCursor::PreviousWord);
                cursor.select(QTextCursor::WordUnderCursor);
                cursor.removeSelectedText();
                cursor.select(QTextCursor::WordUnderCursor);
                cursor.removeSelectedText();
                cursor.insertText(word1);
            }
        }
        cursor.select(QTextCursor::WordUnderCursor);
        QString word = cursor.selectedText();
        if (word == QString::fromUtf8("—")) {
            cursor.removeSelectedText();
            cursor.insertText(QString::fromUtf8("—"));
        }
        if (hasHyphen(&cursor)) {
            QString cc = checkConcatenation(&cursor);
            if (!cc.isEmpty()) {
                cursor.movePosition(QTextCursor::PreviousWord);
                cursor.movePosition(QTextCursor::PreviousWord);
                cursor.select(QTextCursor::WordUnderCursor);
                cursor.removeSelectedText();
                cursor.select(QTextCursor::WordUnderCursor);
                cursor.removeSelectedText();
                cursor.movePosition(QTextCursor::NextWord);
                cursor.select(QTextCursor::WordUnderCursor);
                cursor.removeSelectedText();
                cursor.insertText(cc);
            }
        }
        _checkWord(&cursor);
        QTextCursor oldc = cursor;
        if (!cursor.movePosition(QTextCursor::NextWord,
                                 QTextCursor::MoveAnchor))
            break;
//cursor.movePosition(QTextCursor::EndOfWord,  QTextCursor::MoveAnchor);

        //cursor = m_textEdit->document()->find(*m_regExp, cursor);
        int oldpos = oldc.position();
        int newpos = cursor.position();
        if (abs(newpos - oldpos) < 3)
            cursor.setPosition(newpos + 1);
    }
    if (!cursor.isNull())
        _checkWord(&cursor);
    return true;
}