QtLingo 1
QtLingo is an Application to make Qt Computer Translations easier
visitors::back_string_replacer Struct Reference

back string replacer. More...

#include <ts_model.h>

Public Member Functions

 back_string_replacer (const map_QStringQString &strings, const QString &langid)
 
void visit (const document_node *node)
 visit(const document_node *node). visit More...
 
void visit (const DTD_node *node)
 visit(const DTD_node *). visit More...
 
void visit (element_node *node)
 visit(element_node *node). visit More...
 
void visit (TS_node *node)
 visit(TS_node *node). visit More...
 

Detailed Description

back string replacer.

Definition at line 80 of file ts_model.h.

Constructor & Destructor Documentation

◆ back_string_replacer()

visitors::back_string_replacer::back_string_replacer ( const map_QStringQString strings,
const QString &  langid 
)
inline

Definition at line 82 of file ts_model.h.

83 : m_strings(strings), m_langid(langid), source(nullptr), translation(nullptr), m_state(st_WaitForMessage)
84 {}

Member Function Documentation

◆ visit() [1/4]

void back_string_replacer::visit ( const document_node node)

visit(const document_node *node). visit

Definition at line 146 of file ts_model.cpp.

147 {
148 std::for_each(node->m_childs.begin(), node->m_childs.end(), [this](const base_node::base_node_ptr node){ node->visit(*this); } );
149 }
std::shared_ptr< base_node > base_node_ptr
Definition: ts_model.h:116

◆ visit() [2/4]

void back_string_replacer::visit ( const DTD_node node)

visit(const DTD_node *). visit

Definition at line 154 of file ts_model.cpp.

154{ }

◆ visit() [3/4]

void back_string_replacer::visit ( element_node node)

visit(element_node *node). visit

Definition at line 159 of file ts_model.cpp.

160 {
161 if(st_WaitForMessage == m_state && element_node::ent_message == node->element_node_type())
162 {
163 m_state = st_WaitForSource | st_WaitForTranslation;
164 }
165 else if(st_WaitForSource & m_state && element_node::ent_source == node->element_node_type())
166 {
167 assert(!source);
168 source = node;
169 m_state &= ~st_WaitForSource;
170
171 if(!(m_state & st_WaitForTranslation))
172 {
173 m_state |= st_Complete;
174 }
175 else
176 {
177 return;
178 }
179 }
180 else if(st_WaitForTranslation & m_state && element_node::ent_translation == node->element_node_type())
181 {
182 assert(!translation);
183 translation = node;
184 m_state &= ~st_WaitForTranslation;
185
186 if(!(m_state & st_WaitForSource))
187 {
188 m_state |= st_Complete;
189 }
190 else
191 {
192 return;
193 }
194 }
195
196 if(st_Complete & m_state)
197 {
198 map_QStringQString::const_iterator it = m_strings.find(translation->text());
199
200 if(m_strings.end() == it)
201 {
202 std::cerr << "Unprocessed tags <source>: " << source->text().toUtf8().constData()
203 << " <translation>: " << translation->text().toUtf8().constData() << std::endl;
204 }
205 else
206 {
207 QString text = it->second;
208
209 text.replace("\\n", "\n");
210 text.replace("\\r", "\r");
211 text.replace("\\t", "\t");
212
213 translation->set_text(text);
214 }
215
216 source = translation = nullptr;
217 m_state = st_WaitForMessage;
218 }
219
220 std::for_each(node->m_childs.begin(), node->m_childs.end(), [this](const base_node::base_node_ptr node){ node->visit(*this); } );
221 }
const QString & text() const
Definition: ts_model.h:186
EElementNodeType element_node_type() const
Definition: ts_model.h:183
void set_text(const QString &text)
Definition: ts_model.h:185
@ ent_translation
Definition: ts_model.h:173

◆ visit() [4/4]

void back_string_replacer::visit ( TS_node node)

visit(TS_node *node). visit

Definition at line 226 of file ts_model.cpp.

227 {
228 if(!m_langid.isEmpty())
229 {
230 node->replace_attribute_value("language", m_langid);
231 }
232
233 std::for_each(node->m_childs.begin(), node->m_childs.end(), [this](const base_node::base_node_ptr node)
234 {
235 node->visit(*this);
236 });
237 }
void replace_attribute_value(const QString &att_name, const QString &value)
Definition: ts_model.h:209

The documentation for this struct was generated from the following files: