parseNodeProperty method
dynamic
parseNodeProperty(
- dynamic line,
- dynamic property,
- 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);
}
}