rassa_unibreak_sys/
lib.rs1#![allow(non_camel_case_types)]
2
3use std::ffi::{c_char, c_int};
4
5pub type utf8_t = u8;
6pub type utf16_t = u16;
7pub type utf32_t = u32;
8
9pub const LIBUNIBREAK_LINKED: bool = cfg!(libunibreak_available);
10
11pub const LINEBREAK_MUSTBREAK: c_char = 0;
12pub const LINEBREAK_ALLOWBREAK: c_char = 1;
13pub const LINEBREAK_NOBREAK: c_char = 2;
14pub const LINEBREAK_INSIDEACHAR: c_char = 3;
15pub const LINEBREAK_INDETERMINATE: c_char = 4;
16
17pub const WORDBREAK_BREAK: c_char = 0;
18pub const WORDBREAK_NOBREAK: c_char = 1;
19pub const WORDBREAK_INSIDEACHAR: c_char = 2;
20
21#[cfg(libunibreak_available)]
22unsafe extern "C" {
23 pub fn init_linebreak();
24 pub fn set_linebreaks_utf32(
25 s: *const utf32_t,
26 len: usize,
27 lang: *const c_char,
28 brks: *mut c_char,
29 );
30 pub fn is_line_breakable(char1: utf32_t, char2: utf32_t, lang: *const c_char) -> c_int;
31
32 pub fn init_wordbreak();
33 pub fn set_wordbreaks_utf32(
34 s: *const utf32_t,
35 len: usize,
36 lang: *const c_char,
37 brks: *mut c_char,
38 );
39}
40
41pub unsafe fn analyze_linebreaks_utf32(
49 s: *const utf32_t,
50 len: usize,
51 lang: *const c_char,
52 brks: *mut c_char,
53) -> bool {
54 #[cfg(libunibreak_available)]
55 {
56 unsafe {
57 init_linebreak();
58 set_linebreaks_utf32(s, len, lang, brks);
59 }
60 true
61 }
62
63 #[cfg(not(libunibreak_available))]
64 {
65 let _ = (s, len, lang, brks);
66 false
67 }
68}
69
70pub unsafe fn analyze_wordbreaks_utf32(
78 s: *const utf32_t,
79 len: usize,
80 lang: *const c_char,
81 brks: *mut c_char,
82) -> bool {
83 #[cfg(libunibreak_available)]
84 {
85 unsafe {
86 init_wordbreak();
87 set_wordbreaks_utf32(s, len, lang, brks);
88 }
89 true
90 }
91
92 #[cfg(not(libunibreak_available))]
93 {
94 let _ = (s, len, lang, brks);
95 false
96 }
97}