| #!/usr/bin/env ruby |
| # -*- coding: utf-8 -*- |
| # |
| #-- |
| # Copyright (C) 2009-2015 Thomas Leitner <t_leitner@gmx.at> |
| # |
| # This file is part of kramdown which is licensed under the MIT. |
| #++ |
| # |
| |
| require 'optparse' |
| require 'kramdown' |
| |
| options = {} |
| format = ['html'] |
| OptionParser.new do |opts| |
| opts.banner = "Usage: kramdown [options] [FILE FILE ...]" |
| opts.summary_indent = ' '*4 |
| |
| opts.separator "" |
| opts.separator "Command line options:" |
| opts.separator "" |
| |
| opts.on("-i", "--input ARG", "Specify the input format: kramdown (default), " \ |
| "html, GFM or markdown") {|v| options[:input] = v} |
| opts.on("-o", "--output ARG", Array, "Specify one or more output formats separated by commas: " \ |
| "html (default),", "kramdown, latex, pdf, man or remove_html_tags") {|v| format = v} |
| |
| opts.on("-v", "--version", "Show the version of kramdown") do |
| puts Kramdown::VERSION |
| exit |
| end |
| opts.on("-h", "--help", "Show the help") do |
| puts opts.summarize('', 5, 72) |
| exit |
| end |
| |
| opts.separator "" |
| opts.separator "kramdown options:" |
| opts.separator "" |
| |
| Kramdown::Options.definitions.sort.each do |n, definition| |
| no = n.to_s.tr('_', '-') |
| if definition.type == Kramdown::Options::Boolean |
| opts.on("--[no-]#{no}") {|v| options[n] = Kramdown::Options.parse(n, v)} |
| else |
| type = definition.type |
| type = String if type == Symbol || type == Object |
| opts.on("--#{no} ARG", type) {|v| options[n] = Kramdown::Options.parse(n, v)} |
| end |
| |
| definition.desc.split(/\n/).each do |line| |
| opts.separator opts.summary_indent + ' '*6 + line |
| end |
| opts.separator '' |
| end |
| |
| end.parse! |
| |
| begin |
| doc = Kramdown::Document.new(ARGF.read, options) |
| result = '' |
| format.each {|f| result = doc.send("to_#{f}")} |
| puts result |
| doc.warnings.each {|warn| $stderr.puts "Warning: #{warn}"} |
| rescue Kramdown::Error => e |
| $stderr.puts "Error: #{e.message}" |
| exit(1) |
| end |