nicojensen.de/vendor/bundle/gems/kramdown-1.17.0/bin/kramdown

105 lines
3.3 KiB
Text
Raw Normal View History

2019-03-12 13:49:49 +01:00
#!/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 'rbconfig'
require 'yaml'
require 'kramdown'
config_file = nil
begin
config_dir = case RbConfig::CONFIG['host_os']
when /bccwin|cygwin|djgpp|mingw|mswin|wince/i
File.expand_path((ENV['HOME'] || ENV['USERPROFILE'] || "~") + "/AppData/Local")
when /darwin|mac os/
File.expand_path("~/Library/Preferences/")
else
File.expand_path(ENV['XDG_CONFIG_HOME'] || '~/.config')
end
config_file = File.join(config_dir, "kramdownrc")
rescue
end
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.separator ""
opts.on("--no-config-file", "Do not read any configuration file. Default behavior is to check " \
"for a", "configuration file and read it if it exists.") {config_file = nil}
opts.on("--config-file FILE", "Specify the name of a configuration file with kramdown options " \
"in YAML", "format, e.g. \"auto_id_prefix: ARG\" instead of \"--auto-id-prefix ARG\"",
"and \"auto_ids: false\" instead of \"--no-auto-ids\".",
"Default: #{config_file}") {|v| config_file = v}
opts.separator ""
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
if config_file && File.exist?(config_file)
config_file_options = YAML.safe_load(File.read(config_file), [Symbol])
case config_file_options
when nil # empty configuration file except perhaps YAML header and comments
# Nothing to do
when Hash
options = config_file_options.merge(options)
else
raise Kramdown::Error, "No YAML map in configuration file \"#{config_file}\""
end
end
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