Skip to content

Instantly share code, notes, and snippets.

@tondol
Created August 13, 2012 15:50
Show Gist options
  • Save tondol/3342089 to your computer and use it in GitHub Desktop.
Save tondol/3342089 to your computer and use it in GitHub Desktop.
karmdownでmarkdown2html
#!/usr/bin/env ruby
#-*- encoding: utf-8 -*-
$VERBOSE = nil
$KCODE = 'u'
usage = <<END_OF_USAGE
#{$0}
=========================
導入
-------------------------
Ruby 1.9系を推奨(1.8.7でも動作する)。
kramdownが必要なので `gem install kramdown` としてインストールしておく。
基本的な使い方
-------------------------
`ruby #{$0} sample.md >sample.html` を実行する。
`chmod 755 #{$0}` してから `./#{$0} sample.md >sample.html` としてもよい。
`ruby #{$0} sample.md -o sample.html` で出力ファイルの指定も可能。
まとめて変換
-------------------------
`ruby #{$0} -t *.md` でまとめて `*.md` を `*.html` に変換する。
このオプションは前述のファイル指定と併用できないので注意。
ヘッダ・フッタの指定
-------------------------
`ruby #{$0} -h header.tpl -f footer.tpl` でヘッダ・フッタを指定できる。
このオプションは他のオプションと併用可能。
END_OF_USAGE
header = <<END_OF_HEADER
<html>
<head>
<link href="http://csswizardry.com/inuitcss/inuit.css/core/css/inuit.css" rel="stylesheet">
<link href="http://twitter.github.com/bootstrap/assets/js/google-code-prettify/prettify.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="http://twitter.github.com/bootstrap/assets/js/google-code-prettify/prettify.js"></script>
<script>
// make sure jQuery is loaded before you run this function,
// probably a good idea to create an application.js loaded
// as last js file
$(function() {
// make code pritty
window.prettyPrint && prettyPrint();
});
</script>
<style>
body {
margin: 2em 5em;
}
</style>
</head>
<body>
END_OF_HEADER
footer = <<END_OF_FOOTER
</body>
</html>
END_OF_FOOTER
require 'optparse'
require 'pathname'
require 'rubygems'
require 'kramdown'
target_mode = false
header_file = nil
footer_file = nil
output_file = nil
ARGV.options {|opts|
opts.on("-o", "--output OUTPUT", "出力ファイルを指定する。") {|name|
output_file = name
}
opts.on("-h", "--header HEADER", "ヘッダファイルを指定する。") {|name|
header_file = name
}
opts.on("-f", "--footer FOOTER", "フッタファイルを指定する。") {|name|
footer_file = name
}
opts.on("-t", "--target", "入力ファイルを指定するフラグ。") {|name|
target_mode = true
}
opts.parse!
}
if ARGV.empty?
puts usage
exit 0
end
if header_file
header = File.read(header_file)
end
if footer_file
footer = File.read(footer_file)
end
def convert(body, header, footer)
output = String.new
output << header << "\n"
output << Kramdown::Document.new(body).to_html << "\n"
output << footer << "\n"
output
end
if target_mode
# multiple mode
ARGV.each {|name|
output_file = Pathname(name).sub(/\.\w+$/, "").to_s
output_file << ".html"
puts "#{name} => #{output_file}"
File.open(output_file, "w") {|f|
f.puts convert(File.read(name), header, footer)
}
}
else
# single mode
if output_file
ARGV.each {|name|
puts "#{name} => #{output_file}"
File.open(output_file, "w") {|f|
f.puts convert(File.read(name), header, footer)
}
}
else
ARGV.each {|name|
puts convert(File.read(name), header, footer)
}
end
end
<html>
<head>
<link href="http://csswizardry.com/inuitcss/inuit.css/core/css/inuit.css" rel="stylesheet">
<link href="http://twitter.github.com/bootstrap/assets/js/google-code-prettify/prettify.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="http://twitter.github.com/bootstrap/assets/js/google-code-prettify/prettify.js"></script>
<script>
// make sure jQuery is loaded before you run this function,
// probably a good idea to create an application.js loaded
// as last js file
$(function() {
// make code pritty
window.prettyPrint && prettyPrint();
});
</script>
<style>
body {
margin: 2em 5em;
}
</style>
</head>
<body>
<h1 id="section">これはレベル1の見出しですよ</h1>
<p>ほげほげふがふが。</p>
<h2 id="section-1">これはレベル2の見出しでした</h2>
<blockquote>
<p>引用などもこのようにして
簡単にマークアップ可能です。</p>
</blockquote>
<p>リンクはこうやって: <a href="http://google.com">Google</a> 記述できるよ。</p>
<p>改行するには、行末に半角スペースを2つ挿入すれば<br />
いいらしいです。</p>
<ol>
<li>チキンラーメンを封を切らずに麺を砕く(大きさはお好みにより様々でOK)</li>
<li>ご飯を炊く</li>
<li>ご飯に生卵をかけ、醤油を少々入れてかき混ぜる</li>
<li>食す。ウマー</li>
</ol>
<h1 id="code-highlighting">Code Highlighting</h1>
<p>コードのハイライトは次のように書く。kramdownの拡張記法っぽい?<br />
Google謹製のprettyprintライブラリを利用してみた。</p>
<pre class="prettyprint"><code># -*- coding: utf-8 -*-
require_relative 'twitterbot'
Twitter.configure {|config|
config.consumer_key = 'consumer key'
config.consumer_secret = 'consumer secret'
config.oauth_token = 'oauth token'
config.oauth_token_secret = 'oauth token secret'
}
counter = 0
while counter &lt; 10
begin
bot = TwitterBot::Crawler.new('BOTのscreen_name', '取得元のscreen_name')
bot.study
bot.reply_to_mentions unless ARGV.include?("-no-reply")
bot.tweet unless ARGV.include?("-no-tweet")
break
rescue Exception =&gt; e
puts e
counter += 1
end
end
</code></pre>
</body>
</html>

これはレベル1の見出しですよ

ほげほげふがふが。

これはレベル2の見出しでした

引用などもこのようにして 簡単にマークアップ可能です。

リンクはこうやって: Google 記述できるよ。

改行するには、行末に半角スペースを2つ挿入すれば
いいらしいです。

  1. チキンラーメンを封を切らずに麺を砕く(大きさはお好みにより様々でOK)
  2. ご飯を炊く
  3. ご飯に生卵をかけ、醤油を少々入れてかき混ぜる
  4. 食す。ウマー

Code Highlighting

コードのハイライトは次のように書く。kramdownの拡張記法っぽい?
Google謹製のprettyprintライブラリを利用してみた。

# -*- coding: utf-8 -*-

require_relative 'twitterbot'

Twitter.configure {|config|
  config.consumer_key = 'consumer key'
  config.consumer_secret = 'consumer secret'
  config.oauth_token = 'oauth token'
  config.oauth_token_secret = 'oauth token secret'
}

counter = 0
while counter < 10
  begin
    bot = TwitterBot::Crawler.new('BOTのscreen_name', '取得元のscreen_name')
    bot.study
    bot.reply_to_mentions unless ARGV.include?("-no-reply")
    bot.tweet unless ARGV.include?("-no-tweet")
    break
  rescue Exception => e
    puts e
    counter += 1
  end
end

{:.prettyprint}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment