mdslide 0.0.4 → 1.0.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/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
|