hylite 1.0.0 → 1.1.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 +4 -4
- data/lib/hylite/choose_hyliter.rb +3 -26
- data/lib/hylite/cli.rb +0 -4
- data/lib/hylite/hyliters.rb +34 -0
- data/lib/hylite/version.rb +1 -1
- data/spec/binary_spec.rb +2 -2
- data/spec/choose_hyliter.rb +10 -25
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d62665fa2a24a184b51d5ab4bf55882c323885f9
|
4
|
+
data.tar.gz: 3dcd0bdeb8cbc8a5cd1fb0f947e8fb4104e5e96e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cfe3816c2a24afc19906855b85cc10b91cfea1340e45ad6555c6c3ecf673d72d28fb330bda9f0633eaac1635cb88a0b135cea25eb78f450bb728b8f9b3c7cdcb
|
7
|
+
data.tar.gz: 63d935be6b66b5c4a142756a9ea23db326229df3b69602db1b0b2661307e02bda17e64407ce3973391d7ab893dedb53fb943b5bc3913e30cb731b74d029aa18b
|
@@ -4,33 +4,10 @@ require 'hylite/hyliters'
|
|
4
4
|
class Hylite
|
5
5
|
module ChooseHyliter
|
6
6
|
extend self
|
7
|
-
|
8
7
|
def call(code, lang)
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
when coderay_available? then CodeRay.new(code, lang)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def rouge_available?
|
17
|
-
require 'rouge'
|
18
|
-
true
|
19
|
-
rescue LoadError
|
20
|
-
false
|
21
|
-
end
|
22
|
-
|
23
|
-
def pygments_available?
|
24
|
-
ENV['PATH'].split(File::PATH_SEPARATOR).any? do |dir|
|
25
|
-
File.exist? File.join(dir, 'pygmentize')
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def coderay_available?
|
30
|
-
require 'rouge'
|
31
|
-
true
|
32
|
-
rescue LoadError
|
33
|
-
false
|
8
|
+
Rouge.new?( code, lang) ||
|
9
|
+
Pygments.new?(code, lang) ||
|
10
|
+
CodeRay.new?( code, lang)
|
34
11
|
end
|
35
12
|
end
|
36
13
|
end
|
data/lib/hylite/cli.rb
CHANGED
data/lib/hylite/hyliters.rb
CHANGED
@@ -2,19 +2,38 @@ require 'open3'
|
|
2
2
|
|
3
3
|
class Hylite
|
4
4
|
class Hyliter
|
5
|
+
def self.new?(code, lang)
|
6
|
+
return nil unless available?
|
7
|
+
new code, lang
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.available?
|
11
|
+
raise NotImplementedError, 'Subclass should define'
|
12
|
+
end
|
13
|
+
|
5
14
|
attr_reader :code, :lang
|
15
|
+
|
6
16
|
def initialize(code, lang)
|
7
17
|
@code, @lang = code, lang
|
8
18
|
end
|
19
|
+
|
9
20
|
def type
|
10
21
|
raise NotImplementedError, 'Subclass should define'
|
11
22
|
end
|
12
23
|
end
|
13
24
|
|
14
25
|
class Rouge < Hyliter
|
26
|
+
def self.available?
|
27
|
+
require 'rouge'
|
28
|
+
true
|
29
|
+
rescue LoadError
|
30
|
+
false
|
31
|
+
end
|
32
|
+
|
15
33
|
def type
|
16
34
|
:rouge
|
17
35
|
end
|
36
|
+
|
18
37
|
def call
|
19
38
|
# From Fish, you can see all styles with:
|
20
39
|
# for style in (rougify help style | tail -1 | tr -d ' ' | tr , \n); echo \n===== $style =====; rougify highlight -t $style -l ruby bin/hylite ; end
|
@@ -27,9 +46,16 @@ class Hylite
|
|
27
46
|
end
|
28
47
|
|
29
48
|
class Pygments < Hyliter
|
49
|
+
def self.available?
|
50
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).any? do |dir|
|
51
|
+
File.exist? File.join(dir, 'pygmentize')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
30
55
|
def type
|
31
56
|
:pygments
|
32
57
|
end
|
58
|
+
|
33
59
|
def call
|
34
60
|
# From Fish, you can see all styles with:
|
35
61
|
# for style in (pygmentize -L styles | sed -n '/\*/s/[*: ]//gp'); echo \n===== $style =====; pygmentize -f terminal256 -O style=$style -l ruby < lib/hylite.rb ; end
|
@@ -46,9 +72,17 @@ class Hylite
|
|
46
72
|
end
|
47
73
|
|
48
74
|
class CodeRay < Hyliter
|
75
|
+
def self.available?
|
76
|
+
require 'coderay'
|
77
|
+
true
|
78
|
+
rescue LoadError
|
79
|
+
false
|
80
|
+
end
|
81
|
+
|
49
82
|
def type
|
50
83
|
:coderay
|
51
84
|
end
|
85
|
+
|
52
86
|
def call
|
53
87
|
::CodeRay.encode(code, lang, :terminal)
|
54
88
|
end
|
data/lib/hylite/version.rb
CHANGED
data/spec/binary_spec.rb
CHANGED
@@ -98,8 +98,8 @@ RSpec.describe 'binaries' do
|
|
98
98
|
expect(stdout).to_not be_empty
|
99
99
|
end
|
100
100
|
|
101
|
-
specify '
|
102
|
-
stdout, stderr, status = Open3.capture3 '
|
101
|
+
specify 'hilight_syntax: warns you to use hylite, but still works' do
|
102
|
+
stdout, stderr, status = Open3.capture3 'hilight_syntax', stdin_data: '1+1'
|
103
103
|
expect(stderr).to match /hylite/
|
104
104
|
expect(status).to be_success
|
105
105
|
expect(stdout).to_not be_empty
|
data/spec/choose_hyliter.rb
CHANGED
@@ -2,47 +2,32 @@ require 'hylite/choose_hyliter'
|
|
2
2
|
require 'rouge'
|
3
3
|
|
4
4
|
RSpec.describe 'ChooseHyliter' do
|
5
|
-
|
5
|
+
def assert_hilights!(name, unavailable:[])
|
6
|
+
Array(unavailable).each do |klass|
|
7
|
+
allow(klass).to receive(:new?).and_return(nil)
|
8
|
+
end
|
6
9
|
|
7
|
-
it 'uses rouge if available' do
|
8
10
|
hyliter = Hylite::ChooseHyliter.call("#a { color: #FFF; }" , "css")
|
9
|
-
expect(hyliter.type).to eq
|
11
|
+
expect(hyliter.type).to eq name
|
10
12
|
|
11
13
|
hylited = hyliter.call
|
12
14
|
expect(hyliter.call).to include 'FFF'
|
13
15
|
expect(hyliter.call).to include "\e[" # an escape sequence in there somewhere
|
14
16
|
end
|
15
17
|
|
18
|
+
it 'uses rouge if available' do
|
19
|
+
assert_hilights! :rouge
|
20
|
+
end
|
16
21
|
|
17
22
|
it 'does not use rouge if it does not support the requested language'
|
18
23
|
|
19
|
-
|
20
24
|
it 'uses pygments if rouge, isn\'t available' do
|
21
|
-
|
22
|
-
|
23
|
-
hyliter = Hylite::ChooseHyliter.call("#a { color: #FFF; }" , "css")
|
24
|
-
expect(hyliter.type).to eq :pygments
|
25
|
-
|
26
|
-
hylited = hyliter.call
|
27
|
-
expect(hyliter.call).to include 'FFF'
|
28
|
-
expect(hyliter.call).to include "\e[" # an escape sequence in there somewhere
|
25
|
+
assert_hilights! :pygments, unavailable: [Hylite::Rouge]
|
29
26
|
end
|
30
27
|
|
31
|
-
|
32
28
|
it 'uses coderay if rouge and pygmentize aren\'t available' do
|
33
|
-
|
34
|
-
allow(File).to receive(:exist?).and_return(false)
|
35
|
-
allow(Hylite::ChooseHyliter).to receive(:require).with('rouge').and_raise(LoadError)
|
36
|
-
allow(Hylite::ChooseHyliter).to receive(:require).with('coderay').and_return(true)
|
37
|
-
|
38
|
-
hyliter = Hylite::ChooseHyliter.call("#a { color: #FFF; }" , "css")
|
39
|
-
expect(hyliter.type).to eq :coderay
|
40
|
-
|
41
|
-
hylited = hyliter.call
|
42
|
-
expect(hyliter.call).to include 'FFF'
|
43
|
-
expect(hyliter.call).to include "\e[" # an escape sequence in there somewhere
|
29
|
+
assert_hilights! :coderay, unavailable: [Hylite::Rouge, Hylite::Pygments]
|
44
30
|
end
|
45
31
|
|
46
|
-
|
47
32
|
it 'tells you how to install these other libs if none of them are available'
|
48
33
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hylite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Cheek
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|