File: QuickParser.h

package info (click to toggle)
pageedit 2.4.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 10,956 kB
  • sloc: ansic: 31,806; cpp: 15,036; python: 1,141; javascript: 87; sh: 13; makefile: 7
file content (67 lines) | stat: -rw-r--r-- 1,996 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/************************************************************************
**
**  Copyright (C) 2020-2024 Kevin B. Hendricks Stratford, ON, Canada 
**
**  This file is part of PageEdit.
**
**  PageEdit is free software: you can redistribute it and/or modify
**  it under the terms of the GNU General Public License as published by
**  the Free Software Foundation, either version 3 of the License, or
**  (at your option) any later version.
**
**  PageEdit is distributed in the hope that it will be useful,
**  but WITHOUT ANY WARRANTY; without even the implied warranty of
**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
**  GNU General Public License for more details.
**
**  You should have received a copy of the GNU General Public License
**  along with PageEdit.  If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/

#ifndef QUICK_PARSER
#define QUICK_PARSER

#include <QStringList>
#include <QStringView>

#include "TagAtts.h"

class TagAtts;
class QString;
 
class QuickParser
{
public:

    struct MarkupInfo {
        int     pos;
        QString text;
        QString lang;
        QString tpath;
        QString tname;
        QString ttype;
        TagAtts tattr;
    };

    QuickParser(const QString &source, const QString default_lang = "en");
    ~QuickParser() {};
    void reload_parser(const QString &source, const QString default_lang = "en");
    MarkupInfo parse_next();
    QString serialize_markup(const MarkupInfo &mi);
    
private:
    QStringView parseML();
    void parseTag(const QStringView tagstring, MarkupInfo &mi);
    int findTarget(const QString &tgt, int p, bool after=false);
    int skipAnyBlanks(const QStringView segment, int p);
    int stopWhenContains(const QStringView segment, const QString& stopchars, int p);
    
    QString      m_source;
    int          m_pos;
    int          m_next;
    QStringList  m_TagPath;
    QStringList  m_LangPath;
};

#endif