; punct none multiple deletion  ### -> #   ==== -> =
R100,H101: ALL: PU1:
{
	W~<*>
	shuffle_s s { P<1> }
	delete
	{
		set { shuffle_u 1 }<+>
	}
	W~<*>
}
		
0xFFFFFFFF-0x00000001:R100;H101,W~<*>($1,P<1>)d/S{$1}<+>/W~<*>

R101,M102,H120: ALL: PU1:
{
	set { A<+>, D<+> }<+>
	E<+>
}

; save clause mark at the end.
0xFFFFFFFF-0x00000001:R101;M102;H120,S{A<+>,D<+>}<+>E<1>


; replace a all punct with a space
; avert lookahead for speed 

R102,H102,M120: ALL: PU1:
{
	W~<*>
	replace 
	{ 
		Px<+> 
		>> 
		' ' 
	}
	W~<*>
}
0xFFFFFFFF-0x00000001:R102;H102;M120,W~<*>r/Px<+>/' '/W~<*>



; German Rules 0x00000004
; rule number 400 - 499
R400: GR: ALL:
{
	Dx[0-23]
	replace 
	{
		shuffle_s 1 { set {',',':'}<1> }
		>>
		':'
	}
	Dx[0-59]
	optional
	{
		replace { $1 >> ':' }
		Dx[0-59]
	}
	W<0-3>
	delete
	{
		set {'U'`hr`,`h.`,`h`}<1>
	}
}
0x00000004-0xFFFFFFFF:R400,Dx[0-23]r/($1,S{',',':'}<1>)/':'/Dx[0-59]o/r/$1/':'/Dx[0-59]/W<0-3>d/S{'U'`hr`,`h.`,`h`}<1>/



; change "1 Aug" become "Aug 1"
0x00000001-0xFFFFFFFF:R308;H309,d/($1,D[1-31])/W<+>a/h/month_words,U<1>L<2>/a/$7/'.'/|FAIL//' '$1/
; check for abbr. for Month without period
0x00000001-0xFFFFFFFF:R309;H310,h/month_words,U<1>L<2>/a/$7/'.'/|FAIL/W<+>D<1-4>o/','/
;  /* Date format as Jan. 11-13, */
0x00000001-0xFFFFFFFF:R310,h/month_words,U<1>L<2>/c/$7/|FAIL/o/'.'/W<+>a/Dx[11-13]/'th'/o/','/


;  /* Date format as Jan. 1, */
R311: US: ALL:
{
	dictionary month_words
	{
		U<1>L<2>/
		>>
		copy {$7 }
		|
		FAIL
	}
	optianal {'.' }
	W<+>
	insert_a/
	{
		Dx[1-31]
		>>
		'th'|'st'|'nd'|'rd'|'th'|'th'|'th'|'th'|'th'|'th'
	}
	optional {','}
}
0x00000001-0xFFFFFFFF:R311,h/month_words,U<1>L<2>/c/$7/|FAIL/o/'.'/W<+>a/Dx[1-31]/'th'|'st'|'nd'|'rd'|'th'|'th'|'th'|'th'|'th'|'th'/o/','/



;  /* dates */	/* 5/10/96  5-10-96 */
R312: US: ALL:
{
	d
	{
		shuffle_s 1 
		{
			dictionary english_months
			{ 
				Dx[1-12] >> replace { $7 >> $9 }|FAIL 
			}
		}
		shuffle_s 2
		{
			S{'/','-'}<1>
		}
	}
	Dx[1-31]
	replace {$2 >> '-'$1'-' }
	D<2,4>
}
0x00000001-0xFFFFFFFF:R312,d/($1,h/english_months,Dx[1-12]/r/$7/$9/|FAIL/)($2,S{'/','-'}<1>)/Dx[1-31]r/$2/'-'$1'-'/D<2,4>


;  /* phone number  (508)555-1212 (508) 555-1212 (508)555 1212 (508) 555 1212 */
;  /* (508)5551212 (508) 5551212 */
R206: US,FR,GR,SP: ALL:
{
	insert_a
	{
		insert
		{
			D<3> >> ' '
		}
		>>
		' '
	}
	W<*>
	insert 
	{
		Dx[2-9]D<2>
		>>
		' '
	}
	replace 
	{
		S{'-',' ',''}<1>
		>>
		', '
	}
	insert_a
	{
		insert
		{
			Dx<4>
			>>
			' '
		}
		>>
		0x80'.'0x81
	}
}
0x0000000F-0xFFFFFFFF:R206,a/i/D<3>/' '//' '/W<*>i/Dx[2-9]D<2>/' '/r/S{'-',' ',''}<1>/', '/a/i/Dx<4>/' '//0x80'.'0x81/


;  /* phone number 15085551212 and 5085551212 */
R207: US: ALL:
{
	optional
	{
		insert_a{'1' >> ', '}
	}
	insert_a
	{
		insert
		{
			Dx[2-9]D<2> 
			>> 
			' '
		} 
		>> 
		', '
	}
	insert_a
	{
		insert
		{
			Dx[2-9]D<2> 
			>> 
			' '
		} 
		>>
		', '
	}
	insert_a
	{
		insert
		{
			Dx<4> >> ' '
		} 
		>> 
		0x80'.'0x81
	}
}
0x00000001-0xFFFFFFFF:R207,o/a/'1'/', '//a/i/Dx[2-9]D<2>/' '//', '/a/i/Dx[2-9]D<2>/' '//', '/a/i/Dx<4>/' '//0x80'.'0x81/


;  /* state and zip code */
;  /*0x00000001-0xFFFFFFFF:R5,U<2>W<1-4>i/D<5>/' '/o/r/'-'/' dash '/i/D<4>/' '//, */
R327: US: ALL:
{
	insert_a
	{
		dictionary states
		{
			U<2> 
			>> 
			replace 
			{
				$7 
				>> 
				$9 
			} 
			| 
			FAIL
		}
		Wx<1-4>
		insert
		{
			Dx<5> >> ' '
		}
		optional
		{
			replace
			{
				'-' >> ' dash '
			}
			insert
			{
				Dx<4> >> ' '
			}
		}
		>>
		' '0x80','0x81
	}
}
0x00000001-0xFFFFFFFF:R327,a/h/states,U<2>/r/$7/$9/|FAIL/Wx<1-4>i/Dx<5>/' '/o/r/'-'/' dash '/i/Dx<4>/' '///' '0x80','0x81/


e-mail rule
R603,H650: US: EM10,EM20:
{
	insert_a
	{
		replace
		{
			'Subject:'W<1-3>'Re: '
			>>
			'Subjectt: regarding, '
		}
		C<+>0x0DC<+>
		>>
		0x80'.'0x81
	}
}
0x00000001-0x00000030:R603;H650,a/r/'Subject:'W<1-3>'Re: '/'Subjectt: regarding, '/C<+>0x0DC<+>/0x80'.'0x81/