example/Rakefile in madowu-0.0.7 vs example/Rakefile in madowu-0.0.8
- old
+ new
@@ -1,18 +1,19 @@
# coding: utf-8
# Rakefile for Markdown documents.
-DIRMAP_MD = '.dirmap.md'
-ENCODING = "UTF-8"
-HTML2PDF = "wkhtmltopdf"
-TEX2IMAGE = "tex2image"
-HTML2PDF_OPTIONS = "-B 1cm -L 1.5cm -R 1.5cm -T 1.5cm -s A4 --encoding #{ENCODING} "
-CONVERT_COMMAND = "convert -alpha deactivate -density 150x150"
+DIRMAP_MD = '.dirmap.md'
+HTML2PDF = "wkhtmltopdf -B 1cm -L 1.5cm -R 1.5cm -T 1.5cm -s A4 --encoding UTF-8 "
+TEX2IMAGE = "tex2image"
+IMAGEMAGICK = "convert -alpha deactivate -density 144x144"
+INKSCAPE = "inkscape"
require "pp"
require "fileutils"
require "pathname"
+require "tempfile"
+require "rake/clean"
## .dirmap.md
# dirmap コマンドは必ず実行なので task タスク。
# これを file にすると存在するときに実行されない。
# 生成物の .dirmap.md から task タスクへの依存を設定すると、
@@ -20,11 +21,11 @@
# DIRMAP_MD というファイルに対する file タスクへの依存として扱うことで、
# .dirmap.md に依存する file タスクに「必ず実行」が伝播するのを防いでいる。
desc "update .dirmap.md if directory changed."
file DIRMAP_MD => :dirmap_command
task :dirmap_command do
- sh "dirmap" # You can use --kakasi option if the command installed
+ sh "dirmap --kakasi"
end
## *.html
md_files = FileList["*.md"]
html_files = md_files.ext("html")
@@ -33,77 +34,88 @@
md_file = html_file.ext("md")
md_path = Pathname.new( md_file)
dirpath = md_path.dirname
src = FileList[md_file, DIRMAP_MD]
file html_file => [DIRMAP_MD, md_file] do
- sh "madowu -O -s .dirmap.md -c madowu.css -C UTF-8 #{md_file}"
+ puts "Update: #{md_file} -> #{html_file}"
+
+ side_lines = `pandoc #{DIRMAP_MD}`.split("\n")
+ side_lines.unshift "<div class='sidebar'>"
+ side_lines.push "</div>"
+
+ line = `pandoc -s -N --toc -c madowu.css --mathjax --filter pandoc-crossref #{md_file}`
+ lines = line.split("\n")
+ end_body = lines.index('</body>')
+ lines.insert(end_body, side_lines)
+ lines.flatten
+ # -N = --number-sections
+ # -s = --standalone
+ File.open(html_file, "w") {|io| io.puts lines}
end
html_tasks << html_file
end
-
+CLEAN.include(html_files)
desc "make *.html from *.md"
task :md2html => [DIRMAP_MD, * html_tasks]
-
-desc "make *.pdf from *.html"
-pdf_files = html_files.ext("pdf")
-task :html2pdf => FileList[pdf_files]
-pdf_files.each do |pdf_file|
- html_file = pdf_file.ext("html")
- file pdf_file => html_file do
- sh "#{HTML2PDF} #{HTML2PDF_OPTIONS} #{html_file} #{pdf_file}"
- end
-end
-
-
-desc "make .png from .eps."
-eps_files = FileList["*.eps"]
-png_files = eps_files.ext("png")
-task :eps2png => FileList[png_files]
-png_files.each do |png_file|
- eps_file = png_file.ext("eps")
- t = [eps_file]
- file png_file => t do
- sh "#{CONVERT_COMMAND} #{eps_file} #{png_file}"
- end
-end
-
-
-desc "make *.png from *.tex"
-tex_files = FileList["*.tex"]
-png_files = tex_files.ext("png")
-task :tex2png => FileList[png_files]
-png_files.each do |png_file|
- tex_file = png_file.ext("tex")
- file png_file => tex_file do
- #pp png_file, tex_file; exit
- sh "#{TEX2IMAGE} #{tex_file}"
- end
-end
-
-
# recursive だと、サブディレクトリの Rakefile も
# recursive ターゲットを持っているという前提が必要。
desc "execute 'rake' in all subdirs with Rakefile"
rakefiles = FileList["**/Rakefile"]
dirs = rakefiles.map{|path| Pathname.new(path).dirname.to_s}
-dirs.delete_if {|i| i == '.' }
+#dirs.delete_if {|i| i == '.' }
dirs.map!{|path| File.absolute_path(path)}
+#pp dirs; exit
task :subdir do
dirs.each do |dir|
+ puts "■" + dir
Dir.chdir dir
system "rake"
end
end
-task :all => [:md2html, :subdir]
+############################################################
+## extension rules
+## src_exts: array of the extentions that the destination file depends on.
+## src_exts[0] is used as a 'src' of rake target.
+def rule_src2dst(src_exts, dst_ext)
+ desc "convert from .#{src_exts[0]} to #{dst_ext}."
+ dst_files = []
+ FileList["*.#{src_exts[0]}"].each do |src_file|
+ dst_file = src_file.ext(dst_ext)
+ basename = File.basename(src_file, ".#{src_exts[0]}")
+ src_files = src_exts.map {|ext| FileList["#{basename}.#{ext}"]}.flatten
+ src_files.select!{|path| FileTest.exist? path }
+ file dst_file => src_files do
+ yield(src_files, dst_file)
+ end
+ dst_files << dst_file
+ end
+ task "#{src_exts[0]}2#{dst_ext}".to_sym => dst_files
+ CLEAN.include(dst_files)
+end
-task :pdf => :html2pdf
-#task :default => [:tree, :tex2png, :eps2png]
-task :default => [:md2html, :tex2png, :eps2png]
+rule_src2dst(['pov'], 'png') { |srcs, dst| sh "povray -D #{srcs[0]}"}
+rule_src2dst(['eps'], 'png') { |srcs, dst| sh "#{IMAGEMAGICK} #{srcs[0]} #{dst}"}
+rule_src2dst(['dot'], 'png') { |srcs, dst| sh "dot -Tpng #{srcs[0]} -o #{dst}"}
+rule_src2dst(['tex'], 'png') { |srcs, dst| sh "#{TEX2IMAGE} #{srcs[0]}" }
+rule_src2dst(['svg'], 'eps') { |srcs, dst| sh "#{INKSCAPE} -T -z -E #{dst} #{srcs[0]}" }
+rule_src2dst(['svg'], 'png') { |srcs, dst|
+ #直接 png にすると、透明背景で余白ありになる。
+ eps_file = Tempfile.new.path
+ sh "#{INKSCAPE} -T -z -E #{eps_file} #{srcs[0]}"
+ sh "#{IMAGEMAGICK} #{srcs[0]} #{dst}"
+ FileUtils.rm eps_file
+}
+rule_src2dst(['rb', 'dat'] , 'png') { |srcs, dst| sh "ruby #{srcs[0]}" }
+rule_src2dst(['rb', 'dat'] , 'eps') { |srcs, dst| sh "ruby #{srcs[0]} --eps"}
+rule_src2dst(['plt', 'dat'] , 'eps') { |srcs, dst| sh "gnuplot ./#{srcs[0]}"}
+rule_src2dst(['html'], 'pdf') { |srcs, dst| sh "#{HTML2PDF} #{srcs[0]} #{dst}"}
-require "rake/clean"
-CLEAN.include( [
- html_files,
- pdf_files,
-])
+############################################################
+
+#task :all => [:md2html, :subdir]
+task :default => [:md2html, :tex2png, :svg2png, :rb2png, :pov2png, :dot2png]
+# 基本方針として、html を生成するのをデフォルトとする。
+# :eps2png は、rb2eps と rb2png の関係に干渉する
+# :plt2eps