image

  • フォト Amazonギフト券
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません

検索

最近のトラックバック

無料ブログはココログ

« 2007年7月12日 | トップページ | 2007年7月14日 »

2007年7月13日

2007-07-13

xfy/xvcd の言語リソース編集ツールが欲しい (その3.8)

orderedhash (順番を保持する Hash)をつかって
xfy/xvcd のリソースファイルファイルを 独自の管理用ファイル形式にマージ
する変換処理 (ruby スクリプト) を書き直した。

1. orderdhash.rb
2. langs2res.rb

管理用ファイルは xml 形式だが、さらに csv との相互変換をつくれば。
Excel などで編集/閲覧をすることも可能になるなぁ。
OpenOffice で編集できるようにするのも良いかも。
xfy と OpenOffice を上手に組み合わせて使うことを考えていくべきかもしれない。
あるいは、リソースを DB に格納するというアプローチもありかもしれない。

1. orderdhash.rb

# See - http://rubyist.g.hatena.ne.jp/onishi/comment?date=20060519
#     - http://blog.kks-online.net/archives/2006/06/ruby_1.html

class OrderedHash < Hash
  def initialize
    @keyodrer = []
    super
  end

  def keys
    @keyodrer
  end

  def values
    # @keyodrer.collect{|k| self[k]}
    self.values_at(*@keyodrer)
  end

  def []=(_key, _value)
    @keyodrer << _key unless @keyodrer.include?(_key)
    super(_key, _value)
  end

  def delete(_key)
    @keyodrer.delete(_key)
    super(_key)
  end

  def each
    @keyodrer.each{|k|
      yield(k, self[k])
    }
  end
end
#--- End of File ---

2. langs2res.rb

# usage: $ ruby langs2res.rb init a.xml -ja ja/*.resource -en en/*.resource
#        output marged data to a.xml

require 'rubygems'
require 'builder'
require 'xmlsimple'
require 'orderedhash'
require 'pp'

def usage(str)
  puts str
  puts "usage: ruby lang2res.rb [init|import] res.xml [-ja|-en] foo.xml ... "
  puts "   ex: ruby lang2res.rb init res.xml -ja ja/*.resource -en/*.resousrce"
  abort
end

def readLangResource(cats, lang, f)
  doc = XmlSimple.xml_in File.open(f)
  cat = File.basename(f, ".resource")

  cats[cat] = OrderedHash.new if cats[cat] == nil
  doc["string-resource"].each {|m|
    name = m["name"]
    val = m["content"]

    cats[cat][name] = Array.new  if cats[cat][name] == nil
    cats[cat][name].push({:lang=>lang, :message=>val})
  }
end

def doImport(res, cats, ja, en)
  ja.each {|j|
    readLangResource(cats, 'ja', j)
  }

  en.each {|e|
    readLangResource(cats, 'en', e)
  }

  writeRes(res, cats)
end

def writeRes(res, cats)
  str = ""
  xm = Builder::XmlMarkup.new(:indent=>2, :target=>str)
  xm.instruct!
  xm.instruct!("com.xfy vocabulary-connection", :href=>"resedit.xvcd")
  xm.tag!('r:categories', 'xmlns:r'=>'http://xmlns.example.com/developer/tutorial/resedit') {
    cats.each {|cat, label|
      xm.tag!('r:category', :name=>cat) {
        label.each {|id, array|
          xm.tag!('r:item', {:id=>id}) {
            array.each {|m|
              xm.tag!('r:message', {:lang=>m[:lang]}, m[:message])
            }
          }
        }
      }
    }
  }
  str.gsub!(/(¥&#)([[:xdigit:]]+);/){[$2.to_i].pack("U")}
  File::open(res, "w") {|f|
    f.write str   
  }
end

#==========================================
command = ARGV.shift

outRes = ARGV.shift
ja = Array.new
en = Array.new
lang = ""

while arg = ARGV.shift
  case arg
  when "-ja"
    lang = arg
  when "-en"
    lang = arg
  else
    ja << arg if lang == "-ja"
    en << arg if lang == "-en"
  end
end

case command
  when "init"
    cats = OrderedHash.new
    doImport(outRes, cats, ja, en)
  when "import"
    cats = readResource(outRes)  #  not yet implemented
    doImport(outRes, cats, ja, en)
  else
    usage("illegal argument #{command}")
end
#--- End of File ---

ピックアップ: パックマンがプレイできるFirefox拡張, 優秀なプログラマの8つの条件, etc...

- http://www.popxpop.com/archives/2007/07/firefoxpacman.html
> > 息抜きにいかが?パックマンがプレイできるFirefox拡張『Pacman』 | P O P * P O P

xfy で こういった video game をつくってみてほしいなぁ。

- http://blog.creamu.com/mt/2007/07/marriyell.html
> > 心打たれる恋愛企画サイト『Marriyell』 | CREAMU

- http://www.future-planning.net/x/modules/news/article.php?storyid=2484
> > FPN-ソニーのアプリキャストに感じる閉塞感と可能性

- http://e0166.blog89.fc2.com/blog-entry-224.html
> > そんなプログラマは必要ない!優秀なプログラマの8つの条件*ホームページを作る人のネタ帳

- http://www.ariel-networks.com/blogs/tokuriki/cat36/cat37/plaxo.html
> > Plaxo (GoogleやOutlookと同期できるオンラインアドレス帳) : ワークスタイル・メモ

- http://blog.goo.ne.jp/onscreen/e/b4074350a838b7c0a5031fde4ec973bc
> > 日々 是 変化ナリ 〜 DAYS OF STRUGGLE 〜 読後評:ウィキノミクス マスコラボレーションによる開発・生産の世紀へ

- http://blogs.itmedia.co.jp/yukawa/2007/07/post_f277.html
> > 『デジタル・ワークスタイル』『ヤバい情報収集術』 - 祐川京子のブログ [ITmedia オルタナティブ・ブログ]

« 2007年7月12日 | トップページ | 2007年7月14日 »

mokuji

2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

google

  • twitter
  • __
  • _
    Googleボットチェッカー

合わせて読む

  • 合わせて読む
    フィードメーター - katoy: cocolog あわせて読みたい

リンク