示例#1
0
 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);
        }
示例#3
0
        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));
 }
示例#6
0
 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);
 }
示例#8
0
        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");
            }
        }