Пример #1
0
        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", "");
        }
Пример #2
0
        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();
        }
Пример #4
0
        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", "");
        }
Пример #5
0
        public virtual void AddFirst()
        {
            IndentStringBuilder orig = _sb;
            _sb = new IndentStringBuilder();

            Add();

            orig.sb.Insert(0, _sb.ToString());
            _sb = orig;
        }