# Function calls

a {
  color: rgba(0, 255, 0, 0.5);
}

==>

ruleSet.d(tag.name.selector, block(property.d(property.n, call.expression(callee.name, argument.list(number.l, number.l, number.l, number.l)))))

# Calls where each argument has multiple values

div {
  background: repeating-linear-gradient(red, orange 50px);
  clip-path: polygon(50% 0%, 60% 40%, 100% 50%, 60% 60%, 50% 100%, 40% 60%, 0% 50%, 40% 40%)
}

==>

ruleSet.d(tag.name.selector, block(
  property.d(property.n, call.expression(callee.name, argument.list(value.n, value.n, number.l(unit.n)))),
  property.d(property.n, call.expression(callee.name, argument.list(
    number.l(unit.n), number.l(unit.n), number.l(unit.n), number.l(unit.n), number.l(unit.n),
    number.l(unit.n), number.l(unit.n), number.l(unit.n), number.l(unit.n), number.l(unit.n),
    number.l(unit.n), number.l(unit.n), number.l(unit.n), number.l(unit.n), number.l(unit.n), number.l(unit.n))))))

# Color literals

a {
  b: #fafd04;
  c: #fafd0401;
}

==>

ruleSet.d(tag.name.selector, block(
  property.d(property.n, color.l),
  property.d(property.n, color.l)))

# Numbers

a {
  b: 0.5%;
  c: 5em;
  margin: 10E3px;
  margin: -456.8px;
  margin: -0.0px;
}

==>

ruleSet.d(tag.name.selector, block(
  property.d(property.n, number.l(unit.n)),
  property.d(property.n, number.l(unit.n)),
  property.d(property.n, number.l(unit.n)),
  property.d(property.n, number.l(unit.n)),
  property.d(property.n, number.l(unit.n))))

# Binary arithmetic operators

a {
  width: calc(100% - 80px);
  aspect-ratio: 1/2;
  font-size: calc(10px + (56 - 10) * ((100vw - 320px) / (1920 - 320)));
}

==>

ruleSet.d(tag.name.selector, block(
  property.d(property.n, call.expression(callee.name, argument.list(binary.o(number.l(unit.n), operator.name, number.l(unit.n))))),
  property.d(property.n, binary.o(number.l, operator.name, number.l)),
  property.d(property.n, call.expression(callee.name, argument.list(
    binary.o(binary.o(number.l(unit.n), operator.name,
      parenthesized.e(binary.o(number.l, operator.name, number.l))), operator.name,
      parenthesized.e(binary.o(parenthesized.e(binary.o(number.l(unit.n), operator.name, number.l(unit.n))),
        operator.name, parenthesized.e(binary.o(number.l, operator.name, number.l))))))))))

# Strings

a {
  b: '';
  c: '\'hi\'';
}

==>

ruleSet.d(tag.name.selector, block(
  property.d(property.n, string.l),
  property.d(property.n, string.l)))

# URLs

a {
  b: url(http://something-else?foo=bar);
}

==>

ruleSet.d(tag.name.selector, block(
  property.d(property.n, call.l(callee.name, parenthesized.c))))

# Important declarations

a {
  b: c !important;
}

==>

ruleSet.d(tag.name.selector, block(
  property.d(property.n, value.n, important.k)))

# Comments right after numbers

a {
	shape-outside: circle(20em/*=*/at 50% 50%);
	shape-outside: inset(1em, 1em, 1em, 1em);
}

==>

ruleSet.d(tag.name.selector, block(
  property.d(property.n, call.expression(callee.name, argument.list(number.l(unit.n), block.c, value.n, number.l(unit.n), number.l(unit.n)))),
  property.d(property.n, call.expression(callee.name, argument.list(number.l(unit.n), number.l(unit.n), number.l(unit.n), number.l(unit.n))))))

