Libksieve

impl/parser.h
1 /* -*- c++ -*-
2  impl/parser.h
3 
4  Internal header file. Subject to change without notice. DO NOT USE.
5 
6  This file is part of KSieve,
7  the KDE internet mail/usenet news message filtering library.
8  SPDX-FileCopyrightText: 2003 Marc Mutz <[email protected]>
9 
10  SPDX-License-Identifier: GPL-2.0-only
11 */
12 
13 #pragma once
14 
15 #include <ksieve/parser.h>
16 
17 #include <impl/lexer.h>
18 #include <ksieve/error.h>
19 #include <ksieve/lexer.h>
20 
21 #include <ksieve/scriptbuilder.h>
22 
23 namespace KSieve
24 {
25 class Parser::Impl
26 {
27  friend class Parser;
28 
29 private:
30  Impl(const char *scursor, const char *const send, int options = 0);
31 
32  void setScriptBuilder(ScriptBuilder *builder)
33  {
34  mBuilder = builder;
35  }
36 
37  ScriptBuilder *scriptBuilder() const
38  {
39  return mBuilder;
40  }
41 
42  bool parse();
43 
44  const Error &error() const
45  {
46  return mError == Error::None ? lexer.error() : mError;
47  }
48 
49  bool parseCommandList();
50 
51  bool parseCommand();
52 
53  bool parseArgumentList();
54 
55  bool parseArgument();
56 
57  bool parseTestList();
58 
59  bool parseTest();
60 
61  bool parseBlock();
62 
63  bool parseStringList();
64 
65  bool parseNumber();
66 
67  Lexer::Token token() const
68  {
69  return mToken;
70  }
71 
72  QString tokenValue() const
73  {
74  return mTokenValue;
75  }
76 
77  bool atEnd() const
78  {
79  return !mToken && lexer.atEnd();
80  }
81 
82  bool obtainToken();
83  void consumeToken()
84  {
85  mToken = Lexer::None;
86  mTokenValue.clear();
87  }
88 
89  void makeError(Error::Type e, int line, int col)
90  {
91  mError = Error(e, line, col);
92  if (scriptBuilder()) {
93  scriptBuilder()->error(mError);
94  }
95  }
96 
97  void makeError(Error::Type e)
98  {
99  makeError(e, lexer.line(), lexer.column());
100  }
101 
102  void makeUnexpectedTokenError(Error::Type e)
103  {
104  makeError(e); // ### save wrong token...
105  }
106 
107  bool isArgumentToken() const;
108  bool isStringToken() const;
109 
110  Error mError;
111  Lexer::Token mToken;
112  QString mTokenValue;
113  Lexer::Impl lexer;
114  ScriptBuilder *mBuilder = nullptr;
115 };
116 }
117 
QVector< QVariant > parse(const QString &message, const QDate &externalIssueDate=QDate())
void error(QWidget *parent, const QString &text, const QString &caption=QString(), Options options=Notify)
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Fri Apr 16 2021 23:09:33 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.