mirror of https://github.com/icsharpcode/ILSpy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.2 KiB
78 lines
2.2 KiB
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) |
|
// This code is distributed under MIT X11 license (for details please see \doc\license.txt) |
|
|
|
using System; |
|
using System.Collections.Generic; |
|
using System.ComponentModel; |
|
using System.Drawing; |
|
using System.IO; |
|
using System.Linq; |
|
using System.Windows.Forms; |
|
using ICSharpCode.NRefactory.VB; |
|
using ICSharpCode.NRefactory.VB.Parser; |
|
using ICSharpCode.NRefactory.VB.PrettyPrinter; |
|
|
|
namespace ICSharpCode.NRefactory.Demo |
|
{ |
|
/// <summary> |
|
/// Description of VBDemo. |
|
/// </summary> |
|
public partial class VBDemo : UserControl |
|
{ |
|
public VBDemo() |
|
{ |
|
// |
|
// The InitializeComponent() call is required for Windows Forms designer support. |
|
// |
|
InitializeComponent(); |
|
ParseButtonClick(null, null); |
|
} |
|
|
|
IList<ISpecial> savedSpecials; |
|
|
|
void ParseButtonClick(object sender, EventArgs e) |
|
{ |
|
using (VBParser parser = new VBParser(new VBLexer(new StringReader(codeView.Text)))) { |
|
parser.Parse(); |
|
// this allows retrieving comments, preprocessor directives, etc. (stuff that isn't part of the syntax) |
|
SetSpecials(parser.Lexer.SpecialTracker.RetrieveSpecials()); |
|
// this retrieves the root node of the result DOM |
|
if (parser.Errors.Count > 0) { |
|
MessageBox.Show(parser.Errors.ErrorOutput); |
|
} |
|
syntaxTree.Unit = parser.CompilationUnit; |
|
} |
|
} |
|
|
|
void GenerateCodeButtonClick(object sender, EventArgs e) |
|
{ |
|
if (syntaxTree.Unit != null) { |
|
VBNetOutputVisitor visitor = new VBNetOutputVisitor(); |
|
// re-insert the comments we saved from the parser into the output |
|
using (SpecialNodesInserter.Install(savedSpecials, visitor)) { |
|
syntaxTree.Unit.AcceptVisitor(visitor, null); |
|
} |
|
codeView.Text = visitor.Text.Replace("\t", " "); |
|
} |
|
} |
|
|
|
void ClearSpecialsButtonClick(object sender, EventArgs e) |
|
{ |
|
SetSpecials(new ISpecial[0]); |
|
} |
|
|
|
void EditNodeButtonClick(object sender, EventArgs e) |
|
{ |
|
syntaxTree.EditSelectedNode(); |
|
} |
|
|
|
void SetSpecials(IList<ISpecial> specials) |
|
{ |
|
savedSpecials = specials; |
|
if (specials.Count == 1) |
|
clearSpecialsButton.Text = "Clear 1 special"; |
|
else |
|
clearSpecialsButton.Text = "Clear " + specials.Count + " specials"; |
|
} |
|
} |
|
}
|
|
|