30 static bool parseLDConfigTag (LDConfigParser& pars, char const* tag, QString& val) |
30 static bool parseLDConfigTag (LDConfigParser& pars, char const* tag, QString& val) |
31 { |
31 { |
32 int pos; |
32 int pos; |
33 |
33 |
34 // Try find the token and get its position |
34 // Try find the token and get its position |
35 if (!pars.findToken (pos, tag, 1)) |
35 if (not pars.findToken (pos, tag, 1)) |
36 return false; |
36 return false; |
37 |
37 |
38 // Get the token after it and store it into val |
38 // Get the token after it and store it into val |
39 return pars.getToken (val, pos + 1); |
39 return pars.getToken (val, pos + 1); |
40 } |
40 } |
43 // |
43 // |
44 void parseLDConfig() |
44 void parseLDConfig() |
45 { |
45 { |
46 QFile* fp = openLDrawFile ("LDConfig.ldr", false); |
46 QFile* fp = openLDrawFile ("LDConfig.ldr", false); |
47 |
47 |
48 if (!fp) |
48 if (fp == null) |
49 { |
49 { |
50 critical (QObject::tr ("Unable to open LDConfig.ldr for parsing.")); |
50 critical (QObject::tr ("Unable to open LDConfig.ldr for parsing.")); |
51 return; |
51 return; |
52 } |
52 } |
53 |
53 |
54 // Read in the lines |
54 // Read in the lines |
55 while (fp->atEnd() == false) |
55 while (not fp->atEnd()) |
56 { |
56 { |
57 QString line = QString::fromUtf8 (fp->readLine()); |
57 QString line = QString::fromUtf8 (fp->readLine()); |
58 |
58 |
59 if (line.isEmpty() || line[0] != '0') |
59 if (line.isEmpty() || line[0] != '0') |
60 continue; // empty or illogical |
60 continue; // empty or illogical |
67 |
67 |
68 int code = 0, alpha = 255; |
68 int code = 0, alpha = 255; |
69 QString name, facename, edgename, valuestr; |
69 QString name, facename, edgename, valuestr; |
70 |
70 |
71 // Check 0 !COLOUR, parse the name |
71 // Check 0 !COLOUR, parse the name |
72 if (!pars.tokenCompare (0, "0") || !pars.tokenCompare (1, "!COLOUR") || !pars.getToken (name, 2)) |
72 if (not pars.tokenCompare (0, "0") || |
73 continue; |
73 not pars.tokenCompare (1, "!COLOUR") || |
|
74 not pars.getToken (name, 2)) |
|
75 { |
|
76 continue; |
|
77 } |
74 |
78 |
75 // Replace underscores in the name with spaces for readability |
79 // Replace underscores in the name with spaces for readability |
76 name.replace ("_", " "); |
80 name.replace ("_", " "); |
77 |
81 |
78 // Get the CODE tag |
82 // Get the CODE tag |
79 if (!parseLDConfigTag (pars, "CODE", valuestr)) |
83 if (not parseLDConfigTag (pars, "CODE", valuestr)) |
80 continue; |
84 continue; |
81 |
85 |
82 if (!numeric (valuestr)) |
86 if (not numeric (valuestr)) |
83 continue; // not a number |
87 continue; // not a number |
84 |
88 |
85 // Ensure that the code is within [0 - 511] |
89 // Ensure that the code is within [0 - 511] |
86 bool ok; |
90 bool ok; |
87 code = valuestr.toShort (&ok); |
91 code = valuestr.toShort (&ok); |
88 |
92 |
89 if (!ok || code < 0 || code >= 512) |
93 if (not ok || code < 0 || code >= 512) |
90 continue; |
94 continue; |
91 |
95 |
92 // VALUE and EDGE tags |
96 // VALUE and EDGE tags |
93 if (!parseLDConfigTag (pars, "VALUE", facename) || !parseLDConfigTag (pars, "EDGE", edgename)) |
97 if (not parseLDConfigTag (pars, "VALUE", facename) || not parseLDConfigTag (pars, "EDGE", edgename)) |
94 continue; |
98 continue; |
95 |
99 |
96 // Ensure that our colors are correct |
100 // Ensure that our colors are correct |
97 QColor faceColor (facename), |
101 QColor faceColor (facename), |
98 edgeColor (edgename); |
102 edgeColor (edgename); |
99 |
103 |
100 if (!faceColor.isValid() || !edgeColor.isValid()) |
104 if (not faceColor.isValid() || not edgeColor.isValid()) |
101 continue; |
105 continue; |
102 |
106 |
103 // Parse alpha if given. |
107 // Parse alpha if given. |
104 if (parseLDConfigTag (pars, "ALPHA", valuestr)) |
108 if (parseLDConfigTag (pars, "ALPHA", valuestr)) |
105 alpha = clamp (valuestr.toInt(), 0, 255); |
109 alpha = clamp (valuestr.toInt(), 0, 255); |