added: "this" virtual field for a table - only if the next field is not an object

e.g.:
       [for space_object]
       	    [space_object.this] instead of [space_object "current"]
       [end]
       "this" can be nested, e.g. if we have two nested tables:
       [for space_object]
          [for space_object.this]
             [space_object.this.this]
          [end]
       [end]

removed: "current" parameter for tables
This commit is contained in:
Tomasz Sowa 2021-09-23 04:02:34 +02:00
parent a983698e3d
commit b047a10e8d
1 changed files with 16 additions and 23 deletions

View File

@ -372,7 +372,6 @@ private:
bool ShouldMakeSpaceDump(std::vector<Var> & parameters); bool ShouldMakeSpaceDump(std::vector<Var> & parameters);
bool ShouldMakeJsonDump(std::vector<Var> & parameters); bool ShouldMakeJsonDump(std::vector<Var> & parameters);
bool IsPrettyPrint(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 DumpSpaceIfNeeded(std::vector<Var> & parameters, StreamType & out_stream, pt::Space * space);
void DumpModelIfNeeded(morm::Model & model, std::vector<Var> & parameters, StreamType & out_stream); void DumpModelIfNeeded(morm::Model & model, std::vector<Var> & parameters, StreamType & out_stream);
@ -1237,13 +1236,6 @@ bool Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::ShouldMak
} }
template<class StreamType, bool is_pikotools_stream, bool is_autoescape_stream>
bool Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::IsCurrentParam(std::vector<Var> & parameters)
{
return HasParam(parameters, L"current");
}
template<class StreamType, bool is_pikotools_stream, bool is_autoescape_stream> template<class StreamType, bool is_pikotools_stream, bool is_autoescape_stream>
bool Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::IsPrettyPrint(std::vector<Var> & parameters) bool Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::IsPrettyPrint(std::vector<Var> & parameters)
{ {
@ -1455,8 +1447,8 @@ pt::Space * Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::Ca
template<class StreamType, bool is_pikotools_stream, bool is_autoescape_stream> template<class StreamType, bool is_pikotools_stream, bool is_autoescape_stream>
void Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::CallSpaceTableForLastField(morm::SpaceWrapper & space_wrapper, std::vector<Var> & parameters, StreamType & out_stream, void Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::CallSpaceTableForLastField(
pt::Space * space, size_t model_wrapper_space_table_index) morm::SpaceWrapper & space_wrapper, std::vector<Var> & parameters, StreamType & out_stream, pt::Space * space, size_t model_wrapper_space_table_index)
{ {
pt::Space::TableType * table = space->get_table(); pt::Space::TableType * table = space->get_table();
@ -1478,16 +1470,6 @@ void Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::CallSpace
if( !IsTestingFunctionExistence() ) if( !IsTestingFunctionExistence() )
{ {
DumpSpaceIfNeeded(parameters, out_stream, space); DumpSpaceIfNeeded(parameters, out_stream, space);
if( IsCurrentParam(parameters) )
{
size_t iterator_value = space_wrapper.get_space_iterator_value(model_wrapper_space_table_index);
if( iterator_value < table->size() )
{
(*table)[iterator_value]->serialize_to_string(out_stream);
}
}
} }
} }
@ -1542,6 +1524,7 @@ bool Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::CallSpace
pt::Space * space = space_wrapper->get_space(); pt::Space * space = space_wrapper->get_space();
last_res = false; last_res = false;
size_t field_index = find_helper.field_index; size_t field_index = find_helper.field_index;
size_t model_wrapper_space_table_index = 0;
/* /*
* *
@ -1570,8 +1553,6 @@ bool Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::CallSpace
else else
if( space->is_table() ) if( space->is_table() )
{ {
size_t model_wrapper_space_table_index = field_index - find_helper.field_index;
if( model_wrapper_space_table_index < space_wrapper->space_indices_table_size() ) if( model_wrapper_space_table_index < space_wrapper->space_indices_table_size() )
{ {
if( is_last_field ) if( is_last_field )
@ -1582,7 +1563,17 @@ bool Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::CallSpace
else else
{ {
space = CallSpaceTableForMiddleField(*space_wrapper, *find_helper.fun_name, fields, field_index, space, model_wrapper_space_table_index); space = CallSpaceTableForMiddleField(*space_wrapper, *find_helper.fun_name, fields, field_index, space, model_wrapper_space_table_index);
// don't increment field_index // increment field_index only if next_field is 'this' and space is not an object
if( space && !space->is_object() )
{
std::wstring & next_field = fields[field_index];
if( next_field == L"this" )
{
field_index += 1;
}
}
} }
} }
else else
@ -1612,6 +1603,8 @@ bool Generator<StreamType, is_pikotools_stream, is_autoescape_stream>::CallSpace
space = nullptr; space = nullptr;
} }
} }
model_wrapper_space_table_index += 1;
} }
return space != nullptr; return space != nullptr;