コード例 #1
0
        public bool handleBlock(cape.DynamicMap vars, System.Collections.Generic.List <string> tag, System.Collections.Generic.List <object> data, cape.StringBuilder result, System.Collections.Generic.List <cape.File> includeDirs)
        {
            if (tag == null)
            {
                return(false);
            }
            var tagname = cape.Vector.get(tag, 0);

            if (cape.String.isEmpty(tagname))
            {
                return(false);
            }
            if (object.Equals(tagname, "for"))
            {
                var varname = cape.Vector.get(tag, 1);
                var inword  = cape.Vector.get(tag, 2);
                var origvar = substituteVariables(cape.Vector.get(tag, 3), vars);
                if (cape.String.isEmpty(varname) || cape.String.isEmpty(origvar) || !(object.Equals(inword, "in")))
                {
                    cape.Log.error(logContext, "Invalid for tag: `" + cape.String.combine(tag, ' ') + "'");
                    return(false);
                }
                var index = 0;
                vars.set("__for_first", (object)"true");
                var vv = getVariableValueVector(vars, origvar);
                if (vv != null)
                {
                    var n = 0;
                    var m = vv.Count;
                    for (n = 0; n < m; n++)
                    {
                        var o = vv[n];
                        if (o != null)
                        {
                            if (index % 2 == 0)
                            {
                                vars.set("__for_parity", (object)"even");
                            }
                            else
                            {
                                vars.set("__for_parity", (object)"odd");
                            }
                            vars.set(varname, o);
                            if (doExecute(data, vars, result, includeDirs) == false)
                            {
                                return(false);
                            }
                            if (index == 0)
                            {
                                vars.set("__for_first", (object)"false");
                            }
                            index++;
                        }
                    }
                }
                vars.remove("__for_first");
                vars.remove("__for_parity");
                return(true);
            }
            if (object.Equals(tagname, "if"))
            {
                var lvalue = cape.Vector.get(tag, 1);
                if (object.Equals(lvalue, null))
                {
                    return(true);
                }
                var @operator = cape.Vector.get(tag, 2);
                if (object.Equals(@operator, null))
                {
                    var varval = getVariableValue(vars, lvalue);
                    if (varval == null)
                    {
                        return(true);
                    }
                    if (varval is cape.VectorObject <object> )
                    {
                        if (cape.Vector.isEmpty(((cape.VectorObject <object>)varval).toVector()))
                        {
                            return(true);
                        }
                    }
                    if (varval is cape.DynamicMap)
                    {
                        var value = (cape.DynamicMap)varval;
                        if (value.getCount() < 1)
                        {
                            return(true);
                        }
                    }
                    if (varval is string)
                    {
                        if (cape.String.isEmpty((string)varval))
                        {
                            return(true);
                        }
                    }
                    if (varval is cape.StringObject)
                    {
                        if (cape.String.isEmpty(((cape.StringObject)varval).toString()))
                        {
                            return(true);
                        }
                    }
                    if (doExecute(data, vars, result, includeDirs) == false)
                    {
                        return(false);
                    }
                    return(true);
                }
                lvalue = substituteVariables(lvalue, vars);
                var rvalue = cape.Vector.get(tag, 3);
                if (!(object.Equals(rvalue, null)))
                {
                    rvalue = substituteVariables(rvalue, vars);
                }
                if (object.Equals(lvalue, null) || cape.String.isEmpty(@operator) || object.Equals(rvalue, null))
                {
                    cape.Log.error(logContext, "Invalid if tag: `" + cape.String.combine(tag, ' ') + "'");
                    return(false);
                }
                if (object.Equals(@operator, "==") || object.Equals(@operator, "=") || object.Equals(@operator, "is"))
                {
                    if (!(object.Equals(rvalue, lvalue)))
                    {
                        return(true);
                    }
                    if (doExecute(data, vars, result, includeDirs) == false)
                    {
                        return(false);
                    }
                    return(true);
                }
                if (object.Equals(@operator, "!=") || object.Equals(@operator, "not"))
                {
                    if (object.Equals(rvalue, lvalue))
                    {
                        return(true);
                    }
                    if (doExecute(data, vars, result, includeDirs) == false)
                    {
                        return(false);
                    }
                    return(true);
                }
                cape.Log.error(logContext, "Unknown operator `" + @operator + "' in if tag: `" + cape.String.combine(tag, ' ') + "'");
                return(false);
            }
            return(false);
        }
コード例 #2
0
ファイル: cape.JSONParser.cs プロジェクト: eqela/jkop4uwp
        private object acceptObject()
        {
            if (acceptChar('['))
            {
                var v = new cape.DynamicVector();
                while (true)
                {
                    if (acceptChar(']'))
                    {
                        break;
                    }
                    var o = acceptObject();
                    if (o == null)
                    {
                        return(null);
                    }
                    v.append(o);
                    acceptChar(',');
                }
                return((object)v);
            }
            if (acceptChar('{'))
            {
                var v1 = new cape.DynamicMap();
                while (true)
                {
                    if (acceptChar('}'))
                    {
                        break;
                    }
                    var key = acceptString();
                    if (object.Equals(key, null))
                    {
                        return(null);
                    }
                    if (acceptChar(':') == false)
                    {
                        return(null);
                    }
                    var val = acceptObject();
                    if (val == null)
                    {
                        return(null);
                    }
                    if (val is cape.JSONParser.NullObject)
                    {
                        v1.set(key, null);
                    }
                    else
                    {
                        v1.set(key, val);
                    }
                    acceptChar(',');
                }
                return((object)v1);
            }
            var s = acceptString();

            if (s != null)
            {
                return((object)s);
            }
            var b = acceptBoolean();

            if (b != null)
            {
                return((object)b);
            }
            var n = acceptNull();

            if (n != null)
            {
                return((object)n);
            }
            var v2 = acceptNumber();

            if (v2 != null)
            {
                return(v2);
            }
            return(null);
        }
コード例 #3
0
        private capex.text.XMLParser.Value onTagString(string tagstring, int pos)
        {
            if (cape.String.charAt(tagstring, 0) == '/')
            {
                var v = new capex.text.XMLParser.EndElement();
                v.setPosition(pos);
                v.setName(cape.String.subString(tagstring, 1));
                return((capex.text.XMLParser.Value)v);
            }
            var element = new cape.StringBuilder();
            var @params = new cape.DynamicMap();
            var it      = new cape.CharacterIteratorForString(tagstring);
            var c       = ' ';

            while ((c = it.getNextChar()) > 0)
            {
                if (c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '/')
                {
                    if (element.count() > 0)
                    {
                        break;
                    }
                }
                else
                {
                    element.append(c);
                }
            }
            while (c > 0 && c != '/')
            {
                var pname = new cape.StringBuilder();
                var pval  = new cape.StringBuilder();
                while (c == ' ' || c == '\t' || c == '\n' || c == '\r')
                {
                    c = it.getNextChar();
                }
                while (c > 0 && c != ' ' && c != '\t' && c != '\n' && c != '\r' && c != '=')
                {
                    pname.append(c);
                    c = it.getNextChar();
                }
                while (c == ' ' || c == '\t' || c == '\n' || c == '\r')
                {
                    c = it.getNextChar();
                }
                if (c != '=')
                {
                    ;
                }
                else
                {
                    c = it.getNextChar();
                    while (c == ' ' || c == '\t' || c == '\n' || c == '\r')
                    {
                        c = it.getNextChar();
                    }
                    if (c != '\"')
                    {
                        ;
                        while (c > 0 && c != ' ' && c != '\t' && c != '\n' && c != '\r')
                        {
                            pval.append(c);
                            c = it.getNextChar();
                        }
                        while (c == ' ' || c == '\t' || c == '\n' || c == '\r')
                        {
                            c = it.getNextChar();
                        }
                    }
                    else
                    {
                        c = it.getNextChar();
                        while (c > 0 && c != '\"')
                        {
                            pval.append(c);
                            c = it.getNextChar();
                        }
                        if (c != '\"')
                        {
                            ;
                        }
                        else
                        {
                            c = it.getNextChar();
                        }
                        while (c == ' ' || c == '\t' || c == '\n' || c == '\r')
                        {
                            c = it.getNextChar();
                        }
                    }
                }
                var pnamestr = pname.toString();
                var pvalstr  = pval.toString();
                @params.set(pnamestr, (object)pvalstr);
            }
            var els = element.toString();

            if (c == '/')
            {
                var e = new capex.text.XMLParser.EndElement();
                e.setName(els);
                e.setPosition(pos);
                nextQueue = (capex.text.XMLParser.Value)e;
            }
            var v1 = new capex.text.XMLParser.StartElement();

            v1.setPosition(pos);
            v1.setName(els);
            v1.setParams(@params);
            return((capex.text.XMLParser.Value)v1);
        }
コード例 #4
0
        public static cape.DynamicMap parseAsTreeObject(string xml, bool ignoreWhiteSpace = true)
        {
            cape.DynamicMap root  = null;
            var             stack = new cape.Stack <cape.DynamicMap>();
            var             pp    = capex.text.XMLParser.forString(xml);

            pp.setIgnoreWhiteSpace(ignoreWhiteSpace);
            while (true)
            {
                var o = pp.next();
                if (o == null)
                {
                    break;
                }
                if (o is capex.text.XMLParser.StartElement)
                {
                    var name = ((capex.text.XMLParser.StartElement)o).getName();
                    if (root == null && object.Equals(name, "?xml"))
                    {
                        continue;
                    }
                    var nn = new cape.DynamicMap();
                    nn.set("name", (object)name);
                    nn.set("attributes", (object)((capex.text.XMLParser.StartElement)o).getParams());
                    if (root == null)
                    {
                        root = nn;
                        stack.push((cape.DynamicMap)nn);
                    }
                    else
                    {
                        var current = stack.peek();
                        if (current == null)
                        {
                            current = root;
                        }
                        var children = current.getDynamicVector("children");
                        if (children == null)
                        {
                            children = new cape.DynamicVector();
                            current.set("children", (object)children);
                        }
                        children.append((object)nn);
                        stack.push((cape.DynamicMap)nn);
                    }
                }
                else if (o is capex.text.XMLParser.EndElement)
                {
                    stack.pop();
                }
                else if (o is capex.text.XMLParser.CharacterData)
                {
                    var current1 = stack.peek();
                    if (current1 != null)
                    {
                        var children1 = current1.getDynamicVector("children");
                        if (children1 == null)
                        {
                            children1 = new cape.DynamicVector();
                            current1.set("children", (object)children1);
                        }
                        children1.append((object)((capex.text.XMLParser.CharacterData)o).getData());
                    }
                }
            }
            return(root);
        }
コード例 #5
0
        public virtual string toString()
        {
            var v = new cape.DynamicMap();

            v.set("latitude", latitude);
            v.set("longitude", longitude);
            v.set("completeAddress", (object)completeAddress);
            v.set("country", (object)country);
            v.set("countryCode", (object)countryCode);
            v.set("administrativeArea", (object)administrativeArea);
            v.set("subAdministrativeArea", (object)subAdministrativeArea);
            v.set("locality", (object)locality);
            v.set("subLocality", (object)subLocality);
            v.set("streetAddress", (object)streetAddress);
            v.set("streetAddressDetail", (object)streetAddressDetail);
            v.set("postalCode", (object)postalCode);
            return(cape.JSONEncoder.encode((object)v, false));
        }