ruber 0.0.9 → 0.0.10
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/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>
|