stevedlawrence commented on a change in pull request #75: Daffodil 1738 zoned
decimal
URL: https://github.com/apache/incubator-daffodil/pull/75#discussion_r195394200
##########
File path:
daffodil-core/src/main/scala/org/apache/daffodil/grammar/primitives/PrimitivesZoned.scala
##########
@@ -17,13 +17,162 @@
package org.apache.daffodil.grammar.primitives
-import org.apache.daffodil.dsom.ElementBase
+import org.apache.daffodil.dsom._
+import org.apache.daffodil.dpath.NodeInfo.PrimType
+import org.apache.daffodil.grammar.Gram
+import org.apache.daffodil.grammar.Terminal
+import com.ibm.icu.text.DecimalFormat
+import org.apache.daffodil.processors.unparsers.Unparser
+import org.apache.daffodil.processors.unparsers.ConvertZonedNumberUnparser
+import org.apache.daffodil.processors.unparsers.ConvertZonedCombinatorUnparser
+import java.math.{ BigDecimal => JBigDecimal, BigInteger => JBigInt }
+import
org.apache.daffodil.processors.parsers.ConvertZonedByteParserUnparserHelper
+import org.apache.daffodil.processors.parsers.ConvertZonedCombinatorParser
+import
org.apache.daffodil.processors.parsers.ConvertZonedDecimalParserUnparserHelper
+import
org.apache.daffodil.processors.parsers.ConvertZonedIntParserUnparserHelper
+import
org.apache.daffodil.processors.parsers.ConvertZonedIntegerParserUnparserHelper
+import
org.apache.daffodil.processors.parsers.ConvertZonedLongParserUnparserHelper
+import
org.apache.daffodil.processors.parsers.ConvertZonedNonNegativeIntegerParserUnparserHelper
+import org.apache.daffodil.processors.parsers.ConvertZonedNumberParser
+import
org.apache.daffodil.processors.parsers.ConvertZonedNumberParserUnparserHelperBase
+import
org.apache.daffodil.processors.parsers.ConvertZonedShortParserUnparserHelper
+import
org.apache.daffodil.processors.parsers.ConvertZonedUnsignedByteParserUnparserHelper
+import
org.apache.daffodil.processors.parsers.ConvertZonedUnsignedLongParserUnparserHelper
+import
org.apache.daffodil.processors.parsers.ConvertZonedUnsignedShortParserUnparserHelper
+import org.apache.daffodil.processors.parsers.ZonedFormatFactoryBase
+import org.apache.daffodil.processors.parsers.ZonedFormatFactoryStatic
+import
org.apache.daffodil.processors.parsers.ConvertZonedUnsignedIntParserUnparserHelper
+import org.apache.daffodil.processors.parsers.Parser
+import org.apache.daffodil.schema.annotation.props.gen.TextNumberCheckPolicy
+import org.apache.daffodil.schema.annotation.props.gen.TextNumberRounding
+import org.apache.daffodil.util.Maybe._
+import org.apache.daffodil.util.MaybeDouble
-abstract class ZonedTextNumberPrim(e: ElementBase, guard: Boolean) extends
UnimplementedPrimitive(e, guard) {
- // lazy val parser: DaffodilParser = new
ZonedTextNumberParser(e.elementRuntimeData)
+case class ConvertZonedCombinator(e: ElementBase, value: Gram, converter: Gram)
+ extends Terminal(e, !(value.isEmpty || converter.isEmpty)) {
+
+ lazy val parser = new ConvertZonedCombinatorParser(e.termRuntimeData,
value.parser, converter.parser)
+
+ override lazy val unparser = new
ConvertZonedCombinatorUnparser(e.termRuntimeData, value.unparser,
converter.unparser)
+}
+
+abstract class ConvertZonedNumberPrim[S](e: ElementBase)
+ extends Terminal(e, true) {
+
+ def helper: ConvertZonedNumberParserUnparserHelperBase[S]
+
+ def numFormatFactory: ZonedFormatFactoryBase[S] = {
+ val h = helper
+
+ val pattern = {
+ val p = e.textNumberPattern
+
+ val noEscapedTicksRegex = """''""".r
+ val patternNoEscapedTicks = noEscapedTicksRegex.replaceAllIn(p, "")
+ val noQuotedRegex = """'[^']+'""".r
+ val patternNoQuoted = noQuotedRegex.replaceAllIn(patternNoEscapedTicks,
"")
Review comment:
What about other symbols like the grouping separator, or even just other
text. For example, is the pattern "00.0 oclock" allowed. I imagine that would
always fail to parse, but seems like maybe that should be an SDE? Also, should
the above checks also be an SDE rather than removing the bad stuff? Maybe
there's a regex pattern that is essentially a whitelist? Something like
"\+?#*[0-9]+\+?". So it must start or end with a literal plus, and have only
#'s or numbers in it? Not sure if that's right, but somethign like that?
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services