diff --git a/base/lex/matrix.go b/base/lex/matrix.go index 39ebb687..eec94e97 100644 --- a/base/lex/matrix.go +++ b/base/lex/matrix.go @@ -167,36 +167,45 @@ func (mat *Matrix) Train(m *ice.Message, npage, nhash string, seed string) int { } } + add := func(s int, c byte, cb func(*State)) { + state := &State{} + if mat.mat[s][c] != nil { + *state = *mat.mat[s][c] + } + m.Debug("GET(%d,%d): %#v", s, c, state) + + cb(state) + + if state.next == 0 { + sn = append(sn, true) + state.next = len(mat.mat) + mat.mat = append(mat.mat, make(map[byte]*State)) + } else { + sn[state.next] = true + } + + mat.mat[s][c] = state + points = append(points, &Point{s, c}) + m.Debug("SET(%d,%d): %#v", s, c, state) + } for _, s := range ss { for _, c := range cc { - - state := &State{} - if mat.mat[s][c] != nil { - *state = *mat.mat[s][c] - } - m.Debug("GET(%d,%d): %#v", s, c, state) - - switch flag { - case '+': - state.star = true - case '*': - state.star = true - sn[s] = true - case '?': - sn[s] = true - } - - if state.next == 0 { - state.next = len(mat.mat) - mat.mat = append(mat.mat, make(map[byte]*State)) - sn = append(sn, true) - } else { - sn[state.next] = true - } - - mat.mat[s][c] = state - points = append(points, &Point{s, c}) - m.Debug("SET(%d,%d): %#v", s, c, state) + add(s, c, func(state *State) { + switch flag { + case '+': + sn = append(sn, true) + state.next = len(mat.mat) + mat.mat = append(mat.mat, make(map[byte]*State)) + for _, c := range cc { + add(state.next, c, func(state *State) { state.star = true }) + } + case '*': + state.star = true + sn[s] = true + case '?': + sn[s] = true + } + }) } } diff --git a/base/web/serve.go b/base/web/serve.go index b9d6f6e5..4f4ba24e 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -123,8 +123,10 @@ func _serve_handle(key string, cmd *ice.Command, msg *ice.Message, w http.Respon // 请求参数 for k, v := range r.Form { - for i, p := range v { - v[i], _ = url.QueryUnescape(p) + if r.Header.Get(ContentType) != ContentJSON { + // for i, p := range v { + // // v[i], _ = url.QueryUnescape(p) + // } } if msg.Optionv(k, v); k == ice.MSG_SESSID { RenderCookie(msg, v[0])