void PlainTextEditorWidget::configure() { MimeType mimeType; if (editorDocument()) mimeType = MimeDatabase::findByFile(editorDocument()->filePath()); configure(mimeType); }
void PlainTextEditorWidget::configure(const MimeType &mimeType) { Highlighter *highlighter = new Highlighter(); baseTextDocument()->setSyntaxHighlighter(highlighter); setCodeFoldingSupported(false); if (!mimeType.isNull()) { m_isMissingSyntaxDefinition = true; setMimeTypeForHighlighter(highlighter, mimeType); const QString &type = mimeType.type(); setMimeType(type); QString definitionId = Manager::instance()->definitionIdByMimeType(type); if (definitionId.isEmpty()) definitionId = findDefinitionId(mimeType, true); if (!definitionId.isEmpty()) { m_isMissingSyntaxDefinition = false; const QSharedPointer<HighlightDefinition> &definition = Manager::instance()->definition(definitionId); if (!definition.isNull() && definition->isValid()) { m_commentDefinition.isAfterWhiteSpaces = definition->isCommentAfterWhiteSpaces(); m_commentDefinition.singleLine = definition->singleLineComment(); m_commentDefinition.multiLineStart = definition->multiLineCommentStart(); m_commentDefinition.multiLineEnd = definition->multiLineCommentEnd(); setCodeFoldingSupported(true); } } else if (editorDocument()) { const QString &fileName = editorDocument()->filePath(); if (TextEditorSettings::highlighterSettings().isIgnoredFilePattern(fileName)) m_isMissingSyntaxDefinition = false; } } setFontSettings(TextEditorSettings::fontSettings()); emit configured(editor()); }
PlainTextEditorWidget::PlainTextEditorWidget(QWidget *parent) : BaseTextEditorWidget(parent), m_isMissingSyntaxDefinition(false) { setRevisionsVisible(true); setMarksVisible(true); setLineSeparatorsAllowed(true); setIndenter(new NormalIndenter); // Currently only "normal" indentation is supported. setMimeType(QLatin1String(TextEditor::Constants::C_TEXTEDITOR_MIMETYPE_TEXT)); m_commentDefinition.clearCommentStyles(); connect(editorDocument(), SIGNAL(changed()), this, SLOT(configure())); connect(Manager::instance(), SIGNAL(mimeTypesRegistered()), this, SLOT(configure())); }
ProFileEditorWidget::Link ProFileEditorWidget::findLinkAt(const QTextCursor &cursor, bool /* resolveTarget */) { Link link; int lineNumber = 0, positionInBlock = 0; convertPosition(cursor.position(), &lineNumber, &positionInBlock); const QString block = cursor.block().text(); // check if the current position is commented out const int hashPos = block.indexOf(QLatin1Char('#')); if (hashPos >= 0 && hashPos < positionInBlock) return link; // find the beginning of a filename QString buffer; int beginPos = positionInBlock - 1; while (beginPos >= 0) { QChar c = block.at(beginPos); if (isValidFileNameChar(c)) { buffer.prepend(c); beginPos--; } else { break; } } // find the end of a filename int endPos = positionInBlock; while (endPos < block.count()) { QChar c = block.at(endPos); if (isValidFileNameChar(c)) { buffer.append(c); endPos++; } else { break; } } if (buffer.isEmpty()) return link; // remove trailing '\' since it can be line continuation char if (buffer.at(buffer.size() - 1) == QLatin1Char('\\')) { buffer.chop(1); endPos--; } // if the buffer starts with $$PWD accept it if (buffer.startsWith(QLatin1String("PWD/")) || buffer.startsWith(QLatin1String("PWD\\"))) { if (beginPos > 0 && block.mid(beginPos - 1, 2) == QLatin1String("$$")) { beginPos -=2; buffer = buffer.mid(4); } } QDir dir(QFileInfo(editorDocument()->fileName()).absolutePath()); QString fileName = dir.filePath(buffer); QFileInfo fi(fileName); if (fi.exists()) { if (fi.isDir()) { QDir subDir(fi.absoluteFilePath()); QString subProject = subDir.filePath(subDir.dirName() + QLatin1String(".pro")); if (QFileInfo(subProject).exists()) fileName = subProject; else return link; } link.targetFileName = QDir::cleanPath(fileName); link.linkTextStart = cursor.position() - positionInBlock + beginPos + 1; link.linkTextEnd = cursor.position() - positionInBlock + endPos; } return link; }