You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+140Lines changed: 140 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,138 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
6
6
## Unreleased
7
7
8
+
### Added
9
+
- Support for Unicode 17
10
+
11
+
### Fixed
12
+
- Regression in ICU 77+ StringByteSink causing memory corruption
13
+
- Bogus warnings on newer clang-cl
14
+
- Debug assertions when using Python strings with Python 3.14
15
+
16
+
## [3.7] - 2025-10-14
17
+
18
+
### Added
19
+
- This library now builds and works properly on Haiku OS
20
+
21
+
## [3.6] - 2025-09-26
22
+
23
+
### Added
24
+
- On Emscripten it is now possible to construct `sys_string` directly from `__externref_t` and convert `sys_string` back to it.
25
+
This is faster and usually more ergonomic that going through `Emval`.
26
+
- On Emscripten it is now possible to make `sys_string` use [WASM JavaScript Builtins](https://developer.mozilla.org/en-US/docs/WebAssembly/Guides/JavaScript_builtins) (if your WASM platform supports them). This can make construction of `sys_string` from `__externref_t` significantly faster.
27
+
Define `SYS_STRING_USE_WASM_JS_STRING` to 1 to enable this functionality.
28
+
29
+
### Fixed
30
+
- This library can now be used with `clang-cl` on Windows
31
+
- Bugs in BSTR storage support on 32-bit x86
32
+
- Warnings on clang 21
33
+
34
+
## [3.5] - 2025-07-16
35
+
36
+
### Fixed
37
+
- Incorrect CMake test for Python presence at build time
38
+
39
+
## [3.4] - 2025-06-27
40
+
41
+
### Fixed
42
+
- Inadvertent pessimization in `compare_no_case`
43
+
- Concepts rejecting `Char *` as eligible for addition to `sys_string`
44
+
45
+
## [3.3] - 2025-05-12
46
+
47
+
### Fixed
48
+
49
+
- CMake build now correctly handles when Python detected on the build machine is too old to be used
50
+
- Tests now run correctly with PyPy Python installation
51
+
52
+
## [3.2] - 2025-02-10
53
+
54
+
### Added
55
+
56
+
-`sys_string` can now be `normalize()`-ed to NFC and NFD.
57
+
- It is now possible to use ICU instead of internal data/code for case conversion, grapheme
58
+
iteration and normalization. This makes those operations a tiny bit slower but saves
59
+
~100kB in a final executable if you use all of them.
60
+
61
+
### Changed
62
+
63
+
- This library is now header only
64
+
- Speed improvements to case conversions, case insensitive comparisons and grapheme iteration.
65
+
66
+
### Fixed
67
+
68
+
- Addressed some false positive sanitizer warnings.
69
+
70
+
## [3.1] - 2025-01-10
71
+
72
+
### Added
73
+
74
+
-`grapheme_view` and `graphemes` adapter which provide ability to iterate over grapheme clusters in `sys_string` and any UTF range.
75
+
76
+
### Changed
77
+
78
+
- Unicode data has been optimized for better size/speed balance
79
+
-`sys_string_t::hash_type` has been changed from `unsigned` to `size_t` on some platforms.
80
+
81
+
### Fixed
82
+
83
+
- Invalid character access in unicode mappings.
84
+
- Crash when sys_string_builder is re-used after `build()` on Apple and Python platforms.
85
+
-`utf_ref_view` and `utf_owning_view` now actually work with forward and input underlying ranges
86
+
- MSVC warnings when using `std::hash<sys_string>`
87
+
88
+
## [3.0] - 2024-12-02
89
+
90
+
This is a major release with some breaking changes
91
+
92
+
### Changed
93
+
94
+
- C++20 or higher is now required for compilation. In particular, the following C++20 features must be available:
95
+
- Ranges support in standard library (`__cpp_lib_ranges >= 201911`)
96
+
- Three-way comparison (spaceship operator)
97
+
-`char8_t` type
98
+
-`std::endian` support in standard library (`__cpp_lib_endian >= 201907`)
99
+
- Minimal compilers known to work include: GCC 12, Clang 16, Apple Clang 15.4 and MSVC 17.6.
100
+
- The library has been _range_-ified.
101
+
- All methods that used to accept iterator pairs now take iterator/sentinel pairs.
102
+
- All these methods now also have overloads that accept ranges
103
+
- Existing informal ranges (`sys_string::char_access`, `sys_string::utf_view`, etc.) are now
104
+
formal ranges or views.
105
+
- As part of the above `sys_string::utfX_view` classes has been renamed to `sys_string::utfX_access` (because they are
106
+
not formally views as defined by standard library). The old names have been retained for compatibility but annotated
107
+
as deprecated. Note that `sys_string_builder::utf_view` remains under the same name since it *is* a view.
108
+
- Breaking change: as part of the above change the `sys_string::utf_access` and `sys_string_builder::utf_view` now
109
+
return distinct iterators and sentinels (that is they no longer satisfy `std::ranges::common_range` concept).
110
+
You will need to use ranges algorithms with their iterators (e.g. `std::ranges::for_each` rather than `std::for_each`).
111
+
- The global `utf_view` template has been split into two: `utf_ref_view` that takes underlying range by reference (similar
112
+
to `std::ref_view`) and `utf_owning_view` that owns a movable underlying range (similar to `std::owning_view`). These
113
+
are automatically produced by `as_utf` range adapter closures (see below in Added section)
114
+
- Breaking change: the non-standard `Cursor` classes has been removed.
115
+
- The library has been _concept_-ified.
116
+
- Most templated library calls now have concepts checks that validate their argument types.
117
+
- Primitive `std::enable_if` used before have been subsumed by these and removed.
118
+
- Unicode data used for case folding and whitespace detection has been updated to version 16.0.0
119
+
120
+
### Added
121
+
-`sys_string_t` can now be `+`-ed with any forward range of any type of character (including C strings and std::string).
122
+
This results in a the same optimized addition as when adding `sys_string_t` objects.
123
+
-`sys_string_t` objects can now be formatted via `std::format` (if available in your library). On platforms
124
+
where `wchar_t` is UTF-16 or UTF-32 you can also use wide character formatting.
125
+
-`sys_string_t::std_format` method. This formats a new `sys_string_t` (similar to the existing `sys_string_t::format`)
126
+
but uses `std::format` machinery and formatting string syntax.
127
+
- Range adapter closures: `as_utf8`, `as_utf18`, `as_utf32` and generic `as_utf<encoding>` .
128
+
- These can be used to create `utf_ref_view`/`utf_owning_view` from any range/view. For example `as_utf16(std::string("abc"))`
129
+
- If you library supports custom adapter closures (usually `__cpp_lib_ranges >= 202202L`) they can be used in
130
+
view pipelines like `std::string("abc") | as_utf16 | std::views::take(2)` etc.
131
+
132
+
### Fixed
133
+
- Printing `sys_string_t` objects into `std::ostream` (and `std::wostream` if available) now functions correctly in presence
134
+
of stream formatting flags. Flags are currently ignored. This might change in a future version.
135
+
- Printing/formatting `sys_string_t` objects that use `char` storage type now does not perform sanitizing transcoding. The content
136
+
of the string is printed as-is. This allows faithful round-tripping and support for invalid Unicode for those scenarios. Similar
137
+
behavior applies to `wchar_t` on platform where it is UTF-16 or UTF-32.
138
+
-`operator<<` no longer pollutes global namespace
139
+
8
140
## [2.22] - 2025-10-14
9
141
10
142
## Added
@@ -226,3 +358,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
0 commit comments