+ listener = Listen.to(CONFIG[:pages_dir], wait_for_delay: 1.0, only: /.html$/) do |modified, added, removed|
+ Site.new.build
+ end
+ listener.start
+ listener
+ end
+
+ def run(options)
+ require 'webrick'
+ listener = options[:watch] && start_watcher
+ port = options[:port] || 8000
+
+ puts "Serving at http://localhost:#{port}/ ..."
+ server = WEBrick::HTTPServer.new :Port => port, :DocumentRoot => CONFIG[:output_dir]
+ trap 'INT' do
+ server.shutdown
+ end
+ server.start
+ listener.stop if listener
+ end
+end
+
+def main
+ Liquid::Template.register_tag('tree', Tag_tree)
+ Liquid::Template.register_tag('children', Tag_children)
+ Liquid::Template.register_tag('prevnext', Tag_prevnext)
+
+ if defined? Liquid::Template.error_mode
+ Liquid::Template.error_mode = :strict
+ end
+
+ options = {}
+ OptionParser.new do |opts|
+ opts.banner = %{Usage: build.rb <command> [options]
+
+Use 'build.rb' to build the manual. Use 'build.rb serve' to also
+start a web server; setting any web server options implies "serve".
+}
+ opts.on("-w", "--watch", "Watch for changes") { options[:watch] = true }
+ opts.on("-p", "--port N", Integer, "Specify port for web server") { |p| options[:port] = p }
+ end.parse!
+
+ Site.new.build
+
+ if options[:watch] || options[:port] || (ARGV.length > 0 && "serve".start_with?(ARGV[0]))
+ Server.new.run(options)
+ end
+end