Astro-Constants
view release on metacpan or search on metacpan
script/add_constant.pl view on Meta::CPAN
}
sub write_entries {
print <<"EDIT";
These are the values that will be written to $file
name\t $name
description\t $description
value \t $value
precision\t $precision
categories\t $category_list
I should ask if you really want to overwrite the file,
but I do it automatically for now. The original file
was written to $bak
EDIT
if (-f $schema_file) {
my $schema = XML::LibXML::Schema->new( location => $schema_file );
eval { $schema->validate( $xml ); };
warn "Couldn't validate PhysicalConstants.xml against $schema_file: \n\t$@"
if $@;
}
else {
warn "No XML Schema file to validate against at $schema_file";
}
rename $file, $bak;
open my $fh, '>', $file;
print {$fh} $xml->toString(2);
close $fh;
# write a patch file for the change
open my $pfh, '>', $file . '.patch';
print {$pfh} `diff -u $bak $file`;
close $pfh;
print "Patch file writen to $file.patch\n";
}
sub append_to_list {
my $node_name = 'PhysicalConstant';
my $new_constant = $xml->createElement( 'PhysicalConstant' );
$xml->getElementsByTagName('items')->[0]->addChild($new_constant);
if ($name) {
my $e = XML::LibXML::Element->new('name');
$e->appendText( $name );
$new_constant->addChild($e);
}
if ($description) {
my $e = XML::LibXML::Element->new('description');
$e->appendText( $description );
$new_constant->addChild($e);
}
if (defined $value) {
my $e = XML::LibXML::Element->new('value');
$e->appendText( $value );
$new_constant->addChild($e);
}
if (defined $precision) {
my $e = XML::LibXML::Element->new('uncertainty');
$e->setAttribute( 'type', 'relative' );
$e->appendText( $precision );
$new_constant->addChild($e);
}
if ($dimensions) {
my $e = XML::LibXML::Element->new('dimensions');
$e->appendText( $dimensions );
$new_constant->addChild($e);
}
else {
$new_constant->addChild( XML::LibXML::Element->new('dimensions') );
}
if (defined $maxValue) {
my $e = XML::LibXML::Element->new('maxValue');
$e->appendText( $maxValue );
$new_constant->addChild($e);
}
else {
$new_constant->addChild( XML::LibXML::Element->new('maxValue') );
}
if (defined $minValue) {
my $e = XML::LibXML::Element->new('minValue');
$e->appendText( $minValue );
$new_constant->addChild($e);
}
else {
$new_constant->addChild( XML::LibXML::Element->new('minValue') );
}
if ($source) {
my $e = XML::LibXML::Element->new('source');
$e->setAttribute( 'url', $source );
$new_constant->addChild($e);
}
if (scalar @categories) {
my $list = XML::LibXML::Element->new('categoryList');
$new_constant->addChild($list);
for my $cat (@categories) {
my $e = XML::LibXML::Element->new('category');
$e->appendText( $cat );
$list->addChild($e);
}
}
}
#### could use these subs to validate ####
#
sub get_name {
GET_NAME: {
print "Name for constant (SPEED_LIGHT)\t";
$name = <STDIN>;
chomp $name;
unless ($name) {
print "This field is mandatory\n";
redo GET_NAME;
}
$name =~ s/\s//g;
}
( run in 0.878 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )