From f4c988934ba7c039cfd4ca2876a792faac6cffed Mon Sep 17 00:00:00 2001 From: Bilal Elmoussaoui Date: Thu, 17 Nov 2022 12:21:47 +0100 Subject: [PATCH 1/5] pango: Auto generate Language --- pango/Gir.toml | 17 ++++- pango/src/attr_language.rs | 6 +- pango/src/auto/language.rs | 82 +++++++++++++++++++++++ pango/src/auto/mod.rs | 3 + pango/src/language.rs | 130 +++++-------------------------------- pango/src/lib.rs | 1 - 6 files changed, 123 insertions(+), 116 deletions(-) create mode 100644 pango/src/auto/language.rs diff --git a/pango/Gir.toml b/pango/Gir.toml index 9cc92908cc1a..b3118120f855 100644 --- a/pango/Gir.toml +++ b/pango/Gir.toml @@ -69,7 +69,6 @@ manual = [ "Pango.Coverage", "Pango.GlyphGeometry", "Pango.GlyphInfo", - "Pango.Language", "Pango.LayoutDeserializeError", "Pango.Rectangle", ] @@ -332,6 +331,22 @@ concurrency = "send+sync" name = "glyphs" const = true +[[object]] +name = "Pango.Language" +status = "generate" + [[object.function]] + pattern = "get_(scripts|preferred)" + manual = true # probably needs annotation fixes upstream (array zero-terminated=1) + [[object.function]] + pattern = "(get_sample_string|includes_script|matches|to_string)" + [[object.function.parameter]] + name = "language" + const = true + [[object.function]] + name = "from_string" + [object.function.return] + nullable_return_is_error = "Can't parse Language" + [[object]] name = "Pango.Layout" status = "generate" diff --git a/pango/src/attr_language.rs b/pango/src/attr_language.rs index 820756d2072d..6720fa4c4e41 100644 --- a/pango/src/attr_language.rs +++ b/pango/src/attr_language.rs @@ -8,7 +8,11 @@ define_attribute_struct!(AttrLanguage, ffi::PangoAttrLanguage, &[AttrType::Langu impl AttrLanguage { #[doc(alias = "pango_attr_language_new")] pub fn new(language: &Language) -> Self { - unsafe { from_glib_full(ffi::pango_attr_language_new(language.to_glib_none().0)) } + unsafe { + from_glib_full(ffi::pango_attr_language_new(mut_override( + language.to_glib_none().0, + ))) + } } pub fn value(&self) -> Language { diff --git a/pango/src/auto/language.rs b/pango/src/auto/language.rs new file mode 100644 index 000000000000..d10b5bdedaf1 --- /dev/null +++ b/pango/src/auto/language.rs @@ -0,0 +1,82 @@ +// This file was generated by gir (https://github.com/gtk-rs/gir) +// from gir-files (https://github.com/gtk-rs/gir-files) +// DO NOT EDIT + +use crate::Script; +use glib::translate::*; +use std::fmt; + +glib::wrapper! { + #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] + pub struct Language(Boxed); + + match fn { + copy => |ptr| glib::gobject_ffi::g_boxed_copy(ffi::pango_language_get_type(), ptr as *mut _) as *mut ffi::PangoLanguage, + free => |ptr| glib::gobject_ffi::g_boxed_free(ffi::pango_language_get_type(), ptr as *mut _), + type_ => || ffi::pango_language_get_type(), + } +} + +impl Language { + #[doc(alias = "pango_language_get_sample_string")] + #[doc(alias = "get_sample_string")] + pub fn sample_string(&self) -> glib::GString { + unsafe { + from_glib_none(ffi::pango_language_get_sample_string(mut_override( + self.to_glib_none().0, + ))) + } + } + + #[doc(alias = "pango_language_includes_script")] + pub fn includes_script(&self, script: Script) -> bool { + unsafe { + from_glib(ffi::pango_language_includes_script( + mut_override(self.to_glib_none().0), + script.into_glib(), + )) + } + } + + #[doc(alias = "pango_language_matches")] + pub fn matches(&self, range_list: &str) -> bool { + unsafe { + from_glib(ffi::pango_language_matches( + mut_override(self.to_glib_none().0), + range_list.to_glib_none().0, + )) + } + } + + #[doc(alias = "pango_language_to_string")] + #[doc(alias = "to_string")] + pub fn to_str(&self) -> glib::GString { + unsafe { + from_glib_none(ffi::pango_language_to_string(mut_override( + self.to_glib_none().0, + ))) + } + } + + #[doc(alias = "pango_language_from_string")] + pub fn from_string(language: Option<&str>) -> Result { + unsafe { + Option::<_>::from_glib_none(ffi::pango_language_from_string(language.to_glib_none().0)) + .ok_or_else(|| glib::bool_error!("Can't parse Language")) + } + } + + #[doc(alias = "pango_language_get_default")] + #[doc(alias = "get_default")] + #[allow(clippy::should_implement_trait)] + pub fn default() -> Language { + unsafe { from_glib_none(ffi::pango_language_get_default()) } + } +} + +impl fmt::Display for Language { + #[inline] + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.write_str(&self.to_str()) + } +} diff --git a/pango/src/auto/mod.rs b/pango/src/auto/mod.rs index b3800971830b..b259858bcf6e 100644 --- a/pango/src/auto/mod.rs +++ b/pango/src/auto/mod.rs @@ -53,6 +53,9 @@ pub use self::glyph_string::GlyphString; mod item; pub use self::item::Item; +mod language; +pub use self::language::Language; + mod layout_iter; pub use self::layout_iter::LayoutIter; diff --git a/pango/src/language.rs b/pango/src/language.rs index 452248c1f5ca..950a86c76849 100644 --- a/pango/src/language.rs +++ b/pango/src/language.rs @@ -1,104 +1,14 @@ // Take a look at the license at the top of the repository in the LICENSE file. -use crate::Script; -use glib::translate::*; -use glib::GString; +use std::str::FromStr; -#[doc(alias = "PangoLanguage")] -pub struct Language(*mut ffi::PangoLanguage); +use crate::{Language, Script}; +use glib::translate::*; unsafe impl Send for Language {} unsafe impl Sync for Language {} -#[doc(hidden)] -impl<'a> ToGlibPtr<'a, *mut ffi::PangoLanguage> for &'a Language { - type Storage = &'a Language; - - fn to_glib_none(&self) -> Stash<'a, *mut ffi::PangoLanguage, Self> { - Stash(self.0, *self) - } -} - -#[doc(hidden)] -impl<'a> ToGlibPtrMut<'a, *mut ffi::PangoLanguage> for Language { - type Storage = &'a mut Self; - - #[inline] - fn to_glib_none_mut(&'a mut self) -> StashMut<'a, *mut ffi::PangoLanguage, Self> { - StashMut(self.0, self) - } -} - -#[doc(hidden)] -impl FromGlibPtrNone<*mut ffi::PangoLanguage> for Language { - unsafe fn from_glib_none(ptr: *mut ffi::PangoLanguage) -> Self { - assert!(!ptr.is_null()); - Self(ptr) - } -} - -#[doc(hidden)] -impl FromGlibPtrFull<*mut ffi::PangoLanguage> for Language { - unsafe fn from_glib_full(ptr: *mut ffi::PangoLanguage) -> Self { - assert!(!ptr.is_null()); - Self(ptr) - } -} - -#[doc(hidden)] -impl FromGlibPtrNone<*const ffi::PangoLanguage> for Language { - unsafe fn from_glib_none(ptr: *const ffi::PangoLanguage) -> Self { - assert!(!ptr.is_null()); - Self(ptr as *mut _) - } -} - -#[doc(hidden)] -impl FromGlibPtrFull<*const ffi::PangoLanguage> for Language { - unsafe fn from_glib_full(ptr: *const ffi::PangoLanguage) -> Self { - assert!(!ptr.is_null()); - Self(ptr as *mut _) - } -} - -impl Default for Language { - #[doc(alias = "pango_language_get_default")] - fn default() -> Self { - unsafe { from_glib_full(ffi::pango_language_get_default()) } - } -} - impl Language { - #[doc(alias = "pango_language_from_string")] - pub fn from_string(language: &str) -> Self { - unsafe { from_glib_full(ffi::pango_language_from_string(language.to_glib_none().0)) } - } - - #[doc(alias = "pango_language_to_string")] - pub fn to_string(&self) -> GString { - unsafe { from_glib_none(ffi::pango_language_to_string(self.to_glib_none().0)) } - } - - #[doc(alias = "pango_language_matches")] - pub fn matches(&self, range_list: &str) -> bool { - unsafe { - from_glib(ffi::pango_language_matches( - self.to_glib_none().0, - range_list.to_glib_none().0, - )) - } - } - - #[doc(alias = "pango_language_includes_script")] - pub fn includes_script(&self, script: Script) -> bool { - unsafe { - from_glib(ffi::pango_language_includes_script( - self.to_glib_none().0, - script.into_glib(), - )) - } - } - #[doc(alias = "get_scripts")] #[doc(alias = "pango_language_get_scripts")] pub fn scripts(&self) -> Vec