@@ -276,7 +276,7 @@ trait Rules extends DimRules {
276276 name = " recent/last/next <duration>" ,
277277 pattern = List (RecentPattern .regex, or(isNotLatentDuration, isFuzzyNotLatentDuration).predicate),
278278 prod = tokens {
279- case Token (_, GroupMatch (_ :: g1 :: g2 :: _)) :: Token (Duration , DurationData (v, g, _, fuzzy, _)) :: _ =>
279+ case Token (_, GroupMatch (_ :: g1 :: g2 :: _)) :: Token (Duration , DurationData (v, g, _, fuzzy, half, _)) :: _ =>
280280 val s = if (StringUtils .isBlank(g1)) g2 else g1
281281 // 月必须是x个月
282282 s match {
@@ -291,7 +291,7 @@ trait Rules extends DimRules {
291291 cycleN(notImmediate = false , Day , 30 )
292292 }
293293 // = 1 已经在 this <cycle> 中定义过了
294- else if (s == " 下" && (g == Day || v == 1 )) None
294+ else if (s == " 下" && (g == Day || v == 1 || half )) None
295295 else {
296296 val td1 = cycleN(notImmediate = false , g, v)
297297 g match {
@@ -311,7 +311,7 @@ trait Rules extends DimRules {
311311 cycleN(notImmediate = false , Day , 7 * v).map(t => tt(t.at(Hint .Recent )))
312312 } else tt(cycleNth(g, 0 ))
313313 case " 上" | " 前" | " 之前" | " 往前" | " 向前" | " 过去" | " 过去" =>
314- if (s == " 上" && (g == Day || g == Year )) None
314+ if (s == " 上" && (g == Day || g == Year || half )) None
315315 else if (s == " 过去" && fuzzy) None
316316 else if (v > 1 ) tt(cycleN(notImmediate = true , g, - v).at(Hint .Recent ))
317317 else tt(cycleNth(g, - 1 ).at(Hint .Recent ))
@@ -327,7 +327,7 @@ trait Rules extends DimRules {
327327 name = " n <cycle> next/last 1: <duration> 之后" ,
328328 pattern = List (isNotLatentDuration.predicate, " ((之|以)?(后|前))|过后" .regex),
329329 prod = optTokens {
330- case (options : Options , Token (Duration , DurationData (v, grain, false , _, _)) :: Token (_, GroupMatch (s :: _)) :: _) =>
330+ case (options : Options , Token (Duration , DurationData (v, grain, false , _, _, _ )) :: Token (_, GroupMatch (s :: _)) :: _) =>
331331 val offset = if (s.endsWith(" 后" )) v else - v
332332 val roundGrain = if (options.timeOptions.inheritGrainOfDuration) grain else NoGrain
333333 tt(finalRule(cycleNth(grain, offset, roundGrain)))
@@ -341,7 +341,7 @@ trait Rules extends DimRules {
341341 name = " n <cycle> next/last: 过 <duration>" ,
342342 pattern = List (" 过" .regex, isNotLatentDuration.predicate),
343343 prod = optTokens {
344- case (options : Options , _ :: Token (Duration , DurationData (v, grain, _, _, _)) :: _ ) =>
344+ case (options : Options , _ :: Token (Duration , DurationData (v, grain, _, _, _, _ )) :: _ ) =>
345345 val roundGrain = if (options.timeOptions.inheritGrainOfDuration) grain else NoGrain
346346 tt(finalRule(cycleNth(grain, v, roundGrain)))
347347 }
@@ -354,7 +354,7 @@ trait Rules extends DimRules {
354354 name = " n <cycle> next/last 3:过 <duration> 之后" ,
355355 pattern = List (" 过" .regex, isNotLatentDuration.predicate, " 之?(后|前)" .regex),
356356 prod = optTokens {
357- case (options : Options , _ :: Token (Duration , DurationData (v, grain, _, _, _)) :: _ ) =>
357+ case (options : Options , _ :: Token (Duration , DurationData (v, grain, _, _, _, _ )) :: _ ) =>
358358 val roundGrain = if (options.timeOptions.inheritGrainOfDuration) grain else NoGrain
359359 tt(finalRule(cycleNth(grain, v, roundGrain)))
360360 }
@@ -367,7 +367,7 @@ trait Rules extends DimRules {
367367 name = " <duration> before/after <time>" ,
368368 pattern = List (isNotLatentDuration.predicate, " 之?(前|后)的?" .regex, isNotLatent.predicate),
369369 prod = tokens {
370- case Token (Duration , DurationData (v, g, _, _, _)) :: Token (_, GroupMatch (_ :: s :: _)) ::
370+ case Token (Duration , DurationData (v, g, _, _, _, _ )) :: Token (_, GroupMatch (_ :: s :: _)) ::
371371 Token (Time , td : TimeData ) :: _ =>
372372 if (g > td.timeGrain) {
373373 val sign = if (s == " 前" ) - 1 else 1
@@ -407,7 +407,7 @@ trait Rules extends DimRules {
407407 name = " <time> before/after 2" ,
408408 pattern = List (and(isADayOfMonth, isNotLatent).predicate, " 的" .regex, isNotLatentDuration.predicate, " [之以]?([前后])" .regex),
409409 prod = tokens {
410- case Token (Time , td : TimeData ) :: _ :: Token (Duration , DurationData (v, g, _, _, _)) :: Token (_, GroupMatch (_ :: d :: _)) :: _ =>
410+ case Token (Time , td : TimeData ) :: _ :: Token (Duration , DurationData (v, g, _, _, _, _ )) :: Token (_, GroupMatch (_ :: d :: _)) :: _ =>
411411 val dv = if (d == " 前" ) - v else v
412412 val dg = if (g <= Day ) g else Day
413413
@@ -420,7 +420,7 @@ trait Rules extends DimRules {
420420 name = " <time> before/after 3" ,
421421 pattern = List (and(isADayOfMonth, isNotLatent).predicate, isNotLatentDuration.predicate, " [之以]?([前后])" .regex),
422422 prod = tokens {
423- case Token (Time , td : TimeData ) :: Token (Duration , DurationData (v, g, _, _, _)) :: Token (_, GroupMatch (_ :: d :: _)) :: _ =>
423+ case Token (Time , td : TimeData ) :: Token (Duration , DurationData (v, g, _, _, _, _ )) :: Token (_, GroupMatch (_ :: d :: _)) :: _ =>
424424 val dv = if (d == " 前" ) - v else v
425425 val dg = if (g <= Day ) g else Day
426426
@@ -433,7 +433,7 @@ trait Rules extends DimRules {
433433 name = " <time> after duration" ,
434434 pattern = List (isADayOfMonth.predicate, " (再?过|往后(数|推)|后面?的第?)" .regex, isNotLatentDuration.predicate),
435435 prod = tokens {
436- case Token (Time , td : TimeData ) :: _ :: Token (Duration , DurationData (v, g, _, _, _)) :: _ =>
436+ case Token (Time , td : TimeData ) :: _ :: Token (Duration , DurationData (v, g, _, _, _, _ )) :: _ =>
437437 val dv = v
438438 val dg = if (g <= Day ) g else Day
439439
@@ -446,7 +446,7 @@ trait Rules extends DimRules {
446446 name = " <time> before duration" ,
447447 pattern = List (isADayOfMonth.predicate, " (往前(数|推)|前面?的第?)" .regex, isNotLatentDuration.predicate),
448448 prod = tokens {
449- case Token (Time , td : TimeData ) :: _ :: Token (Duration , DurationData (v, g, _, _, _)) :: _ =>
449+ case Token (Time , td : TimeData ) :: _ :: Token (Duration , DurationData (v, g, _, _, _, _ )) :: _ =>
450450 val dv = - v
451451 val dg = if (g <= Day ) g else Day
452452
@@ -513,7 +513,7 @@ trait Rules extends DimRules {
513513 name = " in a <duration>" ,
514514 pattern = List (isNotLatentDuration.predicate, " [之以]?内" .regex),
515515 prod = tokens {
516- case Token (Duration , DurationData (value, grain, _, _, _)) :: _ =>
516+ case Token (Duration , DurationData (value, grain, _, _, _, _ )) :: _ =>
517517 val (g, v) = grain match {
518518 case Month => (Day , value * 30 )
519519 case Week => (Day , value * 7 )
@@ -598,7 +598,7 @@ trait Rules extends DimRules {
598598 List (isHint(RecentNominal ).predicate, " (往|向|之)?(前|后)的?" .regex, isNotLatentDuration.predicate),
599599 prod = optTokens {
600600 case (options, Token (_, td1 : TimeData ) :: Token (_, GroupMatch (_ :: s :: _)) ::
601- Token (_, DurationData (value, grain, latent, _, _)) :: _)
601+ Token (_, DurationData (value, grain, latent, _, _, _ )) :: _)
602602 if options.timeOptions.sequence && td1.timeGrain == grain =>
603603 val sign = if (s == " 前" ) - 1 else 1
604604 val td2 = cycleN(notImmediate = false , grain, sign * value)
0 commit comments