Sha256: d15ea2fa16ae05ce1c9a57435adb6931f475e759977d25ae07993b4b8fbfbba4

Contents?: true

Size: 1.94 KB

Versions: 1

Compression:

Stored size: 1.94 KB

Contents

#!/usr/bin/env ruby

require 'rubygems'
require 'bluecloth'
require 'erubis'
require 'optparse'
require 'fileutils'
require 'nokogiri'

APP_NAME = 'markd'
APP_ROOT = File.dirname File.expand_path(__FILE__ + "/..")

RESOURCES = ["css", "google-code-prettify", "js"]

class MarkDApp
  def usage
    usage_text = <<-"USAGE"
Usage:
  markd [-o OUTPUT_DIR] markdown

Options:
  -v, [--version]           show version
  -h, [--help]              show usage
  -o, [--output=OUTPUT_DIR] set output directory (default "docs")
USAGE
  end
  
  def parse_opts(argv)
    @options = {}
    OptionParser.new { |opt|
      opt.on("-v", "--version") {
        version = File.read "#{APP_ROOT}/VERSION"
        puts "#{APP_NAME} #{version}"
        exit(0)
      }
      opt.on("-h", "--help") {
        puts usage
        exit(0)
      }
      opt.on("-o OUTDIR", "--output OUTDIR") { |out_dir|
        @options[:out_dir] = out_dir
      }
      
      opt.parse! argv
    }
    @options
  end
  
  def init(argv)
    @options = parse_opts argv
  end
  
  def force_exit(reason)
    puts reason
    exit 0
  end
  
  def run(argv)
    init argv
    
    filename = argv.first
    force_exit("#{filename} not file or exists") unless File.file? filename
    md_src = File.read filename
    out_dir = @options[:out_dir] || "docs"
    MarkD.publish(md_src, out_dir)
  end
end

class MarkD
  def self.publish(md_src, out_dir_path)
    # parse
    @md_html = BlueCloth.new(md_src).to_html
    doc = Nokogiri::HTML::Document.parse @md_html
    @title = doc.css("h1").text
    
    # render
    erb_src = File.read "#{APP_ROOT}/template/template.html.erb"
    eruby = Erubis::Eruby.new(erb_src)
    html = eruby.result(binding)
    
    # output
    FileUtils.mkdir_p out_dir_path
    File.open("#{out_dir_path}/index.html", "w") { |f| f.puts html }
    dirs = ::RESOURCES.map { |d| "#{APP_ROOT}/template/#{d}"}
    FileUtils.cp_r(dirs, out_dir_path)
  end
end

if __FILE__ == $0
  MarkDApp.new.run ARGV
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
markd-0.1.1 lib/markd.rb