2015/10/18

前回の続きです。今回は、前回作ったGet-JpWord関数を使って取得した、読み仮名を利用する話になります。

文章の読み仮名を表示する

単に指定文章の読み仮名を表示するという用途には、前回作製したGet-JpWord関数はそのままだと使いにくいので、さらにラップした関数を用意しました。

function Get-JpYomi
{
    param(
        [parameter(ValueFromPipeline=$true)]
        [PSObject[]]
        $InputObject,

        [string]
        $Separator = "",

        [ValidateSet("YomiOnly", "Furigana", "RubyTag")]
        [string]
        $Format = "YomiOnly"
    )
    process
    {
        foreach($o in $InputObject)
        {
            $phenemes = if($o -is [Windows.Globalization.JapanesePhoneme])
            {
                @($o)
            }
            else
            {
                $o.ToString()  | Get-JpWord -MonoRuby:$($Format -eq "RubyTag")
            }

            ($phenemes | foreach {
                if($Format -eq "YomiOnly")
                {
                    $_.YomiText
                }
                else
                {
                    if($_.DisplayText -match "\p{IsCJKUnifiedIdeographs}")
                    {
                        if($Format -eq "RubyTag")
                        {
                            "<ruby><rb>$($_.DisplayText)</rb><rt>$($_.YomiText)</rt></ruby>"
                        }
                        elseif($Format -eq "Furigana")
                        {
                            "$($_.DisplayText)($($_.YomiText))"
                        }
                    }
                    else
                    {
                        $_.DisplayText
                    }
                }
            }) -join $Separator
        }
    }
}

Get-JpYomi "読み仮名を表示したい文章をここに書きます。"

のようにすると、以下のような結果が表示されます。

よみがなをひょうじしたいぶんしょうをここにかきます。

また、Separatorパラメータを指定すると、読み仮名に区切り文字を挿入することもできます。例えば、

Get-JpYomi "読み仮名を表示したい文章をここに書きます。"  -Separator " "

とすると結果は、

よ み がな を ひょうじ し たい ぶんしょう を ここ に か き ます 。

のようになります。

単に読み仮名を知りたい時に便利かと思います。漢字の読み方を知りたい時にさくっと使うのもいいかも。(読み方が複数あっても1つしか表示されませんが)

文章に振り仮名を付けたい時には、以下のようにします。

Get-JpYomi "読み仮名を表示したい文章をここに書きます。" -Format Furigana

結果はこうなります。

読(よ)み仮名(がな)を表示(ひょうじ)したい文章(ぶんしょう)をここに書(か)きます。

ここでポイントとなるのは、漢字部分は振り仮名を付けるが、それ以外には必要ないので付けないという処理です。それには正規表現"\p{IsCJKUnifiedIdeographs}"を用いています。\p{}は正規表現の「名前付き文字クラス」と呼ばれるもので、IsCJKUnifiedIdeographsというのはUnicodeにおける漢字を表すブロック名になります。ちなみにIsHiraganaでひらがな、IsKatakanaでカタカナにマッチさせることもできます。

Formatパラメータは、デフォルトのYomiOnly(読み仮名のみ出力)、Furigana(入力に振り仮名を付けて出力)の他に、RubyTag(HTMLのrubyタグを生成して出力)というのを用意しています。これを使うと、

<ruby><rb>読</rb><rt>よ</rt></ruby>み<ruby><rb>仮</rb><rt>が</rt></ruby><ruby><rb>名</rb><rt>な</rt></ruby>を<ruby><rb>表</rb><rt>ひょう</rt></ruby><ruby><rb>示</rb><rt>じ</rt></ruby>したい<ruby><rb>文</rb><rt>ぶん</rt></ruby><ruby><rb>章</rb><rt>しょう</rt></ruby>をここに<ruby><rb>書</rb><rt>か</rt></ruby>きます。

という出力が得られます。実際にHTMLとして表示させると以下のようになります。

ひょうしたいぶんしょうをここにきます。

50音順ソート&グループ化

Get-JpYomi関数の応用例的なものになります。漢字の読みが分かるということは、50音順にソートしたり、頭文字でグループ化できるようになるということですね。やってみましょう。

ディレクトリ名を50音順でソートするには、

dir -Directory  | sort {$_.Name | Get-JpYomi}

のようにします。例えば私のミュージックフォルダ(アーティスト名ごとにフォルダが作られている)に対して実行すると以下のようになります。

image

うーん、アニソンばっかりだな…。それはともかく、ちゃんと50音順ソートされていることがお分かりいただけるかと思います。中には読み方間違ってるやつもありますが。

頭文字でグループ化して表示するというのもやってみましょう。

dir -Directory |
    select Name,
        @{Name = "NameYomi"; Expression = {$_.Name | Get-JpYomi}},
        @{Name = "FolderCount"; Expression = {@(dir $_.FullName -Directory).Length}} |
    group {$_.NameYomi.Substring(0,1)}|
    sort Name |
    foreach {
        Write-Host "【$($_.Name)】($($_.Count))"
        $_.Group|%{
            Write-Host "$($_.Name)($($_.NameYomi)) $($_.FolderCount)"
        }
        Write-Host
    }

まずファイル名、読み、サブフォルダの数(当方環境ではアルバム数に対応)をそれぞれプロパティとして抽出し、読みの頭文字(SubString(0,1)で取得)でグループ化し、頭文字グループを50音順ソートし、結果を表示しています。

結果はこんな感じです。

image

まあ頑張って読んでいる方だと思います。むらかわなしぎぬ…。

また長くなったので次回に続きます。次回は「分かち書き」の話。

2011/10/09

WindowsサイドバーガジェットはWindows Vistaの登場で追加されたプログラムで、デスクトップ上にガジェットと呼ばれるミニプログラムを貼り付けることができます。ガジェットはHTML/CSS/J(ava)Script (+VBScript)で記述することができます。Windows7の登場で名称が「Windowsデスクトップガジェット」と変更され、一部仕様に変更が加えられたものの現役でした。

ところが先月末(2011/09)頃に、サードパーティー製のものを含む多数の追加ガジェットのWindows Live Galleryでの公開が中止されました。現在は登録されたガジェットのリストは表示されるものの、ダウンロードができない状態です。まもなくサイト自体が閉鎖されるものと思われます。

現時点でWindows7で「ガジェット」を実行し、そこに表示される「オンラインで追加のガジェットを取得」リンクをクリックするとデスクトップ ガジェット - Microsoft Windowsというページに飛ばされますが、ここでは(おそらく人気上位であった)ガジェットが数点のみダウンロードできるという状態です。

この措置に対するMicrosoftの公式コメントがこちらになります。Looking for gadgets? - Downloads - Microsoft Windows

この記事を要約すると

  • MicrosoftはWindows Live Galleryを閉鎖し、今後、新しいガジェットの開発およびアップロードをサポートしない
  • ただし人気ガジェットはまだダウンロードできるようにしておくよ
  • ガジェット製作者はよりリッチなプラットフォームであるMetro Style Appにシフトしてね
  • でもまだガジェットに興味がある人もいるだろうから一応開発ドキュメントは残しておくよ
  • まだガジェットを公開したいのならCodePlexでどうぞ

という感じになるかと思います。まだPreview版しか出てない次期Windowsでしか動かないMetro Style Appを移行先に指定するのはかなり無理があるように思いますが、どうもMicrosoftはMetroと技術的にかぶるガジェットをさっさと亡きものにしたいようです。Windows 8のDeveloper Previewのクラシックデスクトップでは一応、今のところはデスクトップガジェットの機能は削除されていませんが、これからの開発の過程で削除されてしまう可能性も十分にありそうです。

ちなみにデスクトップガジェットはたとえIE9をインストールしてもHTML5コンテンツは動きませんし、JavaScriptもチャクラではなくJScript5.8で動きます。この時点でガジェットの未来はなさそうだと踏んでいましたが、思ったより早い終焉を迎えるようです。

Metro Style AppはたしかにWinRT上でJavaScript+HTML5+CSS3で開発することができ、ガジェットで培われたノウハウの一部は流用できる可能性はあるものの、ガジェットから単純に移行というのは難しそうです。利用者にとってもガジェットをデスクトップに常時複数表示させておき、作業中にもほかの情報を参照できるメリットが失われるのは厳しいものがあるように思います(Metro Style Appは一つだけクラシックデスクトップと同時に表示できる)。

告知も私の知るかぎりなかったですし、気づけばいきなり消滅していたという感じで、お困りの方も今後増えそうです(たしかにガジェットはいまいち流行ってなかったですがいきなりはヒドイ)。とりあえず現在追加インストールしているガジェットは、今後入手困難になる可能性が高いので、各自でバックアップを取っておくことをお勧めします。

.gadgetファイルそのものを保存していなくても、C:\Users\ユーザー名\AppData\Local\Microsoft\Windows Sidebar\Gadgetsの各サブフォルダがガジェット一つ一つに対応しているので、これをバックアップしておけば問題ありません。再インストールも単にこれらのファイルを同じ場所に書き戻すだけでOKです。

また、.gadgetファイルは単に関連ファイルをzipで固めたものなので、ご自分でこれらの各サブフォルダをzipにして.gadgetにリネームすればインストーラーを復元することもできます。

これらの措置は自己責任にてお願いします。各ガジェット作者のアナウンスがある場合はそちらに従ってください。

それにしても、WindowsデスクトップにHTML+スクリプトで記述されたミニプログラムを配置するといえば古くは「アクティブデスクトップ」まで遡ることになると思いますが、「ガジェット」で安定するかと思ったら二世代しか持ちませんでしたね。競合するGoogleデスクトップも終了しましたし、あまりウケがよろしくないんでしょうか。Metro Style Appはその点どうなんでしょうね?

元記事:http://blogs.wankuma.com/mutaguchi/archive/2011/10/09/204219.aspx

2007/05/24

基本は赤坂さんのCodezineの記事を追っていくことにしましょう。

まずガジェットのひな形を作るには

1.ガジェット保存フォルダ(C:\Users\<ユーザー名>\AppData\Local\Microsoft\Windows Sidebar\Gadgets\)に

2.作るガジェットのサブフォルダ(<ガジェット名.gadget>)を作り、

3.その中にgadget.xmlファイルを作る

4.また、ガジェットの実体であるhtmlファイルを作る

これで、ガジェットの追加ダイアログに表示されるようになります。

例は赤坂さんの記事にあるので、ここでは実際のコードを。

■C:\Users\daisuke\AppData\Local\Microsoft\Windows Sidebar\Gadgets\Large_Feed.gadget\gadget.xml



 フィード ヘッドライン(大)
 1.0.0.0
 
  
   
   Full
   
  
 


■C:\Users\daisuke\AppData\Local\Microsoft\Windows Sidebar\Gadgets\Large_Feed.gadget\large_feed.html


 
  フィード ヘッドライン(大)
    
    
 
 
  

ここにフィードが表示されます。

さて、これを実際に表示させるとこのようになります。

ガジェットのひな形

まだ何も機能しませんが、立派にガジェットができました。
gadget.xmlの文法などは赤坂さんの説明をご参照ください。

ちなみにドラッグしてデスクトップに置く(アンドックする)とサイズが変わります。これは、System.Gadget.onDockイベントにサイズ変更のための関数(Function)の関数ポインタを代入していることで実現しています。VBScriptではGetRef関数が関数ポインタを扱う関数です。関数ポインタってなに?ってことはあまり気にしないで、とにかくイベントと実際の動作を関連付けるとだけ理解してればいいでしょう。

今回はここまでです。次回はいよいよRSS取得に挑戦してみます?予定は未定w

元記事:http://blogs.wankuma.com/mutaguchi/archive/2007/05/24/78230.aspx

Copyright © 2005-2016 Daisuke Mutaguchi All rights reserved

mailto: mutaguchi at roy.hi-ho.ne.jp

Awards

Books

Twitter