サイログ。

~雑多な記事置き場~

Mac OS X対応化計画 Part1

Mac OS XでMiyakoを動かそうとしたときに起こった問題に対処してみようかというわけで、いろいろ情報を集めてみました。
(id:watura さん、MakさんThanks!)

フォントパスの指定

フォントパスが見つからない問題への対応。

pre7・8でのフォントパスの指定は、日本語名のパスが利用可能ということで、以下の様に指定しましたが、

@@font_base_path["mac_osx"] = ["./", "/ライブラリ/Fonts/", "/システム/ライブラリ/Fonts/"]

Mac OS Xのバージョンによっては、旧来の英語表記でのパス名に固定されているらしいので、英語表記でのパス名を
追加しました。

@@font_base_path["mac_osx"] = ["./", "~/Library/Fonts/", "/Library/Fonts/", "/System/Library/Fonts/",
                               "/ライブラリ/Fonts/", "/システム/ライブラリ/Fonts/"]

ファイルパスの文字コード

Mac OS XでのファイルパスはUTF-8なのですが、完全に対応し切れなかったため、できる限り、パス名のUTF-8変換を行う様にしました。
(MacOSはパス名が云々とコメントされている箇所が追加箇所)

あと、検索対象のファイル拡張子に「.otf」を追加しました。

    def Font.search_font_path_file(hash, path) #:nodoc:
      Dir.glob(path+"*"){|d|
        hash = Font.search_font_path_file(hash, d+"/") if test(?d, d)
        d = d.toutf8 if Miyako.getOSName == "mac_osx" # MacOSXはパス名がUTF-8固定のため
        hash[$1] = d if (d =~ /\/([^\/\.]+\.tt[fc])\z/ || d =~ /\/([^\/\.]+\.otf)\z/) # MacOSX対応
      }
      return hash
    end

    def Font.create_font_path #:nodoc:
      osn = Miyako::getOSName
      @@font_base_path[osn].each{|path|
        path = path.toutf8 if Miyako.getOSName == "mac_osx" # MacOSXはパス名がUTF-8固定のため
        @@name_2_font_path = Font.search_font_path_file(@@name_2_font_path, path)
      }
    end

    def Font.findFontPath(fname) #:nodoc:
      fname = fname.toutf8 if Miyako.getOSName == "mac_osx" # MacOSXはパス名がUTF-8固定のため
      return @@name_2_font_path.fetch(fname, nil)
    end

    def Font.get_font_inner(fname, fpath, size=16) #:nodoc:
      if Miyako.getOSName == "mac_osx" # MacOSXはパス名がUTF-8固定のため
        fname = fname.toutf8
        fpath = fpath.toutf8
      end
      @@font_cache[fname] ||= {}
      @@font_cache[fname][size] ||= SDL::TTF.open(fpath, size)
      return @@font_cache[fname][size]
    end

serif/sans_serifファイル名の指定

pre7,pre8では、serif,sans_serifファイル名に「ヒラギノ明朝 Pro W3.otf」「ヒラギノ角ゴ Pro W3.otf」を指定していましたが、
このファイル名で入っていないシステムがあるようですので、以下の様に対象のファイル名を追加しました。

    @@font_base_name["mac_osx"] = [{:serif=>"Hiragino Mincho Pro W3.otf", :sans_serif=>"Hiragino Kaku Gothic Pro W3.otf"},
                                      {:serif=>"ヒラギノ明朝 Pro W3.otf", :sans_serif=>"ヒラギノ角ゴ Pro W3.otf"},
                                      {:serif=>"VL-Gothic-Regular.ttf", :sans_serif=>"VL-Gothic-Regular.ttf"},
                                      {:serif=>"umeplus-gothic.ttf", :sans_serif=>"umeplus-gothic.ttf"}]

もしこれで、引っかからないときは・・・VL-Gothicかumeplus-gothicのインストールをお願いします・・・。

「miyako_no_katana」のインストール

Mac OS Xだけの話ではないのですが、拡張ライブラリmiyako_no_katanaがインストールされないバグがありました・・・。
次のバージョンで対応させます・・・。

参考にしたページのURL

Mac OS X 10: フォントの保存場所とその目的」
http://docs.info.apple.com/article.html?artnum=106417-ja

Mac OS X 10.4: フォントリスト」
http://support.apple.com/kb/HT1538?viewlocale=ja_JP

Mac OS X 10.3: フォントリスト」
http://docs.info.apple.com/jarticle.html?artnum=25710

「Way of My Life」
http://d.hatena.ne.jp/watura/comment?date=20080517#c

「[ruby-dev:25046] Re: 拡張ライブラリの拡張子(".bundle")」
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/25046