Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 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("}");
 }
Ejemplo n.º 3
0
 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("};");
 }
Ejemplo n.º 4
0
 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");
 }
Ejemplo n.º 5
0
 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("}");
 }
Ejemplo n.º 6
0
 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");
 }
Ejemplo n.º 7
0
 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};");
 }
Ejemplo n.º 8
0
        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()
            });
        }
Ejemplo n.º 9
0
 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("};");
 }
Ejemplo n.º 10
0
 protected override void AddNewLine(CodeStringBuilder builder)
 {
     builder.AppendEmptyLine();
 }
Ejemplo n.º 11
0
        protected override void CreateFormatMethod(CodeStringBuilder builder, string key, bool isProperty, IEnumerable <IFormatTagParameter> parameters, string summary = null, IEnumerable <FunctionFormatTagParameter> extraParameters = null, FunctionFormatTagParameter parameterForPluralization = null, bool supportNoneState = false, FunctionFormatTagParameter parameterForVariant = null)
        {
            builder.AppendLine("/// <summary>");
            builder.AppendLine($"///   {summary}");
            builder.AppendLine("/// </summary>");

            if (isProperty)
            {
                builder.AppendLine($"public static string {key}");
                builder.AppendLine("{");
                builder.AddLevel();
                builder.AppendLine("get");
            }
            else
            {
                var functionParameters = parameters != null?parameters.OfType <FunctionFormatTagParameter>().ToList() :
                                             new List <FunctionFormatTagParameter>();

                if (extraParameters != null && extraParameters.Any())
                {
                    functionParameters.InsertRange(0, extraParameters);
                }

                if (parameters.Any(p => p is FunctionFormatTagParameter functionParam && functionParam.IsVariantId) || extraParameters.Any(p => p.IsVariantId))
                {
                    // one of the parameter is a variantId, we must create a second method with object as the variantId type.
                    var genericParametersStr = functionParameters.Select(p => (p.IsVariantId ? "object" : GetParameterTypeString(p.Type)) + " " + p.Name).Aggregate((a, b) => a + ", " + b);
                    builder.AppendLine($"public static string {key}({genericParametersStr})");
                    builder.AppendLine("{");
                    builder.AddLevel();
                    builder.AppendLine("try");
                    builder.AppendLine("{");
                    builder.AddLevel();
                    builder.AppendLine($"return {key}({functionParameters.Select(p => p.IsVariantId ? $"Convert.ToInt64({p.Name})" : p.Name).Aggregate((a, b) => a + ", " + b)});");
                    builder.RemoveLevel();
                    builder.AppendLine("}");
                    builder.AppendLine("catch");
                    builder.AppendLine("{");
                    builder.AddLevel();
                    builder.AppendLine("return \"\";");
                    builder.RemoveLevel();
                    builder.AppendLine("}");
                    builder.RemoveLevel();
                    builder.AppendLine("}");
                    builder.AppendEmptyLine();
                    builder.AppendLine("/// <summary>");
                    builder.AppendLine($"///   {summary}");
                    builder.AppendLine("/// </summary>");
                }

                var parametersStr = functionParameters.Select(p => GetParameterTypeString(p.Type) + " " + p.Name).Aggregate((a, b) => a + ", " + b);
                builder.AppendLine($"public static string {key}({parametersStr})");
            }
            builder.AppendLine("{");
            builder.AddLevel();

            string keyToUseStr = $"\"{key}\"";

            if (parameterForVariant != null)
            {
                keyToUseStr = $"\"{key}_Variant\" + {parameterForVariant.Name}";
            }

            string localizationStr;

            if (parameterForPluralization != null)
            {
                var pluralNumber = parameterForPluralization.TypeToCast.HasValue ? $"({GetParameterTypeString(parameterForPluralization.TypeToCast.Value)}){parameterForPluralization.Name}" : parameterForPluralization.Name;

                var supportNoneStateStr = supportNoneState ? "true" : "false";
                localizationStr = $"ReswPlusLib.ResourceLoaderExtension.GetPlural(_resourceLoader, {keyToUseStr}, {pluralNumber}, {supportNoneStateStr})";
            }
            else
            {
                localizationStr = $"_resourceLoader.GetString({keyToUseStr})";
            }

            if (parameters != null && parameters.Any())
            {
                var formatParameters = parameters.Select(p =>
                {
                    switch (p)
                    {
                    case FunctionFormatTagParameter functionParam:
                        return(functionParam.Name);

                    case MacroFormatTagParameter macroParam:
                        return($"ReswPlusLib.Macros.{macroParam.Id}");

                    case LiteralStringFormatTagParameter constStringParameter:
                        return($"\"{constStringParameter.Value}\"");

                    case StringRefFormatTagParameter localizationStringParameter:
                        return(localizationStringParameter.Id);

                    default:
                        //should not happen
                        return("");
                    }
                }).Aggregate((a, b) => a + ", " + b);
                builder.AppendLine($"return string.Format({localizationStr}, {formatParameters});");
            }
            else
            {
                builder.AppendLine($"return {localizationStr};");
            }

            if (isProperty)
            {
                builder.RemoveLevel();
                builder.AppendLine("}");
            }
            builder.RemoveLevel();
            builder.AppendLine("}");
        }
Ejemplo n.º 12
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()
            });
        }
Ejemplo n.º 13
0
        protected override void CppCreateMarkupExtension(CodeStringBuilder builderCpp, string computedNamespace, string resourceFileName, string className, IEnumerable <string> keys)
        {
            builderCpp.AppendLine($"{computedNamespace}{className}()");
            builderCpp.AppendLine("{");
            builderCpp.AddLevel();
            builderCpp.AppendLine($"_resourceLoader = ResourceLoader::GetForViewIndependentUse(L\"{resourceFileName}\");");
            builderCpp.RemoveLevel();
            builderCpp.AppendLine("}");
            builderCpp.AppendEmptyLine();
            builderCpp.AppendLine($"IInspectable {computedNamespace}ProvideValue()");
            builderCpp.AppendLine("{");
            builderCpp.AddLevel();
            builderCpp.AppendLine("hstring res;");
            builderCpp.AppendLine("if(Key() == KeyEnum::__Undefined)");
            builderCpp.AppendLine("{");
            builderCpp.AddLevel();
            builderCpp.AppendLine("res = L\"\";");
            builderCpp.RemoveLevel();
            builderCpp.AppendLine("}");
            builderCpp.AppendLine("else");
            builderCpp.AppendLine("{");
            builderCpp.AddLevel();

            builderCpp.AppendLine("auto keyStr = KeyEnumToString(Key());");
            builderCpp.AppendLine("if(keyStr == L\"\")");
            builderCpp.AppendLine("{");
            builderCpp.AddLevel();
            builderCpp.AppendLine("return box_value(L\"\");");
            builderCpp.RemoveLevel();
            builderCpp.AppendLine("}");
            builderCpp.AppendLine("res = _resourceLoader.GetString(keyStr);");
            builderCpp.RemoveLevel();
            builderCpp.AppendLine("}");
            builderCpp.AppendLine("return Converter() == nullptr ? box_value(res) : Converter().Convert(box_value(res), xaml_typename<hstring>(), ConverterParameter(), L\"\");");
            builderCpp.RemoveLevel();
            builderCpp.AppendLine("}");

            builderCpp.AppendEmptyLine();

            builderCpp.AppendLine($"hstring {computedNamespace}KeyEnumToString(KeyEnum key)");
            builderCpp.AppendLine("{");
            builderCpp.AddLevel();
            builderCpp.AppendLine("switch(key)");
            builderCpp.AppendLine("{");
            builderCpp.AddLevel();
            foreach (var key in keys)
            {
                builderCpp.AppendLine($"case KeyEnum::{key}:");
                builderCpp.AddLevel();
                builderCpp.AppendLine($"return hstring(L\"{key}\");");
                builderCpp.RemoveLevel();
            }
            builderCpp.AppendLine("default:");
            builderCpp.AddLevel();
            builderCpp.AppendLine("return hstring(L\"\");");
            builderCpp.RemoveLevel();
            builderCpp.RemoveLevel();
            builderCpp.AppendLine("}");
            builderCpp.RemoveLevel();
            builderCpp.AppendLine("}");
        }