Tagged.Scalar/Sequence/Mapping gain anchor and style fields (Tagged.ScalarStyle, Tagged.CollectionStyle), Tagged.Node gains an alias(anchor:node:) case carrying both the reference and its resolution, and parseTagged populates all of it from the parse events instead of discarding anchors and expanding aliases into copies. PureYAML.dump(_ node: Tagged.Node, options:) re-emits anchors, alias references, tags, and per-node styles over the document-wide policy. Plain scalars re-emit their source spelling (NO stays NO, an empty null stays empty); literal blocks cover keep chomping, single-line strip chomping, leading blank lines, and whitespace-led first lines via an explicit indentation indicator; folded scalars re-emit as > when the folding rules invert exactly and degrade to a literal block otherwise. The round-trip law parseTagged(dump(parseTagged(d))) == parseTagged(d) is corpus-tested over every real-world fixture, with one documented degradation: single-quoted content containing line breaks re-emits double-quoted, value unchanged. Closes #9
24 lines
683 B
Swift
24 lines
683 B
Swift
public extension PureYAML.Tagged {
|
|
/// The presentation style a collection had in the source document, or the
|
|
/// style a caller wants a collection to take on output. `nil` on a node
|
|
/// means "no per-node preference": the emitter's document-wide policy
|
|
/// decides.
|
|
enum CollectionStyle: String, Equatable, Sendable, CustomStringConvertible {
|
|
case block
|
|
case flow
|
|
|
|
public var description: String {
|
|
rawValue
|
|
}
|
|
}
|
|
}
|
|
|
|
extension PureYAML.Tagged.CollectionStyle {
|
|
init(_ style: PureYAML.Parsing.CollectionStyle) {
|
|
self = switch style {
|
|
case .block: .block
|
|
case .flow: .flow
|
|
}
|
|
}
|
|
}
|