【问题标题】:Extending language definitions (for code highlighting) in notepad++在记事本++中扩展语言定义(用于代码突出显示)
【发布时间】:2012-01-24 10:35:19
【问题描述】:

我最近一直在 TWIG 进行开发。它是一种非常简单和健壮的html模板语言。

我已将 notepad++ 设置为自动将 .twig 文件视为 html。这没关系,但我的树枝函数上没有任何语法突出显示。

twig 语法非常简单(按设计),很容易添加到 notepad++。问题是,我在这个主题上找到的一切要么是关于创建新的语言定义(我不想重新发明 html 定义),要么是修改语言中现有语法位的颜色。

有没有办法复制语言定义,然后在notepad++中修改它?如果没有,notepad++ 中是否有任何方法可以在现有语言定义中添加额外的语法位?

编辑

TWIG 是一种 html 模板语言/引擎。它们的语法与 html 相同,只是为控制语句添加了一些打开/关闭标签(特别是 {% %}、{{ }} 和 {# #})。你可以在the twig website阅读更多关于它的信息

编辑#2

根据 Brian Deragon 的回答,我一直在调查 3 个文件。到目前为止,我已经弄清楚/做了什么:

  • \plugins\APIs\html.xml - 似乎定义了关键字,用于自动完成。我复制了一个名为 twig.xml 的文件
  • langs.model.xml - 同样是关键字列表,所有语言都在 1 个 XML 文件中。我复制了 HTML 对象,并用 twig 替换了 name 和 ext 参数。
  • stylers.model.xml - 有一个不同项目的列表,以及每个项目的样式信息(颜色、背景颜色、字体等)。我复制了 HTML 部分并将 name 和 desc 参数更改为 twig。

这些更改完成后,我在 notepad++ 中打开了一个 twig 文件,希望能在语言选项中看到它。遗憾的是,它还没有出现,这让我相信其中一些是硬编码的(因此我想要的可能是不可能的)。

不过,stylers.model.xml 很有趣。每个条目都有一堆项目,定义如下:

<LexerType name="twig" desc="TWIG" ext="">
    <WordsStyle name="DEFAULT" styleID="0" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" />
    <WordsStyle name="COMMENT" styleID="9" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
    <WordsStyle name="TAG" styleID="1" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
    <WordsStyle name="TAGEND" styleID="11" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
    ...
</LexerType>

这些似乎是为不同元素定义样式的地方。我无法找到定义这些元素的任何地方。 langs.model.xml 有注释开始/结束的定义,但没有任何其他分隔符。我真正需要的是一个地方告诉 notepad++ 将 { } 视为分隔符,就像它现在对 所做的那样。

编辑#3

我也在查看notepad++的用户定义语言列表http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=User_Defined_Language_Files 用户定义的语言使用不同的引擎,但我可能能够在其中找到一个与 html 足够相似的引擎,我可以对其进行调整。

【问题讨论】:

    标签: syntax-highlighting notepad++ twig


    【解决方案1】:

    您应该能够只复制和编辑 XML 定义文件 (html.xml);只要您不需要基础知识之外的东西,例如代码折叠、基于案例处理块或多个条件的高级着色、前导字符的单独格式、标签着色、基于 xml 的注释、语言混合(着色嵌入式脚本),支持鸭子类型的着色等。如果您需要任何“高级”内容,则需要编写自己的词法分析器,在这种情况下,以下大部分内容都适用。

    即使如此,我在下面列出的模板应该可以让您在自己的语言定义文件上占得先机。


    据我所知,Notepad++ 使用 Scintilla Lexers 来确定其代码规则。

    您必须创建自己的词法分析器,但是...HTML Scintilla Lexer 已经包含在 Scintilla source code 中。

    然后您将使用plug-in 插入您的自定义词法分析器,例如Gary's Lua Highlighter Plugin

    用于构建自定义词法分析器的资源:

    话虽如此,Geany 与 Notepad++ 非常相似(基于相同的引擎 Scintilla),所以您可能想看看它是否已经为 Geany 完成,或者在作品。这至少会给你一个良好的开端。

    如果这没有帮助,有内置 Twig 支持的 IDE 和编辑器,例如:

    GEdit 已经发布了他们对语言 here 的 XML 定义,这可能有助于在创建您自己的定义文件或词法分析器时作为参考; Twig here 的人还发布了另一个模板,可能会有所帮助。

    以下是我能找到的用于创建自定义词法分析器/用户定义语言的最佳 Notepad++ 特定教程:

    如果您想勇敢地构建自己的 Scintilla dll,请参考这些线程,看看有人让它工作,并出现在语言列表中(使用上一个/下一个线程消息来查看响应,或者线程索引;它是一个邮件列表,所以它的 UI 不是最好的)

    希望对您有所帮助或至少让您领先一步!

    【讨论】:

    • 如果你专注于 PHP/Twig 组合,我会再次给 PhpStorm +1,它是一个付费 IDE,但成本很低,它对 PHP 的支持非常强大盒子,它也支持 Twig 开箱即用,没有模板,没有 xml 文件,没有语言定义,额外的下载,插件,什么都没有,直接开箱即用,完全支持 Twig。单个开发者 99 美元,续订 49 美元,通常假日 29.99 美元续订特价。
    • 是否支持 SFTP?我在开发服务器上进行所有更改
    • 目前仍在尝试让它在记事本++中工作。我找不到你说的 XML 定义文件(我只找到一个 html.xml,它有一堆用于自动完成的关键字声明)。你知道它应该在哪里吗?
    • 您实际上是在寻找 3 个文件,html.xml、langs.model.xml 和 stylers.model.xml
    • 看起来没有办法做我想做的事。有一天,我很快就会自己创建一个完整的 TWIG 定义。奖励您是因为您的回答详尽且内容丰富。
    【解决方案2】:

    我在这里为它做了一个荧光笔: https://github.com/Banane9/notepadplusplus-twig

    【讨论】:

    • 不确定我是否喜欢配色方案 - 但它肯定是一个好的开始。谢谢!
    【解决方案3】:

    此帖子可能重复:https://superuser.com/questions/40876/assigning-custom-extensions-to-a-languages-syntax-highlighting-in-notepad

    您需要做的就是在 Settings->Style Configurator 中添加您的自定义扩展

    点击 HTML 并在用户分机框中添加您的扩展。

    编辑:如果您想为您的语言添加更多规则,您可能需要在 notepad++->plugins->APIs 中添加另一个 XML 如果您认为它像 HTML,只需复制 html.xml 并另存为 twig.xml 向此 XML 文件添加更多规则

    【讨论】:

    • 我在我的问题中说我这样做了(我将其设置为将 .twig 视为 html)。我想要做的是在 TWIG 标签的定义中添加额外的代码突出显示。
    • 每次我尝试编辑该文件时,都没有看到任何结果。要么我得到错误,要么什么都没有发生。你可以发布一个例子吗?我会用一些关于 TWIG 的信息来更新我的帖子
    猜你喜欢
    • 1970-01-01
    • 2015-03-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    相关资源
    最近更新 更多