예제 #1
0
파일: Iterator.cs 프로젝트: raj581/Marvin
 public AncestorOrSelfIterator(BaseIterator iter) : base(iter)
 {
     startPosition = iter.Current.Clone();
 }
		public override object Evaluate (BaseIterator iter)
		{
			
			string name = arg0.EvaluateString (iter);
			int colon = name.IndexOf (':');
			// extension function
			if (colon > 0)
				return (iter.NamespaceManager as XsltCompiledContext).ResolveFunction (
					XslNameUtil.FromString (name, ctx),
					null) != null;
			
			return (
				//
				// XPath
				//
                                name == "boolean" ||
                                name == "ceiling" ||
                                name == "concat" ||
                                name == "contains" ||
                                name == "count" ||
                                name == "false" ||
                                name == "floor" ||
                                name == "id"||
                                name == "lang" ||
                                name == "last" ||
                                name == "local-name" ||
                                name == "name" ||
                                name == "namespace-uri" ||
                                name == "normalize-space" ||
                                name == "not" ||
                                name == "number" ||
                                name == "position" ||
                                name == "round" ||
                                name == "starts-with" ||
                                name == "string" ||
                                name == "string-length" ||
                                name == "substring" ||
                                name == "substring-after" ||
                                name == "substring-before" ||
                                name == "sum" ||
                                name == "translate" ||
                                name == "true" ||
				// XSLT
				name == "document" ||
				name == "format-number" ||
				name == "function-available" ||
				name == "generate-id" ||
				name == "key" ||
				name == "current" ||
				name == "unparsed-entity-uri" ||
				name == "element-available" ||
				name == "system-property"
			);
		}
		public override object Evaluate (BaseIterator iter)
		{
			IHasXmlNode xn = iter.Current as IHasXmlNode;
			if (xn == null)
				return String.Empty;
			XmlNode n = xn.GetNode ();
			if (n.OwnerDocument == null)
				return String.Empty;
			XmlDocumentType doctype = n.OwnerDocument.DocumentType;
			if (doctype == null)
				return String.Empty;
			XmlEntity ent = doctype.Entities.GetNamedItem (arg0.EvaluateString (iter)) as XmlEntity;
			if (ent == null)
				return String.Empty;
			return ent.SystemId != null ? ent.SystemId : String.Empty;
		}
예제 #4
0
		public override object Evaluate (BaseIterator iter)
		{
			string s0 = arg0.EvaluateString (iter);
			string s1 = arg1.EvaluateString (iter);
			string s2 = arg2.EvaluateString (iter);
			
			StringBuilder ret = new StringBuilder (s0.Length);
				
			int pos = 0, len = s0.Length, s2len = s2.Length;
			
			while (pos < len) {
				int idx = s1.IndexOf (s0 [pos]);
				
				if (idx != -1) {
					if (idx < s2len)
						ret.Append (s2 [idx]);
				}
				else
					ret.Append (s0 [pos]);
				
				pos++;
			}
			
			return ret.ToString ();
		}
		public override object Evaluate (BaseIterator iter)
		{
			XsltCompiledContext ctx = (XsltCompiledContext) iter.NamespaceManager;
			return new SelfIterator ((ctx).Processor.CurrentNode, ctx);
		}
예제 #6
0
		public override object Evaluate (BaseIterator iter)
		{
			StringBuilder sb = new StringBuilder ();
			
			int len = rgs.Count;
			for (int i = 0; i < len; i++)
				sb.Append (((Expression)rgs[i]).EvaluateString (iter));
			
			return sb.ToString ();
		}
예제 #7
0
		public override object Evaluate (BaseIterator iter)
		{
			string str = arg0.EvaluateString (iter);
			double ich = Math.Round (arg1.EvaluateNumber (iter)) - 1;
			if (Double.IsNaN (ich) ||
				Double.IsNegativeInfinity (ich) ||
				ich >= (double) str.Length)
				return "";

			if (arg2 == null)
			{
				if (ich < 0)
					ich = 0.0;
				return str.Substring ((int) ich);
			}
			else
			{
				double cch = Math.Round (arg2.EvaluateNumber (iter));
				if (Double.IsNaN (cch))
					return "";
				if (ich < 0.0 || cch < 0.0) 
				{
					cch = ich + cch;
					if (cch <= 0.0)
						return "";
					ich = 0.0;
				}
				double cchMax = (double) str.Length - ich;
				if (cch > cchMax)
					cch = cchMax;
				return str.Substring ((int) ich, (int) cch);
			}
		}
 public double EvaluateNumber(BaseIterator iter)
 {
     return(this._expr.EvaluateNumber(iter));
 }
 public string EvaluateString(BaseIterator iter)
 {
     return(this._expr.EvaluateString(iter));
 }
예제 #10
0
파일: Iterator.cs 프로젝트: raj581/Marvin
 public NamespaceIterator(BaseIterator iter) : base(iter)
 {
 }
예제 #11
0
파일: Iterator.cs 프로젝트: raj581/Marvin
 public AttributeIterator(BaseIterator iter) : base(iter)
 {
 }
예제 #12
0
파일: Iterator.cs 프로젝트: raj581/Marvin
 public PrecedingIterator(BaseIterator iter) : base(iter)
 {
     startPosition = iter.Current.Clone();
 }
예제 #13
0
파일: Iterator.cs 프로젝트: raj581/Marvin
 public FollowingIterator(BaseIterator iter) : base(iter)
 {
 }
예제 #14
0
파일: Iterator.cs 프로젝트: raj581/Marvin
 public DescendantOrSelfIterator(BaseIterator iter) : base(iter)
 {
 }
예제 #15
0
		public override bool EvaluateBoolean (BaseIterator iter)
		{
			if (arg0.GetReturnType (iter) == XPathResultType.NodeSet)
				return arg0.EvaluateBoolean (iter);
			
			return arg0.EvaluateNodeSet (iter).MoveNext ();
		}
 public bool EvaluateBoolean(BaseIterator iter)
 {
     return(this._expr.EvaluateBoolean(iter));
 }
예제 #17
0
		public override object Evaluate (BaseIterator iter)
		{
			if (arg0 == null)
				return iter.Current.Name;
			
			BaseIterator argNs = arg0.EvaluateNodeSet (iter);
			if (argNs == null || !argNs.MoveNext ())
				return "";
			return argNs.Current.Name;
		}
예제 #18
0
 public override object Evaluate(BaseIterator iter)
 {
     return(false);
 }
예제 #19
0
		public override object Evaluate (BaseIterator iter)
		{
			return arg0.EvaluateString (iter).IndexOf (arg1.EvaluateString (iter)) != -1;
		}
예제 #20
0
 public override object Evaluate(BaseIterator iter)
 {
     return(Math.Ceiling(arg0.EvaluateNumber(iter)));
 }
예제 #21
0
		public override object Evaluate (BaseIterator iter)
		{
			string str;
			if (arg0 != null)
				str = arg0.EvaluateString (iter);
			else
				str = iter.Current.Value;
			System.Text.StringBuilder sb = new System.Text.StringBuilder ();
			bool fSpace = false;
			for (int i = 0; i < str.Length; i++) {
				char ch = str [i];
				if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n')
				{
					fSpace = true;
				}
				else
				{
					if (fSpace)
					{
						fSpace = false;
						if (sb.Length > 0)
							sb.Append (' ');
					}
					sb.Append (ch);
				}
			}
			return sb.ToString ();
		}
예제 #22
0
 public override object Evaluate(BaseIterator iter)
 {
     return(Round(arg0.EvaluateNumber(iter)));
 }
예제 #23
0
		public override object Evaluate (BaseIterator iter)
		{
			return !arg0.EvaluateBoolean (iter);
		}
예제 #24
0
 public override object Evaluate(BaseIterator iter)
 {
     return((double)iter.ComparablePosition);
 }
예제 #25
0
		public override object Evaluate (BaseIterator iter)
		{
			QName name = XslNameUtil.FromString (arg0.EvaluateString (iter), ctx);

			return (
				(name.Namespace == Compiler.XsltNamespace) &&
				(
					//
					// A list of all the instructions (does not include top-level-elements)
					//
					name.Name == "apply-imports" ||
					name.Name == "apply-templates" ||
					name.Name == "call-template" ||
					name.Name == "choose" ||
					name.Name == "comment" ||
					name.Name == "copy" ||
					name.Name == "copy-of" ||
					name.Name == "element" ||
					name.Name == "fallback" ||
					name.Name == "for-each" ||
					name.Name == "message" ||
					name.Name == "number" ||
					name.Name == "processing-instruction" ||
					name.Name == "text" ||
					name.Name == "value-of" ||
					name.Name == "variable"
				)
			);
		}
예제 #26
0
 public override object Evaluate(BaseIterator iter)
 {
     return((double)arg0.EvaluateNodeSet(iter).Count);
 }
예제 #27
0
		public override object Evaluate (BaseIterator iter)
		{
			XsltCompiledContext ctx = iter.NamespaceManager
				as XsltCompiledContext;
			return ctx.EvaluateKey (staticContext, iter, arg0, arg1);
		}
예제 #28
0
 public override object Evaluate(BaseIterator iter)
 {
     return(arg0.EvaluateString(iter).StartsWith(arg1.EvaluateString(iter)));
 }
예제 #29
0
파일: XslVariable.cs 프로젝트: nobled/mono
		public override XPathResultType GetReturnType (BaseIterator iter)
		{
			return XPathResultType.Any;
		}
예제 #30
0
 public override object Evaluate(BaseIterator iter)
 {
     return(arg0.EvaluateString(iter).IndexOf(arg1.EvaluateString(iter)) != -1);
 }
예제 #31
0
		public override object Evaluate (BaseIterator iter)
		{
			return (double) arg0.EvaluateNodeSet (iter).Count;
		}
예제 #32
0
 public static bool ToBoolean(BaseIterator iter)
 {
     return(iter != null && iter.MoveNext());
 }
예제 #33
0
		public override object Evaluate (BaseIterator iter)
		{
			String strArgs;
			object val = arg0.Evaluate (iter);
			
			XPathNodeIterator valItr = val as XPathNodeIterator;
			if (valItr != null)
			{
				strArgs = "";
				while (valItr.MoveNext ())
					strArgs += valItr.Current.Value + " ";
			}
			else
				strArgs = XPathFunctions.ToString (val);
			
			XPathNavigator n = iter.Current.Clone ();
			ArrayList rgNodes = new ArrayList ();
			string [] ids = strArgs.Split (rgchWhitespace);
			for (int i = 0; i < ids.Length; i++)
				if (n.MoveToId (ids [i]))
					rgNodes.Add (n.Clone ());

			rgNodes.Sort (XPathNavigatorComparer.Instance);
			return new ListIterator (iter, rgNodes);
		}
예제 #34
0
 public override bool EvaluateBoolean(BaseIterator iter)
 {
     return(this._left.EvaluateBoolean(iter) || this._right.EvaluateBoolean(iter));
 }
예제 #35
0
		public override object Evaluate (BaseIterator iter)
		{
			if (arg0 == null)
				return iter.Current.Value;
			return arg0.EvaluateString (iter);
		}
 public override object Evaluate(BaseIterator iter)
 {
     return((double)iter.Count);
 }
예제 #37
0
		public override object Evaluate (BaseIterator iter)
		{
			return arg0.EvaluateString (iter).StartsWith (arg1.EvaluateString (iter));
		}
예제 #38
0
 public ParentIterator(BaseIterator iter) : base(iter)
 {
     this.canMove = this._nav.MoveToParent();
 }
예제 #39
0
		public override object Evaluate (BaseIterator iter)
		{
			string str1 = arg0.EvaluateString (iter);
			string str2 = arg1.EvaluateString (iter);
			int ich = str1.IndexOf (str2);
			if (ich < 0)
				return "";
			return str1.Substring (ich + str2.Length);
		}
예제 #40
0
 public virtual XPathResultType GetReturnType(BaseIterator iter)
 {
     return(this.ReturnType);
 }
예제 #41
0
		public override object Evaluate (BaseIterator iter)
		{
			string str;
			if (arg0 != null)
				str = arg0.EvaluateString (iter);
			else
				str = iter.Current.Value;
			return (double) str.Length;
		}
예제 #42
0
 public abstract object Evaluate(BaseIterator iter);
예제 #43
0
		public static bool ToBoolean (BaseIterator iter)
		{
			return iter != null && iter.MoveNext ();
		}
예제 #44
0
 public override double EvaluateNumber(BaseIterator iter)
 {
     return(this._left.EvaluateNumber(iter) + this._right.EvaluateNumber(iter));
 }
예제 #45
0
		public override object Evaluate (BaseIterator iter)
		{
			if (arg0 == null)
				return XPathFunctions.ToBoolean (iter.Current.Value);
			return arg0.EvaluateBoolean (iter);
		}
 public override object Evaluate(BaseIterator iter)
 {
     return(this.EvaluateBoolean(iter));
 }
예제 #47
0
		public override object Evaluate (BaseIterator iter)
		{
			return false;
		}
예제 #48
0
 public override object Evaluate(BaseIterator iter)
 {
     return(this._value);
 }
예제 #49
0
		public override object Evaluate (BaseIterator iter)
		{
			string baseUri = null;
			if (arg1 != null) {
				XPathNodeIterator it = arg1.EvaluateNodeSet (iter);
				if (it.MoveNext())
					baseUri = it.Current.BaseURI;
				else
					baseUri = VoidBaseUriFlag;
			}

			object o = arg0.Evaluate (iter);
			if (o is XPathNodeIterator)
				return GetDocument ((iter.NamespaceManager as XsltCompiledContext), (XPathNodeIterator)o, baseUri);
			else
				return GetDocument ((iter.NamespaceManager as XsltCompiledContext), o is IFormattable ? ((IFormattable) o).ToString (null, CultureInfo.InvariantCulture) : (o != null ? o.ToString () : null), baseUri);
		}
예제 #50
0
 public override string EvaluateString(BaseIterator iter)
 {
     return(this._value);
 }
예제 #51
0
		public override object Evaluate (BaseIterator iter)
		{
			double d = arg0.EvaluateNumber (iter);
			string s = arg1.EvaluateString (iter);
			QName nm = QName.Empty;
			
			if (arg2 != null)
				nm = XslNameUtil.FromString (arg2.EvaluateString (iter), ctx);
			
			try {
				return ((XsltCompiledContext) iter.NamespaceManager).Processor.CompiledStyle
				.LookupDecimalFormat (nm).FormatNumber (d, s);
			} catch (ArgumentException ex) {
				throw new XsltException (ex.Message, ex, iter.Current);
			}
		}
예제 #52
0
 public SimpleSlashIterator(BaseIterator left, NodeSet expr)
     : base(left.NamespaceManager)
 {
     this._left = left;
     this._expr = expr;
 }
예제 #53
0
		public override object Evaluate (BaseIterator iter)
		{
			XPathNavigator n;
			if (arg0 != null) {
				XPathNodeIterator itr = arg0.EvaluateNodeSet (iter);
				if (itr.MoveNext ())
					n = itr.Current.Clone ();
				else
					return string.Empty; // empty nodeset == empty string
			} else
				n = iter.Current.Clone ();
			
			StringBuilder sb = new StringBuilder ("Mono"); // Ensure begins with alpha
			sb.Append (XmlConvert.EncodeLocalName (n.BaseURI));
			sb.Replace ('_', 'm'); // remove underscores from EncodeLocalName
			sb.Append (n.NodeType);
			sb.Append ('m');

			do {
				sb.Append (IndexInParent (n));
				sb.Append ('m');
			} while (n.MoveToParent ());
			
			return sb.ToString ();
		}
예제 #54
0
 public SlashIterator(BaseIterator iter, NodeSet expr) : base(iter.NamespaceManager)
 {
     _iterLeft = iter;
     _expr     = expr;
 }
예제 #55
0
		public override object Evaluate (BaseIterator iter)
		{
			QName name = XslNameUtil.FromString (arg0.EvaluateString (iter), ctx);
			
			if (name.Namespace == Compiler.XsltNamespace) {
				switch (name.Name) {
					case "version": return "1.0";
					case "vendor": return "Mono";
					case "vendor-url": return "http://www.go-mono.com/";
				}
			}
			
			return "";
		}
예제 #56
0
        public override bool MoveNextCore()
        {
            if (_finished)
            {
                return(false);
            }

            if (_iterRight == null)               // First time
            {
                if (!_iterLeft.MoveNext())
                {
                    return(false);
                }
                _iterRight = _expr.EvaluateNodeSet(_iterLeft);
                _iterList  = new SortedList(XPathIteratorComparer.Instance);
            }

            while (true)
            {
                while (!_iterRight.MoveNext())
                {
                    if (_iterList.Count > 0)
                    {
                        int last = _iterList.Count - 1;
                        _iterRight = (BaseIterator)_iterList.GetByIndex(last);
                        _iterList.RemoveAt(last);
                        break;
                    }
                    else if (_nextIterRight != null)
                    {
                        _iterRight     = _nextIterRight;
                        _nextIterRight = null;
                        break;
                    }
                    else if (!_iterLeft.MoveNext())
                    {
                        _finished = true;
                        return(false);
                    }
                    else
                    {
                        _iterRight = _expr.EvaluateNodeSet(_iterLeft);
                    }
                }
                bool loop = true;
                while (loop)
                {
                    loop = false;
                    if (_nextIterRight == null)
                    {
                        bool noMoreNext = false;
                        while (_nextIterRight == null || !_nextIterRight.MoveNext())
                        {
                            if (_iterLeft.MoveNext())
                            {
                                _nextIterRight = _expr.EvaluateNodeSet(_iterLeft);
                            }
                            else
                            {
                                noMoreNext = true;
                                break;
                            }
                        }
                        if (noMoreNext)
                        {
                            _nextIterRight = null;                             // FIXME: More efficient code. Maybe making noMoreNext class scope would be better.
                        }
                    }
                    if (_nextIterRight != null)
                    {
                        switch (_iterRight.Current.ComparePosition(_nextIterRight.Current))
                        {
                        case XmlNodeOrder.After:
                            _iterList [_iterRight] = _iterRight;
                            _iterRight             = _nextIterRight;
                            _nextIterRight         = null;
                            loop = true;
                            break;

                        case XmlNodeOrder.Same:
                            if (!_nextIterRight.MoveNext())
                            {
                                _nextIterRight = null;
                            }

                            else
                            {
                                int last = _iterList.Count;
                                _iterList [_nextIterRight] = _nextIterRight;
                                if (last != _iterList.Count)
                                {
                                    _nextIterRight = (BaseIterator)_iterList.GetByIndex(last);
                                    _iterList.RemoveAt(last);
                                }
                            }

                            loop = true;
                            break;
                        }
                    }
                }
                return(true);
            }
        }
예제 #57
0
		public override object Evaluate (BaseIterator iter)
		{
			XsltCompiledContext ctx = iter.NamespaceManager as XsltCompiledContext;
			XPathNavigator loc = iter.Current != null ? iter.Current.Clone () : null;
			XPathNavigator nav = arg0.EvaluateAs (iter, XPathResultType.Navigator) as XPathNavigator;
			if (nav == null) {
				if (loc != null)
					return new XsltException ("Cannot convert the XPath argument to a result tree fragment.", null, loc);
				else
					return new XsltException ("Cannot convert the XPath argument to a result tree fragment.", null);
			}
			ArrayList al = new ArrayList ();
			al.Add (nav);
			return new ListIterator (al, ctx);
		}
예제 #58
0
		public override object Evaluate (BaseIterator iter)
		{
			return (double) iter.ComparablePosition;
		}
예제 #59
0
파일: XslVariable.cs 프로젝트: nobled/mono
		public override object Evaluate (BaseIterator iter)
		{
			return v.Evaluate (iter.NamespaceManager as XsltContext);
		}
예제 #60
0
파일: Iterator.cs 프로젝트: raj581/Marvin
 internal BaseIterator(BaseIterator other)
 {
     _nsm     = other._nsm;
     position = other.position;
 }