Class-Phrasebook
view release on metacpan or search on metacpan
Phrasebook.pm view on Meta::CPAN
}
# in any other case we should read on
else {
$read_on = 1;
}
}
# deal with the phrase element
if ($element =~ /^phrase$/) {
$phrase_name = $attributes{name};
unless (defined($phrase_name)) {
$self->log()->write("The phrase element must".
" have the name attribute", 4);
return 0; # we must have name
}
}
if ($self->{AS_IS_BETWEEN_TAGS}) {
# we should clean the $phrase_value after the start of the tag
# so in the phrase we will have only the text that is between
# the phrase tags.
$phrase_value = "";
}
}, # of Start
End => sub {
my $expat = shift;
my $element = shift;
if ($element =~ /^dictionary$/i) {
$default_was_read = 1;
}
if ($element =~ /^phrase$/i) {
if ($read_on) {
$phrases->{$phrase_name} = $phrase_value;
$phrase_value = "";
}
}
}, # of End
Char => sub {
my $expat = shift;
my $string = shift;
# if $read_on flag is true and the string is not empty we set the
# value of the phrase.
if ($self->{AS_IS_BETWEEN_TAGS}) {
if ($read_on && length($string)) {
$phrase_value .= $string;
}
}
else { # this block is here for legacy reasons.
if ($read_on && $string =~ /[\S]/) {
# if we have already $phrase_value, we should add a
# new line to it, before we add the next line.
$phrase_value .= "\n" if ($phrase_value);
$phrase_value .= $string;
}
}
} # of Char
); # of the parser setHandlers class
# open the xml file as a locked file and parse it
my $fh = new IO::LockedFile("<".$self->{FILE_PATH});
unless ($fh) {
$self->log()->write("Could not open ".$self->{FILE_PATH}.
" to read.", 4);
return 0;
}
eval { $parser->parse($fh) }; # I use eval because the parse function dies
# on parsing error.
if ($@) {
$self->log()->write("Could not parse the ".$self->{FILE_PATH}.
" file: ".$@, 4);
return 0; # there was an error in parsing the XML.
}
$self->{PHRASES} = $phrases;
# keep the phrases
$Dictionaries_cache->{$self->{DICTIONARY_KEY}}{PHRASES} = $self->{PHRASES};
return 1; # success
} # of load
###################################################################
# $phrase = get($key, { var1 => $value1, var2 => value2 ... })
# where $key will be the key to certain phrase, and var1, var2
# and so on will be $var1 and $var2 in the definition of that
# phrase in the load method above.
###################################################################
sub get {
my $self = shift;
my $key = shift;
my $variables = shift;
# the DEBUG_PRINTS is controlled by an environment.
my $debug_prints = lc($ENV{PHRASEBOOK_DEBUG_PRINTS}) || "";
if ($debug_prints) {
if ($debug_prints eq "color") {
# check that all the variables defined in $variables
foreach my $key (keys(%$variables)) {
unless (defined($variables->{$key})) {
print "[";
print GREEN called_by();
print "]";
print BLUE "[";
print RED "$key is not defined";
print BLUE "]\n";
}
}
}
elsif ($debug_prints eq "html") {
# check that all the variables defined in $variables
foreach my $key (keys(%$variables)) {
unless (defined($variables->{$key})) {
print "<pre>[<font color=darkgreen>";
print called_by();
print "</font>]";
print "<font color=blue>[</font>";
print "<font color=red>$key is not defined</font>";
print "<font color=blue>]</font></pre>\n";
}
( run in 1.823 second using v1.01-cache-2.11-cpan-437f7b0c052 )