qcssparser.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/gui/text/qcssparser.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6-
7-
8-
9-
10using namespace QCss;-
11-
12struct QCssKnownValue-
13{-
14 const char name[28];-
15 quint64 id;-
16};-
17-
18static const QCssKnownValue properties[NumProperties - 1] = {-
19 { "-qt-background-role", QtBackgroundRole },-
20 { "-qt-block-indent", QtBlockIndent },-
21 { "-qt-list-indent", QtListIndent },-
22 { "-qt-list-number-prefix", QtListNumberPrefix },-
23 { "-qt-list-number-suffix", QtListNumberSuffix },-
24 { "-qt-paragraph-type", QtParagraphType },-
25 { "-qt-style-features", QtStyleFeatures },-
26 { "-qt-table-type", QtTableType },-
27 { "-qt-user-state", QtUserState },-
28 { "alternate-background-color", QtAlternateBackground },-
29 { "background", Background },-
30 { "background-attachment", BackgroundAttachment },-
31 { "background-clip", BackgroundClip },-
32 { "background-color", BackgroundColor },-
33 { "background-image", BackgroundImage },-
34 { "background-origin", BackgroundOrigin },-
35 { "background-position", BackgroundPosition },-
36 { "background-repeat", BackgroundRepeat },-
37 { "border", Border },-
38 { "border-bottom", BorderBottom },-
39 { "border-bottom-color", BorderBottomColor },-
40 { "border-bottom-left-radius", BorderBottomLeftRadius },-
41 { "border-bottom-right-radius", BorderBottomRightRadius },-
42 { "border-bottom-style", BorderBottomStyle },-
43 { "border-bottom-width", BorderBottomWidth },-
44 { "border-color", BorderColor },-
45 { "border-image", BorderImage },-
46 { "border-left", BorderLeft },-
47 { "border-left-color", BorderLeftColor },-
48 { "border-left-style", BorderLeftStyle },-
49 { "border-left-width", BorderLeftWidth },-
50 { "border-radius", BorderRadius },-
51 { "border-right", BorderRight },-
52 { "border-right-color", BorderRightColor },-
53 { "border-right-style", BorderRightStyle },-
54 { "border-right-width", BorderRightWidth },-
55 { "border-style", BorderStyles },-
56 { "border-top", BorderTop },-
57 { "border-top-color", BorderTopColor },-
58 { "border-top-left-radius", BorderTopLeftRadius },-
59 { "border-top-right-radius", BorderTopRightRadius },-
60 { "border-top-style", BorderTopStyle },-
61 { "border-top-width", BorderTopWidth },-
62 { "border-width", BorderWidth },-
63 { "bottom", Bottom },-
64 { "color", Color },-
65 { "float", Float },-
66 { "font", Font },-
67 { "font-family", FontFamily },-
68 { "font-size", FontSize },-
69 { "font-style", FontStyle },-
70 { "font-variant", FontVariant },-
71 { "font-weight", FontWeight },-
72 { "height", Height },-
73 { "image", QtImage },-
74 { "image-position", QtImageAlignment },-
75 { "left", Left },-
76 { "line-height", LineHeight },-
77 { "list-style", ListStyle },-
78 { "list-style-type", ListStyleType },-
79 { "margin" , Margin },-
80 { "margin-bottom", MarginBottom },-
81 { "margin-left", MarginLeft },-
82 { "margin-right", MarginRight },-
83 { "margin-top", MarginTop },-
84 { "max-height", MaximumHeight },-
85 { "max-width", MaximumWidth },-
86 { "min-height", MinimumHeight },-
87 { "min-width", MinimumWidth },-
88 { "outline", Outline },-
89 { "outline-bottom-left-radius", OutlineBottomLeftRadius },-
90 { "outline-bottom-right-radius", OutlineBottomRightRadius },-
91 { "outline-color", OutlineColor },-
92 { "outline-offset", OutlineOffset },-
93 { "outline-radius", OutlineRadius },-
94 { "outline-style", OutlineStyle },-
95 { "outline-top-left-radius", OutlineTopLeftRadius },-
96 { "outline-top-right-radius", OutlineTopRightRadius },-
97 { "outline-width", OutlineWidth },-
98 { "padding", Padding },-
99 { "padding-bottom", PaddingBottom },-
100 { "padding-left", PaddingLeft },-
101 { "padding-right", PaddingRight },-
102 { "padding-top", PaddingTop },-
103 { "page-break-after", PageBreakAfter },-
104 { "page-break-before", PageBreakBefore },-
105 { "position", Position },-
106 { "right", Right },-
107 { "selection-background-color", QtSelectionBackground },-
108 { "selection-color", QtSelectionForeground },-
109 { "spacing", QtSpacing },-
110 { "subcontrol-origin", QtOrigin },-
111 { "subcontrol-position", QtPosition },-
112 { "text-align", TextAlignment },-
113 { "text-decoration", TextDecoration },-
114 { "text-indent", TextIndent },-
115 { "text-transform", TextTransform },-
116 { "text-underline-style", TextUnderlineStyle },-
117 { "top", Top },-
118 { "vertical-align", VerticalAlignment },-
119 { "white-space", Whitespace },-
120 { "width", Width }-
121};-
122-
123static const QCssKnownValue values[NumKnownValues - 1] = {-
124 { "active", Value_Active },-
125 { "alternate-base", Value_AlternateBase },-
126 { "always", Value_Always },-
127 { "auto", Value_Auto },-
128 { "base", Value_Base },-
129 { "bold", Value_Bold },-
130 { "bottom", Value_Bottom },-
131 { "bright-text", Value_BrightText },-
132 { "button", Value_Button },-
133 { "button-text", Value_ButtonText },-
134 { "center", Value_Center },-
135 { "circle", Value_Circle },-
136 { "dark", Value_Dark },-
137 { "dashed", Value_Dashed },-
138 { "decimal", Value_Decimal },-
139 { "disabled", Value_Disabled },-
140 { "disc", Value_Disc },-
141 { "dot-dash", Value_DotDash },-
142 { "dot-dot-dash", Value_DotDotDash },-
143 { "dotted", Value_Dotted },-
144 { "double", Value_Double },-
145 { "groove", Value_Groove },-
146 { "highlight", Value_Highlight },-
147 { "highlighted-text", Value_HighlightedText },-
148 { "inset", Value_Inset },-
149 { "italic", Value_Italic },-
150 { "large", Value_Large },-
151 { "left", Value_Left },-
152 { "light", Value_Light },-
153 { "line-through", Value_LineThrough },-
154 { "link", Value_Link },-
155 { "link-visited", Value_LinkVisited },-
156 { "lower-alpha", Value_LowerAlpha },-
157 { "lower-roman", Value_LowerRoman },-
158 { "lowercase", Value_Lowercase },-
159 { "medium", Value_Medium },-
160 { "mid", Value_Mid },-
161 { "middle", Value_Middle },-
162 { "midlight", Value_Midlight },-
163 { "native", Value_Native },-
164 { "none", Value_None },-
165 { "normal", Value_Normal },-
166 { "nowrap", Value_NoWrap },-
167 { "oblique", Value_Oblique },-
168 { "off", Value_Off },-
169 { "on", Value_On },-
170 { "outset", Value_Outset },-
171 { "overline", Value_Overline },-
172 { "pre", Value_Pre },-
173 { "pre-wrap", Value_PreWrap },-
174 { "ridge", Value_Ridge },-
175 { "right", Value_Right },-
176 { "selected", Value_Selected },-
177 { "shadow", Value_Shadow },-
178 { "small" , Value_Small },-
179 { "small-caps", Value_SmallCaps },-
180 { "solid", Value_Solid },-
181 { "square", Value_Square },-
182 { "sub", Value_Sub },-
183 { "super", Value_Super },-
184 { "text", Value_Text },-
185 { "top", Value_Top },-
186 { "transparent", Value_Transparent },-
187 { "underline", Value_Underline },-
188 { "upper-alpha", Value_UpperAlpha },-
189 { "upper-roman", Value_UpperRoman },-
190 { "uppercase", Value_Uppercase },-
191 { "wave", Value_Wave },-
192 { "window", Value_Window },-
193 { "window-text", Value_WindowText },-
194 { "x-large", Value_XLarge },-
195 { "xx-large", Value_XXLarge }-
196};-
197-
198-
199static const short indexOfId[NumKnownValues] = { 0, 41, 48, 42, 49, 54, 35, 26, 70, 71, 25, 43, 5, 63, 47,-
200 29, 58, 59, 27, 51, 61, 6, 10, 39, 56, 19, 13, 17, 18, 20, 21, 50, 24, 46, 67, 37, 3, 2, 40, 62, 16,-
201 11, 57, 14, 32, 64, 33, 65, 55, 66, 34, 69, 8, 28, 38, 12, 36, 60, 7, 9, 4, 68, 53, 22, 23, 30, 31,-
202 1, 15, 0, 52, 45, 44 };-
203-
204QString Value::toString() const-
205{-
206 if (type == KnownIdentifier
type == KnownIdentifierDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
207 return
never executed: return QLatin1String(values[indexOfId[variant.toInt()]].name);
QLatin1String(values[indexOfId[variant.toInt()]].name);
never executed: return QLatin1String(values[indexOfId[variant.toInt()]].name);
0
208 } else {-
209 return
never executed: return variant.toString();
variant.toString();
never executed: return variant.toString();
0
210 }-
211}-
212-
213static const QCssKnownValue pseudos[NumPseudos - 1] = {-
214 { "active", PseudoClass_Active },-
215 { "adjoins-item", PseudoClass_Item },-
216 { "alternate", PseudoClass_Alternate },-
217 { "bottom", PseudoClass_Bottom },-
218 { "checked", PseudoClass_Checked },-
219 { "closable", PseudoClass_Closable },-
220 { "closed", PseudoClass_Closed },-
221 { "default", PseudoClass_Default },-
222 { "disabled", PseudoClass_Disabled },-
223 { "edit-focus", PseudoClass_EditFocus },-
224 { "editable", PseudoClass_Editable },-
225 { "enabled", PseudoClass_Enabled },-
226 { "exclusive", PseudoClass_Exclusive },-
227 { "first", PseudoClass_First },-
228 { "flat", PseudoClass_Flat },-
229 { "floatable", PseudoClass_Floatable },-
230 { "focus", PseudoClass_Focus },-
231 { "has-children", PseudoClass_Children },-
232 { "has-siblings", PseudoClass_Sibling },-
233 { "horizontal", PseudoClass_Horizontal },-
234 { "hover", PseudoClass_Hover },-
235 { "indeterminate" , PseudoClass_Indeterminate },-
236 { "last", PseudoClass_Last },-
237 { "left", PseudoClass_Left },-
238 { "maximized", PseudoClass_Maximized },-
239 { "middle", PseudoClass_Middle },-
240 { "minimized", PseudoClass_Minimized },-
241 { "movable", PseudoClass_Movable },-
242 { "next-selected", PseudoClass_NextSelected },-
243 { "no-frame", PseudoClass_Frameless },-
244 { "non-exclusive", PseudoClass_NonExclusive },-
245 { "off", PseudoClass_Unchecked },-
246 { "on", PseudoClass_Checked },-
247 { "only-one", PseudoClass_OnlyOne },-
248 { "open", PseudoClass_Open },-
249 { "pressed", PseudoClass_Pressed },-
250 { "previous-selected", PseudoClass_PreviousSelected },-
251 { "read-only", PseudoClass_ReadOnly },-
252 { "right", PseudoClass_Right },-
253 { "selected", PseudoClass_Selected },-
254 { "top", PseudoClass_Top },-
255 { "unchecked" , PseudoClass_Unchecked },-
256 { "vertical", PseudoClass_Vertical },-
257 { "window", PseudoClass_Window }-
258};-
259-
260static const QCssKnownValue origins[NumKnownOrigins - 1] = {-
261 { "border", Origin_Border },-
262 { "content", Origin_Content },-
263 { "margin", Origin_Margin },-
264 { "padding", Origin_Padding }-
265};-
266-
267static const QCssKnownValue repeats[NumKnownRepeats - 1] = {-
268 { "no-repeat", Repeat_None },-
269 { "repeat-x", Repeat_X },-
270 { "repeat-xy", Repeat_XY },-
271 { "repeat-y", Repeat_Y }-
272};-
273-
274static const QCssKnownValue tileModes[NumKnownTileModes - 1] = {-
275 { "repeat", TileMode_Repeat },-
276 { "round", TileMode_Round },-
277 { "stretch", TileMode_Stretch },-
278};-
279-
280static const QCssKnownValue positions[NumKnownPositionModes - 1] = {-
281 { "absolute", PositionMode_Absolute },-
282 { "fixed", PositionMode_Fixed },-
283 { "relative", PositionMode_Relative },-
284 { "static", PositionMode_Static }-
285};-
286-
287static const QCssKnownValue attachments[NumKnownAttachments - 1] = {-
288 { "fixed", Attachment_Fixed },-
289 { "scroll", Attachment_Scroll }-
290};-
291-
292static const QCssKnownValue styleFeatures[NumKnownStyleFeatures - 1] = {-
293 { "background-color", StyleFeature_BackgroundColor },-
294 { "background-gradient", StyleFeature_BackgroundGradient },-
295 { "none", StyleFeature_None }-
296};-
297static bool operator<(const QString &name, const QCssKnownValue &prop)-
298{-
299 return
never executed: return QString::compare(name, QLatin1String(prop.name), Qt::CaseInsensitive) < 0;
QString::compare(name, QLatin1String(prop.name), Qt::CaseInsensitive) < 0;
never executed: return QString::compare(name, QLatin1String(prop.name), Qt::CaseInsensitive) < 0;
0
300}-
301-
302static bool operator<(const QCssKnownValue &prop, const QString &name)-
303{-
304 return
never executed: return QString::compare(QLatin1String(prop.name), name, Qt::CaseInsensitive) < 0;
QString::compare(QLatin1String(prop.name), name, Qt::CaseInsensitive) < 0;
never executed: return QString::compare(QLatin1String(prop.name), name, Qt::CaseInsensitive) < 0;
0
305}-
306-
307static quint64 findKnownValue(const QString &name, const QCssKnownValue *start, int numValues)-
308{-
309 const QCssKnownValue *end = &start[numValues - 1];-
310 const QCssKnownValue *prop = std::lower_bound(start, end, name);-
311 if ((
(prop == end)Description
TRUEnever evaluated
FALSEnever evaluated
prop == end)
(prop == end)Description
TRUEnever evaluated
FALSEnever evaluated
|| (
(name < *prop)Description
TRUEnever evaluated
FALSEnever evaluated
name < *prop)
(name < *prop)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
312 return
never executed: return 0;
0;
never executed: return 0;
0
313 return
never executed: return prop->id;
prop->id;
never executed: return prop->id;
0
314}-
315-
316static inline bool isInheritable(Property propertyId)-
317{-
318 switch (propertyId) {-
319 case
never executed: case Font:
Font:
never executed: case Font:
0
320 case
never executed: case FontFamily:
FontFamily:
never executed: case FontFamily:
0
321 case
never executed: case FontSize:
FontSize:
never executed: case FontSize:
0
322 case
never executed: case FontStyle:
FontStyle:
never executed: case FontStyle:
0
323 case
never executed: case FontWeight:
FontWeight:
never executed: case FontWeight:
0
324 case
never executed: case TextIndent:
TextIndent:
never executed: case TextIndent:
0
325 case
never executed: case Whitespace:
Whitespace:
never executed: case Whitespace:
0
326 case
never executed: case ListStyleType:
ListStyleType:
never executed: case ListStyleType:
0
327 case
never executed: case ListStyle:
ListStyle:
never executed: case ListStyle:
0
328 case
never executed: case TextAlignment:
TextAlignment:
never executed: case TextAlignment:
0
329 case
never executed: case FontVariant:
FontVariant:
never executed: case FontVariant:
0
330 case
never executed: case TextTransform:
TextTransform:
never executed: case TextTransform:
0
331 case
never executed: case LineHeight:
LineHeight:
never executed: case LineHeight:
0
332 return
never executed: return true;
true;
never executed: return true;
0
333 default
never executed: default:
:
never executed: default:
0
334 break;
never executed: break;
0
335 }-
336 return
never executed: return false;
false;
never executed: return false;
0
337}-
338-
339-
340-
341ValueExtractor::ValueExtractor(const QVector<Declaration> &decls, const QPalette &pal)-
342: declarations(decls), adjustment(0), fontExtracted(false), pal(pal)-
343{-
344}
never executed: end of block
0
345-
346LengthData ValueExtractor::lengthValue(const Value& v)-
347{-
348 QString s = v.variant.toString();-
349 s.reserve(s.length());-
350 LengthData data;-
351 data.unit = LengthData::None;-
352 if (s.endsWith(QLatin1String("px"), Qt::CaseInsensitive)
s.endsWith(QLa...seInsensitive)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
353 data.unit = LengthData::Px;
never executed: data.unit = LengthData::Px;
0
354 else if (s.endsWith(QLatin1String("ex"), Qt::CaseInsensitive)
s.endsWith(QLa...seInsensitive)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
355 data.unit = LengthData::Ex;
never executed: data.unit = LengthData::Ex;
0
356 else if (s.endsWith(QLatin1String("em"), Qt::CaseInsensitive)
s.endsWith(QLa...seInsensitive)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
357 data.unit = LengthData::Em;
never executed: data.unit = LengthData::Em;
0
358-
359 if (data.unit != LengthData::None
data.unit != LengthData::NoneDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
360 s.chop(2);
never executed: s.chop(2);
0
361-
362 data.number = s.toDouble();-
363 return
never executed: return data;
data;
never executed: return data;
0
364}-
365-
366static int lengthValueFromData(const LengthData& data, const QFont& f)-
367{-
368 if (data.unit == LengthData::Ex
data.unit == LengthData::ExDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
369 return
never executed: return qRound(QFontMetrics(f).xHeight() * data.number);
qRound(QFontMetrics(f).xHeight() * data.number);
never executed: return qRound(QFontMetrics(f).xHeight() * data.number);
0
370 else if (data.unit == LengthData::Em
data.unit == LengthData::EmDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
371 return
never executed: return qRound(QFontMetrics(f).height() * data.number);
qRound(QFontMetrics(f).height() * data.number);
never executed: return qRound(QFontMetrics(f).height() * data.number);
0
372 return
never executed: return qRound(data.number);
qRound(data.number);
never executed: return qRound(data.number);
0
373}-
374-
375int ValueExtractor::lengthValue(const Declaration &decl)-
376{-
377 if (decl.d->parsed.isValid()
decl.d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
378 return
never executed: return lengthValueFromData(qvariant_cast<LengthData>(decl.d->parsed), f);
lengthValueFromData(qvariant_cast<LengthData>(decl.d->parsed), f);
never executed: return lengthValueFromData(qvariant_cast<LengthData>(decl.d->parsed), f);
0
379 if (decl.d->values.count() < 1
decl.d->values.count() < 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
380 return
never executed: return 0;
0;
never executed: return 0;
0
381 LengthData data = lengthValue(decl.d->values.at(0));-
382 decl.d->parsed = QVariant::fromValue<LengthData>(data);-
383 return
never executed: return lengthValueFromData(data,f);
lengthValueFromData(data,f);
never executed: return lengthValueFromData(data,f);
0
384}-
385-
386void ValueExtractor::lengthValues(const Declaration &decl, int *m)-
387{-
388 if (decl.d->parsed.isValid()
decl.d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
389 QList<QVariant> v = decl.d->parsed.toList();-
390 for (int i = 0; i < 4
i < 4Description
TRUEnever evaluated
FALSEnever evaluated
; i++)
0
391 m[i] = lengthValueFromData(qvariant_cast<LengthData>(v.at(i)), f);
never executed: m[i] = lengthValueFromData(qvariant_cast<LengthData>(v.at(i)), f);
0
392 return;
never executed: return;
0
393 }-
394-
395 LengthData datas[4];-
396 int i;-
397 for (i = 0; i < qMin(decl.d->values.count(), 4)
i < qMin(decl....es.count(), 4)Description
TRUEnever evaluated
FALSEnever evaluated
; i++)
0
398 datas[i] = lengthValue(decl.d->values[i]);
never executed: datas[i] = lengthValue(decl.d->values[i]);
0
399-
400 if (i == 0
i == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
401 LengthData zero = {0.0, LengthData::None};-
402 datas[0] = datas[1] = datas[2] = datas[3] = zero;-
403 }
never executed: end of block
else if (i == 1
i == 1Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
404 datas[3] = datas[2] = datas[1] = datas[0];-
405 }
never executed: end of block
else if (i == 2
i == 2Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
406 datas[2] = datas[0];-
407 datas[3] = datas[1];-
408 }
never executed: end of block
else if (i == 3
i == 3Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
409 datas[3] = datas[1];-
410 }
never executed: end of block
0
411-
412 QList<QVariant> v;-
413 v.reserve(4);-
414 for (i = 0; i < 4
i < 4Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
415 v += QVariant::fromValue<LengthData>(datas[i]);-
416 m[i] = lengthValueFromData(datas[i], f);-
417 }
never executed: end of block
0
418 decl.d->parsed = v;-
419}
never executed: end of block
0
420-
421bool ValueExtractor::extractGeometry(int *w, int *h, int *minw, int *minh, int *maxw, int *maxh)-
422{-
423 extractFont();-
424 bool hit = false;-
425 for (int i = 0; i < declarations.count()
i < declarations.count()Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
426 const Declaration &decl = declarations.at(i);-
427 switch (decl.d->propertyId) {-
428 case
never executed: case Width:
Width:
never executed: case Width:
*w = lengthValue(decl); break;
never executed: break;
0
429 case
never executed: case Height:
Height:
never executed: case Height:
*h = lengthValue(decl); break;
never executed: break;
0
430 case
never executed: case MinimumWidth:
MinimumWidth:
never executed: case MinimumWidth:
*minw = lengthValue(decl); break;
never executed: break;
0
431 case
never executed: case MinimumHeight:
MinimumHeight:
never executed: case MinimumHeight:
*minh = lengthValue(decl); break;
never executed: break;
0
432 case
never executed: case MaximumWidth:
MaximumWidth:
never executed: case MaximumWidth:
*maxw = lengthValue(decl); break;
never executed: break;
0
433 case
never executed: case MaximumHeight:
MaximumHeight:
never executed: case MaximumHeight:
*maxh = lengthValue(decl); break;
never executed: break;
0
434 default
never executed: default:
:
never executed: default:
continue;
never executed: continue;
0
435 }-
436 hit = true;-
437 }
never executed: end of block
0
438-
439 return
never executed: return hit;
hit;
never executed: return hit;
0
440}-
441-
442bool ValueExtractor::extractPosition(int *left, int *top, int *right, int *bottom, QCss::Origin *origin,-
443 Qt::Alignment *position, QCss::PositionMode *mode, Qt::Alignment *textAlignment)-
444{-
445 extractFont();-
446 bool hit = false;-
447 for (int i = 0; i < declarations.count()
i < declarations.count()Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
448 const Declaration &decl = declarations.at(i);-
449 switch (decl.d->propertyId) {-
450 case
never executed: case Left:
Left:
never executed: case Left:
*left = lengthValue(decl); break;
never executed: break;
0
451 case
never executed: case Top:
Top:
never executed: case Top:
*top = lengthValue(decl); break;
never executed: break;
0
452 case
never executed: case Right:
Right:
never executed: case Right:
*right = lengthValue(decl); break;
never executed: break;
0
453 case
never executed: case Bottom:
Bottom:
never executed: case Bottom:
*bottom = lengthValue(decl); break;
never executed: break;
0
454 case
never executed: case QtOrigin:
QtOrigin:
never executed: case QtOrigin:
*origin = decl.originValue(); break;
never executed: break;
0
455 case
never executed: case QtPosition:
QtPosition:
never executed: case QtPosition:
*position = decl.alignmentValue(); break;
never executed: break;
0
456 case
never executed: case TextAlignment:
TextAlignment:
never executed: case TextAlignment:
*textAlignment = decl.alignmentValue(); break;
never executed: break;
0
457 case
never executed: case Position:
Position:
never executed: case Position:
*mode = decl.positionValue(); break;
never executed: break;
0
458 default
never executed: default:
:
never executed: default:
continue;
never executed: continue;
0
459 }-
460 hit = true;-
461 }
never executed: end of block
0
462-
463 return
never executed: return hit;
hit;
never executed: return hit;
0
464}-
465-
466bool ValueExtractor::extractBox(int *margins, int *paddings, int *spacing)-
467{-
468 extractFont();-
469 bool hit = false;-
470 for (int i = 0; i < declarations.count()
i < declarations.count()Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
471 const Declaration &decl = declarations.at(i);-
472 switch (decl.d->propertyId) {-
473 case
never executed: case PaddingLeft:
PaddingLeft:
never executed: case PaddingLeft:
paddings[LeftEdge] = lengthValue(decl); break;
never executed: break;
0
474 case
never executed: case PaddingRight:
PaddingRight:
never executed: case PaddingRight:
paddings[RightEdge] = lengthValue(decl); break;
never executed: break;
0
475 case
never executed: case PaddingTop:
PaddingTop:
never executed: case PaddingTop:
paddings[TopEdge] = lengthValue(decl); break;
never executed: break;
0
476 case
never executed: case PaddingBottom:
PaddingBottom:
never executed: case PaddingBottom:
paddings[BottomEdge] = lengthValue(decl); break;
never executed: break;
0
477 case
never executed: case Padding:
Padding:
never executed: case Padding:
lengthValues(decl, paddings); break;
never executed: break;
0
478-
479 case
never executed: case MarginLeft:
MarginLeft:
never executed: case MarginLeft:
margins[LeftEdge] = lengthValue(decl); break;
never executed: break;
0
480 case
never executed: case MarginRight:
MarginRight:
never executed: case MarginRight:
margins[RightEdge] = lengthValue(decl); break;
never executed: break;
0
481 case
never executed: case MarginTop:
MarginTop:
never executed: case MarginTop:
margins[TopEdge] = lengthValue(decl); break;
never executed: break;
0
482 case
never executed: case MarginBottom:
MarginBottom:
never executed: case MarginBottom:
margins[BottomEdge] = lengthValue(decl); break;
never executed: break;
0
483 case
never executed: case Margin:
Margin:
never executed: case Margin:
lengthValues(decl, margins); break;
never executed: break;
0
484 case
never executed: case QtSpacing:
QtSpacing:
never executed: case QtSpacing:
if (spacing
spacingDescription
TRUEnever evaluated
FALSEnever evaluated
) *
never executed: *spacing = lengthValue(decl);
spacing = lengthValue(decl);
never executed: *spacing = lengthValue(decl);
break;
never executed: break;
0
485-
486 default
never executed: default:
:
never executed: default:
continue;
never executed: continue;
0
487 }-
488 hit = true;-
489 }
never executed: end of block
0
490-
491 return
never executed: return hit;
hit;
never executed: return hit;
0
492}-
493-
494int ValueExtractor::extractStyleFeatures()-
495{-
496 int features = StyleFeature_None;-
497 for (int i = 0; i < declarations.count()
i < declarations.count()Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
498 const Declaration &decl = declarations.at(i);-
499 if (decl.d->propertyId == QtStyleFeatures
decl.d->proper...tStyleFeaturesDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
500 features = decl.styleFeaturesValue();
never executed: features = decl.styleFeaturesValue();
0
501 }
never executed: end of block
0
502 return
never executed: return features;
features;
never executed: return features;
0
503}-
504-
505QSize ValueExtractor::sizeValue(const Declaration &decl)-
506{-
507 if (decl.d->parsed.isValid()
decl.d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
508 QList<QVariant> v = decl.d->parsed.toList();-
509 return
never executed: return QSize(lengthValueFromData(qvariant_cast<LengthData>(v.at(0)), f), lengthValueFromData(qvariant_cast<LengthData>(v.at(1)), f));
QSize(lengthValueFromData(qvariant_cast<LengthData>(v.at(0)), f),
never executed: return QSize(lengthValueFromData(qvariant_cast<LengthData>(v.at(0)), f), lengthValueFromData(qvariant_cast<LengthData>(v.at(1)), f));
0
510 lengthValueFromData(qvariant_cast<LengthData>(v.at(1)), f));
never executed: return QSize(lengthValueFromData(qvariant_cast<LengthData>(v.at(0)), f), lengthValueFromData(qvariant_cast<LengthData>(v.at(1)), f));
0
511 }-
512-
513 LengthData x[2] = { {0, LengthData::None }, {0, LengthData::None} };-
514 if (decl.d->values.count() > 0
decl.d->values.count() > 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
515 x[0] = lengthValue(decl.d->values.at(0));
never executed: x[0] = lengthValue(decl.d->values.at(0));
0
516 if (decl.d->values.count() > 1
decl.d->values.count() > 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
517 x[1] = lengthValue(decl.d->values.at(1));
never executed: x[1] = lengthValue(decl.d->values.at(1));
0
518 else-
519 x[1] = x[0];
never executed: x[1] = x[0];
0
520 QList<QVariant> v;-
521 v << QVariant::fromValue<LengthData>(x[0]) << QVariant::fromValue<LengthData>(x[1]);-
522 decl.d->parsed = v;-
523 return
never executed: return QSize(lengthValueFromData(x[0], f), lengthValueFromData(x[1], f));
QSize(lengthValueFromData(x[0], f), lengthValueFromData(x[1], f));
never executed: return QSize(lengthValueFromData(x[0], f), lengthValueFromData(x[1], f));
0
524}-
525-
526void ValueExtractor::sizeValues(const Declaration &decl, QSize *radii)-
527{-
528 radii[0] = sizeValue(decl);-
529 for (int i = 1; i < 4
i < 4Description
TRUEnever evaluated
FALSEnever evaluated
; i++)
0
530 radii[i] = radii[0];
never executed: radii[i] = radii[0];
0
531}
never executed: end of block
0
532-
533bool ValueExtractor::extractBorder(int *borders, QBrush *colors, BorderStyle *styles,-
534 QSize *radii)-
535{-
536 extractFont();-
537 bool hit = false;-
538 for (int i = 0; i < declarations.count()
i < declarations.count()Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
539 const Declaration &decl = declarations.at(i);-
540 switch (decl.d->propertyId) {-
541 case
never executed: case BorderLeftWidth:
BorderLeftWidth:
never executed: case BorderLeftWidth:
borders[LeftEdge] = lengthValue(decl); break;
never executed: break;
0
542 case
never executed: case BorderRightWidth:
BorderRightWidth:
never executed: case BorderRightWidth:
borders[RightEdge] = lengthValue(decl); break;
never executed: break;
0
543 case
never executed: case BorderTopWidth:
BorderTopWidth:
never executed: case BorderTopWidth:
borders[TopEdge] = lengthValue(decl); break;
never executed: break;
0
544 case
never executed: case BorderBottomWidth:
BorderBottomWidth:
never executed: case BorderBottomWidth:
borders[BottomEdge] = lengthValue(decl); break;
never executed: break;
0
545 case
never executed: case BorderWidth:
BorderWidth:
never executed: case BorderWidth:
lengthValues(decl, borders); break;
never executed: break;
0
546-
547 case
never executed: case BorderLeftColor:
BorderLeftColor:
never executed: case BorderLeftColor:
colors[LeftEdge] = decl.brushValue(pal); break;
never executed: break;
0
548 case
never executed: case BorderRightColor:
BorderRightColor:
never executed: case BorderRightColor:
colors[RightEdge] = decl.brushValue(pal); break;
never executed: break;
0
549 case
never executed: case BorderTopColor:
BorderTopColor:
never executed: case BorderTopColor:
colors[TopEdge] = decl.brushValue(pal); break;
never executed: break;
0
550 case
never executed: case BorderBottomColor:
BorderBottomColor:
never executed: case BorderBottomColor:
colors[BottomEdge] = decl.brushValue(pal); break;
never executed: break;
0
551 case
never executed: case BorderColor:
BorderColor:
never executed: case BorderColor:
decl.brushValues(colors, pal); break;
never executed: break;
0
552-
553 case
never executed: case BorderTopStyle:
BorderTopStyle:
never executed: case BorderTopStyle:
styles[TopEdge] = decl.styleValue(); break;
never executed: break;
0
554 case
never executed: case BorderBottomStyle:
BorderBottomStyle:
never executed: case BorderBottomStyle:
styles[BottomEdge] = decl.styleValue(); break;
never executed: break;
0
555 case
never executed: case BorderLeftStyle:
BorderLeftStyle:
never executed: case BorderLeftStyle:
styles[LeftEdge] = decl.styleValue(); break;
never executed: break;
0
556 case
never executed: case BorderRightStyle:
BorderRightStyle:
never executed: case BorderRightStyle:
styles[RightEdge] = decl.styleValue(); break;
never executed: break;
0
557 case
never executed: case BorderStyles:
BorderStyles:
never executed: case BorderStyles:
decl.styleValues(styles); break;
never executed: break;
0
558-
559-
560 case
never executed: case BorderTopLeftRadius:
BorderTopLeftRadius:
never executed: case BorderTopLeftRadius:
radii[0] = sizeValue(decl); break;
never executed: break;
0
561-
562-
563-
564 case
never executed: case BorderTopRightRadius:
BorderTopRightRadius:
never executed: case BorderTopRightRadius:
radii[1] = sizeValue(decl); break;
never executed: break;
0
565 case
never executed: case BorderBottomLeftRadius:
BorderBottomLeftRadius:
never executed: case BorderBottomLeftRadius:
radii[2] = sizeValue(decl); break;
never executed: break;
0
566 case
never executed: case BorderBottomRightRadius:
BorderBottomRightRadius:
never executed: case BorderBottomRightRadius:
radii[3] = sizeValue(decl); break;
never executed: break;
0
567 case
never executed: case BorderRadius:
BorderRadius:
never executed: case BorderRadius:
sizeValues(decl, radii); break;
never executed: break;
0
568-
569 case
never executed: case BorderLeft:
BorderLeft:
never executed: case BorderLeft:
0
570 borderValue(decl, &borders[LeftEdge], &styles[LeftEdge], &colors[LeftEdge]);-
571 break;
never executed: break;
0
572 case
never executed: case BorderTop:
BorderTop:
never executed: case BorderTop:
0
573 borderValue(decl, &borders[TopEdge], &styles[TopEdge], &colors[TopEdge]);-
574 break;
never executed: break;
0
575 case
never executed: case BorderRight:
BorderRight:
never executed: case BorderRight:
0
576 borderValue(decl, &borders[RightEdge], &styles[RightEdge], &colors[RightEdge]);-
577 break;
never executed: break;
0
578 case
never executed: case BorderBottom:
BorderBottom:
never executed: case BorderBottom:
0
579 borderValue(decl, &borders[BottomEdge], &styles[BottomEdge], &colors[BottomEdge]);-
580 break;
never executed: break;
0
581 case
never executed: case Border:
Border:
never executed: case Border:
0
582 borderValue(decl, &borders[LeftEdge], &styles[LeftEdge], &colors[LeftEdge]);-
583 borders[TopEdge] = borders[RightEdge] = borders[BottomEdge] = borders[LeftEdge];-
584 styles[TopEdge] = styles[RightEdge] = styles[BottomEdge] = styles[LeftEdge];-
585 colors[TopEdge] = colors[RightEdge] = colors[BottomEdge] = colors[LeftEdge];-
586 break;
never executed: break;
0
587-
588 default
never executed: default:
:
never executed: default:
continue;
never executed: continue;
0
589 }-
590 hit = true;-
591 }
never executed: end of block
0
592-
593 return
never executed: return hit;
hit;
never executed: return hit;
0
594}-
595-
596bool ValueExtractor::extractOutline(int *borders, QBrush *colors, BorderStyle *styles,-
597 QSize *radii, int *offsets)-
598{-
599 extractFont();-
600 bool hit = false;-
601 for (int i = 0; i < declarations.count()
i < declarations.count()Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
602 const Declaration &decl = declarations.at(i);-
603 switch (decl.d->propertyId) {-
604 case
never executed: case OutlineWidth:
OutlineWidth:
never executed: case OutlineWidth:
lengthValues(decl, borders); break;
never executed: break;
0
605 case
never executed: case OutlineColor:
OutlineColor:
never executed: case OutlineColor:
decl.brushValues(colors, pal); break;
never executed: break;
0
606 case
never executed: case OutlineStyle:
OutlineStyle:
never executed: case OutlineStyle:
decl.styleValues(styles); break;
never executed: break;
0
607-
608 case
never executed: case OutlineTopLeftRadius:
OutlineTopLeftRadius:
never executed: case OutlineTopLeftRadius:
radii[0] = sizeValue(decl); break;
never executed: break;
0
609 case
never executed: case OutlineTopRightRadius:
OutlineTopRightRadius:
never executed: case OutlineTopRightRadius:
radii[1] = sizeValue(decl); break;
never executed: break;
0
610 case
never executed: case OutlineBottomLeftRadius:
OutlineBottomLeftRadius:
never executed: case OutlineBottomLeftRadius:
radii[2] = sizeValue(decl); break;
never executed: break;
0
611 case
never executed: case OutlineBottomRightRadius:
OutlineBottomRightRadius:
never executed: case OutlineBottomRightRadius:
radii[3] = sizeValue(decl); break;
never executed: break;
0
612 case
never executed: case OutlineRadius:
OutlineRadius:
never executed: case OutlineRadius:
sizeValues(decl, radii); break;
never executed: break;
0
613 case
never executed: case OutlineOffset:
OutlineOffset:
never executed: case OutlineOffset:
lengthValues(decl, offsets); break;
never executed: break;
0
614-
615 case
never executed: case Outline:
Outline:
never executed: case Outline:
0
616 borderValue(decl, &borders[LeftEdge], &styles[LeftEdge], &colors[LeftEdge]);-
617 borders[TopEdge] = borders[RightEdge] = borders[BottomEdge] = borders[LeftEdge];-
618 styles[TopEdge] = styles[RightEdge] = styles[BottomEdge] = styles[LeftEdge];-
619 colors[TopEdge] = colors[RightEdge] = colors[BottomEdge] = colors[LeftEdge];-
620 break;
never executed: break;
0
621-
622 default
never executed: default:
:
never executed: default:
continue;
never executed: continue;
0
623 }-
624 hit = true;-
625 }
never executed: end of block
0
626-
627 return
never executed: return hit;
hit;
never executed: return hit;
0
628}-
629-
630static Qt::Alignment parseAlignment(const QCss::Value *values, int count)-
631{-
632 Qt::Alignment a[2] = { 0, 0 };-
633 for (int i = 0; i < qMin(2, count)
i < qMin(2, count)Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
634 if (values[i].type != Value::KnownIdentifier
values[i].type...nownIdentifierDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
635 break;
never executed: break;
0
636 switch (values[i].variant.toInt()) {-
637 case
never executed: case Value_Left:
Value_Left:
never executed: case Value_Left:
a[i] = Qt::AlignLeft; break;
never executed: break;
0
638 case
never executed: case Value_Right:
Value_Right:
never executed: case Value_Right:
a[i] = Qt::AlignRight; break;
never executed: break;
0
639 case
never executed: case Value_Top:
Value_Top:
never executed: case Value_Top:
a[i] = Qt::AlignTop; break;
never executed: break;
0
640 case
never executed: case Value_Bottom:
Value_Bottom:
never executed: case Value_Bottom:
a[i] = Qt::AlignBottom; break;
never executed: break;
0
641 case
never executed: case Value_Center:
Value_Center:
never executed: case Value_Center:
a[i] = Qt::AlignCenter; break;
never executed: break;
0
642 default
never executed: default:
:
never executed: default:
break;
never executed: break;
0
643 }-
644 }-
645-
646 if (a[0] == Qt::AlignCenter
a[0] == Qt::AlignCenterDescription
TRUEnever evaluated
FALSEnever evaluated
&& a[1] != 0
a[1] != 0Description
TRUEnever evaluated
FALSEnever evaluated
&& a[1] != Qt::AlignCenter
a[1] != Qt::AlignCenterDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
647 a[0] = (a[1] == Qt::AlignLeft
a[1] == Qt::AlignLeftDescription
TRUEnever evaluated
FALSEnever evaluated
|| a[1] == Qt::AlignRight
a[1] == Qt::AlignRightDescription
TRUEnever evaluated
FALSEnever evaluated
) ? Qt::AlignVCenter : Qt::AlignHCenter;
never executed: a[0] = (a[1] == Qt::AlignLeft || a[1] == Qt::AlignRight) ? Qt::AlignVCenter : Qt::AlignHCenter;
0
648 if ((a[1] == 0
a[1] == 0Description
TRUEnever evaluated
FALSEnever evaluated
|| a[1] == Qt::AlignCenter
a[1] == Qt::AlignCenterDescription
TRUEnever evaluated
FALSEnever evaluated
) && a[0] != Qt::AlignCenter
a[0] != Qt::AlignCenterDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
649 a[1] = (a[0] == Qt::AlignLeft
a[0] == Qt::AlignLeftDescription
TRUEnever evaluated
FALSEnever evaluated
|| a[0] == Qt::AlignRight
a[0] == Qt::AlignRightDescription
TRUEnever evaluated
FALSEnever evaluated
) ? Qt::AlignVCenter : Qt::AlignHCenter;
never executed: a[1] = (a[0] == Qt::AlignLeft || a[0] == Qt::AlignRight) ? Qt::AlignVCenter : Qt::AlignHCenter;
0
650 return
never executed: return a[0] | a[1];
a[0] | a[1];
never executed: return a[0] | a[1];
0
651}-
652-
653static ColorData parseColorValue(QCss::Value v)-
654{-
655 if (v.type == Value::Identifier
v.type == Value::IdentifierDescription
TRUEnever evaluated
FALSEnever evaluated
|| v.type == Value::String
v.type == Value::StringDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
656 v.variant.convert(QVariant::Color);-
657 v.type = Value::Color;-
658 }
never executed: end of block
0
659-
660 if (v.type == Value::Color
v.type == Value::ColorDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
661 return
never executed: return qvariant_cast<QColor>(v.variant);
qvariant_cast<QColor>(v.variant);
never executed: return qvariant_cast<QColor>(v.variant);
0
662-
663 if (v.type == Value::KnownIdentifier
v.type == Valu...nownIdentifierDescription
TRUEnever evaluated
FALSEnever evaluated
&& v.variant.toInt() == Value_Transparent
v.variant.toIn...ue_TransparentDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
664 return
never executed: return QColor(Qt::transparent);
QColor(Qt::transparent);
never executed: return QColor(Qt::transparent);
0
665-
666 if (v.type != Value::Function
v.type != Value::FunctionDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
667 return
never executed: return ColorData();
ColorData();
never executed: return ColorData();
0
668-
669 QStringList lst = v.variant.toStringList();-
670 if (lst.count() != 2
lst.count() != 2Description
TRUEnever evaluated
FALSEnever evaluated
)
0
671 return
never executed: return ColorData();
ColorData();
never executed: return ColorData();
0
672-
673 if ((
(lst.at(0).com...nsitive)) == 0Description
TRUEnever evaluated
FALSEnever evaluated
lst.at(0).compare(QLatin1String("palette"), Qt::CaseInsensitive)) == 0
(lst.at(0).com...nsitive)) == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
674 int role = findKnownValue(lst.at(1).trimmed(), values, NumKnownValues);-
675 if (role >= Value_FirstColorRole
role >= Value_FirstColorRoleDescription
TRUEnever evaluated
FALSEnever evaluated
&& role <= Value_LastColorRole
role <= Value_LastColorRoleDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
676 return
never executed: return (QPalette::ColorRole)(role-Value_FirstColorRole);
(QPalette::ColorRole)(role-Value_FirstColorRole);
never executed: return (QPalette::ColorRole)(role-Value_FirstColorRole);
0
677-
678 return
never executed: return ColorData();
ColorData();
never executed: return ColorData();
0
679 }-
680-
681 bool rgb = lst.at(0).startsWith(QLatin1String("rgb"));-
682 bool rgba = lst.at(0).startsWith(QLatin1String("rgba"));-
683-
684 Parser p(lst.at(1));-
685 if (!p.testExpr()
!p.testExpr()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
686 return
never executed: return ColorData();
ColorData();
never executed: return ColorData();
0
687-
688 QVector<QCss::Value> colorDigits;-
689 if (!p.parseExpr(&colorDigits)
!p.parseExpr(&colorDigits)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
690 return
never executed: return ColorData();
ColorData();
never executed: return ColorData();
0
691 const int tokenCount = colorDigits.count();-
692-
693 for (int i = 0; i < qMin(tokenCount, 7)
i < qMin(tokenCount, 7)Description
TRUEnever evaluated
FALSEnever evaluated
; i += 2) {
0
694 if (colorDigits.at(i).type == Value::Percentage
colorDigits.at...ue::PercentageDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
695 colorDigits[i].variant = colorDigits.at(i).variant.toReal() * (255. / 100.);-
696 colorDigits[i].type = Value::Number;-
697 }
never executed: end of block
else if (colorDigits.at(i).type != Value::Number
colorDigits.at... Value::NumberDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
698 return
never executed: return ColorData();
ColorData();
never executed: return ColorData();
0
699 }-
700 }
never executed: end of block
0
701-
702-
703 if (tokenCount < 5
tokenCount < 5Description
TRUEnever evaluated
FALSEnever evaluated
)
0
704 return
never executed: return ColorData();
ColorData();
never executed: return ColorData();
0
705-
706 int v1 = colorDigits.at(0).variant.toInt();-
707 int v2 = colorDigits.at(2).variant.toInt();-
708 int v3 = colorDigits.at(4).variant.toInt();-
709 int alpha = 255;-
710 if (tokenCount >= 7
tokenCount >= 7Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
711 int alphaValue = colorDigits.at(6).variant.toInt();-
712 if (rgba
rgbaDescription
TRUEnever evaluated
FALSEnever evaluated
&& alphaValue <= 1
alphaValue <= 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
713 alpha = colorDigits.at(6).variant.toReal() * 255.;
never executed: alpha = colorDigits.at(6).variant.toReal() * 255.;
0
714 else-
715 alpha = alphaValue;
never executed: alpha = alphaValue;
0
716 }-
717-
718 return
never executed: return rgb ? QColor::fromRgb(v1, v2, v3, alpha) : QColor::fromHsv(v1, v2, v3, alpha);
rgb
rgbDescription
TRUEnever evaluated
FALSEnever evaluated
? QColor::fromRgb(v1, v2, v3, alpha)
never executed: return rgb ? QColor::fromRgb(v1, v2, v3, alpha) : QColor::fromHsv(v1, v2, v3, alpha);
0
719 : QColor::fromHsv(v1, v2, v3, alpha);
never executed: return rgb ? QColor::fromRgb(v1, v2, v3, alpha) : QColor::fromHsv(v1, v2, v3, alpha);
0
720}-
721-
722static QColor colorFromData(const ColorData& c, const QPalette &pal)-
723{-
724 if (c.type == ColorData::Color
c.type == ColorData::ColorDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
725 return
never executed: return c.color;
c.color;
never executed: return c.color;
0
726 } else if (c.type == ColorData::Role
c.type == ColorData::RoleDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
727 return
never executed: return pal.color(c.role);
pal.color(c.role);
never executed: return pal.color(c.role);
0
728 }-
729 return
never executed: return QColor();
QColor();
never executed: return QColor();
0
730}-
731-
732static BrushData parseBrushValue(const QCss::Value &v, const QPalette &pal)-
733{-
734 ColorData c = parseColorValue(v);-
735 if (c.type == ColorData::Color
c.type == ColorData::ColorDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
736 return
never executed: return QBrush(c.color);
QBrush(c.color);
never executed: return QBrush(c.color);
0
737 } else if (c.type == ColorData::Role
c.type == ColorData::RoleDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
738 return
never executed: return c.role;
c.role;
never executed: return c.role;
0
739 }-
740-
741 if (v.type != Value::Function
v.type != Value::FunctionDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
742 return
never executed: return BrushData();
BrushData();
never executed: return BrushData();
0
743-
744 QStringList lst = v.variant.toStringList();-
745 if (lst.count() != 2
lst.count() != 2Description
TRUEnever evaluated
FALSEnever evaluated
)
0
746 return
never executed: return BrushData();
BrushData();
never executed: return BrushData();
0
747-
748 QStringList gradFuncs;-
749 gradFuncs << QLatin1String("qlineargradient") << QLatin1String("qradialgradient") << QLatin1String("qconicalgradient") << QLatin1String("qgradient");-
750 int gradType = -1;-
751-
752 if ((
(gradType = gr...ower())) == -1Description
TRUEnever evaluated
FALSEnever evaluated
gradType = gradFuncs.indexOf(lst.at(0).toLower())) == -1
(gradType = gr...ower())) == -1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
753 return
never executed: return BrushData();
BrushData();
never executed: return BrushData();
0
754-
755 QHash<QString, qreal> vars;-
756 QVector<QGradientStop> stops;-
757-
758 int spread = -1;-
759 QStringList spreads;-
760 spreads << QLatin1String("pad") << QLatin1String("reflect") << QLatin1String("repeat");-
761-
762 bool dependsOnThePalette = false;-
763 Parser parser(lst.at(1));-
764 while (parser.hasNext()
parser.hasNext()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
765 parser.skipSpace();-
766 if (!parser.test(IDENT)
!parser.test(IDENT)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
767 return
never executed: return BrushData();
BrushData();
never executed: return BrushData();
0
768 QString attr = parser.lexem();-
769 parser.skipSpace();-
770 if (!parser.test(COLON)
!parser.test(COLON)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
771 return
never executed: return BrushData();
BrushData();
never executed: return BrushData();
0
772 parser.skipSpace();-
773 if (attr.compare(QLatin1String("stop"), Qt::CaseInsensitive) == 0
attr.compare(Q...ensitive) == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
774 QCss::Value stop, color;-
775 parser.next();-
776 if (!parser.parseTerm(&stop)
!parser.parseTerm(&stop)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return BrushData();
BrushData();
never executed: return BrushData();
0
777 parser.skipSpace();-
778 parser.next();-
779 if (!parser.parseTerm(&color)
!parser.parseTerm(&color)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return BrushData();
BrushData();
never executed: return BrushData();
0
780 ColorData cd = parseColorValue(color);-
781 if(cd.type == ColorData::Role
cd.type == ColorData::RoleDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
782 dependsOnThePalette = true;
never executed: dependsOnThePalette = true;
0
783 stops.append(QGradientStop(stop.variant.toReal(), colorFromData(cd, pal)));-
784 }
never executed: end of block
else {
0
785 parser.next();-
786 QCss::Value value;-
787 (void)parser.parseTerm(&value);-
788 if (attr.compare(QLatin1String("spread"), Qt::CaseInsensitive) == 0
attr.compare(Q...ensitive) == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
789 spread = spreads.indexOf(value.variant.toString());-
790 }
never executed: end of block
else {
0
791 vars[attr] = value.variant.toReal();-
792 }
never executed: end of block
0
793 }-
794 parser.skipSpace();-
795 (void)parser.test(COMMA);-
796 }
never executed: end of block
0
797-
798 if (gradType == 0
gradType == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
799 QLinearGradient lg(vars.value(QLatin1String("x1")), vars.value(QLatin1String("y1")),-
800 vars.value(QLatin1String("x2")), vars.value(QLatin1String("y2")));-
801 lg.setCoordinateMode(QGradient::ObjectBoundingMode);-
802 lg.setStops(stops);-
803 if (spread != -1
spread != -1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
804 lg.setSpread(QGradient::Spread(spread));
never executed: lg.setSpread(QGradient::Spread(spread));
0
805 BrushData bd = QBrush(lg);-
806 if (dependsOnThePalette
dependsOnThePaletteDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
807 bd.type = BrushData::DependsOnThePalette;
never executed: bd.type = BrushData::DependsOnThePalette;
0
808 return
never executed: return bd;
bd;
never executed: return bd;
0
809 }-
810-
811 if (gradType == 1
gradType == 1Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
812 QRadialGradient rg(vars.value(QLatin1String("cx")), vars.value(QLatin1String("cy")),-
813 vars.value(QLatin1String("radius")), vars.value(QLatin1String("fx")),-
814 vars.value(QLatin1String("fy")));-
815 rg.setCoordinateMode(QGradient::ObjectBoundingMode);-
816 rg.setStops(stops);-
817 if (spread != -1
spread != -1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
818 rg.setSpread(QGradient::Spread(spread));
never executed: rg.setSpread(QGradient::Spread(spread));
0
819 BrushData bd = QBrush(rg);-
820 if (dependsOnThePalette
dependsOnThePaletteDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
821 bd.type = BrushData::DependsOnThePalette;
never executed: bd.type = BrushData::DependsOnThePalette;
0
822 return
never executed: return bd;
bd;
never executed: return bd;
0
823 }-
824-
825 if (gradType == 2
gradType == 2Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
826 QConicalGradient cg(vars.value(QLatin1String("cx")), vars.value(QLatin1String("cy")),-
827 vars.value(QLatin1String("angle")));-
828 cg.setCoordinateMode(QGradient::ObjectBoundingMode);-
829 cg.setStops(stops);-
830 if (spread != -1
spread != -1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
831 cg.setSpread(QGradient::Spread(spread));
never executed: cg.setSpread(QGradient::Spread(spread));
0
832 BrushData bd = QBrush(cg);-
833 if (dependsOnThePalette
dependsOnThePaletteDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
834 bd.type = BrushData::DependsOnThePalette;
never executed: bd.type = BrushData::DependsOnThePalette;
0
835 return
never executed: return bd;
bd;
never executed: return bd;
0
836 }-
837-
838 return
never executed: return BrushData();
BrushData();
never executed: return BrushData();
0
839}-
840-
841static QBrush brushFromData(const BrushData& c, const QPalette &pal)-
842{-
843 if (c.type == BrushData::Role
c.type == BrushData::RoleDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
844 return
never executed: return pal.color(c.role);
pal.color(c.role);
never executed: return pal.color(c.role);
0
845 } else {-
846 return
never executed: return c.brush;
c.brush;
never executed: return c.brush;
0
847 }-
848}-
849-
850static BorderStyle parseStyleValue(QCss::Value v)-
851{-
852 if (v.type == Value::KnownIdentifier
v.type == Valu...nownIdentifierDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
853 switch (v.variant.toInt()) {-
854 case
never executed: case Value_None:
Value_None:
never executed: case Value_None:
0
855 return
never executed: return BorderStyle_None;
BorderStyle_None;
never executed: return BorderStyle_None;
0
856 case
never executed: case Value_Dotted:
Value_Dotted:
never executed: case Value_Dotted:
0
857 return
never executed: return BorderStyle_Dotted;
BorderStyle_Dotted;
never executed: return BorderStyle_Dotted;
0
858 case
never executed: case Value_Dashed:
Value_Dashed:
never executed: case Value_Dashed:
0
859 return
never executed: return BorderStyle_Dashed;
BorderStyle_Dashed;
never executed: return BorderStyle_Dashed;
0
860 case
never executed: case Value_Solid:
Value_Solid:
never executed: case Value_Solid:
0
861 return
never executed: return BorderStyle_Solid;
BorderStyle_Solid;
never executed: return BorderStyle_Solid;
0
862 case
never executed: case Value_Double:
Value_Double:
never executed: case Value_Double:
0
863 return
never executed: return BorderStyle_Double;
BorderStyle_Double;
never executed: return BorderStyle_Double;
0
864 case
never executed: case Value_DotDash:
Value_DotDash:
never executed: case Value_DotDash:
0
865 return
never executed: return BorderStyle_DotDash;
BorderStyle_DotDash;
never executed: return BorderStyle_DotDash;
0
866 case
never executed: case Value_DotDotDash:
Value_DotDotDash:
never executed: case Value_DotDotDash:
0
867 return
never executed: return BorderStyle_DotDotDash;
BorderStyle_DotDotDash;
never executed: return BorderStyle_DotDotDash;
0
868 case
never executed: case Value_Groove:
Value_Groove:
never executed: case Value_Groove:
0
869 return
never executed: return BorderStyle_Groove;
BorderStyle_Groove;
never executed: return BorderStyle_Groove;
0
870 case
never executed: case Value_Ridge:
Value_Ridge:
never executed: case Value_Ridge:
0
871 return
never executed: return BorderStyle_Ridge;
BorderStyle_Ridge;
never executed: return BorderStyle_Ridge;
0
872 case
never executed: case Value_Inset:
Value_Inset:
never executed: case Value_Inset:
0
873 return
never executed: return BorderStyle_Inset;
BorderStyle_Inset;
never executed: return BorderStyle_Inset;
0
874 case
never executed: case Value_Outset:
Value_Outset:
never executed: case Value_Outset:
0
875 return
never executed: return BorderStyle_Outset;
BorderStyle_Outset;
never executed: return BorderStyle_Outset;
0
876 case
never executed: case Value_Native:
Value_Native:
never executed: case Value_Native:
0
877 return
never executed: return BorderStyle_Native;
BorderStyle_Native;
never executed: return BorderStyle_Native;
0
878 default
never executed: default:
:
never executed: default:
0
879 break;
never executed: break;
0
880 }-
881 }-
882-
883 return
never executed: return BorderStyle_Unknown;
BorderStyle_Unknown;
never executed: return BorderStyle_Unknown;
0
884}-
885-
886void ValueExtractor::borderValue(const Declaration &decl, int *width, QCss::BorderStyle *style, QBrush *color)-
887{-
888 if (decl.d->parsed.isValid()
decl.d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
889 BorderData data = qvariant_cast<BorderData>(decl.d->parsed);-
890 *width = lengthValueFromData(data.width, f);-
891 *style = data.style;-
892 *color = data.color.type != BrushData::Invalid
data.color.typ...hData::InvalidDescription
TRUEnever evaluated
FALSEnever evaluated
? brushFromData(data.color, pal) : QBrush(QColor());
0
893 return;
never executed: return;
0
894 }-
895-
896 *width = 0;-
897 *style = BorderStyle_None;-
898 *color = QColor();-
899-
900 if (decl.d->values.isEmpty()
decl.d->values.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
901 return;
never executed: return;
0
902-
903 BorderData data;-
904 data.width.number = 0;-
905 data.width.unit = LengthData::None;-
906 data.style = BorderStyle_None;-
907-
908 int i = 0;-
909 if (decl.d->values.at(i).type == Value::Length
decl.d->values... Value::LengthDescription
TRUEnever evaluated
FALSEnever evaluated
|| decl.d->values.at(i).type == Value::Number
decl.d->values... Value::NumberDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
910 data.width = lengthValue(decl.d->values.at(i));-
911 *width = lengthValueFromData(data.width, f);-
912 if (++
++i >= decl.d->values.count()Description
TRUEnever evaluated
FALSEnever evaluated
i >= decl.d->values.count()
++i >= decl.d->values.count()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
913 decl.d->parsed = QVariant::fromValue<BorderData>(data);-
914 return;
never executed: return;
0
915 }-
916 }
never executed: end of block
0
917-
918 data.style = parseStyleValue(decl.d->values.at(i));-
919 if (data.style != BorderStyle_Unknown
data.style != ...rStyle_UnknownDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
920 *style = data.style;-
921 if (++
++i >= decl.d->values.count()Description
TRUEnever evaluated
FALSEnever evaluated
i >= decl.d->values.count()
++i >= decl.d->values.count()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
922 decl.d->parsed = QVariant::fromValue<BorderData>(data);-
923 return;
never executed: return;
0
924 }-
925 }
never executed: end of block
else {
0
926 data.style = BorderStyle_None;-
927 }
never executed: end of block
0
928-
929 data.color = parseBrushValue(decl.d->values.at(i), pal);-
930 *color = brushFromData(data.color, pal);-
931 if (data.color.type != BrushData::DependsOnThePalette
data.color.typ...dsOnThePaletteDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
932 decl.d->parsed = QVariant::fromValue<BorderData>(data);
never executed: decl.d->parsed = QVariant::fromValue<BorderData>(data);
0
933}
never executed: end of block
0
934-
935static void parseShorthandBackgroundProperty(const QVector<QCss::Value> &values, BrushData *brush, QString *image, Repeat *repeat, Qt::Alignment *alignment, const QPalette &pal)-
936{-
937 *brush = BrushData();-
938 *image = QString();-
939 *repeat = Repeat_XY;-
940 *alignment = Qt::AlignTop | Qt::AlignLeft;-
941-
942 for (int i = 0; i < values.count()
i < values.count()Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
943 const QCss::Value &v = values.at(i);-
944 if (v.type == Value::Uri
v.type == Value::UriDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
945 *image = v.variant.toString();-
946 continue;
never executed: continue;
0
947 } else if (v.type == Value::KnownIdentifier
v.type == Valu...nownIdentifierDescription
TRUEnever evaluated
FALSEnever evaluated
&& v.variant.toInt() == Value_None
v.variant.toIn... == Value_NoneDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
948 *image = QString();-
949 continue;
never executed: continue;
0
950 } else if (v.type == Value::KnownIdentifier
v.type == Valu...nownIdentifierDescription
TRUEnever evaluated
FALSEnever evaluated
&& v.variant.toInt() == Value_Transparent
v.variant.toIn...ue_TransparentDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
951 *brush = QBrush(Qt::transparent);-
952 }
never executed: end of block
0
953-
954 Repeat repeatAttempt = static_cast<Repeat>(findKnownValue(v.variant.toString(),-
955 repeats, NumKnownRepeats));-
956 if (repeatAttempt != Repeat_Unknown
repeatAttempt ...Repeat_UnknownDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
957 *repeat = repeatAttempt;-
958 continue;
never executed: continue;
0
959 }-
960-
961 if (v.type == Value::KnownIdentifier
v.type == Valu...nownIdentifierDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
962 const int start = i;-
963 int count = 1;-
964 if (i < values.count() - 1
i < values.count() - 1Description
TRUEnever evaluated
FALSEnever evaluated
0
965 && values.at(i + 1).type == Value::KnownIdentifier
values.at(i + ...nownIdentifierDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
966 ++i;-
967 ++count;-
968 }
never executed: end of block
0
969 Qt::Alignment a = parseAlignment(values.constData() + start, count);-
970 if (int(a) != 0
int(a) != 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
971 *alignment = a;-
972 continue;
never executed: continue;
0
973 }-
974 i -= count - 1;-
975 }
never executed: end of block
0
976-
977 *brush = parseBrushValue(v, pal);-
978 }
never executed: end of block
0
979}
never executed: end of block
0
980-
981bool ValueExtractor::extractBackground(QBrush *brush, QString *image, Repeat *repeat,-
982 Qt::Alignment *alignment, Origin *origin, Attachment *attachment,-
983 Origin *clip)-
984{-
985 bool hit = false;-
986 for (int i = 0; i < declarations.count()
i < declarations.count()Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
987 const Declaration &decl = declarations.at(i);-
988 if (decl.d->values.isEmpty()
decl.d->values.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
989 continue;
never executed: continue;
0
990 const QCss::Value &val = decl.d->values.at(0);-
991 switch (decl.d->propertyId) {-
992 case
never executed: case BackgroundColor:
BackgroundColor:
never executed: case BackgroundColor:
0
993 *brush = decl.brushValue();-
994 break;
never executed: break;
0
995 case
never executed: case BackgroundImage:
BackgroundImage:
never executed: case BackgroundImage:
0
996 if (val.type == Value::Uri
val.type == Value::UriDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
997 *
never executed: *image = val.variant.toString();
image = val.variant.toString();
never executed: *image = val.variant.toString();
0
998 break;
never executed: break;
0
999 case
never executed: case BackgroundRepeat:
BackgroundRepeat:
never executed: case BackgroundRepeat:
0
1000 if (decl.d->parsed.isValid()
decl.d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1001 *repeat = static_cast<Repeat>(decl.d->parsed.toInt());-
1002 }
never executed: end of block
else {
0
1003 *repeat = static_cast<Repeat>(findKnownValue(val.variant.toString(),-
1004 repeats, NumKnownRepeats));-
1005 decl.d->parsed = *repeat;-
1006 }
never executed: end of block
0
1007 break;
never executed: break;
0
1008 case
never executed: case BackgroundPosition:
BackgroundPosition:
never executed: case BackgroundPosition:
0
1009 *alignment = decl.alignmentValue();-
1010 break;
never executed: break;
0
1011 case
never executed: case BackgroundOrigin:
BackgroundOrigin:
never executed: case BackgroundOrigin:
0
1012 *origin = decl.originValue();-
1013 break;
never executed: break;
0
1014 case
never executed: case BackgroundClip:
BackgroundClip:
never executed: case BackgroundClip:
0
1015 *clip = decl.originValue();-
1016 break;
never executed: break;
0
1017 case
never executed: case Background:
Background:
never executed: case Background:
0
1018 if (decl.d->parsed.isValid()
decl.d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1019 BackgroundData data = qvariant_cast<BackgroundData>(decl.d->parsed);-
1020 *brush = brushFromData(data.brush, pal);-
1021 *image = data.image;-
1022 *repeat = data.repeat;-
1023 *alignment = data.alignment;-
1024 }
never executed: end of block
else {
0
1025 BrushData brushData;-
1026 parseShorthandBackgroundProperty(decl.d->values, &brushData, image, repeat, alignment, pal);-
1027 *brush = brushFromData(brushData, pal);-
1028 if (brushData.type != BrushData::DependsOnThePalette
brushData.type...dsOnThePaletteDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1029 BackgroundData data = { brushData, *image, *repeat, *alignment };-
1030 decl.d->parsed = QVariant::fromValue<BackgroundData>(data);-
1031 }
never executed: end of block
0
1032 }
never executed: end of block
0
1033 break;
never executed: break;
0
1034 case
never executed: case BackgroundAttachment:
BackgroundAttachment:
never executed: case BackgroundAttachment:
0
1035 *attachment = decl.attachmentValue();-
1036 break;
never executed: break;
0
1037 default
never executed: default:
:
never executed: default:
continue;
never executed: continue;
0
1038 }-
1039 hit = true;-
1040 }
never executed: end of block
0
1041 return
never executed: return hit;
hit;
never executed: return hit;
0
1042}-
1043-
1044static bool setFontSizeFromValue(QCss::Value value, QFont *font, int *fontSizeAdjustment)-
1045{-
1046 if (value.type == Value::KnownIdentifier
value.type == ...nownIdentifierDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1047 bool valid = true;-
1048 switch (value.variant.toInt()) {-
1049 case
never executed: case Value_Small:
Value_Small:
never executed: case Value_Small:
*fontSizeAdjustment = -1; break;
never executed: break;
0
1050 case
never executed: case Value_Medium:
Value_Medium:
never executed: case Value_Medium:
*fontSizeAdjustment = 0; break;
never executed: break;
0
1051 case
never executed: case Value_Large:
Value_Large:
never executed: case Value_Large:
*fontSizeAdjustment = 1; break;
never executed: break;
0
1052 case
never executed: case Value_XLarge:
Value_XLarge:
never executed: case Value_XLarge:
*fontSizeAdjustment = 2; break;
never executed: break;
0
1053 case
never executed: case Value_XXLarge:
Value_XXLarge:
never executed: case Value_XXLarge:
*fontSizeAdjustment = 3; break;
never executed: break;
0
1054 default
never executed: default:
:
never executed: default:
valid = false; break;
never executed: break;
0
1055 }-
1056 return
never executed: return valid;
valid;
never executed: return valid;
0
1057 }-
1058 if (value.type != Value::Length
value.type != Value::LengthDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1059 return
never executed: return false;
false;
never executed: return false;
0
1060-
1061 bool valid = false;-
1062 QString s = value.variant.toString();-
1063 if (s.endsWith(QLatin1String("pt"), Qt::CaseInsensitive)
s.endsWith(QLa...seInsensitive)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1064 s.chop(2);-
1065 value.variant = s;-
1066 if (value.variant.convert((QVariant::Type)qMetaTypeId<qreal>())
value.variant....peId<qreal>())Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1067 font->setPointSizeF(value.variant.toReal());-
1068 valid = true;-
1069 }
never executed: end of block
0
1070 }
never executed: end of block
else if (s.endsWith(QLatin1String("px"), Qt::CaseInsensitive)
s.endsWith(QLa...seInsensitive)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1071 s.chop(2);-
1072 value.variant = s;-
1073 if (value.variant.convert(QVariant::Int)
value.variant....QVariant::Int)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1074 font->setPixelSize(value.variant.toInt());-
1075 valid = true;-
1076 }
never executed: end of block
0
1077 }
never executed: end of block
0
1078 return
never executed: return valid;
valid;
never executed: return valid;
0
1079}-
1080-
1081static bool setFontStyleFromValue(const QCss::Value &value, QFont *font)-
1082{-
1083 if (value.type != Value::KnownIdentifier
value.type != ...nownIdentifierDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1084 return
never executed: return false ;
false ;
never executed: return false ;
0
1085 switch (value.variant.toInt()) {-
1086 case
never executed: case Value_Normal:
Value_Normal:
never executed: case Value_Normal:
font->setStyle(QFont::StyleNormal); return
never executed: return true;
true;
never executed: return true;
0
1087 case
never executed: case Value_Italic:
Value_Italic:
never executed: case Value_Italic:
font->setStyle(QFont::StyleItalic); return
never executed: return true;
true;
never executed: return true;
0
1088 case
never executed: case Value_Oblique:
Value_Oblique:
never executed: case Value_Oblique:
font->setStyle(QFont::StyleOblique); return
never executed: return true;
true;
never executed: return true;
0
1089 default
never executed: default:
:
never executed: default:
break;
never executed: break;
0
1090 }-
1091 return
never executed: return false;
false;
never executed: return false;
0
1092}-
1093-
1094static bool setFontWeightFromValue(const QCss::Value &value, QFont *font)-
1095{-
1096 if (value.type == Value::KnownIdentifier
value.type == ...nownIdentifierDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1097 switch (value.variant.toInt()) {-
1098 case
never executed: case Value_Normal:
Value_Normal:
never executed: case Value_Normal:
font->setWeight(QFont::Normal); return
never executed: return true;
true;
never executed: return true;
0
1099 case
never executed: case Value_Bold:
Value_Bold:
never executed: case Value_Bold:
font->setWeight(QFont::Bold); return
never executed: return true;
true;
never executed: return true;
0
1100 default
never executed: default:
:
never executed: default:
break;
never executed: break;
0
1101 }-
1102 return
never executed: return false;
false;
never executed: return false;
0
1103 }-
1104 if (value.type != Value::Number
value.type != Value::NumberDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1105 return
never executed: return false;
false;
never executed: return false;
0
1106 font->setWeight(qMin(value.variant.toInt() / 8, 99));-
1107 return
never executed: return true;
true;
never executed: return true;
0
1108}-
1109-
1110-
1111-
1112-
1113-
1114-
1115static bool setFontFamilyFromValues(const QVector<QCss::Value> &values, QFont *font, int start = 0)-
1116{-
1117 QString family;-
1118 bool shouldAddSpace = false;-
1119 for (int i = start; i < values.count()
i < values.count()Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
1120 const QCss::Value &v = values.at(i);-
1121 if (v.type == Value::TermOperatorComma
v.type == Valu...mOperatorCommaDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1122 family += QLatin1Char(',');-
1123 shouldAddSpace = false;-
1124 continue;
never executed: continue;
0
1125 }-
1126 const QString str = v.variant.toString();-
1127 if (str.isEmpty()
str.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1128 break;
never executed: break;
0
1129 if (shouldAddSpace
shouldAddSpaceDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1130 family += QLatin1Char(' ');
never executed: family += QLatin1Char(' ');
0
1131 family += str;-
1132 shouldAddSpace = true;-
1133 }
never executed: end of block
0
1134 if (family.isEmpty()
family.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1135 return
never executed: return false;
false;
never executed: return false;
0
1136 font->setFamily(family);-
1137 return
never executed: return true;
true;
never executed: return true;
0
1138}-
1139-
1140static void setTextDecorationFromValues(const QVector<QCss::Value> &values, QFont *font)-
1141{-
1142 for (int i = 0; i < values.count()
i < values.count()Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
1143 if (values.at(i).type != Value::KnownIdentifier
values.at(i).t...nownIdentifierDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1144 continue;
never executed: continue;
0
1145 switch (values.at(i).variant.toInt()) {-
1146 case
never executed: case Value_Underline:
Value_Underline:
never executed: case Value_Underline:
font->setUnderline(true); break;
never executed: break;
0
1147 case
never executed: case Value_Overline:
Value_Overline:
never executed: case Value_Overline:
font->setOverline(true); break;
never executed: break;
0
1148 case
never executed: case Value_LineThrough:
Value_LineThrough:
never executed: case Value_LineThrough:
font->setStrikeOut(true); break;
never executed: break;
0
1149 case
never executed: case Value_None:
Value_None:
never executed: case Value_None:
0
1150 font->setUnderline(false);-
1151 font->setOverline(false);-
1152 font->setStrikeOut(false);-
1153 break;
never executed: break;
0
1154 default
never executed: default:
:
never executed: default:
break;
never executed: break;
0
1155 }-
1156 }-
1157}
never executed: end of block
0
1158-
1159static void parseShorthandFontProperty(const QVector<QCss::Value> &values, QFont *font, int *fontSizeAdjustment)-
1160{-
1161 font->setStyle(QFont::StyleNormal);-
1162 font->setWeight(QFont::Normal);-
1163 *fontSizeAdjustment = -255;-
1164-
1165 int i = 0;-
1166 while (i < values.count()
i < values.count()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1167 if (setFontStyleFromValue(values.at(i), font)
setFontStyleFr...s.at(i), font)Description
TRUEnever evaluated
FALSEnever evaluated
0
1168 || setFontWeightFromValue(values.at(i), font)
setFontWeightF...s.at(i), font)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1169 ++
never executed: ++i;
i;
never executed: ++i;
0
1170 else-
1171 break;
never executed: break;
0
1172 }-
1173-
1174 if (i < values.count()
i < values.count()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1175 setFontSizeFromValue(values.at(i), font, fontSizeAdjustment);-
1176 ++i;-
1177 }
never executed: end of block
0
1178-
1179 if (i < values.count()
i < values.count()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1180 setFontFamilyFromValues(values, font, i);-
1181 }
never executed: end of block
0
1182}
never executed: end of block
0
1183-
1184static void setFontVariantFromValue(const QCss::Value &value, QFont *font)-
1185{-
1186 if (value.type == Value::KnownIdentifier
value.type == ...nownIdentifierDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1187 switch (value.variant.toInt()) {-
1188 case
never executed: case Value_Normal:
Value_Normal:
never executed: case Value_Normal:
font->setCapitalization(QFont::MixedCase); break;
never executed: break;
0
1189 case
never executed: case Value_SmallCaps:
Value_SmallCaps:
never executed: case Value_SmallCaps:
font->setCapitalization(QFont::SmallCaps); break;
never executed: break;
0
1190 default
never executed: default:
:
never executed: default:
break;
never executed: break;
0
1191 }-
1192 }-
1193}
never executed: end of block
0
1194-
1195static void setTextTransformFromValue(const QCss::Value &value, QFont *font)-
1196{-
1197 if (value.type == Value::KnownIdentifier
value.type == ...nownIdentifierDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1198 switch (value.variant.toInt()) {-
1199 case
never executed: case Value_None:
Value_None:
never executed: case Value_None:
font->setCapitalization(QFont::MixedCase); break;
never executed: break;
0
1200 case
never executed: case Value_Uppercase:
Value_Uppercase:
never executed: case Value_Uppercase:
font->setCapitalization(QFont::AllUppercase); break;
never executed: break;
0
1201 case
never executed: case Value_Lowercase:
Value_Lowercase:
never executed: case Value_Lowercase:
font->setCapitalization(QFont::AllLowercase); break;
never executed: break;
0
1202 default
never executed: default:
:
never executed: default:
break;
never executed: break;
0
1203 }-
1204 }-
1205}
never executed: end of block
0
1206-
1207bool ValueExtractor::extractFont(QFont *font, int *fontSizeAdjustment)-
1208{-
1209 if (fontExtracted
fontExtractedDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1210 *font = f;-
1211 *fontSizeAdjustment = adjustment;-
1212 return
never executed: return fontExtracted == 1;
fontExtracted == 1;
never executed: return fontExtracted == 1;
0
1213 }-
1214-
1215 bool hit = false;-
1216 for (int i = 0; i < declarations.count()
i < declarations.count()Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
1217 const Declaration &decl = declarations.at(i);-
1218 if (decl.d->values.isEmpty()
decl.d->values.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1219 continue;
never executed: continue;
0
1220 const QCss::Value &val = decl.d->values.at(0);-
1221 switch (decl.d->propertyId) {-
1222 case
never executed: case FontSize:
FontSize:
never executed: case FontSize:
setFontSizeFromValue(val, font, fontSizeAdjustment); break;
never executed: break;
0
1223 case
never executed: case FontStyle:
FontStyle:
never executed: case FontStyle:
setFontStyleFromValue(val, font); break;
never executed: break;
0
1224 case
never executed: case FontWeight:
FontWeight:
never executed: case FontWeight:
setFontWeightFromValue(val, font); break;
never executed: break;
0
1225 case
never executed: case FontFamily:
FontFamily:
never executed: case FontFamily:
setFontFamilyFromValues(decl.d->values, font); break;
never executed: break;
0
1226 case
never executed: case TextDecoration:
TextDecoration:
never executed: case TextDecoration:
setTextDecorationFromValues(decl.d->values, font); break;
never executed: break;
0
1227 case
never executed: case Font:
Font:
never executed: case Font:
parseShorthandFontProperty(decl.d->values, font, fontSizeAdjustment); break;
never executed: break;
0
1228 case
never executed: case FontVariant:
FontVariant:
never executed: case FontVariant:
setFontVariantFromValue(val, font); break;
never executed: break;
0
1229 case
never executed: case TextTransform:
TextTransform:
never executed: case TextTransform:
setTextTransformFromValue(val, font); break;
never executed: break;
0
1230 default
never executed: default:
:
never executed: default:
continue;
never executed: continue;
0
1231 }-
1232 hit = true;-
1233 }
never executed: end of block
0
1234-
1235 f = *font;-
1236 adjustment = *fontSizeAdjustment;-
1237 fontExtracted = hit
hitDescription
TRUEnever evaluated
FALSEnever evaluated
? 1 : 2;
0
1238 return
never executed: return hit;
hit;
never executed: return hit;
0
1239}-
1240-
1241bool ValueExtractor::extractPalette(QBrush *fg, QBrush *sfg, QBrush *sbg, QBrush *abg)-
1242{-
1243 bool hit = false;-
1244 for (int i = 0; i < declarations.count()
i < declarations.count()Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
1245 const Declaration &decl = declarations.at(i);-
1246 switch (decl.d->propertyId) {-
1247 case
never executed: case Color:
Color:
never executed: case Color:
*fg = decl.brushValue(pal); break;
never executed: break;
0
1248 case
never executed: case QtSelectionForeground:
QtSelectionForeground:
never executed: case QtSelectionForeground:
*sfg = decl.brushValue(pal); break;
never executed: break;
0
1249 case
never executed: case QtSelectionBackground:
QtSelectionBackground:
never executed: case QtSelectionBackground:
*sbg = decl.brushValue(pal); break;
never executed: break;
0
1250 case
never executed: case QtAlternateBackground:
QtAlternateBackground:
never executed: case QtAlternateBackground:
*abg = decl.brushValue(pal); break;
never executed: break;
0
1251 default
never executed: default:
:
never executed: default:
continue;
never executed: continue;
0
1252 }-
1253 hit = true;-
1254 }
never executed: end of block
0
1255 return
never executed: return hit;
hit;
never executed: return hit;
0
1256}-
1257-
1258void ValueExtractor::extractFont()-
1259{-
1260 if (fontExtracted
fontExtractedDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1261 return;
never executed: return;
0
1262 int dummy = -255;-
1263 extractFont(&f, &dummy);-
1264}
never executed: end of block
0
1265-
1266bool ValueExtractor::extractImage(QIcon *icon, Qt::Alignment *a, QSize *size)-
1267{-
1268 bool hit = false;-
1269 for (int i = 0; i < declarations.count()
i < declarations.count()Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
1270 const Declaration &decl = declarations.at(i);-
1271 switch (decl.d->propertyId) {-
1272 case
never executed: case QtImage:
QtImage:
never executed: case QtImage:
0
1273 *icon = decl.iconValue();-
1274 if (decl.d->values.count() > 0
decl.d->values.count() > 0Description
TRUEnever evaluated
FALSEnever evaluated
&& decl.d->values.at(0).type == Value::Uri
decl.d->values... == Value::UriDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1275-
1276 QImageReader imageReader(decl.d->values.at(0).variant.toString());-
1277 if ((*
(*size = image...ze()).isNull()Description
TRUEnever evaluated
FALSEnever evaluated
size = imageReader.size()).isNull()
(*size = image...ze()).isNull()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1278-
1279-
1280 *size = imageReader.read().size();-
1281 }
never executed: end of block
0
1282 }
never executed: end of block
0
1283 break;
never executed: break;
0
1284 case
never executed: case QtImageAlignment:
QtImageAlignment:
never executed: case QtImageAlignment:
*a = decl.alignmentValue(); break;
never executed: break;
0
1285 default
never executed: default:
:
never executed: default:
continue;
never executed: continue;
0
1286 }-
1287 hit = true;-
1288 }
never executed: end of block
0
1289 return
never executed: return hit;
hit;
never executed: return hit;
0
1290}-
1291-
1292-
1293-
1294QColor Declaration::colorValue(const QPalette &pal) const-
1295{-
1296 if (d->values.count() != 1
d->values.count() != 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1297 return
never executed: return QColor();
QColor();
never executed: return QColor();
0
1298-
1299 if (d->parsed.isValid()
d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1300 if (d->parsed.type() == QVariant::Color
d->parsed.type...Variant::ColorDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1301 return
never executed: return qvariant_cast<QColor>(d->parsed);
qvariant_cast<QColor>(d->parsed);
never executed: return qvariant_cast<QColor>(d->parsed);
0
1302 if (d->parsed.type() == QVariant::Int
d->parsed.type... QVariant::IntDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1303 return
never executed: return pal.color((QPalette::ColorRole)(d->parsed.toInt()));
pal.color((QPalette::ColorRole)(d->parsed.toInt()));
never executed: return pal.color((QPalette::ColorRole)(d->parsed.toInt()));
0
1304 }
never executed: end of block
0
1305-
1306 ColorData color = parseColorValue(d->values.at(0));-
1307 if(color.type == ColorData::Role
color.type == ColorData::RoleDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1308 d->parsed = QVariant::fromValue<int>(color.role);-
1309 return
never executed: return pal.color((QPalette::ColorRole)(color.role));
pal.color((QPalette::ColorRole)(color.role));
never executed: return pal.color((QPalette::ColorRole)(color.role));
0
1310 } else {-
1311 d->parsed = QVariant::fromValue<QColor>(color.color);-
1312 return
never executed: return color.color;
color.color;
never executed: return color.color;
0
1313 }-
1314}-
1315-
1316QBrush Declaration::brushValue(const QPalette &pal) const-
1317{-
1318 if (d->values.count() != 1
d->values.count() != 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1319 return
never executed: return QBrush();
QBrush();
never executed: return QBrush();
0
1320-
1321 if (d->parsed.isValid()
d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1322 if (d->parsed.type() == QVariant::Brush
d->parsed.type...Variant::BrushDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1323 return
never executed: return qvariant_cast<QBrush>(d->parsed);
qvariant_cast<QBrush>(d->parsed);
never executed: return qvariant_cast<QBrush>(d->parsed);
0
1324 if (d->parsed.type() == QVariant::Int
d->parsed.type... QVariant::IntDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1325 return
never executed: return pal.color((QPalette::ColorRole)(d->parsed.toInt()));
pal.color((QPalette::ColorRole)(d->parsed.toInt()));
never executed: return pal.color((QPalette::ColorRole)(d->parsed.toInt()));
0
1326 }
never executed: end of block
0
1327-
1328 BrushData data = parseBrushValue(d->values.at(0), pal);-
1329-
1330 if(data.type == BrushData::Role
data.type == BrushData::RoleDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1331 d->parsed = QVariant::fromValue<int>(data.role);-
1332 return
never executed: return pal.color((QPalette::ColorRole)(data.role));
pal.color((QPalette::ColorRole)(data.role));
never executed: return pal.color((QPalette::ColorRole)(data.role));
0
1333 } else {-
1334 if (data.type != BrushData::DependsOnThePalette
data.type != B...dsOnThePaletteDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1335 d->parsed = QVariant::fromValue<QBrush>(data.brush);
never executed: d->parsed = QVariant::fromValue<QBrush>(data.brush);
0
1336 return
never executed: return data.brush;
data.brush;
never executed: return data.brush;
0
1337 }-
1338}-
1339-
1340void Declaration::brushValues(QBrush *c, const QPalette &pal) const-
1341{-
1342 int needParse = 0x1f;-
1343-
1344 int i = 0;-
1345 if (d->parsed.isValid()
d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1346 needParse = 0;-
1347 QList<QVariant> v = d->parsed.toList();-
1348 for (i = 0; i < qMin(v.count(), 4)
i < qMin(v.count(), 4)Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
1349 if (v.at(i).type() == QVariant::Brush
v.at(i).type()...Variant::BrushDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1350 c[i] = qvariant_cast<QBrush>(v.at(i));-
1351 }
never executed: end of block
else if (v.at(i).type() == QVariant::Int
v.at(i).type()... QVariant::IntDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1352 c[i] = pal.color((QPalette::ColorRole)(v.at(i).toInt()));-
1353 }
never executed: end of block
else {
0
1354 needParse |= (1<<i);-
1355 }
never executed: end of block
0
1356 }-
1357 }
never executed: end of block
0
1358 if (needParse != 0
needParse != 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1359 QList<QVariant> v;-
1360 for (i = 0; i < qMin(d->values.count(), 4)
i < qMin(d->values.count(), 4)Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
1361 if (!(needParse & (1<<i))
!(needParse & (1<<i))Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1362 continue;
never executed: continue;
0
1363 BrushData data = parseBrushValue(d->values.at(i), pal);-
1364 if(data.type == BrushData::Role
data.type == BrushData::RoleDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1365 v += QVariant::fromValue<int>(data.role);-
1366 c[i] = pal.color((QPalette::ColorRole)(data.role));-
1367 }
never executed: end of block
else {
0
1368 if (data.type != BrushData::DependsOnThePalette
data.type != B...dsOnThePaletteDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1369 v += QVariant::fromValue<QBrush>(data.brush);-
1370 }
never executed: end of block
else {
0
1371 v += QVariant();-
1372 }
never executed: end of block
0
1373 c[i] = data.brush;-
1374 }
never executed: end of block
0
1375 }-
1376 if (needParse & 0x10
needParse & 0x10Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1377 d->parsed = v;
never executed: d->parsed = v;
0
1378 }
never executed: end of block
0
1379 if (i == 0
i == 0Description
TRUEnever evaluated
FALSEnever evaluated
) c[0] = c[1] = c[2] = c[3] = QBrush();
never executed: c[0] = c[1] = c[2] = c[3] = QBrush();
0
1380 else if (i == 1
i == 1Description
TRUEnever evaluated
FALSEnever evaluated
) c[3] = c[2] = c[1] = c[0];
never executed: c[3] = c[2] = c[1] = c[0];
0
1381 else if (i == 2
i == 2Description
TRUEnever evaluated
FALSEnever evaluated
) c[2] = c[0], c[3] = c[1];
never executed: c[2] = c[0], c[3] = c[1];
0
1382 else if (i == 3
i == 3Description
TRUEnever evaluated
FALSEnever evaluated
) c[3] = c[1];
never executed: c[3] = c[1];
0
1383}
never executed: end of block
0
1384-
1385bool Declaration::realValue(qreal *real, const char *unit) const-
1386{-
1387 if (d->values.count() != 1
d->values.count() != 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1388 return
never executed: return false;
false;
never executed: return false;
0
1389 const Value &v = d->values.at(0);-
1390 if (unit
unitDescription
TRUEnever evaluated
FALSEnever evaluated
&& v.type != Value::Length
v.type != Value::LengthDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1391 return
never executed: return false;
false;
never executed: return false;
0
1392 QString s = v.variant.toString();-
1393 if (unit
unitDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1394 if (!s.endsWith(QLatin1String(unit), Qt::CaseInsensitive)
!s.endsWith(QL...seInsensitive)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1395 return
never executed: return false;
false;
never executed: return false;
0
1396 s.chop(qstrlen(unit));-
1397 }
never executed: end of block
0
1398 bool ok = false;-
1399 qreal val = s.toDouble(&ok);-
1400 if (ok
okDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1401 *
never executed: *real = val;
real = val;
never executed: *real = val;
0
1402 return
never executed: return ok;
ok;
never executed: return ok;
0
1403}-
1404-
1405static bool intValueHelper(const QCss::Value &v, int *i, const char *unit)-
1406{-
1407 if (unit
unitDescription
TRUEnever evaluated
FALSEnever evaluated
&& v.type != Value::Length
v.type != Value::LengthDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1408 return
never executed: return false;
false;
never executed: return false;
0
1409 QString s = v.variant.toString();-
1410 if (unit
unitDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1411 if (!s.endsWith(QLatin1String(unit), Qt::CaseInsensitive)
!s.endsWith(QL...seInsensitive)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1412 return
never executed: return false;
false;
never executed: return false;
0
1413 s.chop(qstrlen(unit));-
1414 }
never executed: end of block
0
1415 bool ok = false;-
1416 int val = s.toInt(&ok);-
1417 if (ok
okDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1418 *
never executed: *i = val;
i = val;
never executed: *i = val;
0
1419 return
never executed: return ok;
ok;
never executed: return ok;
0
1420}-
1421-
1422bool Declaration::intValue(int *i, const char *unit) const-
1423{-
1424 if (d->values.count() != 1
d->values.count() != 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1425 return
never executed: return false;
false;
never executed: return false;
0
1426 return
never executed: return intValueHelper(d->values.at(0), i, unit);
intValueHelper(d->values.at(0), i, unit);
never executed: return intValueHelper(d->values.at(0), i, unit);
0
1427}-
1428-
1429QSize Declaration::sizeValue() const-
1430{-
1431 if (d->parsed.isValid()
d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1432 return
never executed: return qvariant_cast<QSize>(d->parsed);
qvariant_cast<QSize>(d->parsed);
never executed: return qvariant_cast<QSize>(d->parsed);
0
1433-
1434 int x[2] = { 0, 0 };-
1435 if (d->values.count() > 0
d->values.count() > 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1436 intValueHelper(d->values.at(0), &x[0], "px");
never executed: intValueHelper(d->values.at(0), &x[0], "px");
0
1437 if (d->values.count() > 1
d->values.count() > 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1438 intValueHelper(d->values.at(1), &x[1], "px");
never executed: intValueHelper(d->values.at(1), &x[1], "px");
0
1439 else-
1440 x[1] = x[0];
never executed: x[1] = x[0];
0
1441 QSize size(x[0], x[1]);-
1442 d->parsed = QVariant::fromValue<QSize>(size);-
1443 return
never executed: return size;
size;
never executed: return size;
0
1444}-
1445-
1446QRect Declaration::rectValue() const-
1447{-
1448 if (d->values.count() != 1
d->values.count() != 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1449 return
never executed: return QRect();
QRect();
never executed: return QRect();
0
1450-
1451 if (d->parsed.isValid()
d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1452 return
never executed: return qvariant_cast<QRect>(d->parsed);
qvariant_cast<QRect>(d->parsed);
never executed: return qvariant_cast<QRect>(d->parsed);
0
1453-
1454 const QCss::Value &v = d->values.at(0);-
1455 if (v.type != Value::Function
v.type != Value::FunctionDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1456 return
never executed: return QRect();
QRect();
never executed: return QRect();
0
1457 QStringList func = v.variant.toStringList();-
1458 if (func.count() != 2
func.count() != 2Description
TRUEnever evaluated
FALSEnever evaluated
|| func.at(0).compare(QLatin1String("rect")) != 0
func.at(0).com...("rect")) != 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1459 return
never executed: return QRect();
QRect();
never executed: return QRect();
0
1460 QStringList args = func[1].split(QLatin1Char(' '), QString::SkipEmptyParts);-
1461 if (args.count() != 4
args.count() != 4Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1462 return
never executed: return QRect();
QRect();
never executed: return QRect();
0
1463 QRect rect(args[0].toInt(), args[1].toInt(), args[2].toInt(), args[3].toInt());-
1464 d->parsed = QVariant::fromValue<QRect>(rect);-
1465 return
never executed: return rect;
rect;
never executed: return rect;
0
1466}-
1467-
1468void Declaration::colorValues(QColor *c, const QPalette &pal) const-
1469{-
1470 int i;-
1471 if (d->parsed.isValid()
d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1472 QList<QVariant> v = d->parsed.toList();-
1473 for (i = 0; i < qMin(d->values.count(), 4)
i < qMin(d->values.count(), 4)Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
1474 if (v.at(i).type() == QVariant::Color
v.at(i).type()...Variant::ColorDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1475 c[i] = qvariant_cast<QColor>(v.at(i));-
1476 }
never executed: end of block
else {
0
1477 c[i] = pal.color((QPalette::ColorRole)(v.at(i).toInt()));-
1478 }
never executed: end of block
0
1479 }-
1480 }
never executed: end of block
else {
0
1481 QList<QVariant> v;-
1482 for (i = 0; i < qMin(d->values.count(), 4)
i < qMin(d->values.count(), 4)Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
1483 ColorData color = parseColorValue(d->values.at(i));-
1484 if(color.type == ColorData::Role
color.type == ColorData::RoleDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1485 v += QVariant::fromValue<int>(color.role);-
1486 c[i] = pal.color((QPalette::ColorRole)(color.role));-
1487 }
never executed: end of block
else {
0
1488 v += QVariant::fromValue<QColor>(color.color);-
1489 c[i] = color.color;-
1490 }
never executed: end of block
0
1491 }-
1492 d->parsed = v;-
1493 }
never executed: end of block
0
1494-
1495 if (i == 0
i == 0Description
TRUEnever evaluated
FALSEnever evaluated
) c[0] = c[1] = c[2] = c[3] = QColor();
never executed: c[0] = c[1] = c[2] = c[3] = QColor();
0
1496 else if (i == 1
i == 1Description
TRUEnever evaluated
FALSEnever evaluated
) c[3] = c[2] = c[1] = c[0];
never executed: c[3] = c[2] = c[1] = c[0];
0
1497 else if (i == 2
i == 2Description
TRUEnever evaluated
FALSEnever evaluated
) c[2] = c[0], c[3] = c[1];
never executed: c[2] = c[0], c[3] = c[1];
0
1498 else if (i == 3
i == 3Description
TRUEnever evaluated
FALSEnever evaluated
) c[3] = c[1];
never executed: c[3] = c[1];
0
1499}
never executed: end of block
0
1500-
1501BorderStyle Declaration::styleValue() const-
1502{-
1503 if (d->values.count() != 1
d->values.count() != 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1504 return
never executed: return BorderStyle_None;
BorderStyle_None;
never executed: return BorderStyle_None;
0
1505 return
never executed: return parseStyleValue(d->values.at(0));
parseStyleValue(d->values.at(0));
never executed: return parseStyleValue(d->values.at(0));
0
1506}-
1507-
1508void Declaration::styleValues(BorderStyle *s) const-
1509{-
1510 int i;-
1511 for (i = 0; i < qMin(d->values.count(), 4)
i < qMin(d->values.count(), 4)Description
TRUEnever evaluated
FALSEnever evaluated
; i++)
0
1512 s[i] = parseStyleValue(d->values.at(i));
never executed: s[i] = parseStyleValue(d->values.at(i));
0
1513 if (i == 0
i == 0Description
TRUEnever evaluated
FALSEnever evaluated
) s[0] = s[1] = s[2] = s[3] = BorderStyle_None;
never executed: s[0] = s[1] = s[2] = s[3] = BorderStyle_None;
0
1514 else if (i == 1
i == 1Description
TRUEnever evaluated
FALSEnever evaluated
) s[3] = s[2] = s[1] = s[0];
never executed: s[3] = s[2] = s[1] = s[0];
0
1515 else if (i == 2
i == 2Description
TRUEnever evaluated
FALSEnever evaluated
) s[2] = s[0], s[3] = s[1];
never executed: s[2] = s[0], s[3] = s[1];
0
1516 else if (i == 3
i == 3Description
TRUEnever evaluated
FALSEnever evaluated
) s[3] = s[1];
never executed: s[3] = s[1];
0
1517}
never executed: end of block
0
1518-
1519Repeat Declaration::repeatValue() const-
1520{-
1521 if (d->parsed.isValid()
d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1522 return
never executed: return static_cast<Repeat>(d->parsed.toInt());
static_cast<Repeat>(d->parsed.toInt());
never executed: return static_cast<Repeat>(d->parsed.toInt());
0
1523 if (d->values.count() != 1
d->values.count() != 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1524 return
never executed: return Repeat_Unknown;
Repeat_Unknown;
never executed: return Repeat_Unknown;
0
1525 int v = findKnownValue(d->values.at(0).variant.toString(),-
1526 repeats, NumKnownRepeats);-
1527 d->parsed = v;-
1528 return
never executed: return static_cast<Repeat>(v);
static_cast<Repeat>(v);
never executed: return static_cast<Repeat>(v);
0
1529}-
1530-
1531Origin Declaration::originValue() const-
1532{-
1533 if (d->parsed.isValid()
d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1534 return
never executed: return static_cast<Origin>(d->parsed.toInt());
static_cast<Origin>(d->parsed.toInt());
never executed: return static_cast<Origin>(d->parsed.toInt());
0
1535 if (d->values.count() != 1
d->values.count() != 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1536 return
never executed: return Origin_Unknown;
Origin_Unknown;
never executed: return Origin_Unknown;
0
1537 int v = findKnownValue(d->values.at(0).variant.toString(),-
1538 origins, NumKnownOrigins);-
1539 d->parsed = v;-
1540 return
never executed: return static_cast<Origin>(v);
static_cast<Origin>(v);
never executed: return static_cast<Origin>(v);
0
1541}-
1542-
1543PositionMode Declaration::positionValue() const-
1544{-
1545 if (d->parsed.isValid()
d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1546 return
never executed: return static_cast<PositionMode>(d->parsed.toInt());
static_cast<PositionMode>(d->parsed.toInt());
never executed: return static_cast<PositionMode>(d->parsed.toInt());
0
1547 if (d->values.count() != 1
d->values.count() != 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1548 return
never executed: return PositionMode_Unknown;
PositionMode_Unknown;
never executed: return PositionMode_Unknown;
0
1549 int v = findKnownValue(d->values.at(0).variant.toString(),-
1550 positions, NumKnownPositionModes);-
1551 d->parsed = v;-
1552 return
never executed: return static_cast<PositionMode>(v);
static_cast<PositionMode>(v);
never executed: return static_cast<PositionMode>(v);
0
1553}-
1554-
1555Attachment Declaration::attachmentValue() const-
1556{-
1557 if (d->parsed.isValid()
d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1558 return
never executed: return static_cast<Attachment>(d->parsed.toInt());
static_cast<Attachment>(d->parsed.toInt());
never executed: return static_cast<Attachment>(d->parsed.toInt());
0
1559 if (d->values.count() != 1
d->values.count() != 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1560 return
never executed: return Attachment_Unknown;
Attachment_Unknown;
never executed: return Attachment_Unknown;
0
1561 int v = findKnownValue(d->values.at(0).variant.toString(),-
1562 attachments, NumKnownAttachments);-
1563 d->parsed = v;-
1564 return
never executed: return static_cast<Attachment>(v);
static_cast<Attachment>(v);
never executed: return static_cast<Attachment>(v);
0
1565}-
1566-
1567int Declaration::styleFeaturesValue() const-
1568{-
1569 ((!(d->propertyId == QtStyleFeatures)) ? qt_assert("d->propertyId == QtStyleFeatures",__FILE__,1620) : qt_noop());-
1570 if (d->parsed.isValid()
d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1571 return
never executed: return d->parsed.toInt();
d->parsed.toInt();
never executed: return d->parsed.toInt();
0
1572 int features = StyleFeature_None;-
1573 for (int i = 0; i < d->values.count()
i < d->values.count()Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
1574 features |= static_cast<int>(findKnownValue(d->values.value(i).variant.toString(),-
1575 styleFeatures, NumKnownStyleFeatures));-
1576 }
never executed: end of block
0
1577 d->parsed = features;-
1578 return
never executed: return features;
features;
never executed: return features;
0
1579}-
1580-
1581QString Declaration::uriValue() const-
1582{-
1583 if (d->values.isEmpty()
d->values.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
|| d->values.at(0).type != Value::Uri
d->values.at(0... != Value::UriDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1584 return
never executed: return QString();
QString();
never executed: return QString();
0
1585 return
never executed: return d->values.at(0).variant.toString();
d->values.at(0).variant.toString();
never executed: return d->values.at(0).variant.toString();
0
1586}-
1587-
1588Qt::Alignment Declaration::alignmentValue() const-
1589{-
1590 if (d->parsed.isValid()
d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1591 return
never executed: return Qt::Alignment(d->parsed.toInt());
Qt::Alignment(d->parsed.toInt());
never executed: return Qt::Alignment(d->parsed.toInt());
0
1592 if (d->values.isEmpty()
d->values.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
|| d->values.count() > 2
d->values.count() > 2Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1593 return
never executed: return Qt::AlignLeft | Qt::AlignTop;
Qt::AlignLeft | Qt::AlignTop;
never executed: return Qt::AlignLeft | Qt::AlignTop;
0
1594-
1595 Qt::Alignment v = parseAlignment(d->values.constData(), d->values.count());-
1596 d->parsed = int(v);-
1597 return
never executed: return v;
v;
never executed: return v;
0
1598}-
1599-
1600void Declaration::borderImageValue(QString *image, int *cuts,-
1601 TileMode *h, TileMode *v) const-
1602{-
1603 *image = uriValue();-
1604 for (int i = 0; i < 4
i < 4Description
TRUEnever evaluated
FALSEnever evaluated
; i++)
0
1605 cuts[i] = -1;
never executed: cuts[i] = -1;
0
1606 *h = *v = TileMode_Stretch;-
1607-
1608 if (d->values.count() < 2
d->values.count() < 2Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1609 return;
never executed: return;
0
1610-
1611 if (d->values.at(1).type == Value::Number
d->values.at(1... Value::NumberDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1612 int i;-
1613 for (i = 0; i < qMin(d->values.count()-1, 4)
i < qMin(d->va....count()-1, 4)Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
1614 const Value& v = d->values.at(i+1);-
1615 if (v.type != Value::Number
v.type != Value::NumberDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1616 break;
never executed: break;
0
1617 cuts[i] = v.variant.toString().toInt();-
1618 }
never executed: end of block
0
1619 if (i == 0
i == 0Description
TRUEnever evaluated
FALSEnever evaluated
) cuts[0] = cuts[1] = cuts[2] = cuts[3] = 0;
never executed: cuts[0] = cuts[1] = cuts[2] = cuts[3] = 0;
0
1620 else if (i == 1
i == 1Description
TRUEnever evaluated
FALSEnever evaluated
) cuts[3] = cuts[2] = cuts[1] = cuts[0];
never executed: cuts[3] = cuts[2] = cuts[1] = cuts[0];
0
1621 else if (i == 2
i == 2Description
TRUEnever evaluated
FALSEnever evaluated
) cuts[2] = cuts[0], cuts[3] = cuts[1];
never executed: cuts[2] = cuts[0], cuts[3] = cuts[1];
0
1622 else if (i == 3
i == 3Description
TRUEnever evaluated
FALSEnever evaluated
) cuts[3] = cuts[1];
never executed: cuts[3] = cuts[1];
0
1623 }
never executed: end of block
0
1624-
1625 if (d->values.last().type == Value::Identifier
d->values.last...ue::IdentifierDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1626 *v = static_cast<TileMode>(findKnownValue(d->values.last().variant.toString(),-
1627 tileModes, NumKnownTileModes));-
1628 }
never executed: end of block
0
1629 if (d->values[d->values.count() - 2].type == Value::Identifier
d->values[d->v...ue::IdentifierDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1630 *h = static_cast<TileMode>-
1631 (findKnownValue(d->values[d->values.count()-2].variant.toString(),-
1632 tileModes, NumKnownTileModes));-
1633 }
never executed: end of block
else
0
1634 *
never executed: *h = *v;
h = *v;
never executed: *h = *v;
0
1635}-
1636-
1637QIcon Declaration::iconValue() const-
1638{-
1639 if (d->parsed.isValid()
d->parsed.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1640 return
never executed: return qvariant_cast<QIcon>(d->parsed);
qvariant_cast<QIcon>(d->parsed);
never executed: return qvariant_cast<QIcon>(d->parsed);
0
1641-
1642 QIcon icon;-
1643 for (int i = 0; i < d->values.count()
i < d->values.count()Description
TRUEnever evaluated
FALSEnever evaluated
;) {
0
1644 const Value &value = d->values.at(i++);-
1645 if (value.type != Value::Uri
value.type != Value::UriDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1646 break;
never executed: break;
0
1647 QString uri = value.variant.toString();-
1648 QIcon::Mode mode = QIcon::Normal;-
1649 QIcon::State state = QIcon::Off;-
1650 for (int j = 0; j < 2
j < 2Description
TRUEnever evaluated
FALSEnever evaluated
; j++) {
0
1651 if (i != d->values.count()
i != d->values.count()Description
TRUEnever evaluated
FALSEnever evaluated
&& d->values.at(i).type == Value::KnownIdentifier
d->values.at(i...nownIdentifierDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1652 switch (d->values.at(i).variant.toInt()) {-
1653 case
never executed: case Value_Disabled:
Value_Disabled:
never executed: case Value_Disabled:
mode = QIcon::Disabled; break;
never executed: break;
0
1654 case
never executed: case Value_Active:
Value_Active:
never executed: case Value_Active:
mode = QIcon::Active; break;
never executed: break;
0
1655 case
never executed: case Value_Selected:
Value_Selected:
never executed: case Value_Selected:
mode = QIcon::Selected; break;
never executed: break;
0
1656 case
never executed: case Value_Normal:
Value_Normal:
never executed: case Value_Normal:
mode = QIcon::Normal; break;
never executed: break;
0
1657 case
never executed: case Value_On:
Value_On:
never executed: case Value_On:
state = QIcon::On; break;
never executed: break;
0
1658 case
never executed: case Value_Off:
Value_Off:
never executed: case Value_Off:
state = QIcon::Off; break;
never executed: break;
0
1659 default
never executed: default:
:
never executed: default:
break;
never executed: break;
0
1660 }-
1661 ++i;-
1662 }
never executed: end of block
else {
0
1663 break;
never executed: break;
0
1664 }-
1665 }-
1666-
1667-
1668 if (icon.isNull()
icon.isNull()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1669 icon = QIcon(uri);
never executed: icon = QIcon(uri);
0
1670 else-
1671 icon.addPixmap(uri, mode, state);
never executed: icon.addPixmap(uri, mode, state);
0
1672-
1673 if (i == d->values.count()
i == d->values.count()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1674 break;
never executed: break;
0
1675-
1676 if (d->values.at(i).type == Value::TermOperatorComma
d->values.at(i...mOperatorCommaDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1677 i++;
never executed: i++;
0
1678 }
never executed: end of block
0
1679-
1680 d->parsed = QVariant::fromValue<QIcon>(icon);-
1681 return
never executed: return icon;
icon;
never executed: return icon;
0
1682}-
1683-
1684-
1685-
1686int Selector::specificity() const-
1687{-
1688 int val = 0;-
1689 for (int i = 0; i < basicSelectors.count()
i < basicSelectors.count()Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
1690 const BasicSelector &sel = basicSelectors.at(i);-
1691 if (!sel.elementName.isEmpty()
!sel.elementName.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1692 val += 1;
never executed: val += 1;
0
1693-
1694 val += (sel.pseudos.count() + sel.attributeSelectors.count()) * 0x10;-
1695 val += sel.ids.count() * 0x100;-
1696 }
never executed: end of block
0
1697 return
never executed: return val;
val;
never executed: return val;
0
1698}-
1699-
1700QString Selector::pseudoElement() const-
1701{-
1702 const BasicSelector& bs = basicSelectors.last();-
1703 if (!bs.pseudos.isEmpty()
!bs.pseudos.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
&& bs.pseudos.at(0).type == PseudoClass_Unknown
bs.pseudos.at(...oClass_UnknownDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1704 return
never executed: return bs.pseudos.at(0).name;
bs.pseudos.at(0).name;
never executed: return bs.pseudos.at(0).name;
0
1705 return
never executed: return QString();
QString();
never executed: return QString();
0
1706}-
1707-
1708quint64 Selector::pseudoClass(quint64 *negated) const-
1709{-
1710 const BasicSelector& bs = basicSelectors.last();-
1711 if (bs.pseudos.isEmpty()
bs.pseudos.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1712 return
never executed: return PseudoClass_Unspecified;
PseudoClass_Unspecified;
never executed: return PseudoClass_Unspecified;
0
1713 quint64 pc = PseudoClass_Unknown;-
1714 for (int i = !pseudoElement().isEmpty(); i < bs.pseudos.count()
i < bs.pseudos.count()Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
1715 const Pseudo &pseudo = bs.pseudos.at(i);-
1716 if (pseudo.type == PseudoClass_Unknown
pseudo.type ==...oClass_UnknownDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1717 return
never executed: return PseudoClass_Unknown;
PseudoClass_Unknown;
never executed: return PseudoClass_Unknown;
0
1718 if (!pseudo.negated
!pseudo.negatedDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1719 pc |= pseudo.type;
never executed: pc |= pseudo.type;
0
1720 else if (negated
negatedDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1721 *
never executed: *negated |= pseudo.type;
negated |= pseudo.type;
never executed: *negated |= pseudo.type;
0
1722 }
never executed: end of block
0
1723 return
never executed: return pc;
pc;
never executed: return pc;
0
1724}-
1725-
1726-
1727-
1728void StyleSheet::buildIndexes(Qt::CaseSensitivity nameCaseSensitivity)-
1729{-
1730 QVector<StyleRule> universals;-
1731 for (int i = 0; i < styleRules.count()
i < styleRules.count()Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
1732 const StyleRule &rule = styleRules.at(i);-
1733 QVector<Selector> universalsSelectors;-
1734 for (int j = 0; j < rule.selectors.count()
j < rule.selectors.count()Description
TRUEnever evaluated
FALSEnever evaluated
; ++j) {
0
1735 const Selector& selector = rule.selectors.at(j);-
1736-
1737 if (selector.basicSelectors.isEmpty()
selector.basic...tors.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1738 continue;
never executed: continue;
0
1739-
1740 if (selector.basicSelectors.at(0).relationToNext == BasicSelector::NoRelation
selector.basic...or::NoRelationDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1741 if (selector.basicSelectors.count() != 1
selector.basic...s.count() != 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1742 continue;
never executed: continue;
0
1743 }
never executed: end of block
else if (selector.basicSelectors.count() <= 1
selector.basic...s.count() <= 1Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1744 continue;
never executed: continue;
0
1745 }-
1746-
1747 const BasicSelector &sel = selector.basicSelectors.at(selector.basicSelectors.count() - 1);-
1748-
1749 if (!sel.ids.isEmpty()
!sel.ids.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1750 StyleRule nr;-
1751 nr.selectors += selector;-
1752 nr.declarations = rule.declarations;-
1753 nr.order = i;-
1754 idIndex.insert(sel.ids.at(0), nr);-
1755 }
never executed: end of block
else if (!sel.elementName.isEmpty()
!sel.elementName.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1756 StyleRule nr;-
1757 nr.selectors += selector;-
1758 nr.declarations = rule.declarations;-
1759 nr.order = i;-
1760 QString name = sel.elementName;-
1761 if (nameCaseSensitivity == Qt::CaseInsensitive
nameCaseSensit...aseInsensitiveDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1762 name=name.toLower();
never executed: name=name.toLower();
0
1763 nameIndex.insert(name, nr);-
1764 }
never executed: end of block
else {
0
1765 universalsSelectors += selector;-
1766 }
never executed: end of block
0
1767 }-
1768 if (!universalsSelectors.isEmpty()
!universalsSelectors.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1769 StyleRule nr;-
1770 nr.selectors = universalsSelectors;-
1771 nr.declarations = rule.declarations;-
1772 nr.order = i;-
1773 universals << nr;-
1774 }
never executed: end of block
0
1775 }
never executed: end of block
0
1776 styleRules = universals;-
1777}
never executed: end of block
0
1778-
1779-
1780-
1781StyleSelector::~StyleSelector()-
1782{-
1783}-
1784-
1785bool StyleSelector::nodeNameEquals(NodePtr node, const QString& nodeName) const-
1786{-
1787 return
never executed: return nodeNames(node).contains(nodeName, nameCaseSensitivity);
nodeNames(node).contains(nodeName, nameCaseSensitivity);
never executed: return nodeNames(node).contains(nodeName, nameCaseSensitivity);
0
1788}-
1789-
1790QStringList StyleSelector::nodeIds(NodePtr node) const-
1791{-
1792 return
never executed: return QStringList(attribute(node, QLatin1String("id")));
QStringList(attribute(node, QLatin1String("id")));
never executed: return QStringList(attribute(node, QLatin1String("id")));
0
1793}-
1794-
1795bool StyleSelector::selectorMatches(const Selector &selector, NodePtr node)-
1796{-
1797 if (selector.basicSelectors.isEmpty()
selector.basic...tors.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1798 return
never executed: return false;
false;
never executed: return false;
0
1799-
1800 if (selector.basicSelectors.at(0).relationToNext == BasicSelector::NoRelation
selector.basic...or::NoRelationDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1801 if (selector.basicSelectors.count() != 1
selector.basic...s.count() != 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1802 return
never executed: return false;
false;
never executed: return false;
0
1803 return
never executed: return basicSelectorMatches(selector.basicSelectors.at(0), node);
basicSelectorMatches(selector.basicSelectors.at(0), node);
never executed: return basicSelectorMatches(selector.basicSelectors.at(0), node);
0
1804 }-
1805 if (selector.basicSelectors.count() <= 1
selector.basic...s.count() <= 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1806 return
never executed: return false;
false;
never executed: return false;
0
1807-
1808 int i = selector.basicSelectors.count() - 1;-
1809 node = duplicateNode(node);-
1810 bool match = true;-
1811-
1812 BasicSelector sel = selector.basicSelectors.at(i);-
1813 do {-
1814 match = basicSelectorMatches(sel, node);-
1815 if (!match
!matchDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1816 if (sel.relationToNext == BasicSelector::MatchNextSelectorIfParent
sel.relationTo...lectorIfParentDescription
TRUEnever evaluated
FALSEnever evaluated
0
1817 || i == selector.basicSelectors.count() - 1
i == selector....rs.count() - 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1818 break;
never executed: break;
0
1819 }
never executed: end of block
0
1820-
1821 if (match
matchDescription
TRUEnever evaluated
FALSEnever evaluated
|| sel.relationToNext != BasicSelector::MatchNextSelectorIfAncestor
sel.relationTo...ctorIfAncestorDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1822 --
never executed: --i;
i;
never executed: --i;
0
1823-
1824 if (i < 0
i < 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1825 break;
never executed: break;
0
1826-
1827 sel = selector.basicSelectors.at(i);-
1828 if (sel.relationToNext == BasicSelector::MatchNextSelectorIfAncestor
sel.relationTo...ctorIfAncestorDescription
TRUEnever evaluated
FALSEnever evaluated
0
1829 || sel.relationToNext == BasicSelector::MatchNextSelectorIfParent
sel.relationTo...lectorIfParentDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1830-
1831 NodePtr nextParent = parentNode(node);-
1832 freeNode(node);-
1833 node = nextParent;-
1834 }
never executed: end of block
else if (sel.relationToNext == BasicSelector::MatchNextSelectorIfPreceeds
sel.relationTo...ctorIfPreceedsDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1835 NodePtr previousSibling = previousSiblingNode(node);-
1836 freeNode(node);-
1837 node = previousSibling;-
1838 }
never executed: end of block
0
1839 if (isNullNode(node)
isNullNode(node)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1840 match = false;-
1841 break;
never executed: break;
0
1842 }-
1843 }
never executed: end of block
while (i >= 0
i >= 0Description
TRUEnever evaluated
FALSEnever evaluated
&& (match
matchDescription
TRUEnever evaluated
FALSEnever evaluated
|| sel.relationToNext == BasicSelector::MatchNextSelectorIfAncestor
sel.relationTo...ctorIfAncestorDescription
TRUEnever evaluated
FALSEnever evaluated
));
0
1844-
1845 freeNode(node);-
1846-
1847 return
never executed: return match;
match;
never executed: return match;
0
1848}-
1849-
1850bool StyleSelector::basicSelectorMatches(const BasicSelector &sel, NodePtr node)-
1851{-
1852 if (!sel.attributeSelectors.isEmpty()
!sel.attribute...tors.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1853 if (!hasAttributes(node)
!hasAttributes(node)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1854 return
never executed: return false;
false;
never executed: return false;
0
1855-
1856 for (int i = 0; i < sel.attributeSelectors.count()
i < sel.attrib...ectors.count()Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
1857 const QCss::AttributeSelector &a = sel.attributeSelectors.at(i);-
1858-
1859 const QString attrValue = attribute(node, a.name);-
1860 if (attrValue.isNull()
attrValue.isNull()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1861 return
never executed: return false;
false;
never executed: return false;
0
1862-
1863 if (a.valueMatchCriterium == QCss::AttributeSelector::MatchContains
a.valueMatchCr...:MatchContainsDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1864-
1865 QStringList lst = attrValue.split(QLatin1Char(' '));-
1866 if (!lst.contains(a.value)
!lst.contains(a.value)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1867 return
never executed: return false;
false;
never executed: return false;
0
1868 }
never executed: end of block
else if (
0
1869 (a.valueMatchCriterium == QCss::AttributeSelector::MatchEqual
a.valueMatchCr...or::MatchEqualDescription
TRUEnever evaluated
FALSEnever evaluated
0
1870 && attrValue != a.value
attrValue != a.valueDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1871 ||-
1872 (a.valueMatchCriterium == QCss::AttributeSelector::MatchBeginsWith
a.valueMatchCr...atchBeginsWithDescription
TRUEnever evaluated
FALSEnever evaluated
0
1873 && !attrValue.startsWith(a.value)
!attrValue.startsWith(a.value)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1874 )-
1875 return
never executed: return false;
false;
never executed: return false;
0
1876 }
never executed: end of block
0
1877 }
never executed: end of block
0
1878-
1879 if (!sel.elementName.isEmpty()
!sel.elementName.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
1880 && !nodeNameEquals(node, sel.elementName)
!nodeNameEqual...l.elementName)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1881 return
never executed: return false;
false;
never executed: return false;
0
1882-
1883 if (!sel.ids.isEmpty()
!sel.ids.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
1884 && sel.ids != nodeIds(node)
sel.ids != nodeIds(node)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1885 return
never executed: return false;
false;
never executed: return false;
0
1886-
1887 return
never executed: return true;
true;
never executed: return true;
0
1888}-
1889-
1890void StyleSelector::matchRule(NodePtr node, const StyleRule &rule, StyleSheetOrigin origin,-
1891 int depth, QMap<uint, StyleRule> *weightedRules)-
1892{-
1893 for (int j = 0; j < rule.selectors.count()
j < rule.selectors.count()Description
TRUEnever evaluated
FALSEnever evaluated
; ++j) {
0
1894 const Selector& selector = rule.selectors.at(j);-
1895 if (selectorMatches(selector, node)
selectorMatche...elector, node)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1896 uint weight = rule.order-
1897 + selector.specificity() *0x100-
1898 + (uint(origin) + depth)*0x100000;-
1899 StyleRule newRule = rule;-
1900 if(rule.selectors.count() > 1
rule.selectors.count() > 1Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1901 newRule.selectors.resize(1);-
1902 newRule.selectors[0] = selector;-
1903 }
never executed: end of block
0
1904-
1905 weightedRules->insertMulti(weight, newRule);-
1906 }
never executed: end of block
0
1907 }
never executed: end of block
0
1908}
never executed: end of block
0
1909-
1910-
1911-
1912QVector<StyleRule> StyleSelector::styleRulesForNode(NodePtr node)-
1913{-
1914 QVector<StyleRule> rules;-
1915 if (styleSheets.isEmpty()
styleSheets.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1916 return
never executed: return rules;
rules;
never executed: return rules;
0
1917-
1918 QMap<uint, StyleRule> weightedRules;-
1919-
1920-
1921 for (int sheetIdx = 0; sheetIdx < styleSheets.count()
sheetIdx < styleSheets.count()Description
TRUEnever evaluated
FALSEnever evaluated
; ++sheetIdx) {
0
1922 const StyleSheet &styleSheet = styleSheets.at(sheetIdx);-
1923 for (int i = 0; i < styleSheet.styleRules.count()
i < styleSheet...eRules.count()Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
1924 matchRule(node, styleSheet.styleRules.at(i), styleSheet.origin, styleSheet.depth, &weightedRules);-
1925 }
never executed: end of block
0
1926-
1927 if (!styleSheet.idIndex.isEmpty()
!styleSheet.idIndex.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1928 QStringList ids = nodeIds(node);-
1929 for (int i = 0; i < ids.count()
i < ids.count()Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
1930 const QString &key = ids.at(i);-
1931 QMultiHash<QString, StyleRule>::const_iterator it = styleSheet.idIndex.constFind(key);-
1932 while (it != styleSheet.idIndex.constEnd()
it != styleShe...dex.constEnd()Description
TRUEnever evaluated
FALSEnever evaluated
&& it.key() == key
it.key() == keyDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1933 matchRule(node, it.value(), styleSheet.origin, styleSheet.depth, &weightedRules);-
1934 ++it;-
1935 }
never executed: end of block
0
1936 }
never executed: end of block
0
1937 }
never executed: end of block
0
1938 if (!styleSheet.nameIndex.isEmpty()
!styleSheet.na...ndex.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1939 QStringList names = nodeNames(node);-
1940 for (int i = 0; i < names.count()
i < names.count()Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
1941 QString name = names.at(i);-
1942 if (nameCaseSensitivity == Qt::CaseInsensitive
nameCaseSensit...aseInsensitiveDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1943 name = name.toLower();
never executed: name = name.toLower();
0
1944 QMultiHash<QString, StyleRule>::const_iterator it = styleSheet.nameIndex.constFind(name);-
1945 while (it != styleSheet.nameIndex.constEnd()
it != styleShe...dex.constEnd()Description
TRUEnever evaluated
FALSEnever evaluated
&& it.key() == name
it.key() == nameDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1946 matchRule(node, it.value(), styleSheet.origin, styleSheet.depth, &weightedRules);-
1947 ++it;-
1948 }
never executed: end of block
0
1949 }
never executed: end of block
0
1950 }
never executed: end of block
0
1951 if (!medium.isEmpty()
!medium.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1952 for (int i = 0; i < styleSheet.mediaRules.count()
i < styleSheet...aRules.count()Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
1953 if (styleSheet.mediaRules.at(i).media.contains(medium, Qt::CaseInsensitive)
styleSheet.med...seInsensitive)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1954 for (int j = 0; j < styleSheet.mediaRules.at(i).styleRules.count()
j < styleSheet...eRules.count()Description
TRUEnever evaluated
FALSEnever evaluated
; ++j) {
0
1955 matchRule(node, styleSheet.mediaRules.at(i).styleRules.at(j), styleSheet.origin,-
1956 styleSheet.depth, &weightedRules);-
1957 }
never executed: end of block
0
1958 }
never executed: end of block
0
1959 }
never executed: end of block
0
1960 }
never executed: end of block
0
1961 }
never executed: end of block
0
1962-
1963 rules.reserve(weightedRules.count());-
1964 QMap<uint, StyleRule>::const_iterator it = weightedRules.constBegin();-
1965 for ( ; it != weightedRules.constEnd()
it != weightedRules.constEnd()Description
TRUEnever evaluated
FALSEnever evaluated
; ++it)
0
1966 rules += *it;
never executed: rules += *it;
0
1967-
1968 return
never executed: return rules;
rules;
never executed: return rules;
0
1969}-
1970-
1971-
1972-
1973QVector<Declaration> StyleSelector::declarationsForNode(NodePtr node, const char *extraPseudo)-
1974{-
1975 QVector<Declaration> decls;-
1976 QVector<StyleRule> rules = styleRulesForNode(node);-
1977 for (int i = 0; i < rules.count()
i < rules.count()Description
TRUEnever evaluated
FALSEnever evaluated
; i++) {
0
1978 const Selector& selector = rules.at(i).selectors.at(0);-
1979 const QString pseudoElement = selector.pseudoElement();-
1980-
1981 if (extraPseudo
extraPseudoDescription
TRUEnever evaluated
FALSEnever evaluated
&& pseudoElement == QLatin1String(extraPseudo)
pseudoElement ...g(extraPseudo)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1982 decls += rules.at(i).declarations;-
1983 continue;
never executed: continue;
0
1984 }-
1985-
1986 if (!pseudoElement.isEmpty()
!pseudoElement.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1987 continue;
never executed: continue;
0
1988 quint64 pseudoClass = selector.pseudoClass();-
1989 if (pseudoClass == PseudoClass_Enabled
pseudoClass ==...oClass_EnabledDescription
TRUEnever evaluated
FALSEnever evaluated
|| pseudoClass == PseudoClass_Unspecified
pseudoClass ==...ss_UnspecifiedDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1990 decls += rules.at(i).declarations;
never executed: decls += rules.at(i).declarations;
0
1991 }
never executed: end of block
0
1992 return
never executed: return decls;
decls;
never executed: return decls;
0
1993}-
1994-
1995static inline bool isHexDigit(const char c)-
1996{-
1997 return
never executed: return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') ;
(c >= '0'
c >= '0'Description
TRUEnever evaluated
FALSEnever evaluated
&& c <= '9'
c <= '9'Description
TRUEnever evaluated
FALSEnever evaluated
)
never executed: return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') ;
0
1998 || (c >= 'a'
c >= 'a'Description
TRUEnever evaluated
FALSEnever evaluated
&& c <= 'f'
c <= 'f'Description
TRUEnever evaluated
FALSEnever evaluated
)
never executed: return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') ;
0
1999 || (c >= 'A'
c >= 'A'Description
TRUEnever evaluated
FALSEnever evaluated
&& c <= 'F'
c <= 'F'Description
TRUEnever evaluated
FALSEnever evaluated
)
never executed: return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') ;
0
2000 ;
never executed: return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') ;
0
2001}-
2002-
2003QString Scanner::preprocess(const QString &input, bool *hasEscapeSequences)-
2004{-
2005 QString output = input;-
2006-
2007 if (hasEscapeSequences
hasEscapeSequencesDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
2008 *
never executed: *hasEscapeSequences = false;
hasEscapeSequences = false;
never executed: *hasEscapeSequences = false;
0
2009-
2010 int i = 0;-
2011 while (i < output.size()
i < output.size()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2012 if (output.at(i) == QLatin1Char('\\')
output.at(i) =...tin1Char('\\')Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2013-
2014 ++i;-
2015-
2016 int hexCount = 0;-
2017 const int hexStart = i;-
2018 while (i < output.size()
i < output.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
2019 && isHexDigit(output.at(i).toLatin1())
isHexDigit(out...i).toLatin1())Description
TRUEnever evaluated
FALSEnever evaluated
0
2020 && hexCount < 7
hexCount < 7Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2021 ++hexCount;-
2022 ++i;-
2023 }
never executed: end of block
0
2024 if (hexCount == 0
hexCount == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2025 if (hasEscapeSequences
hasEscapeSequencesDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
2026 *
never executed: *hasEscapeSequences = true;
hasEscapeSequences = true;
never executed: *hasEscapeSequences = true;
0
2027 continue;
never executed: continue;
0
2028 }-
2029-
2030 hexCount = qMin(hexCount, 6);-
2031 bool ok = false;-
2032 ushort code = output.mid(hexStart, hexCount).toUShort(&ok, 16);-
2033 if (ok
okDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
2034 output.replace(hexStart - 1, hexCount + 1, QChar(code));-
2035 i = hexStart;-
2036 }
never executed: end of block
else {
0
2037 i = hexStart;-
2038 }
never executed: end of block
0
2039 } else {-
2040 ++i;-
2041 }
never executed: end of block
0
2042 }-
2043 return
never executed: return output;
output;
never executed: return output;
0
2044}-
2045-
2046int QCssScanner_Generated::handleCommentStart()-
2047{-
2048 while (pos < input.size() - 1
pos < input.size() - 1Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2049 if (input.at(pos) == QLatin1Char('*')
input.at(pos) ...atin1Char('*')Description
TRUEnever evaluated
FALSEnever evaluated
0
2050 && input.at(pos + 1) == QLatin1Char('/')
input.at(pos +...atin1Char('/')Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2051 pos += 2;-
2052 break;
never executed: break;
0
2053 }-
2054 ++pos;-
2055 }
never executed: end of block
0
2056 return
never executed: return S;
S;
never executed: return S;
0
2057}-
2058-
2059void Scanner::scan(const QString &preprocessedInput, QVector<Symbol> *symbols)-
2060{-
2061 QCssScanner_Generated scanner(preprocessedInput);-
2062 Symbol sym;-
2063 int tok = scanner.lex();-
2064 while (tok != -1
tok != -1Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2065 sym.token = static_cast<QCss::TokenType>(tok);-
2066 sym.text = scanner.input;-
2067 sym.start = scanner.lexemStart;-
2068 sym.len = scanner.lexemLength;-
2069 symbols->append(sym);-
2070 tok = scanner.lex();-
2071 }
never executed: end of block
0
2072}
never executed: end of block
0
2073-
2074QString Symbol::lexem() const-
2075{-
2076 QString result;-
2077 if (len > 0
len > 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
2078 result.reserve(len);
never executed: result.reserve(len);
0
2079 for (int i = 0; i < len
i < lenDescription
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
2080 if (text.at(start + i) == QLatin1Char('\\')
text.at(start ...tin1Char('\\')Description
TRUEnever evaluated
FALSEnever evaluated
&& i < len - 1
i < len - 1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
2081 ++
never executed: ++i;
i;
never executed: ++i;
0
2082 result += text.at(start + i);-
2083 }
never executed: end of block
0
2084 return
never executed: return result;
result;
never executed: return result;
0
2085}-
2086-
2087Parser::Parser(const QString &css, bool isFile)-
2088{-
2089 init(css, isFile);-
2090}
never executed: end of block
0
2091-
2092Parser::Parser()-
2093{-
2094 index = 0;-
2095 errorIndex = -1;-
2096 hasEscapeSequences = false;-
2097}
never executed: end of block
0
2098-
2099void Parser::init(const QString &css, bool isFile)-
2100{-
2101 QString styleSheet = css;-
2102 if (isFile
isFileDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
2103 QFile file(css);-
2104 if (file.open(QFile::ReadOnly)
file.open(QFile::ReadOnly)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2105 sourcePath = QFileInfo(styleSheet).absolutePath() + QLatin1Char('/');-
2106 QTextStream stream(&file);-
2107 styleSheet = stream.readAll();-
2108 }
never executed: end of block
else {
0
2109 QMessageLogger(__FILE__, 2160, __PRETTY_FUNCTION__).warning() << "QCss::Parser - Failed to load file " << css;-
2110 styleSheet.clear();-
2111 }
never executed: end of block
0
2112 } else {-
2113 sourcePath.clear();-
2114 }
never executed: end of block
0
2115-
2116 hasEscapeSequences = false;-
2117 symbols.resize(0);-
2118 symbols.reserve(8);-
2119 Scanner::scan(Scanner::preprocess(styleSheet, &hasEscapeSequences), &symbols);-
2120 index = 0;-
2121 errorIndex = -1;-
2122}
never executed: end of block
0
2123-
2124bool Parser::parse(StyleSheet *styleSheet, Qt::CaseSensitivity nameCaseSensitivity)-
2125{-
2126 if (testTokenAndEndsWith(ATKEYWORD_SYM, QLatin1String("charset"))
testTokenAndEn...ng("charset"))Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2127 while (test(S)
test(S)Description
TRUEnever evaluated
FALSEnever evaluated
|| test(CDO)
test(CDO)Description
TRUEnever evaluated
FALSEnever evaluated
|| test(CDC)
test(CDC)Description
TRUEnever evaluated
FALSEnever evaluated
) {}
never executed: end of block
0
2128 if (!next(STRING)
!next(STRING)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2129 if (!next(SEMICOLON)
!next(SEMICOLON)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2130 }
never executed: end of block
0
2131-
2132 while (test(S)
test(S)Description
TRUEnever evaluated
FALSEnever evaluated
|| test(CDO)
test(CDO)Description
TRUEnever evaluated
FALSEnever evaluated
|| test(CDC)
test(CDC)Description
TRUEnever evaluated
FALSEnever evaluated
) {}
never executed: end of block
0
2133-
2134 while (testImport()
testImport()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2135 ImportRule rule;-
2136 if (!parseImport(&rule)
!parseImport(&rule)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2137 styleSheet->importRules.append(rule);-
2138 while (test(S)
test(S)Description
TRUEnever evaluated
FALSEnever evaluated
|| test(CDO)
test(CDO)Description
TRUEnever evaluated
FALSEnever evaluated
|| test(CDC)
test(CDC)Description
TRUEnever evaluated
FALSEnever evaluated
) {}
never executed: end of block
0
2139 }
never executed: end of block
0
2140-
2141 do {-
2142 if (testMedia()
testMedia()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2143 MediaRule rule;-
2144 if (!parseMedia(&rule)
!parseMedia(&rule)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2145 styleSheet->mediaRules.append(rule);-
2146 }
never executed: end of block
else if (testPage()
testPage()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2147 PageRule rule;-
2148 if (!parsePage(&rule)
!parsePage(&rule)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2149 styleSheet->pageRules.append(rule);-
2150 }
never executed: end of block
else if (testRuleset()
testRuleset()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2151 StyleRule rule;-
2152 if (!parseRuleset(&rule)
!parseRuleset(&rule)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2153 styleSheet->styleRules.append(rule);-
2154 }
never executed: end of block
else if (test(ATKEYWORD_SYM)
test(ATKEYWORD_SYM)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2155 if (!until(RBRACE)
!until(RBRACE)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2156 }
never executed: end of block
else if (hasNext()
hasNext()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2157 return
never executed: return false;
false;
never executed: return false;
0
2158 }-
2159 while (test(S)
test(S)Description
TRUEnever evaluated
FALSEnever evaluated
|| test(CDO)
test(CDO)Description
TRUEnever evaluated
FALSEnever evaluated
|| test(CDC)
test(CDC)Description
TRUEnever evaluated
FALSEnever evaluated
) {}
never executed: end of block
0
2160 }
never executed: end of block
while (hasNext()
hasNext()Description
TRUEnever evaluated
FALSEnever evaluated
);
0
2161 styleSheet->buildIndexes(nameCaseSensitivity);-
2162 return
never executed: return true;
true;
never executed: return true;
0
2163}-
2164-
2165Symbol Parser::errorSymbol()-
2166{-
2167 if (errorIndex == -1
errorIndex == -1Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return Symbol();
Symbol();
never executed: return Symbol();
0
2168 return
never executed: return symbols.at(errorIndex);
symbols.at(errorIndex);
never executed: return symbols.at(errorIndex);
0
2169}-
2170-
2171static inline void removeOptionalQuotes(QString *str)-
2172{-
2173 if (!str->startsWith(QLatin1Char('\''))
!str->startsWi...in1Char('\''))Description
TRUEnever evaluated
FALSEnever evaluated
0
2174 && !str->startsWith(QLatin1Char('\"'))
!str->startsWi...in1Char('\"'))Description
TRUEnever evaluated
FALSEnever evaluated
)
0
2175 return;
never executed: return;
0
2176 str->remove(0, 1);-
2177 str->chop(1);-
2178}
never executed: end of block
0
2179-
2180bool Parser::parseImport(ImportRule *importRule)-
2181{-
2182 skipSpace();-
2183-
2184 if (test(STRING)
test(STRING)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2185 importRule->href = lexem();-
2186 }
never executed: end of block
else {
0
2187 if (!testAndParseUri(&importRule->href)
!testAndParseU...ortRule->href)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2188 }
never executed: end of block
0
2189 removeOptionalQuotes(&importRule->href);-
2190-
2191 skipSpace();-
2192-
2193 if (testMedium()
testMedium()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2194 if (!parseMedium(&importRule->media)
!parseMedium(&...rtRule->media)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2195-
2196 while (test(COMMA)
test(COMMA)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2197 skipSpace();-
2198 if (!parseNextMedium(&importRule->media)
!parseNextMedi...rtRule->media)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2199 }
never executed: end of block
0
2200 }
never executed: end of block
0
2201-
2202 if (!next(SEMICOLON)
!next(SEMICOLON)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2203-
2204 skipSpace();-
2205 return
never executed: return true;
true;
never executed: return true;
0
2206}-
2207-
2208bool Parser::parseMedia(MediaRule *mediaRule)-
2209{-
2210 do {-
2211 skipSpace();-
2212 if (!parseNextMedium(&mediaRule->media)
!parseNextMedi...iaRule->media)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2213 }
never executed: end of block
while (test(COMMA)
test(COMMA)Description
TRUEnever evaluated
FALSEnever evaluated
);
0
2214-
2215 if (!next(LBRACE)
!next(LBRACE)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2216 skipSpace();-
2217-
2218 while (testRuleset()
testRuleset()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2219 StyleRule rule;-
2220 if (!parseRuleset(&rule)
!parseRuleset(&rule)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2221 mediaRule->styleRules.append(rule);-
2222 }
never executed: end of block
0
2223-
2224 if (!next(RBRACE)
!next(RBRACE)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2225 skipSpace();-
2226 return
never executed: return true;
true;
never executed: return true;
0
2227}-
2228-
2229bool Parser::parseMedium(QStringList *media)-
2230{-
2231 media->append(lexem());-
2232 skipSpace();-
2233 return
never executed: return true;
true;
never executed: return true;
0
2234}-
2235-
2236bool Parser::parsePage(PageRule *pageRule)-
2237{-
2238 skipSpace();-
2239-
2240 if (testPseudoPage()
testPseudoPage()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
2241 if (!parsePseudoPage(&pageRule->selector)
!parsePseudoPa...ule->selector)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2242-
2243 skipSpace();-
2244 if (!next(LBRACE)
!next(LBRACE)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2245-
2246 do {-
2247 skipSpace();-
2248 Declaration decl;-
2249 if (!parseNextDeclaration(&decl)
!parseNextDeclaration(&decl)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2250 if (!decl.isEmpty()
!decl.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
2251 pageRule->declarations.append(decl);
never executed: pageRule->declarations.append(decl);
0
2252 }
never executed: end of block
while (test(SEMICOLON)
test(SEMICOLON)Description
TRUEnever evaluated
FALSEnever evaluated
);
0
2253-
2254 if (!next(RBRACE)
!next(RBRACE)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2255 skipSpace();-
2256 return
never executed: return true;
true;
never executed: return true;
0
2257}-
2258-
2259bool Parser::parsePseudoPage(QString *selector)-
2260{-
2261 if (!next(IDENT)
!next(IDENT)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2262 *selector = lexem();-
2263 return
never executed: return true;
true;
never executed: return true;
0
2264}-
2265-
2266bool Parser::parseNextOperator(Value *value)-
2267{-
2268 if (!hasNext()
!hasNext()Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return true;
true;
never executed: return true;
0
2269 switch (next()) {-
2270 case
never executed: case SLASH:
SLASH:
never executed: case SLASH:
value->type = Value::TermOperatorSlash; skipSpace(); break;
never executed: break;
0
2271 case
never executed: case COMMA:
COMMA:
never executed: case COMMA:
value->type = Value::TermOperatorComma; skipSpace(); break;
never executed: break;
0
2272 default
never executed: default:
:
never executed: default:
prev(); break;
never executed: break;
0
2273 }-
2274 return
never executed: return true;
true;
never executed: return true;
0
2275}-
2276-
2277bool Parser::parseCombinator(BasicSelector::Relation *relation)-
2278{-
2279 *relation = BasicSelector::NoRelation;-
2280 if (lookup() == S
lookup() == SDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
2281 *relation = BasicSelector::MatchNextSelectorIfAncestor;-
2282 skipSpace();-
2283 }
never executed: end of block
else {
0
2284 prev();-
2285 }
never executed: end of block
0
2286 if (test(PLUS)
test(PLUS)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2287 *relation = BasicSelector::MatchNextSelectorIfPreceeds;-
2288 }
never executed: end of block
else if (test(GREATER)
test(GREATER)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2289 *relation = BasicSelector::MatchNextSelectorIfParent;-
2290 }
never executed: end of block
0
2291 skipSpace();-
2292 return
never executed: return true;
true;
never executed: return true;
0
2293}-
2294-
2295bool Parser::parseProperty(Declaration *decl)-
2296{-
2297 decl->d->property = lexem();-
2298 decl->d->propertyId = static_cast<Property>(findKnownValue(decl->d->property, properties, NumProperties));-
2299 decl->d->inheritable = isInheritable(decl->d->propertyId);-
2300 skipSpace();-
2301 return
never executed: return true;
true;
never executed: return true;
0
2302}-
2303-
2304bool Parser::parseRuleset(StyleRule *styleRule)-
2305{-
2306 Selector sel;-
2307 if (!parseSelector(&sel)
!parseSelector(&sel)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2308 styleRule->selectors.append(sel);-
2309-
2310 while (test(COMMA)
test(COMMA)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2311 skipSpace();-
2312 Selector sel;-
2313 if (!parseNextSelector(&sel)
!parseNextSelector(&sel)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2314 styleRule->selectors.append(sel);-
2315 }
never executed: end of block
0
2316-
2317 skipSpace();-
2318 if (!next(LBRACE)
!next(LBRACE)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2319 const int declarationStart = index;-
2320-
2321 do {-
2322 skipSpace();-
2323 Declaration decl;-
2324 const int rewind = index;-
2325 if (!parseNextDeclaration(&decl)
!parseNextDeclaration(&decl)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2326 index = rewind;-
2327 const bool foundSemicolon = until(SEMICOLON);-
2328 const int semicolonIndex = index;-
2329-
2330 index = declarationStart;-
2331 const bool foundRBrace = until(RBRACE);-
2332-
2333 if (foundSemicolon
foundSemicolonDescription
TRUEnever evaluated
FALSEnever evaluated
&& semicolonIndex < index
semicolonIndex < indexDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
2334 decl = Declaration();-
2335 index = semicolonIndex - 1;-
2336 }
never executed: end of block
else {
0
2337 skipSpace();-
2338 return
never executed: return foundRBrace;
foundRBrace;
never executed: return foundRBrace;
0
2339 }-
2340 }-
2341 if (!decl.isEmpty()
!decl.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
2342 styleRule->declarations.append(decl);
never executed: styleRule->declarations.append(decl);
0
2343 }
never executed: end of block
while (test(SEMICOLON)
test(SEMICOLON)Description
TRUEnever evaluated
FALSEnever evaluated
);
0
2344-
2345 if (!next(RBRACE)
!next(RBRACE)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2346 skipSpace();-
2347 return
never executed: return true;
true;
never executed: return true;
0
2348}-
2349-
2350bool Parser::parseSelector(Selector *sel)-
2351{-
2352 BasicSelector basicSel;-
2353 if (!parseSimpleSelector(&basicSel)
!parseSimpleSe...tor(&basicSel)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2354 while (testCombinator()
testCombinator()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2355 if (!parseCombinator(&basicSel.relationToNext)
!parseCombinat...elationToNext)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2356-
2357 if (!testSimpleSelector()
!testSimpleSelector()Description
TRUEnever evaluated
FALSEnever evaluated
) break;
never executed: break;
0
2358 sel->basicSelectors.append(basicSel);-
2359-
2360 basicSel = BasicSelector();-
2361 if (!parseSimpleSelector(&basicSel)
!parseSimpleSe...tor(&basicSel)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2362 }
never executed: end of block
0
2363 sel->basicSelectors.append(basicSel);-
2364 return
never executed: return true;
true;
never executed: return true;
0
2365}-
2366-
2367bool Parser::parseSimpleSelector(BasicSelector *basicSel)-
2368{-
2369 int minCount = 0;-
2370 if (lookupElementName()
lookupElementName()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2371 if (!parseElementName(&basicSel->elementName)
!parseElementN...->elementName)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2372 }
never executed: end of block
else {
0
2373 prev();-
2374 minCount = 1;-
2375 }
never executed: end of block
0
2376 bool onceMore;-
2377 int count = 0;-
2378 do {-
2379 onceMore = false;-
2380 if (test(HASH)
test(HASH)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2381 QString theid = lexem();-
2382-
2383 theid.remove(0, 1);-
2384 basicSel->ids.append(theid);-
2385 onceMore = true;-
2386 }
never executed: end of block
else if (testClass()
testClass()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2387 onceMore = true;-
2388 AttributeSelector a;-
2389 a.name = QLatin1String("class");-
2390 a.valueMatchCriterium = AttributeSelector::MatchContains;-
2391 if (!parseClass(&a.value)
!parseClass(&a.value)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2392 basicSel->attributeSelectors.append(a);-
2393 }
never executed: end of block
else if (testAttrib()
testAttrib()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2394 onceMore = true;-
2395 AttributeSelector a;-
2396 if (!parseAttrib(&a)
!parseAttrib(&a)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2397 basicSel->attributeSelectors.append(a);-
2398 }
never executed: end of block
else if (testPseudo()
testPseudo()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2399 onceMore = true;-
2400 Pseudo ps;-
2401 if (!parsePseudo(&ps)
!parsePseudo(&ps)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2402 basicSel->pseudos.append(ps);-
2403 }
never executed: end of block
0
2404 if (onceMore
onceMoreDescription
TRUEnever evaluated
FALSEnever evaluated
) ++
never executed: ++count;
count;
never executed: ++count;
0
2405 }
never executed: end of block
while (onceMore
onceMoreDescription
TRUEnever evaluated
FALSEnever evaluated
);
0
2406 return
never executed: return count >= minCount;
count >= minCount;
never executed: return count >= minCount;
0
2407}-
2408-
2409bool Parser::parseClass(QString *name)-
2410{-
2411 if (!next(IDENT)
!next(IDENT)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2412 *name = lexem();-
2413 return
never executed: return true;
true;
never executed: return true;
0
2414}-
2415-
2416bool Parser::parseElementName(QString *name)-
2417{-
2418 switch (lookup()) {-
2419 case
never executed: case STAR:
STAR:
never executed: case STAR:
name->clear(); break;
never executed: break;
0
2420 case
never executed: case IDENT:
IDENT:
never executed: case IDENT:
*name = lexem(); break;
never executed: break;
0
2421 default
never executed: default:
:
never executed: default:
return
never executed: return false;
false;
never executed: return false;
0
2422 }-
2423 return
never executed: return true;
true;
never executed: return true;
0
2424}-
2425-
2426bool Parser::parseAttrib(AttributeSelector *attr)-
2427{-
2428 skipSpace();-
2429 if (!next(IDENT)
!next(IDENT)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2430 attr->name = lexem();-
2431 skipSpace();-
2432-
2433 if (test(EQUAL)
test(EQUAL)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2434 attr->valueMatchCriterium = AttributeSelector::MatchEqual;-
2435 }
never executed: end of block
else if (test(INCLUDES)
test(INCLUDES)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2436 attr->valueMatchCriterium = AttributeSelector::MatchContains;-
2437 }
never executed: end of block
else if (test(DASHMATCH)
test(DASHMATCH)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2438 attr->valueMatchCriterium = AttributeSelector::MatchBeginsWith;-
2439 }
never executed: end of block
else {
0
2440 return
never executed: return next(RBRACKET);
next(RBRACKET);
never executed: return next(RBRACKET);
0
2441 }-
2442-
2443 skipSpace();-
2444-
2445 if (!test(IDENT)
!test(IDENT)Description
TRUEnever evaluated
FALSEnever evaluated
&& !test(STRING)
!test(STRING)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2446 attr->value = unquotedLexem();-
2447-
2448 skipSpace();-
2449 return
never executed: return next(RBRACKET);
next(RBRACKET);
never executed: return next(RBRACKET);
0
2450}-
2451-
2452bool Parser::parsePseudo(Pseudo *pseudo)-
2453{-
2454 (void)test(COLON);-
2455 pseudo->negated = test(EXCLAMATION_SYM);-
2456 if (test(IDENT)
test(IDENT)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2457 pseudo->name = lexem();-
2458 pseudo->type = static_cast<quint64>(findKnownValue(pseudo->name, pseudos, NumPseudos));-
2459 return
never executed: return true;
true;
never executed: return true;
0
2460 }-
2461 if (!next(FUNCTION)
!next(FUNCTION)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2462 pseudo->function = lexem();-
2463-
2464 pseudo->function.chop(1);-
2465 skipSpace();-
2466 if (!test(IDENT)
!test(IDENT)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2467 pseudo->name = lexem();-
2468 skipSpace();-
2469 return
never executed: return next(RPAREN);
next(RPAREN);
never executed: return next(RPAREN);
0
2470}-
2471-
2472bool Parser::parseNextDeclaration(Declaration *decl)-
2473{-
2474 if (!testProperty()
!testProperty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
2475 return
never executed: return true;
true;
never executed: return true;
0
2476 if (!parseProperty(decl)
!parseProperty(decl)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2477 if (!next(COLON)
!next(COLON)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2478 skipSpace();-
2479 if (!parseNextExpr(&decl->d->values)
!parseNextExpr...cl->d->values)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2480 if (testPrio()
testPrio()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
2481 if (!parsePrio(decl)
!parsePrio(decl)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2482 return
never executed: return true;
true;
never executed: return true;
0
2483}-
2484-
2485bool Parser::testPrio()-
2486{-
2487 const int rewind = index;-
2488 if (!test(EXCLAMATION_SYM)
!test(EXCLAMATION_SYM)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2489 skipSpace();-
2490 if (!test(IDENT)
!test(IDENT)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2491 index = rewind;-
2492 return
never executed: return false;
false;
never executed: return false;
0
2493 }-
2494 if (lexem().compare(QLatin1String("important"), Qt::CaseInsensitive) != 0
lexem().compar...ensitive) != 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2495 index = rewind;-
2496 return
never executed: return false;
false;
never executed: return false;
0
2497 }-
2498 return
never executed: return true;
true;
never executed: return true;
0
2499}-
2500-
2501bool Parser::parsePrio(Declaration *declaration)-
2502{-
2503 declaration->d->important = true;-
2504 skipSpace();-
2505 return
never executed: return true;
true;
never executed: return true;
0
2506}-
2507-
2508bool Parser::parseExpr(QVector<Value> *values)-
2509{-
2510 Value val;-
2511 if (!parseTerm(&val)
!parseTerm(&val)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2512 values->append(val);-
2513 bool onceMore;-
2514 do {-
2515 onceMore = false;-
2516 val = Value();-
2517 if (!parseNextOperator(&val)
!parseNextOperator(&val)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2518 if (val.type != QCss::Value::Unknown
val.type != QC...Value::UnknownDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
2519 values->append(val);
never executed: values->append(val);
0
2520 if (testTerm()
testTerm()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2521 onceMore = true;-
2522 val = Value();-
2523 if (!parseTerm(&val)
!parseTerm(&val)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2524 values->append(val);-
2525 }
never executed: end of block
0
2526 }
never executed: end of block
while (onceMore
onceMoreDescription
TRUEnever evaluated
FALSEnever evaluated
);
0
2527 return
never executed: return true;
true;
never executed: return true;
0
2528}-
2529-
2530bool Parser::testTerm()-
2531{-
2532 return
never executed: return test(PLUS) || test(MINUS) || test(NUMBER) || test(PERCENTAGE) || test(LENGTH) || test(STRING) || test(IDENT) || testHexColor() || testFunction();
test(PLUS)
test(PLUS)Description
TRUEnever evaluated
FALSEnever evaluated
|| test(MINUS)
test(MINUS)Description
TRUEnever evaluated
FALSEnever evaluated
never executed: return test(PLUS) || test(MINUS) || test(NUMBER) || test(PERCENTAGE) || test(LENGTH) || test(STRING) || test(IDENT) || testHexColor() || testFunction();
0
2533 || test(NUMBER)
test(NUMBER)Description
TRUEnever evaluated
FALSEnever evaluated
never executed: return test(PLUS) || test(MINUS) || test(NUMBER) || test(PERCENTAGE) || test(LENGTH) || test(STRING) || test(IDENT) || testHexColor() || testFunction();
0
2534 || test(PERCENTAGE)
test(PERCENTAGE)Description
TRUEnever evaluated
FALSEnever evaluated
never executed: return test(PLUS) || test(MINUS) || test(NUMBER) || test(PERCENTAGE) || test(LENGTH) || test(STRING) || test(IDENT) || testHexColor() || testFunction();
0
2535 || test(LENGTH)
test(LENGTH)Description
TRUEnever evaluated
FALSEnever evaluated
never executed: return test(PLUS) || test(MINUS) || test(NUMBER) || test(PERCENTAGE) || test(LENGTH) || test(STRING) || test(IDENT) || testHexColor() || testFunction();
0
2536 || test(STRING)
test(STRING)Description
TRUEnever evaluated
FALSEnever evaluated
never executed: return test(PLUS) || test(MINUS) || test(NUMBER) || test(PERCENTAGE) || test(LENGTH) || test(STRING) || test(IDENT) || testHexColor() || testFunction();
0
2537 || test(IDENT)
test(IDENT)Description
TRUEnever evaluated
FALSEnever evaluated
never executed: return test(PLUS) || test(MINUS) || test(NUMBER) || test(PERCENTAGE) || test(LENGTH) || test(STRING) || test(IDENT) || testHexColor() || testFunction();
0
2538 || testHexColor()
testHexColor()Description
TRUEnever evaluated
FALSEnever evaluated
never executed: return test(PLUS) || test(MINUS) || test(NUMBER) || test(PERCENTAGE) || test(LENGTH) || test(STRING) || test(IDENT) || testHexColor() || testFunction();
0
2539 || testFunction()
testFunction()Description
TRUEnever evaluated
FALSEnever evaluated
;
never executed: return test(PLUS) || test(MINUS) || test(NUMBER) || test(PERCENTAGE) || test(LENGTH) || test(STRING) || test(IDENT) || testHexColor() || testFunction();
0
2540}-
2541-
2542bool Parser::parseTerm(Value *value)-
2543{-
2544 QString str = lexem();-
2545 bool haveUnary = false;-
2546 if (lookup() == PLUS
lookup() == PLUSDescription
TRUEnever evaluated
FALSEnever evaluated
|| lookup() == MINUS
lookup() == MINUSDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
2547 haveUnary = true;-
2548 if (!hasNext()
!hasNext()Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2549 next();-
2550 str += lexem();-
2551 }
never executed: end of block
0
2552-
2553 value->variant = str;-
2554 value->type = QCss::Value::String;-
2555 switch (lookup()) {-
2556 case
never executed: case NUMBER:
NUMBER:
never executed: case NUMBER:
0
2557 value->type = Value::Number;-
2558 value->variant.convert(QVariant::Double);-
2559 break;
never executed: break;
0
2560 case
never executed: case PERCENTAGE:
PERCENTAGE:
never executed: case PERCENTAGE:
0
2561 value->type = Value::Percentage;-
2562 str.chop(1);-
2563 value->variant = str;-
2564 break;
never executed: break;
0
2565 case
never executed: case LENGTH:
LENGTH:
never executed: case LENGTH:
0
2566 value->type = Value::Length;-
2567 break;
never executed: break;
0
2568-
2569 case
never executed: case STRING:
STRING:
never executed: case STRING:
0
2570 if (haveUnary
haveUnaryDescription
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2571 value->type = Value::String;-
2572 str.chop(1);-
2573 str.remove(0, 1);-
2574 value->variant = str;-
2575 break;
never executed: break;
0
2576 case
never executed: case IDENT:
IDENT:
never executed: case IDENT:
{
0
2577 if (haveUnary
haveUnaryDescription
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2578 value->type = Value::Identifier;-
2579 const int theid = findKnownValue(str, values, NumKnownValues);-
2580 if (theid != 0
theid != 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2581 value->type = Value::KnownIdentifier;-
2582 value->variant = theid;-
2583 }
never executed: end of block
0
2584 break;
never executed: break;
0
2585 }-
2586 default
never executed: default:
:
never executed: default:
{
0
2587 if (haveUnary
haveUnaryDescription
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2588 prev();-
2589 if (testHexColor()
testHexColor()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2590 QColor col;-
2591 if (!parseHexColor(&col)
!parseHexColor(&col)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2592 value->type = Value::Color;-
2593 value->variant = col;-
2594 }
never executed: end of block
else if (testFunction()
testFunction()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2595 QString name, args;-
2596 if (!parseFunction(&name, &args)
!parseFunction(&name, &args)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2597 if (name == QLatin1String("url")
name == QLatin1String("url")Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2598 value->type = Value::Uri;-
2599 removeOptionalQuotes(&args);-
2600 if (QFileInfo(args).isRelative()
QFileInfo(args).isRelative()Description
TRUEnever evaluated
FALSEnever evaluated
&& !sourcePath.isEmpty()
!sourcePath.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2601 args.prepend(sourcePath);-
2602 }
never executed: end of block
0
2603 value->variant = args;-
2604 }
never executed: end of block
else {
0
2605 value->type = Value::Function;-
2606 value->variant = QStringList() << name << args;-
2607 }
never executed: end of block
0
2608 } else {-
2609 return
never executed: return recordError();
recordError();
never executed: return recordError();
0
2610 }-
2611 return
never executed: return true;
true;
never executed: return true;
0
2612 }-
2613 }-
2614 skipSpace();-
2615 return
never executed: return true;
true;
never executed: return true;
0
2616}-
2617-
2618bool Parser::parseFunction(QString *name, QString *args)-
2619{-
2620 *name = lexem();-
2621 name->chop(1);-
2622 skipSpace();-
2623 const int start = index;-
2624 if (!until(RPAREN)
!until(RPAREN)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2625 for (int i = start; i < index - 1
i < index - 1Description
TRUEnever evaluated
FALSEnever evaluated
; ++i)
0
2626 args->append(symbols.at(i).lexem());
never executed: args->append(symbols.at(i).lexem());
0
2627-
2628-
2629-
2630-
2631 skipSpace();-
2632 return
never executed: return true;
true;
never executed: return true;
0
2633}-
2634-
2635bool Parser::parseHexColor(QColor *col)-
2636{-
2637 col->setNamedColor(lexem());-
2638 if (!col->isValid()
!col->isValid()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2639 QMessageLogger(__FILE__, 2690, __PRETTY_FUNCTION__).warning("QCssParser::parseHexColor: Unknown color name '%s'",lexem().toLatin1().constData());-
2640 return
never executed: return false;
false;
never executed: return false;
0
2641 }-
2642 skipSpace();-
2643 return
never executed: return true;
true;
never executed: return true;
0
2644}-
2645-
2646bool Parser::testAndParseUri(QString *uri)-
2647{-
2648 const int rewind = index;-
2649 if (!testFunction()
!testFunction()Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2650-
2651 QString name, args;-
2652 if (!parseFunction(&name, &args)
!parseFunction(&name, &args)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2653 index = rewind;-
2654 return
never executed: return false;
false;
never executed: return false;
0
2655 }-
2656 if (name.toLower() != QLatin1String("url")
name.toLower()...1String("url")Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2657 index = rewind;-
2658 return
never executed: return false;
false;
never executed: return false;
0
2659 }-
2660 *uri = args;-
2661 removeOptionalQuotes(uri);-
2662 return
never executed: return true;
true;
never executed: return true;
0
2663}-
2664-
2665bool Parser::testSimpleSelector()-
2666{-
2667 return
never executed: return testElementName() || (test(HASH)) || testClass() || testAttrib() || testPseudo();
testElementName()
testElementName()Description
TRUEnever evaluated
FALSEnever evaluated
never executed: return testElementName() || (test(HASH)) || testClass() || testAttrib() || testPseudo();
0
2668 || (
(test(HASH))Description
TRUEnever evaluated
FALSEnever evaluated
test(HASH))
(test(HASH))Description
TRUEnever evaluated
FALSEnever evaluated
never executed: return testElementName() || (test(HASH)) || testClass() || testAttrib() || testPseudo();
0
2669 || testClass()
testClass()Description
TRUEnever evaluated
FALSEnever evaluated
never executed: return testElementName() || (test(HASH)) || testClass() || testAttrib() || testPseudo();
0
2670 || testAttrib()
testAttrib()Description
TRUEnever evaluated
FALSEnever evaluated
never executed: return testElementName() || (test(HASH)) || testClass() || testAttrib() || testPseudo();
0
2671 || testPseudo()
testPseudo()Description
TRUEnever evaluated
FALSEnever evaluated
;
never executed: return testElementName() || (test(HASH)) || testClass() || testAttrib() || testPseudo();
0
2672}-
2673-
2674bool Parser::next(QCss::TokenType t)-
2675{-
2676 if (hasNext()
hasNext()Description
TRUEnever evaluated
FALSEnever evaluated
&& next() == t
next() == tDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
2677 return
never executed: return true;
true;
never executed: return true;
0
2678 return
never executed: return recordError();
recordError();
never executed: return recordError();
0
2679}-
2680-
2681bool Parser::test(QCss::TokenType t)-
2682{-
2683 if (index >= symbols.count()
index >= symbols.count()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
2684 return
never executed: return false;
false;
never executed: return false;
0
2685 if (symbols.at(index).token == t
symbols.at(index).token == tDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
2686 ++index;-
2687 return
never executed: return true;
true;
never executed: return true;
0
2688 }-
2689 return
never executed: return false;
false;
never executed: return false;
0
2690}-
2691-
2692QString Parser::unquotedLexem() const-
2693{-
2694 QString s = lexem();-
2695 if (lookup() == STRING
lookup() == STRINGDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
2696 s.chop(1);-
2697 s.remove(0, 1);-
2698 }
never executed: end of block
0
2699 return
never executed: return s;
s;
never executed: return s;
0
2700}-
2701-
2702QString Parser::lexemUntil(QCss::TokenType t)-
2703{-
2704 QString lexem;-
2705 while (hasNext()
hasNext()Description
TRUEnever evaluated
FALSEnever evaluated
&& next() != t
next() != tDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
2706 lexem += symbol().lexem();
never executed: lexem += symbol().lexem();
0
2707 return
never executed: return lexem;
lexem;
never executed: return lexem;
0
2708}-
2709-
2710bool Parser::until(QCss::TokenType target, QCss::TokenType target2)-
2711{-
2712 int braceCount = 0;-
2713 int brackCount = 0;-
2714 int parenCount = 0;-
2715 if (index
indexDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
2716 switch(symbols.at(index-1).token) {-
2717 case
never executed: case LBRACE:
LBRACE:
never executed: case LBRACE:
++braceCount; break;
never executed: break;
0
2718 case
never executed: case LBRACKET:
LBRACKET:
never executed: case LBRACKET:
++brackCount; break;
never executed: break;
0
2719 case
never executed: case FUNCTION:
FUNCTION:
never executed: case FUNCTION:
0
2720 case
never executed: case LPAREN:
LPAREN:
never executed: case LPAREN:
++parenCount; break;
never executed: break;
0
2721 default
never executed: default:
:
never executed: default:
;
0
2722 }
never executed: end of block
0
2723 }-
2724 while (index < symbols.size()
index < symbols.size()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2725 QCss::TokenType t = symbols.at(index++).token;-
2726 switch (t) {-
2727 case
never executed: case LBRACE:
LBRACE:
never executed: case LBRACE:
++braceCount; break;
never executed: break;
0
2728 case
never executed: case RBRACE:
RBRACE:
never executed: case RBRACE:
--braceCount; break;
never executed: break;
0
2729 case
never executed: case LBRACKET:
LBRACKET:
never executed: case LBRACKET:
++brackCount; break;
never executed: break;
0
2730 case
never executed: case RBRACKET:
RBRACKET:
never executed: case RBRACKET:
--brackCount; break;
never executed: break;
0
2731 case
never executed: case FUNCTION:
FUNCTION:
never executed: case FUNCTION:
0
2732 case
never executed: case LPAREN:
LPAREN:
never executed: case LPAREN:
++parenCount; break;
never executed: break;
0
2733 case
never executed: case RPAREN:
RPAREN:
never executed: case RPAREN:
--parenCount; break;
never executed: break;
0
2734 default
never executed: default:
:
never executed: default:
break;
never executed: break;
0
2735 }-
2736 if ((t == target
t == targetDescription
TRUEnever evaluated
FALSEnever evaluated
|| (target2 != NONE
target2 != NONEDescription
TRUEnever evaluated
FALSEnever evaluated
&& t == target2
t == target2Description
TRUEnever evaluated
FALSEnever evaluated
))
0
2737 && braceCount <= 0
braceCount <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2738 && brackCount <= 0
brackCount <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2739 && parenCount <= 0
parenCount <= 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
2740 return
never executed: return true;
true;
never executed: return true;
0
2741-
2742 if (braceCount < 0
braceCount < 0Description
TRUEnever evaluated
FALSEnever evaluated
|| brackCount < 0
brackCount < 0Description
TRUEnever evaluated
FALSEnever evaluated
|| parenCount < 0
parenCount < 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2743 --index;-
2744 break;
never executed: break;
0
2745 }-
2746 }
never executed: end of block
0
2747 return
never executed: return false;
false;
never executed: return false;
0
2748}-
2749-
2750bool Parser::testTokenAndEndsWith(QCss::TokenType t, QLatin1String str)-
2751{-
2752 if (!test(t)
!test(t)Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return false;
false;
never executed: return false;
0
2753 if (!lexem().endsWith(str, Qt::CaseInsensitive)
!lexem().endsW...seInsensitive)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
2754 prev();-
2755 return
never executed: return false;
false;
never executed: return false;
0
2756 }-
2757 return
never executed: return true;
true;
never executed: return true;
0
2758}-
2759-
2760-
Switch to Source codePreprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9