#! /usr/bin/env ruby # # hns2td.rb # HyperNikkiSystem to tDiary converter # # Usage: ruby hns2rd.rb hnf_files... # # ver 1.0.0 2001-09-16 kitaj, yamk # ver 1.0.1 2001-09-17 yamk # ver 1.0.2 2001-09-17 yamk fixed SUB tag # ver 1.1.0 2001-09-19 yamk append TENKI, SUIMIN tag. # ver 1.1.1 2001-09-26 yamk append text_save # ver 1.1.2 2002-01-14 kazuhiko support IMG, LIMG tag etc. # ver 1.1.3 2002-02-08 kazuhiko support MARK tag # support image alignment # support footnote plugin # $KCODE = 'e' require 'tdiary' class MyTDiary < TDiary def hns2tdiary_conv(body) bodyTmp = '' cat = '' count = 0 newSubSection = true listMode = false preMode = false blockMode = false hnsUrl = %r|(http://www.archi.kyoto-u.ac.jp/~kazuhiko/diary/)?\?.+&to=\d+\#(\d{8})(\d+)| titleTmp = '' body.each do |sLine| sLine.chomp! # sLine.gsub!(/&/, '&') sLine.gsub!(/, '<') sLine.gsub!(/>/, '>') sLine.gsub!(/\"/, '"') case sLine when /^$/ next when /^OK/ next when /^\!\s*(.*)/ bodyTmp += '\n" when /^\!#/ next # standard user variables when /WINE\s*(.*)/ bodyTmp += "お酒\n
\n#{$1}\n<\p>\n\n" count += 1 when /MEAL\s*(.*)/ bodyTmp += "献立\n
\n#{$1}\n
\n\n" count += 1 when /TENKI\s*(.*)/ bodyTmp += "天気\n\n#{$1}\n
\n\n" count += 1 when /BASHO\s*(.*)/ bodyTmp += "場所\n\n#{$1}\n
\n\n" count += 1 when /TAIJU\s*(.*)/ bodyTmp += "体重\n\n#{$1}\n
\n\n" count += 1 when /TAION\s*(.*)/ bodyTmp += "体温\n\n#{$1}\n
\n\n" count += 1 when /SUIMIN\s*(.*)/ bodyTmp += "睡眠時間\n\n#{$1}\n
\n\n" count += 1 when /BGM\s*(.*)/ bodyTmp += "BGM\n\n#{$1}\n
\n\n" count += 1 when /HOSU\s*(.*)/ bodyTmp += "歩数\n\n#{$1}\n
\n\n" count += 1 when /HON\s*(.*)/ bodyTmp += "読んだ本\n\n#{$1}\n
\n\n" count += 1 when /KITAKU\s*(.*)/ bodyTmp += "帰宅時間\n\n#{$1}\n
\n\n" count += 1 when /WALK\s*(.*)/ bodyTmp += "歩いた時間\n\n#{$1}\n
\n\n" count += 1 when /RUN\s*(.*)/ bodyTmp += "ジョギング時間\n\n#{$1}\n
\n\n" count += 1 # commands when /^CAT\s+(.+)/ cat = $1 when /^NEW\s?(.*)/ mes = $1 if mes == '' mes = ' ' end if count > 0 bodyTmp += "\n\n" end count += 1 if cat != '' bodyTmp += '[' + cat + '] ' cat = '' end bodyTmp += mes + "\n" newSubSection = true when /^LNEW\s+(\S+)\s+(.+)/ link = $1 mes = $2 # print "link=[#{link}]\n" # Nikki Link if hnsUrl =~ link link = "?date=%s#p%02d" % [$2, $3] # print "link=[#{link}]\n" end if count > 0 bodyTmp += "\n\n" end count += 1 if cat != '' bodyTmp += '[' + cat + '] ' cat = '' end bodyTmp += "<#{mes}\n" newSubSection = true when /^SUB\s+(.+)/ bodyTmp += '' if ! blockMode && ! newSubSection mes = $1 if count > 0 bodyTmp += "\n" if ! newSubSection end count += 1 bodyTmp += "* #{mes}
\n" newSubSection = true when /^LINK\s+(\S+)\s*(.*)/ link = $1 mes = $2 mes.sub!(/~$/, '') # nikki link if hnsUrl =~ link link = "?date=%s#p%02d" % [$2, $3] end bodyTmp += '' if newSubSection bodyTmp += "\n#{mes}\n" newSubSection = false when /^URL\s+(\S+)\s*(.*)/ link = $1 mes = $2 mes.sub!(/~$/, '') # Nikki Link if hnsUrl =~ link link = "?date=%s#p%02d" % [$2, $3] end bodyTmp += '
' if newSubSection bodyTmp += '#{mes}(#{link})' newSubSection = false when /^PRE/ bodyTmp += '
' if ! blockMode bodyTmp += "\n" if ! newSubSection bodyTmp += "\n" preMode = true newSubSection = false when /^\/PRE/ bodyTmp += "\n" preMode = false newSubSection = true when /^FONT\s+(\S+)\s+(\S+)\s(.+)/ bodyTmp += '
' if newSubSection bodyTmp += '#{$3}' newSubSection = false when /^STRIKE\s+(.+)/ bodyTmp += '
' if newSubSection
bodyTmp += '#{$1}'
newSubSection = false
when /^LSTRIKE\s+(\S+)\s+(.+)/
link = $1
mes = $2
mes.sub!(/~$/, '')
# Nikki Link
if hnsUrl =~ link
link = "?date=%s#p%02d" % [$2, $3]
end
bodyTmp += '
' if newSubSection
bodyTmp += "\n#{mes}\n"
newSubSection = false
when /^STRONG\s+(.+)/
bodyTmp += '
' if newSubSection bodyTmp += "\n#{$1}\n" newSubSection = false when /^SPAN\s+(\S+)\s+(.+)/ bodyTmp += "\n#{$2}\n" newSubSection = false when /^DIV\s+(\S+)\s+(.+)/ bodyTmp += '
' if ! blockMode bodyTmp += "\n\n" newSubSection = false blockMode = true when /^\/CITE/ bodyTmp += "\n" newSubSection = true blockMode = false when /^FN/ # bodyTmp += '
' if newSubSection # bodyTmp += ' (' bodyTmp += "<%=fn \'" newSubSection = false when /^\/FN/ # bodyTmp += ') ' bodyTmp += "\' %>" newSubSection = false when /^P$/ bodyTmp += "
\n" newSubSection = false blockMode = true when /^\/P$/ bodyTmp += "\n
\n" newSubSection = true blockMode = false when /^IMG\s+(\S)\s+(.+)/ imgsrctmp = $2 if $1 == "l" align = ' align="left"' elsif $1 == "r" align = ' align="right"' else align = '' end if /(\S+)\s+(\S+)/ =~ imgsrctmp imgsrc = $1 alt = $2 else imgsrc = imgsrctmp; alt = '[' + imgsrctmp.sub(/.*\//, '') + ']' end bodyTmp += "\n' if newSubSection && ! blockMode
if /~$/ =~ sLine
sLine.sub!(/~$/, '')
sLine += "
\n"
newSubSection = true
else
newSubSection = false
end
bodyTmp += sLine
bodyTmp += "\n" if preMode
end
end
@title = titleTmp.chomp
bodyTmp
end
def append(filename)
y, m, d = filename.scan(/(\d\d\d\d)(\d\d)(\d\d)/)[0]
@date = Time::local y, m, d
@body = File::readlines(filename).join.to_euc
@title = ''
transaction(@date) do |diaries|
body = hns2tdiary_conv(@body);
@diary = Diary.new(@date, @title, body)
olddata = diaries[@date.strftime("%Y%m%d")]
if nil != olddata
olddata.replace(@date, @title, body);
@diary = olddata;
else
diaries[@date.strftime("%Y%m%d")] = @diary;
end
self << @diary
text_save(@diary)
end
end
end
tdiary = MyTDiary.new(nil, nil)
ARGV.each do |f|
tdiary.append f
end