src/ldconfig.cpp

changeset 538
2f85d4d286e5
parent 508
7ace3537a560
child 553
2418d5955421
equal deleted inserted replaced
537:1add0ee96fb3 538:2f85d4d286e5
24 24
25 // ============================================================================= 25 // =============================================================================
26 // Helper function for parseLDConfig 26 // Helper function for parseLDConfig
27 // ----------------------------------------------------------------------------- 27 // -----------------------------------------------------------------------------
28 static bool parseLDConfigTag (LDConfigParser& pars, char const* tag, str& val) 28 static bool parseLDConfigTag (LDConfigParser& pars, char const* tag, str& val)
29 { short pos; 29 { int pos;
30 30
31 // Try find the token and get its position 31 // Try find the token and get its position
32 if (!pars.findToken (pos, tag, 1)) 32 if (!pars.findToken (pos, tag, 1))
33 return false; 33 return false;
34 34
40 // ----------------------------------------------------------------------------- 40 // -----------------------------------------------------------------------------
41 void parseLDConfig() 41 void parseLDConfig()
42 { File* f = openLDrawFile ("LDConfig.ldr", false); 42 { File* f = openLDrawFile ("LDConfig.ldr", false);
43 43
44 if (!f) 44 if (!f)
45 { critical (fmt (QObject::tr ("Unable to open LDConfig.ldr for parsing! (%1)"), 45 { critical (fmt (QObject::tr ("Unable to open LDConfig.ldr for parsing: %1"),
46 strerror (errno))); 46 strerror (errno)));
47 return; 47 return;
48 } 48 }
49 49
50 // Read in the lines 50 // Read in the lines
56 line.remove ('\n'); 56 line.remove ('\n');
57 57
58 // Parse the line 58 // Parse the line
59 LDConfigParser pars (line, ' '); 59 LDConfigParser pars (line, ' ');
60 60
61 short code = 0, alpha = 255; 61 int code = 0, alpha = 255;
62 str name, facename, edgename, valuestr; 62 str name, facename, edgename, valuestr;
63 63
64 // Check 0 !COLOUR, parse the name 64 // Check 0 !COLOUR, parse the name
65 if (!pars.tokenCompare (0, "0") || !pars.tokenCompare (1, "!COLOUR") || !pars.getToken (name, 2)) 65 if (!pars.tokenCompare (0, "0") || !pars.tokenCompare (1, "!COLOUR") || !pars.getToken (name, 2))
66 continue; 66 continue;
86 if (!parseLDConfigTag (pars, "VALUE", facename) || !parseLDConfigTag (pars, "EDGE", edgename)) 86 if (!parseLDConfigTag (pars, "VALUE", facename) || !parseLDConfigTag (pars, "EDGE", edgename))
87 continue; 87 continue;
88 88
89 // Ensure that our colors are correct 89 // Ensure that our colors are correct
90 QColor faceColor (facename), 90 QColor faceColor (facename),
91 edgeColor (edgename); 91 edgeColor (edgename);
92 92
93 if (!faceColor.isValid() || !edgeColor.isValid()) 93 if (!faceColor.isValid() || !edgeColor.isValid())
94 continue; 94 continue;
95 95
96 // Parse alpha if given. 96 // Parse alpha if given.
97 if (parseLDConfigTag (pars, "ALPHA", valuestr)) 97 if (parseLDConfigTag (pars, "ALPHA", valuestr))
98 alpha = clamp<short> (valuestr.toShort(), 0, 255); 98 alpha = clamp (valuestr.toInt(), 0, 255);
99 99
100 LDColor* col = new LDColor; 100 LDColor* col = new LDColor;
101 col->name = name; 101 col->name = name;
102 col->faceColor = faceColor; 102 col->faceColor = faceColor;
103 col->edgeColor = edgeColor; 103 col->edgeColor = edgeColor;
117 m_pos = -1; 117 m_pos = -1;
118 } 118 }
119 119
120 // ============================================================================= 120 // =============================================================================
121 // ----------------------------------------------------------------------------- 121 // -----------------------------------------------------------------------------
122 bool LDConfigParser::atBeginning() 122 bool LDConfigParser::isAtBeginning()
123 { return (m_pos == -1); 123 { return m_pos == -1;
124 } 124 }
125 125
126 // ============================================================================= 126 // =============================================================================
127 // ----------------------------------------------------------------------------- 127 // -----------------------------------------------------------------------------
128 bool LDConfigParser::atEnd() 128 bool LDConfigParser::isAtEnd()
129 { return (m_pos == m_tokens.size() - 1); 129 { return m_pos == m_tokens.size() - 1;
130 } 130 }
131 131
132 // ============================================================================= 132 // =============================================================================
133 // ----------------------------------------------------------------------------- 133 // -----------------------------------------------------------------------------
134 bool LDConfigParser::getToken (str& val, const int pos) 134 bool LDConfigParser::getToken (str& val, const int pos)
139 return true; 139 return true;
140 } 140 }
141 141
142 // ============================================================================= 142 // =============================================================================
143 // ----------------------------------------------------------------------------- 143 // -----------------------------------------------------------------------------
144 bool LDConfigParser::next (str& val) 144 bool LDConfigParser::getNextToken (str& val)
145 { return getToken (val, ++m_pos); 145 { return getToken (val, ++m_pos);
146 } 146 }
147 147
148 // ============================================================================= 148 // =============================================================================
149 // ----------------------------------------------------------------------------- 149 // -----------------------------------------------------------------------------
150 bool LDConfigParser::peekNext (str& val) 150 bool LDConfigParser::peekNextToken (str& val)
151 { return getToken (val, m_pos + 1); 151 { return getToken (val, m_pos + 1);
152 } 152 }
153 153
154 // ============================================================================= 154 // =============================================================================
155 // ----------------------------------------------------------------------------- 155 // -----------------------------------------------------------------------------
156 bool LDConfigParser::findToken (short& result, char const* needle, short args) 156 bool LDConfigParser::findToken (int& result, char const* needle, int args)
157 { for (int i = 0; i < (m_tokens.size() - args); ++i) 157 { for (int i = 0; i < (m_tokens.size() - args); ++i)
158 { if (m_tokens[i] == needle) 158 { if (m_tokens[i] == needle)
159 { result = i; 159 { result = i;
160 return true; 160 return true;
161 } 161 }
170 { m_pos = -1; 170 { m_pos = -1;
171 } 171 }
172 172
173 // ============================================================================= 173 // =============================================================================
174 // ----------------------------------------------------------------------------- 174 // -----------------------------------------------------------------------------
175 void LDConfigParser::seek (short amount, bool rel) 175 void LDConfigParser::seek (int amount, bool rel)
176 { m_pos = (rel ? m_pos : 0) + amount; 176 { m_pos = (rel ? m_pos : 0) + amount;
177 } 177 }
178 178
179 // ============================================================================= 179 // =============================================================================
180 // ----------------------------------------------------------------------------- 180 // -----------------------------------------------------------------------------
181 size_t LDConfigParser::size() 181 int LDConfigParser::getSize()
182 { return m_tokens.size(); 182 { return m_tokens.size();
183 } 183 }
184 184
185 // ============================================================================= 185 // =============================================================================
186 // ----------------------------------------------------------------------------- 186 // -----------------------------------------------------------------------------
187 bool LDConfigParser::tokenCompare (short inPos, const char* sOther) 187 bool LDConfigParser::tokenCompare (int inPos, const char* sOther)
188 { str tok; 188 { str tok;
189 189
190 if (!getToken (tok, inPos)) 190 if (!getToken (tok, inPos))
191 return false; 191 return false;
192 192

mercurial