VimでiCalendarっぽいものをxmlっぽいものにする。
なんか曖昧なタイトルですいません。
仕様調べてないので(お
もしかしたらvCardとかいうのが正しい名前なのかも。
真夜中にふとicsをいじろうと思って、でもネットワークが無くて、わざわざPHSで繋ぐ程でもないなぁ...
と、いうことでvimでなぜかics to xml変換方法を探ってた。
とりあえず必要そうなのは
- エスケープ。何をエスケープすればいいかは不明。"<",">","&"ぐらい?
- 改行を繋ぐ。どうやら72文字あたりで改行しないと行けないらしい。次の行の先頭がスペースなら連結。
- ヘッダの挿入
- BEGIN:hogeを
に。END:hogeを に。 - hoge:fugaを
fuga に。 - hoge;name=value:fugaを
fuga に。
ぐらいなのかな?
これくらいならvimでできるべー。ということで、こんなファイルを用意。
:%s#&#&#g :%s#<#<#g :%s#>#>#g :%s#$\n ## ggO<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>^[:set ft=xml :%s#^BEGIN:\(.*\)$#<\1># :%s#^END:\(.*\)$#</\1># :%s#^\([^;:]*\)\(;\([^:=]*\)=\([^:]*\)\)\?:\(.*\)$#<\1 \3="\4">\5</\1># :%s# ="">#># gg=G:w! %<.xml :q!
途中にある^[は"Ctrl-v Esc"でエスケープ文字を入力ですじゃ。
このファイルを"ics2xml.vim"の様な名前で保存して、
$ vim -s ics2xml.vim cal.ics
するとcal.icsがxmlに変換されてcal.xmlが発生すると。
まぁ、つなり何が言いたいかというと、vim -s hoge でhogeを標準入力とみなして(?)vimにマクロ的というかバッチ的な処理ができるよーぐいらいの話。
とことでiCalendarの;name=valueの部分って複数現れないのかな?現れるとアウトなんだよな...これ。
というかそもそも仕様を読まずになるなという話か...。