forked from len0rd/rockbox
Theme Editor: Added syntax highlighting
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26506 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
1dc7f490c9
commit
6feac4a315
6 changed files with 183 additions and 7 deletions
|
@ -34,6 +34,11 @@ EditorWindow::EditorWindow(QWidget *parent) :
|
||||||
tree = new ParseTreeModel(ui->code->document()->toPlainText().toAscii());
|
tree = new ParseTreeModel(ui->code->document()->toPlainText().toAscii());
|
||||||
ui->parseTree->setModel(tree);
|
ui->parseTree->setModel(tree);
|
||||||
|
|
||||||
|
/* Setting up the syntax highlighter */
|
||||||
|
highlighter = new SkinHighlighter(QColor(0,255,0), QColor(255,0,0),
|
||||||
|
QColor(0,0,255), QColor(150,150,150),
|
||||||
|
ui->code->document());
|
||||||
|
|
||||||
/* Connecting the buttons */
|
/* Connecting the buttons */
|
||||||
QObject::connect(ui->code, SIGNAL(cursorPositionChanged()),
|
QObject::connect(ui->code, SIGNAL(cursorPositionChanged()),
|
||||||
this, SLOT(updateTree()));
|
this, SLOT(updateTree()));
|
||||||
|
@ -50,7 +55,7 @@ void EditorWindow::updateTree()
|
||||||
void EditorWindow::updateCode()
|
void EditorWindow::updateCode()
|
||||||
{
|
{
|
||||||
tree->genCode();
|
tree->genCode();
|
||||||
ui->code->setDocument(new QTextDocument(tree->genCode()));
|
ui->code->document()->setPlainText(tree->genCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
EditorWindow::~EditorWindow()
|
EditorWindow::~EditorWindow()
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
|
|
||||||
#include "parsetreemodel.h"
|
#include "parsetreemodel.h"
|
||||||
|
#include "skinhighlighter.h"
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class EditorWindow;
|
class EditorWindow;
|
||||||
|
@ -43,6 +44,7 @@ private slots:
|
||||||
private:
|
private:
|
||||||
Ui::EditorWindow *ui;
|
Ui::EditorWindow *ui;
|
||||||
ParseTreeModel* tree;
|
ParseTreeModel* tree;
|
||||||
|
SkinHighlighter* highlighter;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
<item>
|
<item>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QTextEdit" name="code"/>
|
<widget class="QPlainTextEdit" name="code"/>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
@ -74,8 +74,8 @@
|
||||||
<slot>close()</slot>
|
<slot>close()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>65</x>
|
<x>-1</x>
|
||||||
<y>57</y>
|
<y>-1</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>299</x>
|
<x>299</x>
|
||||||
|
|
132
utils/themeeditor/skinhighlighter.cpp
Normal file
132
utils/themeeditor/skinhighlighter.cpp
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
#include "skinhighlighter.h"
|
||||||
|
|
||||||
|
SkinHighlighter::SkinHighlighter(QColor comment, QColor tag, QColor conditional,
|
||||||
|
QColor escaped, QTextDocument* doc)
|
||||||
|
:QSyntaxHighlighter(doc),
|
||||||
|
escaped(escaped), tag(tag),
|
||||||
|
conditional(conditional), comment(comment)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
SkinHighlighter::~SkinHighlighter()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SkinHighlighter::highlightBlock(const QString& text)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < text.length(); i++)
|
||||||
|
{
|
||||||
|
QChar c = text[i];
|
||||||
|
|
||||||
|
/* Checking for delimiters */
|
||||||
|
if(c == ARGLISTOPENSYM
|
||||||
|
|| c == ARGLISTCLOSESYM
|
||||||
|
|| c == ARGLISTSEPERATESYM)
|
||||||
|
setFormat(i, 1, tag);
|
||||||
|
|
||||||
|
if(c == ENUMLISTOPENSYM
|
||||||
|
|| c == ENUMLISTCLOSESYM
|
||||||
|
|| c == ENUMLISTSEPERATESYM)
|
||||||
|
setFormat(i, 1, conditional);
|
||||||
|
|
||||||
|
/* Checking for comments */
|
||||||
|
if(c == COMMENTSYM)
|
||||||
|
{
|
||||||
|
setFormat(i, text.length() - i, comment);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(c == TAGSYM)
|
||||||
|
{
|
||||||
|
if(text.length() - i < 2)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(find_escape_character(text[i + 1].toAscii()))
|
||||||
|
{
|
||||||
|
/* Checking for escaped characters */
|
||||||
|
|
||||||
|
setFormat(i, 2, escaped);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else if(text[i + 1] != CONDITIONSYM)
|
||||||
|
{
|
||||||
|
/* Checking for normal tags */
|
||||||
|
|
||||||
|
char lookup[3];
|
||||||
|
struct tag_info* found = 0;
|
||||||
|
|
||||||
|
/* First checking for a two-character tag name */
|
||||||
|
lookup[2] = '\0';
|
||||||
|
|
||||||
|
if(text.length() - i >= 3)
|
||||||
|
{
|
||||||
|
lookup[0] = text[i + 1].toAscii();
|
||||||
|
lookup[1] = text[i + 2].toAscii();
|
||||||
|
|
||||||
|
found = find_tag(lookup);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(found)
|
||||||
|
{
|
||||||
|
setFormat(i, 3, tag);
|
||||||
|
i += 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lookup[1] = '\0';
|
||||||
|
lookup[0] = text[i + 1].toAscii();
|
||||||
|
found = find_tag(lookup);
|
||||||
|
|
||||||
|
if(found)
|
||||||
|
{
|
||||||
|
setFormat(i, 2, tag);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(text[i + 1] == CONDITIONSYM)
|
||||||
|
{
|
||||||
|
/* Checking for conditional tags */
|
||||||
|
|
||||||
|
if(text.length() - i < 3)
|
||||||
|
return;
|
||||||
|
|
||||||
|
char lookup[3];
|
||||||
|
struct tag_info* found = 0;
|
||||||
|
|
||||||
|
lookup[2] = '\0';
|
||||||
|
|
||||||
|
if(text.length() - i >= 4)
|
||||||
|
{
|
||||||
|
lookup[0] = text[i + 2].toAscii();
|
||||||
|
lookup[1] = text[i + 3].toAscii();
|
||||||
|
|
||||||
|
found = find_tag(lookup);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(found)
|
||||||
|
{
|
||||||
|
setFormat(i, 4, conditional);
|
||||||
|
i += 3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lookup[1] = '\0';
|
||||||
|
lookup[0] = text[i + 2].toAscii();
|
||||||
|
|
||||||
|
found = find_tag(lookup);
|
||||||
|
|
||||||
|
if(found)
|
||||||
|
{
|
||||||
|
setFormat(i, 3, conditional);
|
||||||
|
i += 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
36
utils/themeeditor/skinhighlighter.h
Normal file
36
utils/themeeditor/skinhighlighter.h
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
#ifndef SKINHIGHLIGHTER_H
|
||||||
|
#define SKINHIGHLIGHTER_H
|
||||||
|
|
||||||
|
#include <QSyntaxHighlighter>
|
||||||
|
#include <QPlainTextEdit>
|
||||||
|
|
||||||
|
#include "tag_table.h"
|
||||||
|
#include "symbols.h"
|
||||||
|
|
||||||
|
class SkinHighlighter : public QSyntaxHighlighter
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
/*
|
||||||
|
* font - The font used for all text
|
||||||
|
* normal - The normal text color
|
||||||
|
* escaped - The color for escaped characters
|
||||||
|
* tag - The color for tags and their delimiters
|
||||||
|
* conditional - The color for conditionals and their delimiters
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
SkinHighlighter(QColor comment, QColor tag, QColor conditional,
|
||||||
|
QColor escaped, QTextDocument* doc);
|
||||||
|
virtual ~SkinHighlighter();
|
||||||
|
|
||||||
|
void highlightBlock(const QString& text);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QColor escaped;
|
||||||
|
QColor tag;
|
||||||
|
QColor conditional;
|
||||||
|
QColor comment;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SKINHIGHLIGHTER_H
|
|
@ -4,7 +4,6 @@ OBJECTS_DIR = $$MYBUILDDIR/o
|
||||||
UI_DIR = $$MYBUILDDIR/ui
|
UI_DIR = $$MYBUILDDIR/ui
|
||||||
MOC_DIR = $$MYBUILDDIR/moc
|
MOC_DIR = $$MYBUILDDIR/moc
|
||||||
RCC_DIR = $$MYBUILDDIR/rcc
|
RCC_DIR = $$MYBUILDDIR/rcc
|
||||||
|
|
||||||
HEADERS += tag_table.h \
|
HEADERS += tag_table.h \
|
||||||
symbols.h \
|
symbols.h \
|
||||||
skin_parser.h \
|
skin_parser.h \
|
||||||
|
@ -12,7 +11,8 @@ HEADERS += tag_table.h \
|
||||||
skin_debug.h \
|
skin_debug.h \
|
||||||
parsetreemodel.h \
|
parsetreemodel.h \
|
||||||
parsetreenode.h \
|
parsetreenode.h \
|
||||||
editorwindow.h
|
editorwindow.h \
|
||||||
|
skinhighlighter.h
|
||||||
SOURCES += tag_table.c \
|
SOURCES += tag_table.c \
|
||||||
skin_parser.c \
|
skin_parser.c \
|
||||||
skin_scan.c \
|
skin_scan.c \
|
||||||
|
@ -20,6 +20,7 @@ SOURCES += tag_table.c \
|
||||||
main.cpp \
|
main.cpp \
|
||||||
parsetreemodel.cpp \
|
parsetreemodel.cpp \
|
||||||
parsetreenode.cpp \
|
parsetreenode.cpp \
|
||||||
editorwindow.cpp
|
editorwindow.cpp \
|
||||||
|
skinhighlighter.cpp
|
||||||
OTHER_FILES += README
|
OTHER_FILES += README
|
||||||
FORMS += editorwindow.ui
|
FORMS += editorwindow.ui
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue