static int Main(string[] args)
{
try
{
var defaultBrush = ConsoleBrush.Current;
var options = new ProgramOptions();
options.Help += delegate { Help(); Environment.Exit(0); };
options.Palette = JsonPalette.Auto(defaultBrush);
args = options.Parse(args);
var path = args.Length > 0 ? args[0] : "-";
try
{
try
{
PrettyColorPrint(path, Console.Out, options.Palette);
}
finally
{
//
// The location of this finally clause is significant
// and should not be merged with the outer catch
// block. The default brush needs to be restored
// in case an error message is about to be printed
// and the standard output and error point to the
// same console device.
//
defaultBrush.Apply();
}
}
catch (JsonException e)
{
//
// In case of JsonException, we don't display the
// base exception since the root cause would not provide
// line and position information and which JsonException
// does. For example, "Unterminated string" has the
// root case of FormatException, but which bubble as
// JsonException with line and position about where the
// error was found in the source.
//
Console.Error.WriteLine(e.Message);
Trace.WriteLine(e.ToString());
return(2);
}
return(0);
}
catch (Exception e)
{
Console.Error.WriteLine(e.GetBaseException().Message);
Trace.WriteLine(e.ToString());
return(1);
}
}