call method

Node call ()

A function call

rgb(255, 0, 255)

The arguments are parsed with the entities.arguments parser.

Implementation

Node call() {
  List<Node> args = <Node>[];
  bool func;
  final int index = parserInput.i;
  String name;

  if (parserInput.peek(_reCallUrl)) return null;

  parserInput.save();

  name = parserInput.$re(_callRegExp, 1);
  if (name == null) {
    parserInput.forget();
    return null;
  }

  func = customFuncCall(name, args); // Different from js
  if (func != null) {
    // name found
    if (args.isNotEmpty && func) {
      //stop
      parserInput.forget();
      return args.first; //must return Node
    }
  }

  args = arguments(args);

  if (parserInput.$char(')') == null) {
    parserInput.restore("Could not parse call arguments or missing ')'");
    return null;
  }

  parserInput.forget();
  return Call(name, args, index: index, currentFileInfo: fileInfo);

//3.0.0 20170607
// call: function () {
//     var name, args, func, index = parserInput.i;
//
//     // http://jsperf.com/case-insensitive-regex-vs-strtolower-then-regex/18
//     if (parserInput.peek(/^url\(/i)) {
//         return;
//     }
//
//     parserInput.save();
//
//     name = parserInput.$re(/^([\w-]+|%|progid:[\w\.]+)\(/);
//     if (!name) {
//         parserInput.forget();
//         return;
//     }
//
//     name = name[1];
//     func = this.customFuncCall(name);
//     if (func) {
//         args = func.parse();
//         if (args && func.stop) {
//             parserInput.forget();
//             return args;
//         }
//     }
//
//     args = this.arguments(args);
//
//     if (!parserInput.$char(')')) {
//         parserInput.restore("Could not parse call arguments or missing ')'");
//         return;
//     }
//
//     parserInput.forget();
//     return new(tree.Call)(name, args, index, fileInfo);
// },
}