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.
		
		
		
		
		
			
		
			
				
					
					
						
							181 lines
						
					
					
						
							7.1 KiB
						
					
					
				
			
		
		
	
	
							181 lines
						
					
					
						
							7.1 KiB
						
					
					
				// SharpDevelop samples | 
						|
// Copyright (c) 2006, AlphaSierraPapa | 
						|
// All rights reserved. | 
						|
// | 
						|
// Redistribution and use in source and binary forms, with or without modification, are | 
						|
// permitted provided that the following conditions are met: | 
						|
// | 
						|
// - Redistributions of source code must retain the above copyright notice, this list | 
						|
//   of conditions and the following disclaimer. | 
						|
// | 
						|
// - Redistributions in binary form must reproduce the above copyright notice, this list | 
						|
//   of conditions and the following disclaimer in the documentation and/or other materials | 
						|
//   provided with the distribution. | 
						|
// | 
						|
// - Neither the name of the SharpDevelop team nor the names of its contributors may be used to | 
						|
//   endorse or promote products derived from this software without specific prior written | 
						|
//   permission. | 
						|
// | 
						|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &AS IS& AND ANY EXPRESS | 
						|
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY | 
						|
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | 
						|
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | 
						|
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
						|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER | 
						|
// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | 
						|
// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
						|
 | 
						|
using System; | 
						|
using System.Collections.Generic; | 
						|
using System.Drawing; | 
						|
using System.IO; | 
						|
using System.Windows.Forms; | 
						|
 | 
						|
using ICSharpCode.NRefactory; | 
						|
using ICSharpCode.NRefactory.Ast; | 
						|
using ICSharpCode.NRefactory.PrettyPrinter; | 
						|
 | 
						|
namespace NRefactoryExample | 
						|
{ | 
						|
	public class MainForm : System.Windows.Forms.Form | 
						|
	{ | 
						|
		public MainForm() | 
						|
		{ | 
						|
			// The InitializeComponent() call is required for Windows Forms designer support. | 
						|
			InitializeComponent(); | 
						|
		} | 
						|
		 | 
						|
		[STAThread] | 
						|
		public static void Main(string[] args) | 
						|
		{ | 
						|
			Application.EnableVisualStyles(); | 
						|
			Application.Run(new MainForm()); | 
						|
		} | 
						|
		 | 
						|
		#region Windows Forms Designer generated code | 
						|
		/// <summary> | 
						|
		/// This method is required for Windows Forms designer support. | 
						|
		/// Do not change the method contents inside the source code editor. The Forms designer might | 
						|
		/// not be able to load this method if it was changed manually. | 
						|
		/// </summary> | 
						|
		private void InitializeComponent() | 
						|
		{ | 
						|
			System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); | 
						|
			this.splitContainer1 = new System.Windows.Forms.SplitContainer(); | 
						|
			this.inputTextBox = new System.Windows.Forms.TextBox(); | 
						|
			this.panel1 = new System.Windows.Forms.Panel(); | 
						|
			this.runButton = new System.Windows.Forms.Button(); | 
						|
			this.outputTextBox = new System.Windows.Forms.TextBox(); | 
						|
			this.splitContainer1.Panel1.SuspendLayout(); | 
						|
			this.splitContainer1.Panel2.SuspendLayout(); | 
						|
			this.splitContainer1.SuspendLayout(); | 
						|
			this.panel1.SuspendLayout(); | 
						|
			this.SuspendLayout(); | 
						|
			//  | 
						|
			// splitContainer1 | 
						|
			//  | 
						|
			this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; | 
						|
			this.splitContainer1.Location = new System.Drawing.Point(0, 0); | 
						|
			this.splitContainer1.Name = "splitContainer1"; | 
						|
			//  | 
						|
			// splitContainer1.Panel1 | 
						|
			//  | 
						|
			this.splitContainer1.Panel1.Controls.Add(this.inputTextBox); | 
						|
			this.splitContainer1.Panel1.Controls.Add(this.panel1); | 
						|
			//  | 
						|
			// splitContainer1.Panel2 | 
						|
			//  | 
						|
			this.splitContainer1.Panel2.Controls.Add(this.outputTextBox); | 
						|
			this.splitContainer1.Size = new System.Drawing.Size(804, 422); | 
						|
			this.splitContainer1.SplitterDistance = 394; | 
						|
			this.splitContainer1.TabIndex = 0; | 
						|
			//  | 
						|
			// inputTextBox | 
						|
			//  | 
						|
			this.inputTextBox.AcceptsReturn = true; | 
						|
			this.inputTextBox.AcceptsTab = true; | 
						|
			this.inputTextBox.Dock = System.Windows.Forms.DockStyle.Fill; | 
						|
			this.inputTextBox.Location = new System.Drawing.Point(0, 0); | 
						|
			this.inputTextBox.Multiline = true; | 
						|
			this.inputTextBox.Name = "inputTextBox"; | 
						|
			this.inputTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; | 
						|
			this.inputTextBox.Size = new System.Drawing.Size(394, 372); | 
						|
			this.inputTextBox.TabIndex = 1; | 
						|
			this.inputTextBox.Text = resources.GetString("inputTextBox.Text"); | 
						|
			//  | 
						|
			// panel1 | 
						|
			//  | 
						|
			this.panel1.Controls.Add(this.runButton); | 
						|
			this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; | 
						|
			this.panel1.Location = new System.Drawing.Point(0, 372); | 
						|
			this.panel1.Name = "panel1"; | 
						|
			this.panel1.Size = new System.Drawing.Size(394, 50); | 
						|
			this.panel1.TabIndex = 0; | 
						|
			//  | 
						|
			// runButton | 
						|
			//  | 
						|
			this.runButton.Anchor = System.Windows.Forms.AnchorStyles.None; | 
						|
			this.runButton.Location = new System.Drawing.Point(128, 15); | 
						|
			this.runButton.Name = "runButton"; | 
						|
			this.runButton.Size = new System.Drawing.Size(131, 23); | 
						|
			this.runButton.TabIndex = 0; | 
						|
			this.runButton.Text = "Run"; | 
						|
			this.runButton.UseCompatibleTextRendering = true; | 
						|
			this.runButton.UseVisualStyleBackColor = true; | 
						|
			this.runButton.Click += new System.EventHandler(this.RunButtonClick); | 
						|
			//  | 
						|
			// outputTextBox | 
						|
			//  | 
						|
			this.outputTextBox.Dock = System.Windows.Forms.DockStyle.Fill; | 
						|
			this.outputTextBox.Location = new System.Drawing.Point(0, 0); | 
						|
			this.outputTextBox.Multiline = true; | 
						|
			this.outputTextBox.Name = "outputTextBox"; | 
						|
			this.outputTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; | 
						|
			this.outputTextBox.Size = new System.Drawing.Size(406, 422); | 
						|
			this.outputTextBox.TabIndex = 0; | 
						|
			//  | 
						|
			// MainForm | 
						|
			//  | 
						|
			this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); | 
						|
			this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; | 
						|
			this.ClientSize = new System.Drawing.Size(804, 422); | 
						|
			this.Controls.Add(this.splitContainer1); | 
						|
			this.Name = "MainForm"; | 
						|
			this.Text = "NRefactory Example"; | 
						|
			this.splitContainer1.Panel1.ResumeLayout(false); | 
						|
			this.splitContainer1.Panel1.PerformLayout(); | 
						|
			this.splitContainer1.Panel2.ResumeLayout(false); | 
						|
			this.splitContainer1.Panel2.PerformLayout(); | 
						|
			this.splitContainer1.ResumeLayout(false); | 
						|
			this.panel1.ResumeLayout(false); | 
						|
			this.ResumeLayout(false); | 
						|
		} | 
						|
		private System.Windows.Forms.Button runButton; | 
						|
		private System.Windows.Forms.TextBox outputTextBox; | 
						|
		private System.Windows.Forms.TextBox inputTextBox; | 
						|
		private System.Windows.Forms.Panel panel1; | 
						|
		private System.Windows.Forms.SplitContainer splitContainer1; | 
						|
		#endregion | 
						|
		 | 
						|
		void RunButtonClick(object sender, EventArgs e) | 
						|
		{ | 
						|
			StringReader input = new StringReader(inputTextBox.Text); | 
						|
			IParser parser = ParserFactory.CreateParser(SupportedLanguage.CSharp, input); | 
						|
			parser.Parse(); | 
						|
			if (parser.Errors.Count > 0) { | 
						|
				outputTextBox.Text = parser.Errors.ErrorOutput; | 
						|
				return; | 
						|
			} | 
						|
			CompilationUnit cu = parser.CompilationUnit; | 
						|
			 | 
						|
			cu.AcceptVisitor(new WrapperGeneratorVisitor(), null); | 
						|
			 | 
						|
			IOutputAstVisitor output = new CSharpOutputVisitor(); //new VBNetOutputVisitor(); | 
						|
			// SpecialNodesInserter will re-insert the comments into the generated code | 
						|
			using (SpecialNodesInserter.Install(parser.Lexer.SpecialTracker.RetrieveSpecials(), output)) { | 
						|
				cu.AcceptVisitor(output, null); | 
						|
			} | 
						|
			outputTextBox.Text = output.Text; | 
						|
		} | 
						|
	} | 
						|
}
 | 
						|
 |