aboutsummaryrefslogtreecommitdiffstatsci
path: root/src/IML/Reader.cs
diff options
context:
space:
mode:
authorj-p <jp.bruyere@live.be>2018-12-11 23:20:54 +0100
committerGitHub <noreply@github.com>2018-12-11 23:20:54 +0100
commiteef19b533a0e2ce17f2762d3acfc5990496eaaa0 (patch)
tree6f09101bd8097c1a4ca6a216597bb5d4941453fa /src/IML/Reader.cs
parent65820f61457262b631eba35283c55135aecbc5f2 (diff)
parentf6732851fe211e22ff91716ac83dffc0cf09d620 (diff)
Merge pull request #44 from jpbruyere/xlib
Xlib
Diffstat (limited to 'src/IML/Reader.cs')
-rw-r--r--src/IML/Reader.cs223
1 files changed, 0 insertions, 223 deletions
diff --git a/src/IML/Reader.cs b/src/IML/Reader.cs
deleted file mode 100644
index 7a0c8405..00000000
--- a/src/IML/Reader.cs
+++ /dev/null
@@ -1,223 +0,0 @@
-//
-// IMLReader.cs
-//
-// Author:
-// Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2016 jp
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see <http://www.gnu.org/licenses/>.
-using System;
-using System.Xml;
-using System.IO;
-using System.Reflection;
-using System.Reflection.Emit;
-using System.Linq;
-using System.Collections.Generic;
-
-namespace Crow.IML2
-{
- public class Reader : XmlTextReader
- {
- static List<Type> CrowTypes = new List<Type> ();
-
- public enum SubNodeType{
- None,
- Child,
- Children,
- Template,
- Content,
- Items,
- ItemTemplate
- }
-
- //public static Node Parse(string str){
- // string[] tmp = str.Trim ().Split ('.');
- // switch (tmp.Length) {
- // case 1:
- // return new Node ((SubNodeType)int.Parse (tmp [0]));
- // case 2:
- // return new Node ((SubNodeType)int.Parse (tmp [0]), int.Parse (tmp[1]));
- // case 0:
- // default:
- // return new Node ();
- // }
- //}
- //public static string AddressToString(Node[] address){
- // string tmp = "";
- // foreach (Node n in address) {
- // tmp += n.ToString () + ";";
- // }
- // return string.IsNullOrEmpty(tmp) ? tmp : tmp.Substring (0, tmp.Length - 1);
- //}
- //public static Node[] AddressFromString(string address) {
- // List<Node> nodes = new List<Node> ();
- // string[] tmp = address.Split (';');
- // for (int i = 0; i < tmp.Length; i++)
- // nodes.Add (Node.Parse (tmp [i]));
- // return nodes.ToArray();
- //}
-
-
- // public class PropertyBinding {
- // public string OriginePropertyName = "";
- // public MemberAddress Destination;
- // }
-
- public Type RootType = null;
- public Context context;
-
- InstanciatorInvoker loader = null;
- DynamicMethod dm = null;
-
- ILGenerator il { get { return context.il; }}
-
- /// <summary>
- /// Finalize instatiator MSIL and return LoaderInvoker delegate
- /// </summary>
- public InstanciatorInvoker GetLoader(){
- if (loader != null)
- return loader;
-
- il.Emit(OpCodes.Ret);
- loader = (InstanciatorInvoker)dm.CreateDelegate (typeof(InstanciatorInvoker));
- return loader;
- }
-
- protected int curDepth {
- get { return context.nodesStack.Count - 1;}
- }
- protected Node curNode {
- get { return context.nodesStack.Peek(); }
- }
- //protected Stack<int> curTemplateDepth = new Stack<int>(new int[] {0}); //current template root depth
-
- #region CTOR
- public Reader (string path)
- : this(Interface.GetStreamFromPath (path)){
- }
- public Reader (Stream stream)
- : base(stream)
- {
- createInstantiator ();
- }
- /// <summary>
- /// Used to parse xmlFrament with same code generator linked
- /// If ilGen=null, a new Code Generator will be created.
- /// </summary>
- public Reader (Context ctx, string xmlFragment)
- : base(xmlFragment, XmlNodeType.Element,null){
-
- context = ctx;
-//
-// if (IMLCtx != null)
-// return;
-//
-// createInstantiator();
- }
- #endregion
-
-
- void createBindingDelegates(){
-// foreach (Dictionary<string, MemberAddress> pb in IMLCtx.PropertyBindings) {
-//
-// }
- }
-
-
- void registerPropertyBinding(string origNode, string origProp, MemberAddress ma){
- if (!context.PropertyBindings.ContainsKey(origNode))
- context.PropertyBindings [origNode] = new Dictionary<string, MemberAddress> ();
- context.PropertyBindings [origNode] [origProp] = ma;
- }
- void readPropertyBinding(string srcProperty, string expression){
- //if binding exp = '{}' => binding is done on datasource
- if (string.IsNullOrEmpty (expression)) {
- registerPropertyBinding ("DS", "", new MemberAddress (context.nodesStack.ToArray (), srcProperty));
- return;
- }
-
-// if (expression.StartsWith ("²")) {
-// expression = expression.Substring (1);
-// TwoWayBinding = true;
-// }
-//
- string [] bindingExp = expression.Split ('/');
-
-
- if (bindingExp.Length == 1) {
- registerPropertyBinding ("DS", bindingExp [0],
- new MemberAddress (context.nodesStack.ToArray (), srcProperty));
- return;
- }
-
- string targetName = "";
- string nodeId = "";
- Node[] target = context.nodesStack.ToArray ();
-
- int nodeIdx = target.Length - 1;//index of target in nodeStack
- int ptr = 0;//pointer in bindingExp splitted on '/'
-
-// //if exp start with '/' => WidgetName.property
- if (string.IsNullOrEmpty (bindingExp [0])) {
- string[] bindTrg = bindingExp [1].Split ('.');
- if (bindTrg.Length == 1) {
- nodeId = Node.AddressToString (target);
- targetName = bindTrg [0];
- }else if (bindTrg.Length == 2) {
- nodeId = context.Names [bindTrg [0]];
- targetName = bindTrg [1];
- } else
- throw new Exception ("Syntax error in binding, expected 'go dot member'");
- } else {
- if (bindingExp [0] == ".") { //template binding
- //parse nodes up until template node
- while (nodeIdx > 0) {
- if (target [nodeIdx].Type == SubNodeType.Template)
- break;
- nodeIdx--;
- }
- ptr++;
- } else {
- while (ptr < bindingExp.Length - 1) {
- if (bindingExp [ptr] == "..")
- nodeIdx--;
- else
- break;
- ptr++;
- }
- }
- Node[] origine = new Node[nodeIdx + 1];
- try {
- Array.Copy (target, origine, nodeIdx + 1);
-
- int destLength = target.Length - nodeIdx;
- Node[] dest = new Node[destLength];
- Array.Copy (target, nodeIdx, dest, 0, destLength);
-
- } catch (Exception ex) {
- System.Diagnostics.Debug.WriteLine (ex.ToString ());
- }
-
-
- nodeId = Node.AddressToString (origine);
- targetName = bindingExp [ptr];
- }
-
- registerPropertyBinding (nodeId, targetName, new MemberAddress (context.nodesStack.ToArray (), srcProperty));
- }
-
- }
-}
-