protected override IEnumerable <GeneratedFile> GetGeneratedFiles(CodeStringBuilder builder, string baseFilename) { yield return(new GeneratedFile() { Filename = baseFilename + ".cs", Content = builder.GetString() }); }
public IEnumerable <GeneratedFile> GetGeneratedFiles(string baseFilename, StronglyTypedClass info, ResourceInfo.ResourceFileInfo resourceFileInfo) { var builder = new CodeStringBuilder(resourceFileInfo.Project.GetIndentString()); GenerateHeaders(builder, info.IsAdvanced); AddNewLine(builder); OpenNamespace(builder, info.Namespaces); OpenStronglyTypedClass(builder, info.ResoureFile, info.ClassName); foreach (var item in info.Localizations) { AddNewLine(builder); OpenRegion(builder, item.Key); CreateFormatMethod( builder, item.Key, item.IsProperty, item.Parameters, item.Summary, item.ExtraParameters, (item as PluralLocalization)?.ParameterToUseForPluralization, (item as PluralLocalization)?.SupportNoneState ?? false, (item as IVariantLocalization)?.ParameterToUseForVariant); CloseRegion(builder, item.Key); } CloseStronglyTypedClass(builder); AddNewLine(builder); CreateMarkupExtension(builder, info.ResoureFile, info.ClassName + "Extension", info.Localizations.Where(i => i is Localization).Select(s => s.Key)); CloseNamespace(builder, info.Namespaces); return(GetGeneratedFiles(builder, baseFilename)); }
protected override void CppFileGenerateHeaders(CodeStringBuilder builderHeader, string precompiledHeader, string headerFilePath, string localNamespace, string className, IEnumerable <string> namespaces, bool supportPluralization) { //Header builderHeader.AppendLine("// File generated automatically by ReswPlus. https://github.com/rudyhuyn/ReswPlus"); if (supportPluralization) { builderHeader.AppendLine("// The NuGet package ReswPlusLib is necessary to support Pluralization."); } if (!string.IsNullOrEmpty(precompiledHeader)) { builderHeader.AppendLine($"#include <{precompiledHeader}>"); } builderHeader.AppendLine($"#include \"{headerFilePath}\""); var baseNamespace = namespaces == null || namespaces.Count() <= 1 ? "" : namespaces.Skip(1).Aggregate((a, b) => a + "." + b) + "."; var gheader = baseNamespace + className; builderHeader.AppendLine($"#include \"{gheader}.g.cpp\""); builderHeader.AppendLine($"#include \"{gheader}Extension.g.cpp\""); builderHeader.AppendLine("#include <stdio.h>"); builderHeader.AppendLine("#include <winrt/Windows.Foundation.h>"); builderHeader.AppendLine("#include <winrt/Windows.UI.Xaml.Interop.h>"); builderHeader.AppendLine("using namespace winrt;"); builderHeader.AppendLine("using namespace std;"); if (namespaces != null && namespaces.Any()) { builderHeader.AppendLine($"using namespace winrt::{namespaces.Aggregate((a, b) => a + "::" + b)};"); } builderHeader.AppendLine("using namespace winrt::Windows::Foundation;"); builderHeader.AppendLine("using namespace winrt::Windows::ApplicationModel::Resources;"); builderHeader.AppendLine("using namespace winrt::Windows::UI::Xaml::Interop;"); builderHeader.AppendLine($"namespace {LocalNamespaceName} = {localNamespace};"); }
protected override void HeaderCreateFormatMethod(CodeStringBuilder builderHeader, string key, bool isProperty, IEnumerable <FunctionFormatTagParameter> parameters, string summary = null, IEnumerable <FunctionFormatTagParameter> extraParameters = null) { IEnumerable <FunctionFormatTagParameter> functionParameters; if (extraParameters != null) { var list = new List <FunctionFormatTagParameter>(parameters); list.InsertRange(0, extraParameters); functionParameters = list; } else { functionParameters = parameters; } if (isProperty) { HeaderCreateAccessor(builderHeader, key, summary); } else { builderHeader.AppendLine("public:"); builderHeader.AddLevel(); builderHeader.AppendLine("/// <summary>"); builderHeader.AppendLine($"/// {summary}"); builderHeader.AppendLine("/// </summary>"); var parametersStr = functionParameters == null || !functionParameters.Any() ? "" : functionParameters.Select(p => GetParameterTypeString(p.Type, true) + " " + p.Name).Aggregate((a, b) => a + ", " + b); builderHeader.AppendLine($"static Platform::String^ {key}({parametersStr});"); builderHeader.RemoveLevel(); } }
protected override void HeaderCreateMarkupExtension(CodeStringBuilder builderHeader, string resourceFileName, string className, IEnumerable <string> keys, IEnumerable <string> namespaces) { builderHeader.AppendLine("public enum class KeyEnum"); builderHeader.AppendLine("{"); builderHeader.AddLevel(); builderHeader.AppendLine("__Undefined = 0,"); foreach (var key in keys) { builderHeader.AppendLine($"{key},"); } builderHeader.RemoveLevel(); builderHeader.AppendLine("};"); builderHeader.AppendEmptyLine(); builderHeader.AppendLine($"public ref class {className} sealed: public Windows::UI::Xaml::Markup::MarkupExtension"); builderHeader.AppendLine("{"); builderHeader.AppendLine("private:"); builderHeader.AddLevel(); builderHeader.AppendLine("Windows::ApplicationModel::Resources::ResourceLoader^ _resourceLoader;"); builderHeader.RemoveLevel(); builderHeader.AppendLine("public:"); builderHeader.AddLevel(); builderHeader.AppendLine($"{className}();"); builderHeader.AppendLine("property KeyEnum Key;"); builderHeader.AppendLine("property Windows::UI::Xaml::Data::IValueConverter^ Converter;"); builderHeader.AppendLine("property Platform::Object^ ConverterParameter;"); builderHeader.RemoveLevel(); builderHeader.AppendLine("protected:"); builderHeader.AddLevel(); builderHeader.AppendLine("virtual Platform::Object^ ProvideValue() override;"); builderHeader.RemoveLevel(); builderHeader.RemoveLevel(); builderHeader.AppendLine("};"); }
public override IEnumerable <GeneratedFile> GetGeneratedFiles(string baseFilename, StronglyTypedClass info, ResourceInfo.ResourceFileInfo resourceFileInfo) { // Generate .cpp and .h files var namespaces = new List <string> { "winrt" }; if (info.Namespaces != null) { namespaces.AddRange(info.Namespaces); } namespaces.Add("implementation"); var generatedFiles = GeneratedFiles(baseFilename, info, resourceFileInfo, namespaces); foreach (var file in generatedFiles) { yield return(file); } var builderIdl = new CodeStringBuilder(resourceFileInfo.ParentProject.GetIndentString()); // Generate .idl file yield return(GenerateIdlFile(builderIdl, baseFilename, info)); }
protected override void CppCreateMarkupExtension(CodeStringBuilder builderHeader, string computedNamespace, string resourceFileName, string className, IEnumerable <string> keys) { builderHeader.AppendLine($"{computedNamespace}{className}()"); builderHeader.AppendLine("{"); builderHeader.AddLevel(); builderHeader.AppendLine($"_resourceLoader = ResourceLoader::GetForViewIndependentUse(L\"{resourceFileName}\");"); builderHeader.RemoveLevel(); builderHeader.AppendLine("}"); builderHeader.AppendEmptyLine(); builderHeader.AppendLine($"Object^ {computedNamespace}ProvideValue()"); builderHeader.AppendLine("{"); builderHeader.AddLevel(); builderHeader.AppendLine("String^ res;"); builderHeader.AppendLine("if(Key == KeyEnum::__Undefined)"); builderHeader.AppendLine("{"); builderHeader.AddLevel(); builderHeader.AppendLine("res = L\"\";"); builderHeader.RemoveLevel(); builderHeader.AppendLine("}"); builderHeader.AppendLine("else"); builderHeader.AppendLine("{"); builderHeader.AddLevel(); builderHeader.AppendLine("res = _resourceLoader->GetString(Key.ToString());"); builderHeader.RemoveLevel(); builderHeader.AppendLine("}"); builderHeader.AppendLine("return Converter == nullptr ? res : Converter->Convert(res, TypeName(String::typeid), ConverterParameter, nullptr);"); builderHeader.RemoveLevel(); builderHeader.AppendLine("}"); }
protected override void HeaderAddExtra(CodeStringBuilder builderHeader, StronglyTypedClass info) { var namespaces = new List <string> { "winrt" }; if (info.Namespaces != null) { namespaces.AddRange(info.Namespaces); } namespaces.Add("factory_implementation"); builderHeader.AppendEmptyLine(); HeaderOpenNamespace(builderHeader, namespaces, true); builderHeader.AppendLine($"struct {info.ClassName} : {info.ClassName}T<{info.ClassName}, implementation::{info.ClassName}>"); builderHeader.AppendLine("{"); builderHeader.AppendLine("};"); builderHeader.AppendEmptyLine(); builderHeader.AppendLine($"struct {info.ClassName}Extension : {info.ClassName}ExtensionT<{info.ClassName}Extension, implementation::{info.ClassName}Extension>"); builderHeader.AppendLine("{"); builderHeader.AppendLine("};"); HeaderCloseNamespace(builderHeader, namespaces, true); }
private void IdlCreateFormatMethod(CodeStringBuilder builderHeader, string key, bool isProperty, IEnumerable <FunctionFormatTagParameter> parameters, string summary = null, IEnumerable <FunctionFormatTagParameter> extraParameters = null) { if (isProperty) { IdlCreateAccessor(builderHeader, key, summary); return; } IEnumerable <FunctionFormatTagParameter> functionParameters; if (extraParameters != null) { var list = new List <FunctionFormatTagParameter>(parameters); list.InsertRange(0, extraParameters); functionParameters = list; } else { functionParameters = parameters; } var parametersStr = functionParameters.Any() ? functionParameters.Select(p => IdlGetParameterTypeString(p.Type) + " " + p.Name).Aggregate((a, b) => a + ", " + b) : ""; builderHeader.AppendLine($"static String {key}({parametersStr});"); }
protected override void HeaderCreateMarkupExtension(CodeStringBuilder builderHeader, string resourceFileName, string className, IEnumerable <string> keys, IEnumerable <string> namespaces) { var namespacesToUse = namespaces == null || !namespaces.Any() ? "" : namespaces.Aggregate((a, b) => a + "::" + b) + "::"; builderHeader.AppendLine($"struct {className}: {className}T<{className}>"); builderHeader.AppendLine("{"); builderHeader.AppendLine("private:"); builderHeader.AddLevel(); builderHeader.AppendLine("Windows::ApplicationModel::Resources::ResourceLoader _resourceLoader;"); builderHeader.AppendLine($"{namespacesToUse}KeyEnum _key;"); builderHeader.AppendLine("Windows::UI::Xaml::Data::IValueConverter _converter;"); builderHeader.AppendLine("Windows::Foundation::IInspectable _converterParameter;"); builderHeader.RemoveLevel(); builderHeader.AppendLine("public:"); builderHeader.AddLevel(); builderHeader.AppendLine($"{className}();"); builderHeader.AppendLine($"{namespacesToUse}KeyEnum Key(){{ return _key; }}"); builderHeader.AppendLine($"void Key({namespacesToUse}KeyEnum value){{ _key = value; }}"); builderHeader.AppendLine("Windows::UI::Xaml::Data::IValueConverter Converter(){{ return _converter; }}"); builderHeader.AppendLine("void Converter(Windows::UI::Xaml::Data::IValueConverter value){{ _converter = value; }}"); builderHeader.AppendLine("Windows::Foundation::IInspectable ConverterParameter(){{ return _converterParameter; }}"); builderHeader.AppendLine("void ConverterParameter(Windows::Foundation::IInspectable value){{ _converterParameter = value; }}"); builderHeader.AppendLine("Windows::Foundation::IInspectable ProvideValue();"); builderHeader.RemoveLevel(); builderHeader.AppendLine("private:"); builderHeader.AddLevel(); builderHeader.AppendLine($"static hstring KeyEnumToString(KeyEnum key);"); builderHeader.RemoveLevel(); builderHeader.AppendLine("};"); }
protected override void OpenNamespace(CodeStringBuilder builder, IEnumerable <string> namespaces) { if (namespaces != null && namespaces.Any()) { builder.AppendLine($"namespace {namespaces.Aggregate((a, b) => a + "." + b)}{{"); builder.AddLevel(); } }
protected override void CloseNamespace(CodeStringBuilder builder, IEnumerable <string> namespaces) { if (namespaces != null && namespaces.Any()) { builder.RemoveLevel(); builder.AppendLine($"}} //{namespaces.Aggregate((a, b) => a + "." + b)}"); } }
protected override void CppCreateAccessor(CodeStringBuilder builderHeader, string computedNamespace, string key) { builderHeader.AppendLine($"String^ {computedNamespace}{key}::get()"); builderHeader.AppendLine("{"); builderHeader.AddLevel(); builderHeader.AppendLine($"return GetResourceLoader()->GetString(L\"{key}\");"); builderHeader.RemoveLevel(); builderHeader.AppendLine("}"); }
protected override void HeaderFileGenerateHeaders(CodeStringBuilder builderHeader, string className, IEnumerable <string> namespacesOverride, bool supportPluralization) { //Header builderHeader.AppendLine("// File generated automatically by ReswPlus. https://github.com/DotNetPlus/ReswPlus"); if (supportPluralization) { builderHeader.AppendLine("// The NuGet package ReswPlusLib is necessary to support Pluralization."); } builderHeader.AppendLine("#pragma once"); }
protected override void HeaderCreateAccessor(CodeStringBuilder builderHeader, string key, string summary) { builderHeader.AppendLine("public:"); builderHeader.AddLevel(); builderHeader.AppendLine("/// <summary>"); builderHeader.AppendLine($"/// {summary}"); builderHeader.AppendLine("/// </summary>"); builderHeader.AppendLine($"static hstring {key}();"); builderHeader.RemoveLevel(); }
protected override void GenerateHeaders(CodeStringBuilder builder, bool supportPluralization) { builder.AppendLine("// File generated automatically by ReswPlus. https://github.com/DotNetPlus/ReswPlus"); if (supportPluralization) { builder.AppendLine("// The NuGet package ReswPlusLib is necessary to support Pluralization."); } builder.AppendLine("using System;"); builder.AppendLine("using Windows.ApplicationModel.Resources;"); builder.AppendLine("using Windows.UI.Xaml.Markup;"); builder.AppendLine("using Windows.UI.Xaml.Data;"); }
protected override void GenerateHeaders(CodeStringBuilder builder, bool supportPluralization) { builder.AppendLine("' File generated automatically by ReswPlus. https://github.com/rudyhuyn/ReswPlus"); if (supportPluralization) { builder.AppendLine("' The NuGet package ReswPlusLib is necessary to support Pluralization."); } builder.AppendLine("Imports System"); builder.AppendLine("Imports Windows.ApplicationModel.Resources"); builder.AppendLine("Imports Windows.UI.Xaml.Markup"); builder.AppendLine("Imports Windows.UI.Xaml.Data"); }
protected override void CreateMarkupExtension(CodeStringBuilder builder, string resourceFileName, string className, IEnumerable <string> keys) { builder.AppendLine($"[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{Constants.ReswPlusName}\", \"{Constants.ReswPlusExtensionVersion}\")]"); builder.AppendLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); builder.AppendLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); builder.AppendLine("[MarkupExtensionReturnType(ReturnType = typeof(string))]"); builder.AppendLine($"public class {className}: MarkupExtension"); builder.AppendLine("{"); builder.AddLevel(); builder.AppendLine("public enum KeyEnum"); builder.AppendLine("{"); builder.AddLevel(); builder.AppendLine("__Undefined = 0,"); foreach (var key in keys) { builder.AppendLine($"{key},"); } builder.RemoveLevel(); builder.AppendLine("}"); builder.AppendEmptyLine(); builder.AppendLine("private static ResourceLoader _resourceLoader;"); builder.AppendLine($"static {className}()"); builder.AppendLine("{"); builder.AddLevel(); builder.AppendLine($"_resourceLoader = ResourceLoader.GetForViewIndependentUse(\"{resourceFileName}\");"); builder.RemoveLevel(); builder.AppendLine("}"); builder.AppendLine("public KeyEnum Key { get; set;}"); builder.AppendLine("public IValueConverter Converter { get; set;}"); builder.AppendLine("public object ConverterParameter { get; set;}"); builder.AppendLine("protected override object ProvideValue()"); builder.AppendLine("{"); builder.AddLevel(); builder.AppendLine("string res;"); builder.AppendLine("if(Key == KeyEnum.__Undefined)"); builder.AppendLine("{"); builder.AddLevel(); builder.AppendLine("res = \"\";"); builder.RemoveLevel(); builder.AppendLine("}"); builder.AppendLine("else"); builder.AppendLine("{"); builder.AddLevel(); builder.AppendLine("res = _resourceLoader.GetString(Key.ToString());"); builder.RemoveLevel(); builder.AppendLine("}"); builder.AppendLine("return Converter == null ? res : Converter.Convert(res, typeof(String), ConverterParameter, null);"); builder.RemoveLevel(); builder.AppendLine("}"); builder.RemoveLevel(); builder.AppendLine("}"); }
protected override void HeaderOpenStronglyTypedClass(CodeStringBuilder builderHeader, string resourceFilename, string className) { builderHeader.AppendLine($"public ref class {className} sealed"); builderHeader.AppendLine("{"); builderHeader.AppendLine("private:"); builderHeader.AddLevel(); builderHeader.AppendLine("static Windows::ApplicationModel::Resources::ResourceLoader^ _resourceLoader;"); builderHeader.AppendLine("static Windows::ApplicationModel::Resources::ResourceLoader^ GetResourceLoader();"); builderHeader.RemoveLevel(); builderHeader.AppendLine("public:"); builderHeader.AddLevel(); builderHeader.AppendLine($"{className}() {{}}"); builderHeader.RemoveLevel(); }
protected override void OpenStronglyTypedClass(CodeStringBuilder builder, string resourceFilename, string className) { builder.AppendLine($"<System.CodeDom.Compiler.GeneratedCodeAttribute(\"{Constants.ReswPlusName}\", \"{Constants.ReswPlusExtensionVersion}\")>"); builder.AppendLine("<System.Diagnostics.DebuggerNonUserCodeAttribute()>"); builder.AppendLine("<System.Runtime.CompilerServices.CompilerGeneratedAttribute()>"); builder.AppendLine($"Public Class {className}"); builder.AddLevel(); builder.AppendLine("Private Shared _resourceLoader as ResourceLoader"); builder.AppendEmptyLine(); builder.AppendLine($"Shared Sub New()"); builder.AddLevel(); builder.AppendLine($"_resourceLoader = ResourceLoader.GetForViewIndependentUse(\"{resourceFilename}\")"); builder.RemoveLevel(); builder.AppendLine("End Sub"); }
protected override void HeaderCreateAccessor(CodeStringBuilder builderHeader, string key, string summary) { builderHeader.AppendLine("public:"); builderHeader.AddLevel(); builderHeader.AppendLine("/// <summary>"); builderHeader.AppendLine($"/// {summary}"); builderHeader.AppendLine("/// </summary>"); builderHeader.AppendLine($"static property Platform::String^ {key}"); builderHeader.AppendLine("{"); builderHeader.AddLevel(); builderHeader.AppendLine("Platform::String^ get();"); builderHeader.RemoveLevel(); builderHeader.AppendLine("}"); builderHeader.RemoveLevel(); }
protected override void OpenStronglyTypedClass(CodeStringBuilder builder, string resourceFilename, string className) { builder.AppendLine($"[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{Constants.ReswPlusName}\", \"{Constants.ReswPlusExtensionVersion}\")]"); builder.AppendLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); builder.AppendLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); builder.AppendLine($"public static class {className} {{"); builder.AddLevel(); builder.AppendLine("private static ResourceLoader _resourceLoader;"); builder.AppendLine($"static {className}()"); builder.AppendLine("{"); builder.AddLevel(); builder.AppendLine($"_resourceLoader = ResourceLoader.GetForViewIndependentUse(\"{resourceFilename}\");"); builder.RemoveLevel(); builder.AppendLine("}"); }
protected override void CppGenerateStronglyTypedClassStaticFunc(CodeStringBuilder builderHeader, string computedNamespace, string resourceFilename) { builderHeader.AppendLine($"ResourceLoader^ {computedNamespace}_resourceLoader = nullptr;"); builderHeader.AppendLine($"ResourceLoader^ {computedNamespace}GetResourceLoader()"); builderHeader.AppendLine("{"); builderHeader.AddLevel(); builderHeader.AppendLine("if (_resourceLoader == nullptr)"); builderHeader.AppendLine("{"); builderHeader.AddLevel(); builderHeader.AppendLine($"_resourceLoader = ResourceLoader::GetForViewIndependentUse(L\"{resourceFilename}\");"); builderHeader.RemoveLevel(); builderHeader.AppendLine("}"); builderHeader.AppendLine("return _resourceLoader;"); builderHeader.RemoveLevel(); builderHeader.AppendLine("}"); }
protected override void CreateMarkupExtension(CodeStringBuilder builder, string resourceFileName, string className, IEnumerable <string> keys) { builder.AppendLine($"<System.CodeDom.Compiler.GeneratedCodeAttribute(\"{Constants.ReswPlusName}\", \"{Constants.ReswPlusExtensionVersion}\")>"); builder.AppendLine("<System.Diagnostics.DebuggerNonUserCodeAttribute()>"); builder.AppendLine("<System.Runtime.CompilerServices.CompilerGeneratedAttribute()>"); builder.AppendLine("<MarkupExtensionReturnType(ReturnType:=GetType(String))>"); builder.AppendLine($"Public Class {className}"); builder.AddLevel(); builder.AppendLine("Inherits MarkupExtension"); builder.AppendLine("Public Enum KeyEnum"); builder.AddLevel(); builder.AppendLine("__Undefined = 0"); foreach (var key in keys) { builder.AppendLine(key); } builder.RemoveLevel(); builder.AppendLine("End Enum"); builder.AppendEmptyLine(); builder.AppendLine("Private Shared _resourceLoader as ResourceLoader"); builder.AppendLine("Shared Sub New()"); builder.AddLevel(); builder.AppendLine($"_resourceLoader = ResourceLoader.GetForViewIndependentUse(\"{resourceFileName}\")"); builder.RemoveLevel(); builder.AppendLine("End Sub"); builder.AppendEmptyLine(); builder.AppendLine("Public Property Key As KeyEnum"); builder.AppendLine("Public Property Converter As IValueConverter"); builder.AppendLine("Public Property ConverterParameter As Object"); builder.AppendLine("Protected Overrides Function ProvideValue() As Object"); builder.AddLevel(); builder.AppendLine("Dim res As String"); builder.AppendLine("If Key = KeyEnum.__Undefined Then"); builder.AddLevel(); builder.AppendLine("res = \"\""); builder.RemoveLevel(); builder.AppendLine("Else"); builder.AddLevel(); builder.AppendLine("res = _resourceLoader.GetString(Key.ToString())"); builder.RemoveLevel(); builder.AppendLine("End If"); builder.AppendLine("Return If(Converter Is Nothing, res, Converter.Convert(res, GetType(String), ConverterParameter, Nothing))"); builder.RemoveLevel(); builder.AppendLine("End Function"); builder.RemoveLevel(); builder.AppendLine("End Class"); }
public void HeaderCloseNamespace(CodeStringBuilder builderHeader, IEnumerable <string> namespaces, bool supportNestedMamespacesAtOnce) { if (namespaces != null && namespaces.Any()) { if (supportNestedMamespacesAtOnce) { builderHeader.RemoveLevel(); builderHeader.AppendLine($"}} // namespace {namespaces.Aggregate((a, b) => a + "::" + b)}"); } else { foreach (var n in namespaces.Reverse()) { builderHeader.RemoveLevel(); builderHeader.AppendLine($"}} // namespace {n}"); } } } }
protected override void CppFileGenerateHeaders(CodeStringBuilder builderHeader, string precompiledHeader, string headerFilePath, string localNamespace, string className, IEnumerable <string> namespaces, bool supportPluralization) { //Header builderHeader.AppendLine("// File generated automatically by ReswPlus. https://github.com/DotNetPlus/ReswPlus"); if (supportPluralization) { builderHeader.AppendLine("// The NuGet package ReswPlusLib is necessary to support Pluralization."); } if (!string.IsNullOrEmpty(precompiledHeader)) { builderHeader.AppendLine($"#include <{precompiledHeader}>"); } builderHeader.AppendLine($"#include \"{headerFilePath}\""); builderHeader.AppendLine("#include <stdio.h>"); builderHeader.AppendEmptyLine(); builderHeader.AppendLine("using namespace Platform;"); builderHeader.AppendLine("using namespace Windows::ApplicationModel::Resources;"); builderHeader.AppendLine("using namespace Windows::UI::Xaml::Interop;"); builderHeader.AppendLine($"namespace {LocalNamespaceName} = {localNamespace};"); }
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() }); }
protected override void HeaderFileGenerateHeaders(CodeStringBuilder builderHeader, string className, IEnumerable <string> namespacesOverride, bool supportPluralization) { //Header builderHeader.AppendLine("// File generated automatically by ReswPlus. https://github.com/rudyhuyn/ReswPlus"); if (supportPluralization) { builderHeader.AppendLine("// The NuGet package ReswPlusLib is necessary to support Pluralization."); } var baseGeneratedFileName = (namespacesOverride == null || namespacesOverride.Count() <= 1 ? "" : namespacesOverride.Skip(1).Aggregate((a, b) => a + "." + b) + "."); builderHeader.AppendLine("#pragma once"); builderHeader.AppendLine($"#include \"{baseGeneratedFileName}{className}.g.h\""); builderHeader.AppendLine($"#include \"{baseGeneratedFileName}{className}Extension.g.h\""); builderHeader.AppendLine("#include <winrt/Windows.ApplicationModel.Resources.h>"); builderHeader.AppendLine("#include <winrt/Windows.UI.Xaml.Markup.h>"); if (supportPluralization) { builderHeader.AppendLine("#include <winrt/ReswPlusLib.h>"); } }
public void HeaderOpenNamespace(CodeStringBuilder builderHeader, IEnumerable <string> namespaces, bool supportNestedMamespacesAtOnce) { if (namespaces != null && namespaces.Any()) { if (supportNestedMamespacesAtOnce) { builderHeader.AppendLine($"namespace {namespaces.Aggregate((a, b) => a + "::" + b)}"); builderHeader.AppendLine("{"); builderHeader.AddLevel(); } else { foreach (var subNamespace in namespaces) { builderHeader.AppendLine($"namespace {subNamespace}"); builderHeader.AppendLine("{"); builderHeader.AddLevel(); } } } }
private void IdlCreateMarkupExtension(CodeStringBuilder builderHeader, string className, IEnumerable <string> keys) { builderHeader.AppendLine("enum KeyEnum"); builderHeader.AppendLine("{"); builderHeader.AddLevel(); builderHeader.AppendLine("__Undefined = 0,"); foreach (var key in keys) { builderHeader.AppendLine($"{key},"); } builderHeader.RemoveLevel(); builderHeader.AppendLine("};"); builderHeader.AppendEmptyLine(); builderHeader.AppendLine($"runtimeclass {className}: Windows.UI.Xaml.Markup.MarkupExtension"); builderHeader.AppendLine("{"); builderHeader.AddLevel(); builderHeader.AppendLine($"{className}();"); builderHeader.AppendLine("KeyEnum Key;"); builderHeader.AppendLine("Windows.UI.Xaml.Data.IValueConverter Converter;"); builderHeader.AppendLine("Object ConverterParameter;"); builderHeader.AppendLine("overridable Object ProvideValue();"); builderHeader.RemoveLevel(); builderHeader.AppendLine("};"); }