ruco 0.2.0.beta2 → 0.2.0.beta3
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/Gemfile +3 -0
- data/Gemfile.lock +10 -0
- data/Rakefile +27 -10
- data/Readme.md +22 -26
- data/VERSION +1 -1
- data/bin/ruco +15 -6
- data/lib/ruco.rb +25 -0
- data/lib/ruco/application.rb +1 -1
- data/lib/ruco/array_processor.rb +53 -0
- data/lib/ruco/core_ext/object.rb +26 -0
- data/lib/ruco/core_ext/range.rb +9 -0
- data/lib/ruco/editor.rb +1 -0
- data/lib/ruco/editor/colors.rb +97 -0
- data/lib/ruco/editor_area.rb +1 -0
- data/lib/ruco/file_store.rb +23 -5
- data/lib/ruco/screen.rb +61 -7
- data/lib/ruco/style_map.rb +2 -2
- data/lib/ruco/syntax_parser.rb +33 -0
- data/lib/ruco/tm_theme.rb +46 -0
- data/lib/ruco/window.rb +19 -14
- data/playground/benchmark_syntax_parser.rb +23 -0
- data/ruco.gemspec +12 -21
- data/spec/fixtures/railscasts.tmTheme +369 -0
- data/spec/fixtures/slow.js +4 -0
- data/spec/fixtures/test.tmTheme +186 -0
- data/spec/ruco/array_processor_spec.rb +46 -0
- data/spec/ruco/core_ext/range_spec.rb +24 -0
- data/spec/ruco/editor_spec.rb +129 -11
- data/spec/ruco/file_store_spec.rb +45 -0
- data/spec/ruco/screen_spec.rb +39 -2
- data/spec/ruco/syntax_parser_spec.rb +74 -0
- data/spec/ruco/tm_theme_spec.rb +14 -0
- data/spec/spec_helper.rb +6 -2
- metadata +22 -28
data/lib/ruco/editor_area.rb
CHANGED
@@ -2,6 +2,7 @@ module Ruco
|
|
2
2
|
# everything that does not belong to a text-area
|
3
3
|
# but is needed for Ruco::Editor
|
4
4
|
class EditorArea < TextArea
|
5
|
+
include Ruco::Editor::Colors if defined? Ruco::Editor::Colors # only colorize if all color libs are loaded
|
5
6
|
include Ruco::Editor::LineNumbers
|
6
7
|
include Ruco::Editor::History
|
7
8
|
|
data/lib/ruco/file_store.rb
CHANGED
@@ -19,6 +19,28 @@ module Ruco
|
|
19
19
|
deserialize File.binary_read(file) if File.exist?(file)
|
20
20
|
end
|
21
21
|
|
22
|
+
def cache(key, &block)
|
23
|
+
value = get(key)
|
24
|
+
if value.nil?
|
25
|
+
value = yield
|
26
|
+
set(key, value)
|
27
|
+
end
|
28
|
+
value
|
29
|
+
end
|
30
|
+
|
31
|
+
def delete(key)
|
32
|
+
FileUtils.rm(file(key))
|
33
|
+
rescue Errno::ENOENT
|
34
|
+
end
|
35
|
+
|
36
|
+
def clear
|
37
|
+
FileUtils.rm_rf(@folder)
|
38
|
+
end
|
39
|
+
|
40
|
+
def file(key)
|
41
|
+
"#{@folder}/#{Digest::MD5.hexdigest(key)}.yml"
|
42
|
+
end
|
43
|
+
|
22
44
|
private
|
23
45
|
|
24
46
|
def entries
|
@@ -32,12 +54,8 @@ module Ruco
|
|
32
54
|
delete.each{|f| File.delete(f) }
|
33
55
|
end
|
34
56
|
|
35
|
-
def file(key)
|
36
|
-
"#{@folder}/#{Digest::MD5.hexdigest(key)}.yml"
|
37
|
-
end
|
38
|
-
|
39
57
|
def serialize(value)
|
40
|
-
Marshal.dump(value)
|
58
|
+
@options[:string] ? value : Marshal.dump(value)
|
41
59
|
end
|
42
60
|
|
43
61
|
def deserialize(value)
|
data/lib/ruco/screen.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module Ruco
|
2
2
|
class Screen
|
3
|
+
@@styles = {}
|
4
|
+
|
3
5
|
def initialize(options)
|
4
6
|
@options = options
|
5
7
|
@cache = []
|
@@ -10,12 +12,16 @@ module Ruco
|
|
10
12
|
end
|
11
13
|
|
12
14
|
def open(&block)
|
15
|
+
if $ruco_colors and ENV['TERM'] == 'xterm'
|
16
|
+
ENV['TERM'] += '-256color' # activate 256 colors
|
17
|
+
end
|
13
18
|
Curses.noecho # do not show typed chars
|
14
19
|
Curses.nonl # turn off newline translation
|
15
20
|
Curses.stdscr.keypad(true) # enable arrow keys
|
16
21
|
Curses.raw # give us all other keys
|
17
22
|
Curses.stdscr.nodelay = 1 # do not block -> we can use timeouts
|
18
23
|
Curses.init_screen
|
24
|
+
Curses.start_color if $ruco_colors and Curses.has_colors?
|
19
25
|
yield self
|
20
26
|
ensure
|
21
27
|
Curses.clear # needed to clear the menu/status bar on windows
|
@@ -88,14 +94,62 @@ module Ruco
|
|
88
94
|
yield # render the line
|
89
95
|
end
|
90
96
|
|
91
|
-
STYLES = {
|
92
|
-
:normal => 0,
|
93
|
-
:reverse => Curses::A_REVERSE
|
94
|
-
}
|
95
|
-
|
96
97
|
def self.curses_style(style)
|
97
|
-
|
98
|
-
|
98
|
+
@@styles[style] ||= begin
|
99
|
+
if $ruco_colors
|
100
|
+
foreground = $ruco_foreground || '#ffffff'
|
101
|
+
background = $ruco_background || '#000000'
|
102
|
+
|
103
|
+
foreground, background = if style == :normal
|
104
|
+
[foreground, background]
|
105
|
+
elsif style == :reverse
|
106
|
+
['#000000', '#ffffff']
|
107
|
+
else
|
108
|
+
# :red or [:red, :blue]
|
109
|
+
f,b = style
|
110
|
+
b ||= background
|
111
|
+
[f,b]
|
112
|
+
end
|
113
|
+
|
114
|
+
foreground = html_to_terminal_color(foreground)
|
115
|
+
background = html_to_terminal_color(background)
|
116
|
+
color_id(foreground, background)
|
117
|
+
else # no colors
|
118
|
+
if style == :reverse
|
119
|
+
Curses::A_REVERSE
|
120
|
+
else
|
121
|
+
Curses::A_NORMAL
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# create a new color from foreground+background or reuse old
|
128
|
+
# and return color-id
|
129
|
+
def self.color_id(foreground, background)
|
130
|
+
@@color_ids ||= {}
|
131
|
+
@@color_ids[[foreground, background]] ||= begin
|
132
|
+
# make a new pair with a unique id
|
133
|
+
@@max_color_id ||= 0
|
134
|
+
id = (@@max_color_id += 1)
|
135
|
+
unless defined? RSpec # stops normal text-output, do not use in tests
|
136
|
+
Curses::init_pair(id, foreground, background)
|
137
|
+
end
|
138
|
+
Curses.color_pair(id)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
COLOR_SOURCE_VALUES = 256
|
143
|
+
COLOR_TARGET_VALUES = 5
|
144
|
+
COLOR_DIVIDE = COLOR_SOURCE_VALUES / COLOR_TARGET_VALUES
|
145
|
+
TERM_COLOR_BASE = 16
|
146
|
+
|
147
|
+
def self.html_to_terminal_color(html_color)
|
148
|
+
return unless html_color
|
149
|
+
r = (html_color[1..2].to_i(16) / COLOR_DIVIDE) * 36
|
150
|
+
g = (html_color[3..4].to_i(16) / COLOR_DIVIDE) * 6
|
151
|
+
b = (html_color[5..6].to_i(16) / COLOR_DIVIDE) * 1
|
152
|
+
TERM_COLOR_BASE + r + g + b
|
99
153
|
end
|
100
154
|
end
|
101
155
|
end
|
data/lib/ruco/style_map.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Ruco
|
2
2
|
class StyleMap
|
3
|
-
attr_accessor :lines
|
3
|
+
attr_accessor :lines, :foreground, :background
|
4
4
|
|
5
5
|
def initialize(lines)
|
6
6
|
@lines = Array.new(lines)
|
@@ -20,7 +20,7 @@ module Ruco
|
|
20
20
|
@lines.map do |styles|
|
21
21
|
next unless styles
|
22
22
|
|
23
|
-
# change to style at start and
|
23
|
+
# change to style at start and recalculate one after the end
|
24
24
|
points_of_change = styles.map{|s,c| [c.first, c.last_element+1] }.flatten.uniq
|
25
25
|
|
26
26
|
flat = []
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Ruco
|
2
|
+
module SyntaxParser
|
3
|
+
# uv only offers certain syntax
|
4
|
+
UV_CONVERT = {
|
5
|
+
'scss' => 'sass',
|
6
|
+
'html+erb' => 'html_rails',
|
7
|
+
}
|
8
|
+
|
9
|
+
def self.syntax_for_lines(lines, languages)
|
10
|
+
if syntax = syntax_node(languages)
|
11
|
+
processor = syntax.parse(lines.join("\n"), Ruco::ArrayProcessor.new)
|
12
|
+
processor.lines
|
13
|
+
else
|
14
|
+
[]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.syntax_node(languages)
|
19
|
+
@@syntax_node ||= {}
|
20
|
+
@@syntax_node[languages] ||= begin
|
21
|
+
found = nil
|
22
|
+
fallbacks = languages.map{|l| UV_CONVERT[l] }.compact
|
23
|
+
|
24
|
+
(languages + fallbacks).detect do |language|
|
25
|
+
syntax = File.join(Uv.syntax_path, "#{language}.syntax")
|
26
|
+
found = Textpow::SyntaxNode.load(syntax) if File.exist?(syntax)
|
27
|
+
end
|
28
|
+
|
29
|
+
found
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'plist'
|
2
|
+
|
3
|
+
module Ruco
|
4
|
+
class TMTheme
|
5
|
+
attr_accessor :background, :foreground, :styles
|
6
|
+
|
7
|
+
# TODO maybe later...
|
8
|
+
#attr_accessor :name, :uuid, :comment, :line_highlight
|
9
|
+
|
10
|
+
# not supported in Curses ...
|
11
|
+
#attr_accessor :invisibles, :caret, :selection
|
12
|
+
|
13
|
+
def initialize(file)
|
14
|
+
raw = Plist.parse_xml(file)
|
15
|
+
raise "Theme not found in #{file}" unless raw
|
16
|
+
rules = raw['settings']
|
17
|
+
@styles = {}
|
18
|
+
|
19
|
+
# set global styles
|
20
|
+
global = rules.shift['settings']
|
21
|
+
self.background = global['background']
|
22
|
+
self.foreground = global['foreground']
|
23
|
+
|
24
|
+
# set scope styles
|
25
|
+
rules.each do |rules|
|
26
|
+
style = [
|
27
|
+
rules['settings']['foreground'],
|
28
|
+
rules['settings']['background'],
|
29
|
+
]
|
30
|
+
|
31
|
+
next if style == [nil, nil] # some weird themes have rules without colors...
|
32
|
+
next unless scope = rules['scope'] # some weird themes have rules without scopes...
|
33
|
+
|
34
|
+
scope.split(/, ?/).map(&:strip).each do |scope|
|
35
|
+
@styles[scope] = style unless nested_scope?(scope)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def nested_scope?(scope)
|
43
|
+
scope.include?(' ')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/ruco/window.rb
CHANGED
@@ -50,9 +50,15 @@ module Ruco
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def style_map(selection)
|
53
|
-
|
54
|
-
|
53
|
+
map = StyleMap.new(lines)
|
54
|
+
if selection
|
55
|
+
add_selection_styles(map, selection)
|
56
|
+
else
|
57
|
+
map
|
58
|
+
end
|
59
|
+
end
|
55
60
|
|
61
|
+
def add_selection_styles(map, selection)
|
56
62
|
lines.times do |line|
|
57
63
|
visible = visible_area(line)
|
58
64
|
next unless selection.overlap?(visible)
|
@@ -62,10 +68,9 @@ module Ruco
|
|
62
68
|
last = [selection.last, visible.last].min
|
63
69
|
last = last[1] - left
|
64
70
|
|
65
|
-
|
71
|
+
map.add(:reverse, line, first...last)
|
66
72
|
end
|
67
|
-
|
68
|
-
mask
|
73
|
+
map
|
69
74
|
end
|
70
75
|
|
71
76
|
def left=(x)
|
@@ -77,6 +82,14 @@ module Ruco
|
|
77
82
|
@top = [[line, max_top].min, 0].max
|
78
83
|
end
|
79
84
|
|
85
|
+
def visible_lines
|
86
|
+
@top..(@top+@lines-1)
|
87
|
+
end
|
88
|
+
|
89
|
+
def visible_columns
|
90
|
+
@left..(@left+@columns-1)
|
91
|
+
end
|
92
|
+
|
80
93
|
private
|
81
94
|
|
82
95
|
def adjustment(current, allowed, threshold, offset)
|
@@ -95,13 +108,5 @@ module Ruco
|
|
95
108
|
end_of_line = [line, last_visible_column]
|
96
109
|
start_of_line..end_of_line
|
97
110
|
end
|
98
|
-
|
99
|
-
def visible_lines
|
100
|
-
@top..(@top+@lines-1)
|
101
|
-
end
|
102
|
-
|
103
|
-
def visible_columns
|
104
|
-
@left..(@left+@columns-1)
|
105
|
-
end
|
106
111
|
end
|
107
|
-
end
|
112
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
$LOAD_PATH << 'lib'
|
2
|
+
require 'oniguruma' if RUBY_VERSION < '1.9.0'
|
3
|
+
require 'language_sniffer'
|
4
|
+
gem 'plist'
|
5
|
+
require 'plist'
|
6
|
+
gem 'textpow1x'
|
7
|
+
require 'textpow'
|
8
|
+
gem 'ultraviolet1x'
|
9
|
+
require 'uv'
|
10
|
+
|
11
|
+
file = ARGV[0]
|
12
|
+
text = File.read(file)
|
13
|
+
language = LanguageSniffer.detect(file).language
|
14
|
+
|
15
|
+
require 'ruco/syntax_parser'
|
16
|
+
require 'ruco/array_processor'
|
17
|
+
t = Time.now.to_f
|
18
|
+
Ruco::SyntaxParser.syntax_for_lines(text.split("\n"), [language.name.downcase, language.lexer])
|
19
|
+
Ruco::SyntaxParser.syntax_for_lines(text.split("\n"), [language.name.downcase, language.lexer])
|
20
|
+
Ruco::SyntaxParser.syntax_for_lines(text.split("\n"), [language.name.downcase, language.lexer])
|
21
|
+
Ruco::SyntaxParser.syntax_for_lines(text.split("\n"), [language.name.downcase, language.lexer])
|
22
|
+
Ruco::SyntaxParser.syntax_for_lines(text.split("\n"), [language.name.downcase, language.lexer])
|
23
|
+
puts (Time.now.to_f - t)
|
data/ruco.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{ruco}
|
8
|
-
s.version = "0.2.0.
|
8
|
+
s.version = "0.2.0.beta3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Michael Grosser"]
|
@@ -22,6 +22,7 @@ Gem::Specification.new do |s|
|
|
22
22
|
"bin/ruco",
|
23
23
|
"lib/ruco.rb",
|
24
24
|
"lib/ruco/application.rb",
|
25
|
+
"lib/ruco/array_processor.rb",
|
25
26
|
"lib/ruco/command_bar.rb",
|
26
27
|
"lib/ruco/core_ext/array.rb",
|
27
28
|
"lib/ruco/core_ext/file.rb",
|
@@ -30,6 +31,7 @@ Gem::Specification.new do |s|
|
|
30
31
|
"lib/ruco/core_ext/range.rb",
|
31
32
|
"lib/ruco/core_ext/string.rb",
|
32
33
|
"lib/ruco/editor.rb",
|
34
|
+
"lib/ruco/editor/colors.rb",
|
33
35
|
"lib/ruco/editor/history.rb",
|
34
36
|
"lib/ruco/editor/line_numbers.rb",
|
35
37
|
"lib/ruco/editor_area.rb",
|
@@ -42,12 +44,19 @@ Gem::Specification.new do |s|
|
|
42
44
|
"lib/ruco/screen.rb",
|
43
45
|
"lib/ruco/status_bar.rb",
|
44
46
|
"lib/ruco/style_map.rb",
|
47
|
+
"lib/ruco/syntax_parser.rb",
|
45
48
|
"lib/ruco/text_area.rb",
|
46
49
|
"lib/ruco/text_field.rb",
|
50
|
+
"lib/ruco/tm_theme.rb",
|
47
51
|
"lib/ruco/version.rb",
|
48
52
|
"lib/ruco/window.rb",
|
53
|
+
"playground/benchmark_syntax_parser.rb",
|
49
54
|
"ruco.gemspec",
|
55
|
+
"spec/fixtures/railscasts.tmTheme",
|
56
|
+
"spec/fixtures/slow.js",
|
57
|
+
"spec/fixtures/test.tmTheme",
|
50
58
|
"spec/ruco/application_spec.rb",
|
59
|
+
"spec/ruco/array_processor_spec.rb",
|
51
60
|
"spec/ruco/command_bar_spec.rb",
|
52
61
|
"spec/ruco/core_ext/array_spec.rb",
|
53
62
|
"spec/ruco/core_ext/range_spec.rb",
|
@@ -61,7 +70,9 @@ Gem::Specification.new do |s|
|
|
61
70
|
"spec/ruco/screen_spec.rb",
|
62
71
|
"spec/ruco/status_bar_spec.rb",
|
63
72
|
"spec/ruco/style_map_spec.rb",
|
73
|
+
"spec/ruco/syntax_parser_spec.rb",
|
64
74
|
"spec/ruco/text_area_spec.rb",
|
75
|
+
"spec/ruco/tm_theme_spec.rb",
|
65
76
|
"spec/ruco/window_spec.rb",
|
66
77
|
"spec/ruco_spec.rb",
|
67
78
|
"spec/spec_helper.rb"
|
@@ -75,26 +86,6 @@ Gem::Specification.new do |s|
|
|
75
86
|
s.require_paths = ["lib"]
|
76
87
|
s.rubygems_version = %q{1.6.2}
|
77
88
|
s.summary = %q{Commandline editor written in ruby}
|
78
|
-
s.test_files = [
|
79
|
-
"spec/ruco/application_spec.rb",
|
80
|
-
"spec/ruco/command_bar_spec.rb",
|
81
|
-
"spec/ruco/core_ext/array_spec.rb",
|
82
|
-
"spec/ruco/core_ext/range_spec.rb",
|
83
|
-
"spec/ruco/core_ext/string_spec.rb",
|
84
|
-
"spec/ruco/editor_spec.rb",
|
85
|
-
"spec/ruco/file_store_spec.rb",
|
86
|
-
"spec/ruco/form_spec.rb",
|
87
|
-
"spec/ruco/history_spec.rb",
|
88
|
-
"spec/ruco/keyboard_spec.rb",
|
89
|
-
"spec/ruco/option_accessor_spec.rb",
|
90
|
-
"spec/ruco/screen_spec.rb",
|
91
|
-
"spec/ruco/status_bar_spec.rb",
|
92
|
-
"spec/ruco/style_map_spec.rb",
|
93
|
-
"spec/ruco/text_area_spec.rb",
|
94
|
-
"spec/ruco/window_spec.rb",
|
95
|
-
"spec/ruco_spec.rb",
|
96
|
-
"spec/spec_helper.rb"
|
97
|
-
]
|
98
89
|
|
99
90
|
if s.respond_to? :specification_version then
|
100
91
|
s.specification_version = 3
|
@@ -0,0 +1,369 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!-- Ryan Bates - MIT -->
|
3
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
4
|
+
<plist version="1.0">
|
5
|
+
<dict>
|
6
|
+
<key>name</key>
|
7
|
+
<string>Railscasts</string>
|
8
|
+
<key>settings</key>
|
9
|
+
<array>
|
10
|
+
<dict>
|
11
|
+
<key>settings</key>
|
12
|
+
<dict>
|
13
|
+
<key>background</key>
|
14
|
+
<string>#323232</string>
|
15
|
+
<key>caret</key>
|
16
|
+
<string>#FFFFFF</string>
|
17
|
+
<key>foreground</key>
|
18
|
+
<string>#E6E1DC</string>
|
19
|
+
<key>invisibles</key>
|
20
|
+
<string>#404040</string>
|
21
|
+
<key>lineHighlight</key>
|
22
|
+
<string>#333435</string>
|
23
|
+
<key>selection</key>
|
24
|
+
<string>#5A647EE0</string>
|
25
|
+
</dict>
|
26
|
+
</dict>
|
27
|
+
<dict>
|
28
|
+
<key>name</key>
|
29
|
+
<string>Source</string>
|
30
|
+
<key>scope</key>
|
31
|
+
<string>source</string>
|
32
|
+
<key>settings</key>
|
33
|
+
<dict>
|
34
|
+
<key>background</key>
|
35
|
+
<string>#282828</string>
|
36
|
+
</dict>
|
37
|
+
</dict>
|
38
|
+
<dict>
|
39
|
+
<key>name</key>
|
40
|
+
<string>Comment</string>
|
41
|
+
<key>scope</key>
|
42
|
+
<string>comment</string>
|
43
|
+
<key>settings</key>
|
44
|
+
<dict>
|
45
|
+
<key>fontStyle</key>
|
46
|
+
<string>italic</string>
|
47
|
+
<key>foreground</key>
|
48
|
+
<string>#BC9458</string>
|
49
|
+
</dict>
|
50
|
+
</dict>
|
51
|
+
<dict>
|
52
|
+
<key>name</key>
|
53
|
+
<string>Keyword</string>
|
54
|
+
<key>scope</key>
|
55
|
+
<string>keyword, storage</string>
|
56
|
+
<key>settings</key>
|
57
|
+
<dict>
|
58
|
+
<key>fontStyle</key>
|
59
|
+
<string></string>
|
60
|
+
<key>foreground</key>
|
61
|
+
<string>#CC7833</string>
|
62
|
+
</dict>
|
63
|
+
</dict>
|
64
|
+
<dict>
|
65
|
+
<key>name</key>
|
66
|
+
<string>Function (definition)</string>
|
67
|
+
<key>scope</key>
|
68
|
+
<string>entity.name.function, keyword.other.name-of-parameter.objc</string>
|
69
|
+
<key>settings</key>
|
70
|
+
<dict>
|
71
|
+
<key>fontStyle</key>
|
72
|
+
<string></string>
|
73
|
+
<key>foreground</key>
|
74
|
+
<string>#FFC66D</string>
|
75
|
+
</dict>
|
76
|
+
</dict>
|
77
|
+
<dict>
|
78
|
+
<key>name</key>
|
79
|
+
<string>Class (definition)</string>
|
80
|
+
<key>scope</key>
|
81
|
+
<string>entity.name</string>
|
82
|
+
<key>settings</key>
|
83
|
+
<dict>
|
84
|
+
<key>foreground</key>
|
85
|
+
<string>#FFFFFF</string>
|
86
|
+
</dict>
|
87
|
+
</dict>
|
88
|
+
<dict>
|
89
|
+
<key>name</key>
|
90
|
+
<string>Number</string>
|
91
|
+
<key>scope</key>
|
92
|
+
<string>constant.numeric</string>
|
93
|
+
<key>settings</key>
|
94
|
+
<dict>
|
95
|
+
<key>fontStyle</key>
|
96
|
+
<string></string>
|
97
|
+
<key>foreground</key>
|
98
|
+
<string>#A5C261</string>
|
99
|
+
</dict>
|
100
|
+
</dict>
|
101
|
+
<dict>
|
102
|
+
<key>name</key>
|
103
|
+
<string>Variable</string>
|
104
|
+
<key>scope</key>
|
105
|
+
<string>variable.language, variable.other</string>
|
106
|
+
<key>settings</key>
|
107
|
+
<dict>
|
108
|
+
<key>fontStyle</key>
|
109
|
+
<string></string>
|
110
|
+
<key>foreground</key>
|
111
|
+
<string>#D0D0FF</string>
|
112
|
+
</dict>
|
113
|
+
</dict>
|
114
|
+
<dict>
|
115
|
+
<key>name</key>
|
116
|
+
<string>Block Parameter</string>
|
117
|
+
<key>scope</key>
|
118
|
+
<string>variable.other.block</string>
|
119
|
+
<key>settings</key>
|
120
|
+
<dict>
|
121
|
+
<key>foreground</key>
|
122
|
+
<string>#E6E1DC</string>
|
123
|
+
</dict>
|
124
|
+
</dict>
|
125
|
+
<dict>
|
126
|
+
<key>name</key>
|
127
|
+
<string>Constant</string>
|
128
|
+
<key>scope</key>
|
129
|
+
<string>constant</string>
|
130
|
+
<key>settings</key>
|
131
|
+
<dict>
|
132
|
+
<key>fontStyle</key>
|
133
|
+
<string></string>
|
134
|
+
<key>foreground</key>
|
135
|
+
<string>#6D9CBE</string>
|
136
|
+
</dict>
|
137
|
+
</dict>
|
138
|
+
<dict>
|
139
|
+
<key>name</key>
|
140
|
+
<string>Constant (other variable)</string>
|
141
|
+
<key>scope</key>
|
142
|
+
<string>variable.other.constant</string>
|
143
|
+
<key>settings</key>
|
144
|
+
<dict>
|
145
|
+
<key>foreground</key>
|
146
|
+
<string>#DA4939</string>
|
147
|
+
</dict>
|
148
|
+
</dict>
|
149
|
+
<dict>
|
150
|
+
<key>name</key>
|
151
|
+
<string>Constant (built-in)</string>
|
152
|
+
<key>scope</key>
|
153
|
+
<string>constant.language</string>
|
154
|
+
<key>settings</key>
|
155
|
+
<dict>
|
156
|
+
<key>fontStyle</key>
|
157
|
+
<string></string>
|
158
|
+
<key>foreground</key>
|
159
|
+
<string>#6E9CBE</string>
|
160
|
+
</dict>
|
161
|
+
</dict>
|
162
|
+
<dict>
|
163
|
+
<key>name</key>
|
164
|
+
<string>String</string>
|
165
|
+
<key>scope</key>
|
166
|
+
<string>string</string>
|
167
|
+
<key>settings</key>
|
168
|
+
<dict>
|
169
|
+
<key>fontStyle</key>
|
170
|
+
<string></string>
|
171
|
+
<key>foreground</key>
|
172
|
+
<string>#A5C261</string>
|
173
|
+
</dict>
|
174
|
+
</dict>
|
175
|
+
<dict>
|
176
|
+
<key>name</key>
|
177
|
+
<string>Library function</string>
|
178
|
+
<key>scope</key>
|
179
|
+
<string>support.function</string>
|
180
|
+
<key>settings</key>
|
181
|
+
<dict>
|
182
|
+
<key>fontStyle</key>
|
183
|
+
<string></string>
|
184
|
+
<key>foreground</key>
|
185
|
+
<string>#DA4939</string>
|
186
|
+
</dict>
|
187
|
+
</dict>
|
188
|
+
<dict>
|
189
|
+
<key>name</key>
|
190
|
+
<string>Library type</string>
|
191
|
+
<key>scope</key>
|
192
|
+
<string>support.type</string>
|
193
|
+
<key>settings</key>
|
194
|
+
<dict>
|
195
|
+
<key>foreground</key>
|
196
|
+
<string>#6E9CBE</string>
|
197
|
+
</dict>
|
198
|
+
</dict>
|
199
|
+
<dict>
|
200
|
+
<key>name</key>
|
201
|
+
<string>Library constant</string>
|
202
|
+
<key>scope</key>
|
203
|
+
<string>support.constant</string>
|
204
|
+
<key>settings</key>
|
205
|
+
<dict>
|
206
|
+
<key>foreground</key>
|
207
|
+
<string>#A5C261</string>
|
208
|
+
</dict>
|
209
|
+
</dict>
|
210
|
+
<dict>
|
211
|
+
<key>name</key>
|
212
|
+
<string>Markup tag</string>
|
213
|
+
<key>scope</key>
|
214
|
+
<string>meta.tag, declaration.tag, entity.name.tag, entity.other.attribute-name</string>
|
215
|
+
<key>settings</key>
|
216
|
+
<dict>
|
217
|
+
<key>fontStyle</key>
|
218
|
+
<string></string>
|
219
|
+
<key>foreground</key>
|
220
|
+
<string>#E8BF6A</string>
|
221
|
+
</dict>
|
222
|
+
</dict>
|
223
|
+
<dict>
|
224
|
+
<key>name</key>
|
225
|
+
<string>Invalid</string>
|
226
|
+
<key>scope</key>
|
227
|
+
<string>invalid</string>
|
228
|
+
<key>settings</key>
|
229
|
+
<dict>
|
230
|
+
<key>background</key>
|
231
|
+
<string>#990000</string>
|
232
|
+
<key>foreground</key>
|
233
|
+
<string>#FFFFFF</string>
|
234
|
+
</dict>
|
235
|
+
</dict>
|
236
|
+
<dict>
|
237
|
+
<key>name</key>
|
238
|
+
<string>String interpolation</string>
|
239
|
+
<key>scope</key>
|
240
|
+
<string>constant.character.escaped, constant.character.escape, string source, string source.ruby</string>
|
241
|
+
<key>settings</key>
|
242
|
+
<dict>
|
243
|
+
<key>fontStyle</key>
|
244
|
+
<string></string>
|
245
|
+
<key>foreground</key>
|
246
|
+
<string>#519F50</string>
|
247
|
+
</dict>
|
248
|
+
</dict>
|
249
|
+
<dict>
|
250
|
+
<key>name</key>
|
251
|
+
<string>Diff Add</string>
|
252
|
+
<key>scope</key>
|
253
|
+
<string>markup.inserted</string>
|
254
|
+
<key>settings</key>
|
255
|
+
<dict>
|
256
|
+
<key>background</key>
|
257
|
+
<string>#144212</string>
|
258
|
+
<key>foreground</key>
|
259
|
+
<string>#E6E1DC</string>
|
260
|
+
</dict>
|
261
|
+
</dict>
|
262
|
+
<dict>
|
263
|
+
<key>name</key>
|
264
|
+
<string>Diff Remove</string>
|
265
|
+
<key>scope</key>
|
266
|
+
<string>markup.deleted</string>
|
267
|
+
<key>settings</key>
|
268
|
+
<dict>
|
269
|
+
<key>background</key>
|
270
|
+
<string>#660000</string>
|
271
|
+
<key>foreground</key>
|
272
|
+
<string>#E6E1DC</string>
|
273
|
+
</dict>
|
274
|
+
</dict>
|
275
|
+
<dict>
|
276
|
+
<key>name</key>
|
277
|
+
<string>Diff Header</string>
|
278
|
+
<key>scope</key>
|
279
|
+
<string>meta.diff.header, meta.separator.diff, meta.diff.index, meta.diff.range</string>
|
280
|
+
<key>settings</key>
|
281
|
+
<dict>
|
282
|
+
<key>background</key>
|
283
|
+
<string>#2F33AB</string>
|
284
|
+
</dict>
|
285
|
+
</dict>
|
286
|
+
<dict>
|
287
|
+
<key>name</key>
|
288
|
+
<string>TODO Category Name</string>
|
289
|
+
<key>scope</key>
|
290
|
+
<string>todo.category.name</string>
|
291
|
+
<key>settings</key>
|
292
|
+
<dict>
|
293
|
+
<key>foreground</key>
|
294
|
+
<string>#E8BF6A</string>
|
295
|
+
</dict>
|
296
|
+
</dict>
|
297
|
+
<dict>
|
298
|
+
<key>name</key>
|
299
|
+
<string>TODO Urgent</string>
|
300
|
+
<key>scope</key>
|
301
|
+
<string>todo.task.urgent</string>
|
302
|
+
<key>settings</key>
|
303
|
+
<dict>
|
304
|
+
<key>foreground</key>
|
305
|
+
<string>#FEFF00</string>
|
306
|
+
</dict>
|
307
|
+
</dict>
|
308
|
+
<dict>
|
309
|
+
<key>name</key>
|
310
|
+
<string>TODO Category Extras</string>
|
311
|
+
<key>scope</key>
|
312
|
+
<string>todo.category.extras</string>
|
313
|
+
<key>settings</key>
|
314
|
+
<dict>
|
315
|
+
<key>fontStyle</key>
|
316
|
+
<string></string>
|
317
|
+
<key>foreground</key>
|
318
|
+
<string>#BC9458</string>
|
319
|
+
</dict>
|
320
|
+
</dict>
|
321
|
+
<dict>
|
322
|
+
<key>name</key>
|
323
|
+
<string>TODO Task Dormant</string>
|
324
|
+
<key>scope</key>
|
325
|
+
<string>todo.task.dormant</string>
|
326
|
+
<key>settings</key>
|
327
|
+
<dict>
|
328
|
+
<key>foreground</key>
|
329
|
+
<string>#807C79</string>
|
330
|
+
</dict>
|
331
|
+
</dict>
|
332
|
+
<dict>
|
333
|
+
<key>name</key>
|
334
|
+
<string>TODO Task Complete</string>
|
335
|
+
<key>scope</key>
|
336
|
+
<string>todo.task.complete</string>
|
337
|
+
<key>settings</key>
|
338
|
+
<dict>
|
339
|
+
<key>foreground</key>
|
340
|
+
<string>#DA4939</string>
|
341
|
+
</dict>
|
342
|
+
</dict>
|
343
|
+
<dict>
|
344
|
+
<key>name</key>
|
345
|
+
<string>TODO Task Question</string>
|
346
|
+
<key>scope</key>
|
347
|
+
<string>todo.task.question</string>
|
348
|
+
<key>settings</key>
|
349
|
+
<dict>
|
350
|
+
<key>foreground</key>
|
351
|
+
<string>#82A7E2</string>
|
352
|
+
</dict>
|
353
|
+
</dict>
|
354
|
+
<dict>
|
355
|
+
<key>name</key>
|
356
|
+
<string>TODO Task Large</string>
|
357
|
+
<key>scope</key>
|
358
|
+
<string>todo.task.large</string>
|
359
|
+
<key>settings</key>
|
360
|
+
<dict>
|
361
|
+
<key>foreground</key>
|
362
|
+
<string>#A5C261</string>
|
363
|
+
</dict>
|
364
|
+
</dict>
|
365
|
+
</array>
|
366
|
+
<key>uuid</key>
|
367
|
+
<string>FC05BACA-10E3-4636-82C5-758C2334DA9D</string>
|
368
|
+
</dict>
|
369
|
+
</plist>
|