mirror of
https://shylinux.com/x/ContextOS
synced 2025-04-25 16:58:06 +08:00
add wiki.show
This commit is contained in:
parent
f153effe97
commit
8646b4071f
1
Makefile
1
Makefile
@ -9,6 +9,7 @@ install:prepare
|
|||||||
@bin/boot.sh restart && date
|
@bin/boot.sh restart && date
|
||||||
|
|
||||||
prepare:
|
prepare:
|
||||||
|
@go get github.com/shylinux/toolkits
|
||||||
@go get github.com/nsf/termbox-go
|
@go get github.com/nsf/termbox-go
|
||||||
@go get github.com/gorilla/websocket
|
@go get github.com/gorilla/websocket
|
||||||
@go get github.com/go-sql-driver/mysql
|
@go get github.com/go-sql-driver/mysql
|
||||||
|
@ -2,6 +2,7 @@ package wiki
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/gomarkdown/markdown"
|
"github.com/gomarkdown/markdown"
|
||||||
|
mis "github.com/shylinux/toolkits"
|
||||||
|
|
||||||
"contexts/ctx"
|
"contexts/ctx"
|
||||||
"contexts/web"
|
"contexts/web"
|
||||||
@ -25,15 +26,64 @@ type opt struct {
|
|||||||
margin int
|
margin int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func show(m *ctx.Message, str string) (res []string) {
|
||||||
|
miss := []int{}
|
||||||
|
list := mis.Split(str, "\n")
|
||||||
|
for _, line := range list {
|
||||||
|
dep := 0
|
||||||
|
loop:
|
||||||
|
for _, v := range []rune(line) {
|
||||||
|
switch v {
|
||||||
|
case ' ':
|
||||||
|
dep++
|
||||||
|
case '\t':
|
||||||
|
dep += 4
|
||||||
|
default:
|
||||||
|
break loop
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(miss) > 0 {
|
||||||
|
if miss[len(miss)-1] > dep {
|
||||||
|
for i := len(miss) - 1; i >= 0; i-- {
|
||||||
|
if miss[i] < dep {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
m.Log("show", "pop %d %v %v", dep, mis.Format(miss), line)
|
||||||
|
res = append(res, "]", "}")
|
||||||
|
miss = miss[:i]
|
||||||
|
}
|
||||||
|
m.Log("show", "push %d %v %v", dep, mis.Format(miss), line)
|
||||||
|
miss = append(miss, dep)
|
||||||
|
} else if miss[len(miss)-1] < dep {
|
||||||
|
m.Log("show", "push %d %v %v", dep, mis.Format(miss), line)
|
||||||
|
miss = append(miss, dep)
|
||||||
|
} else {
|
||||||
|
res = append(res, "]", "}")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
m.Log("show", "push %d %v", dep, mis.Format(miss))
|
||||||
|
miss = append(miss, dep)
|
||||||
|
}
|
||||||
|
|
||||||
|
word := mis.Split(line)
|
||||||
|
res = append(res, "{", "meta", "{", "text")
|
||||||
|
res = append(res, word...)
|
||||||
|
res = append(res, "}", "list", "[")
|
||||||
|
|
||||||
|
}
|
||||||
|
m.Log("haha", "%v %v", str, res)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func size(m *ctx.Message, root map[string]interface{}, depth int, width map[int]int) int {
|
func size(m *ctx.Message, root map[string]interface{}, depth int, width map[int]int) int {
|
||||||
text := kit.Format(kit.Chain(root, "meta.text"))
|
text := kit.Format(kit.Chain(root, "meta.text"))
|
||||||
if len(text) > width[depth] {
|
if len(text) > width[depth] {
|
||||||
width[depth] = len(text)
|
width[depth] = len(text)
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, ok := root["list"]; !ok {
|
if list, ok := root["list"].([]interface{}); !ok || len(list) == 0 {
|
||||||
kit.Chain(root, "meta.height", 1)
|
kit.Chain(root, "meta.height", 1)
|
||||||
m.Log("fuck", "hi %v %d", kit.Chain(root, "meta.text"), 1)
|
m.Log("fuck", "size %v %d", kit.Chain(root, "meta.text"), 1)
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,18 +92,19 @@ func size(m *ctx.Message, root map[string]interface{}, depth int, width map[int]
|
|||||||
height += size(m, value, depth+1, width)
|
height += size(m, value, depth+1, width)
|
||||||
})
|
})
|
||||||
kit.Chain(root, "meta.height", height)
|
kit.Chain(root, "meta.height", height)
|
||||||
m.Log("fuck", "hi %v %d", kit.Chain(root, "meta.text"), height)
|
m.Log("fuck", "size %v %d", kit.Chain(root, "meta.text"), height)
|
||||||
return height
|
return height
|
||||||
}
|
}
|
||||||
func draw(m *ctx.Message, root map[string]interface{}, depth int, width map[int]int, x int, y int, opt *opt) {
|
func draw(m *ctx.Message, root map[string]interface{}, depth int, width map[int]int, x int, y int, opt *opt) {
|
||||||
m.Log("fuck", "hi %v %d", kit.Chain(root, "meta.text"), y)
|
meta := root["meta"].(map[string]interface{})
|
||||||
height := kit.Int(kit.Chain(root, "meta.height"))
|
m.Log("fuck", "draw %v %d", meta["text"], y)
|
||||||
|
height := kit.Int(meta["height"])
|
||||||
p := (height - 1) * (opt.font_size + opt.margin + opt.padding)
|
p := (height - 1) * (opt.font_size + opt.margin + opt.padding)
|
||||||
|
|
||||||
m.Echo(`<rect x="%d" y="%d" width="%d" height="%d" fill="%s"/>`,
|
m.Echo(`<rect x="%d" y="%d" width="%d" height="%d" fill="%s"/>`,
|
||||||
x, y+p/2, width[depth]*opt.font_size/2+opt.padding, opt.font_size+opt.padding, opt.background)
|
x, y+p/2, width[depth]*opt.font_size/2+opt.padding, opt.font_size+opt.padding, kit.Select(opt.background, meta["bg"]))
|
||||||
m.Echo(`<text x="%d" y="%d" font-size="%d" text-anchor="middle" fill="%s">%v</text>`,
|
m.Echo(`<text x="%d" y="%d" font-size="%d" text-anchor="middle" fill="%s">%v</text>`,
|
||||||
x+width[depth]*opt.font_size/2/2+opt.padding/2, y+p/2+opt.font_size-opt.padding/2, opt.font_size, opt.font_color, kit.Chain(root, "meta.text"))
|
x+width[depth]*opt.font_size/2/2+opt.padding/2, y+p/2+opt.font_size-opt.padding/2, opt.font_size, kit.Select(opt.font_color, meta["fg"]), meta["text"])
|
||||||
|
|
||||||
kit.Map(root["list"], "", func(index int, value map[string]interface{}) {
|
kit.Map(root["list"], "", func(index int, value map[string]interface{}) {
|
||||||
draw(m, value, depth+1, width, x+width[depth]*opt.font_size/2+opt.margin+opt.padding, y, opt)
|
draw(m, value, depth+1, width, x+width[depth]*opt.font_size/2+opt.margin+opt.padding, y, opt)
|
||||||
@ -397,6 +448,11 @@ var Index = &ctx.Context{Name: "wiki", Help: "文档中心",
|
|||||||
padding: 10,
|
padding: 10,
|
||||||
margin: 20,
|
margin: 20,
|
||||||
}
|
}
|
||||||
|
if len(arg) > 3 {
|
||||||
|
data = mis.Parse(nil, "", show(m, arg[3])...).(map[string]interface{})
|
||||||
|
m.Log("what", "%v", mis.Formats(data))
|
||||||
|
}
|
||||||
|
|
||||||
max := map[int]int{}
|
max := map[int]int{}
|
||||||
num := size(m, data, 0, max)
|
num := size(m, data, 0, max)
|
||||||
width := 0
|
width := 0
|
||||||
|
@ -45,6 +45,7 @@ kit svg "" public "web.wiki.svg" \
|
|||||||
select "" name type values "16 30 48 60" action auto \
|
select "" name type values "16 30 48 60" action auto \
|
||||||
select "" name type values "white red yellow green blue black" action auto \
|
select "" name type values "white red yellow green blue black" action auto \
|
||||||
select "" name type values "black blue green yellow red white" action auto \
|
select "" name type values "black blue green yellow red white" action auto \
|
||||||
|
textarea "" name happy half 4 height "200px" \
|
||||||
feature display svg \
|
feature display svg \
|
||||||
button "查看"
|
button "查看"
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user