예제 #1
0
        protected override void Format()
        {
            var hasChild = target.ChildCount > 2;

            ctx.WriteSymbol(new FormatSymbol(target.GetChild(0) as ITerminalNode), WriteSymbolFlags.PushIndent);
            if (hasChild)
            {
                Format(1, target.ChildCount - 2);
            }
            var lastChild = target.GetChild(target.ChildCount - 1) as ITerminalNode;

            ctx.WriteSymbol(new FormatSymbol(lastChild, !hasChild, FormatSymbol.TrimSpaceFollow(lastChild.Symbol.Text)), WriteSymbolFlags.PopIndentBefore);
        }
예제 #2
0
        public void WriteSymbol(FormatSymbol symbol, WriteSymbolFlags flags = WriteSymbolFlags.None)
        {
            var text = symbol.text;

            var newline     = false;
            var insertSpace = false;

            if (!symbol.comment)
            {
                WriteComments(symbol.tokenIndex);
            }

            if (options.keepWraps)
            {
                while (symbol.line > line)
                {
                    WriteLineBreak();
                }
            }

            var prev = prevSymbol;

            if ((flags & WriteSymbolFlags.PopIndentBefore) != WriteSymbolFlags.None)
            {
                PopIndent();
            }

            newline = FormatSymbol.IsLineBreak(prev);
            if (newline)
            {
                if (!symbol.noIndent)
                {
                    WriteIndent();
                }
                insertSpace = false;
            }
            else if ((FormatSymbol.TrimSpaceFollow(prev) || FormatSymbol.TrimSpaceAhead(symbol)) && !prev.forceSpaceFollow && !symbol.forceSpaceAhead)
            {
                insertSpace = false;
            }
            else
            {
                insertSpace = true;
            }

            if (insertSpace)
            {
                Write(FormatSymbol.SPACE);
            }

            var l = validIndentLevel;

            Write(symbol);

            if (!symbol.comment && scopes.Count > 0)
            {
                scopes.Peek().OnWriteSymbol();
            }

            if ((flags & WriteSymbolFlags.PushIndent) != WriteSymbolFlags.None)
            {
                PushIndent();
            }
            if ((flags & WriteSymbolFlags.PopIndentBefore) == WriteSymbolFlags.None && (flags & WriteSymbolFlags.PopIndent) != WriteSymbolFlags.None)
            {
                PopIndent();
            }

            line += symbol.numLine - 1;
        }