@@ -116,14 +116,18 @@ trait Rules extends DimRules {
116
116
117
117
val ruleDurationDotNumeral = Rule (
118
118
name = " number.number grain" ,
119
- pattern = List (" ( \\ d+) \\ .( \\ d+) " .regex, isDimension(TimeGrain ).predicate),
119
+ pattern = List (isInteger.predicate, " [点 \\ .] " .regex, or(isDimension( DigitSequence ), isIntegerBetween( 0 , 9 )).predicate , isDimension(TimeGrain ).predicate),
120
120
prod = tokens {
121
- case Token (_, GroupMatch (_ :: integer :: decimal :: _)) :: Token (_, GrainData (g, false , _)) :: _ =>
121
+ case (t1@ Token (_, nd : NumeralData )) :: _ :: Token (_, decimal) :: Token (_, GrainData (g, false , _)) :: _ =>
122
+ val (dOpt, length) = decimal match {
123
+ case ds : DigitSequenceData => (parseInt(ds.seq).toOption, ds.seq.length)
124
+ case nd : NumeralData => (getIntValue(nd.value).map(_.toInt), 1 )
125
+ }
122
126
(for {
123
- i <- parseInt(integer).toOption
124
- d <- parseInt(decimal).toOption
127
+ i <- getIntValue(t1).map(_.toInt)
128
+ d <- dOpt
125
129
} yield {
126
- val mden = math.pow(10 , decimal. length).toInt
130
+ val mden = math.pow(10 , length).toInt
127
131
val token : Option [Token ] = g match {
128
132
case Grain .NoGrain => None
129
133
case Grain .Second => None
0 commit comments