OSDN Git Service

2011/10/24 7:44:19
authorqwerty2501 <riot313@gmail.com>
Sun, 23 Oct 2011 22:44:19 +0000 (07:44 +0900)
committerqwerty2501 <riot313@gmail.com>
Sun, 23 Oct 2011 22:44:19 +0000 (07:44 +0900)
JSONParser/json.h
JSONParser/json_parser.c

index 1cf21a7..3e141b6 100644 (file)
@@ -74,12 +74,12 @@ typedef JSONUInt JSONResult;
 ///
 ///\83I\83u\83W\83F\83N\83g\92l\89ð\90Í\8e\9e\83R\81[\83\8b\83o\83b\83N
 ///
-typedef JSONVoid (*JSONObjectDataEventHandler)(JSONVoid *option,JSONValueType,JSONChar_P,JSONParameter);
+typedef JSONVoid (*JSONObjectMemberEventHandler)(JSONVoid *option,JSONValueType,JSONChar_P,JSONParameter);
 
 ///
 ///\94z\97ñ\92l\89ð\90Í\8e\9e\83R\81[\83\8b\83o\83b\83N
 ///
-typedef JSONVoid (*JSONArrayDataEventHandler)(JSONVoid *option,JSONValueType,JSONParameter);
+typedef JSONVoid (*JSONArrayValueEventHandler)(JSONVoid *option,JSONValueType,JSONParameter);
 
 ///
 ///\83I\83u\83W\83F\83N\83g\8fI\92[\89ð\90Í\8e\9e\83R\81[\83\8b\83o\83b\83N
@@ -198,13 +198,13 @@ extern "C" {
        ///
        ///\83I\83u\83W\83F\83N\83g\83C\83x\83\93\83g\83n\83\93\83h\83\89\82ð\83Z\83b\83g
        ///
-       extern JSONVoid JSONParser_setObjectDataEventHandler(JSONParser_P parser,JSONObjectDataEventHandler handler);
+       extern JSONVoid JSONParser_setObjectDataEventHandler(JSONParser_P parser,JSONObjectMemberEventHandler handler);
 
 
        ///
        ///\94z\97ñ\83C\83x\83\93\83g\83n\83\93\83h\83\89\82ð\83Z\83b\83g
        ///
-       extern JSONVoid JSONParser_setArrayDataEventHandler(JSONParser_P parser,JSONArrayDataEventHandler handler);
+       extern JSONVoid JSONParser_setArrayDataEventHandler(JSONParser_P parser,JSONArrayValueEventHandler handler);
 
 
 
index f5bcd70..19e7279 100644 (file)
@@ -17,9 +17,9 @@ typedef struct jsonparser_t{
 
        JSONBool boolValue;                                                                     //\90^\8bU\8c^\95Û\8e\9d\97p\97Ì\88æ
 
-       JSONObjectDataEventHandler objectHandler;                       //\83I\83u\83W\83F\83N\83g\83C\83x\83\93\83g\83n\83\93\83h\83\89
+       JSONObjectMemberEventHandler objectHandler;                     //\83I\83u\83W\83F\83N\83g\83C\83x\83\93\83g\83n\83\93\83h\83\89
 
-       JSONArrayDataEventHandler arrayHandler;                         //\94z\97ñ\83C\83x\83\93\83g\83n\83\93\83h\83\89
+       JSONArrayValueEventHandler arrayHandler;                                //\94z\97ñ\83C\83x\83\93\83g\83n\83\93\83h\83\89
 
        JSONObjectEndHandler objectEndHandler;                          //\83I\83u\83W\83F\83N\83g\8fI\92[\83C\83x\83\93\83g\83n\83\93\83h\83\89
 
@@ -216,7 +216,7 @@ static JSONResult ParseObjectUTF8(JSONParser_P parser,const JSONText *jsontext,c
 
        
 
-       JSONChar_P name;
+
 
        
 
@@ -226,7 +226,7 @@ static JSONResult ParseObjectUTF8(JSONParser_P parser,const JSONText *jsontext,c
        jsontext += strspn(jsontext," \r\n\t");
 
        if(jsontext[0] =='}'){
-               goto end;
+               goto success;
        }
 
        //\83I\83u\83W\83F\83N\83g\83\81\83\93\83o\82ð\89ð\90Í
@@ -261,7 +261,7 @@ static JSONResult ParseObjectUTF8(JSONParser_P parser,const JSONText *jsontext,c
 
                        //','\82ð\83X\83L\83b\83v
                        jsontext++;
-                       continue;
+                       break;
 
                default:
 
@@ -274,15 +274,15 @@ static JSONResult ParseObjectUTF8(JSONParser_P parser,const JSONText *jsontext,c
                //\8bó\94\92\82ð\83X\83L\83b\83v
                jsontext += strspn(jsontext," \r\n\t");
 
-       }while(JSONFalse);
+       }while(JSONTrue);
 
        
 
 success:
        rslt = JSON_ERR_OK;
-
-end:
        (*endptr) = (JSONText*)jsontext;
+end:
+       
 
        return rslt;
 
@@ -436,7 +436,7 @@ static JSONResult ParseObjectMemberUTF8(JSONParser_P parser,const JSONText *json
                        goto end;
                }
 
-               parser->objectHandler(parser->option,JSONTypeBool,name,JSONFalse);
+               parser->objectHandler(parser->option,JSONTypeBool,name,(JSONParameter)NULL);
 
                break;
 
@@ -453,15 +453,15 @@ static JSONResult ParseObjectMemberUTF8(JSONParser_P parser,const JSONText *json
        //\8bó\94\92\82ð\83X\83L\83b\83v
        jsontext += strspn(jsontext," \r\n\t");
 
-success:
-       rslt = JSON_ERR_OK;
 
+       rslt = JSON_ERR_OK;
+       (*endptr) = (JSONText*)jsontext;
 
 end:
 
        //\95\8e\9a\97ñ\83o\83b\83t\83@\8aJ\95ú
        JSONString_free(&stringAllocator);
-       (*endptr) = (JSONText*)jsontext;
+       
 
        return rslt;
 
@@ -486,7 +486,7 @@ static JSONResult ParseArrayUTF8(JSONParser_P parser,const JSONText *jsontext,co
 
        if(jsontext[0] == ']'){
 
-               goto end;
+               goto success;
 
        }
 
@@ -494,12 +494,6 @@ static JSONResult ParseArrayUTF8(JSONParser_P parser,const JSONText *jsontext,co
                //\94z\97ñ\82ð\89ð\90Í
        do{
 
-               
-
-               
-       
-
-
                rslt = ParseArrayValueUTF8(parser,jsontext,&jsontext);
 
                if(rslt != JSON_ERR_OK){
@@ -511,7 +505,7 @@ static JSONResult ParseArrayUTF8(JSONParser_P parser,const JSONText *jsontext,co
                        //\8bó\83I\83u\83W\83F\83N\83g\82Ì\8fê\8d\87\82Í\8fI\97¹
                case ']':
 
-                       //'}'\82ð\83X\83L\83b\83v
+                       //']'\82ð\83X\83L\83b\83v
                        jsontext++;
                        goto success;
 
@@ -536,10 +530,10 @@ static JSONResult ParseArrayUTF8(JSONParser_P parser,const JSONText *jsontext,co
 
 success:
        rslt = JSON_ERR_OK;
-
+       (*endptr) = jsontext;
 
 end:
-       (*endptr) = jsontext;
+       
 
        return rslt;
 
@@ -552,6 +546,141 @@ syntaxerr:
 }
 
 
+static JSONResult ParseArrayValueUTF8(JSONParser_P parser,const JSONText *jsontext,const JSONText **endptr){
+
+       JSONResult rslt = JSON_ERR_NOTINIT;
+
+
+               //value\82ð\89ð\90Í
+       switch(jsontext[0]){
+
+               //value\82ª\83I\83u\83W\83F\83N\83g\82Ì\8fê\8d\87
+       case '{':
+               parser->arrayHandler(parser->option,JSONTypeObject,(JSONParameter)NULL);
+
+               rslt = ParseObjectUTF8(parser,jsontext,&jsontext);
+
+               if(rslt != JSON_ERR_OK){
+                       goto end;
+               }
+
+               parser->objectEndHandler(parser->option,NULL);
+               break;
+
+               //value\82ª\94z\97ñ\82Ì\8fê\8d\87
+       case '[':
+               parser->arrayHandler(parser->option,JSONTypeArray,(JSONParameter)NULL);
+
+               rslt = ParseArrayUTF8(parser,jsontext,&jsontext);
+
+               if(rslt != JSON_ERR_OK){
+
+                       goto end;
+
+               }
+
+               parser->arrayEndHandler(parser->option,NULL);
+
+               break;
+
+               //value\82ª\95\8e\9a\97ñ\82Ì\8fê\8d\87
+       case '"':
+
+               rslt = ParseStringValueUTF8(parser,jsontext,&jsontext);
+
+               if(rslt != JSON_ERR_OK){
+
+                       goto end;
+
+               }
+
+               parser->arrayHandler(parser->option,JSONTypeString,(JSONParameter)parser->value);
+
+               break;
+
+               //value\82ª\90\94\92l\82Ì\8fê\8d\87
+       case '-':
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+
+               rslt = ParseDecimalUTF8(parser,jsontext,&jsontext);
+
+               if(rslt != JSON_ERR_OK){
+
+                       goto end;
+
+               }
+
+               parser->arrayHandler(parser->option,JSONTypeDecimal,(JSONParameter)parser->value);
+
+               break;
+
+               //value\82ªtrue\82Ì\8fê\8d\87
+       case 't':
+
+               rslt = ParseLiteralNameUTF8("true",jsontext,&jsontext);
+               if(rslt != JSON_ERR_OK){
+                       goto end;
+               }
+               
+               parser->arrayHandler(parser->option,JSONTypeBool,JSONTrue);
+
+               break;
+
+       case 'f':
+               rslt = ParseLiteralNameUTF8("false",jsontext,&jsontext);
+               if(rslt != JSON_ERR_OK){
+                       goto end;
+               }
+
+               parser->arrayHandler(parser->option,JSONTypeBool,JSONFalse);
+               break;
+
+       case 'n':
+
+               rslt = ParseLiteralNameUTF8("null",jsontext,&jsontext);
+               if(rslt != JSON_ERR_OK){
+                       goto end;
+               }
+
+               parser->arrayHandler(parser->option,JSONTypeBool,(JSONParameter)NULL);
+
+               break;
+
+               //value\82É\8eg\97p\89Â\94\\82È\95\8e\9a\88È\8aO\82Ì\95\8e\9a\82Ì\8fê\8d\87
+       default:
+
+               goto syntaxerr;
+
+
+       }
+
+       rslt = JSON_ERR_OK;
+
+       //\8bó\94\92\82ð\83X\83L\83b\83v
+       jsontext += strspn(jsontext," \r\n\t");
+
+
+       rslt = JSON_ERR_OK;
+       (*endptr) = (JSONText*)jsontext;
+
+end:
+       return rslt;
+
+       //\8d\\95\89ð\90Í\83G\83\89\81[
+syntaxerr:
+       rslt = JSON_ERR_SYNTAX;
+       goto end;
+}
+
 
 JSONParser_P JSONParser_new(){
 
@@ -585,7 +714,7 @@ JSONVoid JSONParser_delete(JSONParser_P *parser){
 ///
 ///\83I\83u\83W\83F\83N\83g\83C\83x\83\93\83g\83n\83\93\83h\83\89\82ð\83Z\83b\83g
 ///
-JSONVoid JSONParser_setObjectDataEventHandler(JSONParser_P parser,JSONObjectDataEventHandler handler){
+JSONVoid JSONParser_setObjectDataEventHandler(JSONParser_P parser,JSONObjectMemberEventHandler handler){
 
        parser->objectHandler = handler;
 
@@ -596,7 +725,7 @@ JSONVoid JSONParser_setObjectDataEventHandler(JSONParser_P parser,JSONObjectData
 ///
 ///\94z\97ñ\83C\83x\83\93\83g\83n\83\93\83h\83\89\82ð\83Z\83b\83g
 ///
-JSONVoid JSONParser_setArrayDataEventHandler(JSONParser_P parser,JSONArrayDataEventHandler handler){
+JSONVoid JSONParser_setArrayDataEventHandler(JSONParser_P parser,JSONArrayValueEventHandler handler){
 
        parser->arrayHandler = handler;