Generator when printing Model/Space is recognizing now such parameters:

- "dump" or "dump_to_space" parameters to make a dump in Space format
- "dump_to_json" parameter to make json dump
- "pretty" parameter to make the dump pretty (with new lines and indents)
This commit is contained in:
Tomasz Sowa 2021-06-27 22:42:00 +02:00
parent 3926793a17
commit c2283f70d4
1 changed files with 57 additions and 44 deletions

View File

@ -378,10 +378,14 @@ private:
void TrimWhite(const wchar_t *& start, const wchar_t *& end);
void SkipWhite(const wchar_t *& str);
size_t StrToSize(const wchar_t * str, const wchar_t ** str_end = 0);
bool ShouldEscapeValue(std::vector<Var> & parameters);
bool ShouldMakeDump(std::vector<Var> & parameters);
bool HasParam(std::vector<Var> & parameters, const wchar_t * param1, const wchar_t * param2 = nullptr);
bool ShouldMakeSpaceDump(std::vector<Var> & parameters);
bool ShouldMakeJsonDump(std::vector<Var> & parameters);
bool IsPrettyPrint(std::vector<Var> & parameters);
bool IsCurrentParam(std::vector<Var> & parameters);
void DumpSpaceIfNeeded(std::vector<Var> & parameters, StreamType & out_stream, pt::Space * space);
void CopyTmpStreamToOutputStreams(Item::Function & fun, StreamType & ezc_out_tmp_stream, StreamType & previous_stream);
@ -1203,33 +1207,14 @@ void Generator<StreamType>::CallObject(BaseObj<StreamType> & base_obj, int metho
template<class StreamType>
bool Generator<StreamType>::ShouldEscapeValue(std::vector<Var> & parameters)
bool Generator<StreamType>::HasParam(std::vector<Var> & parameters, const wchar_t * param1, const wchar_t * param2)
{
for(Var & var : parameters)
{
if( !var.is_function )
{
if( var.str == L"raw" || var.str == L"noescape" )
{
return false;
}
}
}
return true;
}
template<class StreamType>
bool Generator<StreamType>::ShouldMakeDump(std::vector<Var> & parameters)
{
for(Var & var : parameters)
{
if( !var.is_function )
{
if( var.str == L"dump" || var.str == L"to_str" )
if( var.str == param1 || (param2 && var.str == param2) )
{
return true;
}
@ -1240,21 +1225,56 @@ bool Generator<StreamType>::ShouldMakeDump(std::vector<Var> & parameters)
}
template<class StreamType>
bool Generator<StreamType>::ShouldMakeSpaceDump(std::vector<Var> & parameters)
{
return HasParam(parameters, L"dump", L"dump_to_space");
}
template<class StreamType>
bool Generator<StreamType>::ShouldMakeJsonDump(std::vector<Var> & parameters)
{
return HasParam(parameters, L"dump_to_json");
}
template<class StreamType>
bool Generator<StreamType>::IsCurrentParam(std::vector<Var> & parameters)
{
for(Var & var : parameters)
return HasParam(parameters, L"current");
}
template<class StreamType>
bool Generator<StreamType>::IsPrettyPrint(std::vector<Var> & parameters)
{
return HasParam(parameters, L"pretty");
}
template<class StreamType>
void Generator<StreamType>::DumpSpaceIfNeeded(std::vector<Var> & parameters, StreamType & out_stream, pt::Space * space)
{
bool dump_space = ShouldMakeSpaceDump(parameters);
bool dump_json = ShouldMakeJsonDump(parameters);
if( dump_space || dump_json )
{
if( !var.is_function )
bool pretty = IsPrettyPrint(parameters);
if( dump_space )
{
if( var.str == L"current" )
{
return true;
}
space->serialize_to_space_stream(out_stream, pretty);
}
else
if( dump_json )
{
space->serialize_to_json_stream(out_stream, pretty);
}
}
return false;
}
@ -1262,12 +1282,8 @@ bool Generator<StreamType>::IsCurrentParam(std::vector<Var> & parameters)
template<class StreamType>
void Generator<StreamType>::CallSpaceObjectForLastField(std::vector<Var> & parameters, StreamType & out_stream, pt::Space * space)
{
// should we convert the last value to last_res?
if( ShouldMakeDump(parameters) )
{
space->serialize_to_json_stream(out_stream); // we can add pretty print
}
// CHECKME should we convert the last value to last_res?
DumpSpaceIfNeeded(parameters, out_stream, space);
}
@ -1275,7 +1291,7 @@ template<class StreamType>
pt::Space * Generator<StreamType>::CallSpaceObjectForMiddleField(std::wstring & root_space_name, std::vector<std::wstring> & fields, size_t field_index, pt::Space * space)
{
std::wstring & next_field = fields[field_index];
space = space->get_object_field(next_field);
space = space->get_space(next_field);
if( !space )
{
@ -1306,10 +1322,7 @@ void Generator<StreamType>::CallSpaceTableForLastField(morm::ModelWrapper & mode
last_res = !table->empty();
}
if( ShouldMakeDump(parameters) )
{
space->serialize_to_json_stream(out_stream);
}
DumpSpaceIfNeeded(parameters, out_stream, space);
if( IsCurrentParam(parameters) )
{
@ -1317,7 +1330,7 @@ void Generator<StreamType>::CallSpaceTableForLastField(morm::ModelWrapper & mode
if( iterator_value < table->size() )
{
(*table)[iterator_value]->serialize_to_json_stream(out_stream);
(*table)[iterator_value]->serialize_to_string(out_stream);
}
}
@ -1450,7 +1463,7 @@ bool Generator<StreamType>::CallModel(morm::Model & model, const std::wstring &
if( found && !str.empty())
{
bool should_escape = ShouldEscapeValue(parameters);
bool should_escape = HasParam(parameters, L"raw", L"noescape");
CopyStream(str, out_stream, should_escape);
}