public Wz_Node HandleUol(Wz_Node currentNode) { if (currentNode == null || currentNode.ParentNode == null || string.IsNullOrEmpty(uol)) { return(null); } string[] dirs = this.uol.Split('/'); currentNode = currentNode.ParentNode; bool outImg = false; for (int i = 0; i < dirs.Length; i++) { string dir = dirs[i]; if (dir == "..") { if (currentNode.ParentNode == null) { Wz_Image img = currentNode.GetValueEx <Wz_Image>(null); if (img != null) { currentNode = img.OwnerNode.ParentNode; outImg = true; } else { currentNode = null; } } else { currentNode = currentNode.ParentNode; } } else { var dirNode = currentNode.FindNodeByPath(dir); if (dirNode == null && outImg) { dirNode = currentNode.FindNodeByPath(true, dir + ".img"); if (dirNode.GetValueEx <Wz_Image>(null) != null) { outImg = false; } } currentNode = dirNode; } if (currentNode == null) { return(null); } } return(currentNode); }
public static Wz_Node ResolveUol(this Wz_Node node) { if (node == null) { return(null); } Wz_Uol uol; while ((uol = node?.GetValueEx <Wz_Uol>(null)) != null) { node = uol.HandleUol(node); } return(node); }