Project roadmap and task tracking for the nfx-stringutils library.
Todo
- Substring Extraction
- substringBefore(str, delimiter) - extract before first occurrence
- substringAfter(str, delimiter) - extract after first occurrence
- substringBeforeLast(str, delimiter) - extract before last occurrence
- substringAfterLast(str, delimiter) - extract after last occurrence
- extractBetween(str, start, end) - extract between delimiters
- removePrefix(str, prefix) - remove prefix if present
- removeSuffix(str, suffix) - remove suffix if present
- Character & String Removal
- removeAll(str, char) - remove all occurrences of character
- removeAll(str, substr) - remove all occurrences of substring
- removeIf(str, predicate) - remove characters matching predicate
- removeWhitespace(str) - remove all whitespace characters
- collapseWhitespace(str) - collapse consecutive whitespace to single space
- URL encoding/decoding
- urlEncode(str) - percent-encode special characters
- urlDecode(str) - decode percent-encoded strings
- JSON escape/unescape
- jsonEscape(str) - escape quotes, backslashes, control characters
- jsonUnescape(str) - unescape JSON string literals
- XML/HTML escape/unescape
- xmlEscape(str) - escape &, <, >, ", '
- [ ] <tt>xmlUnescape(str)</tt> - unescape XML entities
- [ ] C/C++ escape sequences
- [ ] <tt>cppEscape(str)</tt> - escape \n, \t, \r, \\, \"
- [ ] <tt>cppUnescape(str)</tt> - unescape C++ string literals
- [ ] Predicate-Based Operations
- [ ] <tt>trimIf(str, predicate)</tt> - trim characters matching predicate
- [ ] <tt>trimStartIf(str, predicate)</tt> - trim start with predicate
- [ ] <tt>trimEndIf(str, predicate)</tt> - trim end with predicate
- [ ] <tt>countIf(str, predicate)</tt> - count characters matching predicate
- [ ] <tt>replaceIf(str, predicate, replacement)</tt> - replace characters matching predicate
- [ ] <tt>findIf(str, predicate)</tt> - find first character matching predicate
- [ ] <tt>findIfNot(str, predicate)</tt> - find first character NOT matching predicate
- [ ] Advanced Comparison
- [ ] <tt>compareIgnoreCase(lhs, rhs)</tt> - three-way comparison (returns int)
- [ ] <tt>naturalCompare(lhs, rhs)</tt> - natural sorting (handles embedded numbers)
- [ ] <tt>fuzzyMatch(str, pattern)</tt> - fuzzy string matching
- [ ] <tt>levenshteinDistance(lhs, rhs)</tt> - edit distance algorithm
- [ ] <tt>commonPrefix(lhs, rhs)</tt> - longest common prefix
- [ ] <tt>commonSuffix(lhs, rhs)</tt> - longest common suffix
- [ ] String Formatting Utilities
- [ ] <tt>truncate(str, maxLength)</tt> - truncate string to max length
- [ ] <tt>truncate(str, maxLength, ellipsis)</tt> - truncate with ellipsis ("...")
- leftJustify(str, width, fillChar) - alias for padRight
- rightJustify(str, width, fillChar) - alias for padLeft
- wordWrap(str, width) - wrap text to specified width
- indent(str, spaces) - indent all lines
- dedent(str) - remove common leading whitespace
v2.0.0 (Breaking Changes)
- Remove deprecated isValidPort(T) template function
- Migration: use manual range check (port >= 0 && port <= 65535)
- Update all documentation and samples
- SIMD optimizations for character searching (SSE2/AVX2)
- Optimize contains() with Boyer-Moore for longer patterns
- Benchmark-driven optimization of hot paths
- Unicode support (UTF-8, UTF-16, UTF-32)
- utf8Length() - count Unicode codepoints
- utf8Valid() - validate UTF-8 encoding
- utf8Normalize() - Unicode normalization (NFC, NFD, NFKC, NFKD)
- Case conversion with locale support
- Collation and locale-aware comparison
- Regular Expression Utilities
- regexMatch(str, pattern) - simple regex matching wrapper
- regexReplace(str, pattern, replacement) - regex replacement
- regexSplit(str, pattern) - split by regex pattern
- StringBuilder class for efficient string concatenation
- Amortized growth strategy
- Refactor parsing API to modern C++ idioms
- Replace tryParseBool/tryParseInt/etc with unified template interface
- Add std::optional<T> fromString<T>(std::string_view str)
- Add bool fromString<T>(std::string_view str, T& result)
- Deprecate old tryParse* functions in v1.x
- Remove tryParse* functions in v2.0.0
- Support types: bool, int, uint32_t, int64_t, float, double
- Update all tests, samples, and documentation
In Progress
Done ✓
v1.2.0 (2025-11-08)
- String operations (count, countOverlapping, replace, replaceAll, join)
- Formatting & padding (padLeft, padRight, center, repeat)
- Search & manipulation (reverse, indexOf, lastIndexOf)
- Parsing: tryParseFloat with NaN/inf support
- Updated documentation and samples
v1.1.0 (2025-10-30)
- Zero-allocation string splitting (Splitter class, splitView() factory)
v1.0.3 (2025-10-30)
- Bug fix: Removed unused variable in isIPv6Address
v1.0.2 (2025-10-29)
- Bug fix: CMake directory paths and variable naming
v1.0.1 (2025-10-27)
- Bug fix: Release workflow draft releases