public static void Document(this ITypeInfoWrapper _this, StringLineBuilder output, string qualifiedName, int implementsLevel)
        {
            output.AppendLine();
            if (implementsLevel == 0)
            {
                output.AppendLine("-------------------------------------------------------------------------------");
                output.AppendLine();
            }
            implementsLevel++;

            qualifiedName += "::" + (_this.Name ?? "[unnamed]");
            output.AppendLineNoNullChars(qualifiedName);
            output.AppendLineNoNullChars("- FullName: " + _this.ContainerName + "." + _this.Name);
            output.AppendLineNoNullChars("- Documentation: " + _this.DocString);
            output.AppendLineNoNullChars("- HelpContext: " + _this.HelpContext);
            output.AppendLineNoNullChars("- HelpFile: " + _this.HelpFile);

            output.AppendLine("- HasVBEExtensions: " + _this.HasVBEExtensions);
            if (_this.HasVBEExtensions)
            {
                output.AppendLine("- HasModuleScopeCompilationErrors: " + _this.HasModuleScopeCompilationErrors);
            }

            output.AppendLine("- Type: " + _this.TypeKind);
            output.AppendLine("- Guid: {" + _this.GUID + "}");

            output.AppendLine("- cImplTypes (implemented interfaces count): " + _this.ImplementedInterfaces.Count);
            output.AppendLine("- cFuncs (function count): " + _this.Funcs.Count);
            output.AppendLine("- cVars (fields count): " + _this.Vars.Count);

            foreach (var func in _this.Funcs)
            {
                using (func)
                {
                    func.Document(output);
                }
            }
            foreach (var variable in _this.Vars)
            {
                using (variable)
                {
                    variable.Document(output);
                }
            }
            foreach (var typeInfoImpl in _this.ImplementedInterfaces)
            {
                using (typeInfoImpl)
                {
                    output.AppendLine("implements...");
                    typeInfoImpl.Document(output, qualifiedName, implementsLevel);
                }
            }
        }
        public static void Document(this ITypeLibWrapper _this, StringLineBuilder output)
        {
            output.AppendLine();
            output.AppendLine("================================================================================");
            output.AppendLine();

            output.AppendLine("ITypeLib: " + _this.Name);
            output.AppendLineNoNullChars("- Documentation: " + _this.DocString);
            output.AppendLineNoNullChars("- HelpContext: " + _this.HelpContext);
            output.AppendLineNoNullChars("- HelpFile: " + _this.HelpFile);
            output.AppendLine("- Guid: " + _this.Attributes.guid);
            output.AppendLine("- Lcid: " + _this.Attributes.lcid);
            output.AppendLine("- SysKind: " + _this.Attributes.syskind);
            output.AppendLine("- LibFlags: " + _this.Attributes.wLibFlags);
            output.AppendLine("- MajorVer: " + _this.Attributes.wMajorVerNum);
            output.AppendLine("- MinorVer: " + _this.Attributes.wMinorVerNum);
            output.AppendLine("- HasVBEExtensions: " + _this.HasVBEExtensions);
            if (_this.HasVBEExtensions)
            {
                output.AppendLine("- VBE Conditional Compilation Arguments: " + _this.VBEExtensions.ConditionalCompilationArgumentsRaw);
                foreach (var reference in _this.VBEExtensions.VBEReferences)
                {
                    reference.Document(output);
                }
            }

            output.AppendLine("- TypeCount: " + _this.TypesCount);

            foreach (var typeInfo in _this.TypeInfos)
            {
                using (typeInfo)
                {
                    typeInfo.Document(output, _this.Name, 0);
                }
            }
        }