/// <summary>
        /// Creates a new message builder and runs <see cref="StringExtensions.Wrap"/> on the result with width 35 and newline "\u0011".
        /// </summary>
        /// <param name="this"></param>
        /// <param name="action"></param>
        /// <returns></returns>
        public static MessageEntryBuilder.MessageBuilder CompileTimeWrap(this MessageEntryBuilder.MessageBuilder @this, Action <MessageEntryBuilder.MessageBuilder> action)
        {
            var wrappedMessageBuilder = new MessageEntryBuilder.MessageBuilder();

            action(wrappedMessageBuilder);
            var message = wrappedMessageBuilder.Build().Wrap(35, "\u0011", "\u0010");

            return(@this.Text(message));
        }
 /// <summary>
 /// Appends the start pink text control character (0x06) to the message, and writes the specified text.
 /// </summary>
 /// <param name="this">this message builder</param>
 /// <param name="text"></param>
 /// <returns></returns>
 public static MessageEntryBuilder.MessageBuilder Pink(this MessageEntryBuilder.MessageBuilder @this, string text) => @this.Pink(() => @this.Text(text));
 /// <summary>
 /// Appends the start light blue text control character (0x05) to the message, and writes the specified text.
 /// </summary>
 /// <param name="this">this message builder</param>
 /// <param name="text"></param>
 /// <returns></returns>
 public static MessageEntryBuilder.MessageBuilder LightBlue(this MessageEntryBuilder.MessageBuilder @this, string text) => @this.LightBlue(() => @this.Text(text));
 /// <summary>
 /// Appends the start yellow text control character (0x04) to the message, and writes the specified text.
 /// </summary>
 /// <param name="this">this message builder</param>
 /// <param name="text"></param>
 /// <returns></returns>
 public static MessageEntryBuilder.MessageBuilder Yellow(this MessageEntryBuilder.MessageBuilder @this, string text) => @this.Yellow(() => @this.Text(text));
 /// <summary>
 /// Appends the start green text control character (0x02) to the message, and writes the specified text.
 /// </summary>
 /// <param name="this">this message builder</param>
 /// <param name="text"></param>
 /// <returns></returns>
 public static MessageEntryBuilder.MessageBuilder Green(this MessageEntryBuilder.MessageBuilder @this, string text) => @this.Green(() => @this.Text(text));
 /// <summary>
 /// Appends the start white text control character (0x00) to the message, and writes the specified text.
 /// </summary>
 /// <param name="this">this message builder</param>
 /// <param name="text"></param>
 /// <returns></returns>
 public static MessageEntryBuilder.MessageBuilder White(this MessageEntryBuilder.MessageBuilder @this, string text) => @this.White(() => @this.Text(text));
 /// <summary>
 /// Appends the start white text control character (0x00) to the message, and writes the specified text.
 /// </summary>
 /// <param name="this">this message builder</param>
 /// <param name="text"></param>
 /// <returns></returns>
 public static MessageEntryBuilder.MessageBuilder TextColor(this MessageEntryBuilder.MessageBuilder @this, char color, string text) => @this.TextColor(color, () => @this.Text(text));
        public static MessageEntryBuilder.MessageBuilder RuntimeItemDescription(this MessageEntryBuilder.MessageBuilder @this, Item item, ShopInventoryAttribute.ShopKeeper shopKeeper, Item location)
        {
            var    shopTexts = item.ShopTexts();
            string description;

            switch (shopKeeper)
            {
            case ShopInventoryAttribute.ShopKeeper.WitchShop:
                description = shopTexts.WitchShop;
                break;

            case ShopInventoryAttribute.ShopKeeper.TradingPostMain:
                description = shopTexts.TradingPostMain;
                break;

            case ShopInventoryAttribute.ShopKeeper.TradingPostPartTimer:
                description = shopTexts.TradingPostPartTimer;
                break;

            case ShopInventoryAttribute.ShopKeeper.CuriosityShop:
                description = shopTexts.CuriosityShop;
                break;

            case ShopInventoryAttribute.ShopKeeper.BombShop:
                description = shopTexts.BombShop;
                break;

            case ShopInventoryAttribute.ShopKeeper.ZoraShop:
                description = shopTexts.ZoraShop;
                break;

            case ShopInventoryAttribute.ShopKeeper.GoronShop:
                description = shopTexts.GoronShop;
                break;

            case ShopInventoryAttribute.ShopKeeper.GoronShopSpring:
                description = shopTexts.GoronShopSpring;
                break;

            default:
                description = null;
                break;
            }
            if (description == null)
            {
                description = shopTexts.Default;
            }

            var getItemIndex = location.GetItemIndex().Value;
            var upper        = (char)(getItemIndex >> 8);
            var lower        = (char)(getItemIndex & 0xFF);

            if (description.Contains("\u0009\u0001\u0000\u0000"))
            {
                return(@this.Text(description.Replace("\u0009\u0001\u0000\u0000", $"\u0009\u0001{upper}{lower}")));
            }

            return(@this
                   .RuntimeItemDescriptionStart(location)
                   .Text(description)
                   .RuntimeGenericStop());
        }
 /// <summary>
 /// Appends the start autowrap control character (0x09 0x11) to the message, appends the specified text, and
 /// appends the stop autowrap control character(0x09 0x012) to the end of the message.
 /// </summary>
 /// <param name="this"></param>
 /// <param name="action"></param>
 /// <returns></returns>
 public static MessageEntryBuilder.MessageBuilder RuntimeWrap(this MessageEntryBuilder.MessageBuilder @this, string text) => @this.RuntimeWrap(() => @this.Text(text));
 /// <summary>
 /// Runs <see cref="StringExtensions.Wrap"/> on the text with width 35 and newline "\u0011" and appends the result.
 /// </summary>
 /// <param name="this"></param>
 /// <param name="text"></param>
 /// <returns></returns>
 public static MessageEntryBuilder.MessageBuilder CompileTimeWrap(this MessageEntryBuilder.MessageBuilder @this, string text)
 {
     return(@this.Text(text.Wrap(35, "\u0011", "\u0010")));
 }