00001
00008 #include <QtCore/QSettings>
00009
00010 #include "HSyntaxHighlighterSettings.h"
00011
00012 HSyntaxHighlighterSettings::HSyntaxHighlighterSettings()
00013 {
00014 setupHighlightBlocks();
00015 modified=true;
00016 }
00017
00018 void HSyntaxHighlighterSettings::setupHighlightBlocks()
00019 {
00020 singleLine.resize(5);
00021 singleLine[SingleLineCommment].setDescription("Simple one line comment, filling only one line");
00022 singleLine[SingleLineCommment].setName("Single-line comment");
00023
00024 singleLine[Keyword].setDescription("Keyword, a word reserved for special purposes");
00025 singleLine[Keyword].setName("Keyword");
00026
00027 singleLine[TextConstant].setDescription("Character constant, containing a single character or whole string ");
00028 singleLine[TextConstant].setName("Character constant");
00029
00030 singleLine[NumberConstant].setDescription("Number constant, with possible formating/extra info characters");
00031 singleLine[NumberConstant].setName("Number constant");
00032
00033 singleLine[PreprocessorDirective].setDescription("Preprocessor directive, kind of special code interpreted and used at compilation time");
00034 singleLine[PreprocessorDirective].setName("Preprocessor directive");
00035
00036 multiLines.resize(1);
00037 multiLines[MultiLinesComment].setDescription("Longer comment, possibly spanning multiple lines, with specified beginning and ending");
00038 multiLines[MultiLinesComment].setName("Multiple-Line comment");
00039 }
00040
00041
00042
00043
00044 void HSyntaxHighlighterSettings::saveConfig(QString fileName) const
00045 {
00046 QSettings settings(fileName,QSettings::IniFormat);
00047 foreach(SingleLineHighlightBlock block,singleLine)
00048 {
00049 settings.setValue(block.getName()+"/pattern",block.getPattern());
00050
00051 QFont font=block.getFont();
00052 settings.setValue(block.getName()+"/Font Family",font.family());
00053 settings.setValue(block.getName()+"/Font Size",font.pointSize());
00054 settings.setValue(block.getName()+"/Font Italic",font.italic());
00055 settings.setValue(block.getName()+"/Font Bold",font.bold());
00056 settings.setValue(block.getName()+"/Font Underline",font.underline());
00057 settings.setValue(block.getName()+"/Font StrikeOut",font.strikeOut());
00058
00059 QString hexColor=QString::number(block.getForegroundColor().rgb(),16);
00060 settings.setValue(block.getName()+"/Foreground Color",hexColor);
00061 hexColor=QString::number(block.getBackgroundColor().rgb(),16);
00062 settings.setValue(block.getName()+"/Background Color",hexColor);
00063 }
00064
00065 foreach(MultiLinesHighlightBlock block,multiLines)
00066 {
00067 settings.setValue(block.getName()+"/starting pattern",block.getStartingPattern());
00068 settings.setValue(block.getName()+"/ending pattern",block.getEndingPattern());
00069
00070 QFont font=block.getFont();
00071 settings.setValue(block.getName()+"/Font Family",font.family());
00072 settings.setValue(block.getName()+"/Font Size",font.pointSize());
00073 settings.setValue(block.getName()+"/Font Italic",font.italic());
00074 settings.setValue(block.getName()+"/Font Bold",font.bold());
00075 settings.setValue(block.getName()+"/Font Underline",font.underline());
00076 settings.setValue(block.getName()+"/Font StrikeOut",font.strikeOut());
00077
00078 QString hexColor=QString::number(block.getForegroundColor().rgb(),16);
00079 settings.setValue(block.getName()+"/Foreground Color",hexColor);
00080 hexColor=QString::number(block.getBackgroundColor().rgb(),16);
00081 settings.setValue(block.getName()+"/Background Color",hexColor);
00082 }
00083 }
00084
00085 void HSyntaxHighlighterSettings::loadConfig(QString fileName)
00086 {
00087
00088 QSettings settings(fileName,QSettings::IniFormat);
00089 for (int i = 0; i < singleLine.size(); ++i)
00090 {
00091 SingleLineHighlightBlock& block=singleLine[i];
00092 QString w=settings.value(block.getName()+"/pattern").toString();
00093
00094 block.setPattern(w);
00095
00096 QFont font;
00097 font.setFamily(settings.value(block.getName()+"/Font Family").toString());
00098 int pointSize=settings.value(block.getName()+"/Font Size").toInt();
00099 font.setPointSize(pointSize> 0 ? pointSize : 8);
00100 font.setItalic(settings.value(block.getName()+"/Font Italic").toBool());
00101 font.setBold(settings.value(block.getName()+"/Font Bold").toBool());
00102 font.setUnderline(settings.value(block.getName()+"/Font Underline").toBool());
00103 font.setStrikeOut(settings.value(block.getName()+"/Font StrikeOut").toBool());
00104 block.setFont(font);
00105
00106 QColor color=QColor::fromRgb(settings.value(block.getName()+"/Foreground Color").toString().toUInt(0,16));
00107 block.setForegroundColor(color);
00108 color=QColor::fromRgb(settings.value(block.getName()+"/Background Color").toString().toUInt(0,16));
00109 block.setBackgroundColor(color);
00110 }
00111
00112 for (int i = 0; i < multiLines.size(); ++i) {
00113
00114 MultiLinesHighlightBlock& block=multiLines[i];
00115 block.setStartingPattern(settings.value(block.getName()+"/starting pattern").toString());
00116 block.setEndingPattern(settings.value(block.getName()+"/ending pattern").toString());
00117
00118 QFont font;
00119 font.setFamily(settings.value(block.getName()+"/Font Family").toString());
00120 int pointSize=settings.value(block.getName()+"/Font Size").toInt();
00121 font.setPointSize(pointSize>0 ? pointSize : 8);
00122 font.setItalic(settings.value(block.getName()+"/Font Italic").toBool());
00123 font.setBold(settings.value(block.getName()+"/Font Bold").toBool());
00124 font.setUnderline(settings.value(block.getName()+"/Font Underline").toBool());
00125 font.setStrikeOut(settings.value(block.getName()+"/Font StrikeOut").toBool());
00126 multiLines[i].setFont(font);
00127
00128 QColor color=QColor::fromRgb(settings.value(block.getName()+"/Foreground Color").toString().toUInt(0,16));
00129 block.setForegroundColor(color);
00130 color=QColor::fromRgb(settings.value(block.getName()+"/Background Color").toString().toUInt(0,16));
00131 block.setBackgroundColor(color);
00132 }
00133 modified=true;
00134 }
00135 QVector<mlFormatingRule> HSyntaxHighlighterSettings::getMultiLinesRules() const
00136 {
00137 mlFormatingRule rule;
00138 QVector<mlFormatingRule> result;
00139
00140 foreach(MultiLinesHighlightBlock block,multiLines)
00141 {
00142 rule.beginingExp=block.getStartingExp();
00143 rule.endingExp=block.getEndingExp();
00144 rule.format=block.getFormat();
00145 result.append(rule);
00146 }
00147 return result;
00148 }
00149 QVector<slFormatingRule> HSyntaxHighlighterSettings::getSingleLineRules() const
00150 {
00151 slFormatingRule rule;
00152 QVector<slFormatingRule> result;
00153
00154 foreach(SingleLineHighlightBlock block,singleLine)
00155 {
00156 rule.exp=block.getExp();
00157 rule.format=block.getFormat();
00158 result.append(rule);
00159 }
00160 return result;
00161 }
00162
00163
00164