mdslide 0.0.4 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +2 -2
- data/lib/mdslide.rb +1 -1
- data/lib/mdslide/command.rb +93 -67
- data/lib/mdslide/creator.rb +10 -7
- data/templates/page.html.erb +2 -2
- metadata +15 -15
data/Rakefile
CHANGED
@@ -12,10 +12,10 @@ Hoe.plugin :newgem
|
|
12
12
|
# Run 'rake -T' to see list of generated tasks (from gem root directory)
|
13
13
|
$hoe = Hoe.spec 'mdslide' do
|
14
14
|
self.developer 'Allu Yamane', 'ymrl@ymrl.net'
|
15
|
-
self.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
|
15
|
+
#self.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
|
16
16
|
self.rubyforge_name = self.name # TODO this is default value
|
17
17
|
self.extra_deps = [
|
18
|
-
['
|
18
|
+
['args_parser','>= 0.0.1'],
|
19
19
|
['redcarpet', '>= 2.1.1'],
|
20
20
|
]
|
21
21
|
end
|
data/lib/mdslide.rb
CHANGED
data/lib/mdslide/command.rb
CHANGED
@@ -1,96 +1,122 @@
|
|
1
1
|
#coding:UTF-8
|
2
|
-
require '
|
2
|
+
require 'args_parser'
|
3
3
|
require 'mdslide'
|
4
|
+
require 'yaml'
|
5
|
+
require 'fileutils'
|
4
6
|
|
5
7
|
module Mdslide
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
9
|
+
ASSETS_DIR = File.expand_path(File.dirname(__FILE__) + '/../../assets')
|
10
|
+
CONFIG_DIR = File.expand_path('~/.mdslide')
|
11
|
+
|
12
|
+
def Mdslide.find_path path, dir_list
|
13
|
+
dir_list.each do |dir_path|
|
14
|
+
if File.exist?(dir_path + path)
|
15
|
+
return dir_path
|
16
|
+
end
|
17
|
+
end
|
18
|
+
return nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def Mdslide.command
|
22
|
+
parser = ArgsParser.parse ARGV do
|
23
|
+
arg :help, "Shows Help", :alias => :h
|
24
|
+
arg :input, "Input File", :alias => :i
|
25
|
+
arg :theme, "Theme", :alias => :t, :default => 'white'
|
26
|
+
arg :bind, "Bind IP Address", :alias => :b, :default => '127.0.0.1'
|
27
|
+
arg :port, "Port Number", :alias => :p, :default => '3000'
|
28
|
+
arg :title, "Title", :alias => :T, :default => 'Slides converted by Mdslide'
|
29
|
+
arg :output, "Output File", :alias => :o
|
30
|
+
arg :'without-assets-dir', "Does not create js/css directory"
|
31
|
+
arg :'without-css-dir', "Does not create css directory"
|
32
|
+
arg :'without-js-dir', "Does not create js directory"
|
33
|
+
end
|
34
|
+
|
35
|
+
if parser.has_option? :help or !parser.has_param?(:input)
|
24
36
|
puts "mdslide [options] -i <Input File>"
|
25
37
|
puts parser.help
|
26
38
|
return 0
|
27
39
|
end
|
28
40
|
|
29
|
-
|
30
|
-
|
31
|
-
if
|
32
|
-
|
41
|
+
config_path = File.expand_path(CONFIG_DIR + '/config.yaml')
|
42
|
+
my_config = nil
|
43
|
+
if File.exist? config_path
|
44
|
+
my_config = YAML.load_file(config_path)
|
45
|
+
Themes.merge! my_config[:themes]
|
33
46
|
end
|
34
|
-
|
47
|
+
|
48
|
+
|
35
49
|
creator = Creator.new
|
36
|
-
|
37
|
-
|
38
|
-
end
|
50
|
+
creator.title = parser[:title]
|
51
|
+
default_theme = parser[:theme]
|
39
52
|
|
53
|
+
file_path = File.expand_path(parser[:input])
|
54
|
+
dir_path = File.dirname(file_path)
|
40
55
|
|
41
|
-
|
42
|
-
|
56
|
+
if parser.has_param? :output
|
57
|
+
output_path = File.expand_path(parser[:output])
|
58
|
+
output_dir_path = File.dirname(output_path)
|
43
59
|
|
44
|
-
|
60
|
+
creator.set_theme default_theme
|
61
|
+
input = nil
|
62
|
+
File.open(file_path,'r'){|r| input = r.read.force_encoding(Encoding::UTF_8) }
|
63
|
+
File.open(output_path,'w'){|f| f.puts creator.convert_markdown(input)}
|
45
64
|
|
46
|
-
|
47
|
-
|
48
|
-
|
65
|
+
output_js = !parser[:"without-assets-dir"] and !parser[:"without-js-dir"]
|
66
|
+
output_css = !parser[:"without-assets-dir"] and !parser[:"without-css-dir"]
|
67
|
+
src_dirs = [dir_path,CONFIG_DIR,ASSETS_DIR].delete_if{|e| e == output_dir_path}
|
68
|
+
|
69
|
+
if output_js
|
70
|
+
js_path = output_dir_path+'/js'
|
71
|
+
Dir::mkdir(js_path) unless Dir.exist?(js_path)
|
49
72
|
|
50
|
-
|
73
|
+
(creator.scripts + creator.theme_scripts).each do |e|
|
74
|
+
src_dir = Mdslide.find_path(e,src_dirs.map{|m| "#{m}/js/"})
|
75
|
+
FileUtils.cp("#{src_dir}/#{e}",js_path) if src_dir
|
76
|
+
end
|
77
|
+
end
|
78
|
+
if output_css
|
79
|
+
css_path = output_dir_path+'/css'
|
80
|
+
Dir::mkdir(css_path) unless Dir.exist?(css_path)
|
51
81
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
82
|
+
(creator.stylesheets + creator.theme_stylesheets).each do |e|
|
83
|
+
src_dir = Mdslide.find_path(e,src_dirs.map{|m| "#{m}/css/"})
|
84
|
+
FileUtils.cp("#{src_dir}/#{e}",css_path) if src_dir
|
85
|
+
end
|
86
|
+
end
|
56
87
|
|
57
|
-
|
88
|
+
else
|
58
89
|
require 'webrick'
|
59
|
-
srv = WEBrick::HTTPServer.new(
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
90
|
+
srv = WEBrick::HTTPServer.new(
|
91
|
+
:BindAddress => parser[:bind],
|
92
|
+
:DoNotReverseLookup => true,
|
93
|
+
:Port => parser[:port],
|
94
|
+
:MimeTypes => WEBrick::HTTPUtils::DefaultMimeTypes.merge({"js"=>"application/javascript"})
|
95
|
+
)
|
65
96
|
srv.mount_proc '/' do |req,res|
|
66
|
-
|
67
|
-
if req.path
|
68
|
-
|
97
|
+
root_path = nil
|
98
|
+
if req.path != '/'
|
99
|
+
root_path = Mdslide.find_path(req.path,[dir_path,CONFIG_DIR,ASSETS_DIR])
|
100
|
+
if root_path
|
101
|
+
si = WEBrick::HTTPServlet::FileHandler.get_instance(srv, root_path)
|
102
|
+
si.service(req,res)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
if !root_path
|
107
|
+
m = req.path.match(/\/(.+)/)
|
108
|
+
theme = (m && m[1]) || default_theme
|
109
|
+
creator.set_theme theme
|
110
|
+
File.open(file_path,'r'){|r| input = r.read.force_encoding(Encoding::UTF_8) }
|
111
|
+
|
112
|
+
res.body = creator.convert_markdown(input)
|
113
|
+
res['Content-Type'] = 'text/html'
|
114
|
+
res['Content-Length'] = res.body.bytesize
|
69
115
|
end
|
70
|
-
creator.set_theme theme
|
71
|
-
res['Content-Type'] = 'text/html'
|
72
|
-
File.open(file,'r'){|r| input = r.read }
|
73
|
-
res.body = creator.convert_markdown(input)
|
74
116
|
end
|
75
117
|
Signal.trap(:INT){ srv.shutdown }
|
76
118
|
srv.start
|
77
119
|
end
|
78
|
-
|
79
|
-
if output
|
80
|
-
f.close
|
81
|
-
dir = File.dirname(File.expand_path(parser.params[:output]))
|
82
|
-
js = !parser.params[:"without-assets-dir"] and !parser.params[:"without-js-dir"]
|
83
|
-
css = !parser.params[:"without-assets-dir"] and !parser.params[:"without-css-dir"]
|
84
|
-
|
85
|
-
if js
|
86
|
-
system "cp -r #{File.expand_path(File.dirname(__FILE__) + '/../../assets/js')} #{dir}"
|
87
|
-
end
|
88
|
-
if css
|
89
|
-
system "cp -r #{File.expand_path(File.dirname(__FILE__) + '/../../assets/css')} #{dir}"
|
90
|
-
end
|
91
|
-
|
92
|
-
end
|
93
|
-
|
94
120
|
return 0
|
95
121
|
end
|
96
122
|
end
|
data/lib/mdslide/creator.rb
CHANGED
@@ -3,17 +3,20 @@ require 'erb'
|
|
3
3
|
|
4
4
|
module Mdslide
|
5
5
|
Themes = {
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
:black => {:css => ['black.css'],},
|
7
|
+
:white => {:css => ['white.css'],},
|
8
|
+
:takahashi => {:css => ['takahashi.css'],},
|
9
9
|
}
|
10
10
|
|
11
11
|
class Creator
|
12
|
-
attr_reader :stylesheets,:scripts
|
12
|
+
attr_reader :stylesheets,:scripts,:theme_stylesheets,:theme_scripts
|
13
13
|
attr_accessor :title
|
14
14
|
def initialize
|
15
15
|
@stylesheets = ['base.css']
|
16
16
|
@scripts = ['jquery.min.js','slides.js']
|
17
|
+
@theme_scripts = []
|
18
|
+
@theme_stylesheets = []
|
19
|
+
|
17
20
|
@converter = Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true)
|
18
21
|
@page_template = File.open(File.dirname(__FILE__) + '/../../templates/page.html.erb','r'){|r| erb = ERB.new(r.read)}
|
19
22
|
@slide_template = File.open(File.dirname(__FILE__) + '/../../templates/slide.html.erb','r'){|r| erb = ERB.new(r.read)}
|
@@ -21,10 +24,10 @@ module Mdslide
|
|
21
24
|
end
|
22
25
|
|
23
26
|
def set_theme name
|
24
|
-
theme = Themes[name]
|
25
|
-
@stylesheets.pop while @stylesheets.length > 1
|
27
|
+
theme = Themes[name.to_sym]
|
26
28
|
if theme
|
27
|
-
@
|
29
|
+
theme[:css] && @theme_stylesheets.replace(theme[:css])
|
30
|
+
theme[:js] && @theme_scripts.replace(theme[:js])
|
28
31
|
end
|
29
32
|
end
|
30
33
|
|
data/templates/page.html.erb
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
<html>
|
3
3
|
<head>
|
4
4
|
<meta charset="UTF-8" />
|
5
|
-
<% @stylesheets.each do |filename| %>
|
5
|
+
<% (@stylesheets + @theme_stylesheets).each do |filename| %>
|
6
6
|
<link type="text/css" rel="stylesheet" href="./css/<%= filename %>" />
|
7
7
|
<% end %>
|
8
|
-
<% @scripts.each do |filename| %>
|
8
|
+
<% (@scripts + @theme_scripts).each do |filename| %>
|
9
9
|
<script type="text/javascript" src="./js/<%= filename %>"></script>
|
10
10
|
<% end %>
|
11
11
|
<title><%= @title %></title>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mdslide
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,22 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-05-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement: &
|
15
|
+
name: args_parser
|
16
|
+
requirement: &76102320 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 0.0.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *76102320
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: redcarpet
|
27
|
-
requirement: &
|
27
|
+
requirement: &76101930 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 2.1.1
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *76101930
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rdoc
|
38
|
-
requirement: &
|
38
|
+
requirement: &76101360 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '3.10'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *76101360
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: newgem
|
49
|
-
requirement: &
|
49
|
+
requirement: &76099860 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.5.3
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *76099860
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: hoe
|
60
|
-
requirement: &
|
60
|
+
requirement: &76082010 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '3.0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *76082010
|
69
69
|
description: Mdslide is an slide generator for presentation based on Markdown (RedCarpet).
|
70
70
|
It can convert extended Markdown file to HTML it can show as aslides and/or outlines.
|
71
71
|
It outputs HTML, CSS and Javascript files, also you can use this HTTP Server for
|
@@ -107,7 +107,7 @@ files:
|
|
107
107
|
- .gemtest
|
108
108
|
homepage: http://github.com/ymrl/mdslide
|
109
109
|
licenses: []
|
110
|
-
post_install_message:
|
110
|
+
post_install_message:
|
111
111
|
rdoc_options:
|
112
112
|
- --main
|
113
113
|
- README.rdoc
|