2016-04-21 16:40:25 +03:00
|
|
|
using System;
|
|
|
|
using System.Text;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
|
|
using Microsoft.Build.Framework;
|
|
|
|
using Microsoft.Build.Utilities;
|
2020-03-14 00:46:28 +03:00
|
|
|
using Xamarin.Localization.MSBuild;
|
2016-04-21 16:40:25 +03:00
|
|
|
|
|
|
|
namespace Xamarin.MacDev.Tasks
|
|
|
|
{
|
2020-05-13 16:44:59 +03:00
|
|
|
public abstract class PackLibraryResourcesTaskBase : XamarinTask
|
2016-04-21 16:40:25 +03:00
|
|
|
{
|
|
|
|
#region Inputs
|
|
|
|
|
|
|
|
[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<ITaskItem> ();
|
|
|
|
|
|
|
|
if (BundleResourcesWithLogicalNames != null) {
|
|
|
|
foreach (var item in BundleResourcesWithLogicalNames) {
|
|
|
|
var logicalName = item.GetMetadata ("LogicalName");
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty (logicalName)) {
|
2020-03-14 00:46:28 +03:00
|
|
|
Log.LogError (MSBStrings.E0161);
|
2016-04-21 16:40:25 +03:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
var embedded = new TaskItem (item);
|
|
|
|
|
|
|
|
embedded.SetMetadata ("LogicalName", "__" + Prefix + "_content_" + EscapeMangledResource (logicalName));
|
|
|
|
|
|
|
|
results.Add (embedded);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
EmbeddedResources = results.ToArray ();
|
|
|
|
|
|
|
|
return !Log.HasLoggedErrors;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|