青山です。

On Tue, Jul 27, 1999 at 07:09:19AM +0900,
Sinichiro Dezawa <dezawa / miya.fujifilm.co.jp> wrote:

> ん??
> 例えば ミ(半角)が \xD0 のコードになってる。

ああ、なるほど。これの元を作った(使っていた)時は Mac だったのですが、
Mac が特殊だったようです。Mac ではフォント切替えで JIS ローマ字(7 bit
code)を混ぜて扱う場合があるようです。

その時に1バイト系の文字コード表を元にして作ったのであのようになってし
まっていたんですね。2バイト系では後半を分けずにそのままつなぐようです。


#!/usr/local/bin/ruby -Ks
                      # スクリプトファイルも SJIS に
require 'jcode'

HanKana2ZenKana = {}
a = "\xA1"
"。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜".split(//).each{|c| HanKana2ZenKana[a] = c; a.succ! }

def hankana2zenkana!(string)
  string.gsub!(/./){|c|
    HanKana2ZenKana[c] or c
  }
  string.gsub!(/([カキクケコサシスセソタチツテトハヒフヘホ])゛/){|c|
    [c.unpack('n')[0] + 1].pack('n')
  }
  string.gsub!(/([ハヒフヘホ])゜/){|c|
    [c.unpack('n')[0] + 2].pack('n')
  }
  string.gsub!(/ウ゛/, 'ヴ')
  string
end

def hankana2zenkana(string)
  hankana2zenkana!(string.dup)
end

def kana2hira!(string)
  string.gsub!(/ヴ/, 'う゛')
  string.tr!('ァ-ン', 'ぁ-ん')
  string
end

def kana2hira(string)
  kana2hira!(string.dup)
end

while line = gets
  hankana2zenkana!(line)
  kana2hira!(line)
  print line
end


新版の jcode.rb ならばこれでも十分ですが、より高速化したい場合は、


Kana2Hira = {}
a = "ぁ"
("ァ" .. "ン").each{|c| Kana2Hira[c] = a.dup; a.succ! }

def kana2hira!(string)
  string.gsub!(/[ァ-ン]/){|c| Kana2Hira[c] }
  string.gsub!(/ヴ/, 'う゛')
  string
end


-- 
青山 和光 Wakou Aoyama <wakou / fsinet.or.jp>