slideshow 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +7 -0
  2. data/HISTORY.md +4 -0
  3. data/Manifest.txt +3 -48
  4. data/{README.markdown → README.md} +134 -132
  5. data/Rakefile +26 -17
  6. data/lib/slideshow.rb +19 -97
  7. data/lib/slideshow/cli/main.rb +38 -20
  8. data/lib/slideshow/cli/main_utils.rb +10 -4
  9. data/lib/slideshow/cli/opts.rb +3 -1
  10. data/lib/slideshow/cli/version.rb +26 -0
  11. metadata +63 -147
  12. data/History.markdown +0 -171
  13. data/config/slideshow.builtin.yml +0 -8
  14. data/config/slideshow.index.yml +0 -61
  15. data/config/slideshow.yml +0 -76
  16. data/lib/slideshow/cli/commands/fetch.rb +0 -121
  17. data/lib/slideshow/cli/commands/gen.rb +0 -330
  18. data/lib/slideshow/cli/commands/gen_templates.rb +0 -52
  19. data/lib/slideshow/cli/commands/list.rb +0 -70
  20. data/lib/slideshow/cli/commands/plugins.rb +0 -44
  21. data/lib/slideshow/cli/commands/quick.rb +0 -86
  22. data/lib/slideshow/config.rb +0 -241
  23. data/lib/slideshow/filters/debug_filter.rb +0 -74
  24. data/lib/slideshow/filters/headers_filter.rb +0 -45
  25. data/lib/slideshow/filters/slide_filter.rb +0 -113
  26. data/lib/slideshow/filters/text_filter.rb +0 -140
  27. data/lib/slideshow/headers.rb +0 -87
  28. data/lib/slideshow/helpers/background_helper.rb +0 -121
  29. data/lib/slideshow/helpers/capture_helper.rb +0 -136
  30. data/lib/slideshow/helpers/directive_helper.rb +0 -43
  31. data/lib/slideshow/helpers/markdown_helper.rb +0 -18
  32. data/lib/slideshow/helpers/source_helper.rb +0 -39
  33. data/lib/slideshow/helpers/step_helper.rb +0 -33
  34. data/lib/slideshow/helpers/syntax/coderay_helper.rb +0 -84
  35. data/lib/slideshow/helpers/syntax/sh_helper.rb +0 -61
  36. data/lib/slideshow/helpers/syntax/uv_helper.rb +0 -90
  37. data/lib/slideshow/helpers/text_helper.rb +0 -130
  38. data/lib/slideshow/manifest_helpers.rb +0 -94
  39. data/lib/slideshow/markup/markdown.rb +0 -18
  40. data/lib/slideshow/markup/mediawiki.rb +0 -38
  41. data/lib/slideshow/markup/rest.rb +0 -17
  42. data/lib/slideshow/markup/textile.rb +0 -68
  43. data/lib/slideshow/plugin_helpers.rb +0 -62
  44. data/lib/slideshow/slide.rb +0 -118
  45. data/lib/slideshow/version.rb +0 -3
  46. data/templates/s6.txt +0 -27
  47. data/templates/s6.txt.gen +0 -19
  48. data/templates/s6/jquery.js +0 -8176
  49. data/templates/s6/jquery.microsoft.js +0 -31
  50. data/templates/s6/jquery.slideshow.js +0 -534
  51. data/templates/s6/print.css +0 -1
  52. data/templates/s6/projection.css +0 -109
  53. data/templates/s6/screen.css +0 -50
  54. data/templates/slides.html.erb +0 -55
  55. data/templates/slides.pdf.html.erb +0 -62
  56. data/templates/style.css.erb +0 -91
  57. data/templates/welcome.text +0 -167
  58. data/templates/welcome.txt.quick +0 -6
@@ -1,61 +0,0 @@
1
- module Slideshow
2
- module Syntax
3
- module ShHelper
4
-
5
- # sh option defaults
6
- SH_LANG = 'ruby'
7
- SH_LINE_NUMBERS = 'true'
8
-
9
- def sh_worker( code, opts )
10
-
11
- lang = opts.fetch( :lang, headers.get( 'code-language', SH_LANG ))
12
- line_numbers_value = opts.fetch( :line_numbers, headers.get( 'code-line-numbers', SH_LINE_NUMBERS ))
13
- line_numbers = (line_numbers_value =~ /true|yes|on/i) ? true : false
14
-
15
- # note: code gets highlighted at runtime in client (using JavaScript)
16
- code_highlighted = CGI::escapeHTML( code )
17
-
18
- css_class = 'code'
19
- css_class_opt = opts.fetch( :class, nil ) # large, small, tiny, etc.
20
- css_class << " #{css_class_opt}" if css_class_opt # e.g. use/allow multiple classes -> code small, code large, etc.
21
-
22
- out = %{<div class='#{css_class}'><pre class='brush: #{lang} toolbar: false gutter: #{line_numbers ? 'true' : 'false'}'>}
23
- out << code_highlighted
24
- out << %{</pre></div>\n}
25
-
26
- name = opts.fetch( :name, nil )
27
- txmt_value = opts.fetch( :txmt, headers.code_txmt )
28
- txmt = (txmt_value =~ /true|yes|on/i) ? true : false
29
-
30
- # add optional href link for textmate
31
- if name
32
- out << %{<div class="codeurl">}
33
- out << %{<a href="txmt://open?url=file://#{File.expand_path(name)}">} if txmt
34
- out << name
35
- out << %{</a>} if txmt
36
- out << %{</div>\n}
37
- end
38
-
39
- return out
40
- end
41
-
42
- def sv( *args, &blk )
43
- # check for optional hash for options
44
- opts = args.last.kind_of?(Hash) ? args.pop : {}
45
-
46
- code = capture_erb(&blk)
47
- return if code.empty?
48
-
49
- code_highlighted = sv_worker( code, opts )
50
-
51
- concat_erb( guard_block( code_highlighted ), blk.binding )
52
- return
53
- end
54
-
55
- end # module ShHelper
56
- end # module Syntax
57
- end # module Slideshow
58
-
59
- class Slideshow::Gen
60
- include Slideshow::Syntax::ShHelper
61
- end
@@ -1,90 +0,0 @@
1
- require 'uv'
2
-
3
- module Slideshow
4
- module Syntax
5
- module UvHelper
6
-
7
- # uv option defaults
8
- UV_LANG = 'ruby'
9
- UV_LINE_NUMBERS = 'true'
10
- UV_THEME = 'amy'
11
-
12
- def uv_worker( code, opts )
13
-
14
- lang = opts.fetch( :lang, UV_LANG )
15
- line_numbers_value = opts.fetch( :line_numbers, headers.get( 'code-line-numbers', UV_LINE_NUMBERS ))
16
- line_numbers = (line_numbers_value =~ /true|yes|on/i) ? true : false
17
-
18
- # change all-hallows-eve (CSS-style/convention) to all_hallows_eve (uv internal-style)
19
- theme = opts.fetch( :theme, headers.get( 'code-theme', UV_THEME )).tr( '-', '_' )
20
-
21
- code_highlighted = Uv.parse( code, "xhtml", lang, line_numbers, theme )
22
-
23
- # first time? copy all uv built-in themes (css styles) to temporary cache (~/.slideshow/*)
24
- uv_first_time = session.fetch( :uv_first_time, true )
25
- if uv_first_time
26
- session[ :uv_first_time ] = false
27
- logger.debug "cache_dir=#{config.cache_dir}"
28
-
29
- FileUtils.mkdir(config.cache_dir) unless File.exists?(config.cache_dir) if config.cache_dir
30
- Uv.copy_files "xhtml", config.cache_dir
31
- end
32
-
33
- # first time this theme gets used add it to content_for hash for templates to include
34
- uv_themes = session[ :uv_themes ] ||= {}
35
- if uv_themes[ theme ].nil?
36
- uv_themes[ theme ] = true
37
-
38
- theme_content = File.read( "#{config.cache_dir}/css/#{theme}.css" )
39
-
40
- theme_out = %{/* styles for ultraviolet code syntax highlighting theme '#{theme}' */\n\n}
41
- theme_out << theme_content
42
- theme_out << %{\n\n}
43
-
44
- content_for( :css, theme_out )
45
- end
46
-
47
- css_class = 'code'
48
- css_class_opt = opts.fetch( :class, nil ) # large, small, tiny, etc.
49
- css_class << " #{css_class_opt}" if css_class_opt # e.g. use/allow multiple classes -> code small, code large, etc.
50
-
51
- name = opts.fetch( :name, nil )
52
- txmt_value = opts.fetch( :txmt, headers.code_txmt )
53
- txmt = (txmt_value =~ /true|yes|on/i) ? true : false
54
-
55
- out = %{<pre class='#{css_class}'>\n}
56
- out << code_highlighted
57
- out << %{</pre>\n}
58
-
59
- # add optional href link for textmate
60
- if name
61
- out << %{<div class="codeurl">}
62
- out << %{<a href="txmt://open?url=file://#{File.expand_path(name)}">} if txmt
63
- out << name
64
- out << %{</a>} if txmt
65
- out << %{</div>\n}
66
- end
67
-
68
- return out
69
- end
70
-
71
- def uv( *args, &blk )
72
- # check for optional hash for options
73
- opts = args.last.kind_of?(Hash) ? args.pop : {}
74
-
75
- code = capture_erb(&blk)
76
- return if code.empty?
77
-
78
- code_highlighted = uv_worker( code, opts )
79
-
80
- concat_erb( wrap_markup( code_highlighted ), blk.binding )
81
- return
82
- end
83
-
84
- end # module UvHelper
85
- end # module Syntax
86
- end # module Slideshow
87
-
88
- class Slideshow::Gen
89
- include Slideshow::Syntax::UvHelper
90
- end
@@ -1,130 +0,0 @@
1
- module Slideshow
2
- module TextHelper
3
-
4
- def s9_include( name, opts = {} )
5
- puts " Including '#{name}'..."
6
- content = File.read( name )
7
- end
8
-
9
-
10
- # Usage example:
11
- # <%= code 'code/file.rb#section', :lang => 'ruby', :class => 'small' %>
12
- # or
13
- # <% code :lang => 'ruby' do %>
14
- # code goes here
15
- # <% end %>
16
- #
17
-
18
- def code( *args, &blk )
19
- # check for optional hash for options
20
- opts = args.last.kind_of?(Hash) ? args.pop : {}
21
-
22
- name_plus_part = args.first # check for optional filename
23
-
24
- if name_plus_part
25
- name, part = name_plus_part.split( '#' ) # split off optional part/anchor
26
-
27
- content = find_content_from( name, part )
28
-
29
- # add name and part to opts so engine can use paras too
30
- opts[ :name ] = name
31
- opts[ :part ] = part if part
32
-
33
- return format_code( content, opts )
34
- elsif blk # inline code via block?
35
- content = capture_erb(&blk)
36
- return if content.empty?
37
-
38
- concat_erb( format_code( content, opts ), blk.binding )
39
- return
40
- else
41
- msg = '*** warning: empty code directive; inline code or file para expected'
42
- puts msg
43
- return wrap_markup( "<!-- #{msg} -->" )
44
- end
45
- end
46
-
47
-
48
- def find_content_from( name, part )
49
- begin
50
- content = File.read( name )
51
-
52
- # note: for now content with no parts selected gets filtered too and (part) marker lines get removed from source
53
- lines = find_part_lines_in( content, part )
54
-
55
- if part
56
- puts " Including code part '#{part}' in '#{name}' [#{lines.size} lines]..."
57
- ## todo: issue warning if no lines found?
58
- else
59
- puts " Including code in '#{name}' [#{lines.size} lines]..."
60
- end
61
-
62
- return lines.join
63
- rescue Exception => e
64
- puts "*** error: reading '#{name}': #{e}"
65
- exit 2
66
- end
67
- end
68
-
69
- def find_part_lines_in( content, part )
70
- result = []
71
- state = part.nil? ? :normal : :skipping
72
- content.each_line do |line|
73
- if line =~ /(START|END):(\w+)/
74
- if $2 == part
75
- if $1 == "START"
76
- state = :normal
77
- else
78
- state = :skipping
79
- end
80
- end
81
- next
82
- end
83
- result << line unless state == :skipping
84
- end
85
- result
86
- end
87
-
88
-
89
- def format_code( code, opts )
90
-
91
- engine = opts.fetch( :engine, headers.code_engine ).to_s.downcase
92
-
93
- if engine == 'uv' || engine == 'ultraviolet'
94
- if respond_to?( :uv_worker )
95
- code_highlighted = uv_worker( code, opts )
96
- else
97
- puts "** error: ultraviolet gem required for syntax highlighting; install with gem install ultraviolet (or use a different engine)"
98
- exit 2
99
- end
100
- elsif engine == 'cr' || engine == 'coderay'
101
- if respond_to?( :coderay_worker )
102
- code_highlighted = coderay_worker( code, opts )
103
- else
104
- puts "*** error: coderay gem required for syntax highlighting; install with gem install coderay (or use a different engine)"
105
- exit 2
106
- end
107
- else
108
- method_name = "#{engine}_worker".to_sym
109
- if respond_to?( method_name )
110
- # try to call custom syntax highlighting engine
111
- code_highlighted = send( method_name, code, opts )
112
- else
113
- msg = "*** error: unkown syntax highlighting engine '#{engine}'; available built-in options include: uv, ultraviolet, cr, coderay"
114
- puts msg
115
- code_highlighted = "<!-- #{msg} -->"
116
- end
117
- end
118
-
119
- out = %{<!-- begin code#{opts.inspect} -->\n}
120
- out << code_highlighted
121
- out << %{<!-- end code -->\n}
122
-
123
- guard_block( out ) # saveguard with notextile wrapper etc./no further processing needed
124
- end
125
-
126
-
127
- end # module TextHelper
128
- end # module Slideshow
129
-
130
- Slideshow::Gen.__send__( :include, Slideshow::TextHelper )
@@ -1,94 +0,0 @@
1
- module Slideshow
2
-
3
- module ManifestHelper
4
-
5
- ## shared methods for handling manifest lookups
6
-
7
- def installed_plugin_manifest_patterns
8
- # 1) search ./plugins
9
- # 2) search config_dir/plugins
10
-
11
- config_patterns = [
12
- "#{config.config_dir}/plugins/*.{txt.plugin,plugin.txt}",
13
- "#{config.config_dir}/plugins/*/*.{txt.plugin,plugin.txt}"
14
- ]
15
- current_patterns = [
16
- "plugins/*.{txt.plugin,plugin.txt}",
17
- "plugins/*/*.{txt.plugin,plugin.txt}"
18
- ]
19
-
20
- patterns = []
21
- patterns += current_patterns
22
- patterns += config_patterns
23
- end
24
-
25
- def installed_plugin_manifests # quickstarter templates
26
- Pakman::Finder.new( logger ).find_manifests( installed_plugin_manifest_patterns )
27
- end
28
-
29
-
30
- def installed_template_manifest_patterns
31
- # 1) search ./templates
32
- # 2) search config_dir/templates
33
- # 3) search gem/templates
34
-
35
- builtin_patterns = [
36
- "#{Slideshow.root}/templates/*.txt"
37
- ]
38
- config_patterns = [
39
- "#{config.config_dir}/templates/*.txt",
40
- "#{config.config_dir}/templates/*/*.txt"
41
- ]
42
- current_patterns = [
43
- "templates/*.txt",
44
- "templates/*/*.txt" # todo: use all in one line? {*.txt,*/*.txt} does it work?
45
- ]
46
-
47
- patterns = []
48
- patterns += current_patterns unless Slideshow.root == File.expand_path( '.' ) # don't include working dir if we test code from repo (don't include slideshow/templates)
49
- patterns += config_patterns
50
- patterns += builtin_patterns
51
- end
52
-
53
- def installed_template_manifests
54
- ## note: code moved to its own gem, that is, pakman
55
- ## see https://github.com/geraldb/pakman
56
-
57
- ## exclude manifest.txt/i (avoid confusion w/ ruby gem manifest; not a specific name anyway)
58
- ## also exclude patterns for quickstarter templates
59
-
60
- excludes = [
61
- 'manifest.txt',
62
- '*/manifest.txt',
63
- '*.{txt.quick,quick.txt}',
64
- '*/*.{txt.quick,quick.txt}'
65
- ]
66
-
67
- Pakman::Finder.new( logger ).find_manifests( installed_template_manifest_patterns, excludes )
68
- end
69
-
70
-
71
- def installed_quick_manifest_patterns
72
- # 1) search config_dir/templates
73
- # 2) search gem/templates
74
-
75
- builtin_patterns = [
76
- "#{Slideshow.root}/templates/*.{txt.quick,quick.txt}"
77
- ]
78
- config_patterns = [
79
- "#{config.config_dir}/templates/*.{txt.quick,quick.txt}",
80
- "#{config.config_dir}/templates/*/*.{txt.quick,quick.txt}"
81
- ]
82
-
83
- patterns = []
84
- patterns += config_patterns
85
- patterns += builtin_patterns
86
- end
87
-
88
- def installed_quick_manifests # quickstarter templates
89
- Pakman::Finder.new( logger ).find_manifests( installed_quick_manifest_patterns )
90
- end
91
-
92
-
93
- end # module Manifest
94
- end # module Slideshow
@@ -1,18 +0,0 @@
1
- module Slideshow
2
- module MarkdownEngines
3
-
4
- ## note: code moved to its own gem, that is, markdown
5
- ## see https://github.com/geraldb/markdown
6
-
7
- def markdown_to_html( content )
8
- ## puts " Converting Markdown-text (#{content.length} bytes) to HTML using library '#{@markdown_libs.first}' calling '#{mn}'..."
9
-
10
- Markdown.new( content ).to_html
11
- end
12
-
13
- end # module MarkdownEngines
14
- end # module Slideshow
15
-
16
- class Slideshow::Gen
17
- include Slideshow::MarkdownEngines
18
- end
@@ -1,38 +0,0 @@
1
- module Slideshow
2
- module MediawikiEngines
3
-
4
-
5
- def setup_mediawiki_engine
6
- return if @mediawiki_engine_setup
7
- logger.debug 'require wikicloth -- load mediawiki library'
8
- require 'wikicloth' # default mediawiki library
9
- @mediawiki_engine_setup = true
10
- rescue LoadError
11
- puts "You're missing a library required for Mediawiki to Hypertext conversion. Please run:"
12
- puts " $ gem install wikicloth"
13
- # check: raise exception instead of exit e.g
14
- # raise FatalException.new( 'Missing library dependency: wikicloth' )
15
- exit 1
16
- end
17
-
18
-
19
- def mediawiki_to_html( content )
20
-
21
- setup_mediawiki_engine()
22
-
23
- puts " Converting Mediawiki-text (#{content.length} bytes) to HTML..."
24
-
25
- # NB: turn off table_of_contents (TOC) auto-generation with __NOTOC__
26
- # NB: turn off adding of edit section/markers for headings (noedit:true)
27
-
28
- wiki = WikiCloth::Parser.new( data: "__NOTOC__\n"+content, params: {} )
29
-
30
- content = wiki.to_html( noedit: true )
31
- end
32
-
33
- end # module MediawikiEngines
34
- end # module Slideshow
35
-
36
- class Slideshow::Gen
37
- include Slideshow::MediawikiEngines
38
- end
@@ -1,17 +0,0 @@
1
- require 'pandoc-ruby'
2
-
3
- module Slideshow
4
- module RestEngines # reStructuredText
5
-
6
- def rest_to_html( content )
7
- puts " Converting reStructuredText (#{content.length} bytes) to HTML..."
8
-
9
- content = PandocRuby.new( content, :from => :rst, :to => :html ).convert
10
- end
11
-
12
- end # module RestEngines
13
- end # module Slideshow
14
-
15
- class Slideshow::Gen
16
- include Slideshow::RestEngines
17
- end