/// <summary> /// Enumerates the inline tags of the container and stores a hash of <see cref="Data"/> references /// in <paramref name="idDataMap"/>. Also stores a map from Id to the inline tag with that Id. /// </summary> /// <param name="container">The resource that contains inline tags to enumerate.</param> /// <param name="idDataMap">A dictionary whose key is the inline tag Id and the value is a hash composed of /// all the <see cref="Data"/> references referenced by the inline tag. If the inline tag doesn't support Data /// references then the item will not be included in the dictionary.</param> /// <param name="idMap">A dictionary whose key is the inline tag Id and the value is the corresponding /// inline tag. This value may be null if the map is not needed by the caller..</param> private static void BuildDataReferenceMap( IResourceStringContentContainer container, Dictionary <string, string> idDataMap, Dictionary <string, IIdentifiable> idMap) { foreach (ResourceStringContent content in container.Text) { IIdentifiable identifiable; identifiable = content as IIdentifiable; if ((identifiable != null) && content.SupportsDataReferences) { StringBuilder hash; hash = new StringBuilder(); foreach (KeyValuePair <string, string> pair in content.AllDataReferences) { hash.AppendFormat("|||{0}:{1}", pair.Key, pair.Value); } idDataMap[identifiable.Id] = hash.ToString(); if (idMap != null) { idMap[identifiable.Id] = identifiable; } } // Some inline tags support nested inline tags. if (content is IResourceStringContentContainer) { Utilities.BuildDataReferenceMap((IResourceStringContentContainer)content, idDataMap, idMap); } } }
/// <summary> /// Gets all the selectable inline tags under a container and stores them in the specified list. /// </summary> /// <param name="container">The container to search under.</param> /// <param name="list">The list to add the selectable inline tags to.</param> internal static void AddAllSelectableInlineTags(IResourceStringContentContainer container, List <ISelectable> list) { if (container != null) { foreach (ResourceStringContent content in container.Text) { ISelectable selectable; selectable = content as ISelectable; if (selectable != null) { list.Add(selectable); } // Some inline tags support nested inline tags. Utilities.AddAllSelectableInlineTags(content as IResourceStringContentContainer, list); } } }