x_ite 8.3.2 → 8.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/.github/workflows/pages-deploy.yml +1 -1
  2. package/.vscode/settings.json +2 -1
  3. package/dist/LICENSE.md +4 -4
  4. package/dist/assets/components/Annotation.js +13 -13
  5. package/dist/assets/components/Annotation.min.js +1 -1
  6. package/dist/assets/components/CADGeometry.js +13 -13
  7. package/dist/assets/components/CADGeometry.min.js +1 -1
  8. package/dist/assets/components/CubeMapTexturing.js +25 -25
  9. package/dist/assets/components/CubeMapTexturing.min.js +1 -1
  10. package/dist/assets/components/DIS.js +13 -13
  11. package/dist/assets/components/DIS.min.js +1 -1
  12. package/dist/assets/components/EventUtilities.js +9 -9
  13. package/dist/assets/components/EventUtilities.min.js +1 -1
  14. package/dist/assets/components/Geometry2D.js +19 -19
  15. package/dist/assets/components/Geometry2D.min.js +1 -1
  16. package/dist/assets/components/Geospatial.js +33 -33
  17. package/dist/assets/components/Geospatial.min.js +1 -1
  18. package/dist/assets/components/HAnim.js +64 -75
  19. package/dist/assets/components/HAnim.min.js +1 -1
  20. package/dist/assets/components/KeyDeviceSensor.js +8 -8
  21. package/dist/assets/components/KeyDeviceSensor.min.js +1 -1
  22. package/dist/assets/components/Layout.js +27 -27
  23. package/dist/assets/components/Layout.min.js +1 -1
  24. package/dist/assets/components/NURBS.js +24 -24
  25. package/dist/assets/components/NURBS.min.js +1 -1
  26. package/dist/assets/components/ParticleSystems.js +23 -23
  27. package/dist/assets/components/ParticleSystems.min.js +1 -1
  28. package/dist/assets/components/Picking.js +19 -19
  29. package/dist/assets/components/Picking.min.js +1 -1
  30. package/dist/assets/components/RigidBodyPhysics.js +17 -17
  31. package/dist/assets/components/RigidBodyPhysics.min.js +1 -1
  32. package/dist/assets/components/Scripting.js +28 -28
  33. package/dist/assets/components/Scripting.min.js +1 -1
  34. package/dist/assets/components/Text.js +24 -24
  35. package/dist/assets/components/Text.min.js +1 -1
  36. package/dist/assets/components/{ProjectiveTextureMapping.js → TextureProjector.js} +39 -39
  37. package/dist/assets/components/TextureProjector.min.js +1 -0
  38. package/dist/assets/components/Texturing3D.js +27 -27
  39. package/dist/assets/components/Texturing3D.min.js +1 -1
  40. package/dist/assets/components/VolumeRendering.js +19 -19
  41. package/dist/assets/components/VolumeRendering.min.js +1 -1
  42. package/dist/assets/components/X_ITE.js +9 -9
  43. package/dist/assets/components/X_ITE.min.js +1 -1
  44. package/dist/x_ite.css +1 -1
  45. package/dist/x_ite.js +3986 -1366
  46. package/dist/x_ite.min.js +1 -1
  47. package/dist/x_ite.zip +0 -0
  48. package/docs/Gemfile +1 -4
  49. package/docs/_config.yml +3 -3
  50. package/docs/_posts/getting-started.md +147 -441
  51. package/docs/_posts/reference/field-services-and-objects.md +24 -4
  52. package/docs/_posts/reference/prototype-services.md +24 -4
  53. package/docs/_posts/reference/scene-services.md +18 -2
  54. package/docs/_posts/what's-new.md +32 -4
  55. package/docs/_tabs/playground.html +36 -40
  56. package/docs/assets/css/style.scss +18 -0
  57. package/package.json +1 -1
  58. package/src/assets/components/{ProjectiveTextureMapping.js → TextureProjector.js} +5 -5
  59. package/src/examples.js +1 -1
  60. package/src/tests.js +5 -5
  61. package/src/x_ite/Base/X3DInfoArray.js +45 -19
  62. package/src/x_ite/Base/X3DObject.js +29 -20
  63. package/src/x_ite/Base/X3DObjectArrayField.js +71 -26
  64. package/src/x_ite/Base/X3DTypedArrayField.js +108 -32
  65. package/src/x_ite/Browser/DOMIntegration.js +4 -3
  66. package/src/x_ite/Browser/VERSION.js +1 -1
  67. package/src/x_ite/Browser/X3DBrowser.js +43 -28
  68. package/src/x_ite/Components/Core/X3DNode.js +682 -210
  69. package/src/x_ite/Components/Core/X3DPrototypeInstance.js +484 -100
  70. package/src/x_ite/Components/Grouping/X3DTransformMatrix3DNode.js +18 -43
  71. package/src/x_ite/Components/HAnim/HAnimHumanoid.js +27 -26
  72. package/src/x_ite/Components/HAnim/HAnimJoint.js +19 -31
  73. package/src/x_ite/Components/Rendering/X3DGeometryNode.js +6 -3
  74. package/src/x_ite/Components/Sound/X3DSoundProcessingNode.js +14 -1
  75. package/src/x_ite/Components/Sound/X3DSoundSourceNode.js +0 -1
  76. package/src/x_ite/Components/{ProjectiveTextureMapping → TextureProjector}/TextureProjector.js +1 -1
  77. package/src/x_ite/Components/{ProjectiveTextureMapping → TextureProjector}/TextureProjectorParallel.js +1 -1
  78. package/src/x_ite/Components/{ProjectiveTextureMapping → TextureProjector}/X3DTextureProjectorNode.js +0 -0
  79. package/src/x_ite/Components/Time/TimeSensor.js +5 -0
  80. package/src/x_ite/Components/Time/X3DTimeDependentNode.js +1 -0
  81. package/src/x_ite/Configuration/ComponentInfo.js +51 -22
  82. package/src/x_ite/Configuration/ProfileInfo.js +10 -6
  83. package/src/x_ite/Configuration/SupportedComponents.js +22 -20
  84. package/src/x_ite/Configuration/SupportedProfiles.js +1 -1
  85. package/src/x_ite/Configuration/UnitInfo.js +69 -26
  86. package/src/x_ite/Execution/X3DExecutionContext.js +78 -55
  87. package/src/x_ite/Execution/X3DExportedNode.js +75 -28
  88. package/src/x_ite/Execution/X3DImportedNode.js +227 -67
  89. package/src/x_ite/Execution/X3DScene.js +437 -117
  90. package/src/x_ite/Fields/ArrayFields.js +105 -55
  91. package/src/x_ite/Fields/SFBool.js +14 -6
  92. package/src/x_ite/Fields/SFColor.js +35 -12
  93. package/src/x_ite/Fields/SFColorRGBA.js +2 -0
  94. package/src/x_ite/Fields/SFDouble.js +17 -10
  95. package/src/x_ite/Fields/SFFloat.js +17 -10
  96. package/src/x_ite/Fields/SFImage.js +93 -8
  97. package/src/x_ite/Fields/SFInt32.js +14 -6
  98. package/src/x_ite/Fields/SFMatrixPrototypeTemplate.js +38 -13
  99. package/src/x_ite/Fields/SFNode.js +59 -21
  100. package/src/x_ite/Fields/SFRotation.js +38 -13
  101. package/src/x_ite/Fields/SFString.js +14 -7
  102. package/src/x_ite/Fields/SFTime.js +14 -6
  103. package/src/x_ite/Fields/SFVecPrototypeTemplate.js +39 -13
  104. package/src/x_ite/InputOutput/FileLoader.js +1 -1
  105. package/src/x_ite/InputOutput/Generator.js +178 -17
  106. package/src/x_ite/Parser/JSONParser.js +1 -1
  107. package/src/x_ite/Parser/VRMLParser.js +24 -27
  108. package/src/x_ite/Parser/X3DParser.js +0 -4
  109. package/src/x_ite/Parser/XMLParser.js +2 -2
  110. package/src/x_ite/Prototype/X3DExternProtoDeclaration.js +182 -64
  111. package/src/x_ite/Prototype/X3DProtoDeclaration.js +314 -93
  112. package/src/x_ite/Rendering/X3DRenderObject.js +6 -1
  113. package/src/x_ite/Routing/X3DRoute.js +104 -40
  114. package/src/x_ite.html +1 -1
  115. package/x_ite.min.html +1 -1
  116. package/dist/assets/components/ProjectiveTextureMapping.min.js +0 -1
  117. package/docs/Gemfile.lock +0 -116
@@ -108,7 +108,7 @@ SupportedProfiles .addProfile ({
108
108
  SupportedComponents .get ("ParticleSystems"),
109
109
  SupportedComponents .get ("Picking"),
110
110
  SupportedComponents .get ("PointingDeviceSensor"),
111
- SupportedComponents .get ("ProjectiveTextureMapping"),
111
+ SupportedComponents .get ("TextureProjector"),
112
112
  SupportedComponents .get ("Rendering"),
113
113
  SupportedComponents .get ("RigidBodyPhysics"),
114
114
  SupportedComponents .get ("Scripting"),
@@ -46,7 +46,6 @@
46
46
  ******************************************************************************/
47
47
 
48
48
  import X3DObject from "../Base/X3DObject.js";
49
- import Generator from "../InputOutput/Generator.js";
50
49
 
51
50
  function UnitInfo (category, name, conversionFactor)
52
51
  {
@@ -66,35 +65,79 @@ UnitInfo .prototype = Object .assign (Object .create (X3DObject .prototype),
66
65
  {
67
66
  return "UnitInfo";
68
67
  },
69
- toVRMLStream: function (stream)
68
+ toVRMLStream: function (generator)
70
69
  {
71
- stream .string += "UNIT";
72
- stream .string += " ";
73
- stream .string += this .category;
74
- stream .string += " ";
75
- stream .string += this .name;
76
- stream .string += " ";
77
- stream .string += this .conversionFactor;
70
+ generator .string += "UNIT";
71
+ generator .string += generator .Space ();
72
+ generator .string += this .category;
73
+ generator .string += generator .Space ();
74
+ generator .string += this .name;
75
+ generator .string += generator .Space ();
76
+ generator .string += this .conversionFactor;
78
77
  },
79
- toXMLStream: function (stream)
78
+ toXMLStream: function (generator)
80
79
  {
81
- const generator = Generator .Get (stream);
80
+ generator .string += generator .Indent ();
81
+ generator .string += "<unit";
82
+ generator .string += generator .Space ();
83
+ generator .string += "category='";
84
+ generator .string += this .category;
85
+ generator .string += "'";
86
+ generator .string += generator .Space ();
87
+ generator .string += "name='";
88
+ generator .string += generator .XMLEncode (this .name);
89
+ generator .string += "'";
90
+ generator .string += generator .Space ();
91
+ generator .string += "conversionFactor='";
92
+ generator .string += this .conversionFactor;
93
+ generator .string += "'";
94
+ generator .string += "/>";
95
+ },
96
+ toJSONStream: function (generator, _throw)
97
+ {
98
+ if (this .conversionFactor === 1)
99
+ throw new Error ("conversionFactor is 1");
100
+
101
+ generator .string += generator .Indent ();
102
+
103
+ generator .string += '{';
104
+ generator .string += generator .TidyBreak ();
105
+ generator .string += generator .IncIndent ();
106
+
107
+ generator .string += generator .Indent ();
108
+ generator .string += '"';
109
+ generator .string += "@category";
110
+ generator .string += '"';
111
+ generator .string += ':';
112
+ generator .string += generator .TidySpace ();
113
+ generator .string += '"';
114
+ generator .string += this .category;
115
+ generator .string += '"';
116
+ generator .string += ',';
117
+ generator .string += generator .TidyBreak ();
118
+
119
+ generator .string += generator .Indent ();
120
+ generator .string += '"';
121
+ generator .string += "@name";
122
+ generator .string += '"';
123
+ generator .string += ':';
124
+ generator .string += generator .TidySpace ();
125
+ generator .string += generator .JSONEncode (this .name);
126
+ generator .string += ',';
127
+ generator .string += generator .TidyBreak ();
128
+
129
+ generator .string += generator .Indent ();
130
+ generator .string += '"';
131
+ generator .string += "@conversionFactor";
132
+ generator .string += '"';
133
+ generator .string += ':';
134
+ generator .string += generator .TidySpace ();
135
+ generator .string += generator .DoublePrecision (this .conversionFactor);
136
+ generator .string += generator .TidyBreak ();
82
137
 
83
- stream .string += generator .Indent ();
84
- stream .string += "<unit";
85
- stream .string += " ";
86
- stream .string += "category='";
87
- stream .string += this .category;
88
- stream .string += "'";
89
- stream .string += " ";
90
- stream .string += "name='";
91
- stream .string += generator .XMLEncode (this .name);
92
- stream .string += "'";
93
- stream .string += " ";
94
- stream .string += "conversionFactor='";
95
- stream .string += this .conversionFactor;
96
- stream .string += "'";
97
- stream .string += "/>";
138
+ generator .string += generator .DecIndent ();
139
+ generator .string += generator .Indent ();
140
+ generator .string += '}';
98
141
  },
99
142
  });
100
143
 
@@ -59,7 +59,6 @@ import RouteArray from "../Routing/RouteArray.js";
59
59
  import X3DRoute from "../Routing/X3DRoute.js";
60
60
  import X3DCast from "../Base/X3DCast.js";
61
61
  import X3DConstants from "../Base/X3DConstants.js";
62
- import Generator from "../InputOutput/Generator.js";
63
62
  import SFNodeCache from "../Fields/SFNodeCache.js";
64
63
  import Algorithm from "../../standard/Math/Algorithm.js";
65
64
 
@@ -79,9 +78,14 @@ function X3DExecutionContext (executionContext)
79
78
 
80
79
  this .addType (X3DConstants .X3DExecutionContext)
81
80
 
82
- this .addChildObjects ("rootNodes", new Fields .MFNode (),
83
- "worldInfos", new Fields .MFNode (),
84
- "sceneGraph_changed", new Fields .SFTime ());
81
+ this .addChildObjects ("rootNodes", new Fields .MFNode (),
82
+ "worldInfos", new Fields .MFNode (),
83
+ "sceneGraph_changed", new Fields .SFTime (),
84
+ "namedNodes_changed", new Fields .SFTime (),
85
+ "importedNodes_changed", new Fields .SFTime (),
86
+ "protos_changed", new Fields .SFTime (),
87
+ "externprotos_changed", new Fields .SFTime (),
88
+ "routes_changed", new Fields .SFTime ())
85
89
 
86
90
  this ._rootNodes .setAccessType (X3DConstants .initializeOnly);
87
91
  this ._rootNodes .addCloneCount (1);
@@ -91,13 +95,6 @@ function X3DExecutionContext (executionContext)
91
95
  this [_protos] = new ProtoDeclarationArray ();
92
96
  this [_externprotos] = new ExternProtoDeclarationArray ();
93
97
  this [_routes] = new RouteArray ();
94
-
95
- this .addChildObjects ("namedNodes_changed", new Fields .SFTime (),
96
- "importedNodes_changed", new Fields .SFTime (),
97
- "protos_changed", new Fields .SFTime (),
98
- "externprotos_changed", new Fields .SFTime (),
99
- "routes_changed", new Fields .SFTime ())
100
-
101
98
  }
102
99
 
103
100
  X3DExecutionContext .prototype = Object .assign (Object .create (X3DBaseNode .prototype),
@@ -327,8 +324,6 @@ X3DExecutionContext .prototype = Object .assign (Object .create (X3DBaseNode .pr
327
324
 
328
325
  this [_importedNodes] .add (importedName, importedNode);
329
326
 
330
- importedNode .setup ();
331
-
332
327
  this ._importedNodes_changed = this .getBrowser () .getCurrentTime ();
333
328
  },
334
329
  removeImportedNode: function (importedName)
@@ -761,21 +756,19 @@ X3DExecutionContext .prototype = Object .assign (Object .create (X3DBaseNode .pr
761
756
  this ._worldInfos .splice (i, 1);
762
757
  }
763
758
  },
764
- toVRMLStream: function (stream)
759
+ toVRMLStream: function (generator)
765
760
  {
766
- const generator = Generator .Get (stream);
767
-
768
761
  generator .PushExecutionContext (this);
769
762
  generator .EnterScope ();
770
763
  generator .ImportedNodes (this .getImportedNodes ());
771
764
 
772
765
  // Output extern protos
773
766
 
774
- this .getExternProtoDeclarations () .toVRMLStream (stream);
767
+ this .getExternProtoDeclarations () .toVRMLStream (generator);
775
768
 
776
769
  // Output protos
777
770
 
778
- this .getProtoDeclarations () .toVRMLStream (stream);
771
+ this .getProtoDeclarations () .toVRMLStream (generator);
779
772
 
780
773
  // Output root nodes
781
774
 
@@ -785,38 +778,28 @@ X3DExecutionContext .prototype = Object .assign (Object .create (X3DBaseNode .pr
785
778
  {
786
779
  const rootNode = rootNodes [i];
787
780
 
788
- stream .string += generator .Indent ();
781
+ generator .string += generator .Indent ();
789
782
 
790
783
  if (rootNode)
791
- rootNode .toVRMLStream (stream);
784
+ rootNode .toVRMLStream (generator);
792
785
  else
793
- stream .string += "NULL";
786
+ generator .string += "NULL";
794
787
 
795
- stream .string += "\n";
788
+ generator .string += generator .TidyBreak ();
796
789
 
797
790
  if (i !== length - 1)
798
- stream .string += "\n";
791
+ generator .string += generator .TidyBreak ();
799
792
  }
800
793
 
801
794
  // Output imported nodes
802
795
 
803
796
  const importedNodes = this .getImportedNodes ();
804
797
 
805
- if (importedNodes .size)
798
+ if (importedNodes .length)
806
799
  {
807
- stream .string += "\n";
800
+ generator .string += generator .TidyBreak ();
808
801
 
809
- importedNodes .forEach (function (importedNode)
810
- {
811
- try
812
- {
813
- importedNode .toVRMLStream (stream);
814
-
815
- stream .string += "\n";
816
- }
817
- catch (error)
818
- { }
819
- });
802
+ importedNodes .toVRMLStream (generator);
820
803
  }
821
804
 
822
805
  // Output routes
@@ -825,29 +808,27 @@ X3DExecutionContext .prototype = Object .assign (Object .create (X3DBaseNode .pr
825
808
 
826
809
  if (routes .length)
827
810
  {
828
- stream .string += "\n";
811
+ generator .string += generator .TidyBreak ();
829
812
 
830
- routes .toVRMLStream (stream);
813
+ routes .toVRMLStream (generator);
831
814
  }
832
815
 
833
816
  generator .LeaveScope ();
834
817
  generator .PopExecutionContext ();
835
818
  },
836
- toXMLStream: function (stream)
819
+ toXMLStream: function (generator)
837
820
  {
838
- const generator = Generator .Get (stream);
839
-
840
821
  generator .PushExecutionContext (this);
841
822
  generator .EnterScope ();
842
823
  generator .ImportedNodes (this .getImportedNodes ());
843
824
 
844
825
  // Output extern protos
845
826
 
846
- this .getExternProtoDeclarations () .toXMLStream (stream);
827
+ this .getExternProtoDeclarations () .toXMLStream (generator);
847
828
 
848
829
  // Output protos
849
830
 
850
- this .getProtoDeclarations () .toXMLStream (stream);
831
+ this .getProtoDeclarations () .toXMLStream (generator);
851
832
 
852
833
  // Output root nodes
853
834
 
@@ -855,30 +836,72 @@ X3DExecutionContext .prototype = Object .assign (Object .create (X3DBaseNode .pr
855
836
 
856
837
  if (rootNodes .length)
857
838
  {
858
- rootNodes .toXMLStream (stream);
839
+ rootNodes .toXMLStream (generator);
859
840
 
860
- stream .string += "\n";
841
+ generator .string += generator .TidyBreak ();
861
842
  }
862
843
 
863
844
  // Output imported nodes
864
845
 
865
- const importedNodes = this .getImportedNodes ();
846
+ this .getImportedNodes () .toXMLStream (generator);
847
+
848
+ // Output routes
849
+
850
+ this .getRoutes () .toXMLStream (generator);
851
+
852
+ generator .LeaveScope ();
853
+ generator .PopExecutionContext ();
854
+ },
855
+ toJSONStream: function (generator)
856
+ {
857
+ generator .PushExecutionContext (this);
858
+ generator .EnterScope ();
859
+ generator .ImportedNodes (this .getImportedNodes ());
860
+
866
861
 
867
- importedNodes .forEach (function (importedNode)
862
+ // Extern proto declarations
863
+
864
+ this .getExternProtoDeclarations () .toJSONStream (generator, true);
865
+
866
+
867
+ // Proto declarations
868
+
869
+ this .getProtoDeclarations () .toJSONStream (generator, true);
870
+
871
+
872
+ // Root nodes
873
+
874
+ if (this .getRootNodes () .length)
868
875
  {
869
- try
876
+ for (const rootNode of this .getRootNodes ())
870
877
  {
871
- importedNode .toXMLStream (stream);
878
+ generator .string += generator .Indent ();
872
879
 
873
- stream .string += "\n";
880
+ if (rootNode)
881
+ {
882
+ rootNode .toJSONStream (generator);
883
+ }
884
+ else
885
+ {
886
+ generator .string += generator .Indent ();
887
+ generator .string += "null";
888
+ }
889
+
890
+ generator .string += ',';
891
+ generator .string += generator .TidyBreak ();
874
892
  }
875
- catch (error)
876
- { }
877
- });
893
+ }
878
894
 
879
- // Output routes
880
895
 
881
- this .getRoutes () .toXMLStream (stream);
896
+ // Imported nodes
897
+
898
+ this .getImportedNodes () .toJSONStream (generator, true);
899
+
900
+
901
+ // Routes
902
+
903
+ this .getRoutes () .toJSONStream (generator, true);
904
+
882
905
 
883
906
  generator .LeaveScope ();
884
907
  generator .PopExecutionContext ();
@@ -47,7 +47,6 @@
47
47
 
48
48
  import X3DObject from "../Base/X3DObject.js";
49
49
  import SFNodeCache from "../Fields/SFNodeCache.js";
50
- import Generator from "../InputOutput/Generator.js";
51
50
 
52
51
  const
53
52
  _exportedName = Symbol (),
@@ -72,47 +71,95 @@ X3DExportedNode .prototype = Object .assign (Object .create (X3DObject .prototyp
72
71
  {
73
72
  return this [_localNode];
74
73
  },
75
- toVRMLStream: function (stream)
74
+ toVRMLStream: function (generator)
76
75
  {
77
- const
78
- generator = Generator .Get (stream),
79
- localName = generator .LocalName (this [_localNode]);
76
+ const localName = generator .LocalName (this [_localNode]);
80
77
 
81
- stream .string += generator .Indent ();
82
- stream .string += "EXPORT";
83
- stream .string += " ";
84
- stream .string += localName;
78
+ generator .string += generator .Indent ();
79
+ generator .string += "EXPORT";
80
+ generator .string += generator .Space ();
81
+ generator .string += localName;
85
82
 
86
83
  if (this [_exportedName] !== localName)
87
84
  {
88
- stream .string += " ";
89
- stream .string += "AS";
90
- stream .string += " ";
91
- stream .string += this [_exportedName];
85
+ generator .string += generator .Space ();
86
+ generator .string += "AS";
87
+ generator .string += generator .Space ();
88
+ generator .string += this [_exportedName];
92
89
  }
93
90
  },
94
- toXMLStream: function (stream)
91
+ toXMLStream: function (generator)
95
92
  {
96
- const
97
- generator = Generator .Get (stream),
98
- localName = generator .LocalName (this [_localNode]);
93
+ const localName = generator .LocalName (this [_localNode]);
99
94
 
100
- stream .string += generator .Indent ();
101
- stream .string += "<EXPORT";
102
- stream .string += " ";
103
- stream .string += "localDEF='";
104
- stream .string += generator .XMLEncode (localName);
105
- stream .string += "'";
95
+ generator .string += generator .Indent ();
96
+ generator .string += "<EXPORT";
97
+ generator .string += generator .Space ();
98
+ generator .string += "localDEF='";
99
+ generator .string += generator .XMLEncode (localName);
100
+ generator .string += "'";
106
101
 
107
102
  if (this [_exportedName] !== localName)
108
103
  {
109
- stream .string += " ";
110
- stream .string += "AS='";
111
- stream .string += generator .XMLEncode (this [_exportedName]);
112
- stream .string += "'";
104
+ generator .string += generator .Space ();
105
+ generator .string += "AS='";
106
+ generator .string += generator .XMLEncode (this [_exportedName]);
107
+ generator .string += "'";
113
108
  }
114
109
 
115
- stream .string += "/>";
110
+ generator .string += "/>";
111
+ },
112
+ toJSONStream: function (generator)
113
+ {
114
+ const localName = generator .LocalName (this [_localNode]);
115
+
116
+ generator .string += generator .Indent ();
117
+ generator .string += '{';
118
+ generator .string += generator .TidySpace ();
119
+ generator .string += '"';
120
+ generator .string += "EXPORT";
121
+ generator .string += '"';
122
+ generator .string += ':';
123
+ generator .string += generator .TidyBreak ();
124
+ generator .string += generator .IncIndent ();
125
+ generator .string += generator .Indent ();
126
+ generator .string += '{';
127
+ generator .string += generator .TidyBreak ();
128
+ generator .string += generator .IncIndent ();
129
+
130
+ generator .string += generator .Indent ();
131
+ generator .string += '"';
132
+ generator .string += "@localDEF";
133
+ generator .string += '"';
134
+ generator .string += ':';
135
+ generator .string += generator .TidySpace ();
136
+ generator .string += generator .JSONEncode (localName);
137
+
138
+ if (this [_exportedName] !== localName)
139
+ {
140
+ generator .string += ',';
141
+ generator .string += generator .TidyBreak ();
142
+ generator .string += generator .Indent ();
143
+ generator .string += '"';
144
+ generator .string += "@AS";
145
+ generator .string += '"';
146
+ generator .string += ':';
147
+ generator .string += generator .TidySpace ();
148
+ generator .string += generator .JSONEncode (this [_exportedName]);
149
+ generator .string += generator .TidyBreak ();
150
+ }
151
+ else
152
+ {
153
+ generator .string += generator .TidyBreak ();
154
+ }
155
+
156
+ generator .string += generator .DecIndent ();
157
+ generator .string += generator .Indent ();
158
+ generator .string += '}';
159
+ generator .string += generator .TidyBreak ();
160
+ generator .string += generator .DecIndent ();
161
+ generator .string += generator .Indent ();
162
+ generator .string += '}';
116
163
  },
117
164
  });
118
165