Crystal-Creation

Function List (関数一覧のリスト表示)

Function Listでは、編集中のファイルに含まれる関数などの一覧を確認できます。そして関数名などをクリックすると、それが定義されている箇所へジャンプできます。

対象のファイルによってはリストの作成がいつまでも完了せず、Notepad++をクラッシュさせることがあります。タイトルバーの進捗表示が100%にならずに中途で停止するようならば、早急にこのプラグインを閉じます。

インストール

このプラグインはPlugin Managerからはインストールできないため、手動でインストールする必要があります。

Notepad++ 6.4.1以降、標準でFunction Listというプラグインが同梱されていますが、それはここで紹介するプラグインとは異なるものです。Notepad++ Notepad++ 6.4.1 released

ダウンロード

Notepad++ Plugins - Browse /Function List at SourceForge.net

ダウンロードするのは最新バージョンのdllです。たとえばv2.1が最新だとすると、FunctionList Plugin v2.1 at SourceForge.netの[FunctionList_2_1_UNI_dll.zip]がそれになります。

ダウンロードしたら、圧縮ファイルを展開します。

インストールの方法

プラグインには3つのファイルが含まれますが、FunctionList.dllはアプリケーションのpluginsフォルダ、FunctionListRules.xmlとC++.flbはplugins/Configフォルダに配置します。

ファイルの配置場所
ファイル フォルダ 内容
FunctionList.dll plugins プラグイン本体
FunctionListRules.xml※1 plugins/Config 関数などをパースするための規則の定義
C++.flb アイコンを格納したビットマップファイル
※1 Notepad++をインストーラでインストールしたときには、配置先は%APPDATA%/Notepad++/plugins/configとなります。

FunctionListRules.xmlを正しく配置しないと、「No Rule Defined」となり関数などを解析できません。

解析規則 (Parsing Rules)

メニューの【プラグイン → Function List → Language Parsing Rules】で、関数などのリストを作成する条件を設定できます。

このウィンドウ右下にある[Help]をクリックすると、使用方法が表示されます。ただひどく読みづらいため、ここに転載します。

Help for Function List Parsing Rules

- Match case:

This should be set, if the language is case sensetive. This is a global setting.

- Keyword forwarding:

  • Function end to body begin:
    Here you could define keywords which are prelude a new body begin keyword, but this is not the body begin. You could define more than one keyword by the '|' operator. For understanding see in example.
  • Body begin to body end:
    Same as before, but between body begin and end.

- Comment Rules:

Here you could define single and multiline "operators". If you set only the first entry, single line comment is selected. you could define more than one rule.

- Section Rules:

Define here the rules to find the section names in your script/language.

The next example explains this simplest

   ,--- Function begin = '[ \t]*function[ \t]+'
   |
   |    Function List Name = '[a-zA-Z0-9_]+'
   |           |
   |           |     Function end = '\([a-zA-Z0-9_, \t]+\)'
   |           |                    |
  \ /         \ /                  \ /
   '           '                    '
function name_of_functionXY ( param1, param2 )
begin                     <-- begins a body - Body begin = '\<begin\>'
    ...
    for (i < 3) than      <-- 'for' is a keyword that preludes an end
         ...
    end
    while (i) than        <-- 'while' is a keyword that preludes an end
         ...
    end
end                       <-- ends a body - Body end = '\<end\>'

For the example above the field 'Body begin to body end' could be set to '\<for\>|\<while\>'.

- Seperator between:

This is a "special" feature. With this setting you could make a difference between a function declaration and a function e.g.:

void functionName (param1, param2);

void functionName (param1, param2)
{
    ...
}

You should set it to ';'. Therefore, the function will not appear in the list.

Help - Function List

規則の定義方法 (FunctionListRules.xml)

可能ならば、前述の[Language Parsing Rules]ウィンドウ上で編集します。しかし編集時に強制終了することがあるため、規則の定義ファイルであるFunctionListRules.xmlを直接編集するほうが望ましいです。

ただしその場合にはNotepad++を閉じた状態で、Notepad++以外のエディタで編集します。これはNotepad++は終了時に、その時点の設定で定義ファイルを上書きするためです。

たとえばJavaは、

<Language name="Java" imagelistpath="">
    <CommList param1="//" param2="" />
    <CommList param1="/\*" param2="\*/" />
    <CommList param1='\&quot;' param2='\&quot;' />
    <Group name="FUNCTION" subgroup="" icon="0" child="0" autoexp="0" matchcase="1" fendtobbeg="" bbegtobend="\{" keywords="">
        <Rules regexbeg="\&lt;" regexfunc="~*[\w_]+" regexend="\s*\(\w\s_\.&lt;&gt;\[\],]*\)" bodybegin="\{" bodyend="\}" sep="" />
    </Group>
</Language>

のように定義されています。

言語の定義は、<Language>のname属性が大文字/小文字を区別して正確に記述されていないと、その言語として認識されません。

規則の定義に正規表現の誤りなどがあると、その言語の定義は適用されません。

定義の適用

[Language Parsing Rules]ウィンドウで編集した場合、[Ok]や[Try!]をクリックしても変更が反映されないことがあります。そのときにはNotepad++自体を再起動します。