Exemple #1
0
        public static void Write(this Pattern pattern, TextWriter writer, Scope scope)
        {
            var len           = pattern.Elements.Count;
            var transformFunc = scope.Bundle.TransformFunc;

            for (var i = 0; i < len; i++)
            {
                if (scope.Dirty)
                {
                    return;
                }

                var elem = pattern.Elements[i];

                if (elem is TextLiteral textLiteral)
                {
                    if (transformFunc != null)
                    {
                        writer.Write(transformFunc(textLiteral.ToString()));
                    }
                    else
                    {
                        writer.Write(textLiteral.Value.Span);
                    }
                }
                else if (elem is Placeable placeable)
                {
                    var expr = placeable.Expression;
                    if (scope.IncrPlaceable() > scope.Bundle.MaxPlaceable)
                    {
                        scope.Dirty = true;
                        scope.AddError(ResolverFluentError.TooManyPlaceables());
                        return;
                    }

                    var needsIsolating = scope.Bundle.UseIsolating &&
                                         len > 1;

                    if (needsIsolating)
                    {
                        writer.Write('\u2068');
                    }

                    scope.MaybeTrack(writer, pattern, expr);

                    if (needsIsolating)
                    {
                        writer.Write('\u2069');
                    }
                }
            }
        }