# pm-jadate3.rc -- 'Tue Nov 25 19:32:57' date parser from variable INPUT
#
#   File id
#
#       Copyright (C) 1997-2010 Jari Aalto
#
#       This program is free software; you can redistribute it and/or
#       modify it under the terms of the GNU General Public License as
#       published by the Free Software Foundation; either version 2 of the
#       License, or (at your option) any later version
#
#       This program is distributed in the hope that it will be useful, but
#       WITHOUT ANY WARRANTY; without even the implied warranty of
#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
#       General Public License for more details at
#       <http://www.gnu.org/copyleft/gpl.html>.
#
#   Description
#
#	This includerc parses date from variable INPUT which has string
#
#	    "Week, Month dayNbr hh:mm:ss yyyy",
#
#	Example
#
#	    Tue Nov 25 19:32:57 1997
#
#	Returned values
#
#		YYYY	= 4 digits
#		YY	= 2 digits
#		MON	= 3 characters
#		MM	= 2 digits
#		DAY	= 3 characters
#		DD	= 2 digits
#		hh	= 2 digits
#		mm	= 2 digits
#		ss	= 2 sigits
#
#	Variable ERROR is set to "yes" if it couldn't recognize the INPUT.
#
#   Required settings
#
#	PMSRC must point to source directory of procmail code. This subroutine
#       will include pm-javar.rc from there.
#
#   Call arguments (variables to set before calling)
#
#           INPUT = string-to-parse
#
#   Usage example
#
#	The first *Received* header will tell when the message was received
#	by the mailserver. Parse the date and avoid calling expensive `date'
#	command.
#
#	    PMSRC	    = $HOME/pm
#	    RC_DATE_WMDT    = $PMSRC/pm-jadate4.rc #Week-Month-Day-Time parser
#
#           # Get time from X-From-Line: Which was added by my MDA
#	    #	X-From-Line: procmail-request@informatik.rwth-aachen.de \
#	    #	 Tue Nov 25 19:32:57 1997
#
#           :0 c
#           *$ ^X-From-Line:\/.*
#           {
#               INPUT = $MATCH
#
#               #  Turn off the logging while executing subroutine
#
#               VERBOSE=off   INCLUDERC = $RC_DATE_WMDT   VERBOSE=on
#
#               :0
#               * ERROR ?? yes
#               {
#		   # Use some other way to get the time or shout loudly
#		}
#           }
#
#   Change Log (none)

# .................................................... &initialising ...


id    = "pm-jadate3.rc"
dummy = "
========================================================================
$id: init:
"

:0
* !  WSPC ?? ( )
{
    INCLUDERC = $PMSRC/pm-javar.rc
}

# ..................................................... &output-vars ...
# output variables


#	 Kill following variables, listed one by one here:

YYYY MM MON DD DAY hh mm ss

ERROR = "yes"		# set defualt value

# ........................................................... &do-it ...
#	Check that input is something like: Thu, 13 Nov 1997

dummy = "$id: Parse date like [Tue Nov 25 19:32:57 19:00:00 1997]"
dummy = "$id: INPUT = $INPUT"		# show what we try to match

:0 D
* INPUT ?? $ $s*\/[SMTWF]$a$a[,$WSPC]+$a$a$a$s+$d+$s+$d$d:.*
{

    INPUT = $MATCH

    :0 D
    * INPUT ?? ^\/[A-Z]..
    {
        DAY = $MATCH
    }

    :0 D
    *$ INPUT ?? ^...[,$WSPC]\/[A-Z]..
    {
        MON = $MATCH
    }


    :0
    *$ INPUT ?? ^...[,$WSPC]...$s+\/$d$d
    {
        DD = $MATCH
    }
    :0 E                                        # else
    *$  INPUT ?? ^...[,$WSPC]...$s+\/$d
    {
        DD = "0$MATCH"
    }


    # ........................................................ &time ...
    #	Move to hh:mm:ss section

    :0
    *$ INPUT ?? ^...[,$WSPC]...+$s$d+$s+\/.*
    {
        INPUT = $MATCH
    }

    :0
    *$ INPUT ?? ^\/$d$d
    {
        hh = $MATCH
    }

    :0
    *$ INPUT ?? ^..:\/$d$d
    {
        mm = $MATCH
    }


    :0
    *$ INPUT ?? ^..:..:\/$d$d
    { ss = $MATCH  }


    # ........................................................ &year ...

    :0
    *$ INPUT ?? ^..:..:..$s+\/$d$d$d$d
    {
        YYYY = $MATCH
    }

    #	If this last recipe succeeds, then the whole string has been parsed.

    :0
    * YYYY ?? ^..\/..
    {
        YY = $MATCH   ERROR = "no"
    }


    #   Now reverse engineer to the numer, David Tamkin <dattier@miso.wwa.com>
    #   technically one should use $\monthnym but here it doesn't matter
    #   If user gave invalid input, will not match

    :0
    *$ mm2nbr ?? $MON\/..
    {
        MM = $MATCH
    }
}

dummy = "$id: end:"

# end of file pm-jadate.rc
