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 )