vic 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.
- data/lib/vic.rb +7 -2
- data/lib/vic/colorscheme.rb +76 -27
- data/lib/vic/colorscheme/highlight.rb +64 -0
- data/lib/vic/colorscheme/highlight/argument.rb +31 -0
- data/lib/vic/colorscheme/highlight/argument_set.rb +30 -0
- data/lib/vic/colorscheme/highlight_set.rb +19 -0
- metadata +6 -3
- data/lib/vic/highlight.rb +0 -34
data/lib/vic.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
1
3
|
module Vic
|
2
|
-
VERSION = '0.0.
|
4
|
+
VERSION = '0.0.3'
|
3
5
|
end
|
4
6
|
|
5
7
|
require 'vic/colorscheme'
|
6
|
-
require 'vic/highlight'
|
8
|
+
require 'vic/colorscheme/highlight'
|
9
|
+
require 'vic/colorscheme/highlight_set'
|
10
|
+
require 'vic/colorscheme/highlight/argument'
|
11
|
+
require 'vic/colorscheme/highlight/argument_set'
|
data/lib/vic/colorscheme.rb
CHANGED
@@ -1,20 +1,31 @@
|
|
1
1
|
module Vic
|
2
2
|
class Colorscheme
|
3
|
-
attr_accessor :colors_name
|
3
|
+
attr_accessor :colors_name, :information
|
4
4
|
|
5
|
+
# A new instance of Colorscheme. If a block is given with no arguments, the
|
6
|
+
# the block will be evaluated in the context of the new colorscheme.
|
7
|
+
# Otherwise the block will yield self.
|
8
|
+
#
|
9
|
+
# @param [String] colors_name the name of the colorscheme
|
10
|
+
# @param [Proc] block the block to be evaluated
|
11
|
+
# @return [Colorscheme]
|
5
12
|
def initialize(colors_name, &block)
|
6
13
|
@colors_name = colors_name
|
7
|
-
|
14
|
+
if block_given?
|
15
|
+
block.arity == 0 ? instance_eval(&block) : yield(self)
|
16
|
+
end
|
8
17
|
end
|
9
18
|
|
10
|
-
#
|
19
|
+
# Returns/sets the information attribute
|
11
20
|
#
|
12
|
-
# @
|
13
|
-
|
14
|
-
|
21
|
+
# @param [Hash] information the information, :author => 'Joel Holdbrooks'
|
22
|
+
# @return [Hash]
|
23
|
+
def information(inf={})
|
24
|
+
(@information ||= {}).merge!(inf) if inf.respond_to? :merge
|
15
25
|
end
|
26
|
+
alias_method :info, :information
|
16
27
|
|
17
|
-
#
|
28
|
+
# Returns the background color.
|
18
29
|
#
|
19
30
|
# @return [String] 'light' or 'dark'
|
20
31
|
def background
|
@@ -36,7 +47,7 @@ module Vic
|
|
36
47
|
# @return[String] the background attribute
|
37
48
|
def background!
|
38
49
|
@background =
|
39
|
-
if
|
50
|
+
if normal = highlights.find_by_group('Normal')
|
40
51
|
return 'dark' unless color = normal.guibg
|
41
52
|
color.partition('#').last.to_i(16) <= 8421504 ? 'dark' : 'light'
|
42
53
|
else
|
@@ -44,32 +55,68 @@ module Vic
|
|
44
55
|
end
|
45
56
|
end
|
46
57
|
|
47
|
-
# Returns the set of highlights
|
48
|
-
|
49
|
-
|
50
|
-
def highlights
|
51
|
-
@highlights ||= []
|
58
|
+
# Returns the set of highlights for the colorscheme
|
59
|
+
def highlight_set
|
60
|
+
@highlight_set ||= HighlightSet.new
|
52
61
|
end
|
62
|
+
alias_method :highlights, :highlight_set
|
53
63
|
|
54
|
-
#
|
55
|
-
#
|
56
|
-
#
|
64
|
+
# Creates a new highlight or updates one if it exists.
|
65
|
+
#
|
66
|
+
# If inside of a language block the langauge name is automatcially prepended
|
67
|
+
# to the group name of the new highlight.
|
57
68
|
#
|
58
|
-
# @see
|
59
|
-
# @return [
|
60
|
-
def highlight(
|
61
|
-
|
62
|
-
|
69
|
+
# @see Vic::Highlight
|
70
|
+
# @return [Vic::Highlight] the new highlight
|
71
|
+
def highlight(group, args={})
|
72
|
+
hilight = highlight_set.find_by_group(group)
|
73
|
+
no_args = args.empty?
|
74
|
+
|
75
|
+
if not hilight and no_args
|
76
|
+
return
|
77
|
+
elsif hilight and no_args
|
78
|
+
return hilight
|
79
|
+
elsif hilight
|
80
|
+
hilight.update_arguments!(args)
|
81
|
+
else
|
82
|
+
hilight = Highlight.new("#{language}#{group}", args)
|
83
|
+
highlight_set.add(hilight)
|
84
|
+
end
|
85
|
+
|
86
|
+
hilight
|
63
87
|
end
|
64
88
|
alias_method :hi, :highlight
|
65
89
|
|
66
|
-
|
90
|
+
# Sets the current language to name. Any new highlights created will have
|
91
|
+
# the language name automatically prepended.
|
92
|
+
#
|
93
|
+
# @return [String] the new language name
|
94
|
+
def language=(name)
|
67
95
|
@language = name
|
68
|
-
yield if block_given?
|
69
|
-
@language = nil
|
70
96
|
end
|
71
97
|
|
72
|
-
#
|
98
|
+
# Returns the current language or temporarily sets the language to name if
|
99
|
+
# a block is given. If a block is given with no arguments, it will be
|
100
|
+
# evaluated in the context of the colorscheme, otherwise it will yield the
|
101
|
+
# colorscheme.
|
102
|
+
#
|
103
|
+
# @param [String,Symbol] name the name of the language
|
104
|
+
# @param [Proc] block the block to be evalauted
|
105
|
+
# @return [String] the current language
|
106
|
+
def language(name=nil, &block)
|
107
|
+
if @language and not name
|
108
|
+
return @language
|
109
|
+
elsif name and block_given?
|
110
|
+
previous_language = self.language
|
111
|
+
self.language = name
|
112
|
+
block.arity == 0 ? instance_eval(&block) : yield(self)
|
113
|
+
self.language = previous_language
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
# Returns the colorscheme header.
|
118
|
+
#
|
119
|
+
# @return [String] the colorscheme header
|
73
120
|
def header
|
74
121
|
<<-EOT.gsub(/^ {6}/, '')
|
75
122
|
" Vim color file
|
@@ -87,9 +134,11 @@ module Vic
|
|
87
134
|
EOT
|
88
135
|
end
|
89
136
|
|
90
|
-
#
|
137
|
+
# Returns the colorscheme as a string
|
138
|
+
#
|
139
|
+
# @return [String] the colorscheme
|
91
140
|
def write
|
92
|
-
[header, highlights.map
|
141
|
+
[header, highlights.map(&:write)].join("\n")
|
93
142
|
end
|
94
143
|
end
|
95
144
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Vic
|
2
|
+
class Colorscheme::Highlight
|
3
|
+
attr_accessor :group
|
4
|
+
|
5
|
+
# Creates an instance of Vic::Colorscheme::Highlight. Uses
|
6
|
+
# `update_arguments!` to set the arguments.
|
7
|
+
#
|
8
|
+
# @param [String] group the group name, 'Normal', 'Function', etc.
|
9
|
+
# @param [Hash] args the arguments to set
|
10
|
+
# @return [Vic::Colorscheme::Highlight] the new highlight
|
11
|
+
def initialize(group, args={})
|
12
|
+
@group = group
|
13
|
+
update_arguments!(args)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Returns and/or sets an argument for the current highlight.
|
17
|
+
#
|
18
|
+
# @param [String,Symbol] the argument key
|
19
|
+
# @param [String,Array,nil] the values to assign to the argument key
|
20
|
+
# @return [String,Symbol,Array,nil] the value of the argument key
|
21
|
+
def method_missing(key, *args)
|
22
|
+
super unless key =~ (/([a-z]+)=?/) and Argument.is_valid?($1)
|
23
|
+
lookup = $1.to_s
|
24
|
+
argument = argument_set.find_by_key(lookup)
|
25
|
+
args = args.first if args.first.respond_to? :chr
|
26
|
+
|
27
|
+
if not argument and args.empty?
|
28
|
+
return
|
29
|
+
elsif argument and not args.empty?
|
30
|
+
argument.arg = args
|
31
|
+
elsif argument and args.empty?
|
32
|
+
return argument.arg
|
33
|
+
elsif not args.empty?
|
34
|
+
argument = Argument.new(lookup, args)
|
35
|
+
arguments.add argument
|
36
|
+
end
|
37
|
+
argument.arg
|
38
|
+
end
|
39
|
+
|
40
|
+
# Updates/sets the current highlight's arguments.
|
41
|
+
#
|
42
|
+
# @param [Hash] args the arguments to update/set, `:guibg => '#333333'`
|
43
|
+
# @return [Vic::Colorscheme::Highlight::ArgumentSet] the updated argument set
|
44
|
+
def update_arguments!(args={})
|
45
|
+
args.each {|key, val| send("#{key}=", val)}
|
46
|
+
arguments
|
47
|
+
end
|
48
|
+
|
49
|
+
# Returns the set of arguments for the given highlight
|
50
|
+
#
|
51
|
+
# @return [Vic::Colorscheme::Highlight::ArgumentSet] the argument set
|
52
|
+
def argument_set
|
53
|
+
@argument_set ||= ArgumentSet.new
|
54
|
+
end
|
55
|
+
alias_method :arguments, :argument_set
|
56
|
+
|
57
|
+
# Writes the highlight contents.
|
58
|
+
#
|
59
|
+
# @return [String] the highlight as a string
|
60
|
+
def write
|
61
|
+
"hi #{group} #{arguments.sort_by_key.map(&:write).join(' ')}"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Vic
|
2
|
+
class Colorscheme::Highlight::Argument
|
3
|
+
VALID = {
|
4
|
+
:normal_terminal => %w{term start stop},
|
5
|
+
:color_terminal => %w{cterm ctermfg ctermbg},
|
6
|
+
:gui => %w{gui guifg guibg guisp font}
|
7
|
+
}
|
8
|
+
|
9
|
+
attr_accessor :key, :arg
|
10
|
+
|
11
|
+
def initialize(key, arg)
|
12
|
+
@key, @arg = key, arg
|
13
|
+
end
|
14
|
+
|
15
|
+
# The argument as a string
|
16
|
+
#
|
17
|
+
# @return [String,nil] the string if argument has been set
|
18
|
+
def write
|
19
|
+
return unless arg
|
20
|
+
"#{key}=#{arg.respond_to?(:join) ? arg.join(',') : arg}"
|
21
|
+
end
|
22
|
+
|
23
|
+
# Checks if `key` is valid vim key for an argument
|
24
|
+
#
|
25
|
+
# @param [String,Symbol]
|
26
|
+
# @return [true,false] the key is valid
|
27
|
+
def self.is_valid?(key)
|
28
|
+
VALID.values.flatten.include?(key.to_s)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Vic
|
2
|
+
class Colorscheme::Highlight::ArgumentSet < Set
|
3
|
+
# Adds a new argument to the set
|
4
|
+
#
|
5
|
+
# @param [Colorscheme::Highlight::Argument] argument the argument to add
|
6
|
+
# @return [Colorscheme::Highlight::ArgumentSet] the new set of arguments
|
7
|
+
def add(argument)
|
8
|
+
if argument.respond_to? :arg
|
9
|
+
super(argument)
|
10
|
+
else
|
11
|
+
# Raise an Exception
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Finds an argument by a key.
|
16
|
+
#
|
17
|
+
# @param [String,Symbol] key the key to search for
|
18
|
+
# @return [Colorscheme::Highlight::Argument,nil] the new argument
|
19
|
+
def find_by_key(key)
|
20
|
+
find {|a| a.key.to_s == key.to_s }
|
21
|
+
end
|
22
|
+
|
23
|
+
# Sorts the arguments by key name
|
24
|
+
#
|
25
|
+
# @return [Colorscheme::Highlight::ArgumentSet] the sorted set of arguments
|
26
|
+
def sort_by_key
|
27
|
+
sort {|a, b| a.key <=> b.key}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Vic
|
2
|
+
class Colorscheme::HighlightSet < Set
|
3
|
+
# Adds a highlight to the set.
|
4
|
+
#
|
5
|
+
# @param [Colorscheme::Highlight] highlight the highlight to add
|
6
|
+
# @return [Colorscheme::HighlightSet] the updated set of highlights
|
7
|
+
def add(highlight)
|
8
|
+
if highlight.respond_to?(:group)
|
9
|
+
super(highlight)
|
10
|
+
else
|
11
|
+
# Raise and Exception
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def find_by_group(group)
|
16
|
+
find {|h| h.group == group }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-09 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
14
|
description: Create Vim colorschemes with Ruby
|
15
15
|
email: cjholdbrooks@gmail.com
|
@@ -19,7 +19,10 @@ extra_rdoc_files: []
|
|
19
19
|
files:
|
20
20
|
- lib/vic.rb
|
21
21
|
- lib/vic/colorscheme.rb
|
22
|
-
- lib/vic/highlight.rb
|
22
|
+
- lib/vic/colorscheme/highlight.rb
|
23
|
+
- lib/vic/colorscheme/highlight_set.rb
|
24
|
+
- lib/vic/colorscheme/highlight/argument.rb
|
25
|
+
- lib/vic/colorscheme/highlight/argument_set.rb
|
23
26
|
homepage: https://github.com/noprompt/vic
|
24
27
|
licenses: []
|
25
28
|
post_install_message:
|
data/lib/vic/highlight.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
module Vic
|
2
|
-
class Highlight
|
3
|
-
VALID_ARGS = {
|
4
|
-
:normal_terminal => %w{term start stop},
|
5
|
-
:color_terminal => %w{cterm ctermfg ctermbg},
|
6
|
-
:gui => %w{gui guifg guibg guisp font}
|
7
|
-
}
|
8
|
-
|
9
|
-
attr_accessor :group_name, *VALID_ARGS.values.flatten
|
10
|
-
|
11
|
-
def initialize(group_name, args={})
|
12
|
-
@group_name = group_name
|
13
|
-
|
14
|
-
args.each {|arg, val| send("#{arg}=", val) if respond_to? arg }
|
15
|
-
end
|
16
|
-
|
17
|
-
def write
|
18
|
-
"hi #{group_name} #{arguments}" unless arguments.empty?
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def arguments
|
24
|
-
valid_arguments.map do |arg|
|
25
|
-
val = send(arg)
|
26
|
-
"#{arg}=#{val}" unless val.nil? or val.empty?
|
27
|
-
end.compact.join(' ')
|
28
|
-
end
|
29
|
-
|
30
|
-
def valid_arguments
|
31
|
-
VALID_ARGS.values.flatten
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|