/** * Register XML insert patch */ internal void RegisterPatch(string movie, string xpath, PrefabExtensionInsertPatch patch) { Debug.Assert(_prefabExtensionPaths.ContainsKey(patch.Name), $"Prefab extension with name {patch.Name} does not exist!"); RegisterPatch(movie, xpath, (node) => { var extensionNode = LoadPrefabExtension(patch.Name); var importedExtensionNode = node.OwnerDocument.ImportNode(extensionNode, true); var position = Math.Min(patch.Position, node.ChildNodes.Count - 1); position = Math.Max(position, 0); Debug.Assert(position >= 0 && position < node.ChildNodes.Count, $"Invalid position ({position}) for insert (patching in {patch.Name})"); node.InsertAfter(importedExtensionNode, node.ChildNodes[position]); }); }
/// <summary> /// Register snippet insert patch /// </summary> /// <param name="movie"></param> /// <param name="xpath"></param> /// <param name="patch"></param> public void RegisterPatch(string movie, string?xpath, PrefabExtensionInsertPatch patch) { RegisterPatch(movie, xpath, node => { var ownerDocument = node is XmlDocument xmlDocument ? xmlDocument : node.OwnerDocument !; var extensionNode = patch.GetPrefabExtension().DocumentElement; var importedExtensionNode = ownerDocument.ImportNode(extensionNode, true); var position = Math.Min(patch.Position, node.ChildNodes.Count - 1); position = Math.Max(position, 0); if (position >= node.ChildNodes.Count) { Utils.Fail($"Invalid position ({position}) for insert (patching in {patch.Id})"); } node.InsertAfter(importedExtensionNode, node.ChildNodes[position]); }); }
/// <summary> /// Register snippet insert patch /// </summary> /// <param name="movie"></param> /// <param name="xpath"></param> /// <param name="patch"></param> public void RegisterPatch(string movie, string?xpath, PrefabExtensionInsertPatch patch) => RegisterPatch(movie, xpath, node => { if (node.OwnerDocument is not { } ownerDocument) {