Skip to content

Commit 4d5ef12

Browse files
pango: Auto generate Language
1 parent 8f989cc commit 4d5ef12

File tree

6 files changed

+123
-116
lines changed

6 files changed

+123
-116
lines changed

pango/Gir.toml

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ manual = [
6969
"Pango.Coverage",
7070
"Pango.GlyphGeometry",
7171
"Pango.GlyphInfo",
72-
"Pango.Language",
7372
"Pango.LayoutDeserializeError",
7473
"Pango.Rectangle",
7574
]
@@ -332,6 +331,22 @@ concurrency = "send+sync"
332331
name = "glyphs"
333332
const = true
334333

334+
[[object]]
335+
name = "Pango.Language"
336+
status = "generate"
337+
[[object.function]]
338+
pattern = "get_(scripts|preferred)"
339+
manual = true # probably needs annotation fixes upstream (array zero-terminated=1)
340+
[[object.function]]
341+
pattern = "(get_sample_string|includes_script|matches|to_string)"
342+
[[object.function.parameter]]
343+
name = "language"
344+
const = true
345+
[[object.function]]
346+
name = "from_string"
347+
[object.function.return]
348+
nullable_return_is_error = "Can't parse Language"
349+
335350
[[object]]
336351
name = "Pango.Layout"
337352
status = "generate"

pango/src/attr_language.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ define_attribute_struct!(AttrLanguage, ffi::PangoAttrLanguage, &[AttrType::Langu
88
impl AttrLanguage {
99
#[doc(alias = "pango_attr_language_new")]
1010
pub fn new(language: &Language) -> Self {
11-
unsafe { from_glib_full(ffi::pango_attr_language_new(language.to_glib_none().0)) }
11+
unsafe {
12+
from_glib_full(ffi::pango_attr_language_new(mut_override(
13+
language.to_glib_none().0,
14+
)))
15+
}
1216
}
1317

1418
pub fn value(&self) -> Language {

pango/src/auto/language.rs

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
// This file was generated by gir (https://github.com/gtk-rs/gir)
2+
// from gir-files (https://github.com/gtk-rs/gir-files)
3+
// DO NOT EDIT
4+
5+
use crate::Script;
6+
use glib::translate::*;
7+
use std::fmt;
8+
9+
glib::wrapper! {
10+
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
11+
pub struct Language(Boxed<ffi::PangoLanguage>);
12+
13+
match fn {
14+
copy => |ptr| glib::gobject_ffi::g_boxed_copy(ffi::pango_language_get_type(), ptr as *mut _) as *mut ffi::PangoLanguage,
15+
free => |ptr| glib::gobject_ffi::g_boxed_free(ffi::pango_language_get_type(), ptr as *mut _),
16+
type_ => || ffi::pango_language_get_type(),
17+
}
18+
}
19+
20+
impl Language {
21+
#[doc(alias = "pango_language_get_sample_string")]
22+
#[doc(alias = "get_sample_string")]
23+
pub fn sample_string(&self) -> glib::GString {
24+
unsafe {
25+
from_glib_none(ffi::pango_language_get_sample_string(mut_override(
26+
self.to_glib_none().0,
27+
)))
28+
}
29+
}
30+
31+
#[doc(alias = "pango_language_includes_script")]
32+
pub fn includes_script(&self, script: Script) -> bool {
33+
unsafe {
34+
from_glib(ffi::pango_language_includes_script(
35+
mut_override(self.to_glib_none().0),
36+
script.into_glib(),
37+
))
38+
}
39+
}
40+
41+
#[doc(alias = "pango_language_matches")]
42+
pub fn matches(&self, range_list: &str) -> bool {
43+
unsafe {
44+
from_glib(ffi::pango_language_matches(
45+
mut_override(self.to_glib_none().0),
46+
range_list.to_glib_none().0,
47+
))
48+
}
49+
}
50+
51+
#[doc(alias = "pango_language_to_string")]
52+
#[doc(alias = "to_string")]
53+
pub fn to_str(&self) -> glib::GString {
54+
unsafe {
55+
from_glib_none(ffi::pango_language_to_string(mut_override(
56+
self.to_glib_none().0,
57+
)))
58+
}
59+
}
60+
61+
#[doc(alias = "pango_language_from_string")]
62+
pub fn from_string(language: Option<&str>) -> Result<Language, glib::BoolError> {
63+
unsafe {
64+
Option::<_>::from_glib_none(ffi::pango_language_from_string(language.to_glib_none().0))
65+
.ok_or_else(|| glib::bool_error!("Can't parse Language"))
66+
}
67+
}
68+
69+
#[doc(alias = "pango_language_get_default")]
70+
#[doc(alias = "get_default")]
71+
#[allow(clippy::should_implement_trait)]
72+
pub fn default() -> Language {
73+
unsafe { from_glib_none(ffi::pango_language_get_default()) }
74+
}
75+
}
76+
77+
impl fmt::Display for Language {
78+
#[inline]
79+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
80+
f.write_str(&self.to_str())
81+
}
82+
}

pango/src/auto/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ pub use self::glyph_string::GlyphString;
5353
mod item;
5454
pub use self::item::Item;
5555

56+
mod language;
57+
pub use self::language::Language;
58+
5659
mod layout_iter;
5760
pub use self::layout_iter::LayoutIter;
5861

pango/src/language.rs

Lines changed: 17 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -1,113 +1,25 @@
11
// Take a look at the license at the top of the repository in the LICENSE file.
22

3-
use crate::Script;
4-
use glib::translate::*;
5-
use glib::GString;
3+
use std::str::FromStr;
64

7-
#[doc(alias = "PangoLanguage")]
8-
pub struct Language(*mut ffi::PangoLanguage);
5+
use crate::{Language, Script};
6+
use glib::translate::*;
97

108
unsafe impl Send for Language {}
119
unsafe impl Sync for Language {}
1210

13-
#[doc(hidden)]
14-
impl<'a> ToGlibPtr<'a, *mut ffi::PangoLanguage> for &'a Language {
15-
type Storage = &'a Language;
16-
17-
fn to_glib_none(&self) -> Stash<'a, *mut ffi::PangoLanguage, Self> {
18-
Stash(self.0, *self)
19-
}
20-
}
21-
22-
#[doc(hidden)]
23-
impl<'a> ToGlibPtrMut<'a, *mut ffi::PangoLanguage> for Language {
24-
type Storage = &'a mut Self;
25-
26-
#[inline]
27-
fn to_glib_none_mut(&'a mut self) -> StashMut<'a, *mut ffi::PangoLanguage, Self> {
28-
StashMut(self.0, self)
29-
}
30-
}
31-
32-
#[doc(hidden)]
33-
impl FromGlibPtrNone<*mut ffi::PangoLanguage> for Language {
34-
unsafe fn from_glib_none(ptr: *mut ffi::PangoLanguage) -> Self {
35-
assert!(!ptr.is_null());
36-
Self(ptr)
37-
}
38-
}
39-
40-
#[doc(hidden)]
41-
impl FromGlibPtrFull<*mut ffi::PangoLanguage> for Language {
42-
unsafe fn from_glib_full(ptr: *mut ffi::PangoLanguage) -> Self {
43-
assert!(!ptr.is_null());
44-
Self(ptr)
45-
}
46-
}
47-
48-
#[doc(hidden)]
49-
impl FromGlibPtrNone<*const ffi::PangoLanguage> for Language {
50-
unsafe fn from_glib_none(ptr: *const ffi::PangoLanguage) -> Self {
51-
assert!(!ptr.is_null());
52-
Self(ptr as *mut _)
53-
}
54-
}
55-
56-
#[doc(hidden)]
57-
impl FromGlibPtrFull<*const ffi::PangoLanguage> for Language {
58-
unsafe fn from_glib_full(ptr: *const ffi::PangoLanguage) -> Self {
59-
assert!(!ptr.is_null());
60-
Self(ptr as *mut _)
61-
}
62-
}
63-
64-
impl Default for Language {
65-
#[doc(alias = "pango_language_get_default")]
66-
fn default() -> Self {
67-
unsafe { from_glib_full(ffi::pango_language_get_default()) }
68-
}
69-
}
70-
7111
impl Language {
72-
#[doc(alias = "pango_language_from_string")]
73-
pub fn from_string(language: &str) -> Self {
74-
unsafe { from_glib_full(ffi::pango_language_from_string(language.to_glib_none().0)) }
75-
}
76-
77-
#[doc(alias = "pango_language_to_string")]
78-
pub fn to_string(&self) -> GString {
79-
unsafe { from_glib_none(ffi::pango_language_to_string(self.to_glib_none().0)) }
80-
}
81-
82-
#[doc(alias = "pango_language_matches")]
83-
pub fn matches(&self, range_list: &str) -> bool {
84-
unsafe {
85-
from_glib(ffi::pango_language_matches(
86-
self.to_glib_none().0,
87-
range_list.to_glib_none().0,
88-
))
89-
}
90-
}
91-
92-
#[doc(alias = "pango_language_includes_script")]
93-
pub fn includes_script(&self, script: Script) -> bool {
94-
unsafe {
95-
from_glib(ffi::pango_language_includes_script(
96-
self.to_glib_none().0,
97-
script.into_glib(),
98-
))
99-
}
100-
}
101-
10212
#[doc(alias = "get_scripts")]
10313
#[doc(alias = "pango_language_get_scripts")]
10414
pub fn scripts(&self) -> Vec<Script> {
10515
let mut num_scripts = 0;
10616
let mut ret = Vec::new();
10717

10818
unsafe {
109-
let scripts: *const ffi::PangoScript =
110-
ffi::pango_language_get_scripts(self.to_glib_none().0, &mut num_scripts);
19+
let scripts: *const ffi::PangoScript = ffi::pango_language_get_scripts(
20+
mut_override(self.to_glib_none().0),
21+
&mut num_scripts,
22+
);
11123
if num_scripts > 0 {
11224
for x in 0..num_scripts {
11325
ret.push(from_glib(
@@ -119,29 +31,21 @@ impl Language {
11931
}
12032
}
12133

122-
#[doc(alias = "get_sample_string")]
123-
#[doc(alias = "pango_language_get_sample_string")]
124-
pub fn sample_string(&self) -> GString {
125-
unsafe { from_glib_none(ffi::pango_language_get_sample_string(self.to_glib_none().0)) }
126-
}
127-
12834
#[cfg(any(feature = "v1_48", feature = "dox"))]
12935
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_48")))]
13036
#[doc(alias = "get_preferred")]
13137
#[doc(alias = "pango_language_get_preferred")]
132-
pub fn preferred(&self) -> Vec<Language> {
38+
pub fn preferred() -> Vec<Self> {
13339
unsafe {
134-
let langs = ffi::pango_language_get_preferred();
135-
let mut ptr = langs;
136-
137-
let mut ret = vec![];
138-
139-
while !(*ptr).is_null() {
140-
ret.push(Language(*ptr));
141-
ptr = ptr.add(1);
142-
}
143-
144-
ret
40+
let ptr = ffi::pango_language_get_preferred();
41+
Self::from_glib_full_as_vec(ptr)
14542
}
14643
}
14744
}
45+
46+
impl FromStr for Language {
47+
type Err = glib::BoolError;
48+
fn from_str(language: &str) -> Result<Self, Self::Err> {
49+
Self::from_string(Some(language))
50+
}
51+
}

pango/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ pub use glyph_item_iter::{GlyphItemIntoIter, GlyphItemIter};
108108
mod glyph_string;
109109
mod item;
110110
mod language;
111-
pub use language::Language;
112111
mod layout;
113112
pub use layout::HitPosition;
114113
mod matrix;

0 commit comments

Comments
 (0)