Qutepart’s Documentation¶
Qutepart is a code editor widget for C++/Qt5. It doesn’t have any external dependencies.
Qutepart highlightes your code and implements many advanced editor features.
The project has a sibling implemented in Python. See Python Qutepart
Contents
Features¶
All features are configurable
Syntax highlighting for 196 languages
- Smart indentation algorithms:
Generic
Python
Ruby
XML
Lisp
Scheme
C, C++
JavaScript
Java
PHP
Go
And many others
Line numbers
Bracket highlighting
Visible witespaces
Marker for too long lines
Bookmarks
Current line highlighting
- Advanced edit operations:
Delete selection or line
Duplicate selection or line
Move selected lines up or down
Copy-paste current or selected lines
Join lines
Basic usage¶
#include "qutepart.h"
Qutepart::Qutepart qutepart;
Qutepart::LangInfo langInfo = Qutepart::chooseLanguage(
QString::null, QString::null, filePath);
if (langInfo.isValid()) {
qutepart.setHighlighter(langInfo.id);
qutepart.setIndentAlgorithm(langInfo.indentAlg);
}
qutepart.setPlainText("int foo(int bar)\n{}");
qutepart.show()
Detecting programming language¶
The function Qutepart::chooseLanguage( ) detects syntax using next parameters. Later LangInfo can be used to apply syntax highlighter and indenter.
-
LangInfo
Qutepart::chooseLanguage(const QString &mimeType = QString::null, const QString &languageName = QString::null, const QString &sourceFilePath = QString::null, const QString &firstLine = QString::null)¶ Choose language by available parameters. First parameters have higher priority. Returns
QString::nullif can not detect the language.Fill as much parameters as you can. Set
QString::nullfor unknown parameters.- Parameters
mimeType: The file MIME type. i.e.text/htmllanguageName: The language name as written in the language DBsourceFilePath: The path to the file which is edited.firstLine: Contents of the first line of the file which is going to be edited.
-
struct
Qutepart::LangInfo¶ Programming language ID and related information.
This structure is returned by chooseLanguage()
Public Functions
-
bool
isValid() const¶ Check if the struct is valid (filled with meaningfull info)
Public Members
-
QString
id¶ Internal unique language ID. Pass to Qutepart::Qutepart::setHighlighter()
-
QStringList
names¶ User readable language names.
-
IndentAlg
indentAlg¶ Indenter algorithm for the language. Pass to Qutepart::Qutepart::setIndentAlgorithm()
-
bool
Smart indentation¶
Qutepart supports smart indentation algorithms for many languages.
-
enum
Qutepart::IndentAlg¶ Indentation algorithm. Returned by chooseLanguage().
Passed to Qutepart::Qutepart::setIndentAlgorithm()
Values:
-
enumerator
INDENT_ALG_NONE¶ Do not apply any algorithm. Default text editor behaviour.
-
enumerator
INDENT_ALG_NORMAL¶ Insert to new lines indentation equal to previous line.
-
enumerator
INDENT_ALG_CSTYLE¶ Algorithm for C-style languages where curly brackets are used to mark code blocks. C, C++, PHP, Java, JS, …
-
enumerator
INDENT_ALG_LISP¶ Lisp indentation.
-
enumerator
INDENT_ALG_SCHEME¶ Scheme indentation.
-
enumerator
INDENT_ALG_XML¶ XML indentation.
-
enumerator
INDENT_ALG_PYTHON¶ Python indentation.
-
enumerator
INDENT_ALG_RUBY¶ Ruby indentation.
-
enumerator
Accessing document lines¶
Text of the edited document is accessible with method toPlainText(), but the method is quite heavy-weight, do not use it unless you need whole file contents.
Individual lines can be accessed using QTextDocument, QTextCursor, QTextBlock files, but this API is quite low-level. Qutepart provides simpler API which can be used to do many basic operations with the text.
Printing lines one by one:
Qutepart::Qutepart qutepart;
qutepart.setPlainText(fileContents);
Qutepart::Lines lines;
for (Qutepart::Line line: lines) {
qDebug() << line.text();
}
Inserting new line before the last line
int lastLineIndex = lines.count() - 1;
lines.insertAt(lastLineIndex - 1, "New line text");
-
class
Qutepart::Lines¶ A convenience class which provides high level interface to work with the document lines.
Returned by Qutepart::Qutepart::lines()
Linesis a performance-effective document representation. Getting whole text of document withQPlainTextEdit::toPlainText()` requires a lot of memory allocations and copying. This class accesses the text line by line without copying whole document.Public Functions
-
LineIterator
begin()¶ begin()method for STL iteration support
-
LineIterator
end()¶ end()method for STL iteration support
-
void
append(const QString &lineText)¶ Append line to the end of the document.
-
LineIterator
-
class
LineIterator¶ STL-compatible iterator implementation to work with document lines (blocks)
Returns Qutepart::Line objects
Cursor position¶
-
struct
Qutepart::TextCursorPosition¶ Cursor position
A convenience class, which is more friendly than low level QTextCursor API.
Returned by Qutepart::Qutepart::textCursorPosition()
Atomic operations¶
It is often necessary to make multiple changes in a file which can be undo/redo as a single operation. Use helper class AtomicEditOperation.
Whole Qutepart class API¶
The widget is based on QPlainTextEdit. Read parent class documentation for general understanding how it works.
Quteparts own methods provide additional features and convenience APIs.
-
class
Qutepart::Qutepart: public QPlainTextEdit¶ Code editor widget
Public Functions
-
Qutepart(QWidget *parent = nullptr, const QString &text = QString::null)¶
-
~Qutepart()¶
-
Lines
lines() const¶ High-performance access to document lines. See Qutepart::Lines.
-
void
setHighlighter(const QString &languageId)¶ Set highlighter. Use
Qutepart::chooseLanguage()to choose the language- Parameters
languageId: Language name. See Qutepart::LangInfo::id.
-
void
setIndentAlgorithm(IndentAlg indentAlg)¶ Set indenter algorithm. Use
Qutepart::chooseLanguage()to choose the algorithm.- Parameters
indentAlg: Algorithm name. See Qutepart::LangInfo::indentAlg.
-
TextCursorPosition
textCursorPosition() const¶ Convenience method to get text cursor position.
-
void
goTo(int line, int column = 0)¶ Go to specified line and column. First line and first column have index 0.
-
void
goTo(const TextCursorPosition &pos)¶ Go to text position specified by Qutepart::TextCursorPosition.
-
void
autoIndentCurrentLine()¶ Indent current line using current smart indentation algorithm.
-
bool
indentUseTabs() const¶ Use Tabs instead of spaces for indentation.
-
void
setIndentUseTabs(bool)¶ Use Tabs instead of spaces for indentation.
-
int
indentWidth() const¶ Indentation width. Count of inserted spaces, Tab symbol display width.
-
void
setIndentWidth(int)¶ Indentation width. Count of inserted spaces, Tab symbol display width.
-
bool
drawIndentations() const¶ Visual option. Draw indentation symbols.
-
void
setDrawIndentations(bool)¶ Visual option. Draw indentation symbols.
-
bool
drawAnyWhitespace() const¶ Visual option. Draw any whitespace symbol.
-
void
setDrawAnyWhitespace(bool)¶ Visual option. Draw any whitespace symbol.
-
bool
drawIncorrectIndentation() const¶ Visual option. Draw incorrent indentation. i.e. at end of line or Tab after spaces.
-
void
setDrawIncorrectIndentation(bool)¶ Visual option. Draw incorrent indentation. i.e. at end of line or Tab after spaces.
-
bool
drawSolidEdge() const¶ Visual option. Draw solid line length marker (usually after column 80)
-
void
setDrawSolidEdge(bool)¶ Visual option. Draw solid line length marker (usually after column 80)
-
int
lineLengthEdge() const¶ Visual option. Column on which line lendth marker is drawn.
-
void
setLineLengthEdge(int)¶ Visual option. Column on which line lendth marker is drawn.
-
QColor
lineLengthEdgeColor() const¶ Visual option. Color of line lendth edge.
-
void
setLineLengthEdgeColor(QColor)¶ Visual option. Color of line lendth edge.
-
QColor
currentLineColor() const¶ Visual option. Color of current line highlighting.
QColor()if disabled.
-
void
setCurrentLineColor(QColor)¶ Visual option. Color of current line highlighting.
QColor()if disabled.
-
bool
bracketHighlightingEnabled() const¶
-
void
setBracketHighlightingEnabled(bool value)¶
-
bool
lineNumbersVisible() const¶
-
void
setLineNumbersVisible(bool value)¶
-
void
setCompletionEnabled(bool)¶
-
bool
completionEnabled() const¶
-
void
setCompletionThreshold(int)¶
-
int
completionThreshold() const¶
-
QAction *
increaseIndentAction() const¶
-
QAction *
decreaseIndentAction() const¶
-
QAction *
toggleBookmarkAction() const¶
-
QAction *
prevBookmarkAction() const¶
-
QAction *
nextBookmarkAction() const¶
-
QAction *
invokeCompletionAction() const¶
-
QAction *
scrollDownAction() const¶
-
QAction *
scrollUpAction() const¶
-
QAction *
duplicateSelectionAction() const¶
-
QAction *
moveLineUpAction() const¶
-
QAction *
moveLineDownAction() const¶
-
QAction *
deleteLineAction() const¶
-
QAction *
cutLineAction() const¶
-
QAction *
copyLineAction() const¶
-
QAction *
pasteLineAction() const¶
-
QAction *
insertLineAboveAction() const¶
-
QAction *
insertLineBelowAction() const¶
-
QAction *
joinLinesAction() const¶
-
QAction *
zoomInAction() const¶ Zoom In the document by scaling fonts.
-
QAction *
zoomOutAction() const¶ Zoom Out the document by scaling fonts.
-
void
resetSelection()¶
-
Using only the syntax highlighter¶
In some cases it might be useful to use only syntax highligher but not other Qutepart functionality. It is possible to create a QSyntaxHighlighter subclass instance and apply it to QPlainTextEdit.
#include "qutepart.h"
#include "hl_factory.h"
Qutepart::LangInfo langInfo =
Qutepart::chooseLanguage(QString::null, QString::null, filePath);
QPlainTextEdit textEdit;
QSyntaxHighlighter* highlighter =
Qutepart::makeHighlighter(langInfo.id, textEdit.document());
-
namespace
Qutepart¶ Functions
-
QSyntaxHighlighter *
makeHighlighter(QObject *parent, const QString &languageId)¶ Choose and load a highlighter.
Set as much parameters at posiible to detect language correctly
See QSyntaxHighlighter::QSyntaxHighlighter(..) documentation.
-
QSyntaxHighlighter *
makeHighlighter(QTextDocument *parent, const QString &langugeId)¶
-
QSyntaxHighlighter *