ruber 0.0.9 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +42 -1
- data/lib/ruber/application/application.rb +25 -5
- data/lib/ruber/application/plugin.yaml +2 -10
- data/lib/ruber/component_manager.rb +2 -2
- data/lib/ruber/document_project.rb +5 -3
- data/lib/ruber/editor/document.rb +5 -4
- data/lib/ruber/editor/ktexteditor_wrapper.rb +1 -1
- data/lib/ruber/exception_widgets.rb +1 -1
- data/lib/ruber/main_window/main_window.rb +4 -3
- data/lib/ruber/main_window/main_window_actions.rb +2 -2
- data/lib/ruber/main_window/main_window_internal.rb +1 -1
- data/lib/ruber/output_widget.rb +17 -5
- data/lib/ruber/project.rb +34 -3
- data/lib/ruber/project_dir_scanner.rb +171 -0
- data/lib/ruber/settings_container.rb +7 -7
- data/lib/ruber/settings_dialog.rb +24 -24
- data/lib/ruber/version.rb +1 -1
- data/lib/ruber/world/environment.rb +1 -0
- data/lib/ruber/world/plugin.yaml +7 -2
- data/lib/ruber/{application → world}/project_files_widget.rb +0 -0
- data/lib/ruber/{application → world}/ui/project_files_rule_chooser_widget.rb +2 -2
- data/lib/ruber/{application → world}/ui/project_files_rule_chooser_widget.ui +0 -0
- data/lib/ruber/{application → world}/ui/project_files_widget.rb +2 -2
- data/lib/ruber/{application → world}/ui/project_files_widget.ui +0 -0
- data/plugins/auto_end/auto_end.rb +21 -18
- data/plugins/autosave/autosave.rb +1 -1
- data/plugins/find_in_files/find_in_files.rb +1 -1
- data/plugins/irb/irb.png +0 -0
- data/plugins/irb/irb.rb +142 -0
- data/plugins/irb/irb.svg +240 -0
- data/plugins/irb/irb_controller.rb +541 -0
- data/plugins/irb/irbrc.rb +21 -0
- data/plugins/irb/plugin.yaml +19 -0
- data/plugins/irb/ui/irb_config_widget.rb +151 -0
- data/plugins/irb/ui/irb_config_widget.ui +123 -0
- data/plugins/irb/ui/irb_tool_widget.rb +97 -0
- data/plugins/irb/ui/irb_tool_widget.ui +86 -0
- data/plugins/project_browser/project_browser.rb +1 -1
- data/plugins/rspec/plugin.yaml +6 -3
- data/plugins/rspec/rspec.rb +172 -473
- data/plugins/rspec/tool_widget.rb +462 -0
- data/plugins/rspec/ui/rspec_project_widget.rb +58 -38
- data/plugins/rspec/ui/rspec_project_widget.ui +68 -64
- data/plugins/ruberri/class_formatter.rb +126 -0
- data/plugins/ruberri/method_formatter.rb +90 -0
- data/plugins/ruberri/plugin.yaml +13 -0
- data/plugins/ruberri/ruberri.rb +226 -0
- data/plugins/ruberri/search.rb +111 -0
- data/plugins/ruberri/ui/tool_widget.rb +73 -0
- data/plugins/ruberri/ui/tool_widget.ui +49 -0
- data/plugins/ruby_runner/ruby_runner.rb +2 -2
- data/plugins/ruby_syntax_checker/plugin.yaml +11 -0
- data/plugins/ruby_syntax_checker/ruby_syntax_checker.rb +147 -0
- data/plugins/syntax_checker/plugin.yaml +10 -6
- data/plugins/syntax_checker/syntax_checker.rb +216 -520
- data/plugins/syntax_checker/ui/config_widget.rb +61 -0
- data/plugins/syntax_checker/ui/config_widget.ui +44 -0
- data/plugins/yaml_syntax_checker/plugin.yaml +11 -0
- data/plugins/yaml_syntax_checker/yaml_syntax_checker.rb +62 -0
- data/ruber.desktop +0 -0
- data/spec/auto_end_spec.rb +224 -186
- data/spec/document_project_spec.rb +9 -1
- data/spec/document_spec.rb +9 -0
- data/spec/environment_spec.rb +12 -0
- data/spec/output_widget_spec.rb +69 -2
- data/spec/project_dir_scanner_spec.rb +195 -0
- data/spec/project_spec.rb +43 -73
- data/spec/ruby_syntax_checker_spec.rb +361 -0
- data/spec/syntax_checker_spec.rb +1132 -0
- data/spec/yaml_syntax_checker_spec.rb +130 -0
- metadata +232 -225
- data/lib/ruber/application/project_files_list.rb +0 -320
- data/spec/project_files_list_spec.rb +0 -411
@@ -367,15 +367,15 @@ This method resets the dialog.
|
|
367
367
|
@param [Object] w the object describing the widget. It must have the methods documented
|
368
368
|
below
|
369
369
|
@option w [String] caption the name of the page the widget should be put into. If
|
370
|
-
the page doesn't exist in the dialog, it will be added. Otherwise, the widget will
|
371
|
-
be added to the one already existing in the page
|
370
|
+
the page doesn't exist in the dialog, it will be added. Otherwise, the widget will
|
371
|
+
be added to the one already existing in the page
|
372
372
|
@option w [Class] class_obj (nil) the class of the widget to create. The class's
|
373
|
-
@initialize@ method must take no parameters. Either this method or the @code@
|
374
|
-
method must not be *nil*
|
373
|
+
@initialize@ method must take no parameters. Either this method or the @code@
|
374
|
+
method must not be *nil*
|
375
375
|
@option w [String] code (nil) a piece of ruby code which, when executed in the
|
376
|
-
@TOPLEVEL_BINDING@, will return the widget to add to the dialog. Either this
|
377
|
-
method or the @class_obje@ method must not be *nil*. If both are not *nil*, this
|
378
|
-
method will have the precedence
|
376
|
+
@TOPLEVEL_BINDING@, will return the widget to add to the dialog. Either this
|
377
|
+
method or the @class_obje@ method must not be *nil*. If both are not *nil*, this
|
378
|
+
method will have the precedence
|
379
379
|
@option w [String] pixmap ('') the path of the pixmap to associate to the page
|
380
380
|
@return [nil]
|
381
381
|
@see SettingsDialog#initialize
|
@@ -51,34 +51,34 @@ that each option corresponds to a single widget, you can't use it. So, you defin
|
|
51
51
|
a <tt>read_settings</tt>, a <tt>store_settings</tt> and a <tt>read_default_settings</tt>
|
52
52
|
method in your widget class like this:
|
53
53
|
|
54
|
-
|
54
|
+
bc.. class MyWidget < Qt::Widget
|
55
55
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
def read_settings
|
63
|
-
path = @settings_dialog.settings_container[:general, :default_path]
|
64
|
-
@default_dir_widget.text = File.dirname(path)
|
65
|
-
@default_file_widget.text = File.basename(path)
|
66
|
-
end
|
67
|
-
|
68
|
-
def store_settings
|
69
|
-
path = File.join @default_dir_widget.text, @default_file_widget.text
|
70
|
-
@settings_dialog.settings_container[:general, :default_path] = path
|
71
|
-
end
|
72
|
-
|
73
|
-
def read_default_settings
|
74
|
-
path = @settings_dialog.settings_container.default(:general, :default_path)
|
75
|
-
@default_dir_widget.text = File.dirname(path)
|
76
|
-
@default_file_widget.text = File.basename(path)
|
77
|
-
end
|
56
|
+
def initialize parent = nil
|
57
|
+
super
|
58
|
+
@default_dir_widget = KDE::LineEdit.new self
|
59
|
+
@default_file_widget = KDE::LineEdit.new self
|
60
|
+
end
|
78
61
|
|
62
|
+
def read_settings
|
63
|
+
path = @settings_dialog.settings_container[:general, :default_path]
|
64
|
+
@default_dir_widget.text = File.dirname(path)
|
65
|
+
@default_file_widget.text = File.basename(path)
|
66
|
+
end
|
67
|
+
|
68
|
+
def store_settings
|
69
|
+
path = File.join @default_dir_widget.text, @default_file_widget.text
|
70
|
+
@settings_dialog.settings_container[:general, :default_path] = path
|
71
|
+
end
|
72
|
+
|
73
|
+
def read_default_settings
|
74
|
+
path = @settings_dialog.settings_container.default(:general, :default_path)
|
75
|
+
@default_dir_widget.text = File.dirname(path)
|
76
|
+
@default_file_widget.text = File.basename(path)
|
79
77
|
end
|
80
78
|
|
81
|
-
|
79
|
+
end
|
80
|
+
|
81
|
+
p. Note that the <tt>@settings_dialog</tt> instance variable has been automatically
|
82
82
|
created by the dialog when the widget has been created and contains a reference
|
83
83
|
to the dialog itself.
|
84
84
|
|
data/lib/ruber/version.rb
CHANGED
@@ -110,6 +110,7 @@ The default hints used by methods like {#editor_for} and {#editor_for!}
|
|
110
110
|
super parent
|
111
111
|
@project = prj
|
112
112
|
@tab_widget = KDE::TabWidget.new{self.document_mode = true}
|
113
|
+
@tab_widget.tabs_closable = true if Ruber[:config][:workspace, :close_buttons]
|
113
114
|
connect @tab_widget, SIGNAL('currentChanged(int)'), self, SLOT('current_tab_changed(int)')
|
114
115
|
connect @tab_widget, SIGNAL('tabCloseRequested(int)'), self, SLOT('close_tab(int)')
|
115
116
|
@views = ViewList.new
|
data/lib/ruber/world/plugin.yaml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
name: world
|
2
2
|
description: Container for all the environments
|
3
|
-
require: [world, environment]
|
3
|
+
require: [world, environment, project_files_widget]
|
4
4
|
class: Ruber::World::World
|
5
5
|
config_options:
|
6
6
|
workspace:
|
@@ -8,4 +8,9 @@ config_options:
|
|
8
8
|
config_widgets:
|
9
9
|
- {caption: Workspace, pixmap: workspace.png, class: Ruber::World::WorkspaceSettingsWidget}
|
10
10
|
extensions:
|
11
|
-
environment: {class: Ruber::World::Environment, scope: global}
|
11
|
+
environment: {class: Ruber::World::Environment, scope: global}
|
12
|
+
project_options:
|
13
|
+
general:
|
14
|
+
project_files: {default: {:include: [], :exclude: [], :extensions: ["*.rb"]}}
|
15
|
+
project_widgets:
|
16
|
+
- {caption: Files, pixmap: configure, class: Ruber::ProjectFilesWidget}
|
File without changes
|
@@ -1,8 +1,8 @@
|
|
1
1
|
=begin
|
2
2
|
** Form generated from reading ui file 'project_files_rule_chooser_widget.ui'
|
3
3
|
**
|
4
|
-
** Created:
|
5
|
-
** by: Qt User Interface Compiler version 4.7.
|
4
|
+
** Created: dom lug 31 08:50:39 2011
|
5
|
+
** by: Qt User Interface Compiler version 4.7.3
|
6
6
|
**
|
7
7
|
** WARNING! All changes made in this file will be lost when recompiling ui file!
|
8
8
|
=end
|
File without changes
|
@@ -1,8 +1,8 @@
|
|
1
1
|
=begin
|
2
2
|
** Form generated from reading ui file 'project_files_widget.ui'
|
3
3
|
**
|
4
|
-
** Created:
|
5
|
-
** by: Qt User Interface Compiler version 4.7.
|
4
|
+
** Created: dom lug 31 08:50:39 2011
|
5
|
+
** by: Qt User Interface Compiler version 4.7.3
|
6
6
|
**
|
7
7
|
** WARNING! All changes made in this file will be lost when recompiling ui file!
|
8
8
|
=end
|
File without changes
|
@@ -87,13 +87,7 @@ character class is used from ruby 1.9.2 onward, while @\w@ is used for previous
|
|
87
87
|
versions
|
88
88
|
=end
|
89
89
|
IDENTIFIER_PATTERN = RUBY_VERSION >= '1.9.2' ? '\p{Word}+' : '\w+'
|
90
|
-
|
91
|
-
=begin rdoc
|
92
|
-
The regexp fragment which matches a multiple identifier (that is, an identifier
|
93
|
-
maybe followed by several other identifiers separated by @::@)
|
94
|
-
=end
|
95
|
-
MULTI_ID_PATTERN = "#{IDENTIFIER_PATTERN}(?:::#{IDENTIFIER_PATTERN})*"
|
96
|
-
|
90
|
+
|
97
91
|
=begin rdoc
|
98
92
|
The patterns used to find out whether an @end@ keyword should be inserted after
|
99
93
|
a line.
|
@@ -112,18 +106,19 @@ Each entry is itself an array with three elements:
|
|
112
106
|
[/\bdo\s*$/, "\nend", [0, -1]],
|
113
107
|
[/\bdo\s+\|/, "\nend", [0, -1]],
|
114
108
|
[/^\s*def\s/, "\nend", [0, -1]],
|
115
|
-
[
|
116
|
-
[
|
117
|
-
[/^\s*
|
109
|
+
[/\bclass\b/, "\nend", [0, -1]],
|
110
|
+
[/\bmodule\b/, "\nend", [0, -1]],
|
111
|
+
[/^\s*case\b/, "\nend", [0, -1]],
|
112
|
+
[/=\s*case\b/, "\nend", [0, -1]],
|
118
113
|
[/^\s*while\s/, "\nend", [0,-1]],
|
119
114
|
[/^\s*until\s/, "\nend", [0,-1]],
|
120
|
-
|
115
|
+
[/^=begin(\s|$)/, "\n=end", [0, -1]],
|
121
116
|
[/^\s*begin\s/, "\nend", [0, -1]],
|
122
117
|
[/(^=\s+|.=\s*)begin\s/, "\nend", [0, -1]],
|
123
|
-
[/^\s*for\s
|
124
|
-
[/=\s*for\s
|
118
|
+
[/^\s*for\s/, "\nend", [0,-1]],
|
119
|
+
[/=\s*for\s/, "\nend", [0,-1]]
|
125
120
|
]
|
126
|
-
|
121
|
+
|
127
122
|
=begin rdoc
|
128
123
|
@param [DocumentProject] prj the project associated with the document
|
129
124
|
=end
|
@@ -149,15 +144,22 @@ position (if any) is forgotten
|
|
149
144
|
@param [KTextEditor::Range] the range corresponding to the inserted text
|
150
145
|
=end
|
151
146
|
def text_inserted range
|
147
|
+
return unless @doc.active?
|
152
148
|
text = @doc.text range
|
153
149
|
return unless text.end_with? "\n"
|
154
150
|
@insertion = nil
|
155
151
|
line = @doc.line( range.end.line - 1)
|
156
152
|
pattern = PATTERNS.find{|pat| pat[0].match line}
|
157
153
|
if pattern and !line.start_with? '#'
|
158
|
-
|
159
|
-
|
160
|
-
unless
|
154
|
+
check_res = @doc.extension(:syntax_checker).check_syntax(:format => false,
|
155
|
+
:update => false)
|
156
|
+
return unless check_res
|
157
|
+
errors = check_res[:errors]
|
158
|
+
# Usually, missing end errors are the last ones to be reported
|
159
|
+
if errors && !errors.empty? && errors[-1].error_type == :missing_end
|
160
|
+
# indentation = line.match(/^\s*/)[0].size
|
161
|
+
# next_indentation = @doc.line(range.end.line + 1).match(/^\s*/)[0].size
|
162
|
+
# unless next_indentation > indentation
|
161
163
|
@insertion = Insertion.new range.end.line, pattern[1], pattern[2]
|
162
164
|
end
|
163
165
|
end
|
@@ -245,4 +247,5 @@ is called. After the text has been inserted {#connect_slots} is called.
|
|
245
247
|
|
246
248
|
end
|
247
249
|
|
248
|
-
end
|
250
|
+
end
|
251
|
+
|
@@ -237,7 +237,7 @@ into account the enabled option and always attempt to save the documents.
|
|
237
237
|
=end
|
238
238
|
def save_project_files opts, blk
|
239
239
|
docs = Ruber[:world].active_environment.documents.documents_with_file
|
240
|
-
prj_files = Ruber[:world].active_project.project_files
|
240
|
+
prj_files = Ruber[:world].active_project.project_files
|
241
241
|
docs = docs.select{|d| prj_files.include? d.path}
|
242
242
|
save_files docs, opts, blk
|
243
243
|
end
|
@@ -280,7 +280,7 @@ the following entries:
|
|
280
280
|
places = case @dlg.places
|
281
281
|
when :custom_dir then @dlg.directory
|
282
282
|
when :project_dir then Ruber[:world].active_project.project_directory
|
283
|
-
when :project_files then Ruber[:world].active_project.project_files.
|
283
|
+
when :project_files then Ruber[:world].active_project.project_files.to_a
|
284
284
|
when :open_files then Ruber[:world].documents.documents_with_file.map{|d| d.path}
|
285
285
|
end
|
286
286
|
opts[:places] = Array(places)
|
data/plugins/irb/irb.png
ADDED
Binary file
|
data/plugins/irb/irb.rb
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright (C) 2011 by Stefano Crocco
|
3
|
+
stefano.crocco@alice.it
|
4
|
+
|
5
|
+
This program is free software; you can redistribute it andor modify
|
6
|
+
it under the terms of the GNU General Public License as published by
|
7
|
+
the Free Software Foundation; either version 2 of the License, or
|
8
|
+
(at your option) any later version.
|
9
|
+
|
10
|
+
This program is distributed in the hope that it will be useful,
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
GNU General Public License for more details.
|
14
|
+
|
15
|
+
You should have received a copy of the GNU General Public License
|
16
|
+
along with this program; if not, write to the
|
17
|
+
Free Software Foundation, Inc.,
|
18
|
+
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
19
|
+
=end
|
20
|
+
|
21
|
+
require 'irb/irb_controller'
|
22
|
+
require_relative 'ui/irb_tool_widget'
|
23
|
+
require_relative 'ui/irb_config_widget'
|
24
|
+
|
25
|
+
module Ruber
|
26
|
+
|
27
|
+
module IRB
|
28
|
+
|
29
|
+
class Plugin < Ruber::Plugin
|
30
|
+
|
31
|
+
def shutdown
|
32
|
+
@widget.stop
|
33
|
+
super
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
class IRBWidget < Qt::Widget
|
39
|
+
|
40
|
+
PROMPTS = {
|
41
|
+
:PROMPT_I=>"%N(%m):%03n:%i> ",
|
42
|
+
:PROMPT_N=>"%N(%m):%03n:%i> ",
|
43
|
+
:PROMPT_S=>"%N(%m):%03n:%i%l ",
|
44
|
+
:PROMPT_C=>"%N(%m):%03n:%i* ",
|
45
|
+
:RETURN=>"=> "
|
46
|
+
}
|
47
|
+
|
48
|
+
def initialize parent = nil
|
49
|
+
super
|
50
|
+
@ui = Ui::ToolWidget.new
|
51
|
+
@ui.setup_ui self
|
52
|
+
@view = @ui.view
|
53
|
+
@input = @ui.input
|
54
|
+
self.focus_proxy = @input
|
55
|
+
@controller = IRBController.new Ruber[:config][:irb, :irb], [], self
|
56
|
+
@controller.connect(SIGNAL(:output_ready)){ display_output @controller.output}
|
57
|
+
@display_output = true
|
58
|
+
@controller.prompts = Ruber[:config][:irb, :prompts]
|
59
|
+
@controller.start_irb
|
60
|
+
@input.connect(SIGNAL('returnPressed(QString)')){|s| send_to_irb s}
|
61
|
+
@input.completion_mode = KDE::GlobalSettings::CompletionAuto
|
62
|
+
@controller.connect SIGNAL(:ready) do
|
63
|
+
@input.enabled = true
|
64
|
+
@input.set_focus if is_active_window
|
65
|
+
end
|
66
|
+
@ui.restart_irb.connect(SIGNAL(:clicked)){ @controller.restart_irb}
|
67
|
+
@ui.send_abort.connect(SIGNAL(:clicked)){ @controller.interrupt}
|
68
|
+
@controller.connect(SIGNAL(:interrupting_evaluation)){ @display_output = false}
|
69
|
+
@controller.connect(SIGNAL(:evaluation_interrupted)){ @display_output = true}
|
70
|
+
@cursor = @view.text_cursor
|
71
|
+
@formats = {
|
72
|
+
:input => Qt::TextCharFormat.new{|c| c.foreground = Qt::Brush.new Ruber[:config][:output_colors, :message]},
|
73
|
+
:output => Qt::TextCharFormat.new{|c| c.foreground = Qt::Brush.new Ruber[:config][:output_colors, :output]}
|
74
|
+
}
|
75
|
+
end
|
76
|
+
|
77
|
+
def stop
|
78
|
+
@controller.stop_irb
|
79
|
+
end
|
80
|
+
|
81
|
+
def load_settings
|
82
|
+
@controller.prompts = Ruber[:config][:irb, :prompts]
|
83
|
+
end
|
84
|
+
slots :load_settings
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def display_output lines
|
89
|
+
return unless @display_output
|
90
|
+
@cursor.move_position Qt::TextCursor::End
|
91
|
+
lines.each do |l|
|
92
|
+
Ruber[:app].process_events
|
93
|
+
@cursor.char_format = @formats[l.category]
|
94
|
+
@cursor.insert_text l.full_text+"\n"
|
95
|
+
end
|
96
|
+
@cursor.move_position Qt::TextCursor::End
|
97
|
+
@view.text_cursor = @cursor
|
98
|
+
@view.ensure_cursor_visible
|
99
|
+
end
|
100
|
+
|
101
|
+
def send_to_irb line
|
102
|
+
@input.completion_object.add_item line
|
103
|
+
@input.insert_item 0, line
|
104
|
+
@input.edit_text = ''
|
105
|
+
@input.enabled = false
|
106
|
+
@controller.send_to_irb [line]
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
class ConfigWidget < Qt::Widget
|
112
|
+
|
113
|
+
def initialize parent = nil
|
114
|
+
super
|
115
|
+
@ui = Ui::ConfigWidget.new
|
116
|
+
@ui.setup_ui self
|
117
|
+
end
|
118
|
+
|
119
|
+
def read_settings
|
120
|
+
prompts = @settings_dialog.container[:irb, :prompts]
|
121
|
+
@ui.prompt_i.text = prompts[:PROMPT_I]
|
122
|
+
@ui.prompt_n.text = prompts[:PROMPT_N]
|
123
|
+
@ui.prompt_s.text = prompts[:PROMPT_S]
|
124
|
+
@ui.prompt_c.text = prompts[:PROMPT_C]
|
125
|
+
@ui.prompt_return.text = prompts[:RETURN]
|
126
|
+
end
|
127
|
+
|
128
|
+
def store_settings
|
129
|
+
prompts = {}
|
130
|
+
prompts[:PROMPT_I] = @ui.prompt_i.text
|
131
|
+
prompts[:PROMPT_N] = @ui.prompt_n.text
|
132
|
+
prompts[:PROMPT_S] = @ui.prompt_s.text
|
133
|
+
prompts[:PROMPT_C] = @ui.prompt_c.text
|
134
|
+
prompts[:RETURN] = @ui.prompt_return.text
|
135
|
+
@settings_dialog.container[:irb, :prompts] = prompts
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
data/plugins/irb/irb.svg
ADDED
@@ -0,0 +1,240 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
3
|
+
|
4
|
+
<svg
|
5
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
6
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
7
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
8
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
10
|
+
xmlns:xlink="http://www.w3.org/1999/xlink"
|
11
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
12
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
13
|
+
width="64"
|
14
|
+
height="64"
|
15
|
+
id="svg2"
|
16
|
+
version="1.1"
|
17
|
+
inkscape:version="0.48.2 r9819"
|
18
|
+
sodipodi:docname="irbsvg.svg"
|
19
|
+
inkscape:export-filename="/home/stefano/documenti/programmi/ruber/ruber/plugins/irb/irb.png"
|
20
|
+
inkscape:export-xdpi="90"
|
21
|
+
inkscape:export-ydpi="90">
|
22
|
+
<defs
|
23
|
+
id="defs4">
|
24
|
+
<linearGradient
|
25
|
+
id="linearGradient3899">
|
26
|
+
<stop
|
27
|
+
style="stop-color:#777777;stop-opacity:1;"
|
28
|
+
offset="0"
|
29
|
+
id="stop3901" />
|
30
|
+
<stop
|
31
|
+
style="stop-color:#d4d4d4;stop-opacity:1;"
|
32
|
+
offset="1"
|
33
|
+
id="stop3903" />
|
34
|
+
</linearGradient>
|
35
|
+
<linearGradient
|
36
|
+
id="linearGradient3765">
|
37
|
+
<stop
|
38
|
+
id="stop3773"
|
39
|
+
offset="0"
|
40
|
+
style="stop-color:#888888;stop-opacity:1;" />
|
41
|
+
<stop
|
42
|
+
style="stop-color:#c7c7c7;stop-opacity:0.51485151;"
|
43
|
+
offset="1"
|
44
|
+
id="stop3769" />
|
45
|
+
</linearGradient>
|
46
|
+
<linearGradient
|
47
|
+
inkscape:collect="always"
|
48
|
+
xlink:href="#linearGradient3765"
|
49
|
+
id="linearGradient3802"
|
50
|
+
gradientUnits="userSpaceOnUse"
|
51
|
+
gradientTransform="translate(-63.904188,988.26635)"
|
52
|
+
x1="-0.095808387"
|
53
|
+
y1="32.095808"
|
54
|
+
x2="8.9101797"
|
55
|
+
y2="32.095808" />
|
56
|
+
<linearGradient
|
57
|
+
inkscape:collect="always"
|
58
|
+
xlink:href="#linearGradient3765"
|
59
|
+
id="linearGradient3805"
|
60
|
+
gradientUnits="userSpaceOnUse"
|
61
|
+
gradientTransform="translate(-1052.2664,-64.095813)"
|
62
|
+
x1="-0.095808387"
|
63
|
+
y1="32.095808"
|
64
|
+
x2="8.9101797"
|
65
|
+
y2="32.095808" />
|
66
|
+
<linearGradient
|
67
|
+
inkscape:collect="always"
|
68
|
+
xlink:href="#linearGradient3765"
|
69
|
+
id="linearGradient3808"
|
70
|
+
gradientUnits="userSpaceOnUse"
|
71
|
+
gradientTransform="translate(988.45799,-64.095813)"
|
72
|
+
x1="-0.095808387"
|
73
|
+
y1="32.095808"
|
74
|
+
x2="8.9101797"
|
75
|
+
y2="32.095808" />
|
76
|
+
<linearGradient
|
77
|
+
inkscape:collect="always"
|
78
|
+
xlink:href="#linearGradient3765"
|
79
|
+
id="linearGradient3811"
|
80
|
+
gradientUnits="userSpaceOnUse"
|
81
|
+
x1="-0.095808387"
|
82
|
+
y1="32.095808"
|
83
|
+
x2="8.9101797"
|
84
|
+
y2="32.095808"
|
85
|
+
gradientTransform="translate(0.09580839,988.26635)" />
|
86
|
+
<linearGradient
|
87
|
+
inkscape:collect="always"
|
88
|
+
xlink:href="#linearGradient3765"
|
89
|
+
id="linearGradient3861"
|
90
|
+
gradientUnits="userSpaceOnUse"
|
91
|
+
gradientTransform="translate(-63.904188,988.26635)"
|
92
|
+
x1="-0.095808387"
|
93
|
+
y1="32.095808"
|
94
|
+
x2="8.9101797"
|
95
|
+
y2="32.095808" />
|
96
|
+
<linearGradient
|
97
|
+
inkscape:collect="always"
|
98
|
+
xlink:href="#linearGradient3765"
|
99
|
+
id="linearGradient3864"
|
100
|
+
gradientUnits="userSpaceOnUse"
|
101
|
+
gradientTransform="translate(-1052.2664,-64.095813)"
|
102
|
+
x1="-0.095808387"
|
103
|
+
y1="32.095808"
|
104
|
+
x2="8.9101797"
|
105
|
+
y2="32.095808" />
|
106
|
+
<linearGradient
|
107
|
+
inkscape:collect="always"
|
108
|
+
xlink:href="#linearGradient3765"
|
109
|
+
id="linearGradient3867"
|
110
|
+
gradientUnits="userSpaceOnUse"
|
111
|
+
gradientTransform="translate(988.45799,-64.095813)"
|
112
|
+
x1="-0.095808387"
|
113
|
+
y1="32.095808"
|
114
|
+
x2="8.9101797"
|
115
|
+
y2="32.095808" />
|
116
|
+
<linearGradient
|
117
|
+
inkscape:collect="always"
|
118
|
+
xlink:href="#linearGradient3765"
|
119
|
+
id="linearGradient3870"
|
120
|
+
gradientUnits="userSpaceOnUse"
|
121
|
+
gradientTransform="translate(0.09580839,988.26635)"
|
122
|
+
x1="-0.095808387"
|
123
|
+
y1="32.095808"
|
124
|
+
x2="8.9101797"
|
125
|
+
y2="32.095808" />
|
126
|
+
<linearGradient
|
127
|
+
inkscape:collect="always"
|
128
|
+
xlink:href="#linearGradient3765"
|
129
|
+
id="linearGradient3880"
|
130
|
+
gradientUnits="userSpaceOnUse"
|
131
|
+
gradientTransform="matrix(0,1,-1,0,64.095813,0.09581)"
|
132
|
+
x1="-0.095808387"
|
133
|
+
y1="32.095808"
|
134
|
+
x2="8.9101797"
|
135
|
+
y2="32.095808" />
|
136
|
+
<linearGradient
|
137
|
+
inkscape:collect="always"
|
138
|
+
xlink:href="#linearGradient3765"
|
139
|
+
id="linearGradient3883"
|
140
|
+
gradientUnits="userSpaceOnUse"
|
141
|
+
gradientTransform="translate(0.09580839,-0.09583)"
|
142
|
+
x1="-0.095808387"
|
143
|
+
y1="32.095808"
|
144
|
+
x2="8.9101797"
|
145
|
+
y2="32.095808" />
|
146
|
+
<linearGradient
|
147
|
+
inkscape:collect="always"
|
148
|
+
xlink:href="#linearGradient3765"
|
149
|
+
id="linearGradient3886"
|
150
|
+
gradientUnits="userSpaceOnUse"
|
151
|
+
gradientTransform="translate(0.09580839,-0.09583)"
|
152
|
+
x1="-0.095808387"
|
153
|
+
y1="32.095808"
|
154
|
+
x2="8.9101797"
|
155
|
+
y2="32.095808" />
|
156
|
+
</defs>
|
157
|
+
<sodipodi:namedview
|
158
|
+
id="base"
|
159
|
+
pagecolor="#ffffff"
|
160
|
+
bordercolor="#666666"
|
161
|
+
borderopacity="1.0"
|
162
|
+
inkscape:pageopacity="0.0"
|
163
|
+
inkscape:pageshadow="2"
|
164
|
+
inkscape:zoom="10.4375"
|
165
|
+
inkscape:cx="32"
|
166
|
+
inkscape:cy="32"
|
167
|
+
inkscape:document-units="px"
|
168
|
+
inkscape:current-layer="layer1"
|
169
|
+
showgrid="false"
|
170
|
+
inkscape:window-width="1440"
|
171
|
+
inkscape:window-height="847"
|
172
|
+
inkscape:window-x="-9"
|
173
|
+
inkscape:window-y="0"
|
174
|
+
inkscape:window-maximized="1" />
|
175
|
+
<metadata
|
176
|
+
id="metadata7">
|
177
|
+
<rdf:RDF>
|
178
|
+
<cc:Work
|
179
|
+
rdf:about="">
|
180
|
+
<dc:format>image/svg+xml</dc:format>
|
181
|
+
<dc:type
|
182
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
183
|
+
<dc:title></dc:title>
|
184
|
+
</cc:Work>
|
185
|
+
</rdf:RDF>
|
186
|
+
</metadata>
|
187
|
+
<g
|
188
|
+
inkscape:label="Layer 1"
|
189
|
+
inkscape:groupmode="layer"
|
190
|
+
id="layer1"
|
191
|
+
transform="translate(0,-988.36218)">
|
192
|
+
<path
|
193
|
+
style="fill:#999999;fill-opacity:1"
|
194
|
+
d="M 0 0 L 0 9 L 0 55 L 0 64 L 9 64 L 55 64 L 64 64 L 64 55 L 64 9 L 64 0 L 55 0 L 9 0 L 0 0 z M 9 9 L 55 9 L 55 55 L 9 55 L 9 9 z "
|
195
|
+
transform="translate(0,988.36218)"
|
196
|
+
id="rect2985" />
|
197
|
+
<rect
|
198
|
+
style="fill:#aa0044;fill-opacity:1"
|
199
|
+
id="rect3819"
|
200
|
+
width="51.725464"
|
201
|
+
height="51.832333"
|
202
|
+
x="6.1372685"
|
203
|
+
y="994.44604" />
|
204
|
+
<rect
|
205
|
+
style="fill:#ffffff;fill-opacity:1"
|
206
|
+
id="rect3829"
|
207
|
+
width="38.514973"
|
208
|
+
height="2.1077843"
|
209
|
+
x="9.8682632"
|
210
|
+
y="1001.2964" />
|
211
|
+
<rect
|
212
|
+
y="1033.1049"
|
213
|
+
x="9.8682632"
|
214
|
+
height="2.1077843"
|
215
|
+
width="35.065868"
|
216
|
+
id="rect3831"
|
217
|
+
style="fill:#ffffff;fill-opacity:1" />
|
218
|
+
<rect
|
219
|
+
style="fill:#ffffff;fill-opacity:1"
|
220
|
+
id="rect3833"
|
221
|
+
width="26.730541"
|
222
|
+
height="2.1077843"
|
223
|
+
x="9.8682632"
|
224
|
+
y="1024.2904" />
|
225
|
+
<rect
|
226
|
+
y="1016.7216"
|
227
|
+
x="9.8682632"
|
228
|
+
height="2.1077843"
|
229
|
+
width="42.059879"
|
230
|
+
id="rect3835"
|
231
|
+
style="fill:#ffffff;fill-opacity:1" />
|
232
|
+
<rect
|
233
|
+
style="fill:#ffffff;fill-opacity:1"
|
234
|
+
id="rect3837"
|
235
|
+
width="31.52096"
|
236
|
+
height="2.1077843"
|
237
|
+
x="9.8682632"
|
238
|
+
y="1009.2485" />
|
239
|
+
</g>
|
240
|
+
</svg>
|