Changelog
Version 1.3.0 — 2026-02-28
This release introduces full support for validation rules in the configuration parser.
The validation-rules implementation is intentionally separated from the core parser. It is only compiled if your application links against one of the dedicated validation-rule targets. This keeps the base parser lightweight while allowing you to enable validation when needed.
See the validation-rules documentation for details and usage examples.
Main Changes
Added the new namespace
erbsland::conf::vrcontaining all validation-rule interfaces.Extended the documentation:
Added a complete validation-rules reference.
Added tutorials demonstrating how to use validation rules.
Modernized the documentation build dependencies and configuration.
Extended the CMake build system:
Added three validation-rule variants:
Without regular expression support
Using
std::regexUsing the Erbsland Regular Expression library
Added an installation workflow for static library builds.
API Changes Since Version 1.2
Added Public Types and Headers
CaseSensitivityMatrix<T>StringListValueList,ConstValueListValueMatrix,ConstValueMatrixStringConvertibleandStringLikeconcepts
Extended Value API
Added:
wasValidated()validationRule()isSecret()isDefaultValue()
Added matrix helpers:
asMatrix(),asMatrixOrThrow()getMatrix(),getMatrixOrThrow()
Added conversions:
toValueList()(const and non-const)toValueMatrix()(const and non-const)
Extended text getter templates to accept string-like defaults (
String,std::string,std::u8string)
ValueList Semantics
ValueListis now defined asstd::vector<ValuePtr>(mutable pointers).Added
ConstValueListdefined asstd::vector<ConstValuePtr>.
Extended Parser Convenience API
parseFileOrThrow(...),parseFile(...)parseTextOrThrow(...),parseText(...)
Extended Name and NamePath
Name:isReservedValidationRule()isEscapedReservedValidationRule()withReservedVRPrefixRemoved()emptyInstance()
NamePath:Index,Count,nposfind(),containsText()subPath(),popBack(),clear()NamePathList
Extended String API (Unicode-Aware)
isValidUtf8()characterLength()characterCompare()nameCompare()startsWith(),contains(),endsWith()withCaseSensitivitysplit(),join(),transformed()forEachCharacter()toSafeText()Added
charandchar32_tappend overloads
Extended Error
Added copy-and-modify helpers:
withNamePathAndLocation()withMessagePrefix()withMessage()
Extended Bytes
Added
toHexForErrors().
Extended ValueType
Added
isStructural()Added
isScalar()Added
toValueDescription(bool)isSingle()is now deprecated (useisScalar())
Extended ValueIterator
Now supports bidirectional iteration:
operator--()operator--(int)
Changed RegEx API
Constructor now takes multiline state:
RegEx(String text, bool multiLine)Added
isMultiLine()Equality comparison now includes multiline state.
Minor Signature Change
Signerconstructor now takesSignatureSignerPtrby value.
Version 1.2.0 — 2025-08-18
This release extended the public API and resolved several issues.
Version 1.0.0 — 2025-07-31
First production release of the Erbsland Configuration Parser for C++.