App-Chart
view release on metacpan or search on metacpan
lib/App/Chart.pm view on Meta::CPAN
$symbol_setups_done{$symbol} = 1;
### symbol_setups() NoSuffix\n: $symbol
require App::Chart::Suffix::NoSuffix;
App::Chart::Suffix::NoSuffix::symbol_setups ($symbol);
return;
}
if ($symbol_setups_done{$suffix}) { return; }
$symbol_setups_done{$suffix} = 1;
### symbol_setups() suffix: $suffix
if ($symbol =~ /[.=]..?$/) {
require App::Chart::Yahoo;
}
# '.AX' or '=X' becomes 'AX' or 'X'
$suffix =~ s/[.=]//;
# load App::Chart::Suffix::XX and also any App::Chart::Suffix::XX::Foo, the
# latter being meant as pluggable add-ons
require Module::Util;
require Module::Load;
require Module::Find;
my $top_module = "App::Chart::Suffix::$suffix";
if (Module::Util::find_installed($top_module)) {
### load top: $top_module
Module::Load::load ($top_module);
}
foreach my $sub_module (Module::Find::findsubmod($top_module)) {
### load sub_module: $sub_module
Module::Load::load ($sub_module);
}
}
#------------------------------------------------------------------------------
# =item C<< App::Chart::symbol_source_help ($symbol) >>
#
# Return the name of the node (or anchor) in the manual for help on the data
# source for C<$symbol>.
#
# =item App::Chart::setup_source_help ($pred, $node)
#
# =cut
my @source_help_list = ();
sub symbol_source_help {
my ($symbol) = @_;
symbol_setups ($symbol);
foreach my $elem (@source_help_list) {
if ($elem->[0]->match ($symbol)) {
return $elem->[1];
}
}
return undef;
}
sub setup_source_help {
my ($pred, $node) = @_;
require App::Chart::Sympred;
App::Chart::Sympred::validate ($pred);
# newer get higher priority
unshift @source_help_list, [ $pred, $node ];
}
#------------------------------------------------------------------------------
sub hms_to_seconds {
my ($hour, $minute, $seconds) = @_;
return $hour * 60*60 + $minute * 60 + ($seconds || 0);
}
#------------------------------------------------------------------------------
sub seconds_to_hms {
my ($seconds) = @_;
return (floor ($seconds/3600) % 60,
floor ($seconds/60) % 60,
$seconds % 60);
}
#------------------------------------------------------------------------------
sub ymd_to_iso {
my ($year, $month, $day) = @_;
return sprintf ('%04d-%02d-%02d', $year, $month, $day);
}
sub iso_to_ymd {
my ($iso) = @_;
return split /-/, $iso;
}
sub adate_to_ymd {
my ($adate) = @_;
return Date::Calc::Add_Delta_Days(1970,1,5, $adate);
}
my $adate_days_base = Date::Calc::Date_to_Days (1970, 1, 5);
sub ymd_to_adate {
my ($year, $month, $day) = @_;
return Date::Calc::Date_to_Days($year, $month, $day) - $adate_days_base;
}
sub adate_to_iso {
my ($tdate) = @_;
return App::Chart::ymd_to_iso (App::Chart::adate_to_ymd ($tdate));
}
sub tdate_to_ymd {
my ($tdate) = @_;
return adate_to_ymd (tdate_to_adate ($tdate));
}
sub tdate_to_iso {
my ($tdate) = @_;
return adate_to_iso (tdate_to_adate ($tdate));
}
sub tdate_to_adate {
my ($tdate) = @_;
return $tdate + floor ($tdate/5)*2;
}
sub adate_to_tdate_floor {
( run in 0.554 second using v1.01-cache-2.11-cpan-140bd7fdf52 )