public DekiScriptList(DekiScriptList value) { if (value == null) { throw new ArgumentNullException("value"); } this.Value.AddRange(value.Value); }
public static DekiScriptLiteral List(params DekiScriptLiteral[] items) { var result = new DekiScriptList(); foreach (var item in items) { result.Add(item); } return(result); }
public override DekiScriptLiteral Convert(DekiScriptType type) { switch (type) { case DekiScriptType.ANY: case DekiScriptType.MAP: return(this); case DekiScriptType.LIST: { DekiScriptList result = new DekiScriptList(); foreach (DekiScriptLiteral value in Value.Values) { result.Add(value); } return(result); } } throw new DekiScriptInvalidCastException(Location, ScriptType, type); }
private void WriteList(DekiScriptList expr, char open, char close, bool spacer, StringBuilder state) { state.Append(open); bool first = true; foreach (DekiScriptLiteral entry in expr.Value) { if (!first) { state.Append(", "); } else if (spacer) { state.Append(" "); } first = false; entry.VisitWith(this, state); } if (spacer && !first) { state.Append(" "); } state.Append(close); }
public static DekiScriptLiteral Constant(XUri value, DekiScriptList args) { return(new DekiScriptUri(value.WithoutFragment(), args)); }
public DekiScriptList AddRange(DekiScriptList list) { Value.AddRange(list.Value); return(this); }
public Empty Visit(DekiScriptList expr, StringBuilder state) { WriteList(expr, '[', ']', true, state); return(Empty.Value); }
public static DekiScriptLiteral FromXml(XDoc doc) { // check if response is an HTML document if (doc.HasName("html")) { // TODO (steveb): this handling seems to be to specific to belong here. return(new DekiScriptList().Add(new DekiScriptXml(doc))); } // check if response is a DekiScript XML document if (!doc.HasName("value") || (doc["@type"].AsText == null)) { throw new ArgumentException("doc"); } switch (doc["@type"].AsText) { case "nil": return(DekiScriptNil.Value); case "bool": return(Constant(doc.AsBool ?? false)); case "num": return(Constant(doc.AsDouble ?? 0.0)); case "str": return(Constant(doc.AsText ?? string.Empty)); case "uri": { return(Constant(doc.AsUri)); } case "map": { DekiScriptMap result = new DekiScriptMap(); foreach (XDoc value in doc["value"]) { result.Add(value["@key"].AsText, FromXml(value)); } return(result); } case "list": { DekiScriptList result = new DekiScriptList(); foreach (XDoc value in doc["value"]) { result.Add(FromXml(value)); } return(result); } case "xml": if ((doc.AsXmlNode.ChildNodes.Count == 1) && (doc.AsXmlNode.ChildNodes[0].NodeType == XmlNodeType.Element)) { return(new DekiScriptXml(doc[doc.AsXmlNode.ChildNodes[0]])); } return(DekiScriptNil.Value); default: throw new ArgumentException("doc"); } }