private static void BuildQuery(NameValueCollection nv, PipeValue obj, string prefix) { if (prefix != null && obj.IsArray) { PipeValuePropertyEnumerator enumerator = obj.GetEnumerator(); while (enumerator.MoveNext()) { if (Regex.IsMatch(prefix, @"\[\]$")) { nv.Add(prefix, enumerator.CurrentValue.ToString()); } else { BuildQuery(nv, enumerator.CurrentValue, prefix + "[" + (enumerator.CurrentValue.Type == PipeValueType.Object && (bool)enumerator.CurrentValue ? enumerator.CurrentKey : "") + "]"); } } } else if (obj.Type == PipeValueType.Object) { PipeValuePropertyEnumerator enumerator = obj.GetEnumerator(); while (enumerator.MoveNext()) { BuildQuery(nv, enumerator.CurrentValue, prefix != null ? prefix + "[" + enumerator.CurrentKey + "]" : enumerator.CurrentKey); } } else { nv.Add(prefix, obj.ToString()); } }
public static PipeValue FormatPrintf(PipeValue value, PipeValue format) { StringBuilder sb = new StringBuilder(); switch (value.Type) { case PipeValueType.String: sb.EnsureCapacity(((string)value).Length); _snwprintf_s(sb, (IntPtr)sb.MaxCapacity, (IntPtr)32, format.ToString(), (string)value); break; case PipeValueType.Number: sb.EnsureCapacity(100); _snwprintf_s(sb, (IntPtr)100, (IntPtr)32, format.ToString(), (double)value); break; default: sb.EnsureCapacity(100); _snwprintf_s(sb, (IntPtr)100, (IntPtr)32, format.ToString(), value.ToString()); break; } return(sb.ToString()); }
public static PipeValue FormatDate(PipeValue timestamp, PipeValue format) { DateTime d; if (timestamp.Type == PipeValueType.String) { DateTime.TryParse(timestamp.ToString(), out d); } else { d = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(timestamp.ToDouble()); } return(d.ToLocalTime().ToString((string)format)); }
private object Evaluate() { StringBuilder sb = new StringBuilder(); try { int i = 0; int e = tokens.Count; while (i < e) { Token t = tokens[i++]; switch (t.Type) { case TokenType.OP_EVAL: EvaluateToken et = (EvaluateToken)t; int prevCount = evalCount; PipeValue result = et.Expression.Evaluate(this); if (result.IsEvallable) { string str = result.Type == PipeValueType.Object ? JsonConvert.SerializeObject(result) : result.ToString(); if (evalCount != prevCount || et.SuppressHtmlEncode) { sb.Append(str); } else { sb.Append(HttpUtility.HtmlEncode(str)); } } break; case TokenType.OP_ITER: IterationToken it = (IterationToken)t; IEnumerator iterable = it.Expression.Evaluate(this).GetEnumerator(); PushObjectStack(iterable); if (!iterable.MoveNext()) { i = it.Index; } break; case TokenType.OP_ITER_END: IterationEndToken iet = (IterationEndToken)t; if (!((IEnumerator)objStack.Peek().Value).MoveNext()) { PopObjectStack(); } else { i = iet.Index; } break; case TokenType.OP_TEST: ConditionToken ct = (ConditionToken)t; if (!(bool)ct.Expression.Evaluate(this) ^ ct.Negate) { i = ct.Index; } break; case TokenType.OP_JUMP: i = ((BranchToken)t).Index; break; default: OutputToken ot = (OutputToken)t; if (this.Options.OutputXml) { XmlElement currentElm = xmlStack.Peek(); HtmlOutputToken ht = (HtmlOutputToken)ot; switch (t.Type) { case TokenType.HTMLOP_ELEMENT_START: FlushOutput(sb, currentElm); xmlStack.Push(currentElm.OwnerDocument.CreateElement(ht.TagName)); currentElm.AppendChild(xmlStack.Peek()); break; case TokenType.HTMLOP_ELEMENT_END: FlushOutput(sb, currentElm); xmlStack.Pop(); break; case TokenType.HTMLOP_ATTR_END: XmlAttribute attr = currentElm.OwnerDocument.CreateAttribute(ht.AttributeName); attr.Value = sb.ToString(); currentElm.Attributes.Append(attr); sb.Clear(); break; case TokenType.HTMLOP_TEXT: sb.Append(ht.Text); break; } } else { sb.Append(ot.Value); i = ot.Index; } break; } } } finally { evalCount = (evalCount + 1) & 0xFFFF; } if (this.Options.OutputXml) { FlushOutput(sb, xmlStack.Peek()); return(xmlStack.Peek()); } return(Regex.Replace(sb.ToString(), @"^\s+(?=<)|(>)\s+(<|$)", m => m.Groups[1].Value + m.Groups[2].Value)); }