Maliit Plugins  0.92.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator
layoutparser.h
Go to the documentation of this file.
1 // -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; c-file-offsets: ((innamespace . 0)); -*-
2 /*
3  * This file is part of Maliit Plugins
4  *
5  * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
6  *
7  * Contact: Mohammad Anwari <Mohammad.Anwari@nokia.com>
8  *
9  * Redistribution and use in source and binary forms, with or without modification,
10  * are permitted provided that the following conditions are met:
11  *
12  * Redistributions of source code must retain the above copyright notice, this list
13  * of conditions and the following disclaimer.
14  * Redistributions in binary form must reproduce the above copyright notice, this list
15  * of conditions and the following disclaimer in the documentation and/or other materials
16  * provided with the distribution.
17  * Neither the name of Nokia Corporation nor the names of its contributors may be
18  * used to endorse or promote products derived from this software without specific
19  * prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
22  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
23  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
24  * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  *
31  */
32 
33 #ifndef MALIIT_KEYBOARD_LAYOUTPARSER_H
34 #define MALIIT_KEYBOARD_LAYOUTPARSER_H
35 
36 #include <QXmlStreamReader>
37 #include <QStringList>
38 
39 #include "tagkeyboard.h"
40 #include "tagkey.h"
41 #include "tagspacer.h"
42 
43 namespace MaliitKeyboard {
44 
46 {
47 public:
48  explicit LayoutParser(QIODevice *device);
49 
50  bool parse();
51  bool isLanguageFile();
52 
53  const QString errorString() const;
54 
55  const TagKeyboardPtr keyboard() const;
56  const QStringList imports() const;
57  const QStringList symviews() const;
58  const QStringList numbers() const;
59  const QStringList phonenumbers() const;
60 
61 private:
62  QXmlStreamReader m_xml;
64  QStringList m_imports;
65  QStringList m_symviews;
66  QStringList m_numbers;
67  QStringList m_phonenumbers;
72 
73  void parseKeyboard();
74  void parseImport();
75  void parseNewStyleImport();
76  void parseImportChild(QStringList *target_list);
78  void parseLayout();
79  void parseSection();
80  void parseRow();
81  void parseKey();
82  void parseBinding();
83  void parseSpacer();
84  void goToRootElement();
85  void readToEnd();
86 
87  void error(const QString &message);
88 
89  bool boolValue(const QStringRef &value, bool defaultValue);
90 
91  template <class E>
92  E enumValue(const char * const attribute, const QStringList &values, E defaultValue);
93 };
94 
95 } // namespace MaliitKeyboard
96 
97 #endif // MALIIT_KEYBOARD_LAYOUTPARSER_H