pptxt 0.2.5 → 0.3.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9094d1beceb39792aa47ec1c66d936e6a183284b
4
- data.tar.gz: 6ad4dbc734f1d2a6f5819a7a1a17590583aadc07
3
+ metadata.gz: 99b2795bb271e491d3bbb26302ef6b341703d10e
4
+ data.tar.gz: 60446a3049884f34f742a4af348a1b740db8e791
5
5
  SHA512:
6
- metadata.gz: bae0e59541f0ce05895dbb03c3058a44954cd3b03cca63c06d98cd82e84bc5f43bf936c2d1388173554281db25bd6480a6a970dd36697224dc7f555dcd65a8cd
7
- data.tar.gz: 5e1a79703ec7ea72d86f96966c2aaeb796ec53146c9a3a795969e7711f2161697dae4d53fae0c6a6b1ded27319a8b03ec64a6b500fcb389df6ec6e970d541872
6
+ metadata.gz: b6d16dedcbd36c8879a90f462edd1f1cc47680b6b292ec504ce7b7f6d05f85e0fc8067cc33effb2b0c63d23e104e38a907e35582aae42fb577b961c11b82adf1
7
+ data.tar.gz: e39933584b5a43c330218589bfbd6b94755ba3e374f5385fc1373793f8da9cccc0e226ca7d52092b9f0585051d4efd2227fc498e1fe1c42e094dc894c819d11e
data/bin/pptxt CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require "colorize"
3
4
  require "io/wait"
4
5
  require "optparse"
5
6
  require "pathname"
@@ -11,7 +12,7 @@ class PPtxtExit
11
12
  INVALID_ARGUMENT = 2
12
13
  MISSING_ARGUMENT = 3
13
14
  EXTRA_ARGUMENTS = 4
14
- FILE_DOES_NOT_EXIST = 5
15
+ EXCEPTION = 5
15
16
  end
16
17
 
17
18
  def parse(args)
@@ -20,6 +21,7 @@ def parse(args)
20
21
  options["git"] = false
21
22
  options["pptx"] = nil
22
23
  options["slideshow"] = false
24
+ options["verbose"] = false
23
25
 
24
26
  parser = OptionParser.new do |opts|
25
27
  opts.banner = "Usage: #{File.basename($0)} [OPTIONS] <pptx>"
@@ -58,6 +60,14 @@ def parse(args)
58
60
  opts.on("-s", "--slideshow", "Display as slideshow") do
59
61
  options["slideshow"] = true
60
62
  end
63
+
64
+ opts.on(
65
+ "-v",
66
+ "--verbose",
67
+ "Show backtrace when error occurs"
68
+ ) do
69
+ options["verbose"] = true
70
+ end
61
71
  end
62
72
 
63
73
  begin
@@ -84,15 +94,8 @@ def parse(args)
84
94
  exit PPtxtExit::EXTRA_ARGUMENTS
85
95
  end
86
96
 
87
- if (!Pathname.new(args[0]).expand_path.exist?)
88
- puts "#{args[0]} does not exist!"
89
- exit PPtxtExit::FILE_DOES_NOT_EXIST
90
- end
91
-
92
97
  options["pptx"] = args[0].strip
93
- if (options["pptx"] == "/dev/null")
94
- exit PPtxtExit::GOOD
95
- end
98
+ exit PPtxtExit::GOOD if (options["pptx"] == "/dev/null")
96
99
 
97
100
  return options
98
101
  end
@@ -100,59 +103,83 @@ end
100
103
  # Parse CLI args
101
104
  options = parse(ARGV)
102
105
 
103
- # Get slides
104
- slides = PPtxt.new(options["pptx"]).slides
106
+ begin
107
+ # Get slides
108
+ slides = PPtxt.new(options["pptx"]).slides
109
+
110
+ if (!options["slideshow"])
111
+ # Loop through slides
112
+ slides.each do |slide|
113
+ if (options["detailed"])
114
+ puts slide.detailed
115
+ elsif (options["git"])
116
+ puts slide.diffable
117
+ puts
118
+ else
119
+ puts slide
120
+ puts
121
+ end
122
+ end
123
+ else
124
+ quit = false
125
+ count = 0
126
+
127
+ while (!quit)
128
+ slide = slides[count]
105
129
 
106
- if (!options["slideshow"])
107
- # Loop through slides
108
- slides.each do |slide|
109
- if (options["detailed"])
110
- puts slide.detailed
111
- elsif (options["git"])
112
- puts slide.diffable
130
+ # Make it human readable and parse
131
+ system("clear")
113
132
  puts
114
- else
115
133
  puts slide
116
134
  puts
117
- end
118
- end
119
- else
120
- quit = false
121
- count = 0
122
-
123
- while (!quit)
124
- slide = slides[count]
125
-
126
- # Make it human readable and parse
127
- system("clear")
128
- puts
129
- puts slide
130
- puts
131
- puts "j:Next k:Previous q:Quit"
132
-
133
- answer = nil
134
- while (!answer)
135
- begin
136
- system("stty raw -echo")
137
- if $stdin.ready?
138
- answer = $stdin.getc.chr
139
- else
140
- sleep 0.1
135
+ puts "j:Next k:Previous q:Quit"
136
+
137
+ answer = nil
138
+ while (!answer)
139
+ begin
140
+ system("stty raw -echo")
141
+ if $stdin.ready?
142
+ answer = $stdin.getc.chr
143
+ else
144
+ sleep 0.1
145
+ end
146
+ ensure
147
+ system("stty -raw echo")
141
148
  end
142
- ensure
143
- system("stty -raw echo")
149
+ end
150
+ puts
151
+
152
+ case answer
153
+ when "j", "J"
154
+ count += 1 if (count < (slides.length - 1))
155
+ when "k", "K"
156
+ count -= 1 if (count > 0)
157
+ when "q", "Q", "\x03"
158
+ # Quit or ^C
159
+ quit = true
144
160
  end
145
161
  end
146
- puts
147
-
148
- case answer
149
- when "j", "J"
150
- count += 1 if (count < (slides.length - 1))
151
- when "k", "K"
152
- count -= 1 if (count > 0)
153
- when "q", "Q", "\x03"
154
- # Quit or ^C
155
- quit = true
162
+ end
163
+ rescue Interrupt
164
+ # ^C
165
+ # Exit gracefully
166
+ rescue Errno::EPIPE
167
+ # Do nothing. This can happen if piping to another program such as
168
+ # less. Usually if less is closed before we're done with STDOUT.
169
+ rescue PPtxt::Error => e
170
+ puts e.message
171
+ exit PPtxtExit::EXCEPTION
172
+ rescue Exception => e
173
+ $stderr.puts "Oops! Looks like an error has occured! Maybe the " \
174
+ "message below will help. If not, you can use the " \
175
+ "--verbose flag to get a backtrace.".word_wrap
176
+
177
+ $stderr.puts e.message.white.on_red
178
+ if (options["verbose"])
179
+ e.backtrace.each do |line|
180
+ $stderr.puts line.light_yellow
156
181
  end
157
182
  end
183
+ exit PPtxtExit::EXCEPTION
158
184
  end
185
+ exit PPtxtExit::GOOD
@@ -0,0 +1,7 @@
1
+ require "pptxt/error"
2
+
3
+ class PPtxt::Error::FileNotFound < PPtxt::Error
4
+ def initialize(file)
5
+ super("File not found: #{file}")
6
+ end
7
+ end
data/lib/pptxt/error.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  class PPtxt::Error < RuntimeError
2
2
  end
3
3
 
4
- require "pptxt/error/missing_dependency_error"
5
- require "pptxt/error/unknown_xml_error"
4
+ require "pptxt/error/file_not_found"
5
+ require "pptxt/error/missing_dependency"
6
+ require "pptxt/error/unknown_xml"
data/lib/pptxt/slide.rb CHANGED
@@ -1,5 +1,3 @@
1
- require "pptxt/error/unknown_xml_error"
2
-
3
1
  class PPtxt::PPtxtSlide
4
2
  def detailed
5
3
  ret = Array.new
data/lib/pptxt.rb CHANGED
@@ -47,13 +47,15 @@ class PPtxt
47
47
  end
48
48
 
49
49
  def create_slides
50
- slides = %x(
51
- unzip -l "#{@pptx}" | \grep -E "ppt/slides/[^_]" |
52
- awk '{print $4}' | sort -k 1.17n
53
- ).split("\n")
50
+ if (ScoobyDoo.where_are_you("unzip").nil?)
51
+ raise PPtxt::Error::MissingDependency.new("unzip")
52
+ end
54
53
 
55
54
  count = 0
56
- slides.each do |slide|
55
+ %x(
56
+ unzip -l "#{@pptx}" | \grep -E "ppt/slides/[^_]" |
57
+ awk '{print $4}' | sort -k 1.17n
58
+ ).split("\n").each do |slide|
57
59
  xml = %x(unzip -qc "#{@pptx}" #{slide}).gsub("<", "\n<")
58
60
  count += 1
59
61
  @slides.push(PPtxtSlide.new(xml, count))
@@ -62,13 +64,12 @@ class PPtxt
62
64
  private :create_slides
63
65
 
64
66
  def initialize(pptx)
65
- @pptx = pptx
66
- @slides = Array.new
67
-
68
- if (ScoobyDoo.where_are_you("unzip").nil?)
69
- raise PPtxt::Error::MissingDependency.new("unzip")
67
+ if (!Pathname.new(pptx).expand_path.exist?)
68
+ raise PPtxt::Error::FileNotFound.new(pptx)
70
69
  end
71
70
 
71
+ @pptx = pptx
72
+ @slides = Array.new
72
73
  create_slides
73
74
  end
74
75
  end
data/lib/string.rb ADDED
@@ -0,0 +1,12 @@
1
+ # Modify String class to allow for rsplit and word wrap
2
+ class String
3
+ def rsplit(pattern)
4
+ ret = rpartition(pattern)
5
+ ret.delete_at(1)
6
+ return ret
7
+ end
8
+
9
+ def word_wrap(width = 80)
10
+ return scan(/\S.{0,#{width}}\S(?=\s|$)|\S+/).join("\n")
11
+ end
12
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pptxt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miles Whittaker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-06 00:00:00.000000000 Z
11
+ date: 2016-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -62,9 +62,11 @@ files:
62
62
  - bin/pptxt
63
63
  - lib/pptxt.rb
64
64
  - lib/pptxt/error.rb
65
- - lib/pptxt/error/missing_dependency_error.rb
66
- - lib/pptxt/error/unknown_xml_error.rb
65
+ - lib/pptxt/error/file_not_found.rb
66
+ - lib/pptxt/error/missing_dependency.rb
67
+ - lib/pptxt/error/unknown_xml.rb
67
68
  - lib/pptxt/slide.rb
69
+ - lib/string.rb
68
70
  homepage: https://mjwhitta.github.io/pptxt
69
71
  licenses:
70
72
  - GPL-3.0