mediaFeature method

Expression mediaFeature ()

Search for something like:

@media all and (max-width: 1024px)

Implementation

Expression mediaFeature() {
  Node e;
  final List<Node> nodes = <Node>[];
  String p;

  parserInput.save();
  do {
    e = entities.keyword() ?? entities.variable() ?? entities.mixinLookup();

    if (e != null) {
      nodes.add(e);
    } else if (parserInput.$char('(') != null) {
      p = property();
      e = value();
      if (parserInput.$char(')') != null) {
        if (p != null && e != null) {
          nodes.add(Paren(Declaration(p, e,
              index: parserInput.i,
              currentFileInfo: fileInfo,
              inline: true)));
        } else if (e != null) {
          nodes.add(Paren(e));
        } else {
          parserInput.error('badly formed media feature definition');
        }
      } else {
        parserInput.error("Missing closing ')'", 'Parse');
      }
    }
  } while (e != null);

  parserInput.forget();
  return nodes.isNotEmpty ? Expression(nodes) : null;

// 3.5.1 20180706
//  mediaFeature: function () {
//      var entities = this.entities, nodes = [], e, p;
//      parserInput.save();
//      do {
//          e = entities.keyword() || entities.variable() || entities.mixinLookup();
//          if (e) {
//              nodes.push(e);
//          } else if (parserInput.$char('(')) {
//              p = this.property();
//              e = this.value();
//              if (parserInput.$char(')')) {
//                  if (p && e) {
//                      nodes.push(new(tree.Paren)(new(tree.Declaration)(p, e, null, null, parserInput.i, fileInfo, true)));
//                  } else if (e) {
//                      nodes.push(new(tree.Paren)(e));
//                  } else {
//                      error('badly formed media feature definition');
//                  }
//              } else {
//                  error('Missing closing \')\'', 'Parse');
//              }
//          }
//      } while (e);
//
//      parserInput.forget();
//      if (nodes.length > 0) {
//          return new(tree.Expression)(nodes);
//      }
//  },
}