convertPathToRelative method
Path
convertPathToRelative(
- Path globalPath
)
Implementation
Path convertPathToRelative(Path globalPath) {
// 1. Find last shared ancestor
// 2. Drill up using ".." style (actually represented as "^")
// 3. Re-build downward chain from common ancestor
var ownPath = path;
var minPathLength = min(globalPath.length, ownPath.length);
var lastSharedPathCompIndex = -1;
for (var i = 0; i < minPathLength; ++i) {
var ownComp = ownPath.getComponent(i);
var otherComp = globalPath.getComponent(i);
if (ownComp == otherComp) {
lastSharedPathCompIndex = i;
} else {
break;
}
}
// No shared path components, so just use global path
if (lastSharedPathCompIndex == -1) return globalPath;
var numUpwardsMoves = (ownPath.length - 1) - lastSharedPathCompIndex;
var newPathComps = <Component>[];
for (var up = 0; up < numUpwardsMoves; ++up) {
newPathComps.add(Component.toParent());
}
for (var down = lastSharedPathCompIndex + 1;
down < globalPath.length;
++down) {
newPathComps.add(globalPath.getComponent(down));
}
var relativePath = Path(newPathComps, true);
return relativePath;
}