| 417 | } |
| 418 | |
| 419 | const char *LottieParserImpl::NextObjectKey() |
| 420 | { |
| 421 | if (st_ == kHasKey) { |
| 422 | const char *result = v_.GetString(); |
| 423 | ParseNext(); |
| 424 | return result; |
| 425 | } |
| 426 | |
| 427 | /* SPECIAL CASE |
| 428 | * The parser works with a prdefined rule that it will be only |
| 429 | * while (NextObjectKey()) for each object but in case of our nested group |
| 430 | * object we can call multiple time NextObjectKey() while exiting the object |
| 431 | * so ignore those and don't put parser in the error state. |
| 432 | * */ |
| 433 | if (st_ == kExitingArray || st_ == kEnteringObject) { |
| 434 | // #ifdef DEBUG_PARSER |
| 435 | // vDebug<<"Object: Exiting nested loop"; |
| 436 | // #endif |
| 437 | return nullptr; |
| 438 | } |
| 439 | |
| 440 | if (st_ != kExitingObject) { |
| 441 | RAPIDJSON_ASSERT(false); |
| 442 | st_ = kError; |
| 443 | return nullptr; |
| 444 | } |
| 445 | |
| 446 | ParseNext(); |
| 447 | return nullptr; |
| 448 | } |
| 449 | |
| 450 | bool LottieParserImpl::NextArrayValue() |
| 451 | { |