Пример #1
0
void CodeGenerator::generateMap()
{
    QFile codeFile(":code.json");
    if (!codeFile.open(QIODevice::ReadOnly))
    {
        qWarning("Could not open code file");
        return;
    }
    QByteArray codeData = codeFile.readAll();

    QJsonDocument JDoc(QJsonDocument::fromJson(codeData));
    if (!JDoc.isObject())
    {
        qWarning("Code file: invalid file format");
        return;
    }

    QJsonObject Main = JDoc.object();
    QJsonArray Snippets = Main["snippets"].toArray();
    QJsonArray Events = Main["events"].toArray();
    QJsonArray Commands = Main["commands"].toArray();
    QJsonArray Controls = Main["controls"].toArray();
    QJsonArray Expressions = Main["expressions"].toArray();

    for (QJsonArray::const_iterator it = Snippets.constBegin(); it != Snippets.constEnd(); it++)
    {
        QJsonObject Snippet = it->toObject();
        _snippets[Snippet["name"].toString()] = processCodeField(Snippet["code"].toArray());
    }

    for (QJsonArray::const_iterator it = Events.constBegin(); it != Events.constEnd(); it++)
    {
        QJsonObject Event = it->toObject();
        CodeGenerator::Event tmp = {processCodeField(Event["code"].toArray()), Event["register"].toString()};
        _events[Event["name"].toString()] = tmp;
    }

    for (QJsonArray::const_iterator it = Commands.constBegin(); it != Commands.constEnd(); it++)
    {
        QJsonObject Command = it->toObject();
        _commands[Command["name"].toString()] = processCodeField(Command["code"].toArray());
    }

    for (QJsonArray::const_iterator it = Controls.constBegin(); it != Controls.constEnd(); it++)
    {
        QJsonObject Control = it->toObject();
        _controls[Control["name"].toString()] = processCodeField(Control["code"].toArray());
    }

    for (QJsonArray::const_iterator it = Expressions.constBegin(); it != Expressions.constEnd(); it++)
    {
        QJsonObject Expression = it->toObject();
        _expressions[Expression["name"].toString()] = Expression["code"].toString();
    }
}
Пример #2
0
QString ApplicationHelper::parseCode(const QString &code, const bool getLangOnly, const bool parseQuotes)
{
    QFile f("./languages.txt");

    if(!f.open(QIODevice::ReadOnly))
        return code;
    QString languages = "";

    QTextStream in(&f);
    while(!in.atEnd())
    {
        QString line = in.readLine();
        line.resize(line.indexOf(':'));
        line = line.trimmed();
        languages += line + '|';
    }
    f.close();

    if(languages.size())
        languages.resize(languages.length() - 1);
    languages = languages.toUpper();

    QString result = code;

    QRegExp rx("\\[(" + languages + ")\\](.*)\\[/\\1\\]", Qt::CaseInsensitive);
    rx.setMinimal(true);

    int s = -1;

    QString ret = "";

    while((s = rx.indexIn(result, s+1)) >= 0)
    {
        QString name = codeFile(rx.cap(1).trimmed().toUpper());
        if(getLangOnly)
            return rx.cap(1);

        ret += rx.cap(1);
        result.replace(rx.cap(0), QString("<h6><b>%1 %2</b></h6><pre class='editor' lang='%3'>%4</pre>").arg(
           H::tr("Code"), codeTitle(name).toHtmlEscaped(), name.toHtmlEscaped(), rx.cap(2).toHtmlEscaped()
        ));
        s+= rx.cap(0).length();
    }

    rx.setPattern("\\[img\\](https?://[^<>]+)\\[/img\\]");
    result.replace(rx, "<a href='\\1' rel='prettyPhoto[gallery]'><img src=\\1' class='attach'></a>");

    rx.setPattern("\\[url\\s*=\\s*([\"'])(.*)\\1\\](.+)\\[/url\\]");
    result.replace(rx, "<a href='\\2' class='link' target='_blank'>\\3</a>");
    rx.setPattern("\\[url\\](.+)\\[/url\\]");
    result.replace(rx, "<a href='\\1' class='link' target='_blank'>\\1</a>");

    const int BB_CODES_COUNT = 4;
    const QString classes[BB_CODES_COUNT] = {"bold", "cursive", "underline", "del"};
    const QString bb_codes[BB_CODES_COUNT] = {"b", "i", "u", "s"};

    for(int i = 0; i < BB_CODES_COUNT; ++i)
    {
        rx.setPattern("\\[" + bb_codes[i] + "\\](.*)\\[/" + bb_codes[i] + "\\]");
        result.replace(rx, "<span class='" + classes[i] + "'>\\1</span>");
    }

    if(parseQuotes)
    {
        rx.setPattern("\\[quote\\s*(?:=\\s*\"([^\"]*)\"\\s*)?\\](.+)\\[/quote\\]");

        s = -1;
        while((s = rx.indexIn(result, s+1)) >= 0)
        {
           result.replace(rx.cap(0), QString("<div class='quote_container'>"
                                                "<div class='bbcode_postedby'>"
                                                    "<img title='Цитата' src='/images/quote_icon.png' alt='Цитата' > Сообщение от <b>%1</b>"
                                                "</div>"
                                                "<div style='padding-left:20px;padding-top:10px'>"
                                                    "<div class='message'>%2</div>"
                                                "</div>"
                                             "</div>").arg(rx.cap(1)).arg(rx.cap(2)));
            //s+= rx.cap(0).length();
        }
    }

    result.replace("\n", "<br>");

    return result;
}