Esempio n. 1
0
 protected override IEnumerable <GeneratedFile> GetGeneratedFiles(CodeStringBuilder builder, string baseFilename)
 {
     yield return(new GeneratedFile()
     {
         Filename = baseFilename + ".cs", Content = builder.GetString()
     });
 }
        private GeneratedFile GenerateIdlFile(CodeStringBuilder builderIdl, string baseFilename, StronglyTypedClass info)
        {
            HeaderOpenNamespace(builderIdl, info.Namespaces, false);
            IdlOpenStronglyTypedClass(builderIdl, info.ClassName);

            foreach (var item in info.Localizations)
            {
                IdlCreateFormatMethod(builderIdl, item.Key, item.IsProperty, item.Parameters.OfType <FunctionFormatTagParameter>(), item.Summary, item.ExtraParameters);
            }
            IdlCloseStronglyTypedClass(builderIdl);
            builderIdl.AppendEmptyLine();

            IdlCreateMarkupExtension(builderIdl, info.ClassName + "Extension", info.Localizations.Where(i => i is Localization).Select(s => s.Key));
            HeaderCloseNamespace(builderIdl, info.Namespaces, false);

            return(new GeneratedFile()
            {
                Filename = baseFilename + ".idl", Content = builderIdl.GetString()
            });
        }
Esempio n. 3
0
        public virtual IEnumerable <GeneratedFile> GeneratedFiles(string baseFilename, StronglyTypedClass info, ResourceFileInfo resourceInfo, IEnumerable <string> namespaceOverride)
        {
            var supportMultiNamespaceDeclaration = SupportMultiNamespaceDeclaration();
            var namespacesToUse = namespaceOverride ?? info.Namespaces;
            var markupClassName = info.ClassName + "Extension";
            var headerFileName  = baseFilename + ".h";
            var cppFileName     = baseFilename + ".cpp";
            var baseNamespace   = namespacesToUse == null || !namespacesToUse.Any() ? "" : namespacesToUse.Aggregate((a, b) => a + "::" + b);

            var indentStr     = resourceInfo.Project.GetIndentString();
            var builderHeader = new CodeStringBuilder(indentStr);
            var builderCpp    = new CodeStringBuilder(indentStr);

            var precompiledHeader             = resourceInfo.Project.GetPrecompiledHeader();
            var localNamespace                = baseNamespace == "" ? "" : $"{LocalNamespaceName}::";
            var namespaceResourceClass        = $"{localNamespace}{info.ClassName}::";
            var namespaceMarkupExtensionClass = $"{localNamespace}{markupClassName}::";

            HeaderFileGenerateHeaders(builderHeader, info.ClassName, info.Namespaces, info.IsAdvanced);
            builderHeader.AppendEmptyLine();
            HeaderOpenNamespace(builderHeader, namespacesToUse, supportMultiNamespaceDeclaration);
            HeaderOpenStronglyTypedClass(builderHeader, info.ResoureFile, info.ClassName);
            builderHeader.AppendEmptyLine();

            CppFileGenerateHeaders(builderCpp, precompiledHeader, headerFileName, baseNamespace, info.ClassName, info.Namespaces, info.IsAdvanced);
            builderCpp.AppendEmptyLine();
            CppGenerateStronglyTypedClassStaticFunc(builderCpp, namespaceResourceClass, info.ResoureFile);
            builderCpp.AppendEmptyLine();

            var firstLocalization = true;

            foreach (var item in info.Localizations)
            {
                if (firstLocalization)
                {
                    firstLocalization = false;
                }
                else
                {
                    builderHeader.AppendEmptyLine();
                    builderCpp.AppendEmptyLine();
                }
                HeaderOpenRegion(builderHeader, item.Key);

                HeaderCreateFormatMethod(builderHeader, item.Key, item.IsProperty, item.Parameters.OfType <FunctionFormatTagParameter>(), item.Summary, item.ExtraParameters);
                builderCpp.AppendEmptyLine();

                CppCreateFormatMethod(builderCpp, namespaceResourceClass, item.Key, item.IsProperty, item.IsDotNetFormatting, item.Parameters, item.ExtraParameters,
                                      (item as PluralLocalization)?.ParameterToUseForPluralization,
                                      (item as PluralLocalization)?.SupportNoneState ?? false,
                                      (item as IVariantLocalization)?.ParameterToUseForVariant
                                      );

                HeaderCloseRegion(builderHeader);
            }
            HeaderCloseStronglyTypedClass(builderHeader);
            builderHeader.AppendEmptyLine();
            HeaderCreateMarkupExtension(builderHeader, info.ResoureFile, markupClassName, info.Localizations.Where(i => i is Localization).Select(s => s.Key), info.Namespaces);
            HeaderCloseNamespace(builderHeader, namespacesToUse, supportMultiNamespaceDeclaration);
            HeaderAddExtra(builderHeader, info);
            builderCpp.AppendEmptyLine();
            CppCreateMarkupExtension(builderCpp, namespaceMarkupExtensionClass, info.ResoureFile, markupClassName, info.Localizations.Where(i => i is Localization).Select(s => s.Key));

            yield return(new GeneratedFile()
            {
                Filename = headerFileName, Content = builderHeader.GetString()
            });

            yield return(new GeneratedFile()
            {
                Filename = cppFileName, Content = builderCpp.GetString()
            });
        }