glib/auto/
markup_parse_context.rs1use crate::{Error, ffi, translate::*};
6
7crate::wrapper! {
8 #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
9 pub struct MarkupParseContext(Shared<ffi::GMarkupParseContext>);
10
11 match fn {
12 ref => |ptr| ffi::g_markup_parse_context_ref(ptr),
13 unref => |ptr| ffi::g_markup_parse_context_unref(ptr),
14 type_ => || ffi::g_markup_parse_context_get_type(),
15 }
16}
17
18impl MarkupParseContext {
19 #[doc(alias = "g_markup_parse_context_end_parse")]
25 pub fn end_parse(&self) -> Result<(), crate::Error> {
26 unsafe {
27 let mut error = std::ptr::null_mut();
28 let is_ok = ffi::g_markup_parse_context_end_parse(self.to_glib_none().0, &mut error);
29 debug_assert_eq!(is_ok == crate::ffi::GFALSE, !error.is_null());
30 if error.is_null() {
31 Ok(())
32 } else {
33 Err(from_glib_full(error))
34 }
35 }
36 }
37
38 #[cfg(feature = "v2_90")]
39 #[cfg_attr(docsrs, doc(cfg(feature = "v2_90")))]
40 #[doc(alias = "g_markup_parse_context_get_attribute_position")]
41 #[doc(alias = "get_attribute_position")]
42 pub fn attribute_position(&self, attr: u32) -> (usize, usize, usize, usize, usize, usize) {
43 unsafe {
44 let mut start_lines = std::mem::MaybeUninit::uninit();
45 let mut start_chars = std::mem::MaybeUninit::uninit();
46 let mut start_offset = std::mem::MaybeUninit::uninit();
47 let mut end_lines = std::mem::MaybeUninit::uninit();
48 let mut end_chars = std::mem::MaybeUninit::uninit();
49 let mut end_offset = std::mem::MaybeUninit::uninit();
50 ffi::g_markup_parse_context_get_attribute_position(
51 self.to_glib_none().0,
52 attr,
53 start_lines.as_mut_ptr(),
54 start_chars.as_mut_ptr(),
55 start_offset.as_mut_ptr(),
56 end_lines.as_mut_ptr(),
57 end_chars.as_mut_ptr(),
58 end_offset.as_mut_ptr(),
59 );
60 (
61 start_lines.assume_init(),
62 start_chars.assume_init(),
63 start_offset.assume_init(),
64 end_lines.assume_init(),
65 end_chars.assume_init(),
66 end_offset.assume_init(),
67 )
68 }
69 }
70
71 #[doc(alias = "g_markup_parse_context_get_element")]
72 #[doc(alias = "get_element")]
73 pub fn element(&self) -> crate::GString {
74 unsafe {
75 from_glib_none(ffi::g_markup_parse_context_get_element(
76 self.to_glib_none().0,
77 ))
78 }
79 }
80
81 #[doc(alias = "g_markup_parse_context_get_element_stack")]
82 #[doc(alias = "get_element_stack")]
83 pub fn element_stack(&self) -> Vec<crate::GString> {
84 unsafe {
85 FromGlibPtrContainer::from_glib_none(ffi::g_markup_parse_context_get_element_stack(
86 self.to_glib_none().0,
87 ))
88 }
89 }
90
91 #[cfg(feature = "v2_88")]
92 #[cfg_attr(docsrs, doc(cfg(feature = "v2_88")))]
93 #[doc(alias = "g_markup_parse_context_get_offset")]
94 #[doc(alias = "get_offset")]
95 pub fn offset(&self) -> usize {
96 unsafe { ffi::g_markup_parse_context_get_offset(self.to_glib_none().0) }
97 }
98
99 #[doc(alias = "g_markup_parse_context_get_position")]
100 #[doc(alias = "get_position")]
101 pub fn position(&self) -> (i32, i32) {
102 unsafe {
103 let mut line_number = std::mem::MaybeUninit::uninit();
104 let mut char_number = std::mem::MaybeUninit::uninit();
105 ffi::g_markup_parse_context_get_position(
106 self.to_glib_none().0,
107 line_number.as_mut_ptr(),
108 char_number.as_mut_ptr(),
109 );
110 (line_number.assume_init(), char_number.assume_init())
111 }
112 }
113
114 #[cfg(feature = "v2_88")]
115 #[cfg_attr(docsrs, doc(cfg(feature = "v2_88")))]
116 #[doc(alias = "g_markup_parse_context_get_tag_start")]
117 #[doc(alias = "get_tag_start")]
118 pub fn tag_start(&self) -> (usize, usize, usize) {
119 unsafe {
120 let mut line_number = std::mem::MaybeUninit::uninit();
121 let mut char_number = std::mem::MaybeUninit::uninit();
122 let mut offset = std::mem::MaybeUninit::uninit();
123 ffi::g_markup_parse_context_get_tag_start(
124 self.to_glib_none().0,
125 line_number.as_mut_ptr(),
126 char_number.as_mut_ptr(),
127 offset.as_mut_ptr(),
128 );
129 (
130 line_number.assume_init(),
131 char_number.assume_init(),
132 offset.assume_init(),
133 )
134 }
135 }
136
137 #[doc(alias = "g_markup_parse_context_parse")]
138 pub fn parse(&self, text: &str) -> Result<(), crate::Error> {
139 let text_len = text.len() as _;
140 unsafe {
141 let mut error = std::ptr::null_mut();
142 let is_ok = ffi::g_markup_parse_context_parse(
143 self.to_glib_none().0,
144 text.to_glib_none().0,
145 text_len,
146 &mut error,
147 );
148 debug_assert_eq!(is_ok == crate::ffi::GFALSE, !error.is_null());
149 if error.is_null() {
150 Ok(())
151 } else {
152 Err(from_glib_full(error))
153 }
154 }
155 }
156
157 }