发明内容
本发明针对现有技术的不足,提供了一种基于GDI+实现的结合C#类库的JavaScript脚本编辑器,以解决现有技术缺乏代码智能补全等功能的问题。
为了实现以上发明目的,本发明采取的技术方案如下:一种基于GDI+实现的结合C#类库的JavaScript脚本编辑器,包括:代码智能补全单元,用于支持JavaScript关键字和C#方法智能提示;JavaScript脚本单元,用于支持C#方法调用;预览单元,用于将结果集通过弹出框方式进行预览;脚本编译单元,用于将编写好的脚本翻译成标准的C#语句,保存到文件,并利用.net(Microsoft XML Web services 平台)框架所提供的类库,对文件进行编译,生成DLL类库。
作为优选,还包括:高亮度显示单元,用于增加脚本可读性;书签功能单元,用于添加和删除书签;录制宏单元,用于宏的录制和执行。
作为优选,脚本编辑器的界面包括代码编辑区、调试结果显示区和脚本预览窗口。
作为优选,扩展自定义方法具体步骤如下:
101-在代码编辑区,输入关键字片段,根据智能提示,输入自定义扩展方法;
102-点击运行按钮,根据代码编辑区显示文本,获取标准的脚本代码;
103-脚本执行控制引擎,接收步骤102传入的脚本代码,使用Noesis.JavaScript开源组件,执行JavaScript脚本和自定义扩展代码,返回结果数据;
104-返回结果数据,利用解析组件进行数据解析,呈现到界面。
作为优选,101所述的代码智能补全具体步骤如下:
1011-定义XML文件,存储元素项列表,加载XML文件到内存中;
1012-根据元素项类型,加载不同类型的智能提示元素项;
1013-当输入某个字符后,触发Key Press Event Handler事件;
1014-在步骤1013中的事件方法中,获取编辑区中当前代码段,循环步骤1012中智能提示元素项,依次比对元素项的值,添加以代码段开头的元素项到需要显示的元素项集合中;
1015-根据步骤1014中元素项集合,绘制自动提示菜单选择框。
作为优选,103所述的自定义方法执行具体步骤如下:
1031-创建JavaScript类库实例对象context;
1032-创建脚本扩展方法引擎实例对象;
1033-设置context参数,扩展C#自定义方法:
1034-调用context对象方法,执行脚本代码。
作为优选,1032所述的脚本扩展方法引擎具体步骤如下:
10321-引入.net类库和第三方类库;
10322-采用C#语法,调用其余类库方法,进行二次加工处理,实现需要的功能方法;
10323-按功能进行方法分类,实现不同的功能操作模块;
10323-创建一个类,在类中,声明各类操作模块实例对象,作为自定义扩展方法的统一入口;
10324-脚本扩展方法引擎。
作为优选,脚本编辑器采用.NET Framework 4.0框架,通过C#编程实现。
作为优选,脚本编辑器全部文本的渲染通过GDI+接口实现。
本发明的有益效果如下:
1.支持16种文本样式高亮度显示,增加脚本可读性;
2.基于GDI+实现,支持代码智能补全,实现调用C#方法时自动补全;
3.利用JavaScript引擎(专门处理JavaScript脚本的虚拟机,一般会附带在网页浏览器之中,这里是Noesis.Javascript.dll,是对Google's V8 JavaScript Engine的封装),实现JavaScript脚本直接在.net环境下运行,从而完美支持脚本中调用C#方法;
4. 支持复杂结果集的图形化预览;
5.支持把脚本编译为动态链接库DLL。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明做进一步详细说明。
如图1所示,脚本编辑器技术架构示意图,具体内容如下;
101-采用.NET Framework 4.0框架(Windows 组件,很多基于此架构的程序需要它的支持才能够运行),通过C#编程实现;也可以是.net 3.5 或者.net 4.5等版本。
102-全部文本的渲染(输入文本的排版布局、着色处理等),通过GDI+接口实现;
103-使用Noesis.JavaScript开源组件(JavaScript引擎),做到在.net中执行JavaScript脚本,同时JavaScript脚本也能调用C#方法。
104-脚本编辑器,界面包括代码编辑区、调试结果显示区和脚本预览窗口。
如图2所示,脚本编辑器主要特点示意图,具体内容如下;
201-支持16种文本样式高亮度显示,增加脚本可读性,属于104所述的脚本编辑区。
1.定义关键字样式,包含Javascript关键字和自定义关键字。
2.定义配置项样式(脚本分为配置模块和功能模块)。
3.定义XML括号和XML属性样式(配置模块采用XML语法)。
4.定义字符样式、注释样式、数字样式。
202-代码智能补全,支持JavaScript关键字和C#方法智能提示功能,属于104所述的脚本编辑区。
203-Javascript脚本,支持C#方法调用,属于104所述的脚本编辑区。
使用Noesis.JavaScript开源组件,实现在.net中执行JavaScript脚本,同时在Javascript脚本调用C#方法。C#方法中,可以对其它语言类库方法进行调用,从而支持C、C++和Java等编程语言,如图3所示。
204-书签功能,属于104所述的脚本编辑区,现有技术。
1.当前编辑行,添加、删除书签。
2.菜单栏,“书签”选项,可以根据添加的书签进行向前或向后导航操作(支持快捷键)。
3.菜单栏,“书签”选项,删除全部书签(支持快捷键)。
205-录制宏,属于104所述的脚本编辑区,现有技术。
1.单击功能栏“录制宏”按钮(Ctrl+M),开始宏录制,输入光标快速闪烁,单击鼠标结束宏录制。
2.单击功能栏“执行宏”按钮(Ctrl+Shift+M),在输入光标所在位置,插入录制的宏。
206-预览,属于104所述的调试结果显示区和脚本预览窗口。
1.单击功能栏“运行”按钮(F5),执行脚本,结果集通过弹出框方式进行预览,完美的支持树形结构数据的呈现。
2.通过Log(msg),在调试结果显示区打印输出,方便对脚本进行调试。
207-脚本编译,属于104所述的调试结果显示区。
1.将编写好的脚本(采用Javascript语法,结合C#方法)翻译成标准的C#语句,保存到文件。
2.利用.net框架所提供的类库,对文件进行编译,生成DLL类库。
3.编译结果显示在调试结果显示区(成功或失败信息)。
如图3所示,扩展自定义方法流程图,具体方法如下:
101-在代码编辑区,输入关键字片段,根据智能提示,完成自定义扩展方法的输入。具体代码智能补全流程见图4。
102-点击运行按钮(F5),根据代码编辑区显示文本,获取标准的脚本代码(content),括号内容可以替换。
103-脚本执行控制引擎,接收步骤102传入的content,使用Noesis.JavaScript开源组件,执行JavaScript脚本和自定义扩展代码,返回结果数据。自定义扩展代码执行流程见图5。
104-返回结果数据,利用解析组件进行数据解析,最后呈现到界面。
如图4所示,代码智能补全流程图,具体方法如下:
1011-定义XML文件,存储元素项列表。每个元素项(item),包含属性:关键字(key)、元素值(value)、类型(type)、描述(desc)、子项集合(items)。加载XML文件到内存中。
1012-根据元素项类型,加载不同类型的智能提示元素项(sourceItems)。
1013-当输入某个字符后,触发KeyPressEventHandler事件。
1014-在步骤1013中的事件方法中,获取编辑区中当前代码段,循环步骤1012中sourceItems,依次比对元素项的值,添加以代码段开头的元素项到需要显示的元素项集合中(visibleItems)。
1015-根据步骤1014中visibleItems,绘制自动提示菜单选择框。
如图5所示,自定义方法执行流程图,具体方法如下:
1031-创建Javascript类库实例对象(context)
a.添加引用Noesis.JavaScript.dll;using Noesis.JavaScript。
b.创建实例对象,JavaScriptContext context = new JavaScriptContext(),用于C#方法的扩展和执行脚本。
1032-创建脚本扩展方法引擎实例对象,所有自定义扩展方法入口,具体实现流程见图6:Debug调试模块;Convert数据转换模块;File文件操作模块;Sqlite数据库操作模块;PList(BPList)文件读取模块。
1033-设置context参数,扩展C#自定义方法。context.SetParameter(“XLY”,xlyEngine)。
1034-调用context对象方法,执行脚本代码。context.Run(content),context 可替换,content为编辑器中脚本代码字符串。
如图6所示,脚本扩展方法引擎流程图,具体方法如下:
10321-通过引入.net类库和第三方类库,可以扩展多种语言实现的方法。
10322-采用C#语法,调用.net、C、C++、java等类库方法,进行二次加工处理,实现需要的功能方法。
10323-按功能进行方法分类,实现不同的功能操作模块。比如Sqlite数据库操作模块,负责分析恢复删除数据(使用C++编写的类库)、查询sqlite数据库操作。
10323-创建一个类,在类中,声明各类操作模块实例对象,作为自定义扩展方法的统一入口。
本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的实施方法,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。