public static bool TryParsePaletteFormat(string pointerFormat, out PaletteFormat paletteFormat)
 {
     paletteFormat = default;
     if (!pointerFormat.StartsWith("`ucp") || !pointerFormat.EndsWith("`"))
     {
         return(false);
     }
     return(LzPaletteRun.TryParseDimensions(pointerFormat, out paletteFormat));
 }
        public IPaletteRun SetPalette(IDataModel model, ModelDelta token, int page, IReadOnlyList <short> colors)
        {
            var data       = Decompress(model, Start);
            var colorCount = (int)Math.Pow(2, PaletteFormat.Bits);
            var pageLength = colorCount * 2;

            page %= Pages;
            PaletteRun.SetPalette(data, page * pageLength, colors);

            var newModelData = Compress(data, 0, data.Length);
            var newRun       = (IPaletteRun)model.RelocateForExpansion(token, this, newModelData.Count);

            for (int i = 0; i < newModelData.Count; i++)
            {
                token.ChangeData(model, newRun.Start + i, newModelData[i]);
            }
            for (int i = newModelData.Count; i < Length; i++)
            {
                token.ChangeData(model, newRun.Start + i, 0xFF);
            }
            newRun = new LzPaletteRun(PaletteFormat, model, newRun.Start, newRun.PointerSources);
            model.ObserveRunWritten(token, newRun);
            return(newRun);
        }