public void HandleText(ITextElement text)
    {
        // Scan the characters
        for (int i = 0; i < text.Value.Length; i++)
        {
            char c = text.Value[i];
            switch (State)
            {
            case 0:
                if (c == '$')
                {
                    State    = 1;
                    Position = i;
                    Add(text);
                }
                break;

            case 1:
                if (c == '{')
                {
                    State = 2;
                    Add(text);
                }
                else
                {
                    Reset();
                }
                break;

            case 2:
                if (c == '}')
                {
                    Add(text);
                    Console.WriteLine("Found: " + Buffer);
                    // We are on the final State
                    // I will use the first text in the stack and discard the others
                    // Here I am going to distinguish between whether I have only one item or more
                    if (TextsList.Count == 1)
                    {
                        // Happy path - we have only one item - set the replacement value and then continue scanning
                        string prefix = TextsList[0].Value.Substring(0, Position) + TextReplacer.ReplaceValue(Buffer.ToString());
                        // Set the current index to point to the end of the prefix.The program will continue to with the next items
                        TextsList[0].Value = prefix + TextsList[0].Value.Substring(i + 1);
                        i = prefix.Length - 1;
                        Reset();
                    }
                    else
                    {
                        // We have more than one item - discard the inbetweeners
                        for (int j = 1; j < TextsList.Count - 1; j++)
                        {
                            TextsList[j].RemoveFromParent();
                        }
                        // I will set the value under the first Text item where the $ was found
                        TextsList[0].Value = TextsList[0].Value.Substring(0, Position) + TextReplacer.ReplaceValue(Buffer.ToString());
                        // Set the text for the current item to the remaining chars
                        text.Value = text.Value.Substring(i + 1);
                        i          = -1;
                        Reset();
                    }
                }
                else
                {
                    Buffer.Append(c);
                    Add(text);
                }
                break;
            }
        }
    }