public static bool TryParseDimensions(string format, out PaletteFormat paletteFormat) { paletteFormat = default; var formatContent = format.Substring(4, format.Length - 5); var pageSplit = formatContent.Split(':'); if (!int.TryParse(pageSplit[0], out var bits)) { return(false); } int pages = 1, pageStart = 0; if (pageSplit.Length == 2) { var lastPageID = pageSplit[1].ToUpper().LastOrDefault(); var lastPageIndex = ViewModels.ViewPort.AllHexCharacters.IndexOf(lastPageID); if (lastPageIndex > 0) { pages = lastPageIndex + 1; } var firstPageID = pageSplit[1].ToUpper().FirstOrDefault(); var firstPageIndex = ViewModels.ViewPort.AllHexCharacters.IndexOf(firstPageID); if (firstPageIndex > 0) { pageStart = firstPageIndex; } pages -= firstPageIndex; } paletteFormat = new PaletteFormat(bits, pages, pageStart); return(true); }
public static bool TryParsePaletteFormat(string pointerFormat, out PaletteFormat paletteFormat) { paletteFormat = default; if (!pointerFormat.StartsWith("`lzp") || !pointerFormat.EndsWith("`")) { return(false); } return(TryParseDimensions(pointerFormat, out paletteFormat)); }
public LzPaletteRun(PaletteFormat paletteFormat, IDataModel data, int start, SortedSpan <int> sources = null) : base(data, start, allowLengthErrors: paletteFormat.AllowLengthErrors, sources) { PaletteFormat = paletteFormat; if ((int)Math.Pow(2, paletteFormat.Bits) * 2 > DecompressedLength) { InvalidateLength(); } FormatString = $"`lzp{paletteFormat.Bits}`"; if (paletteFormat.InitialBlankPages != 0) { FormatString = $"`lzp{paletteFormat.Bits}:"; for (int i = 0; i < paletteFormat.Pages; i++) { FormatString += ViewModels.ViewPort.AllHexCharacters[paletteFormat.InitialBlankPages + i]; } FormatString += "`"; } }
public PaletteRun(int start, PaletteFormat format, SortedSpan <int> sources = null) : base(start, sources) { PaletteFormat = format; bits = format.Bits; Pages = format.Pages; if (bits == 8) { Length = 512; } if (bits == 4) { Length = Pages * 32; } var pagesPart = string.Empty; if (Pages > 1 || format.InitialBlankPages > 0) { pagesPart = ":" + GetPalettePages(format); } FormatString = $"`ucp{bits}{pagesPart}`"; }
public IPaletteRun Duplicate(PaletteFormat newFormat) => new LzPaletteRun(newFormat, Model, Start, PointerSources);
public IPaletteRun Duplicate(PaletteFormat newFormat) => new PaletteRun(Start, newFormat, PointerSources);
public static string GetPalettePages(PaletteFormat format) { var pageIDs = Enumerable.Range(format.InitialBlankPages, format.Pages).Select(i => ViewModels.ViewPort.AllHexCharacters[i]); return(new string(pageIDs.ToArray())); }