add two new ezc statements: [if-def ...] and [if-not-def ...]

[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
This commit is contained in:
2021-07-02 20:23:20 +02:00
parent 849b3e9ecc
commit 995cccdace
5 changed files with 333 additions and 128 deletions

View File

@@ -745,6 +745,35 @@ void PatternParser::ReadDirectiveIf(Item & item)
}
void PatternParser::ReadDirectiveIfDef(Item & item)
{
item.type = Item::item_if_def;
if( ReadFunction(item) )
{
if( !item.function.is_function || item.function.parameters.size() > 0 )
{
item.type = Item::item_err;
item.function.Clear();
}
}
}
void PatternParser::ReadDirectiveIfNotDef(Item & item)
{
item.type = Item::item_if_not_def;
if( ReadFunction(item) )
{
if( !item.function.is_function || item.function.parameters.size() > 0 )
{
item.type = Item::item_err;
item.function.Clear();
}
}
}
void PatternParser::ReadDirectiveEnd(Item & item)
{
@@ -991,6 +1020,8 @@ std::wstring name;
ReadName(name);
if ( name == L"if" ) ReadDirectiveIf(item);
else if( name == L"if-def" ) ReadDirectiveIfDef(item);
else if( name == L"if-not-def" )ReadDirectiveIfNotDef(item);
else if( name == L"end" ) ReadDirectiveEnd(item);
else if( name == L"else" ) ReadDirectiveElse(item);
else if( name == L"for" ) ReadDirectiveFor(item);
@@ -1325,7 +1356,7 @@ bool PatternParser::CreateTree(Item & item)
if( item.type == Item::item_container )
CreateTreeContainer(item);
if( item.type == Item::item_if )
if( item.type == Item::item_if || item.type == Item::item_if_def || item.type == Item::item_if_not_def )
CreateTreeReadIf(item); // reads one child or two if [else] statement is present
if( item.type == Item::item_for ||