public string CreateIncludeCodeForOverridable(DefClass type) { UsedTypes.Clear(); PreClassProducers.Clear(); PostClassProducers.Clear(); IndentStringBuilder sbTypes = new IndentStringBuilder(); new IncSubclassingClassProducer(this, type, sbTypes, null).Add(); if (type.HasAttribute<InterfacesForOverridableAttribute>()) { List<DefClass[]> interfaces = type.GetAttribute<InterfacesForOverridableAttribute>().Interfaces; foreach (DefClass[] ifaces in interfaces) { new IncSubclassingClassProducer(this, type, sbTypes, ifaces).Add(); } } foreach (ClassProducer producer in PostClassProducers) { if (!(producer is NativeProtectedTypesProxy) && !(producer is NativeProtectedStaticsProxy)) producer.Add(); } foreach (ClassProducer producer in PreClassProducers) { if (!(producer is NativeProtectedTypesProxy) && !(producer is NativeProtectedStaticsProxy)) producer.AddFirst(); } IndentStringBuilder sb = new IndentStringBuilder(); sb.AppendLine("#pragma once\n"); sb.AppendFormat("namespace {0}\n{{\n", ManagedNamespace); sb.IncreaseIndent(); sb.AppendLine(sbTypes.ToString()); sb.DecreaseIndent(); sb.AppendLine("}"); return sb.ToString().Replace("\r", ""); }
public string CreateIncludeCodeForIncludeFile(string include) { UsedTypes.Clear(); PreClassProducers.Clear(); PostClassProducers.Clear(); IndentStringBuilder sbTypes = new IndentStringBuilder(); foreach (DefType t in IncludeFiles[include]) { IncAddType(t, sbTypes); } foreach (ClassProducer producer in PostClassProducers) { producer.Add(); } foreach (ClassProducer producer in PreClassProducers) { producer.AddFirst(); } IndentStringBuilder sb = new IndentStringBuilder(); sb.AppendLine("#pragma once\n"); IncAddIncludeFiles(include, UsedTypes, sb); sb.AppendFormat("namespace {0}\n{{\n", ManagedNamespace); sb.IncreaseIndent(); sb.AppendLine(sbTypes.ToString()); sb.DecreaseIndent(); sb.AppendLine("}"); return sb.ToString().Replace("\r",""); }
public override void Add() { if (_t.IsInterface) { IndentStringBuilder tempsb = _sb; _sb = new IndentStringBuilder(); base.Add(); string fname = _t.FullCLRName.Replace(_t.CLRName, _t.Name); string res = _sb.ToString().Replace(_t.FullCLRName + "::", fname + "::"); fname = GetClassName().Replace(_t.CLRName, _t.Name); res = res.Replace(GetClassName() + "::", fname + "::"); _sb = tempsb; _sb.AppendLine(res); } else base.Add(); }
public string CreateCppCodeForIncludeFile(string include, out bool hasContent) { UsedTypes.Clear(); PreClassProducers.Clear(); PostClassProducers.Clear(); IndentStringBuilder contentsb = new IndentStringBuilder(); foreach (DefType t in IncludeFiles[include]) { CppAddType(t, contentsb); } foreach (ClassProducer producer in PostClassProducers) { producer.Add(); } foreach (ClassProducer producer in PreClassProducers) { producer.AddFirst(); } IndentStringBuilder sb = new IndentStringBuilder(); hasContent = false; CppAddIncludeFiles(include, UsedTypes, sb); sb.AppendFormat("namespace {0}\n{{\n", ManagedNamespace); sb.IncreaseIndent(); string txt = contentsb.ToString(); if (txt != "") { hasContent = true; sb.AppendLine(txt); } sb.DecreaseIndent(); sb.AppendLine("}"); return sb.ToString().Replace("\r", ""); }
public virtual void AddFirst() { IndentStringBuilder orig = _sb; _sb = new IndentStringBuilder(); Add(); orig.sb.Insert(0, _sb.ToString()); _sb = orig; }