diff --git a/src/api.js b/src/api.js index 3a52a89..f52b29a 100644 --- a/src/api.js +++ b/src/api.js @@ -177,8 +177,11 @@ function qmlweb_parse($TEXT, document_type, exigent_mode) { return expr; } - function qml_is_element(str) { - return str[0].toUpperCase() == str[0]; + function qml_is_element(name) { + if (typeof name === "string") { + return name[0].toUpperCase() === name[0]; + } + return qml_is_element(name[1]) && name[2][0].toUpperCase() === name[2][0]; } function qmlblock() { @@ -273,24 +276,13 @@ function qmlweb_parse($TEXT, document_type, exigent_mode) { return qmlsignaldef(); } } else if (S.token.type == "name") { - var propname = S.token.value; - next(); - if (propname == "property" && (S.token.type == "name" || S.token.value == "var")) { - return qmlpropdef(); - } else if (is("punc", ".")) { // property statement - // anchors, fonts etc, a.b: statement; - // Can also be Component.onCompleted: ... - // Assume only one subproperty + if (S.token.value == "property" && (S.token.type == "name" || S.token.value == "var")) { next(); - var subname = S.token.value; - next(); - /* Check for ModuleQualifier.QMLElement */ - if (qml_is_element(subname)) { - return as("qmlelem", propname + "." + subname, undefined, qmlblock()); - } - expect(":"); - return as_statement("qmlobjdef", propname, subname); - } else if (qml_is_element(propname)) { + return qmlpropdef(); + } + + var propname = subscripts(as_name(), false); + if (qml_is_element(propname)) { // Element var onProp; if (is("name", "on")) { diff --git a/tests/qml/Children.qml.json b/tests/qml/Children.qml.json index 58dfd61..4df047f 100644 --- a/tests/qml/Children.qml.json +++ b/tests/qml/Children.qml.json @@ -161,9 +161,12 @@ "30\n " ], [ - "qmlobjdef", - "border", - "width", + "qmlprop", + [ + "dot", + "border", + "width" + ], [ "stat", [ @@ -177,4 +180,4 @@ ] ] ] -] \ No newline at end of file +] diff --git a/tests/failing/Drag.qml b/tests/qml/Drag.qml similarity index 100% rename from tests/failing/Drag.qml rename to tests/qml/Drag.qml diff --git a/tests/qml/Drag.qml.json b/tests/qml/Drag.qml.json new file mode 100644 index 0000000..743e332 --- /dev/null +++ b/tests/qml/Drag.qml.json @@ -0,0 +1,99 @@ +[ + "toplevel", + [ + [ + "qmlimport", + "QtQuick", + 2, + "", + true + ] + ], + [ + "qmlelem", + "Rectangle", + null, + [ + [ + "qmlprop", + "width", + [ + "stat", + [ + "num", + 100 + ] + ], + "100\n " + ], + [ + "qmlprop", + "height", + [ + "stat", + [ + "num", + 100 + ] + ], + "100\n\n " + ], + [ + "qmlprop", + [ + "dot", + [ + "dot", + "Drag", + "hotSpot" + ], + "x" + ], + [ + "stat", + [ + "binary", + "/", + [ + "name", + "width" + ], + [ + "num", + 2 + ] + ] + ], + "width / 2\n " + ], + [ + "qmlprop", + [ + "dot", + [ + "dot", + "Drag", + "hotSpot" + ], + "y" + ], + [ + "stat", + [ + "binary", + "/", + [ + "name", + "height" + ], + [ + "num", + 2 + ] + ] + ], + "height / 2\n" + ] + ] + ] +] diff --git a/tests/qml/ImportsNamed.qml.json b/tests/qml/ImportsNamed.qml.json index fab0e24..ef4593a 100644 --- a/tests/qml/ImportsNamed.qml.json +++ b/tests/qml/ImportsNamed.qml.json @@ -25,8 +25,12 @@ ], [ "qmlelem", - "DOM.Div", + [ + "dot", + "DOM", + "Div" + ], null, [] ] -] \ No newline at end of file +] diff --git a/tests/qml/Properties.qml.json b/tests/qml/Properties.qml.json index fd46f7c..bece1d1 100644 --- a/tests/qml/Properties.qml.json +++ b/tests/qml/Properties.qml.json @@ -51,9 +51,12 @@ "'green'\n " ], [ - "qmlobjdef", - "border", - "width", + "qmlprop", + [ + "dot", + "border", + "width" + ], [ "stat", [ @@ -140,4 +143,4 @@ ] ] ] -] \ No newline at end of file +]