1use crate::ffi;
7use glib::translate::*;
8
9glib::wrapper! {
10 #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
11 pub struct Regex(Shared<ffi::VteRegex>);
12
13 match fn {
14 ref => |ptr| ffi::vte_regex_ref(ptr),
15 unref => |ptr| ffi::vte_regex_unref(ptr),
16 type_ => || ffi::vte_regex_get_type(),
17 }
18}
19
20impl Regex {
21 #[doc(alias = "vte_regex_new_for_match")]
22 #[doc(alias = "new_for_match")]
23 pub fn for_match(pattern: &str, flags: u32) -> Result<Regex, glib::Error> {
24 assert_initialized_main_thread!();
25 let pattern_length = pattern.len() as _;
26 unsafe {
27 let mut error = std::ptr::null_mut();
28 let ret = ffi::vte_regex_new_for_match(
29 pattern.to_glib_none().0,
30 pattern_length,
31 flags,
32 &mut error,
33 );
34 if error.is_null() {
35 Ok(from_glib_full(ret))
36 } else {
37 Err(from_glib_full(error))
38 }
39 }
40 }
41
42 #[cfg(feature = "v0_76")]
43 #[cfg_attr(docsrs, doc(cfg(feature = "v0_76")))]
44 #[doc(alias = "vte_regex_new_for_match_full")]
45 #[doc(alias = "new_for_match_full")]
46 pub fn for_match_full(
47 pattern: &str,
48 flags: u32,
49 extra_flags: u32,
50 ) -> Result<(Regex, usize), glib::Error> {
51 assert_initialized_main_thread!();
52 let pattern_length = pattern.len() as _;
53 unsafe {
54 let mut error_offset = std::mem::MaybeUninit::uninit();
55 let mut error = std::ptr::null_mut();
56 let ret = ffi::vte_regex_new_for_match_full(
57 pattern.to_glib_none().0,
58 pattern_length,
59 flags,
60 extra_flags,
61 error_offset.as_mut_ptr(),
62 &mut error,
63 );
64 if error.is_null() {
65 Ok((from_glib_full(ret), error_offset.assume_init()))
66 } else {
67 Err(from_glib_full(error))
68 }
69 }
70 }
71
72 #[doc(alias = "vte_regex_new_for_search")]
73 #[doc(alias = "new_for_search")]
74 pub fn for_search(pattern: &str, flags: u32) -> Result<Regex, glib::Error> {
75 assert_initialized_main_thread!();
76 let pattern_length = pattern.len() as _;
77 unsafe {
78 let mut error = std::ptr::null_mut();
79 let ret = ffi::vte_regex_new_for_search(
80 pattern.to_glib_none().0,
81 pattern_length,
82 flags,
83 &mut error,
84 );
85 if error.is_null() {
86 Ok(from_glib_full(ret))
87 } else {
88 Err(from_glib_full(error))
89 }
90 }
91 }
92
93 #[cfg(feature = "v0_76")]
94 #[cfg_attr(docsrs, doc(cfg(feature = "v0_76")))]
95 #[doc(alias = "vte_regex_new_for_search_full")]
96 #[doc(alias = "new_for_search_full")]
97 pub fn for_search_full(
98 pattern: &str,
99 flags: u32,
100 extra_flags: u32,
101 ) -> Result<(Regex, usize), glib::Error> {
102 assert_initialized_main_thread!();
103 let pattern_length = pattern.len() as _;
104 unsafe {
105 let mut error_offset = std::mem::MaybeUninit::uninit();
106 let mut error = std::ptr::null_mut();
107 let ret = ffi::vte_regex_new_for_search_full(
108 pattern.to_glib_none().0,
109 pattern_length,
110 flags,
111 extra_flags,
112 error_offset.as_mut_ptr(),
113 &mut error,
114 );
115 if error.is_null() {
116 Ok((from_glib_full(ret), error_offset.assume_init()))
117 } else {
118 Err(from_glib_full(error))
119 }
120 }
121 }
122
123 #[doc(alias = "vte_regex_jit")]
124 pub fn jit(&self, flags: u32) -> Result<(), glib::Error> {
125 unsafe {
126 let mut error = std::ptr::null_mut();
127 let is_ok = ffi::vte_regex_jit(self.to_glib_none().0, flags, &mut error);
128 debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
129 if error.is_null() {
130 Ok(())
131 } else {
132 Err(from_glib_full(error))
133 }
134 }
135 }
136
137 #[doc(alias = "vte_regex_substitute")]
138 pub fn substitute(
139 &self,
140 subject: &str,
141 replacement: &str,
142 flags: u32,
143 ) -> Result<glib::GString, glib::Error> {
144 unsafe {
145 let mut error = std::ptr::null_mut();
146 let ret = ffi::vte_regex_substitute(
147 self.to_glib_none().0,
148 subject.to_glib_none().0,
149 replacement.to_glib_none().0,
150 flags,
151 &mut error,
152 );
153 if error.is_null() {
154 Ok(from_glib_full(ret))
155 } else {
156 Err(from_glib_full(error))
157 }
158 }
159 }
160}