Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/gui/text/qcssparser.cpp |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||||||||||||||
2 | - | |||||||||||||||||||||||||
3 | - | |||||||||||||||||||||||||
4 | - | |||||||||||||||||||||||||
5 | - | |||||||||||||||||||||||||
6 | - | |||||||||||||||||||||||||
7 | - | |||||||||||||||||||||||||
8 | - | |||||||||||||||||||||||||
9 | - | |||||||||||||||||||||||||
10 | using namespace QCss; | - | ||||||||||||||||||||||||
11 | - | |||||||||||||||||||||||||
12 | struct QCssKnownValue | - | ||||||||||||||||||||||||
13 | { | - | ||||||||||||||||||||||||
14 | const char name[28]; | - | ||||||||||||||||||||||||
15 | quint64 id; | - | ||||||||||||||||||||||||
16 | }; | - | ||||||||||||||||||||||||
17 | - | |||||||||||||||||||||||||
18 | static 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 | - | |||||||||||||||||||||||||
123 | static 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 | - | |||||||||||||||||||||||||
199 | static 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 | - | |||||||||||||||||||||||||
204 | QString Value::toString() const | - | ||||||||||||||||||||||||
205 | { | - | ||||||||||||||||||||||||
206 | if (type == KnownIdentifier
| 0 | ||||||||||||||||||||||||
207 | return never executed: QLatin1String(values[indexOfId[variant.toInt()]].name);return QLatin1String(values[indexOfId[variant.toInt()]].name); never executed: return QLatin1String(values[indexOfId[variant.toInt()]].name); | 0 | ||||||||||||||||||||||||
208 | } else { | - | ||||||||||||||||||||||||
209 | return never executed: variant.toString();return variant.toString(); never executed: return variant.toString(); | 0 | ||||||||||||||||||||||||
210 | } | - | ||||||||||||||||||||||||
211 | } | - | ||||||||||||||||||||||||
212 | - | |||||||||||||||||||||||||
213 | static 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 | - | |||||||||||||||||||||||||
260 | static const QCssKnownValue origins[NumKnownOrigins - 1] = { | - | ||||||||||||||||||||||||
261 | { "border", Origin_Border }, | - | ||||||||||||||||||||||||
262 | { "content", Origin_Content }, | - | ||||||||||||||||||||||||
263 | { "margin", Origin_Margin }, | - | ||||||||||||||||||||||||
264 | { "padding", Origin_Padding } | - | ||||||||||||||||||||||||
265 | }; | - | ||||||||||||||||||||||||
266 | - | |||||||||||||||||||||||||
267 | static 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 | - | |||||||||||||||||||||||||
274 | static const QCssKnownValue tileModes[NumKnownTileModes - 1] = { | - | ||||||||||||||||||||||||
275 | { "repeat", TileMode_Repeat }, | - | ||||||||||||||||||||||||
276 | { "round", TileMode_Round }, | - | ||||||||||||||||||||||||
277 | { "stretch", TileMode_Stretch }, | - | ||||||||||||||||||||||||
278 | }; | - | ||||||||||||||||||||||||
279 | - | |||||||||||||||||||||||||
280 | static const QCssKnownValue positions[NumKnownPositionModes - 1] = { | - | ||||||||||||||||||||||||
281 | { "absolute", PositionMode_Absolute }, | - | ||||||||||||||||||||||||
282 | { "fixed", PositionMode_Fixed }, | - | ||||||||||||||||||||||||
283 | { "relative", PositionMode_Relative }, | - | ||||||||||||||||||||||||
284 | { "static", PositionMode_Static } | - | ||||||||||||||||||||||||
285 | }; | - | ||||||||||||||||||||||||
286 | - | |||||||||||||||||||||||||
287 | static const QCssKnownValue attachments[NumKnownAttachments - 1] = { | - | ||||||||||||||||||||||||
288 | { "fixed", Attachment_Fixed }, | - | ||||||||||||||||||||||||
289 | { "scroll", Attachment_Scroll } | - | ||||||||||||||||||||||||
290 | }; | - | ||||||||||||||||||||||||
291 | - | |||||||||||||||||||||||||
292 | static const QCssKnownValue styleFeatures[NumKnownStyleFeatures - 1] = { | - | ||||||||||||||||||||||||
293 | { "background-color", StyleFeature_BackgroundColor }, | - | ||||||||||||||||||||||||
294 | { "background-gradient", StyleFeature_BackgroundGradient }, | - | ||||||||||||||||||||||||
295 | { "none", StyleFeature_None } | - | ||||||||||||||||||||||||
296 | }; | - | ||||||||||||||||||||||||
297 | static bool operator<(const QString &name, const QCssKnownValue &prop) | - | ||||||||||||||||||||||||
298 | { | - | ||||||||||||||||||||||||
299 | return never executed: QString::compare(name, QLatin1String(prop.name), Qt::CaseInsensitive) < 0;return QString::compare(name, QLatin1String(prop.name), Qt::CaseInsensitive) < 0; never executed: return QString::compare(name, QLatin1String(prop.name), Qt::CaseInsensitive) < 0; | 0 | ||||||||||||||||||||||||
300 | } | - | ||||||||||||||||||||||||
301 | - | |||||||||||||||||||||||||
302 | static bool operator<(const QCssKnownValue &prop, const QString &name) | - | ||||||||||||||||||||||||
303 | { | - | ||||||||||||||||||||||||
304 | return never executed: QString::compare(QLatin1String(prop.name), name, Qt::CaseInsensitive) < 0;return QString::compare(QLatin1String(prop.name), name, Qt::CaseInsensitive) < 0; never executed: return QString::compare(QLatin1String(prop.name), name, Qt::CaseInsensitive) < 0; | 0 | ||||||||||||||||||||||||
305 | } | - | ||||||||||||||||||||||||
306 | - | |||||||||||||||||||||||||
307 | static 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 ((
| 0 | ||||||||||||||||||||||||
312 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
313 | return never executed: prop->id;return prop->id; never executed: return prop->id; | 0 | ||||||||||||||||||||||||
314 | } | - | ||||||||||||||||||||||||
315 | - | |||||||||||||||||||||||||
316 | static inline bool isInheritable(Property propertyId) | - | ||||||||||||||||||||||||
317 | { | - | ||||||||||||||||||||||||
318 | switch (propertyId) { | - | ||||||||||||||||||||||||
319 | case never executed: Font:case Font: never executed: case Font: | 0 | ||||||||||||||||||||||||
320 | case never executed: FontFamily:case FontFamily: never executed: case FontFamily: | 0 | ||||||||||||||||||||||||
321 | case never executed: FontSize:case FontSize: never executed: case FontSize: | 0 | ||||||||||||||||||||||||
322 | case never executed: FontStyle:case FontStyle: never executed: case FontStyle: | 0 | ||||||||||||||||||||||||
323 | case never executed: FontWeight:case FontWeight: never executed: case FontWeight: | 0 | ||||||||||||||||||||||||
324 | case never executed: TextIndent:case TextIndent: never executed: case TextIndent: | 0 | ||||||||||||||||||||||||
325 | case never executed: Whitespace:case Whitespace: never executed: case Whitespace: | 0 | ||||||||||||||||||||||||
326 | case never executed: ListStyleType:case ListStyleType: never executed: case ListStyleType: | 0 | ||||||||||||||||||||||||
327 | case never executed: ListStyle:case ListStyle: never executed: case ListStyle: | 0 | ||||||||||||||||||||||||
328 | case never executed: TextAlignment:case TextAlignment: never executed: case TextAlignment: | 0 | ||||||||||||||||||||||||
329 | case never executed: FontVariant:case FontVariant: never executed: case FontVariant: | 0 | ||||||||||||||||||||||||
330 | case never executed: TextTransform:case TextTransform: never executed: case TextTransform: | 0 | ||||||||||||||||||||||||
331 | case never executed: LineHeight:case LineHeight: never executed: case LineHeight: | 0 | ||||||||||||||||||||||||
332 | return never executed: true;return 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: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
337 | } | - | ||||||||||||||||||||||||
338 | - | |||||||||||||||||||||||||
339 | - | |||||||||||||||||||||||||
340 | - | |||||||||||||||||||||||||
341 | ValueExtractor::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 | - | |||||||||||||||||||||||||
346 | LengthData 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)
| 0 | ||||||||||||||||||||||||
353 | data.unit = LengthData::Px; never executed: data.unit = LengthData::Px; | 0 | ||||||||||||||||||||||||
354 | else if (s.endsWith(QLatin1String("ex"), Qt::CaseInsensitive)
| 0 | ||||||||||||||||||||||||
355 | data.unit = LengthData::Ex; never executed: data.unit = LengthData::Ex; | 0 | ||||||||||||||||||||||||
356 | else if (s.endsWith(QLatin1String("em"), Qt::CaseInsensitive)
| 0 | ||||||||||||||||||||||||
357 | data.unit = LengthData::Em; never executed: data.unit = LengthData::Em; | 0 | ||||||||||||||||||||||||
358 | - | |||||||||||||||||||||||||
359 | if (data.unit != LengthData::None
| 0 | ||||||||||||||||||||||||
360 | s.chop(2); never executed: s.chop(2); | 0 | ||||||||||||||||||||||||
361 | - | |||||||||||||||||||||||||
362 | data.number = s.toDouble(); | - | ||||||||||||||||||||||||
363 | return never executed: data;return data; never executed: return data; | 0 | ||||||||||||||||||||||||
364 | } | - | ||||||||||||||||||||||||
365 | - | |||||||||||||||||||||||||
366 | static int lengthValueFromData(const LengthData& data, const QFont& f) | - | ||||||||||||||||||||||||
367 | { | - | ||||||||||||||||||||||||
368 | if (data.unit == LengthData::Ex
| 0 | ||||||||||||||||||||||||
369 | return never executed: qRound(QFontMetrics(f).xHeight() * data.number);return qRound(QFontMetrics(f).xHeight() * data.number); never executed: return qRound(QFontMetrics(f).xHeight() * data.number); | 0 | ||||||||||||||||||||||||
370 | else if (data.unit == LengthData::Em
| 0 | ||||||||||||||||||||||||
371 | return never executed: qRound(QFontMetrics(f).height() * data.number);return qRound(QFontMetrics(f).height() * data.number); never executed: return qRound(QFontMetrics(f).height() * data.number); | 0 | ||||||||||||||||||||||||
372 | return never executed: qRound(data.number);return qRound(data.number); never executed: return qRound(data.number); | 0 | ||||||||||||||||||||||||
373 | } | - | ||||||||||||||||||||||||
374 | - | |||||||||||||||||||||||||
375 | int ValueExtractor::lengthValue(const Declaration &decl) | - | ||||||||||||||||||||||||
376 | { | - | ||||||||||||||||||||||||
377 | if (decl.d->parsed.isValid()
| 0 | ||||||||||||||||||||||||
378 | return never executed: lengthValueFromData(qvariant_cast<LengthData>(decl.d->parsed), f);return 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
| 0 | ||||||||||||||||||||||||
380 | return never executed: 0;return 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: lengthValueFromData(data,f);return lengthValueFromData(data,f); never executed: return lengthValueFromData(data,f); | 0 | ||||||||||||||||||||||||
384 | } | - | ||||||||||||||||||||||||
385 | - | |||||||||||||||||||||||||
386 | void ValueExtractor::lengthValues(const Declaration &decl, int *m) | - | ||||||||||||||||||||||||
387 | { | - | ||||||||||||||||||||||||
388 | if (decl.d->parsed.isValid()
| 0 | ||||||||||||||||||||||||
389 | QList<QVariant> v = decl.d->parsed.toList(); | - | ||||||||||||||||||||||||
390 | for (int i = 0; i < 4
| 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)
| 0 | ||||||||||||||||||||||||
398 | datas[i] = lengthValue(decl.d->values[i]); never executed: datas[i] = lengthValue(decl.d->values[i]); | 0 | ||||||||||||||||||||||||
399 | - | |||||||||||||||||||||||||
400 | if (i == 0
| 0 | ||||||||||||||||||||||||
401 | LengthData zero = {0.0, LengthData::None}; | - | ||||||||||||||||||||||||
402 | datas[0] = datas[1] = datas[2] = datas[3] = zero; | - | ||||||||||||||||||||||||
403 | } never executed: else if (i == 1end of block
| 0 | ||||||||||||||||||||||||
404 | datas[3] = datas[2] = datas[1] = datas[0]; | - | ||||||||||||||||||||||||
405 | } never executed: else if (i == 2end of block
| 0 | ||||||||||||||||||||||||
406 | datas[2] = datas[0]; | - | ||||||||||||||||||||||||
407 | datas[3] = datas[1]; | - | ||||||||||||||||||||||||
408 | } never executed: else if (i == 3end of block
| 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
| 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 | - | |||||||||||||||||||||||||
421 | bool 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()
| 0 | ||||||||||||||||||||||||
426 | const Declaration &decl = declarations.at(i); | - | ||||||||||||||||||||||||
427 | switch (decl.d->propertyId) { | - | ||||||||||||||||||||||||
428 | case never executed: Width:case Width: never executed: *w = lengthValue(decl); break;case Width: never executed: break; | 0 | ||||||||||||||||||||||||
429 | case never executed: Height:case Height: never executed: *h = lengthValue(decl); break;case Height: never executed: break; | 0 | ||||||||||||||||||||||||
430 | case never executed: MinimumWidth:case MinimumWidth: never executed: *minw = lengthValue(decl); break;case MinimumWidth: never executed: break; | 0 | ||||||||||||||||||||||||
431 | case never executed: MinimumHeight:case MinimumHeight: never executed: *minh = lengthValue(decl); break;case MinimumHeight: never executed: break; | 0 | ||||||||||||||||||||||||
432 | case never executed: MaximumWidth:case MaximumWidth: never executed: *maxw = lengthValue(decl); break;case MaximumWidth: never executed: break; | 0 | ||||||||||||||||||||||||
433 | case never executed: MaximumHeight:case MaximumHeight: never executed: *maxh = lengthValue(decl); break;case MaximumHeight: never executed: break; | 0 | ||||||||||||||||||||||||
434 | default never executed: :default: never executed: continue;default: never executed: continue; | 0 | ||||||||||||||||||||||||
435 | } | - | ||||||||||||||||||||||||
436 | hit = true; | - | ||||||||||||||||||||||||
437 | } never executed: end of block | 0 | ||||||||||||||||||||||||
438 | - | |||||||||||||||||||||||||
439 | return never executed: hit;return hit; never executed: return hit; | 0 | ||||||||||||||||||||||||
440 | } | - | ||||||||||||||||||||||||
441 | - | |||||||||||||||||||||||||
442 | bool 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()
| 0 | ||||||||||||||||||||||||
448 | const Declaration &decl = declarations.at(i); | - | ||||||||||||||||||||||||
449 | switch (decl.d->propertyId) { | - | ||||||||||||||||||||||||
450 | case never executed: Left:case Left: never executed: *left = lengthValue(decl); break;case Left: never executed: break; | 0 | ||||||||||||||||||||||||
451 | case never executed: Top:case Top: never executed: *top = lengthValue(decl); break;case Top: never executed: break; | 0 | ||||||||||||||||||||||||
452 | case never executed: Right:case Right: never executed: *right = lengthValue(decl); break;case Right: never executed: break; | 0 | ||||||||||||||||||||||||
453 | case never executed: Bottom:case Bottom: never executed: *bottom = lengthValue(decl); break;case Bottom: never executed: break; | 0 | ||||||||||||||||||||||||
454 | case never executed: QtOrigin:case QtOrigin: never executed: *origin = decl.originValue(); break;case QtOrigin: never executed: break; | 0 | ||||||||||||||||||||||||
455 | case never executed: QtPosition:case QtPosition: never executed: *position = decl.alignmentValue(); break;case QtPosition: never executed: break; | 0 | ||||||||||||||||||||||||
456 | case never executed: TextAlignment:case TextAlignment: never executed: *textAlignment = decl.alignmentValue(); break;case TextAlignment: never executed: break; | 0 | ||||||||||||||||||||||||
457 | case never executed: Position:case Position: never executed: *mode = decl.positionValue(); break;case Position: never executed: break; | 0 | ||||||||||||||||||||||||
458 | default never executed: :default: never executed: continue;default: never executed: continue; | 0 | ||||||||||||||||||||||||
459 | } | - | ||||||||||||||||||||||||
460 | hit = true; | - | ||||||||||||||||||||||||
461 | } never executed: end of block | 0 | ||||||||||||||||||||||||
462 | - | |||||||||||||||||||||||||
463 | return never executed: hit;return hit; never executed: return hit; | 0 | ||||||||||||||||||||||||
464 | } | - | ||||||||||||||||||||||||
465 | - | |||||||||||||||||||||||||
466 | bool ValueExtractor::extractBox(int *margins, int *paddings, int *spacing) | - | ||||||||||||||||||||||||
467 | { | - | ||||||||||||||||||||||||
468 | extractFont(); | - | ||||||||||||||||||||||||
469 | bool hit = false; | - | ||||||||||||||||||||||||
470 | for (int i = 0; i < declarations.count()
| 0 | ||||||||||||||||||||||||
471 | const Declaration &decl = declarations.at(i); | - | ||||||||||||||||||||||||
472 | switch (decl.d->propertyId) { | - | ||||||||||||||||||||||||
473 | case never executed: PaddingLeft:case PaddingLeft: never executed: paddings[LeftEdge] = lengthValue(decl); break;case PaddingLeft: never executed: break; | 0 | ||||||||||||||||||||||||
474 | case never executed: PaddingRight:case PaddingRight: never executed: paddings[RightEdge] = lengthValue(decl); break;case PaddingRight: never executed: break; | 0 | ||||||||||||||||||||||||
475 | case never executed: PaddingTop:case PaddingTop: never executed: paddings[TopEdge] = lengthValue(decl); break;case PaddingTop: never executed: break; | 0 | ||||||||||||||||||||||||
476 | case never executed: PaddingBottom:case PaddingBottom: never executed: paddings[BottomEdge] = lengthValue(decl); break;case PaddingBottom: never executed: break; | 0 | ||||||||||||||||||||||||
477 | case never executed: Padding:case Padding: never executed: lengthValues(decl, paddings); break;case Padding: never executed: break; | 0 | ||||||||||||||||||||||||
478 | - | |||||||||||||||||||||||||
479 | case never executed: MarginLeft:case MarginLeft: never executed: margins[LeftEdge] = lengthValue(decl); break;case MarginLeft: never executed: break; | 0 | ||||||||||||||||||||||||
480 | case never executed: MarginRight:case MarginRight: never executed: margins[RightEdge] = lengthValue(decl); break;case MarginRight: never executed: break; | 0 | ||||||||||||||||||||||||
481 | case never executed: MarginTop:case MarginTop: never executed: margins[TopEdge] = lengthValue(decl); break;case MarginTop: never executed: break; | 0 | ||||||||||||||||||||||||
482 | case never executed: MarginBottom:case MarginBottom: never executed: margins[BottomEdge] = lengthValue(decl); break;case MarginBottom: never executed: break; | 0 | ||||||||||||||||||||||||
483 | case never executed: Margin:case Margin: never executed: lengthValues(decl, margins); break;case Margin: never executed: break; | 0 | ||||||||||||||||||||||||
484 | case never executed: QtSpacing:case QtSpacing: never executed: if (spacingcase QtSpacing:
never executed: spacing = lengthValue(decl);*spacing = lengthValue(decl); never executed: break;*spacing = lengthValue(decl); never executed: break; | 0 | ||||||||||||||||||||||||
485 | - | |||||||||||||||||||||||||
486 | default never executed: :default: never executed: continue;default: never executed: continue; | 0 | ||||||||||||||||||||||||
487 | } | - | ||||||||||||||||||||||||
488 | hit = true; | - | ||||||||||||||||||||||||
489 | } never executed: end of block | 0 | ||||||||||||||||||||||||
490 | - | |||||||||||||||||||||||||
491 | return never executed: hit;return hit; never executed: return hit; | 0 | ||||||||||||||||||||||||
492 | } | - | ||||||||||||||||||||||||
493 | - | |||||||||||||||||||||||||
494 | int ValueExtractor::extractStyleFeatures() | - | ||||||||||||||||||||||||
495 | { | - | ||||||||||||||||||||||||
496 | int features = StyleFeature_None; | - | ||||||||||||||||||||||||
497 | for (int i = 0; i < declarations.count()
| 0 | ||||||||||||||||||||||||
498 | const Declaration &decl = declarations.at(i); | - | ||||||||||||||||||||||||
499 | if (decl.d->propertyId == QtStyleFeatures
| 0 | ||||||||||||||||||||||||
500 | features = decl.styleFeaturesValue(); never executed: features = decl.styleFeaturesValue(); | 0 | ||||||||||||||||||||||||
501 | } never executed: end of block | 0 | ||||||||||||||||||||||||
502 | return never executed: features;return features; never executed: return features; | 0 | ||||||||||||||||||||||||
503 | } | - | ||||||||||||||||||||||||
504 | - | |||||||||||||||||||||||||
505 | QSize ValueExtractor::sizeValue(const Declaration &decl) | - | ||||||||||||||||||||||||
506 | { | - | ||||||||||||||||||||||||
507 | if (decl.d->parsed.isValid()
| 0 | ||||||||||||||||||||||||
508 | QList<QVariant> v = decl.d->parsed.toList(); | - | ||||||||||||||||||||||||
509 | return never executed: QSize(lengthValueFromData(qvariant_cast<LengthData>(v.at(0)), f),return QSize(lengthValueFromData(qvariant_cast<LengthData>(v.at(0)), f), 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 | ||||||||||||||||||||||||
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
| 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
| 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: QSize(lengthValueFromData(x[0], f), lengthValueFromData(x[1], f));return QSize(lengthValueFromData(x[0], f), lengthValueFromData(x[1], f)); never executed: return QSize(lengthValueFromData(x[0], f), lengthValueFromData(x[1], f)); | 0 | ||||||||||||||||||||||||
524 | } | - | ||||||||||||||||||||||||
525 | - | |||||||||||||||||||||||||
526 | void ValueExtractor::sizeValues(const Declaration &decl, QSize *radii) | - | ||||||||||||||||||||||||
527 | { | - | ||||||||||||||||||||||||
528 | radii[0] = sizeValue(decl); | - | ||||||||||||||||||||||||
529 | for (int i = 1; i < 4
| 0 | ||||||||||||||||||||||||
530 | radii[i] = radii[0]; never executed: radii[i] = radii[0]; | 0 | ||||||||||||||||||||||||
531 | } never executed: end of block | 0 | ||||||||||||||||||||||||
532 | - | |||||||||||||||||||||||||
533 | bool 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()
| 0 | ||||||||||||||||||||||||
539 | const Declaration &decl = declarations.at(i); | - | ||||||||||||||||||||||||
540 | switch (decl.d->propertyId) { | - | ||||||||||||||||||||||||
541 | case never executed: BorderLeftWidth:case BorderLeftWidth: never executed: borders[LeftEdge] = lengthValue(decl); break;case BorderLeftWidth: never executed: break; | 0 | ||||||||||||||||||||||||
542 | case never executed: BorderRightWidth:case BorderRightWidth: never executed: borders[RightEdge] = lengthValue(decl); break;case BorderRightWidth: never executed: break; | 0 | ||||||||||||||||||||||||
543 | case never executed: BorderTopWidth:case BorderTopWidth: never executed: borders[TopEdge] = lengthValue(decl); break;case BorderTopWidth: never executed: break; | 0 | ||||||||||||||||||||||||
544 | case never executed: BorderBottomWidth:case BorderBottomWidth: never executed: borders[BottomEdge] = lengthValue(decl); break;case BorderBottomWidth: never executed: break; | 0 | ||||||||||||||||||||||||
545 | case never executed: BorderWidth:case BorderWidth: never executed: lengthValues(decl, borders); break;case BorderWidth: never executed: break; | 0 | ||||||||||||||||||||||||
546 | - | |||||||||||||||||||||||||
547 | case never executed: BorderLeftColor:case BorderLeftColor: never executed: colors[LeftEdge] = decl.brushValue(pal); break;case BorderLeftColor: never executed: break; | 0 | ||||||||||||||||||||||||
548 | case never executed: BorderRightColor:case BorderRightColor: never executed: colors[RightEdge] = decl.brushValue(pal); break;case BorderRightColor: never executed: break; | 0 | ||||||||||||||||||||||||
549 | case never executed: BorderTopColor:case BorderTopColor: never executed: colors[TopEdge] = decl.brushValue(pal); break;case BorderTopColor: never executed: break; | 0 | ||||||||||||||||||||||||
550 | case never executed: BorderBottomColor:case BorderBottomColor: never executed: colors[BottomEdge] = decl.brushValue(pal); break;case BorderBottomColor: never executed: break; | 0 | ||||||||||||||||||||||||
551 | case never executed: BorderColor:case BorderColor: never executed: decl.brushValues(colors, pal); break;case BorderColor: never executed: break; | 0 | ||||||||||||||||||||||||
552 | - | |||||||||||||||||||||||||
553 | case never executed: BorderTopStyle:case BorderTopStyle: never executed: styles[TopEdge] = decl.styleValue(); break;case BorderTopStyle: never executed: break; | 0 | ||||||||||||||||||||||||
554 | case never executed: BorderBottomStyle:case BorderBottomStyle: never executed: styles[BottomEdge] = decl.styleValue(); break;case BorderBottomStyle: never executed: break; | 0 | ||||||||||||||||||||||||
555 | case never executed: BorderLeftStyle:case BorderLeftStyle: never executed: styles[LeftEdge] = decl.styleValue(); break;case BorderLeftStyle: never executed: break; | 0 | ||||||||||||||||||||||||
556 | case never executed: BorderRightStyle:case BorderRightStyle: never executed: styles[RightEdge] = decl.styleValue(); break;case BorderRightStyle: never executed: break; | 0 | ||||||||||||||||||||||||
557 | case never executed: BorderStyles:case BorderStyles: never executed: decl.styleValues(styles); break;case BorderStyles: never executed: break; | 0 | ||||||||||||||||||||||||
558 | - | |||||||||||||||||||||||||
559 | - | |||||||||||||||||||||||||
560 | case never executed: BorderTopLeftRadius:case BorderTopLeftRadius: never executed: radii[0] = sizeValue(decl); break;case BorderTopLeftRadius: never executed: break; | 0 | ||||||||||||||||||||||||
561 | - | |||||||||||||||||||||||||
562 | - | |||||||||||||||||||||||||
563 | - | |||||||||||||||||||||||||
564 | case never executed: BorderTopRightRadius:case BorderTopRightRadius: never executed: radii[1] = sizeValue(decl); break;case BorderTopRightRadius: never executed: break; | 0 | ||||||||||||||||||||||||
565 | case never executed: BorderBottomLeftRadius:case BorderBottomLeftRadius: never executed: radii[2] = sizeValue(decl); break;case BorderBottomLeftRadius: never executed: break; | 0 | ||||||||||||||||||||||||
566 | case never executed: BorderBottomRightRadius:case BorderBottomRightRadius: never executed: radii[3] = sizeValue(decl); break;case BorderBottomRightRadius: never executed: break; | 0 | ||||||||||||||||||||||||
567 | case never executed: BorderRadius:case BorderRadius: never executed: sizeValues(decl, radii); break;case BorderRadius: never executed: break; | 0 | ||||||||||||||||||||||||
568 | - | |||||||||||||||||||||||||
569 | case never executed: BorderLeft:case 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: BorderTop:case 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: BorderRight:case 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: BorderBottom:case 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: Border:case 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: continue;default: never executed: continue; | 0 | ||||||||||||||||||||||||
589 | } | - | ||||||||||||||||||||||||
590 | hit = true; | - | ||||||||||||||||||||||||
591 | } never executed: end of block | 0 | ||||||||||||||||||||||||
592 | - | |||||||||||||||||||||||||
593 | return never executed: hit;return hit; never executed: return hit; | 0 | ||||||||||||||||||||||||
594 | } | - | ||||||||||||||||||||||||
595 | - | |||||||||||||||||||||||||
596 | bool 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()
| 0 | ||||||||||||||||||||||||
602 | const Declaration &decl = declarations.at(i); | - | ||||||||||||||||||||||||
603 | switch (decl.d->propertyId) { | - | ||||||||||||||||||||||||
604 | case never executed: OutlineWidth:case OutlineWidth: never executed: lengthValues(decl, borders); break;case OutlineWidth: never executed: break; | 0 | ||||||||||||||||||||||||
605 | case never executed: OutlineColor:case OutlineColor: never executed: decl.brushValues(colors, pal); break;case OutlineColor: never executed: break; | 0 | ||||||||||||||||||||||||
606 | case never executed: OutlineStyle:case OutlineStyle: never executed: decl.styleValues(styles); break;case OutlineStyle: never executed: break; | 0 | ||||||||||||||||||||||||
607 | - | |||||||||||||||||||||||||
608 | case never executed: OutlineTopLeftRadius:case OutlineTopLeftRadius: never executed: radii[0] = sizeValue(decl); break;case OutlineTopLeftRadius: never executed: break; | 0 | ||||||||||||||||||||||||
609 | case never executed: OutlineTopRightRadius:case OutlineTopRightRadius: never executed: radii[1] = sizeValue(decl); break;case OutlineTopRightRadius: never executed: break; | 0 | ||||||||||||||||||||||||
610 | case never executed: OutlineBottomLeftRadius:case OutlineBottomLeftRadius: never executed: radii[2] = sizeValue(decl); break;case OutlineBottomLeftRadius: never executed: break; | 0 | ||||||||||||||||||||||||
611 | case never executed: OutlineBottomRightRadius:case OutlineBottomRightRadius: never executed: radii[3] = sizeValue(decl); break;case OutlineBottomRightRadius: never executed: break; | 0 | ||||||||||||||||||||||||
612 | case never executed: OutlineRadius:case OutlineRadius: never executed: sizeValues(decl, radii); break;case OutlineRadius: never executed: break; | 0 | ||||||||||||||||||||||||
613 | case never executed: OutlineOffset:case OutlineOffset: never executed: lengthValues(decl, offsets); break;case OutlineOffset: never executed: break; | 0 | ||||||||||||||||||||||||
614 | - | |||||||||||||||||||||||||
615 | case never executed: Outline:case 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: continue;default: never executed: continue; | 0 | ||||||||||||||||||||||||
623 | } | - | ||||||||||||||||||||||||
624 | hit = true; | - | ||||||||||||||||||||||||
625 | } never executed: end of block | 0 | ||||||||||||||||||||||||
626 | - | |||||||||||||||||||||||||
627 | return never executed: hit;return hit; never executed: return hit; | 0 | ||||||||||||||||||||||||
628 | } | - | ||||||||||||||||||||||||
629 | - | |||||||||||||||||||||||||
630 | static 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)
| 0 | ||||||||||||||||||||||||
634 | if (values[i].type != Value::KnownIdentifier
| 0 | ||||||||||||||||||||||||
635 | break; never executed: break; | 0 | ||||||||||||||||||||||||
636 | switch (values[i].variant.toInt()) { | - | ||||||||||||||||||||||||
637 | case never executed: Value_Left:case Value_Left: never executed: a[i] = Qt::AlignLeft; break;case Value_Left: never executed: break; | 0 | ||||||||||||||||||||||||
638 | case never executed: Value_Right:case Value_Right: never executed: a[i] = Qt::AlignRight; break;case Value_Right: never executed: break; | 0 | ||||||||||||||||||||||||
639 | case never executed: Value_Top:case Value_Top: never executed: a[i] = Qt::AlignTop; break;case Value_Top: never executed: break; | 0 | ||||||||||||||||||||||||
640 | case never executed: Value_Bottom:case Value_Bottom: never executed: a[i] = Qt::AlignBottom; break;case Value_Bottom: never executed: break; | 0 | ||||||||||||||||||||||||
641 | case never executed: Value_Center:case Value_Center: never executed: a[i] = Qt::AlignCenter; break;case Value_Center: never executed: break; | 0 | ||||||||||||||||||||||||
642 | default never executed: :default: never executed: break;default: never executed: break; | 0 | ||||||||||||||||||||||||
643 | } | - | ||||||||||||||||||||||||
644 | } | - | ||||||||||||||||||||||||
645 | - | |||||||||||||||||||||||||
646 | if (a[0] == Qt::AlignCenter
| 0 | ||||||||||||||||||||||||
647 | a[0] = (a[1] == Qt::AlignLeft
never executed: a[0] = (a[1] == Qt::AlignLeft || a[1] == Qt::AlignRight) ? Qt::AlignVCenter : Qt::AlignHCenter; | 0 | ||||||||||||||||||||||||
648 | if ((a[1] == 0
| 0 | ||||||||||||||||||||||||
649 | a[1] = (a[0] == Qt::AlignLeft
never executed: a[1] = (a[0] == Qt::AlignLeft || a[0] == Qt::AlignRight) ? Qt::AlignVCenter : Qt::AlignHCenter; | 0 | ||||||||||||||||||||||||
650 | return never executed: a[0] | a[1];return a[0] | a[1]; never executed: return a[0] | a[1]; | 0 | ||||||||||||||||||||||||
651 | } | - | ||||||||||||||||||||||||
652 | - | |||||||||||||||||||||||||
653 | static ColorData parseColorValue(QCss::Value v) | - | ||||||||||||||||||||||||
654 | { | - | ||||||||||||||||||||||||
655 | if (v.type == Value::Identifier
| 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
| 0 | ||||||||||||||||||||||||
661 | return never executed: qvariant_cast<QColor>(v.variant);return qvariant_cast<QColor>(v.variant); never executed: return qvariant_cast<QColor>(v.variant); | 0 | ||||||||||||||||||||||||
662 | - | |||||||||||||||||||||||||
663 | if (v.type == Value::KnownIdentifier
| 0 | ||||||||||||||||||||||||
664 | return never executed: QColor(Qt::transparent);return QColor(Qt::transparent); never executed: return QColor(Qt::transparent); | 0 | ||||||||||||||||||||||||
665 | - | |||||||||||||||||||||||||
666 | if (v.type != Value::Function
| 0 | ||||||||||||||||||||||||
667 | return never executed: ColorData();return ColorData(); never executed: return ColorData(); | 0 | ||||||||||||||||||||||||
668 | - | |||||||||||||||||||||||||
669 | QStringList lst = v.variant.toStringList(); | - | ||||||||||||||||||||||||
670 | if (lst.count() != 2
| 0 | ||||||||||||||||||||||||
671 | return never executed: ColorData();return ColorData(); never executed: return ColorData(); | 0 | ||||||||||||||||||||||||
672 | - | |||||||||||||||||||||||||
673 | if ((
| 0 | ||||||||||||||||||||||||
674 | int role = findKnownValue(lst.at(1).trimmed(), values, NumKnownValues); | - | ||||||||||||||||||||||||
675 | if (role >= Value_FirstColorRole
| 0 | ||||||||||||||||||||||||
676 | return never executed: (QPalette::ColorRole)(role-Value_FirstColorRole);return (QPalette::ColorRole)(role-Value_FirstColorRole); never executed: return (QPalette::ColorRole)(role-Value_FirstColorRole); | 0 | ||||||||||||||||||||||||
677 | - | |||||||||||||||||||||||||
678 | return never executed: ColorData();return 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()
| 0 | ||||||||||||||||||||||||
686 | return never executed: ColorData();return ColorData(); never executed: return ColorData(); | 0 | ||||||||||||||||||||||||
687 | - | |||||||||||||||||||||||||
688 | QVector<QCss::Value> colorDigits; | - | ||||||||||||||||||||||||
689 | if (!p.parseExpr(&colorDigits)
| 0 | ||||||||||||||||||||||||
690 | return never executed: ColorData();return ColorData(); never executed: return ColorData(); | 0 | ||||||||||||||||||||||||
691 | const int tokenCount = colorDigits.count(); | - | ||||||||||||||||||||||||
692 | - | |||||||||||||||||||||||||
693 | for (int i = 0; i < qMin(tokenCount, 7)
| 0 | ||||||||||||||||||||||||
694 | if (colorDigits.at(i).type == Value::Percentage
| 0 | ||||||||||||||||||||||||
695 | colorDigits[i].variant = colorDigits.at(i).variant.toReal() * (255. / 100.); | - | ||||||||||||||||||||||||
696 | colorDigits[i].type = Value::Number; | - | ||||||||||||||||||||||||
697 | } never executed: else if (colorDigits.at(i).type != Value::Numberend of block
| 0 | ||||||||||||||||||||||||
698 | return never executed: ColorData();return ColorData(); never executed: return ColorData(); | 0 | ||||||||||||||||||||||||
699 | } | - | ||||||||||||||||||||||||
700 | } never executed: end of block | 0 | ||||||||||||||||||||||||
701 | - | |||||||||||||||||||||||||
702 | - | |||||||||||||||||||||||||
703 | if (tokenCount < 5
| 0 | ||||||||||||||||||||||||
704 | return never executed: ColorData();return 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
| 0 | ||||||||||||||||||||||||
711 | int alphaValue = colorDigits.at(6).variant.toInt(); | - | ||||||||||||||||||||||||
712 | if (rgba
| 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: rgbreturn rgb ? QColor::fromRgb(v1, v2, v3, alpha) : QColor::fromHsv(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 | - | |||||||||||||||||||||||||
722 | static QColor colorFromData(const ColorData& c, const QPalette &pal) | - | ||||||||||||||||||||||||
723 | { | - | ||||||||||||||||||||||||
724 | if (c.type == ColorData::Color
| 0 | ||||||||||||||||||||||||
725 | return never executed: c.color;return c.color; never executed: return c.color; | 0 | ||||||||||||||||||||||||
726 | } else if (c.type == ColorData::Role
| 0 | ||||||||||||||||||||||||
727 | return never executed: pal.color(c.role);return pal.color(c.role); never executed: return pal.color(c.role); | 0 | ||||||||||||||||||||||||
728 | } | - | ||||||||||||||||||||||||
729 | return never executed: QColor();return QColor(); never executed: return QColor(); | 0 | ||||||||||||||||||||||||
730 | } | - | ||||||||||||||||||||||||
731 | - | |||||||||||||||||||||||||
732 | static BrushData parseBrushValue(const QCss::Value &v, const QPalette &pal) | - | ||||||||||||||||||||||||
733 | { | - | ||||||||||||||||||||||||
734 | ColorData c = parseColorValue(v); | - | ||||||||||||||||||||||||
735 | if (c.type == ColorData::Color
| 0 | ||||||||||||||||||||||||
736 | return never executed: QBrush(c.color);return QBrush(c.color); never executed: return QBrush(c.color); | 0 | ||||||||||||||||||||||||
737 | } else if (c.type == ColorData::Role
| 0 | ||||||||||||||||||||||||
738 | return never executed: c.role;return c.role; never executed: return c.role; | 0 | ||||||||||||||||||||||||
739 | } | - | ||||||||||||||||||||||||
740 | - | |||||||||||||||||||||||||
741 | if (v.type != Value::Function
| 0 | ||||||||||||||||||||||||
742 | return never executed: BrushData();return BrushData(); never executed: return BrushData(); | 0 | ||||||||||||||||||||||||
743 | - | |||||||||||||||||||||||||
744 | QStringList lst = v.variant.toStringList(); | - | ||||||||||||||||||||||||
745 | if (lst.count() != 2
| 0 | ||||||||||||||||||||||||
746 | return never executed: BrushData();return 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 ((
| 0 | ||||||||||||||||||||||||
753 | return never executed: BrushData();return 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()
| 0 | ||||||||||||||||||||||||
765 | parser.skipSpace(); | - | ||||||||||||||||||||||||
766 | if (!parser.test(IDENT)
| 0 | ||||||||||||||||||||||||
767 | return never executed: BrushData();return BrushData(); never executed: return BrushData(); | 0 | ||||||||||||||||||||||||
768 | QString attr = parser.lexem(); | - | ||||||||||||||||||||||||
769 | parser.skipSpace(); | - | ||||||||||||||||||||||||
770 | if (!parser.test(COLON)
| 0 | ||||||||||||||||||||||||
771 | return never executed: BrushData();return BrushData(); never executed: return BrushData(); | 0 | ||||||||||||||||||||||||
772 | parser.skipSpace(); | - | ||||||||||||||||||||||||
773 | if (attr.compare(QLatin1String("stop"), Qt::CaseInsensitive) == 0
| 0 | ||||||||||||||||||||||||
774 | QCss::Value stop, color; | - | ||||||||||||||||||||||||
775 | parser.next(); | - | ||||||||||||||||||||||||
776 | if (!parser.parseTerm(&stop)
never executed: BrushData();return BrushData(); never executed: return BrushData(); | 0 | ||||||||||||||||||||||||
777 | parser.skipSpace(); | - | ||||||||||||||||||||||||
778 | parser.next(); | - | ||||||||||||||||||||||||
779 | if (!parser.parseTerm(&color)
never executed: BrushData();return BrushData(); never executed: return BrushData(); | 0 | ||||||||||||||||||||||||
780 | ColorData cd = parseColorValue(color); | - | ||||||||||||||||||||||||
781 | if(cd.type == ColorData::Role
| 0 | ||||||||||||||||||||||||
782 | dependsOnThePalette = true; never executed: dependsOnThePalette = true; | 0 | ||||||||||||||||||||||||
783 | stops.append(QGradientStop(stop.variant.toReal(), colorFromData(cd, pal))); | - | ||||||||||||||||||||||||
784 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
785 | parser.next(); | - | ||||||||||||||||||||||||
786 | QCss::Value value; | - | ||||||||||||||||||||||||
787 | (void)parser.parseTerm(&value); | - | ||||||||||||||||||||||||
788 | if (attr.compare(QLatin1String("spread"), Qt::CaseInsensitive) == 0
| 0 | ||||||||||||||||||||||||
789 | spread = spreads.indexOf(value.variant.toString()); | - | ||||||||||||||||||||||||
790 | } never executed: else {end of block | 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
| 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
| 0 | ||||||||||||||||||||||||
804 | lg.setSpread(QGradient::Spread(spread)); never executed: lg.setSpread(QGradient::Spread(spread)); | 0 | ||||||||||||||||||||||||
805 | BrushData bd = QBrush(lg); | - | ||||||||||||||||||||||||
806 | if (dependsOnThePalette
| 0 | ||||||||||||||||||||||||
807 | bd.type = BrushData::DependsOnThePalette; never executed: bd.type = BrushData::DependsOnThePalette; | 0 | ||||||||||||||||||||||||
808 | return never executed: bd;return bd; never executed: return bd; | 0 | ||||||||||||||||||||||||
809 | } | - | ||||||||||||||||||||||||
810 | - | |||||||||||||||||||||||||
811 | if (gradType == 1
| 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
| 0 | ||||||||||||||||||||||||
818 | rg.setSpread(QGradient::Spread(spread)); never executed: rg.setSpread(QGradient::Spread(spread)); | 0 | ||||||||||||||||||||||||
819 | BrushData bd = QBrush(rg); | - | ||||||||||||||||||||||||
820 | if (dependsOnThePalette
| 0 | ||||||||||||||||||||||||
821 | bd.type = BrushData::DependsOnThePalette; never executed: bd.type = BrushData::DependsOnThePalette; | 0 | ||||||||||||||||||||||||
822 | return never executed: bd;return bd; never executed: return bd; | 0 | ||||||||||||||||||||||||
823 | } | - | ||||||||||||||||||||||||
824 | - | |||||||||||||||||||||||||
825 | if (gradType == 2
| 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
| 0 | ||||||||||||||||||||||||
831 | cg.setSpread(QGradient::Spread(spread)); never executed: cg.setSpread(QGradient::Spread(spread)); | 0 | ||||||||||||||||||||||||
832 | BrushData bd = QBrush(cg); | - | ||||||||||||||||||||||||
833 | if (dependsOnThePalette
| 0 | ||||||||||||||||||||||||
834 | bd.type = BrushData::DependsOnThePalette; never executed: bd.type = BrushData::DependsOnThePalette; | 0 | ||||||||||||||||||||||||
835 | return never executed: bd;return bd; never executed: return bd; | 0 | ||||||||||||||||||||||||
836 | } | - | ||||||||||||||||||||||||
837 | - | |||||||||||||||||||||||||
838 | return never executed: BrushData();return BrushData(); never executed: return BrushData(); | 0 | ||||||||||||||||||||||||
839 | } | - | ||||||||||||||||||||||||
840 | - | |||||||||||||||||||||||||
841 | static QBrush brushFromData(const BrushData& c, const QPalette &pal) | - | ||||||||||||||||||||||||
842 | { | - | ||||||||||||||||||||||||
843 | if (c.type == BrushData::Role
| 0 | ||||||||||||||||||||||||
844 | return never executed: pal.color(c.role);return pal.color(c.role); never executed: return pal.color(c.role); | 0 | ||||||||||||||||||||||||
845 | } else { | - | ||||||||||||||||||||||||
846 | return never executed: c.brush;return c.brush; never executed: return c.brush; | 0 | ||||||||||||||||||||||||
847 | } | - | ||||||||||||||||||||||||
848 | } | - | ||||||||||||||||||||||||
849 | - | |||||||||||||||||||||||||
850 | static BorderStyle parseStyleValue(QCss::Value v) | - | ||||||||||||||||||||||||
851 | { | - | ||||||||||||||||||||||||
852 | if (v.type == Value::KnownIdentifier
| 0 | ||||||||||||||||||||||||
853 | switch (v.variant.toInt()) { | - | ||||||||||||||||||||||||
854 | case never executed: Value_None:case Value_None: never executed: case Value_None: | 0 | ||||||||||||||||||||||||
855 | return never executed: BorderStyle_None;return BorderStyle_None; never executed: return BorderStyle_None; | 0 | ||||||||||||||||||||||||
856 | case never executed: Value_Dotted:case Value_Dotted: never executed: case Value_Dotted: | 0 | ||||||||||||||||||||||||
857 | return never executed: BorderStyle_Dotted;return BorderStyle_Dotted; never executed: return BorderStyle_Dotted; | 0 | ||||||||||||||||||||||||
858 | case never executed: Value_Dashed:case Value_Dashed: never executed: case Value_Dashed: | 0 | ||||||||||||||||||||||||
859 | return never executed: BorderStyle_Dashed;return BorderStyle_Dashed; never executed: return BorderStyle_Dashed; | 0 | ||||||||||||||||||||||||
860 | case never executed: Value_Solid:case Value_Solid: never executed: case Value_Solid: | 0 | ||||||||||||||||||||||||
861 | return never executed: BorderStyle_Solid;return BorderStyle_Solid; never executed: return BorderStyle_Solid; | 0 | ||||||||||||||||||||||||
862 | case never executed: Value_Double:case Value_Double: never executed: case Value_Double: | 0 | ||||||||||||||||||||||||
863 | return never executed: BorderStyle_Double;return BorderStyle_Double; never executed: return BorderStyle_Double; | 0 | ||||||||||||||||||||||||
864 | case never executed: Value_DotDash:case Value_DotDash: never executed: case Value_DotDash: | 0 | ||||||||||||||||||||||||
865 | return never executed: BorderStyle_DotDash;return BorderStyle_DotDash; never executed: return BorderStyle_DotDash; | 0 | ||||||||||||||||||||||||
866 | case never executed: Value_DotDotDash:case Value_DotDotDash: never executed: case Value_DotDotDash: | 0 | ||||||||||||||||||||||||
867 | return never executed: BorderStyle_DotDotDash;return BorderStyle_DotDotDash; never executed: return BorderStyle_DotDotDash; | 0 | ||||||||||||||||||||||||
868 | case never executed: Value_Groove:case Value_Groove: never executed: case Value_Groove: | 0 | ||||||||||||||||||||||||
869 | return never executed: BorderStyle_Groove;return BorderStyle_Groove; never executed: return BorderStyle_Groove; | 0 | ||||||||||||||||||||||||
870 | case never executed: Value_Ridge:case Value_Ridge: never executed: case Value_Ridge: | 0 | ||||||||||||||||||||||||
871 | return never executed: BorderStyle_Ridge;return BorderStyle_Ridge; never executed: return BorderStyle_Ridge; | 0 | ||||||||||||||||||||||||
872 | case never executed: Value_Inset:case Value_Inset: never executed: case Value_Inset: | 0 | ||||||||||||||||||||||||
873 | return never executed: BorderStyle_Inset;return BorderStyle_Inset; never executed: return BorderStyle_Inset; | 0 | ||||||||||||||||||||||||
874 | case never executed: Value_Outset:case Value_Outset: never executed: case Value_Outset: | 0 | ||||||||||||||||||||||||
875 | return never executed: BorderStyle_Outset;return BorderStyle_Outset; never executed: return BorderStyle_Outset; | 0 | ||||||||||||||||||||||||
876 | case never executed: Value_Native:case Value_Native: never executed: case Value_Native: | 0 | ||||||||||||||||||||||||
877 | return never executed: BorderStyle_Native;return 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: BorderStyle_Unknown;return BorderStyle_Unknown; never executed: return BorderStyle_Unknown; | 0 | ||||||||||||||||||||||||
884 | } | - | ||||||||||||||||||||||||
885 | - | |||||||||||||||||||||||||
886 | void ValueExtractor::borderValue(const Declaration &decl, int *width, QCss::BorderStyle *style, QBrush *color) | - | ||||||||||||||||||||||||
887 | { | - | ||||||||||||||||||||||||
888 | if (decl.d->parsed.isValid()
| 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
| 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()
| 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
| 0 | ||||||||||||||||||||||||
910 | data.width = lengthValue(decl.d->values.at(i)); | - | ||||||||||||||||||||||||
911 | *width = lengthValueFromData(data.width, f); | - | ||||||||||||||||||||||||
912 | if (++
| 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
| 0 | ||||||||||||||||||||||||
920 | *style = data.style; | - | ||||||||||||||||||||||||
921 | if (++
| 0 | ||||||||||||||||||||||||
922 | decl.d->parsed = QVariant::fromValue<BorderData>(data); | - | ||||||||||||||||||||||||
923 | return; never executed: return; | 0 | ||||||||||||||||||||||||
924 | } | - | ||||||||||||||||||||||||
925 | } never executed: else {end of block | 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
| 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 | - | |||||||||||||||||||||||||
935 | static 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()
| 0 | ||||||||||||||||||||||||
943 | const QCss::Value &v = values.at(i); | - | ||||||||||||||||||||||||
944 | if (v.type == Value::Uri
| 0 | ||||||||||||||||||||||||
945 | *image = v.variant.toString(); | - | ||||||||||||||||||||||||
946 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
947 | } else if (v.type == Value::KnownIdentifier
| 0 | ||||||||||||||||||||||||
948 | *image = QString(); | - | ||||||||||||||||||||||||
949 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
950 | } else if (v.type == Value::KnownIdentifier
| 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
| 0 | ||||||||||||||||||||||||
957 | *repeat = repeatAttempt; | - | ||||||||||||||||||||||||
958 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
959 | } | - | ||||||||||||||||||||||||
960 | - | |||||||||||||||||||||||||
961 | if (v.type == Value::KnownIdentifier
| 0 | ||||||||||||||||||||||||
962 | const int start = i; | - | ||||||||||||||||||||||||
963 | int count = 1; | - | ||||||||||||||||||||||||
964 | if (i < values.count() - 1
| 0 | ||||||||||||||||||||||||
965 | && values.at(i + 1).type == Value::KnownIdentifier
| 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
| 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 | - | |||||||||||||||||||||||||
981 | bool 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()
| 0 | ||||||||||||||||||||||||
987 | const Declaration &decl = declarations.at(i); | - | ||||||||||||||||||||||||
988 | if (decl.d->values.isEmpty()
| 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: BackgroundColor:case BackgroundColor: never executed: case BackgroundColor: | 0 | ||||||||||||||||||||||||
993 | *brush = decl.brushValue(); | - | ||||||||||||||||||||||||
994 | break; never executed: break; | 0 | ||||||||||||||||||||||||
995 | case never executed: BackgroundImage:case BackgroundImage: never executed: case BackgroundImage: | 0 | ||||||||||||||||||||||||
996 | if (val.type == Value::Uri
| 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: BackgroundRepeat:case BackgroundRepeat: never executed: case BackgroundRepeat: | 0 | ||||||||||||||||||||||||
1000 | if (decl.d->parsed.isValid()
| 0 | ||||||||||||||||||||||||
1001 | *repeat = static_cast<Repeat>(decl.d->parsed.toInt()); | - | ||||||||||||||||||||||||
1002 | } never executed: else {end of block | 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: BackgroundPosition:case BackgroundPosition: never executed: case BackgroundPosition: | 0 | ||||||||||||||||||||||||
1009 | *alignment = decl.alignmentValue(); | - | ||||||||||||||||||||||||
1010 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1011 | case never executed: BackgroundOrigin:case BackgroundOrigin: never executed: case BackgroundOrigin: | 0 | ||||||||||||||||||||||||
1012 | *origin = decl.originValue(); | - | ||||||||||||||||||||||||
1013 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1014 | case never executed: BackgroundClip:case BackgroundClip: never executed: case BackgroundClip: | 0 | ||||||||||||||||||||||||
1015 | *clip = decl.originValue(); | - | ||||||||||||||||||||||||
1016 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1017 | case never executed: Background:case Background: never executed: case Background: | 0 | ||||||||||||||||||||||||
1018 | if (decl.d->parsed.isValid()
| 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: else {end of block | 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
| 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: BackgroundAttachment:case BackgroundAttachment: never executed: case BackgroundAttachment: | 0 | ||||||||||||||||||||||||
1035 | *attachment = decl.attachmentValue(); | - | ||||||||||||||||||||||||
1036 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1037 | default never executed: :default: never executed: continue;default: never executed: continue; | 0 | ||||||||||||||||||||||||
1038 | } | - | ||||||||||||||||||||||||
1039 | hit = true; | - | ||||||||||||||||||||||||
1040 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1041 | return never executed: hit;return hit; never executed: return hit; | 0 | ||||||||||||||||||||||||
1042 | } | - | ||||||||||||||||||||||||
1043 | - | |||||||||||||||||||||||||
1044 | static bool setFontSizeFromValue(QCss::Value value, QFont *font, int *fontSizeAdjustment) | - | ||||||||||||||||||||||||
1045 | { | - | ||||||||||||||||||||||||
1046 | if (value.type == Value::KnownIdentifier
| 0 | ||||||||||||||||||||||||
1047 | bool valid = true; | - | ||||||||||||||||||||||||
1048 | switch (value.variant.toInt()) { | - | ||||||||||||||||||||||||
1049 | case never executed: Value_Small:case Value_Small: never executed: *fontSizeAdjustment = -1; break;case Value_Small: never executed: break; | 0 | ||||||||||||||||||||||||
1050 | case never executed: Value_Medium:case Value_Medium: never executed: *fontSizeAdjustment = 0; break;case Value_Medium: never executed: break; | 0 | ||||||||||||||||||||||||
1051 | case never executed: Value_Large:case Value_Large: never executed: *fontSizeAdjustment = 1; break;case Value_Large: never executed: break; | 0 | ||||||||||||||||||||||||
1052 | case never executed: Value_XLarge:case Value_XLarge: never executed: *fontSizeAdjustment = 2; break;case Value_XLarge: never executed: break; | 0 | ||||||||||||||||||||||||
1053 | case never executed: Value_XXLarge:case Value_XXLarge: never executed: *fontSizeAdjustment = 3; break;case Value_XXLarge: never executed: break; | 0 | ||||||||||||||||||||||||
1054 | default never executed: :default: never executed: valid = false; break;default: never executed: break; | 0 | ||||||||||||||||||||||||
1055 | } | - | ||||||||||||||||||||||||
1056 | return never executed: valid;return valid; never executed: return valid; | 0 | ||||||||||||||||||||||||
1057 | } | - | ||||||||||||||||||||||||
1058 | if (value.type != Value::Length
| 0 | ||||||||||||||||||||||||
1059 | return never executed: false;return 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)
| 0 | ||||||||||||||||||||||||
1064 | s.chop(2); | - | ||||||||||||||||||||||||
1065 | value.variant = s; | - | ||||||||||||||||||||||||
1066 | if (value.variant.convert((QVariant::Type)qMetaTypeId<qreal>())
| 0 | ||||||||||||||||||||||||
1067 | font->setPointSizeF(value.variant.toReal()); | - | ||||||||||||||||||||||||
1068 | valid = true; | - | ||||||||||||||||||||||||
1069 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1070 | } never executed: else if (s.endsWith(QLatin1String("px"), Qt::CaseInsensitive)end of block
| 0 | ||||||||||||||||||||||||
1071 | s.chop(2); | - | ||||||||||||||||||||||||
1072 | value.variant = s; | - | ||||||||||||||||||||||||
1073 | if (value.variant.convert(QVariant::Int)
| 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: valid;return valid; never executed: return valid; | 0 | ||||||||||||||||||||||||
1079 | } | - | ||||||||||||||||||||||||
1080 | - | |||||||||||||||||||||||||
1081 | static bool setFontStyleFromValue(const QCss::Value &value, QFont *font) | - | ||||||||||||||||||||||||
1082 | { | - | ||||||||||||||||||||||||
1083 | if (value.type != Value::KnownIdentifier
| 0 | ||||||||||||||||||||||||
1084 | return never executed: false ;return false ; never executed: return false ; | 0 | ||||||||||||||||||||||||
1085 | switch (value.variant.toInt()) { | - | ||||||||||||||||||||||||
1086 | case never executed: Value_Normal:case Value_Normal: never executed: font->setStyle(QFont::StyleNormal); returncase Value_Normal: never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
1087 | case never executed: Value_Italic:case Value_Italic: never executed: font->setStyle(QFont::StyleItalic); returncase Value_Italic: never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
1088 | case never executed: Value_Oblique:case Value_Oblique: never executed: font->setStyle(QFont::StyleOblique); returncase Value_Oblique: never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
1089 | default never executed: :default: never executed: break;default: never executed: break; | 0 | ||||||||||||||||||||||||
1090 | } | - | ||||||||||||||||||||||||
1091 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
1092 | } | - | ||||||||||||||||||||||||
1093 | - | |||||||||||||||||||||||||
1094 | static bool setFontWeightFromValue(const QCss::Value &value, QFont *font) | - | ||||||||||||||||||||||||
1095 | { | - | ||||||||||||||||||||||||
1096 | if (value.type == Value::KnownIdentifier
| 0 | ||||||||||||||||||||||||
1097 | switch (value.variant.toInt()) { | - | ||||||||||||||||||||||||
1098 | case never executed: Value_Normal:case Value_Normal: never executed: font->setWeight(QFont::Normal); returncase Value_Normal: never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
1099 | case never executed: Value_Bold:case Value_Bold: never executed: font->setWeight(QFont::Bold); returncase Value_Bold: never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
1100 | default never executed: :default: never executed: break;default: never executed: break; | 0 | ||||||||||||||||||||||||
1101 | } | - | ||||||||||||||||||||||||
1102 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
1103 | } | - | ||||||||||||||||||||||||
1104 | if (value.type != Value::Number
| 0 | ||||||||||||||||||||||||
1105 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
1106 | font->setWeight(qMin(value.variant.toInt() / 8, 99)); | - | ||||||||||||||||||||||||
1107 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
1108 | } | - | ||||||||||||||||||||||||
1109 | - | |||||||||||||||||||||||||
1110 | - | |||||||||||||||||||||||||
1111 | - | |||||||||||||||||||||||||
1112 | - | |||||||||||||||||||||||||
1113 | - | |||||||||||||||||||||||||
1114 | - | |||||||||||||||||||||||||
1115 | static 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()
| 0 | ||||||||||||||||||||||||
1120 | const QCss::Value &v = values.at(i); | - | ||||||||||||||||||||||||
1121 | if (v.type == Value::TermOperatorComma
| 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()
| 0 | ||||||||||||||||||||||||
1128 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1129 | if (shouldAddSpace
| 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()
| 0 | ||||||||||||||||||||||||
1135 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
1136 | font->setFamily(family); | - | ||||||||||||||||||||||||
1137 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
1138 | } | - | ||||||||||||||||||||||||
1139 | - | |||||||||||||||||||||||||
1140 | static void setTextDecorationFromValues(const QVector<QCss::Value> &values, QFont *font) | - | ||||||||||||||||||||||||
1141 | { | - | ||||||||||||||||||||||||
1142 | for (int i = 0; i < values.count()
| 0 | ||||||||||||||||||||||||
1143 | if (values.at(i).type != Value::KnownIdentifier
| 0 | ||||||||||||||||||||||||
1144 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
1145 | switch (values.at(i).variant.toInt()) { | - | ||||||||||||||||||||||||
1146 | case never executed: Value_Underline:case Value_Underline: never executed: font->setUnderline(true); break;case Value_Underline: never executed: break; | 0 | ||||||||||||||||||||||||
1147 | case never executed: Value_Overline:case Value_Overline: never executed: font->setOverline(true); break;case Value_Overline: never executed: break; | 0 | ||||||||||||||||||||||||
1148 | case never executed: Value_LineThrough:case Value_LineThrough: never executed: font->setStrikeOut(true); break;case Value_LineThrough: never executed: break; | 0 | ||||||||||||||||||||||||
1149 | case never executed: Value_None:case 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: break;default: never executed: break; | 0 | ||||||||||||||||||||||||
1155 | } | - | ||||||||||||||||||||||||
1156 | } | - | ||||||||||||||||||||||||
1157 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1158 | - | |||||||||||||||||||||||||
1159 | static 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()
| 0 | ||||||||||||||||||||||||
1167 | if (setFontStyleFromValue(values.at(i), font)
| 0 | ||||||||||||||||||||||||
1168 | || setFontWeightFromValue(values.at(i), font)
| 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()
| 0 | ||||||||||||||||||||||||
1175 | setFontSizeFromValue(values.at(i), font, fontSizeAdjustment); | - | ||||||||||||||||||||||||
1176 | ++i; | - | ||||||||||||||||||||||||
1177 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1178 | - | |||||||||||||||||||||||||
1179 | if (i < values.count()
| 0 | ||||||||||||||||||||||||
1180 | setFontFamilyFromValues(values, font, i); | - | ||||||||||||||||||||||||
1181 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1182 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1183 | - | |||||||||||||||||||||||||
1184 | static void setFontVariantFromValue(const QCss::Value &value, QFont *font) | - | ||||||||||||||||||||||||
1185 | { | - | ||||||||||||||||||||||||
1186 | if (value.type == Value::KnownIdentifier
| 0 | ||||||||||||||||||||||||
1187 | switch (value.variant.toInt()) { | - | ||||||||||||||||||||||||
1188 | case never executed: Value_Normal:case Value_Normal: never executed: font->setCapitalization(QFont::MixedCase); break;case Value_Normal: never executed: break; | 0 | ||||||||||||||||||||||||
1189 | case never executed: Value_SmallCaps:case Value_SmallCaps: never executed: font->setCapitalization(QFont::SmallCaps); break;case Value_SmallCaps: never executed: break; | 0 | ||||||||||||||||||||||||
1190 | default never executed: :default: never executed: break;default: never executed: break; | 0 | ||||||||||||||||||||||||
1191 | } | - | ||||||||||||||||||||||||
1192 | } | - | ||||||||||||||||||||||||
1193 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1194 | - | |||||||||||||||||||||||||
1195 | static void setTextTransformFromValue(const QCss::Value &value, QFont *font) | - | ||||||||||||||||||||||||
1196 | { | - | ||||||||||||||||||||||||
1197 | if (value.type == Value::KnownIdentifier
| 0 | ||||||||||||||||||||||||
1198 | switch (value.variant.toInt()) { | - | ||||||||||||||||||||||||
1199 | case never executed: Value_None:case Value_None: never executed: font->setCapitalization(QFont::MixedCase); break;case Value_None: never executed: break; | 0 | ||||||||||||||||||||||||
1200 | case never executed: Value_Uppercase:case Value_Uppercase: never executed: font->setCapitalization(QFont::AllUppercase); break;case Value_Uppercase: never executed: break; | 0 | ||||||||||||||||||||||||
1201 | case never executed: Value_Lowercase:case Value_Lowercase: never executed: font->setCapitalization(QFont::AllLowercase); break;case Value_Lowercase: never executed: break; | 0 | ||||||||||||||||||||||||
1202 | default never executed: :default: never executed: break;default: never executed: break; | 0 | ||||||||||||||||||||||||
1203 | } | - | ||||||||||||||||||||||||
1204 | } | - | ||||||||||||||||||||||||
1205 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1206 | - | |||||||||||||||||||||||||
1207 | bool ValueExtractor::extractFont(QFont *font, int *fontSizeAdjustment) | - | ||||||||||||||||||||||||
1208 | { | - | ||||||||||||||||||||||||
1209 | if (fontExtracted
| 0 | ||||||||||||||||||||||||
1210 | *font = f; | - | ||||||||||||||||||||||||
1211 | *fontSizeAdjustment = adjustment; | - | ||||||||||||||||||||||||
1212 | return never executed: fontExtracted == 1;return fontExtracted == 1; never executed: return fontExtracted == 1; | 0 | ||||||||||||||||||||||||
1213 | } | - | ||||||||||||||||||||||||
1214 | - | |||||||||||||||||||||||||
1215 | bool hit = false; | - | ||||||||||||||||||||||||
1216 | for (int i = 0; i < declarations.count()
| 0 | ||||||||||||||||||||||||
1217 | const Declaration &decl = declarations.at(i); | - | ||||||||||||||||||||||||
1218 | if (decl.d->values.isEmpty()
| 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: FontSize:case FontSize: never executed: setFontSizeFromValue(val, font, fontSizeAdjustment); break;case FontSize: never executed: break; | 0 | ||||||||||||||||||||||||
1223 | case never executed: FontStyle:case FontStyle: never executed: setFontStyleFromValue(val, font); break;case FontStyle: never executed: break; | 0 | ||||||||||||||||||||||||
1224 | case never executed: FontWeight:case FontWeight: never executed: setFontWeightFromValue(val, font); break;case FontWeight: never executed: break; | 0 | ||||||||||||||||||||||||
1225 | case never executed: FontFamily:case FontFamily: never executed: setFontFamilyFromValues(decl.d->values, font); break;case FontFamily: never executed: break; | 0 | ||||||||||||||||||||||||
1226 | case never executed: TextDecoration:case TextDecoration: never executed: setTextDecorationFromValues(decl.d->values, font); break;case TextDecoration: never executed: break; | 0 | ||||||||||||||||||||||||
1227 | case never executed: Font:case Font: never executed: parseShorthandFontProperty(decl.d->values, font, fontSizeAdjustment); break;case Font: never executed: break; | 0 | ||||||||||||||||||||||||
1228 | case never executed: FontVariant:case FontVariant: never executed: setFontVariantFromValue(val, font); break;case FontVariant: never executed: break; | 0 | ||||||||||||||||||||||||
1229 | case never executed: TextTransform:case TextTransform: never executed: setTextTransformFromValue(val, font); break;case TextTransform: never executed: break; | 0 | ||||||||||||||||||||||||
1230 | default never executed: :default: never executed: continue;default: 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
| 0 | ||||||||||||||||||||||||
1238 | return never executed: hit;return hit; never executed: return hit; | 0 | ||||||||||||||||||||||||
1239 | } | - | ||||||||||||||||||||||||
1240 | - | |||||||||||||||||||||||||
1241 | bool ValueExtractor::extractPalette(QBrush *fg, QBrush *sfg, QBrush *sbg, QBrush *abg) | - | ||||||||||||||||||||||||
1242 | { | - | ||||||||||||||||||||||||
1243 | bool hit = false; | - | ||||||||||||||||||||||||
1244 | for (int i = 0; i < declarations.count()
| 0 | ||||||||||||||||||||||||
1245 | const Declaration &decl = declarations.at(i); | - | ||||||||||||||||||||||||
1246 | switch (decl.d->propertyId) { | - | ||||||||||||||||||||||||
1247 | case never executed: Color:case Color: never executed: *fg = decl.brushValue(pal); break;case Color: never executed: break; | 0 | ||||||||||||||||||||||||
1248 | case never executed: QtSelectionForeground:case QtSelectionForeground: never executed: *sfg = decl.brushValue(pal); break;case QtSelectionForeground: never executed: break; | 0 | ||||||||||||||||||||||||
1249 | case never executed: QtSelectionBackground:case QtSelectionBackground: never executed: *sbg = decl.brushValue(pal); break;case QtSelectionBackground: never executed: break; | 0 | ||||||||||||||||||||||||
1250 | case never executed: QtAlternateBackground:case QtAlternateBackground: never executed: *abg = decl.brushValue(pal); break;case QtAlternateBackground: never executed: break; | 0 | ||||||||||||||||||||||||
1251 | default never executed: :default: never executed: continue;default: never executed: continue; | 0 | ||||||||||||||||||||||||
1252 | } | - | ||||||||||||||||||||||||
1253 | hit = true; | - | ||||||||||||||||||||||||
1254 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1255 | return never executed: hit;return hit; never executed: return hit; | 0 | ||||||||||||||||||||||||
1256 | } | - | ||||||||||||||||||||||||
1257 | - | |||||||||||||||||||||||||
1258 | void ValueExtractor::extractFont() | - | ||||||||||||||||||||||||
1259 | { | - | ||||||||||||||||||||||||
1260 | if (fontExtracted
| 0 | ||||||||||||||||||||||||
1261 | return; never executed: return; | 0 | ||||||||||||||||||||||||
1262 | int dummy = -255; | - | ||||||||||||||||||||||||
1263 | extractFont(&f, &dummy); | - | ||||||||||||||||||||||||
1264 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1265 | - | |||||||||||||||||||||||||
1266 | bool ValueExtractor::extractImage(QIcon *icon, Qt::Alignment *a, QSize *size) | - | ||||||||||||||||||||||||
1267 | { | - | ||||||||||||||||||||||||
1268 | bool hit = false; | - | ||||||||||||||||||||||||
1269 | for (int i = 0; i < declarations.count()
| 0 | ||||||||||||||||||||||||
1270 | const Declaration &decl = declarations.at(i); | - | ||||||||||||||||||||||||
1271 | switch (decl.d->propertyId) { | - | ||||||||||||||||||||||||
1272 | case never executed: QtImage:case QtImage: never executed: case QtImage: | 0 | ||||||||||||||||||||||||
1273 | *icon = decl.iconValue(); | - | ||||||||||||||||||||||||
1274 | if (decl.d->values.count() > 0
| 0 | ||||||||||||||||||||||||
1275 | - | |||||||||||||||||||||||||
1276 | QImageReader imageReader(decl.d->values.at(0).variant.toString()); | - | ||||||||||||||||||||||||
1277 | if ((*
| 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: QtImageAlignment:case QtImageAlignment: never executed: *a = decl.alignmentValue(); break;case QtImageAlignment: never executed: break; | 0 | ||||||||||||||||||||||||
1285 | default never executed: :default: never executed: continue;default: never executed: continue; | 0 | ||||||||||||||||||||||||
1286 | } | - | ||||||||||||||||||||||||
1287 | hit = true; | - | ||||||||||||||||||||||||
1288 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1289 | return never executed: hit;return hit; never executed: return hit; | 0 | ||||||||||||||||||||||||
1290 | } | - | ||||||||||||||||||||||||
1291 | - | |||||||||||||||||||||||||
1292 | - | |||||||||||||||||||||||||
1293 | - | |||||||||||||||||||||||||
1294 | QColor Declaration::colorValue(const QPalette &pal) const | - | ||||||||||||||||||||||||
1295 | { | - | ||||||||||||||||||||||||
1296 | if (d->values.count() != 1
| 0 | ||||||||||||||||||||||||
1297 | return never executed: QColor();return QColor(); never executed: return QColor(); | 0 | ||||||||||||||||||||||||
1298 | - | |||||||||||||||||||||||||
1299 | if (d->parsed.isValid()
| 0 | ||||||||||||||||||||||||
1300 | if (d->parsed.type() == QVariant::Color
| 0 | ||||||||||||||||||||||||
1301 | return never executed: qvariant_cast<QColor>(d->parsed);return qvariant_cast<QColor>(d->parsed); never executed: return qvariant_cast<QColor>(d->parsed); | 0 | ||||||||||||||||||||||||
1302 | if (d->parsed.type() == QVariant::Int
| 0 | ||||||||||||||||||||||||
1303 | return never executed: pal.color((QPalette::ColorRole)(d->parsed.toInt()));return 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
| 0 | ||||||||||||||||||||||||
1308 | d->parsed = QVariant::fromValue<int>(color.role); | - | ||||||||||||||||||||||||
1309 | return never executed: pal.color((QPalette::ColorRole)(color.role));return 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: color.color;return color.color; never executed: return color.color; | 0 | ||||||||||||||||||||||||
1313 | } | - | ||||||||||||||||||||||||
1314 | } | - | ||||||||||||||||||||||||
1315 | - | |||||||||||||||||||||||||
1316 | QBrush Declaration::brushValue(const QPalette &pal) const | - | ||||||||||||||||||||||||
1317 | { | - | ||||||||||||||||||||||||
1318 | if (d->values.count() != 1
| 0 | ||||||||||||||||||||||||
1319 | return never executed: QBrush();return QBrush(); never executed: return QBrush(); | 0 | ||||||||||||||||||||||||
1320 | - | |||||||||||||||||||||||||
1321 | if (d->parsed.isValid()
| 0 | ||||||||||||||||||||||||
1322 | if (d->parsed.type() == QVariant::Brush
| 0 | ||||||||||||||||||||||||
1323 | return never executed: qvariant_cast<QBrush>(d->parsed);return qvariant_cast<QBrush>(d->parsed); never executed: return qvariant_cast<QBrush>(d->parsed); | 0 | ||||||||||||||||||||||||
1324 | if (d->parsed.type() == QVariant::Int
| 0 | ||||||||||||||||||||||||
1325 | return never executed: pal.color((QPalette::ColorRole)(d->parsed.toInt()));return 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
| 0 | ||||||||||||||||||||||||
1331 | d->parsed = QVariant::fromValue<int>(data.role); | - | ||||||||||||||||||||||||
1332 | return never executed: pal.color((QPalette::ColorRole)(data.role));return pal.color((QPalette::ColorRole)(data.role)); never executed: return pal.color((QPalette::ColorRole)(data.role)); | 0 | ||||||||||||||||||||||||
1333 | } else { | - | ||||||||||||||||||||||||
1334 | if (data.type != BrushData::DependsOnThePalette
| 0 | ||||||||||||||||||||||||
1335 | d->parsed = QVariant::fromValue<QBrush>(data.brush); never executed: d->parsed = QVariant::fromValue<QBrush>(data.brush); | 0 | ||||||||||||||||||||||||
1336 | return never executed: data.brush;return data.brush; never executed: return data.brush; | 0 | ||||||||||||||||||||||||
1337 | } | - | ||||||||||||||||||||||||
1338 | } | - | ||||||||||||||||||||||||
1339 | - | |||||||||||||||||||||||||
1340 | void Declaration::brushValues(QBrush *c, const QPalette &pal) const | - | ||||||||||||||||||||||||
1341 | { | - | ||||||||||||||||||||||||
1342 | int needParse = 0x1f; | - | ||||||||||||||||||||||||
1343 | - | |||||||||||||||||||||||||
1344 | int i = 0; | - | ||||||||||||||||||||||||
1345 | if (d->parsed.isValid()
| 0 | ||||||||||||||||||||||||
1346 | needParse = 0; | - | ||||||||||||||||||||||||
1347 | QList<QVariant> v = d->parsed.toList(); | - | ||||||||||||||||||||||||
1348 | for (i = 0; i < qMin(v.count(), 4)
| 0 | ||||||||||||||||||||||||
1349 | if (v.at(i).type() == QVariant::Brush
| 0 | ||||||||||||||||||||||||
1350 | c[i] = qvariant_cast<QBrush>(v.at(i)); | - | ||||||||||||||||||||||||
1351 | } never executed: else if (v.at(i).type() == QVariant::Intend of block
| 0 | ||||||||||||||||||||||||
1352 | c[i] = pal.color((QPalette::ColorRole)(v.at(i).toInt())); | - | ||||||||||||||||||||||||
1353 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
1354 | needParse |= (1<<i); | - | ||||||||||||||||||||||||
1355 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1356 | } | - | ||||||||||||||||||||||||
1357 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1358 | if (needParse != 0
| 0 | ||||||||||||||||||||||||
1359 | QList<QVariant> v; | - | ||||||||||||||||||||||||
1360 | for (i = 0; i < qMin(d->values.count(), 4)
| 0 | ||||||||||||||||||||||||
1361 | if (!(needParse & (1<<i))
| 0 | ||||||||||||||||||||||||
1362 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
1363 | BrushData data = parseBrushValue(d->values.at(i), pal); | - | ||||||||||||||||||||||||
1364 | if(data.type == BrushData::Role
| 0 | ||||||||||||||||||||||||
1365 | v += QVariant::fromValue<int>(data.role); | - | ||||||||||||||||||||||||
1366 | c[i] = pal.color((QPalette::ColorRole)(data.role)); | - | ||||||||||||||||||||||||
1367 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
1368 | if (data.type != BrushData::DependsOnThePalette
| 0 | ||||||||||||||||||||||||
1369 | v += QVariant::fromValue<QBrush>(data.brush); | - | ||||||||||||||||||||||||
1370 | } never executed: else {end of block | 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
| 0 | ||||||||||||||||||||||||
1377 | d->parsed = v; never executed: d->parsed = v; | 0 | ||||||||||||||||||||||||
1378 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1379 | if (i == 0
never executed: c[0] = c[1] = c[2] = c[3] = QBrush(); | 0 | ||||||||||||||||||||||||
1380 | else if (i == 1
never executed: c[3] = c[2] = c[1] = c[0]; | 0 | ||||||||||||||||||||||||
1381 | else if (i == 2
never executed: c[2] = c[0], c[3] = c[1]; | 0 | ||||||||||||||||||||||||
1382 | else if (i == 3
never executed: c[3] = c[1]; | 0 | ||||||||||||||||||||||||
1383 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1384 | - | |||||||||||||||||||||||||
1385 | bool Declaration::realValue(qreal *real, const char *unit) const | - | ||||||||||||||||||||||||
1386 | { | - | ||||||||||||||||||||||||
1387 | if (d->values.count() != 1
| 0 | ||||||||||||||||||||||||
1388 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
1389 | const Value &v = d->values.at(0); | - | ||||||||||||||||||||||||
1390 | if (unit
| 0 | ||||||||||||||||||||||||
1391 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
1392 | QString s = v.variant.toString(); | - | ||||||||||||||||||||||||
1393 | if (unit
| 0 | ||||||||||||||||||||||||
1394 | if (!s.endsWith(QLatin1String(unit), Qt::CaseInsensitive)
| 0 | ||||||||||||||||||||||||
1395 | return never executed: false;return 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
| 0 | ||||||||||||||||||||||||
1401 | * never executed: real = val;*real = val; never executed: *real = val; | 0 | ||||||||||||||||||||||||
1402 | return never executed: ok;return ok; never executed: return ok; | 0 | ||||||||||||||||||||||||
1403 | } | - | ||||||||||||||||||||||||
1404 | - | |||||||||||||||||||||||||
1405 | static bool intValueHelper(const QCss::Value &v, int *i, const char *unit) | - | ||||||||||||||||||||||||
1406 | { | - | ||||||||||||||||||||||||
1407 | if (unit
| 0 | ||||||||||||||||||||||||
1408 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
1409 | QString s = v.variant.toString(); | - | ||||||||||||||||||||||||
1410 | if (unit
| 0 | ||||||||||||||||||||||||
1411 | if (!s.endsWith(QLatin1String(unit), Qt::CaseInsensitive)
| 0 | ||||||||||||||||||||||||
1412 | return never executed: false;return 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
| 0 | ||||||||||||||||||||||||
1418 | * never executed: i = val;*i = val; never executed: *i = val; | 0 | ||||||||||||||||||||||||
1419 | return never executed: ok;return ok; never executed: return ok; | 0 | ||||||||||||||||||||||||
1420 | } | - | ||||||||||||||||||||||||
1421 | - | |||||||||||||||||||||||||
1422 | bool Declaration::intValue(int *i, const char *unit) const | - | ||||||||||||||||||||||||
1423 | { | - | ||||||||||||||||||||||||
1424 | if (d->values.count() != 1
| 0 | ||||||||||||||||||||||||
1425 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
1426 | return never executed: intValueHelper(d->values.at(0), i, unit);return intValueHelper(d->values.at(0), i, unit); never executed: return intValueHelper(d->values.at(0), i, unit); | 0 | ||||||||||||||||||||||||
1427 | } | - | ||||||||||||||||||||||||
1428 | - | |||||||||||||||||||||||||
1429 | QSize Declaration::sizeValue() const | - | ||||||||||||||||||||||||
1430 | { | - | ||||||||||||||||||||||||
1431 | if (d->parsed.isValid()
| 0 | ||||||||||||||||||||||||
1432 | return never executed: qvariant_cast<QSize>(d->parsed);return 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
| 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
| 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: size;return size; never executed: return size; | 0 | ||||||||||||||||||||||||
1444 | } | - | ||||||||||||||||||||||||
1445 | - | |||||||||||||||||||||||||
1446 | QRect Declaration::rectValue() const | - | ||||||||||||||||||||||||
1447 | { | - | ||||||||||||||||||||||||
1448 | if (d->values.count() != 1
| 0 | ||||||||||||||||||||||||
1449 | return never executed: QRect();return QRect(); never executed: return QRect(); | 0 | ||||||||||||||||||||||||
1450 | - | |||||||||||||||||||||||||
1451 | if (d->parsed.isValid()
| 0 | ||||||||||||||||||||||||
1452 | return never executed: qvariant_cast<QRect>(d->parsed);return 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
| 0 | ||||||||||||||||||||||||
1456 | return never executed: QRect();return QRect(); never executed: return QRect(); | 0 | ||||||||||||||||||||||||
1457 | QStringList func = v.variant.toStringList(); | - | ||||||||||||||||||||||||
1458 | if (func.count() != 2
| 0 | ||||||||||||||||||||||||
1459 | return never executed: QRect();return QRect(); never executed: return QRect(); | 0 | ||||||||||||||||||||||||
1460 | QStringList args = func[1].split(QLatin1Char(' '), QString::SkipEmptyParts); | - | ||||||||||||||||||||||||
1461 | if (args.count() != 4
| 0 | ||||||||||||||||||||||||
1462 | return never executed: QRect();return 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: rect;return rect; never executed: return rect; | 0 | ||||||||||||||||||||||||
1466 | } | - | ||||||||||||||||||||||||
1467 | - | |||||||||||||||||||||||||
1468 | void Declaration::colorValues(QColor *c, const QPalette &pal) const | - | ||||||||||||||||||||||||
1469 | { | - | ||||||||||||||||||||||||
1470 | int i; | - | ||||||||||||||||||||||||
1471 | if (d->parsed.isValid()
| 0 | ||||||||||||||||||||||||
1472 | QList<QVariant> v = d->parsed.toList(); | - | ||||||||||||||||||||||||
1473 | for (i = 0; i < qMin(d->values.count(), 4)
| 0 | ||||||||||||||||||||||||
1474 | if (v.at(i).type() == QVariant::Color
| 0 | ||||||||||||||||||||||||
1475 | c[i] = qvariant_cast<QColor>(v.at(i)); | - | ||||||||||||||||||||||||
1476 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
1477 | c[i] = pal.color((QPalette::ColorRole)(v.at(i).toInt())); | - | ||||||||||||||||||||||||
1478 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1479 | } | - | ||||||||||||||||||||||||
1480 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
1481 | QList<QVariant> v; | - | ||||||||||||||||||||||||
1482 | for (i = 0; i < qMin(d->values.count(), 4)
| 0 | ||||||||||||||||||||||||
1483 | ColorData color = parseColorValue(d->values.at(i)); | - | ||||||||||||||||||||||||
1484 | if(color.type == ColorData::Role
| 0 | ||||||||||||||||||||||||
1485 | v += QVariant::fromValue<int>(color.role); | - | ||||||||||||||||||||||||
1486 | c[i] = pal.color((QPalette::ColorRole)(color.role)); | - | ||||||||||||||||||||||||
1487 | } never executed: else {end of block | 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
never executed: c[0] = c[1] = c[2] = c[3] = QColor(); | 0 | ||||||||||||||||||||||||
1496 | else if (i == 1
never executed: c[3] = c[2] = c[1] = c[0]; | 0 | ||||||||||||||||||||||||
1497 | else if (i == 2
never executed: c[2] = c[0], c[3] = c[1]; | 0 | ||||||||||||||||||||||||
1498 | else if (i == 3
never executed: c[3] = c[1]; | 0 | ||||||||||||||||||||||||
1499 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1500 | - | |||||||||||||||||||||||||
1501 | BorderStyle Declaration::styleValue() const | - | ||||||||||||||||||||||||
1502 | { | - | ||||||||||||||||||||||||
1503 | if (d->values.count() != 1
| 0 | ||||||||||||||||||||||||
1504 | return never executed: BorderStyle_None;return BorderStyle_None; never executed: return BorderStyle_None; | 0 | ||||||||||||||||||||||||
1505 | return never executed: parseStyleValue(d->values.at(0));return parseStyleValue(d->values.at(0)); never executed: return parseStyleValue(d->values.at(0)); | 0 | ||||||||||||||||||||||||
1506 | } | - | ||||||||||||||||||||||||
1507 | - | |||||||||||||||||||||||||
1508 | void Declaration::styleValues(BorderStyle *s) const | - | ||||||||||||||||||||||||
1509 | { | - | ||||||||||||||||||||||||
1510 | int i; | - | ||||||||||||||||||||||||
1511 | for (i = 0; i < qMin(d->values.count(), 4)
| 0 | ||||||||||||||||||||||||
1512 | s[i] = parseStyleValue(d->values.at(i)); never executed: s[i] = parseStyleValue(d->values.at(i)); | 0 | ||||||||||||||||||||||||
1513 | if (i == 0
never executed: s[0] = s[1] = s[2] = s[3] = BorderStyle_None; | 0 | ||||||||||||||||||||||||
1514 | else if (i == 1
never executed: s[3] = s[2] = s[1] = s[0]; | 0 | ||||||||||||||||||||||||
1515 | else if (i == 2
never executed: s[2] = s[0], s[3] = s[1]; | 0 | ||||||||||||||||||||||||
1516 | else if (i == 3
never executed: s[3] = s[1]; | 0 | ||||||||||||||||||||||||
1517 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1518 | - | |||||||||||||||||||||||||
1519 | Repeat Declaration::repeatValue() const | - | ||||||||||||||||||||||||
1520 | { | - | ||||||||||||||||||||||||
1521 | if (d->parsed.isValid()
| 0 | ||||||||||||||||||||||||
1522 | return never executed: static_cast<Repeat>(d->parsed.toInt());return static_cast<Repeat>(d->parsed.toInt()); never executed: return static_cast<Repeat>(d->parsed.toInt()); | 0 | ||||||||||||||||||||||||
1523 | if (d->values.count() != 1
| 0 | ||||||||||||||||||||||||
1524 | return never executed: Repeat_Unknown;return 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: static_cast<Repeat>(v);return static_cast<Repeat>(v); never executed: return static_cast<Repeat>(v); | 0 | ||||||||||||||||||||||||
1529 | } | - | ||||||||||||||||||||||||
1530 | - | |||||||||||||||||||||||||
1531 | Origin Declaration::originValue() const | - | ||||||||||||||||||||||||
1532 | { | - | ||||||||||||||||||||||||
1533 | if (d->parsed.isValid()
| 0 | ||||||||||||||||||||||||
1534 | return never executed: static_cast<Origin>(d->parsed.toInt());return static_cast<Origin>(d->parsed.toInt()); never executed: return static_cast<Origin>(d->parsed.toInt()); | 0 | ||||||||||||||||||||||||
1535 | if (d->values.count() != 1
| 0 | ||||||||||||||||||||||||
1536 | return never executed: Origin_Unknown;return 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: static_cast<Origin>(v);return static_cast<Origin>(v); never executed: return static_cast<Origin>(v); | 0 | ||||||||||||||||||||||||
1541 | } | - | ||||||||||||||||||||||||
1542 | - | |||||||||||||||||||||||||
1543 | PositionMode Declaration::positionValue() const | - | ||||||||||||||||||||||||
1544 | { | - | ||||||||||||||||||||||||
1545 | if (d->parsed.isValid()
| 0 | ||||||||||||||||||||||||
1546 | return never executed: static_cast<PositionMode>(d->parsed.toInt());return static_cast<PositionMode>(d->parsed.toInt()); never executed: return static_cast<PositionMode>(d->parsed.toInt()); | 0 | ||||||||||||||||||||||||
1547 | if (d->values.count() != 1
| 0 | ||||||||||||||||||||||||
1548 | return never executed: PositionMode_Unknown;return 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: static_cast<PositionMode>(v);return static_cast<PositionMode>(v); never executed: return static_cast<PositionMode>(v); | 0 | ||||||||||||||||||||||||
1553 | } | - | ||||||||||||||||||||||||
1554 | - | |||||||||||||||||||||||||
1555 | Attachment Declaration::attachmentValue() const | - | ||||||||||||||||||||||||
1556 | { | - | ||||||||||||||||||||||||
1557 | if (d->parsed.isValid()
| 0 | ||||||||||||||||||||||||
1558 | return never executed: static_cast<Attachment>(d->parsed.toInt());return static_cast<Attachment>(d->parsed.toInt()); never executed: return static_cast<Attachment>(d->parsed.toInt()); | 0 | ||||||||||||||||||||||||
1559 | if (d->values.count() != 1
| 0 | ||||||||||||||||||||||||
1560 | return never executed: Attachment_Unknown;return 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: static_cast<Attachment>(v);return static_cast<Attachment>(v); never executed: return static_cast<Attachment>(v); | 0 | ||||||||||||||||||||||||
1565 | } | - | ||||||||||||||||||||||||
1566 | - | |||||||||||||||||||||||||
1567 | int Declaration::styleFeaturesValue() const | - | ||||||||||||||||||||||||
1568 | { | - | ||||||||||||||||||||||||
1569 | ((!(d->propertyId == QtStyleFeatures)) ? qt_assert("d->propertyId == QtStyleFeatures",__FILE__,1620) : qt_noop()); | - | ||||||||||||||||||||||||
1570 | if (d->parsed.isValid()
| 0 | ||||||||||||||||||||||||
1571 | return never executed: d->parsed.toInt();return d->parsed.toInt(); never executed: return d->parsed.toInt(); | 0 | ||||||||||||||||||||||||
1572 | int features = StyleFeature_None; | - | ||||||||||||||||||||||||
1573 | for (int i = 0; i < d->values.count()
| 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: features;return features; never executed: return features; | 0 | ||||||||||||||||||||||||
1579 | } | - | ||||||||||||||||||||||||
1580 | - | |||||||||||||||||||||||||
1581 | QString Declaration::uriValue() const | - | ||||||||||||||||||||||||
1582 | { | - | ||||||||||||||||||||||||
1583 | if (d->values.isEmpty()
| 0 | ||||||||||||||||||||||||
1584 | return never executed: QString();return QString(); never executed: return QString(); | 0 | ||||||||||||||||||||||||
1585 | return never executed: d->values.at(0).variant.toString();return d->values.at(0).variant.toString(); never executed: return d->values.at(0).variant.toString(); | 0 | ||||||||||||||||||||||||
1586 | } | - | ||||||||||||||||||||||||
1587 | - | |||||||||||||||||||||||||
1588 | Qt::Alignment Declaration::alignmentValue() const | - | ||||||||||||||||||||||||
1589 | { | - | ||||||||||||||||||||||||
1590 | if (d->parsed.isValid()
| 0 | ||||||||||||||||||||||||
1591 | return never executed: Qt::Alignment(d->parsed.toInt());return Qt::Alignment(d->parsed.toInt()); never executed: return Qt::Alignment(d->parsed.toInt()); | 0 | ||||||||||||||||||||||||
1592 | if (d->values.isEmpty()
| 0 | ||||||||||||||||||||||||
1593 | return never executed: Qt::AlignLeft | Qt::AlignTop;return 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: v;return v; never executed: return v; | 0 | ||||||||||||||||||||||||
1598 | } | - | ||||||||||||||||||||||||
1599 | - | |||||||||||||||||||||||||
1600 | void Declaration::borderImageValue(QString *image, int *cuts, | - | ||||||||||||||||||||||||
1601 | TileMode *h, TileMode *v) const | - | ||||||||||||||||||||||||
1602 | { | - | ||||||||||||||||||||||||
1603 | *image = uriValue(); | - | ||||||||||||||||||||||||
1604 | for (int i = 0; i < 4
| 0 | ||||||||||||||||||||||||
1605 | cuts[i] = -1; never executed: cuts[i] = -1; | 0 | ||||||||||||||||||||||||
1606 | *h = *v = TileMode_Stretch; | - | ||||||||||||||||||||||||
1607 | - | |||||||||||||||||||||||||
1608 | if (d->values.count() < 2
| 0 | ||||||||||||||||||||||||
1609 | return; never executed: return; | 0 | ||||||||||||||||||||||||
1610 | - | |||||||||||||||||||||||||
1611 | if (d->values.at(1).type == Value::Number
| 0 | ||||||||||||||||||||||||
1612 | int i; | - | ||||||||||||||||||||||||
1613 | for (i = 0; i < qMin(d->values.count()-1, 4)
| 0 | ||||||||||||||||||||||||
1614 | const Value& v = d->values.at(i+1); | - | ||||||||||||||||||||||||
1615 | if (v.type != Value::Number
| 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
never executed: cuts[0] = cuts[1] = cuts[2] = cuts[3] = 0; | 0 | ||||||||||||||||||||||||
1620 | else if (i == 1
never executed: cuts[3] = cuts[2] = cuts[1] = cuts[0]; | 0 | ||||||||||||||||||||||||
1621 | else if (i == 2
never executed: cuts[2] = cuts[0], cuts[3] = cuts[1]; | 0 | ||||||||||||||||||||||||
1622 | else if (i == 3
never executed: cuts[3] = cuts[1]; | 0 | ||||||||||||||||||||||||
1623 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1624 | - | |||||||||||||||||||||||||
1625 | if (d->values.last().type == Value::Identifier
| 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
| 0 | ||||||||||||||||||||||||
1630 | *h = static_cast<TileMode> | - | ||||||||||||||||||||||||
1631 | (findKnownValue(d->values[d->values.count()-2].variant.toString(), | - | ||||||||||||||||||||||||
1632 | tileModes, NumKnownTileModes)); | - | ||||||||||||||||||||||||
1633 | } never executed: elseend of block | 0 | ||||||||||||||||||||||||
1634 | * never executed: h = *v;*h = *v; never executed: *h = *v; | 0 | ||||||||||||||||||||||||
1635 | } | - | ||||||||||||||||||||||||
1636 | - | |||||||||||||||||||||||||
1637 | QIcon Declaration::iconValue() const | - | ||||||||||||||||||||||||
1638 | { | - | ||||||||||||||||||||||||
1639 | if (d->parsed.isValid()
| 0 | ||||||||||||||||||||||||
1640 | return never executed: qvariant_cast<QIcon>(d->parsed);return 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()
| 0 | ||||||||||||||||||||||||
1644 | const Value &value = d->values.at(i++); | - | ||||||||||||||||||||||||
1645 | if (value.type != Value::Uri
| 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
| 0 | ||||||||||||||||||||||||
1651 | if (i != d->values.count()
| 0 | ||||||||||||||||||||||||
1652 | switch (d->values.at(i).variant.toInt()) { | - | ||||||||||||||||||||||||
1653 | case never executed: Value_Disabled:case Value_Disabled: never executed: mode = QIcon::Disabled; break;case Value_Disabled: never executed: break; | 0 | ||||||||||||||||||||||||
1654 | case never executed: Value_Active:case Value_Active: never executed: mode = QIcon::Active; break;case Value_Active: never executed: break; | 0 | ||||||||||||||||||||||||
1655 | case never executed: Value_Selected:case Value_Selected: never executed: mode = QIcon::Selected; break;case Value_Selected: never executed: break; | 0 | ||||||||||||||||||||||||
1656 | case never executed: Value_Normal:case Value_Normal: never executed: mode = QIcon::Normal; break;case Value_Normal: never executed: break; | 0 | ||||||||||||||||||||||||
1657 | case never executed: Value_On:case Value_On: never executed: state = QIcon::On; break;case Value_On: never executed: break; | 0 | ||||||||||||||||||||||||
1658 | case never executed: Value_Off:case Value_Off: never executed: state = QIcon::Off; break;case Value_Off: never executed: break; | 0 | ||||||||||||||||||||||||
1659 | default never executed: :default: never executed: break;default: never executed: break; | 0 | ||||||||||||||||||||||||
1660 | } | - | ||||||||||||||||||||||||
1661 | ++i; | - | ||||||||||||||||||||||||
1662 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
1663 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1664 | } | - | ||||||||||||||||||||||||
1665 | } | - | ||||||||||||||||||||||||
1666 | - | |||||||||||||||||||||||||
1667 | - | |||||||||||||||||||||||||
1668 | if (icon.isNull()
| 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()
| 0 | ||||||||||||||||||||||||
1674 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1675 | - | |||||||||||||||||||||||||
1676 | if (d->values.at(i).type == Value::TermOperatorComma
| 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: icon;return icon; never executed: return icon; | 0 | ||||||||||||||||||||||||
1682 | } | - | ||||||||||||||||||||||||
1683 | - | |||||||||||||||||||||||||
1684 | - | |||||||||||||||||||||||||
1685 | - | |||||||||||||||||||||||||
1686 | int Selector::specificity() const | - | ||||||||||||||||||||||||
1687 | { | - | ||||||||||||||||||||||||
1688 | int val = 0; | - | ||||||||||||||||||||||||
1689 | for (int i = 0; i < basicSelectors.count()
| 0 | ||||||||||||||||||||||||
1690 | const BasicSelector &sel = basicSelectors.at(i); | - | ||||||||||||||||||||||||
1691 | if (!sel.elementName.isEmpty()
| 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: val;return val; never executed: return val; | 0 | ||||||||||||||||||||||||
1698 | } | - | ||||||||||||||||||||||||
1699 | - | |||||||||||||||||||||||||
1700 | QString Selector::pseudoElement() const | - | ||||||||||||||||||||||||
1701 | { | - | ||||||||||||||||||||||||
1702 | const BasicSelector& bs = basicSelectors.last(); | - | ||||||||||||||||||||||||
1703 | if (!bs.pseudos.isEmpty()
| 0 | ||||||||||||||||||||||||
1704 | return never executed: bs.pseudos.at(0).name;return bs.pseudos.at(0).name; never executed: return bs.pseudos.at(0).name; | 0 | ||||||||||||||||||||||||
1705 | return never executed: QString();return QString(); never executed: return QString(); | 0 | ||||||||||||||||||||||||
1706 | } | - | ||||||||||||||||||||||||
1707 | - | |||||||||||||||||||||||||
1708 | quint64 Selector::pseudoClass(quint64 *negated) const | - | ||||||||||||||||||||||||
1709 | { | - | ||||||||||||||||||||||||
1710 | const BasicSelector& bs = basicSelectors.last(); | - | ||||||||||||||||||||||||
1711 | if (bs.pseudos.isEmpty()
| 0 | ||||||||||||||||||||||||
1712 | return never executed: PseudoClass_Unspecified;return PseudoClass_Unspecified; never executed: return PseudoClass_Unspecified; | 0 | ||||||||||||||||||||||||
1713 | quint64 pc = PseudoClass_Unknown; | - | ||||||||||||||||||||||||
1714 | for (int i = !pseudoElement().isEmpty(); i < bs.pseudos.count()
| 0 | ||||||||||||||||||||||||
1715 | const Pseudo &pseudo = bs.pseudos.at(i); | - | ||||||||||||||||||||||||
1716 | if (pseudo.type == PseudoClass_Unknown
| 0 | ||||||||||||||||||||||||
1717 | return never executed: PseudoClass_Unknown;return PseudoClass_Unknown; never executed: return PseudoClass_Unknown; | 0 | ||||||||||||||||||||||||
1718 | if (!pseudo.negated
| 0 | ||||||||||||||||||||||||
1719 | pc |= pseudo.type; never executed: pc |= pseudo.type; | 0 | ||||||||||||||||||||||||
1720 | else if (negated
| 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: pc;return pc; never executed: return pc; | 0 | ||||||||||||||||||||||||
1724 | } | - | ||||||||||||||||||||||||
1725 | - | |||||||||||||||||||||||||
1726 | - | |||||||||||||||||||||||||
1727 | - | |||||||||||||||||||||||||
1728 | void StyleSheet::buildIndexes(Qt::CaseSensitivity nameCaseSensitivity) | - | ||||||||||||||||||||||||
1729 | { | - | ||||||||||||||||||||||||
1730 | QVector<StyleRule> universals; | - | ||||||||||||||||||||||||
1731 | for (int i = 0; i < styleRules.count()
| 0 | ||||||||||||||||||||||||
1732 | const StyleRule &rule = styleRules.at(i); | - | ||||||||||||||||||||||||
1733 | QVector<Selector> universalsSelectors; | - | ||||||||||||||||||||||||
1734 | for (int j = 0; j < rule.selectors.count()
| 0 | ||||||||||||||||||||||||
1735 | const Selector& selector = rule.selectors.at(j); | - | ||||||||||||||||||||||||
1736 | - | |||||||||||||||||||||||||
1737 | if (selector.basicSelectors.isEmpty()
| 0 | ||||||||||||||||||||||||
1738 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
1739 | - | |||||||||||||||||||||||||
1740 | if (selector.basicSelectors.at(0).relationToNext == BasicSelector::NoRelation
| 0 | ||||||||||||||||||||||||
1741 | if (selector.basicSelectors.count() != 1
| 0 | ||||||||||||||||||||||||
1742 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
1743 | } never executed: else if (selector.basicSelectors.count() <= 1end of block
| 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()
| 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: else if (!sel.elementName.isEmpty()end of block
| 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
| 0 | ||||||||||||||||||||||||
1762 | name=name.toLower(); never executed: name=name.toLower(); | 0 | ||||||||||||||||||||||||
1763 | nameIndex.insert(name, nr); | - | ||||||||||||||||||||||||
1764 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
1765 | universalsSelectors += selector; | - | ||||||||||||||||||||||||
1766 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1767 | } | - | ||||||||||||||||||||||||
1768 | if (!universalsSelectors.isEmpty()
| 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 | - | |||||||||||||||||||||||||
1781 | StyleSelector::~StyleSelector() | - | ||||||||||||||||||||||||
1782 | { | - | ||||||||||||||||||||||||
1783 | } | - | ||||||||||||||||||||||||
1784 | - | |||||||||||||||||||||||||
1785 | bool StyleSelector::nodeNameEquals(NodePtr node, const QString& nodeName) const | - | ||||||||||||||||||||||||
1786 | { | - | ||||||||||||||||||||||||
1787 | return never executed: nodeNames(node).contains(nodeName, nameCaseSensitivity);return nodeNames(node).contains(nodeName, nameCaseSensitivity); never executed: return nodeNames(node).contains(nodeName, nameCaseSensitivity); | 0 | ||||||||||||||||||||||||
1788 | } | - | ||||||||||||||||||||||||
1789 | - | |||||||||||||||||||||||||
1790 | QStringList StyleSelector::nodeIds(NodePtr node) const | - | ||||||||||||||||||||||||
1791 | { | - | ||||||||||||||||||||||||
1792 | return never executed: QStringList(attribute(node, QLatin1String("id")));return QStringList(attribute(node, QLatin1String("id"))); never executed: return QStringList(attribute(node, QLatin1String("id"))); | 0 | ||||||||||||||||||||||||
1793 | } | - | ||||||||||||||||||||||||
1794 | - | |||||||||||||||||||||||||
1795 | bool StyleSelector::selectorMatches(const Selector &selector, NodePtr node) | - | ||||||||||||||||||||||||
1796 | { | - | ||||||||||||||||||||||||
1797 | if (selector.basicSelectors.isEmpty()
| 0 | ||||||||||||||||||||||||
1798 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
1799 | - | |||||||||||||||||||||||||
1800 | if (selector.basicSelectors.at(0).relationToNext == BasicSelector::NoRelation
| 0 | ||||||||||||||||||||||||
1801 | if (selector.basicSelectors.count() != 1
| 0 | ||||||||||||||||||||||||
1802 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
1803 | return never executed: basicSelectorMatches(selector.basicSelectors.at(0), node);return basicSelectorMatches(selector.basicSelectors.at(0), node); never executed: return basicSelectorMatches(selector.basicSelectors.at(0), node); | 0 | ||||||||||||||||||||||||
1804 | } | - | ||||||||||||||||||||||||
1805 | if (selector.basicSelectors.count() <= 1
| 0 | ||||||||||||||||||||||||
1806 | return never executed: false;return 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
| 0 | ||||||||||||||||||||||||
1816 | if (sel.relationToNext == BasicSelector::MatchNextSelectorIfParent
| 0 | ||||||||||||||||||||||||
1817 | || i == selector.basicSelectors.count() - 1
| 0 | ||||||||||||||||||||||||
1818 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1819 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1820 | - | |||||||||||||||||||||||||
1821 | if (match
| 0 | ||||||||||||||||||||||||
1822 | -- never executed: i;--i; never executed: --i; | 0 | ||||||||||||||||||||||||
1823 | - | |||||||||||||||||||||||||
1824 | if (i < 0
| 0 | ||||||||||||||||||||||||
1825 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1826 | - | |||||||||||||||||||||||||
1827 | sel = selector.basicSelectors.at(i); | - | ||||||||||||||||||||||||
1828 | if (sel.relationToNext == BasicSelector::MatchNextSelectorIfAncestor
| 0 | ||||||||||||||||||||||||
1829 | || sel.relationToNext == BasicSelector::MatchNextSelectorIfParent
| 0 | ||||||||||||||||||||||||
1830 | - | |||||||||||||||||||||||||
1831 | NodePtr nextParent = parentNode(node); | - | ||||||||||||||||||||||||
1832 | freeNode(node); | - | ||||||||||||||||||||||||
1833 | node = nextParent; | - | ||||||||||||||||||||||||
1834 | } never executed: else if (sel.relationToNext == BasicSelector::MatchNextSelectorIfPreceedsend of block
| 0 | ||||||||||||||||||||||||
1835 | NodePtr previousSibling = previousSiblingNode(node); | - | ||||||||||||||||||||||||
1836 | freeNode(node); | - | ||||||||||||||||||||||||
1837 | node = previousSibling; | - | ||||||||||||||||||||||||
1838 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1839 | if (isNullNode(node)
| 0 | ||||||||||||||||||||||||
1840 | match = false; | - | ||||||||||||||||||||||||
1841 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1842 | } | - | ||||||||||||||||||||||||
1843 | } never executed: while (i >= 0end of block
| 0 | ||||||||||||||||||||||||
1844 | - | |||||||||||||||||||||||||
1845 | freeNode(node); | - | ||||||||||||||||||||||||
1846 | - | |||||||||||||||||||||||||
1847 | return never executed: match;return match; never executed: return match; | 0 | ||||||||||||||||||||||||
1848 | } | - | ||||||||||||||||||||||||
1849 | - | |||||||||||||||||||||||||
1850 | bool StyleSelector::basicSelectorMatches(const BasicSelector &sel, NodePtr node) | - | ||||||||||||||||||||||||
1851 | { | - | ||||||||||||||||||||||||
1852 | if (!sel.attributeSelectors.isEmpty()
| 0 | ||||||||||||||||||||||||
1853 | if (!hasAttributes(node)
| 0 | ||||||||||||||||||||||||
1854 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
1855 | - | |||||||||||||||||||||||||
1856 | for (int i = 0; i < sel.attributeSelectors.count()
| 0 | ||||||||||||||||||||||||
1857 | const QCss::AttributeSelector &a = sel.attributeSelectors.at(i); | - | ||||||||||||||||||||||||
1858 | - | |||||||||||||||||||||||||
1859 | const QString attrValue = attribute(node, a.name); | - | ||||||||||||||||||||||||
1860 | if (attrValue.isNull()
| 0 | ||||||||||||||||||||||||
1861 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
1862 | - | |||||||||||||||||||||||||
1863 | if (a.valueMatchCriterium == QCss::AttributeSelector::MatchContains
| 0 | ||||||||||||||||||||||||
1864 | - | |||||||||||||||||||||||||
1865 | QStringList lst = attrValue.split(QLatin1Char(' ')); | - | ||||||||||||||||||||||||
1866 | if (!lst.contains(a.value)
| 0 | ||||||||||||||||||||||||
1867 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
1868 | } never executed: else if (end of block | 0 | ||||||||||||||||||||||||
1869 | (a.valueMatchCriterium == QCss::AttributeSelector::MatchEqual
| 0 | ||||||||||||||||||||||||
1870 | && attrValue != a.value
| 0 | ||||||||||||||||||||||||
1871 | || | - | ||||||||||||||||||||||||
1872 | (a.valueMatchCriterium == QCss::AttributeSelector::MatchBeginsWith
| 0 | ||||||||||||||||||||||||
1873 | && !attrValue.startsWith(a.value)
| 0 | ||||||||||||||||||||||||
1874 | ) | - | ||||||||||||||||||||||||
1875 | return never executed: false;return 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()
| 0 | ||||||||||||||||||||||||
1880 | && !nodeNameEquals(node, sel.elementName)
| 0 | ||||||||||||||||||||||||
1881 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
1882 | - | |||||||||||||||||||||||||
1883 | if (!sel.ids.isEmpty()
| 0 | ||||||||||||||||||||||||
1884 | && sel.ids != nodeIds(node)
| 0 | ||||||||||||||||||||||||
1885 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
1886 | - | |||||||||||||||||||||||||
1887 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
1888 | } | - | ||||||||||||||||||||||||
1889 | - | |||||||||||||||||||||||||
1890 | void 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()
| 0 | ||||||||||||||||||||||||
1894 | const Selector& selector = rule.selectors.at(j); | - | ||||||||||||||||||||||||
1895 | if (selectorMatches(selector, node)
| 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
| 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 | - | |||||||||||||||||||||||||
1912 | QVector<StyleRule> StyleSelector::styleRulesForNode(NodePtr node) | - | ||||||||||||||||||||||||
1913 | { | - | ||||||||||||||||||||||||
1914 | QVector<StyleRule> rules; | - | ||||||||||||||||||||||||
1915 | if (styleSheets.isEmpty()
| 0 | ||||||||||||||||||||||||
1916 | return never executed: rules;return rules; never executed: return rules; | 0 | ||||||||||||||||||||||||
1917 | - | |||||||||||||||||||||||||
1918 | QMap<uint, StyleRule> weightedRules; | - | ||||||||||||||||||||||||
1919 | - | |||||||||||||||||||||||||
1920 | - | |||||||||||||||||||||||||
1921 | for (int sheetIdx = 0; sheetIdx < styleSheets.count()
| 0 | ||||||||||||||||||||||||
1922 | const StyleSheet &styleSheet = styleSheets.at(sheetIdx); | - | ||||||||||||||||||||||||
1923 | for (int i = 0; i < styleSheet.styleRules.count()
| 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()
| 0 | ||||||||||||||||||||||||
1928 | QStringList ids = nodeIds(node); | - | ||||||||||||||||||||||||
1929 | for (int i = 0; i < ids.count()
| 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()
| 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()
| 0 | ||||||||||||||||||||||||
1939 | QStringList names = nodeNames(node); | - | ||||||||||||||||||||||||
1940 | for (int i = 0; i < names.count()
| 0 | ||||||||||||||||||||||||
1941 | QString name = names.at(i); | - | ||||||||||||||||||||||||
1942 | if (nameCaseSensitivity == Qt::CaseInsensitive
| 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()
| 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()
| 0 | ||||||||||||||||||||||||
1952 | for (int i = 0; i < styleSheet.mediaRules.count()
| 0 | ||||||||||||||||||||||||
1953 | if (styleSheet.mediaRules.at(i).media.contains(medium, Qt::CaseInsensitive)
| 0 | ||||||||||||||||||||||||
1954 | for (int j = 0; j < styleSheet.mediaRules.at(i).styleRules.count()
| 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()
| 0 | ||||||||||||||||||||||||
1966 | rules += *it; never executed: rules += *it; | 0 | ||||||||||||||||||||||||
1967 | - | |||||||||||||||||||||||||
1968 | return never executed: rules;return rules; never executed: return rules; | 0 | ||||||||||||||||||||||||
1969 | } | - | ||||||||||||||||||||||||
1970 | - | |||||||||||||||||||||||||
1971 | - | |||||||||||||||||||||||||
1972 | - | |||||||||||||||||||||||||
1973 | QVector<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()
| 0 | ||||||||||||||||||||||||
1978 | const Selector& selector = rules.at(i).selectors.at(0); | - | ||||||||||||||||||||||||
1979 | const QString pseudoElement = selector.pseudoElement(); | - | ||||||||||||||||||||||||
1980 | - | |||||||||||||||||||||||||
1981 | if (extraPseudo
| 0 | ||||||||||||||||||||||||
1982 | decls += rules.at(i).declarations; | - | ||||||||||||||||||||||||
1983 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
1984 | } | - | ||||||||||||||||||||||||
1985 | - | |||||||||||||||||||||||||
1986 | if (!pseudoElement.isEmpty()
| 0 | ||||||||||||||||||||||||
1987 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
1988 | quint64 pseudoClass = selector.pseudoClass(); | - | ||||||||||||||||||||||||
1989 | if (pseudoClass == PseudoClass_Enabled
| 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: decls;return decls; never executed: return decls; | 0 | ||||||||||||||||||||||||
1993 | } | - | ||||||||||||||||||||||||
1994 | - | |||||||||||||||||||||||||
1995 | static inline bool isHexDigit(const char c) | - | ||||||||||||||||||||||||
1996 | { | - | ||||||||||||||||||||||||
1997 | return never executed: (c >= '0'return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') ;
never executed: return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') ; | 0 | ||||||||||||||||||||||||
1998 | || (c >= 'a'
never executed: return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') ; | 0 | ||||||||||||||||||||||||
1999 | || (c >= 'A'
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 | - | |||||||||||||||||||||||||
2003 | QString Scanner::preprocess(const QString &input, bool *hasEscapeSequences) | - | ||||||||||||||||||||||||
2004 | { | - | ||||||||||||||||||||||||
2005 | QString output = input; | - | ||||||||||||||||||||||||
2006 | - | |||||||||||||||||||||||||
2007 | if (hasEscapeSequences
| 0 | ||||||||||||||||||||||||
2008 | * never executed: hasEscapeSequences = false;*hasEscapeSequences = false; never executed: *hasEscapeSequences = false; | 0 | ||||||||||||||||||||||||
2009 | - | |||||||||||||||||||||||||
2010 | int i = 0; | - | ||||||||||||||||||||||||
2011 | while (i < output.size()
| 0 | ||||||||||||||||||||||||
2012 | if (output.at(i) == QLatin1Char('\\')
| 0 | ||||||||||||||||||||||||
2013 | - | |||||||||||||||||||||||||
2014 | ++i; | - | ||||||||||||||||||||||||
2015 | - | |||||||||||||||||||||||||
2016 | int hexCount = 0; | - | ||||||||||||||||||||||||
2017 | const int hexStart = i; | - | ||||||||||||||||||||||||
2018 | while (i < output.size()
| 0 | ||||||||||||||||||||||||
2019 | && isHexDigit(output.at(i).toLatin1())
| 0 | ||||||||||||||||||||||||
2020 | && hexCount < 7
| 0 | ||||||||||||||||||||||||
2021 | ++hexCount; | - | ||||||||||||||||||||||||
2022 | ++i; | - | ||||||||||||||||||||||||
2023 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2024 | if (hexCount == 0
| 0 | ||||||||||||||||||||||||
2025 | if (hasEscapeSequences
| 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
| 0 | ||||||||||||||||||||||||
2034 | output.replace(hexStart - 1, hexCount + 1, QChar(code)); | - | ||||||||||||||||||||||||
2035 | i = hexStart; | - | ||||||||||||||||||||||||
2036 | } never executed: else {end of block | 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: output;return output; never executed: return output; | 0 | ||||||||||||||||||||||||
2044 | } | - | ||||||||||||||||||||||||
2045 | - | |||||||||||||||||||||||||
2046 | int QCssScanner_Generated::handleCommentStart() | - | ||||||||||||||||||||||||
2047 | { | - | ||||||||||||||||||||||||
2048 | while (pos < input.size() - 1
| 0 | ||||||||||||||||||||||||
2049 | if (input.at(pos) == QLatin1Char('*')
| 0 | ||||||||||||||||||||||||
2050 | && input.at(pos + 1) == QLatin1Char('/')
| 0 | ||||||||||||||||||||||||
2051 | pos += 2; | - | ||||||||||||||||||||||||
2052 | break; never executed: break; | 0 | ||||||||||||||||||||||||
2053 | } | - | ||||||||||||||||||||||||
2054 | ++pos; | - | ||||||||||||||||||||||||
2055 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2056 | return never executed: S;return S; never executed: return S; | 0 | ||||||||||||||||||||||||
2057 | } | - | ||||||||||||||||||||||||
2058 | - | |||||||||||||||||||||||||
2059 | void 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
| 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 | - | |||||||||||||||||||||||||
2074 | QString Symbol::lexem() const | - | ||||||||||||||||||||||||
2075 | { | - | ||||||||||||||||||||||||
2076 | QString result; | - | ||||||||||||||||||||||||
2077 | if (len > 0
| 0 | ||||||||||||||||||||||||
2078 | result.reserve(len); never executed: result.reserve(len); | 0 | ||||||||||||||||||||||||
2079 | for (int i = 0; i < len
| 0 | ||||||||||||||||||||||||
2080 | if (text.at(start + i) == QLatin1Char('\\')
| 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: result;return result; never executed: return result; | 0 | ||||||||||||||||||||||||
2085 | } | - | ||||||||||||||||||||||||
2086 | - | |||||||||||||||||||||||||
2087 | Parser::Parser(const QString &css, bool isFile) | - | ||||||||||||||||||||||||
2088 | { | - | ||||||||||||||||||||||||
2089 | init(css, isFile); | - | ||||||||||||||||||||||||
2090 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2091 | - | |||||||||||||||||||||||||
2092 | Parser::Parser() | - | ||||||||||||||||||||||||
2093 | { | - | ||||||||||||||||||||||||
2094 | index = 0; | - | ||||||||||||||||||||||||
2095 | errorIndex = -1; | - | ||||||||||||||||||||||||
2096 | hasEscapeSequences = false; | - | ||||||||||||||||||||||||
2097 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2098 | - | |||||||||||||||||||||||||
2099 | void Parser::init(const QString &css, bool isFile) | - | ||||||||||||||||||||||||
2100 | { | - | ||||||||||||||||||||||||
2101 | QString styleSheet = css; | - | ||||||||||||||||||||||||
2102 | if (isFile
| 0 | ||||||||||||||||||||||||
2103 | QFile file(css); | - | ||||||||||||||||||||||||
2104 | if (file.open(QFile::ReadOnly)
| 0 | ||||||||||||||||||||||||
2105 | sourcePath = QFileInfo(styleSheet).absolutePath() + QLatin1Char('/'); | - | ||||||||||||||||||||||||
2106 | QTextStream stream(&file); | - | ||||||||||||||||||||||||
2107 | styleSheet = stream.readAll(); | - | ||||||||||||||||||||||||
2108 | } never executed: else {end of block | 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 | - | |||||||||||||||||||||||||
2124 | bool Parser::parse(StyleSheet *styleSheet, Qt::CaseSensitivity nameCaseSensitivity) | - | ||||||||||||||||||||||||
2125 | { | - | ||||||||||||||||||||||||
2126 | if (testTokenAndEndsWith(ATKEYWORD_SYM, QLatin1String("charset"))
| 0 | ||||||||||||||||||||||||
2127 | while (test(S)
never executed: end of block | 0 | ||||||||||||||||||||||||
2128 | if (!next(STRING)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2129 | if (!next(SEMICOLON)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2130 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2131 | - | |||||||||||||||||||||||||
2132 | while (test(S)
never executed: end of block | 0 | ||||||||||||||||||||||||
2133 | - | |||||||||||||||||||||||||
2134 | while (testImport()
| 0 | ||||||||||||||||||||||||
2135 | ImportRule rule; | - | ||||||||||||||||||||||||
2136 | if (!parseImport(&rule)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2137 | styleSheet->importRules.append(rule); | - | ||||||||||||||||||||||||
2138 | while (test(S)
never executed: end of block | 0 | ||||||||||||||||||||||||
2139 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2140 | - | |||||||||||||||||||||||||
2141 | do { | - | ||||||||||||||||||||||||
2142 | if (testMedia()
| 0 | ||||||||||||||||||||||||
2143 | MediaRule rule; | - | ||||||||||||||||||||||||
2144 | if (!parseMedia(&rule)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2145 | styleSheet->mediaRules.append(rule); | - | ||||||||||||||||||||||||
2146 | } never executed: else if (testPage()end of block
| 0 | ||||||||||||||||||||||||
2147 | PageRule rule; | - | ||||||||||||||||||||||||
2148 | if (!parsePage(&rule)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2149 | styleSheet->pageRules.append(rule); | - | ||||||||||||||||||||||||
2150 | } never executed: else if (testRuleset()end of block
| 0 | ||||||||||||||||||||||||
2151 | StyleRule rule; | - | ||||||||||||||||||||||||
2152 | if (!parseRuleset(&rule)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2153 | styleSheet->styleRules.append(rule); | - | ||||||||||||||||||||||||
2154 | } never executed: else if (test(ATKEYWORD_SYM)end of block
| 0 | ||||||||||||||||||||||||
2155 | if (!until(RBRACE)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2156 | } never executed: else if (hasNext()end of block
| 0 | ||||||||||||||||||||||||
2157 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2158 | } | - | ||||||||||||||||||||||||
2159 | while (test(S)
never executed: end of block | 0 | ||||||||||||||||||||||||
2160 | } never executed: while (hasNext()end of block
| 0 | ||||||||||||||||||||||||
2161 | styleSheet->buildIndexes(nameCaseSensitivity); | - | ||||||||||||||||||||||||
2162 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2163 | } | - | ||||||||||||||||||||||||
2164 | - | |||||||||||||||||||||||||
2165 | Symbol Parser::errorSymbol() | - | ||||||||||||||||||||||||
2166 | { | - | ||||||||||||||||||||||||
2167 | if (errorIndex == -1
never executed: Symbol();return Symbol(); never executed: return Symbol(); | 0 | ||||||||||||||||||||||||
2168 | return never executed: symbols.at(errorIndex);return symbols.at(errorIndex); never executed: return symbols.at(errorIndex); | 0 | ||||||||||||||||||||||||
2169 | } | - | ||||||||||||||||||||||||
2170 | - | |||||||||||||||||||||||||
2171 | static inline void removeOptionalQuotes(QString *str) | - | ||||||||||||||||||||||||
2172 | { | - | ||||||||||||||||||||||||
2173 | if (!str->startsWith(QLatin1Char('\''))
| 0 | ||||||||||||||||||||||||
2174 | && !str->startsWith(QLatin1Char('\"'))
| 0 | ||||||||||||||||||||||||
2175 | return; never executed: return; | 0 | ||||||||||||||||||||||||
2176 | str->remove(0, 1); | - | ||||||||||||||||||||||||
2177 | str->chop(1); | - | ||||||||||||||||||||||||
2178 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2179 | - | |||||||||||||||||||||||||
2180 | bool Parser::parseImport(ImportRule *importRule) | - | ||||||||||||||||||||||||
2181 | { | - | ||||||||||||||||||||||||
2182 | skipSpace(); | - | ||||||||||||||||||||||||
2183 | - | |||||||||||||||||||||||||
2184 | if (test(STRING)
| 0 | ||||||||||||||||||||||||
2185 | importRule->href = lexem(); | - | ||||||||||||||||||||||||
2186 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
2187 | if (!testAndParseUri(&importRule->href)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2188 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2189 | removeOptionalQuotes(&importRule->href); | - | ||||||||||||||||||||||||
2190 | - | |||||||||||||||||||||||||
2191 | skipSpace(); | - | ||||||||||||||||||||||||
2192 | - | |||||||||||||||||||||||||
2193 | if (testMedium()
| 0 | ||||||||||||||||||||||||
2194 | if (!parseMedium(&importRule->media)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2195 | - | |||||||||||||||||||||||||
2196 | while (test(COMMA)
| 0 | ||||||||||||||||||||||||
2197 | skipSpace(); | - | ||||||||||||||||||||||||
2198 | if (!parseNextMedium(&importRule->media)
never executed: false;return 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)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2203 | - | |||||||||||||||||||||||||
2204 | skipSpace(); | - | ||||||||||||||||||||||||
2205 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2206 | } | - | ||||||||||||||||||||||||
2207 | - | |||||||||||||||||||||||||
2208 | bool Parser::parseMedia(MediaRule *mediaRule) | - | ||||||||||||||||||||||||
2209 | { | - | ||||||||||||||||||||||||
2210 | do { | - | ||||||||||||||||||||||||
2211 | skipSpace(); | - | ||||||||||||||||||||||||
2212 | if (!parseNextMedium(&mediaRule->media)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2213 | } never executed: while (test(COMMA)end of block
| 0 | ||||||||||||||||||||||||
2214 | - | |||||||||||||||||||||||||
2215 | if (!next(LBRACE)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2216 | skipSpace(); | - | ||||||||||||||||||||||||
2217 | - | |||||||||||||||||||||||||
2218 | while (testRuleset()
| 0 | ||||||||||||||||||||||||
2219 | StyleRule rule; | - | ||||||||||||||||||||||||
2220 | if (!parseRuleset(&rule)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2221 | mediaRule->styleRules.append(rule); | - | ||||||||||||||||||||||||
2222 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2223 | - | |||||||||||||||||||||||||
2224 | if (!next(RBRACE)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2225 | skipSpace(); | - | ||||||||||||||||||||||||
2226 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2227 | } | - | ||||||||||||||||||||||||
2228 | - | |||||||||||||||||||||||||
2229 | bool Parser::parseMedium(QStringList *media) | - | ||||||||||||||||||||||||
2230 | { | - | ||||||||||||||||||||||||
2231 | media->append(lexem()); | - | ||||||||||||||||||||||||
2232 | skipSpace(); | - | ||||||||||||||||||||||||
2233 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2234 | } | - | ||||||||||||||||||||||||
2235 | - | |||||||||||||||||||||||||
2236 | bool Parser::parsePage(PageRule *pageRule) | - | ||||||||||||||||||||||||
2237 | { | - | ||||||||||||||||||||||||
2238 | skipSpace(); | - | ||||||||||||||||||||||||
2239 | - | |||||||||||||||||||||||||
2240 | if (testPseudoPage()
| 0 | ||||||||||||||||||||||||
2241 | if (!parsePseudoPage(&pageRule->selector)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2242 | - | |||||||||||||||||||||||||
2243 | skipSpace(); | - | ||||||||||||||||||||||||
2244 | if (!next(LBRACE)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2245 | - | |||||||||||||||||||||||||
2246 | do { | - | ||||||||||||||||||||||||
2247 | skipSpace(); | - | ||||||||||||||||||||||||
2248 | Declaration decl; | - | ||||||||||||||||||||||||
2249 | if (!parseNextDeclaration(&decl)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2250 | if (!decl.isEmpty()
| 0 | ||||||||||||||||||||||||
2251 | pageRule->declarations.append(decl); never executed: pageRule->declarations.append(decl); | 0 | ||||||||||||||||||||||||
2252 | } never executed: while (test(SEMICOLON)end of block
| 0 | ||||||||||||||||||||||||
2253 | - | |||||||||||||||||||||||||
2254 | if (!next(RBRACE)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2255 | skipSpace(); | - | ||||||||||||||||||||||||
2256 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2257 | } | - | ||||||||||||||||||||||||
2258 | - | |||||||||||||||||||||||||
2259 | bool Parser::parsePseudoPage(QString *selector) | - | ||||||||||||||||||||||||
2260 | { | - | ||||||||||||||||||||||||
2261 | if (!next(IDENT)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2262 | *selector = lexem(); | - | ||||||||||||||||||||||||
2263 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2264 | } | - | ||||||||||||||||||||||||
2265 | - | |||||||||||||||||||||||||
2266 | bool Parser::parseNextOperator(Value *value) | - | ||||||||||||||||||||||||
2267 | { | - | ||||||||||||||||||||||||
2268 | if (!hasNext()
never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2269 | switch (next()) { | - | ||||||||||||||||||||||||
2270 | case never executed: SLASH:case SLASH: never executed: value->type = Value::TermOperatorSlash; skipSpace(); break;case SLASH: never executed: break; | 0 | ||||||||||||||||||||||||
2271 | case never executed: COMMA:case COMMA: never executed: value->type = Value::TermOperatorComma; skipSpace(); break;case COMMA: never executed: break; | 0 | ||||||||||||||||||||||||
2272 | default never executed: :default: never executed: prev(); break;default: never executed: break; | 0 | ||||||||||||||||||||||||
2273 | } | - | ||||||||||||||||||||||||
2274 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2275 | } | - | ||||||||||||||||||||||||
2276 | - | |||||||||||||||||||||||||
2277 | bool Parser::parseCombinator(BasicSelector::Relation *relation) | - | ||||||||||||||||||||||||
2278 | { | - | ||||||||||||||||||||||||
2279 | *relation = BasicSelector::NoRelation; | - | ||||||||||||||||||||||||
2280 | if (lookup() == S
| 0 | ||||||||||||||||||||||||
2281 | *relation = BasicSelector::MatchNextSelectorIfAncestor; | - | ||||||||||||||||||||||||
2282 | skipSpace(); | - | ||||||||||||||||||||||||
2283 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
2284 | prev(); | - | ||||||||||||||||||||||||
2285 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2286 | if (test(PLUS)
| 0 | ||||||||||||||||||||||||
2287 | *relation = BasicSelector::MatchNextSelectorIfPreceeds; | - | ||||||||||||||||||||||||
2288 | } never executed: else if (test(GREATER)end of block
| 0 | ||||||||||||||||||||||||
2289 | *relation = BasicSelector::MatchNextSelectorIfParent; | - | ||||||||||||||||||||||||
2290 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2291 | skipSpace(); | - | ||||||||||||||||||||||||
2292 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2293 | } | - | ||||||||||||||||||||||||
2294 | - | |||||||||||||||||||||||||
2295 | bool 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: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2302 | } | - | ||||||||||||||||||||||||
2303 | - | |||||||||||||||||||||||||
2304 | bool Parser::parseRuleset(StyleRule *styleRule) | - | ||||||||||||||||||||||||
2305 | { | - | ||||||||||||||||||||||||
2306 | Selector sel; | - | ||||||||||||||||||||||||
2307 | if (!parseSelector(&sel)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2308 | styleRule->selectors.append(sel); | - | ||||||||||||||||||||||||
2309 | - | |||||||||||||||||||||||||
2310 | while (test(COMMA)
| 0 | ||||||||||||||||||||||||
2311 | skipSpace(); | - | ||||||||||||||||||||||||
2312 | Selector sel; | - | ||||||||||||||||||||||||
2313 | if (!parseNextSelector(&sel)
never executed: false;return 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)
never executed: false;return 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)
| 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
| 0 | ||||||||||||||||||||||||
2334 | decl = Declaration(); | - | ||||||||||||||||||||||||
2335 | index = semicolonIndex - 1; | - | ||||||||||||||||||||||||
2336 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
2337 | skipSpace(); | - | ||||||||||||||||||||||||
2338 | return never executed: foundRBrace;return foundRBrace; never executed: return foundRBrace; | 0 | ||||||||||||||||||||||||
2339 | } | - | ||||||||||||||||||||||||
2340 | } | - | ||||||||||||||||||||||||
2341 | if (!decl.isEmpty()
| 0 | ||||||||||||||||||||||||
2342 | styleRule->declarations.append(decl); never executed: styleRule->declarations.append(decl); | 0 | ||||||||||||||||||||||||
2343 | } never executed: while (test(SEMICOLON)end of block
| 0 | ||||||||||||||||||||||||
2344 | - | |||||||||||||||||||||||||
2345 | if (!next(RBRACE)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2346 | skipSpace(); | - | ||||||||||||||||||||||||
2347 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2348 | } | - | ||||||||||||||||||||||||
2349 | - | |||||||||||||||||||||||||
2350 | bool Parser::parseSelector(Selector *sel) | - | ||||||||||||||||||||||||
2351 | { | - | ||||||||||||||||||||||||
2352 | BasicSelector basicSel; | - | ||||||||||||||||||||||||
2353 | if (!parseSimpleSelector(&basicSel)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2354 | while (testCombinator()
| 0 | ||||||||||||||||||||||||
2355 | if (!parseCombinator(&basicSel.relationToNext)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2356 | - | |||||||||||||||||||||||||
2357 | if (!testSimpleSelector()
never executed: break; | 0 | ||||||||||||||||||||||||
2358 | sel->basicSelectors.append(basicSel); | - | ||||||||||||||||||||||||
2359 | - | |||||||||||||||||||||||||
2360 | basicSel = BasicSelector(); | - | ||||||||||||||||||||||||
2361 | if (!parseSimpleSelector(&basicSel)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2362 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2363 | sel->basicSelectors.append(basicSel); | - | ||||||||||||||||||||||||
2364 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2365 | } | - | ||||||||||||||||||||||||
2366 | - | |||||||||||||||||||||||||
2367 | bool Parser::parseSimpleSelector(BasicSelector *basicSel) | - | ||||||||||||||||||||||||
2368 | { | - | ||||||||||||||||||||||||
2369 | int minCount = 0; | - | ||||||||||||||||||||||||
2370 | if (lookupElementName()
| 0 | ||||||||||||||||||||||||
2371 | if (!parseElementName(&basicSel->elementName)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2372 | } never executed: else {end of block | 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)
| 0 | ||||||||||||||||||||||||
2381 | QString theid = lexem(); | - | ||||||||||||||||||||||||
2382 | - | |||||||||||||||||||||||||
2383 | theid.remove(0, 1); | - | ||||||||||||||||||||||||
2384 | basicSel->ids.append(theid); | - | ||||||||||||||||||||||||
2385 | onceMore = true; | - | ||||||||||||||||||||||||
2386 | } never executed: else if (testClass()end of block
| 0 | ||||||||||||||||||||||||
2387 | onceMore = true; | - | ||||||||||||||||||||||||
2388 | AttributeSelector a; | - | ||||||||||||||||||||||||
2389 | a.name = QLatin1String("class"); | - | ||||||||||||||||||||||||
2390 | a.valueMatchCriterium = AttributeSelector::MatchContains; | - | ||||||||||||||||||||||||
2391 | if (!parseClass(&a.value)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2392 | basicSel->attributeSelectors.append(a); | - | ||||||||||||||||||||||||
2393 | } never executed: else if (testAttrib()end of block
| 0 | ||||||||||||||||||||||||
2394 | onceMore = true; | - | ||||||||||||||||||||||||
2395 | AttributeSelector a; | - | ||||||||||||||||||||||||
2396 | if (!parseAttrib(&a)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2397 | basicSel->attributeSelectors.append(a); | - | ||||||||||||||||||||||||
2398 | } never executed: else if (testPseudo()end of block
| 0 | ||||||||||||||||||||||||
2399 | onceMore = true; | - | ||||||||||||||||||||||||
2400 | Pseudo ps; | - | ||||||||||||||||||||||||
2401 | if (!parsePseudo(&ps)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2402 | basicSel->pseudos.append(ps); | - | ||||||||||||||||||||||||
2403 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2404 | if (onceMore
never executed: count;++count; never executed: ++count; | 0 | ||||||||||||||||||||||||
2405 | } never executed: while (onceMoreend of block
| 0 | ||||||||||||||||||||||||
2406 | return never executed: count >= minCount;return count >= minCount; never executed: return count >= minCount; | 0 | ||||||||||||||||||||||||
2407 | } | - | ||||||||||||||||||||||||
2408 | - | |||||||||||||||||||||||||
2409 | bool Parser::parseClass(QString *name) | - | ||||||||||||||||||||||||
2410 | { | - | ||||||||||||||||||||||||
2411 | if (!next(IDENT)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2412 | *name = lexem(); | - | ||||||||||||||||||||||||
2413 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2414 | } | - | ||||||||||||||||||||||||
2415 | - | |||||||||||||||||||||||||
2416 | bool Parser::parseElementName(QString *name) | - | ||||||||||||||||||||||||
2417 | { | - | ||||||||||||||||||||||||
2418 | switch (lookup()) { | - | ||||||||||||||||||||||||
2419 | case never executed: STAR:case STAR: never executed: name->clear(); break;case STAR: never executed: break; | 0 | ||||||||||||||||||||||||
2420 | case never executed: IDENT:case IDENT: never executed: *name = lexem(); break;case IDENT: never executed: break; | 0 | ||||||||||||||||||||||||
2421 | default never executed: :default: never executed: returndefault: never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2422 | } | - | ||||||||||||||||||||||||
2423 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2424 | } | - | ||||||||||||||||||||||||
2425 | - | |||||||||||||||||||||||||
2426 | bool Parser::parseAttrib(AttributeSelector *attr) | - | ||||||||||||||||||||||||
2427 | { | - | ||||||||||||||||||||||||
2428 | skipSpace(); | - | ||||||||||||||||||||||||
2429 | if (!next(IDENT)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2430 | attr->name = lexem(); | - | ||||||||||||||||||||||||
2431 | skipSpace(); | - | ||||||||||||||||||||||||
2432 | - | |||||||||||||||||||||||||
2433 | if (test(EQUAL)
| 0 | ||||||||||||||||||||||||
2434 | attr->valueMatchCriterium = AttributeSelector::MatchEqual; | - | ||||||||||||||||||||||||
2435 | } never executed: else if (test(INCLUDES)end of block
| 0 | ||||||||||||||||||||||||
2436 | attr->valueMatchCriterium = AttributeSelector::MatchContains; | - | ||||||||||||||||||||||||
2437 | } never executed: else if (test(DASHMATCH)end of block
| 0 | ||||||||||||||||||||||||
2438 | attr->valueMatchCriterium = AttributeSelector::MatchBeginsWith; | - | ||||||||||||||||||||||||
2439 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
2440 | return never executed: next(RBRACKET);return next(RBRACKET); never executed: return next(RBRACKET); | 0 | ||||||||||||||||||||||||
2441 | } | - | ||||||||||||||||||||||||
2442 | - | |||||||||||||||||||||||||
2443 | skipSpace(); | - | ||||||||||||||||||||||||
2444 | - | |||||||||||||||||||||||||
2445 | if (!test(IDENT)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2446 | attr->value = unquotedLexem(); | - | ||||||||||||||||||||||||
2447 | - | |||||||||||||||||||||||||
2448 | skipSpace(); | - | ||||||||||||||||||||||||
2449 | return never executed: next(RBRACKET);return next(RBRACKET); never executed: return next(RBRACKET); | 0 | ||||||||||||||||||||||||
2450 | } | - | ||||||||||||||||||||||||
2451 | - | |||||||||||||||||||||||||
2452 | bool Parser::parsePseudo(Pseudo *pseudo) | - | ||||||||||||||||||||||||
2453 | { | - | ||||||||||||||||||||||||
2454 | (void)test(COLON); | - | ||||||||||||||||||||||||
2455 | pseudo->negated = test(EXCLAMATION_SYM); | - | ||||||||||||||||||||||||
2456 | if (test(IDENT)
| 0 | ||||||||||||||||||||||||
2457 | pseudo->name = lexem(); | - | ||||||||||||||||||||||||
2458 | pseudo->type = static_cast<quint64>(findKnownValue(pseudo->name, pseudos, NumPseudos)); | - | ||||||||||||||||||||||||
2459 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2460 | } | - | ||||||||||||||||||||||||
2461 | if (!next(FUNCTION)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2462 | pseudo->function = lexem(); | - | ||||||||||||||||||||||||
2463 | - | |||||||||||||||||||||||||
2464 | pseudo->function.chop(1); | - | ||||||||||||||||||||||||
2465 | skipSpace(); | - | ||||||||||||||||||||||||
2466 | if (!test(IDENT)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2467 | pseudo->name = lexem(); | - | ||||||||||||||||||||||||
2468 | skipSpace(); | - | ||||||||||||||||||||||||
2469 | return never executed: next(RPAREN);return next(RPAREN); never executed: return next(RPAREN); | 0 | ||||||||||||||||||||||||
2470 | } | - | ||||||||||||||||||||||||
2471 | - | |||||||||||||||||||||||||
2472 | bool Parser::parseNextDeclaration(Declaration *decl) | - | ||||||||||||||||||||||||
2473 | { | - | ||||||||||||||||||||||||
2474 | if (!testProperty()
| 0 | ||||||||||||||||||||||||
2475 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2476 | if (!parseProperty(decl)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2477 | if (!next(COLON)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2478 | skipSpace(); | - | ||||||||||||||||||||||||
2479 | if (!parseNextExpr(&decl->d->values)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2480 | if (testPrio()
| 0 | ||||||||||||||||||||||||
2481 | if (!parsePrio(decl)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2482 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2483 | } | - | ||||||||||||||||||||||||
2484 | - | |||||||||||||||||||||||||
2485 | bool Parser::testPrio() | - | ||||||||||||||||||||||||
2486 | { | - | ||||||||||||||||||||||||
2487 | const int rewind = index; | - | ||||||||||||||||||||||||
2488 | if (!test(EXCLAMATION_SYM)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2489 | skipSpace(); | - | ||||||||||||||||||||||||
2490 | if (!test(IDENT)
| 0 | ||||||||||||||||||||||||
2491 | index = rewind; | - | ||||||||||||||||||||||||
2492 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2493 | } | - | ||||||||||||||||||||||||
2494 | if (lexem().compare(QLatin1String("important"), Qt::CaseInsensitive) != 0
| 0 | ||||||||||||||||||||||||
2495 | index = rewind; | - | ||||||||||||||||||||||||
2496 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2497 | } | - | ||||||||||||||||||||||||
2498 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2499 | } | - | ||||||||||||||||||||||||
2500 | - | |||||||||||||||||||||||||
2501 | bool Parser::parsePrio(Declaration *declaration) | - | ||||||||||||||||||||||||
2502 | { | - | ||||||||||||||||||||||||
2503 | declaration->d->important = true; | - | ||||||||||||||||||||||||
2504 | skipSpace(); | - | ||||||||||||||||||||||||
2505 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2506 | } | - | ||||||||||||||||||||||||
2507 | - | |||||||||||||||||||||||||
2508 | bool Parser::parseExpr(QVector<Value> *values) | - | ||||||||||||||||||||||||
2509 | { | - | ||||||||||||||||||||||||
2510 | Value val; | - | ||||||||||||||||||||||||
2511 | if (!parseTerm(&val)
never executed: false;return 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)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2518 | if (val.type != QCss::Value::Unknown
| 0 | ||||||||||||||||||||||||
2519 | values->append(val); never executed: values->append(val); | 0 | ||||||||||||||||||||||||
2520 | if (testTerm()
| 0 | ||||||||||||||||||||||||
2521 | onceMore = true; | - | ||||||||||||||||||||||||
2522 | val = Value(); | - | ||||||||||||||||||||||||
2523 | if (!parseTerm(&val)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2524 | values->append(val); | - | ||||||||||||||||||||||||
2525 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2526 | } never executed: while (onceMoreend of block
| 0 | ||||||||||||||||||||||||
2527 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2528 | } | - | ||||||||||||||||||||||||
2529 | - | |||||||||||||||||||||||||
2530 | bool Parser::testTerm() | - | ||||||||||||||||||||||||
2531 | { | - | ||||||||||||||||||||||||
2532 | return never executed: test(PLUS)return test(PLUS) || test(MINUS) || test(NUMBER) || test(PERCENTAGE) || test(LENGTH) || test(STRING) || test(IDENT) || testHexColor() || testFunction();
never executed: return test(PLUS) || test(MINUS) || test(NUMBER) || test(PERCENTAGE) || test(LENGTH) || test(STRING) || test(IDENT) || testHexColor() || testFunction(); | 0 | ||||||||||||||||||||||||
2533 | || test(NUMBER)
never executed: return test(PLUS) || test(MINUS) || test(NUMBER) || test(PERCENTAGE) || test(LENGTH) || test(STRING) || test(IDENT) || testHexColor() || testFunction(); | 0 | ||||||||||||||||||||||||
2534 | || test(PERCENTAGE)
never executed: return test(PLUS) || test(MINUS) || test(NUMBER) || test(PERCENTAGE) || test(LENGTH) || test(STRING) || test(IDENT) || testHexColor() || testFunction(); | 0 | ||||||||||||||||||||||||
2535 | || test(LENGTH)
never executed: return test(PLUS) || test(MINUS) || test(NUMBER) || test(PERCENTAGE) || test(LENGTH) || test(STRING) || test(IDENT) || testHexColor() || testFunction(); | 0 | ||||||||||||||||||||||||
2536 | || test(STRING)
never executed: return test(PLUS) || test(MINUS) || test(NUMBER) || test(PERCENTAGE) || test(LENGTH) || test(STRING) || test(IDENT) || testHexColor() || testFunction(); | 0 | ||||||||||||||||||||||||
2537 | || test(IDENT)
never executed: return test(PLUS) || test(MINUS) || test(NUMBER) || test(PERCENTAGE) || test(LENGTH) || test(STRING) || test(IDENT) || testHexColor() || testFunction(); | 0 | ||||||||||||||||||||||||
2538 | || testHexColor()
never executed: return test(PLUS) || test(MINUS) || test(NUMBER) || test(PERCENTAGE) || test(LENGTH) || test(STRING) || test(IDENT) || testHexColor() || testFunction(); | 0 | ||||||||||||||||||||||||
2539 | || testFunction()
never executed: return test(PLUS) || test(MINUS) || test(NUMBER) || test(PERCENTAGE) || test(LENGTH) || test(STRING) || test(IDENT) || testHexColor() || testFunction(); | 0 | ||||||||||||||||||||||||
2540 | } | - | ||||||||||||||||||||||||
2541 | - | |||||||||||||||||||||||||
2542 | bool Parser::parseTerm(Value *value) | - | ||||||||||||||||||||||||
2543 | { | - | ||||||||||||||||||||||||
2544 | QString str = lexem(); | - | ||||||||||||||||||||||||
2545 | bool haveUnary = false; | - | ||||||||||||||||||||||||
2546 | if (lookup() == PLUS
| 0 | ||||||||||||||||||||||||
2547 | haveUnary = true; | - | ||||||||||||||||||||||||
2548 | if (!hasNext()
never executed: false;return 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: NUMBER:case 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: PERCENTAGE:case 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: LENGTH:case LENGTH: never executed: case LENGTH: | 0 | ||||||||||||||||||||||||
2566 | value->type = Value::Length; | - | ||||||||||||||||||||||||
2567 | break; never executed: break; | 0 | ||||||||||||||||||||||||
2568 | - | |||||||||||||||||||||||||
2569 | case never executed: STRING:case STRING: never executed: case STRING: | 0 | ||||||||||||||||||||||||
2570 | if (haveUnary
never executed: false;return 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: IDENT:case IDENT: never executed: {case IDENT: | 0 | ||||||||||||||||||||||||
2577 | if (haveUnary
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2578 | value->type = Value::Identifier; | - | ||||||||||||||||||||||||
2579 | const int theid = findKnownValue(str, values, NumKnownValues); | - | ||||||||||||||||||||||||
2580 | if (theid != 0
| 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
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2588 | prev(); | - | ||||||||||||||||||||||||
2589 | if (testHexColor()
| 0 | ||||||||||||||||||||||||
2590 | QColor col; | - | ||||||||||||||||||||||||
2591 | if (!parseHexColor(&col)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2592 | value->type = Value::Color; | - | ||||||||||||||||||||||||
2593 | value->variant = col; | - | ||||||||||||||||||||||||
2594 | } never executed: else if (testFunction()end of block
| 0 | ||||||||||||||||||||||||
2595 | QString name, args; | - | ||||||||||||||||||||||||
2596 | if (!parseFunction(&name, &args)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2597 | if (name == QLatin1String("url")
| 0 | ||||||||||||||||||||||||
2598 | value->type = Value::Uri; | - | ||||||||||||||||||||||||
2599 | removeOptionalQuotes(&args); | - | ||||||||||||||||||||||||
2600 | if (QFileInfo(args).isRelative()
| 0 | ||||||||||||||||||||||||
2601 | args.prepend(sourcePath); | - | ||||||||||||||||||||||||
2602 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2603 | value->variant = args; | - | ||||||||||||||||||||||||
2604 | } never executed: else {end of block | 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: recordError();return recordError(); never executed: return recordError(); | 0 | ||||||||||||||||||||||||
2610 | } | - | ||||||||||||||||||||||||
2611 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2612 | } | - | ||||||||||||||||||||||||
2613 | } | - | ||||||||||||||||||||||||
2614 | skipSpace(); | - | ||||||||||||||||||||||||
2615 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2616 | } | - | ||||||||||||||||||||||||
2617 | - | |||||||||||||||||||||||||
2618 | bool 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)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2625 | for (int i = start; i < index - 1
| 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: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2633 | } | - | ||||||||||||||||||||||||
2634 | - | |||||||||||||||||||||||||
2635 | bool Parser::parseHexColor(QColor *col) | - | ||||||||||||||||||||||||
2636 | { | - | ||||||||||||||||||||||||
2637 | col->setNamedColor(lexem()); | - | ||||||||||||||||||||||||
2638 | if (!col->isValid()
| 0 | ||||||||||||||||||||||||
2639 | QMessageLogger(__FILE__, 2690, __PRETTY_FUNCTION__).warning("QCssParser::parseHexColor: Unknown color name '%s'",lexem().toLatin1().constData()); | - | ||||||||||||||||||||||||
2640 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2641 | } | - | ||||||||||||||||||||||||
2642 | skipSpace(); | - | ||||||||||||||||||||||||
2643 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2644 | } | - | ||||||||||||||||||||||||
2645 | - | |||||||||||||||||||||||||
2646 | bool Parser::testAndParseUri(QString *uri) | - | ||||||||||||||||||||||||
2647 | { | - | ||||||||||||||||||||||||
2648 | const int rewind = index; | - | ||||||||||||||||||||||||
2649 | if (!testFunction()
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2650 | - | |||||||||||||||||||||||||
2651 | QString name, args; | - | ||||||||||||||||||||||||
2652 | if (!parseFunction(&name, &args)
| 0 | ||||||||||||||||||||||||
2653 | index = rewind; | - | ||||||||||||||||||||||||
2654 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2655 | } | - | ||||||||||||||||||||||||
2656 | if (name.toLower() != QLatin1String("url")
| 0 | ||||||||||||||||||||||||
2657 | index = rewind; | - | ||||||||||||||||||||||||
2658 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2659 | } | - | ||||||||||||||||||||||||
2660 | *uri = args; | - | ||||||||||||||||||||||||
2661 | removeOptionalQuotes(uri); | - | ||||||||||||||||||||||||
2662 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2663 | } | - | ||||||||||||||||||||||||
2664 | - | |||||||||||||||||||||||||
2665 | bool Parser::testSimpleSelector() | - | ||||||||||||||||||||||||
2666 | { | - | ||||||||||||||||||||||||
2667 | return never executed: testElementName()return testElementName() || (test(HASH)) || testClass() || testAttrib() || testPseudo();
never executed: return testElementName() || (test(HASH)) || testClass() || testAttrib() || testPseudo(); | 0 | ||||||||||||||||||||||||
2668 | || (
never executed: return testElementName() || (test(HASH)) || testClass() || testAttrib() || testPseudo(); | 0 | ||||||||||||||||||||||||
2669 | || testClass()
never executed: return testElementName() || (test(HASH)) || testClass() || testAttrib() || testPseudo(); | 0 | ||||||||||||||||||||||||
2670 | || testAttrib()
never executed: return testElementName() || (test(HASH)) || testClass() || testAttrib() || testPseudo(); | 0 | ||||||||||||||||||||||||
2671 | || testPseudo()
never executed: return testElementName() || (test(HASH)) || testClass() || testAttrib() || testPseudo(); | 0 | ||||||||||||||||||||||||
2672 | } | - | ||||||||||||||||||||||||
2673 | - | |||||||||||||||||||||||||
2674 | bool Parser::next(QCss::TokenType t) | - | ||||||||||||||||||||||||
2675 | { | - | ||||||||||||||||||||||||
2676 | if (hasNext()
| 0 | ||||||||||||||||||||||||
2677 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2678 | return never executed: recordError();return recordError(); never executed: return recordError(); | 0 | ||||||||||||||||||||||||
2679 | } | - | ||||||||||||||||||||||||
2680 | - | |||||||||||||||||||||||||
2681 | bool Parser::test(QCss::TokenType t) | - | ||||||||||||||||||||||||
2682 | { | - | ||||||||||||||||||||||||
2683 | if (index >= symbols.count()
| 0 | ||||||||||||||||||||||||
2684 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2685 | if (symbols.at(index).token == t
| 0 | ||||||||||||||||||||||||
2686 | ++index; | - | ||||||||||||||||||||||||
2687 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2688 | } | - | ||||||||||||||||||||||||
2689 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2690 | } | - | ||||||||||||||||||||||||
2691 | - | |||||||||||||||||||||||||
2692 | QString Parser::unquotedLexem() const | - | ||||||||||||||||||||||||
2693 | { | - | ||||||||||||||||||||||||
2694 | QString s = lexem(); | - | ||||||||||||||||||||||||
2695 | if (lookup() == STRING
| 0 | ||||||||||||||||||||||||
2696 | s.chop(1); | - | ||||||||||||||||||||||||
2697 | s.remove(0, 1); | - | ||||||||||||||||||||||||
2698 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2699 | return never executed: s;return s; never executed: return s; | 0 | ||||||||||||||||||||||||
2700 | } | - | ||||||||||||||||||||||||
2701 | - | |||||||||||||||||||||||||
2702 | QString Parser::lexemUntil(QCss::TokenType t) | - | ||||||||||||||||||||||||
2703 | { | - | ||||||||||||||||||||||||
2704 | QString lexem; | - | ||||||||||||||||||||||||
2705 | while (hasNext()
| 0 | ||||||||||||||||||||||||
2706 | lexem += symbol().lexem(); never executed: lexem += symbol().lexem(); | 0 | ||||||||||||||||||||||||
2707 | return never executed: lexem;return lexem; never executed: return lexem; | 0 | ||||||||||||||||||||||||
2708 | } | - | ||||||||||||||||||||||||
2709 | - | |||||||||||||||||||||||||
2710 | bool Parser::until(QCss::TokenType target, QCss::TokenType target2) | - | ||||||||||||||||||||||||
2711 | { | - | ||||||||||||||||||||||||
2712 | int braceCount = 0; | - | ||||||||||||||||||||||||
2713 | int brackCount = 0; | - | ||||||||||||||||||||||||
2714 | int parenCount = 0; | - | ||||||||||||||||||||||||
2715 | if (index
| 0 | ||||||||||||||||||||||||
2716 | switch(symbols.at(index-1).token) { | - | ||||||||||||||||||||||||
2717 | case never executed: LBRACE:case LBRACE: never executed: ++braceCount; break;case LBRACE: never executed: break; | 0 | ||||||||||||||||||||||||
2718 | case never executed: LBRACKET:case LBRACKET: never executed: ++brackCount; break;case LBRACKET: never executed: break; | 0 | ||||||||||||||||||||||||
2719 | case never executed: FUNCTION:case FUNCTION: never executed: case FUNCTION: | 0 | ||||||||||||||||||||||||
2720 | case never executed: LPAREN:case LPAREN: never executed: ++parenCount; break;case LPAREN: 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()
| 0 | ||||||||||||||||||||||||
2725 | QCss::TokenType t = symbols.at(index++).token; | - | ||||||||||||||||||||||||
2726 | switch (t) { | - | ||||||||||||||||||||||||
2727 | case never executed: LBRACE:case LBRACE: never executed: ++braceCount; break;case LBRACE: never executed: break; | 0 | ||||||||||||||||||||||||
2728 | case never executed: RBRACE:case RBRACE: never executed: --braceCount; break;case RBRACE: never executed: break; | 0 | ||||||||||||||||||||||||
2729 | case never executed: LBRACKET:case LBRACKET: never executed: ++brackCount; break;case LBRACKET: never executed: break; | 0 | ||||||||||||||||||||||||
2730 | case never executed: RBRACKET:case RBRACKET: never executed: --brackCount; break;case RBRACKET: never executed: break; | 0 | ||||||||||||||||||||||||
2731 | case never executed: FUNCTION:case FUNCTION: never executed: case FUNCTION: | 0 | ||||||||||||||||||||||||
2732 | case never executed: LPAREN:case LPAREN: never executed: ++parenCount; break;case LPAREN: never executed: break; | 0 | ||||||||||||||||||||||||
2733 | case never executed: RPAREN:case RPAREN: never executed: --parenCount; break;case RPAREN: never executed: break; | 0 | ||||||||||||||||||||||||
2734 | default never executed: :default: never executed: break;default: never executed: break; | 0 | ||||||||||||||||||||||||
2735 | } | - | ||||||||||||||||||||||||
2736 | if ((t == target
| 0 | ||||||||||||||||||||||||
2737 | && braceCount <= 0
| 0 | ||||||||||||||||||||||||
2738 | && brackCount <= 0
| 0 | ||||||||||||||||||||||||
2739 | && parenCount <= 0
| 0 | ||||||||||||||||||||||||
2740 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2741 | - | |||||||||||||||||||||||||
2742 | if (braceCount < 0
| 0 | ||||||||||||||||||||||||
2743 | --index; | - | ||||||||||||||||||||||||
2744 | break; never executed: break; | 0 | ||||||||||||||||||||||||
2745 | } | - | ||||||||||||||||||||||||
2746 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2747 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2748 | } | - | ||||||||||||||||||||||||
2749 | - | |||||||||||||||||||||||||
2750 | bool Parser::testTokenAndEndsWith(QCss::TokenType t, QLatin1String str) | - | ||||||||||||||||||||||||
2751 | { | - | ||||||||||||||||||||||||
2752 | if (!test(t)
never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2753 | if (!lexem().endsWith(str, Qt::CaseInsensitive)
| 0 | ||||||||||||||||||||||||
2754 | prev(); | - | ||||||||||||||||||||||||
2755 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2756 | } | - | ||||||||||||||||||||||||
2757 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2758 | } | - | ||||||||||||||||||||||||
2759 | - | |||||||||||||||||||||||||
2760 | - | |||||||||||||||||||||||||
Switch to Source code | Preprocessed file |