#---------------------------------------------------------------------
#     Copyright (C) GFD Dennou Club, 2005. All rights reserved.
#---------------------------------------------------------------------
#= Generate HTML from RD
#
# * Yasuhiro Morikawa, Masaki Ishiwatari
#   * 2005/08/10 (Yasuhiro Morikawa) Date perser is response to multi-language
#   * 2005/08/10 (Yasuhiro Morikawa) Date perser is addded
#   * 2005/07/07 (Yasuhiro Morikawa) "SUBDIRS" is deleted
#   * 2005/07/07 (Yasuhiro Morikawa) "chmod" and "chgrp" are added
#   * 2005/06/23 (Yasuhiro Morikawa) Suffix of JA file is change from "htm.ja" to "htm"
#   * 2005/06/23 (Yasuhiro Morikawa) Japanese commends are added
#   * 2005/06/12 (Yasuhiro Morikawa) Create
#
######################################################################
#
#== Settings
#
# [JAPANESE] 各種設定項目

INCLUDEFILE = 
include $(INCLUDEFILE) # Include file              (optional)
                       # [JA] インクルードファイル (任意)

JA      = 1        # 1: Create "htm",    0: Not Create     (selective)
EN      = 1        # 1: Create "htm.en", 0: Not Create     (selective)
                   # [JA] 1 ならば作成, 0 ならば作成しない (選択必須)

FOOTERJA  = "<hr> dcmodel Development Group / GFD Dennou Staff  \
             <img SRC=\"/library/dcmodel/htmltools/dcstaff_email.png\"> <br> \
             Last Updated: $(UpdateDateJA), Since: $(CreateDateJA)"
		   # [JA] JA 用 HTML フッター (任意)
		   #   $(UpdateDateJA) は電脳 RD 書式で書かれた最上部の日時
		   #   (JA part 部分内)
		   #   $(CreateDateJA) は電脳 RD 書式で書かれた最下部の日時
		   #   (JA part 部分内)

FOOTEREN  = "<hr> dcmodel Development Group / GFD Dennou Staff  \
             <img SRC=\"/library/dcmodel/htmltools/dcstaff_email.png\"> <br> \
             Last Updated: $(UpdateDateEN), Since: $(CreateDateEN)"
		   # HTML Footer  (optional)
		   #   $(UpdateDateEN) is date in Dennou RD on top (EN part)
		   #   $(CreateDateEN) is date in Dennou RD at bottom (EN part)

CSS     = /library/dcmodel/htmltools/dcmodel.css
		   # Cascade Style Sheet           (necessary)
		   # [JA] カスケードスタイルシート (必須)

CHMOD   = 664      # Set mode          (optional)
                   # [JA] chmod する値 (任意)

CHGRP   =          # Set group         (optional)
		   # [JA] chgrp する値 (任意)

RUBY    = ruby1.8  # Path to Ruby       (necessary)
                   # [JA] Ruby へのパス (必須)

RD      = rd2      # Path to rdtool       (necessary)
                   # [JA] rdtool へのパス (必須)

RUBYLIB =          # Set "RUBYLIB"         (optional)
                   # [JA] "RUBYLIB" の設定 (任意)

RDOPTS  =          # Additional rd2 options          (optional)
                   # [JA] rd2 コマンドへのオプション (任意)

OUTCODE = euc      # character encoding of output [jis|euc|sjis] (necessary)
                   # [JA] rd 出力時の文字コード  [jis|euc|sjis]  (必須)

JACODE  = EUC-JP   # indicate CHARSET as charset [char encoding]            (necessary)
                   # [JA] rd2 コマンドで CHARSET としてセットする文字コード (必須)

# End Settings  [JA] 設定項目ここまで
######################################################################
#== Commands
# General command
RD2HTM = rd2 -r rd/rd2html-lib --with-css=$(CSS) --with-part=HTML:html \
		--out-code=$(OUTCODE) $(RDOPTS)
# For Japanese
RD2JA  = $(RD2HTM) --html-charset=$(JACODE) --with-part=JA:rd
# For English
RD2EN  = $(RD2HTM) --html-charset=US-ASCII --with-part=EN:rd


######################################################################
#== Ruby liner script for replacing title in HTML
#
# [JA] 引数 (1 つのみ) にとった HTML ファイルの一番上の <h1> の内容を
#      読み取り, その内容を <title> タグに代入する.
#
H1ToTitle  = $(RUBY) -e 'body = open(ARGV[0]){|io| io.read}; \
			 if /\<h1.*?\>(.*?)\<\/h1.*?\>/ =~ body then      ;\
			   h1 = $$1 ;\
			   h1 = h1.chomp.gsub!(/\<.*?\>/){|s| s = ""} ;\
			   mod = body.gsub(/\<title\>.*<\/title\>/,         \
			         "\<title\>" + h1 + "<\/title\>") ;\
			 else ;\
			   mod = body ;\
			 end ;\
			 out = open(ARGV[0], "w"); out.puts(mod)         ;\
			 out.close'

######################################################################
#== Ruby liner script for getting JA part
#
# [JA] 引数 (複数可) または引数が無い場合標準入力から得られた文字列
#      のうち, =begin, =end でくくられた部分と =begin JA, =end JA
#      でくくられた部分を標準出力に出力する.
#
JAPart = $(RUBY) -e 'inbody = false ;\
		     puts "=begin" ;\
		     lines = readlines ;\
		     lines.each {|line| ;\
		       inbody = true  if /^=begin$$/ =~ line ;\
		       inbody = true  if /^=begin\s+JA$$/ =~ line ;\
		       inbody = false if /^=end$$/ =~ line ;\
		       inbody = false if /^=end\s+JA$$/ =~ line ;\
		       next if line =~ /^=(begin|end)$$/ ;\
		       next if line =~ /^=(begin\s+|end\s+)\w+$$/ ;\
		       if inbody  ;\
			 puts line ;\
		       end ;\
		     } ;\
		     puts "=end"'

######################################################################
#== Ruby liner script for getting EN part
#
# [JA] 引数 (複数可) または引数が無い場合標準入力から得られた文字列
#      のうち, =begin, =end でくくられた部分と =begin EN, =end EN
#      でくくられた部分を標準出力に出力する.
#
ENPart = $(RUBY) -e 'inbody = false ;\
		     puts "=begin" ;\
		     lines = readlines ;\
		     lines.each {|line| ;\
		       inbody = true  if /^=begin$$/ =~ line ;\
		       inbody = true  if /^=begin\s+EN$$/ =~ line ;\
		       inbody = false if /^=end$$/ =~ line ;\
		       inbody = false if /^=end\s+EN$$/ =~ line ;\
		       next if line =~ /^=(begin|end)$$/ ;\
		       next if line =~ /^=(begin\s+|end\s+)\w+$$/ ;\
		       if inbody  ;\
			 puts line ;\
		       end ;\
		     } ;\
		     puts "=end"'


######################################################################
#== Ruby liner script for getting creation date in Dennou RD format
#
# [JA] 引数 (複数可) または引数が無い場合標準入力から得られた文字列
#      のうち, "* 2005/08/10 (氏名) ..." のように記述される一連の
#      文字列から一番下の日付を標準出力に出力する.
#
CDateParser = $(RUBY) -e 'lines = readlines  ;\
			 start = false  ;\
			 date = "" ;\
			 lines.each{ |line|  ;\
			   if /^\s*\#*\s*\*\s+(\d{2,4}[\/\-]\d{1,2}[\/\-]\d{1,2})\s+\(.+\)/ =~ line then  ;\
			     start = true ;\
			     date = $$1 ;\
			   else ;\
			     if start then ;\
			       $$stdout.print date ;\
			       exit ;\
			     end ;\
			   end  ;\
			 }  ;\
			 $$stdout.print "unknown"  ;\
			 exit'

CreateDateJA = `$(JAPart) $< | $(CDateParser)`
CreateDateEN = `$(ENPart) $< | $(CDateParser)`

######################################################################
#== Ruby liner script for getting update date in Dennou RD format
#
# [JA] 引数 (複数可) または引数が無い場合標準入力から得られた文字列
#      のうち, "* 2005/08/10 (氏名) ..." のように記述される一連の
#      文字列から一番上の日付を標準出力に出力する.

UDateParser = $(RUBY) -e 'lines = readlines ;\
			 lines.each{ |line|  ;\
			   if /^\s*\#*\s*\*\s+(\d{2,4}[\/\-]\d{1,2}[\/\-]\d{1,2})\s+\(.+\)/ =~ line then  ;\
			     $$stdout.print $$1  ;\
			     exit  ;\
			   end  ;\
			 }  ;\
			 $$stdout.print "unknown"  ;\
			 exit'

UpdateDateJA = `$(JAPart) $< | $(UDateParser)`
UpdateDateEN = `$(ENPart) $< | $(UDateParser)`

######################################################################
#== Search "rd" files
__AllRDFiles__ = $(wildcard *.rd)
RDFiles = $(__AllRDFiles__:%.v.rd=)
GenerateFiles = $(HtmByJA) $(HtmByEN)
HtmByJA = $(RDFiles:.rd=.htm)
HtmByEN = $(RDFiles:.rd=.htm.en)

##########################################################################
#== Rules
#
all: $(GenerateFiles)

help:
	@echo ""
	@echo "  This Makefile needs following programs."
	@echo ""
	@echo "      Ruby   <URL:http://www.ruby-lang.org>"
	@echo "      rdtool <URL:http://www2.pos.to/~tosh/ruby/rdtool/>"
	@echo ""
	@echo ""
	@echo "  make [all] :"
	@echo "             Create HTML files from RD "
	@echo ""


%.htm: %.rd
	@if [ $(JA) != "0" ] ; then \
	    echo "$(RD2JA) $< > $@ || rm -f $@" ;\
	    $(RD2JA) $< > $@ || rm -f $@ ;\
	    if [ -f $@ ]; then \
		echo -n 'Copy <h1> to <title> ..' ; $(H1ToTitle) $@  ; echo 'done' ;\
		if [ ! X$(FOOTERJA) = X"" ] ; then \
			echo -n 'Add footer ..' ;\
			echo $(FOOTERJA) >>  $@  ;\
			echo 'done' ;\
		fi ;\
	    fi ;\
	    if [ ! X$(CHMOD) = X"" ]; then \
		echo -n chmod $(CHMOD) $@ .. ; chmod $(CHMOD) $@  ; echo 'done' ;\
	    fi ;\
	    if [ ! X$(CHGRP) = X"" ]; then \
		echo -n chgrp $(CHGRP) $@ .. ; chgrp $(CHGRP) $@  ; echo 'done' ;\
	    fi ;\
	fi


%.htm.en: %.rd
	@if [ $(EN) != "0" ] ; then \
	    echo "$(RD2EN) $< > $@ || rm -f $@" ;\
	    $(RD2EN) $< > $@ || rm -f $@ ;\
	    if [ -f $@ ]; then \
		echo -n 'Copy <h1> to <title> ..' ; $(H1ToTitle) $@  ; echo 'done' ;\
		if [ ! X$(FOOTEREN) = X"" ] ; then \
			echo -n 'Add footer ..' ;\
			echo $(FOOTEREN) >>  $@  ;\
			echo 'done' ;\
		fi ;\
	    fi ;\
	    if [ ! X$(CHMOD) = X"" ]; then \
		echo -n chmod $(CHMOD) $@ .. ; chmod $(CHMOD) $@  ; echo 'done' ;\
	    fi ;\
	    if [ ! X$(CHGRP) = X"" ]; then \
		echo -n chgrp $(CHGRP) $@ .. ; chgrp $(CHGRP) $@  ; echo 'done' ;\
	    fi ;\
	fi

clean:
	-rm *~ *.bak

clean.all: clean
	-rm $(GenerateFiles)
