summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexis Ballier <aballier@gentoo.org>2011-02-14 18:27:55 +0000
committerAlexis Ballier <aballier@gentoo.org>2011-02-14 18:27:55 +0000
commitd72226a622f0918d8a760af9aebac880374688dc (patch)
tree4d90508ffee526f585734adfa833bbb939ddee14 /app-editors
parentx86 stable wrt bug #354591 (diff)
downloadhistorical-d72226a622f0918d8a760af9aebac880374688dc.tar.gz
historical-d72226a622f0918d8a760af9aebac880374688dc.tar.bz2
historical-d72226a622f0918d8a760af9aebac880374688dc.zip
Convert to gtksourceview2 and remove bundled gtksourceviewmm1 bindings
Package-Manager: portage-2.2.0_alpha23/cvs/Linux x86_64
Diffstat (limited to 'app-editors')
-rw-r--r--app-editors/amyedit/ChangeLog10
-rw-r--r--app-editors/amyedit/Manifest12
-rw-r--r--app-editors/amyedit/amyedit-1.0-r2.ebuild38
-rw-r--r--app-editors/amyedit/files/amyedit-1.0-sourceviewmm2.patch331
4 files changed, 384 insertions, 7 deletions
diff --git a/app-editors/amyedit/ChangeLog b/app-editors/amyedit/ChangeLog
index 7ea6fa78fed9..1c4e0668a679 100644
--- a/app-editors/amyedit/ChangeLog
+++ b/app-editors/amyedit/ChangeLog
@@ -1,6 +1,12 @@
# ChangeLog for app-editors/amyedit
-# Copyright 1999-2010 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/app-editors/amyedit/ChangeLog,v 1.24 2010/06/12 10:47:26 aballier Exp $
+# Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2
+# $Header: /var/cvsroot/gentoo-x86/app-editors/amyedit/ChangeLog,v 1.25 2011/02/14 18:27:55 aballier Exp $
+
+*amyedit-1.0-r2 (14 Feb 2011)
+
+ 14 Feb 2011; Alexis Ballier <aballier@gentoo.org> +amyedit-1.0-r2.ebuild,
+ +files/amyedit-1.0-sourceviewmm2.patch:
+ Convert to gtksourceview2 and remove bundled gtksourceviewmm1 bindings
12 Jun 2010; Alexis Ballier <aballier@gentoo.org> amyedit-1.0-r1.ebuild,
+files/amyedit-1.0-gcc45.patch:
diff --git a/app-editors/amyedit/Manifest b/app-editors/amyedit/Manifest
index a16daa605a02..8c9ffe8014a1 100644
--- a/app-editors/amyedit/Manifest
+++ b/app-editors/amyedit/Manifest
@@ -4,14 +4,16 @@ Hash: SHA1
AUX amyedit-1.0-gcc45.patch 675 RMD160 c954e54e79b4a4e6575d0cf0935dab6bc073b28a SHA1 a38fc5c5b391dc5a54992fe0873e5c992b1fe93e SHA256 bc1cc1edd9004f9977035afdcf96c2dee9d3a2d5343d3c61af9de6ec9b9a4ca8
AUX amyedit-1.0-keyfile.patch 2123 RMD160 0b2a6411240e340b20ca487cdf751321732ede64 SHA1 93a443fc0935eb49f09464979bebc41b2eace74e SHA256 aef655d331cca213d85f6f939b70604511d7b891e33834390d250ed08b9c577a
AUX amyedit-1.0-signal.patch 3142 RMD160 0abe18918cf571d03ded7acb0399bfbe9af3f922 SHA1 5f8093eed36af7e3475b773147d5a93373c43542 SHA256 34123b5d142f9141f49cd05fa0c31cf631d6d83fe5ad1d343ecd356aedbd83a6
+AUX amyedit-1.0-sourceviewmm2.patch 12144 RMD160 6474fc74a228645059eb2cab1136e17f07336604 SHA1 f8635e271a7feb806c379bc73e5fd4108d75ee76 SHA256 9eaa72f825def4574c5a0639ed30fba86fcfd8b315f76e341964a01133ff047c
DIST amyedit-1.0.tar.bz2 297769 RMD160 b08ee643f2e6021e6ad7a3382c394106ea504298 SHA1 2ca1c7910b231e782596548622a51de96e1bd090 SHA256 9aa88340266827bd83715d495b7e1f2c1ca7100ff9f7586877c1b4d3ec67f228
EBUILD amyedit-1.0-r1.ebuild 861 RMD160 0caf0c17da13bb0f1196d091a8278af289507b36 SHA1 d41272611941461bbc8f44670161a9212d56da4b SHA256 a9893bca5e4eca4587f74cf84fd4c638b49017e08c068c270683463538a3dcbd
-MISC ChangeLog 3132 RMD160 96ae236f58480ffbff2fa9903c8bae460729fa21 SHA1 0f4dd4aa51eb4c75afe2eda78f741d64ad35b27b SHA256 a34c72debecc2d3b4bc82e96d50da9d83a30aa0e96bb05b5621b1d5041c49a0d
+EBUILD amyedit-1.0-r2.ebuild 992 RMD160 2b82ea799991a2bb2346070f48f7f2996ce9299a SHA1 e32936789317fe09b14b4a5bb7ad3a65d4138357 SHA256 ce791878dd95d12b8800940ac27b3da5603127fadca1b7b3ae30b6f3b5fa607d
+MISC ChangeLog 3355 RMD160 ab9b8ee051ccce735494cf57af4383dc835d81ac SHA1 8b4c72cb8281a6e16fcb83cf98ba2b44b2f9e0f2 SHA256 533d261e338873afb770a18feb111b8cd38d2a86690dfd9c1b5339c2d70e0db3
MISC metadata.xml 158 RMD160 bfa606b587a9accc212f1e81dbef51196e5a0744 SHA1 e2015772e89e37e6b9e1c4b66fc3c588437ef54a SHA256 13fb4255576ddeb318fb62817c06a115c1d7ea5c8b2f67db2c59a15fdb1cd95a
-----BEGIN PGP SIGNATURE-----
-Version: GnuPG v2.0.15 (GNU/Linux)
+Version: GnuPG v2.0.17 (GNU/Linux)
-iEYEARECAAYFAkwTZcMACgkQvFcC4BYPU0rfmQCdEGe/D9lB6yAWozphySqsbwyl
-dnkAn0sYCu0zW+dA/e45lGzzAqxKJ64d
-=SWnM
+iEYEARECAAYFAk1ZdDEACgkQvFcC4BYPU0qe/gCeMRXj9PZ+eIBTJZDDUyMNHOrU
+JpQAoJkJ9bpeitZINinM9r+JFnRcrrBA
+=c862
-----END PGP SIGNATURE-----
diff --git a/app-editors/amyedit/amyedit-1.0-r2.ebuild b/app-editors/amyedit/amyedit-1.0-r2.ebuild
new file mode 100644
index 000000000000..594921d5d476
--- /dev/null
+++ b/app-editors/amyedit/amyedit-1.0-r2.ebuild
@@ -0,0 +1,38 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/app-editors/amyedit/amyedit-1.0-r2.ebuild,v 1.1 2011/02/14 18:27:55 aballier Exp $
+
+EAPI=3
+
+inherit eutils autotools
+
+DESCRIPTION=" AmyEdit is a LaTeX editor"
+HOMEPAGE="http://amyedit.sf.net"
+SRC_URI="mirror://sourceforge/amyedit/${P}.tar.bz2"
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~x86"
+IUSE=""
+RDEPEND=">=dev-cpp/gtkmm-2.6
+ >=dev-cpp/glibmm-2.14
+ >=dev-libs/libsigc++-2.2
+ x11-libs/gtksourceview:2.0
+ dev-cpp/gtksourceviewmm:2.0
+ app-text/aspell"
+DEPEND="${RDEPEND}
+ dev-util/intltool
+ dev-util/pkgconfig"
+
+src_prepare() {
+ epatch "${FILESDIR}/${P}-keyfile.patch"
+ epatch "${FILESDIR}/${P}-signal.patch"
+ epatch "${FILESDIR}/${P}-gcc45.patch"
+ epatch "${FILESDIR}/${P}-sourceviewmm2.patch"
+ rm -rf "${S}/src/gtksourceviewmm" || die
+ eautoreconf
+}
+
+src_install() {
+ emake DESTDIR="${D}" install || die
+ dodoc ChangeLog README TODO || die
+}
diff --git a/app-editors/amyedit/files/amyedit-1.0-sourceviewmm2.patch b/app-editors/amyedit/files/amyedit-1.0-sourceviewmm2.patch
new file mode 100644
index 000000000000..31b7882b3ba5
--- /dev/null
+++ b/app-editors/amyedit/files/amyedit-1.0-sourceviewmm2.patch
@@ -0,0 +1,331 @@
+Index: amyedit-1.0/configure.in
+===================================================================
+--- amyedit-1.0.orig/configure.in
++++ amyedit-1.0/configure.in
+@@ -36,7 +36,7 @@ AC_ARG_ENABLE(precompiled-headers,
+ AM_CONDITIONAL(PRECOMPILE_HEADERS, test x$enable_precompiled_headers = xyes)
+
+ AC_CHECK_LIB([aspell], [new_aspell_config])
+-PKG_CHECK_MODULES(AMYEDIT, gtkmm-2.4 >= 2.6 gtksourceview-1.0)
++PKG_CHECK_MODULES(AMYEDIT, gtkmm-2.4 >= 2.6 gtksourceview-2.0 gtksourceviewmm-2.0)
+ AC_SUBST(AMYEDIT_CFLAGS)
+ AC_SUBST(AMYEDIT_LIBS)
+
+Index: amyedit-1.0/src/Makefile.am
+===================================================================
+--- amyedit-1.0.orig/src/Makefile.am
++++ amyedit-1.0/src/Makefile.am
+@@ -25,12 +25,7 @@ sources = \
+ TextListViewComboBox.cc \
+ TextListViewListBox.cc \
+ Utils.cc \
+- main.cc \
+- gtksourceviewmm/sourcebuffer.cpp \
+- gtksourceviewmm/sourcelanguage.cpp \
+- gtksourceviewmm/sourcelanguagesmanager.cpp \
+- gtksourceviewmm/sourceview.cpp \
+- gtksourceviewmm/init.cc
++ main.cc
+
+ headers = \
+ AboutDialog.hh \
+@@ -48,18 +43,9 @@ headers = \
+ TextListModel.hh \
+ TextListViewComboBox.hh \
+ TextListViewListBox.hh \
+- Utils.hh \
+- gtksourceviewmm/sourcebuffer.h \
+- gtksourceviewmm/sourcelanguage.h \
+- gtksourceviewmm/sourcelanguagesmanager.h \
+- gtksourceviewmm/sourceview.h \
+- gtksourceviewmm/init.hh
++ Utils.hh
+
+ privateheaders= \
+- gtksourceviewmm/private/sourcebuffer_p.h \
+- gtksourceviewmm/private/sourcelanguage_p.h \
+- gtksourceviewmm/private/sourcelanguagesmanager_p.h \
+- gtksourceviewmm/private/sourceview_p.h \
+ Utils_p.hh
+
+ if PRECOMPILE_HEADERS
+Index: amyedit-1.0/src/EditTabs.cc
+===================================================================
+--- amyedit-1.0.orig/src/EditTabs.cc
++++ amyedit-1.0/src/EditTabs.cc
+@@ -57,8 +57,8 @@ Foundation, Inc., 59 Temple Place, Suite
+
+ #include <gtksourceview/gtksourcebuffer.h>
+ #include <gtksourceviewmm/sourcelanguage.h>
+-#include <gtksourceviewmm/sourcelanguagesmanager.h>
+-#include <gtksourceview/gtksourcelanguagesmanager.h>
++#include <gtksourceviewmm/sourcelanguagemanager.h>
++#include <gtksourceview/gtksourcelanguagemanager.h>
+ #include <gtksourceview/gtksourceiter.h>
+
+ #include <gtkmm/stock.h>
+@@ -161,7 +161,7 @@ void EditTabs::OpenTab(Glib::ustring fil
+ {
+ try
+ {
+- Glib::RefPtr<Gtk::SourceBuffer> buffer = is_buffer_open(filename);
++ Glib::RefPtr<gtksourceview::SourceBuffer> buffer = is_buffer_open(filename);
+ Page *newpage;
+
+ if (buffer){
+@@ -553,16 +553,15 @@ Glib::ustring EditTabs::GetUntitledTabNa
+
+ void EditTabs::Undo()
+ {
+- Glib::RefPtr<Gtk::SourceBuffer> buffer = get_current_view()->get_buffer();
++ Glib::RefPtr<gtksourceview::SourceBuffer> buffer = Glib::RefPtr<gtksourceview::SourceBuffer>::cast_static(get_current_view()->get_buffer());
+ if (buffer->can_undo ())
+ buffer->undo ();
+
+ }
+
+-
+ void EditTabs::Redo()
+ {
+- Glib::RefPtr<Gtk::SourceBuffer> buffer = get_current_view()->get_buffer();
++ Glib::RefPtr<gtksourceview::SourceBuffer> buffer = Glib::RefPtr<gtksourceview::SourceBuffer>::cast_static(get_current_view()->get_buffer());
+ if (buffer->can_redo ())
+ buffer->redo ();
+
+@@ -625,10 +624,10 @@ void EditTabs::FindNext()
+ Page *curtab = get_current_tab();
+ if (curtab)
+ {
+- Glib::RefPtr<Gtk::SourceBuffer::Mark> cursor=curtab->get_buffer()->get_insert();
+- Gtk::SourceBuffer::iterator start, end;
++ Glib::RefPtr<gtksourceview::SourceBuffer::Mark> cursor=curtab->get_buffer()->get_insert();
++ gtksourceview::SourceBuffer::iterator start, end;
+ GtkTextIter climit;
+- Gtk::SourceBuffer::iterator limit(&climit);
++ gtksourceview::SourceBuffer::iterator limit(&climit);
+ FindDialog fdialog;
+ int result;
+ do
+@@ -648,7 +647,7 @@ void EditTabs::FindNext()
+ if(gtk_source_iter_forward_search(cursor->get_iter().gobj(),fdialog.get_text().c_str(),fdialog.get_flags(),start.gobj(),end.gobj(),0))
+ {
+ curtab->get_buffer()->select_range(end, start);
+- (static_cast<Gtk::SourceView*>(curtab->get_child()))->scroll_to(end);
++ (static_cast<gtksourceview::SourceView*>(curtab->get_child()))->scroll_to(end);
+ }
+ else
+ {
+@@ -701,7 +700,7 @@ void EditTabs::on_switching_page(GtkNote
+
+ }
+
+-Glib::RefPtr <Gtk::SourceBuffer> EditTabs::is_buffer_open(Glib::ustring filename){
++Glib::RefPtr <gtksourceview::SourceBuffer> EditTabs::is_buffer_open(Glib::ustring filename){
+ int p = get_n_pages();
+
+ for (int x=0;x<p;x++){
+@@ -711,19 +710,19 @@ Glib::RefPtr <Gtk::SourceBuffer> EditTab
+ return curtab->get_buffer();
+ }
+
+- return Glib::RefPtr <Gtk::SourceBuffer> (NULL);
++ return Glib::RefPtr <gtksourceview::SourceBuffer> (NULL);
+
+
+ }
+
+-EditTabs::Page::Page(EditTabs *parent, Glib::RefPtr<Gtk::SourceBuffer> buffer){
++EditTabs::Page::Page(EditTabs *parent, Glib::RefPtr<gtksourceview::SourceBuffer> buffer){
+
+ /* Note to self! CLEAN THIS UP!!!! */
+
+ /* Page is actually a ScrollWindow thing */
+ set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_ALWAYS);
+
+- Gtk::SourceView *sourceview=Gtk::manage(new Gtk::SourceView());
++ gtksourceview::SourceView *sourceview=Gtk::manage(new gtksourceview::SourceView());
+
+ if (buffer)
+ sourceview->set_buffer(buffer);
+@@ -750,10 +749,10 @@ EditTabs::Page::Page(EditTabs *parent, G
+ * (ie buffer is null) */
+
+ if (!buffer){
+- Glib::ustring mime_type("text/x-tex");
++ Glib::ustring mime_type("latex");
+
+- Glib::RefPtr<Gtk::SourceLanguagesManager> lm = buffer->get_languages_manager();
+- Glib::RefPtr<Gtk::SourceLanguage> language = lm->get_language_from_mime_type(mime_type);
++ Glib::RefPtr<gtksourceview::SourceLanguageManager> lm = gtksourceview::SourceLanguageManager::create();
++ Glib::RefPtr<gtksourceview::SourceLanguage> language = lm->get_language(mime_type);
+
+
+ if (language)
+@@ -820,7 +819,7 @@ void EditTabs::Page::on_changed()
+
+ }
+
+-void EditTabs::Page::on_mark_changed(Gtk::SourceBuffer::iterator iter, Glib::RefPtr<Gtk::SourceBuffer::Mark> mark){
++void EditTabs::Page::on_mark_changed(gtksourceview::SourceBuffer::iterator iter, Glib::RefPtr<gtksourceview::SourceBuffer::Mark> mark){
+ if (mark->get_name()=="insert")
+ {
+ extern sigc::signal1<void, int> signal_line_set;
+@@ -835,14 +834,14 @@ EditTabs *EditTabs::Page::get_parent()
+ return (static_cast<EditTabs*>(Gtk::Widget::get_parent()));
+ }
+
+-Gtk::SourceView* EditTabs::Page::get_child()
++gtksourceview::SourceView* EditTabs::Page::get_child()
+ {
+- return (static_cast<Gtk::SourceView*>(Gtk::Bin::get_child()));
++ return (static_cast<gtksourceview::SourceView*>(Gtk::Bin::get_child()));
+ }
+
+-Glib::RefPtr<Gtk::SourceBuffer> EditTabs::Page::get_buffer()
++Glib::RefPtr<gtksourceview::SourceBuffer> EditTabs::Page::get_buffer()
+ {
+- return (get_child()->get_buffer());
++ return Glib::RefPtr<gtksourceview::SourceBuffer>::cast_static(get_child()->get_buffer());
+ }
+
+ EditTabs::Page *EditTabs::get_current_tab()
+@@ -850,9 +849,9 @@ EditTabs::Page *EditTabs::get_current_ta
+ return (static_cast<EditTabs::Page*>(get_nth_page(get_current_page())));
+ }
+
+-Gtk::SourceView *EditTabs::get_current_view()
++gtksourceview::SourceView *EditTabs::get_current_view()
+ {
+- return (static_cast<Gtk::SourceView*>(get_current_tab()->get_child()));
++ return (static_cast<gtksourceview::SourceView*>(get_current_tab()->get_child()));
+ }
+
+
+@@ -861,8 +860,8 @@ void EditTabs::Page::on_preferences_upda
+ // For things that need to happen for all pages
+ PrefStruct *prefs = PrefStruct::instance();
+
+- get_child()->set_tabs_width(prefs->get<int>("General", "tab_size"));
+- get_buffer()->set_highlight(prefs->get<bool>("General", "syntax_highlighting"));
++ get_child()->set_tab_width(prefs->get<int>("General", "tab_size"));
++ get_buffer()->set_highlight_syntax(prefs->get<bool>("General", "syntax_highlighting"));
+
+ }
+
+Index: amyedit-1.0/src/EditTabs.hh
+===================================================================
+--- amyedit-1.0.orig/src/EditTabs.hh
++++ amyedit-1.0/src/EditTabs.hh
+@@ -63,11 +63,11 @@ class EditTabs: public Gtk::Notebook
+ class Page:public Gtk::ScrolledWindow
+ {
+ public:
+- Page(EditTabs *parent, Glib::RefPtr<Gtk::SourceBuffer> buffer=Glib::RefPtr<Gtk::SourceBuffer>());
++ Page(EditTabs *parent, Glib::RefPtr<gtksourceview::SourceBuffer> buffer=Glib::RefPtr<gtksourceview::SourceBuffer>());
+
+ EditTabs *get_parent();
+- Gtk::SourceView *get_child();
+- Glib::RefPtr<Gtk::SourceBuffer> get_buffer();
++ gtksourceview::SourceView *get_child();
++ Glib::RefPtr<gtksourceview::SourceBuffer> get_buffer();
+
+ Glib::ustring filename;
+ Gtk::Label *tablabel;
+@@ -77,8 +77,8 @@ class EditTabs: public Gtk::Notebook
+ void on_close_me();
+ void on_modified_changed();
+ void on_changed();
+- void on_mark_changed(Gtk::SourceBuffer::iterator iter,
+- Glib::RefPtr<Gtk::SourceBuffer::Mark> mark);
++ void on_mark_changed(gtksourceview::SourceBuffer::iterator iter,
++ Glib::RefPtr<gtksourceview::SourceBuffer::Mark> mark);
+ void on_preferences_update();
+
+ };
+@@ -89,13 +89,13 @@ class EditTabs: public Gtk::Notebook
+ Glib::ustring GetRootFileName();
+ Glib::ustring TabNameFromFile(Glib::ustring start);
+ Glib::ustring GetUntitledTabName(Glib::ustring start);
+- Glib::RefPtr<Gtk::SourceBuffer> is_buffer_open(Glib::ustring filename);
++ Glib::RefPtr<gtksourceview::SourceBuffer> is_buffer_open(Glib::ustring filename);
+
+ void on_switching_page(GtkNotebookPage *page, guint number);
+ public:
+ Page *get_current_tab();
+ private:
+- Gtk::SourceView *get_current_view();
++ gtksourceview::SourceView *get_current_view();
+
+ void on_preferences_update();
+
+Index: amyedit-1.0/src/SpellDialog.cc
+===================================================================
+--- amyedit-1.0.orig/src/SpellDialog.cc
++++ amyedit-1.0/src/SpellDialog.cc
+@@ -267,9 +267,9 @@ int SpellDialog::checkDocument(){
+ aspell_document_checker_reset(checker);
+
+ view = getCurrentPage()->get_child();
+- buffer = view->get_buffer();
++ buffer = Glib::RefPtr<gtksourceview::SourceBuffer>::cast_static(view->get_buffer());
+
+- buffer->set_check_brackets(false);
++ buffer->set_highlight_matching_brackets(false);
+
+ /* areastart has left gravity, arearight has right gravity, as inserts only
+ * occur inside them, they should always mark the beginning and ends of the
+@@ -315,7 +315,7 @@ int SpellDialog::checkDocument(){
+ buffer->delete_mark(areastart);
+ buffer->delete_mark(areaend);
+
+- buffer->set_check_brackets(true);
++ buffer->set_highlight_matching_brackets(true);
+ return 0;
+ }
+
+@@ -370,7 +370,7 @@ bool SpellDialog::changeWord(AspellToken
+ /* Close Clicked */
+
+ buffer->place_cursor(wordend);
+- buffer->set_check_brackets();
++ buffer->set_highlight_matching_brackets();
+ return false;
+ }
+
+Index: amyedit-1.0/src/SpellDialog.hh
+===================================================================
+--- amyedit-1.0.orig/src/SpellDialog.hh
++++ amyedit-1.0/src/SpellDialog.hh
+@@ -49,8 +49,8 @@ class SpellDialog : public Gtk::Dialog,
+
+ void on_preferences_update();
+
+- Gtk::SourceView* view;
+- Glib::RefPtr<Gtk::SourceBuffer> buffer;
++ gtksourceview::SourceView* view;
++ Glib::RefPtr<gtksourceview::SourceBuffer> buffer;
+ Gtk::Entry misslabel;
+ Gtk::Entry replaceentry;
+ TextListViewListBox listbox;
+Index: amyedit-1.0/src/main.cc
+===================================================================
+--- amyedit-1.0.orig/src/main.cc
++++ amyedit-1.0/src/main.cc
+@@ -53,7 +53,7 @@
+ #include <fstream>
+
+ #include "AmyEdit.hh"
+-#include "gtksourceviewmm/init.hh"
++#include "gtksourceviewmm/init.h"
+ #include "Utils.hh"
+
+ int main(int argc, char **argv)
+@@ -63,7 +63,7 @@ int main(int argc, char **argv)
+ textdomain (GETTEXT_PACKAGE);
+
+ Gtk::Main m(&argc, &argv);
+- Gtk::SourceViewmm_init();
++ gtksourceview::init();
+
+ /* TODO This should probably be removed and created on demand */
+