rum 0.0.1-x86-mswin32-60

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. data/CHANGELOG +3 -0
  2. data/README +30 -0
  3. data/Rakefile +134 -0
  4. data/bin/rum-client +124 -0
  5. data/doc/basic.rb +10 -0
  6. data/doc/doc.html +602 -0
  7. data/doc/example.rb +59 -0
  8. data/doc/reference.rb +415 -0
  9. data/doc/resources/bg.png +0 -0
  10. data/doc/resources/bottom.png +0 -0
  11. data/doc/resources/build.rb +235 -0
  12. data/doc/resources/doc.haml +167 -0
  13. data/doc/resources/emacs-auto-completion.png +0 -0
  14. data/doc/resources/flash.png +0 -0
  15. data/doc/resources/highlight.css +94 -0
  16. data/doc/resources/intro.rb +17 -0
  17. data/doc/resources/left.png +0 -0
  18. data/doc/resources/logo.png +0 -0
  19. data/doc/resources/screen.css +420 -0
  20. data/doc/resources/screenshot.png +0 -0
  21. data/doc/resources/top.png +0 -0
  22. data/ext/mac/keyboard_hook/English.lproj/InfoPlist.strings +0 -0
  23. data/ext/mac/keyboard_hook/Event.h +17 -0
  24. data/ext/mac/keyboard_hook/Event.m +18 -0
  25. data/ext/mac/keyboard_hook/EventTap.h +11 -0
  26. data/ext/mac/keyboard_hook/EventTap.m +77 -0
  27. data/ext/mac/keyboard_hook/Info.plist +26 -0
  28. data/ext/mac/keyboard_hook/KeyboardHook.xcodeproj/TemplateIcon.icns +0 -0
  29. data/ext/mac/keyboard_hook/KeyboardHook.xcodeproj/project.pbxproj +323 -0
  30. data/ext/mac/keyboard_hook/KeyboardHook_Prefix.pch +7 -0
  31. data/ext/mac/keyboard_hook/version.plist +16 -0
  32. data/ext/windows/keyboard_hook/extconf.rb +2 -0
  33. data/ext/windows/keyboard_hook/keyboard_hook.c +126 -0
  34. data/ext/windows/system/autohotkey_stuff.c +255 -0
  35. data/ext/windows/system/autohotkey_stuff.h +2 -0
  36. data/ext/windows/system/clipboard_watcher.c +58 -0
  37. data/ext/windows/system/clipboard_watcher.h +2 -0
  38. data/ext/windows/system/extconf.rb +3 -0
  39. data/ext/windows/system/input_box.c +239 -0
  40. data/ext/windows/system/input_box.h +4 -0
  41. data/ext/windows/system/system.c +273 -0
  42. data/lib/rum.rb +4 -0
  43. data/lib/rum/apps.rb +4 -0
  44. data/lib/rum/barrel.rb +157 -0
  45. data/lib/rum/barrel/emacs.rb +44 -0
  46. data/lib/rum/barrel/emacs_client.rb +74 -0
  47. data/lib/rum/core.rb +125 -0
  48. data/lib/rum/dsl.rb +109 -0
  49. data/lib/rum/gui.rb +93 -0
  50. data/lib/rum/help.rb +128 -0
  51. data/lib/rum/hotkey_core.rb +479 -0
  52. data/lib/rum/mac.rb +18 -0
  53. data/lib/rum/mac/app.rb +4 -0
  54. data/lib/rum/mac/apps.rb +19 -0
  55. data/lib/rum/mac/gui.rb +26 -0
  56. data/lib/rum/mac/gui/growl.rb +54 -0
  57. data/lib/rum/mac/irb/completion.rb +207 -0
  58. data/lib/rum/mac/keyboard_hook.rb +73 -0
  59. data/lib/rum/mac/layouts.rb +146 -0
  60. data/lib/rum/mac/system.rb +45 -0
  61. data/lib/rum/remote.rb +48 -0
  62. data/lib/rum/server.rb +92 -0
  63. data/lib/rum/windows.rb +23 -0
  64. data/lib/rum/windows/app.rb +72 -0
  65. data/lib/rum/windows/apps.rb +25 -0
  66. data/lib/rum/windows/gui.rb +116 -0
  67. data/lib/rum/windows/keyboard.rb +80 -0
  68. data/lib/rum/windows/keyboard_hook.rb +20 -0
  69. data/lib/rum/windows/keyboard_hook.so +0 -0
  70. data/lib/rum/windows/layouts.rb +232 -0
  71. data/lib/rum/windows/system.rb +310 -0
  72. data/lib/rum/windows/system.so +0 -0
  73. data/lib/rum/windows/system_foreign_functions.rb +129 -0
  74. data/rum.gemspec +14 -0
  75. metadata +156 -0
Binary file
Binary file
@@ -0,0 +1,235 @@
1
+ require 'haml'
2
+
3
+ class Doc
4
+ module Pygmentize
5
+ Bin = if RUBY_PLATFORM =~ /mswin|mingw/ and ENV['USER'] == 'nonsequitur'
6
+ 'C:/Programme/Python26/Scripts/pygmentize.exe'
7
+ else
8
+ 'pygmentize'
9
+ end
10
+ Cmd = "#{Bin} -O encoding=utf-8 -l ruby -f html"
11
+
12
+ def self.file file
13
+ fix_pygments_output(`#{Cmd} #{file}`)
14
+ end
15
+
16
+ def self.string str
17
+ IO.popen(Cmd, 'w+') do |pygmentize|
18
+ pygmentize.write str
19
+ pygmentize.close_write
20
+ fix_pygments_output(pygmentize.read)
21
+ end
22
+ end
23
+
24
+ def self.fix_pygments_output str
25
+ # Bug in Pygments 1.3.1: 'type' is no Ruby builtin
26
+ str.gsub('<span class="nb">type</span>', 'type')\
27
+ .gsub('<span class="nb">require</span>', 'require')
28
+ end
29
+
30
+ class Snippets
31
+ def initialize
32
+ @snippets = []
33
+ @highlighted = []
34
+ end
35
+
36
+ def add str
37
+ @snippets << str
38
+ result = ''
39
+ @highlighted << result
40
+ result
41
+ end
42
+
43
+ def pygmentize!
44
+ highlighted = Pygmentize.string(@snippets.join("\n")).lines.to_a
45
+ highlighted.first.sub! /<div.*?pre>/, ''
46
+ @snippets.each_with_index do |snippet, i|
47
+ length = snippet.lines.to_a.length
48
+ str = '<pre class="highlight">'
49
+ str << highlighted.slice!(0, length).join.chomp
50
+ str << '</pre>'
51
+ @highlighted[i].replace str
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ class Code
58
+ def initialize(file)
59
+ @lines = File.read(file).split /\n/
60
+ end
61
+
62
+ def render
63
+ parse
64
+ to_html
65
+ end
66
+
67
+ def parse
68
+ @result = []
69
+ @last_type = nil
70
+ @lines.each { |line| compose_doc(*classify_and_extract(line)) }
71
+ @result
72
+ end
73
+
74
+ def classify_and_extract line
75
+ case line
76
+ when /^#?\s*$/ then [:empty, nil]
77
+ when /^####\s+(.*)/ then [:chapter, $1.rstrip]
78
+ when /^###\s+(.*)/ then [:h2, $1.rstrip]
79
+ when /^##\s+(.*)/ then [:h3, $1.rstrip]
80
+ when /^#\s*(.*)/ then [:text, $1.rstrip]
81
+ else [:code, line]
82
+ end
83
+ end
84
+
85
+ EmptyAllowed = { code: true, text: true }
86
+
87
+ def compose_doc type, line
88
+ if type == :empty
89
+ @result.last << '' if EmptyAllowed[@last_type]
90
+ elsif type == @last_type
91
+ @result.last << line
92
+ else
93
+ @result << [type, line]
94
+ @last_type = type
95
+ end
96
+ end
97
+
98
+ class TableOfContents
99
+ Heading = Struct.new(:text, :anchor_name)
100
+
101
+ def initialize
102
+ @headings = []
103
+ end
104
+
105
+ def add_heading heading
106
+ chapter_number = @headings.count + 1
107
+ @headings << Heading.new(heading, "chapter_#{chapter_number}")
108
+ end
109
+
110
+ def heading_html
111
+ heading = @headings.last
112
+ "<a name=\"#{heading.anchor_name}\"><h1>#{heading.text}</h1></a>"
113
+ end
114
+
115
+ def heading_list_items
116
+ @headings.map do |heading|
117
+ "<li><a href=\"##{heading.anchor_name}\">#{heading.text}</a></li>"
118
+ end.join
119
+ end
120
+
121
+ def to_html
122
+ html = "<div id=\"table_of_contents\"><h1>Chapters</h1>"
123
+ html << "<ul>"
124
+ html << heading_list_items
125
+ html << "</ul>"
126
+ html << "</div>"
127
+ end
128
+ end
129
+
130
+ ChapterEnd = "</div>\n"
131
+ ChapterBeginning = "<div class=\"chapter\">\n"
132
+
133
+ def to_html
134
+ snippets = Pygmentize::Snippets.new
135
+ table_of_contents = TableOfContents.new
136
+
137
+ sections = @result.map do |type, *lines|
138
+ case type
139
+ when :chapter
140
+ table_of_contents.add_heading lines.first
141
+ chapter = ChapterEnd.dup
142
+ chapter << ChapterBeginning
143
+ chapter << table_of_contents.heading_html << "\n"
144
+ when :h2
145
+ "<h2>#{lines.first}</h2>"
146
+ when :h3
147
+ "<h3>#{lines.first}</h3>"
148
+ when :text
149
+ "<p>#{join_text(lines)}</p>"
150
+ when :code
151
+ snippets.add(lines.join("\n").rstrip)
152
+ end
153
+ end
154
+
155
+ sections.first.sub! ChapterEnd, ''
156
+ sections << ChapterEnd
157
+ sections.unshift table_of_contents.to_html
158
+
159
+ snippets.pygmentize!
160
+ sections.join("\n")
161
+ end
162
+
163
+ def join_text(lines)
164
+ paragraphs = []
165
+ paragraphs << lines.first.dup
166
+ lines.each_cons(2) do |a, b|
167
+ if (a.empty? or b.empty? or
168
+ a.chars.to_a.last =~ /[.:!?)>]/ or a.length < 8)
169
+ paragraphs << b
170
+ else
171
+ paragraphs.last << ' ' << b
172
+ end
173
+ end
174
+ paragraphs.pop while paragraphs.last.empty?
175
+ paragraphs.join('<br />')
176
+ end
177
+ end
178
+
179
+ def initialize(index, intro, basic, example, reference, args)
180
+ @dir = args[:dir] || ''
181
+ @output = File.join(@dir, args[:output])
182
+ @index = File.join(@dir, index)
183
+ @intro = File.join(@dir, intro)
184
+ @basic = File.join(@dir, basic)
185
+ @example = File.join(@dir, example)
186
+ @reference = File.join(@dir, reference)
187
+ end
188
+
189
+ def current_version
190
+ gemspec = eval(IO.read('rum.gemspec'))
191
+ gemspec.version
192
+ end
193
+
194
+ def intro
195
+ Pygmentize.file @intro
196
+ end
197
+
198
+ def inf_ruby_setup
199
+ <<EOF
200
+ (add-to-list 'inf-ruby-implementations
201
+ '("rum-client" . "rum-client -i --inf-ruby-mode")
202
+ (defun rum-client ()
203
+ (interactive)
204
+ (inf-ruby "rum-client")))
205
+ EOF
206
+ end
207
+
208
+ def basic
209
+ Pygmentize.file(@basic)
210
+ end
211
+
212
+ def example
213
+ Pygmentize.file @example
214
+ end
215
+
216
+ def reference
217
+ Doc::Code.new(@reference).render
218
+ end
219
+
220
+ def render
221
+ doc = File.read(@index)
222
+ # Ugly is needed for Pygments-formatted code
223
+ haml = Haml::Engine.new(doc, ugly: true)
224
+ @doc = haml.render(self)
225
+ end
226
+
227
+ def save
228
+ File.open(@output, 'w') { |f| f.write @doc }
229
+ end
230
+
231
+ def build
232
+ render
233
+ save
234
+ end
235
+ end
@@ -0,0 +1,167 @@
1
+ %html(xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en")
2
+ %head
3
+ %title Rum
4
+ %meta(http-equiv="Content-Type" content="text/html;charset=utf-8")
5
+ %link(rel="stylesheet" href="resources/screen.css" type="text/css" media="screen")
6
+ %link(rel="stylesheet" href="resources/highlight.css" type="text/css" media="screen")
7
+
8
+ %body
9
+ %img{id: "logo", src: "resources/logo.png"}
10
+ #nav
11
+ %ul
12
+ %li
13
+ %a{href: "#"} Intro
14
+ %li
15
+ %a{href: "#installation"} Installation
16
+ %li
17
+ %a{href: "#coding"} Coding
18
+ %li
19
+ %a{href: "#example"} Example
20
+ %li
21
+ %a{href: "#reference"} Reference
22
+ %li
23
+ %a{href: "#development"} Development
24
+ #wrapper
25
+ #intro Rum is a cross-platform Hotkey and Macro utility, built in Ruby.<br />Not yet running on Linux, it’s progressing steadily on the Mac (MacRuby) and is fully supported on Windows.
26
+
27
+ %img{src: "resources/screenshot.png"}
28
+ #screenshot-sub
29
+ #intro-code
30
+ #top
31
+ #content
32
+ %img{id: "flash", src: "resources/flash.png"}
33
+ #sshot-sub This snippet powers the above screenshot.
34
+ -# #sshot-sub The above screenshot is powered by this snippet.
35
+ = intro
36
+ #bottom
37
+ #intro-code-sub Rum configuration files are regular Ruby scripts, like the above.<br /> Running Rum is as easy as calling <span class="code">ruby my_rum_config_file.rb</span> from the command line.<br />(Or <span class="code">macruby -rubygems my_rum_config_file.rb</span> on the Mac.)
38
+ #guide
39
+ #installation
40
+ %a{name: "installation"}
41
+ %h1 Installation
42
+ #gem
43
+ #regulargem
44
+ %span{class: "code"} gem install rum
45
+ #macgem
46
+ %span{class: "code"} macgem install rum
47
+ %div
48
+ -# %span{class: "onthemac"} On the Mac
49
+ .clear
50
+
51
+ %p{id: "current_version"}
52
+ Current version:
53
+ = current_version
54
+ %span{id: "changelog"} (<a href="https://github.com/nonsequitur/rum/blob/master/CHANGELOG">Changelog</a>)
55
+
56
+ #platforms
57
+ %h3 Supported platforms
58
+ %ul
59
+ %li Mac OS X – MacRuby >=0.10
60
+ %li
61
+ 32-bit Windows XP/Vista/7 – Ruby >=1.9.1p378.<br />
62
+ #growl
63
+ %h2 Recommended: Growl
64
+ %ul
65
+ %li Get Growl: <a href="http://growl.info/">Mac</a>, <a href="http://www.growlforwindows.com/gfw/">Windows</a>
66
+ %li To use Growl in Rum: Add <span class="code">Gui.use Gui::Growl</span> to your Rum config.
67
+ #growl-explanation
68
+ %h3 Why Growl?
69
+ Notification bubbles are a convenient alternative to focus-stealing message boxes.
70
+ Some higher level Rum methods only work smoothly with Growl-style notifications.
71
+ Currently, Growl is the only notification system supported by Rum.
72
+
73
+ #coding
74
+ %a{name: "coding"}
75
+ %h1 Coding in Rum
76
+ Rum encourages an interactive approach to coding and a fast code-and-feedback cycle.
77
+ %h2 Core techniques
78
+ %ul{id: "core-techniques"}
79
+ %li
80
+ %h3 rum-client REPL
81
+ %p Add <span class="code">Rum::Server.start</span> to your Rum config.
82
+ %p Call <span class="code">rum-client -i</span> from the command line to start an IRB-session inside a running Rum instance. IRB Completion is fully supported.
83
+ %p Nearly all snippets in this guide can be evaluated interactively.
84
+
85
+ %p Set the environment variable <span class="code">RUM_PORT</span> to change the port on which client and server connect.
86
+
87
+ %p
88
+ %h3 rum-client in emacs:
89
+ %ul
90
+ %li Get the latest Inf-Ruby via <a href="http://marmalade-repo.org/packages/inf-ruby">ELPA</a>
91
+ %li
92
+ Add the following to your Emacs config:
93
+ %pre{id: "inf_ruby_setup"}= inf_ruby_setup
94
+ %li
95
+ Run <span class="code">M-x rum-client</span>
96
+ #auto-completion
97
+ %h4 Auto-completion
98
+ %img{id: "auto-completion",
99
+ src: "resources/emacs-auto-completion.png"}
100
+ -# %p The Inf-Ruby backend for Company-Mode offers auto-completion for Inf-Ruby buffers.
101
+ %p
102
+ Company-Mode features auto-completion for IRB sessions.<br />
103
+ <a href="http://www.emacswiki.org/emacs/InfRubyCompany">See here for installation instructions</a>.
104
+
105
+ %li
106
+ %%h3 Rum.restart
107
+ Restarts Rum.
108
+ Bind it to a key, like <span class="code">'shift f1'.do { Rum.restart }</span>
109
+
110
+ Run Rum with this basic, REPL-enabled setup to get started:
111
+ #basic= basic
112
+
113
+ #example
114
+ %a{name: "example"}
115
+ %h1 Extended Example
116
+ = example
117
+
118
+
119
+ -# #example-configs
120
+
121
+ %a{name: "reference"}
122
+ %h1 Reference
123
+ %p
124
+ This section is also available as a Ruby source file and can be
125
+ conveniently viewed in a text editor.<br />
126
+ Call <span class="code">Rum.reference</span> or manually open
127
+ <span class="code">rum_dir/doc/reference.rb</span>.
128
+ #reference_wrapper= reference
129
+
130
+ #development
131
+ %a{name: "development"}
132
+ %h1 Development
133
+ %p
134
+ Patches and suggestions are most appreciated.
135
+ %p
136
+ There's a <a href="https://github.com/nonsequitur/rum-dev/blob/master/rum-development.org">low-ceremony
137
+ to-do list</a> to coordinate the development
138
+ of larger-scale features.<br />
139
+ -# Please check this out if you're interested in contributing.
140
+ Feel free to have a look if you're interested in contributing.
141
+ -# Instructions on how to contribute can be found inside the list.
142
+ %h2 Building
143
+ %p
144
+ %span{class: "code"} rake build
145
+ builds the extension and the document.
146
+ %p
147
+ %span{class: "code"} rake ext
148
+ builds just the extension.
149
+ %p
150
+ %span{class: "code"} rake doc
151
+ builds this document. Requires Pygments.
152
+ %h3 Mac specifics:
153
+ %p
154
+ XCode required.
155
+ %h3 Windows specifics:
156
+ %p
157
+ Visual Studio required. (Out-of-the-box MinGW support coming soon.)
158
+ %p
159
+ You need to setup the Visual Studio build environment before running the rake commands.<br />Call <span class="code">"%programfiles%\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86</span> from your Windows terminal.
160
+ %p
161
+ You might have to delete the following lines from <span class="code">ruby_dir/include/ruby-1.9.x/i386-mswin32/ruby/config.h</span> to work around a compiler error:
162
+ %pre
163
+ \#if _MSC_VER != 1200
164
+ \#error MSC version unmatch: _MSC_VER: 1200 is expected.
165
+ \#endif
166
+ #footer
167
+
Binary file
@@ -0,0 +1,94 @@
1
+ .chapter .highlight { background-color: #F4F4F4; }
2
+
3
+
4
+ /* .chapter .highlight { color: #F7F7F7; background-color: #27262F; } */
5
+ /* .chapter .c1 { color: #8b8b8b; font-style: italic } /\* Comment.Single *\/ */
6
+ /* .chapter .nb { color: #c13a3a } /\* Name.Builtin *\/ */
7
+ /* .chapter .k { color: #c13a3a; font-weight: bold } /\* Keyword *\/ */
8
+ /* .chapter .kp { color: #c13a3a } /\* Keyword.Pseudo *\/ */
9
+ /* .chapter .no { color: #FF4530 } /\* Name.Constant *\/ */
10
+ /* /\* .no { color: #664312 } /\\* Name.Constant *\\/ *\/ */
11
+ /* .chapter .s1 { color: #13E618 } /\* Literal.String.Single *\/ */
12
+ /* /\* .s1 { color: #68b800 } /\\* Literal.String.Single *\\/ *\/ */
13
+ /* /\* #content .s1 { color: #68b800 } *\/ */
14
+ /* .chapter .ss { color: #FF9E21 } /\* Literal.String.Symbol *\/ */
15
+ /* .chapter .sr { color: #BB6688 } /\* Literal.String.Regex *\/ */
16
+
17
+
18
+
19
+ .c1 { color: #717171; font-style: italic } /* Comment.Single */
20
+ .nb { color: #c13a3a } /* Name.Builtin */
21
+ .k { color: #c13a3a; font-weight: bold } /* Keyword */
22
+ .kp { color: #c13a3a } /* Keyword.Pseudo */
23
+ /* .no { color: #661A12 } /\* Name.Constant */
24
+ .no { color: #B42313 } /* Name.Constant */
25
+ /* .no { color: ##FF3300 } /\* Name.Constant *\/ */
26
+ /* .no { color: #664312 } /\* Name.Constant *\/ */
27
+ /* .s1 { color: #58920e } /\* Literal.String.Single *\/ */
28
+ .s1 { color: #39BF06 } /* Literal.String.Single */
29
+ .s1 { color: #34AD06 } /* Literal.String.Single */39BF06
30
+ /* .s1 { color: #68b800 } /\* Literal.String.Single *\/ */
31
+ /* #content .s1 { color: #68b800 } */
32
+ .ss { color: #58920e } /* Literal.String.Symbol */
33
+ .sr { color: #BB6688 } /* Literal.String.Regex */
34
+ /* .mi { color: #666666 } /\* Literal.Number.Integer *\/ */
35
+
36
+
37
+
38
+ .hll { background-color: #ffffcc }
39
+ .c { color: #408080; font-style: italic } /* Comment */
40
+ .err { border: 1px solid #FF0000 } /* Error */
41
+ /* .o { color: #666666 } /\* Operator *\/ */
42
+ .cm { color: #408080; font-style: italic } /* Comment.Multiline */
43
+ .cp { color: #BC7A00 } /* Comment.Preproc */
44
+
45
+
46
+ .cs { color: #408080; font-style: italic } /* Comment.Special */
47
+ .gd { color: #A00000 } /* Generic.Deleted */
48
+ .ge { font-style: italic } /* Generic.Emph */
49
+ .gr { color: #FF0000 } /* Generic.Error */
50
+ .gh { color: #000080; font-weight: bold } /* Generic.Heading */
51
+ .gi { color: #00A000 } /* Generic.Inserted */
52
+ .go { color: #808080 } /* Generic.Output */
53
+ .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
54
+ .gs { font-weight: bold } /* Generic.Strong */
55
+ .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
56
+ .gt { color: #0040D0 } /* Generic.Traceback */
57
+ .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
58
+ .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
59
+ .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
60
+ .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
61
+ .kt { color: #B00040 } /* Keyword.Type */
62
+ .m { color: #666666 } /* Literal.Number */
63
+ .s { color: #BA2121 } /* Literal.String */
64
+ .na { color: #7D9029 } /* Name.Attribute */
65
+
66
+ .nc { color: #0000FF; font-weight: bold } /* Name.Class */
67
+ .nd { color: #AA22FF } /* Name.Decorator */
68
+ .ni { color: #999999; font-weight: bold } /* Name.Entity */
69
+ .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
70
+ .nf { color: #0000FF } /* Name.Function */
71
+ .nl { color: #A0A000 } /* Name.Label */
72
+ .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
73
+ .nt { color: #008000; font-weight: bold } /* Name.Tag */
74
+ .nv { color: #19177C } /* Name.Variable */
75
+ .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
76
+ .w { color: #bbbbbb } /* Text.Whitespace */
77
+ .mf { color: #666666 } /* Literal.Number.Float */
78
+ .mh { color: #666666 } /* Literal.Number.Hex */
79
+
80
+ .mo { color: #666666 } /* Literal.Number.Oct */
81
+ .sb { color: #BA2121 } /* Literal.String.Backtick */
82
+ .sc { color: #BA2121 } /* Literal.String.Char */
83
+ .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
84
+ .s2 { color: #BA2121 } /* Literal.String.Double */
85
+ .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
86
+ .sh { color: #BA2121 } /* Literal.String.Heredoc */
87
+ .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
88
+ .sx { color: #008000 } /* Literal.String.Other */
89
+
90
+ .bp { color: #008000 } /* Name.Builtin.Pseudo */
91
+ .vc { color: #19177C } /* Name.Variable.Class */
92
+ .vg { color: #19177C } /* Name.Variable.Global */
93
+ .vi { color: #19177C } /* Name.Variable.Instance */
94
+ .il { color: #666666 } /* Literal.Number.Integer.Long */