X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fbuilder%2Fjson-parser-state.cpp;h=3691838345bd18ed8e69424342531acaff1f488d;hp=9b6fa4fb28cba7f93a0a785b3ebfbf95ba3efb70;hb=15867edb828e4414d4e8c465ad3b89290f76ff2c;hpb=af74001e7e61033e86323da5ad079ccbc310680a diff --git a/dali-toolkit/internal/builder/json-parser-state.cpp b/dali-toolkit/internal/builder/json-parser-state.cpp index 9b6fa4f..3691838 100644 --- a/dali-toolkit/internal/builder/json-parser-state.cpp +++ b/dali-toolkit/internal/builder/json-parser-state.cpp @@ -1,23 +1,24 @@ -// -// Copyright (c) 2014 Samsung Electronics Co., Ltd. -// -// Licensed under the Flora License, Version 1.0 (the License); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://floralicense.org/license/ -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an AS IS BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ // CLASS HEADER #include -// EXTERNAL +// EXTERNAL INCLUDES #include namespace Dali @@ -317,8 +318,13 @@ TreeNode* JsonParserState::NewNode(const char* name, TreeNode::NodeType type) TreeNodeManipulator modify(node); modify.SetName(name); - // Set the type of the existing node, this may remove children where necessary - // (changing from container type to value type) + + // Set the type of the existing node. + // Where the new type is different, then any children of this node will + // be deleted. + // When the type is an array of numbers, then this will also remove any children + // When the type is an object or other array, then the children will not be removed, + // but will instead follow these replace rules. modify.SetType(type); mCurrent = modify; @@ -349,6 +355,11 @@ bool JsonParserState::ParseWhiteSpace() bool c_comment = false; bool cpp_comment = false; + if( mIter == mEnd ) + { + return true; + } + // skip white space char nextChar = 0; while(1) @@ -722,6 +733,11 @@ bool JsonParserState::ParseJson(VectorChar& source) { if( '}' == currentChar ) { + if(',' == lastCharacter) + { + return Error("Unexpected comma"); + } + if( !UpToParent() ) { return false; @@ -799,15 +815,22 @@ bool JsonParserState::ParseJson(VectorChar& source) } else if( '{' == currentChar ) { - NewNode(name, TreeNode::OBJECT); - mState = STATE_OBJECT; - AdvanceSkipWhiteSpace(1); + if( '}' == lastCharacter ) + { + return Error("Expected a comma"); + } + else + { + NewNode(name, TreeNode::OBJECT); + mState = STATE_OBJECT; + AdvanceSkipWhiteSpace(1); + } } else if( '}' == currentChar ) { if(',' == lastCharacter) { - return Error("Expected a value"); + return Error("Expected another value"); } if(mCurrent.GetType() != TreeNode::OBJECT)