cope with continuation lines
authorHeiko Schlittermann (JUMPER) <hs@schlittermann.de>
Wed, 21 Jan 2015 21:20:20 +0100
changeset 63 df6ce1a4c43b
parent 62 aff0448cbef9
child 64 b61e5e1cc7ad
cope with continuation lines
lib/DNS/Vi.pm
t/10-dnsvi.t
t/samples/b
--- a/lib/DNS/Vi.pm	Wed Jan 21 20:41:45 2015 +0100
+++ b/lib/DNS/Vi.pm	Wed Jan 21 21:20:20 2015 +0100
@@ -29,10 +29,20 @@
     my @zone;
     my ($origin, $ttl, $last_label, $soa_seen);
 
+    $_ = '';
     foreach (@lines) {
         s{;.*$}{};  # strip trailing comments
+	state $line;
+	if (my $range = /(.*)\(\s*$/ .. /(.*)\)\s*/) {
+	    $line .= defined $1 ? $1 : $_;
+	    next unless $range =~ /E0$/;
+	}
+	if (defined $line) {
+	    $_ = $line;	# accumulated continuation line
+	    $line = undef;
+	}
 	s{\s*$}{};  # strip off trailing spaces
-        for ($_) {
+        given ($_) {
             when (m{^\s*$})                { next }
             when (m{^\s*\$ORIGIN\s+(\S+)}) { $origin = $1 }
             when (m{^\s*\$TTL\s+(\S+)})    { $ttl = $1 }
--- a/t/10-dnsvi.t	Wed Jan 21 20:41:45 2015 +0100
+++ b/t/10-dnsvi.t	Wed Jan 21 21:20:20 2015 +0100
@@ -44,7 +44,9 @@
     },
     b => {
         RRSETS => 11,
-        SOA    => 1,
+        SOA    => {
+	    'km21.de.' => ['pu.schlittermann.de. hostmaster.schlittermann.de. 1397766411 86400 7200 604800 300'],
+	},
         NS     => 2,
         A      => 1,
         TXT    => 3,
@@ -116,7 +118,7 @@
 	    }
 	    else {
             is grep({ $_->{rrset}{rrtype} eq $type } @zone),
-		$expect{$type}//0 => "number of $type rrsets\n";
+		$expect{$type}//0 => "number of $type rrsets";
 	    }
         }
 
--- a/t/samples/b	Wed Jan 21 20:41:45 2015 +0100
+++ b/t/samples/b	Wed Jan 21 21:20:20 2015 +0100
@@ -1,7 +1,13 @@
 $ORIGIN km21.de.
 $TTL 1d
 ; do NOT EDIT the SOA records SERIAL number!
-@               SOA    pu.schlittermann.de. hostmaster.schlittermann.de. 1397766411 86400 7200 604800 300
+@               SOA    pu.schlittermann.de. hostmaster.schlittermann.de.  (
+		1397766411  ; serial
+		86400	    ; refresh
+		7200	    ; retry
+		604800	    ; expire
+		300	    ; min ttl
+		)
                 NS     hh.schlittermann.de.
                 NS     pu.schlittermann.de.
                 TXT    "invoice: self"