///
///\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
///
///\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);
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
- JSONChar_P name;
+
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Í
//','\82ð\83X\83L\83b\83v
jsontext++;
- continue;
+ break;
default:
//\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;
goto end;
}
- parser->objectHandler(parser->option,JSONTypeBool,name,JSONFalse);
+ parser->objectHandler(parser->option,JSONTypeBool,name,(JSONParameter)NULL);
break;
//\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;
if(jsontext[0] == ']'){
- goto end;
+ goto success;
}
//\94z\97ñ\82ð\89ð\90Í
do{
-
-
-
-
-
-
rslt = ParseArrayValueUTF8(parser,jsontext,&jsontext);
if(rslt != JSON_ERR_OK){
//\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;
success:
rslt = JSON_ERR_OK;
-
+ (*endptr) = jsontext;
end:
- (*endptr) = jsontext;
+
return rslt;
}
+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(){
///
///\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;
///
///\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;