bool Autocorrect::autoBoldUnderline() { if (! m_autoBoldUnderline) return false; QString trimmed = m_word.trimmed(); if (trimmed.length() < 3) return false; bool underline = (trimmed.at(0) == '_' && trimmed.at(trimmed.length() - 1) == '_'); bool bold = (trimmed.at(0) == '*' && trimmed.at(trimmed.length() - 1) == '*'); if (underline || bold) { int startPos = m_cursor.selectionStart(); QString replacement = trimmed.mid(1, trimmed.length() - 2); bool foundLetterNumber = false; QString::ConstIterator constIter = replacement.constBegin(); while (constIter != replacement.constEnd()) { if (constIter->isLetterOrNumber()) { foundLetterNumber = true; break; } constIter++; } // if no letter/number found, don't apply autocorrection like in OOo 2.x if (!foundLetterNumber) return false; m_cursor.setPosition(startPos); m_cursor.setPosition(startPos + trimmed.length(), QTextCursor::KeepAnchor); m_cursor.insertText(replacement); m_cursor.setPosition(startPos); m_cursor.setPosition(startPos + replacement.length(), QTextCursor::KeepAnchor); QTextCharFormat format; format.setFontUnderline(underline ? true : m_cursor.charFormat().fontUnderline()); format.setFontWeight(bold ? QFont::Bold : m_cursor.charFormat().fontWeight()); m_cursor.mergeCharFormat(format); // to avoid the selection being replaced by m_word m_word = m_cursor.selectedText(); // don't do this again if the text is already underlined and bold if(m_cursor.charFormat().fontUnderline() && m_cursor.charFormat().fontWeight() == QFont::Bold) { return true; } else { return autoBoldUnderline(); } } else return false; return true; }
void Autocorrect::superscriptAppendix() { if (! m_superscriptAppendix) return; QString trimmed = m_word.trimmed(); int startPos = -1; int endPos = -1; QHash<QString, QString>::const_iterator i = m_superScriptEntries.constBegin(); while (i != m_superScriptEntries.constEnd()) { if (i.key() == trimmed) { startPos = m_cursor.selectionStart() + 1; endPos = startPos - 1 + trimmed.length(); break; } else if (i.key() == "othernb") { int pos = trimmed.indexOf(i.value()); if (pos > 0) { QString number = trimmed.left(pos); QString::ConstIterator constIter = number.constBegin(); bool found = true; // don't apply superscript to 1th, 2th and 3th if (number.length() == 1 && (*constIter == QChar('1') || *constIter == QChar('2') || *constIter == QChar('3'))) found = false; if (found) { while (constIter != number.constEnd()) { if (!constIter->isNumber()) { found = false; break; } ++constIter; } } if (found && number.length() + i.value().length() == trimmed.length()) { startPos = m_cursor.selectionStart() + pos; endPos = startPos - pos + trimmed.length(); break; } } } ++i; } if (startPos != -1 && endPos != -1) { QTextCursor cursor(m_cursor); cursor.setPosition(startPos); cursor.setPosition(endPos, QTextCursor::KeepAnchor); QTextCharFormat format; format.setVerticalAlignment(QTextCharFormat::AlignSuperScript); cursor.mergeCharFormat(format); } }
void Parser::init() { //_state.set("send_commit"); _state.set("addBasicItem", [this] (lua::String elementType, lua::String elementText, lua::Pointer parentPointer, lua::Integer elementIndex) -> lua::Pointer { //elementText. QString text = elementText; QString onlyText; QString afterText; QString::ConstIterator it; for (it = text.constBegin(); it != text.constEnd(); it++) { //qDebug() << "--------- " << *it << " space:"<<it->isSpace() <<" isLN:"<<it->isLetterOrNumber() <<" isPrint:"<<it->isPrint() <<" isSymbol:"<<it->isSymbol(); if (it->isSpace()) { //afterText += *it; } else { onlyText += *it; } } qDebug()<<" >"<< onlyText <<"<>"<<afterText; Item *newItem= new TextItem( elementType, onlyText, StyleUtil::instance()->getStyle(elementType), static_cast<Layout*>(parentPointer)); emit addElementItem(newItem); if (!afterText.isEmpty()){ Item *newItem= new BlankItem( elementType, afterText, StyleUtil::instance()->getStyle(elementType), static_cast<Layout*>(parentPointer)); emit addElementItem(newItem); } return newItem; }); _state.set("addBasicLayout", [this] (lua::String elementType, lua::Pointer parentPointer, lua::Integer elementIndex) -> lua::Pointer { Layout *newLayout= new Layout( elementType, StyleUtil::instance()->getStyle(elementType), static_cast<Layout*>(parentPointer)); emit addElementLayout(newLayout); return newLayout; }); _state.doFile("scripts/init.lua"); _state.doFile("scripts/core.lua"); }
void Autocorrect::uppercaseFirstCharOfSentence() { if (! m_uppercaseFirstCharOfSentence) return; int startPos = m_cursor.selectionStart(); QTextBlock block = m_cursor.block(); m_cursor.setPosition(block.position()); m_cursor.setPosition(startPos, QTextCursor::KeepAnchor); int position = m_cursor.selectionEnd(); QString text = m_cursor.selectedText(); if (text.isEmpty()) // start of a paragraph m_word.replace(0, 1, m_word.at(0).toUpper()); else { QString::ConstIterator constIter = text.constEnd(); constIter--; while (constIter != text.constBegin()) { while (constIter != text.begin() && constIter->isSpace()) { constIter--; position--; } if (constIter != text.constBegin() && (*constIter == QChar('.') || *constIter == QChar('!') || *constIter == QChar('?'))) { constIter--; while (constIter != text.constBegin() && !(constIter->isLetter())) { position--; constIter--; } bool replace = true; selectWord(m_cursor, --position); QString prevWord = m_cursor.selectedText(); // search for exception if (m_upperCaseExceptions.contains(prevWord.trimmed())) replace = false; if (replace) m_word.replace(0, 1, m_word.at(0).toUpper()); break; } else break; } } m_cursor.setPosition(startPos); m_cursor.setPosition(startPos + m_word.length(), QTextCursor::KeepAnchor); }
QString OpenSearchManager::trimmedEngineName(const QString &engineName) const { QString trimmed; QString::ConstIterator constIter = engineName.constBegin(); while (constIter != engineName.constEnd()) { if (constIter->isSpace()) { trimmed.append('-'); } else if (*constIter != '.') { trimmed.append(constIter->toLower()); } constIter++; } return trimmed; }
void Changecase::initialCaps() { QTextBlock block = m_document->findBlock(m_startPosition); int pos = block.position(); bool finished = false; bool foundToBeChanged = false; while (true) { QString text = block.text(); QString result; bool space = true; QString::ConstIterator constIter = text.constBegin(); while (pos < m_endPosition && constIter != text.constEnd()) { bool isSpace = constIter->isSpace(); if (pos >= m_startPosition) { if (space && !isSpace) { if (!foundToBeChanged && constIter->isLower()) foundToBeChanged = true; result.append(constIter->toTitleCase()); } else result.append(*constIter); } space = isSpace; pos++; constIter++; } if (!(block.isValid() && block.position() + block.length() < m_endPosition)) finished = true; if (foundToBeChanged) { m_cursor.setPosition(qMax(m_startPosition, block.position())); m_cursor.setPosition(qMin(pos, m_endPosition), QTextCursor::KeepAnchor); m_cursor.insertText(result); } if (finished) break; block = block.next(); pos = block.position(); } }
void Changecase::toggleCase() { QTextBlock block = m_document->findBlock(m_startPosition); int pos = block.position(); bool finished = false; while (true) { QString text = block.text(); QString result; QString::ConstIterator constIter = text.constBegin(); while (pos < m_endPosition && constIter != text.constEnd()) { if (pos >= m_startPosition) { if (constIter->isLower()) result.append(constIter->toUpper()); else if (constIter->isUpper()) result.append(constIter->toLower()); else result.append(*constIter); } pos++; constIter++; } if (!(block.isValid() && block.position() + block.length() < m_endPosition)) finished = true; if (result != text) { m_cursor.setPosition(qMax(m_startPosition, block.position())); m_cursor.setPosition(qMin(pos, m_endPosition), QTextCursor::KeepAnchor); m_cursor.insertText(result); } if (finished) break; block = block.next(); pos = block.position(); } }