libunibreak: unibreakdef.h Source File

libunibreak 7.0

Loading...
Searching...
No Matches
unibreakdef.h
Go to the documentation of this file.
1/* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: */
2
3/*
4 * Break processing in a Unicode sequence. Designed to be used in a
5 * generic text renderer.
6 *
7 * Copyright (C) 2015-2026 Wu Yongwei <wuyongwei at gmail dot com>
8 *
9 * This software is provided 'as-is', without any express or implied
10 * warranty. In no event will the author be held liable for any damages
11 * arising from the use of this software.
12 *
13 * Permission is granted to anyone to use this software for any purpose,
14 * including commercial applications, and to alter it and redistribute
15 * it freely, subject to the following restrictions:
16 *
17 * 1. The origin of this software must not be misrepresented; you must
18 * not claim that you wrote the original software. If you use this
19 * software in a product, an acknowledgement in the product
20 * documentation would be appreciated but is not required.
21 * 2. Altered source versions must be plainly marked as such, and must
22 * not be misrepresented as being the original software.
23 * 3. This notice may not be removed or altered from any source
24 * distribution.
25 */
26
34
35#ifndef UNIBREAKDEF_H
36#define UNIBREAKDEF_H
37
38#if defined(_MSC_VER) && _MSC_VER < 1800
39#ifndef __cplusplus
40typedef int bool;
41#define false 0
42#define true 1
43#endif
44#else
45#include <stdbool.h>
46#endif
47
48#include <stddef.h>
49#include "unibreakbase.h"
50
51#define ARRAY_LEN(x) (sizeof(x) / sizeof(x[0]))
52
53#ifdef __cplusplus
54extern "C" {
55#endif
56
61#define EOS 0xFFFFFFFF
62
67 typedef utf32_t (*get_next_char_t)(const void *, size_t, size_t *);
68
69/* Function Prototype */
70 utf32_t ub_get_next_char_utf8 (const void *sv, size_t len, size_t *ip);
71 utf32_t ub_get_next_char_utf16(const void *sv, size_t len, size_t *ip);
72 utf32_t ub_get_next_char_utf32(const void *sv, size_t len, size_t *ip);
73
74__inline const void *ub_bsearch(utf32_t ch, const void *ptr, size_t count,
75 size_t size)
76{
77 int min = 0;
78 int max = (int)(count - 1);;
79 int mid;
80
81 do
82 {
83 mid = (min + max) / 2;
84 const unsigned char *mid_ptr =
85 (const unsigned char *)ptr + mid * size;
86 utf32_t mid_start = *(const utf32_t *)mid_ptr;
87 utf32_t mid_end = *((const utf32_t *)mid_ptr + 1);
88
89 if (ch < mid_start)
90 {
91 max = mid - 1;
92 }
93 else if (ch > mid_end)
94 {
95 min = mid + 1;
96 }
97 else
98 {
99 return mid_ptr;
100 }
101 } while (min <= max);
102
103 return NULL;
104}
105
106#ifdef __cplusplus
107}
108#endif
109
110#endif /* UNIBREAKDEF_H */
unibreakbase.h
Header file for common definitions in the libunibreak library.
utf32_t
unsigned int utf32_t
Type for UTF-32 data points.
Definition unibreakbase.h:49
ub_bsearch
__inline const void * ub_bsearch(utf32_t ch, const void *ptr, size_t count, size_t size)
Definition unibreakdef.h:74
ub_get_next_char_utf8
utf32_t ub_get_next_char_utf8(const void *sv, size_t len, size_t *ip)
Gets the next Unicode character in a UTF-8 sequence.
Definition unibreakdef.c:50
ub_get_next_char_utf32
utf32_t ub_get_next_char_utf32(const void *sv, size_t len, size_t *ip)
Gets the next Unicode character in a UTF-32 sequence.
Definition unibreakdef.c:161
get_next_char_t
utf32_t(* get_next_char_t)(const void *, size_t, size_t *)
Abstract function interface for ub_get_next_char_utf8, ub_get_next_char_utf16, and ub_get_next_char_u...
Definition unibreakdef.h:67
ub_get_next_char_utf16
utf32_t ub_get_next_char_utf16(const void *sv, size_t len, size_t *ip)
Gets the next Unicode character in a UTF-16 sequence.
Definition unibreakdef.c:119