Merge branch 'master' into gtk3-support

This commit is contained in:
Colomban Wendling 2013-01-29 15:29:10 +01:00
commit 8ece89096d
121 changed files with 11709 additions and 4939 deletions

4
.gitignore vendored
View File

@ -46,7 +46,9 @@ Makefile.in
/localwin32.mk
/.lock-wscript
/ltmain.sh
/m4/
/m4/lt*.m4
/m4/intltool.m4
/m4/libtool.m4
/make_deb.sh
/missing
/mkinstalldirs

3
NEWS
View File

@ -7,7 +7,8 @@ Geany 1.23 (unreleased)
* Fix too aggressive scope caching (#2142789, #2667917, #2868850).
Editor
* Update Scintilla to version 3.2.2 (#2808638, #3540469).
* Update Scintilla to version 3.2.3 (#2808638, #2909124, #3094431,
#3233160, #3540469).
Search
* 'Mark All' now also uses the fully-featured PCRE engine (#3564132).

View File

@ -115,8 +115,16 @@ AC_CONFIG_FILES([
Makefile
icons/Makefile
icons/16x16/Makefile
icons/24x24/Makefile
icons/32x32/Makefile
icons/48x48/Makefile
icons/scalable/Makefile
icons/tango/Makefile
icons/tango/16x16/Makefile
icons/tango/24x24/Makefile
icons/tango/32x32/Makefile
icons/tango/48x48/Makefile
icons/tango/scalable/Makefile
tagmanager/Makefile
tagmanager/ctags/Makefile
tagmanager/mio/Makefile

View File

@ -5,6 +5,7 @@
Abc=*.abc;*.abp;
ActionScript=*.as;
Ada=*.adb;*.ads;
Asciidoc=*.asciidoc;
ASM=*.asm;
CAML=*.ml;*.mli;
C=*.c;*.h;

35
data/filetypes.asciidoc Normal file
View File

@ -0,0 +1,35 @@
# For complete documentation of this file, please see Geany's main documentation
[styling]
# no syntax highlighting yet
[settings]
# default extension used when saving files
extension=asciidoc
# the following characters are these which a "word" can contains, see documentation
#wordchars=_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
# single comments, like # in this file
comment_single=//
# multiline comments
#comment_open=////
#comment_close=////
# set to false if a comment character/string should start at column 0 of a line, true uses any
# indentation of the line, e.g. setting to true causes the following on pressing CTRL+d
#command_example();
# setting to false would generate this
# command_example();
# This setting works only for single line comments
comment_use_indent=false
# context action command (please see Geany's main documentation for details)
context_action_cmd=
# sort tags by appearance
symbol_list_sort_mode=1
[indentation]
#width=4
# 0 is spaces, 1 is tabs, 2 is tab & spaces
#type=1

View File

@ -10,6 +10,7 @@ number=number_1
word=keyword_1
word2=keyword_2
string=string_1
stringraw=string_2
character=character
uuid=other
preprocessor=preprocessor

View File

@ -1,7 +1,7 @@
# For complete documentation of this file, please see Geany's main documentation
[styling]
# Edit these in the colorscheme .conf file instead
default=value
default=default
comment=comment
section=tag
key=attribute

View File

@ -3,13 +3,20 @@
# Edit these in the colorscheme .conf file instead
default=default
comment=comment
programmer_comment=comment_doc
reference=comment
flags=comment
fuzzy=comment_doc_keyword
msgid=keyword_1
msgid_text=string_1
msgid_text_eol=string_eol
msgstr=keyword_2
msgstr_text=string_1
msgstr_text_eol=string_eol
msgctxt=keyword_3
msgctxt_text=string_1
fuzzy=comment_doc_keyword
msgctxt_text_eol=string_eol
error=error
[settings]
# default extension used when saving files

View File

@ -10,7 +10,7 @@ extension=rst
#wordchars=_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
# single comments, like # in this file
comment_single=..
comment_single=..\s
# multiline comments
#comment_open=
#comment_close=

View File

@ -3,6 +3,13 @@
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkAccelGroup" id="accelgroup1"/>
<object class="GtkIconFactory" id="iconfactory1">
<sources>
<source stock-id="geany-build" icon-name="geany-build"/>
<source stock-id="geany-close-all" icon-name="geany-close-all"/>
<source stock-id="geany-save-all" icon-name="geany-save-all"/>
</sources>
</object>
<object class="GtkAdjustment" id="adjustment1">
<property name="lower">3</property>
<property name="upper">1000</property>
@ -467,7 +474,7 @@
<object class="GtkImage" id="image4061">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-close</property>
<property name="stock">geany-close-all</property>
<property name="icon-size">1</property>
</object>
<object class="GtkImage" id="image4062">
@ -671,7 +678,7 @@
<object class="GtkImage" id="image4057">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-save</property>
<property name="stock">geany-save-all</property>
<property name="icon-size">1</property>
</object>
<object class="GtkImage" id="image4058">
@ -713,6 +720,7 @@
<property name="type_hint">dialog</property>
<property name="skip_pager_hint">True</property>
<property name="has_separator">True</property>
<property name="icon_name">geany</property>
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox3">
<property name="visible">True</property>
@ -5879,6 +5887,20 @@
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="bg_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Background image:</property>
</object>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="terminal_scrollback_lines_label">
<property name="visible">True</property>
@ -5887,8 +5909,8 @@
<property name="label" translatable="yes">Scrollback lines:</property>
</object>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
@ -5901,8 +5923,8 @@
<property name="label" translatable="yes">Shell:</property>
</object>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
@ -5931,7 +5953,7 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Sets the backround color of the text in the terminal widget</property>
<property name="tooltip_text" translatable="yes">Sets the background color of the text in the terminal widget</property>
<property name="title" translatable="yes">Color Chooser</property>
<property name="color">#000000000000</property>
</object>
@ -5943,6 +5965,49 @@
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry_image">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tooltip_text" translatable="yes">Sets the path to the background image in the terminal widget</property>
<property name="invisible_char">•</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button_term_image">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<child>
<object class="GtkImage" id="image1337">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-open</property>
<property name="icon-size">1</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spin_scrollback">
<property name="visible">True</property>
@ -5960,8 +6025,8 @@
<packing>
<property name="left_attach">1</property>
<property name="right_attach">3</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
@ -5979,8 +6044,8 @@
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
@ -6002,8 +6067,8 @@
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
@ -6366,6 +6431,7 @@
<property name="type_hint">dialog</property>
<property name="transient_for">window1</property>
<property name="has_separator">True</property>
<property name="icon_name">geany</property>
<child internal-child="vbox">
<object class="GtkVBox" id="project_dialog_vbox">
<property name="visible">True</property>
@ -7227,6 +7293,7 @@
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Geany</property>
<property name="icon_name">geany</property>
<child internal-child="accessible">
<object class="AtkObject" id="window1-atkobject">
<property name="AtkObject::accessible-name" translatable="yes">Geany</property>
@ -7699,6 +7766,32 @@
<signal name="activate" handler="on_select_current_paragraph1_activate" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separator63">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="move_lines_up1">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Move Line(s) Up</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_move_lines_up1_activate" swapped="no"/>
</object>
</child>
<child>
<object class="GtkMenuItem" id="move_lines_down1">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Move Line(s) Down</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_move_lines_down1_activate" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separator52">
<property name="visible">True</property>
@ -7749,16 +7842,6 @@
<signal name="activate" handler="on_toggle_case1_activate" swapped="no"/>
</object>
</child>
<child>
<object class="GtkMenuItem" id="transpose_current_line1">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Transpose Current Line</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_transpose_current_line1_activate" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separator28">
<property name="visible">True</property>
@ -8864,6 +8947,16 @@
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="clone1">
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Clone</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_clone1_activate" swapped="no"/>
</object>
</child>
<child>
<object class="GtkMenuItem" id="strip_trailing_spaces1">
<property name="use_action_appearance">False</property>

File diff suppressed because it is too large Load Diff

View File

@ -565,6 +565,14 @@ order. It is not alphabetical as shown in the documents list
See the `Notebook tab keybindings`_ section for useful
shortcuts including for Most-Recently-Used document switching.
Cloning documents
^^^^^^^^^^^^^^^^^
The `Document->Clone` menu item copies the current document's text,
cursor position and properties into a new untitled document. If
there is a selection, only the selected text is copied. This can be
useful when making temporary copies of text or for creating
documents with similar or identical contents.
Character sets and Unicode Byte-Order-Mark (BOM)
------------------------------------------------
@ -2011,9 +2019,9 @@ Use indicators to show compile errors
Underline lines with compile errors using red squiggles to indicate
them in the editor area.
Newline strip trailing spaces
Remove any white space at the end of the line when you hit the
Enter/Return key.
Newline strips trailing spaces
Remove any whitespace at the end of the line when you hit the
Enter/Return key. See also `Strip trailing spaces`_.
Line breaking column
The editor column number to insert a newline at when Line Breaking
@ -2297,8 +2305,13 @@ Ensure consistent line endings
Ensures that newline characters always get converted before
saving, avoiding mixed line endings in the same file.
.. _Strip trailing spaces:
Strip trailing spaces
Remove the trailing spaces on each line of the document.
Remove any whitespace at the end of each document line.
.. note::
This does not apply to Diff documents, e.g. patch files.
Replace tabs by space
Replace all tabs in the document with the equivalent number of spaces.
@ -2476,10 +2489,11 @@ indent_hard_tab_width The size of a tab character. Don't change 8
**Interface related**
show_symbol_list_expanders Whether to show or hide the small true to new
expander icons on the symbol list documents
allow_always_save treeview. Whether files can be saved false immediately
always, even if they don't have any
changes. By default, the Save button and
menu item are disabled when a file is
treeview.
allow_always_save Whether files can be saved always, even false immediately
if they don't have any changes.
By default, the Save button and menu
item are disabled when a file is
unchanged. When setting this option to
true, the Save button and menu item are
always active and files can be saved.
@ -2590,6 +2604,9 @@ Foreground color
Background color
Select the background color of the terminal.
Background image
Select the background image to show behind the terminal's text.
Scrollback lines
The number of lines buffered so that you can scroll though the history.
@ -3462,7 +3479,8 @@ Find Document Usage Ctrl-Shift-D Finds all occurrences
Mark All Ctrl-Shift-M Highlight all matches of the current
word/selection in the current document
with a colored box. If there's nothing to
find, highlighted matches will be cleared.
find, or the cursor is next to an existing match,
the highlighted matches will be cleared.
=============================== ========================= ==================================================
@ -3610,6 +3628,8 @@ Document keybindings
==================================== ==================== ==================================================
Action Default shortcut Description
==================================== ==================== ==================================================
Clone See `Cloning documents`_.
Replace tabs by space Replaces all tabs with the right amount of spaces.
Replace spaces by tabs Replaces leading spaces with tab characters.

View File

@ -1,6 +1,8 @@
iconsdir = $(datadir)/icons/hicolor/16x16/apps
iconsdir = $(datadir)/icons/hicolor/16x16
icons_appsdir = $(iconsdir)/apps
icons_actionsdir = $(iconsdir)/actions
icons_DATA = \
dist_icons_apps_DATA = \
classviewer-class.png \
classviewer-macro.png \
classviewer-member.png \
@ -11,6 +13,7 @@ icons_DATA = \
classviewer-var.png \
geany.png
EXTRA_DIST = $(icons_DATA) \
classviewer-var.xpm \
classviewer-method.xpm
dist_icons_actions_DATA = \
geany-build.png \
geany-close-all.png \
geany-save-all.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 332 B

After

Width:  |  Height:  |  Size: 257 B

View File

@ -1,27 +0,0 @@
/* XPM */
static char *classviewer_method[] = {
/* columns rows colors chars-per-pixel */
"16 16 5 1",
" c black",
". c #E0BC38",
"X c #F0DC5C",
"o c #FCFC80",
"O c None",
/* pixels */
"OOOOOOOOOOOOOOOO",
"OOOOOOOOOOOOOOOO",
"OOOOOOOOOOOOOOOO",
"OOOOOOOOOO OOOO",
"OOOOOOOOO oo OO",
"OOOOOOOO ooooo O",
"OOOOOOO ooooo. O",
"OOOO O XXoo.. O",
"OOO oo XXX... O",
"OO ooooo XX.. OO",
"O ooooo. X. OOO",
"O XXoo.. O OOOO",
"O XXX... OOOOOOO",
"O XXX.. OOOOOOOO",
"OO X. OOOOOOOOO",
"OOOO OOOOOOOOOO"
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 B

After

Width:  |  Height:  |  Size: 273 B

View File

@ -1,27 +0,0 @@
/* XPM */
static char *classviewer_var[] = {
/* columns rows colors chars-per-pixel */
"16 16 5 1",
" c black",
". c #8C748C",
"X c #9C94A4",
"o c #ACB4C0",
"O c None",
/* pixels */
"OOOOOOOOOOOOOOOO",
"OOOOOOOOOOOOOOOO",
"OOOOOOOOOOOOOOOO",
"OOOOOOOOOOOOOOOO",
"OOOOOOOOOOOOOOOO",
"OOOOOOOOOOOOOOOO",
"OOOOOOOOO OOOOO",
"OOOOOOOO oo OOO",
"OOOOOOO ooooo OO",
"OOOOOO ooooo. OO",
"OOOOOO XXoo.. OO",
"OOOOOO XXX... OO",
"OOOOOO XXX.. OOO",
"OOOOOOO X. OOOO",
"OOOOOOOOO OOOOO",
"OOOOOOOOOOOOOOOO"
};

BIN
icons/16x16/geany-build.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 785 B

6
icons/24x24/Makefile.am Normal file
View File

@ -0,0 +1,6 @@
icons_actionsdir = $(datadir)/icons/hicolor/24x24/actions
dist_icons_actions_DATA = \
geany-build.png \
geany-close-all.png \
geany-save-all.png

BIN
icons/24x24/geany-build.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

6
icons/32x32/Makefile.am Normal file
View File

@ -0,0 +1,6 @@
icons_actionsdir = $(datadir)/icons/hicolor/32x32/actions
dist_icons_actions_DATA = \
geany-build.png \
geany-close-all.png \
geany-save-all.png

BIN
icons/32x32/geany-build.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -1,4 +1,11 @@
iconsdir = $(datadir)/icons/hicolor/48x48/apps
icons_DATA = geany.png
iconsdir = $(datadir)/icons/hicolor/48x48
icons_appsdir = $(iconsdir)/apps
icons_actionsdir = $(iconsdir)/actions
EXTRA_DIST = $(icons_DATA)
dist_icons_apps_DATA = \
geany.png
dist_icons_actions_DATA = \
geany-build.png \
geany-close-all.png \
geany-save-all.png

BIN
icons/48x48/geany-build.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -1,20 +1,29 @@
SUBDIRS = 16x16 48x48 scalable
SUBDIRS = 16x16 24x24 32x32 48x48 scalable tango
EXTRA_DIST = geany.ico
# only install index.theme on Windows
if MINGW
iconsdir = $(datadir)/icons/hicolor
dist_icons_DATA = index.theme
endif
gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor
dist_noinst_DATA = geany.ico
gtk_update_icon_cache = gtk-update-icon-cache -f -t
install-data-hook:
@-if test -z "$(DESTDIR)"; then \
echo "Updating Gtk icon cache."; \
$(gtk_update_icon_cache); \
$(gtk_update_icon_cache) "$(datadir)/icons/hicolor"; \
$(gtk_update_icon_cache) "$(datadir)/icons/Tango"; \
else \
echo "*** Icon cache not updated. Remember to run:"; \
echo "***"; \
echo "*** $(gtk_update_icon_cache)"; \
echo "*** $(gtk_update_icon_cache) '$(datadir)/icons/hicolor'";\
echo "*** $(gtk_update_icon_cache) '$(datadir)/icons/Tango'";\
echo "***"; \
fi
uninstall-local:
rm -f $(DESTDIR)$(datadir)/icons/hicolor/icon-theme.cache;
rm -f $(DESTDIR)$(datadir)/icons/hicolor/icon-theme.cache
rm -f $(DESTDIR)$(datadir)/icons/Tango/icon-theme.cache

60
icons/index.theme Normal file
View File

@ -0,0 +1,60 @@
[Icon Theme]
Name=Hicolor
Comment=Fallback icon theme
Hidden=true
Directories=16x16/actions,16x16/apps,24x24/actions,24x24/apps,32x32/actions,32x32/apps,48x48/actions,48x48/apps,scalable/actions,scalable/apps
[16x16/actions]
Size=16
Context=Actions
Type=Threshold
[16x16/apps]
Size=16
Context=Applications
Type=Threshold
[24x24/actions]
Size=24
Context=Actions
Type=Threshold
[24x24/apps]
Size=24
Context=Applications
Type=Threshold
[32x32/actions]
Size=32
Context=Actions
Type=Threshold
[32x32/apps]
Size=32
Context=Applications
Type=Threshold
[48x48/actions]
Size=48
Context=Actions
Type=Threshold
[48x48/apps]
Size=48
Context=Applications
Type=Threshold
[scalable/actions]
MinSize=1
Size=128
MaxSize=256
Context=Actions
Type=Scalable
[scalable/apps]
MinSize=1
Size=128
MaxSize=256
Context=Applications
Type=Scalable

View File

@ -1,4 +1,11 @@
iconsdir = $(datadir)/icons/hicolor/scalable/apps
icons_DATA = geany.svg
iconsdir = $(datadir)/icons/hicolor/scalable
icons_appsdir = $(iconsdir)/apps
icons_actionsdir = $(iconsdir)/actions
EXTRA_DIST = $(icons_DATA)
dist_icons_apps_DATA = \
geany.svg
dist_icons_actions_DATA = \
geany-build.svg \
geany-close-all.svg \
geany-save-all.svg

View File

@ -0,0 +1,162 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48px"
height="48px"
id="svg2985"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="Nouveau document 2">
<defs
id="defs2987">
<linearGradient
id="linearGradient3876">
<stop
id="stop3878"
offset="0"
style="stop-color:#832f07;stop-opacity:1;" />
<stop
style="stop-color:#7d2c06;stop-opacity:1;"
offset="0.66924989"
id="stop3880" />
<stop
id="stop3882"
offset="1"
style="stop-color:#000000;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient3854">
<stop
style="stop-color:#8c3303;stop-opacity:1;"
offset="0"
id="stop3856" />
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="1"
id="stop3858" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3854"
id="radialGradient3862"
cx="8.2662506"
cy="31.158112"
fx="8.2662506"
fy="31.158112"
r="13.230393"
gradientTransform="matrix(-0.84250329,0.40840637,-0.63160073,-1.3029319,36.559251,70.98965)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3876"
id="linearGradient3884"
x1="27.371437"
y1="47.235817"
x2="46.754456"
y2="22.07579"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.98714021,0,0,0.98714021,-0.112798,0.1861512)" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3854"
id="radialGradient5114"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.82079822,2.4024917,-1.0801943,0.36904239,5.8309693,-24.501118)"
cx="6.8684106"
cy="0.77958882"
fx="6.8684106"
fy="0.77958882"
r="8.7621937" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6770833"
inkscape:cx="0.78613418"
inkscape:cy="9.8218394"
inkscape:current-layer="layer3"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1618"
inkscape:window-height="935"
inkscape:window-x="60"
inkscape:window-y="39"
inkscape:window-maximized="0" />
<metadata
id="metadata2990">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<cc:license
rdf:resource="" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="layer1"
style="opacity:1">
<g
id="g5537">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3842"
d="m 1.2832291,6.3829735 0,15.0104005 25.1333659,25.990419 0,-16.84308 z"
style="fill:url(#radialGradient3862);fill-opacity:1;stroke:#000000;stroke-width:0.98714024px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path3844"
d="m 26.416595,47.445489 0,-16.781384 20.359767,-9.56292 0,15.053888 z"
style="fill:url(#linearGradient3884);fill-opacity:1;stroke:#000000;stroke-width:0.98714024px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccsssc"
inkscape:connector-curvature="0"
id="path3846"
d="M 1.2832291,6.3563849 26.498968,30.642054 46.784986,21.131619 21.132989,0.62747085 c 0,0 -2.224918,0.34900676 -1.701408,1.61415635 0.52351,1.2651495 -1.224238,1.8860405 -3.620946,2.83568 C 11.186296,6.9095927 9.0539044,7.2352368 5.2531811,5.688069 3.879367,5.1288278 1.2832291,6.3563849 1.2832291,6.3563849 z"
style="fill:#ba4503;fill-opacity:1;stroke:#000000;stroke-width:0.98714024px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
<path
sodipodi:nodetypes="zsssz"
inkscape:connector-curvature="0"
id="path3848"
d="m 10.226527,11.446681 c 1.526904,1.548717 3.560029,2.162834 10.252074,-0.479885 6.849258,-2.7048021 6.151245,-3.0974347 4.62434,-4.4498359 C 23.576036,5.1645588 22.894765,4.5230075 17.250288,6.6042111 9.4412627,9.483517 8.6996228,9.8979631 10.226527,11.44668 z"
style="fill:url(#radialGradient5114);fill-opacity:1;stroke:#000000;stroke-width:0.98714024000000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<use
height="48"
width="48"
transform="translate(7.1717365,6.0206784)"
id="use3850"
xlink:href="#path3848"
y="0"
x="0" />
<use
height="48"
width="48"
transform="matrix(0.99867743,-0.05141392,0.05141392,0.99867743,6.7099747,7.8099442)"
id="use3852"
xlink:href="#use3850"
y="0"
x="0" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

@ -0,0 +1,446 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64px"
height="64px"
id="svg2985"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="geany-close-all.svg"
inkscape:export-filename="/home/ban/progs/geany/icons/48x48/geany-close-all.png"
inkscape:export-xdpi="67.5"
inkscape:export-ydpi="67.5">
<defs
id="defs2987">
<linearGradient
id="linearGradient2091">
<stop
id="stop2093"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop2095"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3165">
<stop
id="stop3167"
offset="0"
style="stop-color:#e78181;stop-opacity:1" />
<stop
style="stop-color:#e15f5f;stop-opacity:1"
offset="0.25"
id="stop8599" />
<stop
id="stop8601"
offset="0.68000001"
style="stop-color:#c22f2f;stop-opacity:1" />
<stop
id="stop3169"
offset="1"
style="stop-color:#a40000;stop-opacity:1" />
</linearGradient>
<linearGradient
id="linearGradient7916">
<stop
id="stop7918"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop7920"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0" />
</linearGradient>
<radialGradient
r="10.31934"
fy="35.127438"
fx="23.070683"
cy="35.127438"
cx="23.070683"
gradientTransform="matrix(0.914812,0.01265023,-0.00821502,0.213562,2.253914,27.18889)"
gradientUnits="userSpaceOnUse"
id="radialGradient2177-3"
xlink:href="#linearGradient2091-0"
inkscape:collect="always" />
<linearGradient
id="linearGradient2091-0">
<stop
id="stop2093-9"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop2095-1"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.1314195e-8,2.5479117,-4.8841578,-2.2328085e-8,144.16406,-10.748097)"
r="18.500046"
fy="24.500458"
fx="6.5734448"
cy="24.500458"
cx="6.5734448"
id="radialGradient7958-0"
xlink:href="#linearGradient3165-7"
inkscape:collect="always" />
<linearGradient
id="linearGradient3165-7">
<stop
id="stop3167-1"
offset="0"
style="stop-color:#e78181;stop-opacity:1" />
<stop
style="stop-color:#e15f5f;stop-opacity:1"
offset="0.25"
id="stop8599-3" />
<stop
id="stop8601-6"
offset="0.68000001"
style="stop-color:#c22f2f;stop-opacity:1" />
<stop
id="stop3169-3"
offset="1"
style="stop-color:#a40000;stop-opacity:1" />
</linearGradient>
<linearGradient
gradientUnits="userSpaceOnUse"
y2="43.000458"
x2="23.099995"
y1="6.0004601"
x1="23.172504"
id="linearGradient7961-1"
xlink:href="#linearGradient7955-4"
inkscape:collect="always" />
<linearGradient
id="linearGradient7955-4"
inkscape:collect="always">
<stop
id="stop7957-6"
offset="0"
style="stop-color:#c22f2f;stop-opacity:1" />
<stop
id="stop7959-1"
offset="1"
style="stop-color:#a40000;stop-opacity:1" />
</linearGradient>
<linearGradient
y2="36.296539"
x2="12.717501"
y1="17.041941"
x1="31.972097"
gradientTransform="matrix(1.0494758,-1.0494758,1.0494758,1.0494758,-26.939092,23.169297)"
gradientUnits="userSpaceOnUse"
id="linearGradient2181-9"
xlink:href="#linearGradient7916-9"
inkscape:collect="always" />
<linearGradient
id="linearGradient7916-9">
<stop
id="stop7918-8"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop7920-5"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0" />
</linearGradient>
<linearGradient
y2="36.296539"
x2="12.717501"
y1="17.041941"
x1="31.972097"
gradientTransform="matrix(1.0494758,-1.0494758,1.0494758,1.0494758,-26.939092,23.169297)"
gradientUnits="userSpaceOnUse"
id="linearGradient3933"
xlink:href="#linearGradient7916-9"
inkscape:collect="always" />
<filter
inkscape:collect="always"
id="filter4035"
x="-0.31406894"
width="1.6281379"
y="-0.22770001"
height="1.4554">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="2.0126026"
id="feGaussianBlur4037" />
</filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="4"
inkscape:cx="19.570124"
inkscape:cy="2.4606555"
inkscape:current-layer="layer3"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1155"
inkscape:window-height="782"
inkscape:window-x="248"
inkscape:window-y="38"
inkscape:window-maximized="0">
<sodipodi:guide
orientation="1,0"
position="0,23"
id="guide4048" />
<sodipodi:guide
orientation="1,0"
position="24,49.875"
id="guide4050" />
<sodipodi:guide
orientation="1,0"
position="48,47.734375"
id="guide4052" />
<sodipodi:guide
orientation="1,0"
position="15.998291,45.630484"
id="guide4054" />
<sodipodi:guide
orientation="0,1"
position="38.360543,0"
id="guide4094" />
<sodipodi:guide
orientation="0,1"
position="-53.46875,-24"
id="guide4096" />
</sodipodi:namedview>
<metadata
id="metadata2990">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<cc:license
rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
<dc:description>Cross is from gnome-colors-common; document is inspired by Tango and gnome-icon-theme.</dc:description>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="document">
<use
x="0"
y="0"
xlink:href="#g4144"
id="use4152"
transform="matrix(0.84344375,0.53721749,-0.53721749,0.84344375,47.402841,10.277409)"
width="64"
height="64" />
<use
x="0"
y="0"
xlink:href="#use3987"
id="use3989"
transform="matrix(0.95588294,0.29374786,-0.29374786,0.95588294,19.002222,1.9979348)"
width="64"
height="64" />
<use
x="0"
y="0"
xlink:href="#rect3991"
id="use4009"
transform="matrix(0.9756233,0.219452,-0.219452,0.9756233,16.417778,3.4268038)"
width="64"
height="64" />
<use
x="0"
y="0"
xlink:href="#g3837"
id="use3987"
transform="matrix(0.97550556,0.21997482,-0.21997482,0.97550556,16.467576,3.3647699)"
width="64"
height="64" />
<rect
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter4035)"
id="rect3991"
width="15.379573"
height="21.213202"
x="13.965359"
y="19.098719"
ry="2.289192" />
<g
id="g3837"
transform="matrix(1.3339116,0,0,1.3339116,2.574019,-85.670844)">
<rect
ry="1.2727265"
y="73.954544"
x="2.5909092"
height="20.000017"
width="16.999998"
id="rect3052"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3823"
d="m 5.0948153,90.959162 5.9928977,0"
style="fill:none;stroke:#dedede;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
style="fill:none;stroke:#dedede;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 5.0983665,88.948508 11.9928985,0"
id="path3825"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path3827"
d="m 5.0983665,86.952414 11.9928985,0"
style="fill:none;stroke:#dedede;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#dedede;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 5.0948153,83.959162 5.9928977,0"
id="path3829"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
id="path3831"
d="m 5.0983665,81.948508 11.9928985,0"
style="fill:none;stroke:#dedede;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cc" />
<path
sodipodi:nodetypes="cc"
style="fill:none;stroke:#dedede;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 5.0983665,79.952414 11.9928985,0"
id="path3833"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path3835"
d="m 5.0983665,77.952414 11.9928985,0"
style="fill:none;stroke:#dedede;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cc" />
</g>
<use
x="0"
y="0"
xlink:href="#rect3991"
id="use4114"
transform="matrix(0.47915458,0,0,0.47915458,-0.51251517,62.668776)"
width="64"
height="64" />
<g
id="g4144"
transform="matrix(1.276854,0,0,1.276854,-0.48128019,-18.894955)">
<rect
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#7d7d7d;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect4120"
width="8.5096235"
height="10.011331"
x="2.23839"
y="68.74881"
ry="0.63708377" />
<path
style="fill:none;stroke:#dedede;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 3.4917606,77.260743 2.9998415,0"
id="path4122"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
sodipodi:nodetypes="cc"
style="fill:none;stroke:#dedede;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 3.4935382,75.719139 6.0032387,0"
id="path4126"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path4128"
d="m 3.4917606,73.889363 2.9998415,0"
style="fill:none;stroke:#dedede;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:nodetypes="cc"
style="fill:none;stroke:#dedede;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 3.4935382,72.33047 6.0032387,0"
id="path4130"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
style="fill:none;stroke:#dedede;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 3.4935382,70.750005 6.0032387,0"
id="path4134"
inkscape:connector-curvature="0" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="cross">
<g
inkscape:label="Layer 1"
id="layer1-9"
transform="matrix(0.83206021,0,0,0.83206021,25.311861,-0.06016356)">
<path
transform="matrix(2.2288248,0,0,1.9190478,-27.171303,-25.505284)"
d="m 33.278212,34.94062 c 0,1.281408 -4.620126,2.320194 -10.31934,2.320194 -5.699214,0 -10.31934,-1.038786 -10.31934,-2.320194 0,-1.281407 4.620126,-2.320194 10.31934,-2.320194 5.699214,0 10.31934,1.038787 10.31934,2.320194 z"
sodipodi:ry="2.320194"
sodipodi:rx="10.31934"
sodipodi:cy="34.94062"
sodipodi:cx="22.958872"
id="path1361"
style="opacity:0.2557078;fill:url(#radialGradient2177-3);fill-opacity:1;stroke:none"
sodipodi:type="arc" />
<path
sodipodi:nodetypes="ccccccccccccc"
id="text1314"
d="m 42.5,35.000459 -10.50009,-11 10.500001,-10 L 34.99991,6.5004602 24.499911,17.000459 13.999912,6.5004602 6.4999133,14.000459 l 10.4999977,10 -10.4999977,11 7.4999987,7.499999 10.499999,-10.5 9.5,10.5 L 42.5,35.000459 z"
style="font-size:59.90107727px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:url(#radialGradient7958-0);fill-opacity:1;stroke:url(#linearGradient7961-1);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccc"
id="path7076"
d="m 41,35.000459 -10.50009,-11 10.5,-10 -6,-5.9999998 L 24.50022,18.500459 13.999912,8.0004592 7.9999123,14.000459 l 10.4999987,10 -10.4999987,11 5.9999997,6 10.499999,-10.5 L 34,41 41,35.000459 z"
style="font-size:59.90107727px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;opacity:0.4;fill:none;stroke:url(#linearGradient3933);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
inkscape:connector-curvature="0" />
</g>
<use
x="0"
y="0"
xlink:href="#layer1-9"
id="use4098"
transform="matrix(0.37799979,0,0,0.37799979,-0.17347528,63.825548)"
width="64"
height="64" />
</g>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer"
style="opacity:0.8;display:none"
sodipodi:insensitive="true">
<image
y="64"
x="0"
id="image3855"
xlink:href="file:///home/ban/progs/geany/icons/48x48/geany-close-all.png"
height="24"
width="24" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -0,0 +1,657 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48px"
height="48px"
id="svg2985"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="geany-save-all.svg"
inkscape:export-filename="/home/ban/progs/geany/icons/16x16/geany-save-all.png"
inkscape:export-xdpi="30"
inkscape:export-ydpi="30">
<title
id="title3080">Save all</title>
<defs
id="defs2987">
<linearGradient
y2="-5.9535513"
x2="24.285765"
y1="14.716651"
x1="9.7099533"
gradientTransform="matrix(1.117647,0,0,1.1,-290.08518,-48.65)"
gradientUnits="userSpaceOnUse"
id="linearGradient5471"
xlink:href="#linearGradient6056"
inkscape:collect="always" />
<linearGradient
y2="7.8355665"
x2="16.552481"
y1="2.9626985"
x1="16.552481"
gradientTransform="matrix(0.9803921,0,0,1.1,-287.3793,-48.3)"
gradientUnits="userSpaceOnUse"
id="linearGradient5467"
xlink:href="#linearGradient6108"
inkscape:collect="always" />
<linearGradient
gradientTransform="translate(-288.67342,-47.5)"
y2="3.6734154"
x2="14.04664"
y1="6.504528"
x1="18.963779"
gradientUnits="userSpaceOnUse"
id="linearGradient5464"
xlink:href="#linearGradient4916"
inkscape:collect="always" />
<linearGradient
y2="3.7493312"
x2="18.561535"
y1="4.5279388"
x1="17.68836"
gradientTransform="matrix(1.3472897,0,0,1.3356241,-295.4037,-49.007697)"
gradientUnits="userSpaceOnUse"
id="linearGradient5462"
xlink:href="#linearGradient6076"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
id="linearGradient5897">
<stop
style="stop-color:#729fcf;stop-opacity:1;"
offset="0"
id="stop5899" />
<stop
style="stop-color:#729fcf;stop-opacity:0;"
offset="1"
id="stop5901" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4916">
<stop
style="stop-color:#888a85;stop-opacity:1"
offset="0"
id="stop4918" />
<stop
style="stop-color:#5d5f5b;stop-opacity:0;"
offset="1"
id="stop4920" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient6108">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop6110" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop6112" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient6076">
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0"
id="stop6078" />
<stop
style="stop-color:#cbcbcb;stop-opacity:1"
offset="1"
id="stop6080" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient6056">
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0"
id="stop6058" />
<stop
style="stop-color:#d3d7cf;stop-opacity:1"
offset="1"
id="stop6060" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6056"
id="linearGradient6062"
x1="9.7099533"
y1="14.716651"
x2="24.285765"
y2="-5.9535513"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.117647,0,0,1.1,-1.4117645,-1.15)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6076"
id="linearGradient6082"
x1="17.68836"
y1="4.5279388"
x2="18.561535"
y2="3.7493312"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3472897,0,0,1.3356241,-6.7302791,-1.5076969)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6108"
id="linearGradient6114"
x1="16.552481"
y1="2.9626985"
x2="16.552481"
y2="7.8355665"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9803921,0,0,1.1,1.2941182,-0.8000001)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4916"
id="linearGradient4922"
x1="18.963779"
y1="6.504528"
x2="14.04664"
y2="3.6734154"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5897"
id="linearGradient5903"
x1="4.1902652"
y1="25.646143"
x2="14.649404"
y2="12.007792"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5897"
id="linearGradient5929"
gradientUnits="userSpaceOnUse"
x1="4.1902652"
y1="25.646143"
x2="14.649404"
y2="12.007792" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="19.035276"
x2="21.347517"
y1="16.874674"
x1="19.28145"
id="linearGradient6051"
xlink:href="#linearGradient6045"
inkscape:collect="always"
gradientTransform="matrix(0.9168831,0,0,0.9169468,1.6694447,1.4811158)" />
<linearGradient
gradientTransform="matrix(0.2947292,0,0,0.2947292,9.2434959,8.1106157)"
gradientUnits="userSpaceOnUse"
y2="22.40896"
x2="52.986004"
y1="17.590158"
x1="48.690983"
id="linearGradient5914"
xlink:href="#linearGradient5908"
inkscape:collect="always" />
<linearGradient
gradientTransform="matrix(0.4140801,0,0,0.4496565,2.2850397,5.3289509)"
gradientUnits="userSpaceOnUse"
y2="18.158607"
x2="56.384373"
y1="14.8742"
x1="53.454674"
id="linearGradient4930"
xlink:href="#linearGradient4924"
inkscape:collect="always" />
<linearGradient
gradientTransform="matrix(0.7214926,0,0,0.7210249,4.4502003,-1.0759528)"
gradientUnits="userSpaceOnUse"
y2="23.074486"
x2="19.445436"
y1="28.73134"
x1="25.279068"
id="linearGradient5933"
xlink:href="#linearGradient5927"
inkscape:collect="always" />
<radialGradient
r="12.5"
fy="16.093563"
fx="48.178337"
cy="16.093563"
cx="48.178337"
gradientTransform="matrix(0.117808,0.165688,-0.160285,0.113967,37.8996,24.60705)"
gradientUnits="userSpaceOnUse"
id="radialGradient3740"
xlink:href="#linearGradient2812"
inkscape:collect="always" />
<radialGradient
gradientTransform="matrix(0.710234,0.703965,-0.828897,0.836278,-17.34172,-12.95082)"
gradientUnits="userSpaceOnUse"
r="12.5"
fy="17.172701"
fx="18.389807"
cy="17.172701"
cx="18.389807"
id="radialGradient2818"
xlink:href="#linearGradient2812"
inkscape:collect="always" />
<linearGradient
gradientTransform="translate(-21.33061,6.070707)"
gradientUnits="userSpaceOnUse"
y2="23.00688"
x2="42.993927"
y1="18.054306"
x1="42.993927"
id="linearGradient2802"
xlink:href="#linearGradient2796"
inkscape:collect="always" />
<radialGradient
gradientTransform="matrix(1.515341,1.822282e-2,-1.854671e-2,1.542275,-9.89215,-9.850491)"
gradientUnits="userSpaceOnUse"
r="9.5"
fy="17.498907"
fx="19.825111"
cy="17.498907"
cx="19.825111"
id="radialGradient2794"
xlink:href="#linearGradient2788"
inkscape:collect="always" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.176471,0,13.58824)"
r="8.5"
fy="16.5"
fx="9.5"
cy="16.5"
cx="9.5"
id="radialGradient3221"
xlink:href="#linearGradient3215"
inkscape:collect="always" />
<linearGradient
id="linearGradient3215"
inkscape:collect="always">
<stop
id="stop3217"
offset="0"
style="stop-color:#2e3436;stop-opacity:1;" />
<stop
id="stop3219"
offset="1"
style="stop-color:#2e3436;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient2788">
<stop
id="stop2790"
offset="0"
style="stop-color:#729fcf;stop-opacity:1;" />
<stop
id="stop2792"
offset="1"
style="stop-color:white;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient2796"
inkscape:collect="always">
<stop
id="stop2798"
offset="0"
style="stop-color:#204a87;stop-opacity:1;" />
<stop
id="stop2800"
offset="1"
style="stop-color:#1a3c6e;stop-opacity:1" />
</linearGradient>
<linearGradient
id="linearGradient2812">
<stop
id="stop2814"
offset="0"
style="stop-color:#3070ce;stop-opacity:1" />
<stop
id="stop2816"
offset="1"
style="stop-color:#1a3c6e;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient5927"
inkscape:collect="always">
<stop
id="stop5929"
offset="0"
style="stop-color:#c17d11;stop-opacity:1;" />
<stop
id="stop5931"
offset="1"
style="stop-color:#c17d11;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient4924"
inkscape:collect="always">
<stop
id="stop4926"
offset="0"
style="stop-color:#ef2929;stop-opacity:1" />
<stop
id="stop4928"
offset="1"
style="stop-color:#cc0000;stop-opacity:1" />
</linearGradient>
<linearGradient
id="linearGradient5908"
inkscape:collect="always">
<stop
id="stop5910"
offset="0"
style="stop-color:#d3d7cf;stop-opacity:1;" />
<stop
id="stop5912"
offset="1"
style="stop-color:#888a85;stop-opacity:1" />
</linearGradient>
<linearGradient
id="linearGradient6045"
inkscape:collect="always">
<stop
id="stop6047"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop6049"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6045"
id="linearGradient6018"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9168831,0,0,0.9169468,3.9818882,-0.8641132)"
x1="19.28145"
y1="16.874674"
x2="21.347517"
y2="19.035276" />
<filter
id="filter5197"
height="2.1394303"
y="-0.56971514"
width="1.1480616"
x="-0.074030781"
inkscape:collect="always">
<feGaussianBlur
id="feGaussianBlur5199"
stdDeviation="0.68247126"
inkscape:collect="always" />
</filter>
<linearGradient
id="linearGradient5206"
inkscape:collect="always">
<stop
id="stop5208"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop5210"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient5222">
<stop
id="stop5224"
offset="0"
style="stop-color:#7ea5d6;stop-opacity:1;" />
<stop
id="stop5226"
offset="1"
style="stop-color:#3465a4;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient5245"
inkscape:collect="always">
<stop
id="stop5247"
offset="0"
style="stop-color:#3465a4;stop-opacity:1;" />
<stop
id="stop5249"
offset="1"
style="stop-color:#3465a4;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient5261"
inkscape:collect="always">
<stop
id="stop5263"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop5265"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient5269">
<stop
id="stop5271"
offset="0"
style="stop-color:#c6c6c6;stop-opacity:1;" />
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0.5"
id="stop5277" />
<stop
id="stop5273"
offset="1"
style="stop-color:#a5a5a5;stop-opacity:1;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5222"
id="radialGradient3301"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.9015393,0,0,1.8241702,-8.2360563,18.752614)"
cx="12.007621"
cy="6.9535408"
fx="12.007621"
fy="6.9535408"
r="10.980066" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5206"
id="linearGradient3303"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(2.5892857,24.297958)"
x1="12.358521"
y1="2.6672831"
x2="10.859434"
y2="28.104784" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5245"
id="linearGradient3305"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(2.5892857,24.297958)"
x1="12"
y1="14.24497"
x2="15.3125"
y2="23.30747" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5269"
id="linearGradient3307"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(2.5892857,24.297958)"
x1="9.125"
y1="15.5"
x2="13.375"
y2="20.75" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5261"
id="linearGradient3309"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(2.5892857,24.297958)"
x1="11.499999"
y1="20.473557"
x2="11.951921"
y2="12.411057" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.4748737"
inkscape:cx="153.44631"
inkscape:cy="16.570233"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1034"
inkscape:window-height="647"
inkscape:window-x="204"
inkscape:window-y="47"
inkscape:window-maximized="0" />
<metadata
id="metadata2990">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Save all</dc:title>
<dc:creator>
<cc:Agent>
<dc:title></dc:title>
</cc:Agent>
</dc:creator>
<dc:description>Based on Jakub Steiner &quot;Floppy&quot; icon from GTK sock icon</dc:description>
<cc:license
rdf:resource="http://creativecommons.org/licenses/LGPL/2.1/" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
id="g3243"
transform="matrix(1.4865639,0,0,1.4865639,7.2324175,-34.728295)">
<rect
ry="1.6350584"
rx="1.6350582"
y="44.297958"
x="3.6517856"
height="2.875"
width="22.125"
id="rect5151"
style="opacity:0.48275865;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5197);enable-background:accumulate" />
<path
sodipodi:nodetypes="ccccccccc"
id="path4572"
d="m 4.1184947,26.837815 0,16.744133 2.263422,2.263422 17.7474653,0 c 0.402074,-0.162022 0.832632,-0.267076 0.94759,-1.003331 l 0,-18.059965 c -0.07388,-0.76871 -0.486484,-0.972893 -1.003331,-1.003331 l -19.0075553,0 c -0.559223,0.04883 -0.979009,0.271946 -0.947591,1.059072 z"
style="color:#000000;fill:url(#radialGradient3301);fill-opacity:1;fill-rule:evenodd;stroke:#204a87;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
style="opacity:0.33908045;color:#000000;fill:none;stroke:url(#linearGradient3303);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 5.0728071,26.748886 0,16.344177 1.7447828,1.713532 17.3186311,0 -0.01371,-18.045873 c 0,0 -19.0497029,-0.01184 -19.0497029,-0.01184 z"
id="path5204"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
id="rect5230"
d="m 22.589286,28.308016 0,6.354884 c 0,0.905822 -0.740811,1.635058 -1.661011,1.635058 l -12.6779778,0 c -0.9202004,0 -1.6610115,-0.729236 -1.6610115,-1.635058 l 0,-6.354884 c 0,0 16.0000003,0 16.0000003,0 z"
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
y="25.297958"
x="6.5892859"
height="3"
width="16"
id="rect5233"
style="color:#000000;fill:#ef2929;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<rect
style="color:#000000;fill:#cc0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect5235"
width="16"
height="0.99999994"
x="6.5892859"
y="27.297958" />
<rect
y="25.297958"
x="6.5892859"
height="0.99999994"
width="16"
id="rect5237"
style="color:#000000;fill:#a40000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<rect
y="30.297958"
x="8.5892859"
height="1"
width="12"
id="rect5239"
style="color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<rect
style="color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect5241"
width="12"
height="1"
x="8.5892859"
y="33.297958" />
<path
style="color:#000000;fill:url(#linearGradient3305);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 22.589286,45.2879 0,-6.354884 c 0,-0.905822 -0.740811,-1.635058 -1.661011,-1.635058 l -12.6779778,0 c -0.9202004,0 -1.6610115,0.729236 -1.6610115,1.635058 l 0,6.354884 c 0,0 16.0000003,0 16.0000003,0 z"
id="path5243"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
id="path5253"
d="m 20.089286,45.797958 0,-6.362884 c 0,-0.906962 -0.733174,-1.637116 -1.643888,-1.637116 l -8.7122248,0 c -0.9107138,0 -1.6438876,0.730154 -1.6438876,1.637116 l 0,6.362884 c 0,0 12.0000004,0 12.0000004,0 z"
style="color:#000000;fill:url(#linearGradient3307);fill-opacity:1;fill-rule:evenodd;stroke:#555753;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
style="color:#000000;fill:#c6c6c6;fill-opacity:1;fill-rule:evenodd;stroke:#eeeeec;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect5257"
width="2"
height="3.9375002"
x="12.089286"
y="40.797958" />
<rect
y="39.860458"
x="11.089286"
height="3.9375002"
width="2"
id="rect5255"
style="color:#000000;fill:#5884bc;fill-opacity:1;fill-rule:evenodd;stroke:#555753;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<path
style="opacity:0.34482763;color:#000000;fill:none;stroke:url(#linearGradient3309);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m 19.166208,44.870071 0,-5.078069 c 0,-0.723825 -0.370378,-0.994045 -1.140982,-0.994045 l -7.871882,0 c -0.7706039,0 -1.1409817,0.27022 -1.1409817,0.994045 l 0,5.078069 c 0,0 10.1538457,0 10.1538457,0 z"
id="path5259"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
</g>
<use
x="0"
y="0"
xlink:href="#g3243"
id="use3269"
transform="translate(-9.7647883,9.6929653)"
width="48"
height="48" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,7 @@
icons_actionsdir = $(datadir)/icons/Tango/16x16/actions
dist_icons_actions_DATA = \
geany-save-all.png
dist_noinst_DATA = \
geany-save-all.xcfgz

Binary file not shown.

After

Width:  |  Height:  |  Size: 708 B

Binary file not shown.

View File

@ -0,0 +1,4 @@
icons_actionsdir = $(datadir)/icons/Tango/24x24/actions
dist_icons_actions_DATA = \
geany-save-all.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,4 @@
icons_actionsdir = $(datadir)/icons/Tango/32x32/actions
dist_icons_actions_DATA = \
geany-save-all.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1,4 @@
icons_actionsdir = $(datadir)/icons/Tango/48x48/actions
dist_icons_actions_DATA = \
geany-save-all.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

7
icons/tango/Makefile.am Normal file
View File

@ -0,0 +1,7 @@
SUBDIRS = 16x16 24x24 32x32 48x48 scalable
# only install index.theme on Windows
if MINGW
iconsdir = $(datadir)/icons/Tango
dist_icons_DATA = index.theme
endif

33
icons/tango/index.theme Normal file
View File

@ -0,0 +1,33 @@
[Icon Theme]
Name=Tango
Comment=Tango Icon Theme
Inherits=gnome,crystalsvg
Directories=16x16/actions,24x24/actions,32x32/actions,48x48/actions,scalable/actions
[16x16/actions]
Size=16
Context=Actions
Type=Threshold
[24x24/actions]
Size=24
Context=Actions
Type=Threshold
[32x32/actions]
Size=32
Context=Actions
Type=Threshold
[48x48/actions]
Size=48
Context=Actions
Type=Threshold
[scalable/actions]
MinSize=1
Size=128
MaxSize=256
Context=Actions
Type=Scalable

View File

@ -0,0 +1,4 @@
icons_actionsdir = $(datadir)/icons/Tango/scalable/actions
dist_icons_actions_DATA = \
geany-save-all.svg

View File

@ -0,0 +1,613 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="geany-save-all.svg"
inkscape:version="0.48.3.1 r9886"
sodipodi:version="0.32"
id="svg2913"
height="48px"
width="48px"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.1">
<title
id="title3216">Save All</title>
<defs
id="defs3">
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient5031"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<linearGradient
inkscape:collect="always"
id="linearGradient5060">
<stop
style="stop-color:black;stop-opacity:1;"
offset="0"
id="stop5062" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5064" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient5029"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<linearGradient
id="linearGradient5048">
<stop
style="stop-color:black;stop-opacity:0;"
offset="0"
id="stop5050" />
<stop
id="stop5056"
offset="0.5"
style="stop-color:black;stop-opacity:1;" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5052" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5048"
id="linearGradient5027"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
x1="302.85715"
y1="366.64789"
x2="302.85715"
y2="609.50507" />
<linearGradient
inkscape:collect="always"
id="linearGradient6925">
<stop
style="stop-color:#204a87;stop-opacity:1;"
offset="0"
id="stop6927" />
<stop
style="stop-color:#204a87;stop-opacity:0;"
offset="1"
id="stop6929" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient6901">
<stop
style="stop-color:#3465a4;stop-opacity:1;"
offset="0"
id="stop6903" />
<stop
style="stop-color:#3465a4;stop-opacity:0;"
offset="1"
id="stop6905" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4991">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4993" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop4995" />
</linearGradient>
<linearGradient
id="linearGradient2187"
inkscape:collect="always">
<stop
id="stop2189"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop2191"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient8662">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop8664" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop8666" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8662"
id="radialGradient8668"
cx="24.837126"
cy="36.421127"
fx="24.837126"
fy="36.421127"
r="15.644737"
gradientTransform="matrix(1.000000,-7.816467e-32,-1.132409e-32,0.536723,-5.897962e-14,16.87306)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient2555">
<stop
id="stop2557"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
style="stop-color:#e6e6e6;stop-opacity:1.0000000;"
offset="0.50000000"
id="stop2561" />
<stop
id="stop2563"
offset="0.75000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
<stop
style="stop-color:#e1e1e1;stop-opacity:1.0000000;"
offset="0.84166664"
id="stop2565" />
<stop
id="stop2559"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient4274">
<stop
style="stop-color:#ffffff;stop-opacity:0.25490198;"
offset="0.0000000"
id="stop4276" />
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop4278" />
</linearGradient>
<linearGradient
id="linearGradient4254"
inkscape:collect="always">
<stop
id="stop4256"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop4258"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient4244">
<stop
id="stop4246"
offset="0.0000000"
style="stop-color:#e4e4e4;stop-opacity:1.0000000;" />
<stop
id="stop4248"
offset="1.0000000"
style="stop-color:#d3d3d3;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient4236"
inkscape:collect="always">
<stop
id="stop4238"
offset="0"
style="stop-color:#eeeeee;stop-opacity:1;" />
<stop
id="stop4240"
offset="1"
style="stop-color:#eeeeee;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient4228">
<stop
id="stop4230"
offset="0.0000000"
style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
<stop
id="stop4232"
offset="1.0000000"
style="stop-color:#9f9f9f;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient4184">
<stop
id="stop4186"
offset="0.0000000"
style="stop-color:#838383;stop-opacity:1.0000000;" />
<stop
id="stop4188"
offset="1.0000000"
style="stop-color:#bbbbbb;stop-opacity:0.0000000;" />
</linearGradient>
<linearGradient
gradientTransform="translate(0.795493,3.799180)"
y2="35.281250"
x2="24.687500"
y1="35.281250"
x1="7.0625000"
gradientUnits="userSpaceOnUse"
id="linearGradient4209"
xlink:href="#linearGradient4184"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="40.943935"
x2="36.183067"
y1="28.481176"
x1="7.6046205"
id="linearGradient4234"
xlink:href="#linearGradient4228"
inkscape:collect="always"
gradientTransform="translate(0.000000,5.125000)" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="33.758667"
x2="12.221823"
y1="37.205811"
x1="12.277412"
id="linearGradient4242"
xlink:href="#linearGradient4236"
inkscape:collect="always"
gradientTransform="translate(0.000000,5.125000)" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.286242,0.781698,-0.710782,1.169552,-2.354348,0.248140)"
r="20.935817"
fy="2.9585190"
fx="15.571491"
cy="2.9585190"
cx="15.571491"
id="radialGradient4250"
xlink:href="#linearGradient4244"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="47.620636"
x2="44.096100"
y1="4.4331360"
x1="12.378357"
id="linearGradient4260"
xlink:href="#linearGradient4254"
inkscape:collect="always"
gradientTransform="translate(0.000000,5.125000)" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="26.357183"
x2="23.688078"
y1="11.318835"
x1="23.688078"
id="linearGradient4272"
xlink:href="#linearGradient4274"
inkscape:collect="always"
gradientTransform="translate(0.000000,5.125000)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2555"
id="linearGradient2553"
x1="33.431175"
y1="31.964777"
x2="21.747974"
y2="11.780679"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6901"
id="linearGradient3189"
gradientUnits="userSpaceOnUse"
x1="14.751649"
y1="15.868432"
x2="8.8953285"
y2="16.743431" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6925"
id="linearGradient3191"
gradientUnits="userSpaceOnUse"
x1="12.25"
y1="18.25"
x2="7"
y2="21.118431" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2187"
id="linearGradient3193"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.914114,0,0,0.914114,-3.868698,-2.706902)"
x1="33.059906"
y1="27.394117"
x2="12.624337"
y2="12.583769" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4991"
id="radialGradient3195"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1.314471,-0.01006312,-0.01022964,1.336221,46.22108,-4.909887)"
cx="23.447077"
cy="6.4576745"
fx="23.447077"
fy="6.4576745"
r="19.0625" />
</defs>
<sodipodi:namedview
inkscape:window-y="27"
inkscape:window-x="0"
inkscape:window-height="818"
inkscape:window-width="1034"
inkscape:document-units="px"
inkscape:grid-bbox="true"
showgrid="false"
inkscape:current-layer="layer1"
inkscape:cy="11.617397"
inkscape:cx="-60.605295"
inkscape:zoom="4"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="0.22745098"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
inkscape:showpageshadow="false"
fill="#3465a4"
stroke="#204a87"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-maximized="0" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Save All</dc:title>
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>hdd</rdf:li>
<rdf:li>hard drive</rdf:li>
<rdf:li>save</rdf:li>
<rdf:li>io</rdf:li>
<rdf:li>store</rdf:li>
</rdf:Bag>
</dc:subject>
<cc:license
rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
<dc:identifier />
<dc:source>http://jimmac.musichall.cz</dc:source>
<dc:description>From the Tango icon gtk-save; design by Jesse Mayes.</dc:description>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/publicdomain/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:label="pix"
id="layer2"
inkscape:groupmode="layer" />
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="down">
<g
id="g3112">
<g
transform="matrix(0.02411405,0,0,0.01929202,45.48953,41.75228)"
id="g5022"
style="display:inline">
<rect
style="opacity:0.40206185;color:black;fill:url(#linearGradient5027);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect4173"
width="1339.6335"
height="478.35718"
x="-1559.2523"
y="-150.69685" />
<path
style="opacity:0.40206185;color:black;fill:url(#radialGradient5029);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
id="path5058"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="cccc"
id="path5018"
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
style="opacity:0.40206185;color:black;fill:url(#radialGradient5031);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
</g>
<path
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#535353;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 11.28569,13.087628 C 10.66069,13.087628 10.254441,13.377808 10.004442,13.931381 C 10.004441,13.931381 3.5356915,31.034938 3.5356915,31.034938 C 3.5356915,31.034938 3.2856915,31.706497 3.2856915,32.816188 C 3.2856915,32.816188 3.2856915,42.466156 3.2856915,42.466156 C 3.2856915,43.548769 3.943477,44.091158 4.9419415,44.091156 L 43.50444,44.091156 C 44.489293,44.091156 45.09819,43.372976 45.09819,42.247406 L 45.09819,32.597438 C 45.09819,32.597438 45.204153,31.827015 45.00444,31.284938 L 38.28569,14.087631 C 38.101165,13.575725 37.648785,13.099533 37.16069,13.087628 L 11.28569,13.087628 z "
id="path4196"
sodipodi:nodetypes="cccsccccccccc" />
<path
style="fill:url(#linearGradient4234);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.02044296000000001px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 3.2735915,32.121812 L 4.0381936,31.429597 L 41.647883,31.492097 L 45.11029,31.809395 L 45.11029,42.247927 C 45.11029,43.373496 44.503272,44.091258 43.518419,44.091258 L 4.9354314,44.091258 C 3.9369667,44.091258 3.2735915,43.549207 3.2735915,42.466594 L 3.2735915,32.121812 z "
id="path4170"
sodipodi:nodetypes="ccccccccc" />
<path
style="fill:url(#radialGradient4250);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 3.5490842,31.039404 C 2.8347985,32.50369 3.5484686,33.432261 4.5847985,33.432261 C 4.5847985,33.432261 43.584797,33.432261 43.584797,33.432261 C 44.703844,33.408451 45.430035,32.420356 45.013368,31.289403 L 38.299082,14.078704 C 38.114558,13.566798 37.64432,13.090606 37.156225,13.078701 L 11.299083,13.078701 C 10.674083,13.078701 10.263369,13.382274 10.01337,13.935847 C 10.01337,13.935847 3.5490842,31.039404 3.5490842,31.039404 z "
id="path3093"
sodipodi:nodetypes="csccccccs" />
<rect
style="opacity:1;color:#000000;fill:url(#linearGradient4209);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.40899991999999985;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect4174"
width="17.625"
height="5.5625"
x="7.857996"
y="36.299183" />
<path
style="opacity:0.81142853000000004;fill:url(#linearGradient4242);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 7.8579947,41.86168 C 7.8579947,41.86168 7.8579947,37.850195 7.8579947,37.850195 C 9.6935221,41.029421 16.154485,41.86168 20.795492,41.86168 C 20.795492,41.86168 7.8579947,41.86168 7.8579947,41.86168 z "
id="path4194"
sodipodi:nodetypes="cscc" />
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 44.796162,30.753688 C 44.859684,32.003662 44.382159,33.069528 43.474046,33.097438 C 43.474046,33.097438 5.3553296,33.097437 5.3553297,33.097438 C 4.0660978,33.097438 3.4875937,32.772491 3.271279,32.229382 C 3.3630404,33.173714 4.0970964,33.878688 5.3553297,33.878688 C 5.3553296,33.878687 43.474046,33.878688 43.474046,33.878688 C 44.550053,33.845617 45.226851,32.454664 44.82621,30.883897 L 44.796162,30.753688 z "
id="path4201"
sodipodi:nodetypes="cccccccc" />
<path
style="opacity:0.69142857000000002;color:#000000;fill:url(#linearGradient4272);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 10.96875,15.28125 C 10.922675,15.481571 10.78125,15.668047 10.78125,15.875 C 10.78125,16.823605 11.37223,17.664474 12.125,18.46875 C 12.365268,18.314675 12.490117,18.114342 12.75,17.96875 C 11.809691,17.152746 11.196604,16.252168 10.96875,15.28125 z M 37.625,15.28125 C 37.396273,16.250866 36.782988,17.153676 35.84375,17.96875 C 36.117894,18.122332 36.247738,18.33699 36.5,18.5 C 37.257262,17.693344 37.8125,16.826956 37.8125,15.875 C 37.8125,15.668047 37.670906,15.481571 37.625,15.28125 z M 39.8125,23.71875 C 39.198709,27.758861 32.513887,30.96875 24.28125,30.96875 C 16.068996,30.968751 9.4211001,27.775964 8.78125,23.75 C 8.7488928,23.947132 8.65625,24.141882 8.65625,24.34375 C 8.6562503,28.661697 15.645354,32.187501 24.28125,32.1875 C 32.917146,32.1875 39.937499,28.661698 39.9375,24.34375 C 39.9375,24.130826 39.848449,23.926394 39.8125,23.71875 z "
id="path4211" />
<path
sodipodi:type="arc"
style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:0.45762705999999997;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="path4224"
sodipodi:cx="7.2036505"
sodipodi:cy="25.593554"
sodipodi:rx="1.3700194"
sodipodi:ry="1.016466"
d="M 8.5736699 25.593554 A 1.3700194 1.016466 0 1 1 5.833631,25.593554 A 1.3700194 1.016466 0 1 1 8.5736699 25.593554 z"
transform="translate(0.08838843,5.30178)" />
<path
transform="translate(33.96705,5.21339)"
d="M 8.5736699 25.593554 A 1.3700194 1.016466 0 1 1 5.833631,25.593554 A 1.3700194 1.016466 0 1 1 8.5736699 25.593554 z"
sodipodi:ry="1.016466"
sodipodi:rx="1.3700194"
sodipodi:cy="25.593554"
sodipodi:cx="7.2036505"
id="path4226"
style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:0.45762705999999997;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
<path
sodipodi:nodetypes="cccsccccccccc"
id="path4252"
d="M 11.642515,13.540723 C 11.040823,13.540723 10.649724,13.820081 10.409049,14.35301 C 10.409048,14.35301 3.9940341,30.943732 3.9940341,30.943732 C 3.9940341,30.943732 3.7533573,31.590247 3.7533573,32.658555 C 3.7533573,32.658555 3.7533573,41.948651 3.7533573,41.948651 C 3.7533573,43.303391 4.1974134,43.57555 5.3478414,43.57555 L 43.034746,43.57555 C 44.357872,43.57555 44.569062,43.259153 44.569062,41.738058 L 44.569062,32.447962 C 44.569062,32.447962 44.671072,31.706271 44.478807,31.184409 L 37.885616,14.378434 C 37.707973,13.885617 37.334964,13.552184 36.865071,13.540723 L 11.642515,13.540723 z "
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4260);stroke-width:1.00000024000000010;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path4282"
d="M 40.5,36.554166 L 40.5,41.575101"
style="fill:none;fill-opacity:0.75000000000000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000047999999997px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372884999999999" />
<path
style="fill:none;fill-opacity:0.75000000000000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000047999999997px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372884999999999"
d="M 38.5,36.613943 L 38.5,41.634878"
id="path4284" />
<path
id="path4286"
d="M 36.5,36.613943 L 36.5,41.634878"
style="fill:none;fill-opacity:0.75000000000000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000047999999997px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372884999999999" />
<path
style="fill:none;fill-opacity:0.75000000000000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000047999999997px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372884999999999"
d="M 34.5,36.613943 L 34.5,41.634878"
id="path4288" />
<path
id="path4290"
d="M 32.5,36.613943 L 32.5,41.634878"
style="fill:none;fill-opacity:0.75000000000000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000047999999997px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372884999999999" />
<path
style="fill:none;fill-opacity:0.75000000000000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000047999999997px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372884999999999"
d="M 30.5,36.613943 L 30.5,41.634878"
id="path4292" />
<path
style="opacity:0.09714283999999999;fill:none;fill-opacity:0.75000000000000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000047999999997px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
d="M 39.5,36.604065 L 39.5,41.625"
id="path4294" />
<path
id="path4296"
d="M 37.5,36.663842 L 37.5,41.684777"
style="opacity:0.09714283999999999;fill:none;fill-opacity:0.75000000000000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000047999999997px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="opacity:0.09714283999999999;fill:none;fill-opacity:0.75000000000000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000047999999997px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
d="M 35.5,36.663842 L 35.5,41.684777"
id="path4298" />
<path
id="path4300"
d="M 33.5,36.663842 L 33.5,41.684777"
style="opacity:0.09714283999999999;fill:none;fill-opacity:0.75000000000000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000047999999997px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="opacity:0.09714283999999999;fill:none;fill-opacity:0.75000000000000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000047999999997px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
d="M 31.5,36.663842 L 31.5,41.684777"
id="path4302" />
<path
style="opacity:0.43999999000000001;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 7.875,36.3125 L 7.875,41.84375 L 20.4375,41.84375 L 8.21875,41.5 L 7.875,36.3125 z "
id="path4572" />
<path
transform="matrix(1.037815,0,0,1.060747,-1.632878,3.03037)"
d="M 39.875 19.5625 A 14.875 6.6875 0 1 1 10.125,19.5625 A 14.875 6.6875 0 1 1 39.875 19.5625 z"
sodipodi:ry="6.6875"
sodipodi:rx="14.875"
sodipodi:cy="19.5625"
sodipodi:cx="25"
id="path2545"
style="opacity:0.20571427000000000;color:#000000;fill:url(#linearGradient2553);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.93365198000000005;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.42372879000000002;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
<path
sodipodi:type="arc"
style="opacity:0.14117647;color:#000000;fill:url(#radialGradient8668);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="path8660"
sodipodi:cx="24.837126"
sodipodi:cy="36.421127"
sodipodi:rx="15.644737"
sodipodi:ry="8.3968935"
d="M 40.481863 36.421127 A 15.644737 8.3968935 0 1 1 9.1923885,36.421127 A 15.644737 8.3968935 0 1 1 40.481863 36.421127 z"
transform="matrix(1.130190,1.178179e-16,7.918544e-17,-0.759601,-3.909725,53.66554)" />
</g>
<g
id="g3080"
transform="translate(-3.324104,0)">
<path
sodipodi:nodetypes="ccccccc"
id="path1432"
d="M 3.2034501,25.835194 C 2.1729477,-5.3853369 28.741616,-0.4511153 28.582416,15.788689 l 7.312914,0 L 24.517652,28.774671 12.585426,15.788689 c 0,0 7.541433,0 7.541433,0 C 20.583921,4.8193225 3.4092324,1.6100346 3.2034501,25.835194 z"
style="color:#000000;fill:url(#linearGradient3189);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3191);stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
inkscape:connector-curvature="0" />
<path
style="opacity:0.47159095;color:#000000;fill:none;stroke:url(#linearGradient3193);stroke-width:0.99999934;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
d="M 7.6642103,9.1041047 C 12.40638,-0.0400306 28.122336,2.7175443 27.761604,16.579393 l 6.317372,0 c 0,0 -9.565825,10.957376 -9.565825,10.957376 L 14.41668,16.579393 c 0,0 6.45664,0 6.45664,0 C 21.144975,5.0041615 10.922265,5.5345215 7.6642103,9.1041047 z"
id="path2177"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccccc"
id="path4989"
d="m 34.767155,16.211613 -1.984176,2.545709 c -5.410032,-1.516293 -7.88615,2.729342 -15.673695,1.73179 l -3.861286,-4.409035 7.18647,0.08279 C 20.483219,4.3164571 8.3443098,4.998966 5.0292663,13.627829 8.8372201,-1.2611216 27.893316,0.8064118 28.28332,16.114112 l 6.483835,0.0975 z"
style="opacity:0.49431817;color:#000000;fill:url(#radialGradient3195);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.9999997;marker:none;visibility:visible;display:inline;overflow:visible"
inkscape:connector-curvature="0" />
</g>
<use
x="0"
y="0"
xlink:href="#g3080"
id="use3150"
transform="translate(11.738167,0)"
width="48"
height="48" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -716,9 +716,8 @@ static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer dat
return TRUE;
}
if ((event->keyval == GDK_Up ||
event->keyval == GDK_KP_Up) &&
(event->state & GDK_MOD1_MASK)) /* FIXME: Alt-Up doesn't seem to work! */
if (( (event->keyval == GDK_Up || event->keyval == GDK_KP_Up) && (event->state & GDK_MOD1_MASK)) || /* FIXME: Alt-Up doesn't seem to work! */
(event->keyval == GDK_BackSpace) )
{
on_go_up();
return TRUE;

View File

@ -14,7 +14,6 @@ src/geany.h
src/geanymenubuttonaction.c
src/geanyentryaction.c
src/highlighting.c
src/images.c
src/keybindings.c
src/keyfile.c
src/log.c

113
po/cs.po
View File

@ -4,14 +4,15 @@
# Petr Messner <messa@messa.cz>, 2006-2007.
# Anna Talianova <anickat1@gmail.com>, 2008.
# Karel Kolman <kolmis@gmail.com>, 2009-2011.
# Miro Hrončok <miro@hroncok.cz>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: Geany 1.22\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-03 17:50+0200\n"
"PO-Revision-Date: 2010-12-05 15:55+0100\n"
"Last-Translator: Karel Kolman <kolmis@gmail.com>\n"
"PO-Revision-Date: 2013-01-05 19:00+0100\n"
"Last-Translator: Miro Hrončok <miro@hroncok.cz>\n"
"Language-Team: Czech <geany-i18n@uvena.de>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
@ -304,21 +305,16 @@ msgid "Always wrap search"
msgstr ""
#: ../data/geany.glade.h:57
#, fuzzy
msgid "Always wrap search around the document"
msgstr "Vždy hledat v celém dokumentu a skrýt dialogové okno Najít"
msgstr "Vždy hledat v celém dokumentu"
#: ../data/geany.glade.h:58
#, fuzzy
msgid "Hide the Find dialog"
msgstr "Vždy hledat v celém dokumentu a skrýt dialogové okno Najít"
msgstr "Skrýt dialogové okno Najít"
#: ../data/geany.glade.h:59
#, fuzzy
msgid "Hide the Find dialog after clicking Find Next/Previous"
msgstr ""
"Hledání bude vždy rozšířeno na celý dokument a dialogové okno Najít bude "
"skryto po kliknutí na Najít další/předchozí"
msgstr "Skrýt sialogové okno Najít po kliknutí na Najít další/předchozí"
#: ../data/geany.glade.h:60
msgid "Use the current word under the cursor for Find dialogs"
@ -509,9 +505,8 @@ msgid "Calls the View->Toggle All Additional Widgets command"
msgstr "Volá funkci menu Zobrazit->Skrýt/zobrazit všechny ostatní panely"
#: ../data/geany.glade.h:100
#, fuzzy
msgid "Switch to last used document after closing a tab"
msgstr "Přejít do předchozího dokumentu"
msgstr "Přejít na naposledy používaný dokumentu po zvaření záložky"
#: ../data/geany.glade.h:101
msgid "<b>Editor tabs</b>"
@ -1448,9 +1443,8 @@ msgid "Sets the font for the terminal widget"
msgstr "Nastaví písmo terminálu."
#: ../data/geany.glade.h:300
#, fuzzy
msgid "Choose Terminal Font"
msgstr "Písmo terminálu:"
msgstr "Vyberte písmo terminálu:"
#: ../data/geany.glade.h:301
msgid "Foreground color:"
@ -1473,9 +1467,8 @@ msgid "Sets the foreground color of the text in the terminal widget"
msgstr "Nastaví barvu textu v okně terminálu."
#: ../data/geany.glade.h:306
#, fuzzy
msgid "Sets the backround color of the text in the terminal widget"
msgstr "Nastaví barvu pozadí v okně terminálu."
msgstr "Nastaví barvu pozadí textu v okně terminálu"
#: ../data/geany.glade.h:307
msgid ""
@ -1539,19 +1532,16 @@ msgstr ""
"Midnight Commanderu uvnitř VTE."
#: ../data/geany.glade.h:319
#, fuzzy
msgid "Follow path of the current file"
msgstr "Následovat cestu aktuálního otevřeného souboru"
#: ../data/geany.glade.h:320
#, fuzzy
msgid ""
"Whether to execute \\\"cd $path\\\" when you switch between opened files"
msgstr ""
"Zda provádět příkaz \"cd $cesta\" při přepínání mezi otevřenými soubory."
"Zda provádět příkaz \\\"cd $cesta\\\" při přepínání mezi otevřenými soubory."
#: ../data/geany.glade.h:321
#, fuzzy
msgid "Execute programs in the VTE"
msgstr "Spouštět programy v emulátoru terminálu"
@ -1576,9 +1566,8 @@ msgstr ""
"terminálu. Pozor, programy spuštěné v terminálu nemohou být zastaveny."
#: ../data/geany.glade.h:325
#, fuzzy
msgid "<b>Terminal</b>"
msgstr "<b>Oprávnění:</b>"
msgstr "<b>Terminál:</b>"
#: ../data/geany.glade.h:326 ../src/prefs.c:1595 ../src/vte.c:281
msgid "Terminal"
@ -2087,9 +2076,8 @@ msgid "_Keyboard Shortcuts"
msgstr "_Klávesové zkratky"
#: ../data/geany.glade.h:450
#, fuzzy
msgid "Debug _Messages"
msgstr "Debug zprávy"
msgstr "Debug _zprávy"
#: ../data/geany.glade.h:451
msgid "_Website"
@ -2097,16 +2085,15 @@ msgstr "_Webové stránky"
#: ../data/geany.glade.h:452
msgid "Wi_ki"
msgstr ""
msgstr "Wi_ki"
#: ../data/geany.glade.h:453
msgid "Report a _Bug"
msgstr ""
msgstr "_Nahlásit chybu"
#: ../data/geany.glade.h:454
#, fuzzy
msgid "_Donate"
msgstr "_Neukládat"
msgstr "_Přispět"
#: ../data/geany.glade.h:455 ../src/sidebar.c:124
msgid "Symbols"
@ -2114,7 +2101,7 @@ msgstr "Symboly"
#: ../data/geany.glade.h:456
msgid "Documents"
msgstr "_Dokumenty"
msgstr "Dokumenty"
#: ../data/geany.glade.h:457
msgid "Status"
@ -2142,6 +2129,13 @@ msgid ""
"Frank Lanitz\n"
"All rights reserved."
msgstr ""
"Copyright (c) 2005-2012\n"
"Colomban Wendling\n"
"Nick Treleaven\n"
"Matthew Brush\n"
"Enrico Tröger\n"
"Frank Lanitz\n"
"Všechna práva vyhrazena."
#: ../src/about.c:157
msgid "About Geany"
@ -2237,9 +2231,9 @@ msgid "Failed to change the working directory to \"%s\""
msgstr "Selhala změna pracovního adresáře na \"%s\""
#: ../src/build.c:929
#, fuzzy, c-format
#, c-format
msgid "Failed to execute \"%s\" (start-script could not be created: %s)"
msgstr "Selhalo spuštění \"%s\" (startovací skript nemohl být vytvořen)"
msgstr "Selhalo spuštění \"%s\" (startovací skript nemohl být vytvořen: %s)"
#: ../src/build.c:984
msgid ""
@ -2482,9 +2476,9 @@ msgid "No more message items."
msgstr "Žádné další zprávy."
#: ../src/callbacks.c:1673
#, fuzzy, c-format
#, c-format
msgid "Could not open file %s (File not found)"
msgstr "Soubor %s nemohl být otevřen (%s)"
msgstr "Soubor %s nemohl být otevřen (Soubor nenalezen)"
#: ../src/dialogs.c:226
msgid "Detect from file"
@ -3154,23 +3148,21 @@ msgid "Could not find file '%s'."
msgstr "Soubor \"%s\" nebyl nalezen."
#: ../src/highlighting.c:1297
#, fuzzy
msgid "Default"
msgstr "_Výchozí"
msgstr "Výchozí"
#: ../src/highlighting.c:1336
#, fuzzy
msgid "The current filetype overrides the default style."
msgstr "Sestavit aktuální soubor nástrojem Make s výchozím cílem"
msgstr "Současný typ souboru přepisuje výchozí styl."
#: ../src/highlighting.c:1337
msgid "This may cause color schemes to display incorrectly."
msgstr ""
msgstr "Toto může způspbit nesprávné zobrazení barevných schémat."
#: ../src/highlighting.c:1358
#, fuzzy
msgid "Color Schemes"
msgstr "_Schémata barev"
msgstr "Schémata barev"
#. visual group order
#: ../src/keybindings.c:223 ../src/symbols.c:714
@ -3410,9 +3402,8 @@ msgid "Send to Custom Command 3"
msgstr "Použít Vlastní příkaz 3"
#: ../src/keybindings.c:400
#, fuzzy
msgid "Join lines"
msgstr "Zakomentovat řádek"
msgstr "Spojit řádky"
#: ../src/keybindings.c:405
msgid "Insert date"
@ -3763,7 +3754,7 @@ msgstr "Vypsat prefix Geany instalace"
#: ../src/main.c:138
msgid "Open all FILES in read-only mode (see documention)"
msgstr ""
msgstr "Otevřít všechny SOUBORY v režimu pouze pro čtení (viz dokumentace)"
#: ../src/main.c:139
msgid "Don't load the previous session's files"
@ -3899,9 +3890,8 @@ msgid "Plugin"
msgstr "Plugin"
#: ../src/plugins.c:1300
#, fuzzy
msgid "Description"
msgstr "Popis:"
msgstr "Popis"
#: ../src/plugins.c:1318
msgid "No plugins available."
@ -4133,9 +4123,9 @@ msgid "Do you want to close it before proceeding?"
msgstr "Chcete ho před pokračováním zavřít?"
#: ../src/project.c:597
#, fuzzy, c-format
#, c-format
msgid "The '%s' project is open."
msgstr "Projekt '%s' je již otevřen."
msgstr "Projekt '%s' je otevřen."
#: ../src/project.c:646
msgid "The specified project name is too short."
@ -4374,7 +4364,7 @@ msgstr ""
#: ../src/search.c:1574
#, c-format
msgid "Cannot parse extra options: %s"
msgstr ""
msgstr "Nemohu zpracovat extra hodnoty: %s"
#: ../src/search.c:1640
msgid "Searching..."
@ -4423,13 +4413,12 @@ msgstr ""
"Jde o závažnou chybu a aplikace bude nyní ukončena."
#: ../src/stash.c:1099
#, fuzzy
msgid "Name"
msgstr "Název:"
msgstr "Název"
#: ../src/stash.c:1106
msgid "Value"
msgstr ""
msgstr "Hodnota"
#: ../src/symbols.c:693 ../src/symbols.c:743 ../src/symbols.c:810
msgid "Chapter"
@ -4558,7 +4547,7 @@ msgstr "Třídy"
#: ../src/symbols.c:790
msgid "Anchors"
msgstr ""
msgstr "Kotvy"
#: ../src/symbols.c:791
msgid "H1 Headings"
@ -4638,7 +4627,7 @@ msgstr "Funkce / Úkoly"
# Java atd.
#: ../src/symbols.c:880 ../src/symbols.c:981
msgid "Members"
msgstr ""
msgstr "Členy"
# Fortran
#: ../src/symbols.c:930
@ -4656,7 +4645,7 @@ msgstr "Makra"
# ASM
#: ../src/symbols.c:943
msgid "Defines"
msgstr ""
msgstr "Definice"
# Makefiles
#: ../src/symbols.c:950
@ -4677,7 +4666,7 @@ msgstr "Triggery"
#: ../src/symbols.c:962
msgid "Views"
msgstr ""
msgstr "Pohledy"
#: ../src/symbols.c:982
msgid "Structs"
@ -4685,7 +4674,7 @@ msgstr "Struktury"
#: ../src/symbols.c:983
msgid "Typedefs / Enums"
msgstr ""
msgstr "Definice typů"
#: ../src/symbols.c:1728
#, c-format
@ -4723,9 +4712,8 @@ msgid "Load Tags"
msgstr "Načíst tagy"
#: ../src/symbols.c:1780
#, fuzzy
msgid "Geany tag files (*.*.tags)"
msgstr "Geany soubor tagů (*.tags)"
msgstr "Geany soubor tagů (*.*.tags)"
#. For translators: the first wildcard is the filetype, the second the filename
#: ../src/symbols.c:1800
@ -4880,13 +4868,12 @@ msgid "Choose more build actions"
msgstr "Další akce sestavení"
#: ../src/toolbar.c:380
#, fuzzy
msgid "Search Field"
msgstr "Hledání selhalo."
msgstr "Hledání selhalo"
#: ../src/toolbar.c:390
msgid "Goto Field"
msgstr ""
msgstr "Políčko přechodu na řádek"
#: ../src/toolbar.c:579
msgid "Separator"
@ -5071,9 +5058,9 @@ msgid "pos: %d"
msgstr ""
#: ../src/ui_utils.c:330
#, fuzzy, c-format
#, c-format
msgid "style: %d"
msgstr "Styl ikon:"
msgstr "styl: %d"
#: ../src/ui_utils.c:382
msgid " (new instance)"
@ -5126,7 +5113,7 @@ msgstr "Zavřít vše"
#: ../src/ui_utils.c:2225
msgid "Geany cannot start!"
msgstr ""
msgstr "Geany se nemůže spustit!"
#: ../src/utils.c:87
msgid "Select Browser"

5539
po/et.po Normal file

File diff suppressed because it is too large Load Diff

2095
po/he.po

File diff suppressed because it is too large Load Diff

2046
po/nl.po

File diff suppressed because it is too large Load Diff

View File

@ -4973,7 +4973,7 @@ msgstr ""
#. L = lines
#: ../src/ui_utils.c:219
msgid "%dL"
msgstr "%sS"
msgstr "%dS"
#. RO = read-only
#: ../src/ui_utils.c:225 ../src/ui_utils.c:232

View File

@ -30,6 +30,7 @@ lexers/LexOthers.cxx \
lexers/LexPascal.cxx \
lexers/LexPerl.cxx \
lexers/LexPython.cxx \
lexers/LexPO.cxx \
lexers/LexR.cxx \
lexers/LexRuby.cxx \
lexers/LexSQL.cxx \

View File

@ -541,6 +541,8 @@ void SurfaceImpl::Init(SurfaceID sid, WindowID wid) {
PLATFORM_ASSERT(wid);
context = cairo_reference(reinterpret_cast<cairo_t *>(sid));
pcontext = gtk_widget_create_pango_context(PWidget(wid));
// update the Pango context in case sid isn't the widget's surface
pango_cairo_update_context(context, pcontext);
layout = pango_layout_new(pcontext);
cairo_set_line_width(context, 1);
createdGC = true;
@ -554,6 +556,8 @@ void SurfaceImpl::InitPixMap(int width, int height, Surface *surface_, WindowID
PLATFORM_ASSERT(wid);
context = cairo_reference(surfImpl->context);
pcontext = gtk_widget_create_pango_context(PWidget(wid));
// update the Pango context in case surface_ isn't the widget's surface
pango_cairo_update_context(context, pcontext);
PLATFORM_ASSERT(pcontext);
layout = pango_layout_new(pcontext);
PLATFORM_ASSERT(layout);

View File

@ -1213,6 +1213,10 @@ bool ScintillaGTK::ModifyScrollBars(int nMax, int nPage) {
modified = true;
}
#endif
if (modified && (paintState == painting)) {
paintState = paintAbandoned;
}
return modified;
}

View File

@ -1354,6 +1354,13 @@
#define SCE_PO_MSGCTXT 6
#define SCE_PO_MSGCTXT_TEXT 7
#define SCE_PO_FUZZY 8
#define SCE_PO_PROGRAMMER_COMMENT 9
#define SCE_PO_REFERENCE 10
#define SCE_PO_FLAGS 11
#define SCE_PO_MSGID_TEXT_EOL 12
#define SCE_PO_MSGSTR_TEXT_EOL 13
#define SCE_PO_MSGCTXT_TEXT_EOL 14
#define SCE_PO_ERROR 15
#define SCE_PAS_DEFAULT 0
#define SCE_PAS_IDENTIFIER 1
#define SCE_PAS_COMMENT 2

View File

@ -3924,6 +3924,13 @@ val SCE_PO_MSGSTR_TEXT=5
val SCE_PO_MSGCTXT=6
val SCE_PO_MSGCTXT_TEXT=7
val SCE_PO_FUZZY=8
val SCE_PO_PROGRAMMER_COMMENT=9
val SCE_PO_REFERENCE=10
val SCE_PO_FLAGS=11
val SCE_PO_MSGID_TEXT_EOL=12
val SCE_PO_MSGSTR_TEXT_EOL=13
val SCE_PO_MSGCTXT_TEXT_EOL=14
val SCE_PO_ERROR=15
# Lexical states for SCLEX_PASCAL
lex Pascal=SCLEX_PASCAL SCE_PAS_
val SCE_PAS_DEFAULT=0

View File

@ -2,7 +2,7 @@
/** @file LexBash.cxx
** Lexer for Bash.
**/
// Copyright 2004-2010 by Neil Hodgson <neilh@scintilla.org>
// Copyright 2004-2012 by Neil Hodgson <neilh@scintilla.org>
// Adapted from LexPerl by Kein-Hong Man 2004
// The License.txt file describes the conditions under which this software may be distributed.
@ -49,6 +49,17 @@ using namespace Scintilla;
#define BASH_CMD_ARITH 4
#define BASH_CMD_DELIM 5
// state constants for nested delimiter pairs, used by
// SCE_SH_STRING and SCE_SH_BACKTICKS processing
#define BASH_DELIM_LITERAL 0
#define BASH_DELIM_STRING 1
#define BASH_DELIM_CSTRING 2
#define BASH_DELIM_LSTRING 3
#define BASH_DELIM_COMMAND 4
#define BASH_DELIM_BACKTICK 5
#define BASH_DELIM_STACK_MAX 7
static inline int translateBashDigit(int ch) {
if (ch >= '0' && ch <= '9') {
return ch - '0';
@ -154,6 +165,60 @@ static void ColouriseBashDoc(unsigned int startPos, int length, int initStyle,
};
QuoteCls Quote;
class QuoteStackCls { // Class to manage quote pairs that nest
public:
int Count;
int Up, Down;
int Style;
int Depth; // levels pushed
int *CountStack;
int *UpStack;
int *StyleStack;
QuoteStackCls() {
Count = 0;
Up = '\0';
Down = '\0';
Style = 0;
Depth = 0;
CountStack = new int[BASH_DELIM_STACK_MAX];
UpStack = new int[BASH_DELIM_STACK_MAX];
StyleStack = new int[BASH_DELIM_STACK_MAX];
}
void Start(int u, int s) {
Count = 1;
Up = u;
Down = opposite(Up);
Style = s;
}
void Push(int u, int s) {
if (Depth >= BASH_DELIM_STACK_MAX)
return;
CountStack[Depth] = Count;
UpStack [Depth] = Up;
StyleStack[Depth] = Style;
Depth++;
Count = 1;
Up = u;
Down = opposite(Up);
Style = s;
}
void Pop(void) {
if (Depth <= 0)
return;
Depth--;
Count = CountStack[Depth];
Up = UpStack [Depth];
Style = StyleStack[Depth];
Down = opposite(Up);
}
~QuoteStackCls() {
delete []CountStack;
delete []UpStack;
delete []StyleStack;
}
};
QuoteStackCls QuoteStack;
int numBase = 0;
int digit;
unsigned int endPos = startPos + length;
@ -163,6 +228,8 @@ static void ColouriseBashDoc(unsigned int startPos, int length, int initStyle,
// Always backtracks to the start of a line that is not a continuation
// of the previous line (i.e. start of a bash command segment)
int ln = styler.GetLine(startPos);
if (ln > 0 && startPos == static_cast<unsigned int>(styler.LineStart(ln)))
ln--;
for (;;) {
startPos = styler.LineStart(ln);
if (ln == 0 || styler.GetLineState(ln) == BASH_CMD_START)
@ -376,7 +443,7 @@ static void ColouriseBashDoc(unsigned int startPos, int length, int initStyle,
sc.ForwardSetState(SCE_SH_DEFAULT);
} else if (sc.ch == '\\') {
// skip escape prefix
} else {
} else if (!HereDoc.Quoted) {
sc.SetState(SCE_SH_DEFAULT);
}
if (HereDoc.DelimiterLength >= HERE_DELIM_MAX - 1) { // force blowup
@ -401,8 +468,11 @@ static void ColouriseBashDoc(unsigned int startPos, int length, int initStyle,
}
char s[HERE_DELIM_MAX];
sc.GetCurrent(s, sizeof(s));
if (sc.LengthCurrent() == 0)
if (sc.LengthCurrent() == 0) { // '' or "" delimiters
if (prefixws == 0 && HereDoc.Quoted && HereDoc.DelimiterLength == 0)
sc.SetState(SCE_SH_DEFAULT);
break;
}
if (s[strlen(s) - 1] == '\r')
s[strlen(s) - 1] = '\0';
if (strcmp(HereDoc.Delimiter, s) == 0) {
@ -424,9 +494,56 @@ static void ColouriseBashDoc(unsigned int startPos, int length, int initStyle,
}
}
break;
case SCE_SH_STRING: // delimited styles
case SCE_SH_STRING: // delimited styles, can nest
case SCE_SH_BACKTICKS:
case SCE_SH_PARAM:
if (sc.ch == '\\' && QuoteStack.Up != '\\') {
if (QuoteStack.Style != BASH_DELIM_LITERAL)
sc.Forward();
} else if (sc.ch == QuoteStack.Down) {
QuoteStack.Count--;
if (QuoteStack.Count == 0) {
if (QuoteStack.Depth > 0) {
QuoteStack.Pop();
} else
sc.ForwardSetState(SCE_SH_DEFAULT);
}
} else if (sc.ch == QuoteStack.Up) {
QuoteStack.Count++;
} else {
if (QuoteStack.Style == BASH_DELIM_STRING ||
QuoteStack.Style == BASH_DELIM_LSTRING
) { // do nesting for "string", $"locale-string"
if (sc.ch == '`') {
QuoteStack.Push(sc.ch, BASH_DELIM_BACKTICK);
} else if (sc.ch == '$' && sc.chNext == '(') {
sc.Forward();
QuoteStack.Push(sc.ch, BASH_DELIM_COMMAND);
}
} else if (QuoteStack.Style == BASH_DELIM_COMMAND ||
QuoteStack.Style == BASH_DELIM_BACKTICK
) { // do nesting for $(command), `command`
if (sc.ch == '\'') {
QuoteStack.Push(sc.ch, BASH_DELIM_LITERAL);
} else if (sc.ch == '\"') {
QuoteStack.Push(sc.ch, BASH_DELIM_STRING);
} else if (sc.ch == '`') {
QuoteStack.Push(sc.ch, BASH_DELIM_BACKTICK);
} else if (sc.ch == '$') {
if (sc.chNext == '\'') {
sc.Forward();
QuoteStack.Push(sc.ch, BASH_DELIM_CSTRING);
} else if (sc.chNext == '\"') {
sc.Forward();
QuoteStack.Push(sc.ch, BASH_DELIM_LSTRING);
} else if (sc.chNext == '(') {
sc.Forward();
QuoteStack.Push(sc.ch, BASH_DELIM_COMMAND);
}
}
}
}
break;
case SCE_SH_PARAM: // ${parameter}
if (sc.ch == '\\' && Quote.Up != '\\') {
sc.Forward();
} else if (sc.ch == Quote.Down) {
@ -461,8 +578,14 @@ static void ColouriseBashDoc(unsigned int startPos, int length, int initStyle,
sc.ChangeState(SCE_SH_ERROR);
}
// HereDoc.Quote always == '\''
sc.SetState(SCE_SH_HERE_Q);
} else if (HereDoc.DelimiterLength == 0) {
// no delimiter, illegal (but '' and "" are legal)
sc.ChangeState(SCE_SH_ERROR);
sc.SetState(SCE_SH_DEFAULT);
} else {
sc.SetState(SCE_SH_HERE_Q);
}
sc.SetState(SCE_SH_HERE_Q);
}
// update cmdState about the current command segment
@ -497,13 +620,13 @@ static void ColouriseBashDoc(unsigned int startPos, int length, int initStyle,
sc.SetState(SCE_SH_COMMENTLINE);
} else if (sc.ch == '\"') {
sc.SetState(SCE_SH_STRING);
Quote.Start(sc.ch);
QuoteStack.Start(sc.ch, BASH_DELIM_STRING);
} else if (sc.ch == '\'') {
sc.SetState(SCE_SH_CHARACTER);
Quote.Start(sc.ch);
} else if (sc.ch == '`') {
sc.SetState(SCE_SH_BACKTICKS);
Quote.Start(sc.ch);
QuoteStack.Start(sc.ch, BASH_DELIM_BACKTICK);
} else if (sc.ch == '$') {
if (sc.Match("$((")) {
sc.SetState(SCE_SH_OPERATOR); // handle '((' later
@ -513,17 +636,22 @@ static void ColouriseBashDoc(unsigned int startPos, int length, int initStyle,
sc.Forward();
if (sc.ch == '{') {
sc.ChangeState(SCE_SH_PARAM);
Quote.Start(sc.ch);
} else if (sc.ch == '\'') {
sc.ChangeState(SCE_SH_STRING);
QuoteStack.Start(sc.ch, BASH_DELIM_CSTRING);
} else if (sc.ch == '"') {
sc.ChangeState(SCE_SH_STRING);
} else if (sc.ch == '(' || sc.ch == '`') {
QuoteStack.Start(sc.ch, BASH_DELIM_LSTRING);
} else if (sc.ch == '(') {
sc.ChangeState(SCE_SH_BACKTICKS);
QuoteStack.Start(sc.ch, BASH_DELIM_COMMAND);
} else if (sc.ch == '`') { // $` seen in a configure script, valid?
sc.ChangeState(SCE_SH_BACKTICKS);
QuoteStack.Start(sc.ch, BASH_DELIM_BACKTICK);
} else {
continue; // scalar has no delimiter pair
}
// fallthrough, open delim for $[{'"(`]
Quote.Start(sc.ch);
} else if (sc.Match('<', '<')) {
sc.SetState(SCE_SH_HERE_DELIM);
HereDoc.State = 0;
@ -597,6 +725,10 @@ static void ColouriseBashDoc(unsigned int startPos, int length, int initStyle,
}// sc.state
}
sc.Complete();
if (sc.state == SCE_SH_HERE_Q) {
styler.ChangeLexerState(sc.currentPos, styler.Length());
}
sc.Complete();
}
static bool IsCommentLine(int line, Accessor &styler) {
@ -651,7 +783,7 @@ static void FoldBashDoc(unsigned int startPos, int length, int, WordList *[],
if (ch == '<' && chNext == '<') {
levelCurrent++;
}
} else if (style == SCE_SH_HERE_Q && styler.StyleAt(i+1) == SCE_PL_DEFAULT) {
} else if (style == SCE_SH_HERE_Q && styler.StyleAt(i+1) == SCE_SH_DEFAULT) {
levelCurrent--;
}
if (atEOL) {

View File

@ -467,6 +467,7 @@ void SCI_METHOD LexerCPP::Lex(unsigned int startPos, int length, int initStyle,
int styleBeforeDCKeyword = SCE_C_DEFAULT;
bool continuationLine = false;
bool isIncludePreprocessor = false;
bool isStringInPreprocessor = false;
int lineCurrent = styler.GetLine(startPos);
if ((MaskActive(initStyle) == SCE_C_PREPROCESSOR) ||
@ -578,7 +579,9 @@ void SCI_METHOD LexerCPP::Lex(unsigned int startPos, int length, int initStyle,
break;
case SCE_C_NUMBER:
// We accept almost anything because of hex. and number suffixes
if (!(setWord.Contains(sc.ch) || ((sc.ch == '+' || sc.ch == '-') && (sc.chPrev == 'e' || sc.chPrev == 'E')))) {
if (!(setWord.Contains(sc.ch)
|| ((sc.ch == '+' || sc.ch == '-') && (sc.chPrev == 'e' || sc.chPrev == 'E' ||
sc.chPrev == 'p' || sc.chPrev == 'P')))) {
sc.SetState(SCE_C_DEFAULT|activitySet);
}
break;
@ -618,13 +621,17 @@ void SCI_METHOD LexerCPP::Lex(unsigned int startPos, int length, int initStyle,
sc.SetState(SCE_C_DEFAULT|activitySet);
}
break;
case SCE_C_PREPROCESSOR:
case SCE_C_PREPROCESSOR:
if (options.stylingWithinPreprocessor) {
if (IsASpace(sc.ch)) {
sc.SetState(SCE_C_DEFAULT|activitySet);
}
} else {
if (sc.Match('/', '*')) {
} else if (isStringInPreprocessor && (sc.Match('>') || sc.Match('\"'))) {
isStringInPreprocessor = false;
} else if (!isStringInPreprocessor) {
if ((isIncludePreprocessor && sc.Match('<')) || sc.Match('\"')) {
isStringInPreprocessor = true;
} else if (sc.Match('/', '*')) {
sc.SetState(SCE_C_PREPROCESSORCOMMENT|activitySet);
sc.Forward(); // Eat the *
} else if (sc.Match('/', '/')) {

View File

@ -614,78 +614,6 @@ static void FoldDiffDoc(unsigned int startPos, int length, int, WordList *[], Ac
} while (static_cast<int>(startPos) + length > curLineStart);
}
static void ColourisePoLine(
char *lineBuffer,
unsigned int lengthLine,
unsigned int startLine,
unsigned int endPos,
Accessor &styler) {
unsigned int i = 0;
static unsigned int state = SCE_PO_DEFAULT;
unsigned int state_start = SCE_PO_DEFAULT;
while ((i < lengthLine) && isspacechar(lineBuffer[i])) // Skip initial spaces
i++;
if (i < lengthLine) {
if (lineBuffer[i] == '#') {
// check if the comment contains any flags ("#, ") and
// then whether the flags contain "fuzzy"
if (strstart(lineBuffer, "#, ") && strstr(lineBuffer, "fuzzy"))
styler.ColourTo(endPos, SCE_PO_FUZZY);
else
styler.ColourTo(endPos, SCE_PO_COMMENT);
} else {
if (lineBuffer[0] == '"') {
// line continuation, use previous style
styler.ColourTo(endPos, state);
return;
// this implicitly also matches "msgid_plural"
} else if (strstart(lineBuffer, "msgid")) {
state_start = SCE_PO_MSGID;
state = SCE_PO_MSGID_TEXT;
} else if (strstart(lineBuffer, "msgstr")) {
state_start = SCE_PO_MSGSTR;
state = SCE_PO_MSGSTR_TEXT;
} else if (strstart(lineBuffer, "msgctxt")) {
state_start = SCE_PO_MSGCTXT;
state = SCE_PO_MSGCTXT_TEXT;
}
if (state_start != SCE_PO_DEFAULT) {
// find the next space
while ((i < lengthLine) && ! isspacechar(lineBuffer[i]))
i++;
styler.ColourTo(startLine + i - 1, state_start);
styler.ColourTo(startLine + i, SCE_PO_DEFAULT);
styler.ColourTo(endPos, state);
}
}
} else {
styler.ColourTo(endPos, SCE_PO_DEFAULT);
}
}
static void ColourisePoDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {
char lineBuffer[1024];
styler.StartAt(startPos);
styler.StartSegment(startPos);
unsigned int linePos = 0;
unsigned int startLine = startPos;
for (unsigned int i = startPos; i < startPos + length; i++) {
lineBuffer[linePos++] = styler[i];
if (AtEOL(styler, i) || (linePos >= sizeof(lineBuffer) - 1)) {
// End of line (or of line buffer) met, colourise it
lineBuffer[linePos] = '\0';
ColourisePoLine(lineBuffer, linePos, startLine, i, styler);
linePos = 0;
startLine = i + 1;
}
}
if (linePos > 0) { // Last line does not have ending characters
ColourisePoLine(lineBuffer, linePos, startLine, startPos + length - 1, styler);
}
}
static inline bool isassignchar(unsigned char ch) {
return (ch == '=') || (ch == ':');
}
@ -1498,7 +1426,6 @@ static void ColouriseNullDoc(unsigned int startPos, int length, int, WordList *[
LexerModule lmBatch(SCLEX_BATCH, ColouriseBatchDoc, "batch", 0, batchWordListDesc);
LexerModule lmDiff(SCLEX_DIFF, ColouriseDiffDoc, "diff", FoldDiffDoc, emptyWordListDesc);
LexerModule lmPo(SCLEX_PO, ColourisePoDoc, "po", 0, emptyWordListDesc);
LexerModule lmProps(SCLEX_PROPERTIES, ColourisePropsDoc, "props", FoldPropsDoc, emptyWordListDesc);
LexerModule lmMake(SCLEX_MAKEFILE, ColouriseMakeDoc, "makefile", 0, emptyWordListDesc);
LexerModule lmErrorList(SCLEX_ERRORLIST, ColouriseErrorListDoc, "errorlist", 0, emptyWordListDesc);

149
scintilla/lexers/LexPO.cxx Normal file
View File

@ -0,0 +1,149 @@
// Scintilla source code edit control
/** @file LexPO.cxx
** Lexer for GetText Translation (PO) files.
**/
// Copyright 2012 by Colomban Wendling <ban@herbesfolles.org>
// The License.txt file describes the conditions under which this software may be distributed.
// see https://www.gnu.org/software/gettext/manual/gettext.html#PO-Files for the syntax reference
// some details are taken from the GNU msgfmt behavior (like that indent is allows in front of lines)
// TODO:
// * add keywords for flags (fuzzy, c-format, ...)
// * highlight formats inside c-format strings (%s, %d, etc.)
// * style for previous untranslated string? ("#|" comment)
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdarg.h>
#include <assert.h>
#include <ctype.h>
#include "ILexer.h"
#include "Scintilla.h"
#include "SciLexer.h"
#include "WordList.h"
#include "LexAccessor.h"
#include "Accessor.h"
#include "StyleContext.h"
#include "CharacterSet.h"
#include "LexerModule.h"
#ifdef SCI_NAMESPACE
using namespace Scintilla;
#endif
static void ColourisePODoc(unsigned int startPos, int length, int initStyle, WordList *[], Accessor &styler) {
StyleContext sc(startPos, length, initStyle, styler);
bool escaped = false;
int curLine = styler.GetLine(startPos);
// the line state holds the last state on or before the line that isn't the default style
int curLineState = curLine > 0 ? styler.GetLineState(curLine - 1) : SCE_PO_DEFAULT;
for (; sc.More(); sc.Forward()) {
// whether we should leave a state
switch (sc.state) {
case SCE_PO_COMMENT:
case SCE_PO_PROGRAMMER_COMMENT:
case SCE_PO_REFERENCE:
case SCE_PO_FLAGS:
case SCE_PO_FUZZY:
if (sc.atLineEnd)
sc.SetState(SCE_PO_DEFAULT);
else if (sc.state == SCE_PO_FLAGS && sc.Match("fuzzy"))
// here we behave like the previous parser, but this should probably be highlighted
// on its own like a keyword rather than changing the whole flags style
sc.ChangeState(SCE_PO_FUZZY);
break;
case SCE_PO_MSGCTXT:
case SCE_PO_MSGID:
case SCE_PO_MSGSTR:
if (isspacechar(sc.ch))
sc.SetState(SCE_PO_DEFAULT);
break;
case SCE_PO_ERROR:
if (sc.atLineEnd)
sc.SetState(SCE_PO_DEFAULT);
break;
case SCE_PO_MSGCTXT_TEXT:
case SCE_PO_MSGID_TEXT:
case SCE_PO_MSGSTR_TEXT:
if (sc.atLineEnd) { // invalid inside a string
if (sc.state == SCE_PO_MSGCTXT_TEXT)
sc.ChangeState(SCE_PO_MSGCTXT_TEXT_EOL);
else if (sc.state == SCE_PO_MSGID_TEXT)
sc.ChangeState(SCE_PO_MSGID_TEXT_EOL);
else if (sc.state == SCE_PO_MSGSTR_TEXT)
sc.ChangeState(SCE_PO_MSGSTR_TEXT_EOL);
sc.SetState(SCE_PO_DEFAULT);
escaped = false;
} else {
if (escaped)
escaped = false;
else if (sc.ch == '\\')
escaped = true;
else if (sc.ch == '"')
sc.ForwardSetState(SCE_PO_DEFAULT);
}
break;
}
// whether we should enter a new state
if (sc.state == SCE_PO_DEFAULT) {
// forward to the first non-white character on the line
bool atLineStart = sc.atLineStart;
if (atLineStart) {
while (sc.More() && ! sc.atLineEnd && isspacechar(sc.ch))
sc.Forward();
}
if (atLineStart && sc.ch == '#') {
if (sc.chNext == '.')
sc.SetState(SCE_PO_PROGRAMMER_COMMENT);
else if (sc.chNext == ':')
sc.SetState(SCE_PO_REFERENCE);
else if (sc.chNext == ',')
sc.SetState(SCE_PO_FLAGS);
else
sc.SetState(SCE_PO_COMMENT);
} else if (atLineStart && sc.Match("msgid")) { // includes msgid_plural
sc.SetState(SCE_PO_MSGID);
} else if (atLineStart && sc.Match("msgstr")) { // includes [] suffixes
sc.SetState(SCE_PO_MSGSTR);
} else if (atLineStart && sc.Match("msgctxt")) {
sc.SetState(SCE_PO_MSGCTXT);
} else if (sc.ch == '"') {
if (curLineState == SCE_PO_MSGCTXT || curLineState == SCE_PO_MSGCTXT_TEXT)
sc.SetState(SCE_PO_MSGCTXT_TEXT);
else if (curLineState == SCE_PO_MSGID || curLineState == SCE_PO_MSGID_TEXT)
sc.SetState(SCE_PO_MSGID_TEXT);
else if (curLineState == SCE_PO_MSGSTR || curLineState == SCE_PO_MSGSTR_TEXT)
sc.SetState(SCE_PO_MSGSTR_TEXT);
else
sc.SetState(SCE_PO_ERROR);
} else if (! isspacechar(sc.ch))
sc.SetState(SCE_PO_ERROR);
if (sc.state != SCE_PO_DEFAULT)
curLineState = sc.state;
}
if (sc.atLineEnd) {
// Update the line state, so it can be seen by next line
curLine = styler.GetLine(sc.currentPos);
styler.SetLineState(curLine, curLineState);
}
}
sc.Complete();
}
static const char *const poWordListDesc[] = {
0
};
LexerModule lmPO(SCLEX_PO, ColourisePODoc, "po", 0, poWordListDesc);

View File

@ -465,7 +465,9 @@ static bool sureThisIsNotHeredoc(int lt2StartPos,
}
prevStyle = styler.StyleAt(firstWordPosn);
// If we have '<<' following a keyword, it's not a heredoc
if (prevStyle != SCE_RB_IDENTIFIER) {
if (prevStyle != SCE_RB_IDENTIFIER
&& prevStyle != SCE_RB_INSTANCE_VAR
&& prevStyle != SCE_RB_CLASS_VAR) {
return definitely_not_a_here_doc;
}
int newStyle = prevStyle;
@ -495,6 +497,9 @@ static bool sureThisIsNotHeredoc(int lt2StartPos,
} else {
break;
}
// on second and next passes, only identifiers may appear since
// class and instance variable are private
prevStyle = SCE_RB_IDENTIFIER;
}
// Skip next batch of white-space
firstWordPosn = skipWhitespace(firstWordPosn, lt2StartPos, styler);
@ -1436,7 +1441,8 @@ static bool keywordIsAmbiguous(const char *prevWord)
|| !strcmp(prevWord, "do")
|| !strcmp(prevWord, "while")
|| !strcmp(prevWord, "unless")
|| !strcmp(prevWord, "until")) {
|| !strcmp(prevWord, "until")
|| !strcmp(prevWord, "for")) {
return true;
} else {
return false;
@ -1554,6 +1560,7 @@ static bool keywordIsModifier(const char *word,
#define WHILE_BACKWARDS "elihw"
#define UNTIL_BACKWARDS "litnu"
#define FOR_BACKWARDS "rof"
// Nothing fancy -- look to see if we follow a while/until somewhere
// on the current line
@ -1591,7 +1598,8 @@ static bool keywordDoStartsLoop(int pos,
*dst = 0;
// Did we see our keyword?
if (!strcmp(prevWord, WHILE_BACKWARDS)
|| !strcmp(prevWord, UNTIL_BACKWARDS)) {
|| !strcmp(prevWord, UNTIL_BACKWARDS)
|| !strcmp(prevWord, FOR_BACKWARDS)) {
return true;
}
// We can move pos to the beginning of the keyword, and then

View File

@ -122,13 +122,11 @@ public :
return sqlStatesLine;
}
unsigned short int IntoSelectStatement (unsigned short int sqlStatesLine, bool found) {
unsigned short int IntoSelectStatementOrAssignment (unsigned short int sqlStatesLine, bool found) {
if (found)
sqlStatesLine |= MASK_INTO_SELECT_STATEMENT;
sqlStatesLine |= MASK_INTO_SELECT_STATEMENT_OR_ASSIGNEMENT;
else
sqlStatesLine &= ~MASK_INTO_SELECT_STATEMENT;
sqlStatesLine &= ~MASK_INTO_SELECT_STATEMENT_OR_ASSIGNEMENT;
return sqlStatesLine;
}
@ -161,11 +159,9 @@ public :
bool IsIntoExceptionBlock (unsigned short int sqlStatesLine) {
return (sqlStatesLine & MASK_INTO_EXCEPTION) != 0;
}
bool IsIntoSelectStatement (unsigned short int sqlStatesLine) {
return (sqlStatesLine & MASK_INTO_SELECT_STATEMENT) != 0;
bool IsIntoSelectStatementOrAssignment (unsigned short int sqlStatesLine) {
return (sqlStatesLine & MASK_INTO_SELECT_STATEMENT_OR_ASSIGNEMENT) != 0;
}
bool IsCaseMergeWithoutWhenFound (unsigned short int sqlStatesLine) {
return (sqlStatesLine & MASK_CASE_MERGE_WITHOUT_WHEN_FOUND) != 0;
}
@ -188,7 +184,7 @@ private :
SparseState <unsigned short int> sqlStatement;
enum {
MASK_NESTED_CASES = 0x01FF,
MASK_INTO_SELECT_STATEMENT = 0x0200,
MASK_INTO_SELECT_STATEMENT_OR_ASSIGNEMENT = 0x0200,
MASK_CASE_MERGE_WITHOUT_WHEN_FOUND = 0x0400,
MASK_MERGE_STATEMENT = 0x0800,
MASK_INTO_DECLARE = 0x1000,
@ -608,9 +604,12 @@ void SCI_METHOD LexerSQL::Fold(unsigned int startPos, int length, int initStyle,
sqlStatesCurrentLine = sqlStates.IntoMergeStatement(sqlStatesCurrentLine, false);
levelNext--;
}
if (sqlStates.IsIntoSelectStatement(sqlStatesCurrentLine))
sqlStatesCurrentLine = sqlStates.IntoSelectStatement(sqlStatesCurrentLine, false);
if (sqlStates.IsIntoSelectStatementOrAssignment(sqlStatesCurrentLine))
sqlStatesCurrentLine = sqlStates.IntoSelectStatementOrAssignment(sqlStatesCurrentLine, false);
}
if (ch == ':' && chNext == '=' && !IsCommentStyle(style))
sqlStatesCurrentLine = sqlStates.IntoSelectStatementOrAssignment(sqlStatesCurrentLine, true);
if (options.foldComment && IsStreamCommentStyle(style)) {
if (!IsStreamCommentStyle(stylePrev)) {
levelNext++;
@ -666,10 +665,9 @@ void SCI_METHOD LexerSQL::Fold(unsigned int startPos, int length, int initStyle,
} else {
s[j] = '\0';
}
if (!options.foldOnlyBegin &&
strcmp(s, "select") == 0) {
sqlStatesCurrentLine = sqlStates.IntoSelectStatement(sqlStatesCurrentLine, true);
sqlStatesCurrentLine = sqlStates.IntoSelectStatementOrAssignment(sqlStatesCurrentLine, true);
} else if (strcmp(s, "if") == 0) {
if (endFound) {
endFound = false;
@ -719,8 +717,10 @@ void SCI_METHOD LexerSQL::Fold(unsigned int startPos, int length, int initStyle,
levelNext--; //again for the "end case;" and block when
}
} else if (!options.foldOnlyBegin) {
if (strcmp(s, "case") == 0)
if (strcmp(s, "case") == 0) {
sqlStatesCurrentLine = sqlStates.BeginCaseBlock(sqlStatesCurrentLine);
sqlStatesCurrentLine = sqlStates.CaseMergeWithoutWhenFound(sqlStatesCurrentLine, true);
}
if (levelCurrent > levelNext)
levelCurrent = levelNext;
@ -728,7 +728,6 @@ void SCI_METHOD LexerSQL::Fold(unsigned int startPos, int length, int initStyle,
if (!statementFound)
levelNext++;
sqlStatesCurrentLine = sqlStates.CaseMergeWithoutWhenFound(sqlStatesCurrentLine, true);
statementFound = true;
} else if (levelCurrent > levelNext) {
// doesn't include this line into the folding block
@ -765,7 +764,7 @@ void SCI_METHOD LexerSQL::Fold(unsigned int startPos, int length, int initStyle,
(strcmp(s, "endif") == 0)) {
endFound = true;
levelNext--;
if (sqlStates.IsIntoSelectStatement(sqlStatesCurrentLine) && !sqlStates.IsCaseMergeWithoutWhenFound(sqlStatesCurrentLine))
if (sqlStates.IsIntoSelectStatementOrAssignment(sqlStatesCurrentLine) && !sqlStates.IsCaseMergeWithoutWhenFound(sqlStatesCurrentLine))
levelNext--;
if (levelNext < SC_FOLDLEVELBASE) {
levelNext = SC_FOLDLEVELBASE;

View File

@ -73,6 +73,7 @@ LexHTML.o \
LexOthers.o \
LexPascal.o \
LexPerl.o \
LexPO.o \
LexPython.o \
LexSQL.o \
LexCaml.o \

View File

@ -107,7 +107,7 @@ index 2f75247..a34f834 100644
LINK_LEXER(lmPerl);
- LINK_LEXER(lmPHPSCRIPT);
- LINK_LEXER(lmPLM);
LINK_LEXER(lmPo);
LINK_LEXER(lmPO);
- LINK_LEXER(lmPOV);
- LINK_LEXER(lmPowerPro);
- LINK_LEXER(lmPowerShell);

View File

@ -109,7 +109,7 @@ int Scintilla_LinkLexers() {
LINK_LEXER(lmOctave);
LINK_LEXER(lmPascal);
LINK_LEXER(lmPerl);
LINK_LEXER(lmPo);
LINK_LEXER(lmPO);
LINK_LEXER(lmProps);
LINK_LEXER(lmPython);
LINK_LEXER(lmR);

View File

@ -69,6 +69,7 @@ void LexInterface::Colourise(int start, int end) {
Document::Document() {
refCount = 0;
pcf = NULL;
#ifdef _WIN32
eolMode = SC_EOL_CRLF;
#else
@ -123,6 +124,8 @@ Document::~Document() {
regex = 0;
delete pli;
pli = 0;
delete pcf;
pcf = 0;
}
void Document::Init() {
@ -132,6 +135,16 @@ void Document::Init() {
}
}
bool Document::SetDBCSCodePage(int dbcsCodePage_) {
if (dbcsCodePage != dbcsCodePage_) {
dbcsCodePage = dbcsCodePage_;
SetCaseFolder(NULL);
return true;
} else {
return false;
}
}
void Document::InsertLine(int line) {
for (int j=0; j<ldSize; j++) {
if (perLineData[j])
@ -1419,6 +1432,15 @@ bool Document::MatchesWordOptions(bool word, bool wordStart, int pos, int length
(wordStart && IsWordStartAt(pos));
}
bool Document::HasCaseFolder(void) const {
return pcf != 0;
}
void Document::SetCaseFolder(CaseFolder *pcf_) {
delete pcf;
pcf = pcf_;
}
/**
* Find text in document, supporting both forward and backward
* searches (just pass minPos > maxPos to do a backward search)
@ -1426,7 +1448,7 @@ bool Document::MatchesWordOptions(bool word, bool wordStart, int pos, int length
*/
long Document::FindText(int minPos, int maxPos, const char *search,
bool caseSensitive, bool word, bool wordStart, bool regExp, int flags,
int *length, CaseFolder *pcf) {
int *length) {
if (*length <= 0)
return minPos;
if (regExp) {

View File

@ -212,6 +212,7 @@ private:
int refCount;
CellBuffer cb;
CharClassify charClass;
CaseFolder *pcf;
char stylingMask;
int endStyled;
int styleClock;
@ -255,6 +256,7 @@ public:
int SCI_METHOD Release();
virtual void Init();
bool SetDBCSCodePage(int dbcsCodePage_);
virtual void InsertLine(int line);
virtual void RemoveLine(int line);
@ -355,8 +357,10 @@ public:
int SCI_METHOD Length() const { return cb.Length(); }
void Allocate(int newSize) { cb.Allocate(newSize); }
bool MatchesWordOptions(bool word, bool wordStart, int pos, int length);
bool HasCaseFolder(void) const;
void SetCaseFolder(CaseFolder *pcf_);
long FindText(int minPos, int maxPos, const char *search, bool caseSensitive, bool word,
bool wordStart, bool regExp, int flags, int *length, CaseFolder *pcf);
bool wordStart, bool regExp, int flags, int *length);
const char *SubstituteByPosition(const char *text, int *length);
int LinesTotal() const;

View File

@ -220,6 +220,7 @@ Editor::Editor() {
marginNumberPadding = 3;
ctrlCharPadding = 3; // +3 For a blank on front and rounded edge each side
lastSegItalicsOffset = 2;
hsStart = -1;
hsEnd = -1;
@ -2243,7 +2244,7 @@ void Editor::LayoutLine(int line, Surface *surface, ViewStyle &vstyle, LineLayou
}
// Small hack to make lines that end with italics not cut off the edge of the last character
if ((startseg > 0) && lastSegItalics) {
ll->positions[startseg] += 2;
ll->positions[startseg] += lastSegItalicsOffset;
}
ll->numCharsInLine = numCharsInLine;
ll->numCharsBeforeEOL = numCharsBeforeEOL;
@ -3438,6 +3439,8 @@ void Editor::Paint(Surface *surfaceWindow, PRectangle rcArea) {
AllocateGraphics();
RefreshStyleData();
if (paintState == paintAbandoned)
return; // Scroll bars may have changed so need redraw
RefreshPixMaps(surfaceWindow);
StyleToPositionInView(PositionAfterArea(rcArea));
@ -5732,15 +5735,15 @@ long Editor::FindText(
Sci_TextToFind *ft = reinterpret_cast<Sci_TextToFind *>(lParam);
int lengthFound = istrlen(ft->lpstrText);
std::auto_ptr<CaseFolder> pcf(CaseFolderForEncoding());
if (!pdoc->HasCaseFolder())
pdoc->SetCaseFolder(CaseFolderForEncoding());
int pos = pdoc->FindText(ft->chrg.cpMin, ft->chrg.cpMax, ft->lpstrText,
(wParam & SCFIND_MATCHCASE) != 0,
(wParam & SCFIND_WHOLEWORD) != 0,
(wParam & SCFIND_WORDSTART) != 0,
(wParam & SCFIND_REGEXP) != 0,
wParam,
&lengthFound,
pcf.get());
&lengthFound);
if (pos != -1) {
ft->chrgText.cpMin = pos;
ft->chrgText.cpMax = pos + lengthFound;
@ -5763,19 +5766,6 @@ void Editor::SearchAnchor() {
searchAnchor = SelectionStart().Position();
}
// Simple RAII wrapper for CaseFolder as std::auto_ptr is now deprecated
class ScopedCaseFolder {
CaseFolder *pcf;
public:
ScopedCaseFolder(CaseFolder *pcf_) : pcf(pcf_) {
}
~ScopedCaseFolder() {
delete pcf;
pcf = 0;
}
CaseFolder *get() const { return pcf; }
};
/**
* Find text from current search anchor: Must call @c SearchAnchor first.
* Used for next text and previous text requests.
@ -5790,7 +5780,8 @@ long Editor::SearchText(
const char *txt = reinterpret_cast<char *>(lParam);
int pos;
int lengthFound = istrlen(txt);
ScopedCaseFolder pcf(CaseFolderForEncoding());
if (!pdoc->HasCaseFolder())
pdoc->SetCaseFolder(CaseFolderForEncoding());
if (iMessage == SCI_SEARCHNEXT) {
pos = pdoc->FindText(searchAnchor, pdoc->Length(), txt,
(wParam & SCFIND_MATCHCASE) != 0,
@ -5798,8 +5789,7 @@ long Editor::SearchText(
(wParam & SCFIND_WORDSTART) != 0,
(wParam & SCFIND_REGEXP) != 0,
wParam,
&lengthFound,
pcf.get());
&lengthFound);
} else {
pos = pdoc->FindText(searchAnchor, 0, txt,
(wParam & SCFIND_MATCHCASE) != 0,
@ -5807,8 +5797,7 @@ long Editor::SearchText(
(wParam & SCFIND_WORDSTART) != 0,
(wParam & SCFIND_REGEXP) != 0,
wParam,
&lengthFound,
pcf.get());
&lengthFound);
}
if (pos != -1) {
SetSelection(pos, pos + lengthFound);
@ -5841,15 +5830,15 @@ std::string Editor::CaseMapString(const std::string &s, int caseMapping) {
long Editor::SearchInTarget(const char *text, int length) {
int lengthFound = length;
ScopedCaseFolder pcf(CaseFolderForEncoding());
if (!pdoc->HasCaseFolder())
pdoc->SetCaseFolder(CaseFolderForEncoding());
int pos = pdoc->FindText(targetStart, targetEnd, text,
(searchFlags & SCFIND_MATCHCASE) != 0,
(searchFlags & SCFIND_WHOLEWORD) != 0,
(searchFlags & SCFIND_WORDSTART) != 0,
(searchFlags & SCFIND_REGEXP) != 0,
searchFlags,
&lengthFound,
pcf.get());
&lengthFound);
if (pos != -1) {
targetStart = pos;
targetEnd = pos + lengthFound;
@ -7098,6 +7087,7 @@ void Editor::StyleSetMessage(unsigned int iMessage, uptr_t wParam, sptr_t lParam
break;
case SCI_STYLESETCHARACTERSET:
vs.styles[wParam].characterSet = lParam;
pdoc->SetCaseFolder(NULL);
break;
case SCI_STYLESETVISIBLE:
vs.styles[wParam].visible = lParam != 0;
@ -8076,8 +8066,9 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
case SCI_SETCODEPAGE:
if (ValidCodePage(wParam)) {
pdoc->dbcsCodePage = wParam;
InvalidateStyleRedraw();
if (pdoc->SetDBCSCodePage(wParam)) {
InvalidateStyleRedraw();
}
}
break;

View File

@ -271,6 +271,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
int marginNumberPadding; // the right-side padding of the number margin
int ctrlCharPadding; // the padding around control character text blobs
int lastSegItalicsOffset; // the offset so as not to clip italic characters at EOLs
Document *pdoc;

View File

@ -788,7 +788,7 @@ int RESearch::Execute(CharacterIndexer &ci, int lp, int endp) {
}
case CHR: /* ordinary char: locate it fast */
c = *(ap+1);
while ((lp < endp) && (ci.CharAt(lp) != c))
while ((lp < endp) && (static_cast<unsigned char>(ci.CharAt(lp)) != c))
lp++;
if (lp >= endp) /* if EOS, fail, else fall thru. */
return 0;

View File

@ -205,6 +205,7 @@ void RunStyles::DeleteRange(int position, int deleteLength) {
if (runStart == runEnd) {
// Deleting from inside one run
starts->InsertText(runStart, -deleteLength);
RemoveRunIfEmpty(runStart);
} else {
runStart = SplitRun(position);
runEnd = SplitRun(end);

View File

@ -1 +1 @@
322
323

View File

@ -1,7 +1,7 @@
## Process this file with automake to produce Makefile.in
EXTRA_DIST = images.c gb.c win32.c win32.h plugindata.h \
EXTRA_DIST = gb.c win32.c win32.h plugindata.h \
documentprivate.h filetypesprivate.h pluginprivate.h projectprivate.h \
makefile.win32

View File

@ -145,7 +145,6 @@ static GtkWidget *create_dialog(void)
GtkWidget *info_box;
GtkWidget *header_hbox;
GtkWidget *header_eventbox;
GdkPixbuf *icon;
GtkTextBuffer* tb;
gchar *license_text = NULL;
gchar buffer[512];
@ -158,6 +157,7 @@ static GtkWidget *create_dialog(void)
gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(main_widgets.window));
gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER_ON_PARENT);
gtk_window_set_title(GTK_WINDOW(dialog), _("About Geany"));
gtk_window_set_icon_name(GTK_WINDOW(dialog), "geany");
gtk_widget_set_name(dialog, "GeanyDialog");
gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CLOSE);
@ -171,7 +171,7 @@ static GtkWidget *create_dialog(void)
gtk_container_set_border_width(GTK_CONTAINER(header_hbox), 4);
gtk_widget_show(header_hbox);
gtk_container_add(GTK_CONTAINER(header_eventbox), header_hbox);
header_image = gtk_image_new();
header_image = gtk_image_new_from_icon_name("geany", GTK_ICON_SIZE_DIALOG);
gtk_box_pack_start(GTK_BOX(header_hbox), header_image, FALSE, FALSE, 0);
header_label = gtk_label_new(NULL);
gtk_label_set_use_markup(GTK_LABEL(header_label), TRUE);
@ -186,12 +186,6 @@ static GtkWidget *create_dialog(void)
g_signal_connect_after(header_label, "style-set", G_CALLBACK(header_label_style_set), NULL);
gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), header_eventbox, FALSE, FALSE, 0);
/* set image */
icon = ui_new_pixbuf_from_inline(GEANY_IMAGE_LOGO);
gtk_image_set_from_pixbuf(GTK_IMAGE(header_image), icon);
gtk_window_set_icon(GTK_WINDOW(dialog), icon);
g_object_unref(icon); /* free our reference */
/* create notebook */
notebook = gtk_notebook_new();
gtk_widget_show(notebook);

View File

@ -499,7 +499,7 @@ static GeanyBuildCommand *get_build_group(const GeanyBuildSource src, const Gean
* If any parameter is out of range does nothing.
*
* Updates the menu.
*
*
**/
void build_remove_menu_item(const GeanyBuildSource src, const GeanyBuildGroup grp, const gint cmd)
{
@ -561,12 +561,12 @@ GeanyBuildCommand *build_get_menu_item(GeanyBuildSource src, GeanyBuildGroup grp
* This is a pointer to an internal structure and must not be freed.
*
**/
const gchar *build_get_current_menu_item(const GeanyBuildGroup grp, const guint cmd,
const gchar *build_get_current_menu_item(const GeanyBuildGroup grp, const guint cmd,
const GeanyBuildCmdEntries fld)
{
GeanyBuildCommand *c;
gchar *str = NULL;
g_return_val_if_fail(grp < GEANY_GBG_COUNT, NULL);
g_return_val_if_fail(fld < GEANY_BC_CMDENTRIES_COUNT, NULL);
g_return_val_if_fail(cmd < build_groups_count[grp], NULL);
@ -594,19 +594,19 @@ const gchar *build_get_current_menu_item(const GeanyBuildGroup grp, const guint
*
* Set the specified field of the command specified by @a src, @a grp and @a cmd.
*
* @param src the source of the menu item
* @param src the source of the menu item
* @param grp the group of the specified menu item.
* @param cmd the index of the menu item within the group.
* @param fld the field in the menu item command to set
* @param val the value to set the field to, is copied
*
**/
void build_set_menu_item(const GeanyBuildSource src, const GeanyBuildGroup grp,
void build_set_menu_item(const GeanyBuildSource src, const GeanyBuildGroup grp,
const guint cmd, const GeanyBuildCmdEntries fld, const gchar *val)
{
GeanyBuildCommand **g;
g_return_if_fail(src < GEANY_BCS_COUNT);
g_return_if_fail(grp < GEANY_GBG_COUNT);
g_return_if_fail(fld < GEANY_BC_CMDENTRIES_COUNT);
@ -828,7 +828,7 @@ static GPid build_spawn_cmd(GeanyDocument *doc, const gchar *cmd, const gchar *d
&(build_info.pid), NULL, &stdout_fd, &stderr_fd, &error))
#endif
{
geany_debug("g_spawn_async_with_pipes() failed: %s", error->message);
geany_debug("build command spawning failed: %s", error->message);
ui_set_statusbar(TRUE, _("Process failed (%s)"), error->message);
g_strfreev(argv);
g_error_free(error);

View File

@ -174,7 +174,7 @@ G_MODULE_EXPORT void on_save1_activate(GtkMenuItem *menuitem, gpointer user_data
if (doc != NULL && cur_page >= 0)
{
document_save_file(doc, FALSE);
document_save_file(doc, ui_prefs.allow_always_save);
}
}
@ -2087,9 +2087,15 @@ G_MODULE_EXPORT void on_reflow_lines_block1_activate(GtkMenuItem *menuitem, gpoi
}
G_MODULE_EXPORT void on_transpose_current_line1_activate(GtkMenuItem *menuitem, gpointer user_data)
G_MODULE_EXPORT void on_move_lines_up1_activate(GtkMenuItem *menuitem, gpointer user_data)
{
keybindings_send_command(GEANY_KEY_GROUP_EDITOR, GEANY_KEYS_EDITOR_TRANSPOSELINE);
keybindings_send_command(GEANY_KEY_GROUP_EDITOR, GEANY_KEYS_EDITOR_MOVELINEUP);
}
G_MODULE_EXPORT void on_move_lines_down1_activate(GtkMenuItem *menuitem, gpointer user_data)
{
keybindings_send_command(GEANY_KEY_GROUP_EDITOR, GEANY_KEYS_EDITOR_MOVELINEDOWN);
}

View File

@ -642,10 +642,6 @@ G_MODULE_EXPORT void
on_reflow_lines_block1_activate (GtkMenuItem *menuitem,
gpointer user_data);
G_MODULE_EXPORT void
on_transpose_current_line1_activate (GtkMenuItem *menuitem,
gpointer user_data);
G_MODULE_EXPORT void
on_smart_line_indent1_activate (GtkMenuItem *menuitem,
gpointer user_data);

View File

@ -75,10 +75,6 @@ static struct FileSelState
gboolean show_hidden;
gboolean more_options_visible;
} open;
struct
{
gboolean open_in_new_tab;
} save;
}
filesel_state = {
{
@ -87,9 +83,6 @@ filesel_state = {
0,
FALSE,
FALSE
},
{
FALSE
}
};
@ -488,40 +481,26 @@ void dialogs_show_open_file(void)
}
static void on_save_as_new_tab_toggled(GtkToggleButton *togglebutton, gpointer user_data)
{
gtk_widget_set_sensitive(GTK_WIDGET(user_data), ! gtk_toggle_button_get_active(togglebutton));
}
static gboolean handle_save_as(const gchar *utf8_filename, gboolean open_new_tab, gboolean rename_file)
static gboolean handle_save_as(const gchar *utf8_filename, gboolean rename_file)
{
GeanyDocument *doc = document_get_current();
gboolean success = FALSE;
g_return_val_if_fail(NZV(utf8_filename), FALSE);
if (open_new_tab)
{ /* "open" the saved file in a new tab and switch to it */
doc = document_clone(doc, utf8_filename);
success = document_save_file_as(doc, NULL);
}
else
if (doc->file_name != NULL)
{
if (doc->file_name != NULL)
if (rename_file)
{
if (rename_file)
{
document_rename_file(doc, utf8_filename);
}
/* create a new tm_source_file object otherwise tagmanager won't work correctly */
tm_workspace_remove_object(doc->tm_file, TRUE, TRUE);
doc->tm_file = NULL;
document_rename_file(doc, utf8_filename);
}
success = document_save_file_as(doc, utf8_filename);
build_menu_update(doc);
/* create a new tm_source_file object otherwise tagmanager won't work correctly */
tm_workspace_remove_object(doc->tm_file, TRUE, TRUE);
doc->tm_file = NULL;
}
success = document_save_file_as(doc, utf8_filename);
build_menu_update(doc);
return success;
}
@ -550,16 +529,10 @@ static gboolean save_as_dialog_handle_response(GtkWidget *dialog, gint response)
/* fall through */
case GTK_RESPONSE_ACCEPT:
{
gboolean open_new_tab = gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(ui_lookup_widget(dialog, "check_open_new_tab")));
gchar *utf8_filename;
utf8_filename = utils_get_utf8_from_locale(new_filename);
success = handle_save_as(utf8_filename, open_new_tab, rename_file);
if (success)
filesel_state.save.open_in_new_tab = open_new_tab;
success = handle_save_as(utf8_filename, rename_file);
g_free(utf8_filename);
break;
}
@ -574,9 +547,9 @@ static gboolean save_as_dialog_handle_response(GtkWidget *dialog, gint response)
}
static GtkWidget *create_save_file_dialog(void)
static GtkWidget *create_save_file_dialog(GeanyDocument *doc)
{
GtkWidget *dialog, *vbox, *check_open_new_tab, *rename_btn;
GtkWidget *dialog, *rename_btn;
const gchar *initdir;
dialog = gtk_file_chooser_dialog_new(_("Save File"), GTK_WINDOW(main_widgets.window),
@ -590,21 +563,14 @@ static GtkWidget *create_save_file_dialog(void)
rename_btn = gtk_dialog_add_button(GTK_DIALOG(dialog), _("R_ename"), GEANY_RESPONSE_RENAME);
gtk_widget_set_tooltip_text(rename_btn, _("Save the file and rename it"));
/* disable rename unless file exists on disk */
gtk_widget_set_sensitive(rename_btn, doc->real_path != NULL);
gtk_dialog_add_buttons(GTK_DIALOG(dialog),
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL);
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
vbox = gtk_vbox_new(FALSE, 0);
check_open_new_tab = gtk_check_button_new_with_mnemonic(_("_Open file in a new tab"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_open_new_tab), filesel_state.save.open_in_new_tab);
gtk_widget_set_tooltip_text(check_open_new_tab,
_("Keep the current unsaved document open"
" and open the newly saved file in a new tab"));
gtk_box_pack_start(GTK_BOX(vbox), check_open_new_tab, FALSE, FALSE, 0);
gtk_widget_show_all(vbox);
gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(dialog), vbox);
gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);
gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialog), FALSE);
@ -616,12 +582,6 @@ static GtkWidget *create_save_file_dialog(void)
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), linitdir);
g_free(linitdir);
}
g_signal_connect(check_open_new_tab, "toggled",
G_CALLBACK(on_save_as_new_tab_toggled), rename_btn);
ui_hookup_widget(dialog, check_open_new_tab, "check_open_new_tab");
return dialog;
}
@ -633,7 +593,7 @@ static gboolean show_save_as_gtk(GeanyDocument *doc)
g_return_val_if_fail(doc != NULL, FALSE);
dialog = create_save_file_dialog();
dialog = create_save_file_dialog(doc);
if (doc->file_name != NULL)
{
@ -707,7 +667,7 @@ gboolean dialogs_show_save_as()
gchar *utf8_name = win32_show_document_save_as_dialog(GTK_WINDOW(main_widgets.window),
_("Save File"), DOC_FILENAME(doc));
if (utf8_name != NULL)
result = handle_save_as(utf8_name, FALSE, FALSE);
result = handle_save_as(utf8_name, FALSE);
}
else
#endif
@ -736,12 +696,7 @@ static void show_msgbox_dialog(GtkWidget *dialog, GtkMessageType type, GtkWindow
break;
}
gtk_window_set_title(GTK_WINDOW(dialog), title);
if (parent == NULL || GTK_IS_DIALOG(parent))
{
GdkPixbuf *pb = ui_new_pixbuf_from_inline(GEANY_IMAGE_LOGO);
gtk_window_set_icon(GTK_WINDOW(dialog), pb);
g_object_unref(pb);
}
gtk_window_set_icon_name(GTK_WINDOW(dialog), "geany");
gtk_widget_set_name(dialog, "GeanyDialog");
gtk_dialog_run(GTK_DIALOG(dialog));
@ -1609,12 +1564,7 @@ static gint show_prompt(GtkWidget *parent,
GTK_BUTTONS_NONE, "%s", question_text);
gtk_widget_set_name(dialog, "GeanyDialog");
gtk_window_set_title(GTK_WINDOW(dialog), _("Question"));
if (parent == NULL || GTK_IS_DIALOG(parent))
{
GdkPixbuf *pb = ui_new_pixbuf_from_inline(GEANY_IMAGE_LOGO);
gtk_window_set_icon(GTK_WINDOW(dialog), pb);
g_object_unref(pb);
}
gtk_window_set_icon_name(GTK_WINDOW(dialog), "geany");
/* question_text will be in bold if optional extra_text used */
if (extra_text != NULL)

View File

@ -1701,7 +1701,7 @@ gboolean document_save_file(GeanyDocument *doc, gboolean force)
}
/* the "changed" flag should exclude the "readonly" flag, but check it anyway for safety */
if (! force && ! ui_prefs.allow_always_save && (! doc->changed || doc->readonly))
if (! force && (! doc->changed || doc->readonly))
return FALSE;
fp = project_get_file_prefs();
@ -2506,6 +2506,7 @@ void document_undo_clear(GeanyDocument *doc)
}
/* note: this is called on SCN_MODIFIED notifications */
void document_undo_add(GeanyDocument *doc, guint type, gpointer data)
{
undo_action *action;
@ -2518,7 +2519,10 @@ void document_undo_add(GeanyDocument *doc, guint type, gpointer data)
g_trash_stack_push(&doc->priv->undo_actions, action);
document_set_text_changed(doc, TRUE);
/* avoid unnecessary redraws */
if (type != UNDO_SCINTILLA || !doc->changed)
document_set_text_changed(doc, TRUE);
ui_update_popup_reundo_items(doc);
}
@ -2682,7 +2686,9 @@ static void document_redo_add(GeanyDocument *doc, guint type, gpointer data)
g_trash_stack_push(&doc->priv->redo_actions, action);
document_set_text_changed(doc, TRUE);
if (type != UNDO_SCINTILLA || !doc->changed)
document_set_text_changed(doc, TRUE);
ui_update_popup_reundo_items(doc);
}
@ -2737,29 +2743,45 @@ GeanyDocument *document_index(gint idx)
/* create a new file and copy file content and properties */
GeanyDocument *document_clone(GeanyDocument *old_doc, const gchar *utf8_filename)
G_MODULE_EXPORT void on_clone1_activate(GtkMenuItem *menuitem, gpointer user_data)
{
GeanyDocument *old_doc = document_get_current();
if (old_doc)
document_clone(old_doc);
}
GeanyDocument *document_clone(GeanyDocument *old_doc)
{
gint len;
gchar *text;
GeanyDocument *doc;
ScintillaObject *old_sci;
g_return_val_if_fail(old_doc != NULL, NULL);
g_return_val_if_fail(old_doc, NULL);
old_sci = old_doc->editor->sci;
if (sci_has_selection(old_sci))
text = sci_get_selection_contents(old_sci);
else
text = sci_get_contents(old_sci, -1);
len = sci_get_length(old_doc->editor->sci) + 1;
text = (gchar*) g_malloc(len);
sci_get_text(old_doc->editor->sci, len, text);
/* use old file type (or maybe NULL for auto detect would be better?) */
doc = document_new_file(utf8_filename, old_doc->file_type, text);
doc = document_new_file(NULL, old_doc->file_type, text);
g_free(text);
document_set_text_changed(doc, TRUE);
/* copy file properties */
doc->editor->line_wrapping = old_doc->editor->line_wrapping;
doc->editor->line_breaking = old_doc->editor->line_breaking;
doc->editor->auto_indent = old_doc->editor->auto_indent;
editor_set_indent(doc->editor, old_doc->editor->indent_type,
old_doc->editor->indent_width);
doc->readonly = old_doc->readonly;
doc->has_bom = old_doc->has_bom;
document_set_encoding(doc, old_doc->encoding);
sci_set_lines_wrapped(doc->editor->sci, doc->editor->line_wrapping);
sci_set_readonly(doc->editor->sci, doc->readonly);
/* update ui */
ui_document_show_hide(doc);
return doc;
}
@ -2832,9 +2854,10 @@ static void monitor_reload_file(GeanyDocument *doc)
gchar *base_name = g_path_get_basename(doc->file_name);
gint ret;
/* we use No instead of Cancel to avoid mnemonic clash */
ret = dialogs_show_prompt(NULL,
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_NO, GTK_RESPONSE_CANCEL,
_("_Reload"), GTK_RESPONSE_ACCEPT,
_("Do you want to reload it?"),
_("The file '%s' on the disk is more recent than\nthe current buffer."),

View File

@ -210,8 +210,6 @@ gboolean document_account_for_unsaved(void);
gboolean document_close_all(void);
GeanyDocument *document_clone(GeanyDocument *old_doc, const gchar *utf8_filename);
GeanyDocument *document_open_file_full(GeanyDocument *doc, const gchar *filename, gint pos,
gboolean readonly, GeanyFiletype *ft, const gchar *forced_enc);
@ -281,6 +279,8 @@ gint document_compare_by_tab_order_reverse(gconstpointer a, gconstpointer b);
void document_grab_focus(GeanyDocument *doc);
GeanyDocument *document_clone(GeanyDocument *old_doc);
G_END_DECLS
#endif

View File

@ -110,6 +110,7 @@ static const gchar *snippets_find_completion_by_name(const gchar *type, const gc
static void snippets_make_replacements(GeanyEditor *editor, GString *pattern);
static gssize replace_cursor_markers(GeanyEditor *editor, GString *pattern);
static GeanyFiletype *editor_get_filetype_at_current_pos(GeanyEditor *editor);
static gboolean sci_is_blank_line(ScintillaObject *sci, gint line);
void editor_snippets_free(void)
@ -600,7 +601,7 @@ static void check_line_breaking(GeanyEditor *editor, gint pos, gchar c)
/* last column - distance is the desired column, then retrieve its document position */
pos = SSM(sci, SCI_FINDCOLUMN, line, last_col - diff);
sci_set_current_position(sci, pos, FALSE);
sci_scroll_caret(sci);
return;
}
}
@ -697,8 +698,10 @@ static void request_reshowing_calltip(SCNotification *nt)
if (calltip.set)
{
/* delay the reshow of the calltip window to make sure it is actually displayed,
* without it might be not visible on SCN_AUTOCCANCEL */
g_idle_add(reshow_calltip, NULL);
* without it might be not visible on SCN_AUTOCCANCEL. the priority is set to
* low to hopefully make Scintilla's events happen before reshowing since they
* seem to re-cancel the calltip on autoc menu hiding too */
g_idle_add_full(G_PRIORITY_LOW, reshow_calltip, NULL, NULL);
}
}
@ -2819,47 +2822,68 @@ static void real_comment_multiline(GeanyEditor *editor, gint line_start, gint la
}
static void real_uncomment_multiline(GeanyEditor *editor)
/* find @p text inside the range of the current style */
static gint find_in_current_style(ScintillaObject *sci, const gchar *text, gboolean backwards)
{
gint start = sci_get_current_position(sci);
gint end = start;
gint len = sci_get_length(sci);
gint current_style = sci_get_style_at(sci, start);
struct Sci_TextToFind ttf;
while (start > 0 && sci_get_style_at(sci, start - 1) == current_style)
start -= 1;
while (end < len && sci_get_style_at(sci, end + 1) == current_style)
end += 1;
ttf.lpstrText = (gchar*) text;
ttf.chrg.cpMin = backwards ? end + 1 : start;
ttf.chrg.cpMax = backwards ? start : end + 1;
return sci_find_text(sci, 0, &ttf);
}
static void sci_delete_line(ScintillaObject *sci, gint line)
{
gint start = sci_get_position_from_line(sci, line);
gint len = sci_get_line_length(sci, line);
SSM(sci, SCI_DELETERANGE, start, len);
}
static gboolean real_uncomment_multiline(GeanyEditor *editor)
{
/* find the beginning of the multi line comment */
gint pos, line, len, x;
gchar *linebuf;
GeanyDocument *doc;
gint start, end, start_line, end_line;
GeanyFiletype *ft;
const gchar *co, *cc;
g_return_if_fail(editor != NULL && editor->document->file_type != NULL);
doc = editor->document;
g_return_val_if_fail(editor != NULL && editor->document->file_type != NULL, FALSE);
ft = editor_get_filetype_at_current_pos(editor);
if (! filetype_get_comment_open_close(ft, FALSE, &co, &cc))
g_return_if_reached();
g_return_val_if_reached(FALSE);
/* remove comment open chars */
pos = document_find_text(doc, co, NULL, 0, TRUE, FALSE, NULL);
SSM(editor->sci, SCI_DELETEBACK, 0, 0);
start = find_in_current_style(editor->sci, co, TRUE);
end = find_in_current_style(editor->sci, cc, FALSE);
/* check whether the line is empty and can be deleted */
line = sci_get_line_from_position(editor->sci, pos);
len = sci_get_line_length(editor->sci, line);
linebuf = sci_get_line(editor->sci, line);
x = 0;
while (linebuf[x] != '\0' && isspace(linebuf[x])) x++;
if (x == len) SSM(editor->sci, SCI_LINEDELETE, 0, 0);
g_free(linebuf);
if (start < 0 || end < 0 || start > end /* who knows */)
return FALSE;
start_line = sci_get_line_from_position(editor->sci, start);
end_line = sci_get_line_from_position(editor->sci, end);
/* remove comment close chars */
pos = document_find_text(doc, cc, NULL, 0, FALSE, FALSE, NULL);
SSM(editor->sci, SCI_DELETEBACK, 0, 0);
SSM(editor->sci, SCI_DELETERANGE, end, strlen(cc));
if (sci_is_blank_line(editor->sci, end_line))
sci_delete_line(editor->sci, end_line);
/* check whether the line is empty and can be deleted */
line = sci_get_line_from_position(editor->sci, pos);
len = sci_get_line_length(editor->sci, line);
linebuf = sci_get_line(editor->sci, line);
x = 0;
while (linebuf[x] != '\0' && isspace(linebuf[x])) x++;
if (x == len) SSM(editor->sci, SCI_LINEDELETE, 0, 0);
g_free(linebuf);
/* remove comment open chars (do it last since it would move the end position) */
SSM(editor->sci, SCI_DELETERANGE, start, strlen(co));
if (sci_is_blank_line(editor->sci, start_line))
sci_delete_line(editor->sci, start_line);
return TRUE;
}
@ -2992,8 +3016,8 @@ gint editor_do_uncomment(GeanyEditor *editor, gint line, gboolean toggle)
style_comment = get_multiline_comment_style(editor, line_start);
if (sci_get_style_at(editor->sci, line_start + x) == style_comment)
{
real_uncomment_multiline(editor);
count = 1;
if (real_uncomment_multiline(editor))
count = 1;
}
/* break because we are already on the last line */
@ -3115,8 +3139,8 @@ void editor_do_comment_toggle(GeanyEditor *editor)
style_comment = get_multiline_comment_style(editor, line_start);
if (sci_get_style_at(editor->sci, line_start + x) == style_comment)
{
real_uncomment_multiline(editor);
count_uncommented++;
if (real_uncomment_multiline(editor))
count_uncommented++;
}
else
{
@ -3134,46 +3158,40 @@ void editor_do_comment_toggle(GeanyEditor *editor)
co_len += tm_len;
/* restore selection if there is one */
if (sel_start < sel_end)
/* restore selection or caret position */
if (single_line)
{
if (single_line)
gint a = (first_line_was_comment) ? - co_len : co_len;
/* don't modify sel_start when the selection starts within indentation */
read_indent(editor, sel_start);
if ((sel_start - first_line_start) <= (gint) strlen(indent))
a = 0;
if (sel_start < sel_end)
{
gint a = (first_line_was_comment) ? - co_len : co_len;
/* don't modify sel_start when the selection starts within indentation */
read_indent(editor, sel_start);
if ((sel_start - first_line_start) <= (gint) strlen(indent))
a = 0;
sci_set_selection_start(editor->sci, sel_start + a);
sci_set_selection_end(editor->sci, sel_end +
(count_commented * co_len) - (count_uncommented * co_len));
}
else
sci_set_current_position(editor->sci, sel_start + a, TRUE);
}
else
{
gint eol_len = editor_get_eol_char_len(editor);
if (count_uncommented > 0)
{
gint eol_len = editor_get_eol_char_len(editor);
if (count_uncommented > 0)
{
sci_set_selection_start(editor->sci, sel_start - co_len + eol_len);
sci_set_selection_end(editor->sci, sel_end - co_len + eol_len);
}
else if (count_commented > 0)
{
sci_set_selection_start(editor->sci, sel_start + co_len - eol_len);
sci_set_selection_end(editor->sci, sel_end + co_len - eol_len);
}
sci_set_selection_start(editor->sci, sel_start - co_len + eol_len);
sci_set_selection_end(editor->sci, sel_end - co_len + eol_len);
}
}
else if (count_uncommented > 0)
{
gint eol_len = single_line ? 0: editor_get_eol_char_len(editor);
sci_set_current_position(editor->sci, sel_start - co_len + eol_len, TRUE);
}
else if (count_commented > 0)
{
gint eol_len = single_line ? 0: editor_get_eol_char_len(editor);
sci_set_current_position(editor->sci, sel_start + co_len - eol_len, TRUE);
else if (count_commented > 0)
{
sci_set_selection_start(editor->sci, sel_start + co_len - eol_len);
sci_set_selection_end(editor->sci, sel_end + co_len - eol_len);
}
if (sel_start >= sel_end)
sci_scroll_caret(editor->sci);
}
}
@ -4372,6 +4390,10 @@ void editor_strip_line_trailing_spaces(GeanyEditor *editor, gint line)
gint i = line_end - 1;
gchar ch = sci_get_char_at(editor->sci, i);
/* Diff hunks should keep trailing spaces */
if (sci_get_lexer(editor->sci) == SCLEX_DIFF)
return;
while ((i >= line_start) && ((ch == ' ') || (ch == '\t')))
{
i--;
@ -4669,8 +4691,46 @@ static void setup_sci_keys(ScintillaObject *sci)
}
#include "icons/16x16/classviewer-var.xpm"
#include "icons/16x16/classviewer-method.xpm"
/* registers a Scintilla image from a named icon from the theme */
static gboolean register_named_icon(ScintillaObject *sci, guint id, const gchar *name)
{
GError *error = NULL;
GdkPixbuf *pixbuf;
gint n_channels, rowstride, width, height;
gint size;
gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &size, NULL);
pixbuf = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), name, size, 0, &error);
if (! pixbuf)
{
g_warning("failed to load icon '%s': %s", name, error->message);
g_error_free(error);
return FALSE;
}
n_channels = gdk_pixbuf_get_n_channels(pixbuf);
rowstride = gdk_pixbuf_get_rowstride(pixbuf);
width = gdk_pixbuf_get_width(pixbuf);
height = gdk_pixbuf_get_height(pixbuf);
if (gdk_pixbuf_get_bits_per_sample(pixbuf) != 8 ||
! gdk_pixbuf_get_has_alpha(pixbuf) ||
n_channels != 4 ||
rowstride != width * n_channels)
{
g_warning("incompatible image data for icon '%s'", name);
g_object_unref(pixbuf);
return FALSE;
}
SSM(sci, SCI_RGBAIMAGESETWIDTH, width, 0);
SSM(sci, SCI_RGBAIMAGESETHEIGHT, height, 0);
SSM(sci, SCI_REGISTERRGBAIMAGE, id, (sptr_t)gdk_pixbuf_get_pixels(pixbuf));
g_object_unref(pixbuf);
return TRUE;
}
/* Create new editor widget (scintilla).
* @note The @c "sci-notify" signal is connected separately. */
@ -4702,8 +4762,8 @@ static ScintillaObject *create_new_sci(GeanyEditor *editor)
SSM(sci, SCI_SETSCROLLWIDTHTRACKING, 1, 0);
/* tag autocompletion images */
SSM(sci, SCI_REGISTERIMAGE, 1, (sptr_t)classviewer_var);
SSM(sci, SCI_REGISTERIMAGE, 2, (sptr_t)classviewer_method);
register_named_icon(sci, 1, "classviewer-var");
register_named_icon(sci, 2, "classviewer-method");
/* necessary for column mode editing, implemented in Scintilla since 2.0 */
SSM(sci, SCI_SETADDITIONALSELECTIONTYPING, 1, 0);

View File

@ -496,6 +496,14 @@ static void init_builtin_filetypes(void)
ft->name = g_strdup("Forth");
filetype_make_title(ft, TITLE_SOURCE_FILE);
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
#define ASCIIDOC
ft = filetypes[GEANY_FILETYPES_ASCIIDOC];
ft->lang = 43;
ft->name = g_strdup("Asciidoc");
filetype_make_title(ft, TITLE_SOURCE_FILE);
ft->group = GEANY_FILETYPE_GROUP_MARKUP;
}

View File

@ -90,6 +90,7 @@ typedef enum
GEANY_FILETYPES_ERLANG,
GEANY_FILETYPES_COBOL,
GEANY_FILETYPES_OBJECTIVEC,
GEANY_FILETYPES_ASCIIDOC,
/* ^ append items here */
GEANY_MAX_BUILT_IN_FILETYPES /* Don't use this, use filetypes_array->len instead */
}

View File

@ -1469,6 +1469,14 @@ gboolean highlighting_is_string_style(gint lexer, gint style)
style == SCE_PL_XLAT
/* we don't include any STRING_*_VAR for autocompletion */);
case SCLEX_PO:
return (style == SCE_PO_MSGCTXT_TEXT ||
style == SCE_PO_MSGCTXT_TEXT_EOL ||
style == SCE_PO_MSGID_TEXT ||
style == SCE_PO_MSGID_TEXT_EOL ||
style == SCE_PO_MSGSTR_TEXT ||
style == SCE_PO_MSGSTR_TEXT_EOL);
case SCLEX_R:
return (style == SCE_R_STRING);
@ -1610,7 +1618,8 @@ gboolean highlighting_is_comment_style(gint lexer, gint style)
return (style == SCE_PROPS_COMMENT);
case SCLEX_PO:
return (style == SCE_PO_COMMENT);
return (style == SCE_PO_COMMENT ||
style == SCE_PO_PROGRAMMER_COMMENT);
case SCLEX_LATEX:
return (style == SCE_L_COMMENT ||

View File

@ -185,6 +185,7 @@ static const HLStyle highlighting_styles_C[] =
{ SCE_C_WORD, "word", FALSE },
{ SCE_C_WORD2, "word2", FALSE },
{ SCE_C_STRING, "string", FALSE },
{ SCE_C_STRINGRAW, "stringraw", FALSE },
{ SCE_C_CHARACTER, "character", FALSE },
{ SCE_C_UUID, "uuid", FALSE },
{ SCE_C_PREPROCESSOR, "preprocessor", FALSE },
@ -1079,15 +1080,22 @@ static const HLKeyword highlighting_keywords_PERL[] =
#define highlighting_lexer_PO SCLEX_PO
static const HLStyle highlighting_styles_PO[] =
{
{ SCE_PO_DEFAULT, "default", FALSE },
{ SCE_PO_COMMENT, "comment", FALSE },
{ SCE_PO_MSGID, "msgid", FALSE },
{ SCE_PO_MSGID_TEXT, "msgid_text", FALSE },
{ SCE_PO_MSGSTR, "msgstr", FALSE },
{ SCE_PO_MSGSTR_TEXT, "msgstr_text", FALSE },
{ SCE_PO_MSGCTXT, "msgctxt", FALSE },
{ SCE_PO_MSGCTXT_TEXT, "msgctxt_text", FALSE },
{ SCE_PO_FUZZY, "fuzzy", FALSE }
{ SCE_PO_DEFAULT, "default", FALSE },
{ SCE_PO_COMMENT, "comment", FALSE },
{ SCE_PO_PROGRAMMER_COMMENT, "programmer_comment", FALSE },
{ SCE_PO_REFERENCE, "reference", FALSE },
{ SCE_PO_FLAGS, "flags", FALSE },
{ SCE_PO_FUZZY, "fuzzy", FALSE },
{ SCE_PO_MSGID, "msgid", FALSE },
{ SCE_PO_MSGID_TEXT, "msgid_text", FALSE },
{ SCE_PO_MSGID_TEXT_EOL, "msgid_text_eol", FALSE },
{ SCE_PO_MSGSTR, "msgstr", FALSE },
{ SCE_PO_MSGSTR_TEXT, "msgstr_text", FALSE },
{ SCE_PO_MSGSTR_TEXT_EOL, "msgstr_text_eol", FALSE },
{ SCE_PO_MSGCTXT, "msgctxt", FALSE },
{ SCE_PO_MSGCTXT_TEXT, "msgctxt_text", FALSE },
{ SCE_PO_MSGCTXT_TEXT_EOL, "msgctxt_text_eol", FALSE },
{ SCE_PO_ERROR, "error", FALSE }
};
#define highlighting_keywords_PO EMPTY_KEYWORDS
#define highlighting_properties_PO EMPTY_PROPERTIES

File diff suppressed because it is too large Load Diff

View File

@ -301,10 +301,9 @@ static void init_default_kb(void)
add_kb(group, GEANY_KEYS_EDITOR_DELETELINETOEND, NULL,
GDK_Delete, GDK_SHIFT_MASK | GDK_CONTROL_MASK, "edit_deletelinetoend",
_("Delete to line end"), NULL);
/* transpose may fit better in format group */
/* Note: transpose may fit better in format group, but that would break the API */
add_kb(group, GEANY_KEYS_EDITOR_TRANSPOSELINE, NULL,
0, 0, "edit_transposeline", _("_Transpose Current Line"),
"transpose_current_line1");
0, 0, "edit_transposeline", _("_Transpose Current Line"), NULL);
add_kb(group, GEANY_KEYS_EDITOR_SCROLLTOLINE, NULL,
GDK_l, GDK_SHIFT_MASK | GDK_CONTROL_MASK, "edit_scrolltoline", _("Scroll to current line"), NULL);
add_kb(group, GEANY_KEYS_EDITOR_SCROLLLINEUP, NULL,
@ -328,9 +327,11 @@ static void init_default_kb(void)
add_kb(group, GEANY_KEYS_EDITOR_WORDPARTCOMPLETION, NULL,
GDK_Tab, 0, "edit_wordpartcompletion", _("Word part completion"), NULL);
add_kb(group, GEANY_KEYS_EDITOR_MOVELINEUP, NULL,
GDK_Page_Up, GDK_MOD1_MASK, "edit_movelineup", _("Move line(s) up"), NULL);
GDK_Page_Up, GDK_MOD1_MASK, "edit_movelineup",
_("Move line(s) up"), "move_lines_up1");
add_kb(group, GEANY_KEYS_EDITOR_MOVELINEDOWN, NULL,
GDK_Page_Down, GDK_MOD1_MASK, "edit_movelinedown", _("Move line(s) down"), NULL);
GDK_Page_Down, GDK_MOD1_MASK, "edit_movelinedown",
_("Move line(s) down"), "move_lines_down1");
group = keybindings_get_core_group(GEANY_KEY_GROUP_CLIPBOARD);
@ -561,6 +562,8 @@ static void init_default_kb(void)
0, 0, "menu_linewrap", _("Toggle Line wrapping"), "menu_line_wrapping1");
add_kb(group, GEANY_KEYS_DOCUMENT_LINEBREAK, NULL,
0, 0, "menu_linebreak", _("Toggle Line breaking"), "line_breaking1");
add_kb(group, GEANY_KEYS_DOCUMENT_CLONE, NULL,
0, 0, "menu_clone", _("_Clone"), "clone1");
add_kb(group, GEANY_KEYS_DOCUMENT_REPLACETABS, NULL,
0, 0, "menu_replacetabs", _("Replace tabs by space"), "menu_replace_tabs");
add_kb(group, GEANY_KEYS_DOCUMENT_REPLACESPACES, NULL,
@ -1426,14 +1429,20 @@ static gboolean cb_func_search_action(guint key_id)
case GEANY_KEYS_SEARCH_MARKALL:
{
gchar *text = get_current_word_or_sel(doc, TRUE);
gint pos = sci_get_current_position(sci);
/* clear existing search indicators instead if next to cursor */
if (scintilla_send_message(sci, SCI_INDICATORVALUEAT,
GEANY_INDICATOR_SEARCH, pos) ||
scintilla_send_message(sci, SCI_INDICATORVALUEAT,
GEANY_INDICATOR_SEARCH, MAX(pos - 1, 0)))
text = NULL;
if (sci_has_selection(sci))
search_mark_all(doc, text, SCFIND_MATCHCASE);
else
{
/* clears markers if text is null */
search_mark_all(doc, text, SCFIND_MATCHCASE | SCFIND_WHOLEWORD);
}
g_free(text);
break;
}
@ -2354,6 +2363,9 @@ static gboolean cb_func_document_action(guint key_id)
on_line_wrapping1_toggled(NULL, NULL);
ui_document_show_hide(doc);
break;
case GEANY_KEYS_DOCUMENT_CLONE:
document_clone(doc);
break;
case GEANY_KEYS_DOCUMENT_RELOADTAGLIST:
document_update_tags(doc);
break;

View File

@ -246,6 +246,7 @@ enum GeanyKeyBindingID
GEANY_KEYS_PROJECT_CLOSE, /**< Keybinding. */
GEANY_KEYS_FORMAT_JOINLINES, /**< Keybinding. */
GEANY_KEYS_GOTO_LINESTARTVISUAL, /**< Keybinding. */
GEANY_KEYS_DOCUMENT_CLONE, /**< Keybinding. */
GEANY_KEYS_COUNT /* must not be used by plugins */
};

View File

@ -515,6 +515,7 @@ static void save_dialog_prefs(GKeyFile *config)
g_key_file_set_boolean(config, "VTE", "cursor_blinks", vc->cursor_blinks);
g_key_file_set_integer(config, "VTE", "scrollback_lines", vc->scrollback_lines);
g_key_file_set_string(config, "VTE", "font", vc->font);
g_key_file_set_string(config, "VTE", "image", vc->image);
g_key_file_set_string(config, "VTE", "shell", vc->shell);
tmp_string = utils_get_hex_from_color(vc->colour_fore);
g_key_file_set_string(config, "VTE", "colour_fore", tmp_string);
@ -839,6 +840,7 @@ static void load_dialog_prefs(GKeyFile *config)
vc->emulation = utils_get_setting_string(config, "VTE", "emulation", "xterm");
vc->send_selection_unsafe = utils_get_setting_boolean(config, "VTE",
"send_selection_unsafe", FALSE);
vc->image = utils_get_setting_string(config, "VTE", "image", "");
vc->shell = utils_get_setting_string(config, "VTE", "shell", shell);
vc->font = utils_get_setting_string(config, "VTE", "font", "Monospace 10");
vc->scroll_on_key = utils_get_setting_boolean(config, "VTE", "scroll_on_key", TRUE);

View File

@ -227,7 +227,18 @@ static void apply_settings(void)
static void main_init(void)
{
/* add our icon path in case we aren't installed in the system prefix */
#ifndef G_OS_WIN32
gchar *path = g_build_filename(GEANY_DATADIR, "icons", NULL);
gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(), path);
g_free(path);
#else
gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(), "share\\icons");
#endif
/* inits */
ui_init_stock_items();
ui_init_builder();
main_widgets.window = NULL;
@ -245,8 +256,6 @@ static void main_init(void)
ui_prefs.recent_projects_queue = g_queue_new();
main_status.opening_session_files = FALSE;
ui_init_stock_items();
main_widgets.window = create_window1();
/* add recent projects to the Project menu */
@ -1057,13 +1066,6 @@ gint main(gint argc, gchar **argv)
symbols_init();
editor_snippets_init();
/* set window icon */
{
GdkPixbuf *pb = ui_new_pixbuf_from_inline(GEANY_IMAGE_LOGO);
gtk_window_set_icon(GTK_WINDOW(main_widgets.window), pb);
g_object_unref(pb); /* free our reference */
}
/* registering some basic events */
g_signal_connect(main_widgets.window, "delete-event", G_CALLBACK(on_exit_clicked), NULL);
g_signal_connect(main_widgets.window, "window-state-event", G_CALLBACK(on_window_state_event), NULL);

View File

@ -744,6 +744,9 @@ static void prefs_init_dialog(void)
widget = ui_lookup_widget(ui_widgets.prefs_dialog, "color_back");
gtk_color_button_set_color(GTK_COLOR_BUTTON(widget), vc->colour_back);
widget = ui_lookup_widget(ui_widgets.prefs_dialog, "entry_image");
gtk_entry_set_text(GTK_ENTRY(widget), vc->image);
widget = ui_lookup_widget(ui_widgets.prefs_dialog, "spin_scrollback");
gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), vc->scrollback_lines);
@ -1208,6 +1211,10 @@ on_prefs_dialog_response(GtkDialog *dialog, gint response, gpointer user_data)
gtk_spin_button_update(GTK_SPIN_BUTTON(widget));
vc->scrollback_lines = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
widget = ui_lookup_widget(ui_widgets.prefs_dialog, "entry_image");
g_free(vc->image);
vc->image = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
widget = ui_lookup_widget(ui_widgets.prefs_dialog, "entry_shell");
g_free(vc->shell);
vc->shell = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
@ -1635,14 +1642,10 @@ void prefs_show_dialog(void)
GtkWidget *label;
guint i;
gchar *encoding_string;
GdkPixbuf *pb;
ui_widgets.prefs_dialog = create_prefs_dialog();
gtk_widget_set_name(ui_widgets.prefs_dialog, "GeanyPrefsDialog");
gtk_window_set_transient_for(GTK_WINDOW(ui_widgets.prefs_dialog), GTK_WINDOW(main_widgets.window));
pb = ui_new_pixbuf_from_inline(GEANY_IMAGE_LOGO);
gtk_window_set_icon(GTK_WINDOW(ui_widgets.prefs_dialog), pb);
g_object_unref(pb); /* free our reference */
/* init the file encoding combo boxes */
encoding_list = ui_builder_get_object("encoding_list");

View File

@ -59,6 +59,7 @@ typedef struct
* takes more than a second) */
time_t print_time;
PangoLayout *layout; /* commonly used layout object */
gdouble sci_scale;
struct Sci_RangeToFormat fr;
GArray *pages;
@ -308,23 +309,21 @@ static void setup_range(DocInfo *dinfo, GtkPrintContext *ctx)
dinfo->fr.rc.top = dinfo->fr.rcPage.top;
dinfo->fr.rc.right = dinfo->fr.rcPage.right;
dinfo->fr.rc.bottom = dinfo->fr.rcPage.bottom;
#if GTK_CHECK_VERSION(2, 20, 0)
{
gdouble m_top, m_left, m_right, m_bottom;
if (gtk_print_context_get_hard_margins(ctx, &m_top, &m_bottom, &m_left, &m_right))
{
dinfo->fr.rc.left += m_left;
dinfo->fr.rc.top += m_top;
dinfo->fr.rc.right -= m_right;
dinfo->fr.rc.bottom -= m_bottom;
}
}
#endif
if (printing_prefs.print_page_header)
dinfo->fr.rc.top += dinfo->line_height * 3; /* header height */
if (printing_prefs.print_page_numbers)
dinfo->fr.rc.bottom -= dinfo->line_height * 1; /* footer height */
dinfo->fr.rcPage.left /= dinfo->sci_scale;
dinfo->fr.rcPage.top /= dinfo->sci_scale;
dinfo->fr.rcPage.right /= dinfo->sci_scale;
dinfo->fr.rcPage.bottom /= dinfo->sci_scale;
dinfo->fr.rc.left /= dinfo->sci_scale;
dinfo->fr.rc.top /= dinfo->sci_scale;
dinfo->fr.rc.right /= dinfo->sci_scale;
dinfo->fr.rc.bottom /= dinfo->sci_scale;
dinfo->fr.chrg.cpMin = 0;
dinfo->fr.chrg.cpMax = sci_get_length(dinfo->sci);
}
@ -333,6 +332,7 @@ static void setup_range(DocInfo *dinfo, GtkPrintContext *ctx)
static void begin_print(GtkPrintOperation *operation, GtkPrintContext *context, gpointer user_data)
{
DocInfo *dinfo = user_data;
PangoContext *pango_ctx, *widget_pango_ctx;
PangoFontDescription *desc;
if (dinfo == NULL)
@ -351,9 +351,17 @@ static void begin_print(GtkPrintOperation *operation, GtkPrintContext *context,
scintilla_send_message(dinfo->sci, SCI_SETVIEWWS, SCWS_INVISIBLE, 0);
scintilla_send_message(dinfo->sci, SCI_SETVIEWEOL, FALSE, 0);
scintilla_send_message(dinfo->sci, SCI_SETEDGEMODE, EDGE_NONE, 0);
scintilla_send_message(dinfo->sci, SCI_SETPRINTMAGNIFICATION, (uptr_t) -2, 0); /* WTF? */
scintilla_send_message(dinfo->sci, SCI_SETPRINTCOLOURMODE, SC_PRINT_COLOURONWHITE, 0);
/* Scintilla doesn't respect the context resolution, so we'll scale ourselves.
* Actually Scintilla simply doesn't know about the resolution since it creates its own
* Pango context out of the Cairo target, and the resolution is in the GtkPrintOperation's
* Pango context */
pango_ctx = gtk_print_context_create_pango_context(context);
widget_pango_ctx = gtk_widget_get_pango_context(GTK_WIDGET(dinfo->sci));
dinfo->sci_scale = pango_cairo_context_get_resolution(pango_ctx) / pango_cairo_context_get_resolution(widget_pango_ctx);
g_object_unref(pango_ctx);
dinfo->pages = g_array_new(FALSE, FALSE, sizeof(gint));
dinfo->print_time = time(NULL);
@ -370,6 +378,19 @@ static void begin_print(GtkPrintOperation *operation, GtkPrintContext *context,
}
static gint format_range(DocInfo *dinfo, gboolean draw)
{
gint pos;
cairo_save(dinfo->fr.hdc);
cairo_scale(dinfo->fr.hdc, dinfo->sci_scale, dinfo->sci_scale);
pos = (gint) scintilla_send_message(dinfo->sci, SCI_FORMATRANGE, draw, (sptr_t) &dinfo->fr);
cairo_restore(dinfo->fr.hdc);
return pos;
}
static gboolean paginate(GtkPrintOperation *operation, GtkPrintContext *context, gpointer user_data)
{
DocInfo *dinfo = user_data;
@ -383,7 +404,7 @@ static gboolean paginate(GtkPrintOperation *operation, GtkPrintContext *context,
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(main_widgets.progressbar), _("Paginating"));
g_array_append_val(dinfo->pages, dinfo->fr.chrg.cpMin);
dinfo->fr.chrg.cpMin = (gint) scintilla_send_message(dinfo->sci, SCI_FORMATRANGE, FALSE, (sptr_t) &dinfo->fr);
dinfo->fr.chrg.cpMin = format_range(dinfo, FALSE);
gtk_print_operation_set_n_pages(operation, dinfo->pages->len);
@ -399,7 +420,7 @@ static void draw_page(GtkPrintOperation *operation, GtkPrintContext *context,
gdouble width, height;
g_return_if_fail(dinfo != NULL);
g_return_if_fail(page_nr < dinfo->pages->len);
g_return_if_fail((guint)page_nr < dinfo->pages->len);
if (dinfo->pages->len > 0)
{
@ -418,30 +439,29 @@ static void draw_page(GtkPrintOperation *operation, GtkPrintContext *context,
add_page_header(dinfo, cr, width, page_nr);
dinfo->fr.chrg.cpMin = g_array_index(dinfo->pages, gint, page_nr);
if (page_nr + 1 < dinfo->pages->len)
if ((guint)page_nr + 1 < dinfo->pages->len)
dinfo->fr.chrg.cpMax = g_array_index(dinfo->pages, gint, page_nr + 1) - 1;
else /* it's the last page, print 'til the end */
dinfo->fr.chrg.cpMax = sci_get_length(dinfo->sci);
scintilla_send_message(dinfo->sci, SCI_FORMATRANGE, TRUE, (sptr_t) &dinfo->fr);
format_range(dinfo, TRUE);
/* reset color */
cairo_set_source_rgb(cr, 0, 0, 0);
if (printing_prefs.print_line_numbers)
{ /* print a thin line between the line number margin and the data */
gint y1 = 0, y2 = height;
gdouble y1 = dinfo->fr.rc.top * dinfo->sci_scale;
gdouble y2 = dinfo->fr.rc.bottom * dinfo->sci_scale;
gdouble x = dinfo->fr.rc.left * dinfo->sci_scale + dinfo->margin_width;
if (printing_prefs.print_page_header)
y1 += (dinfo->line_height * 3) - 2; /* "- 2": to connect the line number line to
* the page header frame */
if (printing_prefs.print_page_numbers)
y2 -= (dinfo->line_height * 2) - 2;
y1 -= 2 - 0.3; /* to connect the line number line to the page header frame,
* 2 is the border, and 0.3 the line width */
cairo_set_line_width(cr, 0.3);
cairo_move_to(cr, dinfo->margin_width, y1);
cairo_line_to(cr, dinfo->margin_width, y2);
cairo_move_to(cr, x, y1);
cairo_line_to(cr, x, y2);
cairo_stroke(cr);
}
@ -472,7 +492,8 @@ static void printing_print_gtk(GeanyDocument *doc)
GtkPrintOperation *op;
GtkPrintOperationResult res = GTK_PRINT_OPERATION_RESULT_ERROR;
GError *error = NULL;
DocInfo dinfo = { 0 };
static const DocInfo dinfo0;
DocInfo dinfo = dinfo0;
PrintWidgets *widgets;
/** TODO check for monospace font, detect the widest character in the font and

Some files were not shown because too many files have changed in this diff Show More