#!/usr/bin/ruby -Ke # # dancingdoll.rb # -- dancing doll encoder/decoder # # NISHI Takao # $Id:$ LeftArm_1=['¨¦','¡À','¨¡','¡¿','¨£','¢¾','¡Á','¡¡'] RightArm_1=['¨¥','¡¿','¨¡','¡À','¨¤','¢¿','¡Á','¡¡'] Eye_1=['¡°','¡¦','¢Ì','¡¨'] Mouth_1=['_','x','o'] LeftArm_2=['¡Á','¡±','¨¡','¡²','¡á','¢á','¨¦','¨£', '¡À','¡¿','¢¾','¢¿','¢º','¢»','¡ã','¡³'] RightArm_2=['¡Á','¡±','¨¡','¡²','¡á','¢á','¨¥','¨¤', '¡À','¡¿','¢¾','¢¿','¢º','¢»','¡ä','¥Î'] Eye_2=['¡°%s¡°','¡¦%s¡¦','¡¨%s¡¨','¡Æ%s¡Æ', '¡Ç%s¡Ç','¡Ý%s¡Ý','¡÷%s¡÷','¡Ü%s¡Ü', '¡ª%s¡ª','¡ä%s¡ã','¡ö%s¡ö','¡ð%s¡ð', '¡á%s¡á','¡¬%s¡¬','§×%s§×','¢Ì%s¢Ì', '¡°%s¡Ý','¡Ý%s¡°','¡ä%s¡Ý','¡Ý%s¡ã', '¦È%s¦È','¦Ò%s¦Ò','¦Ï%s¦Ï','¦Å%s¦Å', '§Ù%s§Ù','¡®%s¡­','¡­%s¡®','£ø%s£ø', '£é%s£é','£Ï%s£Ï','¢Á%s¢Á','¢À%s¢À'] Mouth_2=['_','-','x','o','O','p','q','.'] def encode_1(str) i=0 bc=0 ret="" str.each_byte{|c| i+=1 x=sprintf("%03o",c) m=Mouth_1[(bc/5+c)%3] e=Eye_1[x[0].chr.to_i] l=LeftArm_1[x[1].chr.to_i] r=RightArm_1[x[2].chr.to_i] n=["\n",' ',' ',' ',' '][i%5] ret+=sprintf("%s¡Ã%s%s%s¡Ã%s%s",l,e,m,e,r,n) bc=c } ret end def decode_1(str) ret="" str.split(/\s+/).each{|d| x=Eye_1.index(d[4..5])*64 x+=LeftArm_1.index(d[0..1])*8 x+=RightArm_1.index(d[11..12]) ret+=x.chr } ret end def encode_2(str) i=0 ret="" buf=str.unpack('C*') until(buf.empty?) i+=1 arm=buf.shift face=buf.shift la=LeftArm_2[arm/16] ra=RightArm_2[arm%16] e='¢þ%s¢þ' m='O' unless(face.nil?) e=Eye_2[face%32] m=Mouth_2[face/32] end n=["\n",' ',' ',' ',' '][i%5] ret+=sprintf("%s|"+sprintf("%s",e)+"|%s%s",la,m,ra,n) end ret end def decode_2(str) ret=[] str.strip.split(/\s+/).each{|d| ret.push(LeftArm_2.index(d[0..1])*16+RightArm_2.index(d[9..10])) begin ret.push(Mouth_2.index(d[5].chr)*32+Eye_2.index(d[3..4]+"%s"+d[6..7])) rescue end } ret.pack('C*') end def decode(str) if(str.strip[2].chr=='|') return decode_2(str) else return decode_1(str) end end def usage print <