* 一覧での大文字小文字の区別を無くそう [#p2794510]

- ページ: [[BugTrack2]]
- 投稿者: MetalGlue
- 優先順位: 普通
- 状態: 提案
- 状態: 着手
- カテゴリー: その他
- 投稿日: 2005-09-17 (土) 01:30:41
- バージョン: 
- バージョン: -1.5.0

** メッセージ [#z2002d10]

普通こういうの大文字小文字を区別しない方がいいと思うんですけど.

 --- wiki.orig/lib/func.php	2005-02-20 21:50:06.000000000 +0900
 +++ wiki/lib/func.php	2005-09-17 00:57:14.000000000 +0900
 @@ -313,7 +313,7 @@
  				$head = $other;
  			}
  		} else {
 -			$head = (preg_match('/^([A-Za-z])/', $page, $matches)) ? $matches[1] :
 +			$head = (preg_match('/^([A-Za-z])/', $page, $matches)) ? strtoupper($matches[1]) :
  				(preg_match('/^([ -~])/', $page, $matches) ? $symbol : $other);
  		}


--------
- いや、普通preg_match()で大文字小文字区別しない場合はiオプションを使うでしょ。 --  &new{2005-09-17 (土) 09:54:14};
- プログラムのやり方の問題じゃなくて,A と a を区別して項目分けするっていう仕様は変じゃない?って言ってるんだけど.一般常識の問題.それにpreg_matchでiオプションを使ったときに$matches[1]に大文字が入っているっていうことはそんなに自明ではない.プログラム的にはこちらのほうが適切と思う. -- [[MetalGlue]] &new{2005-09-20 (火) 10:50:30};
- ていうか,iオプション使ったってうまくいかないじゃないか! -- [[MetalGlue]] &new{2005-09-20 (火) 10:53:06};
- 自分の場合、一覧で、Aa、AB、Acを並べる時にAB→Aa→Acという順になるのは困りますね。Aa→AB→Acという順に出来れば助かりますが。 -- [[toa]] &new{2005-09-20 (火) 16:10:46};
-- ここの処理は [[ページの一覧>http://pukiwiki.sourceforge.jp/pukiwiki1.4/index.php?cmd=list]]((なんかdevだと無いのでお試しサイトの方)) の頭文字取得なので2文字目以降のソートには影響しないです。PageReadingも考慮すると数行上も書き換えが要ります。ついでに3番目のところも書き換えるとPage1~10がPage1,Page10,Page2~と並んでしまうのを変えられたりします((ページ名の一覧処理ってあちこちで別々に書いてるので全部書き換えるのは一苦労ですが))。 -- [[Cue]] &new{2005-09-20 (火) 19:31:48};
-- ここの処理は [[ページの一覧>http://pukiwiki.sourceforge.jp/pukiwiki1.4/index.php?cmd=list]]((なんかdevだと無いのでお試しサイトの方)) の頭文字取得なので2文字目以降のソートには影響しないです。PageReadingも考慮すると数行上も書き換えが要ります。ついでに3番目のところも書き換えるとPage1~10がPage1,Page10,Page2~と並んでしまうのを変えられたりします((ページ名の一覧処理ってあちこちで別々に書いてるので全部書き換えるのは一苦労ですが))。 -- [[Cue]] &new{2005-09-20 (火) 19:31:48};

 @@ -328,7 +328,7 @@
          // WARNING: Japanese code hard-wired
          if($pagereading_enable) {
              if(mb_ereg('^([A-Za-z])', mb_convert_kana($page, 'a'), $matches)) {
 -                $head = $matches[1];
 +                $head = strtoupper($matches[1]);
              } elseif (isset($readings[$page]) && mb_ereg('^([ァ-ヶ])', $readings[$page], $matches)) { // here
                  $head = $matches[1];
              } elseif (mb_ereg('^[ -~]|[^ぁ-ん亜-熙]', $page)) { // and here
 @@ -337,7 +337,7 @@
                  $head = $other;
              }
          } else {
 -            $head = (preg_match('/^([A-Za-z])/', $page, $matches)) ? $matches[1] :
 +            $head = (preg_match('/^([A-Za-z])/', $page, $matches)) ? strtoupper($matches[1]) :
                  (preg_match('/^([ -~])/', $page, $matches) ? $symbol : $other);
          }
  
 @@ -364,7 +364,7 @@
                  '"><strong>' . $head . '</strong></a>' . "\n" .
                  '  <ul>' . "\n";
          }
 -        ksort($pages);
 +        uksort($pages, 'strnatcmp');
          $retval .= join("\n", $pages);
          if ($list_index)
              $retval .= "\n  </ul>\n </li>\n";

- ありがとうございます.uksort のところは 'strnatcasecmp' の方がよさげですが,いまひとつ期待と違う動きをします.例えば makefile → MAKEFILE → Makefile となります(というか不定なのか...).大文字小文字を考慮しつつ大文字小文字を区別しない strnatnocasecmp ? とかを作るしかないかも. -- [[MetalGlue]] &new{2005-09-20 (火) 20:14:41};
-- 'strnatcasecmp'だと大文字小文字を区別しないのでmakefile, MAKEFILE, Makefileは同一とみなされてソートされないです。結果としてディレクトリエントリを読み込んだ順そのままに表示されてしまうと思います(前処理まで読んでないので断定できませんが)。 -- [[Cue]] &new{2005-09-20 (火) 21:24:03};
-- あ、phpのソートが非破壊ソートかどうかは知りません。ごめんなさい。 -- [[Cue]] &new{2005-09-20 (火) 21:38:17};
--- usortの方に注意がありました。同一の場合の順番は未定義です。 -- [[Cue]] &new{2005-09-20 (火) 22:05:34};
-- ksort($pages) をして大文字 → 小文字の順を確定させてから、uksort($pages, 'strnatcasecmp') を実行すれば実現可。 --  &new{2007-07-24 (火) 18:48:01};

- こんにちは :) この話題はきっと文化の違いであるに違いない・・・ -- [[henoheno]] &new{2005-09-20 (火) 21:45:28};
- ソートの基準の違いが「文化」の違いであることには同意しますが,A と a で別項目を立てる(しかも項目 A と a が B-Z によって隔てられている)というのはいくら文化が違ってもありえないと個人的には感じます. -- [[MetalGlue]] &new{2005-09-20 (火) 21:55:21};
-- 禿同。少なくとも日本人のみならず、アルファベットを使う欧米の人も首をかしげるかと。 -- [[toa]] &new{2005-09-21 (水) 10:55:32};
--- 「あ」と「ぁ」が別なのはわかりますけどね。 -- [[toa]] &new{2005-09-21 (水) 10:56:35};

#comment
//#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.007 sec.

SourceForge