namespace Sunfish.Mac;
/// <summary>Nombres y tipos para Mac clasico.</summary>
public static class MacNames
{
/// <summary>
/// Acorta un nombre a <paramref name="max"/> caracteres (HFS admite 31) conservando la
/// extension: "Un nombre muy largo de verdad.jpg" -> "Un nombre muy largo de ve….jpg".
/// </summary>
public static string Shorten(string name, int max)
{
if (name.Length <= max)
return name;
string ext = Path.GetExtension(name);
if (ext.Length == 0 || ext.Length > 6 || ext.Length >= max - 2)
return name[..(max - 1)] + "…";
return name[..(max - ext.Length - 1)] + "…" + ext;
}
/// <summary>Tipo y creador por extension para ficheros sin AppleDouble (lo que esperan los Mac clasicos).</summary>
private static readonly Dictionary<string, (string Type, string Creator)> Types = new(StringComparer.OrdinalIgnoreCase)
{
[".txt"] = ("TEXT", "ttxt"), [".text"] = ("TEXT", "ttxt"), [".nfo"] = ("TEXT", "ttxt"), [".md"] = ("TEXT", "ttxt"),
[".htm"] = ("TEXT", "MOSS"), [".html"] = ("TEXT", "MOSS"), [".css"] = ("TEXT", "ttxt"), [".c"] = ("TEXT", "ttxt"),
[".h"] = ("TEXT", "ttxt"), [".pas"] = ("TEXT", "ttxt"), [".rtf"] = ("TEXT", "MSWD"),
[".gif"] = ("GIFf", "ogle"), [".jpg"] = ("JPEG", "ogle"), [".jpeg"] = ("JPEG", "ogle"), [".png"] = ("PNGf", "ogle"),
[".pct"] = ("PICT", "ttxt"), [".pict"] = ("PICT", "ttxt"), [".tif"] = ("TIFF", "ogle"), [".tiff"] = ("TIFF", "ogle"),
[".bmp"] = ("BMPp", "ogle"),
[".pdf"] = ("PDF ", "CARO"), [".ps"] = ("TEXT", "ttxt"),
[".sit"] = ("SIT!", "SITx"), [".sea"] = ("APPL", "????"), [".cpt"] = ("PACT", "CPCT"), [".hqx"] = ("TEXT", "SITx"),
[".bin"] = ("BINA", "SITx"), [".zip"] = ("ZIP ", "SITx"), [".gz"] = ("Gzip", "SITx"), [".tar"] = ("TARF", "SITx"),
[".img"] = ("rohd", "ddsk"), [".dsk"] = ("dImg", "dCpy"), [".image"] = ("dImg", "dCpy"), [".iso"] = ("rodh", "ddsk"),
[".mp3"] = ("MPG3", "TVOD"), [".aif"] = ("AIFF", "TVOD"), [".aiff"] = ("AIFF", "TVOD"), [".wav"] = ("WAVE", "TVOD"),
[".mov"] = ("MooV", "TVOD"), [".mid"] = ("Midi", "TVOD"), [".mod"] = ("MODf", "TVOD"),
[".doc"] = ("W8BN", "MSWD"), [".xls"] = ("XLS8", "XCEL"),
};
/// <summary>Tipo y creador para un nombre ("????" si no se conoce la extension).</summary>
public static (string Type, string Creator) TypeFor(string name) =>
Types.TryGetValue(Path.GetExtension(name), out var t) ? t : ("BINA", "????");
}