Как добавить функции 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]*['&quot;]?[\w]+['&quot;]?">
            <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='&quot;' param2='&quot;' />
    <CommList param1="&apos;" param2="&apos;" />
    <CommList param1="--" param2="" />
    <CommList param1="--\[\[" param2="\]\]" />
    <Group name="FUNCTION" subgroup="" icon="0" child="0" autoexp="0" matchcase="1" fendtobbeg="" bbegtobend="\&lt;do\&gt;|\&lt;if\&gt;|\&lt;function\&gt;" keywords="">
        <Rules regexbeg="^[-\s]*function\s+" regexfunc="[\w_:.]+" regexend="\s*\([\w_,.\s]*\)" bodybegin="" bodyend="\&lt;end\&gt;" sep="" />
        <Rules regexbeg="^[-\s]*" regexfunc="[\w_:.]+" regexend="\s*=\s*function\s*\([\w_,\s]*\)" bodybegin="" bodyend="\&lt;end\&gt;" 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 теги необходимы для фильтрации соответствующей строки только для имени функции.