parseNodeBegin method

dynamic parseNodeBegin(
  1. dynamic line,
  2. dynamic property
)

Implementation

parseNodeBegin(line, property) {
  var nodeName = property[1]
      .trim()
      .replaceFirst(RegExp(r'^"'), '')
      .replace(RegExp(r'"$'), '');

  var nodeAttrs = property[2].split(',').map((attr) {
    return attr
        .trim()
        .replaceFirst(RegExp(r'^"'), '')
        .replace(RegExp(r'"$'), '');
  }).toList();

  Map<String, dynamic> node = {"name": nodeName};
  var attrs = this.parseNodeAttr(nodeAttrs);

  Map currentNode = this.getCurrentNode();

  // a top node
  if (this.currentIndent == 0) {
    this.allNodes.add(nodeName, node);
  } else {
    // a subnode

    // if the subnode already exists, append it
    if (currentNode.keys.contains(nodeName)) {
      // special case Pose needs PoseNodes as an array
      if (nodeName == 'PoseNode') {
        currentNode["PoseNode"].add(node);
      } else if (currentNode[nodeName].id != null) {
        currentNode[nodeName] = {};
        currentNode[nodeName][currentNode[nodeName].id] =
            currentNode[nodeName];
      }

      if (attrs.id != '') currentNode[nodeName][attrs.id] = node;
    } else if (attrs.id is num) {
      currentNode[nodeName] = {};
      currentNode[nodeName][attrs.id] = node;
    } else if (nodeName != 'Properties70') {
      if (nodeName == 'PoseNode')
        currentNode[nodeName] = [node];
      else
        currentNode[nodeName] = node;
    }
  }

  if (attrs.id is num) node["id"] = attrs.id;
  if (attrs.name != '') node["attrName"] = attrs.name;
  if (attrs.type != '') node["attrType"] = attrs.type;

  this.pushStack(node);
}