1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// Take a look at the license at the top of the repository in the LICENSE file.

use crate::TextAttributes;
use crate::TextIter;
use glib::translate::*;
use std::convert::TryFrom;

impl TextIter {
    /// Computes the effect of any tags applied to this spot in the
    /// text. The `values` parameter should be initialized to the default
    /// settings you wish to use if no tags are in effect. You’d typically
    /// obtain the defaults from [`TextViewExt::default_attributes()`][crate::prelude::TextViewExt::default_attributes()].
    ///
    /// [`is_attributes()`][Self::is_attributes()] will modify `values`, applying the
    /// effects of any tags present at `self`. If any tags affected `values`,
    /// the function returns [`true`].
    ///
    /// # Returns
    ///
    /// [`true`] if `values` was modified
    ///
    /// ## `values`
    /// a [`TextAttributes`][crate::TextAttributes] to be filled in
    #[doc(alias = "gtk_text_iter_get_attributes")]
    #[doc(alias = "get_attributes")]
    pub fn is_attributes(&self, values: &TextAttributes) -> bool {
        unsafe {
            from_glib(ffi::gtk_text_iter_get_attributes(
                self.to_glib_none().0,
                mut_override(values.to_glib_none().0),
            ))
        }
    }

    /// The Unicode character at this iterator is returned. (Equivalent to
    /// operator* on a C++ iterator.) If the element at this iterator is a
    /// non-character element, such as an image embedded in the buffer, the
    /// Unicode “unknown” character 0xFFFC is returned. If invoked on
    /// the end iterator, zero is returned; zero is not a valid Unicode character.
    /// So you can write a loop which ends when [`char()`][Self::char()]
    /// returns 0.
    ///
    /// # Returns
    ///
    /// a Unicode character, or 0 if `self` is not dereferenceable
    #[doc(alias = "gtk_text_iter_get_char")]
    #[doc(alias = "get_char")]
    pub fn char(&self) -> Option<char> {
        let ret = unsafe { ffi::gtk_text_iter_get_char(self.to_glib_none().0) };

        if ret == 0 {
            return None;
        }

        Some(TryFrom::try_from(ret).expect("conversion from an invalid Unicode value attempted"))
    }
}