#!/usr/bin/env ruby $KCODE = 'n' # squeeze.rb $Revision: 1.18.2.2 $ # # Create daily HTML file from tDiary database. # # See URLs below for more details. # http://ponx.s5.xrea.com/hiki/squeeze.rb.html (English) # http://ponx.s5.xrea.com/hiki/ja/squeeze.rb.html (Japanese) # # Copyright (C) 2002 MUTOH Masao # You can redistribute it and/or modify it under GPL2. # # The original version of this file was distributed with squeeze # version 1.0.4 by TADA Tadashi with GPL2. # $KCODE= 'e' mode = defined?(TDiary) ? "PLUGIN" : ENV["REQUEST_METHOD"]? "CGI" : "CMD" if mode == "CMD" || mode == "CGI" output_path = "./html/" tdiary_path = "." tdiary_conf = "." suffix = '' all_data = false compat = false $stdout.sync = true if mode == "CMD" def usage puts "squeeze $Revision: 1.18.2.2 $" puts " making html files from tDiary's database." puts " usage: ruby squeeze.rb [-p ] [-c ] [-a] [-s] [-x suffix] " exit end require 'getoptlong' parser = GetoptLong::new parser.set_options(['--path', '-p', GetoptLong::REQUIRED_ARGUMENT], ['--conf', '-c', GetoptLong::REQUIRED_ARGUMENT], ['--suffix', '-x', GetoptLong::REQUIRED_ARGUMENT], ['--all', '-a', GetoptLong::NO_ARGUMENT], ['--squeeze', '-s', GetoptLong::NO_ARGUMENT]) begin parser.each do |opt, arg| case opt when '--path' tdiary_path = arg when '--conf' tdiary_conf = arg when '--suffix' suffix = arg when '--all' all_data = true when '--squeeze' compat = true end end rescue usage exit( 1 ) end output_path = ARGV.shift usage unless output_path output_path = File::expand_path(output_path) output_path += '/' if /\/$/ !~ output_path tdiary_conf = tdiary_path unless tdiary_conf Dir::chdir( tdiary_conf ) ARGV << '' # dummy argument against cgi.rb offline mode. else @options = Hash.new File::readlines("tdiary.conf").each {|item| if item =~ /@options/ begin eval(item) rescue SyntaxError end end } output_path = @options['squeeze.output_path'] || @options['yasqueeze.output_path'] suffix = @options['squeeze.suffix'] || '' all_data = @options['squeeze.all_data'] || @options['yasqueeze.all_data'] compat = @options['squeeze.compat_path'] || @options['yasqueeze.compat_path'] if FileTest::symlink?( __FILE__ ) then tdiary_path = File::dirname( File::readlink( __FILE__ ) ) else tdiary_path = File::dirname( __FILE__ ) end end begin $:.unshift tdiary_path require "tdiary" rescue LoadError $stderr.print "squeeze.rb: cannot load tdiary.rb. <#{tdiary_path}/tdiary>\n" exit( 1 ) end end # # Dairy Squeeze # module TDiary class YATDiarySqueeze < TDiaryBase def initialize(diary, dest, all_data, compat, conf, suffix) @ignore_parser_cache = true super(CGI::new, 'day.rhtml', conf) @diary = diary @date = diary.date @diaries = {@date.strftime('%Y%m%d') => @diary} if @diaries.size == 0 @dest = dest @all_data = all_data @compat = compat @suffix = suffix end def execute if @compat dir = @dest name = @diary.date.strftime('%Y%m%d') else dir = @dest + "/" + @diary.date.strftime('%Y') name = @diary.date.strftime('%m%d') Dir.mkdir(dir, 0755) unless File.directory?(dir) end filename = dir + "/" + name + @suffix if @diary.visible? or @all_data if not FileTest::exist?(filename) or File::mtime(filename) != @diary.last_modified File::open(filename, 'w'){|f| f.write(eval_rhtml)} File::utime(@diary.last_modified, @diary.last_modified, filename) end else if FileTest.exist?(filename) and ! @all_data name = "remove #{name}" File::delete(filename) else name = "" end end name end protected def mode 'day' end def cookie_name; ''; end def cookie_mail; ''; end end end # # Main # module TDiary class YATDiarySqueezeMain < TDiaryBase def initialize(dest, all_data, compat, conf, suffix) @ignore_parser_cache = true super(CGI::new, 'day.rhtml', conf) calendar @years.keys.sort.each do |year| print "(#{year.to_s}/) " @years[year.to_s].sort.each do |month| @io.transaction(Time::local(year.to_i, month.to_i)) do |diaries| diaries.sort.each do |day, diary| print YATDiarySqueeze.new(diary, dest, all_data, compat, conf, suffix).execute + " " end DIRTY_NONE end end end end end end if mode == "CGI" || mode == "CMD" if mode == "CGI" print %Q[Content-type:text/html\n\n Squeeze for tDiary

Squeeze for tDiary

$Revision: 1.18.2.2 $

Copyright (C) 2002 MUTOH Masao<mutoh@highway.ne.jp>



Start!


] end begin conf = TDiary::Config::new conf.header = '' conf.footer = '' conf.show_comment = true conf.hide_comment_form = true def conf.bot?; true; end output_path = "#{conf.data_path}/cache/html" unless output_path Dir.mkdir(output_path, 0755) unless File.directory?(output_path) TDiary::YATDiarySqueezeMain.new(output_path, all_data, compat, conf, suffix) rescue print $!, "\n" $@.each do |v| print v, "\n" end exit( 1 ) end if mode == "CGI" print "

End!

\n" else print "\n\n" end else add_update_proc do conf = @conf.clone conf.header = '' conf.footer = '' conf.show_comment = true conf.hide_comment_form = true def conf.bot?; true; end diary = @diaries[@date.strftime('%Y%m%d')] dir = @options['squeeze.output_path'] || @options['yasqueeze.output_path'] dir = @cache_path + "/html" unless dir Dir.mkdir(dir, 0755) unless File.directory?(dir) TDiary::YATDiarySqueeze.new(diary, dir, @options['squeeze.all_data'] || @options['yasqueeze.all_data'], @options['squeeze.compat_path'] || @options['yasqueeze.compat_path'], conf, @options['squeeze.suffix'] || '' ).execute end end