Emmet: support quantifiers after groups

This commit is contained in:
Alexander Zolotov
2017-07-04 20:27:21 +03:00
parent a86d5dc9b7
commit 76d7eda7fa
@@ -73,11 +73,11 @@ public abstract class EmmetParser {
@Nullable
protected ZenCodingNode parseAddOrMore() {
ZenCodingNode mul = parseMul();
ZenCodingNode mul = parseMul(parseExpression());
ZenCodingToken operationToken = getToken();
if (operationToken == ZenCodingTokens.OPENING_R_BRACKET) {
mul = new MoreOperationNode(notNullNode(mul), notNullNode(parseExpression()));
mul = parseMul(new MoreOperationNode(notNullNode(mul), notNullNode(parseExpression())));
operationToken = getToken();
}
if (!(operationToken instanceof OperationToken)) {
@@ -131,25 +131,18 @@ public abstract class EmmetParser {
}
@Nullable
private ZenCodingNode parseMul() {
ZenCodingNode exp = parseExpression();
if (exp == null) {
return null;
}
private ZenCodingNode parseMul(@Nullable ZenCodingNode expression) {
ZenCodingToken operationToken = getToken();
if (!(operationToken instanceof OperationToken)) {
return exp;
}
if (((OperationToken)operationToken).getSign() != '*') {
return exp;
}
advance();
ZenCodingToken numberToken = getToken();
if (numberToken instanceof NumberToken) {
if (expression != null && operationToken instanceof OperationToken && ((OperationToken)operationToken).getSign() == '*') {
advance();
return new MulOperationNode(exp, ((NumberToken)numberToken).getNumber());
ZenCodingToken numberToken = getToken();
if (numberToken instanceof NumberToken) {
advance();
return new MulOperationNode(expression, ((NumberToken)numberToken).getNumber());
}
return new UnaryMulOperationNode(expression);
}
return new UnaryMulOperationNode(exp);
return expression;
}
@Nullable