EasyGUI
gui_string.h
1 
6 /*
7  * Copyright (c) 2019 Tilen MAJERLE
8  *
9  * Permission is hereby granted, free of charge, to any person
10  * obtaining a copy of this software and associated documentation
11  * files (the "Software"), to deal in the Software without restriction,
12  * including without limitation the rights to use, copy, modify, merge,
13  * publish, distribute, sublicense, and/or sell copies of the Software,
14  * and to permit persons to whom the Software is furnished to do so,
15  * subject to the following conditions:
16  *
17  * The above copyright notice and this permission notice shall be
18  * included in all copies or substantial portions of the Software.
19  *
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
22  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
23  * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
24  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
25  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
27  * OTHER DEALINGS IN THE SOFTWARE.
28  *
29  * This file is part of EasyGUI library.
30  *
31  * Author: Tilen Majerle <tilen@majerle.eu>
32  */
33 #ifndef GUI_HDR_STRING_H
34 #define GUI_HDR_STRING_H
35 
36 /* C++ detection */
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40 
41 #include "gui_utils.h"
42 
59 typedef struct {
60  uint8_t t;
61  uint8_t r;
62  uint32_t res;
64 
68 typedef enum {
69  UNICODE_OK = 0x00,
73 
76 uint8_t gui_string_unicode_encode(const uint32_t c, gui_char* out);
77 
85 typedef struct {
86  const gui_char* str;
87 #if GUI_CFG_USE_UNICODE || __DOXYGEN__
89 #endif /* GUI_CFG_USE_UNICODE || __DOXYGEN__ */
90 } gui_string_t;
91 
92 size_t gui_string_length(const gui_char* const src);
93 size_t gui_string_lengthtotal(const gui_char* const src);
94 gui_char* gui_string_copy(gui_char* const dst, const gui_char* const src);
95 gui_char* gui_string_copyn(gui_char* const dst, const gui_char* const src, size_t len);
96 int gui_string_compare(const gui_char* const s1, const gui_char* const s2);
97 uint8_t gui_string_isprintable(uint32_t ch);
98 uint8_t gui_string_prepare(gui_string_t* const s, const gui_char* const str);
99 uint8_t gui_string_getch(gui_string_t* const str, uint32_t* const out, uint8_t* const len);
100 uint8_t gui_string_getchreverse(gui_string_t* const str, uint32_t* const out, uint8_t* const len);
101 uint8_t gui_string_gotoend(gui_string_t* const str);
102 
107 /* C++ detection */
108 #ifdef __cplusplus
109 }
110 #endif
111 
112 #endif /* GUI_HDR_STRING_H */
gui_string_unicode_t s
Definition: gui_string.h:88
uint8_t gui_string_getch(gui_string_t *const str, uint32_t *const out, uint8_t *const len)
Get next decoded character from source string.
Definition: gui_string.c:229
uint8_t gui_string_prepare(gui_string_t *const s, const gui_char *const str)
Prepare string before it can be used with gui_string_getch or gui_string_getchreverse functions.
Definition: gui_string.c:207
uint8_t gui_string_getchreverse(gui_string_t *const str, uint32_t *const out, uint8_t *const len)
Get character by character from end of string up.
Definition: gui_string.c:277
void gui_string_unicode_init(gui_string_unicode_t *const s)
Initialize unicode processing structure.
Definition: gui_string.c:42
uint32_t res
Definition: gui_string.h:62
UNICODE processing information structure.
Definition: gui_string.h:59
uint8_t gui_char
Definition: gui_defs.h:212
uint8_t t
Definition: gui_string.h:60
gui_char * gui_string_copy(gui_char *const dst, const gui_char *const src)
Copy string from source to destination no matter of GUI_CFG_USE_UNICODE selection.
Definition: gui_string.c:173
Definition: gui_string.h:70
GUI_STRING_UNICODE_Result_t
UNICODE processing result information.
Definition: gui_string.h:68
String structure for parsing characters.
Definition: gui_string.h:85
uint8_t gui_string_gotoend(gui_string_t *const str)
Set character pointer to the last character in sequence.
Definition: gui_string.c:332
GUI_STRING_UNICODE_Result_t gui_string_unicode_decode(gui_string_unicode_t *const s, const gui_char c)
Decodes single input byte of unicode formatted text.
Definition: gui_string.c:54
size_t gui_string_length(const gui_char *const src)
Return length of string.
Definition: gui_string.c:135
uint8_t gui_string_unicode_encode(const uint32_t c, gui_char *out)
Encodes input character to UNICODE sequence of 1-4 bytes.
Definition: gui_string.c:103
const gui_char * str
Definition: gui_string.h:86
size_t gui_string_lengthtotal(const gui_char *const src)
Return total number of bytes required for string.
Definition: gui_string.c:162
uint8_t gui_string_isprintable(uint32_t ch)
Check if character is printable.
Definition: gui_string.c:346
gui_char * gui_string_copyn(gui_char *const dst, const gui_char *const src, size_t len)
Copy string from source to destination with selectable number of bytes.
Definition: gui_string.c:185
Definition: gui_string.h:71
int gui_string_compare(const gui_char *const s1, const gui_char *const s2)
Compare 2 strings.
Definition: gui_string.c:196
Definition: gui_string.h:69
uint8_t r
Definition: gui_string.h:61