Sha256: 8f70b53ff018b97195e500dfa660dcfb5b1a228b5eb4693682907da23e0ffcf3
Contents?: true
Size: 1.77 KB
Versions: 7
Compression:
Stored size: 1.77 KB
Contents
# coding: utf-8 =begin For galakei, zenkaku katakana such as カタカナ will be converted to hankaku like カタカナ automatically when rendering html. This is standard practice, as zenkaku katakana taxes up too much screen space. =end class Galakei::Filter::Hankaku < Galakei::Filter::Base zenkaku = %w(ガ ギ グ ゲ ゴ ザ ジ ズ ゼ ゾ ダ ヂ ヅ デ ド バ ビ ブ ベ ボ パ ピ プ ペ ポ ヴ ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン ャ ュ ョ ァ ィ ゥ ェ ォ ッ ー) hankaku = %w(ガ ギ グ ゲ ゴ ザ ジ ズ ゼ ゾ ダ ヂ ヅ デ ド バ ビ ブ ベ ボ パ ピ プ ペ ポ ヴ ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン ャ ュ ョ ァ ィ ゥ ェ ォ ッ ー) # :stopdoc: MAPPING = zenkaku.zip(hankaku) def condition? galakei? && response.content_type =~ %r{text/html|application/xhtml\+xml} end def filter doc = Nokogiri::HTML(response.body) response.body = convert_text_content(doc).to_xhtml end def convert_text_content(doc) doc.children.each do |e| if e.kind_of?(Nokogiri::XML::Text) && e.parent.node_name != "textarea" e.content = zenkaku_to_hankaku(e.content) elsif e.node_name == "input" && %w[submit button].include?(e["type"]) e["value"] = zenkaku_to_hankaku(e["value"]) else convert_text_content(e) end end doc end def zenkaku_to_hankaku(s) MAPPING.each {|from, to| s.gsub!(from, to) } s end end
Version data entries
7 entries across 7 versions & 1 rubygems