markdown 0.0.1 → 0.1.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gemtest +0 -0
- data/Manifest.txt +12 -4
- data/README.markdown +66 -8
- data/Rakefile +6 -4
- data/bin/markdown +19 -0
- data/lib/markdown.rb +54 -0
- data/lib/markdown/config.rb +168 -0
- data/lib/markdown/engines/bluecloth.rb +9 -0
- data/lib/markdown/engines/kramdown.rb +9 -0
- data/lib/markdown/engines/maruku.rb +9 -0
- data/lib/{markdown_select/engine.rb → markdown/engines/pandoc_ruby.rb} +2 -27
- data/lib/markdown/engines/rdiscount.rb +9 -0
- data/lib/markdown/engines/rpeg_markdown.rb +9 -0
- data/lib/markdown/gen.rb +151 -0
- data/lib/markdown/wrapper.rb +55 -0
- data/test/test_kramdown.rb +35 -0
- metadata +36 -32
- data/lib/markdown_select.rb +0 -22
- data/lib/markdown_select/config.rb +0 -64
- data/lib/markdown_select/markdown_select.rb +0 -80
data/.gemtest
ADDED
File without changes
|
data/Manifest.txt
CHANGED
@@ -2,7 +2,15 @@ History.markdown
|
|
2
2
|
Manifest.txt
|
3
3
|
README.markdown
|
4
4
|
Rakefile
|
5
|
-
|
6
|
-
lib/
|
7
|
-
lib/
|
8
|
-
lib/
|
5
|
+
bin/markdown
|
6
|
+
lib/markdown.rb
|
7
|
+
lib/markdown/config.rb
|
8
|
+
lib/markdown/engines/bluecloth.rb
|
9
|
+
lib/markdown/engines/kramdown.rb
|
10
|
+
lib/markdown/engines/maruku.rb
|
11
|
+
lib/markdown/engines/pandoc_ruby.rb
|
12
|
+
lib/markdown/engines/rdiscount.rb
|
13
|
+
lib/markdown/engines/rpeg_markdown.rb
|
14
|
+
lib/markdown/gen.rb
|
15
|
+
lib/markdown/wrapper.rb
|
16
|
+
test/test_kramdown.rb
|
data/README.markdown
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
# Markdown
|
1
|
+
# Markdown Engine Wrapper - Use Your Markdown Library of Choice
|
2
2
|
|
3
|
-
* [geraldb.github.com/
|
3
|
+
* [geraldb.github.com/markdown](http://geraldb.github.com/markdown)
|
4
4
|
|
5
5
|
## Description
|
6
6
|
|
7
|
-
The Markdown
|
8
|
-
Preconfigured markdown libraries include:
|
7
|
+
The Markdown Engine Wrapper (`markdown`) Ruby gem lets you use
|
8
|
+
your markdown library of choice. Preconfigured markdown libraries include:
|
9
9
|
|
10
10
|
* `kramdown`
|
11
11
|
* `bluecloth`
|
@@ -17,16 +17,74 @@ Preconfigured markdown libraries include:
|
|
17
17
|
|
18
18
|
## Usage
|
19
19
|
|
20
|
-
require '
|
20
|
+
require 'markdown'
|
21
21
|
|
22
|
-
|
22
|
+
Markdown.new( 'Hello World' ).to_html
|
23
23
|
|
24
24
|
|
25
25
|
## Install
|
26
26
|
|
27
27
|
Just install the gem:
|
28
28
|
|
29
|
-
$ gem install
|
29
|
+
$ gem install markdown
|
30
|
+
|
31
|
+
|
32
|
+
## Configuration - Markdown Engine Loading Order
|
33
|
+
|
34
|
+
The default fallback loading order is:
|
35
|
+
|
36
|
+
`pandoc-ruby`, `kramdown`, `bluecloth`, `maruku`, `rpeg-markdown`, `rdiscount`
|
37
|
+
|
38
|
+
To use your markdown engine of choice configure the wrapper. The wrapper
|
39
|
+
uses the following lookup order to find the markdown engine to configure:
|
40
|
+
|
41
|
+
1) `MARKDOWN_LIB` environment variable
|
42
|
+
|
43
|
+
Example:
|
44
|
+
|
45
|
+
set MARKDOWN_LIB=kramdown
|
46
|
+
|
47
|
+
2) `lib` property (in `./markdown.yml` or `~/markdown.yml`)
|
48
|
+
|
49
|
+
Example:
|
50
|
+
|
51
|
+
lib: kramdown
|
52
|
+
|
53
|
+
3) `libs` property (in `./markdown.yml` or `~/markdown.yml`) - first-come first-serve markdown engine loading list (defaults to builtin list).
|
54
|
+
|
55
|
+
Example:
|
56
|
+
|
57
|
+
libs:
|
58
|
+
- rdiscount
|
59
|
+
- kramdown
|
60
|
+
|
61
|
+
|
62
|
+
## Converters
|
63
|
+
|
64
|
+
The Markdown Wrapper lets you configure different converter methods for each markdown engine. By default
|
65
|
+
the converter method *<lib>*_to_html gets used
|
66
|
+
(for example, the default converter for `kramdown` is `kramdown_to_html`).
|
67
|
+
|
68
|
+
...
|
69
|
+
|
70
|
+
Example:
|
71
|
+
|
72
|
+
pandoc-ruby:
|
73
|
+
converter: pandoc-ruby-to-s5
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
## Real World Usage
|
78
|
+
|
79
|
+
The [`slideshow`](http://slideshow.rubyforge.org) (also known as Slide Show (S9)) gem
|
80
|
+
that lets you create slide shows
|
81
|
+
and author slides in plain text using a wiki-style markup language that's easy-to-write and easy-to-read
|
82
|
+
ships with the `markdown` gem.
|
83
|
+
|
84
|
+
|
85
|
+
## Alternatives
|
86
|
+
|
87
|
+
[`multi_markdown`](https://github.com/postmodern/multi_markdown) gem by Hal Brodigan
|
30
88
|
|
31
89
|
|
32
90
|
## Questions? Comments?
|
@@ -38,5 +96,5 @@ Thanks!
|
|
38
96
|
|
39
97
|
## License
|
40
98
|
|
41
|
-
The `
|
99
|
+
The `markdown` scripts are dedicated to the public domain.
|
42
100
|
Use it as you please with no restrictions whatsoever.
|
data/Rakefile
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
require 'hoe'
|
2
|
-
require './lib/
|
2
|
+
require './lib/markdown.rb'
|
3
3
|
|
4
4
|
Hoe.spec 'markdown' do
|
5
5
|
|
6
|
-
self.version =
|
6
|
+
self.version = Markdown::VERSION
|
7
7
|
|
8
|
-
self.summary = 'Markdown - Use Your Markdown Library of Choice'
|
9
|
-
self.
|
8
|
+
self.summary = 'Markdown Engine Wrapper - Use Your Markdown Library of Choice'
|
9
|
+
self.description = summary
|
10
|
+
|
11
|
+
self.urls = ['http://geraldb.github.com/markdown']
|
10
12
|
|
11
13
|
self.author = 'Gerald Bauer'
|
12
14
|
self.email = 'webslideshow@googlegroups.com'
|
data/bin/markdown
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
###################
|
4
|
+
# == DEV TIPS:
|
5
|
+
#
|
6
|
+
# For local testing run like:
|
7
|
+
#
|
8
|
+
# ruby -Ilib bin/markdown
|
9
|
+
#
|
10
|
+
# Set the executable bit in Linux. Example:
|
11
|
+
#
|
12
|
+
# % chmod a+x bin/markdown
|
13
|
+
#
|
14
|
+
|
15
|
+
|
16
|
+
require 'rubygems'
|
17
|
+
require 'markdown'
|
18
|
+
|
19
|
+
Markdown.main
|
data/lib/markdown.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
###
|
2
|
+
# NB: for local testing run like:
|
3
|
+
#
|
4
|
+
# 1.8.x: ruby -Ilib -rrubygems lib/markdown.rb
|
5
|
+
# 1.9.x: ruby -Ilib lib/markdown.rb
|
6
|
+
|
7
|
+
# core and stlibs
|
8
|
+
|
9
|
+
require 'yaml'
|
10
|
+
require 'pp'
|
11
|
+
require 'logger'
|
12
|
+
require 'optparse'
|
13
|
+
require 'fileutils'
|
14
|
+
|
15
|
+
|
16
|
+
# our own code
|
17
|
+
|
18
|
+
require 'markdown/config'
|
19
|
+
require 'markdown/engines/bluecloth'
|
20
|
+
require 'markdown/engines/kramdown'
|
21
|
+
require 'markdown/engines/maruku'
|
22
|
+
require 'markdown/engines/pandoc_ruby'
|
23
|
+
require 'markdown/engines/rdiscount'
|
24
|
+
require 'markdown/engines/rpeg_markdown'
|
25
|
+
require 'markdown/wrapper'
|
26
|
+
require 'markdown/gen'
|
27
|
+
|
28
|
+
|
29
|
+
module Markdown
|
30
|
+
|
31
|
+
VERSION = '0.1.0.beta1'
|
32
|
+
|
33
|
+
# version string for generator meta tag (includes ruby version)
|
34
|
+
def self.banner
|
35
|
+
"Markdown #{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.main
|
39
|
+
|
40
|
+
# allow env variable to set RUBYOPT-style default command line options
|
41
|
+
# e.g. -o site
|
42
|
+
markdownopt = ENV[ 'MARKDOWNOPT' ]
|
43
|
+
|
44
|
+
args = []
|
45
|
+
args += markdownopt.split if markdownopt
|
46
|
+
args += ARGV.dup
|
47
|
+
|
48
|
+
Gen.new.run(args)
|
49
|
+
end
|
50
|
+
|
51
|
+
end # module Markdown
|
52
|
+
|
53
|
+
|
54
|
+
Markdown.main if __FILE__ == $0
|
@@ -0,0 +1,168 @@
|
|
1
|
+
module Markdown
|
2
|
+
|
3
|
+
class Env
|
4
|
+
def self.home
|
5
|
+
path = if( ENV['HOME'] || ENV['USERPROFILE'] )
|
6
|
+
ENV['HOME'] || ENV['USERPROFILE']
|
7
|
+
elsif( ENV['HOMEDRIVE'] && ENV['HOMEPATH'] )
|
8
|
+
"#{ENV['HOMEDRIVE']}#{ENV['HOMEPATH']}"
|
9
|
+
else
|
10
|
+
begin
|
11
|
+
File.expand_path('~')
|
12
|
+
rescue
|
13
|
+
if File::ALT_SEPARATOR
|
14
|
+
'C:/'
|
15
|
+
else
|
16
|
+
'/'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
puts "env home=>#{path}<"
|
22
|
+
path
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.markdown_lib
|
26
|
+
ENV['MARKDOWN_LIB']
|
27
|
+
end
|
28
|
+
end # class Env
|
29
|
+
|
30
|
+
class Props
|
31
|
+
|
32
|
+
attr_reader :path
|
33
|
+
attr_reader :parent
|
34
|
+
|
35
|
+
def initialize( hash, path, parent=nil)
|
36
|
+
@hash = hash
|
37
|
+
@path = path
|
38
|
+
@parent = parent
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.load_file( path, parent=nil )
|
42
|
+
h = YAML.load_file( path )
|
43
|
+
puts "dump of >#{path}<:"
|
44
|
+
pp h # todo: add debug flag (turn off for default)
|
45
|
+
Props.new( h, path, parent )
|
46
|
+
end
|
47
|
+
|
48
|
+
def [](key) get( key ); end
|
49
|
+
|
50
|
+
def fetch(key, default)
|
51
|
+
value = get( key )
|
52
|
+
value.nil? ? default : value
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
def get( key )
|
57
|
+
value = @hash[ key.to_s ]
|
58
|
+
# if not found try lookup in parent hash
|
59
|
+
(value.nil? && parent) ? parent[key] : value
|
60
|
+
end
|
61
|
+
|
62
|
+
end # class props
|
63
|
+
|
64
|
+
|
65
|
+
class Config
|
66
|
+
|
67
|
+
# note: only kramdown is listed as a dependency in gem specs (because it's Ruby only and, thus, easy to install)
|
68
|
+
# if you want to use other markdown libs install the required/desired lib e.g.
|
69
|
+
# use gem install rdiscount for rdiscount and so on
|
70
|
+
#
|
71
|
+
# also note for now the first present markdown library gets used
|
72
|
+
# the search order is first come, first serve, that is: rdiscount, rpeg-markdown, maruku, bluecloth, kramdown (fallback, always present)
|
73
|
+
|
74
|
+
# DEFAULTS = {
|
75
|
+
# 'libs' => [ 'pandoc-ruby',
|
76
|
+
# 'rdiscount',
|
77
|
+
# 'rpeg-markdown',
|
78
|
+
# 'maruku',
|
79
|
+
# 'bluecloth',
|
80
|
+
# 'kramdown' ] }
|
81
|
+
|
82
|
+
# note: make kramdown default engine
|
83
|
+
DEFAULTS = { 'libs' => [ 'kramdown' ] }
|
84
|
+
|
85
|
+
|
86
|
+
def initialize
|
87
|
+
@props = @props_default = Props.new( DEFAULTS, 'DEFAULTS' )
|
88
|
+
|
89
|
+
# check for user settings (markdown.yml) in home folder
|
90
|
+
|
91
|
+
## todo/fix: use join path???
|
92
|
+
## todo: use .markdown.yml?? or differnt name ??
|
93
|
+
props_home_file = "#{Env.home}/markdown.yml"
|
94
|
+
if File.exists?( props_home_file )
|
95
|
+
puts "Loading settings from '#{props_home_file}'..."
|
96
|
+
@props = @props_home = Props.load_file( props_home_file, @props )
|
97
|
+
end
|
98
|
+
|
99
|
+
# check for user settings (markdown.yml) in working folder
|
100
|
+
|
101
|
+
props_work_file = "./markdown.yml"
|
102
|
+
if File.exists?( props_work_file )
|
103
|
+
puts "Loading settings from '#{props_work_file}'..."
|
104
|
+
@props = @props_work = Props.load_file( props_work_file, @props )
|
105
|
+
end
|
106
|
+
|
107
|
+
@libs = []
|
108
|
+
@mn = nil # markdown converter method name (mn) e.g. kramdown_to_html
|
109
|
+
|
110
|
+
require_markdown_libs()
|
111
|
+
end
|
112
|
+
|
113
|
+
def known_markdown_libs
|
114
|
+
# returns an array of known markdown engines e.g.
|
115
|
+
# [ 'pandoc-ruby', 'rdiscount', 'rpeg-markdown', 'maruku', 'bluecloth', 'kramdown' ]
|
116
|
+
|
117
|
+
## todo: allow single lib para instead of libs
|
118
|
+
## todo: allow ENV setting markdown_[select]_lib=xxxx
|
119
|
+
|
120
|
+
## todo/fix: use lookup with config parent cascade
|
121
|
+
|
122
|
+
|
123
|
+
## lookup order
|
124
|
+
## 1) env variable MARKDOWN_LIB
|
125
|
+
## 2) lib property (single markdown engine)
|
126
|
+
## 3) libs property (first-come first-serve markdown engine list)
|
127
|
+
|
128
|
+
user_lib = Env.markdown_lib || @props.fetch( 'lib', nil )
|
129
|
+
|
130
|
+
if user_lib.nil?
|
131
|
+
user_libs = @props.fetch( 'libs', nil )
|
132
|
+
else
|
133
|
+
[ user_lib ] # return as array (wrap single lib entry)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
|
138
|
+
def require_markdown_libs
|
139
|
+
|
140
|
+
# check for available markdown libs/gems
|
141
|
+
# try to require each lib and remove any not installed
|
142
|
+
|
143
|
+
known_markdown_libs.each do |lib|
|
144
|
+
begin
|
145
|
+
require lib
|
146
|
+
@libs << lib
|
147
|
+
rescue LoadError => ex
|
148
|
+
## todo: use logger.debug instead of puts
|
149
|
+
puts "Markdown library #{lib} not found. Use gem install #{lib} to install."
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
puts " Found #{@libs.length} Markdown libraries: #{@libs.join(', ')}"
|
154
|
+
end
|
155
|
+
|
156
|
+
def markdown_lib
|
157
|
+
@libs.first
|
158
|
+
end
|
159
|
+
|
160
|
+
def markdown_to_html_method
|
161
|
+
lib = @libs.first
|
162
|
+
opts = @props.fetch( lib, {} )
|
163
|
+
method = opts.fetch( 'converter', "#{lib.downcase}_to_html" ) # default to <lib>_to_html if converter prop not found
|
164
|
+
method.tr('-','_').to_sym
|
165
|
+
end
|
166
|
+
|
167
|
+
end # class Config
|
168
|
+
end # module Markdown
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module Markdown
|
2
2
|
module Engine
|
3
3
|
|
4
4
|
def pandoc_ruby_to_html( content )
|
@@ -30,30 +30,5 @@ module MarkdownSelect
|
|
30
30
|
content = content.to_a[13..-1].join # remove the layout div
|
31
31
|
end
|
32
32
|
|
33
|
-
|
34
|
-
def rdiscount_to_html( content )
|
35
|
-
RDiscount.new( content ).to_html
|
36
|
-
end
|
37
|
-
|
38
|
-
|
39
|
-
def rpeg_markdown_to_html( content )
|
40
|
-
PEGMarkdown.new( content ).to_html
|
41
|
-
end
|
42
|
-
|
43
|
-
|
44
|
-
def maruku_to_html( content )
|
45
|
-
Maruku.new( content, {:on_error => :raise} ).to_html
|
46
|
-
end
|
47
|
-
|
48
|
-
|
49
|
-
def bluecloth_to_html( content )
|
50
|
-
BlueCloth.new( content ).to_html
|
51
|
-
end
|
52
|
-
|
53
|
-
|
54
|
-
def kramdown_to_html( content )
|
55
|
-
Kramdown::Document.new( content ).to_html
|
56
|
-
end
|
57
|
-
|
58
33
|
end # module Engine
|
59
|
-
end # module
|
34
|
+
end # module Markdown
|
data/lib/markdown/gen.rb
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
module Markdown
|
2
|
+
|
3
|
+
|
4
|
+
class Opts
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@hash = {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def put( key, value )
|
11
|
+
@hash[ key.to_s ] = value
|
12
|
+
end
|
13
|
+
|
14
|
+
def output_path
|
15
|
+
@hash.fetch( 'output', '.' )
|
16
|
+
end
|
17
|
+
|
18
|
+
end # class Opts
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
class Gen
|
23
|
+
|
24
|
+
attr_reader :logger
|
25
|
+
attr_reader :opts
|
26
|
+
|
27
|
+
def initialize
|
28
|
+
@logger = Logger.new(STDOUT)
|
29
|
+
@logger.level = Logger::INFO
|
30
|
+
@opts = Opts.new
|
31
|
+
end
|
32
|
+
|
33
|
+
def with_output_path( dest, output_path )
|
34
|
+
dest_full = File.expand_path( dest, output_path )
|
35
|
+
logger.debug "dest_full=#{dest_full}"
|
36
|
+
|
37
|
+
# make sure dest path exists
|
38
|
+
dest_path = File.dirname( dest_full )
|
39
|
+
logger.debug "dest_path=#{dest_path}"
|
40
|
+
FileUtils.makedirs( dest_path ) unless File.directory? dest_path
|
41
|
+
dest_full
|
42
|
+
end
|
43
|
+
|
44
|
+
def create_doc( fn )
|
45
|
+
|
46
|
+
# expand output path in current dir and make sure output path exists
|
47
|
+
outpath = File.expand_path( opts.output_path )
|
48
|
+
logger.debug "outpath=#{outpath}"
|
49
|
+
FileUtils.makedirs( outpath ) unless File.directory? outpath
|
50
|
+
|
51
|
+
dirname = File.dirname( fn )
|
52
|
+
basename = File.basename( fn, '.*' )
|
53
|
+
extname = File.extname( fn )
|
54
|
+
logger.debug "dirname=#{dirname}, basename=#{basename}, extname=#{extname}"
|
55
|
+
|
56
|
+
# change working dir to sourcefile dir
|
57
|
+
# todo: add a -c option to commandline? to let you set cwd?
|
58
|
+
|
59
|
+
newcwd = File.expand_path( dirname )
|
60
|
+
oldcwd = File.expand_path( Dir.pwd )
|
61
|
+
|
62
|
+
unless newcwd == oldcwd then
|
63
|
+
logger.debug "oldcwd=#{oldcwd}"
|
64
|
+
logger.debug "newcwd=#{newcwd}"
|
65
|
+
Dir.chdir newcwd
|
66
|
+
end
|
67
|
+
|
68
|
+
if extname.empty? then
|
69
|
+
extname = ".markdown" # default to .markdown
|
70
|
+
|
71
|
+
[ '.markdown', '.m', '.mark', '.mkdn', '.md', '.txt', '.text' ].each do |e|
|
72
|
+
logger.debug "File.exists? #{dirname}/#{basename}#{e}"
|
73
|
+
if File.exists?( "#{dirname}/#{basename}#{e}" ) then
|
74
|
+
extname = e
|
75
|
+
logger.debug "extname=#{extname}"
|
76
|
+
break
|
77
|
+
end
|
78
|
+
end # each extension (e)
|
79
|
+
end
|
80
|
+
|
81
|
+
inname = "#{dirname}/#{basename}#{extname}"
|
82
|
+
|
83
|
+
puts "Reading document '#{basename}#{extname}'..."
|
84
|
+
|
85
|
+
|
86
|
+
logger.debug "inname=#{inname}"
|
87
|
+
|
88
|
+
content = File.read( inname )
|
89
|
+
|
90
|
+
# convert light-weight markup to hypertext
|
91
|
+
|
92
|
+
content = Markdown.new( content ).to_html
|
93
|
+
|
94
|
+
outname = "#{basename}.html"
|
95
|
+
puts "Preparing #{outname}..."
|
96
|
+
|
97
|
+
out = File.new( with_output_path( outname, outpath ), "w+" )
|
98
|
+
out << "<!-- ======================================================================\n"
|
99
|
+
out << " generated by #{Markdown.banner}\n"
|
100
|
+
out << " on #{Time.now} with Markdown engine '#{Markdown.lib}'\n"
|
101
|
+
out << " ====================================================================== -->\n"
|
102
|
+
out << content
|
103
|
+
out.flush
|
104
|
+
out.close
|
105
|
+
|
106
|
+
end # method create_doc
|
107
|
+
|
108
|
+
|
109
|
+
def run( args )
|
110
|
+
opt=OptionParser.new do |cmd|
|
111
|
+
|
112
|
+
cmd.banner = "Usage: markdown [options] name"
|
113
|
+
|
114
|
+
cmd.on( '-o', '--output PATH', 'Output Path' ) { |s| opts.put( 'output', s ) }
|
115
|
+
|
116
|
+
# todo: find different letter for debug trace switch (use v for version?)
|
117
|
+
cmd.on( "-v", "--verbose", "Show debug trace" ) do
|
118
|
+
logger.datetime_format = "%H:%H:%S"
|
119
|
+
logger.level = Logger::DEBUG
|
120
|
+
end
|
121
|
+
|
122
|
+
cmd.on_tail( "-h", "--help", "Show this message" ) do
|
123
|
+
puts
|
124
|
+
puts "Markdown is ..."
|
125
|
+
puts
|
126
|
+
puts cmd.help
|
127
|
+
puts
|
128
|
+
puts "Examples:"
|
129
|
+
puts " markdown microformats"
|
130
|
+
puts " markdown microformats.text # Process slides using Markdown"
|
131
|
+
puts " markdown -o site microformats # Output slideshow to slides folder"
|
132
|
+
puts
|
133
|
+
puts "Further information:"
|
134
|
+
puts " http://geraldb.github.com/markdown"
|
135
|
+
exit
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
opt.parse!( args )
|
140
|
+
|
141
|
+
puts Markdown.banner
|
142
|
+
|
143
|
+
args.each { |fn| create_doc( fn ) }
|
144
|
+
|
145
|
+
puts "Done."
|
146
|
+
|
147
|
+
end # method run
|
148
|
+
|
149
|
+
end # class Gen
|
150
|
+
|
151
|
+
end # module Markdown
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Markdown
|
2
|
+
|
3
|
+
class Wrapper
|
4
|
+
|
5
|
+
def initialize( lib, mn, content, options={} )
|
6
|
+
@lib = lib
|
7
|
+
@mn = mn
|
8
|
+
@content = content
|
9
|
+
@options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_html
|
13
|
+
# call markdown filter; turn markdown lib name into method_name (mn)
|
14
|
+
# eg. rpeg-markdown => rpeg_markdown_to_html
|
15
|
+
|
16
|
+
puts " Converting Markdown-text (#{@content.length} bytes) to HTML using library '#{@lib}' calling '#{@mn}'..."
|
17
|
+
|
18
|
+
send( @mn, @content ) # call 1st configured markdown engine e.g. kramdown_to_html( content )
|
19
|
+
end
|
20
|
+
|
21
|
+
include Engine
|
22
|
+
|
23
|
+
end # class Wrapper
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
@@config = nil
|
28
|
+
|
29
|
+
def self.lib( value = nil )
|
30
|
+
if value.nil?
|
31
|
+
if @@config.nil?
|
32
|
+
@@config = Config.new
|
33
|
+
end
|
34
|
+
@@config.markdown_lib
|
35
|
+
else
|
36
|
+
## todo: lets you select your library
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.new( content, options={} )
|
41
|
+
|
42
|
+
## todo: allow options to pass in
|
43
|
+
## lets you change markdown engine/converter for every call
|
44
|
+
## e.g. lets you add config properties (as headers) to your document (for example)
|
45
|
+
|
46
|
+
if @@config.nil?
|
47
|
+
@@config = Config.new
|
48
|
+
end
|
49
|
+
|
50
|
+
lib = @@config.markdown_lib
|
51
|
+
mn = @@config.markdown_to_html_method # lets you use differnt options/converters for a single markdown lib
|
52
|
+
Wrapper.new( lib, mn, content, options )
|
53
|
+
end
|
54
|
+
|
55
|
+
end # module Markdown
|
@@ -0,0 +1,35 @@
|
|
1
|
+
###
|
2
|
+
# NB: for local testing run like:
|
3
|
+
#
|
4
|
+
# 1.8.x: ruby -Ilib -rrubygems test/test_kramdown.rb
|
5
|
+
# 1.9.x: ruby -Ilib test/test_kramdown.rb
|
6
|
+
|
7
|
+
# core and stlibs
|
8
|
+
|
9
|
+
require 'test/unit'
|
10
|
+
require 'logger'
|
11
|
+
require 'pp'
|
12
|
+
|
13
|
+
# our own code
|
14
|
+
|
15
|
+
require 'lib/markdown'
|
16
|
+
|
17
|
+
|
18
|
+
class TestKramdown < Test::Unit::TestCase
|
19
|
+
|
20
|
+
def setup
|
21
|
+
Markdown.lib( 'kramdown' )
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_lib
|
25
|
+
lib = Markdown.lib
|
26
|
+
assert_equal( 'kramdown', lib )
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_to_html
|
30
|
+
html = Markdown.new( 'Hello World!' ).to_html
|
31
|
+
assert_equal( "<p>Hello World!</p>\n", html )
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
end # class TestKramdown
|
metadata
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: markdown
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 321068176
|
5
|
+
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
+
- 1
|
8
9
|
- 0
|
10
|
+
- beta
|
9
11
|
- 1
|
10
|
-
version: 0.0.
|
12
|
+
version: 0.1.0.beta1
|
11
13
|
platform: ruby
|
12
14
|
authors:
|
13
15
|
- Gerald Bauer
|
@@ -15,7 +17,7 @@ autorequire:
|
|
15
17
|
bindir: bin
|
16
18
|
cert_chain: []
|
17
19
|
|
18
|
-
date: 2012-
|
20
|
+
date: 2012-06-02 00:00:00 Z
|
19
21
|
dependencies:
|
20
22
|
- !ruby/object:Gem::Dependency
|
21
23
|
name: kramdown
|
@@ -56,26 +58,17 @@ dependencies:
|
|
56
58
|
requirements:
|
57
59
|
- - ~>
|
58
60
|
- !ruby/object:Gem::Version
|
59
|
-
hash:
|
61
|
+
hash: 7
|
60
62
|
segments:
|
61
|
-
-
|
62
|
-
-
|
63
|
-
version: "
|
63
|
+
- 3
|
64
|
+
- 0
|
65
|
+
version: "3.0"
|
64
66
|
type: :development
|
65
67
|
version_requirements: *id003
|
66
|
-
description:
|
67
|
-
The Markdown Select (`markdown_select`) Ruby gem lets you use your markdown library of choice.
|
68
|
-
Preconfigured markdown libraries include:
|
69
|
-
|
70
|
-
* `kramdown`
|
71
|
-
* `bluecloth`
|
72
|
-
* `maruku`
|
73
|
-
* `rpeg-markdown`
|
74
|
-
* `rdiscount`
|
75
|
-
* `pandoc-ruby`
|
68
|
+
description: Markdown Engine Wrapper - Use Your Markdown Library of Choice
|
76
69
|
email: webslideshow@googlegroups.com
|
77
|
-
executables:
|
78
|
-
|
70
|
+
executables:
|
71
|
+
- markdown
|
79
72
|
extensions: []
|
80
73
|
|
81
74
|
extra_rdoc_files:
|
@@ -85,11 +78,20 @@ files:
|
|
85
78
|
- Manifest.txt
|
86
79
|
- README.markdown
|
87
80
|
- Rakefile
|
88
|
-
-
|
89
|
-
- lib/
|
90
|
-
- lib/
|
91
|
-
- lib/
|
92
|
-
|
81
|
+
- bin/markdown
|
82
|
+
- lib/markdown.rb
|
83
|
+
- lib/markdown/config.rb
|
84
|
+
- lib/markdown/engines/bluecloth.rb
|
85
|
+
- lib/markdown/engines/kramdown.rb
|
86
|
+
- lib/markdown/engines/maruku.rb
|
87
|
+
- lib/markdown/engines/pandoc_ruby.rb
|
88
|
+
- lib/markdown/engines/rdiscount.rb
|
89
|
+
- lib/markdown/engines/rpeg_markdown.rb
|
90
|
+
- lib/markdown/gen.rb
|
91
|
+
- lib/markdown/wrapper.rb
|
92
|
+
- test/test_kramdown.rb
|
93
|
+
- .gemtest
|
94
|
+
homepage: http://geraldb.github.com/markdown
|
93
95
|
licenses: []
|
94
96
|
|
95
97
|
post_install_message:
|
@@ -110,18 +112,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
110
112
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
113
|
none: false
|
112
114
|
requirements:
|
113
|
-
- - "
|
115
|
+
- - ">"
|
114
116
|
- !ruby/object:Gem::Version
|
115
|
-
hash:
|
117
|
+
hash: 25
|
116
118
|
segments:
|
117
|
-
-
|
118
|
-
|
119
|
+
- 1
|
120
|
+
- 3
|
121
|
+
- 1
|
122
|
+
version: 1.3.1
|
119
123
|
requirements: []
|
120
124
|
|
121
125
|
rubyforge_project: markdown
|
122
126
|
rubygems_version: 1.8.17
|
123
127
|
signing_key:
|
124
128
|
specification_version: 3
|
125
|
-
summary: Markdown - Use Your Markdown Library of Choice
|
126
|
-
test_files:
|
127
|
-
|
129
|
+
summary: Markdown Engine Wrapper - Use Your Markdown Library of Choice
|
130
|
+
test_files:
|
131
|
+
- test/test_kramdown.rb
|
data/lib/markdown_select.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
|
2
|
-
$LOAD_PATH.unshift( File.expand_path( File.dirname(__FILE__) ) )
|
3
|
-
|
4
|
-
# core and stlibs
|
5
|
-
|
6
|
-
require 'yaml'
|
7
|
-
|
8
|
-
|
9
|
-
# our own code
|
10
|
-
|
11
|
-
require 'markdown_select/config'
|
12
|
-
require 'markdown_select/engine'
|
13
|
-
require 'markdown_select/markdown_select'
|
14
|
-
|
15
|
-
|
16
|
-
## todo: add main for bin (see slideshow)
|
17
|
-
|
18
|
-
module MarkdownSelect
|
19
|
-
|
20
|
-
VERSION = '0.0.1'
|
21
|
-
|
22
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
module MarkdownSelect
|
2
|
-
|
3
|
-
class Config
|
4
|
-
|
5
|
-
def initialize
|
6
|
-
@hash = {}
|
7
|
-
end
|
8
|
-
|
9
|
-
|
10
|
-
def load
|
11
|
-
# todo/fix: check more locations; merge config files
|
12
|
-
|
13
|
-
# check for user settings in working folder (check for slideshow.yml)
|
14
|
-
|
15
|
-
config_user_file = "./markdown.yml"
|
16
|
-
if File.exists?( config_user_file )
|
17
|
-
puts "Loading settings from '#{config_user_file}'..."
|
18
|
-
@hash[ 'user' ] = YAML.load_file( config_user_file )
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
|
23
|
-
def markdown_to_html_method( lib )
|
24
|
-
method = @hash.fetch( 'user', {} ).fetch( lib, {} ).fetch( 'converter', nil )
|
25
|
-
|
26
|
-
# use default name
|
27
|
-
if method.nil?
|
28
|
-
method = "#{lib.downcase}_to_html"
|
29
|
-
end
|
30
|
-
|
31
|
-
method.tr('-','_').to_sym
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
|
-
# note: only kramdown is listed as a dependency in gem specs (because it's Ruby only and, thus, easy to install)
|
36
|
-
# if you want to use other markdown libs install the required/desired lib e.g.
|
37
|
-
# use gem install rdiscount for rdiscount and so on
|
38
|
-
#
|
39
|
-
# also note for now the first present markdown library gets used
|
40
|
-
# the search order is first come, first serve, that is: rdiscount, rpeg-markdown, maruku, bluecloth, kramdown (fallback, always present)
|
41
|
-
|
42
|
-
BUILTIN_LIBS = [
|
43
|
-
'pandoc-ruby',
|
44
|
-
'rdiscount',
|
45
|
-
'rpeg-markdown',
|
46
|
-
'maruku',
|
47
|
-
'bluecloth',
|
48
|
-
'kramdown'
|
49
|
-
]
|
50
|
-
|
51
|
-
def known_markdown_libs
|
52
|
-
# returns an array of known markdown engines e.g.
|
53
|
-
# [ pandoc-ruby, rdiscount, rpeg-markdown, maruku, bluecloth, kramdown ]
|
54
|
-
|
55
|
-
## todo: allow single lib para instead of libs
|
56
|
-
## todo: allow ENV setting markdown_[select]_lib=xxxx
|
57
|
-
|
58
|
-
user_libs = @hash.fetch( 'user', {} ).fetch( 'libs', [] )
|
59
|
-
|
60
|
-
user_libs.length > 0 ? user_libs : BUILTIN_LIBS
|
61
|
-
end
|
62
|
-
|
63
|
-
end # class Config
|
64
|
-
end # module MarkdownSelect
|
@@ -1,80 +0,0 @@
|
|
1
|
-
module MarkdownSelect
|
2
|
-
|
3
|
-
class Proxy
|
4
|
-
|
5
|
-
def initialize( lib, mn, content, options={} )
|
6
|
-
@lib = lib
|
7
|
-
@mn = mn
|
8
|
-
@content = content
|
9
|
-
@options = options
|
10
|
-
end
|
11
|
-
|
12
|
-
def to_html
|
13
|
-
# call markdown filter; turn markdown lib name into method_name (mn)
|
14
|
-
# eg. rpeg-markdown => rpeg_markdown_to_html
|
15
|
-
|
16
|
-
puts " Converting Markdown-text (#{@content.length} bytes) to HTML using library '#{@lib}' calling '#{@mn}'..."
|
17
|
-
|
18
|
-
send( @mn, @content ) # call 1st configured markdown engine e.g. kramdown_to_html( content )
|
19
|
-
end
|
20
|
-
|
21
|
-
include Engine
|
22
|
-
|
23
|
-
end # class Proxy
|
24
|
-
|
25
|
-
@@markdown_config = nil
|
26
|
-
@@markdown_libs = []
|
27
|
-
@@markdown_mn = nil
|
28
|
-
|
29
|
-
def self.load_markdown_libs
|
30
|
-
|
31
|
-
# check for available markdown libs/gems
|
32
|
-
# try to require each lib and remove any not installed
|
33
|
-
|
34
|
-
@@markdown_config.known_markdown_libs.each do |lib|
|
35
|
-
begin
|
36
|
-
require lib
|
37
|
-
@@markdown_libs << lib
|
38
|
-
rescue LoadError => ex
|
39
|
-
## todo: use logger.debug instead of puts
|
40
|
-
puts "Markdown library #{lib} not found. Use gem install #{lib} to install."
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
puts " Found #{@@markdown_libs.length} Markdown libraries: #{@@markdown_libs.join(', ')}"
|
45
|
-
end
|
46
|
-
|
47
|
-
def self.lib
|
48
|
-
if @@markdown_config.nil?
|
49
|
-
@@markdown_config = Config.new
|
50
|
-
@@markdown_config.load
|
51
|
-
|
52
|
-
load_markdown_libs
|
53
|
-
|
54
|
-
# lets you use differnt options/converters for a single markdown lib
|
55
|
-
@@markdown_mn = @@markdown_config.markdown_to_html_method( @@markdown_libs.first )
|
56
|
-
end
|
57
|
-
|
58
|
-
@@markdown_libs.first
|
59
|
-
end
|
60
|
-
|
61
|
-
def self.new( content, options={} )
|
62
|
-
|
63
|
-
## todo: allow options to pass in
|
64
|
-
## lets you change markdown engine/converter for every call
|
65
|
-
## e.g. lets you add config properties (as headers) to your document (for example)
|
66
|
-
|
67
|
-
if @@markdown_config.nil?
|
68
|
-
@@markdown_config = Config.new
|
69
|
-
@@markdown_config.load
|
70
|
-
|
71
|
-
load_markdown_libs
|
72
|
-
|
73
|
-
# lets you use differnt options/converters for a single markdown lib
|
74
|
-
@@markdown_mn = @@markdown_config.markdown_to_html_method( @@markdown_libs.first )
|
75
|
-
end
|
76
|
-
|
77
|
-
Proxy.new( @@markdown_libs.first, @@markdown_mn, content, options )
|
78
|
-
end
|
79
|
-
|
80
|
-
end # module MarkdownSelect
|