QtLingo 1
QtLingo is an Application to make Qt Computer Translations easier
ts_model.h
Go to the documentation of this file.
1#ifndef __ts_model_h__
2#define __ts_model_h__
3
4//Qt
5#include <QString>
6#include <QXmlStreamAttributes>
7
8//std
9#include <algorithm>
10#include <assert.h>
11#include <iostream>
12#include <map>
13#include <memory>
14#include <vector>
15//algs
16#include "efl_hash.h"
17
18QT_BEGIN_NAMESPACE
19class QXmlStreamWriter;
20class QFile;
21struct document_node;
22struct DTD_node;
23struct element_node;
24struct TS_node;
25QT_END_NAMESPACE
26
27
31namespace visitors
32{
33
38 {
39 explicit document_dump(QXmlStreamWriter &writer) : m_writer(writer) {}
40
41 void visit(const document_node *node) const;
42 void visit(const DTD_node *node) const;
43 void visit(const element_node *node) const;
44 void visit(const TS_node *node) const;
45
46 private:
47 QXmlStreamWriter &m_writer;
48 };
49
53 typedef std::map<hash_t, QString> map_hashQString;
54 typedef std::map<QString, QString> map_QStringQString;
55
60 {
61 string_extractor_replacer(map_hashQString &vqs, bool with_unfinished, bool with_vanished, bool unfinished_only)
62 : m_vqs(vqs), source(nullptr), translation(nullptr), m_state(st_WaitForMessage), m_with_unfinished(with_unfinished), m_with_vanished(with_vanished), m_unfinished_only(unfinished_only)
63 {}
64
65 void visit(const document_node *node);
66 void visit(const DTD_node *node);
67 void visit(element_node *node);
68
69 private:
70 enum EStates { st_WaitForMessage = 0x00, st_WaitForSource = 0x01, st_WaitForTranslation = 0x02, st_Complete = 0x04 };
71 map_hashQString &m_vqs;
72 element_node *source, *translation;
73 int m_state;
74 bool m_with_unfinished, m_with_vanished, m_unfinished_only;
75 };
76
81 {
82 back_string_replacer(const map_QStringQString &strings, const QString &langid)
83 : m_strings(strings), m_langid(langid), source(nullptr), translation(nullptr), m_state(st_WaitForMessage)
84 {}
85
86 void visit(const document_node *node);
87 void visit(const DTD_node *node);
88 void visit(element_node *node);
89 void visit(TS_node *node);
90
91 private:
92 enum EStates { st_WaitForMessage = 0x00, st_WaitForSource = 0x01, st_WaitForTranslation = 0x02, st_Complete = 0x04 };
93 map_QStringQString m_strings;
94 const QString m_langid;
95 element_node *source, *translation;
96 int m_state;
97 };
98}
99
103struct base_node : std::enable_shared_from_this<base_node>
104{
108
110 {
111 nt_Document = 0x10000000,
112 nt_DTD = 0x01000000,
113 nt_Element = 0x00001000
114 };
115
116 typedef std::shared_ptr<base_node> base_node_ptr;
117 typedef std::vector<base_node_ptr> nodes_t;
118
119 base_node() : m_parent(nullptr) {}
120
121 virtual ENodeType kind() const = 0;
122
123 virtual void visit(const visitors::document_dump &visitor) const = 0;
124 virtual void visit(visitors::string_extractor_replacer &/*visitor*/) {}
125 virtual void visit(visitors::back_string_replacer &visitor) = 0;
126
128 {
129 m_childs.push_back(ptr);
130 ptr->m_parent = shared_from_this();
131 return ptr;
132 }
133 base_node_ptr parent() const { return m_parent; }
134
135 private:
136 nodes_t m_childs;
137 base_node_ptr m_parent;
138};
139
144{
146 virtual ENodeType kind() const override { return nt_Document; }
147 virtual void visit(const visitors::document_dump &visitor) const override { visitor.visit(this); }
148 virtual void visit(visitors::string_extractor_replacer &visitor) override { visitor.visit(this); }
149 virtual void visit(visitors::back_string_replacer &visitor) override { visitor.visit(this); }
150};
151
156{
157 explicit DTD_node(const QString &systemId) : base_node(), m_systemId(systemId) {}
158 virtual ENodeType kind() const override { return nt_DTD; }
159 virtual void visit(const visitors::document_dump &visitor) const override { visitor.visit(this); }
160 virtual void visit(visitors::string_extractor_replacer &visitor) override { visitor.visit(this); }
161 virtual void visit(visitors::back_string_replacer &visitor) override { visitor.visit(this); }
162
163 const QString & id() const { return m_systemId; }
164 private:
165 QString m_systemId;
166};
167
172{
174
175 element_node(EElementNodeType ent, const QString &name, const QXmlStreamAttributes &attrs)
177 {}
178 virtual ENodeType kind() const override { return nt_Element; }
179 virtual void visit(const visitors::document_dump &visitor) const override { visitor.visit(this); }
180 virtual void visit(visitors::string_extractor_replacer &visitor) override { visitor.visit(this); }
181 virtual void visit(visitors::back_string_replacer &visitor) override { visitor.visit(this); }
182
184
185 void set_text(const QString &text) { m_text = text; }
186 const QString & text() const { return m_text; }
187
188 const QString & name() const { return m_name; }
189 const QXmlStreamAttributes & attributes() const { return m_attributes; }
190
191 protected:
193 QString m_name;
194 QXmlStreamAttributes m_attributes;
195 QString m_text;
196};
197
202{
203 TS_node(const QString &name, const QXmlStreamAttributes &attrs)
205 {}
206
207 virtual void visit(visitors::back_string_replacer &visitor) override { visitor.visit(this); }
208
209 void replace_attribute_value(const QString &att_name, const QString &value)
210 {
211 QXmlStreamAttributes::iterator it = std::find_if(m_attributes.begin(), m_attributes.end(), [&att_name](const QXmlStreamAttribute &att){ return att_name == att.name(); });
212
213 if(it != m_attributes.end())
214 {
215 *it = QXmlStreamAttribute(it->namespaceUri().toString(), it->name().toString(), value);
216 }
217 }
218};
219#endif // TS_MODEL
220
visitors/
std::map< QString, QString > map_QStringQString
Definition: ts_model.h:54
std::map< hash_t, QString > map_hashQString
map hashQString.
Definition: ts_model.h:53
DTD node.
Definition: ts_model.h:156
virtual ENodeType kind() const override
Definition: ts_model.h:158
const QString & id() const
Definition: ts_model.h:163
virtual void visit(visitors::string_extractor_replacer &visitor) override
Definition: ts_model.h:160
DTD_node(const QString &systemId)
Definition: ts_model.h:157
virtual void visit(visitors::back_string_replacer &visitor) override
Definition: ts_model.h:161
virtual void visit(const visitors::document_dump &visitor) const override
Definition: ts_model.h:159
TS node.
Definition: ts_model.h:202
virtual void visit(visitors::back_string_replacer &visitor) override
Definition: ts_model.h:207
void replace_attribute_value(const QString &att_name, const QString &value)
Definition: ts_model.h:209
TS_node(const QString &name, const QXmlStreamAttributes &attrs)
Definition: ts_model.h:203
base node.
Definition: ts_model.h:104
base_node()
Definition: ts_model.h:119
std::vector< base_node_ptr > nodes_t
Definition: ts_model.h:117
base_node_ptr add_child(base_node_ptr ptr)
Definition: ts_model.h:127
virtual void visit(visitors::back_string_replacer &visitor)=0
std::shared_ptr< base_node > base_node_ptr
Definition: ts_model.h:116
virtual void visit(visitors::string_extractor_replacer &)
Definition: ts_model.h:124
virtual void visit(const visitors::document_dump &visitor) const =0
virtual ENodeType kind() const =0
@ nt_Element
Definition: ts_model.h:113
@ nt_Document
Definition: ts_model.h:111
base_node_ptr parent() const
Definition: ts_model.h:133
document node.
Definition: ts_model.h:144
virtual ENodeType kind() const override
Definition: ts_model.h:146
virtual void visit(visitors::back_string_replacer &visitor) override
Definition: ts_model.h:149
virtual void visit(const visitors::document_dump &visitor) const override
Definition: ts_model.h:147
virtual void visit(visitors::string_extractor_replacer &visitor) override
Definition: ts_model.h:148
element node.
Definition: ts_model.h:172
QString m_text
Definition: ts_model.h:195
virtual void visit(visitors::string_extractor_replacer &visitor) override
Definition: ts_model.h:180
virtual void visit(visitors::back_string_replacer &visitor) override
Definition: ts_model.h:181
const QString & text() const
Definition: ts_model.h:186
const QString & name() const
Definition: ts_model.h:188
QXmlStreamAttributes m_attributes
Definition: ts_model.h:194
EElementNodeType element_node_type() const
Definition: ts_model.h:183
QString m_name
Definition: ts_model.h:193
element_node(EElementNodeType ent, const QString &name, const QXmlStreamAttributes &attrs)
Definition: ts_model.h:175
void set_text(const QString &text)
Definition: ts_model.h:185
const QXmlStreamAttributes & attributes() const
Definition: ts_model.h:189
@ ent_translation
Definition: ts_model.h:173
EElementNodeType m_element_node_type
Definition: ts_model.h:192
virtual void visit(const visitors::document_dump &visitor) const override
Definition: ts_model.h:179
virtual ENodeType kind() const override
Definition: ts_model.h:178
back string replacer.
Definition: ts_model.h:81
void visit(const document_node *node)
visit(const document_node *node). visit
Definition: ts_model.cpp:146
back_string_replacer(const map_QStringQString &strings, const QString &langid)
Definition: ts_model.h:82
document dump.
Definition: ts_model.h:38
document_dump(QXmlStreamWriter &writer)
Definition: ts_model.h:39
void visit(const TS_node *node) const
void visit(const document_node *node) const
visit(const document_node *node). visit
Definition: ts_model.cpp:13
string extractor replacer.
Definition: ts_model.h:60
string_extractor_replacer(map_hashQString &vqs, bool with_unfinished, bool with_vanished, bool unfinished_only)
Definition: ts_model.h:61
void visit(const document_node *node)
visit(const document_node *node). visit
Definition: ts_model.cpp:43