メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2008年1月21日月曜日

[mod_chxj][携帯] 絵文字定義の再構成(1)

現状の定義ファイルは以下のとおり。


<set>
<no>4</no>
<imode>
<sjis-hex1>f8</sjis-hex1>
<hex2>a2</hex2<
<string>[絵文字のSJIS2バイトコード</string>
<description>雪 青</description>
</imode>
<ezweb>
<a>60</a>
<b>60</b>
<c>60</c>
<d>60</d>
</ezweb>
<jphone>
<string>$Gh</string>
</jphone>
</set>


これを絵文字定義構造体の再設計(1)で定義した構造にあわせると・・・、


<set>
<no>1</no>
<imode>
<sjis-hex>f89f</sjis-hex>
<sjis-dec>63647</sjis-dec>
<eucjp-hex>8ffca1</eucjp-hex>
<eucjp-dec>9436321</eucjp-dec>
<utf8-hex>e63e</utf8-hex>
<utf8-dec>58942</utf8-dec>
<description>晴れ 赤</description>
</imode>
<ezweb>
<A>
<no>44</no>
<sjis-hex>f660</sjis-hex>
<sjis-dec>63072</sjis-dec>
<utf8-hex>e488</utf8-hex>
<utf8-dec>58504</utf8-dec>
</A>
<B>
<no>44</no>
<sjis-hex>f660</sjis-hex>
<sjis-dec>63072</sjis-dec>
<utf8-hex>e488</utf8-hex>
<utf8-dec>58504</utf8-dec>
</B>
<C>
<no>44</no>
<sjis-hex>f660</sjis-hex>
<sjis-dec>63072</sjis-dec>
<utf8-hex>e488</utf8-hex>
<utf8-dec>58504</utf8-dec>
</C>
<D>
<no>44</no>
<sjis-hex>f660</sjis-hex>
<sjis-dec>63072</sjis-dec>
<utf8-hex>e488</utf8-hex>
<utf8-dec>58504</utf8-dec>
</D>
</ezweb>
<softbank>
<no>74</no>
<sjis-hex>1b24476a0f</sjis-hex>
<sjis-dec>2147483647</sjis-dec>
<utf8-hex>e04a</utf8-hex>
<utf8-dec>57418</utf8-dec>
</softbank>
</set>
といった感じ。あとは定義ファイルを上記にのっとって修正するだけ。

Schemeでごにょごにょ。。。

で、ごにょごにょするSchemeのソースはこんな感じ・・・。
#!/usr/bin/env gosh

(use text.csv)
(use srfi-1)

(define-macro (define-accessors name-lst)
`(begin
,@(map (lambda (nm n)
`(define ,nm
(lambda (lst)
(list-ref lst ,n))))
name-lst
(iota (length name-lst)))))

(define-accessors
(docomo-no
docomo-name
docomo-sjis-hex
docomo-sjis-dec
docomo-eucjp-win-hex
docomo-eucjp-win-dec
docomo-utf8-hex
docomo-utf8-dec
au-no
au-sjis-hex
au-sjis-dec
au-utf8-hex
au-utf8-dec
softbank-no
softbank-sjis-hex
softbank-sjis-dec
softbank-utf8-hex
softbank-utf8-dec))

(define csv->xml
(lambda (reader)
(call-with-input-file "list.csv"
(lambda (in)
(port-for-each (lambda (lst)
(display #`"<set>
<no>,(docomo-no lst)</no>
<imode>
<sjis-hex>,(docomo-sjis-hex lst)</sjis-hex>
<sjis-dec>,(docomo-sjis-dec lst)</sjis-dec>
<eucjp-hex>,(docomo-eucjp-win-hex lst)</eucjp-hex>
<eucjp-dec>,(docomo-eucjp-win-dec lst)</eucjp-dec>
<utf8-hex>,(docomo-utf8-hex lst)</utf8-hex>
<utf8-dec>,(docomo-utf8-dec lst)</utf8-dec>
<description>,(docomo-name lst)</description>
</imode>
<ezweb>
<A>
<no>,(au-no lst)</no>
<sjis-hex>,(au-sjis-hex lst)</sjis-hex>
<sjis-dec>,(au-sjis-dec lst)</sjis-dec>
<utf8-hex>,(au-utf8-hex lst)</utf8-hex>
<utf8-dec>,(au-utf8-dec lst)</utf8-dec>
</A>
<B>
<no>,(au-no lst)</no>
<sjis-hex>,(au-sjis-hex lst)</sjis-hex>
<sjis-dec>,(au-sjis-dec lst)</sjis-dec>
<utf8-hex>,(au-utf8-hex lst)</utf8-hex>
<utf8-dec>,(au-utf8-dec lst)</utf8-dec>
</B>
<C>
<no>,(au-no lst)</no>
<sjis-hex>,(au-sjis-hex lst)</sjis-hex>
<sjis-dec>,(au-sjis-dec lst)</sjis-dec>
<utf8-hex>,(au-utf8-hex lst)</utf8-hex>
<utf8-dec>,(au-utf8-dec lst)</utf8-dec>
</C>
<D>
<no>,(au-no lst)</no>
<sjis-hex>,(au-sjis-hex lst)</sjis-hex>
<sjis-dec>,(au-sjis-dec lst)</sjis-dec>
<utf8-hex>,(au-utf8-hex lst)</utf8-hex>
<utf8-dec>,(au-utf8-dec lst)</utf8-dec>
</D>
</ezweb>
<softbank>
<no>,(softbank-no lst)</no>
<sjis-hex>,(softbank-sjis-hex lst)</sjis-hex>
<sjis-dec>,(softbank-sjis-dec lst)</sjis-dec>
<utf8-hex>,(softbank-utf8-hex lst)</utf8-hex>
<utf8-dec>,(softbank-utf8-dec lst)</utf8-dec>
</softbank>
</set>
"))
(lambda () (reader in)))))))

(csv->xml (make-csv-reader #\tab))


・・・できた。
きっともっとかっこよくできるに違いない。

0 コメント: