Exemple #1
0
 void procToken(Token t)
 {
     switch (t.Type)
     {
         case Token.TokType.OPEN_TAG:
             Element e = new Element();
             e.Name = t.Value;
             //m_tokStack.Push(t);
             m_eltStack.Push(e);
             break;
         case Token.TokType.CLOSE_TAG:
             List<Element> lst = new List<Element>();
             Element top = m_eltStack.Peek();
             string name = top.Name;
             while (name.CompareTo(t.Value) != 0)
             {
                 lst.Add(m_eltStack.Pop());
                 top = m_eltStack.Peek();
                 name = top.Name;
             }
             top.Children.AddRange(lst);
             if(name.CompareTo("OFX") == 0)
                 m_finished = true;
             break;
         case Token.TokType.TEXT:
             m_eltStack.Peek().appendText(t.Value);
             break;
         case Token.TokType.EOF:
             throw new ParserException(t, "Unexpected end of file");
     }
 }
Exemple #2
0
        public Token getNextToken()
        {
            Token result = null;
            int i = m_input.Read();

            while( (result == null)&& (i != -1))
            {
                char c = Convert.ToChar(i);
                switch (m_state)
                {
                    case State.Initial:
                        result = procCharInitial(c);
                        break;
                    case State.OpenTag:
                        result = procCharOpenTag(c);
                        break;
                    case State.ClosedTag:
                        result = procCharClosedTag(c);
                        break;
                }
                m_chPrevious = c;
                if(result == null)
                    i = m_input.Read();
            }
            if (i == -1)
            {
                result = new Token(Token.TokType.EOF, null, null, m_pos, m_line, m_col);
            }
            return result;
        }
Exemple #3
0
 Token procCharOpenTag(char c)
 {
     updatePosition(c);
     switch (c)
     {
         case '/':
             if (m_strBuffText.Length > 1)
                 throw new ScannerException("Unexpected '/' character.", m_pos, m_line, m_col);
             else
             {
                 m_strBuffText.Append(c);
             }
             break;
         case '<':
             throw new ScannerException("Unexpected '<' character.", m_pos, m_line, m_col);
             break;
         case '>':
             m_strBuffText.Append(c);
             m_state = State.ClosedTag;
             Token.TokType type = Token.TokType.OPEN_TAG;
             string text = m_strBuffText.ToString();
             if (text[1] == '/')
                 type = Token.TokType.CLOSE_TAG;
             Token t = new Token(type, text, m_strBuffValue.ToString(), m_posStart, m_lineStart, m_colStart);
             m_strBuffText = new StringBuilder();
             m_strBuffValue = new StringBuilder();
             setTokBegin();
             return t;
         default:
             m_strBuffText.Append(c);
             m_strBuffValue.Append(c);
             break;
     }
     return null;
 }
Exemple #4
0
 Token procCharClosedTag(char c)
 {
     Token result = null;
     updatePosition(c);
     switch (c)
     {
         case '<':
             string text = m_strBuffText.ToString();
             if (text.Length > 0)
             {
                 result = new Token(Token.TokType.TEXT, m_strBuffText.ToString(), m_strBuffText.ToString(),
                     m_posStart, m_lineStart, m_colStart);
             }
             m_strBuffText = new StringBuilder();
             m_strBuffText.Append(c);
             m_strBuffValue = new StringBuilder();
             m_state = State.OpenTag;
             setTokBegin();
             break;
         case '>':
             throw new ScannerException(m_pos, m_line, m_col);
         default:
             m_strBuffText.Append(c);
             break;
     }
     return result;
 }
Exemple #5
0
 public ParserException(Token t, string message)
     : base(message, t.Pos, t.Line, t.Col)
 {
 }