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
changed: added one new parameter to Outstreams class: template<class StreamType, bool is_pikotools_stream = false> class OutStreams
removed macros: EZC_GENERATOR_HAS_PT_STREAM, EZC_GENERATOR_HAS_WINIX_STREAM
[if-def my_function] returns true if my_function is defined somewhere (either a model, model container, space, date, block, function or variable)
add support for "noescape" or "raw" parameters to Space fields
fixed: CallWrapper() didn't return a status if a model/space/date/container was found
[ezc clear_all_white_nodes "yes"]...[end] - will clear a text node if the text consists of only white characters
[ezc trim_text_nodes "yes"]...[end] - will trim text nodes (removes white characters at the beginning and at the end)
"yes" is assumed by default if not present, also "no" can be specified to change the behavior
- "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)
added macro EZC_GENERATOR_HAS_WINIX_STREAM which is used by Generator::CopyStream(pt::WTextStream & src_stream, StreamType & dst_stream, bool should_escape)
if this macro is defined then Generator is able to escape output stream
- added method SetLogger(pt::Log & logger)
- removed SetCommentary(...) methods
- added logs when a model is not found
PatternParser uses only pt::Log
- removed SetCommentary(...) methods
now we are using morm::ModelWrapper... classes as wrappers on models and list/vector of models
and Models class is using these wrappers
this allows us to iterate through list/vectors in [for...] statements
- [def] is used to define a variable (like before)
but if we assign a string such as [def var "string"] the string is evaluated to bool
in a different way: empty string is false, not empty string is true
- added [def?] statement - similar like [def] but define a variable only if such
a variable is not already defined
- added [let] statement - similar like [def] but with lazy evaluation (it is an alias to a function)
if it is called to assign a string e.g. [let var "string"] then this has the
same meaning like [def] - an alias is only created when we assign a function e.g. [let var my_function]
both [def] and [let] are using the same Vars object
- added [let?] - make an alias but only if such a variable is not already defined
- a std::map of variables moved outside of Generator
added method void SetVariables(Vars & variables);
- fixed: a result status was not correctly propagated when evaluating [def] statements,
this was in Call(...) function: last_res from variables was set in Find()
but later was overwritten by Call(...) called for parameters (recursively)