Mercurial > bins
view debian/patches/12_optional_xml_elements @ 6:3021deef1599
Encoding related fixes
* chomp encoding string
* reformat else (seems someone hacked it in)
* debug print encoding
* do not use :utf8 binmode ("re-encode") on written file if the input is _already_ UTF-8
author | Peter Gervai <grin@grin.hu> |
---|---|
date | Thu, 16 Oct 2008 00:02:14 +0200 |
parents | c5749e43b1d7 |
children |
line wrap: on
line source
#! /bin/sh /usr/share/dpatch/dpatch-run ## 12_optional_xml_elements.dpatch by Martin Michlmayr <tbm@cyrius.com> ## ## DP: Make XML elements optional and check whether the XML files are ## DP: valid bins files [#308338] @DPATCH@ --- bins-1.1.29.orig/bins +++ bins-1.1.29/bins @@ -3899,10 +3899,14 @@ if (-e $descFile) { beVerboseN(" Reading desc file $descFile.", 3); $document = getXMLAsGrove($descFile); - %descHash = getDescXML($document, $configHash); - #$descHash{descFileName} = uri_escape($descFile, '^-A-Za-z0-9/_\.'); - $configHash = getConfigXML($document, '/image/bins', $configHash); - %exifHash = getExifXML($document, \@priorityList); + if (! $document->at_path("/image")) { + beVerboseN("Description file $descFile has no <image> element, ignoring.", 1); + } else { + %descHash = getDescXML($document, $configHash) if $document->at_path("/image/description"); + #$descHash{descFileName} = uri_escape($descFile, '^-A-Za-z0-9/_\.'); + $configHash = getConfigXML($document, '/image/bins', $configHash) if $document->at_path("/image/bins"); + %exifHash = getExifXML($document, \@priorityList) if $document->at_path("/image/exif"); + } } else { $descHash{descFileName} = ""; } @@ -4541,6 +4545,10 @@ beVerboseN("Reading album description file '$descFile'...", 3); my $document = getXMLAsGrove($descFile); + if (! $document->at_path("/album")) { + beVerboseN("Description file $descFile has no <album> element, ignoring.", 1); + return $configHash; + } # I have to do that, don't ask me why... #$XML::UM::ENCDIR="/usr/lib/perl5/XML/Parser/"; @@ -4548,37 +4556,40 @@ # Encoding => 'ISO-8859-9', # EncodeUnmapped => \&XML::UM::encode_unmapped_dec); - $configHash = getConfigXML($document, "/album/bins", $configHash); + $configHash = getConfigXML($document, "/album/bins", $configHash) if + $document->at_path("/album/bins"); - foreach my $element - (@{$document->at_path('/album/description')->{Contents}}) { - if (UNIVERSAL::isa($element, 'XML::Grove::Element') && $element->{Name} eq "field") { - $fieldName = $element->{Attributes}{'name'}; - $fieldValue = ""; - if (grep (/^$fieldName$/, @AlbumFieldNames)) { - beVerbose(" Reading field '$fieldName':", 3); - foreach my $characters (@{$element->{Contents}}) { - $fieldValue .= $characters->as_canon_xml(); - } - #if ($fieldName ne "shortdesc" && $fieldName ne "longdesc"){ - # $fieldValue = decode_entities($fieldValue); - #} - if ($fieldName eq "sampleimage"){ - $fieldValue = - trimWhiteSpace(decode_entities($fieldValue)); - beVerbose("'".$fieldValue."'\n", 3); - }else{ - $fieldValue = - trimWhiteSpace(decode_entities(xml2html($fieldValue))); - beVerbose("'".$fieldValue."'\n", 3); + if ($document->at_path("/album/description")) { + foreach my $element + (@{$document->at_path('/album/description')->{Contents}}) { + if (UNIVERSAL::isa($element, 'XML::Grove::Element') && $element->{Name} eq "field") { + $fieldName = $element->{Attributes}{'name'}; + $fieldValue = ""; + if (grep (/^$fieldName$/, @AlbumFieldNames)) { + beVerbose(" Reading field '$fieldName':", 3); + foreach my $characters (@{$element->{Contents}}) { + $fieldValue .= $characters->as_canon_xml(); + } + #if ($fieldName ne "shortdesc" && $fieldName ne "longdesc"){ + # $fieldValue = decode_entities($fieldValue); + #} + if ($fieldName eq "sampleimage"){ + $fieldValue = + trimWhiteSpace(decode_entities($fieldValue)); + beVerbose("'".$fieldValue."'\n", 3); + }else{ + $fieldValue = + trimWhiteSpace(decode_entities(xml2html($fieldValue))); + beVerbose("'".$fieldValue."'\n", 3); + } + # $fieldValue = $encode->(trimWhiteSpace($fieldValue)); + $hash->{$fieldName} = $fieldValue; + } else { + beVerboseN(" Ignoring unknown field '$fieldName'.", 3); } - # $fieldValue = $encode->(trimWhiteSpace($fieldValue)); - $hash->{$fieldName} = $fieldValue; - } else { - beVerboseN(" Ignoring unknown field '$fieldName'.", 3); } } - } + } return $configHash; }