mirror of
https://onedev.site.tesses.net/crosslang/crosslangdevstudio
synced 2026-02-08 09:15:45 +00:00
103 lines
3.3 KiB
C#
103 lines
3.3 KiB
C#
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;
|
|
}
|
|
}
|
|
} |