#!/usr/bin/perl use strict; use XML::Parser; sub wrap { @_[0] =~ s/\\'/\\\\'/g; @_[0] =~ s/\\q/\\\\q/g; @_[0] =~ s/\\a/\\\\a/g; @_[0] =~ s/\\n/\\\\n/g; } sub load_wpo { my ($tree, $tag, $page) = @_; foreach my $leaf (@$tree) { if (ref($leaf) eq 'ARRAY') { $page = load_wpo($leaf, $tag, $page); } elsif (ref($leaf) eq 'HASH') { # XML compatibility wrap $leaf->{description}; wrap $leaf->{helpText}; wrap $leaf->{wizardTitle}; wrap $leaf->{nextButtonText}; $page->{$leaf->{wizardTitle}} = ""; $page->{$leaf->{helpText}} = ""; $page->{$leaf->{description}} = ""; $page->{$leaf->{nextButtonText}} = ""; } elsif (ref($leaf) =~ /\w\D/) { $tag = $leaf; } } $page; } my $xmltree = XML::Parser->new(Style => 'Tree')->parsefile($ARGV[0]); my $wpo = load_wpo($xmltree); print STDERR "$ARGV[0] => "; my $fullname = $ARGV[0] . "_.c"; my $PO; open($PO, "> $fullname"); foreach (keys %$wpo) { # print "$_\n"; $_ ne "" and print $PO qq(printf(_("$_"));\n); } close $PO; print STDERR "$fullname\n";