slideshow 0.9.2 → 0.9.3
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/History.rdoc +4 -0
- data/Manifest.txt +1 -0
- data/config/slideshow.builtin.yml +2 -1
- data/lib/slideshow/config.rb +1 -1
- data/lib/slideshow/filters/debug_filter.rb +17 -0
- data/lib/slideshow/filters/slide_filter.rb +60 -0
- data/lib/slideshow/filters/text_filter.rb +14 -2
- data/lib/slideshow/gen.rb +70 -55
- data/lib/slideshow/markdown.rb +5 -0
- data/lib/slideshow.rb +2 -1
- metadata +5 -4
data/History.rdoc
CHANGED
data/Manifest.txt
CHANGED
@@ -9,6 +9,7 @@ lib/slideshow.rb
|
|
9
9
|
lib/slideshow/config.rb
|
10
10
|
lib/slideshow/filters/debug_filter.rb
|
11
11
|
lib/slideshow/filters/headers_filter.rb
|
12
|
+
lib/slideshow/filters/slide_filter.rb
|
12
13
|
lib/slideshow/filters/text_filter.rb
|
13
14
|
lib/slideshow/gen.rb
|
14
15
|
lib/slideshow/helpers/analytics_helper.rb
|
@@ -16,7 +16,7 @@ filters:
|
|
16
16
|
- skip-end-directive
|
17
17
|
- directives_bang_style_to_percent_style
|
18
18
|
- directives_percent_style
|
19
|
-
- comments-percent-style
|
19
|
+
- comments-percent-style
|
20
20
|
- leading-headers
|
21
21
|
- erb-django-style
|
22
22
|
- erb-rename-helper-hack
|
@@ -42,6 +42,7 @@ markdown:
|
|
42
42
|
# the search order is first come, first serve, that is: rdiscount, rpeg-markdown, maruku, bluecloth, kramdown (fallback, always present)
|
43
43
|
|
44
44
|
libs:
|
45
|
+
- pandoc-ruby
|
45
46
|
- rdiscount
|
46
47
|
- rpeg-markdown
|
47
48
|
- maruku
|
data/lib/slideshow/config.rb
CHANGED
@@ -48,7 +48,7 @@ class Config
|
|
48
48
|
|
49
49
|
def known_markdown_libs
|
50
50
|
# returns an array of known markdown engines e.g.
|
51
|
-
# [ rdiscount, rpeg-markdown, maruku, bluecloth, kramdown ]
|
51
|
+
# [ pandoc-ruby, rdiscount, rpeg-markdown, maruku, bluecloth, kramdown ]
|
52
52
|
|
53
53
|
(@hash[ 'markdown' ][ 'libs' ] || []) + @hash[ 'builtin' ][ 'markdown' ][ 'libs' ]
|
54
54
|
end
|
@@ -18,6 +18,23 @@ def dump_content_to_file_debug_text_erb( content )
|
|
18
18
|
content
|
19
19
|
end
|
20
20
|
|
21
|
+
# use it to dump content before html post processing
|
22
|
+
|
23
|
+
def dump_content_to_file_debug_html( content )
|
24
|
+
|
25
|
+
return content unless logger.level == Logger::DEBUG
|
26
|
+
|
27
|
+
outname = "#{@name}.debug.html"
|
28
|
+
|
29
|
+
puts " Dumping content before html post processing to #{outname}..."
|
30
|
+
|
31
|
+
File.open( outname, 'w' ) do |f|
|
32
|
+
f.write( content )
|
33
|
+
end
|
34
|
+
|
35
|
+
content
|
36
|
+
end
|
37
|
+
|
21
38
|
# use it to dump content before text-to-html conversion
|
22
39
|
|
23
40
|
def dump_content_to_file_debug_text( content )
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Slideshow
|
2
|
+
module SlideFilter
|
3
|
+
|
4
|
+
# add slide directive before h1 (tells slideshow gem where to break slides)
|
5
|
+
#
|
6
|
+
# e.g. changes:
|
7
|
+
# <h1 id='optional' class='optional'>
|
8
|
+
# to
|
9
|
+
# <!-- _S9SLIDE_ -->
|
10
|
+
# <h1 id='optional' class='optional'>
|
11
|
+
|
12
|
+
def add_slide_directive_before_h1( content )
|
13
|
+
|
14
|
+
# mark h1 for getting wrapped into slide divs
|
15
|
+
# note: use just <h1 since some processors add ids e.g. <h1 id='x'>
|
16
|
+
|
17
|
+
slide_count = 0
|
18
|
+
|
19
|
+
content.gsub!( /<h1/ ) do |match|
|
20
|
+
slide_count += 1
|
21
|
+
"\n<!-- _S9SLIDE_ -->\n#{Regexp.last_match(0)}"
|
22
|
+
end
|
23
|
+
|
24
|
+
puts " Adding #{slide_count} slide breaks (using h1 rule)..."
|
25
|
+
|
26
|
+
content
|
27
|
+
end
|
28
|
+
|
29
|
+
# add slide directive before div h1 (for pandoc-generated html)
|
30
|
+
#
|
31
|
+
# e.g. changes:
|
32
|
+
# <div id='header'>
|
33
|
+
# <h1 id='optional' class='optional'>
|
34
|
+
# to
|
35
|
+
# <!-- _S9SLIDE_ -->
|
36
|
+
# <div id='header'>
|
37
|
+
# <h1 id='optional' class='optional'>
|
38
|
+
|
39
|
+
|
40
|
+
def add_slide_directive_before_div_h1( content )
|
41
|
+
|
42
|
+
slide_count = 0
|
43
|
+
|
44
|
+
content.gsub!( /<div[^>]*>\s*<h1/ ) do |match|
|
45
|
+
slide_count += 1
|
46
|
+
"\n<!-- _S9SLIDE_ -->\n#{Regexp.last_match(0)}"
|
47
|
+
end
|
48
|
+
|
49
|
+
puts " Adding #{slide_count} slide breaks (using div_h1 rule)..."
|
50
|
+
|
51
|
+
content
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
end # module SlideFilter
|
56
|
+
end # module Slideshow
|
57
|
+
|
58
|
+
class Slideshow::Gen
|
59
|
+
include Slideshow::SlideFilter
|
60
|
+
end
|
@@ -15,9 +15,9 @@ def directives_bang_style_to_percent_style( content )
|
|
15
15
|
# get unparsed helpers e.g. SLIDE|STYLE
|
16
16
|
unparsed = config.helper_unparsed.map { |item| item.upcase }.join( '|' )
|
17
17
|
|
18
|
-
content.gsub!(/^!(#{unparsed})
|
18
|
+
content.gsub!(/^!(#{unparsed})(.*)$/) do |match|
|
19
19
|
bang_count += 1
|
20
|
-
"
|
20
|
+
"<%= #{$1.downcase} '#{$2}' %>"
|
21
21
|
end
|
22
22
|
|
23
23
|
puts " Patching !-directives (#{bang_count} #{config.helper_unparsed.join('/')}-directives)..."
|
@@ -27,6 +27,13 @@ end
|
|
27
27
|
|
28
28
|
def directives_percent_style( content )
|
29
29
|
|
30
|
+
# skip filter for pandoc
|
31
|
+
# - pandoc uses % for its own markdown extension
|
32
|
+
# - don't process % pass it along/through to pandoc
|
33
|
+
|
34
|
+
return content if @markup_type == :markdown && @markdown_libs.first == 'pandoc-ruby'
|
35
|
+
|
36
|
+
|
30
37
|
directive_unparsed = 0
|
31
38
|
directive_expr = 0
|
32
39
|
directive_block_beg = 0
|
@@ -88,6 +95,11 @@ end
|
|
88
95
|
|
89
96
|
|
90
97
|
def comments_percent_style( content )
|
98
|
+
|
99
|
+
# skip filter for pandoc
|
100
|
+
# - pandoc uses % for its own markdown extension
|
101
|
+
|
102
|
+
return content if @markup_type == :markdown && @markdown_libs.first == 'pandoc-ruby'
|
91
103
|
|
92
104
|
# remove comments
|
93
105
|
# % comments
|
data/lib/slideshow/gen.rb
CHANGED
@@ -519,78 +519,93 @@ class Gen
|
|
519
519
|
end
|
520
520
|
|
521
521
|
# convert light-weight markup to hypertext
|
522
|
-
|
522
|
+
|
523
523
|
content = text_to_html( content )
|
524
|
-
|
524
|
+
|
525
525
|
# post-processing
|
526
526
|
|
527
|
-
|
527
|
+
# 1) add slide break
|
528
|
+
|
529
|
+
if @markup_type == :markdown && @markdown_libs.first == 'pandoc-ruby'
|
530
|
+
content = add_slide_directive_before_div_h1( content )
|
531
|
+
else
|
532
|
+
content = add_slide_directive_before_h1( content )
|
533
|
+
end
|
534
|
+
|
535
|
+
dump_content_to_file_debug_html( content )
|
536
|
+
|
537
|
+
# 2) use generic slide break processing instruction to
|
538
|
+
# split content into slides
|
528
539
|
|
529
|
-
|
530
|
-
|
540
|
+
slide_counter = 0
|
541
|
+
|
542
|
+
slides = []
|
543
|
+
slide_source = ""
|
531
544
|
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
end
|
545
|
+
content.each_line do |line|
|
546
|
+
if line.include?( '<!-- _S9SLIDE_' ) then
|
547
|
+
if slide_counter > 0 then # found start of new slide (and, thus, end of last slide)
|
548
|
+
slides << slide_source # add slide to slide stack
|
549
|
+
slide_source = "" # reset slide source buffer
|
550
|
+
end
|
551
|
+
slide_counter += 1
|
552
|
+
end
|
553
|
+
slide_source << line
|
554
|
+
end
|
543
555
|
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
556
|
+
if slide_counter > 0 then
|
557
|
+
slides << slide_source # add slide to slide stack
|
558
|
+
slide_source = "" # reset slide source buffer
|
559
|
+
end
|
548
560
|
|
549
|
-
|
550
|
-
|
561
|
+
## split slide source into header (optional) and content/body
|
562
|
+
## plus check for (css style) classes
|
551
563
|
|
552
|
-
|
553
|
-
|
554
|
-
|
564
|
+
slides2 = []
|
565
|
+
slides.each do |slide_source|
|
566
|
+
slide = Slide.new
|
555
567
|
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
568
|
+
## check for css style classes
|
569
|
+
from = 0
|
570
|
+
while (pos = slide_source.index( /<!-- _S9(SLIDE|STYLE)_(.*?)-->/m, from ))
|
571
|
+
logger.debug " adding css classes from pi #{$1.downcase}: #{$2.strip}"
|
560
572
|
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
573
|
+
if slide.classes.nil?
|
574
|
+
slide.classes = $2.strip
|
575
|
+
else
|
576
|
+
slide.classes << " #{$2.strip}"
|
577
|
+
end
|
566
578
|
|
567
|
-
|
568
|
-
|
579
|
+
from = Regexp.last_match.end(0)
|
580
|
+
end
|
569
581
|
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
582
|
+
# try to cut off header using non-greedy .+? pattern; tip test regex online at rubular.com
|
583
|
+
# note/fix: needs to get improved to also handle case for h1 wrapped into div
|
584
|
+
# (e.g. extract h1 - do not assume it starts slide source)
|
585
|
+
if slide_source =~ /^\s*(<h1.*?>.*?<\/h\d>)\s*(.*)/m
|
586
|
+
slide.header = $1
|
587
|
+
slide.content = ($2 ? $2 : "")
|
588
|
+
logger.debug " adding slide with header:\n#{slide.header}"
|
589
|
+
else
|
590
|
+
slide.content = slide_source
|
591
|
+
logger.debug " adding slide with *no* header:\n#{slide.content}"
|
592
|
+
end
|
593
|
+
slides2 << slide
|
577
594
|
end
|
578
|
-
slides2 << slide
|
579
|
-
end
|
580
595
|
|
581
|
-
|
582
|
-
|
596
|
+
# for convenience create a string w/ all in-one-html
|
597
|
+
# no need to wrap slides in divs etc.
|
583
598
|
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
599
|
+
content2 = ""
|
600
|
+
slides2.each do |slide|
|
601
|
+
content2 << slide.to_classic_html
|
602
|
+
end
|
588
603
|
|
589
|
-
|
590
|
-
|
604
|
+
# make content2 and slide2 available to erb template
|
605
|
+
# -- todo: cleanup variable names and use attr_readers for content and slide
|
591
606
|
|
592
|
-
|
593
|
-
|
607
|
+
@slides = slides2 # strutured content
|
608
|
+
@content = content2 # content all-in-one
|
594
609
|
|
595
610
|
|
596
611
|
manifest.each do |entry|
|
data/lib/slideshow/markdown.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
module Slideshow
|
2
2
|
module MarkdownEngines
|
3
3
|
|
4
|
+
def pandoc_ruby_to_html( content )
|
5
|
+
content = PandocRuby.new( content, :from => :markdown, :to => :html ).convert
|
6
|
+
content.gsub( /class="incremental"/, 'class="step"' )
|
7
|
+
end
|
8
|
+
|
4
9
|
def rdiscount_to_html( content )
|
5
10
|
RDiscount.new( content ).to_html
|
6
11
|
end
|
data/lib/slideshow.rb
CHANGED
@@ -46,11 +46,12 @@ require 'slideshow/helpers/syntax/sh_helper'
|
|
46
46
|
require 'slideshow/filters/headers_filter'
|
47
47
|
require 'slideshow/filters/text_filter'
|
48
48
|
require 'slideshow/filters/debug_filter'
|
49
|
+
require 'slideshow/filters/slide_filter'
|
49
50
|
|
50
51
|
|
51
52
|
module Slideshow
|
52
53
|
|
53
|
-
VERSION = '0.9.
|
54
|
+
VERSION = '0.9.3'
|
54
55
|
|
55
56
|
# version string for generator meta tag (includes ruby version)
|
56
57
|
def Slideshow.generator
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slideshow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 61
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
|
-
-
|
10
|
-
version: 0.9.
|
9
|
+
- 3
|
10
|
+
version: 0.9.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Gerald Bauer
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-07-
|
18
|
+
date: 2010-07-13 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -107,6 +107,7 @@ files:
|
|
107
107
|
- lib/slideshow/config.rb
|
108
108
|
- lib/slideshow/filters/debug_filter.rb
|
109
109
|
- lib/slideshow/filters/headers_filter.rb
|
110
|
+
- lib/slideshow/filters/slide_filter.rb
|
110
111
|
- lib/slideshow/filters/text_filter.rb
|
111
112
|
- lib/slideshow/gen.rb
|
112
113
|
- lib/slideshow/helpers/analytics_helper.rb
|