static void WriteIndent <TSink>(TSink sink, WriteConfig c) where TSink : IFmtTokenSink { for (int i = 0; i < c.Indent; i++) { sink.WriteLiteral(c.IndentText, "\\indent"); } }
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); } } } }
public void WriteToken(FmtToken token, WriteConfig config, string name) { token.WriteTo(this, config); }
public void WriteTo(StringBuilder sb, WriteConfig c) => WriteTo(new StringBuilderFmtTokenSink(sb), c);