" Vim GObject generator plugin " Last Change: 2007 Sep 10 " Maintainer: Andrey Dubravin " Modified: Andre Moreira Magalhaes " License: This file is placed in the public domain. if exists("loaded_gobgen") finish endif let loaded_gobgen = 1 function! GOBGenerateC() if input("Use filename to generate object name (y/n)? ", "y") != "y" let prefix = input("Enter object prefix name (flybird-directory): ") else let prefix = expand("%:t:r") endif if prefix == "" echohl ErrorMsg echo "Can't create class without prefix" echohl None return endif let parentName = input("Enter parent type name (Default G_TYPE_OBJECT): ") if parentName == "" let parentName = "G_TYPE_OBJECT" endif let prefix = substitute(prefix, "-", "_", "g") let typeName = substitute(prefix, "_\\(.\\)\\|^\\(.\\)", "\\U\\1\\U\\2", "g") let typeNamePrivate = typeName . "Private" let defineName = toupper(prefix) exec "normal I#ifdef HAVE_CONFIG_H" exec "normal o#include \"config.h\"" exec "normal o#endif" normal o exec "normal otypedef struct _" . typeName . "Private " . typeName . "Private;" normal o exec "normal ostruct _" . typeNamePrivate normal o{ normal o}; normal o exec "normal o#define" defineName . "_GET_PRIVATE(o) \\" exec "normal o(G_TYPE_INSTANCE_GET_PRIVATE ((o)," defineName . "_TYPE," typeNamePrivate . "))" normal o exec "normal ostatic void " . prefix . "_class_init (" . typeName . "Class *klass);" exec "normal ostatic void " . prefix . "_init (" . typeName "*self);" exec "normal ostatic void " . prefix . "_dispose (GObject *object);" exec "normal ostatic void " . prefix . "_finalize (GObject *object);" normal o exec "normal oG_DEFINE_TYPE (" . typeName . "," prefix . ", " . parentName . ");" normal o " class init normal ostatic void exec "normal o" . prefix . "_class_init (" . typeName . "Class *klass)" normal o{ exec "normal oGObjectClass *object_class = G_OBJECT_CLASS (klass);" normal o exec "normal og_type_class_add_private (klass, sizeof (" . typeNamePrivate . "));" normal o exec "normal oobject_class->dispose =" prefix . "_dispose;" exec "normal oobject_class->finalize =" prefix . "_finalize;" normal o} normal o " init normal ostatic void exec "normal o" . prefix . "_init (" . typeName "*self)" normal o{ normal o} normal o " dispose normal ostatic void exec "normal o" . prefix . "_dispose (GObject *object)" normal o{ exec "normal oG_OBJECT_CLASS (" . prefix . "_parent_class)->dispose (object);" normal o} normal o " finalize normal ostatic void exec "normal o" . prefix . "_finalize (GObject *object)" normal o{ exec "normal oG_OBJECT_CLASS (" . prefix . "_parent_class)->finalize (object);" normal o} endfunction function! GOBGenerateH() if input("Use filename to generate object name (y/n)? ", "y") != "y" let prefix = input("Enter object prefix name (flybird-directory):") else let prefix = expand("%:t:r") endif if prefix == "" echohl ErrorMsg echo "Can't create class without prefix" echohl None return endif let parentName = input("Enter parent class name (Default GObject): ") if parentName == "" let parentName = "GObject" endif let prefix = substitute(prefix, "-", "_", "g") let typeName = substitute(prefix, "_\\(.\\)\\|^\\(.\\)", "\\U\\1\\U\\2", "g") let typeNamePrivate = typeName . "Private" let defineName = toupper(prefix) " setup needed defines exec "normal I#ifndef __" . defineName . "_H__" exec "normal o#define __" . defineName . "_H__" normal o exec "normal o#include " exec "normal o#include " normal o normal oG_BEGIN_DECLS normal o exec "normal o#define " . defineName . "_TYPE (" . prefix . "_get_type ())" exec "normal o#define " . defineName . "(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), " . defineName . "_TYPE," typeName . "))" exec "normal o#define " . defineName . "_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), " . defineName . "_TYPE," typeName . "Class))" exec "normal o#define IS_" . defineName . "(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), " . defineName . "_TYPE))" exec "normal o#define IS_" . defineName . "_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), " . defineName . "_TYPE))" exec "normal o#define " . defineName . "_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), " . defineName . "_TYPE," typeName . "Class))" normal o exec "normal otypedef struct _" . typeName . " " . typeName . ";" exec "normal otypedef struct _" . typeName . "Class " . typeName . "Class;" normal o " Variable memeber structure exec "normal ostruct _" . typeName . "Class" exec "normal o{" exec "normal o" . parentName . "Class parent_class;" exec "normal o};" normal o exec "normal ostruct _" . typeName exec "normal o{" exec "normal o" . parentName "parent;" exec "normal o};" normal o exec "normal oGType" prefix . "_get_type (void);" normal o normal oG_END_DECLS normal o exec "normal o#endif" endfunction command! GOBGenerateC call GOBGenerateC() command! GOBGenerateH call GOBGenerateH()