public static StringBuilder AccessModifiers(Parser psr) { var status = psr.SaveStatus(); try { var sb = new StringBuilder(); switch (psr.GetNextTextOrEmpty()) { case @"protected": sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); if (psr.GetNextTextOrEmpty() == @"internal") { sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); } break; case @"public": case @"private": case @"internal": sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); break; } return sb; } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }
public static StringBuilder Attribute(Parser psr) { var sb = new StringBuilder(); var status = psr.SaveStatus(); try { if (psr.GetNextTextOrEmpty() == @"[") { sb.Append(psr.Consume()); if (psr.GetNextTextOrEmpty(1) == @":") { switch (psr.GetNextTextOrEmpty()) { case @"assembly": case @"module": case @"type": case @"field": case @"method": case @"event": case @"property": case @"param": case @"return": sb.Append(psr.Consume()); sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); break; } } while (psr.GetNextTextOrEmpty() != @"]") { sb.Append(Expr(psr)); if (psr.GetNextTextOrEmpty() == @",") { sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); } else if (psr.GetNextTextOrEmpty() != @"]") { throw new ResetException(); } } if (psr.GetNextTextOrEmpty() == @"]") { sb.Append(psr.Consume()); return sb; } } } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }
public static void Eq(ParseFunc[] pf, String input, String[] expect) { var psr = new Parser(Lexer.LexerString(input)); var result = psr.Evalute(pf); var joinedExpect = @""; foreach (var line in expect) { joinedExpect += line + "\n"; } Assert.AreEqual(result.Output, joinedExpect); Assert.True(result.Success); }
public void T_1() { var expr = @"a String 1 + 2 - 3;"; var psr = new Parser(Lexer.LexerString(expr)); var s1 = psr.SaveStatus(); try { psr.Consume(); ParserUtils.Type(psr); ParserUtils.Expr(psr); } catch (Exception) { } psr.LoadStatus(s1); var s2 = psr.SaveStatus(); Assert.AreEqual(s1.ToString(), s2.ToString()); }
public static StringBuilder AsIs(Parser psr) { var status = psr.SaveStatus(); var sb = new StringBuilder(); try { switch (psr.GetNextTextOrEmpty()) { case @"as": case @"is": sb.Append(psr.SpaceToken()); sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(Type(psr)); return sb; } } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }
private static StringBuilder Parentheses_Tuple(Parser psr) { var status = psr.SaveStatus(); try { var sb = new StringBuilder(); if (psr.GetNextTypeOrUnknown() == TokenType.ParenthesesOpen) { sb.Append(psr.Consume()); if (psr.GetNextTextOrEmpty(1) != @"," && psr.GetNextTypeOrUnknown(1) != TokenType.ParenthesesClose) { sb.Append(Type(psr)); sb.Append(psr.SpaceToken()); } if (psr.GetNextTypeOrUnknown() == TokenType.Identifier) { sb.Append(psr.Consume()); while (psr.GetNextTextOrEmpty() == @",") { sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); if (psr.GetNextTextOrEmpty(1) != @"," && psr.GetNextTypeOrUnknown(1) != TokenType.ParenthesesClose) { sb.Append(Type(psr)); sb.Append(psr.SpaceToken()); } if (psr.GetNextTypeOrUnknown() == TokenType.Identifier) { sb.Append(psr.Consume()); } } if (psr.GetNextTypeOrUnknown() == TokenType.ParenthesesClose) { sb.Append(psr.Consume()); return sb; } } } } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }
private static StringBuilder New(Parser psr) { var status = psr.SaveStatus(); try { var sb = new StringBuilder(); if (psr.GetNextTextOrEmpty() == @"new") { sb.Append(psr.Consume()); if (psr.GetNextTextOrEmpty() == @"[") { sb.Append(SquareBrackets(psr)); sb.Append(CurlyBrackets_Exprs(psr)); } else { try { var t = Type(psr); sb.Append(psr.SpaceToken()); sb.Append(t); } catch (ResetException) { } if (psr.GetNextTypeOrUnknown() == TokenType.ParenthesesOpen) { sb.Append(FuncArgs(psr)); } if (psr.GetNextTypeOrUnknown() == TokenType.CurlyBracketOpen) { sb.Append(CurlyBrackets_Exprs(psr)); } } return sb; } } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }
public static void EqExpr(String input, String expect) { var psr = new Parser(Lexer.LexerString(input)); var result = ParserUtils.Expr(psr).ToString(); Assert.AreEqual(result, expect); }
private static StringBuilder SquareBrackets(Parser psr) { var status = psr.SaveStatus(); try { var sb = new StringBuilder(); while (psr.GetNextTextOrEmpty() == @"[") { sb.Append(psr.Consume()); if (psr.GetNextTextOrEmpty() != @"]") { sb.Append(ParserUtils.Expr(psr)); } if (psr.GetNextTextOrEmpty() == @"]") { sb.Append(psr.Consume()); return sb; } } } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }
private static StringBuilder Atom(Parser psr) { var status = psr.SaveStatus(); try { var sb = new StringBuilder(); switch (psr.GetNextTypeOrUnknown()) { case TokenType.Keyword: switch (psr.GetNextTextOrEmpty()) { case @"new": sb.Append(New(psr)); break; case @"select": case @"from": case @"where": case @"join": case @"orderby": case @"group": sb.Append(Query(psr)); break; default: throw new ResetException(); } break; case TokenType.Number: case TokenType.Boolean: case TokenType.String: case TokenType.Char: sb.Append(psr.Consume()); break; case TokenType.Identifier: sb.Append(psr.Consume()); break; case TokenType.ParenthesesOpen: try { sb.Append(Parentheses_Tuple(psr)); } catch (ResetException) { sb.Append(ExprWithParenthese(psr)); } break; case TokenType.CurlyBracketOpen: sb.Append(CurlyBracket_Statements(psr)); break; default: throw new ResetException(); } while (true) { try { if (psr.GetNextTypeOrUnknown() == TokenType.ParenthesesOpen) { sb.Append(FuncArgs(psr)); } else if (psr.GetNextTextOrEmpty() == @"[") { sb.Append(SquareBrackets(psr)); } else { break; } } catch (ResetException) { break; } } return sb; } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }
public static StringBuilder _Expr(Parser psr) { var status = psr.SaveStatus(); try { var sb = new StringBuilder(); sb.Append(psr.SpaceToken()); switch (psr.GetNextTextOrEmpty()) { case @"!": switch (psr.GetNextTextOrEmpty(1)) { case @"=": sb.Append(psr.Consume()); sb.Append(psr.Consume()); break; } break; case @"=": switch (psr.GetNextTextOrEmpty(1)) { case @"=": case @">": sb.Append(psr.Consume()); sb.Append(psr.Consume()); break; } break; case @"-": sb.Append(psr.Consume()); if (psr.GetNextTextOrEmpty() == @">") { sb.Append(psr.Consume()); } break; case @"+": case @"*": case @"/": case @"%": sb.Append(psr.Consume()); break; case @"|": sb.Append(psr.Consume()); if (psr.GetNextTextOrEmpty() == @"|") { sb.Append(psr.Consume()); } break; case @"&": sb.Append(psr.Consume()); if (psr.GetNextTextOrEmpty() == @"&") { sb.Append(psr.Consume()); } break; case @"<": sb.Append(psr.Consume()); switch (psr.GetNextTextOrEmpty()) { case @"<": case @"=": sb.Append(psr.Consume()); break; } break; case @">": sb.Append(psr.Consume()); switch (psr.GetNextTextOrEmpty()) { case @">": case @"=": sb.Append(psr.Consume()); break; } break; case @"?": switch (psr.GetNextTextOrEmpty(1)) { case @"?": case @".": sb.Append(psr.Consume()); sb.Append(psr.Consume()); break; } break; default: throw new ResetException(); } sb.Append(psr.SpaceToken()); sb.Append(Term(psr)); return sb; } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }
public static StringBuilder Type(Parser psr) { var status = psr.SaveStatus(); try { var sb = new StringBuilder(); if (psr.GetNextTypeOrUnknown() == TokenType.Identifier) { sb.Append(psr.Consume()); while (true) { if (psr.GetNextTextOrEmpty() == @".") { sb.Append(psr.Consume()); } else { break; } if (psr.GetNextTypeOrUnknown() == TokenType.Identifier) { sb.Append(psr.Consume()); } else { throw new ResetException(); } } } else { throw new ResetException(); } if (psr.GetNextTextOrEmpty() == @"<") { sb.Append(psr.Consume()); if (psr.GetNextTextOrEmpty() != @">") { sb.Append(Type(psr)); while (psr.GetNextTextOrEmpty() == @",") { var status2 = psr.SaveStatus(); try { var sb2 = new StringBuilder(); sb2.Append(psr.Consume()); sb2.Append(psr.SpaceToken()); sb2.Append(Type(psr)); sb.Append(sb2); } catch (ResetException) { psr.LoadStatus(status2); break; } } } if (psr.GetNextTextOrEmpty() == @">") { sb.Append(psr.Consume()); } else { throw new ResetException(); } } if (psr.GetNextTextOrEmpty() == @"[" && psr.GetNextTextOrEmpty(1) == @"]") { sb.Append(psr.Consume()); sb.Append(psr.Consume()); } if (psr.GetNextTextOrEmpty() == @"?") { sb.Append(psr.Consume()); } return sb; } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }
public static StringBuilder RefOutIn(Parser psr) { var status = psr.SaveStatus(); try { var sb = new StringBuilder(); switch (psr.GetNextTextOrEmpty()) { case @"ref": case @"out": case @"in": sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); break; } return sb; } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }
public static StringBuilder Expr(Parser psr) { var status = psr.SaveStatus(); try { var sb = new StringBuilder(); sb.Append(Term(psr)); while (true) { try { sb.Append(_Expr(psr)); } catch (ResetException) { break; } } try { sb.Append(ConditionalOprator(psr)); } catch (ResetException) { } try { sb.Append(AsIs(psr)); } catch (ResetException) { } return sb; } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }
private static StringBuilder PostOperator(Parser psr) { var status = psr.SaveStatus(); try { var sb = new StringBuilder(); if (psr.GetNextTextOrEmpty() == @"+" && psr.GetNextTextOrEmpty(1) == @"+") { sb.Append(psr.Consume()); sb.Append(psr.Consume()); return sb; } else if (psr.GetNextTextOrEmpty() == @"-" && psr.GetNextTextOrEmpty(1) == @"-") { sb.Append(psr.Consume()); sb.Append(psr.Consume()); return sb; } } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }
private static StringBuilder Query(Parser psr) { var status = psr.SaveStatus(); try { var sb = new StringBuilder(); var doExit = false; var n = 0; while (!doExit) { switch (psr.GetNextTextOrEmpty()) { case @"let": if (0 < n) { sb.Append(psr.SpaceToken()); } sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); if (psr.GetNextTypeOrUnknown() == TokenType.Identifier && psr.GetNextTextOrEmpty(1) == @"=") { sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(Expr(psr)); } break; case @"where": if (0 < n) { sb.Append(psr.SpaceToken()); } sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(Expr(psr)); break; case @"orderby": if (0 < n) { sb.Append(psr.SpaceToken()); } sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); while (true) { sb.Append(Expr(psr)); switch (psr.GetNextTextOrEmpty()) { case @"desceding": case @"ascending": sb.Append(psr.SpaceToken()); sb.Append(psr.Consume()); break; } if (psr.GetNextTextOrEmpty() == @",") { sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); } else { break; } } break; case @"select": if (0 < n) { sb.Append(psr.SpaceToken()); } sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(Expr(psr)); if (psr.GetNextTextOrEmpty() == @"into") { sb.Append(psr.SpaceToken()); sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(Expr(psr)); } break; case @"join": if (0 < n) { sb.Append(psr.SpaceToken()); } sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(Expr(psr)); if (psr.GetNextTextOrEmpty() == @"in") { sb.Append(psr.SpaceToken()); sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(Expr(psr)); if (psr.GetNextTextOrEmpty() == @"on") { sb.Append(psr.SpaceToken()); sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(Expr(psr)); if (psr.GetNextTextOrEmpty() == @"equals") { sb.Append(psr.SpaceToken()); sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(Expr(psr)); if (psr.GetNextTextOrEmpty() == @"into") { sb.Append(psr.SpaceToken()); sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(Expr(psr)); } } } } break; case @"group": if (0 < n) { sb.Append(psr.SpaceToken()); } sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(Expr(psr)); if (psr.GetNextTextOrEmpty() == @"by") { sb.Append(psr.SpaceToken()); sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(Expr(psr)); if (psr.GetNextTextOrEmpty() == @"into") { sb.Append(psr.SpaceToken()); sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(Expr(psr)); } } break; case @"from": if (0 < n) { sb.Append(psr.SpaceToken()); } sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(Expr(psr)); if (psr.GetNextTextOrEmpty() == @"in") { sb.Append(psr.SpaceToken()); sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(Expr(psr)); } break; default: doExit = true; break; } n++; } return sb; } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }
private static StringBuilder CurlyBrackets_Exprs(Parser psr) { var status = psr.SaveStatus(); try { var sb = new StringBuilder(); while (psr.GetNextTypeOrUnknown() == TokenType.CurlyBracketOpen) { sb.Append(psr.Consume()); if (psr.GetNextTypeOrUnknown() == TokenType.CurlyBracketClose) { sb.Append(psr.Consume()); return sb; } else { sb.Append(psr.LineBreakToken()); psr.IndentDown(); while (psr.GetNextTypeOrUnknown() != TokenType.CurlyBracketClose) { sb.Append(psr.IndentToken(@"ParserUtils.CurlyBrackets_Exprs")); sb.Append(Expr(psr)); if (psr.GetNextTextOrEmpty() == @"=") { sb.Append(psr.SpaceToken()); sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(Expr(psr)); } if (psr.GetNextTextOrEmpty() == @",") { sb.Append(psr.Consume()); } sb.Append(psr.LineBreakToken()); } if (psr.GetNextTypeOrUnknown() == TokenType.CurlyBracketClose) { psr.IndentUp(); sb.Append(psr.IndentToken(@"ParserUtils.CurlyBrackets_Exprs")); sb.Append(psr.Consume()); return sb; } } } } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }
private static StringBuilder Term(Parser psr) { var status = psr.SaveStatus(); try { var sb = new StringBuilder(); try { sb.Append(Cast(psr)); } catch (ResetException) { } switch (psr.GetNextTextOrEmpty()) { case @"+": case @"-": case @"*": case @"&": case @"!": case @"~": sb.Append(psr.Consume()); break; } sb.Append(Atom(psr)); while (psr.GetNextTextOrEmpty() == @".") { var status2 = psr.SaveStatus(); try { var sb2 = new StringBuilder(); sb2.Append(psr.Consume()); sb2.Append(Atom(psr)); sb.Append(sb2); } catch (ResetException) { psr.LoadStatus(status2); break; } } try { sb.Append(PostOperator(psr)); } catch (ResetException) { } return sb; } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }
private static StringBuilder CurlyBracket_Statements(Parser psr) { var status = psr.SaveStatus(); try { var sb = new StringBuilder(); if (psr.GetNextTypeOrUnknown() == TokenType.CurlyBracketOpen) { sb.Append(psr.Consume()); sb.Append(psr.LineBreakToken()); psr.IndentDown(); sb.Append(psr.DefaultManyStatement()); if (psr.GetNextTypeOrUnknown() == TokenType.CurlyBracketClose) { psr.IndentUp(); sb.Append(psr.IndentToken(@"ParserUtils.CurlyBracket_Statements")); sb.Append(psr.Consume()); return sb; } } } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }
private static StringBuilder ExprWithParenthese(Parser psr) { var status = psr.SaveStatus(); try { var sb = new StringBuilder(); if (psr.GetNextTypeOrUnknown() == TokenType.ParenthesesOpen) { sb.Append(psr.Consume()); sb.Append(Expr(psr)); if (psr.GetNextTypeOrUnknown() == TokenType.ParenthesesClose) { sb.Append(psr.Consume()); return sb; } } } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }
private static StringBuilder FuncArgs(Parser psr) { var status = psr.SaveStatus(); try { var sb = new StringBuilder(); while (psr.GetNextTypeOrUnknown() == TokenType.ParenthesesOpen) { sb.Append(psr.Consume()); while (psr.GetNextTypeOrUnknown() != TokenType.ParenthesesClose) { sb.Append(RefOutIn(psr)); sb.Append(Expr(psr)); if (psr.GetNextTextOrEmpty() == @"=") { sb.Append(psr.SpaceToken()); sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(ParserUtils.Expr(psr)); } if (psr.GetNextTextOrEmpty() == @",") { sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); } } if (psr.GetNextTypeOrUnknown() == TokenType.ParenthesesClose) { sb.Append(psr.Consume()); return sb; } } } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }
public static void Main(String[] args) { try { var showHelp = false; if (0 == args.Length) { showHelp = true; } else if (1 == args.Length) { switch (args[0]) { case @"--help": showHelp = true; break; } } if (showHelp) { const String urlAppveyorSvg = @"https://ci.appveyor.com/api/projects/status/n000mdm0bj1pxd35/branch/master?svg=true"; const String urlAppveyor = @"https://ci.appveyor.com/project/rbtnn/csharp-formatter/branch/master"; const String urlTravisSvg = @"https://travis-ci.org/rbtnn/csharp-formatter.svg?branch=master"; const String urlTravis = @"https://travis-ci.org/rbtnn/csharp-formatter"; IO.PrintNormal(@""); IO.PrintYellow(@"# CSharp-Formatter"); IO.PrintHide(String.Format(@"[![Build status]({0})]({1})", urlAppveyorSvg, urlAppveyor)); IO.PrintHide(String.Format(@"[![Build status]({0})]({1})", urlTravisSvg, urlTravis)); IO.PrintNormal(@""); IO.PrintNormal(@"This is a C# formatter tool without Visual Studio using .NET Framework's csc.exe. "); IO.PrintNormal(@""); IO.PrintNormal(@""); IO.PrintNormal(@""); IO.PrintGreen(@"## BUILD"); IO.PrintNormal(@""); IO.PrintNormal(@"__Windows__ "); IO.PrintNormal(@""); IO.PrintDarkGray(@"> MSBuild.exe msbuild.xml"); IO.PrintNormal(@""); IO.PrintNormal(@"__Mac__ "); IO.PrintNormal(@""); IO.PrintDarkGray(@"> xbuild msbuild.xml"); IO.PrintNormal(@""); IO.PrintNormal(@""); IO.PrintNormal(@""); IO.PrintGreen(@"## USAGE"); IO.PrintNormal(@""); IO.PrintNormal(@"__Windows__ "); IO.PrintNormal(@""); IO.PrintDarkGray(@"> .\bin\CSharpFormatter.exe {options} {.cs file}"); IO.PrintNormal(@""); IO.PrintNormal(@"__Mac__ "); IO.PrintNormal(@""); IO.PrintDarkGray(@"> mono ./bin/CSharpFormatter.exe {options} {.cs file}"); IO.PrintNormal(@""); IO.PrintNormal(@""); IO.PrintNormal(@""); IO.PrintGreen(@"## OPTIONS"); IO.PrintNormal(@""); IO.PrintRed(@"### --tab"); IO.PrintNormal(@""); IO.PrintNormal(@"Use tabs when indenting. "); IO.PrintNormal(@"(default: __off__) "); IO.PrintNormal(@""); IO.PrintRed(@"### --indent {count}"); IO.PrintNormal(@""); IO.PrintNormal(@"Use {count} spaces per indent level. "); IO.PrintNormal(@"(default: __2__) "); IO.PrintNormal(@""); IO.PrintRed(@"### --encoding {encoding}"); IO.PrintNormal(@""); IO.PrintNormal(@"Read {.cs file} by {encoding}. {encoding} is one of following encodings. "); IO.PrintNormal(@"(default: __utf-8n__) "); IO.PrintNormal(@""); IO.PrintNormal(@" cp932"); IO.PrintNormal(@" shift_jis"); IO.PrintNormal(@" utf-16"); IO.PrintNormal(@" iso-2022-jp"); IO.PrintNormal(@" euc-jp"); IO.PrintNormal(@" utf-7"); IO.PrintNormal(@" utf-8"); IO.PrintNormal(@" utf-8n"); IO.PrintNormal(@""); IO.PrintRed(@"### --overwrite"); IO.PrintNormal(@""); IO.PrintNormal(@"Do not print reformatted sources to standard output. "); IO.PrintNormal(@"Overwrite {.cs file} By LF with CSharpFormatter's version. "); IO.PrintNormal(@"(default: __off__) "); IO.PrintNormal(@""); IO.PrintRed(@"### --crlf"); IO.PrintNormal(@""); IO.PrintNormal(@"Overwrite {.cs file} by CRLF. --overwrite only. "); IO.PrintNormal(@"(default: __off__) "); IO.PrintNormal(@""); IO.PrintRed(@"### --debug"); IO.PrintNormal(@""); IO.PrintNormal(@"Enable Debug mode. "); IO.PrintNormal(@"(default: __off__) "); IO.PrintNormal(@""); IO.PrintNormal(@""); IO.PrintNormal(@""); IO.PrintGreen(@"## VIM PLUGIN"); IO.PrintNormal(@""); IO.PrintNormal(@"Provide the following Vim command: "); IO.PrintNormal(@""); IO.PrintDarkGray(@"> :CSFmt"); IO.PrintNormal(@""); IO.PrintNormal(@"This is to format C# codes in current buffer. "); IO.PrintNormal(@""); IO.PrintNormal(@"To install using Vundle, add the following to your vimrc: "); IO.PrintNormal(@""); IO.PrintDarkGray(@"> :Plugin rbtnn/csharp-formatter"); IO.PrintNormal(@""); IO.PrintNormal(@""); IO.PrintNormal(@""); IO.PrintGreen(@"## LICENSE"); IO.PrintNormal(@""); IO.PrintNormal(@"Distributed under MIT License. See LICENSE. "); IO.PrintNormal(@""); } else { var fis = new List<FormatterInfo>(){}; var defaultFI = new FormatterInfo(); Encoding enc = defaultFI.Enc; var indent = defaultFI.Indent; var useTab = defaultFI.UseTab; var overwrite = defaultFI.Overwrite; var crlf = defaultFI.Crlf; var sbkp = defaultFI.SpaceBetweenKeywordAndParan; var debugMode = defaultFI.DebugMode; var optionName = @""; foreach (var arg in args) { switch (arg) { case @"--overwrite": overwrite = true; break; case @"--indent": optionName = arg; break; case @"--tab": useTab = true; break; case @"--crlf": crlf = true; break; case @"--debug": debugMode = true; break; case @"--encoding": optionName = arg; break; default: switch (optionName) { case @"": if (IO.ExistsFile(arg)) { fis.Add(new FormatterInfo(arg, enc, indent, useTab, overwrite, crlf, sbkp, debugMode)); } else { throw new Exception(String.Format(@"No such file: '{0}'", arg)); } break; case @"--indent": var temp = 0; if (Int32.TryParse(arg, out temp)) { indent = temp; } else { throw new Exception(String.Format(@"Invalid argument: '{0}'", arg)); } break; case @"--encoding": switch (arg) { case @"cp932": case @"shift_jis": enc = Encoding.GetEncoding(932); break; case @"utf-16": enc = Encoding.GetEncoding(1200); break; case @"iso-2022-jp": enc = Encoding.GetEncoding(50222); break; case @"euc-jp": enc = Encoding.GetEncoding(51932); break; case @"utf-7": enc = Encoding.GetEncoding(65000); break; case @"utf-8": enc = new UTF8Encoding(true); break; case @"utf-8n": enc = new UTF8Encoding(false); break; default: throw new Exception(String.Format(@"Invalid encoding: '{0}'", arg)); } break; } optionName = @""; break; } } foreach (var fi in fis) { var ts = Lexer.LexerFile(fi); var psr = new Parser(ts, fi); var result = psr.Evalute(); if (result.Success && fi.Overwrite) { if (fi.Crlf) { IO.WriteFileCRLF(fi.Path, result.Output, fi.Enc); } else { IO.WriteFileLF(fi.Path, result.Output, fi.Enc); } } else { IO.PrintRed(result.Output); } } } } catch (Exception ex) { IO.PrintRed(String.Format(@"{0}", ex.ToString())); } }
public static StringBuilder ConditionalOprator(Parser psr) { var status = psr.SaveStatus(); var sb = new StringBuilder(); try { if (psr.GetNextTextOrEmpty() == @"?") { sb.Append(psr.SpaceToken()); sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(Expr(psr)); if (psr.GetNextTextOrEmpty() == @":") { sb.Append(psr.SpaceToken()); sb.Append(psr.Consume()); sb.Append(psr.SpaceToken()); sb.Append(Expr(psr)); return sb; } } } catch (ResetException) { } psr.LoadStatus(status); throw new ResetException(); }