html-renderer 0.0.2 → 0.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4d2be4cf32a612a0e2fa528a0d50e85df36f732e40c408ed3183b6a041c60558
4
- data.tar.gz: 1500874bc627082bf07f2e0912ba5b2020cad6987cd9cd29c4add0abe0e5d0db
3
+ metadata.gz: 3bbe90456ebf54ed08a1d78e5056fa82a4ccc68e6487cd9fce72f807669464e8
4
+ data.tar.gz: 2106840d7e1b57aedaced18c6cf122d928f6ce6def84cf191c8c4d84373750da
5
5
  SHA512:
6
- metadata.gz: eda1c880bebd51ed462ca2c07fcec4abfcb80cc30cc9b16b2c7366d4abc46637f3d3f778d36689e3cb6472b60fa28fda2282fea64c49262f6a4246c45468d2d9
7
- data.tar.gz: 26dec9aa2c27f6356101c92ed5aabf164249aaec89a99febbb55ecbd4aafe9db1e44d9e914344b49f4919f501cd01d568427f48e267db353d4d7952ba9f36b25
6
+ metadata.gz: ca6fda95a4b8d7ae62310d2600486420f2d239e443474068e00953e86d3c61e20680651c2b59d688aa4e9e73884bd98db131bbf053597d993d508e37dba9fe00
7
+ data.tar.gz: 7bea3114914af7a5122adad1e74b0beb44a7d2cc5658f88b056aae1b1ac1b37180999b774151e7def45e4f6d6e2b276c05259009721d250a96aa4fcf21351f53
data/.gemspec CHANGED
@@ -12,9 +12,11 @@ Gem::Specification.new do |s|
12
12
  s.email = "chris@ill-logic.com"
13
13
  s.authors = ["epitron"]
14
14
 
15
- s.files = `git ls`.lines.map(&:strip)
15
+ s.files = `git ls`.lines.map(&:strip)
16
+ s.executables = ['html2ansi']
16
17
  s.extra_rdoc_files = ["README.md", "LICENSE"]
17
18
 
18
19
  s.add_dependency "oga", "~> 2"
19
- s.add_development_dependency "ansi", "~> 1"
20
+ s.add_dependency "terminal-table", "~> 1.8"
21
+ # s.add_development "ansi", "~> 1"
20
22
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
@@ -0,0 +1,245 @@
1
+ #!/usr/bin/env ruby
2
+ #######################################################################################
3
+ require 'html-renderer'
4
+ require 'terminal-table'
5
+ require 'term/ansicolor'
6
+ require 'coderay'
7
+ #######################################################################################
8
+
9
+ class String
10
+ # include ANSI::Mixin
11
+ include Term::ANSIColor
12
+
13
+ def grey; self.black.bold; end
14
+ end
15
+
16
+ #######################################################################################
17
+
18
+ def lesspipe(*args)
19
+ if args.any? and args.last.is_a?(Hash)
20
+ options = args.pop
21
+ else
22
+ options = {}
23
+ end
24
+
25
+ output = args.first if args.any?
26
+
27
+ params = []
28
+ params << "-R" unless options[:color] == false
29
+ params << "-S" unless options[:wrap] == true
30
+ params << "-F" unless options[:always] == true
31
+ if options[:tail] == true
32
+ params << "+\\>"
33
+ $stderr.puts "Seeking to end of stream..."
34
+ end
35
+ params << "-X"
36
+
37
+ IO.popen("less #{params * ' '}", "w") do |less|
38
+ if output
39
+ less.puts output
40
+ else
41
+ yield less
42
+ end
43
+ end
44
+ rescue Errno::EPIPE, Interrupt
45
+ # less just quit -- eat the exception.
46
+ end
47
+
48
+ #######################################################################################
49
+
50
+ class ANSIRenderer < HTMLRenderer::Base
51
+
52
+ private
53
+
54
+ def indented?(text)
55
+ indent_sizes = text.lines.map{ |line| if line =~ /^(\s+)/ then $1 else '' end }.map(&:size)
56
+ indent_sizes.all? {|dent| dent > 0 }
57
+ end
58
+
59
+ def unwrap(text)
60
+ return text unless indented? text
61
+ text.lines.to_a.map(&:strip).join ' '
62
+ end
63
+
64
+ def indent(text,amount=2)
65
+ text.lines.map{|line| " "*amount + line }.join
66
+ end
67
+
68
+ def smash(s)
69
+ s&.downcase&.scan(/\w+/)&.join
70
+ end
71
+
72
+
73
+ public
74
+
75
+ def normal_text(text)
76
+ text
77
+ end
78
+
79
+ def underline(content)
80
+ content.magenta.bold
81
+ end
82
+
83
+ def superscript(content)
84
+ "^(#{content})"
85
+ end
86
+
87
+ def link(link, title, content)
88
+ unless content&.[] /^Back /
89
+ str = ""
90
+ # str += "<15>#{content}</15>" if content
91
+ str += content.white.bold if content
92
+ if smash(link) != smash(content)
93
+ # str += " <8>(</8><11>#{link}</11><8>)</8>"
94
+ str += " #{"(".grey}#{link&.cyan&.bold}#{")".grey}"
95
+ end
96
+
97
+ str
98
+ end
99
+ end
100
+
101
+ def anchor(name, title=nil, content=nil)
102
+ result = "Anchor: ##{name}"
103
+ result << " (#{title})" if title
104
+ result << "\n"
105
+ result << "#{content}\n" if content
106
+ result
107
+ end
108
+
109
+ def image(link, title, content)
110
+ link(link, nil, title)
111
+ end
112
+
113
+ def italic(text)
114
+ text.yellow.bold
115
+ end
116
+
117
+ def block_code(code, language)
118
+ language ||= :ruby
119
+
120
+ language = language[1..-1] if language[0] == "." # strip leading "."
121
+ language = :cpp if language == "C++"
122
+
123
+ require 'coderay'
124
+ "#{indent CodeRay.scan(code, language).term, 4}\n"
125
+ end
126
+
127
+ def block_quote(text)
128
+ indent paragraph(text)
129
+ end
130
+
131
+ def codespan(code)
132
+ code.cyan
133
+ end
134
+
135
+ def header(title, level, anchor=nil)
136
+ bar = ("-"*(title.size+4)).grey
137
+
138
+ title = case level
139
+ when 1 then title.bold.yellow
140
+ when 2 then title.bold.cyan
141
+ when 3 then title.bold.blue
142
+ else title.purple
143
+ end
144
+
145
+ "#{bar}\n #{title}\n#{bar}\n\n"
146
+ end
147
+
148
+ def double_emphasis(text)
149
+ text.bold.green
150
+ end
151
+
152
+ def emphasis(text)
153
+ text.green
154
+ end
155
+
156
+ def linebreak
157
+ "\n"
158
+ end
159
+
160
+ def paragraph(text)
161
+ div(text) + "\n"
162
+ end
163
+
164
+ def div(text)
165
+ "#{indented?(text) ? text : unwrap(text)}\n"
166
+ end
167
+
168
+ def list(content, list_type)
169
+ case list_type
170
+ when :ordered
171
+ @counter = 0
172
+ "#{content}\n"
173
+ when :unordered
174
+ "#{content}\n"
175
+ end
176
+ end
177
+
178
+ def list_item(content, list_type)
179
+ case list_type
180
+ when :ordered
181
+ @counter ||= 0
182
+ @counter += 1
183
+ # " <8>#{@counter}.</8> #{content.strip}\n".colorize
184
+ " #{@counter.to_s.grey}. #{content.strip}\n"
185
+ when :unordered
186
+ # " <8>*</8> #{content.strip}\n".colorize
187
+ " #{"*".grey} #{content.strip}\n"
188
+ end
189
+ end
190
+
191
+ def definition_list(defs)
192
+ defs.each do |dt, dd|
193
+ puts "<15>#{dt}<7>:".colorize
194
+ puts " #{dd}"
195
+ puts
196
+ end
197
+ end
198
+
199
+ def table(header, rows)
200
+ if header
201
+ table = Terminal::Table.new(headings: header, rows: rows)
202
+ else
203
+ table = Terminal::Table.new(rows: rows)
204
+ end
205
+ "#{table}\n\n"
206
+ end
207
+
208
+ def separator
209
+ "_____________________________\n\n"
210
+ end
211
+
212
+ end
213
+
214
+ #######################################################################################
215
+
216
+ def render(stream, paged=false)
217
+ output = ANSIRenderer.render(stream)
218
+ if paged
219
+ lesspipe { |less| less.puts output }
220
+ else
221
+ puts output
222
+ end
223
+ end
224
+
225
+ #######################################################################################
226
+
227
+ opts, args = ARGV.partition { |arg| arg[/^--?\w/] }
228
+
229
+ if opts.include?("-h") or opts.include?("--help")
230
+ puts "usage:"
231
+ puts " html2ansi [options] <file.html>"
232
+ puts " or"
233
+ puts " curl http://host/path.html | html2ansi [options]"
234
+ puts
235
+ puts "options:"
236
+ puts " -p Paged (redirect output to less)"
237
+ puts
238
+ else
239
+ paged = opts.include?("-p") or opts.include?("--paged")
240
+ if args.empty?
241
+ render($stdin, paged)
242
+ else
243
+ args.each { |arg| render(open(arg), paged) }
244
+ end
245
+ end
@@ -150,15 +150,17 @@ private
150
150
 
151
151
  when "html", "body", "nav", "span", "form", "label", "input", "button", "section", "fieldset",
152
152
  "menu", "article", "header", "time", "aside", "footer", "nobr", "wbr",
153
- "table", "tr", "td", "th", "thead", "tbody", "noscript", "select",
154
- "address"
153
+ "table", "tr", "td", "th", "tt", "thead", "tbody", "noscript", "select",
154
+ "address", "center"
155
155
  render_children(node, state)
156
156
 
157
157
  when "head", "script", "link", "style"
158
158
  # skip it
159
159
 
160
160
  else
161
- raise "Unrecognized HTML tag: #{node.name} -> #{node.inspect}"
161
+ # raise "Unrecognized HTML tag: #{node.name} -> #{node.inspect}"
162
+ $stderr.puts "Unrecognized HTML tag: #{node.name} -> #{node.inspect}"
163
+ render_children(node, state)
162
164
  end
163
165
 
164
166
  when Oga::XML::Comment
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: html-renderer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - epitron
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-22 00:00:00.000000000 Z
11
+ date: 2018-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oga
@@ -25,24 +25,25 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2'
27
27
  - !ruby/object:Gem::Dependency
28
- name: ansi
28
+ name: terminal-table
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1'
34
- type: :development
33
+ version: '1.8'
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1'
40
+ version: '1.8'
41
41
  description: Easily implement an HTML renderer by creating a subclass and adding some
42
42
  methods, similar to RedCarpet. (Examples are included for rendering HTML to ANSI
43
43
  and plain text.)
44
44
  email: chris@ill-logic.com
45
- executables: []
45
+ executables:
46
+ - html2ansi
46
47
  extensions: []
47
48
  extra_rdoc_files:
48
49
  - README.md
@@ -53,6 +54,7 @@ files:
53
54
  - README.md
54
55
  - Rakefile
55
56
  - VERSION
57
+ - bin/html2ansi
56
58
  - examples/ansi_renderer.rb
57
59
  - examples/debug_renderer.rb
58
60
  - examples/plain_text_renderer.rb
@@ -79,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
81
  version: '0'
80
82
  requirements: []
81
83
  rubyforge_project:
82
- rubygems_version: 2.7.6
84
+ rubygems_version: 2.7.7
83
85
  signing_key:
84
86
  specification_version: 4
85
87
  summary: HTML Renderer