#author("2016-11-08T03:12:56+09:00","","")
#author("2016-11-08T03:15:27+09:00","","")
* 一覧での大文字小文字の区別を無くそう [#p2794510]

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

** メッセージ [#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};

 @@ -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};

- [^ぁ-ん亜-熙]とかのS-JISっぽい指定ってUnicode版で平気なのかなぁ。
「熙」はS-JIS第二水準最後の文字だけどUnicodeではU+7199で、熟がU+719F、爪がU+722A、
牛がU+725B、犬がU+72ACと、全く狙から漏れる文字が膨大なのですが…。
なお、ちょっと整理しておきますと、Unicodeだとかなり並びが違うだけでなく、
漢字のカタマリなどは複数箇所に分散しています。 -- [[anonymous]] &new{2016-09-26 02:00:00};
 仮名安直ひとまとめA案 [ -ヿ]
 
 仮名安直ひとまとめB案 [ぁ-ヿ]
 
 ひらがな(合成用の濁点、半濁点が漏れる) [ぁ-ゖゝ-ゟ]
 
 カタカナ(長音記号が漏れる) [ァ-ヺヽ-ヿ]
 
 
 CJK部首補助  [\u2e80-\u2eff]
 
 康煕部首    [\u2f00-\u2fdf]
 
 漢文用記号   [\u3190-\u319f]
 
 CJK拡張漢字A  [\u3400-\u4dbf]
 
 CJK統合漢字  [\u4e00-\u9fff]
 
 CJK互換漢字  [\uf900-\ufaff]
 
 CJK拡張漢字B  [\u20000-\u2a6df]
 
 CJK拡張漢字C  [\u2a700-\u2b73f]
 
 CJK拡張漢字D  [\u2b740-\u2b81f]
 
 CJK互換漢字補助 [\u2f800-2fa1f]

//- 2016-09-26 02:00 のコメントの整形を変更させていただきました(newプラグインが機能していなかったため便宜上の秒単位を追記、Unicodeの並び順サンプルを整形済みとして一括りに変更、など) --  &new{2016-09-26 (月) 21:12:05};
- [[PukiWiki/1.4/マニュアル/一覧表示の五十音順分類]]や[[BugTrack2/186]](UTF-8版関係のまとめ)で、関連機能については[[BugTrack/562#v4428d05]]や[[BugTrack2/232]]のようにUTF-8版についての記述があるにはあるようですが… --  &new{2016-09-26 (月) 21:12:05};
- 対応しました。2005-09-20のCueさんのコードを反映しています。 [[osdn.net:projects/pukiwiki/scm/git/pukiwiki/commits/a33db83e25f27a1b862e87da1133dbf9240b5815]] $pagereading_enable が有効な環境はまれだと思うのでこの中はノーケアとしています。別件として扱うのが良いと思います -- [[umorigu]] &new{2016-11-08 (火) 03:12:56};

#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.049 sec.

SourceForge