From: Juerg Billeter Date: Thu, 20 Mar 2008 23:45:20 +0000 (+0000) Subject: support lower_case_csuffix attribute for interfaces X-Git-Tag: VALA_0_2_0~46 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f9dc789d68812c77cd6ebda6debcf4b2004ec0df;p=thirdparty%2Fvala.git support lower_case_csuffix attribute for interfaces 2008-03-20 Juerg Billeter * vala/valainterface.vala, vala/valainterfacewriter.vala, vapigen/valagidlparser.vala: support lower_case_csuffix attribute for interfaces * vapi/packages/gstreamer-interfaces-0.10/: fix GstXOverlay binding * vapi/gstreamer-interfaces-0.10.vapi: regenerated Patch by Andrea Del Signore, fixes bug 512744 svn path=/trunk/; revision=1140 --- diff --git a/ChangeLog b/ChangeLog index 258bdcdf0..df0892aed 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2008-03-20 Jürg Billeter + + * vala/valainterface.vala, vala/valainterfacewriter.vala, + vapigen/valagidlparser.vala: support lower_case_csuffix attribute + for interfaces + + * vapi/packages/gstreamer-interfaces-0.10/: fix GstXOverlay binding + + * vapi/gstreamer-interfaces-0.10.vapi: regenerated + + Patch by Andrea Del Signore, fixes bug 512744 + 2008-03-19 Jürg Billeter * vapi/glib-2.0.vapi: fix GTimeoutSource and GIdleSource bindings, diff --git a/vala/valainterface.vala b/vala/valainterface.vala index e3615c1fa..d72684120 100644 --- a/vala/valainterface.vala +++ b/vala/valainterface.vala @@ -263,20 +263,32 @@ public class Vala.Interface : Typesymbol { */ public string! get_lower_case_csuffix () { if (lower_case_csuffix == null) { - lower_case_csuffix = camel_case_to_lower_case (name); - - // remove underscores in some cases to avoid conflicts of type macros - if (lower_case_csuffix.has_prefix ("type_")) { - lower_case_csuffix = "type" + lower_case_csuffix.offset ("type_".len ()); - } else if (lower_case_csuffix.has_prefix ("is_")) { - lower_case_csuffix = "is" + lower_case_csuffix.offset ("is_".len ()); - } - if (lower_case_csuffix.has_suffix ("_class")) { - lower_case_csuffix = lower_case_csuffix.substring (0, lower_case_csuffix.len () - "_class".len ()) + "class"; - } + lower_case_csuffix = get_default_lower_case_csuffix (); } return lower_case_csuffix; } + + /** + * Returns default string to be prepended to the name of members of this + * interface when used in C code. + * + * @return the suffix to be used in C code + */ + public string! get_default_lower_case_csuffix () { + string result = camel_case_to_lower_case (name); + + // remove underscores in some cases to avoid conflicts of type macros + if (result.has_prefix ("type_")) { + result = "type" + result.offset ("type_".len ()); + } else if (result.has_prefix ("is_")) { + result = "is" + result.offset ("is_".len ()); + } + if (result.has_suffix ("_class")) { + result = result.substring (0, result.len () - "_class".len ()) + "class"; + } + + return result; + } /** * Sets the string to be prepended to the name of members of this @@ -389,6 +401,9 @@ public class Vala.Interface : Typesymbol { add_cheader_filename (filename); } } + if (a.has_argument ("lower_case_csuffix")) { + lower_case_csuffix = a.get_string ("lower_case_csuffix"); + } } private void process_dbus_interface_attribute (Attribute! a) { diff --git a/vala/valainterfacewriter.vala b/vala/valainterfacewriter.vala index 10c8e9375..c7d7ddfd5 100644 --- a/vala/valainterfacewriter.vala +++ b/vala/valainterfacewriter.vala @@ -240,7 +240,11 @@ public class Vala.InterfaceWriter : CodeVisitor { cheaders = "%s,%s".printf (cheaders, cheader); } } - write_string ("[CCode (cheader_filename = \"%s\")]".printf (cheaders)); + write_string ("[CCode (cheader_filename = \"%s\"".printf (cheaders)); + if (iface.get_lower_case_csuffix () != iface.get_default_lower_case_csuffix ()) + write_string (", lower_case_csuffix = \"%s\"".printf (iface.get_lower_case_csuffix ())); + + write_string (")]"); write_newline (); write_indent (); diff --git a/vapi/gstreamer-interfaces-0.10.vapi b/vapi/gstreamer-interfaces-0.10.vapi index eba32b1c9..f119b2a49 100644 --- a/vapi/gstreamer-interfaces-0.10.vapi +++ b/vapi/gstreamer-interfaces-0.10.vapi @@ -173,17 +173,12 @@ namespace Gst { public abstract bool set_vcenter (int center); public abstract bool set_vflip (bool flip); } - [CCode (cheader_filename = "gst/interfaces/xoverlay.h")] + [CCode (cheader_filename = "gst/interfaces/xoverlay.h", lower_case_csuffix = "x_overlay")] public interface XOverlay : Gst.ImplementsInterface, Gst.Element { - [CCode (cname = "gst_x_overlay_got_xwindow_id")] public void got_xwindow_id (ulong xwindow_id); - [CCode (cname = "gst_x_overlay_prepare_xwindow_id")] public void prepare_xwindow_id (); - [CCode (cname = "gst_x_overlay_expose")] public abstract void expose (); - [CCode (cname = "gst_x_overlay_handle_events")] public abstract void handle_events (bool handle_events); - [CCode (cname = "gst_x_overlay_set_xwindow_id")] public abstract void set_xwindow_id (ulong xwindow_id); } } diff --git a/vapi/packages/gstreamer-interfaces-0.10/gstreamer-interfaces-0.10.metadata b/vapi/packages/gstreamer-interfaces-0.10/gstreamer-interfaces-0.10.metadata index 46020134c..4abc3eade 100644 --- a/vapi/packages/gstreamer-interfaces-0.10/gstreamer-interfaces-0.10.metadata +++ b/vapi/packages/gstreamer-interfaces-0.10/gstreamer-interfaces-0.10.metadata @@ -23,4 +23,4 @@ GstNavigation cheader_filename="gst/interfaces/navigation.h" GstPropertyProbe cheader_filename="gst/interfaces/propertyprobe.h" GstTuner cheader_filename="gst/interfaces/tunerchannel.h" GstVideoOrientation cheader_filename="gst/interfaces/videoorientation.h" -GstXOverlay cheader_filename="gst/interfaces/xoverlay.h" +GstXOverlay cheader_filename="gst/interfaces/xoverlay.h" lower_case_csuffix="x_overlay" diff --git a/vapigen/valagidlparser.vala b/vapigen/valagidlparser.vala index 663f89a66..9727145c0 100644 --- a/vapigen/valagidlparser.vala +++ b/vapigen/valagidlparser.vala @@ -917,6 +917,8 @@ public class Vala.GIdlParser : CodeVisitor { var nv = attr.split ("=", 2); if (nv[0] == "cheader_filename") { iface.add_cheader_filename (eval (nv[1])); + } else if (nv[0] == "lower_case_csuffix") { + iface.set_lower_case_csuffix (eval (nv[1])); } } }