code_rippa 0.0.4 → 0.0.5
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/bin/code_rippa +7 -11
- data/code_rippa.gemspec +2 -0
- data/lib/code_rippa.rb +183 -26
- data/lib/code_rippa/uv_overrides.rb +2 -0
- data/lib/code_rippa/version.rb +1 -1
- metadata +34 -2
data/bin/code_rippa
CHANGED
@@ -13,22 +13,18 @@ option_parser = OptionParser.new do |opts|
|
|
13
13
|
|
14
14
|
Usage: code_rippa [options] input_file_or_directory
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
Parses input_file or directory and outputs a file named out.tex.
|
17
|
+
It expects both the syntax and theme to be specified.
|
18
18
|
|
19
19
|
Example:
|
20
20
|
|
21
|
-
|
21
|
+
code_rippa -s ruby -t amy path_to_file.rb
|
22
22
|
|
23
|
-
|
23
|
+
Renders the contents of path_to_file.rb into out.tex.
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
pdflatex out.tex
|
28
|
-
|
29
|
-
to generate the PDF output.
|
25
|
+
Then run `pdflatex out.tex` to generate the PDF output.
|
30
26
|
|
31
|
-
|
27
|
+
"-s" and "-t" are mandatory. The rest are optional.
|
32
28
|
|
33
29
|
Options:
|
34
30
|
END
|
@@ -59,7 +55,7 @@ END
|
|
59
55
|
exit 0
|
60
56
|
end
|
61
57
|
|
62
|
-
opts.on('-
|
58
|
+
opts.on('-v', '--version', 'Display version number') do
|
63
59
|
puts CodeRippa::VERSION
|
64
60
|
exit 0
|
65
61
|
end
|
data/code_rippa.gemspec
CHANGED
data/lib/code_rippa.rb
CHANGED
@@ -2,34 +2,77 @@ require 'uv'
|
|
2
2
|
require 'find'
|
3
3
|
require 'code_rippa/uv_overrides'
|
4
4
|
require 'code_rippa/version'
|
5
|
+
require 'ansi/progressbar'
|
6
|
+
require 'rainbow'
|
7
|
+
include ANSI
|
5
8
|
|
6
|
-
|
9
|
+
|
10
|
+
YAML::ENGINE.yamler = 'syck'
|
7
11
|
|
8
12
|
module CodeRippa
|
9
|
-
|
13
|
+
|
14
|
+
@@supported_syntax = nil
|
15
|
+
@@supported_ext = nil
|
16
|
+
|
17
|
+
# Parses the given file, and writes the output file (out.tex)
|
18
|
+
# into the current directory.
|
19
|
+
#
|
20
|
+
# path - The file path
|
21
|
+
# syntax - The syntax to perform parsing/syntax highlighting.
|
22
|
+
# Note the the syntax should be supported by code_rippa.
|
23
|
+
# excluded_exts - An Array of extensions to ignore during parsing.
|
24
|
+
#
|
25
|
+
# Examples
|
26
|
+
#
|
27
|
+
# rip_dir("~/code/ruby/some_folder/some_file.rb", "space_cadet", "ruby", [])
|
28
|
+
#
|
29
|
+
# Returns nothing.
|
10
30
|
def self.rip_file(path, theme, syntax)
|
11
31
|
begin
|
12
32
|
srcfile = File.read(path)
|
13
33
|
src_ext = File.extname(path)[1..-1]
|
14
|
-
|
34
|
+
outfile = File.open('out.tex', 'w')
|
15
35
|
outfile.write preamble theme
|
16
36
|
outfile.write "\\textcolor{headingcolor}{\\textbf{\\texttt{#{path.gsub('_','\_').gsub('%','\%')}}}}\\\\\n"
|
17
37
|
outfile.write "\\textcolor{headingcolor}{\\rule{\\linewidth}{1.0mm}}\\\\\n"
|
18
38
|
outfile.write Uv.parse(srcfile, 'latex', syntax, true, theme)
|
19
39
|
outfile.write endtag
|
40
|
+
|
41
|
+
msg = "Completed successfully.\n".color(:green)
|
42
|
+
msg << "Output file written to: "
|
43
|
+
msg << "#{File.expand_path(outfile)}\n".color(:yellow)
|
44
|
+
msg << "Now run "
|
45
|
+
msg << "pdflatex #{File.expand_path(outfile)} ".color(:red)
|
46
|
+
msg << "** TWICE ** to generate PDF."
|
47
|
+
puts msg
|
20
48
|
outfile.close
|
21
49
|
rescue Exception => e
|
22
50
|
puts e
|
23
51
|
end
|
24
52
|
end
|
25
53
|
|
54
|
+
# Parses the given directory, and writes the output file (out.tex)
|
55
|
+
# into the current directory.
|
56
|
+
#
|
57
|
+
# dir_path - The directory path
|
58
|
+
# syntax - The syntax to perform parsing/syntax highlighting.
|
59
|
+
# Note the the syntax should be supported by code_rippa.
|
60
|
+
# excluded_exts - An Array of extensions to ignore during parsing.
|
61
|
+
#
|
62
|
+
# Examples
|
63
|
+
#
|
64
|
+
# rip_dir("~/code/ruby/some_folder", "space_cadet", "ruby", [])
|
65
|
+
#
|
66
|
+
# Returns nothing.
|
26
67
|
def self.rip_dir(dir_path, theme, syntax, excluded_exts = [])
|
27
|
-
|
28
|
-
|
29
|
-
outfile.
|
30
|
-
|
68
|
+
pbar = Progressbar.new("Rippin'".color(:blue), Dir["**/*"].length)
|
69
|
+
counter = 0
|
70
|
+
outfile = File.open('out.tex', 'w')
|
71
|
+
|
72
|
+
outfile.write preamble theme
|
73
|
+
Find.find dir_path do |path|
|
31
74
|
depth = path.to_s.count('/')
|
32
|
-
if File.basename(path)[0] == ?.
|
75
|
+
if File.basename(path)[0] == ?. or File.basename(path) == "out.tex"
|
33
76
|
Find.prune
|
34
77
|
else
|
35
78
|
begin
|
@@ -52,26 +95,60 @@ module CodeRippa
|
|
52
95
|
end
|
53
96
|
counter += 1
|
54
97
|
end
|
98
|
+
pbar.inc
|
55
99
|
end
|
100
|
+
|
56
101
|
outfile.write endtag
|
102
|
+
pbar.finish
|
103
|
+
|
104
|
+
msg = "Completed successfully.\n".color(:green)
|
105
|
+
msg << "Output file written to: "
|
106
|
+
msg << "#{File.expand_path(outfile)}\n".color(:yellow)
|
107
|
+
msg << "Now run "
|
108
|
+
msg << "pdflatex #{File.expand_path(outfile)} ".color(:red)
|
109
|
+
msg << "** TWICE ** to generate PDF."
|
110
|
+
puts msg
|
111
|
+
|
57
112
|
outfile.close
|
58
113
|
end
|
59
114
|
|
60
|
-
private
|
115
|
+
private
|
61
116
|
def self.syntax_path
|
62
117
|
Uv.syntax_path
|
63
118
|
end
|
64
119
|
|
120
|
+
# Returns an Array of supported syntaxes. This is done by parsing
|
121
|
+
# all the file names in the syntax folder.
|
122
|
+
#
|
123
|
+
# Examples
|
124
|
+
#
|
125
|
+
# supported_syntax
|
126
|
+
# # => ['ruby','prolog']
|
127
|
+
#
|
128
|
+
# Returns an Array of supported languages
|
65
129
|
def self.supported_syntax
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
130
|
+
if @@supported_syntax
|
131
|
+
@@supported_syntax
|
132
|
+
else
|
133
|
+
@@supported_syntax = []
|
134
|
+
Dir.foreach(syntax_path) do |f|
|
135
|
+
if File.extname(f) == ".syntax"
|
136
|
+
@@supported_syntax << File.basename(f, '.*')
|
137
|
+
end
|
70
138
|
end
|
139
|
+
@@supported_syntax
|
71
140
|
end
|
72
|
-
syntax
|
73
141
|
end
|
74
142
|
|
143
|
+
# Returns an Array of supported languages. This is done by parsing
|
144
|
+
# all the file names in the syntax folder.
|
145
|
+
#
|
146
|
+
# Examples
|
147
|
+
#
|
148
|
+
# supported_langs
|
149
|
+
# # => ['Ruby','Prolog']
|
150
|
+
#
|
151
|
+
# Returns an Array of supported languages
|
75
152
|
def self.supported_langs
|
76
153
|
langs = []
|
77
154
|
Dir.foreach(syntax_path) do |f|
|
@@ -82,39 +159,96 @@ module CodeRippa
|
|
82
159
|
end
|
83
160
|
langs
|
84
161
|
end
|
85
|
-
|
162
|
+
|
163
|
+
# Returns an Array of file extensions that is supported by code_rippa
|
164
|
+
#
|
165
|
+
# Examples
|
166
|
+
#
|
167
|
+
# supported_langs
|
168
|
+
# # => ['rb', 'Gemfile', 'erb']
|
169
|
+
#
|
170
|
+
# Returns an Array of supported extensions.
|
86
171
|
def self.supported_exts
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
172
|
+
if @@supported_ext
|
173
|
+
@@supported_ext
|
174
|
+
else
|
175
|
+
@@supported_ext = []
|
176
|
+
Dir.foreach(syntax_path) do |f|
|
177
|
+
if File.extname(f) == ".syntax"
|
178
|
+
y = YAML.load(File.read "#{syntax_path}/#{f}")
|
179
|
+
@@supported_ext += y["fileTypes"] if y["fileTypes"]
|
180
|
+
end
|
92
181
|
end
|
182
|
+
@@supported_ext
|
93
183
|
end
|
94
|
-
filetypes
|
95
184
|
end
|
96
185
|
|
186
|
+
# Returns True if path should be bookmarked in the output TEX/PDF document.
|
187
|
+
#
|
188
|
+
# path - The file/directory path
|
189
|
+
# syntax - The syntax to perform parsing/syntax highlighting.
|
190
|
+
# Note the the syntax should be supported by code_rippa.
|
191
|
+
# excluded_exts - An Array of extensions to ignore during parsing.
|
192
|
+
#
|
193
|
+
#
|
194
|
+
# Examples
|
195
|
+
#
|
196
|
+
# bookmarkable?("hello.rb", "ruby", [])
|
197
|
+
# # => true
|
198
|
+
#
|
199
|
+
# bookmarkable?("hello.rb", "ruby", ["rb", "html"])
|
200
|
+
# # => false
|
201
|
+
#
|
202
|
+
# bookmarkable?("hello.klingon", "klingon", [])
|
203
|
+
# # => false
|
204
|
+
#
|
205
|
+
# Returns True if path should be bookmarked.
|
97
206
|
def self.bookmarkable?(path, syntax, excluded_exts)
|
98
207
|
if FileTest.directory?(path)
|
99
208
|
true
|
100
209
|
else
|
101
210
|
src_ext = File.extname(path)[1..-1]
|
102
|
-
if
|
211
|
+
if File.basename(path) == "out.tex"
|
212
|
+
false
|
213
|
+
elsif excluded_exts.include?(src_ext)
|
103
214
|
false
|
104
215
|
elsif supported_exts.include?(src_ext)
|
105
|
-
|
216
|
+
true
|
106
217
|
else
|
107
|
-
|
218
|
+
false
|
108
219
|
end
|
109
220
|
end
|
110
221
|
end
|
111
|
-
|
222
|
+
|
223
|
+
# Returns True if path should be ripped as part of the output TEX file.
|
224
|
+
#
|
225
|
+
# path - The file. (directories will return false.)
|
226
|
+
# syntax - The syntax to perform parsing/syntax highlighting.
|
227
|
+
# Note the the syntax should be supported by code_rippa.
|
228
|
+
# excluded_exts - An Array of extensions to ignore during parsing.
|
229
|
+
#
|
230
|
+
#
|
231
|
+
# Examples
|
232
|
+
#
|
233
|
+
# rippable?("hello.rb", "ruby", [])
|
234
|
+
# # => true
|
235
|
+
#
|
236
|
+
# rippable?("~/code/", "ruby", [])
|
237
|
+
# # => false
|
238
|
+
#
|
239
|
+
# rippable?("hello.rb", "ruby", ["rb", "html"])
|
240
|
+
# # => false
|
241
|
+
#
|
242
|
+
# rippable?("hello.klingon", "klingon", [])
|
243
|
+
# # => false
|
244
|
+
#
|
245
|
+
# Returns true if path should be ripped.
|
112
246
|
def self.rippable?(path, syntax, excluded_exts)
|
113
247
|
if FileTest.directory?(path)
|
114
248
|
false
|
115
249
|
else
|
116
250
|
src_ext = File.extname(path)[1..-1]
|
117
|
-
|
251
|
+
if excluded_exts.include? src_ext
|
118
252
|
false
|
119
253
|
elsif supported_exts.include?(src_ext)
|
120
254
|
true
|
@@ -124,11 +258,34 @@ module CodeRippa
|
|
124
258
|
end
|
125
259
|
end
|
126
260
|
|
261
|
+
# Returns the hex color code of the page color. This is done by looking at
|
262
|
+
# the *.render file of the selected theme.
|
263
|
+
#
|
264
|
+
# theme - The selected theme.
|
265
|
+
#
|
266
|
+
# Examples
|
267
|
+
#
|
268
|
+
# page_color('moc')
|
269
|
+
# # => "E8E8E8"
|
270
|
+
#
|
271
|
+
# Returns an String containing the hex color code of the page.
|
127
272
|
def self.page_color(theme)
|
128
273
|
f = YAML.load(File.read("#{Uv.render_path}/latex/#{theme}.render"))
|
129
274
|
/([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})/.match(f['listing']['begin'].split('\\')[3]).to_s
|
130
275
|
end
|
131
276
|
|
277
|
+
# Returns the hex color code of the heading. This is done by looking at
|
278
|
+
# the *.render file of the selected theme. The heading is present at
|
279
|
+
# the top of each new document in the output TEX/PDF file.
|
280
|
+
#
|
281
|
+
# theme - The selected theme.
|
282
|
+
#
|
283
|
+
# Examples
|
284
|
+
#
|
285
|
+
# heading_color('moc')
|
286
|
+
# # => "E8E8E8"
|
287
|
+
#
|
288
|
+
# Returns an String containing the hex color code of the heading.
|
132
289
|
def self.heading_color(theme)
|
133
290
|
f = YAML.load(File.read("#{Uv.render_path}/latex/#{theme}.render"))
|
134
291
|
/([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})/.match(f['listing']['begin'].split('\\')[2]).to_s
|
data/lib/code_rippa/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: code_rippa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,40 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rainbow
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: ansi
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
14
46
|
- !ruby/object:Gem::Dependency
|
15
47
|
name: spox-ultraviolet
|
16
48
|
requirement: !ruby/object:Gem::Requirement
|