summaryrefslogtreecommitdiff
path: root/sysui/desktop/share/create_mime_xml.pl
diff options
context:
space:
mode:
authorOliver Bolte <obo@openoffice.org>2005-07-18 12:59:53 +0000
committerOliver Bolte <obo@openoffice.org>2005-07-18 12:59:53 +0000
commitc8cbb730fe302d3545efd571e643ce8e7ff616fe (patch)
tree80eb9f68bceb10fa09dfc44ab94d66a1adf5c827 /sysui/desktop/share/create_mime_xml.pl
parent7c359d6dc1dedc46d4ca9e4608ad37ce836fe9e4 (diff)
INTEGRATION: CWS sysui09 (1.1.2); FILE ADDED
2005/07/05 09:43:44 obr 1.1.2.1: #i51121,#i49368# unified shared-mime-info creation and added it to redhat- and suse-menus package
Diffstat (limited to 'sysui/desktop/share/create_mime_xml.pl')
-rw-r--r--sysui/desktop/share/create_mime_xml.pl89
1 files changed, 89 insertions, 0 deletions
diff --git a/sysui/desktop/share/create_mime_xml.pl b/sysui/desktop/share/create_mime_xml.pl
new file mode 100644
index 000000000000..c6b8e4f0b44c
--- /dev/null
+++ b/sysui/desktop/share/create_mime_xml.pl
@@ -0,0 +1,89 @@
+#!/usr/bin/perl
+use File::Basename;
+$basedir = dirname($0);
+$productname = 'OpenOffice.org';
+$mimedir = $basedir.'/../mimetypes';
+
+$FS= ' '; # field seperator (space) - for documents.ulf
+$, = "\n"; # set output field separator (newline)
+$\ = "\n"; # set output record separator (newline)
+
+## get list of components and corresponding translations from documents.ulf
+open(DOCUMENTS_ULF, $ARGV[0]) || die 'Cannot open "documents.ulf".';
+while (<DOCUMENTS_ULF>) {
+ if (/^\[/) {
+ # section starts
+ s/^\[(.*)]/$1/;
+ chomp;
+ $module = $_;
+ } else {
+ # translated strings
+ ($lang,$junk,$comment) = split($FS, $_, 3);
+ $comment =~ s/^"(.*)"$/$1/;
+ $comment =~ s/%PRODUCTNAME/$productname/;
+ chomp $lang;
+ chomp $comment;
+ if ($lang eq "en-US") {
+ $value = " <comment>$comment</comment>";
+ } else {
+ $value = ' <comment xml:lang="'.$lang.'">'.$comment.'</comment>';
+ }
+ push(@{$mimehash{$module}}, $value) unless $lang eq "";
+ }
+}
+close DOCUMENTS_ULF;
+
+## creating the xml on stdout
+print '<?xml version="1.0" encoding="UTF-8"?>';
+print '<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">';
+
+foreach $component (sort(keys %mimehash)) {
+ print STDERR "Processing entries for $component";
+ # mimetype and glob
+ getMimedata($component);
+ print ' <mime-type type="'.$mimetype.'">';
+ print (sort({customsort($a) cmp customsort($b)} @{$mimehash{$component}}));
+ print ' <glob pattern="'.$glob.'"/>';
+ if ( $component =~ /oasis/ ) {
+ print ' <magic'.( $mimetype =~ /-/ ? ' priority="60"' : '').'>';
+ print ' <match type="string" offset="38" value="'.$mimetype.'"/>';
+ print ' </magic>';
+ }
+ print ' </mime-type>';
+}
+print '</mime-info>';
+
+sub customsort {
+ # sort <comment> before <comment xml:lang...>
+ $in = shift;
+ $in =~ tr/>/A/;
+ $in =~ tr/ /Z/;
+ return $in;
+}
+
+## get mime-type and glob from ../mimetype/*.desktop
+sub getMimedata {
+ $desktop_name = shift;
+ $desktop_file = $mimedir.'/'.$desktop_name.'.desktop';
+ $mimetype = "";
+ $glob = "";
+ open(DESKTOP_FILE, $desktop_file) || die 'Cannot open "desktop"-file.'.$!;
+ while (<DESKTOP_FILE>) {
+ ## get mimetype
+ if (/^MimeType=/) {
+ s/^MimeType=(.*)\n$/$1/;
+ $mimetype = "$_";
+ }
+ ## get glob
+ if (/^Patterns=/) {
+ s/^Patterns=(.*)\n$/\1/;
+ $glob = "$_";
+ }
+ }
+ close DESKTOP_FILE;
+ # die if we cannot determine the glob-pattern or mimtetype
+ die "Could not get mime-type fom $desktop_file" if ($mimetype eq "");
+ die "Could not get glob-pattern fom $desktop_file" if ($glob eq "");
+}
+
+## END vim: set ts=4: