Как добавить функции Lua в список функций Notepad++.XML
Notepad++ предоставляет список функций.
в настоящее время я использую Notepad++ 6.5
functionList.xml определяет синтаксические анализаторы для имен функций с помощью регулярных выражений.
следующий код определяет синтаксический анализатор для функций c
<parser id="c_function" displayName="C source" commentExpr="((/*.*?*)/|(//.*?$))">
<function
mainExpr="^[t ]*((static|const|virtual)[s]+)?[w:]+([s]+[w]+)?([s]+|*[s]+|[s]+*|[s]+*[s]+)([w_]+[s]*::)?(?!(if|while|for))[w_]+[s]*([^)(]*)([s]*const[s]*)?[ns]*{"
displayMode="$functionName">
<functionName>
<nameExpr expr="(?!(if|while|for))[w_~]+[s]*("/>
<nameExpr expr="(?!(if|while|for))[w_~]+"/>
</functionName> </function>
</parser>
Я тестирую онлайн и все было нормально. Но это не работает для functionList.xml как-то. Список функций остается пустым.
Как это будет выглядеть для Lua функции?
вот моя попытка:
<parser id="lua_function" displayName="Lua Function" commentExpr="((--[[*.*?*)/|(--.*[nswt]*]]))">
<function
mainExpr="^[ts]*(function)[s]+[w]+("
displayMode="$functionName">
<functionName>
<nameExpr expr="(?:(function[s]+))[w]+"/>
</functionName>
</function>
</parser>
4 ответов
Я использую свое собственное определение для Notepad++. Основное отличие заключается в поддержке таких функций, как:local SomeFunction = function() end
и function SomeObject:Func() end
. Также он имеет некоторые базовые Луа вид таблицы compatibilitites.
<!-- Basic lua parser for functionList.xml in Notepad++ 6.5.3 -->
<!-- See http://notepad-plus-plus.org/features/function-list.html -->
<parser id="lua_function" displayName="Lua" commentExpr="--.*?$">
<!-- Basic lua table view, nested lua table not supported -->
<classRange
mainExpr="[.\w]+[\s]*=[\s]*\{"
openSymbole="\{"
closeSymbole="\}"
displayMode="node">
<className>
<nameExpr expr="[.\w]+"/>
</className>
<function
mainExpr="[.\w]+[\s]*=[\s]*['"]?[\w]+['"]?">
<functionName>
<funcNameExpr expr=".*"/>
</functionName>
</function>
</classRange>
<!-- Basic lua functions support -->
<function
mainExpr="(function[\s]+[.\w]+(:[\w]+)?)|([.\w]+[\s]*=[\s]*function)"
displayMode="$className->$functionName">
<functionName>
<nameExpr expr="((?<=function)[\s]+[.:\w]+)|(([.\w]+)(?=([\s]*=[\s]*function)))"/>
</functionName>
<className>
<nameExpr expr="[.\w]+(?=:)"/>
</className>
</function>
</parser>
добавить ассоциации
<association id="lua_function" langID="23" />
две вещи, которые я испытал с lua и списком функций, - это то, что я сначала должен использовать functionList.xml внутри %appdata%\Notepad++ для его работы, но это может быть моя установка во-вторых, что отсутствует в вашей configruations, это 2 вещи. Сначала ассоциация langID = "23"
<associationMap>
<association langID = "23" id="lua_function"/>
</associationMap>
второе регулярное выражение пропустит локальные функции, мое в настоящее время выглядит так
<parser id="lua_function" displayName="Lua">
<function mainExpr="^[\t|local\s]*function\s+[^0-9][_A-Za-z0-9]+\s*\("
displayMode="$functionName">
<functionName>
<nameExpr expr="[^0-9][_A-Za-z0-9]+\s*\("/>
<nameExpr expr="[^0-9][_A-Za-z0-9]+"/>
</functionName>
</function>
</parser>
добавление обоих в functionList.xml (в зависимости от установки, program files или %appdata%) заставит functionlist работать для языка lua внутри Notepad++ 6.5.1
фрагмент Плагин FunctionList 2.1:
<Language name="Lua" imagelistpath="">
<CommList param1='"' param2='"' />
<CommList param1="'" param2="'" />
<CommList param1="--" param2="" />
<CommList param1="--\[\[" param2="\]\]" />
<Group name="FUNCTION" subgroup="" icon="0" child="0" autoexp="0" matchcase="1" fendtobbeg="" bbegtobend="\<do\>|\<if\>|\<function\>" keywords="">
<Rules regexbeg="^[-\s]*function\s+" regexfunc="[\w_:.]+" regexend="\s*\([\w_,.\s]*\)" bodybegin="" bodyend="\<end\>" sep="" />
<Rules regexbeg="^[-\s]*" regexfunc="[\w_:.]+" regexend="\s*=\s*function\s*\([\w_,\s]*\)" bodybegin="" bodyend="\<end\>" sep="" />
<Rules regexbeg="^" regexfunc="[\w_]+" regexend="\s*=" bodybegin="\{" bodyend="\}" sep="" />
</Group>
</Language>
Я думаю, вы могли бы просто захватить последнюю версию этого плагина и больше не беспокоиться... :)
Я получил следующее, чтобы работать. Это довольно просто, и я не беспокоился о commentExpr
атрибут (поскольку это необязательно в любом случае; см. документация):
<?xml version="1.0" encoding="UTF-8" ?>
<NotepadPlus>
<functionList>
<associationMap>
<association langID = "23" id="lua_function"/>
</associationMap>
<parsers>
<parser id="lua_function" displayName="Lua">
<function mainExpr="^[\t\s]*function\s+[^0-9][_A-Za-z0-9]+\s*\("
displayMode="$functionName">
<functionName>
<nameExpr expr="[^0-9][_A-Za-z0-9]+\s*\("/>
<nameExpr expr="[^0-9][_A-Za-z0-9]+"/>
</functionName>
</function>
</parser>
</parsers>
</functionList>
</NotepadPlus>
вы обязательно добавили свой парсер в associationMap
тег?
несколько nameExpr
теги необходимы для фильтрации соответствующей строки только для имени функции.