コード例 #1
0
bool CPLJSonStreamingParser::StartNewToken(const char*& pStr, size_t& nLength)
{
    char ch = *pStr;
    if( ch == '{' )
    {
        if( m_aState.size() == m_nMaxDepth )
        {
            return EmitException("Too many nested objects and/or arrays");
        }
        StartObject();
        m_aeObjectState.push_back(WAITING_KEY);
        m_aState.push_back(OBJECT);
        AdvanceChar(pStr, nLength);
    }
    else if( ch == '"' )
    {
        m_aState.push_back(STRING);
        AdvanceChar(pStr, nLength);
    }
    else if( ch == '[' )
    {
        if( m_aState.size() == m_nMaxDepth )
        {
            return EmitException("Too many nested objects and/or arrays");
        }
        StartArray();
        m_abFirstElement.push_back(true);
        m_aState.push_back(ARRAY);
        AdvanceChar(pStr, nLength);
    }
    else if( ch == '-' || ch == '.' || isdigit(ch) )
    {
        m_aState.push_back(NUMBER);
    }
    else if( ch == 't' )
    {
        m_aState.push_back(STATE_TRUE);
    }
    else if( ch == 'f' )
    {
        m_aState.push_back(STATE_FALSE);
    }
    else if( ch == 'n' )
    {
        m_aState.push_back(STATE_NULL);
    }
    else
    {
        assert( false );
    }
    return true;
}
コード例 #2
0
ファイル: Shuttle.cpp プロジェクト: MindFy/audacity
void ShuttleGetDefinition::DefineEnum( int&var, const wxChar * key, const int vdefault, wxArrayString strings )
{
   StartStruct();
   AddItem( wxString(key), "key" );
   AddItem( "enum", "type" );
   if( IsOptional() )
      AddItem( "unchanged", "default" );
   else
      AddItem( (double)vdefault, "default"  );
   StartField( "enum" );
   StartArray();
   for( size_t i=0;i<strings.Count(); i++ )
      AddItem( strings[i] );
   EndArray();
   EndField();
   EndStruct();
}
コード例 #3
0
void CPDF_StreamContentParser::InputData(FX_LPCBYTE src_buf, FX_DWORD src_size)
{
    if (m_Level > _FPDF_MAX_FORM_LEVEL_) {
        return;
    }
    for (FX_DWORD i = 0; i < src_size; i ++) {
        int ch = src_buf[i];
        int type = _PDF_CharType[ch];
start:
        switch (m_WordState) {
            case 0:
                if (type == 'W') {
                } else if (type == 'N') {
                    m_WordState = 5;
                    m_pWordBuf[0] = ch;
                    m_WordSize = 1;
                } else if (type == 'R') {
                    m_WordState = 4;
                    m_pWordBuf[0] = ch;
                    m_WordSize = 1;
                } else switch (ch) {
                        case '/':
                            m_WordState = 2;
                            m_WordSize = 0;
                            break;
                        case '[':
                            StartArray();
                            break;
                        case ']':
                            EndArray();
                            break;
                        case '(':
                            m_WordState = 7;
                            m_StringLevel = 1;
                            m_StringState = 0;
                            m_StringBuf.Clear();
                            break;
                        case '<':
                            m_WordState = 3;
                            break;
                        case '>':
                            m_WordState = 8;
                            break;
                        case '%':
                            m_WordState = 1;
                            break;
                    }
                break;
            case 1:
                if (ch == '\n' || ch == '\r') {
                    m_WordState = 0;
                }
                break;
            case 2:
                if (type != 'R' && type != 'N') {
                    EndName();
                    m_WordState = 0;
                    goto start;
                }
                if (m_WordSize < 256) {
                    m_pWordBuf[m_WordSize++] = ch;
                }
                break;
            case 3:
                if (ch == '<') {
                    StartDict();
                    m_WordState = 0;
                } else {
                    m_StringBuf.Clear();
                    m_WordState = 6;
                    goto start;
                }
                break;
            case 4:
                if (type != 'R' && type != 'N') {
                    m_WordState = 0;
                    EndKeyword();
                    if (m_bAbort) {
                        return;
                    }
                    goto start;
                }
                if (m_WordSize < 256) {
                    m_pWordBuf[m_WordSize++] = ch;
                }
                break;
            case 5:
                if (type != 'N') {
                    EndNumber();
                    m_WordState = 0;
                    goto start;
                }
                if (m_WordSize < 256) {
                    m_pWordBuf[m_WordSize++] = ch;
                }
                break;
            case 6:
                if (ch == '>') {
                    EndHexString();
                    m_WordState = 0;
                } else {
                    m_StringBuf.AppendByte(ch);
                }
                break;
            case 7:
                switch (m_StringState) {
                    case 0:
                        if (ch == ')') {
                            m_StringLevel --;
                            if (m_StringLevel == 0) {
                                EndString();
                                m_WordState = 0;
                                break;
                            }
                            m_StringBuf.AppendByte(')');
                        } else if (ch == '(') {
                            m_StringLevel ++;
                            m_StringBuf.AppendByte('(');
                        } else if (ch == '\\') {
                            m_StringState = 1;
                        } else {
                            m_StringBuf.AppendByte((char)ch);
                        }
                        break;
                    case 1:
                        if (ch >= '0' && ch <= '7') {
                            m_EscCode = ch - '0';
                            m_StringState = 2;
                            break;
                        }
                        if (ch == 'n') {
                            m_StringBuf.AppendByte('\n');
                        } else if (ch == 'r') {
                            m_StringBuf.AppendByte('\r');
                        } else if (ch == 't') {
                            m_StringBuf.AppendByte('\t');
                        } else if (ch == 'b') {
                            m_StringBuf.AppendByte('\b');
                        } else if (ch == 'f') {
                            m_StringBuf.AppendByte('\f');
                        } else if (ch == '\\') {
                            m_StringBuf.AppendByte('\\');
                        } else if (ch == '(') {
                            m_StringBuf.AppendByte('(');
                        } else if (ch == ')') {
                            m_StringBuf.AppendByte(')');
                        } else if (ch == '\r') {
                            m_StringState = 4;
                            break;
                        } else if (ch == '\n') {
                        } else {
                            m_StringBuf.AppendByte(ch);
                        }
                        m_StringState = 0;
                        break;
                    case 2:
                        if (ch >= '0' && ch <= '7') {
                            m_EscCode = m_EscCode * 8 + ch - '0';
                            m_StringState = 3;
                        } else {
                            m_StringBuf.AppendByte(m_EscCode);
                            m_StringState = 0;
                            goto start;
                        }
                        break;
                    case 3:
                        if (ch >= '0' && ch <= '7') {
                            m_EscCode = m_EscCode * 8 + ch - '0';
                            m_StringBuf.AppendByte(m_EscCode);
                            m_StringState = 0;
                        } else {
                            m_StringBuf.AppendByte(m_EscCode);
                            m_StringState = 0;
                            goto start;
                        }
                        break;
                    case 4:
                        m_StringState = 0;
                        if (ch != '\n') {
                            goto start;
                        }
                        break;
                }
                break;
            case 8:
                m_WordState = 0;
                if (ch == '>') {
                    EndDict();
                } else {
                    goto start;
                }
                break;
            case 9:
                switch (m_InlineImageState) {
                    case 0:
                        if (type == 'W' || type == 'D') {
                            m_InlineImageState = 1;
                            m_InlineWhiteChar = ch;
                        } else {
                            m_StringBuf.AppendByte(ch);
                        }
                        break;
                    case 1:
                        m_StringBuf.AppendByte(m_InlineWhiteChar);
                        if (ch == 'I') {
                            m_InlineImageState = 2;
                        } else {
                            m_InlineImageState = 0;
                            goto start;
                        }
                        break;
                    case 2:
                        if (ch == 'D') {
                            m_InlineImageState = 3;
                        } else {
                            m_StringBuf.AppendByte('I');
                            m_InlineImageState = 0;
                            goto start;
                        }
                        break;
                    case 3:
                        EndImageDict();
                        break;
                }
                break;
            case 10:
                switch (m_InlineImageState) {
                    case 0:
                        if (type == 'W') {
                            m_InlineImageState = 1;
                            m_InlineWhiteChar = ch;
                        } else {
                            m_ImageSrcBuf.AppendByte(ch);
                        }
                        break;
                    case 1:
                        if (ch == 'E') {
                            m_InlineImageState = 2;
                        } else {
                            m_ImageSrcBuf.AppendByte(m_InlineWhiteChar);
                            m_InlineImageState = 0;
                            goto start;
                        }
                        break;
                    case 2:
                        if (ch == 'I') {
                            m_InlineImageState = 3;
                        } else {
                            m_ImageSrcBuf.AppendByte(m_InlineWhiteChar);
                            m_ImageSrcBuf.AppendByte('E');
                            m_InlineImageState = 0;
                            goto start;
                        }
                        break;
                    case 3:
                        if (type == 'W') {
                            EndInlineImage();
                        } else {
                            m_ImageSrcBuf.AppendByte(m_InlineWhiteChar);
                            m_ImageSrcBuf.AppendByte('E');
                            m_ImageSrcBuf.AppendByte('I');
                            m_InlineImageState = 0;
                            goto start;
                        }
                        break;
                }
                break;
            case 11:
                if (m_InlineImageState < m_ImageSrcBuf.GetSize()) {
                    m_ImageSrcBuf.GetBuffer()[m_InlineImageState ++] = ch;
                } else {
                    if (ch == 'I') {
                        EndInlineImage();
                    }
                }
                break;
        }
    }
}