All notable changes to this project are documented here. Format follows Keep a Changelog; versioning follows Semantic Versioning.
Major redesign around an Expression enum and an evaluator protocol, plus key-value token support driven by The Archive v2 search architecture.
Expression.keyValue(key:value:)case forkey:valuetokens (tag:bar,title:"hello world").KeyValueExtractorin the tokenizer; escaping with\tag:barproduces a plain.containsnode.ExpressionEvaluatorprotocol and iterativeevaluate(_:with:)driver. DefaultBoolimplementations coverevaluateAnything/evaluateNot/evaluateAnd/evaluateOr.StringContainmentEvaluator— built-in full-text evaluator using lowercased C-strings +strstr.keyValueNodes(in:) -> [(key: String, value: String)]for pre-flight tree inspection.Sendableconformance onExpression.Expressionconforms toCustomStringConvertibleandEquatable.
Expressionis now an enum (.anything,.contains,.not,.and,.or,.keyValue) instead of a protocol withAnythingNode/ContainsNode/NotNode/AndNode/OrNodestructs.- Parser and evaluator are now iterative; recursion-limit configuration is gone.
- Swift tools version bumped to 6.2; minimum platform raised to macOS 13.
Expression.isSatisfied(by:)— callevaluate(_:with: StringContainmentEvaluator(...))instead.StringExpressionSatisfiable/CStringExpressionSatisfiableprotocols — implementExpressionEvaluatorfor custom matching backends.- Per-node node types (
AnythingNode,ContainsNode,NotNode,AndNode,OrNode) — use the enum cases. - macOS 10.13 support.
See git history.