parseNodeProperty method

dynamic parseNodeProperty(
  1. dynamic line,
  2. dynamic property,
  3. String contentLine
)

Implementation

parseNodeProperty(line, property, String contentLine) {
  var _regExp = RegExp(r'^"');
  var _regExp2 = RegExp(r'"$');

  var propName =
      property[1].replaceFirst(_regExp, '').replaceFirst(_regExp2, '').trim();
  var propValue =
      property[2].replaceFirst(_regExp, '').replaceFirst(_regExp2, '').trim();

  // for special case: base64 image data follows "Content: ," line
  //	Content: ,
  //	 "/9j/4RDaRXhpZgAATU0A..."
  if (propName == 'Content' && propValue == ',') {
    propValue = contentLine
        .replaceAll(RegExp(r'"'), '')
        .replaceFirst(RegExp(r',$'), '')
        .trim();
  }

  var currentNode = this.getCurrentNode();
  var parentName = currentNode.name;

  if (parentName == 'Properties70') {
    this.parseNodeSpecialProperty(line, propName, propValue);
    return;
  }

  // Connections
  if (propName == 'C') {
    var connProps = propValue.split(',').slice(1);
    var from = int.parse(connProps[0]);
    var to = int.parse(connProps[1]);

    var rest = propValue.split(',').slice(3);

    rest = rest.map((elem) {
      return elem.trim().replace(RegExp(r'^"'), '');
    }).toList();

    propName = 'connections';
    propValue = [from, to];
    append(propValue, rest);

    if (currentNode[propName] == null) {
      currentNode[propName] = [];
    }
  }

  // Node
  if (propName == 'Node') currentNode.id = propValue;

  // connections
  if (currentNode.keys.contains(propName) && currentNode[propName] is List) {
    currentNode[propName].add(propValue);
  } else {
    if (propName != 'a')
      currentNode[propName] = propValue;
    else
      currentNode.a = propValue;
  }

  this.setCurrentProp(currentNode, propName);

  // convert string to array, unless it ends in ',' in which case more will be added to it
  if (propName == 'a' && propValue.slice(-1) != ',') {
    currentNode.a = parseNumberArray(propValue);
  }
}