streamd 0.1.1 → 0.1.2

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: f7d09d7bc5fc26f5b937f33df629470fe644e65ec37eac5ad3f404f073c2d965
4
- data.tar.gz: e986df1f2328b74d549ad196f5224223f5cc40d027a08f15ce767e04a810342b
3
+ metadata.gz: 909a60cb7c94a3be4bfc208411b4a7810cbea58c4df421199df8ed6c0f18c8e5
4
+ data.tar.gz: b823befe344739cca97ac12c1fc8c91691f459909579075f3c4ccafa4659f002
5
5
  SHA512:
6
- metadata.gz: 7c6f0c80a6255c4f0af7c8b9a2806821b78774f5f19864cc610edc989c0c0d9212cb4041cd01b28866126ea38d6242070377dca79fd907508d254c12a526a453
7
- data.tar.gz: 2f52dc5f3edb2a0ec61363449906c1a2574df78cdd293d5c43ee5105ecba460d6a8dd54dba23a859e0abd6d1bcabdedea35244c7baa101393287cd5edacdeb31
6
+ metadata.gz: 23b3bb576c8831349e680764ef425c5768ed11a4334a27f4cf36fcdedd6a8d96266c84b8b5efae9387b35df0867d299733cb432caf268963f9635bd1dfb777a2
7
+ data.tar.gz: 7dc597b74da4ee53e38c1ae9b93f575ab5faa7e0c93c2c81806f98d8aee5b33e5271e3621f9ef3fcfa78f13b8516c51d9e112655237ac8e95856f146e6530e77
@@ -0,0 +1,126 @@
1
+ require 'terminal-table'
2
+ require 'redcarpet'
3
+ require 'delegate'
4
+
5
+ module Streamd
6
+ class FixedStyle < SimpleDelegator
7
+ VERTICALS = [' '] * 3
8
+ HORIZONTALS = ['─'] * 6
9
+ def vertical; VERTICALS; end
10
+ def horizontal(_); HORIZONTALS; end
11
+ end
12
+
13
+ class Renderer < Redcarpet::Render::Base
14
+
15
+ # ANSI color codes
16
+ BOLD = "\033[1m"
17
+ DIM = "\033[2m"
18
+ ITALIC = "\033[3m"
19
+ UNDERLINE = "\033[4m"
20
+ STRIKETHROUGH = "\033[9m"
21
+
22
+ # Colors
23
+ GRAY = "\033[90m"
24
+
25
+ # Reset
26
+ RESET = "\033[0m"
27
+
28
+ class << self
29
+ def create
30
+ Redcarpet::Markdown.new(self,
31
+ tables: true, fenced_code_blocks: true,
32
+ space_after_headers: true, no_intra_emphasis: true
33
+ )
34
+ end
35
+ end
36
+
37
+ def table(header, body)
38
+ Terminal::Table.new do |t|
39
+ t.headings = header[1..-1].split('|')
40
+ t.rows = body.split("\n").map{|row| row[1..-1].split('|')}
41
+ t.style = { :border_top => false, :border_bottom => false }
42
+ t.instance_variable_set(:@style, FixedStyle.new(t.style))
43
+ end.to_s + "\n\n"
44
+ end
45
+
46
+ def table_row(content)
47
+ "#{content}\n"
48
+ end
49
+
50
+ def table_cell(content, alignment, header = false)
51
+ "|#{content.strip}"
52
+ end
53
+
54
+ def codespan(code)
55
+ "\e[38;2;80;250;123m#{code}#{RESET}"
56
+ end
57
+
58
+ def double_emphasis(text)
59
+ "\e[38;2;255;184;108;1m#{text}#{RESET}"
60
+ end
61
+
62
+ def emphasis(text)
63
+ "\e[38;2;255;184;108;1m#{text}#{RESET}"
64
+ end
65
+
66
+ def image(link, title, alt_text)
67
+ alt_text ||= ""
68
+ "#{GRAY}[image: #{alt_text}]#{RESET}"
69
+ end
70
+
71
+ def linebreak
72
+ "\n"
73
+ end
74
+
75
+ def link(link, title, content)
76
+ "\e[38;2;255;121;198m#{content}#{RESET}\e[38;2;139;233;253;4m#{UNDERLINE}#{link}#{RESET}"
77
+ end
78
+
79
+ def raw_html(raw_html)
80
+ raw_html
81
+ end
82
+
83
+ def triple_emphasis(text)
84
+ "#{BOLD}#{ITALIC}#{UNDERLINE}#{text}#{RESET}"
85
+ end
86
+
87
+ def strikethrough(text)
88
+ "#{STRIKETHROUGH}#{text}#{RESET}"
89
+ end
90
+
91
+ def superscript(text)
92
+ # Superscript approximation using superscript Unicode characters
93
+ mapping = {
94
+ '0' => '⁰', '1' => '¹', '2' => '²', '3' => '³', '4' => '⁴',
95
+ '5' => '⁵', '6' => '⁶', '7' => '⁷', '8' => '⁸', '9' => '⁹',
96
+ '+' => '⁺', '-' => '⁻', '=' => '⁼', '(' => '⁽', ')' => '⁾'
97
+ }
98
+ text.each_char.map { |c| mapping[c] || c }.join
99
+ end
100
+
101
+ def underline(text)
102
+ "#{UNDERLINE}#{text}#{RESET}"
103
+ end
104
+
105
+ def highlight(text)
106
+ "#{BOLD}#{text}#{RESET}"
107
+ end
108
+
109
+ def quote(text)
110
+ "#{ITALIC}#{text}#{RESET}"
111
+ end
112
+
113
+ def footnote_ref(number)
114
+ "#{DIM}[#{number}]#{RESET}"
115
+ end
116
+
117
+ # Low level rendering
118
+ def entity(text)
119
+ text
120
+ end
121
+
122
+ def normal_text(text)
123
+ text
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,3 @@
1
+ module Streamd
2
+ VERSION = "0.1.2"
3
+ end
data/lib/streamd.rb CHANGED
@@ -1,12 +1,12 @@
1
1
  require 'tty-live'
2
2
  require 'glamour'
3
+ require 'streamd/renderer'
3
4
 
4
5
  module Streamd
5
- VERSION = "0.1.1"
6
-
7
6
  def self.print(stream)
8
7
  whole = ""
9
8
  live = TTY::Live.new
9
+ renderer = Renderer.create
10
10
 
11
11
  enum = Enumerator.new do |e|
12
12
  in_code_block = false
@@ -28,18 +28,42 @@ module Streamd
28
28
  end
29
29
  end
30
30
 
31
+ # name = 0
31
32
  current = ""
32
33
  enum.each do |chunk, neo|
33
34
  current << chunk
34
- styled = Glamour.render(current, style: 'dracula', width: 180, preserve_newlines: true)
35
+ styled =
36
+ if current =~ /^\|/
37
+ renderer.render(current)
38
+ else
39
+ Glamour.render(current, style: 'dracula', width: 180, preserve_newlines: true)
40
+ end
41
+
42
+ styled =
43
+ case
44
+ when current =~ /\A```/
45
+ " " + styled.gsub(/\A[\s\n]*(\e\[[0-9;]*m[\s\n]*\e\[0m[\s\n]*)+/m, '').gsub(/(\e\[[0-9;]*m[\s\n]*\e\[0m[\s\n]*)+[\s\n]*\Z/m, '').strip
46
+ when current =~ /\A\*\*\*/ || current =~ /\A---/ || current =~ /\A___/
47
+ styled.gsub(/\e\[[0-9;]*m[\s\n]*\e\[0m/m, '').strip
48
+ when current =~ /^\|/
49
+ styled.each_line.map{|l| " #{l}"}.join
50
+ else
51
+ " " + styled.gsub(/\e\[[0-9;]*m[\s\n]*\e\[0m/m, '').strip
52
+ end
53
+
54
+
55
+ # File.open("/tmp/streamd.#{name}.txt", 'w'){|f| f.puts styled}
35
56
  live.update(styled)
36
57
  if neo
37
- Kernel.print live.clear_lines(2)
58
+ # name += 1
59
+ puts "\n\n"
38
60
  live = TTY::Live.new
39
61
  current.clear
40
62
  end
41
63
  end
42
64
 
65
+ puts "\n\n"
66
+
43
67
  whole
44
68
  end
45
69
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: streamd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - c
@@ -23,6 +23,34 @@ dependencies:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
25
  version: 0.2.2
26
+ - !ruby/object:Gem::Dependency
27
+ name: redcarpet
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: 3.6.1
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 3.6.1
40
+ - !ruby/object:Gem::Dependency
41
+ name: terminal-table
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: 4.0.0
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: 4.0.0
26
54
  - !ruby/object:Gem::Dependency
27
55
  name: tty-live
28
56
  requirement: !ruby/object:Gem::Requirement
@@ -47,6 +75,8 @@ files:
47
75
  - README.md
48
76
  - Rakefile
49
77
  - lib/streamd.rb
78
+ - lib/streamd/renderer.rb
79
+ - lib/streamd/version.rb
50
80
  homepage: https://github.com/kill-2/streamd
51
81
  licenses:
52
82
  - MIT