public void Transpile() { Grammar rubyGrammar = new RubyGrammar(); LanguageCompiler rubyCompiler; SyntaxErrors = new SyntaxErrorList(); Generator generator = new Generator(); try { rubyCompiler = new LanguageCompiler(rubyGrammar); } catch (Exception ex) { throw new ArgumentException("Ruby Grammar: " + ex.Message); } try { AstRootNode = rubyCompiler.Parse(RubyScript); SyntaxErrors = rubyCompiler.Context.Errors; } catch (Exception ex) { throw new ArgumentException("Parser error: " + rubyCompiler.Parser.CurrentState + " " + ex.Message); } if (SyntaxErrors.Count > 0) { foreach (SyntaxError err in SyntaxErrors) { Logger.log("error", err + " >> " + RubyScript.Insert(err.Location.Position, "§")); } } try { GeneratedDictionary = generator.Generate(AstRootNode).Dictionary; } catch (Exception ex) { Logger.log("error", "Compile error: " + ex.Message); } try { TranspiledPowerShell = ToPowerShell(); } catch (Exception ex) { Logger.log("error", "Error transpiling to PowerShell: " + ex.Message); } try { CompiledJson = JsonHelper.Serialize(GeneratedDictionary); } catch (Exception ex) { Logger.log("error", "Error generating json result: " + ex.Message); } }
private void RenderCode() { if (_rootElement == null || string.IsNullOrEmpty(Code)) { return; } try { IGrammar grammar = null; switch (HighlightLanguage) { case HighlightLanguage.Python: grammar = new PythonGrammar(); break; case HighlightLanguage.JavaScript: grammar = new JavascriptGrammar(); break; case HighlightLanguage.CSharp: grammar = new CSharpGrammar(); break; case HighlightLanguage.XML: grammar = new XMLGrammar(); break; case HighlightLanguage.JSON: grammar = new JSONGrammar(); break; case HighlightLanguage.SQL: grammar = new SQLGrammar(); break; case HighlightLanguage.PHP: grammar = new PHPGrammar(); break; case HighlightLanguage.Ruby: grammar = new RubyGrammar(); break; case HighlightLanguage.CPlusPlus: grammar = new CPlusPlusGrammar(); break; case HighlightLanguage.CSS: grammar = new CSSGrammar(); break; case HighlightLanguage.Java: grammar = new JavaGrammar(); break; default: break; } var textBlock = new RichTextBlock(); var paragraph = new Paragraph() { FontFamily = new FontFamily("Consolas"), }; if (grammar != null) { Tokenizer lexer = new Tokenizer(grammar); StringBuilder builder = new StringBuilder(); foreach (var token in lexer.Tokenize(Code)) { var brush = BrushForTokenType(token.Type); if (brush != null) { if (builder.Length > 0) { paragraph.Inlines.Add(new Run() { Text = builder.ToString() }); builder.Clear(); } paragraph.Inlines.Add(new Run() { Text = Code.Substring(token.StartIndex, token.Length), Foreground = brush, }); } else { builder.Append(Code.Substring(token.StartIndex, token.Length)); } } if (builder.Length > 0) { paragraph.Inlines.Add(new Run() { Text = builder.ToString() }); builder.Clear(); } } else { var run = new Run() { Text = Code, }; paragraph.Inlines.Add(run); } textBlock.Blocks.Add(paragraph); _rootElement.Child = textBlock; } catch (Exception ex) { _rootElement.Child = new TextBlock() { Text = $"Unable to display this code. The error was: {ex.Message}" }; } }