1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- 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.LexerLanguage = "Cpp";
- //scintilla1.Styles[Style.Default].Font = "fixedsys";
- scintilla1.Styles[Style.Default].Size = 16;
- // Configure the CPP (C#) lexer styles
- scintilla1.Styles[Style.Cpp.Default].ForeColor = Color.Silver;
- scintilla1.Styles[Style.Cpp.Comment].ForeColor = Color.FromArgb(0, 128, 0); // Green
- scintilla1.Styles[Style.Cpp.CommentLine].ForeColor = Color.FromArgb(0, 128, 0); // Green
- scintilla1.Styles[Style.Cpp.CommentLineDoc].ForeColor = Color.FromArgb(128, 128, 128); // Gray
- 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); // Red
- scintilla1.Styles[Style.Cpp.Character].ForeColor = Color.FromArgb(163, 21, 21); // Red
- scintilla1.Styles[Style.Cpp.Verbatim].ForeColor = Color.FromArgb(163, 21, 21); // Red
- 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};"));
- };
- }
- private 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);
- }
- }
- }
- }
|