MCPcopy Create free account
hub / github.com/SakuraEngine/SakuraEngine / OpenProject

Method OpenProject

modules/tools/tool_core/src/project/project.cpp:16–115  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

14}
15
16SProject* SProject::OpenProject(const skr::filesystem::path& projectFile) noexcept
17{
18 std::error_code ec = {};
19 auto resolvePath = [&](skr::String& path)
20 {
21 auto view = path.view();
22 auto i = view.index_of(u8"${");
23 if(i == ostr::global_constant::INDEX_INVALID)
24 return path;
25 skr::String resolved;
26 resolved.raw().reserve(path.raw().size());
27 //resolved.append(view);
28 while(true)
29 {
30 resolved.append(view.subview(0, i - 1));
31 auto j = view.index_of(u8"}", i, view.size() - 1);
32 if (j == ostr::global_constant::INDEX_INVALID)
33 {
34 resolved.append(view.subview(i, view.size() - 1));
35 break;
36 }
37 auto var = view.subview(i + 2, j - 1);
38 if (var == u8"workspace")
39 {
40 resolved.append(Workspace.u8string().c_str());
41 }
42 else if(var == u8"platform")
43 {
44 resolved.append(SKR_RESOURCE_PLATFORM);
45 }
46 view = view.subview(j + 1, view.size() - 1);
47 i = view.index_of(u8"${");
48 if (i == ostr::global_constant::INDEX_INVALID)
49 {
50 resolved.append(view);
51 break;
52 }
53 }
54 return resolved;
55 };
56 auto toAbsolutePath = [&](skr::String& path)
57 {
58 auto resolved = resolvePath(path);
59 skr::filesystem::path result{resolved.c_str()};
60 if (result.is_relative())
61 {
62 result = projectFile.parent_path() / result;
63 }
64 return result.lexically_normal();
65 };
66
67 auto projectPath = projectFile.lexically_normal().string();
68 auto jsonstring = simdjson::padded_string::load(projectPath);
69 simdjson::ondemand::parser parser;
70 auto doc = parser.iterate(jsonstring);
71 if(doc.error())
72 {
73 SKR_LOG_ERROR(u8"Failed to parse project file: %s, error: %s", projectPath.c_str(), simdjson::error_message(doc.error()));

Callers

nothing calls this directly

Calls 15

skr_create_vfsFunction · 0.85
loadFunction · 0.50
error_messageFunction · 0.50
ReadFunction · 0.50
moveFunction · 0.50
createFunction · 0.50
viewMethod · 0.45
index_ofMethod · 0.45
reserveMethod · 0.45
rawMethod · 0.45
sizeMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected