Newer
Older
Sunfish / src / Sunfish.Core / Mac / MacNames.cs
@Ivan Dominguez Ivan Dominguez 21 hours ago 2 KB 3.0
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", "????");
}