Gtk4-tutorial/Rakefile
Toshio Sekiya 74b2be2aef Bug fixed.
2021-04-19 23:37:36 +09:00

192 lines
6.1 KiB
Ruby

require 'rake/clean'
require_relative 'lib/lib_sec_file.rb'
require_relative 'lib/lib_src2md.rb'
require_relative 'lib/lib_gen_main_tex.rb'
require_relative 'lib/lib_add_head_tail_html.rb'
srcfiles = []
FileList['src/sec*.src.md'].each do |file|
srcfiles << Sec_file.new(file)
end
srcfiles = Sec_files.new srcfiles
srcfiles.renum!
mdfilenames = srcfiles.map {|srcfile| "gfm/#{srcfile.to_md}"}
htmlfilenames = srcfiles.map {|srcfile| "html/#{srcfile.to_html}"}
texpathnames = srcfiles.map {|srcfile| "latex/#{srcfile.to_tex}"}
texfilenames = srcfiles.map {|srcfile| srcfile.to_tex}
["gfm", "html", "latex"].each do |d|
if ! Dir.exist?(d)
Dir.mkdir(d)
end
end
CLEAN.append(*mdfilenames)
CLEAN << "Readme.md"
# tasks
task default: :md
task all: [:md, :html, :pdf]
task md: ["Readme.md", "src/turtle/turtle_doc.md"]
file "Readme.md" => mdfilenames do
buf = [ "# Gtk4 Tutorial for beginners\n", "\n" ]
src2md "src/abstract.src.md", "abstract.md"
File.open("abstract.md") do |file|
file.readlines.each do |line|
buf << line
end
end
File.delete("abstract.md")
buf << "\n"
buf << "## Table of contents\n\n"
buf << "\n"
0.upto(srcfiles.size-1) do |i|
h = File.open(srcfiles[i].path) { |file| file.readline }
h = h.gsub(/^#* */,"").chomp
buf << "1. [#{h}](gfm/#{srcfiles[i].to_md})\n"
end
File.write("Readme.md", buf.join)
end
0.upto(srcfiles.size - 1) do |i|
file "gfm/#{srcfiles[i].to_md}" => (srcfiles[i].c_files << srcfiles[i].path) do
src2md srcfiles[i].path, "gfm/#{srcfiles[i].to_md}"
if srcfiles.size == 1
nav = "Up: [Readme.md](../Readme.md)\n"
elsif i == 0
nav = "Up: [Readme.md](../Readme.md), Next: [Section 2](#{srcfiles[1].to_md})\n"
elsif i == srcfiles.size - 1
nav = "Up: [Readme.md](../Readme.md), Prev: [Section #{i}](#{srcfiles[i-1].to_md})\n"
else
nav = "Up: [Readme.md](../Readme.md), Prev: [Section #{i}](#{srcfiles[i-1].to_md}), Next: [Section #{i+2}](#{srcfiles[i+1].to_md})\n"
end
buf = IO.readlines "gfm/#{srcfiles[i].to_md}"
buf.insert(0, nav, "\n")
buf.append("\n", nav)
IO.write "gfm/#{srcfiles[i].to_md}", buf.join
end
end
file "src/turtle/turtle_doc.md" => "src/turtle/turtle_doc.src.md" do
src2md "src/turtle/turtle_doc.src.md", "src/turtle/turtle_doc.md"
end
task html: ["html/index.html", "html/tfetextview_doc.html", "html/turtle_doc.html"]
file "html/index.html" => htmlfilenames do
buf = [ "# Gtk4 Tutorial for beginners\n", "\n" ]
src2md "src/abstract.src.md", "html/abstract.md"
File.open("html/abstract.md") do |file|
file.readlines.each do |line|
buf << line
end
end
File.delete("html/abstract.md")
buf << "\n"
0.upto(srcfiles.size-1) do |i|
h = File.open(srcfiles[i].path) { |file| file.readline }
h = h.gsub(/^#* */,"").chomp
buf << "1. [#{h}](#{srcfiles[i].to_html})\n"
end
buf.each do |line|
line.gsub!(/(\[[^\]]*\])\((sec\d+)\.md\)/,"\\1(\\2.html)")
end
File.write("html/index.md", buf.join)
sh "pandoc -o html/index.html html/index.md"
File.delete "html/index.md"
add_head_tail_html "html/index.html"
end
file "html/tfetextview_doc.html" => "src/tfetextview/tfetextview_doc.md" do
sh "pandoc -o html/tfetextview_doc.html src/tfetextview/tfetextview_doc.md"
add_head_tail_html "html/tfetextview_doc.html"
end
file "html/turtle_doc.html" => "src/turtle/turtle_doc.src.md" do
src2md "src/turtle/turtle_doc.src.md", "html/turtle_doc.md"
sh "pandoc -o html/turtle_doc.html html/turtle_doc.md"
File.delete "html/turtle_doc.md"
add_head_tail_html "html/turtle_doc.html"
end
0.upto(srcfiles.size - 1) do |i|
html_md = "html/#{srcfiles[i].to_md}"
html_html = "html/#{srcfiles[i].to_html}"
file html_html => (srcfiles[i].c_files << srcfiles[i].path) do
src2md srcfiles[i].path, html_md
if srcfiles.size == 1
nav = "Up: [index.html](index.html)\n"
elsif i == 0
nav = "Up: [index.html](index.html), Next: [Section 2](#{srcfiles[1].to_html})\n"
elsif i == srcfiles.size - 1
nav = "Up: [index.html](index.html), Prev: [Section #{i}](#{srcfiles[i-1].to_html})\n"
else
nav = "Up: [index.html](index.html), Prev: [Section #{i}](#{srcfiles[i-1].to_html}), Next: [Section #{i+2}](#{srcfiles[i+1].to_html})\n"
end
buf = IO.readlines html_md
buf.insert(0, nav, "\n")
buf.append("\n", nav)
buf.each do |line|
line.gsub!(/(\[[^\]]*\])\((sec\d+)\.md\)/,"\\1(\\2.html)")
end
IO.write html_md, buf.join
sh "pandoc -o #{html_html} #{html_md}"
File.delete(html_md)
add_head_tail_html html_html
end
end
task pdf: "latex" do
sh "cd latex; lualatex main.tex"
sh "cd latex; lualatex main.tex"
sh "mv latex/main.pdf latex/gtk4_tutorial.pdf"
end
task latex: ["latex/main.tex"]
file "latex/main.tex" => ["latex/abstract.tex", "latex/tfetextview_doc.tex", "latex/turtle_doc.tex"] + texpathnames do
gen_main_tex "latex", texfilenames, ["tfetextview_doc.tex", "turtle_doc.tex"]
end
file "latex/abstract.tex" => "src/abstract.src.md" do
src2md "src/abstract.src.md", "latex/abstract.md"
sh "pandoc --listings -o latex/abstract.tex latex/abstract.md"
File.delete("latex/abstract.md")
end
file "latex/tfetextview_doc.tex" => "src/tfetextview/tfetextview_doc.md" do
sh "pandoc --listings -o latex/tfetextview_doc.tex src/tfetextview/tfetextview_doc.md"
end
file "latex/turtle_doc.tex" => "src/turtle/turtle_doc.src.md" do
src2md "src/turtle/turtle_doc.src.md", "latex/turtle_doc.md"
sh "pandoc --listings -o latex/turtle_doc.tex latex/turtle_doc.md"
File.delete("latex/turtle_doc.md")
end
0.upto(srcfiles.size - 1) do |i|
file "latex/#{srcfiles[i].to_tex}" => (srcfiles[i].c_files << srcfiles[i].path) do
src2md srcfiles[i].path, "latex/#{srcfiles[i].to_md}"
sh "pandoc --listings -o latex/#{srcfiles[i].to_tex} latex/#{srcfiles[i].to_md}"
File.delete("latex/#{srcfiles[i].to_md}")
end
end
task :clean
task :cleanhtml do
if Dir.exist?("html") && (! Dir.empty?("html"))
sh "rm html/*"
end
end
task :cleanlatex do
if Dir.exist?("latex") && (! Dir.empty?("latex"))
sh "rm latex/*"
end
end
task cleanall: [:clean, :cleanhtml, :cleanlatex]