mirror of
https://github.com/hanzo-fi/numscript.git
synced 2026-10-30 20:54:52 +00:00
68 lines
1.4 KiB
Go
68 lines
1.4 KiB
Go
package builder
|
|
|
|
type Source render
|
|
|
|
type Overdraft render
|
|
|
|
func UnboundedOverdraft() Overdraft {
|
|
return func(env *env, w int) {
|
|
env.builder.WriteString(" allowing unbounded overdraft")
|
|
}
|
|
}
|
|
|
|
func BoundedOverdraft(amt Expression[ExprTypeMonetary]) Overdraft {
|
|
return func(env *env, w int) {
|
|
env.builder.WriteString(" allowing overdraft up to ")
|
|
amt(env, w)
|
|
}
|
|
}
|
|
|
|
func SrcAccount(expr Expression[ExprTypeAccount]) Source {
|
|
return Source(expr)
|
|
}
|
|
|
|
func SrcAccountOverdraft(
|
|
expr Expression[ExprTypeAccount],
|
|
overdraft Overdraft,
|
|
) Source {
|
|
return func(env *env, w int) {
|
|
SrcAccount(expr)(env, w)
|
|
overdraft(env, w)
|
|
}
|
|
}
|
|
|
|
func SrcColored(
|
|
accountExpr Expression[ExprTypeAccount],
|
|
colorExpr Expression[ExprTypeString],
|
|
) Source {
|
|
return func(env *env, w int) {
|
|
accountExpr(env, w)
|
|
env.builder.WriteString(" \\ ")
|
|
colorExpr(env, w)
|
|
}
|
|
}
|
|
|
|
func SrcColoredOverdraft(
|
|
accountExpr Expression[ExprTypeAccount],
|
|
colorExpr Expression[ExprTypeString],
|
|
overdraft Overdraft,
|
|
) Source {
|
|
return func(env *env, w int) {
|
|
SrcColored(accountExpr, colorExpr)(env, w)
|
|
overdraft(env, w)
|
|
}
|
|
}
|
|
|
|
func SrcInorder(sources ...Source) Source {
|
|
return func(env *env, w int) {
|
|
env.builder.WriteString("{\n")
|
|
for _, src := range sources {
|
|
writeIndentation(env, w+1)
|
|
src(env, w+1)
|
|
env.builder.WriteByte('\n')
|
|
}
|
|
writeIndentation(env, w)
|
|
env.builder.WriteByte('}')
|
|
}
|
|
}
|