123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using CodingCannon.Pages.Basic;
- using Microsoft.CodeAnalysis.CSharp;
- using Microsoft.CodeAnalysis.CSharp.Syntax;
- using ScintillaNET;
- namespace CodingCannon.Pages
- {
- internal partial class PropertyWalkerPage : CcUserControlBase
- {
- public PropertyWalkerPage()
- {
- InitializeComponent();
- Text = "Property Walker for MAPPING";
- }
- protected override void OnHandleCreated(EventArgs e)
- {
- base.OnHandleCreated(e);
- scintilla1.Margins[0].Width = 64;
- scintilla1.Margins[0].Type = MarginType.Number;
- scintilla1.Margins[1].Width = 12;
- scintilla1.Margins[1].Type = MarginType.Symbol;
-
-
- scintilla1.Styles[Style.Default].Size = 16;
-
- scintilla1.Styles[Style.Cpp.Default].ForeColor = Color.Silver;
- scintilla1.Styles[Style.Cpp.Comment].ForeColor = Color.FromArgb(0, 128, 0);
- scintilla1.Styles[Style.Cpp.CommentLine].ForeColor = Color.FromArgb(0, 128, 0);
- scintilla1.Styles[Style.Cpp.CommentLineDoc].ForeColor = Color.FromArgb(128, 128, 128);
- scintilla1.Styles[Style.Cpp.Number].ForeColor = Color.Olive;
- scintilla1.Styles[Style.Cpp.Word].ForeColor = Color.Blue;
- scintilla1.Styles[Style.Cpp.Word2].ForeColor = Color.Blue;
- scintilla1.Styles[Style.Cpp.String].ForeColor = Color.FromArgb(163, 21, 21);
- scintilla1.Styles[Style.Cpp.Character].ForeColor = Color.FromArgb(163, 21, 21);
- scintilla1.Styles[Style.Cpp.Verbatim].ForeColor = Color.FromArgb(163, 21, 21);
- scintilla1.Styles[Style.Cpp.StringEol].BackColor = Color.Pink;
- scintilla1.Styles[Style.Cpp.Operator].ForeColor = Color.Purple;
- scintilla1.Styles[Style.Cpp.Preprocessor].ForeColor = Color.Maroon;
- scintilla1.Lexer = Lexer.Cpp;
- scintilla1.AllowDrop = true;
- scintilla1.DragOver += delegate (object? sender, DragEventArgs args)
- {
- args.Effect = args.Data.GetDataPresent(DataFormats.FileDrop)
- ? DragDropEffects.Link
- : DragDropEffects.None;
- };
- scintilla1.DragDrop += delegate (object? sender, DragEventArgs args)
- {
- string[] files;
- if (args.Data?.GetDataPresent(DataFormats.FileDrop) != true
- || null == (files = (string[])args.Data.GetData(DataFormats.FileDrop)!)
- || files.Length != 1) return;
- var text = File.ReadAllText(files![0]);
- var tree = CSharpSyntaxTree.ParseText(text);
- var walker = new PropertyWalker();
- walker.Visit(tree.GetRoot());
- scintilla1.Text = "//Auto generated by Coding Cannon"
- + Environment.NewLine + Environment.NewLine
- + string.Join(Environment.NewLine, walker.PropertyNames.Select(p => $"t.{p}=f.{p};"));
- };
- }
- class PropertyWalker : CSharpSyntaxWalker
- {
- private readonly List<string> _properties = new();
- public IReadOnlyCollection<string> PropertyNames => _properties;
- public override void VisitPropertyDeclaration(PropertyDeclarationSyntax node)
- {
- _properties.Add(node.Identifier.Text);
- base.VisitPropertyDeclaration(node);
- }
- }
- }
- }
|