[英]VS Code syntax highlighting for XML containing javascript
我从@Tomalak 解决方案中获得了一些灵感。 但是,我没有使用 XSLT,而是使用 VS 代码替换正则表达式来注释掉我的 XML 代码:
<!-- comment out xml tags : ^(\s*(\]\]>)?<\/?\w*>(<!\[CDATA\[)?)\s*$ -->
<!-- comment out xml tags : //$1 -->
<!-- uncomment xml tags : ^\/\/(\s*(\]\]>)?<\/?\w*>(<!\[CDATA\[)?)\s*$ -->
<!-- uncomment xml tags : $1 -->
使用$1
将为您提供捕获组。 我只是捕获所有 XML 标签并添加//
字符以使它们成为评论。
从那里我只是将文件的语法突出显示设置为 JavaScript 并且一切正常。
我只需要偶尔做一次,所以这个快速破解对我来说很好用。 然而,更复杂的解决方案(例如 XSLT 模板)可能更适合更活跃的项目。
我有一个包含 javascript 的 XML 文件(由于我们使用的平台的限制。)我的代码如下所示:
<JS>
<MY_FUNCTION><![CDATA[
// comment here
let my_function = () => console.log("Hello World");
]]></MY_FUNCTION>
<LESS_THAN><![CDATA[
let less_than = (a,b) => a < b;
]]></LESS_THAN>
<GREATER_THAN><![CDATA[
let greater_than = (a,b) => a > b;
]]></GREATER_THAN>
</JS>
因为我的文件是 XML,所以我没有得到 javascript 的语法高亮显示。 所以我的代码只是灰色的,类似于评论的样子。
是否有可以突出显示我的代码的扩展程序? 如果这对我有帮助,我也愿意修改突出显示规则。
你可以扭转问题。 此 XSLT 模板将您的 XML 转换为 JS 代码
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" />
<xsl:template match="*[normalize-space(text()[1])]">
<xsl:value-of select="concat('//xml:<', name(), '><![CDATA[')" />
<xsl:apply-templates select="node() | *" />
<xsl:value-of select="concat('//xml:]]></', name(), '>')" />
</xsl:template>
<xsl:template match="*">
<xsl:value-of select="concat('//xml:<', name(), '>')" />
<xsl:apply-templates select="node() | *" />
<xsl:value-of select="concat('//xml:</', name(), '>')" />
</xsl:template>
</xsl:stylesheet>
产生这个:
//xml:<JS>
//xml:<MY_FUNCTION><![CDATA[
// comment here
let my_function = () => console.log("Hello World");
//xml:]]></MY_FUNCTION>
//xml:<LESS_THAN><![CDATA[
let less_than = (a,b) => a < b;
//xml:]]></LESS_THAN>
//xml:<GREATER_THAN><![CDATA[
let greater_than = (a,b) => a > b;
//xml:]]></GREATER_THAN>
//xml:</JS>
现在语法高亮可以根据 JS 规则工作。
使用 XSLT 并不是绝对必要的,您可能可以通过中途巧妙的正则表达式替换来摆脱困境,例如^(\s*)(<|\]\]>)
替换为\1//xml:\2
,假设XML 标签总是在自己的行上。
您可以通过简单的搜索和替换操作删除//xml:
将其全部转换回 XML,只要您保持//xml:
注释不变。
这样做会让我们回到:
<JS>
<MY_FUNCTION><![CDATA[
// comment here
let my_function = () => console.log("Hello World");
]]></MY_FUNCTION>
<LESS_THAN><![CDATA[
let less_than = (a,b) => a < b;
]]></LESS_THAN>
<GREATER_THAN><![CDATA[
let greater_than = (a,b) => a > b;
]]></GREATER_THAN>
</JS>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.