diff options
Diffstat (limited to 'tools/generate-plugin.py')
-rwxr-xr-x | tools/generate-plugin.py | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/tools/generate-plugin.py b/tools/generate-plugin.py new file mode 100755 index 00000000..6b222f71 --- /dev/null +++ b/tools/generate-plugin.py @@ -0,0 +1,182 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# generate-plugin.py - pluma plugin skeletton generator +# This file is part of pluma +# +# Copyright (C) 2006 - Steve Frécinaux +# +# pluma 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. +# +# pluma 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 pluma; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, +# Boston, MA 02110-1301 USA + +import re +import os +import sys +import getopt +from datetime import date +import preprocessor + +# Default values of command line options +options = { + 'language' : 'c', + 'description' : 'Type here a short description of your plugin', + 'author' : os.getenv('USERNAME'), + 'email' : os.getenv('LOGNAME') + '@email.com', + 'standalone' : False, + 'with-side-pane' : False, + 'with-bottom-pane' : False, + 'with-menu' : False, + 'with-config-dlg' : False +} + +USAGE = """Usage: + %s [OPTIONS...] pluginname +""" % os.path.basename(sys.argv[0]) +HELP = USAGE + """ +generate skeleton source tree for a new pluma plugin. + +Options: + --author Set the author name + --email Set the author email + --description Set the description you want for your new plugin + --standalone Is this plugin intended to be distributed as a + standalone package ? (N/A) + --language / -l Set the language (C) [default: %(language)s] + --with-$feature Enable $feature + --without-$feature Disable $feature + --help / -h Show this message and exits + +Features: + config-dlg Plugin configuration dialog + menu Plugin menu entries + side-pane Side pane item (N/A) + bottom-pane Bottom pane item (N/A) +""" % options + +TEMPLATE_DIR = os.path.join(os.path.dirname(sys.argv[0]), "plugin_template") + +# Parsing command line options +try: + opts, args = getopt.getopt(sys.argv[1:], + 'l:h', + ['language=', + 'description=', + 'author=', + 'email=', + 'standalone', + 'with-menu' , 'without-menu', + 'with-side-pane' , 'without-side-pane', + 'with-bottom-pane' , 'without-bottom-pane', + 'with-config-dlg' , 'without-config-dlg', + 'help']) +except getopt.error, exc: + print >>sys.stderr, '%s: %s' % (sys.argv[0], str(exc)) + print >>sys.stderr, USAGE + sys.exit(1) + +for opt, arg in opts: + if opt in ('-h', '--help'): + print >>sys.stderr, HELP + sys.exit(0) + + elif opt in ('--description', '--author', '--email'): + options[opt[2:]] = arg + + elif opt in ('-l', '--language'): + options['language'] = arg.lower() + + elif opt == '--standalone': + options['standalone'] = True + + elif opt[0:7] == '--with-': + options['with-' + opt[7:]] = True + + elif opt[0:10] == '--without-': + options['with-' + opt[10:]] = False + +# What's the new plugin name ? +if len(args) < 1: + print >>sys.stderr, USAGE + sys.exit(1) + +plugin_name = args[0] +plugin_id = re.sub('[^a-z0-9_]', '', plugin_name.lower().replace(' ', '_')) +plugin_module = plugin_id.replace('_', '-') + +directives = { + 'PLUGIN_NAME' : plugin_name, + 'PLUGIN_MODULE' : plugin_module, + 'PLUGIN_ID' : plugin_id, + 'AUTHOR_FULLNAME' : options['author'], + 'AUTHOR_EMAIL' : options['email'], + 'DATE_YEAR' : date.today().year, + 'DESCRIPTION' : options['description'], +} + +# Files to be generated by the preprocessor, in the form "template : outfile" +output_files = { + 'Makefile.am': '%s/Makefile.am' % plugin_module, + 'pluma-plugin.desktop.in': '%s/%s.pluma-plugin.desktop.in' % (plugin_module, plugin_module) +} + +if options['language'] == 'c': + output_files['pluma-plugin.c'] = '%s/%s-plugin.c' % (plugin_module, plugin_module) + output_files['pluma-plugin.h'] = '%s/%s-plugin.h' % (plugin_module, plugin_module) +else: + print >>sys.stderr, 'Value of --language should be C' + print >>sys.stderr, USAGE + sys.exit(1) + +if options['standalone']: + output_files['configure.ac'] = 'configure.ac' + +if options['with-side-pane']: + directives['WITH_SIDE_PANE'] = True + +if options['with-bottom-pane']: + directives['WITH_BOTTOM_PANE'] = True + +if options['with-menu']: + directives['WITH_MENU'] = True + +if options['with-config-dlg']: + directives['WITH_CONFIGURE_DIALOG'] = True + + +# Generate the plugin base +for infile, outfile in output_files.iteritems(): + print 'Processing %s\n' \ + ' into %s...' % (infile, outfile) + + infile = os.path.join(TEMPLATE_DIR, infile) + outfile = os.path.join(os.getcwd(), outfile) + + if not os.path.isfile(infile): + print >>sys.stderr, 'Input file does not exist : %s.' % os.path.basename(infile) + continue + + # Make sure the destination directory exists + if not os.path.isdir(os.path.split(outfile)[0]): + os.makedirs(os.path.split(outfile)[0]) + + # Variables relative to the generated file + directives['DIRNAME'], directives['FILENAME'] = os.path.split(outfile) + + # Generate the file + preprocessor.process(infile, outfile, directives.copy()) + +print 'Done.' + +# ex:ts=4:et: |