[SFF, WIP] Started SFF writer
This commit is contained in:
parent
ee7ef58862
commit
b4d27c8b39
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
|
@ -4,7 +4,7 @@ on:
|
|||
push:
|
||||
branches: [ main ]
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- 'projs/docs/**'
|
||||
- 'specs/**'
|
||||
|
||||
jobs:
|
||||
|
|
0
projs/docs/thesis/.gitkeep
Normal file
0
projs/docs/thesis/.gitkeep
Normal file
61
projs/shadow-file-format-test/sff_writer_tests.cpp
Normal file
61
projs/shadow-file-format-test/sff_writer_tests.cpp
Normal file
|
@ -0,0 +1,61 @@
|
|||
#include "pch.h"
|
||||
|
||||
import Shadow.FileFormat;
|
||||
|
||||
std::string example_empty = "ShadowFileFormat_1_0_0";
|
||||
|
||||
std::string example_simple = "ShadowFileFormat_1_0_0 \n\
|
||||
Assets:{ \
|
||||
9:Content_9, \
|
||||
10 : Content_10, \
|
||||
11: Content_11, \
|
||||
}, \
|
||||
";
|
||||
|
||||
std::string example_multi_root =
|
||||
"ShadowFileFormat_1_0_0 \n \
|
||||
Assets:{ \
|
||||
9:Content_9, \
|
||||
}, \
|
||||
Texture:{ \
|
||||
texture:checker_board.png, \
|
||||
}, \
|
||||
";
|
||||
|
||||
|
||||
std::string example_multi_level = "ShadowFileFormat_1_0_0 \n\
|
||||
Assets:{ \
|
||||
9: { \
|
||||
\
|
||||
}, \
|
||||
}, \
|
||||
";
|
||||
|
||||
std::string example_multi_level_content = "ShadowFileFormat_1_0_0 \n\
|
||||
Assets:{ \
|
||||
a: { \
|
||||
0: ContentContent0, \
|
||||
1: ContentContent1, \
|
||||
2: ContentContent2, \
|
||||
}, \
|
||||
b: ContentB, \
|
||||
}, \
|
||||
";
|
||||
|
||||
std::stringstream streamFrom(std::string str) {
|
||||
std::stringstream ss;
|
||||
ss << str;
|
||||
|
||||
return ss;
|
||||
}
|
||||
|
||||
TEST(EmptyFile, HasHeader) {
|
||||
|
||||
std::stringstream ss = streamFrom(example_empty);
|
||||
|
||||
//auto a = Shadow::SFF::SFFWriter::
|
||||
|
||||
//auto assets = a->GetChildByIndex(0);
|
||||
|
||||
//EXPECT_EQ(assets, nullptr);
|
||||
}
|
|
@ -21,6 +21,7 @@
|
|||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="test.cpp" />
|
||||
<ClCompile Include="sff_writer_tests.cpp" />
|
||||
<ClCompile Include="pch.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="../../Umbra.CPP.props" />
|
||||
|
||||
<ImportGroup Label="PropertySheets">
|
||||
<Import Project="../../Umbra.CPP.props" />
|
||||
</ImportGroup>
|
||||
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>15.0</VCProjectVersion>
|
||||
<ProjectGuid>{B2E3515C-3FE0-44B9-9ABE-8584A836230F}</ProjectGuid>
|
||||
|
@ -24,8 +28,9 @@
|
|||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="src/SFFElement.cpp" />
|
||||
<ClCompile Include="src/SFFParser.cpp" />
|
||||
<ClCompile Include="src/SFFWriter.ixx" />
|
||||
<!--<ClCompile Include="src/SFFElement.cpp" />-->
|
||||
<!--<ClCompile Include="src/SFFParser.cpp" />-->
|
||||
<ClCompile Include="src/SFFElement.ixx" />
|
||||
<ClCompile Include="src/Shadow.FileFormat.ixx" />
|
||||
<ClCompile Include="src/SFFParser.ixx" />
|
||||
|
|
|
@ -18,9 +18,6 @@
|
|||
<ClCompile Include="src\SFFParser.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src/**/*.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src/SFFElement.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
|
@ -31,6 +28,7 @@
|
|||
<ClCompile Include="src/Shadow.FileFormat.ixx" />
|
||||
<ClCompile Include="src/SFFParser.ixx" />
|
||||
<ClCompile Include="src/SFFVersion.ixx" />
|
||||
<ClCompile Include="SFFWriter.ixx" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="src/**/*.h">
|
||||
|
|
68
projs/shadow-file-format/src/SFFWriter.ixx
Normal file
68
projs/shadow-file-format/src/SFFWriter.ixx
Normal file
|
@ -0,0 +1,68 @@
|
|||
module;
|
||||
|
||||
//#include <iostream>;
|
||||
//#include <fstream>;
|
||||
|
||||
export module Shadow.FileFormat:SFFWriter;
|
||||
|
||||
import <string>;
|
||||
import <iostream>;
|
||||
import <fstream>;
|
||||
import shadow_utils;
|
||||
|
||||
import :SFFElement;
|
||||
import :SFFVersion;
|
||||
|
||||
namespace Shadow::SFF {
|
||||
|
||||
export class SFFParser
|
||||
{
|
||||
public:
|
||||
|
||||
static void WriteFile(SFFElement& root, std::string path)
|
||||
{
|
||||
std::ofstream writer(path);
|
||||
writer << "ShadowFileFormat_1_0_0" << std::endl;
|
||||
|
||||
int depth = 0;
|
||||
WriteElement(writer, root, depth);
|
||||
|
||||
writer.flush();
|
||||
}
|
||||
|
||||
static void WriteElement(std::ostream& w, SFFElement& e, int &depth)
|
||||
{
|
||||
std::string head = (e.name + (e.isBlock ? ":{" : ":"));
|
||||
//head = head.PadLeft(depth + head.Length, '\t');
|
||||
head.insert(head.begin(), depth, '\t');
|
||||
w << head << std::endl;
|
||||
|
||||
if (e.isBlock)
|
||||
{
|
||||
depth += 1;
|
||||
w << std::endl;
|
||||
for(auto& prop : e.properties)
|
||||
{
|
||||
WriteElement(w, prop.Value, depth);
|
||||
}
|
||||
|
||||
std::string close = "}";
|
||||
close.insert(head.begin(), depth, '\t');
|
||||
w << close;
|
||||
depth -= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
w << e.value << ",";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -2,4 +2,5 @@ export module Shadow.FileFormat;
|
|||
|
||||
export import :SFFElement;
|
||||
export import :SFFParser;
|
||||
export import :SFFWriter;
|
||||
export import :SFFVersion;
|
Loading…
Reference in New Issue
Block a user