#! /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!(/\"/, '"') 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
#{$2}" newSubSection = false blockMode = true when /^\/DIV/ bodyTmp += "
\n" newSubSection = true blockMode = false when /^UL/ bodyTmp += '

' if ! blockMode && ! newSubSection bodyTmp += "\n" newSubSection = true blockMode = false when /^OL/ bodyTmp += '

' if ! blockMode && ! newSubSection bodyTmp += "
    \n" newSubSection = false blockMode = true when /^\/OL/ bodyTmp += "
\n" newSubSection = true blockMode = false when /^LI\s+(.*)/ mes = $1 mes.sub!(/~$/, "\n") bodyTmp += '
  • ' + mes newSubSection = false when /^DL/ bodyTmp += '

    ' if ! blockMode && ! newSubSection bodyTmp += "
    \n" newSubSection = false blockMode = true when /^\/DL/ bodyTmp += "
    \n" newSubSection = true blockMode = false when /^DT\s*(.*)/ mes = $1 mes.sub!(/~$/, "\n") bodyTmp += '
    ' + mes newSubSection = false when /^DD\s*(.*)/ mes = $1 mes.sub!(/~$/, "\n") bodyTmp += '
    ' + mes newSubSection = false when /^CITE/ bodyTmp += '

    ' if ! blockMode && ! newSubSection bodyTmp += "
    \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\"#{alt}\"#{align}\n" newSubSection = false when /^LIMG\s+(\S+)\s+(\S)\s+(.+)/ url = $1 imgsrctmp = $3 if $2 == "l" align = ' align="left"' elsif $2 == "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" bodyTmp += "\"#{alt}\"#{align}" bodyTmp += "\n" newSubSection = false when /^MARK\s+(\S+)/ if $1 == '(^^)' bodyTmp += "\n\"#{$1}\"\n" elsif $1 == '(;_;)' bodyTmp += "\n\"#{$1}\"\n" elsif $1 == '(X_X)' bodyTmp += "\n\"#{$1}\"\n" end newSubSection = false else bodyTmp += '

    ' 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