9 using namespace stefanfrings;
14 this->sourceName=sourceName;
21 sourceName=QFileInfo(file.fileName()).baseName();
24 file.open(QFile::ReadOnly | QFile::Text);
26 QByteArray data=file.readAll();
28 if (data.size()==0 || file.error())
30 qCritical(
"Template: cannot read from %s, %s",qPrintable(sourceName),qPrintable(file.errorString()));
34 append(textCodec->toUnicode(data));
42 QString variable=
"{"+name+
"}";
43 int start=indexOf(variable);
46 replace(start, variable.length(), value);
48 start=indexOf(variable,start+value.length());
50 if (count==0 && warnings)
52 qWarning(
"Template: missing variable %s in %s",qPrintable(variable),qPrintable(sourceName));
60 QString startTag=QString(
"{if %1}").arg(name);
61 QString elseTag=QString(
"{else %1}").arg(name);
62 QString endTag=QString(
"{end %1}").arg(name);
64 int start=indexOf(startTag);
67 int end=indexOf(endTag,start+startTag.length());
71 int ellse=indexOf(elseTag,start+startTag.length());
72 if (ellse>start && ellse<end)
77 QString truePart=mid(start+startTag.length(), ellse-start-startTag.length());
78 replace(start, end-start+endTag.length(), truePart);
83 QString falsePart=mid(ellse+elseTag.length(), end-ellse-elseTag.length());
84 replace(start, end-start+endTag.length(), falsePart);
90 QString truePart=mid(start+startTag.length(), end-start-startTag.length());
91 replace(start, end-start+endTag.length(), truePart);
96 replace(start, end-start+endTag.length(),
"");
98 start=indexOf(startTag,start);
102 qWarning(
"Template: missing condition end %s in %s",qPrintable(endTag),qPrintable(sourceName));
106 QString startTag2=
"{ifnot "+name+
"}";
107 start=indexOf(startTag2);
110 int end=indexOf(endTag,start+startTag2.length());
114 int ellse=indexOf(elseTag,start+startTag2.length());
115 if (ellse>start && ellse<end)
120 QString falsePart=mid(start+startTag2.length(), ellse-start-startTag2.length());
121 replace(start, end-start+endTag.length(), falsePart);
126 QString truePart=mid(ellse+elseTag.length(), end-ellse-elseTag.length());
127 replace(start, end-start+endTag.length(), truePart);
130 else if (value==
false)
133 QString falsePart=mid(start+startTag2.length(), end-start-startTag2.length());
134 replace(start, end-start+endTag.length(), falsePart);
139 replace(start, end-start+endTag.length(),
"");
141 start=indexOf(startTag2,start);
145 qWarning(
"Template: missing condition end %s in %s",qPrintable(endTag),qPrintable(sourceName));
148 if (count==0 && warnings)
150 qWarning(
"Template: missing condition %s or %s in %s",qPrintable(startTag),qPrintable(startTag2),qPrintable(sourceName));
157 Q_ASSERT(repetitions>=0);
159 QString startTag=
"{loop "+name+
"}";
160 QString elseTag=
"{else "+name+
"}";
161 QString endTag=
"{end "+name+
"}";
163 int start=indexOf(startTag);
166 int end=indexOf(endTag,start+startTag.length());
170 int ellse=indexOf(elseTag,start+startTag.length());
171 if (ellse>start && ellse<end)
176 QString loopPart=mid(start+startTag.length(), ellse-start-startTag.length());
178 for (
int i=0; i<repetitions; ++i)
181 QString nameNum=name+QString::number(i);
183 s.replace(QString(
"{%1.").arg(name), QString(
"{%1.").arg(nameNum));
184 s.replace(QString(
"{if %1.").arg(name), QString(
"{if %1.").arg(nameNum));
185 s.replace(QString(
"{ifnot %1.").arg(name), QString(
"{ifnot %1.").arg(nameNum));
186 s.replace(QString(
"{else %1.").arg(name), QString(
"{else %1.").arg(nameNum));
187 s.replace(QString(
"{end %1.").arg(name), QString(
"{end %1.").arg(nameNum));
188 s.replace(QString(
"{loop %1.").arg(name), QString(
"{loop %1.").arg(nameNum));
191 replace(start, end-start+endTag.length(), insertMe);
196 QString elsePart=mid(ellse+elseTag.length(), end-ellse-elseTag.length());
197 replace(start, end-start+endTag.length(), elsePart);
200 else if (repetitions>0)
203 QString loopPart=mid(start+startTag.length(), end-start-startTag.length());
205 for (
int i=0; i<repetitions; ++i)
208 QString nameNum=name+QString::number(i);
210 s.replace(QString(
"{%1.").arg(name), QString(
"{%1.").arg(nameNum));
211 s.replace(QString(
"{if %1.").arg(name), QString(
"{if %1.").arg(nameNum));
212 s.replace(QString(
"{ifnot %1.").arg(name), QString(
"{ifnot %1.").arg(nameNum));
213 s.replace(QString(
"{else %1.").arg(name), QString(
"{else %1.").arg(nameNum));
214 s.replace(QString(
"{end %1.").arg(name), QString(
"{end %1.").arg(nameNum));
215 s.replace(QString(
"{loop %1.").arg(name), QString(
"{loop %1.").arg(nameNum));
218 replace(start, end-start+endTag.length(), insertMe);
223 replace(start, end-start+endTag.length(),
"");
225 start=indexOf(startTag,start);
229 qWarning(
"Template: missing loop end %s in %s",qPrintable(endTag),qPrintable(sourceName));
232 if (count==0 && warnings)
234 qWarning(
"Template: missing loop %s in %s",qPrintable(startTag),qPrintable(sourceName));
int loop(QString name, const int repetitions)
Set number of repetitions of a loop.
Template(const QString source, const QString sourceName)
Constructor that reads the template from a string.
void enableWarnings(const bool enable=true)
Enable warnings for missing tags.
int setVariable(const QString name, const QString value)
Replace a variable by the given value.
int setCondition(const QString name, bool value)
Set a condition.