X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fbuilder%2Fjson-parser-state.cpp;h=636bac17cb576252ef6178438adde31b7dac3479;hb=07cc067f28642906f1bd521c16f58a1c84e9ed54;hp=ca7b139ef3b4473aab4d5f1a115cb91583147609;hpb=e2eda444afbe82e9591fe198eef339227f90a616;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/builder/json-parser-state.cpp b/dali-toolkit/internal/builder/json-parser-state.cpp index ca7b139..636bac1 100644 --- a/dali-toolkit/internal/builder/json-parser-state.cpp +++ b/dali-toolkit/internal/builder/json-parser-state.cpp @@ -1,23 +1,25 @@ -// -// 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 #include namespace Dali @@ -317,8 +319,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 +356,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) @@ -663,6 +675,8 @@ char* JsonParserState::EncodeString() mNumberOfParsedChars += last - first; mNumberOfParsedChars += 1 ; // null terminator + mCurrent.SetSubstitution( substitution > 1 ); + // return true; return &(*first); @@ -720,6 +734,11 @@ bool JsonParserState::ParseJson(VectorChar& source) { if( '}' == currentChar ) { + if(',' == lastCharacter) + { + return Error("Unexpected comma"); + } + if( !UpToParent() ) { return false; @@ -797,15 +816,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)