KompareDiff2

parserbase.h
1/*
2SPDX-FileCopyrightText: 2002-2004 Otto Bruggeman <otto.bruggeman@home.nl>
3SPDX-FileCopyrightText: 2010 Kevin Kofler <kevin.kofler@chello.at>
4
5SPDX-License-Identifier: GPL-2.0-or-later
6*/
7
8#ifndef KOMPAREDIFF2_PARSERBASE_H
9#define KOMPAREDIFF2_PARSERBASE_H
10
11#include <QRegularExpression>
12#include <QStringList>
13
14#include "kompare.h"
15#include "difference.h"
16
17class QString;
18
19namespace Diff2
20{
21
22class KompareModelList;
23class DiffModelList;
24class DiffModel;
25
26class ParserBase
27{
28public:
29 ParserBase(const KompareModelList* list, const QStringList& diff);
30 virtual ~ParserBase();
31
32 static QString escapePath(QString path);
33 static QString unescapePath(QString path);
34
35public:
36 enum Kompare::Format format() { return determineFormat(); };
37 DiffModelList* parse(bool* malformed = nullptr);
38
39protected:
40 virtual bool parseContextDiffHeader();
41 virtual bool parseEdDiffHeader();
42 virtual bool parseNormalDiffHeader();
43 virtual bool parseRCSDiffHeader();
44 virtual bool parseUnifiedDiffHeader();
45
46 virtual bool parseContextHunkHeader();
47 virtual bool parseEdHunkHeader();
48 virtual bool parseNormalHunkHeader();
49 virtual bool parseRCSHunkHeader();
50 virtual bool parseUnifiedHunkHeader();
51
52 virtual bool parseContextHunkBody();
53 virtual bool parseEdHunkBody();
54 virtual bool parseNormalHunkBody();
55 virtual bool parseRCSHunkBody();
56 virtual bool parseUnifiedHunkBody();
57
58 virtual DiffModelList* parseContext();
59 virtual DiffModelList* parseEd();
60 virtual DiffModelList* parseNormal();
61 virtual DiffModelList* parseRCS();
62 virtual DiffModelList* parseUnified();
63
64protected: // Helper methods to speed things up
65 bool matchesUnifiedHunkLine(const QString& line) const;
66 void checkHeader(const QRegularExpression& header);
67
68protected:
69 /** What is format of the diff */
70 virtual enum Kompare::Format determineFormat();
71
72protected:
73 // Regexps for context parsing
74 QRegularExpression m_contextDiffHeader1;
75 QRegularExpression m_contextDiffHeader2;
76
77 QRegularExpression m_contextHunkHeader1;
78 QRegularExpression m_contextHunkHeader2;
79 QRegularExpression m_contextHunkHeader3;
80 QRegularExpressionMatch m_contextHunkHeader1Match;
81 QRegularExpressionMatch m_contextHunkHeader2Match;
82
83 QRegularExpression m_contextHunkBodyRemoved;
84 QRegularExpression m_contextHunkBodyAdded;
85 QRegularExpression m_contextHunkBodyChanged;
86 QRegularExpression m_contextHunkBodyContext;
87 QRegularExpression m_contextHunkBodyLine; // Added for convenience
88
89 // Regexps for normal parsing
90 QRegularExpression m_normalDiffHeader;
91
92 QRegularExpression m_normalHunkHeaderAdded;
93 QRegularExpression m_normalHunkHeaderRemoved;
94 QRegularExpression m_normalHunkHeaderChanged;
95 QRegularExpressionMatch m_normalHunkHeaderAddedMatch;
96 QRegularExpressionMatch m_normalHunkHeaderRemovedMatch;
97 QRegularExpressionMatch m_normalHunkHeaderChangedMatch;
98
99 QRegularExpression m_normalHunkBodyRemoved;
100 QRegularExpression m_normalHunkBodyAdded;
101 QRegularExpression m_normalHunkBodyDivider;
102
103 enum Difference::Type m_normalDiffType;
104
105 // RegExps for rcs parsing
106 QRegularExpression m_rcsDiffHeader;
107
108 // Regexps for unified parsing
109 QRegularExpression m_unifiedDiffHeader1;
110 QRegularExpression m_unifiedDiffHeader2;
111
112 QRegularExpression m_unifiedHunkHeader;
113 QRegularExpressionMatch m_unifiedHunkHeaderMatch;
114
115protected:
116 const QStringList& m_diffLines;
117 DiffModel* m_currentModel;
118 DiffModelList* m_models;
119 QStringList::ConstIterator m_diffIterator;
120
121 bool m_singleFileDiff;
122 bool m_malformed;
123
124protected:
125 const KompareModelList* m_list;
126};
127
128} // End of namespace Diff2
129
130#endif
Diff2 namespace.
Format
Patch format enum.
Definition kompare.h:26
typedef ConstIterator
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Sat Apr 27 2024 22:10:24 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.