Пример #1
0
 static void WriteIndent <TSink>(TSink sink, WriteConfig c)
     where TSink : IFmtTokenSink
 {
     for (int i = 0; i < c.Indent; i++)
     {
         sink.WriteLiteral(c.IndentText, "\\indent");
     }
 }
Пример #2
0
        public void WriteTo <TSink>(TSink sink, WriteConfig c)
            where TSink : IFmtTokenSink
        {
            c = c.AddIndent(this.indent);

            var newline        = string.IsNullOrEmpty(c.IndentText) ? "" : "\n";
            var tokenMapArray  = this.tokenMap as string[];
            var tokenMapSingle = this.tokenMap as string;

            if (isBlock)
            {
                for (int i = 0; i < items.Length; i++)
                {
                    var x         = items[i];
                    var tokenName = tokenMapSingle ?? tokenMapArray?[i];
                    if (x is FmtToken fr)
                    {
                        if (!fr.isBlock)
                        {
                            WriteIndent(sink, c);
                        }
                        sink.WriteToken(fr, c, tokenName);
                        if (!fr.isBlock)
                        {
                            sink.WriteLiteral(newline, "\\n");
                        }
                    }
                    else if (x is FormattableString fs)
                    {
                        WriteIndent(sink, c);
                        sink.WriteFormat(fs.Format, fs.GetArguments(), tokenName);
                        sink.WriteLiteral(newline, "\\n");
                    }
                    else if (x is ITokenFormatable tf)
                    {
                        fr = tf.Format();
                        if (!fr.isBlock)
                        {
                            WriteIndent(sink, c);
                        }
                        sink.WriteToken(fr, c, tokenName);
                        if (!fr.isBlock)
                        {
                            sink.WriteLiteral(newline, "\\n");
                        }
                    }
                    else
                    {
                        WriteIndent(sink, c);
                        sink.WriteLiteral(x, tokenName);
                        sink.WriteLiteral(newline, "\\n");
                    }
                }
            }
            else if (items.Length > 0)
            {
                for (int i = 0; i < items.Length; i++)
                {
                    var x         = items[i];
                    var tokenName = tokenMapSingle ?? tokenMapArray?[i];
                    if (x is FmtToken fr)
                    {
                        if (fr.isBlock)
                        {
                            sink.WriteLiteral(newline, "\\n");
                        }
                        sink.WriteToken(fr, c, tokenName);
                    }
                    else if (x is FormattableString fs)
                    {
                        sink.WriteFormat(fs.Format, fs.GetArguments(), tokenName);
                    }
                    else if (x is ITokenFormatable tf)
                    {
                        fr = tf.Format();
                        if (fr.isBlock)
                        {
                            sink.WriteLiteral(newline, "\\n");
                        }
                        sink.WriteToken(fr, c, tokenName);
                    }
                    else
                    {
                        sink.WriteLiteral(x, tokenName);
                    }
                }
            }
        }
Пример #3
0
 public void WriteToken(FmtToken token, WriteConfig config, string name)
 {
     token.WriteTo(this, config);
 }
Пример #4
0
 public void WriteTo(StringBuilder sb, WriteConfig c) => WriteTo(new StringBuilderFmtTokenSink(sb), c);