KHR_XmpJsonLD.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using SharpGLTF.SchemaReflection;
  5. namespace SharpGLTF
  6. {
  7. class XmpJsonLdExtension : SchemaProcessor
  8. {
  9. private static string RootSchemaUri => KhronosExtensions.KhronosExtensionPath("KHR_xmp_json_ld", "glTF.KHR_xmp_json_ld.schema.json");
  10. private static string PropSchemaUri => KhronosExtensions.KhronosExtensionPath("KHR_xmp_json_ld", "KHR_xmp_json_ld.schema.json");
  11. private const string ExtensionRootClassName = "KHR_xmp_json_ld glTF Document Extension";
  12. private const string ExtensionPropClassName = "KHR_xmp_json_ld glTF Extension";
  13. public override IEnumerable<(string, SchemaType.Context)> ReadSchema()
  14. {
  15. yield return ("ext.XmpJsonLinkedData.Root.g", ProcessModel());
  16. yield return ("ext.XmpJsonLinkedData.Prop.g", ProcessProps());
  17. }
  18. private static SchemaType.Context ProcessModel()
  19. {
  20. var ctx = SchemaProcessing.LoadExtensionSchemaContext(RootSchemaUri);
  21. var packets = ctx.FindClass(ExtensionRootClassName).GetField("packets");
  22. return ctx;
  23. }
  24. private static SchemaType.Context ProcessProps()
  25. {
  26. var ctx = SchemaProcessing.LoadExtensionSchemaContext(PropSchemaUri);
  27. return ctx;
  28. }
  29. public override void PrepareTypes(CodeGen.CSharpEmitter newEmitter, SchemaType.Context ctx)
  30. {
  31. newEmitter.SetRuntimeName(ExtensionRootClassName, "XmpPackets");
  32. newEmitter.SetRuntimeName(ExtensionPropClassName, "XmpPacketReference");
  33. }
  34. }
  35. }