diff options
| author | jpbruyere <jp.bruyere@hotmail.com> | 2016-08-11 02:35:39 +0200 |
|---|---|---|
| committer | jpbruyere <jp.bruyere@hotmail.com> | 2016-08-11 03:32:23 +0200 |
| commit | 7560c0bb4a769210e289e2633ddf13d2617f8e6e (patch) | |
| tree | 3225277358a2bba61c4496923ba39353c942098b /src/IMLReader.cs | |
| parent | 13b1a9755a9e036122dd2f3e29714bbb5141118c (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.cs | 37 |
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; } } |