using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Convention.RScript.Variable.CStyle { public class RScriptVariableGenerater : RScriptInjectVariableGenerater { public static string GetTypename(Type type) { var name = type.Name.Replace('`', '_'); return name; } private int layer = 0; private string Prefix => new('\t', layer); public RScriptVariableGenerater(Type targetType, [MaybeNull] Generater generater, string name) : base(targetType, generater, name) { } protected override string WriteClassBodyEnter(Type currentType) { string result = $"{Prefix}{"{public:"}"; layer++; return result; } protected override string WriteClassBodyExit(Type currentType) { layer--; return $"{Prefix}{"{"}"; } protected override string WriteClassHead(Type currentType) { string suffix = currentType.BaseType == typeof(object) ? string.Empty : $" : public {GetTypename(currentType.BaseType)}"; string result = $"{Prefix}class {GetTypename(currentType)}{suffix}"; layer++; return result; } protected override string WriteClassMethod(Type returnType, string methodName, string[] parameterNames, Type[] parameterTypes) { List parameters = new(); for(int i=0,e=parameterNames.Length;i