@@ -276,7 +276,7 @@ trait Rules extends DimRules {
276
276
name = " recent/last/next <duration>" ,
277
277
pattern = List (RecentPattern .regex, or(isNotLatentDuration, isFuzzyNotLatentDuration).predicate),
278
278
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, _)) :: _ =>
280
280
val s = if (StringUtils .isBlank(g1)) g2 else g1
281
281
// 月必须是x个月
282
282
s match {
@@ -291,7 +291,7 @@ trait Rules extends DimRules {
291
291
cycleN(notImmediate = false , Day , 30 )
292
292
}
293
293
// = 1 已经在 this <cycle> 中定义过了
294
- else if (s == " 下" && (g == Day || v == 1 )) None
294
+ else if (s == " 下" && (g == Day || v == 1 || half )) None
295
295
else {
296
296
val td1 = cycleN(notImmediate = false , g, v)
297
297
g match {
@@ -311,7 +311,7 @@ trait Rules extends DimRules {
311
311
cycleN(notImmediate = false , Day , 7 * v).map(t => tt(t.at(Hint .Recent )))
312
312
} else tt(cycleNth(g, 0 ))
313
313
case " 上" | " 前" | " 之前" | " 往前" | " 向前" | " 过去" | " 过去" =>
314
- if (s == " 上" && (g == Day || g == Year )) None
314
+ if (s == " 上" && (g == Day || g == Year || half )) None
315
315
else if (s == " 过去" && fuzzy) None
316
316
else if (v > 1 ) tt(cycleN(notImmediate = true , g, - v).at(Hint .Recent ))
317
317
else tt(cycleNth(g, - 1 ).at(Hint .Recent ))
@@ -327,7 +327,7 @@ trait Rules extends DimRules {
327
327
name = " n <cycle> next/last 1: <duration> 之后" ,
328
328
pattern = List (isNotLatentDuration.predicate, " ((之|以)?(后|前))|过后" .regex),
329
329
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 :: _)) :: _) =>
331
331
val offset = if (s.endsWith(" 后" )) v else - v
332
332
val roundGrain = if (options.timeOptions.inheritGrainOfDuration) grain else NoGrain
333
333
tt(finalRule(cycleNth(grain, offset, roundGrain)))
@@ -341,7 +341,7 @@ trait Rules extends DimRules {
341
341
name = " n <cycle> next/last: 过 <duration>" ,
342
342
pattern = List (" 过" .regex, isNotLatentDuration.predicate),
343
343
prod = optTokens {
344
- case (options : Options , _ :: Token (Duration , DurationData (v, grain, _, _, _)) :: _ ) =>
344
+ case (options : Options , _ :: Token (Duration , DurationData (v, grain, _, _, _, _ )) :: _ ) =>
345
345
val roundGrain = if (options.timeOptions.inheritGrainOfDuration) grain else NoGrain
346
346
tt(finalRule(cycleNth(grain, v, roundGrain)))
347
347
}
@@ -354,7 +354,7 @@ trait Rules extends DimRules {
354
354
name = " n <cycle> next/last 3:过 <duration> 之后" ,
355
355
pattern = List (" 过" .regex, isNotLatentDuration.predicate, " 之?(后|前)" .regex),
356
356
prod = optTokens {
357
- case (options : Options , _ :: Token (Duration , DurationData (v, grain, _, _, _)) :: _ ) =>
357
+ case (options : Options , _ :: Token (Duration , DurationData (v, grain, _, _, _, _ )) :: _ ) =>
358
358
val roundGrain = if (options.timeOptions.inheritGrainOfDuration) grain else NoGrain
359
359
tt(finalRule(cycleNth(grain, v, roundGrain)))
360
360
}
@@ -367,7 +367,7 @@ trait Rules extends DimRules {
367
367
name = " <duration> before/after <time>" ,
368
368
pattern = List (isNotLatentDuration.predicate, " 之?(前|后)的?" .regex, isNotLatent.predicate),
369
369
prod = tokens {
370
- case Token (Duration , DurationData (v, g, _, _, _)) :: Token (_, GroupMatch (_ :: s :: _)) ::
370
+ case Token (Duration , DurationData (v, g, _, _, _, _ )) :: Token (_, GroupMatch (_ :: s :: _)) ::
371
371
Token (Time , td : TimeData ) :: _ =>
372
372
if (g > td.timeGrain) {
373
373
val sign = if (s == " 前" ) - 1 else 1
@@ -407,7 +407,7 @@ trait Rules extends DimRules {
407
407
name = " <time> before/after 2" ,
408
408
pattern = List (and(isADayOfMonth, isNotLatent).predicate, " 的" .regex, isNotLatentDuration.predicate, " [之以]?([前后])" .regex),
409
409
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 :: _)) :: _ =>
411
411
val dv = if (d == " 前" ) - v else v
412
412
val dg = if (g <= Day ) g else Day
413
413
@@ -420,7 +420,7 @@ trait Rules extends DimRules {
420
420
name = " <time> before/after 3" ,
421
421
pattern = List (and(isADayOfMonth, isNotLatent).predicate, isNotLatentDuration.predicate, " [之以]?([前后])" .regex),
422
422
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 :: _)) :: _ =>
424
424
val dv = if (d == " 前" ) - v else v
425
425
val dg = if (g <= Day ) g else Day
426
426
@@ -433,7 +433,7 @@ trait Rules extends DimRules {
433
433
name = " <time> after duration" ,
434
434
pattern = List (isADayOfMonth.predicate, " (再?过|往后(数|推)|后面?的第?)" .regex, isNotLatentDuration.predicate),
435
435
prod = tokens {
436
- case Token (Time , td : TimeData ) :: _ :: Token (Duration , DurationData (v, g, _, _, _)) :: _ =>
436
+ case Token (Time , td : TimeData ) :: _ :: Token (Duration , DurationData (v, g, _, _, _, _ )) :: _ =>
437
437
val dv = v
438
438
val dg = if (g <= Day ) g else Day
439
439
@@ -446,7 +446,7 @@ trait Rules extends DimRules {
446
446
name = " <time> before duration" ,
447
447
pattern = List (isADayOfMonth.predicate, " (往前(数|推)|前面?的第?)" .regex, isNotLatentDuration.predicate),
448
448
prod = tokens {
449
- case Token (Time , td : TimeData ) :: _ :: Token (Duration , DurationData (v, g, _, _, _)) :: _ =>
449
+ case Token (Time , td : TimeData ) :: _ :: Token (Duration , DurationData (v, g, _, _, _, _ )) :: _ =>
450
450
val dv = - v
451
451
val dg = if (g <= Day ) g else Day
452
452
@@ -513,7 +513,7 @@ trait Rules extends DimRules {
513
513
name = " in a <duration>" ,
514
514
pattern = List (isNotLatentDuration.predicate, " [之以]?内" .regex),
515
515
prod = tokens {
516
- case Token (Duration , DurationData (value, grain, _, _, _)) :: _ =>
516
+ case Token (Duration , DurationData (value, grain, _, _, _, _ )) :: _ =>
517
517
val (g, v) = grain match {
518
518
case Month => (Day , value * 30 )
519
519
case Week => (Day , value * 7 )
@@ -598,7 +598,7 @@ trait Rules extends DimRules {
598
598
List (isHint(RecentNominal ).predicate, " (往|向|之)?(前|后)的?" .regex, isNotLatentDuration.predicate),
599
599
prod = optTokens {
600
600
case (options, Token (_, td1 : TimeData ) :: Token (_, GroupMatch (_ :: s :: _)) ::
601
- Token (_, DurationData (value, grain, latent, _, _)) :: _)
601
+ Token (_, DurationData (value, grain, latent, _, _, _ )) :: _)
602
602
if options.timeOptions.sequence && td1.timeGrain == grain =>
603
603
val sign = if (s == " 前" ) - 1 else 1
604
604
val td2 = cycleN(notImmediate = false , grain, sign * value)
0 commit comments