Changelog
6.0.0 - 2025-02-08¶
- Updates to Kotlin 2.1.0
 
5.3.0 - 2024-05-13¶
- Enables wasmJs target
 
5.2.0 - 2024-01-25¶
- Updates to Kotlin 1.9.22
 
5.1.0 - 2023-08-17¶
- Updates to Kotlin 1.9.0
 
5.0.0 - 2023-04-06¶
- Updates to Kotlin 1.8.20
 - Drops support for deprecated KMPP targets:
 - JS Legacy
 - iosArm32
 
4.0.1 - 2023-02-21¶
- Performance improvements related to ParserException. Thanks for @kilink for the contribution!
 
4.0.0 - 2022-10-03¶
- Updates to Kotlin 1.7.20, and removes 
@ExperimentalStdlibApinow thatDeepRecursiveFunctionis now stable - Make it possible to process choice nodes with type safety. Thanks to @ephemient for the contribution!
 
Instead of requiring casting to access
MappedParser(ChoiceParser(FooParser(), BarParser())) { node ->
    when (node) {
        is Choice2Node.Option1 -> (node.node as FooNode).foo
        is Choice2Node.Option2 -> (node.node as BarNode).bar
    }
}
MappedParser(ChoiceParser(FooParser(), BarParser())) { node ->
    when (node) {
        is Choice2Node.Option1 -> node.node.foo
        is Choice2Node.Option2 -> node.node.bar
    }
}
3.1.0 - 2022-03-03¶
- Adds 
choiceIndexproperty to ChoiceNNode 
3.0.0 - 2022-03-02¶
- Updates to kotlin 1.6.10
 - Implements strongly-typed Choice parsers in the same manner as Sequence parsers (supports 2-9 choices)
 - don't check for empty with many parser. Let the sub-parser make that determination
 - Improve error messages
 - Wrap expressions in RootExpressionNode
 - Adds newline and EOF parsers
 
2.6.0 - 2021-07-15¶
- Adds a bunch of Sequence parsers for fixed lengths to preserve strong generic typing. 
SequenceParseris now a factory function instead of a constructor, returning the appropriate sequence parser for the number of "varargs". - Validate that the start and end tags match in 
TagParser - Enables hierarchical sourcesets
 
2.5.0 - 2021-05-12¶
- Adds 
NoopParserfor implementing self-closing tags with theTagParser - Adds 
AnyTextParser, which is likeAnyTextParser, but parses any non-whitespace characters 
2.4.0 - 2021-05-05¶
- Introduces new 
TagParserfor parsing recursive, inline, tag-based markup. This is suitable for parsing things like HTML spans or the inline formats of Markdown. - Features: 
- Fully custom opening and closing tags
 - Allows tags to contain the same start and end tags (such as for Markdown)
 
 PredictionParserallows more tailored prediction, which can be useful for things like simpler tag parsers that push open/close tag matching into the evaluation phase instead of enforcing it during parsing.- The implementation of 
ScanParserhas been tweaked such that it requires at least 1 character able to be parsed. This ' also means that it no longer always predicts true, but delegated prediction to its stopping condition: only if its stopping condition predicts false doesScanParserpredict true. - The implementation of 
LiteralTokenParserhas been tweaked such that it requires the entire expected token to match in order to predict true, instead of predicting only based on the next character. 
2.3.0 - 2021-04-26¶
- Adds support for operator aliases in 
ExpressionParser 
2.2.0 - 2021-04-26¶
- Adds 
SeparatedbyParserfor more easily parsing lists of items separated by an ignored value (like commas) 
2.1.0 - 2021-04-23¶
- Adds parsers for hexidecimal characters, standard escaped characters, escaped unicode sequences, generic identifiers
 - Adds parsers for literal values: int, double, boolean, char, string, null
 - improvements to expression parser: parentheses, AST simplification, implemented with DeepRecursiveFunction
 
2.0.0 - 2021-04-21¶
- Major cleanup of internal implementation and public APIs. The general structure/usage of the library remains mostly the same, but there are some notable differences in implementation and in the public API:
 - All Parsers classes have been moved into subpackages of 
com.copperleaf.kudzu.parserto better encapsulate their parsing function/behavior. - All Node classes have been moved to the  to 
com.copperleaf.kudzu.nodepackage, each in sub-packages that match the Parser package that produces them. - The Visitor API has been rewritten and moved to the 
com.copperleaf.kudzu.visitorpackage. - The Expression API has been rewritten to greatly reduce the boilerplate needed for implementation. In particular, it
    no longer evaluates expressions within the Visitor API, but manually implements expression evaluation on its own 
    with a custom 
ExpressionEvaluator. Operators also manually implement their own evaluation function, instead of having that separated into a separateEvaluableOperatoras before. These operators create the operator lookup table, and the whole expression and its operators parse/evaluate on a particular type parameter. - Parsers no longer have a 
nameproperty for themselves. To name a particular node, use theNamedParserto wrap and annotate it. - Parsing and Visitation are now implemented using Kotlin's 
DeepRecursiveFunctionutility, which helps avoid StackOverflow errors and gives us more readable stacktraces. - Several abstract classes have been converted into interfaces, and several other classes were split into and interface with default, concrete implementations managed internally to the library.
 
1.0.0 - 2021-04-10¶
- Release as MPP library to MavenCentral
 
0.1.0 - 2019-03-04¶
- Initial release