1 /************************************************************************
2 **
3 ** @file vtranslatevars.cpp
4 ** @author Roman Telezhynskyi <dismine(at)gmail.com>
5 ** @date 10 6, 2015
6 **
7 ** @brief
8 ** @copyright
9 ** This source code is part of the Valentina project, a pattern making
10 ** program, whose allow create and modeling patterns of clothing.
11 ** Copyright (C) 2015 Valentina project
12 ** <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
13 **
14 ** Valentina is free software: you can redistribute it and/or modify
15 ** it under the terms of the GNU General Public License as published by
16 ** the Free Software Foundation, either version 3 of the License, or
17 ** (at your option) any later version.
18 **
19 ** Valentina is distributed in the hope that it will be useful,
20 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
21 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 ** GNU General Public License for more details.
23 **
24 ** You should have received a copy of the GNU General Public License
25 ** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
26 **
27 *************************************************************************/
28
29 #include "vtranslatevars.h"
30
31 #include <QList>
32 #include <QLocale>
33 #include <QMap>
34 #include <QMessageLogger>
35 #include <QString>
36 #include <QtDebug>
37
38 #include "../ifc/ifcdef.h"
39 #include "../qmuparser/qmuparsererror.h"
40 #include "../qmuparser/qmutokenparser.h"
41 #include "../qmuparser/qmutranslation.h"
42 #include "../vpatterndb/vtranslatevars.h"
43 #include "../vmisc/def.h"
44 #include "../vmisc/vabstractapplication.h"
45 #include "vtranslatemeasurements.h"
46 #include "pmsystems.h"
47
48 //---------------------------------------------------------------------------------------------------------------------
VTranslateVars()49 VTranslateVars::VTranslateVars()
50 :VTranslateMeasurements()
51 {
52 InitPatternMakingSystems();
53 InitVariables();
54 InitFunctions();
55
56 PrepareFunctionTranslations();
57 }
58
59 #define translate(context, source, disambiguation) qmu::QmuTranslation::translate((context), (source), (disambiguation))
60
61 //---------------------------------------------------------------------------------------------------------------------
InitPatternMakingSystems()62 void VTranslateVars::InitPatternMakingSystems()
63 {
64 //Note. We can't use here function and variables because lupdate tool doesn't see string in variables and doesn't
65 //mark such string to translation.
66 qmu::QmuTranslation name;
67 qmu::QmuTranslation author;
68 qmu::QmuTranslation book;
69
70 //=================================================================================================================
71 name = translate("VTranslateVars", "Bunka", "System name");
72 author = translate("VTranslateVars", "Bunka Fashion College", "Author name");
73 book = translate("VTranslateVars", "Fundamentals of Garment Design", "Book name");
74 InitSystem(p0_S, name, author, book);
75 //=================================================================================================================
76 name = translate("VTranslateVars", "Barnfield and Richard", "System name");
77 author = translate("VTranslateVars", "Jo Barnfield and Andrew Richards", "Author name");
78 book = translate("VTranslateVars", "Pattern Making Primer", "Book name");
79 InitSystem(p1_S, name, author, book);
80 //=================================================================================================================
81 name = translate("VTranslateVars", "Friendship/Women", "System name");
82 author = translate("VTranslateVars", "Elizabeth Friendship", "Author name");
83 book = translate("VTranslateVars",
84 "Creating Historical Clothes - Pattern Cutting from the 16th to the 19th Centuries", "Book name");
85 InitSystem(p2_S, name, author, book);
86 //=================================================================================================================
87 name = translate("VTranslateVars", "Morris, K.", "System name");
88 author = translate("VTranslateVars", "Karen Morris", "Author name");
89 book = translate("VTranslateVars", "Sewing Lingerie that Fits", "Book name");
90 InitSystem(p3_S, name, author, book);
91 //=================================================================================================================
92 name = translate("VTranslateVars", "Castro", "System name");
93 author = translate("VTranslateVars", "Lucia Mors de Castro", "Author name");
94 book = translate("VTranslateVars", "Patternmaking in Practic", "Book name");
95 InitSystem(p4_S, name, author, book);
96 //=================================================================================================================
97 name = translate("VTranslateVars", "Kim & Uh", "System name");
98 author = translate("VTranslateVars", "Injoo Kim and Mykyung Uh", "Author name");
99 book = translate("VTranslateVars", "Apparel Making in Fashion Design", "Book name");
100 InitSystem(p5_S, name, author, book);
101 //=================================================================================================================
102 name = translate("VTranslateVars", "Waugh", "System name");
103 author = translate("VTranslateVars", "Norah Waugh", "Author name");
104 book = translate("VTranslateVars", "Corsets and Crinolines", "Book name");
105 InitSystem(p6_S, name, author, book);
106 //=================================================================================================================
107 name = translate("VTranslateVars", "Grimble", "System name");
108 author = translate("VTranslateVars", "Frances Grimble", "Author name");
109 book = translate("VTranslateVars", "Fashions of the Gilded Age", "Book name");
110 InitSystem(p7_S, name, author, book);
111 //=================================================================================================================
112 name = translate("VTranslateVars", "Thornton's International System", "System name");
113 author = translate("VTranslateVars", "ed. R. L. Shep", "Author name");
114 book = translate("VTranslateVars", "The Great War: Styles and Patterns of the 1910s", "Book name");
115 InitSystem(p8_S, name, author, book);
116 //=================================================================================================================
117 name = translate("VTranslateVars", "Hillhouse & Mansfield", "System name");
118 author = translate("VTranslateVars", "Marion S. Hillhouse and Evelyn A. Mansfield", "Author name");
119 book = translate("VTranslateVars", "Dress Design: Draping and Flat Pattern Making", "Book name");
120 InitSystem(p9_S, name, author, book);
121 //=================================================================================================================
122 name = translate("VTranslateVars", "Pivnick", "System name");
123 author = translate("VTranslateVars", "Esther Kaplan Pivnick", "Author name");
124 book = translate("VTranslateVars", "How to Design Beautiful Clothes: Designing and Pattern Making", "Book name");
125 InitSystem(p10_S, name, author, book);
126 //=================================================================================================================
127 name = translate("VTranslateVars", "Minister & Son", "System name");
128 author = translate("VTranslateVars", "Edward Minister & Son, ed. R. L. Shep", "Author name");
129 book = translate("VTranslateVars", "The Complete Guide to Practical Cutting (1853)", "Book name");
130 InitSystem(p11_S, name, author, book);
131 //=================================================================================================================
132 name = translate("VTranslateVars", "Strickland", "System name");
133 author = translate("VTranslateVars", "Gertrude Strickland", "Author name");
134 book = translate("VTranslateVars", "A Tailoring Manual", "Book name");
135 InitSystem(p12_S, name, author, book);
136 //=================================================================================================================
137 name = translate("VTranslateVars", "Loh & Lewis", "System name");
138 author = translate("VTranslateVars", "May Loh and Diehl Lewis", "Author name");
139 book = translate("VTranslateVars", "Patternless Fashion Design", "Book name");
140 InitSystem(p13_S, name, author, book);
141 //=================================================================================================================
142 name = translate("VTranslateVars", "Morris, F. R.", "System name");
143 author = translate("VTranslateVars", "F. R. Morris", "Author name");
144 book = translate("VTranslateVars", "Ladies Garment Cutting and Making", "Book name");
145 InitSystem(p14_S, name, author, book);
146 //=================================================================================================================
147 name = translate("VTranslateVars", "Mason", "System name");
148 author = translate("VTranslateVars", "Gertrude Mason", "Author name");
149 book = translate("VTranslateVars", "Gertrude Mason's Patternmaking Book", "Book name");
150 InitSystem(p15_S, name, author, book);
151 //=================================================================================================================
152 name = translate("VTranslateVars", "Kimata", "System name");
153 author = translate("VTranslateVars", "K. Kimata", "Author name");
154 book = translate("VTranslateVars", "K.Kimata's Simplified Drafting Book for Dressmaking", "Book name");
155 InitSystem(p16_S, name, author, book);
156 //=================================================================================================================
157 name = translate("VTranslateVars", "Master Designer", "System name");
158 author = translate("VTranslateVars", "The Master Designer (Chicago, IL)", "Author name");
159 book = translate("VTranslateVars", "Master Designer's System of Designing, Cutting and Grading", "Book name");
160 InitSystem(p17_S, name, author, book);
161 //=================================================================================================================
162 name = translate("VTranslateVars", "Kopp", "System name");
163 author = translate("VTranslateVars", "Ernestine Kopp, Vittorina Rolfo, Beatrice Zelin, Lee Gross", "Author name");
164 book = translate("VTranslateVars", "How to Draft Basic Patterns", "Book name");
165 InitSystem(p18_S, name, author, book);
166 //=================================================================================================================
167 name = translate("VTranslateVars", "Ekern", "System name");
168 author = translate("VTranslateVars", "Doris Ekern", "Author name");
169 book = translate("VTranslateVars", "Slacks Cut-to-Fit for Your Figure", "Book name");
170 InitSystem(p19_S, name, author, book);
171 //=================================================================================================================
172 name = translate("VTranslateVars", "Doyle", "System name");
173 author = translate("VTranslateVars", "Sarah J. Doyle", "Author name");
174 book = translate("VTranslateVars", "Sarah's Key to Pattern Drafting", "Book name");
175 InitSystem(p20_S, name, author, book);
176 //=================================================================================================================
177 name = translate("VTranslateVars", "Shelton", "System name");
178 author = translate("VTranslateVars", "Karla J. Shelton", "Author name");
179 book = translate("VTranslateVars", "Design and Sew Jeans", "Book name");
180 InitSystem(p21_S, name, author, book);
181 //=================================================================================================================
182 name = translate("VTranslateVars", "Lady Boutique", "System name");
183 author = translate("VTranslateVars", "Lady Boutique", "Author name");
184 book = translate("VTranslateVars", "Lady Boutique magazine (Japan)", "Book name");
185 InitSystem(p22_S, name, author, book);
186 //=================================================================================================================
187 name = translate("VTranslateVars", "Rohr", "System name");
188 author = translate("VTranslateVars", "M. Rohr", "Author name");
189 book = translate("VTranslateVars", "Pattern Drafting and Grading: Women's nd Misses' Garment Design", "Book name");
190 InitSystem(p23_S, name, author, book);
191 //=================================================================================================================
192 name = translate("VTranslateVars", "Moore", "System name");
193 author = translate("VTranslateVars", "Dorothy Moore", "Author name");
194 book = translate("VTranslateVars", "Dorothy Moore's Pattern Drafting and Dressmaking", "Book name");
195 InitSystem(p24_S, name, author, book);
196 //=================================================================================================================
197 name = translate("VTranslateVars", "Abling", "System name");
198 author = translate("VTranslateVars", "Bina Abling", "Author name");
199 book = translate("VTranslateVars", "Integrating Draping, Drafting and Drawing", "Book name");
200 InitSystem(p25_S, name, author, book);
201 //=================================================================================================================
202 name = translate("VTranslateVars", "Fukomoto", "System name");
203 author = translate("VTranslateVars", "Sue S. Fukomoto", "Author name");
204 book = translate("VTranslateVars", "Scientific Pattern Drafting as taught at Style Center School of Costume "
205 "Design, Dressmaking and Millinery", "Book name");
206 InitSystem(p26_S, name, author, book);
207 //=================================================================================================================
208 name = translate("VTranslateVars", "Dressmaking International", "System name");
209 author = translate("VTranslateVars", "Dressmaking International", "Author name");
210 book = translate("VTranslateVars", "Dressmaking International magazine (Japan)", "Book name");
211 InitSystem(p27_S, name, author, book);
212 //=================================================================================================================
213 name = translate("VTranslateVars", "Erwin", "System name");
214 author = translate("VTranslateVars", "Mabel D. Erwin", "Author name");
215 book = translate("VTranslateVars", "Practical Dress Design", "Book name");
216 InitSystem(p28_S, name, author, book);
217 //=================================================================================================================
218 name = translate("VTranslateVars", "Gough", "System name");
219 author = translate("VTranslateVars", "E. L. G. Gough", "Author name");
220 book = translate("VTranslateVars", "Principles of Garment Cutting", "Book name");
221 InitSystem(p29_S, name, author, book);
222 //=================================================================================================================
223 name = translate("VTranslateVars", "Allemong", "System name");
224 author = translate("VTranslateVars", "Elizabeth M. Allemong", "Author name");
225 book = translate("VTranslateVars", "European Cut", "Book name");
226 InitSystem(p30_S, name, author, book);
227 //=================================================================================================================
228 name = translate("VTranslateVars", "McCunn", "System name");
229 author = translate("VTranslateVars", "Donald H. McCunn", "Author name");
230 book = translate("VTranslateVars", "How to Make Your Own Sewing Patterns", "Book name");
231 InitSystem(p31_S, name, author, book);
232 //=================================================================================================================
233 name = translate("VTranslateVars", "Zarapkar", "System name");
234 author = translate("VTranslateVars", "Shri K. R. Zarapkar and Shri Arvind K. Zarapkar", "Author name");
235 book = translate("VTranslateVars", "Zarapkar System of Cutting", "Book name");
236 InitSystem(p32_S, name, author, book);
237 //=================================================================================================================
238 name = translate("VTranslateVars", "Kunick", "System name");
239 author = translate("VTranslateVars", "Philip Kunick", "Author name");
240 book = translate("VTranslateVars", "Sizing, Pattern Construction and Grading for Women's and Children's Garments",
241 "Book name");
242 InitSystem(p33_S, name, author, book);
243 //=================================================================================================================
244 name = translate("VTranslateVars", "Handford", "System name");
245 author = translate("VTranslateVars", "Jack Handford", "Author name");
246 book = translate("VTranslateVars", "Professional Patternmaking for Designers: Women's Wear, Men's Casual Wear",
247 "Book name");
248 InitSystem(p34_S, name, author, book);
249 //=================================================================================================================
250 name = translate("VTranslateVars", "Davis", "System name");
251 author = translate("VTranslateVars", "R. I. Davis", "Author name");
252 book = translate("VTranslateVars", "Men's 17th & 18th Century Costume, Cut & Fashion", "Book name");
253 InitSystem(p35_S, name, author, book);
254 //=================================================================================================================
255 name = translate("VTranslateVars", "MacLochlainn", "System name");
256 author = translate("VTranslateVars", "Jason MacLochlainn", "Author name");
257 book = translate("VTranslateVars", "The Victorian Tailor: An Introduction to Period Tailoring", "Book name");
258 InitSystem(p36_S, name, author, book);
259 //=================================================================================================================
260 name = translate("VTranslateVars", "Joseph-Armstrong", "System name");
261 author = translate("VTranslateVars", "Helen Joseph-Armstrong", "Author name");
262 book = translate("VTranslateVars", "Patternmaking for Fashion Design", "Book name");
263 InitSystem(p37_S, name, author, book);
264 //=================================================================================================================
265 name = translate("VTranslateVars", "Supreme System", "System name");
266 author = translate("VTranslateVars", "Frederick T. Croonberg", "Author name");
267 book = translate("VTranslateVars", "The Blue Book of Men's Tailoring, Grand Edition of Supreme System for "
268 "Producing Mens Garments (1907)", "Book name");
269 InitSystem(p38_S, name, author, book);
270 //=================================================================================================================
271 name = translate("VTranslateVars", "Sugino", "System name");
272 author = translate("VTranslateVars", "Dressmaking", "Author name");
273 book = translate("VTranslateVars", "Pattern Drafting Vols. I, II, III (Japan)", "Book name");
274 InitSystem(p39_S, name, author, book);
275 //=================================================================================================================
276 name = translate("VTranslateVars", "Centre Point System", "System name");
277 author = translate("VTranslateVars", "Louis Devere", "Author name");
278 book = translate("VTranslateVars", "The Handbook of Practical Cutting on the Centre Point System", "Book name");
279 InitSystem(p40_S, name, author, book);
280 //=================================================================================================================
281 name = translate("VTranslateVars", "Aldrich/Men", "System name");
282 author = translate("VTranslateVars", "Winifred Aldrich", "Author name");
283 book = translate("VTranslateVars", "Metric Pattern Cutting for Menswear", "Book name");
284 InitSystem(p41_S, name, author, book);
285 //=================================================================================================================
286 name = translate("VTranslateVars", "Aldrich/Women", "System name");
287 author = translate("VTranslateVars", "Winifred Aldrich", "Author name");
288 book = translate("VTranslateVars", "Metric Pattern Cutting for Women's Wear", "Book name");
289 InitSystem(p42_S, name, author, book);
290 //=================================================================================================================
291 name = translate("VTranslateVars", "Kershaw", "System name");
292 author = translate("VTranslateVars", "Gareth Kershaw", "Author name");
293 book = translate("VTranslateVars", "Patternmaking for Menswear", "Book name");
294 InitSystem(p43_S, name, author, book);
295 //=================================================================================================================
296 name = translate("VTranslateVars", "Gilewska", "System name");
297 author = translate("VTranslateVars", "Teresa Gilewska", "Author name");
298 book = translate("VTranslateVars", "Pattern-Drafting for Fashion: The Basics", "Book name");
299 InitSystem(p44_S, name, author, book);
300 //=================================================================================================================
301 name = translate("VTranslateVars", "Lo", "System name");
302 author = translate("VTranslateVars", "Dennic Chunman Lo", "Author name");
303 book = translate("VTranslateVars", "Pattern Cutting", "Book name");
304 InitSystem(p45_S, name, author, book);
305 //=================================================================================================================
306 name = translate("VTranslateVars", "Bray", "System name");
307 author = translate("VTranslateVars", "Natalie Bray", "Author name");
308 book = translate("VTranslateVars", "Dress Pattern Designing: The Basic Principles of Cut and Fit", "Book name");
309 InitSystem(p46_S, name, author, book);
310 //=================================================================================================================
311 name = translate("VTranslateVars", "Knowles/Men", "System name");
312 author = translate("VTranslateVars", "Lori A. Knowles", "Author name");
313 book = translate("VTranslateVars", "The Practical Guide to Patternmaking for Fashion Designers: Menswear",
314 "Book name");
315 InitSystem(p47_S, name, author, book);
316 //=================================================================================================================
317 name = translate("VTranslateVars", "Friendship/Men", "System name");
318 author = translate("VTranslateVars", "Elizabeth Friendship", "Author name");
319 book = translate("VTranslateVars", "Pattern Cutting for Men's Costume", "Book name");
320 InitSystem(p48_S, name, author, book);
321 //=================================================================================================================
322 name = translate("VTranslateVars", "Brown", "System name");
323 author = translate("VTranslateVars", "P. Clement Brown", "Author name");
324 book = translate("VTranslateVars", "Art in Dress", "Book name");
325 InitSystem(p49_S, name, author, book);
326 //=================================================================================================================
327 name = translate("VTranslateVars", "Mitchell", "System name");
328 author = translate("VTranslateVars", "Jno. J. Mitchell", "Author name");
329 book = translate("VTranslateVars", "\"Standard\" Work on Cutting (Men's Garments) 1886: The Art and Science of "
330 "Garment Cutting", "Book name");
331 InitSystem(p50_S, name, author, book);
332 //=================================================================================================================
333 name = translate("VTranslateVars", "GOST 17917-86", "System name");
334 author = translate("VTranslateVars", "Ministry of consumer industry of the USSR", "Author name");
335 book = translate("VTranslateVars", "Standard figure boys", "Book name");
336 InitSystem(p51_S, name, author, book);
337 //=================================================================================================================
338 name = translate("VTranslateVars", "Eddy", "System name");
339 author = translate("VTranslateVars", "Josephine F. Eddy and Elizabeth C. B. Wiley", "Author name");
340 book = translate("VTranslateVars", "Pattern and Dress Design", "Book name");
341 InitSystem(p52_S, name, author, book);
342 //=================================================================================================================
343 name = translate("VTranslateVars", "Knowles/Women", "System name");
344 author = translate("VTranslateVars", "Lori A. Knowles", "Author name");
345 book = translate("VTranslateVars", "Practical Guide to Patternmaking for Fashion Designers: Juniors, Misses, and "
346 "Women", "Book name");
347 InitSystem(p53_S, name, author, book);
348 //=================================================================================================================
349 name = translate("VTranslateVars", "American Garment Cutter", "System name");
350 author = translate("VTranslateVars", "ed. R. L. Shep", "Author name");
351 book = translate("VTranslateVars", "The Great War: Styles and Patterns of the 1910s", "Book name");
352 InitSystem(p54_S, name, author, book);
353 //=================================================================================================================
354 name = translate("VTranslateVars", "None", "System name");
355 author = translate("VTranslateVars", "Valentina team", "Author name");
356 book = translate("VTranslateVars", "Valentina's internal standard", "Book name");
357 InitSystem(p998_S, name, author, book);
358 //=================================================================================================================
359 }
360
361 //---------------------------------------------------------------------------------------------------------------------
InitVariables()362 void VTranslateVars::InitVariables()
363 {
364 variables.insert(measurement_, translate("VTranslateVars", "M_", "Left symbol _ in the name"));
365 variables.insert(increment_, translate("VTranslateVars", "Increment_", "Left symbol _ in the name"));
366 variables.insert(line_, translate("VTranslateVars", "Line_", "Left symbol _ in the name"));
367 variables.insert(angleLine_, translate("VTranslateVars", "AngleLine_", "Left symbol _ in the name"));
368 variables.insert(arc_, translate("VTranslateVars", "Arc_", "Left symbol _ in the name"));
369 variables.insert(elarc_, translate("VTranslateVars", "ElArc_", "Left symbol _ in the name"));
370 variables.insert(spl_, translate("VTranslateVars", "Spl_", "Left symbol _ in the name"));
371 variables.insert(splPath, translate("VTranslateVars", "SplPath", "Do not add symbol _ to the end of the name"));
372 variables.insert(radiusArc_, translate("VTranslateVars", "RadiusArc_", "Left symbol _ in the name"));
373 variables.insert(radius1ElArc_, translate("VTranslateVars", "Radius1ElArc_", "Left symbol _ in the name"));
374 variables.insert(radius2ElArc_, translate("VTranslateVars", "Radius2ElArc_", "Left symbol _ in the name"));
375 variables.insert(angle1Arc_, translate("VTranslateVars", "Angle1Arc_", "Left symbol _ in the name"));
376 variables.insert(angle2Arc_, translate("VTranslateVars", "Angle2Arc_", "Left symbol _ in the name"));
377 variables.insert(angle1ElArc_, translate("VTranslateVars", "Angle1ElArc_", "Left symbol _ in the name"));
378 variables.insert(angle2ElArc_, translate("VTranslateVars", "Angle2ElArc_", "Left symbol _ in the name"));
379 variables.insert(angle1Spl_, translate("VTranslateVars", "Angle1Spl_", "Left symbol _ in the name"));
380 variables.insert(angle2Spl_, translate("VTranslateVars", "Angle2Spl_", "Left symbol _ in the name"));
381 variables.insert(angle1SplPath, translate("VTranslateVars", "Angle1SplPath",
382 "Do not add symbol _ to the end of the name"));
383 variables.insert(angle2SplPath, translate("VTranslateVars", "Angle2SplPath",
384 "Do not add symbol _ to the end of the name"));
385 variables.insert(seg_, translate("VTranslateVars", "Seg_", "Segment. Left symbol _ in the name"));
386 variables.insert(currentLength, translate("VTranslateVars", "CurrentLength", "Do not add space between words"));
387 variables.insert(currentSeamAllowance, translate("VTranslateVars", "CurrentSeamAllowance",
388 "Do not add space between words"));
389 variables.insert(c1LengthSpl_, translate("VTranslateVars", "C1LengthSpl_", "Left symbol _ in the name"));
390 variables.insert(c2LengthSpl_, translate("VTranslateVars", "C2LengthSpl_", "Left symbol _ in the name"));
391 variables.insert(c1LengthSplPath, translate("VTranslateVars", "C1LengthSplPath",
392 "Do not add symbol _ to the end of the name"));
393 variables.insert(c2LengthSplPath, translate("VTranslateVars", "C2LengthSplPath",
394 "Do not add symbol _ to the end of the name"));
395 variables.insert(rotationElArc_, translate("VTranslateVars", "RotationElArc_", "Left symbol _ in the name"));
396 }
397
398 //---------------------------------------------------------------------------------------------------------------------
InitFunctions()399 void VTranslateVars::InitFunctions()
400 {
401 functions.insert(degTorad_F, translate("VTranslateVars", "degTorad", "converts degrees to radian"));
402 functionsDescriptions.insert(degTorad_F, translate("VTranslateVars", "converts degrees to radian",
403 "functionm degTorad"));
404
405 functions.insert(radTodeg_F, translate("VTranslateVars", "radTodeg", "converts radian to degrees"));
406 functionsDescriptions.insert(radTodeg_F, translate("VTranslateVars", "converts radian to degrees",
407 "function radTodeg"));
408
409 functions.insert(sin_F, translate("VTranslateVars", "sin", "sine function working with radians"));
410 functionsDescriptions.insert(sin_F, translate("VTranslateVars", "sine function working with radians",
411 "function sin"));
412
413 functions.insert(cos_F, translate("VTranslateVars", "cos", "cosine function working with radians"));
414 functionsDescriptions.insert(cos_F, translate("VTranslateVars", "cosine function working with radians",
415 "function cos"));
416
417 functions.insert(tan_F, translate("VTranslateVars", "tan", "tangens function working with radians"));
418 functionsDescriptions.insert(tan_F, translate("VTranslateVars", "tangens function working with radians",
419 "function tan"));
420
421 functions.insert(asin_F, translate("VTranslateVars", "asin", "arcus sine function working with radians"));
422 functionsDescriptions.insert(asin_F, translate("VTranslateVars", "arcus sine function working with radians",
423 "function asin"));
424
425 functions.insert(acos_F, translate("VTranslateVars", "acos", "arcus cosine function working with radians"));
426 functionsDescriptions.insert(acos_F, translate("VTranslateVars", "arcus cosine function working with radians",
427 "function acos"));
428
429 functions.insert(atan_F, translate("VTranslateVars", "atan", "arcus tangens function working with radians"));
430 functionsDescriptions.insert(atan_F, translate("VTranslateVars", "arcus tangens function working with radians",
431 "function atan"));
432
433 functions.insert(sinh_F, translate("VTranslateVars", "sinh", "hyperbolic sine function"));
434 functionsDescriptions.insert(sinh_F, translate("VTranslateVars", "hyperbolic sine function", "function sinh"));
435
436 functions.insert(cosh_F, translate("VTranslateVars", "cosh", "hyperbolic cosine"));
437 functionsDescriptions.insert(cosh_F, translate("VTranslateVars", "hyperbolic cosine", "function cosh"));
438
439 functions.insert(tanh_F, translate("VTranslateVars", "tanh", "hyperbolic tangens function"));
440 functionsDescriptions.insert(tanh_F, translate("VTranslateVars", "hyperbolic tangens function", "function tanh"));
441
442 functions.insert(asinh_F, translate("VTranslateVars", "asinh", "hyperbolic arcus sine function"));
443 functionsDescriptions.insert(asinh_F, translate("VTranslateVars", "hyperbolic arcus sine function",
444 "function asinh"));
445
446 functions.insert(acosh_F, translate("VTranslateVars", "acosh", "hyperbolic arcus cosine function"));
447 functionsDescriptions.insert(acosh_F, translate("VTranslateVars", "hyperbolic arcus cosine function",
448 "function acosh"));
449
450 functions.insert(atanh_F, translate("VTranslateVars", "atanh", "hyperbolic arcur tangens function"));
451 functionsDescriptions.insert(atanh_F, translate("VTranslateVars", "hyperbolic arcur tangens function",
452 "function atanh"));
453
454 functions.insert(sinD_F, translate("VTranslateVars", "sinD", "sine function working with degrees"));
455 functionsDescriptions.insert(sinD_F, translate("VTranslateVars", "sine function working with degrees",
456 "function sinD"));
457
458 functions.insert(cosD_F, translate("VTranslateVars", "cosD", "cosine function working with degrees"));
459 functionsDescriptions.insert(cosD_F, translate("VTranslateVars", "cosine function working with degrees",
460 "function cosD"));
461
462 functions.insert(tanD_F, translate("VTranslateVars", "tanD", "tangens function working with degrees"));
463 functionsDescriptions.insert(tanD_F, translate("VTranslateVars", "tangens function working with degrees",
464 "function tanD"));
465
466 functions.insert(asinD_F, translate("VTranslateVars", "asinD", "arcus sine function working with degrees"));
467 functionsDescriptions.insert(asinD_F, translate("VTranslateVars", "arcus sine function working with degrees",
468 "function asinD"));
469
470 functions.insert(acosD_F, translate("VTranslateVars", "acosD", "arcus cosine function working with degrees"));
471 functionsDescriptions.insert(acosD_F, translate("VTranslateVars", "arcus cosine function working with degrees",
472 "function acosD"));
473
474 functions.insert(atanD_F, translate("VTranslateVars", "atanD", "arcus tangens function working with degrees"));
475 functionsDescriptions.insert(atanD_F, translate("VTranslateVars", "arcus tangens function working with degrees",
476 "function atanD"));
477
478 functions.insert(log2_F, translate("VTranslateVars", "log2", "logarithm to the base 2"));
479 functionsDescriptions.insert(log2_F, translate("VTranslateVars", "logarithm to the base 2", "function log2"));
480
481 functions.insert(log10_F, translate("VTranslateVars", "log10", "logarithm to the base 10"));
482 functionsDescriptions.insert(log10_F, translate("VTranslateVars", "logarithm to the base 10", "function log10"));
483
484 functions.insert(log_F, translate("VTranslateVars", "log", "logarithm to the base 10"));
485 functionsDescriptions.insert(log_F, translate("VTranslateVars", "logarithm to the base 10", "function log"));
486
487 functions.insert(ln_F, translate("VTranslateVars", "ln", "logarithm to base e (2.71828...)"));
488 functionsDescriptions.insert(ln_F, translate("VTranslateVars", "logarithm to base e (2.71828...)", "function ln"));
489
490 functions.insert(exp_F, translate("VTranslateVars", "exp", "e raised to the power of x"));
491 functionsDescriptions.insert(exp_F, translate("VTranslateVars", "e raised to the power of x", "function exp"));
492
493 functions.insert(sqrt_F, translate("VTranslateVars", "sqrt", "square root of a value"));
494 functionsDescriptions.insert(sqrt_F, translate("VTranslateVars", "square root of a value", "function sqrt"));
495
496 functions.insert(sign_F, translate("VTranslateVars", "sign", "sign function -1 if x<0; 1 if x>0"));
497 functionsDescriptions.insert(sign_F, translate("VTranslateVars", "sign function -1 if x<0; 1 if x>0",
498 "function sign"));
499
500 functions.insert(rint_F, translate("VTranslateVars", "rint", "round to nearest integer"));
501 functionsDescriptions.insert(rint_F, translate("VTranslateVars", "round to nearest integer", "function rint"));
502
503 functions.insert(r2cm_F, translate("VTranslateVars", "r2cm", "round to up to 1 decimal"));
504 functionsDescriptions.insert(r2cm_F, translate("VTranslateVars", "round to up to 1 decimal", "function r2cm"));
505
506 functions.insert(csrCm_F, translate("VTranslateVars", "csrCm", "cut, split and rotate modeling operation. Takes"
507 " cm units."));
508 functionsDescriptions.insert(csrCm_F, translate("VTranslateVars", "cut, split and rotate modeling operation. Takes "
509 "cm units.", "function csrCm"));
510
511 functions.insert(csrInch_F, translate("VTranslateVars", "csrInch", "cut, split and rotate modeling operation. Takes"
512 " inch units."));
513 functionsDescriptions.insert(csrInch_F, translate("VTranslateVars", "cut, split and rotate modeling operation. Takes"
514 " inch units.", "function csrInch"));
515
516 functions.insert(abs_F, translate("VTranslateVars", "abs", "absolute value"));
517 functionsDescriptions.insert(abs_F, translate("VTranslateVars", "absolute value", "function abs"));
518
519 functions.insert(min_F, translate("VTranslateVars", "min", "min of all arguments"));
520 functionsDescriptions.insert(min_F, translate("VTranslateVars", "min of all arguments", "function min"));
521
522 functions.insert(max_F, translate("VTranslateVars", "max", "max of all arguments"));
523 functionsDescriptions.insert(max_F, translate("VTranslateVars", "max of all arguments", "function max"));
524
525 functions.insert(sum_F, translate("VTranslateVars", "sum", "sum of all arguments"));
526 functionsDescriptions.insert(sum_F, translate("VTranslateVars", "sum of all arguments", "function sum"));
527
528 functions.insert(avg_F, translate("VTranslateVars", "avg", "mean value of all arguments"));
529 functionsDescriptions.insert(avg_F, translate("VTranslateVars", "mean value of all arguments", "function avg"));
530
531 functions.insert(fmod_F, translate("VTranslateVars", "fmod",
532 "Returns the floating-point remainder of numer/denom (rounded towards zero)"));
533 functionsDescriptions.insert(fmod_F, translate("VTranslateVars", "Returns the floating-point remainder of "
534 "numer/denom (rounded towards zero)",
535 "function fmod"));
536 functions.insert(warning_F, translate("VTranslateVars", "warning", "Calculation warning"));
537 functionsDescriptions.insert(warning_F, translate("VTranslateVars", "Show a warning in calculations",
538 "function warning"));
539 }
540
541 #undef translate
542
543 //---------------------------------------------------------------------------------------------------------------------
PrepareFunctionTranslations()544 void VTranslateVars::PrepareFunctionTranslations()
545 {
546 translatedFunctions.clear();
547 QMap<QString, qmu::QmuTranslation>::const_iterator i = functions.constBegin();
548 while (i != functions.constEnd())
549 {
550 const QString translated = i.value().translate(VAbstractApplication::VApp()->Settings()->GetLocale());
551 if (i.key() != translated)
552 {
553 translatedFunctions.insert(translated, i.key());
554 }
555 ++i;
556 }
557 }
558
559 //---------------------------------------------------------------------------------------------------------------------
InitSystem(const QString & code,const qmu::QmuTranslation & name,const qmu::QmuTranslation & author,const qmu::QmuTranslation & book)560 void VTranslateVars::InitSystem(const QString &code, const qmu::QmuTranslation &name, const qmu::QmuTranslation &author,
561 const qmu::QmuTranslation &book)
562 {
563 PMSystemNames.insert(code, name);
564 PMSystemAuthors.insert(code, author);
565 PMSystemBooks.insert(code, book);
566 }
567
568 //---------------------------------------------------------------------------------------------------------------------
569 /**
570 * @brief CorrectionsPositions correct position tokens in expression after token translation.
571 *
572 * Because translated string can have different length compare to original need make correction after each translation.
573 * If bias = 0 correction will not happens.
574 *
575 * @param position position currecnt token in expression
576 * @param bias difference between original token length and translated
577 * @param tokens all tokens
578 * @param numbers all numbers
579 */
CorrectionsPositions(int position,int bias,QMap<int,QString> & tokens,QMap<int,QString> & numbers) const580 void VTranslateVars::CorrectionsPositions(int position, int bias, QMap<int, QString> &tokens,
581 QMap<int, QString> &numbers) const
582 {
583 if (bias == 0)
584 {
585 return;// Nothing to correct;
586 }
587
588 BiasTokens(position, bias, tokens);
589 BiasTokens(position, bias, numbers);
590 }
591
592 //---------------------------------------------------------------------------------------------------------------------
593 /**
594 * @brief BiasTokens change position for each token that have position more then "position".
595 * @param position token position
596 * @param bias difference between original token length and translated
597 * @param tokens all tokens
598 */
BiasTokens(int position,int bias,QMap<int,QString> & tokens)599 void VTranslateVars::BiasTokens(int position, int bias, QMap<int, QString> &tokens)
600 {
601 QMap<int, QString> newTokens;
602 QMap<int, QString>::const_iterator i = tokens.constBegin();
603 while (i != tokens.constEnd())
604 {
605 if (i.key()<= position)
606 { // Tokens before position "position" did not change his positions.
607 newTokens.insert(i.key(), i.value());
608 }
609 else
610 {
611 newTokens.insert(i.key()-bias, i.value());
612 }
613 ++i;
614 }
615 tokens = newTokens;
616 }
617
618
619
620 //---------------------------------------------------------------------------------------------------------------------
621 /**
622 * @brief VariablesFromUser translate variable to internal look.
623 * @param newFormula [in|out] expression to translate
624 * @param position token position
625 * @param token token to translate
626 * @param bias hold change of length between translated and origin token string
627 * @return true if was found variable with same name.
628 */
VariablesFromUser(QString & newFormula,int position,const QString & token,int & bias) const629 bool VTranslateVars::VariablesFromUser(QString &newFormula, int position, const QString &token, int &bias) const
630 {
631 const QString currentLengthTr =
632 variables.value(currentLength).translate(VAbstractApplication::VApp()->Settings()->GetLocale());
633 const QString currentSeamAllowanceTr = variables.value(currentSeamAllowance)
634 .translate(VAbstractApplication::VApp()->Settings()->GetLocale());
635
636 QMap<QString, qmu::QmuTranslation>::const_iterator i = variables.constBegin();
637 while (i != variables.constEnd())
638 {
639 const qmu::QmuTranslation &var = i.value();
640 const QString varTr = var.translate(VAbstractApplication::VApp()->Settings()->GetLocale());
641
642 if (token.indexOf(varTr) == 0)
643 {
644 if ((varTr == currentLengthTr || varTr == currentSeamAllowanceTr) && token != varTr)
645 {
646 ++i;
647 continue;
648 }
649
650 newFormula.replace(position, varTr.length(), i.key());
651 QString newToken = token;
652 newToken.replace(0, varTr.length(), i.key());
653 bias = token.length() - newToken.length();
654 return true;
655 }
656 ++i;
657 }
658 return false;
659 }
660
661 //---------------------------------------------------------------------------------------------------------------------
662 /**
663 * @brief FunctionsFromUser translate function name to internal look.
664 * @param newFormula [in|out] expression to translate
665 * @param position token position
666 * @param token token to translate
667 * @param bias hold change of length between translated and origin token string
668 * @return true if was found function with same name.
669 */
FunctionsFromUser(QString & newFormula,int position,const QString & token,int & bias) const670 bool VTranslateVars::FunctionsFromUser(QString &newFormula, int position, const QString &token, int &bias) const
671 {
672 QMap<QString, qmu::QmuTranslation>::const_iterator i = functions.constBegin();
673 while (i != functions.constEnd())
674 {
675 if (token == i.value().translate(VAbstractApplication::VApp()->Settings()->GetLocale()))
676 {
677 newFormula.replace(position, token.length(), i.key());
678 bias = token.length() - i.key().length();
679 return true;
680 }
681 ++i;
682 }
683 return false;
684 }
685
686 //---------------------------------------------------------------------------------------------------------------------
687 /**
688 * @brief VariablesToUser translate variable name to user.
689 * @param newFormula [in|out] expression to translate
690 * @param position token position
691 * @param token token to translate
692 * @param bias hold change of length between translated and origin token string
693 * @return true if was found variable with same name.
694 */
VariablesToUser(QString & newFormula,int position,const QString & token,int & bias) const695 bool VTranslateVars::VariablesToUser(QString &newFormula, int position, const QString &token, int &bias) const
696 {
697 QMap<QString, qmu::QmuTranslation>::const_iterator i = variables.constBegin();
698 while (i != variables.constEnd())
699 {
700 if (token.indexOf( i.key() ) == 0)
701 {
702 if ((i.key() == currentLength || i.key() == currentSeamAllowance) && token != i.key())
703 {
704 ++i;
705 continue;
706 }
707
708 newFormula.replace(position, i.key().length(),
709 i.value().translate(VAbstractApplication::VApp()->Settings()->GetLocale()));
710
711 QString newToken = token;
712 newToken.replace(0, i.key().length(),
713 i.value().translate(VAbstractApplication::VApp()->Settings()->GetLocale()));
714 bias = token.length() - newToken.length();
715 return true;
716 }
717 ++i;
718 }
719 return false;
720 }
721
722 //---------------------------------------------------------------------------------------------------------------------
InternalVarToUser(const QString & var) const723 QString VTranslateVars::InternalVarToUser(const QString &var) const
724 {
725 QString newVar = var;
726 int bias = 0;
727 if (VariablesToUser(newVar, 0, var, bias))
728 {
729 return newVar;
730 }
731 else
732 {
733 return var;
734 }
735 }
736
737 //---------------------------------------------------------------------------------------------------------------------
VarToUser(const QString & var) const738 QString VTranslateVars::VarToUser(const QString &var) const
739 {
740 if (VAbstractApplication::VApp()->Settings()->GetLocale() == QStringLiteral("zh_CN"))
741 {
742 return var; // We do not support translation of variables for Chinese
743 }
744
745 if (measurements.contains(var))
746 {
747 return measurements.value(var).translate(VAbstractApplication::VApp()->Settings()->GetLocale());
748 }
749
750 if (functions.contains(var))
751 {
752 return functions.value(var).translate(VAbstractApplication::VApp()->Settings()->GetLocale());
753 }
754
755 return InternalVarToUser(var);
756 }
757
758 //---------------------------------------------------------------------------------------------------------------------
VarFromUser(const QString & var) const759 QString VTranslateVars::VarFromUser(const QString &var) const
760 {
761 if (VAbstractApplication::VApp()->Settings()->GetLocale() == QStringLiteral("zh_CN"))
762 {
763 return var; // We do not support translation of variables for Chinese
764 }
765
766 QString newVar = var;
767 int bias = 0;
768 if (MeasurementsFromUser(newVar, 0, var, bias))
769 {
770 return newVar;
771 }
772
773 if (VariablesFromUser(newVar, 0, var, bias))
774 {
775 return newVar;
776 }
777
778 if (FunctionsFromUser(newVar, 0, var, bias))
779 {
780 return newVar;
781 }
782 return newVar;
783 }
784
785 //---------------------------------------------------------------------------------------------------------------------
PMSystemName(const QString & code) const786 QString VTranslateVars::PMSystemName(const QString &code) const
787 {
788 return PMSystemNames.value(code).translate(VAbstractApplication::VApp()->Settings()->GetLocale());
789 }
790
791 //---------------------------------------------------------------------------------------------------------------------
PMSystemAuthor(const QString & code) const792 QString VTranslateVars::PMSystemAuthor(const QString &code) const
793 {
794 return PMSystemAuthors.value(code).translate(VAbstractApplication::VApp()->Settings()->GetLocale());
795 }
796
797 //---------------------------------------------------------------------------------------------------------------------
PMSystemBook(const QString & code) const798 QString VTranslateVars::PMSystemBook(const QString &code) const
799 {
800 return PMSystemBooks.value(code).translate(VAbstractApplication::VApp()->Settings()->GetLocale());
801 }
802
803 //---------------------------------------------------------------------------------------------------------------------
804 /**
805 * @brief FormulaFromUser replace all known tokens in formula to internal look. Also change decimal
806 * separator in numbers.
807 * @param formula expression that need translate
808 * @throw qmu::QmuParserError in case of a wrong expression
809 * @return translated expression
810 */
FormulaFromUser(const QString & formula,bool osSeparator) const811 QString VTranslateVars::FormulaFromUser(const QString &formula, bool osSeparator) const
812 {
813 if (formula.isEmpty())
814 {
815 return formula;
816 }
817 QString newFormula = formula;// Local copy for making changes
818
819 // Eval formula
820 QScopedPointer<qmu::QmuTokenParser> cal(new qmu::QmuTokenParser(formula, osSeparator, true, GetTranslatedFunctions()));
821 QMap<int, QString> tokens = cal->GetTokens();// Tokens (variables, measurements)
822 QMap<int, QString> numbers = cal->GetNumbers();// All numbers in expression for changing decimal separator
823 delete cal.take();
824
825 QList<int> tKeys = tokens.keys();// Take all tokens positions
826 QList<QString> tValues = tokens.values();
827 for (int i = 0; i < tKeys.size(); ++i)
828 {
829 int bias = 0;
830 if (MeasurementsFromUser(newFormula, tKeys.at(i), tValues.at(i), bias))
831 {
832 if (bias != 0)
833 {// Translated token has different length than original. Position next tokens need to be corrected.
834 CorrectionsPositions(tKeys.at(i), bias, tokens, numbers);
835 tKeys = tokens.keys();
836 tValues = tokens.values();
837 }
838 continue;
839 }
840
841 if (VariablesFromUser(newFormula, tKeys.at(i), tValues.at(i), bias))
842 {
843 if (bias != 0)
844 {// Translated token has different length than original. Position next tokens need to be corrected.
845 CorrectionsPositions(tKeys.at(i), bias, tokens, numbers);
846 tKeys = tokens.keys();
847 tValues = tokens.values();
848 }
849 continue;
850 }
851
852 if (FunctionsFromUser(newFormula, tKeys.at(i), tValues.at(i), bias))
853 {
854 if (bias != 0)
855 {// Translated token has different length than original. Position next tokens need to be corrected.
856 CorrectionsPositions(tKeys.at(i), bias, tokens, numbers);
857 tKeys = tokens.keys();
858 tValues = tokens.values();
859 }
860 continue;
861 }
862
863 if (tValues.at(i) == QLocale().negativeSign())
864 {// unary minus
865 newFormula.replace(tKeys.at(i), 1, '-');
866 }
867 }
868
869 QLocale loc = QLocale(); // User locale
870 if (loc != QLocale::c() && osSeparator)
871 {// User want use Os separator
872 QList<int> nKeys = numbers.keys();// Positions for all numbers in expression
873 QList<QString> nValues = numbers.values();
874 for (int i = 0; i < nKeys.size(); ++i)
875 {
876 loc = QLocale();// From system locale
877 bool ok = false;
878 const qreal d = loc.toDouble(nValues.at(i), &ok);
879 if (ok == false)
880 {
881 qDebug()<<"Can't convert to double token"<<nValues.at(i);
882 continue;//Leave with out translation
883 }
884
885 loc = QLocale::c();// To internal locale
886 const QString dStr = loc.toString(d);// Internal look for number
887 newFormula.replace(nKeys.at(i), nValues.at(i).length(), dStr);
888 const int bias = nValues.at(i).length() - dStr.length();
889 if (bias != 0)
890 {// Translated number has different length than original. Position next tokens need to be corrected.
891 CorrectionsPositions(nKeys.at(i), bias, tokens, numbers);
892 nKeys = numbers.keys();
893 nValues = numbers.values();
894 }
895 }
896 }
897
898 return newFormula;
899 }
900
901 //---------------------------------------------------------------------------------------------------------------------
TryFormulaFromUser(const QString & formula,bool osSeparator)902 QString VTranslateVars::TryFormulaFromUser(const QString &formula, bool osSeparator)
903 {
904 try
905 {
906 SCASSERT(VAbstractApplication::VApp()->TrVars() != nullptr)
907 return VAbstractApplication::VApp()->TrVars()->FormulaFromUser(formula, osSeparator);
908 }
909 catch (qmu::QmuParserError &e)// In case something bad will happen
910 {
911 Q_UNUSED(e)
912 return formula;
913 }
914 }
915
916 //---------------------------------------------------------------------------------------------------------------------
917 /**
918 * @brief FormulaToUser replace all known tokens in formula to user look. Also change decimal
919 * separator in numbers.
920 * @param formula expression that need translate
921 * @return translated expression
922 */
FormulaToUser(const QString & formula,bool osSeparator) const923 QString VTranslateVars::FormulaToUser(const QString &formula, bool osSeparator) const
924 {
925 if (formula.isEmpty())
926 {
927 return formula;
928 }
929
930 QString newFormula = formula;// Local copy for making changes
931
932 QMap<int, QString> tokens;
933 QMap<int, QString> numbers;
934 try
935 {
936 QScopedPointer<qmu::QmuTokenParser> cal(new qmu::QmuTokenParser(formula, false, false));// Eval formula
937 tokens = cal->GetTokens();// Tokens (variables, measurements)
938 numbers = cal->GetNumbers();// All numbers in expression for changing decimal separator
939 }
940 catch (qmu::QmuParserError &e)
941 {
942 qDebug() << "\nMath parser error:\n"
943 << "--------------------------------------\n"
944 << "Message: " << e.GetMsg() << "\n"
945 << "Expression: " << e.GetExpr() << "\n"
946 << "--------------------------------------";
947 return newFormula;
948 }
949
950 QList<int> tKeys = tokens.keys();
951 QList<QString> tValues = tokens.values();
952 for (int i = 0; i < tKeys.size(); ++i)
953 {
954 if (measurements.contains(tValues.at(i)))
955 {
956 newFormula.replace(tKeys.at(i), tValues.at(i).length(),
957 measurements.value(tValues.at(i))
958 .translate(VAbstractApplication::VApp()->Settings()->GetLocale()));
959 int bias = tValues.at(i).length() - measurements.value(tValues.at(i))
960 .translate(VAbstractApplication::VApp()->Settings()->GetLocale()).length();
961 if (bias != 0)
962 {// Translated token has different length than original. Position next tokens need to be corrected.
963 CorrectionsPositions(tKeys.at(i), bias, tokens, numbers);
964 tKeys = tokens.keys();
965 tValues = tokens.values();
966 }
967 continue;
968 }
969
970 if (functions.contains(tValues.at(i)))
971 {
972 newFormula.replace(tKeys.at(i), tValues.at(i).length(),
973 functions.value(tValues.at(i))
974 .translate(VAbstractApplication::VApp()->Settings()->GetLocale()));
975 int bias = tValues.at(i).length() - functions.value(tValues.at(i))
976 .translate(VAbstractApplication::VApp()->Settings()->GetLocale()).length();
977 if (bias != 0)
978 {// Translated token has different length than original. Position next tokens need to be corrected.
979 CorrectionsPositions(tKeys.at(i), bias, tokens, numbers);
980 tKeys = tokens.keys();
981 tValues = tokens.values();
982 }
983 continue;
984 }
985
986 int bias = 0;
987 if (VariablesToUser(newFormula, tKeys.at(i), tValues.at(i), bias))
988 {
989 if (bias != 0)
990 {// Translated token has different length than original. Position next tokens need to be corrected.
991 CorrectionsPositions(tKeys.at(i), bias, tokens, numbers);
992 tKeys = tokens.keys();
993 tValues = tokens.values();
994 }
995 continue;
996 }
997
998 if (tValues.at(i) == QChar('-'))
999 {// unary minus
1000 newFormula.replace(tKeys.at(i), 1, QLocale().negativeSign());
1001 }
1002 }
1003
1004 QLocale loc = QLocale();// User locale
1005 if (loc != QLocale::C && osSeparator)
1006 {// User want use Os separator
1007 QList<int> nKeys = numbers.keys();// Positions for all numbers in expression
1008 QList<QString> nValues = numbers.values();
1009 for (int i = 0; i < nKeys.size(); ++i)
1010 {
1011 loc = QLocale::c();// From pattern locale
1012 bool ok = false;
1013 const qreal d = loc.toDouble(nValues.at(i), &ok);
1014 if (ok == false)
1015 {
1016 qDebug()<<"Can't convert to double token"<<nValues.at(i);
1017 continue;//Leave with out translation
1018 }
1019
1020 loc = QLocale();// To user locale
1021 QString dStr = loc.toString(d);// Number string in user locale
1022 if (loc.groupSeparator().isSpace())
1023 {
1024 dStr.replace(loc.groupSeparator(), QString());
1025 }
1026 newFormula.replace(nKeys.at(i), nValues.at(i).length(), dStr);
1027 const int bias = nValues.at(i).length() - dStr.length();
1028 if (bias != 0)
1029 {// Translated number has different length than original. Position next tokens need to be corrected.
1030 CorrectionsPositions(nKeys.at(i), bias, tokens, numbers);
1031 nKeys = numbers.keys();
1032 nValues = numbers.values();
1033 }
1034 }
1035 }
1036
1037 return newFormula;
1038 }
1039
1040 //---------------------------------------------------------------------------------------------------------------------
TryFormulaToUser(const QString & formula,bool osSeparator)1041 QString VTranslateVars::TryFormulaToUser(const QString &formula, bool osSeparator)
1042 {
1043 try
1044 {
1045 return VAbstractApplication::VApp()->TrVars()->FormulaToUser(formula, osSeparator);
1046 }
1047 catch (qmu::QmuParserError &e)// In case something bad will happen
1048 {
1049 Q_UNUSED(e)
1050 return formula;
1051 }
1052 }
1053
1054 //---------------------------------------------------------------------------------------------------------------------
Retranslate()1055 void VTranslateVars::Retranslate()
1056 {
1057 VTranslateMeasurements::Retranslate();
1058
1059 PMSystemNames.clear();
1060 PMSystemAuthors.clear();
1061 PMSystemBooks.clear();
1062 variables.clear();
1063 functions.clear();
1064 functionsDescriptions.clear();
1065 stDescriptions.clear();
1066
1067 InitPatternMakingSystems();
1068 InitVariables();
1069 InitFunctions();
1070
1071 PrepareFunctionTranslations();
1072 }
1073
1074 //---------------------------------------------------------------------------------------------------------------------
GetTranslatedFunctions() const1075 QMap<QString, QString> VTranslateVars::GetTranslatedFunctions() const
1076 {
1077 return translatedFunctions;
1078 }
1079
1080 //---------------------------------------------------------------------------------------------------------------------
GetFunctions() const1081 QMap<QString, qmu::QmuTranslation> VTranslateVars::GetFunctions() const
1082 {
1083 return functions;
1084 }
1085
1086 //---------------------------------------------------------------------------------------------------------------------
GetFunctionsDescriptions() const1087 QMap<QString, qmu::QmuTranslation> VTranslateVars::GetFunctionsDescriptions() const
1088 {
1089 return functionsDescriptions;
1090 }
1091