require 'bonsai' require 'liquid' require 'maruku' require 'json' require 'ronn' require 'tempfile' require 'yaml' module ExtraFilters def markdownify(input) Maruku.new(input).to_html end def sanitize(input) input.gsub(/[^a-zA-Z0-9_]/,"") end def json(input) input.to_json end def unique(input) @n = (@n || 0) + 1 input + @n.to_s end end Liquid::Template.register_filter(ExtraFilters) task :serve do begin Bonsai.log "Press Control+C to quit" require 'rack' require 'sinatra' require 'watch' require 'launchy' Bonsai.root_dir = Dir.pwd server = fork { app = Rack::Builder.app { map "/jq" do use Bonsai::StaticPassThrough, :root => Bonsai.root_dir + "/output", :urls => ["/"] end run Bonsai::DevelopmentServer } Rack::Handler.default.run(app, :Port => 5000) do Launchy.open("http://localhost:5000/jq") end } Watch.new("{content,templates,public}/**/*") { Bonsai::Exporter.process! } rescue Interrupt Process.kill("QUIT", server) Process.wait(server) exit end end task :build do Bonsai.root_dir = Dir.pwd Bonsai::Exporter.publish! end def load_manual YAML::ENGINE.yamler = 'syck' YAML::load(File.open("content/3.manual/manual.yml")) end task :manpage do Tempfile.open "manpage" do |f| manual = load_manual f.puts manual['manpage_intro'] f.puts manual['body'] manual['sections'].each do |section| f.puts "## #{section['title'].upcase}\n" f.puts section['body'] f.puts "" (section['entries'] || []).each do |entry| f.puts "### #{entry['title']}\n" f.puts entry['body'] f.puts "" (entry['examples'] || []).each do |example| f.puts " jq '#{example['program']}'" f.puts " #{example['input']}" f.puts " => #{example['output'].join(", ")}" f.puts end end f.puts "" end f.puts manual['manpage_epilogue'] f.close puts Ronn::Document.new(f.path).convert('roff').gsub(/<\/?code>/,"") end end task :mantests do load_manual['sections'].each do |section| (section['entries'] || []).each do |entry| (entry['examples'] || []).each do |example| puts example['program'].gsub("\n", " ") puts example['input'] example['output'].each do |s| puts s end puts end end end end