我正在尝试使用Notepad ++作为PicBasic代码的新编辑器。我希望能够使用函数列表功能,但我没有使用XML的经验,而Notepad ++网站也没有解释如何很好地创建自己的函数列表解析器。
例如,xml函数头看起来像:
<parser id="xml_node"
Notepad ++解析器如下所示:
<parser id="xml_node" displayName="XML Node" commentExpr="<!--([^-]|-(?!->))*-->">
<!-- Only match nodes with at least one attribute -->
<function
mainExpr="<[\w\?]+[\t ]+\w+[\t ]*=[\t ]*"[^"]+""
displayMode="$functionName">
<functionName>
<nameExpr expr="[^<]*"/>
</functionName>
</function>
</parser>
在Basic中,我的函数标题如下所示:
Function1:
如何编写解析器以拾取这些函数头?如果由于某种原因这不起作用,我可以在每个函数上面有一个标题注释,如下所示:
;Function1
'Funtcion1
我确实知道Named Bookmark插件,但这是一种慢得多的导航方式。如果你能以一种方式写下你的答案,这将有助于其他人看到这一点,知道如何为他们自己的代码语言编写解析器。
编辑:命名书签功能仅适用于C ++,HTML,...不适用于自定义语言文件。所以我甚至无法使用它。
答案 0 :(得分:1)
我假设你正在使用Bruce Snyder(我)的PBASIC Notepad ++用户定义语言。不幸的是,用户定义语言和自定义文件扩展的Notepad ++(v6.6.9)函数列表功能似乎被打破了。
您可以通过将“c”代码放入.bs2(PBASIC)文件并设置functionList.xml文件来查看“c”语言的已知工作代码的重命名副本,从而自行测试。
功能列表功能的np ++文档位于此Notepad++ Function List页面上。关联标签'ext ='和'userDefinedLangName ='(在'associationMap'部分中,使用一个或另一个)应该导致np ++使用你的解析器代码(在'parser'部分中),但它没有工作
这是functionList \ AssociationMap条目应该是:
<association ext=".bs2" id="pbasic_function2"/>
此外,为了防止您不熟悉它,解析器使用正则表达式为其查找内容指定过滤器。这就是看起来神秘的字符串。
PBASIC使用刻度标记进行评论(从任何地方到EOL) PBASIC函数从一行的开头开始,第一个字符是一个字母,名称的其余部分可以是字母数字,它们以冒号结尾。
以下是我为解析器提出的建议,但我无法在np ++中测试它:
<parser id="pbasic_function" displayName="PBASIC Function" commentExpr="('.*)?$">
<function
mainExpr="^[a-zA-Z]\w*:"
displayMode="$functionName">
<functionName>
<nameExpr expr="\w+"/>
</functionName>
</function>
</parser>
我在Python中测试了各个regexp表达式。
希望有所帮助。