Skip to content

Commit 6e5bf1c

Browse files
akreuzkampChALkeR
authored andcommitted
Drop qmlobjdef, support dot syntax in qmlprop.
qmlobjdef supported only two components, a different format was needed to support assignments like Drag.hotSpot.x: width / 2. Now names with dot-syntax are parsed just like they are in pure js, so we now get nested dot-binary-expressions. PR-URL: #19 Reviewed-By: Сковорода Никита Андреевич <[email protected]>
1 parent 31067ec commit 6e5bf1c

File tree

6 files changed

+130
-29
lines changed

6 files changed

+130
-29
lines changed

src/api.js

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,11 @@ function qmlweb_parse($TEXT, document_type, exigent_mode) {
177177
return expr;
178178
}
179179

180-
function qml_is_element(str) {
181-
return str[0].toUpperCase() == str[0];
180+
function qml_is_element(name) {
181+
if (typeof name === "string") {
182+
return name[0].toUpperCase() === name[0];
183+
}
184+
return qml_is_element(name[1]) && name[2][0].toUpperCase() === name[2][0];
182185
}
183186

184187
function qmlblock() {
@@ -273,24 +276,13 @@ function qmlweb_parse($TEXT, document_type, exigent_mode) {
273276
return qmlsignaldef();
274277
}
275278
} else if (S.token.type == "name") {
276-
var propname = S.token.value;
277-
next();
278-
if (propname == "property" && (S.token.type == "name" || S.token.value == "var")) {
279-
return qmlpropdef();
280-
} else if (is("punc", ".")) { // property statement
281-
// anchors, fonts etc, a.b: statement;
282-
// Can also be Component.onCompleted: ...
283-
// Assume only one subproperty
279+
if (S.token.value == "property" && (S.token.type == "name" || S.token.value == "var")) {
284280
next();
285-
var subname = S.token.value;
286-
next();
287-
/* Check for ModuleQualifier.QMLElement */
288-
if (qml_is_element(subname)) {
289-
return as("qmlelem", propname + "." + subname, undefined, qmlblock());
290-
}
291-
expect(":");
292-
return as_statement("qmlobjdef", propname, subname);
293-
} else if (qml_is_element(propname)) {
281+
return qmlpropdef();
282+
}
283+
284+
var propname = subscripts(as_name(), false);
285+
if (qml_is_element(propname)) {
294286
// Element
295287
var onProp;
296288
if (is("name", "on")) {

tests/qml/Children.qml.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -161,9 +161,12 @@
161161
"30\n "
162162
],
163163
[
164-
"qmlobjdef",
165-
"border",
166-
"width",
164+
"qmlprop",
165+
[
166+
"dot",
167+
"border",
168+
"width"
169+
],
167170
[
168171
"stat",
169172
[
@@ -177,4 +180,4 @@
177180
]
178181
]
179182
]
180-
]
183+
]
File renamed without changes.

tests/qml/Drag.qml.json

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
[
2+
"toplevel",
3+
[
4+
[
5+
"qmlimport",
6+
"QtQuick",
7+
2,
8+
"",
9+
true
10+
]
11+
],
12+
[
13+
"qmlelem",
14+
"Rectangle",
15+
null,
16+
[
17+
[
18+
"qmlprop",
19+
"width",
20+
[
21+
"stat",
22+
[
23+
"num",
24+
100
25+
]
26+
],
27+
"100\n "
28+
],
29+
[
30+
"qmlprop",
31+
"height",
32+
[
33+
"stat",
34+
[
35+
"num",
36+
100
37+
]
38+
],
39+
"100\n\n "
40+
],
41+
[
42+
"qmlprop",
43+
[
44+
"dot",
45+
[
46+
"dot",
47+
"Drag",
48+
"hotSpot"
49+
],
50+
"x"
51+
],
52+
[
53+
"stat",
54+
[
55+
"binary",
56+
"/",
57+
[
58+
"name",
59+
"width"
60+
],
61+
[
62+
"num",
63+
2
64+
]
65+
]
66+
],
67+
"width / 2\n "
68+
],
69+
[
70+
"qmlprop",
71+
[
72+
"dot",
73+
[
74+
"dot",
75+
"Drag",
76+
"hotSpot"
77+
],
78+
"y"
79+
],
80+
[
81+
"stat",
82+
[
83+
"binary",
84+
"/",
85+
[
86+
"name",
87+
"height"
88+
],
89+
[
90+
"num",
91+
2
92+
]
93+
]
94+
],
95+
"height / 2\n"
96+
]
97+
]
98+
]
99+
]

tests/qml/ImportsNamed.qml.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,12 @@
2525
],
2626
[
2727
"qmlelem",
28-
"DOM.Div",
28+
[
29+
"dot",
30+
"DOM",
31+
"Div"
32+
],
2933
null,
3034
[]
3135
]
32-
]
36+
]

tests/qml/Properties.qml.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,12 @@
5151
"'green'\n "
5252
],
5353
[
54-
"qmlobjdef",
55-
"border",
56-
"width",
54+
"qmlprop",
55+
[
56+
"dot",
57+
"border",
58+
"width"
59+
],
5760
[
5861
"stat",
5962
[
@@ -140,4 +143,4 @@
140143
]
141144
]
142145
]
143-
]
146+
]

0 commit comments

Comments
 (0)