using System; using System.Text; using System.Collections.Generic; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; namespace Xamarin.MacDev.Tasks { public abstract class PackLibraryResourcesTaskBase : Task { #region Inputs public string SessionId { get; set; } [Required] public string Prefix { get; set; } public ITaskItem[] BundleResourcesWithLogicalNames { get; set; } #endregion #region Outputs [Output] public ITaskItem[] EmbeddedResources { get; set; } #endregion static string EscapeMangledResource (string name) { var mangled = new StringBuilder (); for (int i = 0; i < name.Length; i++) { switch (name[i]) { case '\\': mangled.Append ("_b"); break; case '/': mangled.Append ("_f"); break; case '_': mangled.Append ("__"); break; default: mangled.Append (name[i]); break; } } return mangled.ToString (); } public override bool Execute () { var results = new List (); if (BundleResourcesWithLogicalNames != null) { foreach (var item in BundleResourcesWithLogicalNames) { var logicalName = item.GetMetadata ("LogicalName"); if (string.IsNullOrEmpty (logicalName)) { Log.LogError ("Items must have logical names computed."); return false; } var embedded = new TaskItem (item); embedded.SetMetadata ("LogicalName", "__" + Prefix + "_content_" + EscapeMangledResource (logicalName)); results.Add (embedded); } } EmbeddedResources = results.ToArray (); return !Log.HasLoggedErrors; } } }