added: directive [is-no ...] negative to [is ...]
git-svn-id: svn://ttmath.org/publicrep/ezc/trunk@290 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
parent
e71c213ad1
commit
31156d33f3
26
src/ezc.cpp
26
src/ezc.cpp
|
@ -454,6 +454,15 @@ void Pattern::ReadDirectiveIs(Item & item)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Pattern::ReadDirectiveIsno(Item & item)
|
||||||
|
{
|
||||||
|
ReadDirectiveIs(item);
|
||||||
|
|
||||||
|
if( item.type == Item::item_is )
|
||||||
|
item.type = Item::item_isno;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Pattern::ReadDirectiveIfindex(Item & item)
|
void Pattern::ReadDirectiveIfindex(Item & item)
|
||||||
{
|
{
|
||||||
item.type = Item::item_ifindex;
|
item.type = Item::item_ifindex;
|
||||||
|
@ -547,6 +556,9 @@ void Pattern::CreateTreeReadItemDirective(Item & item)
|
||||||
if( directive.name == "is" )
|
if( directive.name == "is" )
|
||||||
ReadDirectiveIs(item);
|
ReadDirectiveIs(item);
|
||||||
else
|
else
|
||||||
|
if( directive.name == "is-no" )
|
||||||
|
ReadDirectiveIsno(item);
|
||||||
|
else
|
||||||
if( directive.name == "if-index" )
|
if( directive.name == "if-index" )
|
||||||
ReadDirectiveIfindex(item);
|
ReadDirectiveIfindex(item);
|
||||||
else
|
else
|
||||||
|
@ -676,7 +688,8 @@ void Pattern::CreateTree(Item & item)
|
||||||
pitem->type == Item::item_ifno ||
|
pitem->type == Item::item_ifno ||
|
||||||
pitem->type == Item::item_ifone ||
|
pitem->type == Item::item_ifone ||
|
||||||
pitem->type == Item::item_ifindex ||
|
pitem->type == Item::item_ifindex ||
|
||||||
pitem->type == Item::item_is )
|
pitem->type == Item::item_is ||
|
||||||
|
pitem->type == Item::item_isno )
|
||||||
CreateTreeReadIf(*pitem);
|
CreateTreeReadIf(*pitem);
|
||||||
|
|
||||||
if( pitem->type == Item::item_for )
|
if( pitem->type == Item::item_for )
|
||||||
|
@ -1146,7 +1159,9 @@ return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Generator::MakeTextIs(Pattern::Item & item)
|
// if 'isno' is true that means we're generating tag [is-no ...]
|
||||||
|
// default: false
|
||||||
|
void Generator::MakeTextIs(Pattern::Item & item, bool isno)
|
||||||
{
|
{
|
||||||
if( item.directives.size() != 2 )
|
if( item.directives.size() != 2 )
|
||||||
return;
|
return;
|
||||||
|
@ -1177,11 +1192,15 @@ void Generator::MakeTextIs(Pattern::Item & item)
|
||||||
// both directive are not text
|
// both directive are not text
|
||||||
MakeTextIsFunFun(item.directives[0].name, item.directives[1].name, result);
|
MakeTextIsFunFun(item.directives[0].name, item.directives[1].name, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( isno )
|
||||||
|
result = !result;
|
||||||
|
|
||||||
MakeTextIf_go(item, result);
|
MakeTextIf_go(item, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool Generator::MakeTextIfindexnumber(Pattern::Item & item, Functions::Function * function, bool & result)
|
bool Generator::MakeTextIfindexnumber(Pattern::Item & item, Functions::Function * function, bool & result)
|
||||||
{
|
{
|
||||||
if( item.directives.size() != 2 )
|
if( item.directives.size() != 2 )
|
||||||
|
@ -1362,6 +1381,9 @@ void Generator::MakeText(Pattern::Item & item)
|
||||||
case Pattern::Item::item_is:
|
case Pattern::Item::item_is:
|
||||||
MakeTextIs(item);
|
MakeTextIs(item);
|
||||||
break;
|
break;
|
||||||
|
case Pattern::Item::item_isno:
|
||||||
|
MakeTextIs(item, true);
|
||||||
|
break;
|
||||||
case Pattern::Item::item_for:
|
case Pattern::Item::item_for:
|
||||||
MakeTextFor(item);
|
MakeTextFor(item);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -80,7 +80,7 @@ public:
|
||||||
{
|
{
|
||||||
item_none, item_container, item_text, item_ifany, item_ifno, item_for,
|
item_none, item_container, item_text, item_ifany, item_ifno, item_for,
|
||||||
item_else, item_end, item_err, item_normal, item_ifindex,
|
item_else, item_end, item_err, item_normal, item_ifindex,
|
||||||
item_include, item_is, item_ifone, item_comment, item_def
|
item_include, item_is, item_isno, item_ifone, item_comment, item_def
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Directive
|
struct Directive
|
||||||
|
@ -146,6 +146,7 @@ private:
|
||||||
void ReadDirectiveIfno(Item & item);
|
void ReadDirectiveIfno(Item & item);
|
||||||
void ReadDirectiveIfone(Item & item);
|
void ReadDirectiveIfone(Item & item);
|
||||||
void ReadDirectiveIs(Item & item);
|
void ReadDirectiveIs(Item & item);
|
||||||
|
void ReadDirectiveIsno(Item & item);
|
||||||
void ReadDirectiveIfindex(Item & item);
|
void ReadDirectiveIfindex(Item & item);
|
||||||
void ReadDirectiveFor(Item & item);
|
void ReadDirectiveFor(Item & item);
|
||||||
void ReadDirectiveComment(Item & item);
|
void ReadDirectiveComment(Item & item);
|
||||||
|
@ -271,7 +272,7 @@ private:
|
||||||
void MakeTextNormal(Pattern::Item & item);
|
void MakeTextNormal(Pattern::Item & item);
|
||||||
bool MakeTextIsFunText(const std::string & fun_name, const std::string & text, bool & res);
|
bool MakeTextIsFunText(const std::string & fun_name, const std::string & text, bool & res);
|
||||||
bool MakeTextIsFunFun(const std::string & fun_name1, const std::string & fun_name2, bool & res);
|
bool MakeTextIsFunFun(const std::string & fun_name1, const std::string & fun_name2, bool & res);
|
||||||
void MakeTextIs(Pattern::Item & item);
|
void MakeTextIs(Pattern::Item & item, bool isno = false);
|
||||||
void MakeTextDefine(Pattern::Item & item);
|
void MakeTextDefine(Pattern::Item & item);
|
||||||
void MakeText(Pattern::Item & item);
|
void MakeText(Pattern::Item & item);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue