markdown 1.1.0 → 1.1.1

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.
@@ -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