| 402 | } |
| 403 | |
| 404 | auto JsonViewDlg::PopulateTreeUsingSax(HTREEITEM tree_root, const std::string& jsonText) -> std::optional<std::wstring> |
| 405 | { |
| 406 | std::optional<std::wstring> retVal = std::nullopt; |
| 407 | |
| 408 | auto pTS = std::make_shared<TrackingStream>(jsonText); |
| 409 | RapidJsonHandler handler(this, tree_root, pTS); |
| 410 | rapidjson::StringBuffer sb; |
| 411 | |
| 412 | Result res = JsonHandler(m_pSetting->parseOptions).ParseJson<flgBaseReader>(jsonText, sb, handler, pTS); |
| 413 | if (!res.success) |
| 414 | { |
| 415 | if (CheckForTokenUndefined(JsonViewDlg::eMethod::ParseJson, jsonText, res, tree_root)) |
| 416 | return retVal; |
| 417 | |
| 418 | // Intimate user |
| 419 | if (jsonText.empty()) |
| 420 | { |
| 421 | retVal = std::make_optional<std::wstring>(JSON_ERR_PARSE); |
| 422 | } |
| 423 | else |
| 424 | { |
| 425 | // Mark the error position |
| 426 | size_t start = m_pEditor->GetSelectionStart(); |
| 427 | size_t errPosition = start + static_cast<size_t>(res.error_pos); |
| 428 | m_pEditor->MakeSelection(errPosition, errPosition + 1); |
| 429 | |
| 430 | std::string err = std::format("\n\nError: ({} : {})", res.error_code, res.error_str); |
| 431 | retVal = std::make_optional<std::wstring>((JSON_ERR_VALIDATE + StringHelper::ToWstring(err))); |
| 432 | } |
| 433 | } |
| 434 | else |
| 435 | { |
| 436 | HighlightAsJson(); |
| 437 | } |
| 438 | |
| 439 | return retVal; |
| 440 | } |
| 441 | |
| 442 | HTREEITEM JsonViewDlg::InsertToTree(HTREEITEM parent, const std::string& text) |
| 443 | { |
nothing calls this directly
no test coverage detected