Beispiel #1
0
 public capex.text.XMLParser.Value peek()
 {
     if (nextQueue != null)
     {
         return(nextQueue);
     }
     nextQueue = next();
     return(nextQueue);
 }
Beispiel #2
0
        public capex.text.XMLParser.Value next()
        {
            if (nextQueue != null)
            {
                var v = nextQueue;
                nextQueue = null;
                return(v);
            }
            var pos = currentPosition;

            while (it.hasEnded() == false)
            {
                var cbp = currentPosition;
                var nxb = getNextChar();
                if (nxb < 1)
                {
                    continue;
                }
                if (tag != null)
                {
                    if (nxb == '>')
                    {
                        var ts = tag.toString();
                        tag = null;
                        return(onTagString(ts, pos));
                    }
                    tag.append(nxb);
                    if (nxb == '[' && tag.count() == cape.String.getLength(cdataStart) && cape.String.equals(cdataStart, tag.toString()))
                    {
                        tag   = null;
                        cdata = new cape.StringBuilder();
                    }
                    else if (nxb == '-' && tag.count() == cape.String.getLength(commentStart) && cape.String.equals(commentStart, tag.toString()))
                    {
                        tag     = null;
                        comment = new cape.StringBuilder();
                    }
                }
                else if (cdata != null)
                {
                    var c0 = nxb;
                    var c1 = ' ';
                    var c2 = ' ';
                    if (c0 == ']')
                    {
                        c1 = getNextChar();
                        if (c1 == ']')
                        {
                            c2 = getNextChar();
                            if (c2 == '>')
                            {
                                var dd = cdata.toString();
                                cdata = null;
                                var v1 = new capex.text.XMLParser.CharacterData();
                                v1.setPosition(pos);
                                v1.setData(dd);
                                return((capex.text.XMLParser.Value)v1);
                            }
                            else
                            {
                                moveToPreviousChar();
                                moveToPreviousChar();
                                cdata.append(c0);
                            }
                        }
                        else
                        {
                            moveToPreviousChar();
                            cdata.append(c0);
                        }
                    }
                    else
                    {
                        cdata.append(c0);
                    }
                }
                else if (comment != null)
                {
                    var c01 = nxb;
                    var c11 = ' ';
                    var c21 = ' ';
                    if (c01 == '-')
                    {
                        c11 = getNextChar();
                        if (c11 == '-')
                        {
                            c21 = getNextChar();
                            if (c21 == '>')
                            {
                                var ct = comment.toString();
                                comment = null;
                                var v2 = new capex.text.XMLParser.Comment();
                                v2.setPosition(pos);
                                v2.setText(ct);
                                return((capex.text.XMLParser.Value)v2);
                            }
                            else
                            {
                                moveToPreviousChar();
                                moveToPreviousChar();
                                comment.append(c01);
                            }
                        }
                        else
                        {
                            moveToPreviousChar();
                            comment.append(c01);
                        }
                    }
                    else
                    {
                        comment.append(c01);
                    }
                }
                else if (nxb == '<')
                {
                    if (def != null)
                    {
                        var cd = def.toString();
                        def = null;
                        if (ignoreWhiteSpace && cd != null)
                        {
                            if (isOnlyWhiteSpace(cd))
                            {
                                cd  = null;
                                pos = cbp;
                            }
                        }
                        if (cd != null)
                        {
                            moveToPreviousChar();
                            var v3 = new capex.text.XMLParser.CharacterData();
                            v3.setPosition(pos);
                            v3.setData(cd);
                            return((capex.text.XMLParser.Value)v3);
                        }
                    }
                    tag = new cape.StringBuilder();
                }
                else
                {
                    if (def == null)
                    {
                        def = new cape.StringBuilder();
                    }
                    def.append(nxb);
                }
            }
            return(null);
        }
Beispiel #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);
        }