示例#1
0
        /// <summary>
        /// Create the template output
        /// </summary>
        public virtual string TransformText()
        {
            this.Write(@"#pragma once
#include ""pch.h""
#include ""XamlMetadata.h""
#include ""Serialize.h""
#include ""Crc32Str.h""
#include <JSValueWriter.h>

/*************************************************************
THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT MODIFY MANUALLY
**************************************************************/

");

            #line 17 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt"
            foreach (var ns in Events.Select(p => p.DeclaringType.GetNamespace()).Distinct())
            {
            #line default
            #line hidden
                this.Write("#include <winrt/");

            #line 18 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(ns));

            #line default
            #line hidden
                this.Write(".h>\r\n");

            #line 19 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt"
            }

            #line default
            #line hidden
            this.Write("#include <winrt/");

            #line 20 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(XamlNames.XamlNamespace));

            #line default
            #line hidden
            this.Write(".Input.h>\r\n\r\n/////// Events\r\ntemplate<typename TArgs>\r\nvoid SerializeEventArgs(wi" +
                       "nrt::Microsoft::ReactNative::IJSValueWriter const& writer, const winrt::Windows:" +
                       ":Foundation::IInspectable& sender, const TArgs& args);\r\n\r\n\r\ntemplate<typename T>" +
                       "\r\n__declspec(noinline) T DoTheTypeChecking(const winrt::Windows::Foundation::IIn" +
                       "spectable& ii, bool isWrapped) {\r\n  auto o = isWrapped ? Unwrap<T>(ii) : ii.try_" +
                       "as<T>();\r\n  return o;\r\n}\r\n\r\ntemplate<typename T>\r\n__declspec(noinline) void Disp" +
                       "atchTheEvent(const EventAttachInfo& eai, const winrt::Windows::Foundation::IInsp" +
                       "ectable& sender, const T& args) {\r\n  auto senderAsFE = sender.try_as<FrameworkEl" +
                       "ement>();\r\n  auto wEN = winrt::to_hstring(eai.jsEventName);\r\n  if (eai.xamlMetad" +
                       "ata.m_callFunctionReturnFlushedQueue.has_value()) {\r\n    const auto tag = winrt:" +
                       ":unbox_value<int64_t>(eai.obj.as<FrameworkElement>().Tag());\r\n    ExecuteJsi(eai" +
                       ".context, [metadata = eai.xamlMetadata.shared_from_this(), tag, senderAsFE, args" +
                       ", eventName = eai.jsEventName](facebook::jsi::Runtime& rt) {\r\n      auto objSend" +
                       "er = std::make_shared<XamlObject>(senderAsFE, metadata);\r\n      auto objArgs = s" +
                       "td::make_shared<XamlObject>(args, metadata);\r\n      auto obj = std::make_shared<" +
                       "facebook::jsi::Object>(rt);\r\n      obj->setProperty(rt, \"sender\", rt.global().cr" +
                       "eateFromHostObject(rt, objSender));\r\n      obj->setProperty(rt, \"args\", rt.globa" +
                       "l().createFromHostObject(rt, objArgs));\r\n\r\n      metadata->JsiDispatchEvent(rt, " +
                       "tag, std::string(eventName), obj);\r\n      });\r\n  }\r\n  else {\r\n    XamlUIService:" +
                       ":FromContext(eai.context).DispatchEvent(eai.obj.try_as<xaml::FrameworkElement>()" +
                       ", wEN.c_str(),\r\n      [senderAsFE, args](const winrt::Microsoft::ReactNative::IJ" +
                       "SValueWriter& evtDataWriter) {\r\n        SerializeEventArgs(evtDataWriter, sender" +
                       "AsFE, args);\r\n      });\r\n  }\r\n};\r\n\r\n/*static*/ const EventInfo EventInfo::xamlEv" +
                       "entMap[] = {\r\n");

            #line 58 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt"
            foreach (var evt in Events)
            {
            #line default
            #line hidden
                this.Write("  {\"");

            #line 59 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(evt.GetName()));

            #line default
            #line hidden
                this.Write("\", [](const EventAttachInfo& eai, bool isWrapped, winrt::event_token token) noexc" +
                           "ept {\r\n    if (const auto& c = DoTheTypeChecking<");

            #line 60 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetCppWinRTType(evt.DeclaringType)));

            #line default
            #line hidden
                this.Write(">(eai.obj, isWrapped)) {\r\n      if (!token) {\r\n        return c.");

            #line 62 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(evt.GetName()));

            #line default
            #line hidden
                this.Write("([eai] (");

            #line 62 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetCppWinRTEventSignature(evt)));

            #line default
            #line hidden
                this.Write(") noexcept {\r\n            DispatchTheEvent(eai, sender, args);\r\n        });\r\n    " +
                           "  } else {\r\n        c.");

            #line 66 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(evt.GetName()));

            #line default
            #line hidden
                this.Write("(token);\r\n        return winrt::event_token{ -1 };\r\n      }\r\n    }\r\n    return wi" +
                           "nrt::event_token{0};\r\n  } },\r\n");

            #line 72 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt"
            }

            #line default
            #line hidden

            #line 73 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt"
            foreach (var evt in SyntheticEvents)
            {
            #line default
            #line hidden
                this.Write("  {\"");

            #line 74 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(evt.Name));

            #line default
            #line hidden
                this.Write("\", nullptr /* synthetic event */},\r\n");

            #line 75 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt"
            }

            #line default
            #line hidden
            this.Write("};\r\n\r\nstatic_assert(ARRAYSIZE(EventInfo::xamlEventMap) == ");

            #line 78 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TypeEvents.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(Events.Count() + SyntheticEvents.Count()));

            #line default
            #line hidden
            this.Write(@");

void JsEvent(winrt::Microsoft::ReactNative::IJSValueWriter const& constantWriter, std::wstring topName, std::wstring onName) {
    constantWriter.WritePropertyName(topName);
    constantWriter.WriteObjectBegin();
    WriteProperty(constantWriter, L""registrationName"", onName);
    constantWriter.WriteObjectEnd();
  }

#define JS_EVENT(evtName) JsEvent(constantWriter, L""top"" L#evtName, L""on"" L#evtName)

ConstantProviderDelegate GetEvents = 
    [](winrt::Microsoft::ReactNative::IJSValueWriter const& constantWriter) {
    for (auto const& e : EventInfo::xamlEventMap) {
        auto wideName = std::wstring(winrt::to_hstring(e.name));
        JsEvent(constantWriter, L""top"" + wideName, L""on"" + wideName);
    }
};

void XamlMetadata::PopulateNativeEvents(winrt::Windows::Foundation::Collections::IMap<winrt::hstring, ViewManagerPropertyType>& nativeProps) const {
    for (const auto& evtInfo : EventInfo::xamlEventMap) {
        auto jsEvtName = L""on"" + winrt::to_hstring(evtInfo.name);
        nativeProps.Insert(jsEvtName, ViewManagerPropertyType::Boolean);
    }
}

");
            return(this.GenerationEnvironment.ToString());
        }
示例#2
0
        /// <summary>
        /// Create the template output
        /// </summary>
        public virtual string TransformText()
        {
            this.Write(@"
/*************************************************************
THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT MODIFY MANUALLY
**************************************************************/

import type { ViewProps, NativeSyntheticEvent, ColorValue } from 'react-native';
import type * as Enums from './Enums';

export type Thickness = number | { left?: number, top?: number, right?: number, bottom?: number };

export type GridLength = number | '*' | 'auto' | `${number}*`;

export type CornerRadius = number | { topLeft?: number, topRight?: number, bottomLeft?: number, bottomRight?: number};

export type Point = { x: number, y: number };

export type Color = { a: number, r: number, g: number, b: number };

export type TypedEvent<TArgs> = {
  sender: any;
  args: TArgs;
}

");

            #line 29 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
            foreach (var t in Util.eventArgsTypes)
            {
                var ns = Util.GetTSNamespace(t);
                if (ns != "")
                {
            #line default
            #line hidden
                    this.Write("export namespace Native");

            #line 32 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(ns));

            #line default
            #line hidden
                    this.Write(" {\r\n");

            #line 33 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                }

            #line default
            #line hidden
                this.Write("export type Native");

            #line 34 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(Util.ToJsName(t)));

            #line default
            #line hidden
                this.Write(" = {\r\n");

            #line 35 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                foreach (var m in Util.GetEventArgsMethods(t.GetFullName()))
                {
            #line default
            #line hidden
                    this.Write("  ");

            #line 36 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(m));

            #line default
            #line hidden
                    this.Write("(");

            #line 36 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetEventArgsMethodArgs(t, m)));

            #line default
            #line hidden
                    this.Write("): ");

            #line 36 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetEventArgsMethodReturnType(t, m)));

            #line default
            #line hidden
                    this.Write("\r\n");

            #line 37 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                }
                foreach (var prop in t.GetProperties().Where(p => Util.IsInstanceProperty(p)))
                {
                    var tsType = Util.GetTypeScriptType(prop);
                    if (tsType != "any")
                    {
            #line default
            #line hidden
                        this.Write("  readonly ");

            #line 42 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(Util.ToJsName(prop)));

            #line default
            #line hidden
                        this.Write(": ");

            #line 42 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(tsType));

            #line default
            #line hidden
                        this.Write(";\r\n");

            #line 43 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    }
                }


            #line default
            #line hidden
                this.Write("}\r\n");

            #line 48 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                if (ns != "")
                {
            #line default
            #line hidden
                    this.Write("}\r\n");

            #line 50 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                }

            #line default
            #line hidden

            #line 51 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
            }

            #line default
            #line hidden
            this.Write("\r\n");

            #line 53 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
            var derived = Util.GetDerivedTypes(Types);
            foreach (var type in Types)
            {
            #line default
            #line hidden

            #line 55 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                var ns = Util.GetTSNamespace(type);
                if (ns != "")
                {
            #line default
            #line hidden
                    this.Write("export namespace Native");

            #line 57 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(ns));

            #line default
            #line hidden
                    this.Write(" {\r\n");

            #line 58 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                }

            #line default
            #line hidden
                this.Write("export interface Native");

            #line 59 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(Util.ToJsName(type)));

            #line default
            #line hidden
                this.Write("Props extends ");

            #line 59 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetBaseClassProps(type)));

            #line default
            #line hidden
                this.Write(" {\r\n");

            #line 60 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                var typeProp = Util.GetJsTypeProperty(type, derived);
                if (typeProp != "")
                {
            #line default
            #line hidden
                    this.Write("  type: ");

            #line 62 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(typeProp));

            #line default
            #line hidden
                    this.Write(";\r\n");

            #line 63 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                }
                foreach (var prop in type.GetProperties().Where(p => Util.ShouldEmitPropertyMetadata(p)))
                {
            #line default
            #line hidden
                    this.Write("  ");

            #line 65 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(Util.ToJsName(prop)));

            #line default
            #line hidden
                    this.Write("?: ");

            #line 65 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetTypeScriptType(prop)));

            #line default
            #line hidden
                    this.Write(";\r\n");

            #line 66 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                }
                foreach (var prop in FakeProps.Where(p => type == p.DeclaringType))
                {
            #line default
            #line hidden
                    this.Write("  ");

            #line 68 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(Util.ToJsName(prop)));

            #line default
            #line hidden
                    this.Write("?: ");

            #line 68 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetTypeScriptType(prop)));

            #line default
            #line hidden
                    this.Write("; // synthetic property\r\n");

            #line 69 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                }
                foreach (var prop in SyntheticProps.Where(p => type == p.DeclaringType))
                {
            #line default
            #line hidden
                    this.Write("  /**\r\n  * ");

            #line 72 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(prop.Comment));

            #line default
            #line hidden
                    this.Write("\r\n  */\r\n  ");

            #line 74 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(Util.ToJsName(prop.Name)));

            #line default
            #line hidden
                    this.Write("?: ");

            #line 74 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetTypeScriptType(prop)));

            #line default
            #line hidden
                    this.Write("; // synthetic property\r\n");

            #line 75 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                }
                foreach (var attachedDP in Util.AttachedProperties.Where(p => Properties.Any(sp => sp.Property == p && sp.DeclaringType == type)))
                {
            #line default
            #line hidden
                    this.Write("  ");

            #line 77 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(Util.ToJsName(attachedDP)));

            #line default
            #line hidden
                    this.Write("?: ");

            #line 77 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetTypeScriptType(attachedDP)));

            #line default
            #line hidden
                    this.Write("; // attached property\r\n");

            #line 78 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                }
                foreach (var evt in type.GetEvents())
                {
            #line default
            #line hidden
                    this.Write("  on");

            #line 80 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(evt.GetName()));

            #line default
            #line hidden
                    this.Write("?: (event: NativeSyntheticEvent<");

            #line 80 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetEventArgsTSName(evt, "Native")));

            #line default
            #line hidden
                    this.Write(">) => void;\r\n");

            #line 81 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                }
                foreach (var evt in SyntheticEvents.Where(e => type == e.DeclaringType))
                {
            #line default
            #line hidden
                    this.Write("  on");

            #line 83 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(evt.Name));

            #line default
            #line hidden
                    this.Write("?: (event: NativeSyntheticEvent<");

            #line 83 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetTypeScriptType(evt)));

            #line default
            #line hidden
                    this.Write(">) => void;\r\n");

            #line 84 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                }

            #line default
            #line hidden
                this.Write("}\r\n");

            #line 86 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                if (ns != "")
                {
            #line default
            #line hidden
                    this.Write("}\r\n");

            #line 88 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                }

            #line default
            #line hidden

            #line 89 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
            }

            #line default
            #line hidden
            this.Write("\r\nexport type XamlControlProps =");

            #line 91 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
            var first = true; foreach (var type in Types)
            {
                if (Util.HasCtor(type) || !type.IsSealed)
                {
                    if (!first)

            #line default
            #line hidden
                    {
                        this.Write(" | ");
                    }

            #line 93 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    ;

                    first = false;


            #line default
            #line hidden
                    this.Write(" ");

            #line 96 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(Util.GetNativePropsName(type)));

            #line default
            #line hidden
                    this.Write("\r\n\t");

            #line 97 "C:\Users\asklar\source\repos\react-native-xaml\package\Codegen\TSProps.tt"
                }
            }

            #line default
            #line hidden
            this.Write(";\r\n\r\n\r\n");
            return(this.GenerationEnvironment.ToString());
        }