markdown 1.0.0 → 1.1.0
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/Manifest.txt +9 -0
- data/README.markdown +6 -2
- data/Rakefile +11 -3
- data/lib/markdown.rb +5 -0
- data/lib/markdown/cli/runner.rb +24 -11
- data/lib/markdown/config.rb +19 -2
- data/lib/markdown/engines/bluecloth.rb +2 -2
- data/lib/markdown/engines/kramdown.rb +18 -13
- data/lib/markdown/engines/maruku.rb +2 -2
- data/lib/markdown/engines/pandoc_ruby.rb +4 -4
- data/lib/markdown/engines/rdiscount.rb +1 -1
- data/lib/markdown/engines/redcarpet.rb +15 -11
- data/lib/markdown/engines/rpeg_markdown.rb +2 -2
- data/lib/markdown/server.rb +126 -0
- data/lib/markdown/server/public/style.css +36 -0
- data/lib/markdown/server/views/_debug.erb +17 -0
- data/lib/markdown/server/views/_version.erb +6 -0
- data/lib/markdown/server/views/debug.erb +3 -0
- data/lib/markdown/server/views/index.erb +23 -0
- data/lib/markdown/server/views/layout.erb +15 -0
- data/lib/markdown/version.rb +1 -1
- data/lib/markdown/wrapper.rb +23 -10
- data/test/helper.rb +20 -0
- data/test/test_kramdown.rb +25 -16
- data/test/test_redcarpet.rb +38 -0
- metadata +72 -99
data/Manifest.txt
CHANGED
@@ -15,6 +15,15 @@ lib/markdown/engines/pandoc_ruby.rb
|
|
15
15
|
lib/markdown/engines/rdiscount.rb
|
16
16
|
lib/markdown/engines/redcarpet.rb
|
17
17
|
lib/markdown/engines/rpeg_markdown.rb
|
18
|
+
lib/markdown/server.rb
|
19
|
+
lib/markdown/server/public/style.css
|
20
|
+
lib/markdown/server/views/_debug.erb
|
21
|
+
lib/markdown/server/views/_version.erb
|
22
|
+
lib/markdown/server/views/debug.erb
|
23
|
+
lib/markdown/server/views/index.erb
|
24
|
+
lib/markdown/server/views/layout.erb
|
18
25
|
lib/markdown/version.rb
|
19
26
|
lib/markdown/wrapper.rb
|
27
|
+
test/helper.rb
|
20
28
|
test/test_kramdown.rb
|
29
|
+
test/test_redcarpet.rb
|
data/README.markdown
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# Markdown Engine Wrapper - Use Your Markdown Library of Choice in Ruby
|
2
2
|
|
3
|
-
* [
|
3
|
+
* home :: [github.com/geraldb/markdown](https://github.com/geraldb/markdown)
|
4
|
+
* bugs :: [github.com/geraldb/markdown/issues](https://github.com/geraldb/markdown/issues)
|
5
|
+
* gem :: [rubygems.org/gems/markdown](https://rubygems.org/gems/markdown)
|
6
|
+
* rdoc :: [rubydoc.info/gems/markdown](http://rubydoc.info/gems/markdown)
|
7
|
+
|
4
8
|
|
5
9
|
The Markdown Engine Wrapper (`markdown`) Ruby gem lets you use
|
6
10
|
your markdown library of choice. Preconfigured markdown libraries include
|
@@ -156,7 +160,7 @@ Just install the gem:
|
|
156
160
|
|
157
161
|
## Real World Usage
|
158
162
|
|
159
|
-
The [`slideshow`](http://slideshow.
|
163
|
+
The [`slideshow`](http://slideshow-s9.github.io) (also known as Slide Show (S9)) gem
|
160
164
|
that lets you create slide shows
|
161
165
|
and author slides in plain text using a wiki-style markup language that's easy-to-write and easy-to-read.
|
162
166
|
|
data/Rakefile
CHANGED
@@ -15,12 +15,20 @@ Hoe.spec 'markdown' do
|
|
15
15
|
|
16
16
|
self.extra_deps = [
|
17
17
|
['props','>= 1.0.0'],
|
18
|
-
['textutils','>=0.
|
19
|
-
['kramdown','>= 0.
|
18
|
+
['textutils','>=0.6.4'],
|
19
|
+
['kramdown','>= 1.0.2']
|
20
|
+
|
21
|
+
## todo: add sinatra ?? - keep it optional for now
|
20
22
|
]
|
21
23
|
|
22
24
|
# switch extension to .markdown for gihub formatting
|
23
25
|
self.readme_file = 'README.markdown'
|
24
26
|
self.history_file = 'History.markdown'
|
25
|
-
|
27
|
+
|
28
|
+
self.licenses = ['Public Domain']
|
29
|
+
|
30
|
+
self.spec_extras = {
|
31
|
+
:required_ruby_version => '>= 1.9.2'
|
32
|
+
}
|
33
|
+
|
26
34
|
end
|
data/lib/markdown.rb
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
# core and stlibs
|
8
8
|
|
9
9
|
require 'yaml'
|
10
|
+
require 'json'
|
10
11
|
require 'pp'
|
11
12
|
require 'logger'
|
12
13
|
require 'optparse'
|
@@ -51,6 +52,10 @@ module Markdown
|
|
51
52
|
"markdown #{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
|
52
53
|
end
|
53
54
|
|
55
|
+
def self.root
|
56
|
+
"#{File.expand_path( File.dirname(File.dirname(__FILE__)) )}"
|
57
|
+
end
|
58
|
+
|
54
59
|
def self.main
|
55
60
|
|
56
61
|
# allow env variable to set RUBYOPT-style default command line options
|
data/lib/markdown/cli/runner.rb
CHANGED
@@ -149,9 +149,13 @@ Examples:
|
|
149
149
|
markdown quickref.text # Process document using Markdown
|
150
150
|
markdown -o site quickref # Output documents to site folder
|
151
151
|
|
152
|
+
Note:
|
153
|
+
markdown server # Starts builtin markdown server (alias for server include serve, service, s)
|
154
|
+
|
155
|
+
|
152
156
|
Further information:
|
153
|
-
|
154
|
-
|
157
|
+
https://github.com/geraldb/markdown
|
158
|
+
|
155
159
|
EOS
|
156
160
|
exit
|
157
161
|
end
|
@@ -169,18 +173,27 @@ EOS
|
|
169
173
|
|
170
174
|
logger.debug "args.length: #{args.length}"
|
171
175
|
logger.debug "args: >#{args.join(',')}<"
|
172
|
-
|
173
|
-
# if no file args given; default to working folder (that is, .)
|
174
|
-
args = ['.'] if args.length == 0
|
175
176
|
|
176
|
-
args.
|
177
|
-
|
178
|
-
|
179
|
-
|
177
|
+
if args.length == 1 && ['server', 'serve', 'service', 's' ].include?( args[0] )
|
178
|
+
# start service/server
|
179
|
+
# NB: server (HTTP service) not included in standard default require
|
180
|
+
require 'markdown/server'
|
181
|
+
|
182
|
+
Markdown::Server.run!
|
183
|
+
else
|
184
|
+
|
185
|
+
# if no file args given; default to working folder (that is, .)
|
186
|
+
args = ['.'] if args.length == 0
|
187
|
+
|
188
|
+
args.each do |arg|
|
189
|
+
files = find_files( arg )
|
190
|
+
files.each do |file|
|
191
|
+
Gen.new( logger, opts ).create_doc( file )
|
192
|
+
end
|
180
193
|
end
|
181
194
|
end
|
182
|
-
|
183
|
-
puts
|
195
|
+
|
196
|
+
puts 'Done. Bye.'
|
184
197
|
|
185
198
|
end # method run
|
186
199
|
|
data/lib/markdown/config.rb
CHANGED
@@ -110,9 +110,7 @@ DEFAULTS = { 'libs' => [
|
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
113
|
-
|
114
113
|
def require_markdown_libs
|
115
|
-
|
116
114
|
# check for available markdown libs/gems
|
117
115
|
# try to require each lib and remove any not installed
|
118
116
|
|
@@ -127,6 +125,25 @@ DEFAULTS = { 'libs' => [
|
|
127
125
|
end
|
128
126
|
end
|
129
127
|
|
128
|
+
def markdown_lib=( lib )
|
129
|
+
|
130
|
+
# fix/todo: check if @libs.first == lib => do nothing; return
|
131
|
+
|
132
|
+
# check if value exists in libs array
|
133
|
+
# if yes put it into first position
|
134
|
+
# otherwise issue warning/error - better throw exception; engine not found
|
135
|
+
|
136
|
+
# try to delete
|
137
|
+
obj = @libs.delete( lib )
|
138
|
+
if obj.nil? # nothing deleted; no obj found
|
139
|
+
# try to require; will raise load error exception if not found; know what your're doing! no fallback; sorry; better fail fast
|
140
|
+
require lib
|
141
|
+
end
|
142
|
+
|
143
|
+
# add it back; make it first entry
|
144
|
+
@libs.unshift( lib )
|
145
|
+
end
|
146
|
+
|
130
147
|
def markdown_lib
|
131
148
|
@libs.first
|
132
149
|
end
|
@@ -2,10 +2,10 @@ module Markdown
|
|
2
2
|
module Engine
|
3
3
|
|
4
4
|
def bluecloth_to_html( content, options={} )
|
5
|
-
puts " Converting Markdown-text (#{
|
5
|
+
puts " Converting Markdown-text (#{content.length} bytes) to HTML using library bluecloth..."
|
6
6
|
|
7
7
|
BlueCloth.new( content ).to_html
|
8
8
|
end
|
9
9
|
|
10
10
|
end # module Engine
|
11
|
-
end # module Markdown
|
11
|
+
end # module Markdown
|
@@ -6,46 +6,51 @@ module Markdown
|
|
6
6
|
h = {}
|
7
7
|
|
8
8
|
# todo: find an easier (more generic?) way to setup hash - possible?
|
9
|
-
h[ :auto_ids ] = options.fetch( 'auto_ids', nil )
|
9
|
+
h[ :auto_ids ] = options.fetch( 'auto_ids', nil ) if options.fetch( 'auto_ids', nil )
|
10
10
|
h[ :footnote_nr ] = options.fetch( 'footnote_nr',nil ) if options.fetch( 'footnote_nr', nil )
|
11
11
|
h[ :entity_output ] = options.fetch( 'entity_output',nil ) if options.fetch( 'entity_output', nil )
|
12
12
|
h[ :toc_levels ] = options.fetch( 'toc_levels',nil ) if options.fetch( 'toc_levels', nil )
|
13
13
|
h[ :smart_quotes ] = options.fetch( 'smart_quotes',nil ) if options.fetch( 'smart_quotes', nil )
|
14
|
-
|
15
|
-
puts " Converting Markdown-text (#{@content.length} bytes) to HTML using library kramdown (#{Kramdown::VERSION})"
|
16
|
-
puts " using options:"
|
17
|
-
pp h # todo: use inspect? or to_json?
|
18
14
|
|
15
|
+
show_banner = options.fetch( 'banner', true)
|
16
|
+
|
17
|
+
puts " Converting Markdown-text (#{content.length} bytes) to HTML using library kramdown (#{Kramdown::VERSION})"
|
18
|
+
puts " using options: #{h.to_json}"
|
19
|
+
|
19
20
|
## allow fenced blocks a la github flavored markup
|
20
21
|
# -- thanks zenweb for inspiration:
|
21
22
|
# https://github.com/seattlerb/zenweb/blob/master/lib/zenweb/plugins/markdown.rb
|
22
|
-
|
23
|
+
|
23
24
|
content = content.
|
24
25
|
gsub(/^``` *(\w+)/) { "{:lang=\"#$1\"}\n~~~" }.
|
25
26
|
gsub(/^```/, '~~~')
|
26
27
|
|
27
28
|
content = Kramdown::Document.new( content, h ).to_html
|
28
29
|
|
29
|
-
|
30
|
-
|
31
|
-
|
30
|
+
if show_banner
|
31
|
+
|
32
|
+
# todo: check content size and newlines
|
33
|
+
# check banner option?
|
34
|
+
# only add banner if some newlines and size > treshold?
|
32
35
|
|
33
36
|
banner_begin =<<EOS
|
34
37
|
<!-- === begin markdown block =====================================================
|
35
38
|
|
36
39
|
generated by #{Markdown.banner}
|
37
40
|
on #{Time.now} with Markdown engine kramdown (#{Kramdown::VERSION})
|
38
|
-
using options {
|
41
|
+
using options #{h.to_json}
|
39
42
|
-->
|
40
43
|
EOS
|
41
44
|
|
42
45
|
banner_end =<<EOS
|
43
46
|
<!-- === end markdown block ===================================================== -->
|
44
47
|
EOS
|
48
|
+
content = banner_begin + content + banner_end
|
49
|
+
end # if show_banner
|
50
|
+
|
51
|
+
content
|
45
52
|
|
46
|
-
content = banner_begin + content + banner_end
|
47
|
-
|
48
53
|
end
|
49
54
|
|
50
55
|
end # module Engine
|
51
|
-
end # module Markdown
|
56
|
+
end # module Markdown
|
@@ -2,10 +2,10 @@ module Markdown
|
|
2
2
|
module Engine
|
3
3
|
|
4
4
|
def maruku_to_html( content, options={} )
|
5
|
-
puts " Converting Markdown-text (#{
|
5
|
+
puts " Converting Markdown-text (#{content.length} bytes) to HTML using library maruku..."
|
6
6
|
|
7
7
|
Maruku.new( content, {:on_error => :raise} ).to_html
|
8
8
|
end
|
9
9
|
|
10
10
|
end # module Engine
|
11
|
-
end # module Markdown
|
11
|
+
end # module Markdown
|
@@ -2,11 +2,11 @@ module Markdown
|
|
2
2
|
module Engine
|
3
3
|
|
4
4
|
def pandoc_ruby_to_html( content, options={} )
|
5
|
-
puts " Converting Markdown-text (#{
|
5
|
+
puts " Converting Markdown-text (#{content.length} bytes) to HTML using library pandoc_ruby..."
|
6
6
|
|
7
7
|
content = PandocRuby.new( content, :from => :markdown, :to => :html ).convert
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
def pandoc_ruby_to_html_incremental( content, options={} )
|
11
11
|
content = PandocRuby.new( content, :from => :markdown, :to => :html ).convert
|
12
12
|
content = content.gsub(/<(ul|ol)/) do |match|
|
@@ -14,12 +14,12 @@ module Markdown
|
|
14
14
|
end
|
15
15
|
content
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
# sample how to use your own converter
|
19
19
|
# configure in markdown.yml
|
20
20
|
# pandoc-ruby:
|
21
21
|
# converter: pandoc-ruby-to-s5
|
22
|
-
|
22
|
+
|
23
23
|
def pandoc_ruby_to_s5( content, options={} )
|
24
24
|
content = PandocRuby.new( content, {:from => :markdown, :to => :s5}, :smart ).convert
|
25
25
|
content = content.gsub(/class="incremental"/,'class="step"')
|
@@ -2,7 +2,7 @@ module Markdown
|
|
2
2
|
module Engine
|
3
3
|
|
4
4
|
def rdiscount_to_html( content, options={} )
|
5
|
-
puts " Converting Markdown-text (#{
|
5
|
+
puts " Converting Markdown-text (#{content.length} bytes) to HTML using library rdiscount..."
|
6
6
|
|
7
7
|
RDiscount.new( content ).to_html
|
8
8
|
end
|
@@ -8,39 +8,43 @@ module Markdown
|
|
8
8
|
# see https://github.com/tanoku/redcarpet
|
9
9
|
|
10
10
|
extensions_ary = options.fetch( 'extensions', [] )
|
11
|
-
|
11
|
+
show_banner = options.fetch( 'banner', true )
|
12
|
+
|
12
13
|
extensions_hash = {}
|
13
14
|
extensions_ary.each do |e|
|
14
15
|
extensions_hash[ e.to_sym ] = true
|
15
16
|
end
|
16
17
|
|
17
|
-
puts " Converting Markdown-text (#{
|
18
|
-
puts " using extensions:
|
18
|
+
puts " Converting Markdown-text (#{content.length} bytes) to HTML using library redcarpet (#{Redcarpet::VERSION}) w/ HTML render"
|
19
|
+
puts " using extensions: #{extensions_ary.to_json}"
|
19
20
|
|
20
21
|
redcarpet = Redcarpet::Markdown.new( Redcarpet::Render::HTML, extensions_hash )
|
21
22
|
content = redcarpet.render( content )
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
if show_banner
|
25
|
+
# todo: check content size and newlines
|
26
|
+
# check banner option?
|
27
|
+
# only add banner if some newlines and size > treshold?
|
26
28
|
|
27
29
|
banner_begin =<<EOS
|
28
30
|
<!-- === begin markdown block =====================================================
|
29
31
|
|
30
32
|
generated by #{Markdown.banner}
|
31
33
|
on #{Time.now} with Markdown engine redcarpet (#{Redcarpet::VERSION}) w/ HTML render
|
32
|
-
using extensions:
|
34
|
+
using extensions: #{extensions_ary.to_json}
|
33
35
|
-->
|
34
36
|
EOS
|
35
37
|
|
36
|
-
|
38
|
+
banner_end =<<EOS
|
37
39
|
<!-- === end markdown block ===================================================== -->
|
38
40
|
EOS
|
39
41
|
|
40
|
-
|
41
|
-
|
42
|
+
content = banner_begin + content + banner_end
|
43
|
+
end # if show_banner
|
44
|
+
|
45
|
+
content
|
42
46
|
|
43
47
|
end
|
44
48
|
|
45
49
|
end # module Engine
|
46
|
-
end # module Markdown
|
50
|
+
end # module Markdown
|
@@ -2,10 +2,10 @@ module Markdown
|
|
2
2
|
module Engine
|
3
3
|
|
4
4
|
def rpeg_markdown_to_html( content, options={} )
|
5
|
-
puts " Converting Markdown-text (#{
|
5
|
+
puts " Converting Markdown-text (#{content.length} bytes) to HTML using library rpeg_markdown..."
|
6
6
|
|
7
7
|
PEGMarkdown.new( content ).to_html
|
8
8
|
end
|
9
9
|
|
10
10
|
end # module Engine
|
11
|
-
end # module Markdown
|
11
|
+
end # module Markdown
|
@@ -0,0 +1,126 @@
|
|
1
|
+
######
|
2
|
+
# NB: use rackup to startup Sinatra service (see config.ru)
|
3
|
+
#
|
4
|
+
# e.g. config.ru:
|
5
|
+
# require './boot'
|
6
|
+
# run Markdown::Server
|
7
|
+
|
8
|
+
|
9
|
+
# 3rd party libs/gems
|
10
|
+
|
11
|
+
require 'sinatra/base'
|
12
|
+
|
13
|
+
|
14
|
+
# our own code
|
15
|
+
|
16
|
+
# require 'logutils'
|
17
|
+
# require 'logutils/db'
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
module Markdown
|
22
|
+
|
23
|
+
class Server < Sinatra::Base
|
24
|
+
|
25
|
+
def self.banner
|
26
|
+
"markdown-service #{Markdown::VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}] on Sinatra/#{Sinatra::VERSION} (#{ENV['RACK_ENV']})"
|
27
|
+
end
|
28
|
+
|
29
|
+
PUBLIC_FOLDER = "#{Markdown.root}/lib/markdown/server/public"
|
30
|
+
VIEWS_FOLDER = "#{Markdown.root}/lib/markdown/server/views"
|
31
|
+
|
32
|
+
puts "[debug] markdown-service - setting public folder to: #{PUBLIC_FOLDER}"
|
33
|
+
puts "[debug] markdown-service - setting views folder to: #{VIEWS_FOLDER}"
|
34
|
+
|
35
|
+
set :public_folder, PUBLIC_FOLDER # set up the static dir (with images/js/css inside)
|
36
|
+
set :views, VIEWS_FOLDER # set up the views dir
|
37
|
+
|
38
|
+
set :static, true # set up static file routing
|
39
|
+
|
40
|
+
|
41
|
+
##################
|
42
|
+
# Helpers
|
43
|
+
|
44
|
+
helpers do
|
45
|
+
def path_prefix
|
46
|
+
request.env['SCRIPT_NAME']
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
##############################################
|
51
|
+
# Controllers / Routing / Request Handlers
|
52
|
+
|
53
|
+
get '/' do
|
54
|
+
erb :index
|
55
|
+
end
|
56
|
+
|
57
|
+
## todo: use 3rd party services from markdown.yml (lets you configure)
|
58
|
+
# e.g. http://johnmacfarlane.net/cgi-bin/pandoc-dingus?text=hi
|
59
|
+
|
60
|
+
## return html
|
61
|
+
get '/html' do
|
62
|
+
|
63
|
+
# fix: use activesupport -> .present?
|
64
|
+
if params[:lib].nil? == false && params[:lib].empty? == false
|
65
|
+
Markdown.lib = params[:lib]
|
66
|
+
end
|
67
|
+
|
68
|
+
md = Markdown.new( params[:text] )
|
69
|
+
html = md.to_html
|
70
|
+
html
|
71
|
+
end
|
72
|
+
|
73
|
+
## return html wrapped in json (follows babelfish2 dingus service api)
|
74
|
+
get '/dingus' do
|
75
|
+
|
76
|
+
# fix: use activesupport -> .present?
|
77
|
+
if params[:lib].nil? == false && params[:lib].empty? == false
|
78
|
+
Markdown.lib = params[:lib]
|
79
|
+
end
|
80
|
+
|
81
|
+
md = Markdown.new( params[:text] )
|
82
|
+
html = md.to_html
|
83
|
+
|
84
|
+
### todo: add/fill up version
|
85
|
+
## ass helper <lib>_version to engine
|
86
|
+
# {"name":"Pandoc","html":"<p>hi</p>","version":"1.9.4.2"}
|
87
|
+
data = {
|
88
|
+
name: Markdown.lib,
|
89
|
+
html: html,
|
90
|
+
version: 'x.x.x' # to be done
|
91
|
+
}
|
92
|
+
|
93
|
+
json_or_jsonp( data.to_json )
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
get '/d*' do
|
98
|
+
erb :debug
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
### helper for json or jsonp response (depending on callback para)
|
103
|
+
|
104
|
+
private
|
105
|
+
def json_or_jsonp( json )
|
106
|
+
callback = params.delete('callback')
|
107
|
+
response = ''
|
108
|
+
|
109
|
+
if callback
|
110
|
+
content_type :js
|
111
|
+
response = "#{callback}(#{json})"
|
112
|
+
else
|
113
|
+
content_type :json
|
114
|
+
response = json
|
115
|
+
end
|
116
|
+
|
117
|
+
response
|
118
|
+
end
|
119
|
+
|
120
|
+
|
121
|
+
end # class Server
|
122
|
+
end # module Markdown
|
123
|
+
|
124
|
+
|
125
|
+
# say hello
|
126
|
+
puts Markdown::Server.banner
|
@@ -0,0 +1,36 @@
|
|
1
|
+
body {
|
2
|
+
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; }
|
3
|
+
|
4
|
+
a {
|
5
|
+
color: black;
|
6
|
+
text-decoration: none; }
|
7
|
+
a:hover {
|
8
|
+
color: black;
|
9
|
+
background-color: aqua;
|
10
|
+
text-decoration: underline; }
|
11
|
+
a:visited {
|
12
|
+
color: black; }
|
13
|
+
|
14
|
+
.params {
|
15
|
+
color: green;
|
16
|
+
font-style: italic;
|
17
|
+
font-weight: bold; }
|
18
|
+
|
19
|
+
pre {
|
20
|
+
background-color: #F3F3F3;
|
21
|
+
border-bottom: 1px solid #BBBBBB;
|
22
|
+
border-top: 1px solid #BBBBBB;
|
23
|
+
padding: 4px; }
|
24
|
+
|
25
|
+
|
26
|
+
/**********
|
27
|
+
* version / powered by
|
28
|
+
*/
|
29
|
+
|
30
|
+
.version {
|
31
|
+
text-align: center;
|
32
|
+
margin-top: 10px;
|
33
|
+
color: grey; }
|
34
|
+
.version a, .version span {
|
35
|
+
font-size: 12px;
|
36
|
+
color: grey; }
|
@@ -0,0 +1,17 @@
|
|
1
|
+
|
2
|
+
<h3>Debug</h3>
|
3
|
+
|
4
|
+
<pre>
|
5
|
+
request.scheme <%= request.scheme %>
|
6
|
+
request.script_name <%= request.script_name %>
|
7
|
+
request.path_info <%= request.path_info %>
|
8
|
+
request.port <%= request.port %>
|
9
|
+
request.request_method <%= request.request_method %>
|
10
|
+
request.query_string <%= request.query_string %>
|
11
|
+
request.host <%= request.host %>
|
12
|
+
request.referrer <%= request.referrer %>
|
13
|
+
request.user_agent <%= request.user_agent %>
|
14
|
+
request.url <%= request.url %>
|
15
|
+
request.path <%= request.path %>
|
16
|
+
request.ip <%= request.ip %>
|
17
|
+
</pre>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<div class='version'>
|
2
|
+
<a href="http://groups.google.com/group/webslideshow">Questions? Comments?</a> |
|
3
|
+
<a href="https://github.com/geraldb/markdown">markdown/<%= Markdown::VERSION %></a> -
|
4
|
+
<span>Ruby/<%= "#{RUBY_VERSION} (#{RUBY_RELEASE_DATE}/#{RUBY_PLATFORM})" %> on</span>
|
5
|
+
<span>Sinatra/<%= Sinatra::VERSION %> (<%= ENV['RACK_ENV'] %>)</span>
|
6
|
+
</div>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
|
2
|
+
<h1>Markdown JSON(P) API</h1>
|
3
|
+
|
4
|
+
|
5
|
+
<hr>
|
6
|
+
|
7
|
+
<p>
|
8
|
+
<code>
|
9
|
+
<a href='<%= url("/html?text=hello_world") %>'>
|
10
|
+
/html?<span class='params'>text</span>=hello_world
|
11
|
+
</a>
|
12
|
+
</code>
|
13
|
+
</p>
|
14
|
+
|
15
|
+
<p>
|
16
|
+
<code>
|
17
|
+
<a href='<%= url("/dingus?text=hello_world") %>'>
|
18
|
+
/dingus?<span class='params'>text</span>=hello_world
|
19
|
+
</a>
|
20
|
+
</code>
|
21
|
+
</p>
|
22
|
+
|
23
|
+
<%= erb :'_debug' %>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset='UTF-8'>
|
5
|
+
<title>markdown web service / HTTP JSON API</title>
|
6
|
+
<link href="<%= url('/style.css') %>" rel='stylesheet'>
|
7
|
+
</head>
|
8
|
+
<body>
|
9
|
+
|
10
|
+
<%= yield %>
|
11
|
+
|
12
|
+
<%= erb :'_version' %>
|
13
|
+
|
14
|
+
</body>
|
15
|
+
</html>
|
data/lib/markdown/version.rb
CHANGED
data/lib/markdown/wrapper.rb
CHANGED
@@ -3,30 +3,33 @@ module Markdown
|
|
3
3
|
class Wrapper
|
4
4
|
|
5
5
|
def initialize( lib, mn, content, options={} )
|
6
|
-
@lib = lib
|
6
|
+
@lib = lib
|
7
7
|
@mn = mn
|
8
8
|
@content = content
|
9
9
|
@options = options
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
def to_html
|
13
13
|
# call markdown filter; turn markdown lib name into method_name (mn)
|
14
14
|
# eg. rpeg-markdown => rpeg_markdown_to_html
|
15
15
|
send( @mn, @content, @options ) # call 1st configured markdown engine e.g. kramdown_to_html( content )
|
16
|
-
end
|
16
|
+
end
|
17
17
|
|
18
18
|
include Engine
|
19
|
-
|
19
|
+
|
20
20
|
end # class Wrapper
|
21
21
|
|
22
22
|
|
23
23
|
|
24
24
|
@@config = nil
|
25
|
-
|
26
|
-
def self.lib=(
|
27
|
-
|
25
|
+
|
26
|
+
def self.lib=( lib )
|
27
|
+
if @@config.nil?
|
28
|
+
@@config = Config.new
|
29
|
+
end
|
30
|
+
@@config.markdown_lib = lib
|
28
31
|
end
|
29
|
-
|
32
|
+
|
30
33
|
def self.lib
|
31
34
|
if @@config.nil?
|
32
35
|
@@config = Config.new
|
@@ -54,10 +57,20 @@ module Markdown
|
|
54
57
|
end
|
55
58
|
@@config.dump
|
56
59
|
end
|
57
|
-
|
58
|
-
|
60
|
+
|
61
|
+
|
59
62
|
def self.new( content, options={} )
|
60
63
|
|
64
|
+
## options
|
65
|
+
## make sure keys are strings, that is, allow symbols for easy use
|
66
|
+
## but internally only use string (yaml gets use strings)
|
67
|
+
|
68
|
+
## fix: use stringify_keys! from activesupport (include dependency ?? why? why not??)
|
69
|
+
options.keys.each do |key|
|
70
|
+
options[ key.to_s ] = options.delete(key)
|
71
|
+
end
|
72
|
+
|
73
|
+
|
61
74
|
## todo: allow options to pass in
|
62
75
|
## lets you change markdown engine/converter for every call
|
63
76
|
## e.g. lets you add config properties (as headers) to your document (for example)
|
data/test/helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
## $:.unshift(File.dirname(__FILE__))
|
3
|
+
|
4
|
+
## minitest setup
|
5
|
+
|
6
|
+
# require 'minitest/unit'
|
7
|
+
require 'minitest/autorun'
|
8
|
+
|
9
|
+
# include MiniTest::Unit # lets us use TestCase instead of MiniTest::Unit::TestCase
|
10
|
+
|
11
|
+
require 'logger'
|
12
|
+
require 'pp'
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
## our own code
|
17
|
+
|
18
|
+
require 'markdown'
|
19
|
+
|
20
|
+
|
data/test/test_kramdown.rb
CHANGED
@@ -1,35 +1,44 @@
|
|
1
1
|
###
|
2
2
|
# NB: for local testing run like:
|
3
3
|
#
|
4
|
-
# 1.8.x: ruby -Ilib -rrubygems test/test_kramdown.rb
|
5
4
|
# 1.9.x: ruby -Ilib test/test_kramdown.rb
|
6
5
|
|
7
6
|
# core and stlibs
|
8
7
|
|
9
|
-
require '
|
10
|
-
require 'logger'
|
11
|
-
require 'pp'
|
8
|
+
require 'helper'
|
12
9
|
|
13
|
-
# our own code
|
14
10
|
|
15
|
-
require 'lib/markdown'
|
16
11
|
|
17
|
-
|
18
|
-
class TestKramdown < Test::Unit::TestCase
|
12
|
+
class TestKramdown < MiniTest::Unit::TestCase
|
19
13
|
|
20
14
|
def setup
|
15
|
+
puts 'enter setup'
|
16
|
+
lib = Markdown.lib
|
17
|
+
puts ' set lib=kramdown'
|
21
18
|
Markdown.lib = 'kramdown'
|
22
19
|
end
|
23
|
-
|
20
|
+
|
24
21
|
def test_lib
|
25
22
|
lib = Markdown.lib
|
26
|
-
assert_equal( 'kramdown', lib )
|
23
|
+
assert_equal( 'kramdown', lib )
|
27
24
|
end
|
28
|
-
|
29
|
-
def
|
30
|
-
|
31
|
-
|
25
|
+
|
26
|
+
def test_to_html_banner_false
|
27
|
+
md = Markdown.new( 'Hello World!', banner: false )
|
28
|
+
|
29
|
+
assert_equal( "<p>Hello World!</p>\n", md.to_html )
|
30
|
+
assert_equal( "<p>Hello World!</p>\n", md.to_html )
|
31
|
+
assert_equal( "<p>Hello World!</p>\n", md.to_html )
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_to_html_banner_true
|
35
|
+
md = Markdown.new( 'Hello World!', banner: true )
|
36
|
+
html1 = md.to_html
|
37
|
+
html2 = md.to_html
|
38
|
+
assert( html1 =~ /^<!-- === begin markdown block ===/ )
|
39
|
+
assert( html1.include?( "<p>Hello World!</p>\n" ))
|
40
|
+
assert( html2.include?( "<p>Hello World!</p>\n" ))
|
41
|
+
assert( html1 =~ /============ -->$/ )
|
32
42
|
end
|
33
43
|
|
34
|
-
|
35
|
-
end # class TestKramdown
|
44
|
+
end # class TestKramdown
|
@@ -0,0 +1,38 @@
|
|
1
|
+
###
|
2
|
+
# NB: for local testing run like:
|
3
|
+
#
|
4
|
+
# 1.9.x: ruby -Ilib test/test_redcarpet.rb
|
5
|
+
|
6
|
+
# core and stlibs
|
7
|
+
|
8
|
+
require 'helper'
|
9
|
+
|
10
|
+
|
11
|
+
class TestRedcarpet < MiniTest::Unit::TestCase
|
12
|
+
|
13
|
+
def setup
|
14
|
+
puts 'enter setup'
|
15
|
+
lib = Markdown.lib
|
16
|
+
puts ' set lib=redcarpet'
|
17
|
+
Markdown.lib = 'redcarpet'
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_lib
|
21
|
+
lib = Markdown.lib
|
22
|
+
assert_equal( 'redcarpet', lib )
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_to_html_banner_false
|
26
|
+
html = Markdown.new( 'Hello World!', banner: false ).to_html
|
27
|
+
assert_equal( "<p>Hello World!</p>\n", html )
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_to_html_banner_true
|
31
|
+
html = Markdown.new( 'Hello World!', banner: true ).to_html
|
32
|
+
assert( html =~ /^<!-- === begin markdown block ===/ )
|
33
|
+
assert( html.include?( "<p>Hello World!</p>\n" ))
|
34
|
+
assert( html =~ /============ -->$/ )
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
end # class TestRedcarpet
|
metadata
CHANGED
@@ -1,109 +1,79 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: markdown
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 0
|
9
|
-
- 0
|
10
|
-
version: 1.0.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Gerald Bauer
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-05-24 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: props
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &87448610 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 23
|
29
|
-
segments:
|
30
|
-
- 1
|
31
|
-
- 0
|
32
|
-
- 0
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
33
21
|
version: 1.0.0
|
34
22
|
type: :runtime
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: textutils
|
38
23
|
prerelease: false
|
39
|
-
|
24
|
+
version_requirements: *87448610
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: textutils
|
27
|
+
requirement: &87448390 !ruby/object:Gem::Requirement
|
40
28
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
|
45
|
-
segments:
|
46
|
-
- 0
|
47
|
-
- 2
|
48
|
-
- 0
|
49
|
-
version: 0.2.0
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.6.4
|
50
33
|
type: :runtime
|
51
|
-
version_requirements: *id002
|
52
|
-
- !ruby/object:Gem::Dependency
|
53
|
-
name: kramdown
|
54
34
|
prerelease: false
|
55
|
-
|
35
|
+
version_requirements: *87448390
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: kramdown
|
38
|
+
requirement: &87448170 !ruby/object:Gem::Requirement
|
56
39
|
none: false
|
57
|
-
requirements:
|
58
|
-
- -
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
|
61
|
-
segments:
|
62
|
-
- 0
|
63
|
-
- 13
|
64
|
-
- 7
|
65
|
-
version: 0.13.7
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 1.0.2
|
66
44
|
type: :runtime
|
67
|
-
version_requirements: *id003
|
68
|
-
- !ruby/object:Gem::Dependency
|
69
|
-
name: rdoc
|
70
45
|
prerelease: false
|
71
|
-
|
46
|
+
version_requirements: *87448170
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rdoc
|
49
|
+
requirement: &87447950 !ruby/object:Gem::Requirement
|
72
50
|
none: false
|
73
|
-
requirements:
|
51
|
+
requirements:
|
74
52
|
- - ~>
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
|
77
|
-
segments:
|
78
|
-
- 3
|
79
|
-
- 10
|
80
|
-
version: "3.10"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.10'
|
81
55
|
type: :development
|
82
|
-
version_requirements: *id004
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: hoe
|
85
56
|
prerelease: false
|
86
|
-
|
57
|
+
version_requirements: *87447950
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: hoe
|
60
|
+
requirement: &87447730 !ruby/object:Gem::Requirement
|
87
61
|
none: false
|
88
|
-
requirements:
|
62
|
+
requirements:
|
89
63
|
- - ~>
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
|
92
|
-
segments:
|
93
|
-
- 3
|
94
|
-
- 0
|
95
|
-
version: "3.0"
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '3.3'
|
96
66
|
type: :development
|
97
|
-
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *87447730
|
98
69
|
description: Markdown Engine Wrapper - Use Your Markdown Library of Choice
|
99
70
|
email: webslideshow@googlegroups.com
|
100
|
-
executables:
|
71
|
+
executables:
|
101
72
|
- markdown
|
102
73
|
extensions: []
|
103
|
-
|
104
|
-
extra_rdoc_files:
|
74
|
+
extra_rdoc_files:
|
105
75
|
- Manifest.txt
|
106
|
-
files:
|
76
|
+
files:
|
107
77
|
- History.markdown
|
108
78
|
- Manifest.txt
|
109
79
|
- README.markdown
|
@@ -121,43 +91,46 @@ files:
|
|
121
91
|
- lib/markdown/engines/rdiscount.rb
|
122
92
|
- lib/markdown/engines/redcarpet.rb
|
123
93
|
- lib/markdown/engines/rpeg_markdown.rb
|
94
|
+
- lib/markdown/server.rb
|
95
|
+
- lib/markdown/server/public/style.css
|
96
|
+
- lib/markdown/server/views/_debug.erb
|
97
|
+
- lib/markdown/server/views/_version.erb
|
98
|
+
- lib/markdown/server/views/debug.erb
|
99
|
+
- lib/markdown/server/views/index.erb
|
100
|
+
- lib/markdown/server/views/layout.erb
|
124
101
|
- lib/markdown/version.rb
|
125
102
|
- lib/markdown/wrapper.rb
|
103
|
+
- test/helper.rb
|
126
104
|
- test/test_kramdown.rb
|
105
|
+
- test/test_redcarpet.rb
|
127
106
|
- .gemtest
|
128
107
|
homepage: http://geraldb.github.com/markdown
|
129
|
-
licenses:
|
130
|
-
|
108
|
+
licenses:
|
109
|
+
- Public Domain
|
131
110
|
post_install_message:
|
132
|
-
rdoc_options:
|
111
|
+
rdoc_options:
|
133
112
|
- --main
|
134
113
|
- README.markdown
|
135
|
-
require_paths:
|
114
|
+
require_paths:
|
136
115
|
- lib
|
137
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
116
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
138
117
|
none: false
|
139
|
-
requirements:
|
140
|
-
- -
|
141
|
-
- !ruby/object:Gem::Version
|
142
|
-
|
143
|
-
|
144
|
-
- 0
|
145
|
-
version: "0"
|
146
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - ! '>='
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: 1.9.2
|
122
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
147
123
|
none: false
|
148
|
-
requirements:
|
149
|
-
- -
|
150
|
-
- !ruby/object:Gem::Version
|
151
|
-
|
152
|
-
segments:
|
153
|
-
- 0
|
154
|
-
version: "0"
|
124
|
+
requirements:
|
125
|
+
- - ! '>='
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
155
128
|
requirements: []
|
156
|
-
|
157
129
|
rubyforge_project: markdown
|
158
|
-
rubygems_version: 1.8.
|
130
|
+
rubygems_version: 1.8.17
|
159
131
|
signing_key:
|
160
132
|
specification_version: 3
|
161
133
|
summary: Markdown Engine Wrapper - Use Your Markdown Library of Choice
|
162
|
-
test_files:
|
134
|
+
test_files:
|
163
135
|
- test/test_kramdown.rb
|
136
|
+
- test/test_redcarpet.rb
|