slideshow 0.9.1 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.rdoc +9 -0
- data/Manifest.txt +11 -9
- data/config/slideshow.builtin.yml +11 -3
- data/config/slideshow.yml +6 -0
- data/lib/slideshow.rb +11 -3
- data/lib/slideshow/config.rb +19 -4
- data/lib/slideshow/filters/debug_filter.rb +44 -0
- data/lib/slideshow/filters/headers_filter.rb +4 -3
- data/lib/slideshow/filters/text_filter.rb +218 -43
- data/lib/slideshow/gen.rb +35 -25
- data/lib/slideshow/helpers/analytics_helper.rb +7 -4
- data/lib/slideshow/helpers/background_helper.rb +91 -0
- data/lib/slideshow/helpers/capture_helper.rb +4 -2
- data/lib/slideshow/helpers/directive_helper.rb +42 -0
- data/lib/slideshow/helpers/markdown_helper.rb +18 -0
- data/lib/slideshow/helpers/source_helper.rb +39 -0
- data/lib/slideshow/helpers/step_helper.rb +6 -4
- data/lib/slideshow/helpers/{coderay_helper.rb → syntax/coderay_helper.rb} +9 -3
- data/lib/slideshow/helpers/syntax/sh_helper.rb +48 -0
- data/lib/slideshow/helpers/{uv_helper.rb → syntax/uv_helper.rb} +9 -4
- data/lib/slideshow/helpers/table_helper.rb +8 -6
- data/lib/slideshow/helpers/text_helper.rb +7 -5
- data/lib/slideshow/markdown.rb +4 -2
- data/lib/slideshow/opts.rb +1 -1
- data/lib/slideshow/textile.rb +5 -4
- data/templates/s6.txt +15 -5
- data/templates/s6.txt.gen +6 -5
- data/templates/s6/slides.css +0 -3
- data/templates/{s6/header.html.erb → slides.html.erb} +33 -23
- data/templates/{s6/header.pdf.html.erb → slides.pdf.html.erb} +10 -1
- data/templates/style.css.erb +35 -0
- metadata +15 -13
- data/templates/gradient.svg.erb +0 -59
- data/templates/s6.txt.sample +0 -16
- data/templates/s6/footer.html.erb +0 -4
- data/templates/s6/footer.pdf.html.erb +0 -3
- data/templates/s6/style.css.erb +0 -33
data/History.rdoc
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
=== 0.9.2 / 2010-07-11
|
2
|
+
|
3
|
+
* Change default template pack from s6gradients to s6blank
|
4
|
+
* Added syntax highlighting helper (sh) for SyntaxHighlighter JavaScript Library
|
5
|
+
* Added gradient and background helper
|
6
|
+
* Added simplified parameters for Django-style expressions and statements
|
7
|
+
* Added support for %-directives (e.g. %helper, %css, %yourown, etc)
|
8
|
+
* Minor fixes
|
9
|
+
|
1
10
|
=== 0.9 / 2010-07-04
|
2
11
|
|
3
12
|
* Added support for !SLIDE (and alternative syntax %slide)
|
data/Manifest.txt
CHANGED
@@ -7,32 +7,34 @@ config/slideshow.builtin.yml
|
|
7
7
|
config/slideshow.yml
|
8
8
|
lib/slideshow.rb
|
9
9
|
lib/slideshow/config.rb
|
10
|
+
lib/slideshow/filters/debug_filter.rb
|
10
11
|
lib/slideshow/filters/headers_filter.rb
|
11
12
|
lib/slideshow/filters/text_filter.rb
|
12
13
|
lib/slideshow/gen.rb
|
13
14
|
lib/slideshow/helpers/analytics_helper.rb
|
15
|
+
lib/slideshow/helpers/background_helper.rb
|
14
16
|
lib/slideshow/helpers/capture_helper.rb
|
15
|
-
lib/slideshow/helpers/
|
17
|
+
lib/slideshow/helpers/directive_helper.rb
|
18
|
+
lib/slideshow/helpers/markdown_helper.rb
|
19
|
+
lib/slideshow/helpers/source_helper.rb
|
16
20
|
lib/slideshow/helpers/step_helper.rb
|
21
|
+
lib/slideshow/helpers/syntax/coderay_helper.rb
|
22
|
+
lib/slideshow/helpers/syntax/sh_helper.rb
|
23
|
+
lib/slideshow/helpers/syntax/uv_helper.rb
|
17
24
|
lib/slideshow/helpers/table_helper.rb
|
18
25
|
lib/slideshow/helpers/text_helper.rb
|
19
|
-
lib/slideshow/helpers/uv_helper.rb
|
20
26
|
lib/slideshow/markdown.rb
|
21
27
|
lib/slideshow/opts.rb
|
22
28
|
lib/slideshow/slide.rb
|
23
29
|
lib/slideshow/textile.rb
|
24
|
-
templates/gradient.svg.erb
|
25
30
|
templates/s6.txt
|
26
31
|
templates/s6.txt.gen
|
27
|
-
templates/s6.txt.sample
|
28
|
-
templates/s6/footer.html.erb
|
29
|
-
templates/s6/footer.pdf.html.erb
|
30
|
-
templates/s6/header.html.erb
|
31
|
-
templates/s6/header.pdf.html.erb
|
32
32
|
templates/s6/jquery.js
|
33
33
|
templates/s6/outline.css
|
34
34
|
templates/s6/print.css
|
35
35
|
templates/s6/slides.core.js
|
36
36
|
templates/s6/slides.css
|
37
37
|
templates/s6/slides.js
|
38
|
-
templates/
|
38
|
+
templates/slides.html.erb
|
39
|
+
templates/slides.pdf.html.erb
|
40
|
+
templates/style.css.erb
|
@@ -6,16 +6,24 @@
|
|
6
6
|
# libs: [ whatever ]
|
7
7
|
|
8
8
|
|
9
|
-
|
9
|
+
helper:
|
10
|
+
unparsed: [ slide, style ]
|
11
|
+
renames: [ include, class ]
|
12
|
+
exprs: [ class, clear ]
|
10
13
|
|
14
|
+
# text filters
|
11
15
|
filters:
|
16
|
+
- skip-end-directive
|
17
|
+
- directives_bang_style_to_percent_style
|
18
|
+
- directives_percent_style
|
12
19
|
- comments-percent-style
|
13
20
|
- leading-headers
|
14
|
-
- skip-end-directive
|
15
21
|
- erb-django-style
|
16
|
-
-
|
22
|
+
- erb-rename-helper-hack
|
23
|
+
- dump_content_to_file_debug_text_erb
|
17
24
|
- erb
|
18
25
|
- code-block-curly-style
|
26
|
+
- dump_content_to_file_debug_text
|
19
27
|
|
20
28
|
|
21
29
|
# markup (textile, markdown) config
|
data/config/slideshow.yml
CHANGED
@@ -40,6 +40,8 @@ headers:
|
|
40
40
|
# map shortcut to URI
|
41
41
|
|
42
42
|
fetch:
|
43
|
+
s6gradients: http://github.com/geraldb/slideshow-s6-gradients/raw/master/s6gradients.txt
|
44
|
+
s6syntax: http://github.com/geraldb/slideshow-s6-syntax-highlighter/raw/master/s6syntax.txt
|
43
45
|
s6blank: http://github.com/geraldb/slideshow-s6-blank/raw/master/s6blank.txt
|
44
46
|
s5blank: http://github.com/geraldb/slideshow-s5-blank/raw/master/s5blank.txt
|
45
47
|
s5themes: http://github.com/geraldb/slideshow-s5-themes/raw/master/s5themes.txt
|
@@ -53,6 +55,10 @@ analytics:
|
|
53
55
|
google: UA-XXX
|
54
56
|
|
55
57
|
|
58
|
+
helper:
|
59
|
+
renames: []
|
60
|
+
exprs: []
|
61
|
+
|
56
62
|
### markup (textile, markdown) config
|
57
63
|
|
58
64
|
# filters to run before markup processing
|
data/lib/slideshow.rb
CHANGED
@@ -14,6 +14,7 @@ require 'net/http'
|
|
14
14
|
require 'ostruct'
|
15
15
|
require 'date'
|
16
16
|
require 'yaml'
|
17
|
+
require 'cgi'
|
17
18
|
|
18
19
|
# required gems
|
19
20
|
require 'redcloth' # default textile library
|
@@ -34,15 +35,22 @@ require 'slideshow/helpers/capture_helper'
|
|
34
35
|
require 'slideshow/helpers/analytics_helper'
|
35
36
|
require 'slideshow/helpers/table_helper'
|
36
37
|
require 'slideshow/helpers/step_helper'
|
38
|
+
require 'slideshow/helpers/background_helper'
|
39
|
+
require 'slideshow/helpers/source_helper'
|
40
|
+
require 'slideshow/helpers/directive_helper'
|
41
|
+
require 'slideshow/helpers/markdown_helper'
|
42
|
+
|
43
|
+
require 'slideshow/helpers/syntax/sh_helper'
|
37
44
|
|
38
45
|
# load built-in filters
|
39
46
|
require 'slideshow/filters/headers_filter'
|
40
47
|
require 'slideshow/filters/text_filter'
|
48
|
+
require 'slideshow/filters/debug_filter'
|
41
49
|
|
42
50
|
|
43
51
|
module Slideshow
|
44
52
|
|
45
|
-
VERSION = '0.9.
|
53
|
+
VERSION = '0.9.2'
|
46
54
|
|
47
55
|
# version string for generator meta tag (includes ruby version)
|
48
56
|
def Slideshow.generator
|
@@ -70,8 +78,8 @@ end # module Slideshow
|
|
70
78
|
# gem install coderay
|
71
79
|
# gem install ultraviolet etc.
|
72
80
|
BUILTIN_OPT_HELPERS = [
|
73
|
-
'slideshow/helpers/uv_helper.rb',
|
74
|
-
'slideshow/helpers/coderay_helper.rb',
|
81
|
+
'slideshow/helpers/syntax/uv_helper.rb',
|
82
|
+
'slideshow/helpers/syntax/coderay_helper.rb',
|
75
83
|
]
|
76
84
|
|
77
85
|
BUILTIN_OPT_HELPERS.each do |helper|
|
data/lib/slideshow/config.rb
CHANGED
@@ -39,18 +39,18 @@ class Config
|
|
39
39
|
# textile:
|
40
40
|
# extnames: [ .textile, .t ]
|
41
41
|
|
42
|
-
@hash[ 'textile' ][ 'extnames' ] + @hash[ 'builtin' ][ 'textile' ][ 'extnames' ]
|
42
|
+
(@hash[ 'textile' ][ 'extnames' ] || []) + @hash[ 'builtin' ][ 'textile' ][ 'extnames' ]
|
43
43
|
end
|
44
44
|
|
45
45
|
def known_markdown_extnames
|
46
|
-
@hash[ 'markdown' ][ 'extnames' ] + @hash[ 'builtin' ][ 'markdown' ][ 'extnames' ]
|
46
|
+
(@hash[ 'markdown' ][ 'extnames' ] || []) + @hash[ 'builtin' ][ 'markdown' ][ 'extnames' ]
|
47
47
|
end
|
48
48
|
|
49
49
|
def known_markdown_libs
|
50
50
|
# returns an array of known markdown engines e.g.
|
51
51
|
# [ rdiscount, rpeg-markdown, maruku, bluecloth, kramdown ]
|
52
52
|
|
53
|
-
@hash[ 'markdown' ][ 'libs' ] + @hash[ 'builtin' ][ 'markdown' ][ 'libs' ]
|
53
|
+
(@hash[ 'markdown' ][ 'libs' ] || []) + @hash[ 'builtin' ][ 'markdown' ][ 'libs' ]
|
54
54
|
end
|
55
55
|
|
56
56
|
def known_extnames
|
@@ -61,7 +61,22 @@ class Config
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def text_filters
|
64
|
-
@hash[ 'builtin' ][ 'filters' ] + @hash[ 'filters' ]
|
64
|
+
@hash[ 'builtin' ][ 'filters' ] + ( @hash[ 'filters' ] || [] )
|
65
|
+
end
|
66
|
+
|
67
|
+
def helper_renames
|
68
|
+
@hash[ 'builtin' ][ 'helper' ][ 'renames' ] + ( @hash[ 'helper' ][ 'renames' ] || [] )
|
69
|
+
end
|
70
|
+
|
71
|
+
def helper_unparsed
|
72
|
+
# use unparsed params (passed along a single string)
|
73
|
+
@hash[ 'builtin' ][ 'helper' ][ 'unparsed' ]
|
74
|
+
end
|
75
|
+
|
76
|
+
def helper_exprs
|
77
|
+
# allow expression as directives (no need for %end block)
|
78
|
+
# by default directives are assumed statements (e.g. %mydir %end)
|
79
|
+
@hash[ 'builtin' ][ 'helper' ][ 'exprs' ] + ( @hash[ 'helper' ][ 'exprs' ] || [] )
|
65
80
|
end
|
66
81
|
|
67
82
|
def google_analytics_code
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Slideshow
|
2
|
+
module DebugFilter
|
3
|
+
|
4
|
+
# use it to dump content before erb merge
|
5
|
+
|
6
|
+
def dump_content_to_file_debug_text_erb( content )
|
7
|
+
|
8
|
+
return content unless logger.level == Logger::DEBUG
|
9
|
+
|
10
|
+
outname = "#{@name}.debug.text.erb"
|
11
|
+
|
12
|
+
puts " Dumping content before erb merge to #{outname}..."
|
13
|
+
|
14
|
+
File.open( outname, 'w' ) do |f|
|
15
|
+
f.write( content )
|
16
|
+
end
|
17
|
+
|
18
|
+
content
|
19
|
+
end
|
20
|
+
|
21
|
+
# use it to dump content before text-to-html conversion
|
22
|
+
|
23
|
+
def dump_content_to_file_debug_text( content )
|
24
|
+
|
25
|
+
return content unless logger.level == Logger::DEBUG
|
26
|
+
|
27
|
+
outname = "#{@name}.debug.text"
|
28
|
+
|
29
|
+
puts " Dumping content before text-to-html conversion to #{outname}..."
|
30
|
+
|
31
|
+
File.open( outname, 'w' ) do |f|
|
32
|
+
f.write( content )
|
33
|
+
end
|
34
|
+
|
35
|
+
content
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end # module DebugFilter
|
40
|
+
end # module Slideshow
|
41
|
+
|
42
|
+
class Slideshow::Gen
|
43
|
+
include Slideshow::DebugFilter
|
44
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
module
|
1
|
+
module Slideshow
|
2
|
+
module HeadersFilter
|
2
3
|
|
3
4
|
def leading_headers( content_with_headers )
|
4
5
|
|
@@ -38,8 +39,8 @@ def leading_headers( content_with_headers )
|
|
38
39
|
end
|
39
40
|
|
40
41
|
end # module HeadersFilter
|
41
|
-
|
42
|
+
end # module Slideshow
|
42
43
|
|
43
44
|
class Slideshow::Gen
|
44
|
-
include HeadersFilter
|
45
|
+
include Slideshow::HeadersFilter
|
45
46
|
end
|
@@ -3,9 +3,91 @@
|
|
3
3
|
#
|
4
4
|
# use web filters for processing html/hypertext
|
5
5
|
|
6
|
-
module
|
6
|
+
module Slideshow
|
7
|
+
module TextFilter
|
7
8
|
|
8
|
-
|
9
|
+
def directives_bang_style_to_percent_style( content )
|
10
|
+
|
11
|
+
# for compatibility allow !SLIDE/!STYLE as an alternative to %slide/%style-directive
|
12
|
+
|
13
|
+
bang_count = 0
|
14
|
+
|
15
|
+
# get unparsed helpers e.g. SLIDE|STYLE
|
16
|
+
unparsed = config.helper_unparsed.map { |item| item.upcase }.join( '|' )
|
17
|
+
|
18
|
+
content.gsub!(/^!(#{unparsed})/) do |match|
|
19
|
+
bang_count += 1
|
20
|
+
"%#{$1.downcase}"
|
21
|
+
end
|
22
|
+
|
23
|
+
puts " Patching !-directives (#{bang_count} #{config.helper_unparsed.join('/')}-directives)..."
|
24
|
+
|
25
|
+
content
|
26
|
+
end
|
27
|
+
|
28
|
+
def directives_percent_style( content )
|
29
|
+
|
30
|
+
directive_unparsed = 0
|
31
|
+
directive_expr = 0
|
32
|
+
directive_block_beg = 0
|
33
|
+
directive_block_end = 0
|
34
|
+
|
35
|
+
# process directives (plus skip %begin/%end comment-blocks)
|
36
|
+
|
37
|
+
inside_block = 0
|
38
|
+
inside_helper = false
|
39
|
+
|
40
|
+
content2 = ""
|
41
|
+
|
42
|
+
content.each_line do |line|
|
43
|
+
if line =~ /^%([a-zA-Z][a-zA-Z0-9_]*)(.*)/
|
44
|
+
directive = $1.downcase
|
45
|
+
params = $2
|
46
|
+
|
47
|
+
logger.debug "processing %-directive: #{directive}"
|
48
|
+
|
49
|
+
# slide, style
|
50
|
+
if config.helper_unparsed.include?( directive )
|
51
|
+
directive_unparsed += 1
|
52
|
+
content2 << "<%= #{directive} '#{params ? params : ''}' %>"
|
53
|
+
elsif config.helper_exprs.include?( directive )
|
54
|
+
directive_expr += 1
|
55
|
+
content2 << "<%= #{directive} #{params ? erb_simple_params(directive,params) : ''} %>"
|
56
|
+
elsif inside_helper && directive == 'end'
|
57
|
+
inside_helper = false
|
58
|
+
directive_block_end += 1
|
59
|
+
content2 << "%>"
|
60
|
+
elsif inside_block > 0 && directive == 'end'
|
61
|
+
inside_block -= 1
|
62
|
+
directive_block_end += 1
|
63
|
+
content2 << "<% end %>"
|
64
|
+
elsif [ 'comment', 'comments', 'begin', 'end' ].include?( directive ) # skip begin/end comment blocks
|
65
|
+
content2 << line
|
66
|
+
elsif [ 'helper', 'helpers' ].include?( directive )
|
67
|
+
inside_helper = true
|
68
|
+
directive_block_beg += 1
|
69
|
+
content2 << "<%"
|
70
|
+
else
|
71
|
+
inside_block += 1
|
72
|
+
directive_block_beg += 1
|
73
|
+
content2 << "<% #{directive} #{params ? erb_simple_params(directive,params) : ''} do %>"
|
74
|
+
end
|
75
|
+
else
|
76
|
+
content2 << line
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
puts " Preparing %-directives (" +
|
81
|
+
"#{directive_unparsed} #{config.helper_unparsed.join('/')} directives, " +
|
82
|
+
"#{directive_expr} #{config.helper_exprs.join('/')} expr-directives, " +
|
83
|
+
"#{directive_block_beg}/#{directive_block_end} block-directives)..."
|
84
|
+
|
85
|
+
content2
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
def comments_percent_style( content )
|
9
91
|
|
10
92
|
# remove comments
|
11
93
|
# % comments
|
@@ -18,7 +100,7 @@ module TextFilter
|
|
18
100
|
comments_end = 0
|
19
101
|
|
20
102
|
# remove multi-line comments
|
21
|
-
content.gsub!(/^%begin.*?%end/m) do |match|
|
103
|
+
content.gsub!(/^%(begin|comment|comments).*?%end/m) do |match|
|
22
104
|
comments_multi += 1
|
23
105
|
""
|
24
106
|
end
|
@@ -44,8 +126,8 @@ module TextFilter
|
|
44
126
|
""
|
45
127
|
end
|
46
128
|
|
47
|
-
puts " Removing comments (#{comments_single}
|
48
|
-
"#{comments_multi}
|
129
|
+
puts " Removing %-comments (#{comments_single} lines, " +
|
130
|
+
"#{comments_multi} begin/end-blocks, #{comments_end} end-blocks)..."
|
49
131
|
|
50
132
|
content
|
51
133
|
end
|
@@ -58,17 +140,21 @@ module TextFilter
|
|
58
140
|
content
|
59
141
|
end
|
60
142
|
|
61
|
-
def
|
62
|
-
# note: include is a ruby keyword; rename to
|
143
|
+
def erb_rename_helper_hack( content )
|
144
|
+
# note: include is a ruby keyword; rename to s9_include so we can use it
|
145
|
+
|
146
|
+
rename_counter = 0
|
63
147
|
|
64
|
-
|
148
|
+
# turn renames into something like:
|
149
|
+
# include|class etc.
|
150
|
+
renames = config.helper_renames.join( '|' )
|
65
151
|
|
66
|
-
content.gsub!( /<%=[ \t]*
|
67
|
-
|
68
|
-
|
152
|
+
content.gsub!( /<%=[ \t]*(#{renames})/ ) do |match|
|
153
|
+
rename_counter += 1
|
154
|
+
"<%= s9_#{$1}"
|
69
155
|
end
|
70
156
|
|
71
|
-
puts " Patching embedded Ruby (erb) code aliases (#{
|
157
|
+
puts " Patching embedded Ruby (erb) code for aliases (#{rename_counter} #{config.helper_renames.join('/')}-aliases)..."
|
72
158
|
|
73
159
|
content
|
74
160
|
end
|
@@ -81,32 +167,110 @@ module TextFilter
|
|
81
167
|
content
|
82
168
|
end
|
83
169
|
|
170
|
+
def erb_simple_params( method, params )
|
171
|
+
|
172
|
+
# replace params to support html like attributes e.g.
|
173
|
+
# plus add comma separator
|
174
|
+
#
|
175
|
+
# class=part -> :class => 'part'
|
176
|
+
# 3rd/tutorial -> '3rd/tutorial'
|
177
|
+
# :css -> :css
|
178
|
+
|
179
|
+
return params if params.nil? || params.strip.empty?
|
180
|
+
|
181
|
+
params.strip!
|
182
|
+
## todo: add check for " ??
|
183
|
+
if params.include?( '=>' )
|
184
|
+
puts "** warning: skipping patching of params for helper '#{method}'; already includes '=>':"
|
185
|
+
puts " #{params}"
|
186
|
+
|
187
|
+
return params
|
188
|
+
end
|
189
|
+
|
190
|
+
before = params.clone
|
191
|
+
|
192
|
+
# 1) string-ify values and keys (that is, wrap in '')
|
193
|
+
# plus separate w/ commas
|
194
|
+
params.gsub!( /([:a-zA-Z0-9#][\w\/\-\.#()]*)|('[^'\n]*')/) do |match|
|
195
|
+
symbol = ( Regexp.last_match( 0 )[0,1] == ':' )
|
196
|
+
quoted = ( Regexp.last_match( 0 )[0,1] == "'" )
|
197
|
+
if symbol || quoted # return symbols or quoted string as is
|
198
|
+
"#{Regexp.last_match( 0 )},"
|
199
|
+
else
|
200
|
+
"'#{Regexp.last_match( 0 )}',"
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
# 2) symbol-ize hash keys
|
205
|
+
# change = to =>
|
206
|
+
# remove comma for key/value pairs
|
207
|
+
params.gsub!( /'(\w+)',[ \t]*=/ ) do |match|
|
208
|
+
":#{$1}=>"
|
209
|
+
end
|
210
|
+
|
211
|
+
# 3) remove trailing comma
|
212
|
+
params.sub!( /[ \t]*,[ \t]*$/, '' )
|
213
|
+
|
214
|
+
puts " Patching params for helper '#{method}' from '#{before}' to:"
|
215
|
+
puts " #{params}"
|
216
|
+
|
217
|
+
params
|
218
|
+
end
|
219
|
+
|
220
|
+
|
221
|
+
def erb_django_simple_params( code )
|
222
|
+
|
223
|
+
# split into method/directive and parms plus convert params
|
224
|
+
code.sub!( /^[ \t]([\w.]+)(.*)/ ) do |match|
|
225
|
+
directive = $1
|
226
|
+
params = $2
|
227
|
+
|
228
|
+
"#{directive} #{params ? erb_simple_params(directive,params) : ''}"
|
229
|
+
end
|
230
|
+
|
231
|
+
code
|
232
|
+
end
|
233
|
+
|
84
234
|
def erb_django_style( content )
|
85
235
|
|
86
236
|
# replace expressions (support for single lines only)
|
87
237
|
# {{ expr }} -> <%= expr %>
|
88
238
|
# {% stmt %} -> <% stmt %> !! add in do if missing (for convenience)
|
239
|
+
#
|
240
|
+
# use use {{{ or {{{{ to escape expr back to literal value
|
241
|
+
# and use {%% %} to escape stmts
|
89
242
|
|
90
243
|
erb_expr = 0
|
91
244
|
erb_stmt_beg = 0
|
92
245
|
erb_stmt_end = 0
|
93
246
|
|
94
|
-
content.gsub!(
|
95
|
-
|
96
|
-
|
247
|
+
content.gsub!( /(\{{2,4})([^{}\n]+?)(\}{2,4})/ ) do |match|
|
248
|
+
escaped = ($1.length > 2)
|
249
|
+
if escaped
|
250
|
+
"{{#{$2}}}"
|
251
|
+
else
|
252
|
+
erb_expr += 1
|
253
|
+
"<%= #{erb_django_simple_params($2)} %>"
|
254
|
+
end
|
97
255
|
end
|
98
256
|
|
99
|
-
content.gsub!(
|
100
|
-
|
101
|
-
|
257
|
+
content.gsub!( /(\{%{1,2})([ \t]*end[ \t]*)%\}/ ) do |match|
|
258
|
+
escaped = ($1.length > 2)
|
259
|
+
if escaped
|
260
|
+
"{%#{$2}%}"
|
261
|
+
else
|
262
|
+
erb_stmt_end += 1
|
263
|
+
"<% end %>"
|
264
|
+
end
|
102
265
|
end
|
103
266
|
|
104
|
-
content.gsub!(
|
105
|
-
|
106
|
-
if
|
107
|
-
"
|
267
|
+
content.gsub!( /(\{%{1,2})([^%\n]+?)%\}/ ) do |match|
|
268
|
+
escaped = ($1.length > 2)
|
269
|
+
if escaped
|
270
|
+
"{%#{$2}%}"
|
108
271
|
else
|
109
|
-
|
272
|
+
erb_stmt_beg += 1
|
273
|
+
"<% #{erb_django_simple_params($2)} do %>"
|
110
274
|
end
|
111
275
|
end
|
112
276
|
|
@@ -119,35 +283,46 @@ module TextFilter
|
|
119
283
|
def code_block_curly_style( content )
|
120
284
|
# replace {{{ w/ <pre class='code'>
|
121
285
|
# replace }}} w/ </pre>
|
286
|
+
# use 4-6 { or } to escape back to literal value (e.g. {{{{ or {{{{{{ => {{{ )
|
287
|
+
# note: {{{ / }}} are anchored to beginning of line ( spaces and tabs before {{{/}}}allowed )
|
122
288
|
|
123
289
|
# track statistics
|
124
|
-
code_begin
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
290
|
+
code_begin = 0
|
291
|
+
code_begin_esc = 0
|
292
|
+
code_end = 0
|
293
|
+
code_end_esc = 0
|
294
|
+
|
295
|
+
content.gsub!( /^[ \t]*(\{{3,6})/ ) do |match|
|
296
|
+
escaped = ($1.length > 3)
|
297
|
+
if escaped
|
298
|
+
code_begin_esc += 1
|
299
|
+
"{{{"
|
300
|
+
else
|
301
|
+
code_begin += 1
|
302
|
+
"<pre class='code'>"
|
303
|
+
end
|
133
304
|
end
|
134
305
|
|
135
|
-
content.gsub!(
|
136
|
-
|
137
|
-
|
306
|
+
content.gsub!( /^[ \t]*(\}{3,6})/ ) do |match|
|
307
|
+
escaped = ($1.length > 3)
|
308
|
+
if escaped
|
309
|
+
code_end_esc += 1
|
310
|
+
"}}}"
|
311
|
+
else
|
312
|
+
code_end += 1
|
313
|
+
"</pre>"
|
314
|
+
end
|
138
315
|
end
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
content.gsub!( "_S9END_", "}}}" )
|
143
|
-
|
144
|
-
puts " Patching code blocks (#{code_begin}/#{code_end} {{{/}}}-lines)..."
|
316
|
+
|
317
|
+
puts " Patching {{{/}}}-code blocks (#{code_begin}/#{code_end} blocks, " +
|
318
|
+
"#{code_begin_esc}/#{code_end_esc} escaped blocks)..."
|
145
319
|
|
146
320
|
content
|
147
321
|
end
|
148
322
|
|
149
|
-
end
|
323
|
+
end # module TextFilter
|
324
|
+
end # module Slideshow
|
150
325
|
|
151
326
|
class Slideshow::Gen
|
152
|
-
include TextFilter
|
327
|
+
include Slideshow::TextFilter
|
153
328
|
end
|