in daffodil-core/src/main/scala/org/apache/daffodil/core/grammar/SequenceGrammarMixin.scala [121:197]
private def sequenceChild(child: Term, groupIndex: Int): SequenceChild = {
import columnConstants._
val (max, min, ock) = child match {
case e: EB =>
// don't require OCK unnecessarily
(e.maxOccurs, e.minOccurs, if (e.isScalar) null else e.occursCountKind)
case _ => (1, 1, null)
}
// don't require SSP unnecessarily
val ssp =
if (!hasSeparator)
SeparatorSuppressionPolicy.AnyEmpty
else
separatorSuppressionPolicy
val res = (child, sequenceKind, ssp, ock, min, max) match {
case (e: EB, Ordered__, ___________, __________, ONE, ONE) =>
new ScalarOrderedSequenceChild(this, e, groupIndex)
case (e: EB, _________, ___________, StopValue_, ___, __2) =>
e.subsetError("dfdl:occursCountKind 'stopValue' is not supported.")
case (e: EB, Ordered__, ___________, Parsed____, ___, __2) =>
new RepOrderedWithMinMaxSequenceChild(this, e, groupIndex)
case (e: EB, Ordered__, ___________, Fixed_____, ___, UNB) =>
e.SDE("occursCountKind='fixed' not allowed with unbounded maxOccurs")
case (e: EB, Ordered__, Never______, Implicit__, ___, UNB)
if !e.isLastDeclaredRepresentedInSequence =>
unboundedPositionalError(e)
case (e: EB, Ordered__, Trailing___, Implicit__, ___, UNB)
if !e.isLastDeclaredRepresentedInSequence =>
unboundedPositionalError(e)
case (e: EB, Ordered__, TrailingStr, Implicit__, ___, UNB)
if !e.isLastDeclaredRepresentedInSequence =>
unboundedPositionalError(e)
case (e: EB, Ordered__, ___________, Fixed_____, ___, `min`) =>
new RepOrderedExactlyNSequenceChild(this, e, groupIndex, min)
case (e: EB, Ordered__, ___________, Fixed_____, ___, max) => {
Assert.invariant(min != max);
e.SDE(
"occursCountKind='fixed' requires minOccurs and maxOccurs to be equal (%d != %d)",
min,
max
)
}
case (e: EB, Ordered__, ___________, Expression, ___, __2) =>
new RepOrderedExpressionOccursCountSequenceChild(this, e, groupIndex)
case (e: EB, Ordered__, Never______, Implicit__, ___, UNB) =>
e.SDE(
"separatorSuppressionPolicy='never' with occursCountKind='implicit' requires bounded maxOccurs."
)
case (e: EB, Ordered__, Never______, Implicit__, ___, max) =>
new RepOrderedWithMinMaxSequenceChild(this, e, groupIndex)
case (e: EB, Ordered__, Trailing___, Implicit__, ___, max) =>
new RepOrderedWithMinMaxSequenceChild(this, e, groupIndex)
case (e: EB, Ordered__, TrailingStr, Implicit__, ___, UNB) =>
new RepOrderedWithMinMaxSequenceChild(this, e, groupIndex)
case (e: EB, Ordered__, TrailingStr, Implicit__, ___, max) =>
new RepOrderedWithMinMaxSequenceChild(this, e, groupIndex)
case (e: EB, Ordered__, Always_____, Implicit__, ___, max) =>
new RepOrderedWithMinMaxSequenceChild(this, e, groupIndex)
case (e: EB, Unordered, ___________, __________, ONE, ONE) =>
new ScalarOrderedSequenceChild(this, e, groupIndex)
case (e: EB, Unordered, ___________, Parsed____, ___, __2) =>
new RepOrderedWithMinMaxSequenceChild(this, e, groupIndex)
case (e: EB, Unordered, ___________, __________, ___, __2) =>
e.SDE("When sequenceKind='unordered', occursCountKind must be 'parsed'")
case (m: MG, Unordered, ___________, __________, ___, __2) =>
child.SDE("All memebers of an unordered sequence must be Element or ElemenntRef")
case (m: MG, _________, ___________, __________, ___, __2) =>
new ScalarOrderedSequenceChild(this, m, groupIndex)
case (_____, _________, policy /**/, ock /**/, ___, __2) =>
child.SDE(
"separatorSuppressionPolicy='" + policy + "' not allowed with occursCountKind='" + ock + "'."
)
}
res
}