赵亮 冯佳(河南警察学院,河南 郑州 450000)
Moodle平台语法高亮功能的两种实现方法对比分析
赵亮冯佳
(河南警察学院,河南郑州450000)
Moodle平台是一个开源互联网教学平台,在运行程序设计类课程时,语法高亮功能的缺失严重影响平台的使用效果。鉴于此,基于当前流行的开源代码语法高亮解决方案,设计了两种在Moodle中实现语法高亮的方法,并从多方面分析对比两种方法并得出结论。
Moodle;语法高亮;GeSHi;SyntaxHighlighter
Moodle是由澳大利亚教师Martin Dougiamas创建的一个开源项目,21世纪初在国内高校一度风行,但由于中文支持不好,早期版本功能繁杂体验差,不管在国内还是国外都未得到广泛应用。而随着版本的迭代更新,3.0版本的Moodle已经修复了中文显示的问题,随着“微课”“翻转课堂”的兴起,Moodle作为一个功能强大的成熟框架,再次得到教育技术领域的关注[1]。
Moodle是一个基于主要使用PHP构建的Web系统,因此可跨平台运行在支持PHP的服务器上,包括Linux、Windows和MacOS,常见的架构是LAMP(Linux操作系统,Web服务程序Apache,数据库MySQL,后端脚本PHP,)如使用Windows Server,Web服务程序也可对应地使用IIS。
Moodle的安装和部署十分方便简单,对于熟悉Web Services的用户,添加一个空白数据库,将Moodle目录放置于web目录下即可轻松完成配置。而且bitnami还提供了集成XAMPP等Web套件一键安装发布的安装包,大部分高校教师可以轻松完成配置。因此,Moodle在高校应用极其广泛,很多学校都有自己的站点。
河南警察学院的平台上线于2015年9月,上线即承担了《网络协议分析》4个中队的实验实训任务,期间迁移过一次服务器,3.0版本的Moodle测试功能中支持数据库的网络迁移,平台运行状况整体良好,在问卷调查中学生满意度达到95%以上。2015年10月平台向系内教师开放,《电子数据的检验与分析》(取证)课程的实验也迁移到本平台上,2016年1月平台承担了《网络协议分析》和《取证》课程的期末考试任务。
语法高亮功能,是程序设计中一些高级文本编辑器以及IDE中必备的功能,通过高亮来区分、操作符、变量、注释,可以让代码的可读性更好,同时也更加美观。
图1分别是记事本、Notepad++和Eclipse中一段java代码的显示效果,记事本没有语法高亮,而后两者使用了语法高亮,代码可读性区别显而易见。
而Moodle平台当承担程序语言课程时,语法高亮是一个必备的功能,虽然Moodle有着大量的扩展和插件,但是目前并没有完善的支持语法高亮的插件。语法高亮,在Moodle平台的应用主要集中在以下几个方面:①教程、考试等用户可见的模块,应有语法高亮的功能;②学生在编辑作业时输入的代码,应有语法高亮的功能;③在线文本编辑器应方便地通过标签方式高亮编辑后的代码。
图1 代码高亮效果对比
3.1方法一:GeSHi插件方式
GeSHi的全称是Generic Syntax Highlighter,即通用语法高亮器,项目地址是http://qbnz.com/highlighter。GeSHi有着以下特点。
3.1.1服务端兼容性。GeSHi的编码完全用PHP。这意味着良好的兼容性,任何支持PHP的服务器都能使用GeSHi。
3.1.2客户端兼容性。GeSHi兼容XHTML标准的输出,通过使用CSS样式表类来高亮显示。
3.1.3多语言支持。GeSHi目前支持超过100种语言的高亮显示,包括PHP、HTML、CSS、java、C、Lisp、XML、Perl、Python和ASM等。
3.1.4高度可定制。GeSHi的允许你改变高亮显示的输出方式,同样也是通CSS类来实现的。
3.1.5灵活性。GeSHi基于模块化设计。关闭不必须的特性,预载CSS样式表可以显著提升速度。
GeSHi的插件全部为PHP文件,本质上就是一个PHP类库,实现web文本的语法高亮方式如下:
其中,include语句载入geshi库,新建一个geshi对象,其中$source是需要高亮的代码或者页面,调用parse_code()函数就可以完成代码部分的高亮。
3.1.6GeSHi在Moodle平台上的实现及部署。根据需求分析,如果要使Moodle下不同的页面中的特定部分能够语法高亮,需要使用Moodle的Filter模块,Filter模块是Moodle提供的使用正则表达式匹配文本,并对匹配到的文本进行相关操作的模块,语法高亮可以使用Filter功能对特殊关键字标签生效,如[code][/code]标签的实现如下:
Filter生效后,需要在使用用对相应的代码部分添加[code][/code]标签来完成。
3.2方法二:SyntaxHighlighter主题方式
SyntaxHighlighter是一个基于JavaScript的代码高亮开源插件,由Alex Gorbatchev开发,项目地址是http:// alexgorbatchev.com/SyntaxHighlighter。SyntaxHighlighter也有着以下特点。
3.2.1兼容性。SyntaxHighlighter是在前端层面高亮显示代码,所以不存在服务端兼容的问题,前端同样是支持XHTML标准和CSS。
3.2.2多语言支持。SyntaxHighlighter目前仅提供23种常见的语言的支持。
3.2.3高度可定制。SyntaxHighlighter使用笔刷的方式来实现代码高亮,定制显示效果只需要修改笔刷即可。
3.2.4性能。SyntaxHighlighter是前端语言,不占用服务器端资源,性能差别仅在于浏览器。
3.2.5SyntaxHighlighter插件组成。SyntaxHighlighter插件包括以下几个文件夹:Scripts,面存放了所有功能性的JS文件;Src,源文件,里面是shCore和shLegacy这两个核心JS文件,和Scripts里的一致;Styles,存放了各种主题风格的css文件以及显示小图标需要的图片。
SyntaxHighlighter的核心是shCore文件,语法高亮的功能性函数都在此文件中定义。此外,Scrpits里还提供了常见的23种笔刷文件,如shBrushCpp,shBrushJava等,用于对不同的语言采用不同的高亮规则。
因为SyntaxHighlighter是高亮实现机制是基于前端JS,因此部署到Moodle上可以通过修改主题的方式。
3.2.6Moodle主题机制。Moodle主题包含以下几个目录及文件,具体功能如表1所示。
表1 Moodle主题包含的目录/文件及其功能
Moodle主题的工作原理如图2所示,使用PixCSS等资源的是MVC架构中的view部分,包括Moodle主体页面及自定义layout页面,lib.php提供自定义工具函数,config.php配置主题,最终用户可以通过setting.php完成主体的设置及个性化。由此可知,在主题中配置SyntaxHighlighter,shCore.js和JS笔刷文件需要放置于javascript目录下,CSS文件需要放置于style目录下,并在Config.php中完成JS和CSS的载入:
图2 Moodle主题生效机制
完成以上工作后,还需要在各种有需求的view页面加入以下JS代码:
4两种高亮实现方法的对比分析
本文尝试的2种方法均可以完成Moodle平台上语法高亮的需求,方便程序设计类课程的课程在Moodle平台上线,表为2种方法各自的综合对比。
总之,使用前端JS解决方案的SyntaxHighlighter优于在后端使用php的GeSHi,虽然使用
标签存在冲突的可能性,但现阶段浏览器对JS支持良好的环境下,使用SyntaxHighlighter无疑是一种更加便捷、高效的代码高亮方法。表2 2种高亮实现方法的综合对比
[1]陈肖庚,王顶明.MOOC的发展历程与主要特征分析[J].现代教育技术,2013(11):5-10.
Comparison and Analysis of Two Methods to Realize the Syntax Highlighting Function of Moodle Platform
Zhao LiangFeng Jia
(Henan Police College,Zhengzhou Henan 450000)Moodle is an open-source internet education platform,When running the program design courses,the lack of syntax highlighting features a serious impact on the use of the platform.In view of this,based on the current popular open source code syntax highlighting solution,the two in Moodle syntax highlighting method were designed,and analyzed and compared the two methods from many aspects,and draw the conclusion.
Moodle;syntax highlighting;GeSHi;SyntaxHighlighter
TP311.52
A
1003-5168(2016)04-0020-03
2016-03-12
冯佳(1985-),男,硕士,工程师,研究方向:交通管理,ITS技术;赵亮(1987-),男,硕士,研究方向:信息安全,网络空间安全。
猜你喜欢刷新生活的页面 保健医苑(2022年1期)2022-08-30自编插件完善App Inventor与乐高机器人通信 电子制作(2019年22期)2020-01-14创世代码 动漫星空(2018年11期)2018-10-26创世代码 动漫星空(2018年2期)2018-10-26创世代码 动漫星空(2018年9期)2018-10-26创世代码 动漫星空(2018年5期)2018-10-26基于jQUerY的自定义插件开发 软件(2016年6期)2017-02-06移动页面设计:为老人做设计 工业设计(2016年1期)2016-05-04基于Revit MEP的插件制作探讨 智能建筑电气技术(2015年1期)2015-03-01Web安全问答(3) 通信技术(2012年4期)2012-02-15