private static string HandleInlineIf()

in src/extensions/template_extension/TemplateHelpers.cs [146:237]


        private static string HandleInlineIf(string line, Func<string, bool> evaluateCondition, Func<string, string> interpolate)
        {
            var output = new StringBuilder();

            var inTrueBranchNow = new Stack<bool>();
            inTrueBranchNow.Push(true);

            var skipElseBranches = new Stack<bool>();
            skipElseBranches.Push(true);

            var chars = line.ToCharArray();
            var position = 0;
            while (position < chars.Length)
            {
                var cch = CountCharsToCheck(chars, position);
                if (cch == 1)
                {
                    if (inTrueBranchNow.All(b => b))
                    {
                        output.Append(chars[position]);
                    }
                    position++;
                    continue;
                }

                var check = new string(chars, position, cch);
                position += cch;

                if (check.StartsWith("{{if ") && check.EndsWith("}}"))
                {
                    var condition = check[5..^2].Trim();
                    var evaluated = evaluateCondition(condition);
                    inTrueBranchNow.Push(evaluated);
                    skipElseBranches.Push(evaluated);
                    continue;
                }
                else if (check.StartsWith("{{else if ") && check.EndsWith("}}"))
                {
                    if (inTrueBranchNow.Peek())
                    {
                        inTrueBranchNow.Pop();
                        inTrueBranchNow.Push(false);
                        // skipElseBranches.Peek() should already be true
                        continue;
                    }
                    else if (skipElseBranches.Peek())
                    {
                        continue;
                    }

                    var condition = check[10..^2].Trim();
                    var evaluated = evaluateCondition(condition);
                    inTrueBranchNow.Pop();
                    inTrueBranchNow.Push(evaluated);
                    skipElseBranches.Pop();
                    skipElseBranches.Push(evaluated);
                    continue;
                }
                else if (check.StartsWith("{{else}}") && check.EndsWith("}}"))
                {
                    if (inTrueBranchNow.Peek())
                    {
                        inTrueBranchNow.Pop();
                        inTrueBranchNow.Push(false);
                        // skipElseBranches.Peek() should already be true
                        continue;
                    }
                    else if (skipElseBranches.Peek())
                    {
                        continue;
                    }

                    inTrueBranchNow.Pop();
                    inTrueBranchNow.Push(true);
                    skipElseBranches.Pop();
                    skipElseBranches.Push(true);
                    continue;
                }
                else if (check.StartsWith("{{endif}}") && check.EndsWith("}}"))
                {
                    inTrueBranchNow.Pop();
                    skipElseBranches.Pop();
                    continue;
                }
                else if (inTrueBranchNow.All(b => b))
                {
                    output.Append(interpolate(check));
                }
            }

            return output.ToString();
        }