mirror of
https://onedev.site.tesses.net/crosslang/crosslangdevstudio
synced 2026-02-08 09:15:45 +00:00
Get way further
This commit is contained in:
103
ViewModels/CRVMViewerViewModel.cs
Normal file
103
ViewModels/CRVMViewerViewModel.cs
Normal file
@@ -0,0 +1,103 @@
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Avalonia;
|
||||
using Avalonia.Media;
|
||||
using Avalonia.Platform.Storage;
|
||||
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using CommunityToolkit.Mvvm.Messaging;
|
||||
using CrossLangDevStudio.Messages;
|
||||
using CrossLangDevStudio.Views;
|
||||
|
||||
namespace CrossLangDevStudio.ViewModels;
|
||||
|
||||
public class CRVMViewerViewModel : ViewModelBase
|
||||
{
|
||||
public string FilePath { get; set; }
|
||||
public CRVMViewerViewModel(string path)
|
||||
{
|
||||
FilePath = path;
|
||||
var clf = new CrossLangFile();
|
||||
using (var strm = File.OpenRead(path))
|
||||
{
|
||||
|
||||
clf.Load(strm);
|
||||
|
||||
}
|
||||
|
||||
|
||||
foreach (var fn in clf.Functions)
|
||||
{
|
||||
string docs = $"/^{fn.NameParts[0]}^/";
|
||||
string name = string.Join(".", fn.NameParts.Skip(1));
|
||||
string args = string.Join(", ", clf.Chunks[(int)fn.ChunkId]);
|
||||
Functions.Add(new Function(docs, name, args));
|
||||
}
|
||||
foreach (var cls in clf.Classes)
|
||||
{
|
||||
string docs = $"/^{cls.Documentation}^/";
|
||||
ObservableCollection<Class.ClassEntry> entries = new ObservableCollection<Class.ClassEntry>();
|
||||
|
||||
foreach (var item in cls.Entries)
|
||||
{
|
||||
string modifiers = $"\t{item.Modifier.ToString().ToLower()} ";
|
||||
if (item.IsFunction && item.IsAbstract)
|
||||
modifiers += "abstract ";
|
||||
|
||||
Class.ClassEntry ce = new Class.ClassEntry($"\t/^{item.Documentation}^/", item.Name, modifiers, item.IsFunction, item.IsFunction ? string.Join(", ", item.Arguments) : "");
|
||||
entries.Add(ce);
|
||||
}
|
||||
|
||||
Classes.Add(new Class(docs, cls.Name, cls.Inherit, entries));
|
||||
}
|
||||
}
|
||||
|
||||
public ObservableCollection<Function> Functions { get; set; } = new ObservableCollection<Function>();
|
||||
|
||||
public ObservableCollection<Class> Classes { get; set; } = new ObservableCollection<Class>();
|
||||
|
||||
public class Function(string docs, string name, string args) : ObservableObject
|
||||
{
|
||||
public string Name => name;
|
||||
|
||||
public string Documentation => docs;
|
||||
|
||||
public string Args => args;
|
||||
}
|
||||
|
||||
public class Class(string docs, string name, string inherits, ObservableCollection<Class.ClassEntry> entries) : ObservableObject
|
||||
{
|
||||
public string Documentation => docs;
|
||||
|
||||
public string Name => name;
|
||||
|
||||
public string Inherits => inherits == "ClassObject" ? "" : inherits;
|
||||
|
||||
public string InheritsColon => inherits == "ClassObject" ? "" : " : ";
|
||||
|
||||
public ObservableCollection<ClassEntry> Entries => entries;
|
||||
|
||||
public class ClassEntry(string docs,string name, string modifiers, bool isFunction, string args)
|
||||
{
|
||||
public string Documentation => docs;
|
||||
|
||||
public string Name => name;
|
||||
public string Modifiers => modifiers;
|
||||
|
||||
public IBrush NameColor => new SolidColorBrush(isFunction ? 0xFFDCDCAA : 0xFF9CDCFE);
|
||||
|
||||
public IBrush LeftParenColor => new SolidColorBrush(isFunction ? 0xFFC586C0 : 0xFFCCCCCC);
|
||||
|
||||
public string LeftParen => isFunction ? "(" : ";";
|
||||
|
||||
public string RightParen => isFunction ? ")" : "";
|
||||
|
||||
|
||||
public string Args => args;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user