fix: fixed yet another subst problem.
This commit is contained in:
parent
02a22eaea1
commit
485235996f
8 changed files with 81 additions and 20 deletions
29
main.go
29
main.go
|
@ -32,9 +32,21 @@ func (pp *Preprocessor) Process(
|
||||||
data []byte,
|
data []byte,
|
||||||
) ([]byte, error) {
|
) ([]byte, error) {
|
||||||
var b bytes.Buffer
|
var b bytes.Buffer
|
||||||
preCodes := [][]byte{}
|
preCode := []byte(nil)
|
||||||
texts := [][]byte{}
|
texts := [][]byte{}
|
||||||
codes := [][]byte{}
|
codes := [][]byte{}
|
||||||
|
pref := append(pp.tags[0], pp.preTag)
|
||||||
|
if bytes.HasPrefix(data, pref) {
|
||||||
|
idxEnd := bytes.Index(data, pp.tags[1])
|
||||||
|
if idxEnd < 0 {
|
||||||
|
return nil, UnexpectedError{
|
||||||
|
What: "pre-code start tag",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
preCode = data[len(pref):idxEnd]
|
||||||
|
texts = append(texts, []byte{})
|
||||||
|
data = data[idxEnd+len(pp.tags[1]):]
|
||||||
|
}
|
||||||
for {
|
for {
|
||||||
idxStart := bytes.Index(data, pp.tags[0])
|
idxStart := bytes.Index(data, pp.tags[0])
|
||||||
idxEnd := bytes.Index(data, pp.tags[1])
|
idxEnd := bytes.Index(data, pp.tags[1])
|
||||||
|
@ -57,35 +69,32 @@ func (pp *Preprocessor) Process(
|
||||||
texts = append(texts, text)
|
texts = append(texts, text)
|
||||||
|
|
||||||
code := data[idxStart+len(pp.tags[0]):idxEnd]
|
code := data[idxStart+len(pp.tags[0]):idxEnd]
|
||||||
if len(code) > 0 && code[0] == pp.preTag {
|
|
||||||
code = code[1:]
|
|
||||||
preCodes = append(preCodes, code)
|
|
||||||
} else {
|
|
||||||
codes = append(codes, code)
|
codes = append(codes, code)
|
||||||
}
|
|
||||||
|
|
||||||
data = data[idxEnd + len(pp.tags[1]):]
|
data = data[idxEnd + len(pp.tags[1]):]
|
||||||
/*if len(data) > 0 && data[0] == '\n' {
|
/*if len(data) > 0 && data[0] == '\n' {
|
||||||
data = data[1:]
|
data = data[1:]
|
||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
codeRets, err := pp.tengo.Eval(
|
codeRets, err := pp.tengo.Eval(
|
||||||
ctx,
|
ctx,
|
||||||
recompile,
|
recompile,
|
||||||
filePath,
|
filePath,
|
||||||
preCodes,
|
preCode,
|
||||||
codes,
|
codes,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, codeRet := range codeRets {
|
for i := range codeRets {
|
||||||
b.Write(texts[i])
|
b.Write(texts[i])
|
||||||
b.Write(codeRet)
|
b.Write(codeRets[i])
|
||||||
}
|
}
|
||||||
|
if len(texts) > len(codeRets) {
|
||||||
b.Write(texts[len(codeRets)])
|
b.Write(texts[len(codeRets)])
|
||||||
|
}
|
||||||
|
|
||||||
return b.Bytes(), nil
|
return b.Bytes(), nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
fmt := import("fmt")
|
fmt := import("fmt")
|
||||||
paths := import("paths")
|
paths := import("paths")
|
||||||
htmExt := func(c){
|
htmExt := func(c){
|
||||||
|
if c.is_compo {
|
||||||
|
return
|
||||||
|
}
|
||||||
c.pp.print(`
|
c.pp.print(`
|
||||||
</body></html>
|
</body></html>
|
||||||
`)
|
`)
|
||||||
|
|
|
@ -2,9 +2,14 @@ fmt := import("fmt")
|
||||||
paths := import("paths")
|
paths := import("paths")
|
||||||
|
|
||||||
htmExt := func(c){
|
htmExt := func(c){
|
||||||
|
if c.is_compo {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.println("shit")
|
||||||
c.pp.print(`
|
c.pp.print(`
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html><head>
|
<html><head>
|
||||||
|
<script src="https://unpkg.com/htmx.org@1.9.2"></script>
|
||||||
`)
|
`)
|
||||||
if c.title {
|
if c.title {
|
||||||
c.pp.printf(`<title>%s</title>`, c.title)
|
c.pp.printf(`<title>%s</title>`, c.title)
|
||||||
|
@ -24,7 +29,7 @@ export func(c){
|
||||||
ext := paths.ext(url_path)
|
ext := paths.ext(url_path)
|
||||||
|
|
||||||
cl := exts[ext]
|
cl := exts[ext]
|
||||||
if !is_undefined(cl) {
|
if cl {
|
||||||
cl(c)
|
cl(c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
20
src/contact/edit.htm.tpp
Normal file
20
src/contact/edit.htm.tpp
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{{#
|
||||||
|
context.is_compo = true
|
||||||
|
}}
|
||||||
|
|
||||||
|
<form hx-put="/contact/1" hx-target="this" hx-swap="outerHTML">
|
||||||
|
<div>
|
||||||
|
<label>First Name</label>
|
||||||
|
<input type="text" name="firstName" value="Joe">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Last Name</label>
|
||||||
|
<input type="text" name="lastName" value="Blow">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Email Address</label>
|
||||||
|
<input type="email" name="email" value="joe@blow.com">
|
||||||
|
</div>
|
||||||
|
<button class="btn">Submit</button>
|
||||||
|
<button class="btn" hx-get="/contact/view.htm">Cancel</button>
|
||||||
|
</form>
|
13
src/contact/view.htm.tpp
Normal file
13
src/contact/view.htm.tpp
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{{#
|
||||||
|
//context.is_compo = true
|
||||||
|
}}
|
||||||
|
|
||||||
|
<div hx-target="this" hx-swap="outerHTML">
|
||||||
|
<div><label>First Name</label>: Joe</div>
|
||||||
|
<div><label>Last Name</label>: Blow</div>
|
||||||
|
<div><label>Email</label>: joe@blow.com</div>
|
||||||
|
<button hx-get="/contact/edit.htm" class="btn btn-primary">
|
||||||
|
Click To Edit
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
context.title = "The example.site main page"
|
context.title = "The example.site main page"
|
||||||
}}
|
}}
|
||||||
|
|
||||||
<h1>This is the example page for the THT</h1>
|
|
||||||
|
|
||||||
|
<h1>This is the example page for the THT</h1>
|
||||||
{{
|
{{
|
||||||
/*if !context.global.int {
|
/*if !context.global.int {
|
||||||
context.global.int = 0
|
context.global.int = 0
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{{
|
{{#
|
||||||
context.title = "Some page title"
|
context.title = "Let's celebrate and suck, SOME DICK"
|
||||||
}}
|
}}
|
||||||
|
|
||||||
{{markdown(`
|
{{markdown(`
|
||||||
|
|
19
tengo.go
19
tengo.go
|
@ -48,7 +48,7 @@ func (pp *Tengo) Eval(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
recompile bool,
|
recompile bool,
|
||||||
filePath string,
|
filePath string,
|
||||||
preCodes [][]byte,
|
preCode []byte,
|
||||||
codes [][]byte,
|
codes [][]byte,
|
||||||
) ([][]byte, error) {
|
) ([][]byte, error) {
|
||||||
var fullCodeBuf bytes.Buffer
|
var fullCodeBuf bytes.Buffer
|
||||||
|
@ -81,17 +81,28 @@ func (pp *Tengo) Eval(
|
||||||
|
|
||||||
|
|
||||||
fmt.Fprint(&fullCodeBuf, retHead)
|
fmt.Fprint(&fullCodeBuf, retHead)
|
||||||
for _, preCode := range preCodes {
|
if preCode != nil {
|
||||||
fmt.Fprintln(&fullCodeBuf, "\n" + string(preCode) + retSeparator)
|
fmt.Fprintln(
|
||||||
|
&fullCodeBuf,
|
||||||
|
string(preCode)+"\n",
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if pp.preCode != nil {
|
if pp.preCode != nil {
|
||||||
fullCodeBuf.Write(pp.preCode(ctx))
|
fullCodeBuf.Write(pp.preCode(ctx))
|
||||||
|
fullCodeBuf.Write([]byte(retSeparator))
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, code := range codes {
|
for _, code := range codes {
|
||||||
fmt.Fprintln(&fullCodeBuf, "\n" + string(code) + retSeparator)
|
fmt.Fprintln(
|
||||||
|
&fullCodeBuf,
|
||||||
|
"\n" + string(code) + retSeparator,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if pp.postCode != nil {
|
if pp.postCode != nil {
|
||||||
fullCodeBuf.Write(pp.postCode(ctx))
|
fullCodeBuf.Write(pp.postCode(ctx))
|
||||||
|
fullCodeBuf.Write([]byte(retSeparator))
|
||||||
}
|
}
|
||||||
|
|
||||||
script := tengo.NewScript(fullCodeBuf.Bytes())
|
script := tengo.NewScript(fullCodeBuf.Bytes())
|
||||||
|
|
Loading…
Reference in a new issue