⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 编译器
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace PlxCompiler
{
    //当前编辑窗口的信息结构体
    public struct Infor
    {
        public Edit editFirst;
        public string filename;
        public string projectPath;
        public string projectName;
    }
    
    public partial class Form1 : Form
    {
        PlxCompiler.Information infor;
        PlxCompiler.OutPut output;
        string projectfolder;
        PlxCompile plx;
        Infor InforPro;//当前激活的源文件指针
        Infor[] projectStack;//项目文件标签
        const int MaxFileCount = 100;//一个项目中文件的最大数目
        int FileCount;
        public Form1()
        {
            InitializeComponent();
            
            infor = new PlxCompiler.Information(this);
            projectStack = new Infor[MaxFileCount];
            plx = new PlxCompile(this);
            FileCount = 0;
            //show the plx file
            infor.Show();
            项目信息ToolStripMenuItem.Enabled = true;
            output = new PlxCompiler.OutPut(this);
            output.Show();
            this.debugToolStripMenuItem.Visible = false;
            
            //infor.treeView1.Nodes.Add(String.Format("project_plx"));
            //infor.AddNodes(String.Format("Untitled.plx"));
            //infor.

        }
        //新建源文件 
        private void 源文件FToolStripMenuItem_Click(object sender, EventArgs e)
        {
            PlxCompiler.CreateFile createFile = new CreateFile(this, infor,InforPro);
            createFile.Show();
            /*string dir=createFile.getFileName();
            PlxCompiler.Edit edit = new PlxCompiler.Edit(this);
            edit.Name = dir;
            edit.Show();
            //show the plx file
            infor.AddNodes(dir);*/
            
            
        }
        //建立工程
        private void 工程PToolStripMenuItem_Click(object sender, EventArgs e)
        {
            PlxCompiler.CreateProject createPro = new PlxCompiler.CreateProject(this, infor);
            //create new Project
            createPro.Show();
           
        }
        
        //修改工程路径栏
        public bool modifyProject(string folder)
        {
            projectfolder = folder;
            projectName.Text = projectfolder;
            return true;
        }
        public string getProjectFolder()
        {
            return projectfolder;
        }
        //项目信息栏显示与否
        private void 项目信息ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (项目信息ToolStripMenuItem.Checked) infor.Show();
            else if (!项目信息ToolStripMenuItem.Checked) infor.Hide();
        }

        private void 输出信息ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (输出信息ToolStripMenuItem.Checked) output.Show();
            else if (!输出信息ToolStripMenuItem.Checked) output.Hide();
        }
        public void set输出信息()
        {
            if (输出信息ToolStripMenuItem.Checked) 输出信息ToolStripMenuItem.Checked = false;
            else 输出信息ToolStripMenuItem.Checked = true;
        }
        private void 状态栏ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (状态栏ToolStripMenuItem.Checked) statusStrip1.Show();
            else if (!状态栏ToolStripMenuItem.Checked) statusStrip1.Hide();
        }

        private void 菜单栏ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (菜单栏ToolStripMenuItem.Checked) toolStrip1.Show();
            else if (!菜单栏ToolStripMenuItem.Checked) toolStrip1.Hide();
        }

        private void 打开工程ToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

        private void 打开文件ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                //string dir = Environment.GetFolderPath(Environment.SpecialFolder.Templates);
                OpenFileDialog dlg = new OpenFileDialog();
                //dlg.InitialDirectory = dir;
                dlg.Title = "Open PLX File";
                dlg.Filter = "PLX source file(*.plx)|*.plx|All Files|*.*";
                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    
                    string filename = dlg.FileName;
                    
                    if (!isOpen(filename))
                    {
                        open(filename);
                        //richTextBox1.Clear();
                        infor.AddNodes(filename);
                    }

                    
                }
            }
            catch (IOException ex)
            {

                MessageBox.Show(ex.Message, "PlxCompiler",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }

        }

        private void 另存为AToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SaveFileDialog dlg = new SaveFileDialog();
            
            dlg.Title = "Save as PLX File";
            dlg.Filter = "PLX source file(*.plx)|*.plx|All Files|*.*";
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                InforPro.editFirst.Save_file(dlg.FileName);
            }
        }

        private void 保存SToolStripMenuItem_Click(object sender, EventArgs e)
        {
            InforPro.editFirst.Save_file();
        }

        private void 撤消UToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (InforPro.editFirst != null)
            {
                InforPro.editFirst.Menu_Undo(sender,e);
            }
            
        }

        private void 重复RToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (InforPro.editFirst != null)
            {
                InforPro.editFirst.Menu_Redo(sender,e);
            }
        }

        private void 剪切TToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (InforPro.editFirst != null)
            {
                InforPro.editFirst.Menu_Cut(sender, e);
            }

        }

        private void 复制CToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (InforPro.editFirst != null)
            {
                InforPro.editFirst.Menu_Copy(sender, e);
            }
        }

        private void 粘贴PToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (InforPro.editFirst != null)
            {
                InforPro.editFirst.Menu_Paste(sender, e);
            }
        }

        private void 全选AToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (InforPro.editFirst != null)
            {
                InforPro.editFirst.Menu_Select(sender, e);
            }

        }

        private void 编译CToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (FileCount == 0) return;
            output.shows("Save to " + InforPro.editFirst.Text+"\r\n",0);
            if (InforPro.editFirst.changed) InforPro.editFirst.Save_file();
            plx.FileOpen(InforPro.editFirst.Text);
            output.shows_add("Compiling..."+"\r\n",0);
            plx.Compiler();
            if (plx.errornum == 0)
            {
                output.shows_add("Succeed..."  + "\r\n",0);
            }
            else
            {
                output.shows_add("总共 "+plx.errornum + " errors",-1);
                
            }

           
           
            
            //Console.WriteLine(plx.lineIndex);
        }

        private void 构建BToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (FileCount == 0) return;
            plx.showCode();
            char[] a = new char[] { '.' };
            int bb = InforPro.editFirst.Text.LastIndexOfAny(a);
            string middleCodePath =InforPro.editFirst.Text.Substring(0,bb)+".mcp";
            try
            {
                FileStream saveFile = new FileStream(middleCodePath, FileMode.OpenOrCreate);
                StreamWriter fileWrite = new StreamWriter(saveFile, Encoding.UTF8);
                fileWrite.Write(plx.codeSource);
                fileWrite.Close();
            }
            catch (IOException ee)
            {
            }
            output.shows("Save middleCode to " + middleCodePath + "\r\n", 0);
            output.shows_add(plx.codeSource,0);
        }

        private void 运行RToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (FileCount == 0) return;
            if (InforPro.editFirst.changed)
            {
                plx.FileOpen(InforPro.editFirst.Text);
                plx.Compiler();
                if (plx.errornum == 0)
                {
                    output.shows_add("Succed..." + "\r\n", 0);
                }
                else
                {
                    output.shows_add("总共 " + plx.errornum + " errors", -1);

                }
            }
            plx.interpret();
            output.shows("程序运行结果如下:\r\n", 0);
            output.shows_add(plx.result,0);
        }

        private void 关于AToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AboutBox1 about = new AboutBox1();
            about.Show();
        }

        private void 字体CToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (fontDialog1.ShowDialog() == DialogResult.OK  && InforPro.editFirst != null)
            {
                InforPro.editFirst.font(fontDialog1.Font);
            }
        }
        //注册窗口
        public void registeEdit(Edit edit1)
        {
            InforPro.editFirst = edit1;
            projectStack[FileCount].editFirst = edit1;
            //projectStack[FileCount].filename = filename;
            FileCount++;
        }
        //显示选中的文件
        public void open(string filename)//
        {

            if (isOpen(filename))
            {
                return;
            }
            PlxCompiler.Edit edit = new PlxCompiler.Edit(this, filename);
            char[] a = new char[] { '\\' };
            int bb = filename.LastIndexOfAny(a);
            string temp = filename.Substring(0, bb);
            bb = temp.LastIndexOfAny(a);
            temp = temp.Substring(bb + 1);
            InforPro.editFirst = edit;
            InforPro.filename = filename;
            InforPro.projectName = temp;
            projectStack[FileCount].editFirst = edit;
            projectStack[FileCount].filename = filename;
            projectStack[FileCount].projectName = temp;
            FileCount++;
            edit.Show();
            edit.Load_File(filename);
        }
        //判断该接点的窗口是否打开
        public bool isOpen(string name)
        {
            for (int i = 0; i < FileCount; i++)
            {
                if (name.Equals(projectStack[i].editFirst.Text))
                {
                    projectStack[i].editFirst.Activate();
                    InforPro.editFirst = projectStack[i].editFirst;
                    InforPro.filename = projectStack[i].filename;
                    InforPro.projectName = projectStack[i].projectName;
                    InforPro.projectPath = projectStack[i].projectPath;
                    return true;
                }
            }
            return false;

        }
        //关闭窗口
        public void close_window(string name)
        {
            int i;
            for (i = 0; i < FileCount; i++)
            {
                if (name.Equals(projectStack[i].editFirst.Text))
                {
                    FileCount--;
                    break;
                }
            }
            for (int j = i; j < FileCount; j++)
            {
                projectStack[j].editFirst = projectStack[j + 1].editFirst;
                projectStack[j].projectName = projectStack[j + 1].projectName;
                projectStack[j].filename = projectStack[j + 1].filename;
                InforPro.editFirst = projectStack[j + 1].editFirst;
            }  
        }//
        //任务栏的显示
        public void setColumRow(string total,string row, string colum)
        {
            Total.Text = total;
            Colum.Text = colum;
            Row.Text = row;
        }
        public void saveFile(string filename)
        {
            try
            {
                FileStream saveFile = new FileStream(filename, FileMode.OpenOrCreate);
                StreamWriter fileWrite = new StreamWriter(saveFile, System.Text.Encoding.Default);
                fileWrite.Write(filename);
                //this.richTextBox1.SaveFile(this.Text, RichTextBoxStreamType.PlainText); 
                output.shows_add("已保存文件 " +filename+"\r\n",0);
                fileWrite.Close();
            }
            catch (IOException e)
            {
                ;
            }
        }
        public void outerror(string a)
        {
            output.shows_add(a, -1);
        }
        public void show(string a)
        {
            output.shows_add(a, 0);
        }

        private void 清空输出窗口CToolStripMenuItem_Click(object sender, EventArgs e)
        {
            output.shows("", 0);
        }

        private void 退出XToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        private void 保存中间代码MToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SaveFileDialog dlg = new SaveFileDialog();

            dlg.Title = "Save PLX File";
            dlg.Filter = "PLX Middle Code file(*.mcp)|*.mcp|All Files|*.*";
            if (dlg.ShowDialog() == DialogResult.OK && plx != null)
            {
                try
                {
                    FileStream saveFile = new FileStream(dlg.FileName, FileMode.OpenOrCreate);
                    StreamWriter fileWrite = new StreamWriter(saveFile, Encoding.UTF8);
                    fileWrite.Write(plx.codeSource);
                    fileWrite.Close();
                }
                catch (IOException e22)
                {
                    output.shows("Failed!",-1);
                }
            }
        }

        private void debugToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

        private void statusStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {

        }

    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -