All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Rename selected
TStringKitmembers to align with helper naming:ReverseText→ReverseCapitalizeText→CapitalizeJoin→JoinWith
Notes:
- These will be hard renames in 2.0.0. Migration: replace calls per the mapping above.
- Alternative considered: keep aliases in helper. We opted for simpler, consistent naming.
- Code Quality: Standardized Pascal comment style across all source files:
- Use
//for short comments (1–3 lines) - Use
(* *)for longer documentation blocks - Reserve
{ }for compiler directives only
- Use
- Bug Fixes: Fixed regex quantifier syntax errors throughout codebase:
- Corrected invalid
(*n,m*)syntax to standard{n,m}inIsValidURL,IsValidIPv4,IsValidIPv6,IsValidEmail, andHexDecode - Fixed comment parsing issue with
*)sequences in documentation blocks by restructuring pattern descriptions
- Corrected invalid
- Documentation: Enhanced beginner experience:
- Added "Project Philosophy" section to CONTRIBUTING.md explaining beginner-friendly design and IDE support rationale
- Added "Working Examples" section to README.md with ready-to-run example programs (StringKitExample, CaseAndEncodeDemo, EncodeOnlyDemo)
- Added "Common Beginner Questions" section to README.md addressing top usage questions
- Updated version badge in README.md to 1.8.0
- Updated Lazarus package version to 1.8.0 in
packages/lazarus/stringkit_fp.lpk
- All 144 tests passing (72 TStringTests + 72 TStringHelperTests)
- No breaking changes or functionality modifications
- Focus on code quality, correctness, and documentation improvements
- Migrated to built-in RTL types for arrays of strings:
- Replaced custom
TMatchStringswithTypes.TStringDynArrayacross the public API, helpers, tests, and documentation. - Helper method signatures updated accordingly, e.g.,
JoinWith(const Strings: TStringDynArray).
- Replaced custom
- Documentation updated (README and Cheat Sheet) to reflect the new types and signatures.
- If you referenced
TMatchStrings, switch toTypes.TStringDynArray. - Ensure
Typesis in your unit'susesclause when working withTStringDynArray. - Instance-style
JoinWithremains the recommended usage:', '.JoinWith(Arr).
- Minor consistency fixes in examples and comments related to split/join and n-grams.
- Modularized the
TStringHelperExtype helper using conditional include files (.intf.inc/.impl.inc) grouped by feature. This enables selective compilation of helper methods while preserving the existing API when all features are enabled. - Feature flags for selective builds:
SK_ALL— enable all helper features (default when no flags provided)SK_ANY— opt into selective mode, then enable one or more of:SK_MANIP,SK_MATCH,SK_COMPARE,SK_CASE,SK_VALIDATE,SK_FORMAT,SK_NUMERIC,SK_ENCODE,SK_SPLIT,SK_PHONETIC
- Documentation: README section “Modular Helper via Feature Flags (1.6.0+)” with examples for FPC/Lazarus conditional defines.
- No breaking changes. Existing APIs remain compatible when
SK_ALL(default) is active. - Internal tooling: added
tools/count_tstringkit_public.ps1to generate coverage betweenTStringKitand the helper. Seetools/count_tstringkit_public.README.md. - Internal organization of
src/StringKitHelper.pasto include feature groups fromsrc/inc/via{$I ...}includes, improving maintainability and build-time flexibility. - Version badge in
README.mdupdated to 1.6.0.
- Minor documentation and formatting improvements across README and docs.
- No functional changes; refactor validated by the full test suite (144 tests) passing with all features enabled (
SK_ALL).
- Exposed existing
TStringKitfunctionality as string type helpers inTStringHelperEx(e.g.,Soundex,Metaphone,CountWords, formatting, case conversions, splitting/joining, etc.) for instance-style usage like'text'.Soundex. - Added comprehensive unit tests for Roman numeral conversion (
FromRoman,ToRoman), including boundary and invalid cases. - Added Base64 encoding/decoding (
Encode64,Decode64) to bothTStringKitandTStringHelperEx.
- Renamed delimiter-centric helper method
Join(const Strings: TMatchStrings)toJoinWith(const Strings: TMatchStrings)inTStringHelperExfor clarity. Usage example:', '.JoinWith(Arr). - Updated tests and examples to prefer the delimiter-first, instance-style
JoinWithover array-first calls.
- Soundex implementation aligned with standard rules (handle H/W non-reset and first-letter code), fixing cases like
"Ashcraft" -> A261and"Tymczak" -> T522. - Metaphone implementation adjusted for initial
WR(silent W),CKcollapsing, and softCduplicate suppression, fixing cases like"wrack" -> RKand"science" -> SNS. - Tests updated to reflect correct behavior where punctuation splits words (e.g.,
CountWordson'This is a test.'expects 4). - Base64 decoding strictness:
TStringKit.Decode64now validates padding strictly (length % 4, '=' only at the end, 1–2 '='), returning an empty string on invalid input. This resolves previously failing Base64 decode tests.
- Separated from TidyKit-FP as a separate library for ease of maintenance.
- Updated documentation to reflect this change.