diff --git a/classes/parser/parser.cpp b/classes/parser/parser.cpp index aef6f2c..9582c03 100644 --- a/classes/parser/parser.cpp +++ b/classes/parser/parser.cpp @@ -79,7 +79,10 @@ QString Parser::convert(IDocument *document, Tags &tags) const } tags.setTagValue(Tags::TemplateFilename, file.fileName()); - tags.setTagValue(Tags::OutputDataIndent, this->imageIndent(templateString)); + QString prefix, suffix; + this->imageParticles(templateString, &prefix, &suffix); + tags.setTagValue(Tags::OutputDataIndent, prefix); + tags.setTagValue(Tags::OutputDataEOL, suffix); this->addMatrixInfo(tags); @@ -422,21 +425,49 @@ void Parser::addImagesInfo(Tags &tags, IDocument *doc) const tags.setTagValue(Tags::OutputImagesMaxHeight, QString("%1").arg(maxHeight)); } //----------------------------------------------------------------------------- -QString Parser::imageIndent(const QString &templateString) const +void Parser::imageParticles(const QString &templateString, QString *prefix, QString *suffix) const { - QRegExp regIndent = QRegExp("([\\t\\ ]+)(\\@|\\$\\()imageData(\\@|\\))"); - regIndent.setMinimal(true); - if (regIndent.indexIn(templateString) >= 0) - { - QString result = regIndent.cap(1); - if (result.isEmpty()) - result = " "; + QString templateOutImageData; - return result; + // extract 'out_image_data' line + QRegExp regOutImageData = QRegExp("[^\\n\\r]*out_image_data[^\\n\\r]*[\\n\\r]*"); + if (regOutImageData.indexIn(templateString) >= 0) + { + templateOutImageData = regOutImageData.cap(); } else { - return " "; + regOutImageData.setPattern("[^\\n\\r]*imageData[^\\n\\r]*[\\n\\r]*"); + if (regOutImageData.indexIn(templateString) >= 0) + { + templateOutImageData = regOutImageData.cap(); + } + } + + *prefix = QString(" "); + *suffix = QString("\r\n"); + + if (!templateOutImageData.isEmpty()) + { + QRegExp regIndent = QRegExp("^[\\t\\ ]*"); + if (regIndent.indexIn(templateOutImageData) >= 0) + { + QString result = regIndent.cap(); + if (!result.isEmpty()) + { + *prefix = result; + } + } + + QRegExp regEOL = QRegExp("[\\r\\n]*$"); + if (regEOL.indexIn(templateOutImageData) >= 0) + { + QString result = regEOL.cap(); + if (!result.isEmpty()) + { + *suffix = result; + } + } } } //----------------------------------------------------------------------------- diff --git a/classes/parser/parser.h b/classes/parser/parser.h index e85e786..0d1147b 100644 --- a/classes/parser/parser.h +++ b/classes/parser/parser.h @@ -60,7 +60,7 @@ private: void addImagesInfo(Tags &tags, IDocument *doc) const; bool findNextTag(int startIndex, int *resultIndex, Tags); - QString imageIndent(const QString &templateString) const; + void imageParticles(const QString &templateString, QString *prefix, QString *suffix) const; }; //----------------------------------------------------------------------------- #endif // PARSER_H diff --git a/classes/parser/tags.h b/classes/parser/tags.h index 1d6a9e9..851a5e8 100644 --- a/classes/parser/tags.h +++ b/classes/parser/tags.h @@ -75,6 +75,7 @@ public: OutputImagesCount, OutputComma, OutputDataIndent, + OutputDataEOL, OutputImageWidth, OutputImageHeight, OutputImagesMaxWidth,