RichTextLabel problem with adding rainbow effect to items in table

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By zbyna
  private void PopulateScoreItems()
    {
        rtlScoreItems.Clear();
        rtlScoreItems.PushAlign(RichTextLabel.Align.Center);
        rtlScoreItems.PushTable(3);
        foreach (var item in scoreList)
        {
            rtlScoreItems.PushCell();
            rtlScoreItems.PushAlign(RichTextLabel.Align.Left);
            rtlScoreItems.AppendBbcode("[rainbow freq=0.07 sat=0.5]");
            rtlScoreItems.AppendBbcode( item["name"].ToString().PadRight(10));
            rtlScoreItems.Pop(); // for rainbow
            rtlScoreItems.Pop();
            rtlScoreItems.Pop();
            rtlScoreItems.PushCell();
            rtlScoreItems.AppendBbcode("[rainbow freq=0.07 sat=0.5]");
            rtlScoreItems.AppendBbcode( item["score"].ToString().PadZeros(6).PadRight(10));
            rtlScoreItems.Pop(); // for rainbow
            rtlScoreItems.Pop();
            rtlScoreItems.PushCell();
            rtlScoreItems.AppendBbcode("[rainbow freq=0.07 sat=0.5]" + item["date"].ToString());
            rtlScoreItems.Pop(); // for rainbow
            rtlScoreItems.Pop();
        }
        rtlScoreItems.Pop();
        rtlScoreItems.Pop();
        rtlScoreItems.RectClipContent = false;
    }

This code works well, means adds rainbow effect to all 3 columns of the table. But applying effect to the 3rd column must be exactly as:

rtlScoreItems.AppendBbcode("[rainbow freq=0.07 sat=0.5]" + item["date"].ToString());

if the same approach as for previous 2 columns is applied:

rtlScoreItems.AppendBbcode("[rainbow freq=0.07 sat=0.5]");
rtlScoreItems.AppendBbcode(item["date"].ToString());

effect does not work. Rainbow colors are static, not continuously changing. Am I missing something ? Thanks for any clarification.

:bust_in_silhouette: Reply From: zbyna

I have figured this out. Here is functional code with comments:

private void PopulateScoreItems()
{
    rtlScoreItems.Clear();
    rtlScoreItems.PushAlign(RichTextLabel.Align.Center);
    rtlScoreItems.PushTable(3);
    for (int i = 0; i < scoreList.Count; i++)
    {
        Dictionary<string, object> item = scoreList[i];
        rtlScoreItems.PushCell();
        rtlScoreItems.PushAlign(RichTextLabel.Align.Left);
        if (i == GameScreen.scoreItemHighLightNumber)
        {
            // all tags must be enclosed in one AppendBbcode() due to the performance !!!!! and documentation :-)
            rtlScoreItems.AppendBbcode("[rainbow freq=0.07 sat=0.5]"
                                        + item["name"].ToString().PadRight(10) + "[/rainbow]");
        }
        else
        {
            // text without bbcodes must be inserted to stack with AddText() not with AppendBbcode() !!!!!
            rtlScoreItems.AddText(item["name"].ToString().PadRight(10));
        }
        rtlScoreItems.Pop(); // enclose PushAlign(RichTextLabel.Align.Left) tag
        rtlScoreItems.Pop(); // enclose cell tag
        rtlScoreItems.PushCell();
        if (i == GameScreen.scoreItemHighLightNumber)
        {
            rtlScoreItems.AppendBbcode("[rainbow freq=0.07 sat=0.5]" 
                                        + item["score"].ToString().PadZeros(6).PadRight(10) + "[/rainbow]");
        }
        else
        {
            rtlScoreItems.AddText(item["score"].ToString().PadZeros(6).PadRight(10));
        }
        rtlScoreItems.Pop();
        rtlScoreItems.PushCell();
        if (i == GameScreen.scoreItemHighLightNumber)
        {
            rtlScoreItems.AppendBbcode("[rainbow freq=0.07 sat=0.5]" +  item["date"].ToString() + "[/rainbow]");
        }
        else
        {
            rtlScoreItems.AddText(item["date"].ToString());
        }
        rtlScoreItems.Pop();
    }
    rtlScoreItems.Pop(); // enclose table tag
    rtlScoreItems.Pop(); // enclose PushAlign(RichTextLabel.Align.Center); 
    rtlScoreItems.RectClipContent = false;
}