4 Star 20 Fork 4

七叶 / atk

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
interp.go 5.69 KB
一键复制 编辑 原始数据 按行查看 历史
七叶 提交于 2018-11-25 15:37 . add patchLevel
// Copyright 2018 visualfc. All rights reserved.
package interp
import (
"errors"
"strconv"
)
const (
TCL_OK = 0
TCL_ERROR = 1
)
type Tcl_QueuePosition int
const (
TCL_QUEUE_TAIL Tcl_QueuePosition = 0
TCL_QUEUE_HEAD
TCL_QUEUE_MARK
)
const (
TCL_DONT_WAIT = 1 << 1
TCL_WINDOW_EVENTS = 1 << 2
TCL_FILE_EVENTS = 1 << 3
TCL_TIMER_EVENTS = 1 << 4
TCL_IDLE_EVENTS = 1 << 5
TCL_ALL_EVENTS = ^TCL_DONT_WAIT
)
var (
globalCommandMap = NewCommandMap()
globalActionMap = NewActionMap()
)
type ActionMap struct {
fnMap map[uintptr]func([]string)
id uintptr
}
func NewActionMap() *ActionMap {
return &ActionMap{make(map[uintptr]func([]string)), 1}
}
func (m *ActionMap) Register(fn func([]string)) uintptr {
m.id = m.id + 1
m.fnMap[m.id] = fn
return m.id
}
func (m *ActionMap) UnRegister(id uintptr) {
delete(m.fnMap, id)
}
func (m *ActionMap) Invoke(id uintptr, args []string) error {
fn, ok := m.fnMap[id]
if !ok {
return errors.New("Not found action")
}
fn(args)
return nil
}
type CommandMap struct {
fnMap map[uintptr]func([]string) (string, error)
id uintptr
}
func (m *CommandMap) Register(fn func([]string) (string, error)) uintptr {
m.id = m.id + 1
m.fnMap[m.id] = fn
return m.id
}
func (m *CommandMap) UnRegister(id uintptr) {
delete(m.fnMap, id)
}
func (m *CommandMap) Find(id uintptr) func([]string) (string, error) {
return m.fnMap[id]
}
func (m *CommandMap) Invoke(id uintptr, args []string) (string, error) {
fn, ok := m.fnMap[id]
if !ok {
return "", errors.New("Not found command")
}
return fn(args)
}
func NewCommandMap() *CommandMap {
return &CommandMap{make(map[uintptr]func([]string) (string, error)), 1}
}
func (interp *Interp) EvalAsString(script string) (string, error) {
err := interp.Eval(script)
if err != nil {
return "", err
}
return interp.GetStringResult(), nil
}
func (interp *Interp) EvalAsInt64(script string) (int64, error) {
err := interp.Eval(script)
if err != nil {
return 0, err
}
return interp.GetInt64Result(), nil
}
func (interp *Interp) EvalAsInt(script string) (int, error) {
err := interp.Eval(script)
if err != nil {
return 0, err
}
return interp.GetIntResult(), nil
}
func (interp *Interp) EvalAsUint(script string) (uint, error) {
err := interp.Eval(script)
if err != nil {
return 0, err
}
return interp.GetUintResult(), nil
}
func (interp *Interp) EvalAsFloat64(script string) (float64, error) {
err := interp.Eval(script)
if err != nil {
return 0, err
}
return interp.GetFloat64Result(), nil
}
func (interp *Interp) EvalAsBool(script string) (bool, error) {
err := interp.Eval(script)
if err != nil {
return false, err
}
return interp.GetBoolResult(), nil
}
func (interp *Interp) EvalAsObj(script string) (*Obj, error) {
err := interp.Eval(script)
if err != nil {
return nil, err
}
return interp.GetObjResult(), nil
}
func (interp *Interp) EvalAsListObj(script string) (*ListObj, error) {
err := interp.Eval(script)
if err != nil {
return nil, err
}
return interp.GetListObjResult(), nil
}
func (interp *Interp) EvalAsStringList(script string) ([]string, error) {
err := interp.Eval(script)
if err != nil {
return nil, err
}
return interp.GetListObjResult().ToStringList(), nil
}
func (interp *Interp) EvalAsIntList(script string) ([]int, error) {
err := interp.Eval(script)
if err != nil {
return nil, err
}
return interp.GetListObjResult().ToIntList(), nil
}
func (interp *Interp) TclVersion() string {
ver, _ := interp.EvalAsString("set tcl_version")
return ver
}
func (interp *Interp) TclPatchLevel() string {
ver, _ := interp.EvalAsString("set tcl_patchLevel")
return ver
}
func (interp *Interp) TkVersion() string {
ver, _ := interp.EvalAsString("set tk_version")
return ver
}
func (interp *Interp) TkPatchLevel() string {
ver, _ := interp.EvalAsString("set tk_patchLevel")
return ver
}
func (p *Interp) GetStringResult() string {
return p.GetObjResult().ToString()
}
func (p *Interp) GetIntResult() int {
return p.GetObjResult().ToInt()
}
func (p *Interp) GetUintResult() uint {
return p.GetObjResult().ToUint()
}
func (p *Interp) GetInt64Result() int64 {
return p.GetObjResult().ToInt64()
}
func (p *Interp) GetFloat64Result() float64 {
return p.GetObjResult().ToFloat64()
}
func (p *Interp) GetBoolResult() bool {
return p.GetObjResult().ToBool()
}
func (p *Interp) GetErrorResult() error {
return errors.New(p.GetObjResult().ToString())
}
func (p *Interp) GetStringVar(name string, global bool) string {
obj := p.GetVar(name, global)
if obj == nil {
return ""
}
return obj.ToString()
}
func (p *Interp) GetIntVar(name string, global bool) int {
obj := p.GetVar(name, global)
if obj == nil {
return 0
}
return obj.ToInt()
}
func (p *Interp) GetInt64Var(name string, global bool) int64 {
obj := p.GetVar(name, global)
if obj == nil {
return 0
}
return obj.ToInt64()
}
func (p *Interp) GetFloadt64Var(name string, global bool) float64 {
obj := p.GetVar(name, global)
if obj == nil {
return 0
}
return obj.ToFloat64()
}
func (p *Interp) GetBoolVar(name string, global bool) bool {
obj := p.GetVar(name, global)
if obj == nil {
return false
}
return obj.ToBool()
}
func (p *Interp) SetIntVar(name string, value int, global bool) error {
return p.SetStringVar(name, strconv.Itoa(value), global)
}
func (p *Interp) SetInt64Var(name string, value int64, global bool) error {
return p.SetStringVar(name, strconv.FormatInt(value, 10), global)
}
func (p *Interp) SetFloat64Var(name string, value float64, global bool) error {
return p.SetStringVar(name, strconv.FormatFloat(value, 'E', -1, 64), global)
}
func (p *Interp) SetBoolVar(name string, b bool, global bool) error {
if b {
return p.SetStringVar(name, "1", global)
}
return p.SetStringVar(name, "0", global)
}
Go
1
https://gitee.com/visualfc/atk.git
git@gitee.com:visualfc/atk.git
visualfc
atk
atk
572ab07f9a00

搜索帮助