Compare commits

...

2 Commits

Author SHA1 Message Date
f1a998c25b Update example bulma version 2024-06-06 18:52:26 -07:00
167f448ae1 Improve ternary expression parsing definition 2024-06-06 18:52:14 -07:00
5 changed files with 482 additions and 468 deletions

View File

@ -1,4 +1,4 @@
<head>
<title>#(title)</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.4/css/bulma.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@1.0.0/css/bulma.min.css">
</head>

View File

@ -1,7 +1,7 @@
<html>
<head>
<title>#(title)</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.4/css/bulma.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@1.0.0/css/bulma.min.css">
</head>
<body>
<nav class="navbar is-dark">

View File

@ -1,8 +1,10 @@
<html>
<head>
<head>
<title>#(page.Title)</title>
</head>
<body>
</head>
<body>
#for(i, user in users):
<div>
<h2>#(toLower(user.Name))</h2>
@ -12,5 +14,6 @@
<p>Registered: #(user.RegisteredTime.Format("01-02-2006"))</p>
</div>
#!for
</body>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -83,8 +83,21 @@ ExprTag = '#' ignoreErr:'?'? '(' item:Expr ')' {
}, nil
}
Expr = Ternary / Assignment / LogicalExpr
Assignable = Ternary / LogicalExpr
Expr = Assignment / TernaryExpr
Assignable = TernaryExpr
TernaryExpr = _ cond:LogicalExpr vals:(_ '?' _ Value _ ':' _ Value)? {
if vals == nil {
return cond, nil
} else {
s := toAnySlice(vals)
return ast.Ternary{
Condition: cond.(ast.Node),
IfTrue: s[3].(ast.Node),
Else: s[7].(ast.Node),
}, nil
}
}
LogicalExpr = _ first:ComparisonExpr rest:(_ LogicalOp _ ComparisonExpr)* _ {
return toExpr(c, first, rest), nil
@ -174,14 +187,6 @@ Assignment = name:Ident _ '=' _ value:Assignable {
}, nil
}
Ternary = cond:Assignable _ '?' _ ifTrue:Value _ ':' _ elseVal:Value {
return ast.Ternary{
Condition: cond.(ast.Node),
IfTrue: ifTrue.(ast.Node),
Else: elseVal.(ast.Node),
}, nil
}
MethodCall = value:Value '.' name:Ident params:ParamList {
return ast.MethodCall{
Value: value.(ast.Node),