vimdeck-without-ascii-art 0.2.9

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/img/demo1.png ADDED
Binary file
data/img/demo2.png ADDED
Binary file
data/img/demo3.png ADDED
Binary file
data/img/demo4.png ADDED
Binary file
data/img/vim.png ADDED
Binary file
@@ -0,0 +1,40 @@
1
+ set nonumber
2
+ set nofoldenable
3
+ if exists('+relativenumber')
4
+ set norelativenumber
5
+ end
6
+ set hidden
7
+ <% if @options[:no_filetype] %>
8
+ argdo set filetype=txt
9
+ set filetype=txt
10
+ filetype off
11
+ <% end %>
12
+
13
+ noremap <PageUp> :bp<CR>
14
+ noremap <Left> :bp<CR>
15
+ <% if @options[:mouse_enabled] -%>
16
+ noremap <RightMouse> :bp<CR>
17
+ <% end -%>
18
+ noremap <PageDown> :bn<CR>
19
+ noremap <Right> :bn<CR>
20
+ <% if @options[:mouse_enabled] -%>
21
+ noremap <LeftMouse> :bn<CR>
22
+ <% end -%>
23
+ noremap Q :q<CR>
24
+
25
+ <% if @options[:mouse_enabled] -%>
26
+ set mouse=a
27
+
28
+ <% end -%>
29
+ <% @buffers.each do |buffer| -%>
30
+ b <%= buffer[:num] %>
31
+ <% if buffer[:code] -%>
32
+ <% buffer[:code].each do |code| -%>
33
+ <%= code[:start] %>,<%= code[:end] %>SyntaxInclude <%= code[:language] %>
34
+ <% end -%>
35
+ <% end -%>
36
+ <% buffer[:comments].each do |comment| -%>
37
+ call matchadd("Comment", "<%= comment %>")
38
+ <% end -%>
39
+ <% end -%>
40
+ b 1
data/lib/vimdeck.rb ADDED
@@ -0,0 +1,255 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'artii'
4
+ require 'erb'
5
+ require 'redcarpet'
6
+
7
+ $nl = "\n"
8
+
9
+ module Vimdeck
10
+ # Helper methods for ascii art conversion
11
+ class Ascii
12
+ def self.header(text, type)
13
+ if font_name = Vimdeck::Slideshow.options[:header_font]
14
+ begin
15
+ font = Artii::Base.new :font => font_name
16
+ rescue
17
+ raise "Incorrect figlet font name"
18
+ end
19
+ else
20
+ if type == "large"
21
+ font = Artii::Base.new :font => 'slant'
22
+ else
23
+ font = Artii::Base.new :font => 'smslant'
24
+ end
25
+ end
26
+
27
+ font.asciify(text)
28
+ end
29
+
30
+ def self.image(img)
31
+ # a = AsciiArt.new(img)
32
+ # a.to_ascii_art width: 30
33
+ end
34
+ end
35
+
36
+ # Custom Redcarpet renderer handles headers and images
37
+ # Code blocks are ignored by the renderer because they have to be
38
+ # measured for the vimscript, so parsing of the fenced code blocks
39
+ # happens in the slideshow generator itself
40
+ class Render < Redcarpet::Render::Base
41
+ # Methods where the first argument is the text content
42
+ [
43
+ # block-level calls
44
+ :block_quote,
45
+ :block_html, :list_item,
46
+
47
+ # span-level calls
48
+ :autolink,
49
+ :underline, :raw_html,
50
+ :strikethrough,
51
+ :superscript,
52
+
53
+ # footnotes
54
+ :footnotes, :footnote_def, :footnote_ref,
55
+
56
+ # low level rendering
57
+ :entity, :normal_text
58
+ ].each do |method|
59
+ define_method method do |*args|
60
+ args.first
61
+ end
62
+ end
63
+
64
+ def code_span(text)
65
+ return "`#{text}`"
66
+ end
67
+
68
+ def emphasis(text)
69
+ return "*#{text}*"
70
+ end
71
+
72
+ def double_emphasis(text)
73
+ return "**#{text}**"
74
+ end
75
+
76
+ def triple_emphasis(text)
77
+ return "***#{text}***"
78
+ end
79
+
80
+ def list(content, type)
81
+ if type == :unordered
82
+ "<!~#{content}~!>#{$nl}#{$nl}"
83
+ else
84
+ "<@~#{content}~@>#{$nl}#{$nl}"
85
+ end
86
+ end
87
+
88
+ def header(title, level)
89
+ margin = Vimdeck::Slideshow.options[:header_margin]
90
+ linebreak = margin ? "#{$nl}" * margin : "#{$nl}"
91
+ if !Vimdeck::Slideshow.options[:no_ascii]
92
+ case level
93
+ when 1
94
+ heading = Vimdeck::Ascii.header(title, "large")
95
+ if Vimdeck::Slideshow.options[:no_indent]
96
+ heading = " " + heading.gsub( /\r\n?|\n/, "#{$nl} " ) + linebreak
97
+ else
98
+ heading + linebreak
99
+ end
100
+ when 2
101
+ heading = Vimdeck::Ascii.header(title, "small")
102
+ if Vimdeck::Slideshow.options[:no_indent]
103
+ heading = " " + heading.gsub( /\r\n?|\n/, "#{$nl} " ) + linebreak
104
+ else
105
+ heading + linebreak
106
+ end
107
+ end
108
+ else
109
+ title + "#{$nl}#{$nl}"
110
+ end
111
+ end
112
+
113
+ def link(link, title, content)
114
+ content
115
+ end
116
+
117
+ def paragraph(text)
118
+ text + "#{$nl}#{$nl}"
119
+ end
120
+
121
+ def block_code(code, language)
122
+ "```#{language}#{$nl}#{code}#{$nl}```"
123
+ end
124
+
125
+ def image(image, title, alt_text)
126
+ # Vimdeck::Ascii.image(image)
127
+ end
128
+ end
129
+
130
+ class Slideshow
131
+ @options = {}
132
+
133
+ def self.options
134
+ @options
135
+ end
136
+
137
+ def self.slide_padding
138
+ @options[:no_indent] ? "" : " "
139
+ end
140
+
141
+ def self.script_template
142
+ template = ERB.new(File.read(File.dirname(__FILE__) + "/templates/script.vim.erb"), nil, '-')
143
+ template.result(binding)
144
+ end
145
+
146
+ def self.generate(filename, options)
147
+ @options = options
148
+ extension = options[:no_filetype] ? ".txt" : ".md"
149
+ if options[:dos_newlines]
150
+ $nl = "\r\n"
151
+ end
152
+ slides = File.read(filename)
153
+
154
+ renderer = Redcarpet::Markdown.new(Vimdeck::Render, :fenced_code_blocks => true)
155
+ Dir.mkdir("presentation") unless File.exists?("presentation")
156
+ @buffers = []
157
+
158
+ # Slide separator is 3 newlines
159
+ slides = slides.split(/(?:\r\n?|\n)(?:\r\n?|\n)(?:\r\n?|\n)/)
160
+ i = 0
161
+ slides.each do |slide|
162
+ # Pad file names with zeros. e.g. slide001.md, slide023.md, etc.
163
+ slide_num = "%03d" % (i+1)
164
+ slide = renderer.render(slide)
165
+
166
+ regex = /\<\@\~(.*?)\~\@\>/m
167
+ match = slide.match(regex)
168
+ while match && match[1] && match.post_match do
169
+ list = match[1].split(/\r\n?|\n/)
170
+ j = 0
171
+ list = list.map do |li|
172
+ j += 1
173
+ "#{j}. #{li}"
174
+ end
175
+ slide.sub!(regex, list.join($nl))
176
+ match = match.post_match.match(regex)
177
+ end
178
+
179
+ regex = /\<\!\~(.*?)\~\!\>/m
180
+ match = slide.match(regex)
181
+ while match && match[1] && match.post_match do
182
+ list = match[1].split(/\r\n?|\n/)
183
+ list = list.map do |li|
184
+ "\u2022 #{li}"
185
+ end
186
+ slide.sub!(regex, list.join($nl))
187
+ match = match.post_match.match(regex)
188
+ end
189
+
190
+ # buffer gets stashed into @buffers array for script template
191
+ # needs to track things like the buffer number, code highlighting
192
+ # and focus/unfocus stuff
193
+ buffer = {:num => i + 1}
194
+ code_height = 0
195
+ code = nil
196
+ code = slide.match( /```([^\r\n]*)(\r\n?|\n).*(\r\n?|\n)```/m )
197
+ if code
198
+ buffer[:code] = []
199
+ code_hash = { :language => code[1] }
200
+ code_height = code[0].split(/\r\n?|\n/).length - 2
201
+ code = code[0].gsub( /```[^\r\n]*(\r\n?|\n)/, '' ).gsub( /(\r\n?|\n)```/, '' )
202
+ slide = slide.gsub( /```[^\r\n]*(\r\n?|\n)/, '' ).gsub( /(\r\n?|\n)```/, '' )
203
+
204
+ if code_height > 0
205
+ start = slide.index(code)
206
+ start = slide[0..start].split(/\r\n?|\n/).length
207
+ code_hash[:end] = code_height + start - 1
208
+ code_hash[:start] = start
209
+ end
210
+ buffer[:code] << code_hash
211
+ end
212
+
213
+ # Prepending each line with slide_padding
214
+ # Removing trailing spaces
215
+ # Add newlines at end of the file to hide the slide identifier
216
+ slide = slide_padding + slide.gsub( /\r\n?|\n/, "#{$nl}#{slide_padding}" ).gsub( / *$/, "" ) + ($nl * 80) + "slide #{slide_num}"
217
+
218
+ # Buffers comments refers to items that need to be less focused/"unhighlighted"
219
+ # We add a regex to the vimscript for each slide with "comments"
220
+ # We use the hidden slide identifier to differentiate between slides
221
+ regex = /\{\~(.*?)\~\}/m
222
+ match = slide.match(regex)
223
+ buffer[:comments] = []
224
+ while match && match[1] && match.post_match do
225
+ slide.sub!(regex, match[1])
226
+ pattern = match[1] + "||(||_.*slide #{slide_num}||)||@="
227
+ buffer[:comments] << pattern.gsub(/\r\n?|\n/, "||n").gsub(/\[/, "||[").gsub(/\]/, "||]").gsub(/\|/, "\\").gsub(/\"/, "\\\"")
228
+ match = match.post_match.match(regex)
229
+ end
230
+
231
+ File.open("presentation/slide#{slide_num}#{extension}", "w") do |file|
232
+ file.write("#{slide}#{$nl}")
233
+ end
234
+
235
+ @buffers << buffer
236
+ i += 1
237
+ end
238
+
239
+ File.open("presentation/script.vim", "w") do |file|
240
+ file.write script_template
241
+ end
242
+ end
243
+
244
+ def self.open
245
+ extension = @options[:no_filetype] ? ".txt" : ".md"
246
+ editor = options[:editor] || "vim"
247
+ exec "#{editor} presentation/*#{extension} -S presentation/script.vim"
248
+ end
249
+
250
+ def self.start(filename, options)
251
+ generate(filename, options)
252
+ open
253
+ end
254
+ end
255
+ end
@@ -0,0 +1,67 @@
1
+ set nonumber
2
+ set nofoldenable
3
+ if exists('+relativenumber')
4
+ set norelativenumber
5
+ end
6
+ set hidden
7
+
8
+
9
+ noremap <PageUp> :bp<CR>
10
+ noremap <Left> :bp<CR>
11
+ noremap <PageDown> :bn<CR>
12
+ noremap <Right> :bn<CR>
13
+ noremap Q :q<CR>
14
+
15
+ b 1
16
+ b 2
17
+ b 3
18
+ b 4
19
+ b 5
20
+ call matchadd("Comment", "\\n • Second\\n • Third\\(\\_.*slide 005\\)\\@=")
21
+ b 6
22
+ call matchadd("Comment", "• First\\(\\_.*slide 006\\)\\@=")
23
+ call matchadd("Comment", "\\n • Third\\(\\_.*slide 006\\)\\@=")
24
+ b 7
25
+ call matchadd("Comment", "• First\\n • Second\\(\\_.*slide 007\\)\\@=")
26
+ b 8
27
+ 6,17SyntaxInclude ruby
28
+ b 9
29
+ 6,17SyntaxInclude ruby
30
+ call matchadd("Comment", "module Parts\\n class foo\\n def slide\\n \"of a\"\\n end\\n\\n def can\\n highlight = \\(\\_.*slide 009\\)\\@=")
31
+ call matchadd("Comment", "\\n end\\n end\\n end\\(\\_.*slide 009\\)\\@=")
32
+ b 10
33
+ 6,17SyntaxInclude ruby
34
+ call matchadd("Comment", "module Parts\\n class foo\\n def slide\\n \"of a\"\\n end\\n\\n def\\(\\_.*slide 010\\)\\@=")
35
+ call matchadd("Comment", "highlight = \"vimdeck\"\\n end\\n end\\n end\\(\\_.*slide 010\\)\\@=")
36
+ b 11
37
+ 6,17SyntaxInclude ruby
38
+ call matchadd("Comment", "module Parts\\n class foo\\n def slide\\n \"of a\"\\n end\\n\\n def can\\(\\_.*slide 011\\)\\@=")
39
+ call matchadd("Comment", "= \"vimdeck\"\\n end\\n end\\n end\\(\\_.*slide 011\\)\\@=")
40
+ b 12
41
+ 6,17SyntaxInclude ruby
42
+ call matchadd("Comment", "module\\(\\_.*slide 012\\)\\@=")
43
+ call matchadd("Comment", "class foo\\n def slide\\n \"of a\"\\n end\\n\\n def can\\n highlight = \"vimdeck\"\\n end\\n end\\n end\\(\\_.*slide 012\\)\\@=")
44
+ b 13
45
+ 6,17SyntaxInclude ruby
46
+ call matchadd("Comment", "module Parts\\n class foo\\n def slide\\(\\_.*slide 013\\)\\@=")
47
+ call matchadd("Comment", "end\\n\\n def can\\n highlight = \"vimdeck\"\\n end\\n end\\n end\\(\\_.*slide 013\\)\\@=")
48
+ b 14
49
+ 6,17SyntaxInclude ruby
50
+ call matchadd("Comment", "module Parts\\n class foo\\n def\\(\\_.*slide 014\\)\\@=")
51
+ call matchadd("Comment", "\"of a\"\\n end\\n\\n def can\\n highlight = \"vimdeck\"\\n end\\n end\\n end\\(\\_.*slide 014\\)\\@=")
52
+ b 15
53
+ 6,16SyntaxInclude javascript
54
+ b 16
55
+ 6,16SyntaxInclude javascript
56
+ call matchadd("Comment", "(function( window, $, undefined ) {\\n $( '.hello' ).on( 'click', function sayHello() {\\(\\_.*slide 016\\)\\@=")
57
+ call matchadd("Comment", "\\n });\\n })( window, jQuery );\\(\\_.*slide 016\\)\\@=")
58
+ b 17
59
+ 6,16SyntaxInclude javascript
60
+ call matchadd("Comment", "<body>\\(\\_.*slide 017\\)\\@=")
61
+ call matchadd("Comment", "</body>\\(\\_.*slide 017\\)\\@=")
62
+ b 18
63
+ 6,16SyntaxInclude javascript
64
+ call matchadd("Comment", "(function( window, $, undefined ) {\\n $( '.hello' ).on( 'click', function sayHello() {\\(\\_.*slide 018\\)\\@=")
65
+ call matchadd("Comment", "\\n });\\n })( window, jQuery );\\n\\n <body>\\n <a href=\"#\" class=\"hello\">Hello!</a>\\n </body>\\(\\_.*slide 018\\)\\@=")
66
+ b 19
67
+ b 1
@@ -0,0 +1,92 @@
1
+ _ ________ _______ ______________ __
2
+ | | / / _/ |/ / __ \/ ____/ ____/ //_/
3
+ | | / // // /|_/ / / / / __/ / / / ,<
4
+ | |/ // // / / / /_/ / /___/ /___/ /| |
5
+ |___/___/_/ /_/_____/_____/\____/_/ |_|
6
+
7
+ ___ __ _____ ____ ___ _ ______________ __ _______
8
+ / _ \/ / / / _ \/ __/ / _ | | /| / / __/ __/ __ \/ |/ / __/
9
+ / ___/ /_/ / , _/ _/ / __ | |/ |/ / _/_\ \/ /_/ / /|_/ / _/
10
+ /_/ \____/_/|_/___/ /_/ |_|__/|__/___/___/\____/_/ /_/___/
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+ slide 001