html-renderer 0.0.4 → 0.0.6

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: ef89dd4c00345deca8c54a7ac62823dd8a506a0f941186cdd6d82ebd51ae7d47
4
- data.tar.gz: 4a2fd1e8b670ff87fd63b7e94a7e50af7bd66e73f94bb48b197b9f8374b8d196
3
+ metadata.gz: 54c85f9f2a8247cdcbb871a115deaad908928b9fb11464fcf44264b4f1c42427
4
+ data.tar.gz: 1123629514b87e11b368f8e752e0ec7f0c31ec22b7e0d190ab9e67818f9b2ba9
5
5
  SHA512:
6
- metadata.gz: b0dd0122febdc3018b1d2d1f38cd6fc19c23e2495989b6b8ccca1f5e7cf096d159a38aa85fdb600f48767d75827ce6f025282a9b0a206e74aa93c60e5c02bedc
7
- data.tar.gz: 8164fb8d54a3f2895bb288d32eb9e03716ff8bd3a40b68382385c499cae363c1d0ff685f77abeac96a83c0b313edfd9c9c3b013173d878ac46b155b28b84466c
6
+ metadata.gz: 9b1b284109ca1625e37d4b2806c518dc3de53d66bd69feca6c48017ab5b3c3c9a9fd0fc0f01073d048df2abf5474252398c08e3e9437a8e9b6c3f3cb76690d41
7
+ data.tar.gz: e32329999296b0f1825f1e0a0ca683ae5504c16d4a07ed81b95a5386e425b31f8fab9ad4969fc219f024be5d77bac0a02a9ba5a583cb399a0ca13c680dce5828
data/.gemspec CHANGED
@@ -18,5 +18,6 @@ Gem::Specification.new do |s|
18
18
 
19
19
  s.add_dependency "oga", "~> 2"
20
20
  s.add_dependency "terminal-table", "~> 1.8"
21
+ s.add_dependency "term-ansicolor", "~> 1.7"
21
22
  # s.add_development "ansi", "~> 1"
22
23
  end
data/TODO.md ADDED
@@ -0,0 +1,12 @@
1
+ # TODO list
2
+
3
+ ## Base class
4
+
5
+ * #render takes options (and passes them to subclasses)
6
+ * :debug option (hide parse errors unless 'true')
7
+
8
+ ## ANSI renderer
9
+
10
+ * :wrap option (with optional terminal width)
11
+ * Better table renderer (with line-drawing)
12
+ * Follow `<table>` style attributes when drawing tables (eg: borders)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.6
@@ -1 +1,6 @@
1
1
  require 'html-renderer/base'
2
+
3
+ module HTMLRenderer
4
+ autoload :ANSI, 'html-renderer/ansi'
5
+ autoload :Text, 'html-renderer/text'
6
+ end
@@ -0,0 +1,182 @@
1
+ # require 'html-renderer'
2
+ require 'ansi/mixin'
3
+ require 'terminal-table'
4
+ require 'coderay'
5
+
6
+ module HTMLRenderer::ANSIStrings
7
+ refine String do
8
+ include ANSI::Mixin
9
+ def grey; self.black.bold; end
10
+ end
11
+ end
12
+
13
+ class HTMLRenderer::ANSI < HTMLRenderer::Base
14
+
15
+ using HTMLRenderer::ANSIStrings
16
+
17
+ private
18
+
19
+ def indented?(text)
20
+ indent_sizes = text.lines.map{ |line| if line =~ /^(\s+)/ then $1 else '' end }.map(&:size)
21
+ indent_sizes.all? {|dent| dent > 0 }
22
+ end
23
+
24
+ def unwrap(text)
25
+ return text unless indented? text
26
+ text.lines.to_a.map(&:strip).join ' '
27
+ end
28
+
29
+ def indent(text,amount=2)
30
+ text.lines.map{|line| " "*amount + line }.join
31
+ end
32
+
33
+ def smash(s)
34
+ s&.downcase&.scan(/\w+/)&.join
35
+ end
36
+
37
+
38
+ public
39
+
40
+ def normal_text(text)
41
+ text
42
+ end
43
+
44
+ def underline(content)
45
+ content.magenta.bold
46
+ end
47
+
48
+ def superscript(content)
49
+ "^(#{content})"
50
+ end
51
+
52
+ def link(link, title, content)
53
+ unless content&.[] /^Back /
54
+ str = ""
55
+ # str += "<15>#{content}</15>" if content
56
+ str += content.white.bold if content
57
+ if smash(link) != smash(content)
58
+ # str += " <8>(</8><11>#{link}</11><8>)</8>"
59
+ str += " #{"(".grey}#{link.cyan.bold}#{")".grey}"
60
+ end
61
+
62
+ str
63
+ end
64
+ end
65
+
66
+ def anchor(name, title=nil, content=nil)
67
+ result = "Anchor: ##{name}"
68
+ result << " (#{title})" if title
69
+ result << "\n"
70
+ result << "#{content}\n" if content
71
+ result
72
+ end
73
+
74
+ def image(link, title, content)
75
+ link(link, nil, title)
76
+ end
77
+
78
+ def italic(text)
79
+ text.yellow.bold
80
+ end
81
+
82
+ def block_code(code, language)
83
+ language ||= :ruby
84
+
85
+ language = language[1..-1] if language[0] == "." # strip leading "."
86
+ language = :cpp if language == "C++"
87
+
88
+ require 'coderay'
89
+ "#{indent CodeRay.scan(code, language).term, 4}\n"
90
+ end
91
+
92
+ def block_quote(text)
93
+ indent paragraph(text)
94
+ end
95
+
96
+ def codespan(code)
97
+ code.cyan
98
+ end
99
+
100
+ def header(title, level, anchor=nil)
101
+ bar = ("-"*(title.size+4)).grey
102
+
103
+ title = case level
104
+ when 1 then title.bold.yellow
105
+ when 2 then title.bold.cyan
106
+ when 3 then title.bold.blue
107
+ else title.magenta
108
+ end
109
+
110
+ "#{bar}\n #{title}\n#{bar}\n\n"
111
+ end
112
+
113
+ def double_emphasis(text)
114
+ text.bold.green
115
+ end
116
+
117
+ def emphasis(text)
118
+ text.green
119
+ end
120
+
121
+ def linebreak
122
+ "\n"
123
+ end
124
+
125
+ def paragraph(text)
126
+ div(text) + "\n"
127
+ end
128
+
129
+ def div(text)
130
+ "#{indented?(text) ? text : unwrap(text)}\n"
131
+ end
132
+
133
+ def list(content, list_type)
134
+ case list_type
135
+ when :ordered
136
+ @counter = 0
137
+ "#{content}\n"
138
+ when :unordered
139
+ "#{content}\n"
140
+ end
141
+ end
142
+
143
+ def list_item(content, list_type)
144
+ case list_type
145
+ when :ordered
146
+ @counter ||= 0
147
+ @counter += 1
148
+ # " <8>#{@counter}.</8> #{content.strip}\n".colorize
149
+ " #{@counter.to_s.grey}. #{content.strip}\n"
150
+ when :unordered
151
+ # " <8>*</8> #{content.strip}\n".colorize
152
+ " #{"*".grey} #{content.strip}\n"
153
+ end
154
+ end
155
+
156
+ def definition_list(defs)
157
+ defs.each do |dt, dd|
158
+ puts "<15>#{dt}<7>:".colorize
159
+ puts " #{dd}"
160
+ puts
161
+ end
162
+ end
163
+
164
+ def table(header, rows)
165
+ if header
166
+ table = Terminal::Table.new(headings: header, rows: rows)
167
+ else
168
+ table = Terminal::Table.new(rows: rows)
169
+ end
170
+ "#{table}\n\n"
171
+ end
172
+
173
+ def separator
174
+ "_____________________________\n\n"
175
+ end
176
+
177
+ end
178
+
179
+
180
+ if __FILE__ == $0
181
+ puts HTMLRenderer::ANSI.render(open(ARGV.first || "test.html"))
182
+ end
@@ -0,0 +1,72 @@
1
+ # require 'html-renderer'
2
+
3
+ #
4
+ # Everything-stripping renderer.
5
+ #
6
+ class HTMLRenderer::Text < HTMLRenderer::Base
7
+ # Methods where the first argument is the text content
8
+ [
9
+ # block-level calls
10
+ :block_code, :block_quote,
11
+ :block_html, :list, :list_item,
12
+
13
+ # span-level calls
14
+ :autolink, :codespan, :double_emphasis,
15
+ :emphasis, :underline, :raw_html,
16
+ :triple_emphasis, :strikethrough,
17
+ :superscript, :highlight,
18
+
19
+ # footnotes
20
+ :footnotes, :footnote_def, :footnote_ref,
21
+
22
+ # low level rendering
23
+ :entity, :normal_text
24
+ ].each do |method|
25
+ define_method method do |*args|
26
+ args.first
27
+ end
28
+ end
29
+
30
+ # Other methods where we don't return only a specific argument
31
+ def link(link, title, content)
32
+ "#{content} (#{link})"
33
+ end
34
+
35
+ def image(link, title, content)
36
+ content &&= content + " "
37
+ "#{content}#{link}"
38
+ end
39
+
40
+ def div(text)
41
+ text + "\n"
42
+ end
43
+
44
+ def paragraph(text)
45
+ div(text) + "\n"
46
+ end
47
+
48
+ def separator
49
+ "______________________\n\n"
50
+ end
51
+
52
+ def header(text, header_level)
53
+ text + "\n"
54
+ end
55
+
56
+ def table(header, body)
57
+ "#{header}#{body}"
58
+ end
59
+
60
+ def table_row(content)
61
+ content + "\n"
62
+ end
63
+
64
+ def table_cell(content, alignment)
65
+ content + "\t"
66
+ end
67
+ end
68
+
69
+
70
+ if __FILE__ == $0
71
+ puts HTMLRenderer::Text.render(open("test.html"))
72
+ end
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.4
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - epitron
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-05 00:00:00.000000000 Z
11
+ date: 2019-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oga
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: term-ansicolor
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.7'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.7'
41
55
  description: Easily implement an HTML renderer by creating a subclass and adding some
42
56
  methods, similar to RedCarpet. (Examples are included for rendering HTML to ANSI
43
57
  and plain text.)
@@ -53,6 +67,7 @@ files:
53
67
  - LICENSE
54
68
  - README.md
55
69
  - Rakefile
70
+ - TODO.md
56
71
  - VERSION
57
72
  - bin/html2ansi
58
73
  - examples/ansi_renderer.rb
@@ -60,8 +75,10 @@ files:
60
75
  - examples/plain_text_renderer.rb
61
76
  - examples/test.html
62
77
  - lib/html-renderer.rb
78
+ - lib/html-renderer/ansi.rb
63
79
  - lib/html-renderer/base.rb
64
80
  - lib/html-renderer/html_parser.rb
81
+ - lib/html-renderer/text.rb
65
82
  homepage: http://github.com/epitron/html-renderer/
66
83
  licenses:
67
84
  - WTFPL
@@ -81,8 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
81
98
  - !ruby/object:Gem::Version
82
99
  version: '0'
83
100
  requirements: []
84
- rubyforge_project:
85
- rubygems_version: 2.7.7
101
+ rubygems_version: 3.0.3
86
102
  signing_key:
87
103
  specification_version: 4
88
104
  summary: HTML Renderer