## oaprize_update.rb ## oAutoPagerize.jsのSITEINFOを更新するスクリプト ## http://bmky.net/diary/log/1575.html ## ## oAutoPagerize ## http://d.hatena.ne.jp/os0x/20071202/oautopagerize #!/usr/bin/env ruby require 'open-uri' # http://elpeo.jp/diary/20070131.html#p02 class String def touref require 'kconv' toutf16.unpack( "n*" ).map do |n| ( n < 128 ? '%c' : '\\u%04x' ) % n #( n < 128 ? '%c' : '&#%x;' ) % n end.join end end # UTF-8の2バイト文字にマッチする正規表現 utf8 = / [\xc0-\xdf][\x80-\xbf] | [\xe0-\xef][\x80-\xbf]{2} | [\xf0-\xf7][\x80-\xbf]{3} | [\xf8-\xfb][\x80-\xbf]{4} | [\xfc-\xfd][\x80-\xbf]{5} /x # SITEINFO取得 html = "" p 'getting SITEINFO' open( 'http://swdyh.infogami.com/autopagerize' ) { |r| html = r.read } # SITEINFO切り出し texts = [] html.gsub( /\s*(.*?)\s*<\/textarea>/m ) { texts << $1 } p 'find ' + texts.length.to_s # JSON化 siteinfo = [] texts.each do |t| t.gsub!( utf8 ) { $&.touref } t.gsub!( /(\w+)\('(\w+)'\)/, '\1("\2")' ) t.gsub!( /\[@(\w+)='(\w+)'\]/, '[@\1="\2"]' ) t.sub!( /\s*$/, '' ) t.gsub!( /\\/, '\\\\' ) t.gsub!( /'/, '\\\'' ) t.gsub!( /$/m, '\'' ) t.gsub!( /(^\w+)\s*?:\s*(\S)/m, '\1:\'\2' ) t.sub!( /id\("([^\)]+)"\)/, 'id("\1")/.' ) t.gsub!( /\\/, '\\\\' ) if t.match( /url:'/ ) siteinfo << '{' + t.split( /\n/ ).join( ',' ) + '}' end # oAutoPagerize.js読み込み js = "" scriptfile = 'oAutoPagerize.js' File.open( scriptfile ) { |r| js = r.read } js.gsub!( /\tvar INFOGAMI_SITEINFO = \[.*?^\];/m, "var INFOGAMI_SITEINFO = [\n " + siteinfo.join( "\n," ) + "\n];" ) # SITEINFOを書き換えて保存 File.open( scriptfile, "w" ){ |w| w.puts js }