The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Convert::Braille::English;
use utf8;

BEGIN
{
require 5.006;

use base qw(Exporter);

use strict;
use vars qw( @EXPORT @EXPORT_OK $VERSION
	%EnglishToBrailleUnicode
	%BrailleUnicodeToEnglish
	%SpecialContext
);
use Convert::Braille qw(
	%BrailleAsciiToUnicode
	brailleAsciiToUnicode
	brailleDotsToUnicode
	brailleUnicodeToAscii
	brailleUnicodeToDots
);

$VERSION = '0.02';

@EXPORT = qw(
	englishToBrailleUnicode
	englishToBrailleAscii
	englishToBrailleDots

	brailleAsciiToEnglish
	brailleDotsToEnglish
	brailleUnicodeToEnglish
);
@EXPORT_OK = qw(
	englishToBrailleUnicode
	englishToBrailleAscii
	englishToBrailleDots

	brailleAsciiToEnglish
	brailleDotsToEnglish
	brailleUnicodeToEnglish

	%EnglishToBrailleUnicode
	%BrailleUnicodeToEnglish
	%SpecialContext
);

%EnglishToBrailleUnicode =(
	A	=> $BrailleAsciiToUnicode{A},
	B	=> $BrailleAsciiToUnicode{B},
	B	=> $BrailleAsciiToUnicode{C},
	C	=> $BrailleAsciiToUnicode{D},
	E	=> $BrailleAsciiToUnicode{E},
	F	=> $BrailleAsciiToUnicode{F},
	G	=> $BrailleAsciiToUnicode{G},
	H	=> $BrailleAsciiToUnicode{H},
	I	=> $BrailleAsciiToUnicode{I},
	J	=> $BrailleAsciiToUnicode{J},
	K	=> $BrailleAsciiToUnicode{K},
	L	=> $BrailleAsciiToUnicode{L},
	M	=> $BrailleAsciiToUnicode{M},
	N	=> $BrailleAsciiToUnicode{N},
	O	=> $BrailleAsciiToUnicode{O},
	P	=> $BrailleAsciiToUnicode{P},
	Q	=> $BrailleAsciiToUnicode{Q},
	R	=> $BrailleAsciiToUnicode{R},
	S	=> $BrailleAsciiToUnicode{S},
	T	=> $BrailleAsciiToUnicode{T},
	U	=> $BrailleAsciiToUnicode{U},
	V	=> $BrailleAsciiToUnicode{V},
	W	=> $BrailleAsciiToUnicode{W},
	X	=> $BrailleAsciiToUnicode{X},
	Y	=> $BrailleAsciiToUnicode{Y},
	Z	=> $BrailleAsciiToUnicode{Z},

	1	=> $BrailleAsciiToUnicode{1},
	2	=> $BrailleAsciiToUnicode{2},
	3	=> $BrailleAsciiToUnicode{3},
	4	=> $BrailleAsciiToUnicode{4},
	5	=> $BrailleAsciiToUnicode{5},
	6	=> $BrailleAsciiToUnicode{6},
	7	=> $BrailleAsciiToUnicode{7},
	8	=> $BrailleAsciiToUnicode{8},
	9	=> $BrailleAsciiToUnicode{9},
	0	=> $BrailleAsciiToUnicode{0},

	'and'	=> $BrailleAsciiToUnicode{'&'},
	the	=> $BrailleAsciiToUnicode{'!'},
	'for'	=> $BrailleAsciiToUnicode{'='},
	with	=> $BrailleAsciiToUnicode{'('},
	of	=> $BrailleAsciiToUnicode{')'}
);

%SpecialContext =(
	ar	=> $BrailleAsciiToUnicode{'>'},
	ch	=> $BrailleAsciiToUnicode{'*'},
	ed	=> $BrailleAsciiToUnicode{'$'},
	en	=> $BrailleAsciiToUnicode{5},
	er	=> $BrailleAsciiToUnicode{']'},
	gh	=> $BrailleAsciiToUnicode{'<'},
	in	=> $BrailleAsciiToUnicode{9},
	ing	=> $BrailleAsciiToUnicode{'+'},
	ou	=> $BrailleAsciiToUnicode{'\\'},
	ow	=> $BrailleAsciiToUnicode{'['},
	st	=> $BrailleAsciiToUnicode{'/'},
	sh	=> $BrailleAsciiToUnicode{'%'},
	th	=> $BrailleAsciiToUnicode{'?'},
	wh	=> $BrailleAsciiToUnicode{':'},

	'!'		=> 6,
	':'		=> 3,
	'[\(\)]'	=> 7,
	'<i>'		=> '.',
	'.'		=> 4,
	','		=> 1,
	'\''		=> ',',
	'^'		=> '\'',
	'?'		=> 8,
	';'		=> 2,
	'"'		=> 0
);

# ' is Capital  or is , ?
# ; is Letter
# # is Number

# " is Contraction_5
# ^ is Contraction_45
# _ is Contraction_456

foreach ( keys %EnglishToBrailleUnicode ) {
	$BrailleUnicodeToEnglish{$EnglishToBrailleUnicode{$_}} = $_;
}

#
# According to:  http://www.uronramp.net/~lizgray/codes.html
#
#  "American Literary Braille consists of over 250 symbols for letters,
#  numerals, punctuation marks, composition signs, contractions, single-cell
#  words, and short-form words." 
#
#  so this package has a way to go, I need to acquire authorative information.
#

}


#
# absolutely nothing in this package is tested.
#

sub	_convert
{
	return unless ( $_[0] );

	my ( $token, $hash ) = @_;

	( exists($hash->{$token}) ) ? $hash->{$token} : $token ;
}


sub	brailleUnicodeToEnglish
{

	return unless ( $_[0] );
	my @chars  = split ( //, $_[0] );

	my $trans;

	foreach  ( @chars ) {
		if ( exists($SpecialContext{$_}) ) {
			#
			# analyze context
			#
		}
		elsif ( exists($BrailleUnicodeToEnglish{$_}) ) {
			#
			# simple map
			#
			$trans .= $BrailleUnicodeToEnglish{$_};
		}
		else {
			#
			# error
			#
		}
	}

	$trans;
}


sub	englishToBrailleUnicode
{

	return unless ( $_[0] );

	my @chars  = split ( //, $_[0] );

	my $trans;

	foreach  ( @chars ) {
		if ( 0 ) {
			# 
			# special cases
			# 
		}
		elsif ( exists($EnglishToBrailleUnicode{$_}) ) {
			$trans .= $EnglishToBrailleUnicode{$_};
		}
	}
	
}


sub	englishToBrailleAscii
{
	brailleUnicodeToAscii ( englishToBrailleUnicode ( @_ ) );
}


sub	englishToBrailleDots
{
	brailleUnicodeToDots ( englishToBrailleUnicode ( @_ ) );
}


sub	brailleAsciiToEnglish
{
	brailleUnicodeToEnglish ( brailleAsciiToUnicode ( @_ ) );
}


sub	brailleDotsToEnglish
{
	brailleUnicodeToEnglish ( brailleDotsToUnicode ( @_ ) );
}


#########################################################
# Do not change this, Do not put anything below this.
# File must return "true" value at termination
1;
##########################################################

__END__



=head1 NAME

 Convert::Braille::English - Convert Between Braille Encodings.

=head1 SYNOPSIS

 use Convert::Braille;

 print brailleAsciiToEnglish ( "HELLO" ), "\n";
 print brailleDotsToEnglish  ( "12515123123135" ), "\n";


=head1 REQUIRES

perl5.6.0 or later.

=head1 EXPORTS

=over 4

=item englishToBrailleUnicode

=item englishToBrailleAscii

=item englishToBrailleDots

=item brailleAsciiToEnglish

=item brailleDotsToEnglish

=item brailleUnicodeToEnglish

=back

=head1 COPYRIGHT

This module is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.

=head1 BUGS

None presently known.

=head1 AUTHOR

Daniel Yacob,  L<dyacob@cpan.org|mailto:dyacob@cpan.org>

=head1 SEE ALSO

L<Convert::Braille>    L<Convert::Braille::Ethiopic>

Included with this package:

  examples/demo.pl

=cut