1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
#ifndef __TIME_CHH__
#define __TIME_CHH__
#include list.chh
%<_abbrMonthNames=%list(dummy,Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)>\
%<_fullMonthNames=%list(dummy,January,February,March,April,May,June,July,
August,September,October,November,December)>\
\
%define(timeFromString,pattern,str,
%locals(numreg,regs,
daynum,dayfrm,monthnum,monthfrm,yearnum,yearfrm,
hournum,hourfrm,minutenum,minutefrm,secondnum,secondfrm,
%<numreg=1>\
%<regs=%list()>\
%<dayfrm=->%<monthfrm=->%<yearfrm=->\
%<pattern=%sgsub([.?+*\[\]],%pattern,%lambda(r,\%r[0]))>\
%<pattern=^%sgsub(%'$([$dmbBYHMS])',%pattern,%lambda(r,
%case(%r[1],
%list($),$,
%list(d),%'([0-9]+)'%<daynum=%numreg>%<dayfrm=d>%<numreg=%[numreg+1]>,
%list(m),%'([0-9]+)'%<monthnum=%numreg>%<monthfrm=m>%<numreg=%[numreg+1]>,
%list(b),%'([A-Za-z]+)'%<monthnum=%numreg>%<monthfrm=b>%<numreg=%[numreg+1]>,
%list(B),%'([A-Za-z]+)'%<monthnum=%numreg>%<monthfrm=B>%<numreg=%[numreg+1]>,
%list(Y),%'([0-9]+)'%<yearnum=%numreg>%<yearfrm=Y>%<numreg=%[numreg+1]>,
%list(H),%'([0-9]+)'%<hournum=%numreg>%<hourfrm=H>%<numreg=%[numreg+1]>,
%list(M),%'([0-9]+)'%<minutenum=%numreg>%<minutefrm=M>%<numreg=%[numreg+1]>,
%list(S),%'([0-9]+)'%<secondnum=%numreg>%<secondfrm=S>%<numreg=%[numreg+1]>,
else,%error(Illegal specifier '%r[1]' in macro 'timeFromString')
)))$>\
%if(%[%smatch(%pattern,%str,%®s) != -1],
%locals(result,day,month,year,
%<result=%hash()>\
%if(%equal(%yearfrm,Y),
%<result{year}=%regs[%yearnum]>
)\
%if(%equal(%monthfrm,m),
%<result{month}=%regs[%monthnum]>
,%if(%equal(%monthfrm,b),
%<result{month}=%listSearch(%&_abbrMonthNames,
%lambda(m,%equal(%m,%regs[%monthnum])))>
,%if(%equal(%monthfrm,B),
%<result{month}=%listSearch(%&_fullMonthNames,
%lambda(m,%equal(%m,%regs[%monthnum])))>
)))\
%if(%equal(%dayfrm,d),
%<result{day}=%regs[%daynum]>
)\
%if(%equal(%hourfrm,H),
%<result{hour}=%regs[%hournum]>
)\
%if(%equal(%minutefrm,M),
%<result{minute}=%regs[%minutenum]>
)\
%if(%equal(%secondfrm,S),
%<result{second}=%regs[%secondnum]>
)\
%result
)
,
%error(Wrong time format in macro 'timeFromString')
)
))\
\
%define(timeToString,pattern,time,
%sgsub(%'$(.)',%pattern,
%lambda(r,
%cond(%equal(%r[1],$),$,
%equal(%r[1],d),%time{day},
%equal(%r[1],m),%time{month},
%equal(%r[1],b),%_abbrMonthNames[%time{month}],
%equal(%r[1],B),%_fullMonthNames[%time{month}],
%equal(%r[1],Y),%time{year},
%equal(%r[1],H),%time{hour},
%equal(%r[1],M),%time{minute},
%equal(%r[1],S),%time{second},
else,%error(Illegal specifier '%r[1]' in macro 'timeToString')
)
))
)\
#endif
|