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");
}