117 lines
3.2 KiB
C++
117 lines
3.2 KiB
C++
// QCodeEditor
|
|
#include "QSyntaxStyle.hpp"
|
|
|
|
// Qt
|
|
#include <QDebug>
|
|
#include <QFile>
|
|
#include <QXmlStreamReader>
|
|
|
|
QSyntaxStyle::QSyntaxStyle(QObject *parent)
|
|
: QObject(parent), m_name(), m_data(), m_loaded(false) {}
|
|
|
|
bool QSyntaxStyle::load(QString fl) {
|
|
QXmlStreamReader reader(fl);
|
|
|
|
while (!reader.atEnd() && !reader.hasError()) {
|
|
auto token = reader.readNext();
|
|
|
|
if (token == QXmlStreamReader::StartElement) {
|
|
if (reader.name() == "style-scheme") {
|
|
if (reader.attributes().hasAttribute("name")) {
|
|
m_name = reader.attributes().value("name").toString();
|
|
}
|
|
} else if (reader.name() == "style") {
|
|
auto attributes = reader.attributes();
|
|
|
|
auto name = attributes.value("name");
|
|
|
|
QTextCharFormat format;
|
|
|
|
if (attributes.hasAttribute("background")) {
|
|
format.setBackground(
|
|
QColor(attributes.value("background").toString()));
|
|
}
|
|
|
|
if (attributes.hasAttribute("foreground")) {
|
|
format.setForeground(
|
|
QColor(attributes.value("foreground").toString()));
|
|
}
|
|
|
|
if (attributes.hasAttribute("bold") &&
|
|
attributes.value("bold") == "true") {
|
|
format.setFontWeight(QFont::Weight::Bold);
|
|
}
|
|
|
|
if (attributes.hasAttribute("italic") &&
|
|
attributes.value("italic") == "true") {
|
|
format.setFontItalic(true);
|
|
}
|
|
|
|
if (attributes.hasAttribute("underlineStyle")) {
|
|
auto underline = attributes.value("underlineStyle");
|
|
|
|
auto s = QTextCharFormat::UnderlineStyle::NoUnderline;
|
|
|
|
if (underline == "SingleUnderline") {
|
|
s = QTextCharFormat::UnderlineStyle::SingleUnderline;
|
|
} else if (underline == "DashUnderline") {
|
|
s = QTextCharFormat::UnderlineStyle::DashUnderline;
|
|
} else if (underline == "DotLine") {
|
|
s = QTextCharFormat::UnderlineStyle::DotLine;
|
|
} else if (underline == "DashDotLine") {
|
|
s = QTextCharFormat::DashDotLine;
|
|
} else if (underline == "DashDotDotLine") {
|
|
s = QTextCharFormat::DashDotDotLine;
|
|
} else if (underline == "WaveUnderline") {
|
|
s = QTextCharFormat::WaveUnderline;
|
|
} else if (underline == "SpellCheckUnderline") {
|
|
s = QTextCharFormat::SpellCheckUnderline;
|
|
} else {
|
|
qDebug() << "Unknown underline value " << underline;
|
|
}
|
|
|
|
format.setUnderlineStyle(s);
|
|
}
|
|
|
|
m_data[name.toString()] = format;
|
|
}
|
|
}
|
|
}
|
|
|
|
m_loaded = !reader.hasError();
|
|
|
|
return m_loaded;
|
|
}
|
|
|
|
QString QSyntaxStyle::name() const { return m_name; }
|
|
|
|
QTextCharFormat QSyntaxStyle::getFormat(QString name) const {
|
|
auto result = m_data.find(name);
|
|
|
|
if (result == m_data.end()) {
|
|
return QTextCharFormat();
|
|
}
|
|
|
|
return result.value();
|
|
}
|
|
|
|
bool QSyntaxStyle::isLoaded() const { return m_loaded; }
|
|
|
|
QSyntaxStyle *QSyntaxStyle::defaultStyle() {
|
|
static QSyntaxStyle style;
|
|
|
|
if (!style.isLoaded()) {
|
|
QFile fl(":/WingHexPy/default_style.xml");
|
|
|
|
if (!fl.open(QIODevice::ReadOnly)) {
|
|
return &style;
|
|
}
|
|
|
|
if (!style.load(fl.readAll())) {
|
|
qDebug() << "Can't load default style.";
|
|
}
|
|
}
|
|
|
|
return &style;
|
|
}
|