initial
This commit is contained in:
15
plugins/snippets/Makefile.am
Executable file
15
plugins/snippets/Makefile.am
Executable file
@@ -0,0 +1,15 @@
|
||||
# Python snippets plugin
|
||||
SUBDIRS = snippets data
|
||||
plugindir = $(GEDIT_PLUGINS_LIBS_DIR)
|
||||
|
||||
plugin_in_files = snippets.gedit-plugin.desktop.in
|
||||
%.gedit-plugin: %.gedit-plugin.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*po) ; $(INTLTOOL_MERGE) $(top_srcdir)/po $< $@ -d -u -c $(top_builddir)/po/.intltool-merge-cache
|
||||
|
||||
plugin_DATA = $(plugin_in_files:.gedit-plugin.desktop.in=.gedit-plugin)
|
||||
|
||||
EXTRA_DIST = $(plugin_in_files)
|
||||
|
||||
CLEANFILES = $(plugin_DATA)
|
||||
DISTCLEANFILES = $(plugin_DATA)
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
33
plugins/snippets/data/Makefile.am
Executable file
33
plugins/snippets/data/Makefile.am
Executable file
@@ -0,0 +1,33 @@
|
||||
# Python snippets plugin
|
||||
SUBDIRS = lang
|
||||
|
||||
snippets_DATA = \
|
||||
css.xml \
|
||||
c.xml \
|
||||
cpp.xml \
|
||||
chdr.xml \
|
||||
docbook.xml \
|
||||
fortran.xml \
|
||||
global.xml \
|
||||
haskell.xml \
|
||||
html.xml \
|
||||
idl.xml \
|
||||
javascript.xml \
|
||||
java.xml \
|
||||
latex.xml \
|
||||
mallard.xml \
|
||||
perl.xml \
|
||||
php.xml \
|
||||
python.xml \
|
||||
ruby.xml \
|
||||
sh.xml \
|
||||
snippets.xml \
|
||||
tcl.xml \
|
||||
xml.xml \
|
||||
xslt.xml
|
||||
|
||||
snippetsdir = $(GEDIT_PLUGINS_DATA_DIR)/snippets
|
||||
|
||||
EXTRA_DIST = $(snippets_DATA)
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
283
plugins/snippets/data/c.xml
Executable file
283
plugins/snippets/data/c.xml
Executable file
@@ -0,0 +1,283 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="C">
|
||||
<snippet id="gpl">
|
||||
<text><![CDATA[/*
|
||||
* ${1:[$GEDIT_CURRENT_DOCUMENT_NAME,<filename>]}
|
||||
* This file is part of ${2:<program name>}
|
||||
*
|
||||
* Copyright (C) $<3: import datetime; return str(datetime.date.today().year)> - $<4:
|
||||
import pwd, os
|
||||
try:
|
||||
return pwd.getpwuid(os.getuid()).pw_gecos.split(',')[0]
|
||||
except KeyError:
|
||||
return '<author\>' >
|
||||
*
|
||||
* ${2} is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* ${2} is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with ${2}; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
$0]]></text>
|
||||
<tag>gpl</tag>
|
||||
<description>GPL License</description>
|
||||
</snippet>
|
||||
<snippet id="lgpl">
|
||||
<text><![CDATA[/*
|
||||
* ${1:[$GEDIT_CURRENT_DOCUMENT_NAME,<filename>]}
|
||||
* This file is part of ${2:<library name>}
|
||||
*
|
||||
* Copyright (C) $<3: import datetime; return str(datetime.date.today().year)> - $<4:
|
||||
import pwd, os
|
||||
try:
|
||||
return pwd.getpwuid(os.getuid()).pw_gecos.split(',')[0]
|
||||
except KeyError:
|
||||
return '<author\>' >
|
||||
*
|
||||
* ${2} is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* ${2} is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
$0]]></text>
|
||||
<tag>lgpl</tag>
|
||||
<description>LGPL License</description>
|
||||
</snippet>
|
||||
<snippet id="do">
|
||||
<text><![CDATA[do
|
||||
{
|
||||
$0
|
||||
} while ($1);]]></text>
|
||||
<tag>do</tag>
|
||||
<description>do .. while</description>
|
||||
</snippet>
|
||||
<snippet id="for">
|
||||
<text><![CDATA[for (${1:i} = ${2:0}; ${1:i} < ${3:count}; ${1:i} += ${4:1})
|
||||
{
|
||||
$0
|
||||
}]]></text>
|
||||
<tag>for</tag>
|
||||
<description>for loop</description>
|
||||
</snippet>
|
||||
<snippet id="while">
|
||||
<text><![CDATA[while (${1:condition})
|
||||
{
|
||||
$0
|
||||
}]]></text>
|
||||
<tag>while</tag>
|
||||
<description>while loop</description>
|
||||
</snippet>
|
||||
<snippet id="if">
|
||||
<text><![CDATA[if (${1:condition})
|
||||
{
|
||||
$0
|
||||
}]]></text>
|
||||
<tag>if</tag>
|
||||
<description>if</description>
|
||||
</snippet>
|
||||
<snippet id="elif">
|
||||
<text><![CDATA[else if (${1:condition})
|
||||
{
|
||||
$0
|
||||
}]]></text>
|
||||
<tag>elif</tag>
|
||||
<description>else if</description>
|
||||
</snippet>
|
||||
<snippet id="else">
|
||||
<text><![CDATA[else
|
||||
{
|
||||
$0
|
||||
}]]></text>
|
||||
<tag>else</tag>
|
||||
<description>else</description>
|
||||
</snippet>
|
||||
<snippet id="Inc">
|
||||
<text><![CDATA[#include <${1:file}.h>
|
||||
$0]]></text>
|
||||
<tag>Inc</tag>
|
||||
<description>#include <..></description>
|
||||
</snippet>
|
||||
<snippet id="inc">
|
||||
<text><![CDATA[#include "${1:file}.h"
|
||||
$0]]></text>
|
||||
<tag>inc</tag>
|
||||
<description>#include ".."</description>
|
||||
</snippet>
|
||||
<snippet id="main">
|
||||
<text><![CDATA[int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
$0
|
||||
return 0;
|
||||
}]]></text>
|
||||
<tag>main</tag>
|
||||
<description>main</description>
|
||||
</snippet>
|
||||
<snippet id="struct">
|
||||
<text><![CDATA[struct ${1:name}
|
||||
{
|
||||
${0:/* data */}
|
||||
};]]></text>
|
||||
<tag>struct</tag>
|
||||
<description>struct</description>
|
||||
</snippet>
|
||||
<snippet id="endif">
|
||||
<text><![CDATA[#endif
|
||||
$0]]></text>
|
||||
<description>#endif</description>
|
||||
<accelerator><![CDATA[<Control><Alt>period]]></accelerator>
|
||||
</snippet>
|
||||
<snippet id="td">
|
||||
<text><![CDATA[typedef ${1:newtype} ${2:type};
|
||||
$0]]></text>
|
||||
<tag>td</tag>
|
||||
<description>typedef</description>
|
||||
</snippet>
|
||||
<snippet id="gobject">
|
||||
<text><![CDATA[#include "$1.h"
|
||||
$<
|
||||
global camel_str,low_str, type_str, is_str, up_str
|
||||
components = $1.split('-')
|
||||
low_str = '_'.join(components).lower()
|
||||
up_str = '_'.join(components).upper()
|
||||
type_str = '_'.join([components[0], 'TYPE'] + components[1:]).upper()
|
||||
is_str = '_'.join([components[0], 'IS'] + components[1:]).upper()
|
||||
camel_str = ''
|
||||
|
||||
for t in components:
|
||||
camel_str += t.capitalize()
|
||||
>
|
||||
|
||||
#define $<[1]: return up_str >_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), $<[1]: return type_str >, $<[1]: return camel_str >Private))
|
||||
|
||||
struct _$<[1]: return camel_str >Private
|
||||
{
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE ($<[1]: return camel_str >, $<[1]: return low_str >, ${2:G_TYPE_OBJECT})
|
||||
|
||||
static void
|
||||
$<[1]: return low_str>_finalize (GObject *object)
|
||||
{
|
||||
G_OBJECT_CLASS ($<[1]: return low_str >_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static void
|
||||
$<[1]: return low_str >_class_init ($<[1]: return camel_str >Class *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->finalize = $<[1]: return low_str >_finalize;
|
||||
|
||||
g_type_class_add_private (object_class, sizeof ($<[1]: return camel_str >Private));
|
||||
}
|
||||
|
||||
static void
|
||||
$<[1]: return low_str >_init ($<[1]: return camel_str> *self)
|
||||
{
|
||||
self->priv = $<[1]: return up_str >_GET_PRIVATE (self);
|
||||
}
|
||||
|
||||
$<[1]: return camel_str > *
|
||||
$<[1]: return low_str >_new ()
|
||||
{
|
||||
return g_object_new ($<[1]: return type_str >, NULL);
|
||||
}]]></text>
|
||||
<tag>gobject</tag>
|
||||
<description>GObject template</description>
|
||||
</snippet>
|
||||
<snippet id="ginterface">
|
||||
<text><![CDATA[#include "$1.h"
|
||||
$<
|
||||
global camel_str,low_str,up_str
|
||||
components = $1.split('-')
|
||||
low_str = '_'.join(components).lower()
|
||||
up_str = '_'.join(components).upper()
|
||||
camel_str = ''
|
||||
|
||||
for t in components:
|
||||
camel_str += t.capitalize()
|
||||
>
|
||||
/* Default implementation */
|
||||
static const gchar *
|
||||
$<[1]: return low_str>_example_method_default ($<[1]: return camel_str > *self)
|
||||
{
|
||||
g_return_val_if_reached (NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
$<[1]: return low_str>_init ($<[1]: return camel_str >Iface *iface)
|
||||
{
|
||||
static gboolean initialized = FALSE;
|
||||
|
||||
iface->example_method = $<[1]: return low_str>_example_method_default;
|
||||
|
||||
if (!initialized)
|
||||
{
|
||||
initialized = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* This is an method example for an interface
|
||||
*/
|
||||
const gchar *
|
||||
$<[1]: return low_str>_example_method ($<[1]: return camel_str > *self)
|
||||
{
|
||||
g_return_val_if_fail ($<[1]: return up_str> (self), NULL);
|
||||
return $<[1]: return up_str>_GET_INTERFACE (self)->example_method (self);
|
||||
}
|
||||
|
||||
GType
|
||||
$<[1]: return low_str>_get_type ()
|
||||
{
|
||||
static GType $<[1]: return low_str>_type_id = 0;
|
||||
|
||||
if (!$<[1]: return low_str>_type_id)
|
||||
{
|
||||
static const GTypeInfo g_define_type_info =
|
||||
{
|
||||
sizeof ($<[1]: return camel_str >Iface),
|
||||
(GBaseInitFunc) $<[1]: return low_str>_init,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
0,
|
||||
0,
|
||||
NULL
|
||||
};
|
||||
|
||||
$<[1]: return low_str>_type_id =
|
||||
g_type_register_static (G_TYPE_INTERFACE,
|
||||
"$<[1]: return camel_str>",
|
||||
&g_define_type_info,
|
||||
0);
|
||||
}
|
||||
|
||||
return $<[1]: return low_str>_type_id;
|
||||
}]]></text>
|
||||
<tag>ginterface</tag>
|
||||
<description>GObject interface</description>
|
||||
</snippet>
|
||||
</snippets>
|
241
plugins/snippets/data/chdr.xml
Executable file
241
plugins/snippets/data/chdr.xml
Executable file
@@ -0,0 +1,241 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="chdr">
|
||||
<snippet id="once">
|
||||
<text><![CDATA[#ifndef __${1:NAME}_H__
|
||||
#define __$1_H__
|
||||
|
||||
$0
|
||||
|
||||
#endif /* __$1_H__ */
|
||||
]]></text>
|
||||
<description>Header Include-Guard</description>
|
||||
<tag>once</tag>
|
||||
</snippet>
|
||||
<snippet id="inc">
|
||||
<text><![CDATA[#include "${1:file}"
|
||||
$0]]></text>
|
||||
<description>#include ".."</description>
|
||||
<tag>inc</tag>
|
||||
</snippet>
|
||||
<snippet id="Inc">
|
||||
<text><![CDATA[#include <${1:file}>
|
||||
$0]]></text>
|
||||
<description>#include <..></description>
|
||||
<tag>Inc</tag>
|
||||
</snippet>
|
||||
<snippet id="namespace">
|
||||
<text><![CDATA[namespace ${1:ns}
|
||||
{
|
||||
$0
|
||||
};
|
||||
]]></text>
|
||||
<description>namespace ..</description>
|
||||
<tag>namespace</tag>
|
||||
</snippet>
|
||||
<snippet id="gpl">
|
||||
<text><![CDATA[/*
|
||||
* ${1:[$GEDIT_CURRENT_DOCUMENT_NAME,<filename>]}
|
||||
* This file is part of ${2:<program name>}
|
||||
*
|
||||
* Copyright (C) $<3: import datetime; return str(datetime.date.today().year)> - $<4:
|
||||
import pwd, os
|
||||
try:
|
||||
return pwd.getpwuid(os.getuid()).pw_gecos.split(',')[0]
|
||||
except KeyError:
|
||||
return '<author\>' >
|
||||
*
|
||||
* ${2} is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* ${2} is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with ${2}; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
$0]]></text>
|
||||
<tag>gpl</tag>
|
||||
<description>GPL License</description>
|
||||
</snippet>
|
||||
<snippet id="lgpl">
|
||||
<text><![CDATA[/*
|
||||
* ${1:[$GEDIT_CURRENT_DOCUMENT_NAME,<filename>]}
|
||||
* This file is part of ${2:<library name>}
|
||||
*
|
||||
* Copyright (C) $<3: import datetime; return str(datetime.date.today().year)> - $<4:
|
||||
import pwd, os
|
||||
try:
|
||||
return pwd.getpwuid(os.getuid()).pw_gecos.split(',')[0]
|
||||
except KeyError:
|
||||
return '<author\>' >
|
||||
*
|
||||
* ${2} is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* ${2} is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
$0]]></text>
|
||||
<tag>lgpl</tag>
|
||||
<description>LGPL License</description>
|
||||
</snippet>
|
||||
<snippet id="td">
|
||||
<text><![CDATA[typedef ${1:newtype} ${2:type};
|
||||
$0]]></text>
|
||||
<tag>td</tag>
|
||||
<description>typedef</description>
|
||||
</snippet>
|
||||
<snippet id="class">
|
||||
<text><![CDATA[class ${1:name}
|
||||
{
|
||||
public:
|
||||
${1:name} (${2:arguments});
|
||||
virtual ~${1:name} ();
|
||||
|
||||
private:
|
||||
${0:/* data */}
|
||||
};]]></text>
|
||||
<description>class ..</description>
|
||||
<tag>class</tag>
|
||||
</snippet>
|
||||
<snippet id="struct">
|
||||
<text><![CDATA[struct ${1:name}
|
||||
{
|
||||
${0:/* data */}
|
||||
};]]></text>
|
||||
<tag>struct</tag>
|
||||
<description>struct</description>
|
||||
</snippet>
|
||||
<snippet id="template">
|
||||
<text><![CDATA[template <typename ${1:_InputIter}>]]></text>
|
||||
<description>template <typename ..></description>
|
||||
<tag>template</tag>
|
||||
</snippet>
|
||||
<snippet id="gobject">
|
||||
<text><![CDATA[#ifndef __${1:NAME}_H__
|
||||
#define __$1_H__
|
||||
|
||||
#include <${2:glib-object.h}>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
$<
|
||||
global camel_str
|
||||
components = $1.split('_')
|
||||
type_str = '_'.join([components[0], 'TYPE'] + components[1:])
|
||||
is_str = '_'.join([components[0], 'IS'] + components[1:])
|
||||
camel_str = ''
|
||||
|
||||
for t in components:
|
||||
camel_str += t.capitalize()
|
||||
|
||||
items = [ \
|
||||
['#define ' + type_str, '(' + $1.lower() + '_get_type ())'], \
|
||||
['#define ' + $1 + '(obj)', '(G_TYPE_CHECK_INSTANCE_CAST ((obj), ' + type_str + ', ' + camel_str + '))'], \
|
||||
['#define ' + $1 + '_CONST(obj)', '(G_TYPE_CHECK_INSTANCE_CAST ((obj), ' + type_str + ', ' + camel_str + ' const))'], \
|
||||
['#define ' + $1 + '_CLASS(klass)', '(G_TYPE_CHECK_CLASS_CAST ((klass), ' + type_str + ', ' + camel_str + 'Class))'], \
|
||||
['#define ' + is_str + '(obj)', '(G_TYPE_CHECK_INSTANCE_TYPE ((obj), ' + type_str + '))'], \
|
||||
['#define ' + is_str + '_CLASS(klass)', '(G_TYPE_CHECK_CLASS_TYPE ((klass), ' + type_str + '))'], \
|
||||
['#define ' + $1 + '_GET_CLASS(obj)', '(G_TYPE_INSTANCE_GET_CLASS ((obj), ' + type_str + ', ' + camel_str + 'Class))']
|
||||
]
|
||||
|
||||
return align(items) >
|
||||
|
||||
$<[1]:
|
||||
items = [ \
|
||||
['typedef struct _' + camel_str, camel_str + ';'], \
|
||||
['typedef struct _' + camel_str + 'Class', camel_str + 'Class;'], \
|
||||
['typedef struct _' + camel_str + 'Private', camel_str + 'Private;'] \
|
||||
]
|
||||
|
||||
return align(items) >
|
||||
|
||||
struct _$<[1]: return camel_str > {
|
||||
${7:GObject} parent;
|
||||
|
||||
$<[1]: return camel_str >Private *priv;
|
||||
};
|
||||
|
||||
struct _$<[1]: return camel_str >Class {
|
||||
$7Class parent_class;
|
||||
};
|
||||
|
||||
GType $< return $1.lower() + '_get_type' > (void) G_GNUC_CONST;
|
||||
$<[1]: return camel_str > *$< return $1.lower()>_new (void);
|
||||
|
||||
$0
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __$1_H__ */]]></text>
|
||||
<tag>gobject</tag>
|
||||
<description>GObject template</description>
|
||||
</snippet>
|
||||
<snippet id="ginterface">
|
||||
<text><![CDATA[#ifndef __${1:NAME}_H__
|
||||
#define __$1_H__
|
||||
|
||||
#include <${2:glib-object.h}>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
$<
|
||||
global camel_str
|
||||
components = $1.split('_')
|
||||
type_str = '_'.join([components[0], 'TYPE'] + components[1:])
|
||||
is_str = '_'.join([components[0], 'IS'] + components[1:])
|
||||
camel_str = ''
|
||||
|
||||
for t in components:
|
||||
camel_str += t.capitalize()
|
||||
|
||||
items = [ \
|
||||
['#define ' + type_str, '(' + $1.lower() + '_get_type ())'], \
|
||||
['#define ' + $1 + '(obj)', '(G_TYPE_CHECK_INSTANCE_CAST ((obj), ' + type_str + ', ' + camel_str + '))'], \
|
||||
['#define ' + is_str + '(obj)', '(G_TYPE_CHECK_INSTANCE_TYPE ((obj), ' + type_str + '))'], \
|
||||
['#define ' + $1 + '_GET_INTERFACE(obj)', '(G_TYPE_INSTANCE_GET_INTERFACE ((obj), ' + type_str + ', ' + camel_str + 'Iface))']
|
||||
]
|
||||
|
||||
return align(items) >
|
||||
|
||||
$<[1]:
|
||||
items = [ \
|
||||
['typedef struct _' + camel_str, camel_str + ';'], \
|
||||
['typedef struct _' + camel_str + 'Iface', camel_str + 'Iface;'], \
|
||||
]
|
||||
|
||||
return align(items) >
|
||||
|
||||
struct _$<[1]: return camel_str >Iface
|
||||
{
|
||||
${7:GTypeInterface} parent;
|
||||
|
||||
const gchar * (*example_method) ($<[1]: return camel_str > *self);
|
||||
};
|
||||
|
||||
GType $< return $1.lower() + '_get_type' > (void) G_GNUC_CONST;
|
||||
|
||||
const gchar *$< return $1.lower()>_example_method ($<[1]: return camel_str > *self);
|
||||
$0
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __$1_H__ */]]></text>
|
||||
<tag>ginterface</tag>
|
||||
<description>GObject interface</description>
|
||||
</snippet>
|
||||
</snippets>
|
183
plugins/snippets/data/cpp.xml
Executable file
183
plugins/snippets/data/cpp.xml
Executable file
@@ -0,0 +1,183 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="cpp">
|
||||
<snippet id="main">
|
||||
<text><![CDATA[int main (int argc, char const* argv[])
|
||||
{
|
||||
$0
|
||||
return 0;
|
||||
}]]></text>
|
||||
<description>main</description>
|
||||
<tag>main</tag>
|
||||
</snippet>
|
||||
<snippet id="for">
|
||||
<text><![CDATA[for (${1:unsigned int} ${2:i} = ${3:0}; ${2:i} < ${4:count}; ${2:i} += ${5:1})
|
||||
{
|
||||
$0
|
||||
}]]></text>
|
||||
<description>for loop</description>
|
||||
<tag>for</tag>
|
||||
</snippet>
|
||||
<snippet id="beginend">
|
||||
<text><![CDATA[${1:v}.begin(), ${1:v}.end()]]></text>
|
||||
<description>$1.begin</description>
|
||||
<tag>beginend</tag>
|
||||
</snippet>
|
||||
<snippet id="do">
|
||||
<text><![CDATA[do
|
||||
{
|
||||
$0
|
||||
} while ($1 );]]></text>
|
||||
<description>do .. while</description>
|
||||
<tag>do</tag>
|
||||
</snippet>
|
||||
<snippet id="endif">
|
||||
<text><![CDATA[#endif
|
||||
$0]]></text>
|
||||
<accelerator><![CDATA[<Control><Alt>period]]></accelerator>
|
||||
<description>#endif</description>
|
||||
</snippet>
|
||||
<snippet id="if">
|
||||
<text><![CDATA[if (${1:condition})
|
||||
{
|
||||
$0
|
||||
}]]></text>
|
||||
<description>if ..</description>
|
||||
<tag>if</tag>
|
||||
</snippet>
|
||||
<snippet id="inc">
|
||||
<text><![CDATA[#include "${1:file}"
|
||||
$0]]></text>
|
||||
<description>#include ".."</description>
|
||||
<tag>inc</tag>
|
||||
</snippet>
|
||||
<snippet id="Inc">
|
||||
<text><![CDATA[#include <${1:file}>
|
||||
$0]]></text>
|
||||
<description>#include <..></description>
|
||||
<tag>Inc</tag>
|
||||
</snippet>
|
||||
<snippet id="namespace">
|
||||
<text><![CDATA[namespace ${1:ns}
|
||||
{
|
||||
$0
|
||||
};
|
||||
]]></text>
|
||||
<description>namespace ..</description>
|
||||
<tag>namespace</tag>
|
||||
</snippet>
|
||||
<snippet id="readfile">
|
||||
<text><![CDATA[std::vector<uint8_t> v;
|
||||
if (FILE* fp = fopen (${1:"filename"}, "r"))
|
||||
{
|
||||
uint8_t buf[1024];
|
||||
while (size_t len = fread (buf, 1, sizeof (buf), fp))
|
||||
v.insert (v.end(), buf, buf + len);
|
||||
fclose(fp);
|
||||
}
|
||||
$0]]></text>
|
||||
<description>Read File Into Vector</description>
|
||||
<tag>readfile</tag>
|
||||
</snippet>
|
||||
<snippet id="map">
|
||||
<text><![CDATA[std::map<${1:key}, ${2:value}> ${3:map};
|
||||
$0]]></text>
|
||||
<description>std::map</description>
|
||||
<tag>map</tag>
|
||||
</snippet>
|
||||
<snippet id="vector">
|
||||
<text><![CDATA[std::vector<${1:char}> ${2:v};
|
||||
$0]]></text>
|
||||
<description>std::vector</description>
|
||||
<tag>vector</tag>
|
||||
</snippet>
|
||||
<snippet id="struct">
|
||||
<text><![CDATA[struct ${1:name}
|
||||
{
|
||||
${0:/* data */}
|
||||
};]]></text>
|
||||
<description>struct ..</description>
|
||||
<tag>struct</tag>
|
||||
</snippet>
|
||||
<snippet id="template">
|
||||
<text><![CDATA[template <typename ${1:_InputIter}>]]></text>
|
||||
<description>template <typename ..></description>
|
||||
<tag>template</tag>
|
||||
</snippet>
|
||||
<snippet id="gpl">
|
||||
<text><![CDATA[/*
|
||||
* ${1:[$GEDIT_CURRENT_DOCUMENT_NAME,<filename>]}
|
||||
* This file is part of ${2:<program name>}
|
||||
*
|
||||
* Copyright (C) $<3: import datetime; return str(datetime.date.today().year)> - $<4:
|
||||
import pwd, os
|
||||
try:
|
||||
return pwd.getpwuid(os.getuid()).pw_gecos.split(',')[0]
|
||||
except KeyError:
|
||||
return '<author\>' >
|
||||
*
|
||||
* ${2} is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* ${2} is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with ${2}; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
$0]]></text>
|
||||
<tag>gpl</tag>
|
||||
<description>GPL License</description>
|
||||
</snippet>
|
||||
<snippet id="lgpl">
|
||||
<text><![CDATA[/*
|
||||
* ${1:[$GEDIT_CURRENT_DOCUMENT_NAME,<filename>]}
|
||||
* This file is part of ${2:<library name>}
|
||||
*
|
||||
* Copyright (C) $<3: import datetime; return str(datetime.date.today().year)> - $<4:
|
||||
import pwd, os
|
||||
try:
|
||||
return pwd.getpwuid(os.getuid()).pw_gecos.split(',')[0]
|
||||
except KeyError:
|
||||
return '<author\>' >
|
||||
*
|
||||
* ${2} is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* ${2} is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
$0]]></text>
|
||||
<tag>lgpl</tag>
|
||||
<description>LGPL License</description>
|
||||
</snippet>
|
||||
<snippet id="td">
|
||||
<text><![CDATA[typedef ${1:newtype} ${2:type};
|
||||
$0]]></text>
|
||||
<tag>td</tag>
|
||||
<description>typedef</description>
|
||||
</snippet>
|
||||
<snippet id="while">
|
||||
<text><![CDATA[while ($1)
|
||||
{
|
||||
$0
|
||||
}]]></text>
|
||||
<tag>while</tag>
|
||||
<description>while</description>
|
||||
</snippet>
|
||||
</snippets>
|
557
plugins/snippets/data/css.xml
Executable file
557
plugins/snippets/data/css.xml
Executable file
@@ -0,0 +1,557 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="CSS">
|
||||
<snippet id="background">
|
||||
<text><![CDATA[background-attachment: ${1:scroll/fixed};
|
||||
$0]]></text>
|
||||
<description>background-attachment: scroll/fixed</description>
|
||||
<tag>background</tag>
|
||||
</snippet>
|
||||
<snippet id="background-1">
|
||||
<text><![CDATA[background-color: #${1:DDD};
|
||||
$0]]></text>
|
||||
<description>background-color: color-hex</description>
|
||||
<tag>background</tag>
|
||||
</snippet>
|
||||
<snippet id="background-2">
|
||||
<text><![CDATA[background-color: ${1:red};
|
||||
$0]]></text>
|
||||
<description>background-color: color-name</description>
|
||||
<tag>background</tag>
|
||||
</snippet>
|
||||
<snippet id="background-3">
|
||||
<text><![CDATA[background-color: rgb(${1:255},${2:255},${3:255});
|
||||
$0]]></text>
|
||||
<description>background-color: color-rgb</description>
|
||||
<tag>background</tag>
|
||||
</snippet>
|
||||
<snippet id="background-4">
|
||||
<text><![CDATA[background: #${1:DDD} url($2) ${3:repeat/repeat-x/repeat-y/no-repeat} ${4:scroll/fixed} ${5:top letft/top center/top right/center left/center center/center right/bottom left/bottom center/bottom right/x-% y-%/x-pos y-pos};
|
||||
$0]]></text>
|
||||
<description>background: color image repeat attachment position</description>
|
||||
<tag>background</tag>
|
||||
</snippet>
|
||||
<snippet id="background-5">
|
||||
<text><![CDATA[background-color: transparent;
|
||||
$0]]></text>
|
||||
<description>background-color: transparent</description>
|
||||
<tag>background</tag>
|
||||
</snippet>
|
||||
<snippet id="background-6">
|
||||
<text><![CDATA[background-image: none;
|
||||
$0]]></text>
|
||||
<description>background-image: none</description>
|
||||
<tag>background</tag>
|
||||
</snippet>
|
||||
<snippet id="background-7">
|
||||
<text><![CDATA[background-image: url($1);
|
||||
$0]]></text>
|
||||
<description>background-image: url</description>
|
||||
<tag>background</tag>
|
||||
</snippet>
|
||||
<snippet id="background-8">
|
||||
<text><![CDATA[background-position: ${1:top letft/top center/top right/center left/center center/center right/bottom left/bottom center/bottom right/x-% y-%/x-pos y-pos};
|
||||
$0]]></text>
|
||||
<description>background-position: position</description>
|
||||
<tag>background</tag>
|
||||
</snippet>
|
||||
<snippet id="background-9">
|
||||
<text><![CDATA[background-repeat: ${1:repeat/repeat-x/repeat-y/no-repeat};
|
||||
$0]]></text>
|
||||
<description>background-repeat: r/r-x/r-y/n-r</description>
|
||||
<tag>background</tag>
|
||||
</snippet>
|
||||
<snippet id="border">
|
||||
<text><![CDATA[border-bottom-color: #${1:999};
|
||||
$0]]></text>
|
||||
<description>border-bottom-color: size style color</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-1">
|
||||
<text><![CDATA[border-bottom: ${1:1}px ${2:solid} #${3:999};
|
||||
$0]]></text>
|
||||
<description>border-bottom: size style color</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-2">
|
||||
<text><![CDATA[border-bottom-style: ${1:none/hidden/dotted/dashed/solid/double/groove/ridge/inset/outset};
|
||||
$0]]></text>
|
||||
<description>border-bottom-style: size style color</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-3">
|
||||
<text><![CDATA[border-bottom-width: ${1:1}px ${2:solid} #${3:999};
|
||||
$0]]></text>
|
||||
<description>border-bottom-width: size style color</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-4">
|
||||
<text><![CDATA[border-color: ${1:999};
|
||||
$0]]></text>
|
||||
<description>border-color: color</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-5">
|
||||
<text><![CDATA[border-right-color: #${1:999};
|
||||
$0]]></text>
|
||||
<description>border-left-color: color</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-6">
|
||||
<text><![CDATA[border-left: ${1:1}px ${2:solid} #${3:999};
|
||||
$0]]></text>
|
||||
<description>border-left: size style color</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-7">
|
||||
<text><![CDATA[border-left-style: ${1:none/hidden/dotted/dashed/solid/double/groove/ridge/inset/outset};
|
||||
$0]]></text>
|
||||
<description>border-left-style: style</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-8">
|
||||
<text><![CDATA[border-left-width: ${1:1}px ${2:solid} #${3:999};
|
||||
$0]]></text>
|
||||
<description>border-left-width: size</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-9">
|
||||
<text><![CDATA[border-right-color: #${1:999};
|
||||
$0]]></text>
|
||||
<description>border-right-color: color</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-10">
|
||||
<text><![CDATA[border-right: ${1:1}px ${2:solid} #${3:999};
|
||||
$0]]></text>
|
||||
<description>border-right: size style color</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-11">
|
||||
<text><![CDATA[border-right-style: ${1:none/hidden/dotted/dashed/solid/double/groove/ridge/inset/outset};
|
||||
$0]]></text>
|
||||
<description>border-right-style: style</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-12">
|
||||
<text><![CDATA[border-right-width: ${1:1}px ${2:solid} #${3:999};
|
||||
$0]]></text>
|
||||
<description>border-right-width: size</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-13">
|
||||
<text><![CDATA[border: ${1:1px} ${2:solid} #${3:999};
|
||||
$0]]></text>
|
||||
<description>border: size style color</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-14">
|
||||
<text><![CDATA[border-style: ${1:none/hidden/dotted/dashed/solid/double/groove/ridge/inset/outset};
|
||||
$0]]></text>
|
||||
<description>border-style: style</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-15">
|
||||
<text><![CDATA[border-top-color: #${1:999};
|
||||
$0]]></text>
|
||||
<description>border-top-color: color</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-16">
|
||||
<text><![CDATA[border-top: ${1:1}px ${2:solid} #${3:999};
|
||||
$0]]></text>
|
||||
<description>border-top: size style color</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-17">
|
||||
<text><![CDATA[border-top-style: ${1:none/hidden/dotted/dashed/solid/double/groove/ridge/inset/outset};
|
||||
$0]]></text>
|
||||
<description>border-top-style: style</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-18">
|
||||
<text><![CDATA[border-top-width: ${1:1}px ${2:solid} #${3:999};
|
||||
$0]]></text>
|
||||
<description>border-top-width: size</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="border-19">
|
||||
<text><![CDATA[border-color: ${1:1px};
|
||||
$0]]></text>
|
||||
<description>border-width: width</description>
|
||||
<tag>border</tag>
|
||||
</snippet>
|
||||
<snippet id="clear">
|
||||
<text><![CDATA[clear: ${1:left/right/both/none};
|
||||
$0]]></text>
|
||||
<description>clear: value</description>
|
||||
<tag>clear</tag>
|
||||
</snippet>
|
||||
<snippet id="color">
|
||||
<text><![CDATA[color: #${1:DDD};
|
||||
$0]]></text>
|
||||
<description>color: color-hex</description>
|
||||
<tag>color</tag>
|
||||
</snippet>
|
||||
<snippet id="color-1">
|
||||
<text><![CDATA[color: ${1:red};
|
||||
$0]]></text>
|
||||
<description>color: color-name</description>
|
||||
<tag>color</tag>
|
||||
</snippet>
|
||||
<snippet id="color-2">
|
||||
<text><![CDATA[color: rgb(${1:255},${2:255},${3:255});
|
||||
$0]]></text>
|
||||
<description>color: color-rgb</description>
|
||||
<tag>color</tag>
|
||||
</snippet>
|
||||
<snippet id="cursor">
|
||||
<text><![CDATA[cursor: {$1:default/auto/crosshair/pointer/move/*-resize/text/wait/help};
|
||||
$0]]></text>
|
||||
<description>cursor: type</description>
|
||||
<tag>cursor</tag>
|
||||
</snippet>
|
||||
<snippet id="clear-1">
|
||||
<text><![CDATA[cursor: url($1);
|
||||
$0]]></text>
|
||||
<description>cursor: url</description>
|
||||
<tag>clear</tag>
|
||||
</snippet>
|
||||
<snippet id="direction">
|
||||
<text><![CDATA[direction: ${1:ltr|rtl};
|
||||
$0]]></text>
|
||||
<description>direction: ltr|rtl</description>
|
||||
<tag>direction</tag>
|
||||
</snippet>
|
||||
<snippet id="display">
|
||||
<text><![CDATA[display: block;
|
||||
$0]]></text>
|
||||
<description>display: block</description>
|
||||
<tag>display</tag>
|
||||
</snippet>
|
||||
<snippet id="display-1">
|
||||
<text><![CDATA[display: ${1:none/inline/block/list-item/run-in/compact/marker};
|
||||
$0]]></text>
|
||||
<description>display: common-types</description>
|
||||
<tag>display</tag>
|
||||
</snippet>
|
||||
<snippet id="display-2">
|
||||
<text><![CDATA[display: inline;
|
||||
$0]]></text>
|
||||
<description>display: inline</description>
|
||||
<tag>display</tag>
|
||||
</snippet>
|
||||
<snippet id="display-3">
|
||||
<text><![CDATA[display: ${1:table/inline-table/table-row-group/table-header-group/table-footer-group/table-row/table-column-group/table-column/table-cell/table-caption};
|
||||
$0]]></text>
|
||||
<description>display: table-types</description>
|
||||
<tag>display</tag>
|
||||
</snippet>
|
||||
<snippet id="float">
|
||||
<text><![CDATA[float: ${1:left/right/none};
|
||||
$0]]></text>
|
||||
<description>float: left/right/none</description>
|
||||
<tag>float</tag>
|
||||
</snippet>
|
||||
<snippet id="font">
|
||||
<text><![CDATA[font-family: ${1:Arial, "MS Trebuchet"}, ${2:sans-}serif;
|
||||
$0]]></text>
|
||||
<description>font-family: family</description>
|
||||
<tag>font</tag>
|
||||
</snippet>
|
||||
<snippet id="font-1">
|
||||
<text><![CDATA[font: ${1:75%} ${2:"Lucida Grande", "Trebuchet MS", Verdana,} ${3:sans-}serif;
|
||||
$0]]></text>
|
||||
<description>font: size font</description>
|
||||
<tag>font</tag>
|
||||
</snippet>
|
||||
<snippet id="font-2">
|
||||
<text><![CDATA[font-size: ${1:100%};
|
||||
$0]]></text>
|
||||
<description>font-size: size</description>
|
||||
<tag>font</tag>
|
||||
</snippet>
|
||||
<snippet id="font-3">
|
||||
<text><![CDATA[font-style: ${1:normal/italic/oblique};
|
||||
$0]]></text>
|
||||
<description>font-style: normal/italic/oblique</description>
|
||||
<tag>font</tag>
|
||||
</snippet>
|
||||
<snippet id="font-4">
|
||||
<text><![CDATA[font: ${1:normal/italic/oblique} ${2:normal/small-caps} ${3:normal/bold} ${4:1em/1.5em} ${5:Arial}, ${6:sans-}serif;
|
||||
$0]]></text>
|
||||
<description>font: style variant weight size/line-height font-family</description>
|
||||
<tag>font</tag>
|
||||
</snippet>
|
||||
<snippet id="font-5">
|
||||
<text><![CDATA[font-variant: ${1:normal/small-caps};
|
||||
$0]]></text>
|
||||
<description>font-variant: normal/small-caps</description>
|
||||
<tag>font</tag>
|
||||
</snippet>
|
||||
<snippet id="font-6">
|
||||
<text><![CDATA[font-weight: ${1:normal/bold};
|
||||
$0]]></text>
|
||||
<description>font-weight: weight</description>
|
||||
<tag>font</tag>
|
||||
</snippet>
|
||||
<snippet id="letter">
|
||||
<text><![CDATA[letter-spacing: $1em;
|
||||
$0]]></text>
|
||||
<description>letter-spacing: length-em</description>
|
||||
<tag>letter</tag>
|
||||
</snippet>
|
||||
<snippet id="letter-1">
|
||||
<text><![CDATA[letter-spacing: $1px;
|
||||
$0]]></text>
|
||||
<description>letter-spacing: length-px</description>
|
||||
<tag>letter</tag>
|
||||
</snippet>
|
||||
<snippet id="list">
|
||||
<text><![CDATA[list-style-image: url($1);
|
||||
$0]]></text>
|
||||
<description>list-style-image: url</description>
|
||||
<tag>list</tag>
|
||||
</snippet>
|
||||
<snippet id="list-1">
|
||||
<text><![CDATA[list-style-position: ${1:inside/outside};
|
||||
$0]]></text>
|
||||
<description>list-style-position: pos</description>
|
||||
<tag>list</tag>
|
||||
</snippet>
|
||||
<snippet id="list-2">
|
||||
<text><![CDATA[list-style-type: ${1:cjk-ideographic/hiragana/katakana/hiragana-iroha/katakana-iroha};
|
||||
$0]]></text>
|
||||
<description>list-style-type: asian</description>
|
||||
<tag>list</tag>
|
||||
</snippet>
|
||||
<snippet id="list-3">
|
||||
<text><![CDATA[list-style-type: ${1:none/disc/circle/square};
|
||||
$0]]></text>
|
||||
<description>list-style-type: marker</description>
|
||||
<tag>list</tag>
|
||||
</snippet>
|
||||
<snippet id="list-4">
|
||||
<text><![CDATA[list-style-type: ${1:decimal/decimal-leading-zero/zero};
|
||||
$0]]></text>
|
||||
<description>list-style-type: numeric</description>
|
||||
<tag>list</tag>
|
||||
</snippet>
|
||||
<snippet id="list-5">
|
||||
<text><![CDATA[list-style-type: ${1:hebrew/armenian/georgian};
|
||||
$0]]></text>
|
||||
<description>list-style-type: other</description>
|
||||
<tag>list</tag>
|
||||
</snippet>
|
||||
<snippet id="list-6">
|
||||
<text><![CDATA[list-style: ${1:none/disc/circle/square/decimal/zero} ${2:inside/outside} url($3);
|
||||
$0]]></text>
|
||||
<description>list-style: type position image</description>
|
||||
<tag>list</tag>
|
||||
</snippet>
|
||||
<snippet id="list-7">
|
||||
<text><![CDATA[list-style-type: ${1:lower-roman/uppert-roman/lower-alpha/upper-alpha/lower-greek/lower-latin/upper-latin};
|
||||
$0]]></text>
|
||||
<description>list-style-type: roman-alpha-greek</description>
|
||||
<tag>list</tag>
|
||||
</snippet>
|
||||
<snippet id="margin">
|
||||
<text><![CDATA[margin: ${1:20px};
|
||||
$0]]></text>
|
||||
<description>margin: all</description>
|
||||
<tag>margin</tag>
|
||||
</snippet>
|
||||
<snippet id="margin-1">
|
||||
<text><![CDATA[margin-bottom: ${1:20px};
|
||||
$0]]></text>
|
||||
<description>margin-bottom: length</description>
|
||||
<tag>margin</tag>
|
||||
</snippet>
|
||||
<snippet id="margin-2">
|
||||
<text><![CDATA[margin-left: ${1:20px};
|
||||
$0]]></text>
|
||||
<description>margin-left: length</description>
|
||||
<tag>margin</tag>
|
||||
</snippet>
|
||||
<snippet id="margin-3">
|
||||
<text><![CDATA[margin-right: ${1:20px};
|
||||
$0]]></text>
|
||||
<description>margin-right: length</description>
|
||||
<tag>margin</tag>
|
||||
</snippet>
|
||||
<snippet id="margin-4">
|
||||
<text><![CDATA[margin-top: ${1:20px};
|
||||
$0]]></text>
|
||||
<description>margin-top: length</description>
|
||||
<tag>margin</tag>
|
||||
</snippet>
|
||||
<snippet id="margin-5">
|
||||
<text><![CDATA[margin: ${1:20px} ${2:0px} ${3:40px} ${4:0px};
|
||||
$0]]></text>
|
||||
<description>margin: T R B L</description>
|
||||
<tag>margin</tag>
|
||||
</snippet>
|
||||
<snippet id="margin-6">
|
||||
<text><![CDATA[margin: ${1:20px} ${2:0px};
|
||||
$0]]></text>
|
||||
<description>margin: V H</description>
|
||||
<tag>margin</tag>
|
||||
</snippet>
|
||||
<snippet id="marker">
|
||||
<text><![CDATA[marker-offset: auto;
|
||||
$0]]></text>
|
||||
<description>marker-offset: auto</description>
|
||||
<tag>marker</tag>
|
||||
</snippet>
|
||||
<snippet id="marker-1">
|
||||
<text><![CDATA[marker-offset: ${1:10px};
|
||||
$0]]></text>
|
||||
<description>marker-offset: length</description>
|
||||
<tag>marker</tag>
|
||||
</snippet>
|
||||
<snippet id="overflow">
|
||||
<text><![CDATA[overflow: ${1:visible/hidden/scroll/auto};
|
||||
$0]]></text>
|
||||
<description>overflow: type</description>
|
||||
<tag>overflow</tag>
|
||||
</snippet>
|
||||
<snippet id="padding">
|
||||
<text><![CDATA[padding: ${1:20px};
|
||||
$0]]></text>
|
||||
<description>padding: all</description>
|
||||
<tag>padding</tag>
|
||||
</snippet>
|
||||
<snippet id="margin-7">
|
||||
<text><![CDATA[padding-bottom: ${1:20px};
|
||||
$0]]></text>
|
||||
<description>padding-bottom: length</description>
|
||||
<tag>margin</tag>
|
||||
</snippet>
|
||||
<snippet id="margin-8">
|
||||
<text><![CDATA[padding-left: ${1:20px};
|
||||
$0]]></text>
|
||||
<description>padding-left: length</description>
|
||||
<tag>margin</tag>
|
||||
</snippet>
|
||||
<snippet id="margin-9">
|
||||
<text><![CDATA[padding-right: ${1:20px};
|
||||
$0]]></text>
|
||||
<description>padding-right: length</description>
|
||||
<tag>margin</tag>
|
||||
</snippet>
|
||||
<snippet id="margin-10">
|
||||
<text><![CDATA[padding-top: ${1:20px};
|
||||
$0]]></text>
|
||||
<description>padding-top: length</description>
|
||||
<tag>margin</tag>
|
||||
</snippet>
|
||||
<snippet id="padding-1">
|
||||
<text><![CDATA[padding: ${1:20px} ${2:0px} ${3:40px} ${4:0px};
|
||||
$0]]></text>
|
||||
<description>padding: T R B L</description>
|
||||
<tag>padding</tag>
|
||||
</snippet>
|
||||
<snippet id="padding-2">
|
||||
<text><![CDATA[padding: ${1:20px} ${2:0px};
|
||||
$0]]></text>
|
||||
<description>padding: V H</description>
|
||||
<tag>padding</tag>
|
||||
</snippet>
|
||||
<snippet id="position">
|
||||
<text><![CDATA[position: ${1:static/relative/absolute/fixed};
|
||||
$0]]></text>
|
||||
<description>position: type</description>
|
||||
<tag>position</tag>
|
||||
</snippet>
|
||||
<snippet id="{">
|
||||
<text><![CDATA[{
|
||||
/* $1 */
|
||||
$0
|
||||
]]></text>
|
||||
<description>properties { }</description>
|
||||
<tag>{</tag>
|
||||
</snippet>
|
||||
<snippet id="text">
|
||||
<text><![CDATA[text-align: ${1:left/right/center/justify};
|
||||
$0]]></text>
|
||||
<description>text-align: left/center/right</description>
|
||||
<tag>text</tag>
|
||||
</snippet>
|
||||
<snippet id="text-1">
|
||||
<text><![CDATA[text-decoration: ${1:none/underline/overline/line-through/blink};
|
||||
$0]]></text>
|
||||
<description>text-decoration: none/underline/overline/line-through/blink</description>
|
||||
<tag>text</tag>
|
||||
</snippet>
|
||||
<snippet id="text-2">
|
||||
<text><![CDATA[text-indent: ${1:10p}x;
|
||||
$0]]></text>
|
||||
<description>text-indent: length</description>
|
||||
<tag>text</tag>
|
||||
</snippet>
|
||||
<snippet id="text-3">
|
||||
<text><![CDATA[text-shadow: #${1:DDD} ${2:10px} ${3:10px} ${4:2px};
|
||||
$0]]></text>
|
||||
<description>text-shadow: color-hex x y blur</description>
|
||||
<tag>text</tag>
|
||||
</snippet>
|
||||
<snippet id="text-4">
|
||||
<text><![CDATA[text-shadow: rgb(${1:255},${2:255},${3:255}) ${4:10px} ${5:10px} ${6:2px};
|
||||
$0]]></text>
|
||||
<description>text-shadow: color-rgb x y blur</description>
|
||||
<tag>text</tag>
|
||||
</snippet>
|
||||
<snippet id="text-5">
|
||||
<text><![CDATA[text-shadow: none;
|
||||
$0]]></text>
|
||||
<description>text-shadow: none</description>
|
||||
<tag>text</tag>
|
||||
</snippet>
|
||||
<snippet id="text-6">
|
||||
<text><![CDATA[text-transform: ${1:capitalize/uppercase/lowercase};
|
||||
$0]]></text>
|
||||
<description>text-transform: capitalize/upper/lower</description>
|
||||
<tag>text</tag>
|
||||
</snippet>
|
||||
<snippet id="text-7">
|
||||
<text><![CDATA[text-transform: none;
|
||||
$0]]></text>
|
||||
<description>text-transform: none</description>
|
||||
<tag>text</tag>
|
||||
</snippet>
|
||||
<snippet id="vertical">
|
||||
<text><![CDATA[vertical-align: ${1:baseline/sub/super/top/text-top/middle/bottom/text-bottom/length/%};
|
||||
$0]]></text>
|
||||
<description>vertical-align: type</description>
|
||||
<tag>vertical</tag>
|
||||
</snippet>
|
||||
<snippet id="visibility">
|
||||
<text><![CDATA[visibility: ${1:visible/hidden/collapse};
|
||||
$0]]></text>
|
||||
<description>visibility: type</description>
|
||||
<tag>visibility</tag>
|
||||
</snippet>
|
||||
<snippet id="white">
|
||||
<text><![CDATA[white-space: ${1:normal/pre/nowrap};
|
||||
$0]]></text>
|
||||
<description>white-space: normal/pre/nowrap</description>
|
||||
<tag>white</tag>
|
||||
</snippet>
|
||||
<snippet id="word">
|
||||
<text><![CDATA[word-spacing: ${1:10px};
|
||||
$0]]></text>
|
||||
<description>word-spacing: length</description>
|
||||
<tag>word</tag>
|
||||
</snippet>
|
||||
<snippet id="word-1">
|
||||
<text><![CDATA[word-spacing: normal;
|
||||
$0]]></text>
|
||||
<description>word-spacing: normal</description>
|
||||
<tag>word</tag>
|
||||
</snippet>
|
||||
<snippet id="z">
|
||||
<text><![CDATA[z-index: $1;
|
||||
$0]]></text>
|
||||
<description>z-index: index</description>
|
||||
<tag>z</tag>
|
||||
</snippet>
|
||||
</snippets>
|
118
plugins/snippets/data/docbook.xml
Executable file
118
plugins/snippets/data/docbook.xml
Executable file
@@ -0,0 +1,118 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="docbook">
|
||||
<!-- useful snippets from xml set -->
|
||||
<snippet id="<">
|
||||
<text><![CDATA[<${1}>$0</${1}>]]></text>
|
||||
<description>XML tag</description>
|
||||
<tag><</tag>
|
||||
</snippet>
|
||||
<snippet id="menuchoice">
|
||||
<text><![CDATA[<menuchoice><guimenu>$1</guimenu><guimenuitem>$2</guimenuitem></menuchoice>
|
||||
]]></text>
|
||||
<tag>menu</tag>
|
||||
<description>menuchoice</description>
|
||||
<accelerator />
|
||||
</snippet>
|
||||
<snippet id="keycombo">
|
||||
<text><![CDATA[<keycombo><keycap>${1:Ctrl}</keycap><keycap>${2}</keycap></keycombo>]]></text>
|
||||
<tag>key</tag>
|
||||
<description>keycombo</description>
|
||||
<accelerator/>
|
||||
</snippet>
|
||||
<snippet id="sect">
|
||||
<text><![CDATA[<sect${1} id="${2}">
|
||||
<title>${3}</title>
|
||||
</sect${1}>]]></text>
|
||||
<tag>sect</tag>
|
||||
<description>sect*</description>
|
||||
<accelerator/>
|
||||
</snippet>
|
||||
<snippet id="app">
|
||||
<text><![CDATA[<application>&app;</application>]]></text>
|
||||
<tag>app</tag>
|
||||
<description>app entity</description>
|
||||
<accelerator/>
|
||||
</snippet>
|
||||
<snippet id="appwrap">
|
||||
<text><![CDATA[<application>$GEDIT_SELECTED_TEXT</application>]]></text>
|
||||
<tag>application</tag>
|
||||
<description>application tag</description>
|
||||
<accelerator/>
|
||||
</snippet>
|
||||
<snippet id="enclose">
|
||||
<text><![CDATA[<${1}>$GEDIT_SELECTED_TEXT</${1}>]]></text>
|
||||
<tag>enclose</tag>
|
||||
<description>enclose selected text</description>
|
||||
<accelerator/>
|
||||
</snippet>
|
||||
<snippet id="itemizedlist">
|
||||
<text><![CDATA[<itemizedlist>
|
||||
<listitem>
|
||||
<para>${1}</para>
|
||||
</listitem>
|
||||
</itemizedlist>]]></text>
|
||||
<tag>ul</tag>
|
||||
<description>itemized list</description>
|
||||
<accelerator/>
|
||||
</snippet>
|
||||
<snippet id="orderedlist">
|
||||
<text><![CDATA[<orderedlist>
|
||||
<listitem>
|
||||
<para>${1}</para>
|
||||
</listitem>
|
||||
</orderedlist>]]></text>
|
||||
<tag>ol</tag>
|
||||
<description>ordered list</description>
|
||||
<accelerator/>
|
||||
</snippet>
|
||||
<snippet id="listitem">
|
||||
<text><![CDATA[<listitem>
|
||||
<para>${1}</para>
|
||||
</listitem>]]></text>
|
||||
<tag>li</tag>
|
||||
<description>list item</description>
|
||||
<accelerator/>
|
||||
</snippet>
|
||||
<snippet id="variablelist">
|
||||
<text><![CDATA[<variablelist>
|
||||
$1
|
||||
</variablelist>]]></text>
|
||||
<tag>vl</tag>
|
||||
<description>variablelist</description>
|
||||
<accelerator/>
|
||||
</snippet>
|
||||
<snippet id="varlistentry">
|
||||
<text><![CDATA[<varlistentry><term>${1}</term>
|
||||
<listitem>
|
||||
<para>${2}</para>
|
||||
</listitem>
|
||||
</varlistentry>]]></text>
|
||||
<tag>vli</tag>
|
||||
<description>variablelist entry</description>
|
||||
<accelerator/>
|
||||
</snippet>
|
||||
<snippet id="closepara">
|
||||
<text><![CDATA[</para>]]></text>
|
||||
<tag>/</tag>
|
||||
<description>para close</description>
|
||||
<accelerator/>
|
||||
</snippet>
|
||||
<snippet id="openpara">
|
||||
<text><![CDATA[<para>]]></text>
|
||||
<tag>p</tag>
|
||||
<description>para open</description>
|
||||
<accelerator/>
|
||||
</snippet>
|
||||
<snippet id="http">
|
||||
<text><![CDATA[<ulink type="http" url="$1">$2</ulink>]]></text>
|
||||
<tag>http</tag>
|
||||
<description>ulink http</description>
|
||||
<accelerator/>
|
||||
</snippet>
|
||||
<snippet id="yelp">
|
||||
<text><![CDATA[<ulink type="help" url="$1">$2</ulink>]]></text>
|
||||
<tag>help</tag>
|
||||
<description>ulink mate help</description>
|
||||
<accelerator/>
|
||||
</snippet>
|
||||
</snippets>
|
164
plugins/snippets/data/fortran.xml
Executable file
164
plugins/snippets/data/fortran.xml
Executable file
@@ -0,0 +1,164 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<snippets language="fortran">
|
||||
<snippet id="c">
|
||||
<text><![CDATA[character(len=${1:10}) :: $0]]></text>
|
||||
<tag>c</tag>
|
||||
<description>character</description>
|
||||
</snippet>
|
||||
<snippet id="cl">
|
||||
<text><![CDATA[close(${1:unit}, status='${2:keep}')]]></text>
|
||||
<tag>cl</tag>
|
||||
<description>close</description>
|
||||
</snippet>
|
||||
<snippet id="do">
|
||||
<text><![CDATA[do ${1:i}=$2, $3, ${4:1}
|
||||
${0:source}
|
||||
end do]]></text>
|
||||
<tag>do</tag>
|
||||
<description>do ... end do</description>
|
||||
</snippet>
|
||||
<snippet id="func">
|
||||
<text><![CDATA[function ${1:name}( ${2:parameter} )
|
||||
${3:integer/real ::} $1
|
||||
${4:integer/real ::} $2
|
||||
|
||||
${0:source}
|
||||
|
||||
$1 = !result
|
||||
end function]]></text>
|
||||
<tag>func</tag>
|
||||
<description>function</description>
|
||||
</snippet>
|
||||
<snippet id="ifel">
|
||||
<text><![CDATA[if( $1 ) then
|
||||
${2:source}
|
||||
else
|
||||
${0:source}
|
||||
end if]]></text>
|
||||
<tag>ifel</tag>
|
||||
<description>if ... else ... end if</description>
|
||||
</snippet>
|
||||
<snippet id="if">
|
||||
<text><![CDATA[if( $1 ) then
|
||||
${0:source}
|
||||
end if]]></text>
|
||||
<tag>if</tag>
|
||||
<description>if ... end if</description>
|
||||
</snippet>
|
||||
<snippet id="i">
|
||||
<text><![CDATA[integer(kind=${1:4}) :: $0]]></text>
|
||||
<tag>i</tag>
|
||||
<description>integer</description>
|
||||
</snippet>
|
||||
<snippet id="ida">
|
||||
<text><![CDATA[integer(kind=${1:4}), dimension(${2::}), allocatable :: $0]]></text>
|
||||
<tag>ida</tag>
|
||||
<description>integerdimalloc</description>
|
||||
</snippet>
|
||||
<snippet id="id">
|
||||
<text><![CDATA[integer(kind=${1:4}), dimension(${2::}) :: $0]]></text>
|
||||
<tag>id</tag>
|
||||
<description>integerdim</description>
|
||||
</snippet>
|
||||
<snippet id="l">
|
||||
<text><![CDATA[logical(kind=${1:1}) :: $0]]></text>
|
||||
<tag>l</tag>
|
||||
<description>logical</description>
|
||||
</snippet>
|
||||
<snippet id="mod">
|
||||
<text><![CDATA[module ${1:name}
|
||||
implicit none
|
||||
${2:integer/real ::} $3
|
||||
|
||||
${4:contains}
|
||||
|
||||
${0:source}
|
||||
end module]]></text>
|
||||
<tag>mod</tag>
|
||||
<description>module</description>
|
||||
</snippet>
|
||||
<snippet id="op">
|
||||
<text><![CDATA[open(${1:unit}, file='${2:name}', status='${3:new}')]]></text>
|
||||
<tag>op</tag>
|
||||
<description>open</description>
|
||||
</snippet>
|
||||
<snippet id="prog">
|
||||
<text><![CDATA[program ${1:name}
|
||||
implicit none
|
||||
|
||||
${0:source}
|
||||
end program]]></text>
|
||||
<tag>prog</tag>
|
||||
<description>program</description>
|
||||
</snippet>
|
||||
<snippet id="re">
|
||||
<text><![CDATA[read(unit=${1:*},fmt=${2:*}) $0]]></text>
|
||||
<tag>re</tag>
|
||||
<description>read</description>
|
||||
</snippet>
|
||||
<snippet id="r">
|
||||
<text><![CDATA[real(kind=${1:8}) :: $0]]></text>
|
||||
<tag>r</tag>
|
||||
<description>real</description>
|
||||
</snippet>
|
||||
<snippet id="rda">
|
||||
<text><![CDATA[real(kind=${1:8}), dimension(${2::}), allocatable :: $0]]></text>
|
||||
<tag>rda</tag>
|
||||
<description>realdimalloc</description>
|
||||
</snippet>
|
||||
<snippet id="rd">
|
||||
<text><![CDATA[real(kind=${1:8}), dimension(${2::}) :: $0]]></text>
|
||||
<tag>rd</tag>
|
||||
<description>realdim</description>
|
||||
</snippet>
|
||||
<snippet id="rec">
|
||||
<text><![CDATA[recursive function ${1:name}( ${2:parameter} ) result( ${3:res} )
|
||||
${4:integer/real ::} $3
|
||||
${5:integer/real ::} $2
|
||||
|
||||
${0:source}
|
||||
|
||||
$3 = !result
|
||||
end function]]></text>
|
||||
<tag>rec</tag>
|
||||
<description>recursivfunc</description>
|
||||
</snippet>
|
||||
<snippet id="sel">
|
||||
<text><![CDATA[select case( $1 )
|
||||
case( $2 )
|
||||
${3:source}
|
||||
case default
|
||||
${0:source}
|
||||
end select]]></text>
|
||||
<tag>sel</tag>
|
||||
<description>select</description>
|
||||
</snippet>
|
||||
<snippet id="sub">
|
||||
<text><![CDATA[subroutine ${1:name}( ${2:parameter} )
|
||||
${3:integer/real ::} $2
|
||||
|
||||
${0:source}
|
||||
end subroutine]]></text>
|
||||
<tag>sub</tag>
|
||||
<description>subroutine</description>
|
||||
</snippet>
|
||||
<snippet id="t">
|
||||
<text><![CDATA[type :: ${1:name}
|
||||
${2:integer/real ::} $0
|
||||
end type $1]]></text>
|
||||
<tag>t</tag>
|
||||
<description>type</description>
|
||||
</snippet>
|
||||
<snippet id="dow">
|
||||
<text><![CDATA[do while( ${1} )
|
||||
${0:source}
|
||||
end do]]></text>
|
||||
<tag>dow</tag>
|
||||
<description>while</description>
|
||||
</snippet>
|
||||
<snippet id="wr">
|
||||
<text><![CDATA[write(unit=${1:*},fmt=${2:*}) "$3", $0]]></text>
|
||||
<tag>wr</tag>
|
||||
<description>write</description>
|
||||
</snippet>
|
||||
</snippets>
|
2
plugins/snippets/data/global.xml
Executable file
2
plugins/snippets/data/global.xml
Executable file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets/>
|
14
plugins/snippets/data/haskell.xml
Executable file
14
plugins/snippets/data/haskell.xml
Executable file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="Haskell">
|
||||
<snippet id="mod">
|
||||
<text><![CDATA[module ${1:Main} where
|
||||
$0]]></text>
|
||||
<description>module</description>
|
||||
<tag>mod</tag>
|
||||
</snippet>
|
||||
<snippet id="\">
|
||||
<text><![CDATA[\\${1:t} -> ${1:t}]]></text>
|
||||
<description>\t -> t</description>
|
||||
<tag>\</tag>
|
||||
</snippet>
|
||||
</snippets>
|
246
plugins/snippets/data/html.xml
Executable file
246
plugins/snippets/data/html.xml
Executable file
@@ -0,0 +1,246 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="HTML">
|
||||
<snippet id="doctype">
|
||||
<text><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
||||
"http://www.w3.org/TR/html4/strict.dtd">
|
||||
]]></text>
|
||||
<description>HTML — 4.01 Strict</description>
|
||||
<tag>doctype</tag>
|
||||
</snippet>
|
||||
<snippet id="doctype-1">
|
||||
<text><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
||||
]]></text>
|
||||
<description>XHTML — 1.0 Frameset</description>
|
||||
<tag>doctype</tag>
|
||||
</snippet>
|
||||
<snippet id="doctype-2">
|
||||
<text><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
]]></text>
|
||||
<description>XHTML — 1.0 Strict</description>
|
||||
<tag>doctype</tag>
|
||||
</snippet>
|
||||
<snippet id="doctype-3">
|
||||
<text><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
]]></text>
|
||||
<description>XHTML — 1.0 Transitional</description>
|
||||
<tag>doctype</tag>
|
||||
</snippet>
|
||||
<snippet id="doctype-4">
|
||||
<text><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
]]></text>
|
||||
<description>XHTML — 1.1</description>
|
||||
<tag>doctype</tag>
|
||||
</snippet>
|
||||
<snippet id="doctype-5">
|
||||
<text><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
]]></text>
|
||||
<description>HTML — 4.0 Transitional</description>
|
||||
<tag>doctype</tag>
|
||||
</snippet>
|
||||
<snippet id="author">
|
||||
<text><![CDATA[<meta name="author" content="${1:author}" />
|
||||
$0]]></text>
|
||||
<tag>author</tag>
|
||||
<description>Author</description>
|
||||
</snippet>
|
||||
<snippet id="date">
|
||||
<text><![CDATA[<meta name="date" content="$<1: import time; return time.strftime("%Y-%m-%d") >" />
|
||||
$0]]></text>
|
||||
<tag>date</tag>
|
||||
<description>Date</description>
|
||||
</snippet>
|
||||
<snippet id="ref">
|
||||
<text><![CDATA[<a href="${1:http://somesite.com/}">${2:$GEDIT_SELECTED_TEXT}</a>
|
||||
]]></text>
|
||||
<accelerator><![CDATA[<Shift><Alt>l]]></accelerator>
|
||||
<description>Wrap Selection as Link</description>
|
||||
<tag>ref</tag>
|
||||
</snippet>
|
||||
<snippet id="open/close">
|
||||
<text><![CDATA[<${1:p}>$GEDIT_SELECTED_TEXT</${1}>]]></text>
|
||||
<accelerator><![CDATA[<Shift><Alt>w]]></accelerator>
|
||||
<description>Wrap Selection in Open/Close Tag</description>
|
||||
</snippet>
|
||||
<snippet id="mailto">
|
||||
<text><![CDATA[<a href="mailto:${1:joe@example.com}?subject=${2:feedback}">${3:email me}</a> $0]]></text>
|
||||
<description>Mail Anchor</description>
|
||||
<tag>mailto</tag>
|
||||
</snippet>
|
||||
<snippet id="base">
|
||||
<text><![CDATA[<base href="$1" ${2}/>$0]]></text>
|
||||
<description>Base</description>
|
||||
<tag>base</tag>
|
||||
</snippet>
|
||||
<snippet id="body">
|
||||
<text><![CDATA[<body id="${1:ID} " onload="$2"}>
|
||||
$0
|
||||
</body>]]></text>
|
||||
<description>Body</description>
|
||||
<tag>body</tag>
|
||||
</snippet>
|
||||
<snippet id="br">
|
||||
<text><![CDATA[<br />
|
||||
$0]]></text>
|
||||
<accelerator><![CDATA[<Shift><Control>space]]></accelerator>
|
||||
<description>Br</description>
|
||||
</snippet>
|
||||
<snippet id="button">
|
||||
<text><![CDATA[<button type="button" name="${1:name}" value="${2:caption}" onclick="$3" />$4
|
||||
]]></text>
|
||||
<tag>button</tag>
|
||||
<description>Button</description>
|
||||
</snippet>
|
||||
<snippet id="div">
|
||||
<text><![CDATA[<div ${1}>
|
||||
${0:$GEDIT_SELECTED_TEXT}
|
||||
</div>]]></text>
|
||||
<description>Div</description>
|
||||
<tag>div</tag>
|
||||
</snippet>
|
||||
<snippet id="file">
|
||||
<text><![CDATA[<input type="file" name="${1:name}" size="$2" accept="$3" />$0
|
||||
]]></text>
|
||||
<tag>file</tag>
|
||||
<description>File</description>
|
||||
</snippet>
|
||||
<snippet id="form">
|
||||
<text><![CDATA[<form action="${1}" method="${2:get}">
|
||||
$0
|
||||
|
||||
<p><input type="submit" value="${3:Continue →}" /></p>
|
||||
</form>]]></text>
|
||||
<description>Form</description>
|
||||
<tag>form</tag>
|
||||
</snippet>
|
||||
<snippet id="h">
|
||||
<text><![CDATA[<h${1:1} id="${2}">${3:$GEDIT_SELECTED_TEXT}</h${1}>
|
||||
$0]]></text>
|
||||
<description>Heading</description>
|
||||
<tag>h</tag>
|
||||
</snippet>
|
||||
<snippet id="head">
|
||||
<text><![CDATA[<head>
|
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
||||
<title>${1:Page Title}</title>
|
||||
$0
|
||||
</head>]]></text>
|
||||
<description>Head</description>
|
||||
<tag>head</tag>
|
||||
</snippet>
|
||||
<snippet id="image">
|
||||
<text><![CDATA[<img src="${1:path/to/file}" alt="${2:description}" title="${3:description}" width="$4" height="$5" />$0]]></text>
|
||||
<tag>img</tag>
|
||||
<description>Image</description>
|
||||
</snippet>
|
||||
<snippet id="input">
|
||||
<text><![CDATA[<input type="${1:[button,checkbox,file,hidden,image,password,radio,reset,submit,text]}" name="${2:some_name}" value="$3" id="${5}" />]]></text>
|
||||
<description>Input</description>
|
||||
<tag>input</tag>
|
||||
</snippet>
|
||||
<snippet id="li">
|
||||
<text><![CDATA[<li>$1</li>$0]]></text>
|
||||
<tag>li</tag>
|
||||
<description>List Element</description>
|
||||
</snippet>
|
||||
<snippet id="link">
|
||||
<text><![CDATA[<link rel="${1:stylesheet}" href="${2:/css/master.css}" type="text/css" media="${3:screen}" title="${4:no title}" charset="${5:utf-8}" />]]></text>
|
||||
<description>Link</description>
|
||||
<tag>link</tag>
|
||||
</snippet>
|
||||
<snippet id="meta">
|
||||
<text><![CDATA[<meta name="${1:name}" content="${2:content}" />]]></text>
|
||||
<description>Meta</description>
|
||||
<tag>meta</tag>
|
||||
</snippet>
|
||||
<snippet id="nbsp">
|
||||
<text><![CDATA[ ]]></text>
|
||||
<accelerator><![CDATA[<Control><Alt>space]]></accelerator>
|
||||
<description>Non-Breaking Space</description>
|
||||
</snippet>
|
||||
<snippet id="noscript">
|
||||
<text><![CDATA[<noscript>$1</noscript>$0]]></text>
|
||||
<tag>noscript</tag>
|
||||
<description>Noscript</description>
|
||||
</snippet>
|
||||
<snippet id="option">
|
||||
<text><![CDATA[<option value="${1:value}">$2</option>$0]]></text>
|
||||
<tag>option</tag>
|
||||
<description>Option</description>
|
||||
</snippet>
|
||||
<snippet id="script">
|
||||
<text><![CDATA[<script type="text/javascript" language="javascript" charset="utf-8">
|
||||
// <![CDATA[
|
||||
$0
|
||||
// ]]]]><![CDATA[>
|
||||
</script>]]></text>
|
||||
<description>Script</description>
|
||||
<tag>script</tag>
|
||||
</snippet>
|
||||
<snippet id="scriptsrc">
|
||||
<text><![CDATA[<script src="$1" type="text/javascript" language="${2:javascript}" charset="${3:utf-8}" />]]></text>
|
||||
<description>Script With External Source</description>
|
||||
<tag>scriptsrc</tag>
|
||||
</snippet>
|
||||
<snippet id="select">
|
||||
<text><![CDATA[<select name="${1:name}">
|
||||
<option value="${2:value}">$3</option>
|
||||
$4
|
||||
</select>$0
|
||||
]]></text>
|
||||
<tag>select</tag>
|
||||
<description>Select</description>
|
||||
</snippet>
|
||||
<snippet id="span">
|
||||
<text><![CDATA[<span ${1}>$2</span>$0]]></text>
|
||||
<tag>span</tag>
|
||||
<description>Span</description>
|
||||
</snippet>
|
||||
<snippet id="style">
|
||||
<text><![CDATA[<style type="text/css" media="screen">
|
||||
/* <![CDATA[ */
|
||||
$0
|
||||
/* ]]]]><![CDATA[> */
|
||||
</style>
|
||||
]]></text>
|
||||
<description>Style</description>
|
||||
<tag>style</tag>
|
||||
</snippet>
|
||||
<snippet id="table">
|
||||
<text><![CDATA[<table border="${1:0}" cellspacing="${2:0}" cellpadding="${3:0}">
|
||||
<tr><th>${4:Header}</th></tr>
|
||||
<tr><td>${5:Data}</td></tr>
|
||||
$0
|
||||
</table>]]></text>
|
||||
<description>Table</description>
|
||||
<tag>table</tag>
|
||||
</snippet>
|
||||
<snippet id="textarea">
|
||||
<text><![CDATA[<textarea name="${1:Name}" rows="${2:8}" cols="${3:40}">$0</textarea>]]></text>
|
||||
<description>Text Area</description>
|
||||
<tag>textarea</tag>
|
||||
</snippet>
|
||||
<snippet id="title">
|
||||
<text><![CDATA[<title>${1:Page Title}</title>]]></text>
|
||||
<description>Title</description>
|
||||
<tag>title</tag>
|
||||
</snippet>
|
||||
<snippet id="tr">
|
||||
<text><![CDATA[<tr><td>$1</td></tr>
|
||||
$0]]></text>
|
||||
<tag>tr</tag>
|
||||
<description>Table Row</description>
|
||||
</snippet>
|
||||
<snippet id="ul">
|
||||
<text><![CDATA[<ul>
|
||||
<li>$1</li>
|
||||
$2
|
||||
</ul>
|
||||
$0]]></text>
|
||||
<tag>ul</tag>
|
||||
<description>Unordered List</description>
|
||||
</snippet>
|
||||
</snippets>
|
49
plugins/snippets/data/idl.xml
Executable file
49
plugins/snippets/data/idl.xml
Executable file
@@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="IDL">
|
||||
<snippet id="mod">
|
||||
<text><![CDATA[module ${1:name}
|
||||
{
|
||||
$0
|
||||
};
|
||||
]]></text>
|
||||
<tag>mod</tag>
|
||||
<description>Module</description>
|
||||
</snippet>
|
||||
<snippet id="if">
|
||||
<text><![CDATA[interface ${1:name}
|
||||
{
|
||||
$0
|
||||
};
|
||||
]]></text>
|
||||
<tag>if</tag>
|
||||
<description>Interface</description>
|
||||
</snippet>
|
||||
<snippet id="str">
|
||||
<text><![CDATA[struct ${1:name}
|
||||
{
|
||||
$0
|
||||
};
|
||||
]]></text>
|
||||
<tag>str</tag>
|
||||
<description>Struct</description>
|
||||
</snippet>
|
||||
<snippet id="exc">
|
||||
<text><![CDATA[exception ${1:name}
|
||||
{
|
||||
$0
|
||||
};
|
||||
]]></text>
|
||||
<tag>exc</tag>
|
||||
<description>Exception</description>
|
||||
</snippet>
|
||||
<snippet id="seq">
|
||||
<text><![CDATA[sequence<${1:type}> ]]></text>
|
||||
<tag>seq</tag>
|
||||
<description>Sequence</description>
|
||||
</snippet>
|
||||
<snippet id="tseq">
|
||||
<text><![CDATA[typedef sequence<${1:type}> ${0:newtype};]]></text>
|
||||
<tag>tseq</tag>
|
||||
<description>Typedef Sequence</description>
|
||||
</snippet>
|
||||
</snippets>
|
91
plugins/snippets/data/java.xml
Executable file
91
plugins/snippets/data/java.xml
Executable file
@@ -0,0 +1,91 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="Java">
|
||||
<snippet id="cd">
|
||||
<text><![CDATA[private static final ${1:String} ${2:var} = "$0";]]></text>
|
||||
<description>const def</description>
|
||||
<tag>cd</tag>
|
||||
</snippet>
|
||||
<snippet id="ife">
|
||||
<text><![CDATA[if ($1) { // $2
|
||||
|
||||
$0
|
||||
|
||||
} else { // $3
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
]]></text>
|
||||
<description>if .. else</description>
|
||||
<tag>ife</tag>
|
||||
</snippet>
|
||||
<snippet id="if">
|
||||
<text><![CDATA[if ($1) { // $2
|
||||
$0
|
||||
}]]></text>
|
||||
<description>if</description>
|
||||
<tag>if</tag>
|
||||
</snippet>
|
||||
<snippet id="log">
|
||||
<text><![CDATA[/** Logger for this class and subclasses. */
|
||||
protected final Log log = LogFactory.getLog(getClass());
|
||||
]]></text>
|
||||
<description>logger</description>
|
||||
<tag>log</tag>
|
||||
</snippet>
|
||||
<snippet id="tcf">
|
||||
<text><![CDATA[try {
|
||||
$2
|
||||
} catch (${1:Exception} e) {
|
||||
$3
|
||||
} finally {
|
||||
$4
|
||||
}
|
||||
$0]]></text>
|
||||
<description>try .. catch .. finally</description>
|
||||
<tag>tcf</tag>
|
||||
</snippet>
|
||||
<snippet id="while">
|
||||
<text><![CDATA[while ($1) { // $2
|
||||
$0
|
||||
}]]></text>
|
||||
<description>while statement</description>
|
||||
<tag>while</tag>
|
||||
</snippet>
|
||||
<snippet id="main">
|
||||
<text><![CDATA[public static void main(String[] args) {
|
||||
${1:System.exit(0)};
|
||||
}]]></text>
|
||||
<description>main</description>
|
||||
<tag>main</tag>
|
||||
</snippet>
|
||||
<snippet id="sout">
|
||||
<text><![CDATA[System.out.println("${1}");
|
||||
$0
|
||||
]]></text>
|
||||
<description>System.out.println</description>
|
||||
<tag>sout</tag>
|
||||
</snippet>
|
||||
<snippet id="try/catch">
|
||||
<text><![CDATA[try {
|
||||
$GEDIT_SELECTED_TEXT
|
||||
}
|
||||
catch (Exception e) {
|
||||
${1:e.printStackTrace();}
|
||||
}
|
||||
$0]]></text>
|
||||
<accelerator><![CDATA[<Shift><Alt>t]]></accelerator>
|
||||
<description>Wrap Selection in Try/Catch</description>
|
||||
</snippet>
|
||||
<snippet id="tc">
|
||||
<text><![CDATA[try {
|
||||
$2
|
||||
} catch (${1:Exception} e) {
|
||||
$3
|
||||
}
|
||||
$0]]></text>
|
||||
<tag>tc</tag>
|
||||
<description>try .. catch</description>
|
||||
</snippet>
|
||||
</snippets>
|
11
plugins/snippets/data/javascript.xml
Executable file
11
plugins/snippets/data/javascript.xml
Executable file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="JavaScript">
|
||||
<snippet id="fun">
|
||||
<text><![CDATA[function ${1:function_name} (${2:first_argument})
|
||||
{
|
||||
${0:# body...}
|
||||
}]]></text>
|
||||
<description>function</description>
|
||||
<tag>fun</tag>
|
||||
</snippet>
|
||||
</snippets>
|
9
plugins/snippets/data/lang/Makefile.am
Executable file
9
plugins/snippets/data/lang/Makefile.am
Executable file
@@ -0,0 +1,9 @@
|
||||
# Python snippets plugin
|
||||
lang_DATA = \
|
||||
snippets.lang
|
||||
|
||||
langdir = $(GEDIT_PLUGINS_DATA_DIR)/snippets/lang
|
||||
|
||||
EXTRA_DIST = $(lang_DATA)
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
162
plugins/snippets/data/lang/snippets.lang
Executable file
162
plugins/snippets/data/lang/snippets.lang
Executable file
@@ -0,0 +1,162 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
|
||||
Author: Jesse van den Kieboom <jesse@icecrew.nl>
|
||||
Copyright (C) 2007-2008 Jesse van den Kieboom <jesse@icecrew.nl>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA.
|
||||
|
||||
-->
|
||||
<language id="snippets" name="Snippets" hidden="true" version="2.0">
|
||||
<styles>
|
||||
<style id="placeholder-bounds" name="Placeholder begin and end" map-to="def:function"/>
|
||||
<style id="default-value" name="Default Value" map-to="def:string"/>
|
||||
<style id="single-placeholder" name="Single Placeholder" map-to="def:decimal"/>
|
||||
<style id="shell-placeholder" name="Shell Placeholder" map-to="def:preprocessor"/>
|
||||
<style id="python-placeholder" name="Python Placeholder" map-to="def:preprocessor"/>
|
||||
<style id="regex-placeholder" name="Regular Expression Placeholder" map-to="def:preprocessor"/>
|
||||
<style id="tabstop" name="Tabstop" map-to="def:decimal"/>
|
||||
<style id="placeholder-ref" name="Placeholder Reference" map-to="def:decimal"/>
|
||||
<style id="placeholder-def" name="Placeholder Default" map-to="def:string"/>
|
||||
<style id="escape" name="Escape" map-to="def:special-char"/>
|
||||
<style id="environmental-var" name="Environmental Variable" map-to="def:string"/>
|
||||
<style id="seperator" name="Seperator" map-to="def:shebang"/>
|
||||
<style id="regex-pattern" name="Regular Expression Pattern" map-to="def:string"/>
|
||||
<style id="replace-pattern" name="Regular Expression Replace Pattern" map-to="def:string"/>
|
||||
<style id="modifier" name="Modifier" map-to="def:keyword"/>
|
||||
</styles>
|
||||
|
||||
<definitions>
|
||||
<define-regex id="number">[0-9]+</define-regex>
|
||||
<define-regex id="tabstop">\s*((\%{number})(:))</define-regex>
|
||||
<define-regex id="number-list" extended="true">\s*(\[(\%{number}(,\%{number})*)\](:))</define-regex>
|
||||
<define-regex id="environment">\$[A-Z_]+</define-regex>
|
||||
<define-regex id="regex-pattern">((?:\\[/]|\\}|[^/}])+)</define-regex>
|
||||
|
||||
<context id="escape" style-ref="escape">
|
||||
<match>\\\$</match>
|
||||
</context>
|
||||
<context id="single-placeholder" style-ref="single-placeholder">
|
||||
<match>\$\%{number}|\${\%{number}}</match>
|
||||
</context>
|
||||
<context id="simple-placeholder-def" style-ref="default-value">
|
||||
<start>\${\%{tabstop}</start>
|
||||
<end>}</end>
|
||||
<include>
|
||||
<context sub-pattern="0" style-ref="placeholder-bounds" where="start"/>
|
||||
<context sub-pattern="0" style-ref="placeholder-bounds" where="end"/>
|
||||
<context sub-pattern="2" where="start" style-ref="tabstop"/>
|
||||
<context sub-pattern="3" where="start" style-ref="seperator"/>
|
||||
<context>
|
||||
<match>\\}</match>
|
||||
</context>
|
||||
<context ref="escape"/>
|
||||
<context ref="environmental-variable"/>
|
||||
</include>
|
||||
</context>
|
||||
<context id="simple-placeholder">
|
||||
<include>
|
||||
<context ref="single-placeholder"/>
|
||||
<context ref="simple-placeholder-def"/>
|
||||
</include>
|
||||
</context>
|
||||
<context id="shell-placeholder-contents">
|
||||
<include>
|
||||
<context ref="escape"/>
|
||||
<context ref="environmental-variable"/>
|
||||
<context ref="single-placeholder"/>
|
||||
</include>
|
||||
</context>
|
||||
<context id="shell-placeholder">
|
||||
<include>
|
||||
<context style-ref="shell-placeholder">
|
||||
<start>\$\(\%{tabstop}?</start>
|
||||
<end>\)</end>
|
||||
<include>
|
||||
<context sub-pattern="0" style-ref="placeholder-bounds" where="start"/>
|
||||
<context sub-pattern="0" style-ref="placeholder-bounds" where="end"/>
|
||||
<context sub-pattern="2" where="start" style-ref="tabstop"/>
|
||||
<context sub-pattern="3" where="start" style-ref="seperator"/>
|
||||
<context ref="shell-placeholder-contents"/>
|
||||
<context>
|
||||
<match>\\\)</match>
|
||||
</context>
|
||||
</include>
|
||||
</context>
|
||||
<context style-ref="shell-placeholder">
|
||||
<start>`\%{tabstop}?</start>
|
||||
<end>`</end>
|
||||
<include>
|
||||
<context sub-pattern="0" style-ref="placeholder-bounds" where="start"/>
|
||||
<context sub-pattern="0" style-ref="placeholder-bounds" where="end"/>
|
||||
<context sub-pattern="2" where="start" style-ref="tabstop"/>
|
||||
<context sub-pattern="3" where="start" style-ref="seperator"/>
|
||||
<context ref="shell-placeholder-contents"/>
|
||||
<context>
|
||||
<match>\\`</match>
|
||||
</context>
|
||||
</include>
|
||||
</context>
|
||||
</include>
|
||||
</context>
|
||||
<context id="python-placeholder">
|
||||
<start>\$<\%{tabstop}?\%{number-list}?</start>
|
||||
<end>></end>
|
||||
<include>
|
||||
<context sub-pattern="0" style-ref="placeholder-bounds" where="start"/>
|
||||
<context sub-pattern="0" style-ref="placeholder-bounds" where="end"/>
|
||||
<context sub-pattern="2" where="start" style-ref="tabstop"/>
|
||||
<context sub-pattern="3" where="start" style-ref="seperator"/>
|
||||
<context sub-pattern="5" where="start" style-ref="tabstop"/>
|
||||
<context sub-pattern="7" where="start" style-ref="seperator"/>
|
||||
<context>
|
||||
<match>\\></match>
|
||||
</context>
|
||||
<context ref="escape"/>
|
||||
<context ref="environmental-variable"/>
|
||||
<context ref="single-placeholder"/>
|
||||
<context ref="python:python"/>
|
||||
</include>
|
||||
</context>
|
||||
<context id="regex-placeholder" style-ref="regex-placeholder">
|
||||
<match>(\${)\%{tabstop}?(?:\s*(?:(\%{number})|(\%{environment})))/\%{regex-pattern}/\%{regex-pattern}(?:[/]([a-zA-Z]*))?(})</match>
|
||||
<include>
|
||||
<context sub-pattern="1" style-ref="placeholder-bounds"/>
|
||||
<context sub-pattern="10" style-ref="placeholder-bounds"/>
|
||||
<context sub-pattern="3" style-ref="tabstop"/>
|
||||
<context sub-pattern="4" style-ref="seperator"/>
|
||||
<context sub-pattern="5" style-ref="tabstop"/>
|
||||
<context sub-pattern="6" style-ref="environmental-var"/>
|
||||
<context sub-pattern="7" style-ref="regex-pattern"/>
|
||||
<context sub-pattern="8" style-ref="replace-pattern"/>
|
||||
<context sub-pattern="9" style-ref="modifier"/>
|
||||
</include>
|
||||
</context>
|
||||
<context id="environmental-variable" style-ref="environmental-var">
|
||||
<match>\%{environment}</match>
|
||||
</context>
|
||||
<context id="snippets">
|
||||
<include>
|
||||
<context ref="escape"/>
|
||||
<context ref="regex-placeholder"/>
|
||||
<context ref="simple-placeholder"/>
|
||||
<context ref="shell-placeholder"/>
|
||||
<context ref="python-placeholder"/>
|
||||
<context ref="environmental-variable"/>
|
||||
</include>
|
||||
</context>
|
||||
</definitions>
|
||||
</language>
|
38
plugins/snippets/data/latex.xml
Executable file
38
plugins/snippets/data/latex.xml
Executable file
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="LaTeX">
|
||||
<snippet id="command">
|
||||
<text><![CDATA[{\\${1:bf} $GEDIT_SELECTED_TEXT}]]></text>
|
||||
<accelerator><![CDATA[<Shift><Alt>w]]></accelerator>
|
||||
<description>Wrap Selection in Command</description>
|
||||
</snippet>
|
||||
<snippet id="$">
|
||||
<text><![CDATA[\[
|
||||
$1
|
||||
\]]]></text>
|
||||
<description>Displaymath</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="itd">
|
||||
<text><![CDATA[\item[${1:description}] ${0:item}]]></text>
|
||||
<description>\item[description]</description>
|
||||
<tag>itd</tag>
|
||||
</snippet>
|
||||
<snippet id="sec">
|
||||
<text><![CDATA[\section{${1:section name}}\label{${2:label}}
|
||||
]]></text>
|
||||
<description>Section</description>
|
||||
<tag>sec</tag>
|
||||
</snippet>
|
||||
<snippet id="sub">
|
||||
<text><![CDATA[\subsection{${1:subsection name}}\label{${2:label}}
|
||||
]]></text>
|
||||
<description>Sub Section</description>
|
||||
<tag>sub</tag>
|
||||
</snippet>
|
||||
<snippet id="ssub">
|
||||
<text><![CDATA[\subsubsection{${1:subsubsection name}}\label{${2:label}}
|
||||
]]></text>
|
||||
<description>Sub Sub Section</description>
|
||||
<tag>ssub</tag>
|
||||
</snippet>
|
||||
</snippets>
|
207
plugins/snippets/data/mallard.xml
Executable file
207
plugins/snippets/data/mallard.xml
Executable file
@@ -0,0 +1,207 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<snippets language="mallard">
|
||||
<snippet>
|
||||
<text><![CDATA[<app>${1:Application's name}</app>$0]]></text>
|
||||
<tag>app</tag>
|
||||
<description>app</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<![CDATA[$0]]]]><![CDATA[>]]></text>
|
||||
<tag>cdata</tag>
|
||||
<description>cdata</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<cite>${1:Joe Example}</cite>]]></text>
|
||||
<tag>cite</tag>
|
||||
<description>cite</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<cite date="$1">${2:Joe Example}</cite>]]></text>
|
||||
<tag>cited</tag>
|
||||
<description>cite</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<desc>${1:Description}</desc>]]></text>
|
||||
<tag>desc</tag>
|
||||
<description>desc</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<em>$1</em>]]></text>
|
||||
<tag>em</tag>
|
||||
<description>em</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<figure>
|
||||
<title>${1:Title}</title>
|
||||
<desc>${2:Short description}</desc>
|
||||
<media type="${3:image}" mime="${5:image/png}" src="${4:figures/image.png}" >
|
||||
</media>
|
||||
</figure>]]></text>
|
||||
<tag>figure</tag>
|
||||
<description>figure</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<file>${0:filename}</file>]]></text>
|
||||
<tag>file</tag>
|
||||
<description>file</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<gui>$1</gui>$2]]></text>
|
||||
<tag>g</tag>
|
||||
<description>gui</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<guiseq><gui>$1</gui><gui>$2</gui></guiseq>]]></text>
|
||||
<tag>q</tag>
|
||||
<description>guiseq</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<link href="http://$1/"<$2></link>]]></text>
|
||||
<tag>http</tag>
|
||||
<description>http</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<item><p>$0</p></item>]]></text>
|
||||
<tag>item</tag>
|
||||
<description>item</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<key>$1</key>]]></text>
|
||||
<tag>key</tag>
|
||||
<description>key</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<keyseq><key>$1</key><key>$2</key></keyseq>]]></text>
|
||||
<tag>keys</tag>
|
||||
<description>keystroke</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<link type="${1:guide}" xref="${2:index}"/>]]></text>
|
||||
<tag>link</tag>
|
||||
<description>link</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<list>
|
||||
<title>${2:Title}</title>
|
||||
<item><p>${3}</p></item>
|
||||
<item><p>${4}</p></item>
|
||||
</list>]]></text>
|
||||
<tag>list</tag>
|
||||
<description>list</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<listing>
|
||||
<title>${1:Title}</title>
|
||||
<desc>${2:Short description}</desc>
|
||||
<code><![CDATA[
|
||||
$0
|
||||
]]]]><![CDATA[></code>
|
||||
</listing>]]></text>
|
||||
<tag>listing</tag>
|
||||
<description>listing</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<note style="${1:advanced|bug|important|tip|warning}">
|
||||
<p>
|
||||
$0
|
||||
</p>
|
||||
</note>]]></text>
|
||||
<tag>note</tag>
|
||||
<description>note</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<list type="numbered">
|
||||
<item><p>$1</p></item>
|
||||
<item><p>$2</p></item>
|
||||
<item><p>$3</p></item>
|
||||
</list> ]]></text>
|
||||
<tag>num</tag>
|
||||
<description>numbered list</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<page xmlns="http://projectmallard.org/1.0/"
|
||||
type="${1:topic}" style="${2:task}"
|
||||
id="${3:id}">
|
||||
|
||||
<info>
|
||||
<desc>${4:Short description}</desc>
|
||||
<revision pkgversion="${5:program_version}" version="${6:document_version}" date="$<7: import datetime as d; return d.date.isoformat(d.date.today())>" status="${8:incomplete}"/>
|
||||
<credit type="author">
|
||||
<name>$<9:
|
||||
import pwd, os
|
||||
try:
|
||||
return pwd.getpwuid(os.getuid()).pw_gecos.split(',')[0]
|
||||
except KeyError:
|
||||
return 'Joe Example' ></name>
|
||||
<email>$<10:
|
||||
import os
|
||||
return os.getenv('EMAIL', 'joe@example.com') ></email>
|
||||
</credit>
|
||||
</info>
|
||||
|
||||
$0
|
||||
|
||||
</page>]]></text>
|
||||
<tag>page</tag>
|
||||
<description>page</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[</p>]]></text>
|
||||
<tag>/</tag>
|
||||
<description>p close</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<p>]]></text>
|
||||
<tag>p</tag>
|
||||
<description>p open</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<quote>
|
||||
<p>$0</p>
|
||||
</quote>]]></text>
|
||||
<tag>quote</tag>
|
||||
<description>quote</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<section id="${1}">
|
||||
<title>${2:Section Title}</title>
|
||||
<p>$0</p>
|
||||
</section>]]></text>
|
||||
<tag>section</tag>
|
||||
<description>section</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<steps>
|
||||
<item><p>$0</p></item>
|
||||
</steps>]]></text>
|
||||
<tag>steps</tag>
|
||||
<description>steps</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<terms>
|
||||
<title>$1</title>
|
||||
<item><p>$2</p></item>
|
||||
</terms>]]></text>
|
||||
<tag>terms</tag>
|
||||
<description>terms</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<note style="tip">
|
||||
<p>$1</p>
|
||||
</note> ]]></text>
|
||||
<tag>tip</tag>
|
||||
<description>tip note</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<title>$1</title>]]></text>
|
||||
<tag>title</tag>
|
||||
<description>title</description>
|
||||
</snippet>
|
||||
<snippet>
|
||||
<text><![CDATA[<note style="warning>
|
||||
<p>$1</p>
|
||||
</note> ]]></text>
|
||||
<tag>warn</tag>
|
||||
<description>warning note</description>
|
||||
</snippet>
|
||||
</snippets>
|
126
plugins/snippets/data/perl.xml
Executable file
126
plugins/snippets/data/perl.xml
Executable file
@@ -0,0 +1,126 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="Perl">
|
||||
<snippet id="perl">
|
||||
<text><![CDATA[#!/usr/bin/perl
|
||||
$0]]></text>
|
||||
<tag>perl</tag>
|
||||
<description>#!/usr/bin/perl</description>
|
||||
</snippet>
|
||||
<snippet id="ife">
|
||||
<text><![CDATA[if ($1) {
|
||||
${2:# body...}
|
||||
} else {
|
||||
${3:# else...}
|
||||
}
|
||||
]]></text>
|
||||
<description>Conditional if..else</description>
|
||||
<tag>ife</tag>
|
||||
</snippet>
|
||||
<snippet id="ifee">
|
||||
<text><![CDATA[if ($1) {
|
||||
${2:# body...}
|
||||
} elsif ($3) {
|
||||
${4:# elsif...}
|
||||
} else {
|
||||
${5:# else...}
|
||||
}
|
||||
]]></text>
|
||||
<description>Conditional if..elsif..else</description>
|
||||
<tag>ifee</tag>
|
||||
</snippet>
|
||||
<snippet id="xunless">
|
||||
<text><![CDATA[${1:expression} unless ${2:condition};
|
||||
]]></text>
|
||||
<description>Conditional one-line</description>
|
||||
<tag>xunless</tag>
|
||||
</snippet>
|
||||
<snippet id="xif">
|
||||
<text><![CDATA[${1:expression} if ${2:condition};
|
||||
]]></text>
|
||||
<description>Conditional one-line</description>
|
||||
<tag>xif</tag>
|
||||
</snippet>
|
||||
<snippet id="eval">
|
||||
<text><![CDATA[eval {
|
||||
${1:# do something risky...}
|
||||
};
|
||||
if ($@) {
|
||||
${2:# handle failure...}
|
||||
}
|
||||
]]></text>
|
||||
<description>Try/Except</description>
|
||||
<tag>eval</tag>
|
||||
</snippet>
|
||||
<snippet id="fore">
|
||||
<text><![CDATA[foreach ${1:my $${2:x} }(@${3:array}) {
|
||||
${4:# body...}
|
||||
}
|
||||
]]></text>
|
||||
<description>Loop</description>
|
||||
<tag>fore</tag>
|
||||
</snippet>
|
||||
<snippet id="for">
|
||||
<text><![CDATA[for (my $${1:var} = 0; $$1 < ${2:expression}; $$1++) {
|
||||
${3:# body...}
|
||||
}
|
||||
]]></text>
|
||||
<description>Loop</description>
|
||||
<tag>for</tag>
|
||||
</snippet>
|
||||
<snippet id="sub">
|
||||
<text><![CDATA[sub ${1:function_name} {
|
||||
${2:# body...}
|
||||
}
|
||||
]]></text>
|
||||
<description>Function</description>
|
||||
<tag>sub</tag>
|
||||
</snippet>
|
||||
<snippet id="hashpointer">
|
||||
<text><![CDATA[ => ]]></text>
|
||||
<accelerator><![CDATA[<Shift><Alt>l]]></accelerator>
|
||||
<description>hash pointer</description>
|
||||
</snippet>
|
||||
<snippet id="if">
|
||||
<text><![CDATA[if ($1) {
|
||||
${2:# body...}
|
||||
}
|
||||
]]></text>
|
||||
<description>Conditional</description>
|
||||
<tag>if</tag>
|
||||
</snippet>
|
||||
<snippet id="xfore">
|
||||
<text><![CDATA[${1:expression} foreach @${2:array};
|
||||
]]></text>
|
||||
<description>Loop one-line</description>
|
||||
<tag>xfore</tag>
|
||||
</snippet>
|
||||
<snippet id="xwhile">
|
||||
<text><![CDATA[${1:expression} while ${2:condition};
|
||||
]]></text>
|
||||
<description>Loop one-line</description>
|
||||
<tag>xwhile</tag>
|
||||
</snippet>
|
||||
<snippet id="slurp">
|
||||
<text><![CDATA[my $${1:var};
|
||||
{ local $/ = undef; local *FILE; open FILE, "<${2:file}"; $$1 = <FILE>; close FILE }
|
||||
]]></text>
|
||||
<description>Read File</description>
|
||||
<tag>slurp</tag>
|
||||
</snippet>
|
||||
<snippet id="unless">
|
||||
<text><![CDATA[unless ($1) {
|
||||
${2:# body...}
|
||||
}
|
||||
]]></text>
|
||||
<description>Conditional</description>
|
||||
<tag>unless</tag>
|
||||
</snippet>
|
||||
<snippet id="while">
|
||||
<text><![CDATA[while ($1) {
|
||||
${2:# body...}
|
||||
}
|
||||
]]></text>
|
||||
<description>Loop</description>
|
||||
<tag>while</tag>
|
||||
</snippet>
|
||||
</snippets>
|
224
plugins/snippets/data/php.xml
Executable file
224
plugins/snippets/data/php.xml
Executable file
@@ -0,0 +1,224 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="PHP">
|
||||
<snippet id="class">
|
||||
<text><![CDATA[#doc
|
||||
# classname: ${1:ClassName}
|
||||
# scope: ${2:PUBLIC}
|
||||
#
|
||||
#/doc
|
||||
|
||||
class ${1:ClassName} ${3:extends AnotherClass}
|
||||
{
|
||||
# internal variables
|
||||
|
||||
# Constructor
|
||||
function __construct (${4:argument})
|
||||
{
|
||||
# code...
|
||||
$0
|
||||
}
|
||||
###
|
||||
|
||||
}
|
||||
###]]></text>
|
||||
<description>class ..</description>
|
||||
<tag>class</tag>
|
||||
</snippet>
|
||||
<snippet id="$">
|
||||
<text><![CDATA[\$_COOKIE['${1:variable}']]]></text>
|
||||
<description>COOKIE['..']</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="do">
|
||||
<text><![CDATA[do
|
||||
{
|
||||
# code...
|
||||
$0
|
||||
} while (${1:$a <= 10});]]></text>
|
||||
<description>do .. while ..</description>
|
||||
<tag>do</tag>
|
||||
</snippet>
|
||||
<snippet id="elseif">
|
||||
<text><![CDATA[elseif (${1:condition})
|
||||
{
|
||||
# code...
|
||||
$0
|
||||
}]]></text>
|
||||
<description>elseif ..</description>
|
||||
<tag>elseif</tag>
|
||||
</snippet>
|
||||
<snippet id="else">
|
||||
<text><![CDATA[else
|
||||
{
|
||||
# code...
|
||||
$0
|
||||
}]]></text>
|
||||
<description>else ..</description>
|
||||
<tag>else</tag>
|
||||
</snippet>
|
||||
<snippet id="$-1">
|
||||
<text><![CDATA[\$_ENV['${1:variable}']]]></text>
|
||||
<description>ENV['..']</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="$-2">
|
||||
<text><![CDATA[\$_FILES['${1:variable}']]]></text>
|
||||
<description>FILES['..']</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="foreach">
|
||||
<text><![CDATA[foreach ($${1:variable} as $${2:key} => $${3:value})
|
||||
{
|
||||
# code...
|
||||
$0:
|
||||
}]]></text>
|
||||
<description>foreach ..</description>
|
||||
<tag>foreach</tag>
|
||||
</snippet>
|
||||
<snippet id="for">
|
||||
<text><![CDATA[for ($${1:i} = ${2:0}; $${1:i} < $3; $${1:i}++)
|
||||
{
|
||||
# code...
|
||||
$0
|
||||
}]]></text>
|
||||
<description>for ..</description>
|
||||
<tag>for</tag>
|
||||
</snippet>
|
||||
<snippet id="function">
|
||||
<text><![CDATA[${1:public }function ${2:FunctionName}($3)
|
||||
{
|
||||
${0:# code...}
|
||||
}]]></text>
|
||||
<description>function ..</description>
|
||||
<tag>function</tag>
|
||||
</snippet>
|
||||
<snippet id="$-3">
|
||||
<text><![CDATA[\$_GET['${1:variable}']]]></text>
|
||||
<description>GET['..']</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="globals">
|
||||
<text><![CDATA[\$GLOBALS['${1:variable}']${2: =} ${3:something} ${4:;}]]></text>
|
||||
<description>$GLOBALS['..']</description>
|
||||
<tag>globals</tag>
|
||||
</snippet>
|
||||
<snippet id="if?">
|
||||
<text><![CDATA[$${1:retVal} = (${2:condition}) ? ${3:a} : ${4:b};]]></text>
|
||||
<description>$.. =</description>
|
||||
<tag>iff</tag>
|
||||
</snippet>
|
||||
<snippet id="ifelse">
|
||||
<text><![CDATA[if (${1:condition})
|
||||
{
|
||||
${2:# code...}
|
||||
}
|
||||
else
|
||||
{
|
||||
${3:# code...}
|
||||
}
|
||||
$0]]></text>
|
||||
<description>if .. else ..</description>
|
||||
<tag>ifelse</tag>
|
||||
</snippet>
|
||||
<snippet id="if">
|
||||
<text><![CDATA[if (${1:condition})
|
||||
{
|
||||
# code...
|
||||
$0
|
||||
}]]></text>
|
||||
<description>if ..</description>
|
||||
<tag>if</tag>
|
||||
</snippet>
|
||||
<snippet id="incl1">
|
||||
<text><![CDATA[include_once('${1:file}');$0]]></text>
|
||||
<description>include_once</description>
|
||||
<tag>inclo</tag>
|
||||
</snippet>
|
||||
<snippet id="incl">
|
||||
<text><![CDATA[include('${1:file}');$0]]></text>
|
||||
<description>include</description>
|
||||
<tag>incl</tag>
|
||||
</snippet>
|
||||
<snippet id="array">
|
||||
<text><![CDATA[$${1:arrayName} = array('$2'${3:,});]]></text>
|
||||
<description>$.. = array</description>
|
||||
<tag>array</tag>
|
||||
</snippet>
|
||||
<snippet id="php">
|
||||
<text><![CDATA[<?php
|
||||
|
||||
$0
|
||||
|
||||
?>]]></text>
|
||||
<description><?php .. ?></description>
|
||||
<tag>php</tag>
|
||||
</snippet>
|
||||
<snippet id="$-4">
|
||||
<text><![CDATA[\$_POST['${1:variable}']]]></text>
|
||||
<description>POST['..']</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="print">
|
||||
<text><![CDATA[print "${1:string}"${2: . };]]></text>
|
||||
<description>print ".."</description>
|
||||
<tag>print</tag>
|
||||
</snippet>
|
||||
<snippet id="$-5">
|
||||
<text><![CDATA[\$_REQUEST['${1:variable}']]]></text>
|
||||
<description>REQUEST['..']</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="req1">
|
||||
<text><![CDATA[require_once('${1:file}');]]></text>
|
||||
<description>require_once</description>
|
||||
<tag>reqo</tag>
|
||||
</snippet>
|
||||
<snippet id="req">
|
||||
<text><![CDATA[require('${1:file}');]]></text>
|
||||
<description>require</description>
|
||||
<tag>req</tag>
|
||||
</snippet>
|
||||
<snippet id="$-6">
|
||||
<text><![CDATA[\$_SERVER['${1:variable}']]]></text>
|
||||
<description>SERVER['..']</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="$-7">
|
||||
<text><![CDATA[\$_SESSION['${1:variable}']]]></text>
|
||||
<description>SESSION['..']</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="case">
|
||||
<text><![CDATA[case '${1:variable}':
|
||||
# code...
|
||||
$0
|
||||
break;]]></text>
|
||||
<description>case ..</description>
|
||||
<tag>case</tag>
|
||||
</snippet>
|
||||
<snippet id="switch">
|
||||
<text><![CDATA[switch (${1:variable})
|
||||
{
|
||||
case '${2:value}':
|
||||
${3:# code...}
|
||||
break;
|
||||
|
||||
$0
|
||||
|
||||
default:
|
||||
${4:# code...}
|
||||
break;
|
||||
}]]></text>
|
||||
<description>switch ..</description>
|
||||
<tag>switch</tag>
|
||||
</snippet>
|
||||
<snippet id="while">
|
||||
<text><![CDATA[while (${1:$a <= 10})
|
||||
{
|
||||
# code...
|
||||
$0
|
||||
}]]></text>
|
||||
<description>while ..</description>
|
||||
<tag>while</tag>
|
||||
</snippet>
|
||||
</snippets>
|
112
plugins/snippets/data/python.xml
Executable file
112
plugins/snippets/data/python.xml
Executable file
@@ -0,0 +1,112 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="Python">
|
||||
<snippet id="py">
|
||||
<text><![CDATA[#!/usr/bin/env python
|
||||
#-*- coding:utf-8 -*-
|
||||
|
||||
$0]]></text>
|
||||
<description>#!/usr/bin/env python</description>
|
||||
<tag>py</tag>
|
||||
</snippet>
|
||||
<snippet id="def">
|
||||
<text><![CDATA[def ${1:fname}(${2:self}):
|
||||
${3:pass}]]></text>
|
||||
<description>New Function</description>
|
||||
<tag>def</tag>
|
||||
</snippet>
|
||||
<snippet id="doc">
|
||||
<text><![CDATA["""
|
||||
$1
|
||||
"""
|
||||
$0]]></text>
|
||||
<description>doc string</description>
|
||||
<tag>doc</tag>
|
||||
</snippet>
|
||||
<snippet id="get">
|
||||
<text><![CDATA[def get$1(self): return self._$1]]></text>
|
||||
<description>New Get Method</description>
|
||||
<tag>get</tag>
|
||||
</snippet>
|
||||
<snippet id="class">
|
||||
<text><![CDATA[class ${1:ClassName} (${2:object}):
|
||||
|
||||
def __init__(self${3:,}):
|
||||
${4:pass}
|
||||
|
||||
$0]]></text>
|
||||
<description>New Class</description>
|
||||
<tag>class</tag>
|
||||
</snippet>
|
||||
<snippet id="for">
|
||||
<text><![CDATA[for ${1:i} in ${2:xrange}(${3:count}):
|
||||
$0]]></text>
|
||||
<description>for loop</description>
|
||||
<tag>for</tag>
|
||||
</snippet>
|
||||
<snippet id="from">
|
||||
<text><![CDATA[from $1 import $2
|
||||
$0]]></text>
|
||||
<description>from</description>
|
||||
<tag>from</tag>
|
||||
</snippet>
|
||||
<snippet id="if">
|
||||
<text><![CDATA[if ${1:condition}:
|
||||
$0]]></text>
|
||||
<description>if</description>
|
||||
<tag>if</tag>
|
||||
</snippet>
|
||||
<snippet id="elif">
|
||||
<text><![CDATA[elif ${1:condition}:
|
||||
$0]]></text>
|
||||
<description>elif</description>
|
||||
<tag>elif</tag>
|
||||
</snippet>
|
||||
<snippet id="else">
|
||||
<text><![CDATA[else:
|
||||
$0]]></text>
|
||||
<description>else</description>
|
||||
<tag>else</tag>
|
||||
</snippet>
|
||||
<snippet id="while">
|
||||
<text><![CDATA[while ${1:condition}:
|
||||
$0]]></text>
|
||||
<tag>while</tag>
|
||||
<description>while loop</description>
|
||||
</snippet>
|
||||
<snippet id="insert">
|
||||
<text><![CDATA["${1:$GEDIT_SELECTED_TEXT}"]]></text>
|
||||
<accelerator><![CDATA[<Control>2]]></accelerator>
|
||||
<description>Inside String: Insert "…"</description>
|
||||
</snippet>
|
||||
<snippet id="insert-1">
|
||||
<text><![CDATA['${1:$GEDIT_SELECTED_TEXT}']]></text>
|
||||
<accelerator><![CDATA[<Control>apostrophe]]></accelerator>
|
||||
<description>Inside String: Insert '…'</description>
|
||||
</snippet>
|
||||
<snippet id=".">
|
||||
<text><![CDATA[self.]]></text>
|
||||
<description>self</description>
|
||||
<tag>.</tag>
|
||||
</snippet>
|
||||
<snippet id="set">
|
||||
<text><![CDATA[def set$1(self, ${2:newValue}): self._$1 = $2]]></text>
|
||||
<description>New Set Method</description>
|
||||
<tag>set</tag>
|
||||
</snippet>
|
||||
<snippet id="try">
|
||||
<text><![CDATA[try:
|
||||
$1
|
||||
except ${2:Error}:
|
||||
$0]]></text>
|
||||
<tag>try</tag>
|
||||
<description>Try... Except</description>
|
||||
</snippet>
|
||||
<snippet id="main">
|
||||
<text><![CDATA[if __name__ == '__main__':
|
||||
${1:sys.exit(main())}
|
||||
|
||||
$0]]></text>
|
||||
<description>main</description>
|
||||
<tag>main</tag>
|
||||
</snippet>
|
||||
</snippets>
|
166
plugins/snippets/data/ruby.xml
Executable file
166
plugins/snippets/data/ruby.xml
Executable file
@@ -0,0 +1,166 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="Ruby">
|
||||
<snippet id="forin">
|
||||
<text><![CDATA[for ${1:element} in ${2:collection}
|
||||
${1:element}.$0
|
||||
end]]></text>
|
||||
<description>for .. in .. end</description>
|
||||
<tag>forin</tag>
|
||||
</snippet>
|
||||
<snippet id="inject">
|
||||
<text><![CDATA[inject(${1:object}) { |${2:injection}, ${3:element}| $0 }]]></text>
|
||||
<description>inject object</description>
|
||||
<tag>inject</tag>
|
||||
</snippet>
|
||||
<snippet id="reject">
|
||||
<text><![CDATA[reject { |${1:element}| ${1:element}.$0 }]]></text>
|
||||
<description>reject element</description>
|
||||
<tag>reject</tag>
|
||||
</snippet>
|
||||
<snippet id="select">
|
||||
<text><![CDATA[select { |${1:element}| ${1:element}.$0 }]]></text>
|
||||
<description>select element</description>
|
||||
<tag>select</tag>
|
||||
</snippet>
|
||||
<snippet id="ife">
|
||||
<text><![CDATA[if ${1:condition}
|
||||
$2
|
||||
else
|
||||
$3
|
||||
end]]></text>
|
||||
<description>if .. else .. end</description>
|
||||
<tag>ife</tag>
|
||||
</snippet>
|
||||
<snippet id="if">
|
||||
<text><![CDATA[if ${1:condition}
|
||||
$0
|
||||
end]]></text>
|
||||
<description>if .. end</description>
|
||||
<tag>if</tag>
|
||||
</snippet>
|
||||
<snippet id="case">
|
||||
<text><![CDATA[case ${1:object}
|
||||
when ${2:condition}
|
||||
$0
|
||||
end]]></text>
|
||||
<description>case .. end</description>
|
||||
<tag>case</tag>
|
||||
</snippet>
|
||||
<snippet id="begin">
|
||||
<text><![CDATA[begin
|
||||
$1
|
||||
rescue ${2:Exception} => ${3:e}
|
||||
$0
|
||||
end]]></text>
|
||||
<description>begin .. rescue .. end</description>
|
||||
<tag>begin</tag>
|
||||
</snippet>
|
||||
<snippet id="class">
|
||||
<text><![CDATA[class ${1:class_name}
|
||||
$0
|
||||
end]]></text>
|
||||
<description>class .. end</description>
|
||||
<tag>class</tag>
|
||||
</snippet>
|
||||
<snippet id="collecto">
|
||||
<text><![CDATA[collect do |${1:element}|
|
||||
${1:element}.$0
|
||||
end]]></text>
|
||||
<description>collect element do</description>
|
||||
<tag>collecto</tag>
|
||||
</snippet>
|
||||
<snippet id="collect">
|
||||
<text><![CDATA[collect { |${1:element}| ${1:element}.$0 }]]></text>
|
||||
<description>collect element</description>
|
||||
<tag>collect</tag>
|
||||
</snippet>
|
||||
<snippet id="def">
|
||||
<text><![CDATA[def ${1:method_name}
|
||||
$0
|
||||
end]]></text>
|
||||
<description>def .. end</description>
|
||||
<tag>def</tag>
|
||||
</snippet>
|
||||
<snippet id="do">
|
||||
<text><![CDATA[do
|
||||
$0
|
||||
end]]></text>
|
||||
<description>do .. end</description>
|
||||
<tag>do</tag>
|
||||
</snippet>
|
||||
<snippet id="doo">
|
||||
<text><![CDATA[do |${1:object}|
|
||||
$0
|
||||
end]]></text>
|
||||
<description>do |object| .. end</description>
|
||||
<tag>doo</tag>
|
||||
</snippet>
|
||||
<snippet id="eacho">
|
||||
<text><![CDATA[each do |${1:element}|
|
||||
${1:element}.$0
|
||||
end]]></text>
|
||||
<description>each element do</description>
|
||||
<tag>eacho</tag>
|
||||
</snippet>
|
||||
<snippet id="each">
|
||||
<text><![CDATA[each { |${1:element}| ${1:element}.$0 }]]></text>
|
||||
<description>each element</description>
|
||||
<tag>each</tag>
|
||||
</snippet>
|
||||
<snippet id="each_with_indexo">
|
||||
<text><![CDATA[each_with_index do |${1:element}, ${2:idx}|
|
||||
${1:element}.$0
|
||||
end]]></text>
|
||||
<description>each_with_index do</description>
|
||||
<tag>eachwithindexo</tag>
|
||||
</snippet>
|
||||
<snippet id="each_with_index">
|
||||
<text><![CDATA[each_with_index { |${1:element}, ${2:idx}| ${1:element}.$0 }]]></text>
|
||||
<description>each_with_index</description>
|
||||
<tag>eachwithindex</tag>
|
||||
</snippet>
|
||||
<snippet id=":">
|
||||
<text><![CDATA[:${1:key} => ${2:"value"}${3:, }]]></text>
|
||||
<description>hash pair</description>
|
||||
<tag>:</tag>
|
||||
</snippet>
|
||||
<snippet id="hashpointer">
|
||||
<text><![CDATA[ => ]]></text>
|
||||
<accelerator><![CDATA[<Shift><Alt>l]]></accelerator>
|
||||
<description>hash pointer</description>
|
||||
</snippet>
|
||||
<snippet id="injecto">
|
||||
<text><![CDATA[inject(${1:object}) do |${2:injection}, ${3:element}|
|
||||
$0
|
||||
end]]></text>
|
||||
<description>inject object do</description>
|
||||
<tag>injecto</tag>
|
||||
</snippet>
|
||||
<snippet id="rejecto">
|
||||
<text><![CDATA[reject do |${1:element}|
|
||||
${1:element}.$0
|
||||
end]]></text>
|
||||
<description>reject element do</description>
|
||||
<tag>rejecto</tag>
|
||||
</snippet>
|
||||
<snippet id="selecto">
|
||||
<text><![CDATA[select do |${1:element}|
|
||||
${1:element}.$0
|
||||
end]]></text>
|
||||
<description>select element do</description>
|
||||
<tag>selecto</tag>
|
||||
</snippet>
|
||||
<snippet id="unless">
|
||||
<text><![CDATA[unless ${1:condition}
|
||||
$0
|
||||
end]]></text>
|
||||
<description>unless</description>
|
||||
<tag>unless</tag>
|
||||
</snippet>
|
||||
<snippet id="when">
|
||||
<text><![CDATA[when ${1:condition}
|
||||
$0]]></text>
|
||||
<description>when</description>
|
||||
<tag>when</tag>
|
||||
</snippet>
|
||||
</snippets>
|
47
plugins/snippets/data/sh.xml
Executable file
47
plugins/snippets/data/sh.xml
Executable file
@@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="sh">
|
||||
<snippet id="elif">
|
||||
<text><![CDATA[elif [[ ${1:condition} ]]; then
|
||||
$0]]></text>
|
||||
<description>elif ..</description>
|
||||
<tag>elif</tag>
|
||||
</snippet>
|
||||
<snippet id="case">
|
||||
<text><![CDATA[case ${1:choice} in
|
||||
${2:first})
|
||||
$3
|
||||
;;
|
||||
*)
|
||||
$4
|
||||
;;
|
||||
esac]]></text>
|
||||
<description>case ..</description>
|
||||
<tag>case</tag>
|
||||
</snippet>
|
||||
<snippet id="for">
|
||||
<text><![CDATA[for (( ${1:i = 0}; ${2:i < 10}; ${3:i++} )); do
|
||||
$0
|
||||
done]]></text>
|
||||
<description>for .. done</description>
|
||||
<tag>for</tag>
|
||||
</snippet>
|
||||
<snippet id="if">
|
||||
<text><![CDATA[if [[ ${1:condition} ]]; then
|
||||
$0
|
||||
fi]]></text>
|
||||
<description>if .. then</description>
|
||||
<tag>if</tag>
|
||||
</snippet>
|
||||
<snippet id="sh">
|
||||
<text><![CDATA[#!/bin/sh
|
||||
$0]]></text>
|
||||
<description>#!/bin/sh</description>
|
||||
<tag>sh</tag>
|
||||
</snippet>
|
||||
<snippet id="bash">
|
||||
<text><![CDATA[#!/bin/bash
|
||||
$0]]></text>
|
||||
<description>#!/bin/bash</description>
|
||||
<tag>bash</tag>
|
||||
</snippet>
|
||||
</snippets>
|
98
plugins/snippets/data/snippets.xml
Executable file
98
plugins/snippets/data/snippets.xml
Executable file
@@ -0,0 +1,98 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="snippets">
|
||||
<snippet id="simple">
|
||||
<text><![CDATA[\${${1:n:default}}]]></text>
|
||||
<description>Simple Placeholder</description>
|
||||
<tag>simple</tag>
|
||||
</snippet>
|
||||
<snippet id="simple-fallback">
|
||||
<text><![CDATA[\${${1:n:}[${2:default1,default2}]}]]></text>
|
||||
<description>Simple Fallback Placeholder</description>
|
||||
<tag>simplef</tag>
|
||||
</snippet>
|
||||
<snippet id="shell">
|
||||
<text><![CDATA[\$(${1:n:} ${2:shell code})]]></text>
|
||||
<description>Shell Placeholder</description>
|
||||
<tag>shell</tag>
|
||||
</snippet>
|
||||
<snippet id="python">
|
||||
<text><![CDATA[\$<${1:n:} ${2:[refs]:} return 'python code' >]]></text>
|
||||
<description>Python Placeholder</description>
|
||||
<tag>python</tag>
|
||||
</snippet>
|
||||
<snippet id="regex">
|
||||
<text><![CDATA[\${${1:n:} ${2:input}/${3:regex-pattern}/${4:replacement}/${5:modifiers}}]]></text>
|
||||
<description>Regular Expression Placeholder</description>
|
||||
<tag>regex</tag>
|
||||
</snippet>
|
||||
<snippet id="$-CURRENT_DOCUMENT_PATH">
|
||||
<text><![CDATA[\$GEDIT_CURRENT_DOCUMENT_PATH]]></text>
|
||||
<description>Gedit Current Document Path Variable</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="$-CURRENT_DOCUMENT_NAME">
|
||||
<text><![CDATA[\$GEDIT_CURRENT_DOCUMENT_NAME]]></text>
|
||||
<description>Gedit Current Document Name Variable</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="$-CURRENT_DOCUMENT_URI">
|
||||
<text><![CDATA[\$GEDIT_CURRENT_DOCUMENT_URI]]></text>
|
||||
<description>Gedit Current Document Uri Variable</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="$-CURRENT_DOCUMENT_SCHEME">
|
||||
<text><![CDATA[\$GEDIT_CURRENT_DOCUMENT_SCHEME]]></text>
|
||||
<description>Gedit Current Document Scheme Variable</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="$-CURRENT_DOCUMENT_TYPE">
|
||||
<text><![CDATA[\$GEDIT_CURRENT_DOCUMENT_TYPE]]></text>
|
||||
<description>Gedit Current Document Type Variable</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="$-DOCUMENTS_URI">
|
||||
<text><![CDATA[\$GEDIT_DOCUMENTS_URI]]></text>
|
||||
<description>Gedit Documents Uri Variable</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="$-DOCUMENTS_PATH">
|
||||
<text><![CDATA[\$GEDIT_DOCUMENTS_PATH]]></text>
|
||||
<description>Gedit Documents Path Variable</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="$-SELECTED_TEXT">
|
||||
<text><![CDATA[\$GEDIT_SELECTED_TEXT]]></text>
|
||||
<description>Gedit Selected Text Variable</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="$-CURRENT_WORD">
|
||||
<text><![CDATA[\$GEDIT_CURRENT_WORD]]></text>
|
||||
<description>Gedit Current Word Variable</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="$-CURRENT_LINE">
|
||||
<text><![CDATA[\$GEDIT_CURRENT_LINE]]></text>
|
||||
<description>Gedit Current Line Variable</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="$-CURRENT_LINE_NUMBER">
|
||||
<text><![CDATA[\$GEDIT_CURRENT_LINE_NUMBER]]></text>
|
||||
<description>Gedit Current Line Number Variable</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="$-DROP_FILENAME">
|
||||
<text><![CDATA[\$GEDIT_DROP_FILENAME]]></text>
|
||||
<description>Gedit Drop Filename Variable</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="$-DROP_REL_FILENAME">
|
||||
<text><![CDATA[\$GEDIT_DROP_REL_FILENAME]]></text>
|
||||
<description>Gedit Drop Relative Filename Variable</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
<snippet id="$-DROP_MIME_TYPE">
|
||||
<text><![CDATA[\$GEDIT_DROP_MIME_TYPE]]></text>
|
||||
<description>Gedit Drop Mime Type Variable</description>
|
||||
<tag>$</tag>
|
||||
</snippet>
|
||||
</snippets>
|
55
plugins/snippets/data/tcl.xml
Executable file
55
plugins/snippets/data/tcl.xml
Executable file
@@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="Tcl">
|
||||
<snippet id="foreach">
|
||||
<text><![CDATA[foreach ${1:var} ${2:$list} {
|
||||
${3}
|
||||
}
|
||||
]]></text>
|
||||
<description>foreach...</description>
|
||||
<tag>foreach</tag>
|
||||
</snippet>
|
||||
<snippet id="for">
|
||||
<text><![CDATA[for {${1:set i 0}} {${2:$i < $n}} {${3:incr i}} {
|
||||
${4}
|
||||
}
|
||||
]]></text>
|
||||
<description>for...</description>
|
||||
<tag>for</tag>
|
||||
</snippet>
|
||||
<snippet id="if">
|
||||
<text><![CDATA[if {${1:condition}} {
|
||||
${2}
|
||||
}
|
||||
]]></text>
|
||||
<description>if...</description>
|
||||
<tag>if</tag>
|
||||
</snippet>
|
||||
<snippet id="proc">
|
||||
<text><![CDATA[proc ${1:name} {${2:args}} \
|
||||
{
|
||||
${3}
|
||||
}
|
||||
]]></text>
|
||||
<description>proc...</description>
|
||||
<tag>proc</tag>
|
||||
</snippet>
|
||||
<snippet id="switch">
|
||||
<text><![CDATA[switch ${1:-exact} -- ${2:$var} {
|
||||
${3:match} {
|
||||
${4}
|
||||
}
|
||||
default {${5}}
|
||||
}
|
||||
]]></text>
|
||||
<description>switch...</description>
|
||||
<tag>switch</tag>
|
||||
</snippet>
|
||||
<snippet id="while">
|
||||
<text><![CDATA[while {${1:condition}} {
|
||||
${2}
|
||||
}
|
||||
]]></text>
|
||||
<description>while...</description>
|
||||
<tag>while</tag>
|
||||
</snippet>
|
||||
</snippets>
|
25
plugins/snippets/data/xml.xml
Executable file
25
plugins/snippets/data/xml.xml
Executable file
@@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="XML">
|
||||
<snippet id=""">
|
||||
<text><![CDATA[<${1:name} ${2:attr}="${3:value}">$0</${1}>]]></text>
|
||||
<description>Long Attribute Tag</description>
|
||||
<tag>"</tag>
|
||||
</snippet>
|
||||
<snippet id="<">
|
||||
<text><![CDATA[<${1:name}>$0</${1}>
|
||||
|
||||
]]></text>
|
||||
<description>Long Tag</description>
|
||||
<tag><</tag>
|
||||
</snippet>
|
||||
<snippet id=">">
|
||||
<text><![CDATA[<${1:name} />]]></text>
|
||||
<description>Short Tag</description>
|
||||
<tag>></tag>
|
||||
</snippet>
|
||||
<snippet id="cdata">
|
||||
<text><![CDATA[<![CDATA[$0]]]]><![CDATA[>]]></text>
|
||||
<tag>cdata</tag>
|
||||
<description>CDATA</description>
|
||||
</snippet>
|
||||
</snippets>
|
143
plugins/snippets/data/xslt.xml
Executable file
143
plugins/snippets/data/xslt.xml
Executable file
@@ -0,0 +1,143 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<snippets language="xslt">
|
||||
<snippet id="stylesheet">
|
||||
<text><![CDATA[<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
$0
|
||||
</xsl:stylesheet>
|
||||
]]></text>
|
||||
<description>StyleSheet</description>
|
||||
<tag>stylesheet</tag>
|
||||
</snippet>
|
||||
<snippet id="include">
|
||||
<text><![CDATA[<xsl:include href="$1"/>
|
||||
]]></text>
|
||||
<description>Include</description>
|
||||
<tag>inc</tag>
|
||||
</snippet>
|
||||
<snippet id="import">
|
||||
<text><![CDATA[<xsl:import href="$1"/>
|
||||
]]></text>
|
||||
<description>Import</description>
|
||||
<tag>imp</tag>
|
||||
</snippet>
|
||||
<snippet id="param">
|
||||
<text><![CDATA[<xsl:param name="$1"/>
|
||||
]]></text>
|
||||
<description>Parameter</description>
|
||||
<tag>param</tag>
|
||||
</snippet>
|
||||
<snippet id="template">
|
||||
<text><![CDATA[<xsl:template ${1:[match,name]}="$2" ${3:mode=""}>
|
||||
$0
|
||||
</xsl:template>
|
||||
]]></text>
|
||||
<description>Template</description>
|
||||
<tag>templ</tag>
|
||||
</snippet>
|
||||
<snippet id="variable-1">
|
||||
<text><![CDATA[<xsl:variable name="$1">
|
||||
$0
|
||||
</xsl:variable>
|
||||
]]></text>
|
||||
<description>Variable</description>
|
||||
<tag>var</tag>
|
||||
</snippet>
|
||||
<snippet id="variable-2">
|
||||
<text><![CDATA[<xsl:variable name="$1" select="$2"/>
|
||||
$0]]></text>
|
||||
<description>Variable with Select Attribute</description>
|
||||
<tag>var</tag>
|
||||
</snippet>
|
||||
<snippet id="choose">
|
||||
<text><![CDATA[<xsl:choose>
|
||||
<xsl:when test="$1">
|
||||
$2
|
||||
</xsl:when>
|
||||
$3
|
||||
</xsl:choose>
|
||||
]]></text>
|
||||
<description>Choose</description>
|
||||
<tag>choose</tag>
|
||||
</snippet>
|
||||
<snippet id="when">
|
||||
<text><![CDATA[<xsl:when test="$1">
|
||||
$2
|
||||
</xsl:when>
|
||||
$0]]></text>
|
||||
<description>When</description>
|
||||
<tag>when</tag>
|
||||
</snippet>
|
||||
<snippet id="otherwise">
|
||||
<text><![CDATA[<xsl:otherwise>
|
||||
$1
|
||||
</xsl:otherwise>
|
||||
$0]]></text>
|
||||
<description>Otherwise</description>
|
||||
<tag>otherwise</tag>
|
||||
</snippet>
|
||||
<snippet id="if">
|
||||
<text><![CDATA[<xsl:if test="$1">
|
||||
$2
|
||||
</xsl:if>
|
||||
$0]]></text>
|
||||
<description>If</description>
|
||||
<tag>if</tag>
|
||||
</snippet>
|
||||
<snippet id="value-of">
|
||||
<text><![CDATA[<xsl:value-of select="$1"/>
|
||||
]]></text>
|
||||
<description>Value of</description>
|
||||
<tag>val</tag>
|
||||
</snippet>
|
||||
<snippet id="element">
|
||||
<text><![CDATA[<xsl:element name="$1">
|
||||
</xsl:element>
|
||||
$0]]></text>
|
||||
<description>Element</description>
|
||||
<tag>elem</tag>
|
||||
</snippet>
|
||||
<snippet id="attribute">
|
||||
<text><![CDATA[<xsl:attribute name="$1">$2</xsl:attribute>
|
||||
$0]]></text>
|
||||
<description>Attribute</description>
|
||||
<tag>attr</tag>
|
||||
</snippet>
|
||||
<snippet id="text">
|
||||
<text><![CDATA[<xsl:text>${1:$GEDIT_SELECTED_TEXT}</xsl:text>
|
||||
]]></text>
|
||||
<description>Text</description>
|
||||
<tag>text</tag>
|
||||
</snippet>
|
||||
<snippet id="comment">
|
||||
<text><![CDATA[<xsl:comment>${1:$GEDIT_SELECTED_TEXT}</xsl:comment>
|
||||
]]></text>
|
||||
<description>Comment</description>
|
||||
<tag>comment</tag>
|
||||
</snippet>
|
||||
<snippet id="call-template">
|
||||
<text><![CDATA[<xsl:call-template name="$1"/>
|
||||
]]></text>
|
||||
<description>Call Template</description>
|
||||
<tag>call</tag>
|
||||
</snippet>
|
||||
<snippet id="apply-templates">
|
||||
<text><![CDATA[<xsl:apply-templates mode="$1" select="$2"/>
|
||||
$0]]></text>
|
||||
<description>Apply Templates</description>
|
||||
<tag>applyt</tag>
|
||||
</snippet>
|
||||
<snippet id="apply-imports">
|
||||
<text><![CDATA[<xsl:apply-imports/>
|
||||
]]></text>
|
||||
<description>Apply Imports</description>
|
||||
<tag>applyimp</tag>
|
||||
</snippet>
|
||||
<snippet id="with-param">
|
||||
<text><![CDATA[<xsl:with-param name="$1">
|
||||
$2
|
||||
</xsl:with-param>
|
||||
$0]]></text>
|
||||
<description>With Param</description>
|
||||
<tag>with</tag>
|
||||
</snippet>
|
||||
</snippets>
|
9
plugins/snippets/snippets.gedit-plugin.desktop.in
Executable file
9
plugins/snippets/snippets.gedit-plugin.desktop.in
Executable file
@@ -0,0 +1,9 @@
|
||||
[Gedit Plugin]
|
||||
Loader=python
|
||||
Module=snippets
|
||||
IAge=2
|
||||
_Name=Snippets
|
||||
_Description=Insert often-used pieces of text in a fast way
|
||||
Authors=Jesse van den Kieboom <jesse@icecrew.nl>
|
||||
Copyright=Copyright © 2005 Jesse van den Kieboom
|
||||
Website=http://www.gedit.org
|
165
plugins/snippets/snippets/Completion.py
Executable file
165
plugins/snippets/snippets/Completion.py
Executable file
@@ -0,0 +1,165 @@
|
||||
import gtksourceview2 as gsv
|
||||
import gobject
|
||||
import gedit
|
||||
import gtk
|
||||
|
||||
from Library import Library
|
||||
from LanguageManager import get_language_manager
|
||||
from Snippet import Snippet
|
||||
|
||||
class Proposal(gobject.GObject, gsv.CompletionProposal):
|
||||
def __init__(self, snippet):
|
||||
gobject.GObject.__init__(self)
|
||||
self._snippet = Snippet(snippet)
|
||||
|
||||
def snippet(self):
|
||||
return self._snippet.data
|
||||
|
||||
# Interface implementation
|
||||
def do_get_markup(self):
|
||||
return self._snippet.display()
|
||||
|
||||
def do_get_info(self):
|
||||
return self._snippet.data['text']
|
||||
|
||||
class Provider(gobject.GObject, gsv.CompletionProvider):
|
||||
def __init__(self, name, language_id, handler):
|
||||
gobject.GObject.__init__(self)
|
||||
|
||||
self.name = name
|
||||
self.info_widget = None
|
||||
self.proposals = []
|
||||
self.language_id = language_id
|
||||
self.handler = handler
|
||||
self.info_widget = None
|
||||
self.mark = None
|
||||
|
||||
theme = gtk.icon_theme_get_default()
|
||||
w, h = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU)
|
||||
|
||||
self.icon = theme.load_icon(gtk.STOCK_JUSTIFY_LEFT, w, 0)
|
||||
|
||||
def __del__(self):
|
||||
if self.mark:
|
||||
self.mark.get_buffer().delete_mark(self.mark)
|
||||
|
||||
def set_proposals(self, proposals):
|
||||
self.proposals = proposals
|
||||
|
||||
def mark_position(self, it):
|
||||
if not self.mark:
|
||||
self.mark = it.get_buffer().create_mark(None, it, True)
|
||||
else:
|
||||
self.mark.get_buffer().move_mark(self.mark, it)
|
||||
|
||||
def get_word(self, context):
|
||||
it = context.get_iter()
|
||||
|
||||
if it.starts_word() or it.starts_line() or not it.ends_word():
|
||||
return None
|
||||
|
||||
start = it.copy()
|
||||
|
||||
if start.backward_word_start():
|
||||
self.mark_position(start)
|
||||
return start.get_text(it)
|
||||
else:
|
||||
return None
|
||||
|
||||
def do_get_start_iter(self, context, proposal):
|
||||
if not self.mark or self.mark.get_deleted():
|
||||
return None
|
||||
|
||||
return self.mark.get_buffer().get_iter_at_mark(self.mark)
|
||||
|
||||
def do_match(self, context):
|
||||
return True
|
||||
|
||||
def get_proposals(self, word):
|
||||
if self.proposals:
|
||||
proposals = self.proposals
|
||||
else:
|
||||
proposals = Library().get_snippets(None)
|
||||
|
||||
if self.language_id:
|
||||
proposals += Library().get_snippets(self.language_id)
|
||||
|
||||
# Filter based on the current word
|
||||
if word:
|
||||
proposals = filter(lambda x: x['tag'].startswith(word), proposals)
|
||||
|
||||
return map(lambda x: Proposal(x), proposals)
|
||||
|
||||
def do_populate(self, context):
|
||||
proposals = self.get_proposals(self.get_word(context))
|
||||
context.add_proposals(self, proposals, True)
|
||||
|
||||
def do_get_name(self):
|
||||
return self.name
|
||||
|
||||
def do_activate_proposal(self, proposal, piter):
|
||||
return self.handler(proposal, piter)
|
||||
|
||||
def do_get_info_widget(self, proposal):
|
||||
if not self.info_widget:
|
||||
view = gedit.View(gedit.Document())
|
||||
manager = get_language_manager()
|
||||
|
||||
lang = manager.get_language('snippets')
|
||||
view.get_buffer().set_language(lang)
|
||||
|
||||
sw = gtk.ScrolledWindow()
|
||||
sw.add(view)
|
||||
|
||||
self.info_view = view
|
||||
self.info_widget = sw
|
||||
|
||||
return self.info_widget
|
||||
|
||||
def do_update_info(self, proposal, info):
|
||||
buf = self.info_view.get_buffer()
|
||||
|
||||
buf.set_text(proposal.get_info())
|
||||
buf.move_mark(buf.get_insert(), buf.get_start_iter())
|
||||
buf.move_mark(buf.get_selection_bound(), buf.get_start_iter())
|
||||
self.info_view.scroll_to_iter(buf.get_start_iter(), False)
|
||||
|
||||
info.set_sizing(-1, -1, False, False)
|
||||
info.process_resize()
|
||||
|
||||
def do_get_icon(self):
|
||||
return self.icon
|
||||
|
||||
def do_get_activation(self):
|
||||
return gsv.COMPLETION_ACTIVATION_USER_REQUESTED
|
||||
|
||||
class Defaults(gobject.GObject, gsv.CompletionProvider):
|
||||
def __init__(self, handler):
|
||||
gobject.GObject.__init__(self)
|
||||
|
||||
self.handler = handler
|
||||
self.proposals = []
|
||||
|
||||
def set_defaults(self, defaults):
|
||||
self.proposals = []
|
||||
|
||||
for d in defaults:
|
||||
self.proposals.append(gsv.CompletionItem(d))
|
||||
|
||||
def do_get_name(self):
|
||||
return ""
|
||||
|
||||
def do_activate_proposal(self, proposal, piter):
|
||||
return self.handler(proposal, piter)
|
||||
|
||||
def do_populate(self, context):
|
||||
context.add_proposals(self, self.proposals, True)
|
||||
|
||||
def do_get_activation(self):
|
||||
return gsv.COMPLETION_ACTIVATION_NONE
|
||||
|
||||
gobject.type_register(Proposal)
|
||||
gobject.type_register(Provider)
|
||||
gobject.type_register(Defaults)
|
||||
|
||||
# ex:ts=8:et:
|
1089
plugins/snippets/snippets/Document.py
Executable file
1089
plugins/snippets/snippets/Document.py
Executable file
File diff suppressed because it is too large
Load Diff
98
plugins/snippets/snippets/Exporter.py
Executable file
98
plugins/snippets/snippets/Exporter.py
Executable file
@@ -0,0 +1,98 @@
|
||||
import os
|
||||
import tempfile
|
||||
import sys
|
||||
import shutil
|
||||
|
||||
from snippets.Library import *
|
||||
import xml.etree.ElementTree as et
|
||||
from Helper import *
|
||||
|
||||
class Exporter:
|
||||
def __init__(self, filename, snippets):
|
||||
self.filename = filename
|
||||
self.set_snippets(snippets)
|
||||
|
||||
def set_snippets(self, snippets):
|
||||
self.snippets = {}
|
||||
|
||||
for snippet in snippets:
|
||||
lang = snippet.language()
|
||||
|
||||
if lang in self.snippets:
|
||||
self.snippets[lang].append(snippet)
|
||||
else:
|
||||
self.snippets[lang] = [snippet]
|
||||
|
||||
def export_xml(self, dirname, language, snippets):
|
||||
# Create the root snippets node
|
||||
root = et.Element('snippets')
|
||||
|
||||
# Create filename based on language
|
||||
if language:
|
||||
filename = os.path.join(dirname, language + '.xml')
|
||||
|
||||
# Set the language attribute
|
||||
root.attrib['language'] = language
|
||||
else:
|
||||
filename = os.path.join(dirname, 'global.xml')
|
||||
|
||||
# Add all snippets to the root node
|
||||
for snippet in snippets:
|
||||
root.append(snippet.to_xml())
|
||||
|
||||
# Write xml
|
||||
write_xml(root, filename, ('text', 'accelerator'))
|
||||
|
||||
def export_archive(self, cmd):
|
||||
dirname = tempfile.mkdtemp()
|
||||
|
||||
# Save current working directory and change to temporary directory
|
||||
curdir = os.getcwd()
|
||||
|
||||
try:
|
||||
os.chdir(dirname)
|
||||
|
||||
# Write snippet xml files
|
||||
for language, snippets in self.snippets.items():
|
||||
self.export_xml(dirname, language , snippets)
|
||||
|
||||
# Archive files
|
||||
status = os.system('%s "%s" *.xml' % (cmd, self.filename))
|
||||
finally:
|
||||
os.chdir(curdir)
|
||||
|
||||
if status != 0:
|
||||
return _('The archive "%s" could not be created' % self.filename)
|
||||
|
||||
# Remove the temporary directory
|
||||
shutil.rmtree(dirname)
|
||||
|
||||
def export_targz(self):
|
||||
self.export_archive('tar -c --gzip -f')
|
||||
|
||||
def export_tarbz2(self):
|
||||
self.export_archive('tar -c --bzip2 -f')
|
||||
|
||||
def export_tar(self):
|
||||
self.export_archive('tar -cf')
|
||||
|
||||
def run(self):
|
||||
dirname = os.path.dirname(self.filename)
|
||||
if not os.path.exists(dirname):
|
||||
return _('Target directory "%s" does not exist') % dirname
|
||||
|
||||
if not os.path.isdir(dirname):
|
||||
return _('Target directory "%s" is not a valid directory') % dirname
|
||||
|
||||
(root, ext) = os.path.splitext(self.filename)
|
||||
|
||||
actions = {'.tar.gz': self.export_targz,
|
||||
'.tar.bz2': self.export_tarbz2,
|
||||
'.tar': self.export_tar}
|
||||
|
||||
for k, v in actions.items():
|
||||
if self.filename.endswith(k):
|
||||
return v()
|
||||
|
||||
return self.export_targz()
|
||||
# ex:ts=8:et:
|
182
plugins/snippets/snippets/Helper.py
Executable file
182
plugins/snippets/snippets/Helper.py
Executable file
@@ -0,0 +1,182 @@
|
||||
# Gedit snippets plugin
|
||||
# Copyright (C) 2005-2006 Jesse van den Kieboom <jesse@icecrew.nl>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
import string
|
||||
from xml.sax import saxutils
|
||||
from xml.etree.ElementTree import *
|
||||
import re
|
||||
|
||||
import gtk
|
||||
from gtk import gdk
|
||||
|
||||
def message_dialog(par, typ, msg):
|
||||
d = gtk.MessageDialog(par, gtk.DIALOG_MODAL, typ, gtk.BUTTONS_OK, msg)
|
||||
d.set_property('use-markup', True)
|
||||
|
||||
d.run()
|
||||
d.destroy()
|
||||
|
||||
def compute_indentation(view, piter):
|
||||
line = piter.get_line()
|
||||
start = view.get_buffer().get_iter_at_line(line)
|
||||
end = start.copy()
|
||||
|
||||
ch = end.get_char()
|
||||
|
||||
while (ch.isspace() and ch != '\r' and ch != '\n' and \
|
||||
end.compare(piter) < 0):
|
||||
if not end.forward_char():
|
||||
break;
|
||||
|
||||
ch = end.get_char()
|
||||
|
||||
if start.equal(end):
|
||||
return ''
|
||||
|
||||
return start.get_slice(end)
|
||||
|
||||
def markup_escape(text):
|
||||
return saxutils.escape(text)
|
||||
|
||||
def spaces_instead_of_tabs(view, text):
|
||||
if not view.get_insert_spaces_instead_of_tabs():
|
||||
return text
|
||||
|
||||
return text.replace("\t", view.get_tab_width() * ' ')
|
||||
|
||||
def insert_with_indent(view, piter, text, indentfirst = True, context = None):
|
||||
text = spaces_instead_of_tabs(view, text)
|
||||
lines = text.split('\n')
|
||||
|
||||
view.get_buffer().set_data('GeditSnippetsPluginContext', context)
|
||||
|
||||
if len(lines) == 1:
|
||||
view.get_buffer().insert(piter, text)
|
||||
else:
|
||||
# Compute indentation
|
||||
indent = compute_indentation(view, piter)
|
||||
text = ''
|
||||
|
||||
for i in range(0, len(lines)):
|
||||
if indentfirst or i > 0:
|
||||
text += indent + lines[i] + '\n'
|
||||
else:
|
||||
text += lines[i] + '\n'
|
||||
|
||||
view.get_buffer().insert(piter, text[:-1])
|
||||
|
||||
view.get_buffer().set_data('GeditSnippetsPluginContext', None)
|
||||
|
||||
def get_buffer_context(buf):
|
||||
return buf.get_data('GeditSnippetsPluginContext')
|
||||
|
||||
def snippets_debug(*s):
|
||||
return
|
||||
|
||||
def write_xml(node, f, cdata_nodes=()):
|
||||
assert node is not None
|
||||
|
||||
if not hasattr(f, "write"):
|
||||
f = open(f, "wb")
|
||||
|
||||
# Encoding
|
||||
f.write("<?xml version='1.0' encoding='utf-8'?>\n")
|
||||
|
||||
_write_node(node, f, cdata_nodes)
|
||||
|
||||
def _write_indent(file, text, indent):
|
||||
file.write(' ' * indent + text)
|
||||
|
||||
def _write_node(node, file, cdata_nodes=(), indent=0):
|
||||
# write XML to file
|
||||
tag = node.tag
|
||||
|
||||
if node is Comment:
|
||||
_write_indent(file, "<!-- %s -->\n" % saxutils.escape(node.text.encode('utf-8')), indent)
|
||||
elif node is ProcessingInstruction:
|
||||
_write_indent(file, "<?%s?>\n" % saxutils.escape(node.text.encode('utf-8')), indent)
|
||||
else:
|
||||
items = node.items()
|
||||
|
||||
if items or node.text or len(node):
|
||||
_write_indent(file, "<" + tag.encode('utf-8'), indent)
|
||||
|
||||
if items:
|
||||
items.sort() # lexical order
|
||||
for k, v in items:
|
||||
file.write(" %s=%s" % (k.encode('utf-8'), saxutils.quoteattr(v.encode('utf-8'))))
|
||||
if node.text or len(node):
|
||||
file.write(">")
|
||||
if node.text and node.text.strip() != "":
|
||||
if tag in cdata_nodes:
|
||||
file.write(_cdata(node.text))
|
||||
else:
|
||||
file.write(saxutils.escape(node.text.encode('utf-8')))
|
||||
else:
|
||||
file.write("\n")
|
||||
|
||||
for n in node:
|
||||
_write_node(n, file, cdata_nodes, indent + 1)
|
||||
|
||||
if not len(node):
|
||||
file.write("</" + tag.encode('utf-8') + ">\n")
|
||||
else:
|
||||
_write_indent(file, "</" + tag.encode('utf-8') + ">\n", \
|
||||
indent)
|
||||
else:
|
||||
file.write(" />\n")
|
||||
|
||||
if node.tail and node.tail.strip() != "":
|
||||
file.write(saxutils.escape(node.tail.encode('utf-8')))
|
||||
|
||||
def _cdata(text, replace=string.replace):
|
||||
text = text.encode('utf-8')
|
||||
return '<![CDATA[' + replace(text, ']]>', ']]]]><![CDATA[>') + ']]>'
|
||||
|
||||
def buffer_word_boundary(buf):
|
||||
iter = buf.get_iter_at_mark(buf.get_insert())
|
||||
start = iter.copy()
|
||||
|
||||
if not iter.starts_word() and (iter.inside_word() or iter.ends_word()):
|
||||
start.backward_word_start()
|
||||
|
||||
if not iter.ends_word() and iter.inside_word():
|
||||
iter.forward_word_end()
|
||||
|
||||
return (start, iter)
|
||||
|
||||
def buffer_line_boundary(buf):
|
||||
iter = buf.get_iter_at_mark(buf.get_insert())
|
||||
start = iter.copy()
|
||||
start.set_line_offset(0)
|
||||
|
||||
if not iter.ends_line():
|
||||
iter.forward_to_line_end()
|
||||
|
||||
return (start, iter)
|
||||
|
||||
def drop_get_uris(selection):
|
||||
lines = re.split('\\s*[\\n\\r]+\\s*', selection.data.strip())
|
||||
result = []
|
||||
|
||||
for line in lines:
|
||||
if not line.startswith('#'):
|
||||
result.append(line)
|
||||
|
||||
return result
|
||||
|
||||
# ex:ts=8:et:
|
100
plugins/snippets/snippets/Importer.py
Executable file
100
plugins/snippets/snippets/Importer.py
Executable file
@@ -0,0 +1,100 @@
|
||||
import os
|
||||
import tempfile
|
||||
import sys
|
||||
import shutil
|
||||
|
||||
from snippets.Library import *
|
||||
|
||||
class Importer:
|
||||
def __init__(self, filename):
|
||||
self.filename = filename
|
||||
|
||||
def import_destination(self, filename):
|
||||
userdir = Library().userdir
|
||||
|
||||
filename = os.path.basename(filename)
|
||||
(root, ext) = os.path.splitext(filename)
|
||||
|
||||
filename = os.path.join(userdir, root + ext)
|
||||
i = 1
|
||||
|
||||
while os.path.exists(filename):
|
||||
filename = os.path.join(userdir, root + '_' + str(i) + ext)
|
||||
i += 1
|
||||
|
||||
return filename
|
||||
|
||||
def import_file(self, filename):
|
||||
if not os.path.exists(filename):
|
||||
return _('File "%s" does not exist') % filename
|
||||
|
||||
if not os.path.isfile(filename):
|
||||
return _('File "%s" is not a valid snippets file') % filename
|
||||
|
||||
# Find destination for file to copy to
|
||||
dest = self.import_destination(filename)
|
||||
|
||||
# Copy file
|
||||
shutil.copy(filename, dest)
|
||||
|
||||
# Add library
|
||||
if not Library().add_user_library(dest):
|
||||
return _('Imported file "%s" is not a valid snippets file') % os.path.basename(dest)
|
||||
|
||||
def import_xml(self):
|
||||
return self.import_file(self.filename)
|
||||
|
||||
def import_archive(self, cmd):
|
||||
dirname = tempfile.mkdtemp()
|
||||
status = os.system('cd %s; %s "%s"' % (dirname, cmd, self.filename))
|
||||
|
||||
if status != 0:
|
||||
return _('The archive "%s" could not be extracted' % self.filename)
|
||||
|
||||
errors = []
|
||||
|
||||
# Now import all the files from the archive
|
||||
for f in os.listdir(dirname):
|
||||
f = os.path.join(dirname, f)
|
||||
|
||||
if os.path.isfile(f):
|
||||
if self.import_file(f):
|
||||
errors.append(os.path.basename(f))
|
||||
else:
|
||||
sys.stderr.write('Skipping %s, not a valid snippets file' % os.path.basename(f))
|
||||
|
||||
# Remove the temporary directory
|
||||
shutil.rmtree(dirname)
|
||||
|
||||
if len(errors) > 0:
|
||||
return _('The following files could not be imported: %s') % ', '.join(errors)
|
||||
|
||||
def import_targz(self):
|
||||
self.import_archive('tar -x --gzip -f')
|
||||
|
||||
def import_tarbz2(self):
|
||||
self.import_archive('tar -x --bzip2 -f')
|
||||
|
||||
def import_tar(self):
|
||||
self.import_archive('tar -xf')
|
||||
|
||||
def run(self):
|
||||
if not os.path.exists(self.filename):
|
||||
return _('File "%s" does not exist') % self.filename
|
||||
|
||||
if not os.path.isfile(self.filename):
|
||||
return _('File "%s" is not a valid snippets archive') % self.filename
|
||||
|
||||
(root, ext) = os.path.splitext(self.filename)
|
||||
|
||||
actions = {'.tar.gz': self.import_targz,
|
||||
'.tar.bz2': self.import_tarbz2,
|
||||
'.xml': self.import_xml,
|
||||
'.tar': self.import_tar}
|
||||
|
||||
for k, v in actions.items():
|
||||
if self.filename.endswith(k):
|
||||
return v()
|
||||
|
||||
return _('File "%s" is not a valid snippets archive') % self.filename
|
||||
# ex:ts=8:et:
|
21
plugins/snippets/snippets/LanguageManager.py
Executable file
21
plugins/snippets/snippets/LanguageManager.py
Executable file
@@ -0,0 +1,21 @@
|
||||
import gtksourceview2 as gsv
|
||||
import os
|
||||
|
||||
from Library import Library
|
||||
|
||||
global manager
|
||||
manager = None
|
||||
|
||||
def get_language_manager():
|
||||
global manager
|
||||
|
||||
if not manager:
|
||||
dirs = []
|
||||
|
||||
for d in Library().systemdirs:
|
||||
dirs.append(os.path.join(d, 'lang'))
|
||||
|
||||
manager = gsv.LanguageManager()
|
||||
manager.set_search_path(dirs + manager.get_search_path())
|
||||
|
||||
return manager
|
993
plugins/snippets/snippets/Library.py
Executable file
993
plugins/snippets/snippets/Library.py
Executable file
@@ -0,0 +1,993 @@
|
||||
# Gedit snippets plugin
|
||||
# Copyright (C) 2005-2006 Jesse van den Kieboom <jesse@icecrew.nl>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
import os
|
||||
import weakref
|
||||
import sys
|
||||
import tempfile
|
||||
import re
|
||||
|
||||
import gtk
|
||||
|
||||
import xml.etree.ElementTree as et
|
||||
from Helper import *
|
||||
|
||||
class NamespacedId:
|
||||
def __init__(self, namespace, id):
|
||||
if not id:
|
||||
self.id = None
|
||||
else:
|
||||
if namespace:
|
||||
self.id = namespace + '-'
|
||||
else:
|
||||
self.id = 'global-'
|
||||
|
||||
self.id += id
|
||||
|
||||
class SnippetData:
|
||||
PROPS = {'tag': '', 'text': '', 'description': 'New snippet',
|
||||
'accelerator': '', 'drop-targets': ''}
|
||||
|
||||
def __init__(self, node, library):
|
||||
self.priv_id = node.attrib.get('id')
|
||||
|
||||
self.set_library(library)
|
||||
self.valid = False
|
||||
self.set_node(node)
|
||||
|
||||
def can_modify(self):
|
||||
return (self.library and (isinstance(self.library(), SnippetsUserFile)))
|
||||
|
||||
def set_library(self, library):
|
||||
if library:
|
||||
self.library = weakref.ref(library)
|
||||
else:
|
||||
self.library = None
|
||||
|
||||
self.id = NamespacedId(self.language(), self.priv_id).id
|
||||
|
||||
def set_node(self, node):
|
||||
if self.can_modify():
|
||||
self.node = node
|
||||
else:
|
||||
self.node = None
|
||||
|
||||
self.init_snippet_data(node)
|
||||
|
||||
def init_snippet_data(self, node):
|
||||
if node == None:
|
||||
return
|
||||
|
||||
self.override = node.attrib.get('override')
|
||||
|
||||
self.properties = {}
|
||||
props = SnippetData.PROPS.copy()
|
||||
|
||||
# Store all properties present
|
||||
for child in node:
|
||||
if child.tag in props:
|
||||
del props[child.tag]
|
||||
|
||||
# Normalize accelerator
|
||||
if child.tag == 'accelerator' and child.text != None:
|
||||
keyval, mod = gtk.accelerator_parse(child.text)
|
||||
|
||||
if gtk.accelerator_valid(keyval, mod):
|
||||
child.text = gtk.accelerator_name(keyval, mod)
|
||||
else:
|
||||
child.text = ''
|
||||
|
||||
if self.can_modify():
|
||||
self.properties[child.tag] = child
|
||||
else:
|
||||
self.properties[child.tag] = child.text or ''
|
||||
|
||||
# Create all the props that were not found so we stay consistent
|
||||
for prop in props:
|
||||
if self.can_modify():
|
||||
child = et.SubElement(node, prop)
|
||||
|
||||
child.text = props[prop]
|
||||
self.properties[prop] = child
|
||||
else:
|
||||
self.properties[prop] = props[prop]
|
||||
|
||||
self.check_validation()
|
||||
|
||||
def check_validation(self):
|
||||
if not self['tag'] and not self['accelerator'] and not self['drop-targets']:
|
||||
return False
|
||||
|
||||
library = Library()
|
||||
keyval, mod = gtk.accelerator_parse(self['accelerator'])
|
||||
|
||||
self.valid = library.valid_tab_trigger(self['tag']) and \
|
||||
(not self['accelerator'] or library.valid_accelerator(keyval, mod))
|
||||
|
||||
def _format_prop(self, prop, value):
|
||||
if prop == 'drop-targets' and value != '':
|
||||
return re.split('\\s*[,;]\\s*', value)
|
||||
else:
|
||||
return value
|
||||
|
||||
def __getitem__(self, prop):
|
||||
if prop in self.properties:
|
||||
if self.can_modify():
|
||||
return self._format_prop(prop, self.properties[prop].text or '')
|
||||
else:
|
||||
return self._format_prop(prop, self.properties[prop] or '')
|
||||
|
||||
return self._format_prop(prop, '')
|
||||
|
||||
def __setitem__(self, prop, value):
|
||||
if not prop in self.properties:
|
||||
return
|
||||
|
||||
if isinstance(value, list):
|
||||
value = ','.join(value)
|
||||
|
||||
if not self.can_modify() and self.properties[prop] != value:
|
||||
# ohoh, this is not can_modify, but it needs to be changed...
|
||||
# make sure it is transfered to the changes file and set all the
|
||||
# fields.
|
||||
# This snippet data container will effectively become the container
|
||||
# for the newly created node, but transparently to whoever uses
|
||||
# it
|
||||
self._override()
|
||||
|
||||
if self.can_modify() and self.properties[prop].text != value:
|
||||
if self.library():
|
||||
self.library().tainted = True
|
||||
|
||||
oldvalue = self.properties[prop].text
|
||||
self.properties[prop].text = value
|
||||
|
||||
if prop == 'tag' or prop == 'accelerator' or prop == 'drop-targets':
|
||||
container = Library().container(self.language())
|
||||
container.prop_changed(self, prop, oldvalue)
|
||||
|
||||
self.check_validation()
|
||||
|
||||
def language(self):
|
||||
if self.library and self.library():
|
||||
return self.library().language
|
||||
else:
|
||||
return None
|
||||
|
||||
def is_override(self):
|
||||
return self.override and Library().overridden[self.override]
|
||||
|
||||
def to_xml(self):
|
||||
return self._create_xml()
|
||||
|
||||
def _create_xml(self, parent=None, update=False, attrib={}):
|
||||
# Create a new node
|
||||
if parent != None:
|
||||
element = et.SubElement(parent, 'snippet', attrib)
|
||||
else:
|
||||
element = et.Element('snippet')
|
||||
|
||||
# Create all the properties
|
||||
for p in self.properties:
|
||||
prop = et.SubElement(element, p)
|
||||
prop.text = self[p]
|
||||
|
||||
if update:
|
||||
self.properties[p] = prop
|
||||
|
||||
return element
|
||||
|
||||
def _override(self):
|
||||
# Find the user file
|
||||
target = Library().get_user_library(self.language())
|
||||
|
||||
# Create a new node there with override
|
||||
element = self._create_xml(target.root, True, {'override': self.id})
|
||||
|
||||
# Create an override snippet data, feed it element so that it stores
|
||||
# all the values and then set the node to None so that it only contains
|
||||
# the values in .properties
|
||||
override = SnippetData(element, self.library())
|
||||
override.set_node(None)
|
||||
override.id = self.id
|
||||
|
||||
# Set our node to the new element
|
||||
self.node = element
|
||||
|
||||
# Set the override to our id
|
||||
self.override = self.id
|
||||
self.id = None
|
||||
|
||||
# Set the new library
|
||||
self.set_library(target)
|
||||
|
||||
# The library is tainted because we added this snippet
|
||||
target.tainted = True
|
||||
|
||||
# Add the override
|
||||
Library().overridden[self.override] = override
|
||||
|
||||
def revert(self, snippet):
|
||||
userlib = self.library()
|
||||
self.set_library(snippet.library())
|
||||
|
||||
userlib.remove(self.node)
|
||||
|
||||
self.set_node(None)
|
||||
|
||||
# Copy the properties
|
||||
self.properties = snippet.properties
|
||||
|
||||
# Set the id
|
||||
self.id = snippet.id
|
||||
|
||||
# Reset the override flag
|
||||
self.override = None
|
||||
|
||||
class SnippetsTreeBuilder(et.TreeBuilder):
|
||||
def __init__(self, start=None, end=None):
|
||||
et.TreeBuilder.__init__(self)
|
||||
self.set_start(start)
|
||||
self.set_end(end)
|
||||
|
||||
def set_start(self, start):
|
||||
self._start_cb = start
|
||||
|
||||
def set_end(self, end):
|
||||
self._end_cb = end
|
||||
|
||||
def start(self, tag, attrs):
|
||||
result = et.TreeBuilder.start(self, tag, attrs)
|
||||
|
||||
if self._start_cb:
|
||||
self._start_cb(result)
|
||||
|
||||
return result
|
||||
|
||||
def end(self, tag):
|
||||
result = et.TreeBuilder.end(self, tag)
|
||||
|
||||
if self._end_cb:
|
||||
self._end_cb(result)
|
||||
|
||||
return result
|
||||
|
||||
class LanguageContainer:
|
||||
def __init__(self, language):
|
||||
self.language = language
|
||||
self.snippets = []
|
||||
self.snippets_by_prop = {'tag': {}, 'accelerator': {}, 'drop-targets': {}}
|
||||
self.accel_group = gtk.AccelGroup()
|
||||
self._refs = 0
|
||||
|
||||
def _add_prop(self, snippet, prop, value=0):
|
||||
if value == 0:
|
||||
value = snippet[prop]
|
||||
|
||||
if not value or value == '':
|
||||
return
|
||||
|
||||
snippets_debug('Added ', prop ,' ', value, ' to ', str(self.language))
|
||||
|
||||
if prop == 'accelerator':
|
||||
keyval, mod = gtk.accelerator_parse(value)
|
||||
self.accel_group.connect_group(keyval, mod, 0, \
|
||||
Library().accelerator_activated)
|
||||
|
||||
snippets = self.snippets_by_prop[prop]
|
||||
|
||||
if not isinstance(value, list):
|
||||
value = [value]
|
||||
|
||||
for val in value:
|
||||
if val in snippets:
|
||||
snippets[val].append(snippet)
|
||||
else:
|
||||
snippets[val] = [snippet]
|
||||
|
||||
def _remove_prop(self, snippet, prop, value=0):
|
||||
if value == 0:
|
||||
value = snippet[prop]
|
||||
|
||||
if not value or value == '':
|
||||
return
|
||||
|
||||
snippets_debug('Removed ', prop, ' ', value, ' from ', str(self.language))
|
||||
|
||||
if prop == 'accelerator':
|
||||
keyval, mod = gtk.accelerator_parse(value)
|
||||
self.accel_group.disconnect_key(keyval, mod)
|
||||
|
||||
snippets = self.snippets_by_prop[prop]
|
||||
|
||||
if not isinstance(value, list):
|
||||
value = [value]
|
||||
|
||||
for val in value:
|
||||
try:
|
||||
snippets[val].remove(snippet)
|
||||
except:
|
||||
True
|
||||
|
||||
def append(self, snippet):
|
||||
tag = snippet['tag']
|
||||
accelerator = snippet['accelerator']
|
||||
|
||||
self.snippets.append(snippet)
|
||||
|
||||
self._add_prop(snippet, 'tag')
|
||||
self._add_prop(snippet, 'accelerator')
|
||||
self._add_prop(snippet, 'drop-targets')
|
||||
|
||||
return snippet
|
||||
|
||||
def remove(self, snippet):
|
||||
try:
|
||||
self.snippets.remove(snippet)
|
||||
except:
|
||||
True
|
||||
|
||||
self._remove_prop(snippet, 'tag')
|
||||
self._remove_prop(snippet, 'accelerator')
|
||||
self._remove_prop(snippet, 'drop-targets')
|
||||
|
||||
def prop_changed(self, snippet, prop, oldvalue):
|
||||
snippets_debug('PROP CHANGED (', prop, ')', oldvalue)
|
||||
|
||||
self._remove_prop(snippet, prop, oldvalue)
|
||||
self._add_prop(snippet, prop)
|
||||
|
||||
def from_prop(self, prop, value):
|
||||
snippets = self.snippets_by_prop[prop]
|
||||
|
||||
if prop == 'drop-targets':
|
||||
s = []
|
||||
|
||||
# FIXME: change this to use
|
||||
# matevfs.mime_type_get_equivalence when it comes
|
||||
# available
|
||||
for key, val in snippets.items():
|
||||
if not value.startswith(key):
|
||||
continue
|
||||
|
||||
for snippet in snippets[key]:
|
||||
if not snippet in s:
|
||||
s.append(snippet)
|
||||
|
||||
return s
|
||||
else:
|
||||
if value in snippets:
|
||||
return snippets[value]
|
||||
else:
|
||||
return []
|
||||
|
||||
def ref(self):
|
||||
self._refs += 1
|
||||
|
||||
return True
|
||||
|
||||
def unref(self):
|
||||
if self._refs > 0:
|
||||
self._refs -= 1
|
||||
|
||||
return self._refs != 0
|
||||
|
||||
class SnippetsSystemFile:
|
||||
def __init__(self, path=None):
|
||||
self.path = path
|
||||
self.loaded = False
|
||||
self.language = None
|
||||
self.ok = True
|
||||
self.need_id = True
|
||||
|
||||
def load_error(self, message):
|
||||
sys.stderr.write("An error occurred loading " + self.path + ":\n")
|
||||
sys.stderr.write(message + "\nSnippets in this file will not be " \
|
||||
"available, please correct or remove the file.\n")
|
||||
|
||||
def _add_snippet(self, element):
|
||||
if not self.need_id or element.attrib.get('id'):
|
||||
self.loading_elements.append(element)
|
||||
|
||||
def set_language(self, element):
|
||||
self.language = element.attrib.get('language')
|
||||
|
||||
if self.language:
|
||||
self.language = self.language.lower()
|
||||
|
||||
def _set_root(self, element):
|
||||
self.set_language(element)
|
||||
|
||||
def _preprocess_element(self, element):
|
||||
if not self.loaded:
|
||||
if not element.tag == "snippets":
|
||||
self.load_error("Root element should be `snippets' instead " \
|
||||
"of `%s'" % element.tag)
|
||||
return False
|
||||
else:
|
||||
self._set_root(element)
|
||||
self.loaded = True
|
||||
elif element.tag != 'snippet' and not self.insnippet:
|
||||
self.load_error("Element should be `snippet' instead of `%s'" \
|
||||
% element.tag)
|
||||
return False
|
||||
else:
|
||||
self.insnippet = True
|
||||
|
||||
return True
|
||||
|
||||
def _process_element(self, element):
|
||||
if element.tag == 'snippet':
|
||||
self._add_snippet(element)
|
||||
self.insnippet = False
|
||||
|
||||
return True
|
||||
|
||||
def ensure(self):
|
||||
if not self.ok or self.loaded:
|
||||
return
|
||||
|
||||
self.load()
|
||||
|
||||
def parse_xml(self, readsize=16384):
|
||||
if not self.path:
|
||||
return
|
||||
|
||||
elements = []
|
||||
|
||||
builder = SnippetsTreeBuilder( \
|
||||
lambda node: elements.append((node, True)), \
|
||||
lambda node: elements.append((node, False)))
|
||||
|
||||
parser = et.XMLTreeBuilder(target=builder)
|
||||
self.insnippet = False
|
||||
|
||||
try:
|
||||
f = open(self.path, "r")
|
||||
|
||||
while True:
|
||||
data = f.read(readsize)
|
||||
|
||||
if not data:
|
||||
break
|
||||
|
||||
parser.feed(data)
|
||||
|
||||
for element in elements:
|
||||
yield element
|
||||
|
||||
del elements[:]
|
||||
|
||||
f.close()
|
||||
except IOError:
|
||||
self.ok = False
|
||||
|
||||
def load(self):
|
||||
if not self.ok:
|
||||
return
|
||||
|
||||
snippets_debug("Loading library (" + str(self.language) + "): " + \
|
||||
self.path)
|
||||
|
||||
self.loaded = False
|
||||
self.ok = False
|
||||
self.loading_elements = []
|
||||
|
||||
for element in self.parse_xml():
|
||||
if element[1]:
|
||||
if not self._preprocess_element(element[0]):
|
||||
del self.loading_elements[:]
|
||||
return
|
||||
else:
|
||||
if not self._process_element(element[0]):
|
||||
del self.loading_elements[:]
|
||||
return
|
||||
|
||||
for element in self.loading_elements:
|
||||
snippet = Library().add_snippet(self, element)
|
||||
|
||||
del self.loading_elements[:]
|
||||
self.ok = True
|
||||
|
||||
# This function will get the language for a file by just inspecting the
|
||||
# root element of the file. This is provided so that a cache can be built
|
||||
# for which file contains which language.
|
||||
# It returns the name of the language
|
||||
def ensure_language(self):
|
||||
if not self.loaded:
|
||||
self.ok = False
|
||||
|
||||
for element in self.parse_xml(256):
|
||||
if element[1]:
|
||||
if element[0].tag == 'snippets':
|
||||
self.set_language(element[0])
|
||||
self.ok = True
|
||||
|
||||
break
|
||||
|
||||
def unload(self):
|
||||
snippets_debug("Unloading library (" + str(self.language) + "): " + \
|
||||
self.path)
|
||||
self.language = None
|
||||
self.loaded = False
|
||||
self.ok = True
|
||||
|
||||
class SnippetsUserFile(SnippetsSystemFile):
|
||||
def __init__(self, path=None):
|
||||
SnippetsSystemFile.__init__(self, path)
|
||||
self.tainted = False
|
||||
self.need_id = False
|
||||
|
||||
def _set_root(self, element):
|
||||
SnippetsSystemFile._set_root(self, element)
|
||||
self.root = element
|
||||
|
||||
def add_prop(self, node, tag, data):
|
||||
if data[tag]:
|
||||
prop = et.SubElement(node, tag)
|
||||
prop.text = data[tag]
|
||||
|
||||
return prop
|
||||
else:
|
||||
return None
|
||||
|
||||
def new_snippet(self, properties=None):
|
||||
if (not self.ok) or self.root == None:
|
||||
return None
|
||||
|
||||
element = et.SubElement(self.root, 'snippet')
|
||||
|
||||
if properties:
|
||||
for prop in properties:
|
||||
sub = et.SubElement(element, prop)
|
||||
sub.text = properties[prop]
|
||||
|
||||
self.tainted = True
|
||||
|
||||
return Library().add_snippet(self, element)
|
||||
|
||||
def set_language(self, element):
|
||||
SnippetsSystemFile.set_language(self, element)
|
||||
|
||||
filename = os.path.basename(self.path).lower()
|
||||
|
||||
if not self.language and filename == "global.xml":
|
||||
self.modifier = True
|
||||
elif self.language and filename == self.language + ".xml":
|
||||
self.modifier = True
|
||||
else:
|
||||
self.modifier = False
|
||||
|
||||
def create_root(self, language):
|
||||
if self.loaded:
|
||||
snippets_debug('Not creating root, already loaded')
|
||||
return
|
||||
|
||||
if language:
|
||||
root = et.Element('snippets', {'language': language})
|
||||
self.path = os.path.join(Library().userdir, language.lower() + '.xml')
|
||||
else:
|
||||
root = et.Element('snippets')
|
||||
self.path = os.path.join(Library().userdir, 'global.xml')
|
||||
|
||||
self._set_root(root)
|
||||
self.loaded = True
|
||||
self.ok = True
|
||||
self.tainted = True
|
||||
self.save()
|
||||
|
||||
def remove(self, element):
|
||||
try:
|
||||
self.root.remove(element)
|
||||
self.tainted = True
|
||||
except:
|
||||
return
|
||||
|
||||
try:
|
||||
first = self.root[0]
|
||||
except:
|
||||
# No more elements, this library is useless now
|
||||
Library().remove_library(self)
|
||||
|
||||
def save(self):
|
||||
if not self.ok or self.root == None or not self.tainted:
|
||||
return
|
||||
|
||||
path = os.path.dirname(self.path)
|
||||
|
||||
try:
|
||||
if not os.path.isdir(path):
|
||||
os.makedirs(path, 0755)
|
||||
except OSError:
|
||||
# TODO: this is bad...
|
||||
sys.stderr.write("Error in making dirs\n")
|
||||
|
||||
try:
|
||||
write_xml(self.root, self.path, ('text', 'accelerator'))
|
||||
self.tainted = False
|
||||
except IOError:
|
||||
# Couldn't save, what to do
|
||||
sys.stderr.write("Could not save user snippets file to " + \
|
||||
self.path + "\n")
|
||||
|
||||
def unload(self):
|
||||
SnippetsSystemFile.unload(self)
|
||||
self.root = None
|
||||
|
||||
class Singleton(object):
|
||||
_instance = None
|
||||
|
||||
def __new__(cls, *args, **kwargs):
|
||||
if not cls._instance:
|
||||
cls._instance = super(Singleton, cls).__new__(
|
||||
cls, *args, **kwargs)
|
||||
cls._instance.__init_once__()
|
||||
|
||||
return cls._instance
|
||||
|
||||
class Library(Singleton):
|
||||
def __init_once__(self):
|
||||
self._accelerator_activated_cb = None
|
||||
self.loaded = False
|
||||
self.check_buffer = gtk.TextBuffer()
|
||||
|
||||
def set_dirs(self, userdir, systemdirs):
|
||||
self.userdir = userdir
|
||||
self.systemdirs = systemdirs
|
||||
|
||||
self.libraries = {}
|
||||
self.containers = {}
|
||||
self.overridden = {}
|
||||
self.loaded_ids = []
|
||||
|
||||
self.loaded = False
|
||||
|
||||
def set_accelerator_callback(self, cb):
|
||||
self._accelerator_activated_cb = cb
|
||||
|
||||
def accelerator_activated(self, group, obj, keyval, mod):
|
||||
ret = False
|
||||
|
||||
if self._accelerator_activated_cb:
|
||||
ret = self._accelerator_activated_cb(group, obj, keyval, mod)
|
||||
|
||||
return ret
|
||||
|
||||
def add_snippet(self, library, element):
|
||||
container = self.container(library.language)
|
||||
overrided = self.overrided(library, element)
|
||||
|
||||
if overrided:
|
||||
overrided.set_library(library)
|
||||
snippets_debug('Snippet is overriden: ' + overrided['description'])
|
||||
return None
|
||||
|
||||
snippet = SnippetData(element, library)
|
||||
|
||||
if snippet.id in self.loaded_ids:
|
||||
snippets_debug('Not added snippet ' + str(library.language) + \
|
||||
'::' + snippet['description'] + ' (duplicate)')
|
||||
return None
|
||||
|
||||
snippet = container.append(snippet)
|
||||
snippets_debug('Added snippet ' + str(library.language) + '::' + \
|
||||
snippet['description'])
|
||||
|
||||
if snippet and snippet.override:
|
||||
self.add_override(snippet)
|
||||
|
||||
if snippet.id:
|
||||
self.loaded_ids.append(snippet.id)
|
||||
|
||||
return snippet
|
||||
|
||||
def container(self, language):
|
||||
language = self.normalize_language(language)
|
||||
|
||||
if not language in self.containers:
|
||||
self.containers[language] = LanguageContainer(language)
|
||||
|
||||
return self.containers[language]
|
||||
|
||||
def get_user_library(self, language):
|
||||
target = None
|
||||
|
||||
if language in self.libraries:
|
||||
for library in self.libraries[language]:
|
||||
if isinstance(library, SnippetsUserFile) and library.modifier:
|
||||
target = library
|
||||
elif not isinstance(library, SnippetsUserFile):
|
||||
break
|
||||
|
||||
if not target:
|
||||
# Create a new user file then
|
||||
snippets_debug('Creating a new user file for language ' + \
|
||||
str(language))
|
||||
target = SnippetsUserFile()
|
||||
target.create_root(language)
|
||||
self.add_library(target)
|
||||
|
||||
return target
|
||||
|
||||
def new_snippet(self, language, properties=None):
|
||||
language = self.normalize_language(language)
|
||||
library = self.get_user_library(language)
|
||||
|
||||
return library.new_snippet(properties)
|
||||
|
||||
def revert_snippet(self, snippet):
|
||||
# This will revert the snippet to the one it overrides
|
||||
if not snippet.can_modify() or not snippet.override in self.overridden:
|
||||
# It can't be reverted, shouldn't happen, but oh..
|
||||
return
|
||||
|
||||
# The snippet in self.overriden only contains the property contents and
|
||||
# the library it belongs to
|
||||
revertto = self.overridden[snippet.override]
|
||||
del self.overridden[snippet.override]
|
||||
|
||||
if revertto:
|
||||
snippet.revert(revertto)
|
||||
|
||||
if revertto.id:
|
||||
self.loaded_ids.append(revertto.id)
|
||||
|
||||
def remove_snippet(self, snippet):
|
||||
if not snippet.can_modify() or snippet.is_override():
|
||||
return
|
||||
|
||||
# Remove from the library
|
||||
userlib = snippet.library()
|
||||
userlib.remove(snippet.node)
|
||||
|
||||
# Remove from the container
|
||||
container = self.containers[userlib.language]
|
||||
container.remove(snippet)
|
||||
|
||||
def overrided(self, library, element):
|
||||
id = NamespacedId(library.language, element.attrib.get('id')).id
|
||||
|
||||
if id in self.overridden:
|
||||
snippet = SnippetData(element, None)
|
||||
snippet.set_node(None)
|
||||
|
||||
self.overridden[id] = snippet
|
||||
return snippet
|
||||
else:
|
||||
return None
|
||||
|
||||
def add_override(self, snippet):
|
||||
snippets_debug('Add override:', snippet.override)
|
||||
if not snippet.override in self.overridden:
|
||||
self.overridden[snippet.override] = None
|
||||
|
||||
def add_library(self, library):
|
||||
library.ensure_language()
|
||||
|
||||
if not library.ok:
|
||||
snippets_debug('Library in wrong format, ignoring')
|
||||
return False
|
||||
|
||||
snippets_debug('Adding library (' + str(library.language) + '): ' + \
|
||||
library.path)
|
||||
|
||||
if library.language in self.libraries:
|
||||
# Make sure all the user files are before the system files
|
||||
if isinstance(library, SnippetsUserFile):
|
||||
self.libraries[library.language].insert(0, library)
|
||||
else:
|
||||
self.libraries[library.language].append(library)
|
||||
else:
|
||||
self.libraries[library.language] = [library]
|
||||
|
||||
return True
|
||||
|
||||
def remove_library(self, library):
|
||||
if not library.ok:
|
||||
return
|
||||
|
||||
if library.path and os.path.isfile(library.path):
|
||||
os.unlink(library.path)
|
||||
|
||||
try:
|
||||
self.libraries[library.language].remove(library)
|
||||
except KeyError:
|
||||
True
|
||||
|
||||
container = self.containers[library.language]
|
||||
|
||||
for snippet in list(container.snippets):
|
||||
if snippet.library() == library:
|
||||
container.remove(snippet)
|
||||
|
||||
def add_user_library(self, path):
|
||||
library = SnippetsUserFile(path)
|
||||
return self.add_library(library)
|
||||
|
||||
def add_system_library(self, path):
|
||||
library = SnippetsSystemFile(path)
|
||||
return self.add_library(library)
|
||||
|
||||
def find_libraries(self, path, searched, addcb):
|
||||
snippets_debug("Finding in: " + path)
|
||||
|
||||
if not os.path.isdir(path):
|
||||
return searched
|
||||
|
||||
files = os.listdir(path)
|
||||
searched.append(path)
|
||||
|
||||
for f in files:
|
||||
f = os.path.realpath(os.path.join(path, f))
|
||||
|
||||
# Determine what language this file provides snippets for
|
||||
if os.path.isfile(f):
|
||||
addcb(f)
|
||||
|
||||
return searched
|
||||
|
||||
def normalize_language(self, language):
|
||||
if language:
|
||||
return language.lower()
|
||||
|
||||
return language
|
||||
|
||||
def remove_container(self, language):
|
||||
for snippet in self.containers[language].snippets:
|
||||
if snippet.id in self.loaded_ids:
|
||||
self.loaded_ids.remove(snippet.id)
|
||||
|
||||
if snippet.override in self.overridden:
|
||||
del self.overridden[snippet.override]
|
||||
|
||||
del self.containers[language]
|
||||
|
||||
def get_accel_group(self, language):
|
||||
language = self.normalize_language(language)
|
||||
container = self.container(language)
|
||||
|
||||
self.ensure(language)
|
||||
return container.accel_group
|
||||
|
||||
def save(self, language):
|
||||
language = self.normalize_language(language)
|
||||
|
||||
if language in self.libraries:
|
||||
for library in self.libraries[language]:
|
||||
if isinstance(library, SnippetsUserFile):
|
||||
library.save()
|
||||
else:
|
||||
break
|
||||
|
||||
def ref(self, language):
|
||||
language = self.normalize_language(language)
|
||||
|
||||
snippets_debug('Ref:', language)
|
||||
self.container(language).ref()
|
||||
|
||||
def unref(self, language):
|
||||
language = self.normalize_language(language)
|
||||
|
||||
snippets_debug('Unref:', language)
|
||||
|
||||
if language in self.containers:
|
||||
if not self.containers[language].unref() and \
|
||||
language in self.libraries:
|
||||
|
||||
for library in self.libraries[language]:
|
||||
library.unload()
|
||||
|
||||
self.remove_container(language)
|
||||
|
||||
def ensure(self, language):
|
||||
self.ensure_files()
|
||||
language = self.normalize_language(language)
|
||||
|
||||
# Ensure language as well as the global snippets (None)
|
||||
for lang in (None, language):
|
||||
if lang in self.libraries:
|
||||
# Ensure the container exists
|
||||
self.container(lang)
|
||||
|
||||
for library in self.libraries[lang]:
|
||||
library.ensure()
|
||||
|
||||
def ensure_files(self):
|
||||
if self.loaded:
|
||||
return
|
||||
|
||||
searched = []
|
||||
searched = self.find_libraries(self.userdir, searched, \
|
||||
self.add_user_library)
|
||||
|
||||
for d in self.systemdirs:
|
||||
searched = self.find_libraries(d, searched, \
|
||||
self.add_system_library)
|
||||
|
||||
self.loaded = True
|
||||
|
||||
def valid_accelerator(self, keyval, mod):
|
||||
mod &= gtk.accelerator_get_default_mod_mask()
|
||||
|
||||
return (mod and (gdk.keyval_to_unicode(keyval) or \
|
||||
keyval in range(gtk.keysyms.F1, gtk.keysyms.F12 + 1)))
|
||||
|
||||
def valid_tab_trigger(self, trigger):
|
||||
if not trigger:
|
||||
return True
|
||||
|
||||
if trigger.isdigit():
|
||||
return False
|
||||
|
||||
self.check_buffer.set_text(trigger)
|
||||
|
||||
start, end = self.check_buffer.get_bounds()
|
||||
text = self.check_buffer.get_text(start, end)
|
||||
|
||||
s = start.copy()
|
||||
e = end.copy()
|
||||
|
||||
end.backward_word_start()
|
||||
start.forward_word_end()
|
||||
|
||||
return (s.equal(end) and e.equal(start)) or (len(text) == 1 and not (text.isalnum() or text.isspace()))
|
||||
|
||||
# Snippet getters
|
||||
# ===============
|
||||
def _from_prop(self, prop, value, language=None):
|
||||
self.ensure_files()
|
||||
|
||||
result = []
|
||||
language = self.normalize_language(language)
|
||||
|
||||
if not language in self.containers:
|
||||
return []
|
||||
|
||||
self.ensure(language)
|
||||
result = self.containers[language].from_prop(prop, value)
|
||||
|
||||
if len(result) == 0 and language and None in self.containers:
|
||||
result = self.containers[None].from_prop(prop, value)
|
||||
|
||||
return result
|
||||
|
||||
# Get snippets for a given language
|
||||
def get_snippets(self, language=None):
|
||||
self.ensure_files()
|
||||
language = self.normalize_language(language)
|
||||
|
||||
if not language in self.libraries:
|
||||
return []
|
||||
|
||||
snippets = []
|
||||
self.ensure(language)
|
||||
|
||||
return list(self.containers[language].snippets)
|
||||
|
||||
# Get snippets for a given accelerator
|
||||
def from_accelerator(self, accelerator, language=None):
|
||||
return self._from_prop('accelerator', accelerator, language)
|
||||
|
||||
# Get snippets for a given tag
|
||||
def from_tag(self, tag, language=None):
|
||||
return self._from_prop('tag', tag, language)
|
||||
|
||||
# Get snippets for a given drop target
|
||||
def from_drop_target(self, drop_target, language=None):
|
||||
return self._from_prop('drop-targets', drop_target, language)
|
||||
|
||||
# ex:ts=8:et:
|
28
plugins/snippets/snippets/Makefile.am
Executable file
28
plugins/snippets/snippets/Makefile.am
Executable file
@@ -0,0 +1,28 @@
|
||||
# Python snippets plugin
|
||||
plugindir = $(GEDIT_PLUGINS_LIBS_DIR)/snippets
|
||||
|
||||
plugin_PYTHON = \
|
||||
__init__.py \
|
||||
WindowHelper.py \
|
||||
Document.py \
|
||||
Library.py \
|
||||
Snippet.py \
|
||||
Parser.py \
|
||||
Placeholder.py \
|
||||
Manager.py \
|
||||
Helper.py \
|
||||
SubstitutionParser.py \
|
||||
Importer.py \
|
||||
Exporter.py \
|
||||
LanguageManager.py \
|
||||
Completion.py
|
||||
|
||||
uidir = $(GEDIT_PLUGINS_DATA_DIR)/snippets/ui
|
||||
ui_DATA = snippets.ui
|
||||
|
||||
EXTRA_DIST = $(ui_DATA)
|
||||
|
||||
CLEANFILES = *.bak *.gladep *.pyc
|
||||
DISTCLEANFILES = *.bak *.gladep *.pyc
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
1157
plugins/snippets/snippets/Manager.py
Executable file
1157
plugins/snippets/snippets/Manager.py
Executable file
File diff suppressed because it is too large
Load Diff
259
plugins/snippets/snippets/Parser.py
Executable file
259
plugins/snippets/snippets/Parser.py
Executable file
@@ -0,0 +1,259 @@
|
||||
# Gedit snippets plugin
|
||||
# Copyright (C) 2006-2007 Jesse van den Kieboom <jesse@icecrew.nl>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
from SubstitutionParser import SubstitutionParser
|
||||
|
||||
class Token:
|
||||
def __init__(self, klass, data):
|
||||
self.klass = klass
|
||||
self.data = data
|
||||
|
||||
def __str__(self):
|
||||
return '%s: [%s]' % (self.klass, self.data)
|
||||
|
||||
def __eq__(self, other):
|
||||
return self.klass == other.klass and self.data == other.data
|
||||
|
||||
def __ne__(self, other):
|
||||
return not self.__eq__(other)
|
||||
|
||||
class Parser:
|
||||
SREG_ENV = '[A-Z_]+'
|
||||
SREG_ID = '[0-9]+'
|
||||
|
||||
REG_ESCAPE = re.compile('(\\$(%s|\\(|\\{|<|%s)|`|\\\\)' % (SREG_ENV, SREG_ID))
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
for k, v in kwargs.items():
|
||||
setattr(self, k, v)
|
||||
|
||||
self.position = 0
|
||||
self.data_length = len(self.data)
|
||||
|
||||
self.RULES = (self._match_env, self._match_regex, self._match_placeholder, self._match_shell, self._match_eval, self._text)
|
||||
|
||||
def remains(self):
|
||||
return self.data[self.position:]
|
||||
|
||||
def next_char(self):
|
||||
if self.position + 1 >= self.data_length:
|
||||
return ''
|
||||
else:
|
||||
return self.data[self.position + 1]
|
||||
|
||||
def char(self):
|
||||
if self.position >= self.data_length:
|
||||
return ''
|
||||
else:
|
||||
return self.data[self.position]
|
||||
|
||||
def token(self):
|
||||
self.tktext = ''
|
||||
|
||||
while self.position < self.data_length:
|
||||
try:
|
||||
# Get first character
|
||||
func = {'$': self._rule,
|
||||
'`': self._try_match_shell}[self.char()]
|
||||
except:
|
||||
func = self._text
|
||||
|
||||
# Detect end of text token
|
||||
if func != self._text and self.tktext != '':
|
||||
return Token('text', self.tktext)
|
||||
|
||||
tk = func()
|
||||
|
||||
if tk:
|
||||
return tk
|
||||
|
||||
if self.tktext != '':
|
||||
return Token('text', self.tktext)
|
||||
|
||||
def _need_escape(self):
|
||||
text = self.remains()[1:]
|
||||
|
||||
if text == '':
|
||||
return False
|
||||
|
||||
return self.REG_ESCAPE.match(text)
|
||||
|
||||
def _escape(self):
|
||||
if not self._need_escape():
|
||||
return
|
||||
|
||||
# Increase position with 1
|
||||
self.position += 1
|
||||
|
||||
def _text(self):
|
||||
if self.char() == '\\':
|
||||
self._escape()
|
||||
|
||||
self.tktext += self.char()
|
||||
self.position += 1
|
||||
|
||||
def _rule(self):
|
||||
for rule in self.RULES:
|
||||
res = rule()
|
||||
|
||||
if res:
|
||||
return res
|
||||
|
||||
def _match_env(self):
|
||||
text = self.remains()
|
||||
match = re.match('\\$(%s)' % self.SREG_ENV, text) or re.match('\\${(%s)}' % self.SREG_ENV, text)
|
||||
|
||||
if match:
|
||||
self.position += len(match.group(0))
|
||||
return Token('environment', match.group(1))
|
||||
|
||||
def _parse_list(self, lst):
|
||||
pos = 0
|
||||
length = len(lst)
|
||||
items = []
|
||||
last = None
|
||||
|
||||
while pos < length:
|
||||
char = lst[pos]
|
||||
next = pos < length - 1 and lst[pos + 1]
|
||||
|
||||
if char == '\\' and (next == ',' or next == ']'):
|
||||
char = next
|
||||
pos += 1
|
||||
elif char == ',':
|
||||
if last != None:
|
||||
items.append(last)
|
||||
|
||||
last = None
|
||||
pos += 1
|
||||
continue
|
||||
|
||||
last = (last != None and last + char) or char
|
||||
pos += 1
|
||||
|
||||
if last != None:
|
||||
items.append(last)
|
||||
|
||||
return items
|
||||
|
||||
def _parse_default(self, default):
|
||||
match = re.match('^\\s*(\\\\)?(\\[((\\\\]|[^\\]])+)\\]\\s*)$', default)
|
||||
|
||||
if not match:
|
||||
return [default]
|
||||
|
||||
groups = match.groups()
|
||||
|
||||
if groups[0]:
|
||||
return [groups[1]]
|
||||
|
||||
return self._parse_list(groups[2])
|
||||
|
||||
def _match_placeholder(self):
|
||||
text = self.remains()
|
||||
|
||||
match = re.match('\\${(%s)(:((\\\\\\}|[^}])+))?}' % self.SREG_ID, text) or re.match('\\$(%s)' % self.SREG_ID, text)
|
||||
|
||||
if not match:
|
||||
return None
|
||||
|
||||
groups = match.groups()
|
||||
default = ''
|
||||
tabstop = int(groups[0])
|
||||
self.position += len(match.group(0))
|
||||
|
||||
if len(groups) > 1 and groups[2]:
|
||||
default = self._parse_default(groups[2].replace('\\}', '}'))
|
||||
|
||||
return Token('placeholder', {'tabstop': tabstop, 'default': default})
|
||||
|
||||
def _match_shell(self):
|
||||
text = self.remains()
|
||||
match = re.match('`((%s):)?((\\\\`|[^`])+?)`' % self.SREG_ID, text) or re.match('\\$\\(((%s):)?((\\\\\\)|[^\\)])+?)\\)' % self.SREG_ID, text)
|
||||
|
||||
if not match:
|
||||
return None
|
||||
|
||||
groups = match.groups()
|
||||
tabstop = (groups[1] and int(groups[1])) or -1
|
||||
self.position += len(match.group(0))
|
||||
|
||||
if text[0] == '`':
|
||||
contents = groups[2].replace('\\`', '`')
|
||||
else:
|
||||
contents = groups[2].replace('\\)', ')')
|
||||
|
||||
return Token('shell', {'tabstop': tabstop, 'contents': contents})
|
||||
|
||||
def _try_match_shell(self):
|
||||
return self._match_shell() or self._text()
|
||||
|
||||
def _eval_options(self, options):
|
||||
reg = re.compile(self.SREG_ID)
|
||||
tabstop = -1
|
||||
depend = []
|
||||
|
||||
options = options.split(':')
|
||||
|
||||
for opt in options:
|
||||
if reg.match(opt):
|
||||
tabstop = int(opt)
|
||||
else:
|
||||
depend += self._parse_list(opt[1:-1])
|
||||
|
||||
return (tabstop, depend)
|
||||
|
||||
def _match_eval(self):
|
||||
text = self.remains()
|
||||
|
||||
options = '((%s)|\\[([0-9, ]+)\\])' % self.SREG_ID
|
||||
match = re.match('\\$<((%s:)*)((\\\\>|[^>])+?)>' % options, text)
|
||||
|
||||
if not match:
|
||||
return None
|
||||
|
||||
groups = match.groups()
|
||||
(tabstop, depend) = (groups[0] and self._eval_options(groups[0][:-1])) or (-1, [])
|
||||
self.position += len(match.group(0))
|
||||
|
||||
return Token('eval', {'tabstop': tabstop, 'dependencies': depend, 'contents': groups[5].replace('\\>', '>')})
|
||||
|
||||
def _match_regex(self):
|
||||
text = self.remains()
|
||||
|
||||
content = '((?:\\\\[/]|\\\\}|[^/}])+)'
|
||||
match = re.match('\\${(?:(%s):)?\\s*(%s|\\$([A-Z_]+))?[/]%s[/]%s(?:[/]([a-zA-Z]*))?}' % (self.SREG_ID, self.SREG_ID, content, content), text)
|
||||
|
||||
if not match:
|
||||
return None
|
||||
|
||||
groups = match.groups()
|
||||
tabstop = (groups[0] and int(groups[0])) or -1
|
||||
inp = (groups[2] or (groups[1] and int(groups[1]))) or ''
|
||||
|
||||
pattern = re.sub('\\\\([/}])', '\\1', groups[3])
|
||||
substitution = re.sub('\\\\([/}])', '\\1', groups[4])
|
||||
modifiers = groups[5] or ''
|
||||
|
||||
self.position += len(match.group(0))
|
||||
|
||||
return Token('regex', {'tabstop': tabstop, 'input': inp, 'pattern': pattern, 'substitution': substitution, 'modifiers': modifiers})
|
||||
|
||||
# ex:ts=8:et:
|
700
plugins/snippets/snippets/Placeholder.py
Executable file
700
plugins/snippets/snippets/Placeholder.py
Executable file
@@ -0,0 +1,700 @@
|
||||
# Gedit snippets plugin
|
||||
# Copyright (C) 2005-2006 Jesse van den Kieboom <jesse@icecrew.nl>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
import traceback
|
||||
import re
|
||||
import os
|
||||
import sys
|
||||
import signal
|
||||
import select
|
||||
import locale
|
||||
import subprocess
|
||||
from SubstitutionParser import SubstitutionParser
|
||||
import gobject
|
||||
|
||||
from Helper import *
|
||||
|
||||
# These are places in a view where the cursor can go and do things
|
||||
class Placeholder:
|
||||
def __init__(self, view, tabstop, defaults, begin):
|
||||
self.ok = True
|
||||
self.done = False
|
||||
self.buf = view.get_buffer()
|
||||
self.view = view
|
||||
self.has_references = False
|
||||
self.mirrors = []
|
||||
self.leave_mirrors = []
|
||||
self.tabstop = tabstop
|
||||
self.set_default(defaults)
|
||||
self.prev_contents = self.default
|
||||
self.set_mark_gravity()
|
||||
|
||||
if begin:
|
||||
self.begin = self.buf.create_mark(None, begin, self.mark_gravity[0])
|
||||
else:
|
||||
self.begin = None
|
||||
|
||||
self.end = None
|
||||
|
||||
def __str__(self):
|
||||
return '%s (%s)' % (str(self.__class__), str(self.default))
|
||||
|
||||
def set_mark_gravity(self):
|
||||
self.mark_gravity = [True, False]
|
||||
|
||||
def set_default(self, defaults):
|
||||
self.default = None
|
||||
self.defaults = []
|
||||
|
||||
if not defaults:
|
||||
return
|
||||
|
||||
for d in defaults:
|
||||
dm = self.expand_environment(d)
|
||||
|
||||
if dm:
|
||||
self.defaults.append(dm)
|
||||
|
||||
if not self.default:
|
||||
self.default = dm
|
||||
|
||||
if dm != d:
|
||||
break
|
||||
|
||||
|
||||
def literal(self, s):
|
||||
return repr(s)
|
||||
|
||||
def format_environment(self, s):
|
||||
return s
|
||||
|
||||
def re_environment(self, m):
|
||||
if m.group(1) or not m.group(2) in os.environ:
|
||||
return '$' + m.group(2)
|
||||
else:
|
||||
return self.format_environment(os.environ[m.group(2)])
|
||||
|
||||
def expand_environment(self, text):
|
||||
if not text:
|
||||
return text
|
||||
|
||||
return re.sub('(\\\\)?\\$([A-Z_]+)', self.re_environment, text)
|
||||
|
||||
def get_iter(self, mark):
|
||||
if mark and not mark.get_deleted():
|
||||
return self.buf.get_iter_at_mark(mark)
|
||||
else:
|
||||
return None
|
||||
|
||||
def begin_iter(self):
|
||||
return self.get_iter(self.begin)
|
||||
|
||||
def end_iter(self):
|
||||
return self.get_iter(self.end)
|
||||
|
||||
def run_last(self, placeholders):
|
||||
begin = self.begin_iter()
|
||||
self.end = self.buf.create_mark(None, begin, self.mark_gravity[1])
|
||||
|
||||
if self.default:
|
||||
insert_with_indent(self.view, begin, self.default, False, self)
|
||||
|
||||
def remove(self, force = False):
|
||||
if self.begin and not self.begin.get_deleted():
|
||||
self.buf.delete_mark(self.begin)
|
||||
|
||||
if self.end and not self.end.get_deleted():
|
||||
self.buf.delete_mark(self.end)
|
||||
|
||||
# Do something on beginning this placeholder
|
||||
def enter(self):
|
||||
if not self.begin or self.begin.get_deleted():
|
||||
return
|
||||
|
||||
self.buf.move_mark(self.buf.get_insert(), self.begin_iter())
|
||||
|
||||
if self.end:
|
||||
self.buf.move_mark(self.buf.get_selection_bound(), self.end_iter())
|
||||
else:
|
||||
self.buf.move_mark(self.buf.get_selection_bound(), self.begin_iter())
|
||||
|
||||
def get_text(self):
|
||||
if self.begin and self.end:
|
||||
biter = self.begin_iter()
|
||||
eiter = self.end_iter()
|
||||
|
||||
if biter and eiter:
|
||||
return self.buf.get_text(self.begin_iter(), self.end_iter())
|
||||
else:
|
||||
return ''
|
||||
else:
|
||||
return ''
|
||||
|
||||
def add_mirror(self, mirror, onleave = False):
|
||||
mirror.has_references = True
|
||||
|
||||
if onleave:
|
||||
self.leave_mirrors.append(mirror)
|
||||
else:
|
||||
self.mirrors.append(mirror)
|
||||
|
||||
def set_text(self, text):
|
||||
if self.begin.get_deleted() or self.end.get_deleted():
|
||||
return
|
||||
|
||||
# Set from self.begin to self.end to text!
|
||||
self.buf.begin_user_action()
|
||||
# Remove everything between self.begin and self.end
|
||||
begin = self.begin_iter()
|
||||
self.buf.delete(begin, self.end_iter())
|
||||
|
||||
# Insert the text from the mirror
|
||||
insert_with_indent(self.view, begin, text, True, self)
|
||||
self.buf.end_user_action()
|
||||
|
||||
self.update_contents()
|
||||
|
||||
def update_contents(self):
|
||||
prev = self.prev_contents
|
||||
self.prev_contents = self.get_text()
|
||||
|
||||
if prev != self.get_text():
|
||||
for mirror in self.mirrors:
|
||||
if not mirror.update(self):
|
||||
return
|
||||
|
||||
def update_leave_mirrors(self):
|
||||
# Notify mirrors
|
||||
for mirror in self.leave_mirrors:
|
||||
if not mirror.update(self):
|
||||
return
|
||||
|
||||
# Do something on ending this placeholder
|
||||
def leave(self):
|
||||
self.update_leave_mirrors()
|
||||
|
||||
def find_mirrors(self, text, placeholders):
|
||||
mirrors = []
|
||||
|
||||
while (True):
|
||||
m = re.search('(\\\\)?\\$(?:{([0-9]+)}|([0-9]+))', text)
|
||||
|
||||
if not m:
|
||||
break
|
||||
|
||||
# Skip escaped mirrors
|
||||
if m.group(1):
|
||||
text = text[m.end():]
|
||||
continue
|
||||
|
||||
tabstop = int(m.group(2) or m.group(3))
|
||||
|
||||
if tabstop in placeholders:
|
||||
if not tabstop in mirrors:
|
||||
mirrors.append(tabstop)
|
||||
|
||||
text = text[m.end():]
|
||||
else:
|
||||
self.ok = False
|
||||
return None
|
||||
|
||||
return mirrors
|
||||
|
||||
# This is an placeholder which inserts a mirror of another Placeholder
|
||||
class PlaceholderMirror(Placeholder):
|
||||
def __init__(self, view, tabstop, begin):
|
||||
Placeholder.__init__(self, view, -1, None, begin)
|
||||
self.mirror_stop = tabstop
|
||||
|
||||
def update(self, mirror):
|
||||
self.set_text(mirror.get_text())
|
||||
return True
|
||||
|
||||
def run_last(self, placeholders):
|
||||
Placeholder.run_last(self, placeholders)
|
||||
|
||||
if self.mirror_stop in placeholders:
|
||||
mirror = placeholders[self.mirror_stop]
|
||||
|
||||
mirror.add_mirror(self)
|
||||
|
||||
if mirror.default:
|
||||
self.set_text(mirror.default)
|
||||
else:
|
||||
self.ok = False
|
||||
|
||||
# This placeholder indicates the end of a snippet
|
||||
class PlaceholderEnd(Placeholder):
|
||||
def __init__(self, view, begin, default):
|
||||
Placeholder.__init__(self, view, 0, default, begin)
|
||||
|
||||
def run_last(self, placeholders):
|
||||
Placeholder.run_last(self, placeholders)
|
||||
|
||||
# Remove the begin mark and set the begin mark
|
||||
# to the end mark, this is needed so the end placeholder won't contain
|
||||
# any text
|
||||
|
||||
if not self.default:
|
||||
self.mark_gravity[0] = False
|
||||
self.buf.delete_mark(self.begin)
|
||||
self.begin = self.buf.create_mark(None, self.end_iter(), self.mark_gravity[0])
|
||||
|
||||
def enter(self):
|
||||
if self.begin and not self.begin.get_deleted():
|
||||
self.buf.move_mark(self.buf.get_insert(), self.begin_iter())
|
||||
|
||||
if self.end and not self.end.get_deleted():
|
||||
self.buf.move_mark(self.buf.get_selection_bound(), self.end_iter())
|
||||
|
||||
def leave(self):
|
||||
self.enter()
|
||||
|
||||
# This placeholder is used to expand a command with embedded mirrors
|
||||
class PlaceholderExpand(Placeholder):
|
||||
def __init__(self, view, tabstop, begin, s):
|
||||
Placeholder.__init__(self, view, tabstop, None, begin)
|
||||
|
||||
self.mirror_text = {0: ''}
|
||||
self.timeout_id = None
|
||||
self.cmd = s
|
||||
self.instant_update = False
|
||||
|
||||
def __str__(self):
|
||||
s = Placeholder.__str__(self)
|
||||
|
||||
return s + ' ' + self.cmd
|
||||
|
||||
def get_mirrors(self, placeholders):
|
||||
return self.find_mirrors(self.cmd, placeholders)
|
||||
|
||||
# Check if all substitution placeholders are accounted for
|
||||
def run_last(self, placeholders):
|
||||
Placeholder.run_last(self, placeholders)
|
||||
|
||||
self.ok = True
|
||||
mirrors = self.get_mirrors(placeholders)
|
||||
|
||||
if mirrors:
|
||||
allDefault = True
|
||||
|
||||
for mirror in mirrors:
|
||||
p = placeholders[mirror]
|
||||
p.add_mirror(self, not self.instant_update)
|
||||
self.mirror_text[p.tabstop] = p.default
|
||||
|
||||
if not p.default and not isinstance(p, PlaceholderExpand):
|
||||
allDefault = False
|
||||
|
||||
if allDefault:
|
||||
self.update(None)
|
||||
self.default = self.get_text() or None
|
||||
else:
|
||||
self.update(None)
|
||||
self.default = self.get_text() or None
|
||||
|
||||
if self.tabstop == -1:
|
||||
self.done = True
|
||||
|
||||
def re_placeholder(self, m, formatter):
|
||||
if m.group(1):
|
||||
return '"$' + m.group(2) + '"'
|
||||
else:
|
||||
if m.group(3):
|
||||
index = int(m.group(3))
|
||||
else:
|
||||
index = int(m.group(4))
|
||||
|
||||
return formatter(self.mirror_text[index])
|
||||
|
||||
def remove_timeout(self):
|
||||
if self.timeout_id != None:
|
||||
gobject.source_remove(self.timeout_id)
|
||||
self.timeout_id = None
|
||||
|
||||
def install_timeout(self):
|
||||
self.remove_timeout()
|
||||
self.timeout_id = gobject.timeout_add(1000, self.timeout_cb)
|
||||
|
||||
def timeout_cb(self):
|
||||
self.timeout_id = None
|
||||
|
||||
return False
|
||||
|
||||
def format_environment(self, text):
|
||||
return self.literal(text)
|
||||
|
||||
def substitute(self, text, formatter = None):
|
||||
formatter = formatter or self.literal
|
||||
|
||||
# substitute all mirrors, but also environmental variables
|
||||
text = re.sub('(\\\\)?\\$({([0-9]+)}|([0-9]+))', lambda m: self.re_placeholder(m, formatter),
|
||||
text)
|
||||
|
||||
return self.expand_environment(text)
|
||||
|
||||
def run_update(self):
|
||||
text = self.substitute(self.cmd)
|
||||
|
||||
if text:
|
||||
ret = self.expand(text)
|
||||
|
||||
if ret:
|
||||
self.update_leave_mirrors()
|
||||
else:
|
||||
ret = True
|
||||
|
||||
return ret
|
||||
|
||||
def update(self, mirror):
|
||||
text = None
|
||||
|
||||
if mirror:
|
||||
self.mirror_text[mirror.tabstop] = mirror.get_text()
|
||||
|
||||
# Check if all substitutions have been made
|
||||
for tabstop in self.mirror_text:
|
||||
if tabstop == 0:
|
||||
continue
|
||||
|
||||
if self.mirror_text[tabstop] == None:
|
||||
return False
|
||||
|
||||
return self.run_update()
|
||||
|
||||
def expand(self, text):
|
||||
return True
|
||||
|
||||
# The shell placeholder executes commands in a subshell
|
||||
class PlaceholderShell(PlaceholderExpand):
|
||||
def __init__(self, view, tabstop, begin, s):
|
||||
PlaceholderExpand.__init__(self, view, tabstop, begin, s)
|
||||
|
||||
self.shell = None
|
||||
self.remove_me = False
|
||||
|
||||
def close_shell(self):
|
||||
self.shell.stdout.close()
|
||||
self.shell = None
|
||||
|
||||
def timeout_cb(self):
|
||||
PlaceholderExpand.timeout_cb(self)
|
||||
self.remove_timeout()
|
||||
|
||||
if not self.shell:
|
||||
return False
|
||||
|
||||
gobject.source_remove(self.watch_id)
|
||||
self.close_shell()
|
||||
|
||||
if self.remove_me:
|
||||
PlaceholderExpand.remove(self)
|
||||
|
||||
message_dialog(None, gtk.MESSAGE_ERROR, 'Execution of the shell ' \
|
||||
'command (%s) exceeded the maximum time; ' \
|
||||
'execution aborted.' % self.command)
|
||||
|
||||
return False
|
||||
|
||||
def process_close(self):
|
||||
self.close_shell()
|
||||
self.remove_timeout()
|
||||
|
||||
self.set_text(str.join('', self.shell_output).rstrip('\n'))
|
||||
|
||||
if self.default == None:
|
||||
self.default = self.get_text()
|
||||
self.leave()
|
||||
|
||||
if self.remove_me:
|
||||
PlaceholderExpand.remove(self, True)
|
||||
|
||||
def process_cb(self, source, condition):
|
||||
if condition & gobject.IO_IN:
|
||||
line = source.readline()
|
||||
|
||||
if len(line) > 0:
|
||||
try:
|
||||
line = unicode(line, 'utf-8')
|
||||
except:
|
||||
line = unicode(line, locale.getdefaultlocale()[1],
|
||||
'replace')
|
||||
|
||||
self.shell_output += line
|
||||
self.install_timeout()
|
||||
|
||||
return True
|
||||
|
||||
self.process_close()
|
||||
return False
|
||||
|
||||
def literal_replace(self, match):
|
||||
return "\\%s" % (match.group(0))
|
||||
|
||||
def literal(self, text):
|
||||
return '"' + re.sub('([\\\\"])', self.literal_replace, text) + '"'
|
||||
|
||||
def expand(self, text):
|
||||
self.remove_timeout()
|
||||
|
||||
if self.shell:
|
||||
gobject.source_remove(self.watch_id)
|
||||
self.close_shell()
|
||||
|
||||
popen_args = {
|
||||
'cwd' : None,
|
||||
'shell': True,
|
||||
'env' : os.environ,
|
||||
'stdout': subprocess.PIPE
|
||||
}
|
||||
|
||||
self.command = text
|
||||
self.shell = subprocess.Popen(text, **popen_args)
|
||||
self.shell_output = ''
|
||||
self.watch_id = gobject.io_add_watch(self.shell.stdout, gobject.IO_IN | \
|
||||
gobject.IO_HUP, self.process_cb)
|
||||
self.install_timeout()
|
||||
|
||||
return True
|
||||
|
||||
def remove(self, force = False):
|
||||
if not force and self.shell:
|
||||
# Still executing shell command
|
||||
self.remove_me = True
|
||||
else:
|
||||
if force:
|
||||
self.remove_timeout()
|
||||
|
||||
if self.shell:
|
||||
self.close_shell()
|
||||
|
||||
PlaceholderExpand.remove(self, force)
|
||||
|
||||
class TimeoutError(Exception):
|
||||
def __init__(self, value):
|
||||
self.value = value
|
||||
|
||||
def __str__(self):
|
||||
return repr(self.value)
|
||||
|
||||
# The python placeholder evaluates commands in python
|
||||
class PlaceholderEval(PlaceholderExpand):
|
||||
def __init__(self, view, tabstop, refs, begin, s, namespace):
|
||||
PlaceholderExpand.__init__(self, view, tabstop, begin, s)
|
||||
|
||||
self.fdread = 0
|
||||
self.remove_me = False
|
||||
self.namespace = namespace
|
||||
|
||||
self.refs = []
|
||||
|
||||
if refs:
|
||||
for ref in refs:
|
||||
self.refs.append(int(ref.strip()))
|
||||
|
||||
def get_mirrors(self, placeholders):
|
||||
mirrors = PlaceholderExpand.get_mirrors(self, placeholders)
|
||||
|
||||
if not self.ok:
|
||||
return None
|
||||
|
||||
for ref in self.refs:
|
||||
if ref in placeholders:
|
||||
if ref not in mirrors:
|
||||
mirrors.append(ref)
|
||||
else:
|
||||
self.ok = False
|
||||
return None
|
||||
|
||||
return mirrors
|
||||
|
||||
# SIGALRM is not supported on all platforms (e.g. windows). Timeout
|
||||
# with SIGALRM will not be used on those platforms. This will
|
||||
# potentially block gedit if you have a placeholder which gets stuck,
|
||||
# but it's better than not supporting them at all. At some point we
|
||||
# might have proper thread support and we can fix this in a better way
|
||||
def timeout_supported(self):
|
||||
return hasattr(signal, 'SIGALRM')
|
||||
|
||||
def timeout_cb(self, signum = 0, frame = 0):
|
||||
raise TimeoutError, "Operation timed out (>2 seconds)"
|
||||
|
||||
def install_timeout(self):
|
||||
if not self.timeout_supported():
|
||||
return
|
||||
|
||||
if self.timeout_id != None:
|
||||
self.remove_timeout()
|
||||
|
||||
self.timeout_id = signal.signal(signal.SIGALRM, self.timeout_cb)
|
||||
signal.alarm(2)
|
||||
|
||||
def remove_timeout(self):
|
||||
if not self.timeout_supported():
|
||||
return
|
||||
|
||||
if self.timeout_id != None:
|
||||
signal.alarm(0)
|
||||
|
||||
signal.signal(signal.SIGALRM, self.timeout_id)
|
||||
|
||||
self.timeout_id = None
|
||||
|
||||
def expand(self, text):
|
||||
self.remove_timeout()
|
||||
|
||||
text = text.strip()
|
||||
self.command = text
|
||||
|
||||
if not self.command or self.command == '':
|
||||
self.set_text('')
|
||||
return
|
||||
|
||||
text = "def process_snippet():\n\t" + "\n\t".join(text.split("\n"))
|
||||
|
||||
if 'process_snippet' in self.namespace:
|
||||
del self.namespace['process_snippet']
|
||||
|
||||
try:
|
||||
exec text in self.namespace
|
||||
except:
|
||||
traceback.print_exc()
|
||||
|
||||
if 'process_snippet' in self.namespace:
|
||||
try:
|
||||
# Install a sigalarm signal. This is a HACK to make sure
|
||||
# gedit doesn't get freezed by someone creating a python
|
||||
# placeholder which for instance loops indefinately. Since
|
||||
# the code is executed synchronously it will hang gedit. With
|
||||
# the alarm signal we raise an exception and catch this
|
||||
# (see below). We show an error message and return False.
|
||||
# ___this is a HACK___ and should be fixed properly (I just
|
||||
# don't know how)
|
||||
self.install_timeout()
|
||||
result = self.namespace['process_snippet']()
|
||||
self.remove_timeout()
|
||||
except TimeoutError:
|
||||
self.remove_timeout()
|
||||
|
||||
message_dialog(None, gtk.MESSAGE_ERROR, \
|
||||
_('Execution of the Python command (%s) exceeds the maximum ' \
|
||||
'time, execution aborted.') % self.command)
|
||||
|
||||
return False
|
||||
except Exception, detail:
|
||||
self.remove_timeout()
|
||||
|
||||
message_dialog(None, gtk.MESSAGE_ERROR,
|
||||
_('Execution of the Python command (%s) failed: %s') %
|
||||
(self.command, detail))
|
||||
|
||||
return False
|
||||
|
||||
if result == None:
|
||||
# sys.stderr.write("%s:\n>> %s\n" % (_('The following python code, run in a snippet, does not return a value'), "\n>> ".join(self.command.split("\n"))))
|
||||
result = ''
|
||||
|
||||
self.set_text(str(result))
|
||||
|
||||
return True
|
||||
|
||||
# Regular expression placeholder
|
||||
class PlaceholderRegex(PlaceholderExpand):
|
||||
def __init__(self, view, tabstop, begin, inp, pattern, substitution, modifiers):
|
||||
PlaceholderExpand.__init__(self, view, tabstop, begin, '')
|
||||
|
||||
self.instant_update = True
|
||||
self.inp = inp
|
||||
self.pattern = pattern
|
||||
self.substitution = substitution
|
||||
|
||||
self.init_modifiers(modifiers)
|
||||
|
||||
def init_modifiers(self, modifiers):
|
||||
mods = {'I': re.I,
|
||||
'L': re.L,
|
||||
'M': re.M,
|
||||
'S': re.S,
|
||||
'U': re.U,
|
||||
'X': re.X}
|
||||
|
||||
self.modifiers = 0
|
||||
|
||||
for modifier in modifiers:
|
||||
if modifier in mods:
|
||||
self.modifiers |= mods[modifier]
|
||||
|
||||
def get_mirrors(self, placeholders):
|
||||
mirrors = self.find_mirrors(self.pattern, placeholders) + self.find_mirrors(self.substitution, placeholders)
|
||||
|
||||
if isinstance(self.inp, int):
|
||||
if self.inp not in placeholders:
|
||||
self.ok = False
|
||||
return None
|
||||
elif self.inp not in mirrors:
|
||||
mirrors.append(self.inp)
|
||||
|
||||
return mirrors
|
||||
|
||||
def literal(self, s):
|
||||
return re.escape(s)
|
||||
|
||||
def get_input(self):
|
||||
if isinstance(self.inp, int):
|
||||
return self.mirror_text[self.inp]
|
||||
elif self.inp in os.environ:
|
||||
return os.environ[self.inp]
|
||||
else:
|
||||
return ''
|
||||
|
||||
def run_update(self):
|
||||
pattern = self.substitute(self.pattern)
|
||||
substitution = self.substitute(self.substitution, SubstitutionParser.escape_substitution)
|
||||
|
||||
if pattern:
|
||||
return self.expand(pattern, substitution)
|
||||
|
||||
return True
|
||||
|
||||
def expand(self, pattern, substitution):
|
||||
# Try to compile pattern
|
||||
try:
|
||||
regex = re.compile(pattern, self.modifiers)
|
||||
except re.error, message:
|
||||
sys.stderr.write('Could not compile regular expression: %s\n%s\n' % (pattern, message))
|
||||
return False
|
||||
|
||||
inp = self.get_input()
|
||||
match = regex.search(inp)
|
||||
|
||||
if not match:
|
||||
self.set_text(inp)
|
||||
else:
|
||||
groups = match.groupdict()
|
||||
|
||||
idx = 0
|
||||
for group in match.groups():
|
||||
groups[str(idx + 1)] = group
|
||||
idx += 1
|
||||
|
||||
groups['0'] = match.group(0)
|
||||
|
||||
parser = SubstitutionParser(substitution, groups)
|
||||
self.set_text(parser.parse())
|
||||
|
||||
return True
|
||||
# ex:ts=8:et:
|
355
plugins/snippets/snippets/Snippet.py
Executable file
355
plugins/snippets/snippets/Snippet.py
Executable file
@@ -0,0 +1,355 @@
|
||||
# Gedit snippets plugin
|
||||
# Copyright (C) 2005-2006 Jesse van den Kieboom <jesse@icecrew.nl>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
import os
|
||||
import gio
|
||||
|
||||
from Placeholder import *
|
||||
from Parser import Parser, Token
|
||||
from Helper import *
|
||||
|
||||
class EvalUtilities:
|
||||
def __init__(self, view=None):
|
||||
self.view = view
|
||||
self._init_namespace()
|
||||
|
||||
def _init_namespace(self):
|
||||
self.namespace = {
|
||||
'__builtins__': __builtins__,
|
||||
'align': self.util_align,
|
||||
'readfile': self.util_readfile,
|
||||
'filesize': self.util_filesize
|
||||
}
|
||||
|
||||
def _real_len(self, s, tablen = 0):
|
||||
if tablen == 0:
|
||||
tablen = self.view.get_tab_width()
|
||||
|
||||
return len(s.expandtabs(tablen))
|
||||
|
||||
def _filename_to_uri(self, filename):
|
||||
gfile = gio.File(filename)
|
||||
|
||||
return gfile.get_uri()
|
||||
|
||||
def util_readfile(self, filename):
|
||||
stream = gio.File(filename).read()
|
||||
|
||||
if not stream:
|
||||
return ''
|
||||
|
||||
res = stream.read()
|
||||
stream.close()
|
||||
|
||||
return res
|
||||
|
||||
def util_filesize(self, filename):
|
||||
gfile = gio.File(filename)
|
||||
info = gfile.query_info(gio.FILE_ATTRIBUTE_STANDARD_SIZE)
|
||||
|
||||
if not info:
|
||||
return 0
|
||||
|
||||
return info.get_size()
|
||||
|
||||
def util_align(self, items):
|
||||
maxlen = []
|
||||
tablen = self.view.get_tab_width()
|
||||
|
||||
for row in range(0, len(items)):
|
||||
for col in range(0, len(items[row]) - 1):
|
||||
if row == 0:
|
||||
maxlen.append(0)
|
||||
|
||||
items[row][col] += "\t"
|
||||
rl = self._real_len(items[row][col], tablen)
|
||||
|
||||
if (rl > maxlen[col]):
|
||||
maxlen[col] = rl
|
||||
|
||||
result = ''
|
||||
|
||||
for row in range(0, len(items)):
|
||||
for col in range(0, len(items[row]) - 1):
|
||||
item = items[row][col]
|
||||
|
||||
result += item + ("\t" * ((maxlen[col] - \
|
||||
self._real_len(item, tablen)) / tablen))
|
||||
|
||||
result += items[row][len(items[row]) - 1]
|
||||
|
||||
if row != len(items) - 1:
|
||||
result += "\n"
|
||||
|
||||
return result
|
||||
|
||||
class Snippet:
|
||||
def __init__(self, data):
|
||||
self.data = data
|
||||
|
||||
def __getitem__(self, prop):
|
||||
return self.data[prop]
|
||||
|
||||
def __setitem__(self, prop, value):
|
||||
self.data[prop] = value
|
||||
|
||||
def accelerator_display(self):
|
||||
accel = self['accelerator']
|
||||
|
||||
if accel:
|
||||
keyval, mod = gtk.accelerator_parse(accel)
|
||||
accel = gtk.accelerator_get_label(keyval, mod)
|
||||
|
||||
return accel or ''
|
||||
|
||||
def display(self):
|
||||
nm = markup_escape(self['description'])
|
||||
|
||||
tag = self['tag']
|
||||
accel = self.accelerator_display()
|
||||
detail = []
|
||||
|
||||
if tag and tag != '':
|
||||
detail.append(tag)
|
||||
|
||||
if accel and accel != '':
|
||||
detail.append(accel)
|
||||
|
||||
if not detail:
|
||||
return nm
|
||||
else:
|
||||
return nm + ' (<b>' + markup_escape(str.join(', ', detail)) + \
|
||||
'</b>)'
|
||||
|
||||
def _add_placeholder(self, placeholder):
|
||||
if placeholder.tabstop in self.placeholders:
|
||||
if placeholder.tabstop == -1:
|
||||
self.placeholders[-1].append(placeholder)
|
||||
self.plugin_data.ordered_placeholders.append(placeholder)
|
||||
elif placeholder.tabstop == -1:
|
||||
self.placeholders[-1] = [placeholder]
|
||||
self.plugin_data.ordered_placeholders.append(placeholder)
|
||||
else:
|
||||
self.placeholders[placeholder.tabstop] = placeholder
|
||||
self.plugin_data.ordered_placeholders.append(placeholder)
|
||||
|
||||
def _insert_text(self, text):
|
||||
# Insert text keeping indentation in mind
|
||||
indented = unicode.join('\n' + unicode(self._indent), spaces_instead_of_tabs(self._view, text).split('\n'))
|
||||
self._view.get_buffer().insert(self._insert_iter(), indented)
|
||||
|
||||
def _insert_iter(self):
|
||||
return self._view.get_buffer().get_iter_at_mark(self._insert_mark)
|
||||
|
||||
def _create_environment(self, data):
|
||||
val = ((data in os.environ) and os.environ[data]) or ''
|
||||
|
||||
# Get all the current indentation
|
||||
all_indent = compute_indentation(self._view, self._insert_iter())
|
||||
|
||||
# Substract initial indentation to get the snippet indentation
|
||||
indent = all_indent[len(self._indent):]
|
||||
|
||||
# Keep indentation
|
||||
return unicode.join('\n' + unicode(indent), val.split('\n'))
|
||||
|
||||
def _create_placeholder(self, data):
|
||||
tabstop = data['tabstop']
|
||||
begin = self._insert_iter()
|
||||
|
||||
if tabstop == 0:
|
||||
# End placeholder
|
||||
return PlaceholderEnd(self._view, begin, data['default'])
|
||||
elif tabstop in self.placeholders:
|
||||
# Mirror placeholder
|
||||
return PlaceholderMirror(self._view, tabstop, begin)
|
||||
else:
|
||||
# Default placeholder
|
||||
return Placeholder(self._view, tabstop, data['default'], begin)
|
||||
|
||||
def _create_shell(self, data):
|
||||
begin = self._insert_iter()
|
||||
return PlaceholderShell(self._view, data['tabstop'], begin, data['contents'])
|
||||
|
||||
def _create_eval(self, data):
|
||||
begin = self._insert_iter()
|
||||
return PlaceholderEval(self._view, data['tabstop'], data['dependencies'], begin, data['contents'], self._utils.namespace)
|
||||
|
||||
def _create_regex(self, data):
|
||||
begin = self._insert_iter()
|
||||
return PlaceholderRegex(self._view, data['tabstop'], begin, data['input'], data['pattern'], data['substitution'], data['modifiers'])
|
||||
|
||||
def _create_text(self, data):
|
||||
return data
|
||||
|
||||
def _invalid_placeholder(self, placeholder, remove):
|
||||
buf = self._view.get_buffer()
|
||||
|
||||
# Remove the text because this placeholder is invalid
|
||||
if placeholder.default and remove:
|
||||
buf.delete(placeholder.begin_iter(), placeholder.end_iter())
|
||||
|
||||
placeholder.remove()
|
||||
|
||||
if placeholder.tabstop == -1:
|
||||
index = self.placeholders[-1].index(placeholder)
|
||||
del self.placeholders[-1][index]
|
||||
else:
|
||||
del self.placeholders[placeholder.tabstop]
|
||||
|
||||
self.plugin_data.ordered_placeholders.remove(placeholder)
|
||||
|
||||
def _parse(self, plugin_data):
|
||||
# Initialize current variables
|
||||
self._view = plugin_data.view
|
||||
self._indent = compute_indentation(self._view, self._view.get_buffer().get_iter_at_mark(self.begin_mark))
|
||||
self._utils = EvalUtilities(self._view)
|
||||
self.placeholders = {}
|
||||
self._insert_mark = self.end_mark
|
||||
self.plugin_data = plugin_data
|
||||
|
||||
# Create parser
|
||||
parser = Parser(data=self['text'])
|
||||
|
||||
# Parse tokens
|
||||
while (True):
|
||||
token = parser.token()
|
||||
|
||||
if not token:
|
||||
break
|
||||
|
||||
try:
|
||||
val = {'environment': self._create_environment,
|
||||
'placeholder': self._create_placeholder,
|
||||
'shell': self._create_shell,
|
||||
'eval': self._create_eval,
|
||||
'regex': self._create_regex,
|
||||
'text': self._create_text}[token.klass](token.data)
|
||||
except:
|
||||
sys.stderr.write('Token class not supported: %s\n' % token.klass)
|
||||
continue
|
||||
|
||||
if isinstance(val, basestring):
|
||||
# Insert text
|
||||
self._insert_text(val)
|
||||
else:
|
||||
# Insert placeholder
|
||||
self._add_placeholder(val)
|
||||
|
||||
# Create end placeholder if there isn't one yet
|
||||
if 0 not in self.placeholders:
|
||||
self.placeholders[0] = PlaceholderEnd(self._view, self.end_iter(), None)
|
||||
self.plugin_data.ordered_placeholders.append(self.placeholders[0])
|
||||
|
||||
# Make sure run_last is ran for all placeholders and remove any
|
||||
# non `ok` placeholders
|
||||
for tabstop in self.placeholders.copy():
|
||||
ph = (tabstop == -1 and list(self.placeholders[-1])) or [self.placeholders[tabstop]]
|
||||
|
||||
for placeholder in ph:
|
||||
placeholder.run_last(self.placeholders)
|
||||
|
||||
if not placeholder.ok or placeholder.done:
|
||||
self._invalid_placeholder(placeholder, not placeholder.ok)
|
||||
|
||||
# Remove all the Expand placeholders which have a tabstop because
|
||||
# they can be used to mirror, but they shouldn't be real tabstops
|
||||
# (if they have mirrors installed). This is problably a bit of
|
||||
# a dirty hack :)
|
||||
if -1 not in self.placeholders:
|
||||
self.placeholders[-1] = []
|
||||
|
||||
for tabstop in self.placeholders.copy():
|
||||
placeholder = self.placeholders[tabstop]
|
||||
|
||||
if tabstop != -1:
|
||||
if isinstance(placeholder, PlaceholderExpand) and \
|
||||
placeholder.has_references:
|
||||
# Add to anonymous placeholders
|
||||
self.placeholders[-1].append(placeholder)
|
||||
|
||||
# Remove placeholder
|
||||
del self.placeholders[tabstop]
|
||||
|
||||
self.plugin_data = None
|
||||
|
||||
def insert_into(self, plugin_data, insert):
|
||||
buf = plugin_data.view.get_buffer()
|
||||
last_index = 0
|
||||
|
||||
# Find closest mark at current insertion, so that we may insert
|
||||
# our marks in the correct order
|
||||
(current, next) = plugin_data.next_placeholder()
|
||||
|
||||
if current:
|
||||
# Insert AFTER current
|
||||
last_index = plugin_data.placeholders.index(current) + 1
|
||||
elif next:
|
||||
# Insert BEFORE next
|
||||
last_index = plugin_data.placeholders.index(next)
|
||||
else:
|
||||
# Insert at first position
|
||||
last_index = 0
|
||||
|
||||
# lastIndex now contains the position of the last mark
|
||||
# Create snippet bounding marks
|
||||
self.begin_mark = buf.create_mark(None, insert, True)
|
||||
self.end_mark = buf.create_mark(None, insert, False)
|
||||
|
||||
# Now parse the contents of this snippet, create Placeholders
|
||||
# and insert the placholder marks in the marks array of plugin_data
|
||||
self._parse(plugin_data)
|
||||
|
||||
# So now all of the snippet is in the buffer, we have all our
|
||||
# placeholders right here, what's next, put all marks in the
|
||||
# plugin_data.marks
|
||||
k = self.placeholders.keys()
|
||||
k.sort(reverse=True)
|
||||
|
||||
plugin_data.placeholders.insert(last_index, self.placeholders[0])
|
||||
last_iter = self.placeholders[0].end_iter()
|
||||
|
||||
for tabstop in k:
|
||||
if tabstop != -1 and tabstop != 0:
|
||||
placeholder = self.placeholders[tabstop]
|
||||
end_iter = placeholder.end_iter()
|
||||
|
||||
if last_iter.compare(end_iter) < 0:
|
||||
last_iter = end_iter
|
||||
|
||||
# Inserting placeholder
|
||||
plugin_data.placeholders.insert(last_index, placeholder)
|
||||
|
||||
# Move end mark to last placeholder
|
||||
buf.move_mark(self.end_mark, last_iter)
|
||||
|
||||
return self
|
||||
|
||||
def deactivate(self):
|
||||
buf = self.begin_mark.get_buffer()
|
||||
|
||||
buf.delete_mark(self.begin_mark)
|
||||
buf.delete_mark(self.end_mark)
|
||||
|
||||
self.placeholders = {}
|
||||
|
||||
def begin_iter(self):
|
||||
return self.begin_mark.get_buffer().get_iter_at_mark(self.begin_mark)
|
||||
|
||||
def end_iter(self):
|
||||
return self.end_mark.get_buffer().get_iter_at_mark(self.end_mark)
|
||||
# ex:ts=8:et:
|
202
plugins/snippets/snippets/SubstitutionParser.py
Executable file
202
plugins/snippets/snippets/SubstitutionParser.py
Executable file
@@ -0,0 +1,202 @@
|
||||
# Gedit snippets plugin
|
||||
# Copyright (C) 2006-2007 Jesse van den Kieboom <jesse@icecrew.nl>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
import re
|
||||
|
||||
class ParseError(Exception):
|
||||
def __str__(self):
|
||||
return 'Parse error, resume next'
|
||||
|
||||
class Modifiers:
|
||||
def _first_char(s):
|
||||
first = (s != '' and s[0]) or ''
|
||||
rest = (len(s) > 1 and s[1:]) or ''
|
||||
|
||||
return first, rest
|
||||
|
||||
def upper_first(s):
|
||||
first, rest = Modifiers._first_char(s)
|
||||
|
||||
return '%s%s' % (first.upper(), rest)
|
||||
|
||||
def upper(s):
|
||||
return s.upper()
|
||||
|
||||
def lower_first(s):
|
||||
first, rest = Modifiers._first_char(s)
|
||||
|
||||
return '%s%s' % (first.lower(), rest)
|
||||
|
||||
def lower(s):
|
||||
return s.lower()
|
||||
|
||||
def title(s):
|
||||
return s.title()
|
||||
|
||||
upper_first = staticmethod(upper_first)
|
||||
upper = staticmethod(upper)
|
||||
lower_first = staticmethod(lower_first)
|
||||
lower = staticmethod(lower)
|
||||
title = staticmethod(title)
|
||||
_first_char = staticmethod(_first_char)
|
||||
|
||||
class SubstitutionParser:
|
||||
REG_ID = '[0-9]+'
|
||||
REG_NAME = '[a-zA-Z_]+'
|
||||
REG_MOD = '[a-zA-Z]+'
|
||||
REG_ESCAPE = '\\\\|\\(\\?|,|\\)'
|
||||
|
||||
def __init__(self, pattern, groups = {}, modifiers = {}):
|
||||
self.pattern = pattern
|
||||
self.groups = groups
|
||||
|
||||
self.REG_GROUP = '(?:(%s)|<(%s|%s)(?:,(%s))?>)' % (self.REG_ID, self.REG_ID, self.REG_NAME, self.REG_MOD)
|
||||
self.modifiers = {'u': Modifiers.upper_first,
|
||||
'U': Modifiers.upper,
|
||||
'l': Modifiers.lower_first,
|
||||
'L': Modifiers.lower,
|
||||
't': Modifiers.title}
|
||||
|
||||
for k, v in modifiers.items():
|
||||
self.modifiers[k] = v
|
||||
|
||||
def parse(self):
|
||||
result, tokens = self._parse(self.pattern, None)
|
||||
|
||||
return result
|
||||
|
||||
def _parse(self, tokens, terminator):
|
||||
result = ''
|
||||
|
||||
while tokens != '':
|
||||
if self._peek(tokens) == '' or self._peek(tokens) == terminator:
|
||||
tokens = self._remains(tokens)
|
||||
break
|
||||
|
||||
try:
|
||||
res, tokens = self._expr(tokens, terminator)
|
||||
except ParseError:
|
||||
res, tokens = self._text(tokens)
|
||||
|
||||
result += res
|
||||
|
||||
return result, tokens
|
||||
|
||||
def _peek(self, tokens, num = 0):
|
||||
return (num < len(tokens) and tokens[num])
|
||||
|
||||
def _token(self, tokens):
|
||||
if tokens == '':
|
||||
return '', '';
|
||||
|
||||
return tokens[0], (len(tokens) > 1 and tokens[1:]) or ''
|
||||
|
||||
def _remains(self, tokens, num = 1):
|
||||
return (num < len(tokens) and tokens[num:]) or ''
|
||||
|
||||
def _expr(self, tokens, terminator):
|
||||
if tokens == '':
|
||||
return ''
|
||||
|
||||
try:
|
||||
return {'\\': self._escape,
|
||||
'(': self._condition}[self._peek(tokens)](tokens, terminator)
|
||||
except KeyError:
|
||||
raise ParseError
|
||||
|
||||
def _text(self, tokens):
|
||||
return self._token(tokens)
|
||||
|
||||
def _substitute(self, group, modifiers = ''):
|
||||
result = (self.groups.has_key(group) and self.groups[group]) or ''
|
||||
|
||||
for modifier in modifiers:
|
||||
if self.modifiers.has_key(modifier):
|
||||
result = self.modifiers[modifier](result)
|
||||
|
||||
return result
|
||||
|
||||
def _match_group(self, tokens):
|
||||
match = re.match('\\\\%s' % self.REG_GROUP, tokens)
|
||||
|
||||
if not match:
|
||||
return None, tokens
|
||||
|
||||
return self._substitute(match.group(1) or match.group(2), match.group(3) or ''), tokens[match.end():]
|
||||
|
||||
def _escape(self, tokens, terminator):
|
||||
# Try to match a group
|
||||
result, tokens = self._match_group(tokens)
|
||||
|
||||
if result != None:
|
||||
return result, tokens
|
||||
|
||||
s = self.REG_GROUP
|
||||
|
||||
if terminator:
|
||||
s += '|%s' % re.escape(terminator)
|
||||
|
||||
match = re.match('\\\\(\\\\%s|%s)' % (s, self.REG_ESCAPE), tokens)
|
||||
|
||||
if not match:
|
||||
raise ParseError
|
||||
|
||||
return match.group(1), tokens[match.end():]
|
||||
|
||||
def _condition_value(self, tokens):
|
||||
match = re.match('\\\\?%s\s*' % self.REG_GROUP, tokens)
|
||||
|
||||
if not match:
|
||||
return None, tokens
|
||||
|
||||
groups = match.groups()
|
||||
name = groups[0] or groups[1]
|
||||
|
||||
return self.groups.has_key(name) and self.groups[name] != None, tokens[match.end():]
|
||||
|
||||
def _condition(self, tokens, terminator):
|
||||
# Match ? after (
|
||||
if self._peek(tokens, 1) != '?':
|
||||
raise ParseError
|
||||
|
||||
# Remove initial (? token
|
||||
tokens = self._remains(tokens, 2)
|
||||
condition, tokens = self._condition_value(tokens)
|
||||
|
||||
if condition == None or self._peek(tokens) != ',':
|
||||
raise ParseError
|
||||
|
||||
truepart, tokens = self._parse(self._remains(tokens), ',')
|
||||
|
||||
if truepart == None:
|
||||
raise ParseError
|
||||
|
||||
falsepart, tokens = self._parse(tokens, ')')
|
||||
|
||||
if falsepart == None:
|
||||
raise ParseError
|
||||
|
||||
if condition:
|
||||
return truepart, tokens
|
||||
else:
|
||||
return falsepart, tokens
|
||||
|
||||
def escape_substitution(substitution):
|
||||
return re.sub('(%s|%s)' % (self.REG_GROUP, self.REG_ESCAPE), '\\\\\\1', substitution)
|
||||
|
||||
escapesubstitution = staticmethod(escape_substitution)
|
||||
# ex:ts=8:et:
|
209
plugins/snippets/snippets/WindowHelper.py
Executable file
209
plugins/snippets/snippets/WindowHelper.py
Executable file
@@ -0,0 +1,209 @@
|
||||
# Gedit snippets plugin
|
||||
# Copyright (C) 2005-2006 Jesse van den Kieboom <jesse@icecrew.nl>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
import re
|
||||
import os
|
||||
import gettext
|
||||
|
||||
import gtk
|
||||
from gtk import gdk
|
||||
import gedit
|
||||
|
||||
from Document import Document
|
||||
from Library import Library
|
||||
|
||||
class WindowHelper:
|
||||
def __init__(self, plugin):
|
||||
self.plugin = plugin
|
||||
self.current_controller = None
|
||||
self.current_language = None
|
||||
self.signal_ids = {}
|
||||
|
||||
def run(self, window):
|
||||
self.window = window
|
||||
|
||||
self.insert_menu()
|
||||
self.register_messages()
|
||||
|
||||
self.accel_group = Library().get_accel_group(None)
|
||||
|
||||
window.add_accel_group(self.accel_group)
|
||||
window.connect('tab-added', self.on_tab_added)
|
||||
|
||||
# Add controllers to all the current views
|
||||
for view in self.window.get_views():
|
||||
if isinstance(view, gedit.View) and not self.has_controller(view):
|
||||
view._snippet_controller = Document(self, view)
|
||||
|
||||
self.update()
|
||||
|
||||
def stop(self):
|
||||
self.window.remove_accel_group(self.accel_group)
|
||||
self.accel_group = None
|
||||
|
||||
#self.window.remove_accel_group(accel)
|
||||
self.remove_menu()
|
||||
self.unregister_messages()
|
||||
|
||||
# Iterate over all the tabs and remove every controller
|
||||
for view in self.window.get_views():
|
||||
if isinstance(view, gedit.View) and self.has_controller(view):
|
||||
view._snippet_controller.stop()
|
||||
view._snippet_controller = None
|
||||
|
||||
self.window = None
|
||||
self.plugin = None
|
||||
|
||||
def register_messages(self):
|
||||
bus = self.window.get_message_bus()
|
||||
|
||||
self.messages = {
|
||||
'activate': bus.register('/plugins/snippets', 'activate', ('view', 'iter'), trigger=str, view=gedit.View, iter=gtk.TextIter),
|
||||
'parse-and-activate': bus.register('/plugins/snippets', 'parse-and-activate', ('view', 'iter'), snippet=str, view=gedit.View, iter=gtk.TextIter)
|
||||
}
|
||||
|
||||
bus.connect('/plugins/snippets', 'activate', self.on_message_activate)
|
||||
bus.connect('/plugins/snippets', 'parse-and-activate', self.on_message_parse_and_activate)
|
||||
|
||||
def unregister_messages(self):
|
||||
bus = self.window.get_message_bus()
|
||||
|
||||
for name in self.messages:
|
||||
bus.unregister(self.messages[name])
|
||||
|
||||
self.messages = {}
|
||||
|
||||
def on_message_activate(self, bus, message):
|
||||
if message.has_key('view'):
|
||||
view = message.view
|
||||
else:
|
||||
view = self.window.get_active_view()
|
||||
|
||||
if not self.has_controller(view):
|
||||
return
|
||||
|
||||
if message.has_key('iter'):
|
||||
iter = message.iter
|
||||
else:
|
||||
iter = view.get_buffer().get_iter_at_mark(view.get_buffer().get_insert())
|
||||
|
||||
controller = view._snippet_controller
|
||||
controller.run_snippet_trigger(message.trigger, (iter, iter))
|
||||
|
||||
def on_message_parse_and_activate(self, bus, message):
|
||||
if message.has_key('view'):
|
||||
view = message.view
|
||||
else:
|
||||
view = self.window.get_active_view()
|
||||
|
||||
if not self.has_controller(view):
|
||||
return
|
||||
|
||||
if message.has_key('iter'):
|
||||
iter = message.iter
|
||||
else:
|
||||
iter = view.get_buffer().get_iter_at_mark(view.get_buffer().get_insert())
|
||||
|
||||
controller = view._snippet_controller
|
||||
controller.parse_and_run_snippet(message.snippet, iter)
|
||||
|
||||
def insert_menu(self):
|
||||
manager = self.window.get_ui_manager()
|
||||
|
||||
self.action_group = gtk.ActionGroup("GeditSnippetPluginActions")
|
||||
self.action_group.set_translation_domain('gedit')
|
||||
self.action_group.add_actions([('ManageSnippets', None,
|
||||
_('Manage _Snippets...'), \
|
||||
None, _('Manage snippets'), \
|
||||
self.on_action_snippets_activate)])
|
||||
|
||||
self.merge_id = manager.new_merge_id()
|
||||
manager.insert_action_group(self.action_group, -1)
|
||||
manager.add_ui(self.merge_id, '/MenuBar/ToolsMenu/ToolsOps_5', \
|
||||
'ManageSnippets', 'ManageSnippets', gtk.UI_MANAGER_MENUITEM, False)
|
||||
|
||||
def remove_menu(self):
|
||||
manager = self.window.get_ui_manager()
|
||||
manager.remove_ui(self.merge_id)
|
||||
manager.remove_action_group(self.action_group)
|
||||
self.action_group = None
|
||||
|
||||
def find_snippet(self, snippets, tag):
|
||||
result = []
|
||||
|
||||
for snippet in snippets:
|
||||
if Snippet(snippet)['tag'] == tag:
|
||||
result.append(snippet)
|
||||
|
||||
return result
|
||||
|
||||
def has_controller(self, view):
|
||||
return hasattr(view, '_snippet_controller') and view._snippet_controller
|
||||
|
||||
def update_language(self):
|
||||
if not self.window:
|
||||
return
|
||||
|
||||
if self.current_language:
|
||||
accel_group = Library().get_accel_group( \
|
||||
self.current_language)
|
||||
self.window.remove_accel_group(accel_group)
|
||||
|
||||
if self.current_controller:
|
||||
self.current_language = self.current_controller.language_id
|
||||
|
||||
if self.current_language != None:
|
||||
accel_group = Library().get_accel_group( \
|
||||
self.current_language)
|
||||
self.window.add_accel_group(accel_group)
|
||||
else:
|
||||
self.current_language = None
|
||||
|
||||
def language_changed(self, controller):
|
||||
if controller == self.current_controller:
|
||||
self.update_language()
|
||||
|
||||
def update(self):
|
||||
view = self.window.get_active_view()
|
||||
|
||||
if not view or not self.has_controller(view):
|
||||
return
|
||||
|
||||
controller = view._snippet_controller
|
||||
|
||||
if controller != self.current_controller:
|
||||
self.current_controller = controller
|
||||
self.update_language()
|
||||
|
||||
# Callbacks
|
||||
|
||||
def on_tab_added(self, window, tab):
|
||||
# Create a new controller for this tab if it has a standard gedit view
|
||||
view = tab.get_view()
|
||||
|
||||
if isinstance(view, gedit.View) and not self.has_controller(view):
|
||||
view._snippet_controller = Document(self, view)
|
||||
|
||||
self.update()
|
||||
|
||||
def on_action_snippets_activate(self, item):
|
||||
self.plugin.create_configure_dialog()
|
||||
|
||||
def accelerator_activated(self, keyval, mod):
|
||||
return self.current_controller.accelerator_activate(keyval, mod)
|
||||
|
||||
# ex:ts=8:et:
|
101
plugins/snippets/snippets/__init__.py
Executable file
101
plugins/snippets/snippets/__init__.py
Executable file
@@ -0,0 +1,101 @@
|
||||
# Gedit snippets plugin
|
||||
# Copyright (C) 2005-2006 Jesse van den Kieboom <jesse@icecrew.nl>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
import sys
|
||||
import os
|
||||
import shutil
|
||||
|
||||
import gtk
|
||||
from gtk import gdk
|
||||
import gedit
|
||||
import platform
|
||||
|
||||
from WindowHelper import WindowHelper
|
||||
from Library import Library
|
||||
from Manager import Manager
|
||||
from Snippet import Snippet
|
||||
|
||||
class SnippetsPlugin(gedit.Plugin):
|
||||
def __init__(self):
|
||||
gedit.Plugin.__init__(self)
|
||||
|
||||
self.dlg = None
|
||||
|
||||
library = Library()
|
||||
library.set_accelerator_callback(self.accelerator_activated)
|
||||
|
||||
if platform.platform() == 'Windows':
|
||||
snippetsdir = os.path.expanduser('~/gedit/snippets')
|
||||
else:
|
||||
userdir = os.getenv('MATE22_USER_DIR')
|
||||
if userdir:
|
||||
snippetsdir = os.path.join(userdir, 'gedit/snippets')
|
||||
else:
|
||||
snippetsdir = os.path.expanduser('~/.mate2/gedit/snippets')
|
||||
|
||||
library.set_dirs(snippetsdir, self.system_dirs())
|
||||
|
||||
def system_dirs(self):
|
||||
if platform.platform() != 'Windows':
|
||||
if 'XDG_DATA_DIRS' in os.environ:
|
||||
datadirs = os.environ['XDG_DATA_DIRS']
|
||||
else:
|
||||
datadirs = '/usr/local/share' + os.pathsep + '/usr/share'
|
||||
|
||||
dirs = []
|
||||
|
||||
for d in datadirs.split(os.pathsep):
|
||||
d = os.path.join(d, 'gedit-2', 'plugins', 'snippets')
|
||||
|
||||
if os.path.isdir(d):
|
||||
dirs.append(d)
|
||||
|
||||
dirs.append(self.get_data_dir())
|
||||
return dirs
|
||||
|
||||
def activate(self, window):
|
||||
data = WindowHelper(self)
|
||||
window._snippets_plugin_data = data
|
||||
data.run(window)
|
||||
|
||||
def deactivate(self, window):
|
||||
window._snippets_plugin_data.stop()
|
||||
window._snippets_plugin_data = None
|
||||
|
||||
def update_ui(self, window):
|
||||
window._snippets_plugin_data.update()
|
||||
|
||||
def create_configure_dialog(self):
|
||||
if not self.dlg:
|
||||
self.dlg = Manager(self.get_data_dir())
|
||||
else:
|
||||
self.dlg.run()
|
||||
|
||||
window = gedit.app_get_default().get_active_window()
|
||||
|
||||
if window:
|
||||
self.dlg.dlg.set_transient_for(window)
|
||||
|
||||
return self.dlg.dlg
|
||||
|
||||
def accelerator_activated(self, group, obj, keyval, mod):
|
||||
ret = False
|
||||
|
||||
if hasattr(obj, '_snippets_plugin_data'):
|
||||
ret = obj._snippets_plugin_data.accelerator_activated(keyval, mod)
|
||||
|
||||
return ret
|
647
plugins/snippets/snippets/snippets.ui
Executable file
647
plugins/snippets/snippets/snippets.ui
Executable file
@@ -0,0 +1,647 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--*- mode: xml -*-->
|
||||
<interface>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0">text</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">text/plain</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">text/xml</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">image</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">image/png</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">image/jpeg</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">audio</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">video</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GeditDocument" id="source_buffer">
|
||||
<property name="highlight-matching-brackets">True</property>
|
||||
</object>
|
||||
<object class="GtkDialog" id="dialog_snippets">
|
||||
<property name="title" translatable="yes">Snippets Manager</property>
|
||||
<property name="type">GTK_WINDOW_TOPLEVEL</property>
|
||||
<property name="window_position">GTK_WIN_POS_NONE</property>
|
||||
<property name="modal">False</property>
|
||||
<property name="default_width">750</property>
|
||||
<property name="default_height">500</property>
|
||||
<property name="resizable">True</property>
|
||||
<property name="destroy_with_parent">True</property>
|
||||
<property name="decorated">True</property>
|
||||
<property name="skip_taskbar_hint">True</property>
|
||||
<property name="skip_pager_hint">False</property>
|
||||
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
|
||||
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
|
||||
<property name="focus_on_map">True</property>
|
||||
<property name="urgency_hint">False</property>
|
||||
<property name="has_separator">False</property>
|
||||
<signal handler="on_dialog_snippets_response" last_modification_time="Mon, 19 Dec 2005 11:20:00 GMT" name="response"/>
|
||||
<signal handler="on_dialog_snippets_destroy" last_modification_time="Sun, 22 Jun 2008 13:22:00 GMT" name="destroy"/>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area1">
|
||||
<property name="visible">True</property>
|
||||
<property name="layout_style">GTK_BUTTONBOX_END</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="closebutton1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label">gtk-close</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label">gtk-help</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">GTK_PACK_END</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHPaned" id="hpaned_paned">
|
||||
<property name="border_width">6</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="position">275</property>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox_selection">
|
||||
<property name="width_request">230</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">_Snippets:</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="mnemonic_widget">tree_view_snippets</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolled_window_snippets">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="shadow_type">GTK_SHADOW_IN</property>
|
||||
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="tree_view_snippets">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="headers_visible">False</property>
|
||||
<property name="rules_hint">False</property>
|
||||
<property name="reorderable">False</property>
|
||||
<property name="enable_search">True</property>
|
||||
<property name="fixed_height_mode">False</property>
|
||||
<property name="hover_selection">False</property>
|
||||
<property name="hover_expand">False</property>
|
||||
<signal handler="on_tree_view_snippets_row_expanded" last_modification_time="Tue, 03 Jan 2006 22:06:02 GMT" name="row_expanded"/>
|
||||
<signal handler="on_tree_view_snippets_key_press" last_modification_time="Tue, 03 Jan 2006 22:07:00 GMT" name="key_press_event"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox_buttons">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_new_snippet">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip-text" translatable="yes">Create new snippet</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<signal handler="on_button_new_snippet_clicked" last_modification_time="Tue, 20 Dec 2005 19:50:58 GMT" name="clicked"/>
|
||||
<child>
|
||||
<object class="GtkImage" id="image1">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-new</property>
|
||||
<property name="icon_size">4</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_import_snippets">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip-text" translatable="yes">Import snippets</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<signal handler="on_button_import_snippets_clicked" last_modification_time="Tue, 10 Jul 2007 18:37:11 GMT" name="clicked"/>
|
||||
<child>
|
||||
<object class="GtkImage" id="image5">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-open</property>
|
||||
<property name="icon_size">4</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_export_snippets">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip-text" translatable="yes">Export selected snippets</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<signal handler="on_button_export_snippets_clicked" last_modification_time="Tue, 10 Jul 2007 18:37:25 GMT" name="clicked"/>
|
||||
<child>
|
||||
<object class="GtkImage" id="image4">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-save</property>
|
||||
<property name="icon_size">4</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_remove_snippet">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="tooltip-text" translatable="yes">Delete selected snippet</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<signal handler="on_button_remove_snippet_clicked" last_modification_time="Mon, 19 Dec 2005 13:15:14 GMT" name="clicked"/>
|
||||
<child>
|
||||
<object class="GtkImage" id="image_remove">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-delete</property>
|
||||
<property name="icon_size">4</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="pack_type">GTK_PACK_END</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="shrink">False</property>
|
||||
<property name="resize">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox_snippet">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox2">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label4">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">_Edit:</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolled_window_snippet">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="shadow_type">GTK_SHADOW_IN</property>
|
||||
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
|
||||
<child>
|
||||
<object class="GeditView" id="source_view_snippet">
|
||||
<property name="buffer">source_buffer</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="auto-indent">True</property>
|
||||
<property name="insert-spaces-instead-of-tabs">False</property>
|
||||
<property name="smart-home-end">GTK_SOURCE_SMART_HOME_END_AFTER</property>
|
||||
<property name="tab-width">2</property>
|
||||
<property name="highlight-current-line">True</property>
|
||||
<property name="show-right-margin">False</property>
|
||||
<property name="show-line-numbers">False</property>
|
||||
|
||||
<signal handler="on_source_view_snippet_focus_out" last_modification_time="Sat, 07 Jan 2006 17:13:24 GMT" name="focus_out_event"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label3">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Activation</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label2">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes"> </property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTable" id="table1">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">3</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="row_spacing">6</property>
|
||||
<property name="column_spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_tab_trigger">
|
||||
<property name="visible">True</property>
|
||||
<property comments=""tab" here means the tab key, not the notebook tab!" name="label" translatable="yes">_Tab trigger:</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="mnemonic_widget">entry_tab_trigger</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="right_attach">1</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="bottom_attach">1</property>
|
||||
<property name="x_options">fill</property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox_tab_trigger">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_tab_trigger">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="tooltip-text" translatable="yes">Single word the snippet is activated with after pressing Tab</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="editable">True</property>
|
||||
<property name="visibility">True</property>
|
||||
<property name="max_length">0</property>
|
||||
<property name="text" translatable="yes"/>
|
||||
<property name="has_frame">True</property>
|
||||
<property name="invisible_char">*</property>
|
||||
<property name="activates_default">False</property>
|
||||
<signal handler="on_entry_tab_trigger_focus_out" last_modification_time="Wed, 04 Jan 2006 14:07:29 GMT" name="focus_out_event"/>
|
||||
<signal handler="on_entry_tab_trigger_changed" last_modification_time="Fri, 28 Apr 2006 16:50:34 GMT" name="changed"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage" id="image_tab_trigger">
|
||||
<property name="visible">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">1</property>
|
||||
<property name="padding">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="bottom_attach">1</property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_accelerator">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="tooltip-text" translatable="yes">Shortcut key with which the snippet is activated</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="editable">False</property>
|
||||
<property name="visibility">True</property>
|
||||
<property name="max_length">0</property>
|
||||
<property name="text" translatable="yes"/>
|
||||
<property name="has_frame">True</property>
|
||||
<property name="invisible_char">*</property>
|
||||
<property name="activates_default">False</property>
|
||||
<signal handler="on_entry_accelerator_focus_out" last_modification_time="Wed, 04 Jan 2006 14:07:20 GMT" name="focus_out_event"/>
|
||||
<signal handler="on_entry_accelerator_key_press" last_modification_time="Wed, 04 Jan 2006 14:07:23 GMT" name="key_press_event"/>
|
||||
<signal handler="on_entry_accelerator_focus_in" last_modification_time="Wed, 04 Jan 2006 14:09:06 GMT" name="focus_in_event"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_accelerator">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">S_hortcut key:</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="mnemonic_widget">entry_accelerator</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="right_attach">1</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">fill</property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_drop_targets">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">_Drop targets:</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="mnemonic_widget">entry_accelerator</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="right_attach">1</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">fill</property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBoxEntry" id="combo_drop_targets">
|
||||
<property name="visible">True</property>
|
||||
<property name="add_tearoffs">False</property>
|
||||
<property name="has_frame">True</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="model">model1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer1"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">fill</property>
|
||||
<property name="y_options">fill</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="shrink">True</property>
|
||||
<property name="resize">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-7">closebutton1</action-widget>
|
||||
<action-widget response="-11">button1</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
Reference in New Issue
Block a user