App-IniDiff-IniFile
view release on metacpan or search on metacpan
lib/App/IniDiff/IniFile.pm view on Meta::CPAN
=item * 'field name' is INI 'key'
=item * 'field value' is INI 'value'
=back
=cut
use vars qw(&new &write &findKey &keys &removekey &addKey);
# added eol to support old end of line \r\n
use vars qw($errorString $eol $commentchars);
{
package App::IniDiff::IniFile::Field;
use strict;
use Carp;
use vars qw(&new &name &canonName &value &deleted &annotation
&setFrom &write &canonicalize );
use vars qw($eol);
# end of line character - eol
$eol = "\n";
sub new
{
my $proto = shift;
confess "new App::IniDiff::IniFile::Field takes 4 arguments" if @_ != 4;
my ($name, $value, $del, $annotation) = @_;
my $field = {
'name' => $name,
'canonName' => canonicalize($name),
lib/App/IniDiff/IniFile.pm view on Meta::CPAN
}
my $name = $_[0];
$name =~ tr/A-Z/a-z/;
return $name;
}
sub write
{
my ($field, $fileHandle) = @_;
print $fileHandle "; ", $field->annotation, $eol
if defined $field->annotation;
print $fileHandle $field->name;
if ($field->deleted) {
print $fileHandle "-";
}
elsif (defined $field->value) {
print $fileHandle "=", $field->value;
}
print $fileHandle $eol;
}
} # End package App::IniDiff::IniFile::Field;
{
package App::IniDiff::IniFile::Key;
use strict;
use Carp;
use IO::File;
use vars qw(&new &name &canonName &orderId &deleted &annotation &fields
&canonicalize &findField &addField &appendField &removeField
&write
);
use vars qw($eol);
# end of line character - eol
$eol = "\n";
sub new
{
my $proto = shift;
confess "new App::IniDiff::IniFile::Key takes 3 arguments" if @_ != 3;
my ($name, $del, $annotation) = @_;
my $key = {
'name' => $name,
'canonName' => canonicalize($name),
lib/App/IniDiff/IniFile.pm view on Meta::CPAN
}
}
return $found;
}
sub write
{
my ($key, $fileHandle) = @_;
my ($del) = $key->deleted ? '-' : '';
print $fileHandle "; ", $key->annotation, $eol
if defined $key->annotation;
print $fileHandle "[", $key->name, "]", $del, $eol;
if (!$key->deleted) {
my $field;
foreach $field (@{$key->fields}) {
$field->write($fileHandle);
}
}
print $fileHandle $eol;
}
} # End package App::IniDiff::IniFile::Key;
# $IniFile package Globals
$errorString = undef;
# end of line character - eol
$eol = "\n";
$commentchars = ';#'; # Allow DOS and Unix style comment.
sub new
{
my $proto = shift;
my $ini = {
# Used to generate monotonically increasing key ids - used
# to reserve order of ini file.
lib/App/IniDiff/IniFile.pm view on Meta::CPAN
$isPatch = 0 if !defined $isPatch;
$addM = 0 if !defined $addM; # add ^M if pre-NT
$stripComments = 0 if ! defined $stripComments;
# strip out trailing inline comments having semicolon
# comment out stripComments if isPatch
# - this may be a problem
# - leave them in unless specifically asked
# $stripComments = 1 if $isPatch; # always strip out comments from patches
if ($addM == 1) {
$eol = "\r\n";
# set the children's eol members to this value as well ...
# not using set() methods - oh dear
$App::IniDiff::IniFile::Key::eol = "\r\n";
$App::IniDiff::IniFile::Field::eol = "\r\n";
}
while (<$fileHandle>) {
chomp;
#
# Strip comments - not in key names ([...]) and not in strings..
#
# if a [key] section
if (/^\s*(\[[^]]+])(.*)$/) {
( run in 2.055 seconds using v1.01-cache-2.11-cpan-8f98c5d2c55 )