Thu, 27 Feb 2025 14:07:59 +0100
add information about supported properties syntax
relates to #451
1143
0559812df10c
assign proper names to the documentation topics
Mike Becker <universe@uap-core.de>
parents:
1142
diff
changeset
|
1 | # Properties |
1142
9437530176bc
add symbols that need documentation as TODOs
Mike Becker <universe@uap-core.de>
parents:
1141
diff
changeset
|
2 | |
1230
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
3 | The UCX properties parser can be used to parse line based key/value strings. |
1229
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
4 | |
1190
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
5 | <warning> |
1229
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
6 | New Feature - documentation work in progress! |
1190
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
7 | </warning> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
8 | |
1230
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
9 | ## Supported Syntax |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
10 | |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
11 | Key/value pairs must be line based and separated by a single character delimter. |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
12 | The parser supports up to three different characters which introduce comments. |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
13 | All characters starting with a comment character up to the end of the line are ignored. |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
14 | Blank lines are also ignored. |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
15 | |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
16 | An example properties file looks like this: |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
17 | |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
18 | ```properties |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
19 | # Comment line at start of file |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
20 | key1 = value1 |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
21 | key2 = value2 |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
22 | # next is a blank line and will be ignored |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
23 | |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
24 | keys_are_trimmed = and_so_are_values # also a comment |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
25 | ``` |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
26 | |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
27 | > Delimiter and comment characters are configured with the `CxPropertiesConfig` structure. |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
28 | > There is also a field reserved for `continuation` which will be used as a line continuation character |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
29 | > in a future version of UCX. |
3ec9cce0de01
add information about supported properties syntax
Mike Becker <universe@uap-core.de>
parents:
1229
diff
changeset
|
30 | > In UCX 3.1 this is not implemented. |
1229
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
31 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
32 | ## Basic Parsing |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
33 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
34 | ```C |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
35 | #include <cx/properties.h> |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
36 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
37 | typedef struct cx_properties_config_s { |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
38 | char delimiter; |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
39 | char comment1; |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
40 | char comment2; |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
41 | char comment3; |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
42 | // reserved for future use - not implemented in UCX 3.1 |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
43 | char continuation; |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
44 | } CxPropertiesConfig; |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
45 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
46 | void cxPropertiesInit(CxProperties *prop, CxPropertiesConfig config); |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
47 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
48 | void cxPropertiesInitDefault(CxProperties *prop); |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
49 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
50 | void cxPropertiesDestroy(CxProperties *prop); |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
51 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
52 | void cxPropertiesReset(CxProperties *prop); |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
53 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
54 | int cxPropertiesFilln(CxProperties *prop, |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
55 | const char *buf, size_t len); |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
56 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
57 | // where S is one of cxstring, cxmutstr, char*, const char* |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
58 | int cxPropertiesFill(CxProperties *prop, S string); |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
59 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
60 | CxPropertiesStatus cxPropertiesNext(CxProperties *prop, |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
61 | cxstring *key, cxstring *value); |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
62 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
63 | void cxPropertiesUseStack(CxProperties *prop, |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
64 | char *buf, size_t capacity); |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
65 | ``` |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
66 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
67 | ### List of Status Codes |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
68 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
69 | ## Sources and Sinks |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
70 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
71 | ```C |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
72 | #include <cx/properties.h> |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
73 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
74 | CxPropertiesSource |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
75 | cxPropertiesStringSource(cxstring str); |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
76 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
77 | CxPropertiesSource |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
78 | cxPropertiesCstrSource(const char *str); |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
79 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
80 | CxPropertiesSource |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
81 | cxPropertiesCstrnSource(const char *str, size_t len); |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
82 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
83 | CxPropertiesSource |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
84 | cxPropertiesFileSource(FILE *file, size_t chunk_size); |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
85 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
86 | CxPropertiesSink |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
87 | cxPropertiesMapSink(CxMap *map); |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
88 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
89 | CxPropertiesStatus |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
90 | cxPropertiesLoad(CxProperties *prop, |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
91 | CxPropertiesSink sink, CxPropertiesSource source); |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
92 | ``` |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
93 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
94 | ### Creating own Sources and Sinks |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
95 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
96 | ```C |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
97 | #include <cx/properties.h> |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
98 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
99 | typedef int(*cx_properties_read_init_func)(CxProperties *prop, |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
100 | CxPropertiesSource *src); |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
101 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
102 | typedef int(*cx_properties_read_func)(CxProperties *prop, |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
103 | CxPropertiesSource *src, cxstring *target); |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
104 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
105 | typedef void(*cx_properties_read_clean_func)(CxProperties *prop, |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
106 | CxPropertiesSource *src); |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
107 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
108 | typedef int(*cx_properties_sink_func)(CxProperties *prop, |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
109 | CxPropertiesSink *sink, cxstring key, cxstring value); |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
110 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
111 | typedef struct cx_properties_source_s { |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
112 | void *src; |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
113 | void *data_ptr; |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
114 | size_t data_size; |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
115 | cx_properties_read_func read_func; |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
116 | cx_properties_read_init_func read_init_func; |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
117 | cx_properties_read_clean_func read_clean_func; |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
118 | } CxPropertiesSource; |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
119 | |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
120 | typedef struct cx_properties_sink_s { |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
121 | void *sink; |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
122 | void *data; |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
123 | cx_properties_sink_func sink_func; |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
124 | } CxPropertiesSink; |
9899043d7e39
basic structure for properties docu
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
125 | ``` |
1190
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
126 | |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
127 | <seealso> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
128 | <category ref="apidoc"> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
129 | <a href="https://ucx.sourceforge.io/api/properties_8h.html">properties.h</a> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
130 | </category> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
131 | </seealso> |