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 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
- ['ArgsParser','>= 1.0.0'],
18
+ ['args_parser','>= 0.0.1'],
19
19
  ['redcarpet', '>= 2.1.1'],
20
20
  ]
21
21
  end
data/lib/mdslide.rb CHANGED
@@ -4,5 +4,5 @@ $:.unshift(File.dirname(__FILE__)) unless
4
4
  require 'mdslide/creator'
5
5
 
6
6
  module Mdslide
7
- VERSION = '0.0.4'
7
+ VERSION = '1.0.0'
8
8
  end
@@ -1,96 +1,122 @@
1
1
  #coding:UTF-8
2
- require 'ArgsParser'
2
+ require 'args_parser'
3
3
  require 'mdslide'
4
+ require 'yaml'
5
+ require 'fileutils'
4
6
 
5
7
  module Mdslide
6
8
 
7
-
8
- def Mdslide.command parser = ArgsParser.parser
9
- parser.bind(:help, :h, "Shows Help")
10
- parser.bind(:output, :o, "Output")
11
- parser.bind(:input, :i, "Input")
12
- parser.bind(:theme, :t, "theme")
13
- parser.bind(:server, :s, "Start HTTP Server")
14
- parser.bind(:bind, :b, "Bind IP Address for HTTP Server")
15
- parser.bind(:port, :p, "Setting Port Number for HTTP Server")
16
- parser.bind(:title, :T, "set Presentaion tiltle")
17
- parser.comment('without-assets-dir', "Does not create js/css directory")
18
- parser.comment('without-css-dir', "Does not create css directory")
19
- parser.comment('without-js-dir', "Does not create js directory")
20
-
21
- params = parser.parse(ARGV)
22
-
23
- if parser.params[:help] or !parser.params[:input]
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
- output = parser.params[:output]
30
- f = STDOUT
31
- if output
32
- f = File.open(File.expand_path(parser.params[:output]),'w')
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
- if parser.params[:title]
37
- creator.title = parser.params[:title]
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
- default_theme = parser.params[:theme] || 'white'
42
- creator.set_theme default_theme
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
- file = File.expand_path(parser.params[:input])
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
- input = nil
47
- File.open(file,'r'){|r| input = r.read }
48
- creator.convert_markdown(input)
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
- server = parser.params[:server]
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
- if !server or output
53
- f.puts creator.convert_markdown(input)
54
-
55
- end
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
- if server
88
+ else
58
89
  require 'webrick'
59
- srv = WEBrick::HTTPServer.new({ :DocumentRoot => './',
60
- :BindAddress => (parser.params[:bind] or '127.0.0.1'),
61
- :DoNotReverseLookup => true,
62
- :Port => (parser.params[:port] or 3000)})
63
- srv.mount '/js', WEBrick::HTTPServlet::FileHandler, File.expand_path(File.dirname(__FILE__) + '/../../assets/js')
64
- srv.mount '/css', WEBrick::HTTPServlet::FileHandler, File.expand_path(File.dirname(__FILE__) + '/../../assets/css')
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
- theme = default_theme
67
- if req.path =~ /\/(.+)/
68
- theme = $1
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
@@ -3,17 +3,20 @@ require 'erb'
3
3
 
4
4
  module Mdslide
5
5
  Themes = {
6
- 'black' => 'black.css',
7
- 'white' => 'white.css',
8
- 'takahashi' => 'takahashi.css',
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
- @stylesheets.push theme
29
+ theme[:css] && @theme_stylesheets.replace(theme[:css])
30
+ theme[:js] && @theme_scripts.replace(theme[:js])
28
31
  end
29
32
  end
30
33
 
@@ -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
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-04-30 00:00:00.000000000 Z
12
+ date: 2012-05-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: ArgsParser
16
- requirement: &70355159587160 !ruby/object:Gem::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: 1.0.0
21
+ version: 0.0.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70355159587160
24
+ version_requirements: *76102320
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: redcarpet
27
- requirement: &70355159586520 !ruby/object:Gem::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: *70355159586520
35
+ version_requirements: *76101930
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rdoc
38
- requirement: &70355159585720 !ruby/object:Gem::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: *70355159585720
46
+ version_requirements: *76101360
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: newgem
49
- requirement: &70355159584900 !ruby/object:Gem::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: *70355159584900
57
+ version_requirements: *76099860
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: hoe
60
- requirement: &70355159584360 !ruby/object:Gem::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: *70355159584360
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: PostInstall.txt
110
+ post_install_message:
111
111
  rdoc_options:
112
112
  - --main
113
113
  - README.rdoc