Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/ArdorQuery.pro
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ ICON = ardorquery.icns
SOURCES += \
Formatters/cssformatter.cpp \
Formatters/formatterfactory.cpp \
Formatters/formatterline.cpp \
Formatters/htmlformatter.cpp \
Formatters/jsonformatter.cpp \
Formatters/outputformatter.cpp \
Expand Down Expand Up @@ -42,6 +43,7 @@ SOURCES += \
QuickControls/backendimage.cpp \
ViewModels/backendviewmodel.cpp \
ViewModels/globaleventhandlermodel.cpp \
ViewModels/globalmouseviewmodel.cpp \
ViewModels/httpperformerviewmodel.cpp \
ViewModels/httprequestresultviewmodel.cpp \
ViewModels/httprequestviewmodel.cpp \
Expand All @@ -59,13 +61,15 @@ SOURCES += \
Tests/globalvariablesunittest.cpp \
Tests/htmlformatterunittests.cpp \
Tests/cssformatterunittests.cpp \
Tests/xmlformatterunittests.cpp \
}

RESOURCES += qml.qrc

HEADERS += \
Formatters/cssformatter.h \
Formatters/formatterfactory.h \
Formatters/formatterline.h \
Formatters/htmlformatter.h \
Formatters/jsonformatter.h \
Formatters/outputformatter.h \
Expand Down Expand Up @@ -96,6 +100,7 @@ HEADERS += \
QuickControls/backendimage.h \
ViewModels/backendviewmodel.h \
ViewModels/globaleventhandlermodel.h \
ViewModels/globalmouseviewmodel.h \
ViewModels/httpperformerviewmodel.h \
ViewModels/httprequestresultviewmodel.h \
ViewModels/httprequestviewmodel.h \
Expand All @@ -114,6 +119,7 @@ HEADERS += \
Tests/globalvariablesunittest.h \
Tests/htmlformatterunittests.h \
Tests/cssformatterunittests.h \
Tests/xmlformatterunittests.h \
}

usrbininstalldesktop {
Expand Down
91 changes: 90 additions & 1 deletion src/Formatters/cssformatter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,96 @@ QString CssFormatter::format(const QString &data)
return m_result;
}

QMap<int, FormatterLine *> CssFormatter::silentFormat(const QString &data)
{
int stackSize = 0;
bool isComment = false;
QMap<int, FormatterLine *> result;
FormatterLine* formatterLine = new FormatterLine(0);
result[0] = formatterLine;
int iterator = -1;

for(auto character: data) {
auto latinCharacter = character.toLatin1();
iterator++;
if (isComment || latinCharacter != m_space) {
formatterLine->increaseLineIterator(latinCharacter);
}

if (isComment && latinCharacter == m_slash && data[iterator - 1] == m_asteriks) {
isComment = false;
formatterLine->addIndex("</font>", false, false);
continue;
}
if (isComment) continue;

if (latinCharacter == m_blockStart) {
formatterLine->addIndex(" </font>", true, false);
formatterLine->addCustomIndex(0, "<font color=\"#8812a1\">", true, false, true);

stackSize += 1;
formatterLine = new FormatterLine(stackSize);
result[result.size()] = formatterLine;
continue;
}
if (latinCharacter == m_blockEnd) {
//fix case where we omit ; in property
if (formatterLine->containsCharacter(m_separator[0])) {
formatterLine->removeLastCharacter();
formatterLine->addCustomIndex(0, "<font color=\"#009dd5\">", true, false);
auto propertyIndex = formatterLine->line().lastIndexOf(m_separator);
formatterLine->addCustomIndex(propertyIndex, "</font>", true, false);
formatterLine->increaseLineIterator(m_endField[0]);

if (stackSize > 0) stackSize -= 1;
formatterLine = new FormatterLine(stackSize);
result[result.size()] = formatterLine;
formatterLine->increaseLineIterator(m_blockEnd[0]);
} else {
// default case
if (stackSize > 0) stackSize -= 1;
formatterLine->setOffset(stackSize);

formatterLine = new FormatterLine(stackSize);
result[result.size()] = formatterLine;
}
continue;
}

// make space after : character
if (latinCharacter == m_separator) {
formatterLine->increaseLineIterator(m_space[0]);
}

if (latinCharacter == m_endField) {
formatterLine->addCustomIndex(0, "<font color=\"#009dd5\">", true, false);
auto propertyIndex = formatterLine->line().lastIndexOf(m_separator);
formatterLine->addCustomIndex(propertyIndex, "</font>", true, false);

formatterLine = new FormatterLine(stackSize);
result[result.size()] = formatterLine;
continue;
}

if (latinCharacter == m_asteriks && iterator > 0 && data[iterator - 1] == m_slash) {
isComment = true;
auto index = formatterLine->lineIterator() - 1;
formatterLine->addCustomIndex(index, "<font color=\"#008000\">", true, false);
continue;
}


}

//remove last redundant item
if (!result.isEmpty()) {
auto lastItem = result.value(result.size() - 1);
if (lastItem->isEmpty()) result.remove(result.size() - 1);
}

return result;
}

void CssFormatter::setOffset(int stackSize) noexcept
{
for (auto i = 0; i < stackSize; i++) {
Expand All @@ -101,4 +191,3 @@ void CssFormatter::fillValue(const QString &trimmedValue) noexcept
m_result.append(trimmedValue + ";\n");
}
}

5 changes: 5 additions & 0 deletions src/Formatters/cssformatter.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@
#ifndef CSSFORMATTER_H
#define CSSFORMATTER_H

#include <QMap>
#include "outputformatter.h"
#include "formatterline.h"

class CssFormatter : public OutputFormatter
{
Expand All @@ -31,6 +33,7 @@ class CssFormatter : public OutputFormatter
const QString m_asteriks { "*" };
const QString m_slash { "/" };
const QString m_caretBack { "\r" };
const QString m_space { " " };
const QString m_cssTab { "&nbsp;&nbsp;&nbsp;&nbsp;" };
int m_stackSize { -1 };
QString m_result { "" };
Expand All @@ -39,6 +42,8 @@ class CssFormatter : public OutputFormatter
CssFormatter();

QString format(const QString& data) override;
QMap<int, FormatterLine*> silentFormat(const QString &data) override;
int silentFormatTab() override { return 4; }

private:
void setOffset(int stackSize) noexcept;
Expand Down
Loading