markdown 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -17,11 +17,18 @@ lib/markdown/engines/redcarpet.rb
17
17
  lib/markdown/engines/rpeg_markdown.rb
18
18
  lib/markdown/server.rb
19
19
  lib/markdown/server/public/style.css
20
+ lib/markdown/server/views/_about.erb
20
21
  lib/markdown/server/views/_debug.erb
22
+ lib/markdown/server/views/_libs.erb
23
+ lib/markdown/server/views/_libs_service.erb
24
+ lib/markdown/server/views/_notepad.erb
25
+ lib/markdown/server/views/_service.erb
21
26
  lib/markdown/server/views/_version.erb
22
27
  lib/markdown/server/views/debug.erb
23
28
  lib/markdown/server/views/index.erb
24
29
  lib/markdown/server/views/layout.erb
30
+ lib/markdown/server/views/notepad.erb
31
+ lib/markdown/server/views/service.erb
25
32
  lib/markdown/version.rb
26
33
  lib/markdown/wrapper.rb
27
34
  test/helper.rb
@@ -17,6 +17,7 @@ your markdown library of choice. Preconfigured markdown libraries include
17
17
  * `rdiscount`
18
18
  * `pandoc-ruby`
19
19
 
20
+
20
21
  ## Usage - Ruby Code
21
22
 
22
23
  require 'markdown'
@@ -26,25 +27,44 @@ your markdown library of choice. Preconfigured markdown libraries include
26
27
  # => "<p>Hello World</p>\n"
27
28
 
28
29
 
30
+ ## Usage - Web Service / HTTP (JSON) API - `GET /markdown`
31
+
32
+ Try the `markdown` HTTP (JSON) API running
33
+ on Heroku [`hypertext.herokuapp.com`](http://hypertext.herokuapp.com).
34
+
35
+ Example:
36
+
37
+ GET /markdown?text=Hello+World!
38
+
39
+ <p>Hello World!</p>
40
+
41
+
42
+ To start your own server/service use `markdown serve`. See command line below.
43
+
44
+
29
45
  ## Usage - Command Line
30
46
 
31
47
  The `markdown` gem includes a little command line tool. Try `markdown -h` for details:
32
48
 
33
- ```
34
- markdown - Lets you convert plain text documents to hypertext with your Markdown engine of choice
35
- and preprocessing text filters.
36
-
37
- Usage: markdown [options] files_or_dirs
38
- -o, --output PATH Output Path
39
- -v, --verbose Show debug trace
40
49
 
50
+ markdown - Lets you convert plain text documents to hypertext with your Markdown engine of choice
51
+ and preprocessing text filters.
52
+
53
+ Usage: markdown [options] files_or_dirs
54
+ -o, --output PATH Output Path
55
+ -v, --verbose Show debug trace
56
+
57
+
58
+ Examples:
59
+ markdown # Process all documents in working folder (that is, .)
60
+ markdown quickref # Process document or folder using Markdown
61
+ markdown quickref.text # Process document using Markdown
62
+ markdown -o site quickref # Output documents to site folder
63
+
64
+ Note:
65
+ markdown server # Starts builtin markdown server
66
+ # (aliases for server include serve, service, s)
41
67
 
42
- Examples:
43
- markdown # Process all documents in working folder (that is, .)
44
- markdown quickref # Process document or folder using Markdown
45
- markdown quickref.text # Process document using Markdown
46
- markdown -o site quickref # Output documents to site folder
47
- ```
48
68
 
49
69
  ## Configuration - Markdown Engine Loading Order
50
70
 
@@ -150,7 +150,8 @@ Examples:
150
150
  markdown -o site quickref # Output documents to site folder
151
151
 
152
152
  Note:
153
- markdown server # Starts builtin markdown server (alias for server include serve, service, s)
153
+ markdown server # Starts builtin markdown server
154
+ # (aliases for server include serve, service, s)
154
155
 
155
156
 
156
157
  Further information:
@@ -9,40 +9,51 @@ module Markdown
9
9
  # also note for now the first present markdown library gets used
10
10
  # the search order is first come, first serve, that is: rdiscount, rpeg-markdown, maruku, bluecloth, kramdown (fallback, always present)
11
11
 
12
- # DEFAULTS = {
13
- # 'libs' => [ 'pandoc-ruby',
14
- # 'rdiscount',
15
- # 'rpeg-markdown',
16
- # 'maruku',
17
- # 'bluecloth',
18
- # 'kramdown' ] }
19
-
20
- # note: make kramdown default engine
21
-
22
- DEFAULTS = { 'libs' => [
23
- 'kramdown' ],
24
- 'extnames' => [
25
- '.markdown',
26
- '.m',
27
- '.mark',
28
- '.mkdn',
29
- '.md',
30
- '.mdown',
31
- '.markdn',
32
- '.txt',
33
- '.text' ], # todo: check - add .wiki??? ext
34
- 'redcarpet' => {
35
- 'extensions' => [
36
- 'no_intra_emphasis',
37
- 'fenced_code_blocks',
38
- 'tables',
39
- 'strikethrough' ] }, # todo/fix: merge nested hash??
40
- 'filters' => [
41
- 'comments-percent-style' ] # optional (preprocessing) text filters: e.g. comments-percent-style, skip-end-directive, etc. (see textutils gem)
12
+
13
+ DEFAULT_EXTNAMES = [
14
+ '.markdown',
15
+ '.m',
16
+ '.mark',
17
+ '.mkdn',
18
+ '.md',
19
+ '.mdown',
20
+ '.markdn',
21
+ '.txt',
22
+ '.text' ] # todo: check - add .wiki??? ext
23
+
24
+ DEFAULT_REDCARPET = {
25
+ 'extensions' => [
26
+ 'no_intra_emphasis',
27
+ 'fenced_code_blocks',
28
+ 'tables',
29
+ 'strikethrough' ] }
30
+
31
+ DEFAULT_FILTERS = [
32
+ 'comments-percent-style' ] # optional (preprocessing) text filters: e.g. comments-percent-style, skip-end-directive, etc. (see textutils gem)
33
+
34
+
35
+ DEFAULTS = { 'libs' => [ 'kramdown' ], # note: make kramdown default engine
36
+ 'extnames' => DEFAULT_EXTNAMES,
37
+ 'redcarpet' => DEFAULT_REDCARPET, # todo/fix: merge nested hash??
38
+ 'filters' => DEFAULT_FILTERS
42
39
  }
43
40
 
44
-
45
- def initialize
41
+ #
42
+ # pandoc-ruby - how to include - gemfile cannot install binary ??
43
+ # rpeg-markdown - build failure - still active, anyway?
44
+ # rdiscount - # compilation error on heroku; sorry excluded for now
45
+
46
+ DEFAULTS_SERVICE = { 'libs' => [
47
+ 'kramdown', # note: make kramdown default engine
48
+ 'maruku',
49
+ 'bluecloth',
50
+ 'redcarpet'
51
+ ],
52
+ 'extnames' => DEFAULT_EXTNAMES,
53
+ 'redcarpet' => DEFAULT_REDCARPET
54
+ }
55
+
56
+ def load_props
46
57
  @props = @props_default = Props.new( DEFAULTS, 'DEFAULTS' )
47
58
 
48
59
  # check for user settings (markdown.yml) in home folder
@@ -50,7 +61,7 @@ DEFAULTS = { 'libs' => [
50
61
  ## todo: use .markdown.yml?? or differnt name ??
51
62
  props_home_file = File.join( Env.home, 'markdown.yml' )
52
63
  if File.exists?( props_home_file )
53
- puts "Loading settings from '#{props_home_file}'..."
64
+ puts "Loading home settings from '#{props_home_file}'..."
54
65
  @props = @props_home = Props.load_file( props_home_file, @props )
55
66
  end
56
67
 
@@ -58,10 +69,25 @@ DEFAULTS = { 'libs' => [
58
69
 
59
70
  props_work_file = File.join( '.', 'markdown.yml' )
60
71
  if File.exists?( props_work_file )
61
- puts "Loading settings from '#{props_work_file}'..."
72
+ puts "Loading work settings from '#{props_work_file}'..."
62
73
  @props = @props_work = Props.load_file( props_work_file, @props )
63
74
  end
75
+ end
76
+
77
+ def load_props_service
78
+ puts "Loading service settings..."
79
+ @props = @props_default = Props.new( DEFAULTS_SERVICE, 'DEFAULTS' )
80
+ end
81
+
82
+ def initialize
64
83
 
84
+ # for an example see ./boot.rb
85
+ if $MARKDOWN_USE_SERVICE_CONFIG == true
86
+ load_props_service
87
+ else
88
+ load_props
89
+ end
90
+
65
91
  @libs = []
66
92
 
67
93
  require_markdown_libs()
@@ -148,13 +174,24 @@ DEFAULTS = { 'libs' => [
148
174
  @libs.first
149
175
  end
150
176
 
151
- def markdown_lib_defaults
152
- ## todo: return props ? that acts like a hash?? (lets us support section lookup without deep merge???)
153
- opts = @props.fetch( @libs.first, {} )
177
+ def markdown_libs
178
+ @libs # NB: return all libs - should we return a clone?
154
179
  end
155
180
 
156
- def markdown_to_html_method
157
- lib = @libs.first
181
+ def markdown_lib_defaults( lib=nil )
182
+ lib = @libs.first if lib.nil?
183
+ ## todo: return props ? that acts like a hash?? (lets us support section lookup without deep merge???)
184
+ opts = @props.fetch( lib, {} )
185
+ end
186
+
187
+ def markdown_version_method( lib=nil )
188
+ lib = @libs.first if lib.nil?
189
+ method = "#{lib.downcase}_version" # default to <lib>_to_html if converter prop not found
190
+ method.tr('-','_').to_sym
191
+ end
192
+
193
+ def markdown_to_html_method( lib=nil )
194
+ lib = @libs.first if lib.nil?
158
195
  method = @props.fetch_from_section( lib, 'converter', "#{lib.downcase}_to_html" ) # default to <lib>_to_html if converter prop not found
159
196
  method.tr('-','_').to_sym
160
197
  end
@@ -1,6 +1,10 @@
1
1
  module Markdown
2
2
  module Engine
3
3
 
4
+ def bluecloth_version
5
+ BlueCloth::VERSION
6
+ end
7
+
4
8
  def bluecloth_to_html( content, options={} )
5
9
  puts " Converting Markdown-text (#{content.length} bytes) to HTML using library bluecloth..."
6
10
 
@@ -1,6 +1,10 @@
1
1
  module Markdown
2
2
  module Engine
3
3
 
4
+ def kramdown_version
5
+ Kramdown::VERSION
6
+ end
7
+
4
8
  def kramdown_to_html( content, options={} )
5
9
 
6
10
  h = {}
@@ -34,7 +38,7 @@ module Markdown
34
38
  # only add banner if some newlines and size > treshold?
35
39
 
36
40
  banner_begin =<<EOS
37
- <!-- === begin markdown block =====================================================
41
+ <!-- === begin markdown block ===
38
42
 
39
43
  generated by #{Markdown.banner}
40
44
  on #{Time.now} with Markdown engine kramdown (#{Kramdown::VERSION})
@@ -43,7 +47,7 @@ module Markdown
43
47
  EOS
44
48
 
45
49
  banner_end =<<EOS
46
- <!-- === end markdown block ===================================================== -->
50
+ <!-- === end markdown block === -->
47
51
  EOS
48
52
  content = banner_begin + content + banner_end
49
53
  end # if show_banner
@@ -1,6 +1,10 @@
1
1
  module Markdown
2
2
  module Engine
3
-
3
+
4
+ def maruku_version
5
+ Maruku::VERSION
6
+ end
7
+
4
8
  def maruku_to_html( content, options={} )
5
9
  puts " Converting Markdown-text (#{content.length} bytes) to HTML using library maruku..."
6
10
 
@@ -1,11 +1,16 @@
1
1
  module Markdown
2
2
  module Engine
3
-
3
+
4
+ def rdiscount_version
5
+ RDiscount::VERSION
6
+ end
7
+
4
8
  def rdiscount_to_html( content, options={} )
5
9
  puts " Converting Markdown-text (#{content.length} bytes) to HTML using library rdiscount..."
6
10
 
7
11
  RDiscount.new( content ).to_html
8
12
  end
9
13
 
14
+
10
15
  end # module Engine
11
16
  end # module Markdown
@@ -1,6 +1,10 @@
1
1
  module Markdown
2
2
  module Engine
3
3
 
4
+ def redcarpet_version
5
+ Redcarpet::VERSION
6
+ end
7
+
4
8
  def redcarpet_to_html( content, options={} )
5
9
 
6
10
  ## NB: uses redcarpet2
@@ -27,7 +31,7 @@ module Markdown
27
31
  # only add banner if some newlines and size > treshold?
28
32
 
29
33
  banner_begin =<<EOS
30
- <!-- === begin markdown block =====================================================
34
+ <!-- === begin markdown block ===
31
35
 
32
36
  generated by #{Markdown.banner}
33
37
  on #{Time.now} with Markdown engine redcarpet (#{Redcarpet::VERSION}) w/ HTML render
@@ -36,7 +40,7 @@ module Markdown
36
40
  EOS
37
41
 
38
42
  banner_end =<<EOS
39
- <!-- === end markdown block ===================================================== -->
43
+ <!-- === end markdown block === -->
40
44
  EOS
41
45
 
42
46
  content = banner_begin + content + banner_end
@@ -50,44 +50,111 @@ class Server < Sinatra::Base
50
50
  ##############################################
51
51
  # Controllers / Routing / Request Handlers
52
52
 
53
+
54
+ def welcome_markdown
55
+ <<EOS
56
+ # Header 1
57
+
58
+ ## Header 2
59
+
60
+ ### Header 3
61
+
62
+ Welcome to [Markdown](#{request.url}). We hope you **really** enjoy using this.
63
+
64
+ Just type some [markdown](http://daringfireball.net/projects/markdown) on the left and see it on the right. *Simple as that.*
65
+
66
+ > Quote goes here.
67
+
68
+ A list:
69
+
70
+ - One
71
+ - Two
72
+ - Three
73
+
74
+ Some inline code `to_html` and a preformatted code block:
75
+
76
+ ```
77
+ Markdown.new( 'Hello Markdown!' ).to_html
78
+ ```
79
+ EOS
80
+ end
81
+
82
+
83
+ get %r{/(service|services|srv|s)} do
84
+ erb :service
85
+ end
86
+
87
+ get %r{/(notepad|note|notes|n)} do
88
+ @welcome_markdown = welcome_markdown
89
+ @welcome_html = Markdown.new( @welcome_markdown ).to_html
90
+
91
+ erb :notepad
92
+ end
93
+
53
94
  get '/' do
95
+ @welcome_markdown = welcome_markdown
96
+ @welcome_html = Markdown.new( @welcome_markdown ).to_html
97
+
54
98
  erb :index
55
99
  end
56
100
 
101
+
57
102
  ## todo: use 3rd party services from markdown.yml (lets you configure)
58
103
  # e.g. http://johnmacfarlane.net/cgi-bin/pandoc-dingus?text=hi
59
104
 
60
- ## return html
61
- get '/html' do
105
+
106
+ def markdownify( params, opts={} )
107
+ pp params
108
+ text = params[:text]
109
+ lib = params[:lib] # optional
110
+ pp text
111
+ pp lib
62
112
 
63
113
  # fix: use activesupport -> .present?
64
- if params[:lib].nil? == false && params[:lib].empty? == false
65
- Markdown.lib = params[:lib]
114
+ if lib.nil? == false && lib.empty? == false
115
+ Markdown.lib = lib
66
116
  end
67
117
 
68
- md = Markdown.new( params[:text] )
69
- html = md.to_html
70
- html
118
+ Markdown.new( text, opts ).to_html
71
119
  end
72
120
 
73
- ## return html wrapped in json (follows babelfish2 dingus service api)
74
- get '/dingus' do
75
121
 
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
122
+ # return hypertext (html)
123
+ get '/markdown' do
124
+ content_type 'text/html'
125
+ markdownify( params )
126
+ end
127
+
128
+
129
+ # return babelmark2/dingus-style json
130
+ get '/markdown/dingus' do
131
+ html = markdownify( params )
132
+
133
+ ## todo: use converter for markdownify
134
+ lib = Markdown.lib
135
+ conv = Markdown.create_converter( lib )
136
+
137
+ data = {
138
+ name: lib,
139
+ html: html,
140
+ version: conv.version
141
+ }
83
142
 
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"}
143
+ json_or_jsonp( data.to_json )
144
+ end
145
+
146
+ # return html wrapped in json (follows babelfish2 dingus service api)
147
+ get '/dingus' do
148
+ html = markdownify( params, banner: false )
149
+
150
+ ## todo: use converter for markdownify
151
+ lib = Markdown.lib
152
+ conv = Markdown.create_converter( lib )
153
+
87
154
  data = {
88
- name: Markdown.lib,
155
+ name: lib,
89
156
  html: html,
90
- version: 'x.x.x' # to be done
157
+ version: conv.version
91
158
  }
92
159
 
93
160
  json_or_jsonp( data.to_json )
@@ -124,3 +191,5 @@ end # module Markdown
124
191
 
125
192
  # say hello
126
193
  puts Markdown::Server.banner
194
+ puts " default markdown engine: #{Markdown.lib}" # force loading of settings/config
195
+ puts " markdown engines: #{Markdown.libs.inspect}"
@@ -1,15 +1,14 @@
1
1
  body {
2
2
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; }
3
3
 
4
- a {
5
- color: black;
4
+ a, a:visited {
5
+ color: #8B0000;
6
6
  text-decoration: none; }
7
+
7
8
  a:hover {
8
- color: black;
9
- background-color: aqua;
9
+ color: #8B0000;
10
+ background-color: gold;
10
11
  text-decoration: underline; }
11
- a:visited {
12
- color: black; }
13
12
 
14
13
  .params {
15
14
  color: green;
@@ -23,6 +22,19 @@ pre {
23
22
  padding: 4px; }
24
23
 
25
24
 
25
+ h3 {
26
+ border-bottom: 1px solid black;
27
+ }
28
+
29
+ /****************
30
+ * api
31
+ */
32
+
33
+ .api a, .api a:visited {
34
+ color: black;
35
+ }
36
+
37
+
26
38
  /**********
27
39
  * version / powered by
28
40
  */
@@ -31,6 +43,70 @@ pre {
31
43
  text-align: center;
32
44
  margin-top: 10px;
33
45
  color: grey; }
34
- .version a, .version span {
46
+ .version a,
47
+ .version a:visited,
48
+ .version span {
35
49
  font-size: 12px;
36
- color: grey; }
50
+ color: grey; }
51
+
52
+
53
+ /************************
54
+ * markdown
55
+ *
56
+ * todo: use sass/scss and nest everything inside class .markdown
57
+ */
58
+
59
+ .markdown h3 {
60
+ border-bottom: none;
61
+ }
62
+
63
+ .markdown a,
64
+ .markdown a:visited {
65
+ color: #2e80d3;
66
+ text-decoration: underline;
67
+ }
68
+
69
+ .markdown em {
70
+ background-color: #fffeca;
71
+ padding: 0 0.08em;
72
+ }
73
+
74
+ .markdown abbr {
75
+ border-bottom: 1px dashed;
76
+ cursor: help;
77
+ }
78
+
79
+ .markdown blockquote {
80
+ border-left: 5px solid #ddd;
81
+ color: #555;
82
+ margin: 0 0 1em;
83
+ padding-left: 0.6em;
84
+ }
85
+
86
+ .markdown pre {
87
+ background-color: #f8f8ff;
88
+ border: 1px solid #dedede;
89
+ color: #444;
90
+ font-family: "Bitstream Vera Sans Mono", Courier, monospace;
91
+ font-size: 0.8em;
92
+ line-height: 1.5em;
93
+ margin: 0 0 2em;
94
+ overflow: auto;
95
+ padding: 0.5em;
96
+ }
97
+
98
+ .markdown pre code {
99
+ background-color: #f8f8ff;
100
+ border: medium none;
101
+ font-size: 1em;
102
+ padding: 0;
103
+ }
104
+
105
+ .markdown code {
106
+ background-color: #f8f8ff;
107
+ border: 1px solid #dedede;
108
+ color: #444;
109
+ padding: 0 0.2em;
110
+ font-family: "Bitstream Vera Sans Mono", Courier, monospace;
111
+ font-size: 0.8em;
112
+ }
@@ -0,0 +1,23 @@
1
+
2
+
3
+ <h3>Markdown Gem / About</h3>
4
+
5
+ <p><b>
6
+ What's the <code>markdown</code> gem?
7
+ </b>
8
+
9
+ The Markdown Engine Wrapper (<code>markdown</code>) Ruby gem lets you use
10
+ your markdown library of choice in Ruby.
11
+ <a href='https://github.com/geraldb/markdown'>Find out more »</a>
12
+ </p>
13
+
14
+ <p>
15
+ <b>Questions? Comments?</b>
16
+ Send them along to the <a href='http://groups.google.com/group/webslideshow'>Free Web Slide Show Alternatives (S5, S6, S9, Slidy And Friends) Forum/Mailing List</a>.
17
+ Thanks!
18
+ </p>
19
+
20
+ <p><b>License</b>
21
+ The markdown scripts are dedicated to the public domain.
22
+ Use it as you please with no restrictions whatsoever.
23
+ </p>
@@ -1,6 +1,15 @@
1
1
 
2
2
  <h3>Debug</h3>
3
3
 
4
+ <h4>Params</h4>
5
+
6
+ <pre>
7
+ <%= params.inspect %>
8
+ </pre>
9
+
10
+
11
+ <h4>Request</h4>
12
+
4
13
  <pre>
5
14
  request.scheme <%= request.scheme %>
6
15
  request.script_name <%= request.script_name %>
@@ -15,3 +24,4 @@
15
24
  request.path <%= request.path %>
16
25
  request.ip <%= request.ip %>
17
26
  </pre>
27
+
@@ -0,0 +1,14 @@
1
+
2
+ <h3>Markdown Libs</h3>
3
+
4
+ <table>
5
+ <% Markdown.libs.each do |lib|
6
+ conv = Markdown.create_converter( lib )
7
+ %>
8
+ <tr>
9
+ <td><%= lib %></td>
10
+ <td><%= conv.version %></td>
11
+ <td><!-- defaults to be done --></td>
12
+ </tr>
13
+ <% end %>
14
+ </table>
@@ -0,0 +1,27 @@
1
+
2
+ <h3>Markdown Libs / Live Examples</h3>
3
+
4
+ <table class='api'>
5
+ <% Markdown.libs.each do |lib|
6
+ conv = Markdown.create_converter( lib )
7
+ %>
8
+ <tr>
9
+ <td><%= lib %></td>
10
+ <td> / <%= conv.version %></td>
11
+ <td> -
12
+ <code>GET
13
+ <a href='view-source:<%= url("/markdown?lib=#{lib}&text=Hello+World!") %>'>
14
+ /markdown?<span class='params'>lib=<em><%= lib %></em></span>&text=<em>Hello+World!</em>
15
+ </a>
16
+ </code>
17
+ </td>
18
+ <td>
19
+ <code>&bull; GET
20
+ <a href='<%= url("/dingus?lib=#{lib}&text=Hello+World!") %>'>
21
+ /dingus?<span class='params'>lib=<em><%= lib %></em></span>&text=<em>Hello+World!</em>
22
+ </a>
23
+ </code>
24
+ </td>
25
+ </tr>
26
+ <% end %>
27
+ </table>
@@ -0,0 +1,96 @@
1
+
2
+ <script>
3
+
4
+ var show_html = false;
5
+
6
+ function toggle_output() {
7
+ var $toggle_output = $( '#toggle-output' );
8
+ var $output = $( '#output' );
9
+ var $output_source = $( '#output-source' );
10
+
11
+ show_html = !show_html;
12
+
13
+ if( show_html ) {
14
+ $toggle_output.html( '[ Hide HTML ]' );
15
+ $output.hide();
16
+ $output_source.show();
17
+ }
18
+ else {
19
+ $toggle_output.html( '[ Show HTML ]' );
20
+ $output.show();
21
+ $output_source.hide();
22
+ }
23
+ }
24
+
25
+ function process_markdown() {
26
+ var params = $( '#notepad, #notepad-lib' ).serialize();
27
+
28
+ // window.alert( params );
29
+
30
+ $.get( '/markdown', params, function( data ){
31
+
32
+ var $output = $( '#output' );
33
+ var $output_source = $( '#output-source' );
34
+ // window.alert( html );
35
+
36
+ // todo: check if data.html present? or content type js/json
37
+ // allow dingus-style { 'html': 'dddddd' }
38
+ $output.html( data );
39
+ $output_source.html( data );
40
+ });
41
+ }
42
+
43
+ </script>
44
+
45
+
46
+ <table width='100%'>
47
+ <colgroup>
48
+ <col width='50%'>
49
+ <col width='50%'>
50
+ </colgroup>
51
+ <tr>
52
+ <td>
53
+ <!-- first column -->
54
+
55
+ <div id='input'>
56
+ <textarea id='notepad' name='text' style='width: 100%; min-height: 500px;'><%= @welcome_markdown %></textarea>
57
+ </div>
58
+
59
+ </td>
60
+ <td style='vertical-align: top;'>
61
+ <!-- second column -->
62
+
63
+ <div id='output' class='markdown' style='width:100%; padding-left: 10px;'>
64
+ <%= @welcome_html %>
65
+ </div>
66
+
67
+ <textarea id='output-source' style='display: none; width: 100%; min-height: 500px;'><%= @welcome_html %></textarea>
68
+
69
+ <div id='loading' style='display: none;'></div>
70
+
71
+ </td>
72
+ </tr>
73
+ <tr>
74
+ <td>
75
+ <!-- first column -->
76
+ <span>
77
+ Use
78
+ <select id='notepad-lib' name='lib'>
79
+ <% Markdown.libs.each_with_index do |lib,i| %>
80
+ <option value='<%= lib %>'
81
+ <% if i == 0 %>
82
+ selected='selected'
83
+ <% end %> >
84
+ <%= lib %></option>
85
+ <% end %>
86
+ </select>
87
+ </span>
88
+
89
+ <a href='#' onclick='process_markdown();'>[ Update ]</a>
90
+
91
+ </td>
92
+ <td><!-- second column -->
93
+ <a id='toggle-output' href='#' onclick='toggle_output();'>[ Show HTML ]</a>
94
+ </td>
95
+ </tr>
96
+ </table>
@@ -0,0 +1,75 @@
1
+
2
+ <h3>Markdown Web Service / HTTP JSON(P) API</h1>
3
+
4
+ <h4>Render Markdown</h4>
5
+
6
+ <pre><code>GET /markdown
7
+ </code></pre>
8
+
9
+ <p>
10
+ Input:
11
+ </p>
12
+
13
+ <ul>
14
+ <li><b>text</b> - <em>Required</em> string - The Markdown text to render</li>
15
+ <li><b>lib</b> - <em>Optional</em> string - The Markdown library/engine to use
16
+ (e.g. <code>kramdown</code>, <code>redcarpet</code>, etc)</li>
17
+ </ul>
18
+
19
+ <p class='api'>
20
+ Example:
21
+ <code>GET
22
+ <a href='view-source:<%= url("/markdown?text=Hello+World!") %>'>
23
+ /markdown?<span class='params'>text=<em>Hello+World!</em></span>
24
+ </a>
25
+ </code>
26
+ </p>
27
+
28
+ <p>
29
+ Response:
30
+ </p>
31
+
32
+ <pre><code>Status: 200 OK
33
+ Content-Type: text/html
34
+
35
+ &lt;p&gt;Hello World!&lt;p&gt;
36
+ </code></pre>
37
+
38
+
39
+ <h4>Render Markdown (Babelmark2-Style)</h4>
40
+
41
+ <pre><code>GET /dingus
42
+ </code></pre>
43
+
44
+ <p>
45
+ Input:
46
+ </p>
47
+
48
+ <ul>
49
+ <li><b>text</b> - <em>Required</em> string - The Markdown text to render</li>
50
+ <li><b>lib</b> - <em>Optional</em> string - The Markdown library/engine to use
51
+ (e.g. <code>kramdown</code>, <code>redcarpet</code>, etc)</li>
52
+ </ul>
53
+
54
+
55
+ <p class='api'>Example:
56
+ <code>GET
57
+ <a href='<%= url("/dingus?text=Hello+World!") %>'>
58
+ /dingus?<span class='params'>text=<em>Hello+World!</em></span>
59
+ </a>
60
+ </code>
61
+ </p>
62
+
63
+ <p>
64
+ Response:
65
+ </p>
66
+
67
+ <pre><code>Status: 200 OK
68
+ Content-Type: application/json
69
+
70
+ {
71
+ 'name': 'kramdown',
72
+ 'html': '&lt;p&gt;Hello World!&lt;p&gt;',
73
+ 'version': '1.0.2'
74
+ }
75
+ </code></pre>
@@ -1,23 +1,18 @@
1
1
 
2
- <h1>Markdown JSON(P) API</h1>
3
2
 
3
+ <%= erb :'_notepad' %>
4
4
 
5
- <hr>
6
5
 
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>
6
+ <%= erb :'_libs' %>
7
+
8
+
9
+ <%= erb :'_service' %>
10
+
11
+
12
+ <%= erb :'_about' %>
13
+
14
+ <!--
15
+ <hr>
22
16
 
23
17
  <%= erb :'_debug' %>
18
+ -->
@@ -2,8 +2,9 @@
2
2
  <html>
3
3
  <head>
4
4
  <meta charset='UTF-8'>
5
- <title>markdown web service / HTTP JSON API</title>
5
+ <title>markdown ruby gem - use your markdown library of choice in ruby</title>
6
6
  <link href="<%= url('/style.css') %>" rel='stylesheet'>
7
+ <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
7
8
  </head>
8
9
  <body>
9
10
 
@@ -0,0 +1,8 @@
1
+
2
+ <%= erb :'_notepad' %>
3
+
4
+ <!--
5
+ <hr>
6
+
7
+ <%= erb :'_debug' %>
8
+ -->
@@ -0,0 +1,10 @@
1
+
2
+ <%= erb :'_service' %>
3
+
4
+ <%= erb :'_libs_service' %>
5
+
6
+ <!--
7
+ <hr>
8
+
9
+ <%= erb :'_debug' %>
10
+ -->
@@ -1,3 +1,3 @@
1
1
  module Markdown
2
- VERSION = '1.1.0'
2
+ VERSION = '1.1.1'
3
3
  end
@@ -1,5 +1,28 @@
1
1
  module Markdown
2
-
2
+
3
+ ## todo: use Converter inside Wrapper to avoid duplication
4
+
5
+ class Converter
6
+ def initialize( lib, mn_to_html, mn_version )
7
+ @lib = lib
8
+ @mn_to_html = mn_to_html
9
+ @mn_version = mn_version
10
+ end
11
+
12
+ def convert( text, options={} )
13
+ # call markdown filter; turn markdown lib name into method_name (mn)
14
+ # eg. rpeg-markdown => rpeg_markdown_to_html
15
+ send( @mn_to_html, text, options ) # call 1st configured markdown engine e.g. kramdown_to_html( content )
16
+ end
17
+
18
+ def version
19
+ send( @mn_version ) # call 1st configured markdown engine e.g. kramdown_version
20
+ end
21
+
22
+ include Engine
23
+ end
24
+
25
+
3
26
  class Wrapper
4
27
 
5
28
  def initialize( lib, mn, content, options={} )
@@ -36,21 +59,28 @@ module Markdown
36
59
  end
37
60
  @@config.markdown_lib
38
61
  end
39
-
62
+
63
+ def self.libs
64
+ if @@config.nil?
65
+ @@config = Config.new
66
+ end
67
+ @@config.markdown_libs
68
+ end
69
+
40
70
  def self.extnames
41
71
  if @@config.nil?
42
72
  @@config = Config.new
43
73
  end
44
74
  @@config.markdown_extnames
45
75
  end
46
-
76
+
47
77
  def self.filters
48
78
  if @@config.nil?
49
79
  @@config = Config.new
50
80
  end
51
81
  @@config.markdown_filters
52
82
  end
53
-
83
+
54
84
  def self.dump # dump settings for debug/verbose flag
55
85
  if @@config.nil?
56
86
  @@config = Config.new
@@ -59,6 +89,18 @@ module Markdown
59
89
  end
60
90
 
61
91
 
92
+ def self.create_converter( lib )
93
+ if @@config.nil?
94
+ @@config = Config.new
95
+ end
96
+
97
+ mn_to_html = @@config.markdown_to_html_method( lib ) # lets you use differnt options/converters for a single markdown lib
98
+ mn_version = @@config.markdown_version_method( lib )
99
+
100
+ Converter.new( lib, mn_to_html, mn_version )
101
+ end
102
+
103
+
62
104
  def self.new( content, options={} )
63
105
 
64
106
  ## options
@@ -80,8 +122,8 @@ module Markdown
80
122
  end
81
123
 
82
124
  lib = @@config.markdown_lib
83
- mn = @@config.markdown_to_html_method # lets you use differnt options/converters for a single markdown lib
84
- defaults = @@config.markdown_lib_defaults ## todo/fix: use mn / converter from defaults hash?? mn no longer needed??
125
+ mn = @@config.markdown_to_html_method( lib ) # lets you use differnt options/converters for a single markdown lib
126
+ defaults = @@config.markdown_lib_defaults( lib ) ## todo/fix: use mn / converter from defaults hash?? mn no longer needed??
85
127
 
86
128
  props = Props.new( options, 'USER', Props.new( defaults, 'SYSTEM' ))
87
129
 
@@ -38,7 +38,7 @@ class TestKramdown < MiniTest::Unit::TestCase
38
38
  assert( html1 =~ /^<!-- === begin markdown block ===/ )
39
39
  assert( html1.include?( "<p>Hello World!</p>\n" ))
40
40
  assert( html2.include?( "<p>Hello World!</p>\n" ))
41
- assert( html1 =~ /============ -->$/ )
41
+ assert( html1 =~ /=== -->$/ )
42
42
  end
43
43
 
44
44
  end # class TestKramdown
@@ -31,7 +31,7 @@ class TestRedcarpet < MiniTest::Unit::TestCase
31
31
  html = Markdown.new( 'Hello World!', banner: true ).to_html
32
32
  assert( html =~ /^<!-- === begin markdown block ===/ )
33
33
  assert( html.include?( "<p>Hello World!</p>\n" ))
34
- assert( html =~ /============ -->$/ )
34
+ assert( html =~ /=== -->$/ )
35
35
  end
36
36
 
37
37
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: markdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-24 00:00:00.000000000 Z
12
+ date: 2013-05-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: props
16
- requirement: &87448610 !ruby/object:Gem::Requirement
16
+ requirement: &77334260 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *87448610
24
+ version_requirements: *77334260
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: textutils
27
- requirement: &87448390 !ruby/object:Gem::Requirement
27
+ requirement: &77334040 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.6.4
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *87448390
35
+ version_requirements: *77334040
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: kramdown
38
- requirement: &87448170 !ruby/object:Gem::Requirement
38
+ requirement: &77333820 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.0.2
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *87448170
46
+ version_requirements: *77333820
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rdoc
49
- requirement: &87447950 !ruby/object:Gem::Requirement
49
+ requirement: &77333600 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '3.10'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *87447950
57
+ version_requirements: *77333600
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: hoe
60
- requirement: &87447730 !ruby/object:Gem::Requirement
60
+ requirement: &77333380 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '3.3'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *87447730
68
+ version_requirements: *77333380
69
69
  description: Markdown Engine Wrapper - Use Your Markdown Library of Choice
70
70
  email: webslideshow@googlegroups.com
71
71
  executables:
@@ -93,11 +93,18 @@ files:
93
93
  - lib/markdown/engines/rpeg_markdown.rb
94
94
  - lib/markdown/server.rb
95
95
  - lib/markdown/server/public/style.css
96
+ - lib/markdown/server/views/_about.erb
96
97
  - lib/markdown/server/views/_debug.erb
98
+ - lib/markdown/server/views/_libs.erb
99
+ - lib/markdown/server/views/_libs_service.erb
100
+ - lib/markdown/server/views/_notepad.erb
101
+ - lib/markdown/server/views/_service.erb
97
102
  - lib/markdown/server/views/_version.erb
98
103
  - lib/markdown/server/views/debug.erb
99
104
  - lib/markdown/server/views/index.erb
100
105
  - lib/markdown/server/views/layout.erb
106
+ - lib/markdown/server/views/notepad.erb
107
+ - lib/markdown/server/views/service.erb
101
108
  - lib/markdown/version.rb
102
109
  - lib/markdown/wrapper.rb
103
110
  - test/helper.rb