parsing: don't ignore trailing junk in a smart date, eg in web add form
This commit is contained in:
		
							parent
							
								
									8daa9a33cd
								
							
						
					
					
						commit
						4973b82fb4
					
				| @ -84,7 +84,7 @@ parsePeriodExpr refdate expr = (interval,span) | |||||||
| spanFromSmartDateString :: Day -> String -> DateSpan | spanFromSmartDateString :: Day -> String -> DateSpan | ||||||
| spanFromSmartDateString refdate s = spanFromSmartDate refdate sdate | spanFromSmartDateString refdate s = spanFromSmartDate refdate sdate | ||||||
|     where |     where | ||||||
|       sdate = fromparse $ parsewith smartdate s |       sdate = fromparse $ parsewith smartdateonly s | ||||||
| 
 | 
 | ||||||
| spanFromSmartDate :: Day -> SmartDate -> DateSpan | spanFromSmartDate :: Day -> SmartDate -> DateSpan | ||||||
| spanFromSmartDate refdate sdate = DateSpan (Just b) (Just e) | spanFromSmartDate refdate sdate = DateSpan (Just b) (Just e) | ||||||
| @ -127,7 +127,7 @@ fixSmartDateStr t s = either parseerror id $ fixSmartDateStrEither t s | |||||||
| 
 | 
 | ||||||
| -- | A safe version of fixSmartDateStr. | -- | A safe version of fixSmartDateStr. | ||||||
| fixSmartDateStrEither :: Day -> String -> Either ParseError String | fixSmartDateStrEither :: Day -> String -> Either ParseError String | ||||||
| fixSmartDateStrEither t s = case parsewith smartdate (lowercase s) of | fixSmartDateStrEither t s = case parsewith smartdateonly (lowercase s) of | ||||||
|                               Right sd -> Right $ showDay $ fixSmartDate t sd |                               Right sd -> Right $ showDay $ fixSmartDate t sd | ||||||
|                               Left e -> Left e |                               Left e -> Left e | ||||||
| 
 | 
 | ||||||
| @ -252,6 +252,14 @@ smartdate = do | |||||||
|   (y,m,d) <- choice $ map try dateparsers |   (y,m,d) <- choice $ map try dateparsers | ||||||
|   return (y,m,d) |   return (y,m,d) | ||||||
| 
 | 
 | ||||||
|  | -- | Like smartdate, but there must be nothing other than whitespace after the date. | ||||||
|  | smartdateonly :: GenParser Char st SmartDate | ||||||
|  | smartdateonly = do | ||||||
|  |   d <- smartdate | ||||||
|  |   many spacenonewline | ||||||
|  |   eof | ||||||
|  |   return d | ||||||
|  | 
 | ||||||
| datesepchar = oneOf "/-." | datesepchar = oneOf "/-." | ||||||
| 
 | 
 | ||||||
| yyyymmdd :: GenParser Char st SmartDate | yyyymmdd :: GenParser Char st SmartDate | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user