⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parse_date.re

📁 PHP v6.0 For Linux 运行环境:Win9X/ WinME/ WinNT/ Win2K/ WinXP
💻 RE
📖 第 1 页 / 共 3 页
字号:
		TIMELIB_PROCESS_YEAR(s->time->y);		TIMELIB_DEINIT;		return TIMELIB_ISO_DATE;	}	gnudateshort	{		DEBUG_OUTPUT("gnudateshort");		TIMELIB_INIT;		TIMELIB_HAVE_DATE();		s->time->y = timelib_get_nr((char **) &ptr, 4);		s->time->m = timelib_get_nr((char **) &ptr, 2);		s->time->d = timelib_get_nr((char **) &ptr, 2);		TIMELIB_PROCESS_YEAR(s->time->y);		TIMELIB_DEINIT;		return TIMELIB_ISO_DATE;	}	datefull	{		DEBUG_OUTPUT("datefull");		TIMELIB_INIT;		TIMELIB_HAVE_DATE();		s->time->d = timelib_get_nr((char **) &ptr, 2);		timelib_skip_day_suffix((char **) &ptr);		s->time->m = timelib_get_month((char **) &ptr);		s->time->y = timelib_get_nr((char **) &ptr, 4);		TIMELIB_PROCESS_YEAR(s->time->y);		TIMELIB_DEINIT;		return TIMELIB_DATE_FULL;	}	pointeddate	{		DEBUG_OUTPUT("pointed date");		TIMELIB_INIT;		TIMELIB_HAVE_DATE();		s->time->d = timelib_get_nr((char **) &ptr, 2);		s->time->m = timelib_get_nr((char **) &ptr, 2);		s->time->y = timelib_get_nr((char **) &ptr, 4);		TIMELIB_PROCESS_YEAR(s->time->y);		TIMELIB_DEINIT;		return TIMELIB_DATE_FULL_POINTED;	}	datenoday	{		DEBUG_OUTPUT("datenoday");		TIMELIB_INIT;		TIMELIB_HAVE_DATE();		s->time->m = timelib_get_month((char **) &ptr);		s->time->y = timelib_get_nr((char **) &ptr, 4);		s->time->d = 1;		TIMELIB_PROCESS_YEAR(s->time->y);		TIMELIB_DEINIT;		return TIMELIB_DATE_NO_DAY;	}	datenodayrev	{		DEBUG_OUTPUT("datenodayrev");		TIMELIB_INIT;		TIMELIB_HAVE_DATE();		s->time->y = timelib_get_nr((char **) &ptr, 4);		s->time->m = timelib_get_month((char **) &ptr);		s->time->d = 1;		TIMELIB_PROCESS_YEAR(s->time->y);		TIMELIB_DEINIT;		return TIMELIB_DATE_NO_DAY;	}	datetextual | datenoyear	{		DEBUG_OUTPUT("datetextual | datenoyear");		TIMELIB_INIT;		TIMELIB_HAVE_DATE();		s->time->m = timelib_get_month((char **) &ptr);		s->time->d = timelib_get_nr((char **) &ptr, 2);		s->time->y = timelib_get_nr((char **) &ptr, 4);		TIMELIB_PROCESS_YEAR(s->time->y);		TIMELIB_DEINIT;		return TIMELIB_DATE_TEXT;	}	datenoyearrev	{		DEBUG_OUTPUT("datenoyearrev");		TIMELIB_INIT;		TIMELIB_HAVE_DATE();		s->time->d = timelib_get_nr((char **) &ptr, 2);		timelib_skip_day_suffix((char **) &ptr);		s->time->m = timelib_get_month((char **) &ptr);		TIMELIB_DEINIT;		return TIMELIB_DATE_TEXT;	}	datenocolon	{		DEBUG_OUTPUT("datenocolon");		TIMELIB_INIT;		TIMELIB_HAVE_DATE();		s->time->y = timelib_get_nr((char **) &ptr, 4);		s->time->m = timelib_get_nr((char **) &ptr, 2);		s->time->d = timelib_get_nr((char **) &ptr, 2);		TIMELIB_DEINIT;		return TIMELIB_DATE_NOCOLON;	}	xmlrpc | xmlrpcnocolon | soap | wddx | exif	{		int tz_not_found;		DEBUG_OUTPUT("xmlrpc | xmlrpcnocolon | soap | wddx | exif");		TIMELIB_INIT;		TIMELIB_HAVE_TIME();		TIMELIB_HAVE_DATE();		s->time->y = timelib_get_nr((char **) &ptr, 4);		s->time->m = timelib_get_nr((char **) &ptr, 2);		s->time->d = timelib_get_nr((char **) &ptr, 2);		s->time->h = timelib_get_nr((char **) &ptr, 2);		s->time->i = timelib_get_nr((char **) &ptr, 2);		s->time->s = timelib_get_nr((char **) &ptr, 2);		if (*ptr == '.') {			s->time->f = timelib_get_frac_nr((char **) &ptr, 9);			if (*ptr) { /* timezone is optional */				s->time->z = timelib_get_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb);				if (tz_not_found) {					add_error(s, "The timezone could not be found in the database");				}			}		}		TIMELIB_DEINIT;		return TIMELIB_XMLRPC_SOAP;	}	pgydotd	{		DEBUG_OUTPUT("pgydotd");		TIMELIB_INIT;		TIMELIB_HAVE_DATE();		s->time->y = timelib_get_nr((char **) &ptr, 4);		s->time->d = timelib_get_nr((char **) &ptr, 3);		s->time->m = 1;		TIMELIB_PROCESS_YEAR(s->time->y);		TIMELIB_DEINIT;		return TIMELIB_PG_YEARDAY;	}	isoweekday	{		timelib_sll w, d;		DEBUG_OUTPUT("isoweekday");		TIMELIB_INIT;		TIMELIB_HAVE_DATE();		TIMELIB_HAVE_RELATIVE();				s->time->y = timelib_get_nr((char **) &ptr, 4);		w = timelib_get_nr((char **) &ptr, 2);		d = timelib_get_nr((char **) &ptr, 1);		s->time->m = 1;		s->time->d = 1;		s->time->relative.d = timelib_daynr_from_weeknr(s->time->y, w, d);		TIMELIB_DEINIT;		return TIMELIB_ISO_WEEK;	}	isoweek	{		timelib_sll w, d;		DEBUG_OUTPUT("isoweek");		TIMELIB_INIT;		TIMELIB_HAVE_DATE();		TIMELIB_HAVE_RELATIVE();				s->time->y = timelib_get_nr((char **) &ptr, 4);		w = timelib_get_nr((char **) &ptr, 2);		d = 1;		s->time->m = 1;		s->time->d = 1;		s->time->relative.d = timelib_daynr_from_weeknr(s->time->y, w, d);		TIMELIB_DEINIT;		return TIMELIB_ISO_WEEK;	}	pgtextshort	{		DEBUG_OUTPUT("pgtextshort");		TIMELIB_INIT;		TIMELIB_HAVE_DATE();		s->time->m = timelib_get_month((char **) &ptr);		s->time->d = timelib_get_nr((char **) &ptr, 2);		s->time->y = timelib_get_nr((char **) &ptr, 4);		TIMELIB_PROCESS_YEAR(s->time->y);		TIMELIB_DEINIT;		return TIMELIB_PG_TEXT;	}	pgtextreverse	{		DEBUG_OUTPUT("pgtextreverse");		TIMELIB_INIT;		TIMELIB_HAVE_DATE();		s->time->y = timelib_get_nr((char **) &ptr, 4);		s->time->m = timelib_get_month((char **) &ptr);		s->time->d = timelib_get_nr((char **) &ptr, 2);		TIMELIB_PROCESS_YEAR(s->time->y);		TIMELIB_DEINIT;		return TIMELIB_PG_TEXT;	}	clf	{		int tz_not_found;		DEBUG_OUTPUT("clf");		TIMELIB_INIT;		TIMELIB_HAVE_TIME();		TIMELIB_HAVE_DATE();		s->time->d = timelib_get_nr((char **) &ptr, 2);		s->time->m = timelib_get_month((char **) &ptr);		s->time->y = timelib_get_nr((char **) &ptr, 4);		s->time->h = timelib_get_nr((char **) &ptr, 2);		s->time->i = timelib_get_nr((char **) &ptr, 2);		s->time->s = timelib_get_nr((char **) &ptr, 2);		s->time->z = timelib_get_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb);		if (tz_not_found) {			add_error(s, "The timezone could not be found in the database");		}		TIMELIB_DEINIT;		return TIMELIB_CLF;	}	year4	{		DEBUG_OUTPUT("year4");		TIMELIB_INIT;		s->time->y = timelib_get_nr((char **) &ptr, 4);		TIMELIB_DEINIT;		return TIMELIB_CLF;	}	ago	{		DEBUG_OUTPUT("ago");		TIMELIB_INIT;		s->time->relative.y = 0 - s->time->relative.y;		s->time->relative.m = 0 - s->time->relative.m;		s->time->relative.d = 0 - s->time->relative.d;		s->time->relative.h = 0 - s->time->relative.h;		s->time->relative.i = 0 - s->time->relative.i;		s->time->relative.s = 0 - s->time->relative.s;		s->time->relative.weekday = 0 - s->time->relative.weekday;		if (s->time->have_special_relative && s->time->special.type == TIMELIB_SPECIAL_WEEKDAY) {			s->time->special.amount = 0 - s->time->special.amount;		}		TIMELIB_DEINIT;		return TIMELIB_AGO;	}	daytext	{		const timelib_relunit* relunit;		DEBUG_OUTPUT("daytext");		TIMELIB_INIT;		TIMELIB_HAVE_RELATIVE();		TIMELIB_HAVE_WEEKDAY_RELATIVE();		TIMELIB_UNHAVE_TIME();		relunit = timelib_lookup_relunit((char**) &ptr);		s->time->relative.weekday = relunit->multiplier;		s->time->relative.weekday_behavior = 1;				TIMELIB_DEINIT;		return TIMELIB_WEEKDAY;	}	relativetext	{		timelib_sll i;		int         behavior = 0;		DEBUG_OUTPUT("relativetext");		TIMELIB_INIT;		TIMELIB_HAVE_RELATIVE();		while(*ptr) {			i = timelib_get_relative_text((char **) &ptr, &behavior);			timelib_eat_spaces((char **) &ptr);			timelib_set_relative((char **) &ptr, i, behavior, s);		}		TIMELIB_DEINIT;		return TIMELIB_RELATIVE;	}	monthfull | monthabbr	{		DEBUG_OUTPUT("monthtext");		TIMELIB_INIT;		TIMELIB_HAVE_DATE();		s->time->m = timelib_lookup_month((char **) &ptr);		TIMELIB_DEINIT;		return TIMELIB_DATE_TEXT;	}	tzcorrection | tz	{		int tz_not_found;		DEBUG_OUTPUT("tzcorrection | tz");		TIMELIB_INIT;		TIMELIB_HAVE_TZ();		s->time->z = timelib_get_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb);		if (tz_not_found) {			add_error(s, "The timezone could not be found in the database");		}		TIMELIB_DEINIT;		return TIMELIB_TIMEZONE;	}	dateshortwithtimeshort12 | dateshortwithtimelong12	{		DEBUG_OUTPUT("dateshortwithtimeshort12 | dateshortwithtimelong12");		TIMELIB_INIT;		TIMELIB_HAVE_DATE();		s->time->m = timelib_get_month((char **) &ptr);		s->time->d = timelib_get_nr((char **) &ptr, 2);		TIMELIB_HAVE_TIME();		s->time->h = timelib_get_nr((char **) &ptr, 2);		s->time->i = timelib_get_nr((char **) &ptr, 2);		if (*ptr == ':' || *ptr == '.') {			s->time->s = timelib_get_nr((char **) &ptr, 2);			if (*ptr == '.') {				s->time->f = timelib_get_frac_nr((char **) &ptr, 8);			}		}		s->time->h += timelib_meridian((char **) &ptr, s->time->h);		TIMELIB_DEINIT;		return TIMELIB_SHORTDATE_WITH_TIME;	}	dateshortwithtimeshort | dateshortwithtimelong | dateshortwithtimelongtz	{		int tz_not_found;		DEBUG_OUTPUT("dateshortwithtimeshort | dateshortwithtimelong | dateshortwithtimelongtz");		TIMELIB_INIT;		TIMELIB_HAVE_DATE();		s->time->m = timelib_get_month((char **) &ptr);		s->time->d = timelib_get_nr((char **) &ptr, 2);		TIMELIB_HAVE_TIME();		s->time->h = timelib_get_nr((char **) &ptr, 2);		s->time->i = timelib_get_nr((char **) &ptr, 2);		if (*ptr == ':') {			s->time->s = timelib_get_nr((char **) &ptr, 2);			if (*ptr == '.') {				s->time->f = timelib_get_frac_nr((char **) &ptr, 8);			}		}		if (*ptr != '\0') {			s->time->z = timelib_get_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb);			if (tz_not_found) {				add_error(s, "The timezone could not be found in the database");			}		}		TIMELIB_DEINIT;		return TIMELIB_SHORTDATE_WITH_TIME;	}	relative	{		timelib_ull i;		DEBUG_OUTPUT("relative");		TIMELIB_INIT;		TIMELIB_HAVE_RELATIVE();		while(*ptr) {			i = timelib_get_unsigned_nr((char **) &ptr, 24);			timelib_eat_spaces((char **) &ptr);			timelib_set_relative((char **) &ptr, i, 0, s);		}		TIMELIB_DEINIT;		return TIMELIB_RELATIVE;	}	[ .,\t]	{		goto std;	}	"\000"|"\n"	{		s->pos = cursor; s->line++;		goto std;	}	any	{		add_error(s, "Unexpected character");		goto std;	}*/}/*!max:re2c */timelib_time* timelib_strtotime(char *s, int len, struct timelib_error_container **errors, const timelib_tzdb *tzdb){	Scanner in;	int t;	char *e = s + len - 1;	memset(&in, 0, sizeof(in));	in.errors = malloc(sizeof(struct timelib_error_container));	in.errors->warning_count = 0;	in.errors->warning_messages = NULL;	in.errors->error_count = 0;	in.errors->error_messages = NULL;	while (isspace(*s) && s < e) {		s++;	}	while (isspace(*e) && e > s) {		e--;	}	if (e - s < 1) {		in.time = timelib_time_ctor();		add_error(&in, "Empty string");		if (errors) {			*errors = in.errors;		} else {			timelib_error_container_dtor(in.errors);		}		in.time->y = in.time->d = in.time->m = in.time->h = in.time->i = in.time->s = in.time->f = in.time->z = in.time->dst = -1;		in.time->is_localtime = in.time->zone_type = 0;		return in.time;	}	e++;	in.str = malloc((e - s) + YYMAXFILL);	memset(in.str, 0, (e - s) + YYMAXFILL);	memcpy(in.str, s, (e - s));	in.lim = in.str + (e - s) + YYMAXFILL;	in.cur = in.str;	in.time = timelib_time_ctor();	in.time->y = -1;	in.time->d = -1;	in.time->m = -1;	in.time->h = -1;	in.time->i = -1;	in.time->s = -1;	in.time->f = -1;	in.time->z = -1;	in.time->dst = -1;	in.tzdb = tzdb;	in.time->is_localtime = 0;	in.time->zone_type = 0;	do {		t = scan(&in);#ifdef DEBUG_PARSER		printf("%d\n", t);#endif	} while(t != EOI);	free(in.str);	if (errors) {		*errors = in.errors;	} else {		timelib_error_container_dtor(in.errors);	}	return in.time;}void timelib_fill_holes(timelib_time *parsed, timelib_time *now, int options){	if (!(options && TIMELIB_OVERRIDE_TIME) && parsed->have_date && !parsed->have_time) {		parsed->h = 0;		parsed->i = 0;		parsed->s = 0;		parsed->f = 0;	}	if (parsed->y == -1) parsed->y = now->y != -1 ? now->y : 0;	if (parsed->d == -1) parsed->d = now->d != -1 ? now->d : 0;	if (parsed->m == -1) parsed->m = now->m != -1 ? now->m : 0;	if (parsed->h == -1) parsed->h = now->h != -1 ? now->h : 0;	if (parsed->i == -1) parsed->i = now->i != -1 ? now->i : 0;	if (parsed->s == -1) parsed->s = now->s != -1 ? now->s : 0;	if (parsed->f == -1) parsed->f = now->f != -1 ? now->f : 0;	if (parsed->z == -1) parsed->z = now->z != -1 ? now->z : 0;	if (parsed->dst == -1) parsed->dst = now->dst != -1 ? now->dst : 0;	if (!parsed->tz_abbr) {		parsed->tz_abbr = now->tz_abbr ? strdup(now->tz_abbr) : NULL;	}	if (!parsed->tz_info) {		parsed->tz_info = now->tz_info ? timelib_tzinfo_clone(now->tz_info) : NULL;	}	if (parsed->zone_type == 0 && now->zone_type != 0) {		parsed->zone_type = now->zone_type;/*		parsed->tz_abbr = now->tz_abbr ? strdup(now->tz_abbr) : NULL;		parsed->tz_info = now->tz_info ? timelib_tzinfo_clone(now->tz_info) : NULL;*/		parsed->is_localtime = 1;	}/*	timelib_dump_date(parsed, 2);	timelib_dump_date(now, 2);*/}char *timelib_timezone_id_from_abbr(const char *abbr, long gmtoffset, int isdst){	const timelib_tz_lookup_table *tp;	tp = zone_search(abbr, gmtoffset, isdst);	if (tp) {		return (tp->full_tz_name);	} else {		return NULL;	}}const timelib_tz_lookup_table *timelib_timezone_abbreviations_list(void){	return timelib_timezone_lookup;}#ifdef DEBUG_PARSER_STUBint main(void){	timelib_time time = timelib_strtotime("May 12");	printf ("%04d-%02d-%02d %02d:%02d:%02d.%-5d %+04d %1d",		time.y, time.m, time.d, time.h, time.i, time.s, time.f, time.z, time.dst);	if (time.have_relative) {		printf ("%3dY %3dM %3dD / %3dH %3dM %3dS", 			time.relative.y, time.relative.m, time.relative.d, time.relative.h, time.relative.i, time.relative.s);	}	if (time.have_weekday_relative) {		printf (" / %d", time.relative.weekday);	}	if (time.have_weeknr_day) {		printf(" / %dW%d", time.relative.weeknr_day.weeknr, time.relative.weeknr_day.dayofweek);	}	return 0;				}#endif/* * vim: syntax=c */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -