markdown 1.1.1 → 1.2.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.
Files changed (38) hide show
  1. checksums.yaml +7 -0
  2. data/{History.markdown → HISTORY.md} +0 -0
  3. data/Manifest.txt +2 -20
  4. data/{README.markdown → README.md} +11 -48
  5. data/Rakefile +12 -14
  6. data/lib/markdown.rb +6 -38
  7. data/lib/markdown/config.rb +3 -1
  8. data/lib/markdown/engines/bluecloth.rb +2 -0
  9. data/lib/markdown/engines/kramdown.rb +4 -2
  10. data/lib/markdown/engines/maruku.rb +2 -0
  11. data/lib/markdown/engines/pandoc_ruby.rb +2 -0
  12. data/lib/markdown/engines/rdiscount.rb +2 -0
  13. data/lib/markdown/engines/redcarpet.rb +2 -0
  14. data/lib/markdown/engines/rpeg_markdown.rb +2 -0
  15. data/lib/markdown/version.rb +24 -2
  16. data/lib/markdown/wrapper.rb +3 -1
  17. data/test/helper.rb +0 -8
  18. data/test/test_kramdown.rb +1 -2
  19. data/test/test_redcarpet.rb +1 -1
  20. metadata +57 -61
  21. data/bin/markdown +0 -17
  22. data/lib/markdown/cli/gen.rb +0 -89
  23. data/lib/markdown/cli/opts.rb +0 -14
  24. data/lib/markdown/cli/runner.rb +0 -202
  25. data/lib/markdown/server.rb +0 -195
  26. data/lib/markdown/server/public/style.css +0 -112
  27. data/lib/markdown/server/views/_about.erb +0 -23
  28. data/lib/markdown/server/views/_debug.erb +0 -27
  29. data/lib/markdown/server/views/_libs.erb +0 -14
  30. data/lib/markdown/server/views/_libs_service.erb +0 -27
  31. data/lib/markdown/server/views/_notepad.erb +0 -96
  32. data/lib/markdown/server/views/_service.erb +0 -75
  33. data/lib/markdown/server/views/_version.erb +0 -6
  34. data/lib/markdown/server/views/debug.erb +0 -3
  35. data/lib/markdown/server/views/index.erb +0 -18
  36. data/lib/markdown/server/views/layout.erb +0 -16
  37. data/lib/markdown/server/views/notepad.erb +0 -8
  38. data/lib/markdown/server/views/service.erb +0 -10
@@ -1,17 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- ###################
4
- # == DEV TIPS:
5
- #
6
- # For local testing run like:
7
- #
8
- # ruby -Ilib bin/markdown
9
- #
10
- # Set the executable bit in Linux. Example:
11
- #
12
- # % chmod a+x bin/markdown
13
- #
14
-
15
- require 'markdown'
16
-
17
- Markdown.main
@@ -1,89 +0,0 @@
1
- module Markdown
2
-
3
- class Gen
4
-
5
- include TextUtils::Filter # include filters such as comments_percent_style, etc. (see textutils gem)
6
-
7
- attr_reader :logger
8
- attr_reader :opts
9
-
10
- def initialize( logger, opts )
11
- @logger = logger
12
- @opts = opts
13
- end
14
-
15
- def create_doc( fn )
16
- dirname = File.dirname( fn )
17
- basename = File.basename( fn, '.*' )
18
- extname = File.extname( fn )
19
-
20
- logger.debug "dirname=#{dirname}, basename=#{basename}, extname=#{extname}"
21
-
22
- if opts.output_path == '.'
23
- # expand output path in current dir
24
- outpath = File.expand_path( dirname )
25
- else
26
- # expand output path in user supplied dir and make sure output path exists
27
- outpath = File.expand_path( opts.output_path )
28
- FileUtils.makedirs( outpath ) unless File.directory? outpath
29
- end
30
- logger.debug "outpath=#{outpath}"
31
-
32
- # todo: add a -c option to commandline? to let you set cwd?
33
-
34
-
35
- # change working dir to sourcefile dir (that is, dirname); push working folder/dir
36
- newcwd = File.expand_path( dirname )
37
- oldcwd = File.expand_path( Dir.pwd )
38
-
39
- unless newcwd == oldcwd
40
- logger.debug "oldcwd=>#{oldcwd}<, newcwd=>#{newcwd}<"
41
- Dir.chdir( newcwd )
42
- end
43
-
44
- inname = "#{basename}#{extname}"
45
- outname = "#{basename}.html"
46
-
47
- logger.debug "inname=#{inname}, outname=#{outname}"
48
-
49
- puts "*** #{inname} (#{dirname}) => #{outname} (#{(opts.output_path == '.') ? dirname : opts.output_path})..."
50
-
51
- content = File.read( inname )
52
-
53
- # step 1) run (optional) preprocessing text filters
54
- Markdown.filters.each do |filter|
55
- mn = filter.tr( '-', '_' ).to_sym # construct method name (mn)
56
- content = send( mn, content ) # call filter e.g. include_helper_hack( content )
57
- end
58
-
59
- # step 2) convert light-weight markup to hypertext
60
- content = Markdown.new( content ).to_html
61
-
62
-
63
- ## todo: add Markdown.lib_options inspect/dump to banner
64
-
65
- banner =<<EOS
66
- <!-- ======================================================================
67
- generated by #{Markdown.banner}
68
- on #{Time.now} with Markdown engine '#{Markdown.lib}'
69
- ====================================================================== -->
70
- EOS
71
-
72
- out = File.new( File.join( outpath, outname ), "w+" )
73
- #### out << banner
74
- out << content
75
- out.flush
76
- out.close
77
-
78
- ## pop/restore working folder/dir
79
- unless newcwd == oldcwd
80
- logger.debug "oldcwd=>#{oldcwd}<, newcwd=>#{newcwd}<"
81
- Dir.chdir( oldcwd )
82
- end
83
-
84
- end # method create_doc
85
-
86
-
87
-
88
- end # class Gen
89
- end # module Markdown
@@ -1,14 +0,0 @@
1
- module Markdown
2
-
3
- class Opts
4
-
5
- def output_path=(value)
6
- @output_path = value
7
- end
8
-
9
- def output_path
10
- @output_path || '.'
11
- end
12
-
13
- end # class Opts
14
- end # module Markdown
@@ -1,202 +0,0 @@
1
- module Markdown
2
-
3
- class Runner
4
-
5
- attr_reader :logger
6
- attr_reader :opts
7
-
8
- def initialize
9
- @logger = Logger.new(STDOUT)
10
- @logger.level = Logger::INFO
11
- @opts = Opts.new
12
- end
13
-
14
- def has_markdown_extension?( fn )
15
- dirname = File.dirname( fn )
16
- basename = File.basename( fn, '.*' )
17
- extname = File.extname( fn )
18
- logger.debug "dirname=#{dirname}, basename=#{basename}, extname=#{extname}"
19
-
20
- return false if extname.empty? # no extension
21
-
22
- Markdown.extnames.include?( extname.downcase )
23
- end
24
-
25
- def find_file_with_markdown_extension( fn )
26
- dirname = File.dirname( fn )
27
- basename = File.basename( fn, '.*' )
28
- extname = File.extname( fn )
29
- logger.debug "dirname=#{dirname}, basename=#{basename}, extname=#{extname}"
30
-
31
- Markdown.extnames.each do |e|
32
- newname = File.join( dirname, "#{basename}#{e}" )
33
- logger.debug "File.exists? #{newname}"
34
- return newname if File.exists?( newname )
35
- end # each extension (e)
36
-
37
- nil # not found; return nil
38
- end
39
-
40
-
41
- def find_files( file_or_dir_or_pattern )
42
-
43
- filtered_files = []
44
-
45
- # assume pattern if includes * or ? or {} or []
46
- if file_or_dir_or_pattern =~ /[*?{}\[\]]/
47
- puts "searching glob pattern '#{file_or_dir_or_pattern}'..."
48
- Dir.glob( file_or_dir_or_pattern ).each do |file|
49
- if File.directory?( file ) # skip (sub)directories
50
- puts " skipping folder '#{file}'..."
51
- next
52
- else
53
- if has_markdown_extension?( file )
54
- logger.debug " adding file '#{file}'..."
55
- filtered_files << file
56
- else
57
- puts " skipping file '#{file}'..."
58
- end
59
- end
60
- end
61
- elsif File.directory?(file_or_dir_or_pattern)
62
- puts "searching folder '#{file_or_dir_or_pattern}'..."
63
- Dir.entries( file_or_dir_or_pattern ).each do |entry|
64
- next if entry == '.' || entry == '..' # silently skip current and up dirs
65
-
66
- if file_or_dir_or_pattern == '.'
67
- file = entry
68
- else # add dir (if not working dir)
69
- file = File.join( file_or_dir_or_pattern, entry )
70
- end
71
-
72
- if File.directory?( file ) # skip (sub)directories
73
- puts " skipping folder '#{file}'..."
74
- next
75
- else
76
- if has_markdown_extension?( file )
77
- logger.debug " adding file '#{file}'..."
78
- filtered_files << file
79
- else
80
- puts " skipping file '#{file}'..."
81
- end
82
- end
83
- end
84
- else # assume it's a single file (check for missing extension)
85
- if File.exists?( file_or_dir_or_pattern )
86
- file = file_or_dir_or_pattern
87
- if has_markdown_extension?( file )
88
- logger.debug " adding file '#{file}'..."
89
- filtered_files << file
90
- else
91
- puts " skipping file '#{file}'..."
92
- end
93
- else # check for existing file w/ missing extension
94
- file = find_file_with_markdown_extension( file_or_dir_or_pattern )
95
- if file.nil?
96
- puts " skipping missing file '#{file_or_dir_or_pattern}{#{Markdown.extnames.join(',')}}'..."
97
- else
98
- logger.debug " adding file '#{file}'..."
99
- filtered_files << file
100
- end
101
- end
102
- end
103
-
104
- filtered_files
105
- end # find_files
106
-
107
-
108
- def run( args )
109
- opt=OptionParser.new do |cmd|
110
-
111
- cmd.banner = "Usage: markdown [options] files_or_dirs"
112
-
113
- cmd.on( '-o', '--output PATH', "Output Path (default is #{opts.output_path})" ) { |path| opts.output_path = path }
114
-
115
- cmd.on( '-v', '--version', "Show version" ) do
116
- puts Markdown.banner
117
- exit
118
- end
119
-
120
- cmd.on( '--about', "(Debug) Show more version info" ) do
121
- puts
122
- puts Markdown.banner
123
- puts
124
-
125
- # dump settings
126
- Markdown.dump
127
- puts
128
-
129
- exit
130
- end
131
-
132
- cmd.on( "--verbose", "(Debug) Show debug trace" ) do
133
- logger.datetime_format = "%H:%H:%S"
134
- logger.level = Logger::DEBUG
135
- end
136
-
137
- ## todo: add markdown.lib options (e.g. extensions,etc)
138
-
139
- cmd.on_tail( "-h", "--help", "Show this message" ) do
140
- puts <<EOS
141
-
142
- markdown - Lets you convert plain text documents (#{Markdown.extnames.join(', ')}) to hypertext (.html) with your Markdown engine of choice (#{Markdown.lib}) and preprocessing text filters (#{Markdown.filters.join(', ')}).
143
-
144
- #{cmd.help}
145
-
146
- Examples:
147
- markdown # Process all documents in working folder (that is, .)
148
- markdown quickref # Process document or folder using Markdown
149
- markdown quickref.text # Process document using Markdown
150
- markdown -o site quickref # Output documents to site folder
151
-
152
- Note:
153
- markdown server # Starts builtin markdown server
154
- # (aliases for server include serve, service, s)
155
-
156
-
157
- Further information:
158
- https://github.com/geraldb/markdown
159
-
160
- EOS
161
- exit
162
- end
163
- end
164
-
165
- opt.parse!( args )
166
-
167
- puts Markdown.banner
168
-
169
- # force loading of config
170
- Markdown.lib
171
-
172
- Markdown.dump if logger.level == Logger::DEBUG # dump settings if verbose/debug flag on
173
-
174
-
175
- logger.debug "args.length: #{args.length}"
176
- logger.debug "args: >#{args.join(',')}<"
177
-
178
- if args.length == 1 && ['server', 'serve', 'service', 's' ].include?( args[0] )
179
- # start service/server
180
- # NB: server (HTTP service) not included in standard default require
181
- require 'markdown/server'
182
-
183
- Markdown::Server.run!
184
- else
185
-
186
- # if no file args given; default to working folder (that is, .)
187
- args = ['.'] if args.length == 0
188
-
189
- args.each do |arg|
190
- files = find_files( arg )
191
- files.each do |file|
192
- Gen.new( logger, opts ).create_doc( file )
193
- end
194
- end
195
- end
196
-
197
- puts 'Done. Bye.'
198
-
199
- end # method run
200
-
201
- end # class Runner
202
- end # module Markdown
@@ -1,195 +0,0 @@
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
-
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
-
94
- get '/' do
95
- @welcome_markdown = welcome_markdown
96
- @welcome_html = Markdown.new( @welcome_markdown ).to_html
97
-
98
- erb :index
99
- end
100
-
101
-
102
- ## todo: use 3rd party services from markdown.yml (lets you configure)
103
- # e.g. http://johnmacfarlane.net/cgi-bin/pandoc-dingus?text=hi
104
-
105
-
106
- def markdownify( params, opts={} )
107
- pp params
108
- text = params[:text]
109
- lib = params[:lib] # optional
110
- pp text
111
- pp lib
112
-
113
- # fix: use activesupport -> .present?
114
- if lib.nil? == false && lib.empty? == false
115
- Markdown.lib = lib
116
- end
117
-
118
- Markdown.new( text, opts ).to_html
119
- end
120
-
121
-
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
- }
142
-
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
-
154
- data = {
155
- name: lib,
156
- html: html,
157
- version: conv.version
158
- }
159
-
160
- json_or_jsonp( data.to_json )
161
- end
162
-
163
-
164
- get '/d*' do
165
- erb :debug
166
- end
167
-
168
-
169
- ### helper for json or jsonp response (depending on callback para)
170
-
171
- private
172
- def json_or_jsonp( json )
173
- callback = params.delete('callback')
174
- response = ''
175
-
176
- if callback
177
- content_type :js
178
- response = "#{callback}(#{json})"
179
- else
180
- content_type :json
181
- response = json
182
- end
183
-
184
- response
185
- end
186
-
187
-
188
- end # class Server
189
- end # module Markdown
190
-
191
-
192
- # say hello
193
- puts Markdown::Server.banner
194
- puts " default markdown engine: #{Markdown.lib}" # force loading of settings/config
195
- puts " markdown engines: #{Markdown.libs.inspect}"