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