protected virtual BuildTagProvider GetProvider(string category, string tagName) { if (String.IsNullOrEmpty(category) || String.IsNullOrEmpty(tagName)) { return(null); } BuildTagProvider provider = null; IList <BuildTagProvider> providers = _userProviders[category]; if (providers != null && providers.Count != 0) { for (int i = 0; i < providers.Count; i++) { BuildTagProvider tagProvider = providers[i]; if (tagProvider.IsSupported(tagName)) { provider = tagProvider; break; } } } return(provider); }
protected override BuildTagProvider GetProvider(string category, string tagName) { // Give priority to the default registered providers... BuildTagProvider provider = base.GetProvider(category, tagName); if (provider != null) { return(provider); } IList <BuildTagProvider> providers = _providers[category]; if (providers != null && providers.Count != 0) { for (int i = 0; i < providers.Count; i++) { BuildTagProvider tagProvider = providers[i]; if (tagProvider.IsSupported(tagName)) { provider = tagProvider; break; } } } return(provider); }
public virtual string Resolve(string sourceText, BuildTagProvider provider) { // Is the resolving mode started by the user or by this method? bool startedResolving = false; if (!_isResolving) { this.BeginResolve(); startedResolving = true; } // Process the tag... string resolvedText = this.OnResolve(sourceText, provider); if (String.IsNullOrEmpty(resolvedText)) { resolvedText = sourceText; } if (startedResolving) { this.EndResolve(); } return(resolvedText); }
public virtual bool RegisterProvider(BuildTagProvider provider) { BuildExceptions.NotNull(provider, "provider"); if (String.IsNullOrEmpty(provider.Id) || String.IsNullOrEmpty(provider.Category)) { return(false); } _userProviders.Add(provider.Category, provider); return(true); }
private string GetReplacement(string tagName, string category, string numberText, string formatText, string functionName, BuildTagProvider provider) { string replacement = null; if (provider != null && String.Equals(provider.Category, category) && provider.IsSupported(tagName)) { replacement = provider.GetText(tagName, numberText, formatText); } else { BuildTagProvider tagProvider = this.GetProvider(category, tagName); if (tagProvider != null) { replacement = tagProvider.GetText(tagName, numberText, formatText); } else { // We have the default processing... replacement = this.GetReplacement(tagName, numberText, formatText); } } if (!String.IsNullOrEmpty(replacement) && !String.IsNullOrEmpty(functionName)) { Func <string, string> function = this.GetFunction(functionName); if (function != null) { replacement = function(replacement); } } return(replacement); }
public static string ResolveText(string sourceText, BuildTagProvider provider) { BuildTagResolver resolver = BuildTagResolver.Resolver; return(resolver.Resolve(sourceText, provider)); }
protected override string OnResolve(string sourceText, BuildTagProvider provider) { StringBuilder inputText = new StringBuilder(sourceText); Match match = _regEx.Match(inputText.ToString()); while (match != null && match.Success) { int index = match.Index; int length = match.Length; string value = match.Value; string name = match.Groups["TagName"].Value; string[] parts = name.Split('|'); string namePart = String.Empty; string formatPart = String.Empty; string functionPart = String.Empty; switch (parts.Length) { case 1: namePart = parts[0]; break; case 2: namePart = parts[0]; string tempText = parts[1].Trim(); if (tempText.StartsWith("(", StringComparison.Ordinal) && tempText.EndsWith(")", StringComparison.Ordinal)) { functionPart = parts[1].Substring(1, parts[1].Length - 2); } else { formatPart = parts[1]; } break; case 3: namePart = parts[0]; formatPart = parts[1]; functionPart = parts[2].Substring(1, parts[2].Length - 2); break; default: throw new ArgumentException(); } string categoryPart = String.Empty; string numberPart = String.Empty; int foundAt = namePart.IndexOf(':'); if (foundAt > 0) { categoryPart = namePart.Substring(0, foundAt).Trim(); namePart = namePart.Substring(foundAt + 1).Trim(); } foundAt = namePart.IndexOf('['); if (foundAt > 0 && namePart.EndsWith("]", StringComparison.Ordinal)) { numberPart = namePart.Substring(foundAt + 1, namePart.Length - foundAt - 2).Trim(); namePart = namePart.Substring(0, foundAt).Trim(); } string replacement = this.GetReplacement(namePart, categoryPart, numberPart, formatPart, functionPart, provider); if (!String.IsNullOrEmpty(replacement)) { // If a replacement is found, apply it... inputText.Remove(index, length); // delete the current inputText.Insert(index, replacement); // insert the new } match = _regEx.Match(inputText.ToString(), index); } return(inputText.ToString()); }
protected abstract string OnResolve(string sourceText, BuildTagProvider provider);
public virtual bool UnregisterProvider(BuildTagProvider provider) { BuildExceptions.NotNull(provider, "provider"); return(this.UnregisterProvider(provider.Category, provider.Id)); }