aboutsummaryrefslogtreecommitdiffstatsci
path: root/src/IMLReader.cs
diff options
context:
space:
mode:
authorjpbruyere <jp.bruyere@hotmail.com>2016-08-11 02:35:39 +0200
committerjpbruyere <jp.bruyere@hotmail.com>2016-08-11 03:32:23 +0200
commit7560c0bb4a769210e289e2633ddf13d2617f8e6e (patch)
tree3225277358a2bba61c4496923ba39353c942098b /src/IMLReader.cs
parent13b1a9755a9e036122dd2f3e29714bbb5141118c (diff)
resolved bug multiple template level read, ensure reader stay on sybling
nodes modifié : src/IMLReader.cs create instance from XmlFragment modifié : src/Instantiator.cs update tests modifié : Tests/BasicTests.cs modifié : Tests/Interfaces/Divers/imlEditor.crow
Diffstat (limited to 'src/IMLReader.cs')
-rw-r--r--src/IMLReader.cs37
1 files changed, 18 insertions, 19 deletions
diff --git a/src/IMLReader.cs b/src/IMLReader.cs
index 87426726..f8fd34ed 100644
--- a/src/IMLReader.cs
+++ b/src/IMLReader.cs
@@ -32,12 +32,25 @@ namespace Crow
{
Interface.LoaderInvoker loader = null;
- public string ImlPath;
- public Stream ImlStream;
- public Type RootType = null;
+ string ImlPath;
+ Stream ImlStream;
DynamicMethod dm = null;
+
public ILGenerator il = null;
+ public Type RootType = null;
+
+ /// <summary>
+ /// Finalize instatiator MSIL and return LoaderInvoker delegate
+ /// </summary>
+ public Interface.LoaderInvoker GetLoader(){
+ if (loader != null)
+ return loader;
+
+ il.Emit(OpCodes.Ret);
+ loader = (Interface.LoaderInvoker)dm.CreateDelegate (typeof(Interface.LoaderInvoker));
+ return loader;
+ }
#region CTOR
public IMLReader (string path)
@@ -72,17 +85,6 @@ namespace Crow
Read();//close tag
}
/// <summary>
- /// Finalize instatiator MSIL and return LoaderInvoker delegate
- /// </summary>
- public Interface.LoaderInvoker GetLoader(){
- if (loader != null)
- return loader;
-
- il.Emit(OpCodes.Ret);
- loader = (Interface.LoaderInvoker)dm.CreateDelegate (typeof(Interface.LoaderInvoker));
- return loader;
- }
- /// <summary>
/// Inits il generator, RootType must have been read first
/// </summary>
void InitEmitter(){
@@ -114,16 +116,15 @@ namespace Crow
List<string[]> itemTemplateIds = new List<string[]> ();
bool inlineTemplate = false;
reader.Read ();
-
+ int depth = reader.Depth + 1;
while (reader.Read ()) {
- if (!reader.IsStartElement ())
+ if (!reader.IsStartElement () || reader.Depth > depth)
continue;
if (reader.Name == "Template") {
inlineTemplate = true;
reader.Read ();
readChildren (reader, crowType,true);
- continue;
} else if (reader.Name == "ItemTemplate") {
string dataType = "default", datas = "", path = "";
while (reader.MoveToNextAttribute ()) {
@@ -142,8 +143,6 @@ namespace Crow
itemTemplateIds.Add (new string[] { dataType, uid, datas });
}
-
- continue;
}
}