Warn about breaking changes
This commit is contained in:
@ -3,6 +3,8 @@ Tesses Cross Language
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
> :warning: **NOT READY FOR PRODUCTION (THERE WILL BE BREAKING CHANGES)**
|
||||||
|
|
||||||
## What is required to build this project
|
## What is required to build this project
|
||||||
- [TessesFramework](https://onedev.site.tesses.net/tesses-framework) (if you turn CROSSLANG_FETCHCONTENT off otherwise it will be grabbed automaticly)
|
- [TessesFramework](https://onedev.site.tesses.net/tesses-framework) (if you turn CROSSLANG_FETCHCONTENT off otherwise it will be grabbed automaticly)
|
||||||
- CMake
|
- CMake
|
||||||
|
|||||||
@ -144,21 +144,21 @@ namespace Tesses::CrossLang
|
|||||||
nodes.push_back(AdvancedSyntaxNode::Create(CompoundAssignExpression,true,{AdvancedSyntaxNode::Create(AddExpression,true,{AdvancedSyntaxNode::Create(GetVariableExpression,true,{var}),Tesses::Framework::Http::HttpUtils::HtmlEncode(this->tokens[i].whiteSpaceCharsBefore)})}));
|
nodes.push_back(AdvancedSyntaxNode::Create(CompoundAssignExpression,true,{AdvancedSyntaxNode::Create(AddExpression,true,{AdvancedSyntaxNode::Create(GetVariableExpression,true,{var}),Tesses::Framework::Http::HttpUtils::HtmlEncode(this->tokens[i].whiteSpaceCharsBefore)})}));
|
||||||
|
|
||||||
this->i++;
|
this->i++;
|
||||||
if(this->IsIdentifier("else",false) || this->IsIdentifier("elif",false))
|
|
||||||
{
|
|
||||||
this->i--;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this->IsSymbol("/"))
|
if(this->IsSymbol("/"))
|
||||||
{
|
{
|
||||||
|
if(this->IsIdentifier("if",false) && tagName == "if")
|
||||||
|
{
|
||||||
|
this->i-=2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
if(!this->IsIdentifier(tagName))
|
if(!this->IsIdentifier(tagName))
|
||||||
{
|
{
|
||||||
//error
|
//error
|
||||||
|
|
||||||
}
|
}
|
||||||
this->EnsureSymbol(">");
|
this->EnsureSymbol(">");
|
||||||
if(tagName != "if" && tagName != "for" && tagName != "while" && tagName != "do" && tagName != "each")
|
if(tagName != "if" && tagName != "true" && tagName != "false" && tagName != "for" && tagName != "while" && tagName != "do" && tagName != "each")
|
||||||
{
|
{
|
||||||
std::string myVal = "</";
|
std::string myVal = "</";
|
||||||
myVal += tagName;
|
myVal += tagName;
|
||||||
@ -232,51 +232,7 @@ namespace Tesses::CrossLang
|
|||||||
std::string tagName = this->tokens[this->i++].text;
|
std::string tagName = this->tokens[this->i++].text;
|
||||||
|
|
||||||
|
|
||||||
if(tagName == "if")
|
if(tagName == "raw")
|
||||||
{
|
|
||||||
std::function<SyntaxNode()> readIf;
|
|
||||||
readIf = [this,&parseFn,var,&readIf]()->SyntaxNode {
|
|
||||||
EnsureSymbol("(");
|
|
||||||
auto expr = ParseExpression();
|
|
||||||
EnsureSymbol(")");
|
|
||||||
EnsureSymbol(">");
|
|
||||||
|
|
||||||
std::vector<SyntaxNode> trueNodes;
|
|
||||||
|
|
||||||
SyntaxNode falseNode=nullptr;
|
|
||||||
|
|
||||||
parseFn(trueNodes,"if");
|
|
||||||
|
|
||||||
if(this->IsSymbol("<",false) && this->i + 1 < this->tokens.size())
|
|
||||||
{
|
|
||||||
auto tkn = this->tokens[i+1];
|
|
||||||
if(tkn.type == LexTokenType::Identifier && tkn.text == "else")
|
|
||||||
{
|
|
||||||
i += 2;
|
|
||||||
EnsureSymbol(">");
|
|
||||||
std::vector<SyntaxNode> falseNodes;
|
|
||||||
parseFn(falseNodes,"if");
|
|
||||||
falseNode = AdvancedSyntaxNode::Create(ScopeNode,false,falseNodes);
|
|
||||||
}
|
|
||||||
else if(tkn.type == LexTokenType::Identifier && tkn.text == "elif")
|
|
||||||
{
|
|
||||||
|
|
||||||
i += 2;
|
|
||||||
falseNode = readIf();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return AdvancedSyntaxNode::Create(IfStatement,false,{
|
|
||||||
expr,
|
|
||||||
AdvancedSyntaxNode::Create(ScopeNode,false,trueNodes),
|
|
||||||
falseNode
|
|
||||||
});
|
|
||||||
} ;
|
|
||||||
nodes.push_back(readIf());
|
|
||||||
}
|
|
||||||
else if(tagName == "raw")
|
|
||||||
{
|
{
|
||||||
EnsureSymbol("(");
|
EnsureSymbol("(");
|
||||||
SyntaxNode expr = ParseExpression();
|
SyntaxNode expr = ParseExpression();
|
||||||
@ -297,6 +253,43 @@ namespace Tesses::CrossLang
|
|||||||
})
|
})
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
else if(tagName == "if")
|
||||||
|
{
|
||||||
|
EnsureSymbol("(");
|
||||||
|
SyntaxNode expr = ParseExpression();
|
||||||
|
SyntaxNode truth = nullptr;
|
||||||
|
SyntaxNode falsey = nullptr;
|
||||||
|
|
||||||
|
EnsureSymbol(")");
|
||||||
|
EnsureSymbol(">");
|
||||||
|
|
||||||
|
while(this->IsSymbol("<"))
|
||||||
|
{
|
||||||
|
if(this->IsSymbol("/"))
|
||||||
|
{
|
||||||
|
if(!this->IsIdentifier("if")) { this->i -= 3;}
|
||||||
|
this->EnsureSymbol(">");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if(this->IsIdentifier("true"))
|
||||||
|
{
|
||||||
|
this->EnsureSymbol(">");
|
||||||
|
|
||||||
|
std::vector<SyntaxNode> _nodes;
|
||||||
|
parseFn(_nodes,"true");
|
||||||
|
truth = AdvancedSyntaxNode::Create(ScopeNode,false,_nodes);
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(this->IsIdentifier("false"))
|
||||||
|
{
|
||||||
|
this->EnsureSymbol(">");
|
||||||
|
std::vector<SyntaxNode> _nodes;
|
||||||
|
parseFn(_nodes,"false");
|
||||||
|
falsey = AdvancedSyntaxNode::Create(ScopeNode,false,_nodes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
nodes.push_back(AdvancedSyntaxNode::Create(IfStatement,false,{expr,truth,falsey}));
|
||||||
|
}
|
||||||
else if(tagName == "while")
|
else if(tagName == "while")
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@ -2109,6 +2109,54 @@ namespace Tesses::CrossLang {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(key == "EndsWith")
|
||||||
|
{
|
||||||
|
std::string v;
|
||||||
|
if(GetArgument(args,0,v))
|
||||||
|
{
|
||||||
|
if(str.size() < v.size()) {
|
||||||
|
cse.back()->Push(gc,false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t _end = str.size()-v.size();
|
||||||
|
for(size_t i = 0; i < v.size(); i++)
|
||||||
|
{
|
||||||
|
if(v[i] != str[i+_end])
|
||||||
|
{
|
||||||
|
cse.back()->Push(gc,false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cse.back()->Push(gc,true);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
cse.back()->Push(gc,false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(key == "StartsWith")
|
||||||
|
{
|
||||||
|
std::string v;
|
||||||
|
if(GetArgument(args,0,v))
|
||||||
|
{
|
||||||
|
if(str.size() < v.size()) {
|
||||||
|
cse.back()->Push(gc,false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for(size_t i = 0; i < v.size(); i++)
|
||||||
|
{
|
||||||
|
if(v[i] != str[i])
|
||||||
|
{
|
||||||
|
cse.back()->Push(gc,false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cse.back()->Push(gc,true);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
cse.back()->Push(gc,false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if(key == "Escape")
|
if(key == "Escape")
|
||||||
{
|
{
|
||||||
bool quote;
|
bool quote;
|
||||||
|
|||||||
Reference in New Issue
Block a user