我是如何给discuz模板做语法高亮的

本人一直做ASP.NET开发,近期接到任务要用Discuz开发一个社区,第一次接触PHP,PHP灵活的语法,天生的模块化,各种语法糖深深的震惊了我,我从内心深处感受到了PHP是最牛逼的语言!!!

好了回到正题,初次看Discuz的模板,用VS打开是这样的:

没错,第一眼看上去就震惊了,这TM怎么维护?模板随随便便就2000行,因为DZ是一个极灵活的论坛,里面放了各种hook点用于扩展功能!所以模板非常庞大复杂。

DZ的模板语法采用了HTML注释扩展(有一部分内联的却是破坏性的),见:

http://faq.comsenz.com/library/template/syntax/syntax_index.htm (DZ标签语法说明)

本人第一想法是得给DZ加一个语法高亮功能,脑海里涌现出 Lex Yacc等工具(编译原理忘记得差不多了但是还能记得他俩。)

我尝试在我熟练使用的Visual Stadio中开发一个语言扩展,看到这篇文章: 使用Visual Studio SDK制作GLSL词法着色插件 ,接触了C#版的Lex --- gplex,

于是我也依样画瓢,在画瓢的过程中,我又了解到了自VS2015 Update1开始 VS支持了 textmate的语言扩展规范!!!!(这又是想捡人家MAC生态的现成)

使用TextMate Grammars扩展VS语言服务

把TextMate Grammars规范的文件夹放到
%userprofile%\.vs\Extensions 这个目录下就好了

https://msdn.microsoft.com/en-us/library/mt742400.aspx

https://manual.macromates.com/en/language_grammars

https://github.com/madskristensen/TextmateBundleInstaller

--------------------------折腾N小时分隔线------------------------------------------------------------------

终于发现用Lex描述HTML的语法太麻烦,我只是在HTML语法高亮的前提下扩展HTML而已,并不需要重写HTML的Lex描述,于是放弃了VS转到了微软的跨平台编辑神器 VS Code!!

--------------------------弃Visual Stadio----转 Visual Stadio Code保进度分隔线------------------------------

为什么要用Visual Stadio Code?因为这家伙支持非常多的语言,本身是一个Chrome浏览器,高仿Atom的。然后查了下怎么扩展 VS Code,不用想直觉告诉我它应该也支持Textmate的扩展规范。

和VS一个套路在 %userprofile%\.vscode\extensions 文件夹下放置扩展就行了

看了下 VSCODE 的文档,发现有个YO工具可使用向导生成语法高亮工程,好吧

yo code

快速生成了一个,然后用VSCODE打开该工程目录 按F5,启用一个新的 VSCODE,在新的VSCODE中打开DZ的模板文件。

此时由于没写任何词法分析的东东,这应该是没效果的。

那么怎么写?

package.json是描述一个vscode扩展的清单文件。vscode 1.2开始支持了一个新特性叫语法注入(injectTo属性)!!!

(这就是我想要的,把我的关键字注入到html语法中!!)

如上图,我在清单文件中指出了我要把我自己的语法注入到  “text.html.base”中,(text.html.base是vscode内置的一个scopeName,我通过调试vscode得出的,官方文档中未提及)

可以看到我在这个textmate语言扩展文件中写上了 if 之类的关键字,当然还可以扩展其它。在被调试的VSCODE中按CTRL+R重新加载

比之前的好多了

在内联在字符串中的语法还没有效果,需要继续扩展text.html.base中的属性值

未完待续

时间: 2024-10-14 12:24:54

我是如何给discuz模板做语法高亮的的相关文章

nginx的配置文件语法高亮

在nginx安装成功之后,打开其配置文件,配置文件内往往都没有语法高亮.如下图白色部分为生效的选项.要想对其做语法高亮需要一个文件nginx.vim,可在网上下载到. 配置过程 [[email protected] ~]# mkdir .vim/syntax –pv  //创建.vim目录并在其下再创建一个syntax目录. mkdir: created directory `.vim' mkdir: created directory `.vim/syntax' [[email protect

discuz模板语法

Discuz! X 模板的解析主要是 ./source/class/class_template.php 文件解析处理的,如果需要深入了解请可以看看这个文件! 模板嵌套语法 将被嵌套模板内容解析为 PHP 语句并合并入本模板中的写法<!--{subtemplate common/header}-->common/header 对应某个模板套系中的 common 目录的 header.html 模板文件 程序运行时include嵌套模板内容<!--{template common/head

discuz 模板标签解析

Discuz! X 模板的解析主要是 ./source/class/class_template.php 文件解析处理的,如果需要深入了解请可以看看这个文件! 模板嵌套语法 将被嵌套模板内容解析为 PHP 语句并合并入本模板中的写法<!--{subtemplate common/header}-->common/header 对应某个模板套系中的 common 目录的 header.html 模板文件 程序运行时include嵌套模板内容<!--{template common/head

一个C#语法高亮插件

语法高亮对程序员阅读代码来说有着不小的帮助,虽然VisualStudio本身支持C#语法高亮,但也只是对关键字.类名.字符串等少数元素加了标记,而我们代码中主题:变量.函数.属性.事件等都没有进行高亮,如下所示: ????var nodes = from id in GetIdentifiersInSpans(doc.Workspace, doc.SemanticModel, spans)????????????????let node = doc.SyntaxRoot.FindNode(id.

discuz教程:discuz模板js与jQuery冲突的解决方案

今天在做discuz模板的时候,用到jquery的时候和原来主题js冲突.这个主要是Discuz X使用了$(id)作为dom节点的获取方法,而$符号刚好与jQuery的默认符号相冲突. 以下是基于之前的Discuz X和jQuery冲突的解决办法.给大家做个参考! 将jQuery的js文件jquery-1.8.0.min.js放到/static/js目录下,以下两个方法共用此文件,如不是放在该目录下,后面的代码请对应修改. 解决方法1: 修改/template/default/common/h

github atom创建自己的语法高亮

使用atom一段时间了,有些插件还不是很成熟.比如项目中使用protobuf,早就有人写了语法高亮(https://github.com/podgib/atom-protobuf),但是效果不是很好.于是决定自己写一个. atom linux的配置目录在~/.atom下,里面有一个packages目录,所有安装的插件(或者叫做包)都在这里.所有在这里的包在启动时都会自动加载.因此,我们直接在这里创建一个包. cd .atom/packages mkdir language-protobufcd

js 正则练习之语法高亮

原文:js 正则练习之语法高亮 学了几天正则,差不多该总结整理写成果了,之前就想写语法高亮匹配来着,不过水平不够,看着例子都不理解.今天就分析下 次碳酸钴 和 Barret Lee 语法高亮实现. 先说 Barret Lee 的这篇 <玩转正则之highlight高亮>之前看的时候只觉的神奇,特别是下面那个一步一步分开匹配的例子,更是霸气测漏,不过作者也说了,分开只是为了演示方便,可以很直观的看到这一步匹配了什么,不然一步到位匹配完成,你都不知道发生了什么就处理完毕了.来看下他的正则 (/^\

修改discuz模板都需要注意什么

我自己经常用discuz做系统.discuz作为中国开源论坛的老大,现在来说pc端的程序已经很完善.也有很多的不如意的地方,今天这篇文章就暂时不说不如意的地方了.主要说说采用discuz后,如何修改它的模板.相信很多朋友是很想修改它的模板的. 我想先从discuz的架构原理谈起. discuz的架构总体来说也是分三层的:与数据库交互层即db层.逻辑控制层.前台显示层. db层分管的工作呢,是和数据库打交道,简单的说就是用户发表一篇文章,这个文章得放在哪储存呢,前台显示层就把这些数据交给逻辑控制层

NotePad++ 语法高亮 INC 文件

最近在学习 NASM 汇编语言,文本编辑器用的 NotePad++.汇编源代码以 .nas 为扩展名,NotePad++ 不能正确语法高亮显示.打开菜单项"设置 -> 语言格式设置",在"语言"列表中找到"Assembly ",在"自定义扩展名:"里加上 " nas ".好了,nas 类汇编源代码可以语法高亮了. 可是后来把扩展名 . inc 文件作为 nasm 汇编语言的头文件使用,也在"