category2sortkey
を、設けた。これによってカテゴリリストを出力した際、category2sortkeyで指定された文字順に表示されるようになる。ようやっとこれでページコードの文字コード順ではなくって、濁音・半濁音・促音・拗音を清音にして長音を無視した状態での順番にソートできるって寸法。
以下は修正箇所。
Install.pm
挿入。
#カテゴリ登録 $wiki->add_paragraph_plugin("category2belong","plugin::category2::Category2Belong","HTML"); #add by Ayukata #ソートキー $wiki->add_paragraph_plugin("category2sortkey","plugin::category2::Category2Sortkey","HTML");
Category2.pm
挿入。
# #add by Ayukata # <p> # category2sortkeyプラグインを使用して、ファイル一覧に表示するファイルを # 並びかえるソートキーを指定できます。 # 指定のない場合は、ファイル名がソートキーとなります。 # 複数指定した場合は、一番最後のソートキーが使用されます。 # </p> # <pre> # {{category2sortkey ソートキー}} # </pre>
Category2Sortkey.pm
新規。
############################################################################### # # <p>多階層のページのカテゴリリストに表示するページのソート対象となるキーを設定します。</p> # <pre> # {{category2sortkey ソートキー}} # </pre> # ############################################################################### package plugin::category2::Category2Sortkey; use strict; #============================================================================== # コンストラクタ #============================================================================== sub new { my $class = shift; my $self = {}; return bless $self,$class; } #============================================================================== # インラインメソッド #============================================================================== sub paragraph { return ""; } #============================================================================== # アクションハンドラ # # ページのソートキーを取得する。ソートキーが設定されていない場合は、ページ名が # ソートキーになる。 #============================================================================== sub get_category_sortkey{ my $wiki = shift; my $page = shift; my $sortkey = ""; my $content = $wiki->get_page($page); foreach my $line (split(/\n/, $content)){ if(index($line," ")!=0 && index($line,"\t")!=0 && index($line,"//")!=0){ while($line =~ /{{(category2sortkey\s+(.+?)\s*)}}/g){ my $inline = $wiki->parse_inline_plugin($1); $sortkey = @{$inline->{args}}[0]; } } } if($sortkey eq ""){ $sortkey = $page; } return $sortkey; } 1;
Category2Handler.pm
挿入。
use strict; use plugin::category2::Category2Title; #add by Ayukata use plugin::category2::Category2Sortkey;
sub get_category
my @temp = split(/,/, $_); pop(@temp); #add by Ayukata pop(@temp);
sub get_pagename
my @data = split(/,/, $category_data); my $page = pop(@data); #add by Ayukata my $sortkey = pop(@data);
sub get_page_category_data
my $content = $wiki->get_page($page); my @category_data; #add by Ayukata my $sortkey = &plugin::category2::Category2Sortkey::get_category_sortkey($wiki,$page);
if($category ne ""){ #rep by Ayukata #push(@category_data, "$category,$page"); push(@category_data, "$category,$sortkey,$page"); }
if(@category_data == 0){ #rep by Ayukata #push(@category_data, &get_NoCategory().",$page"); push(@category_data, &get_NoCategory().",$sortkey,$page"); }