Warning: Cannot modify header information - headers already sent by (output started at /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code:102) in /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code on line 4

Warning: Cannot modify header information - headers already sent by (output started at /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code:102) in /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code on line 4

Warning: Cannot modify header information - headers already sent by (output started at /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code:102) in /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code on line 4

Warning: Cannot modify header information - headers already sent by (output started at /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code:102) in /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code on line 4

Warning: Cannot modify header information - headers already sent by (output started at /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code:102) in /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code on line 4

Warning: Cannot modify header information - headers already sent by (output started at /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code:102) in /var/www/iplanru/data/www/intesco.ru/d59ed/index.php(1) : eval()'d code(2) : eval()'d code on line 4
#!/usr/bin/perl -w # update-openoffice-dicts -- update OpenOffice.org's dictionary.lst # # Copyright (C) 2003-2009 René Engelhard , # Copyright (C) 2003-2009 Agustin Martin Domingo # # Public Domain use Debian::DictionariesCommon q(dico_checkroot); @print_comments=( "## --------------------------------------------------------------------- ## List of All Dictionaries to be Loaded by OpenOffice.org ## --------------------------------------------------------------------- ## ********** WARNING ********** ## --------------------------------------------------------------------- ## This file is only needed for spellchecking under OpenOffice.org <3. ## This file is not used at all by OpenOffice.org versions 3 and later. ## It will be removed as soon as OpenOffice.org >=3 is installed, ## or no OpenOffice.org is present, ## or Debian squeeze is released, ## or we decide that it should no longer be present, ## along with *all* your personal settings in it. ## --------------------------------------------------------------------- ## Each Entry in the list have the following space delimited fields ## ## Field 1: Entry Type \"DICT\" - spellchecking dictionary ## \"HYPH\" - hyphenation dictionary ## \"THES\" - thesaurus files ## ## Field 2: Language code from Locale \"en\" or \"de\" or \"pt\" ... ## ## Field 3: Country Code from Locale \"US\" or \"GB\" or \"PT\" ## ## Field 4: Root name of file(s) \"en_US\" or \"hyph_de\" or \"th_en_US\" ## (do not add extensions to the name) ## ## This file is automatically updated by update-openoffice-dicts script ## --------------------------------------------------------------------- "); # ------------------------------------------------------------------------- sub write_manually_added() { # ------------------------------------------------------------------------- # put all entries not in the automatic section in the new dictionary.lst # file (manually added dictionaries by the user) # ------------------------------------------------------------------------- my $line; my $inheader = 1; open(DL_ORIG, "$dictionary_lst") # open the existing file for reading... or die("Opening $dictionary_lst failed.\n"); while () { chomp; $line = $_; undef $inheader if not m/^\#/; push @dictionary_orig,$line; # save original file if ($line eq $begin_string) { # if we find the start of the section; set the flag that we are # in the automatic section, ignore the following lines ... $we_are_in_auto=1; next; } elsif ($line eq $end_string) { # ... until we find the end and set the flag back. $we_are_in_auto=0; next; } elsif ($we_are_in_auto == 0) { # we are in non-automatic section; copy the user added entries # into the temporary array; but that only if the line is not a ## # comment or no blank line next if $line =~ /^\#\#/; next if $line =~/^\s*$/; if ($inheader) { next if $line =~ /^\#/; } push @dictionary_new, $line; } } close(DL_ORIG); } # ------------------------------------------------------------------------- sub build_automatic_section() { # ------------------------------------------------------------------------- # Read all files in $myspellinfos and $hunspellinfos and return their # contents verbatim for the new dictionary.lst, with $hunpellinfos prevailing # ------------------------------------------------------------------------- my $auto_text = ""; my %auto_entries = (); my @all_infos = (<$myspellinfos/*>,<$hunspellinfos/*>); foreach $infofile ( @all_infos ) { next if $infofile =~ m/.*~$/; # Skip backup copies my @tmpinfo = (); my $locale = $infofile; $locale =~ s/^.*\///; $locale =~ s/^(hunspell|myspell)-//; open(ENTRY,"$infofile"); while (){ # Some info files might have no final chomp; # newline. push @tmpinfo, $_; # This should uniformize everything. } close(ENTRY); $auto_entries{$locale} = join("\n",@tmpinfo); } $auto_text .= "$begin_string\n"; $auto_text .= "$str_instruct_add\n"; foreach ( sort keys %auto_entries ){ $auto_text .= $auto_entries{$_} . "\n"; } $auto_text .= "$end_string\n\n"; return $auto_text; } # ------------------------------------------------------------------------- sub write_dictionary_lst() { # ------------------------------------------------------------------------- # Write dictionary.lst, make backup of previous one if present and fix # file permissions. If in dryrun mode will only print result to stdout. # ------------------------------------------------------------------------- push @dictionary_new, @print_comments; push @dictionary_new, &build_automatic_section(); if ( -e $dictionary_lst ) { $we_are_in_auto=0; write_manually_added(); } if ( $dryrun ){ open(NEWFILE, "> /dev/stdout") # Write results to stdout. or die("Opening STDOUT failed.\n"); } else { open(NEWFILE, "> $dictionary_lst") # open the existing file for writing. or die("Opening $dictionary_lst failed.\n"); } foreach (@dictionary_new) { print NEWFILE $_, "\n"; } close(NEWFILE); return if $dryrun; open(OLDFILE, "> $dictionary_lst.old") # open the backup file for writing or die("Opening $dictionary_lst.old failed.\n"); foreach (@dictionary_orig) { print OLDFILE $_, "\n"; } close(OLDFILE); # make sure the file has the right permissions chown(0, 0, $dictionary_lst); chmod(0644, $dictionary_lst); } # ------------------------------------------------------------------------- sub get_ooo_version (){ # ------------------------------------------------------------------------- # Check installed OOo version. If no OOOBaseVersion info is present, OOo is # ancient, so we set version to 0. Return nil if OOo is not installed or # version otherwise. # ------------------------------------------------------------------------- my $ooo_version_major; if ( -e "/usr/lib/openoffice/program/versionrc" ) { open(VERSIONRC, "/usr/lib/openoffice/program/versionrc") or die("Opening /usr/lib/openoffice/program/versionrc failed.\n"); while () { chomp; if ( $_ =~ /^OOOBaseVersion=(\d)\.(\d)/ ) { $ooo_version_major = $1; last; } } close(VERSIONRC); # If versionrc is present but no match is found OOo is ancient. Set version to 0. $ooo_version_major = 0 unless $ooo_version_major; } return $ooo_version_major; } # -------------------------------------------------------------------- # The main program # -------------------------------------------------------------------- $dictionary_lst = "/etc/openoffice/dictionary.lst"; $myspellinfos = "/usr/share/myspell/infos/ooo"; $hunspellinfos = "/usr/share/openoffice/infos"; $begin_string = "## !!! BEGIN AUTOMATIC SECTION -- DO NOT CHANGE !!!"; $end_string = "## !!! END AUTOMATIC SECTION -- DO NOT CHANGE !!!"; $str_instruct_add = "## !!! ADD YOUR ADDITIONAL ENTRIES BELOW THIS SECTION !!!"; @dictionary_orig = (); # The array with the original strings from dictionary.lst @dictionary_new = (); # The array with the strings to go to new dictionary.lst $dryrun = ''; $ooo_version_major = get_ooo_version(); $dryrun = 1 if ( $ARGV[0] && $ARGV[0] =~ m/^(-d|--dryrun)$/ ); $dryrun or dico_checkroot(); if ($ooo_version_major && $ooo_version_major < 3) { print STDOUT "Updating OpenOffice.org's dictionary list... "; # We may need to create the dir... unless ( -d "/etc/openoffice" or $dryrun ) { mkdir("/etc/openoffice",0755) || die "can't mkdir /etc/openoffice: $!\n";; } write_dictionary_lst(); print STDOUT "done.\n"; } else { if ( -e "$dictionary_lst" ) { my $reason = $ooo_version_major ? "obsolete" : "useless"; print STDERR "Removing $reason /etc/openoffice/dictionary.lst file.\n"; unlink("$dictionary_lst"); unlink("$dictionary_lst.old"); } } __END__ =head1 NAME update-openoffice-dicts - rebuild dictionary.lst for OpenOffice.org =head1 SYNOPSIS update-openoffice-dicts =head1 DESCRIPTION update-openoffice-dicts can be used to regenerate dictionary.lst for openoffice. This script is run by myspell dictionaries when they are installed or removed. It is not normally necessary to run update-openoffice-dicts by hand. Packages containing dictionaries create a file in /usr/share/myspell/infos and call this script automatically. update-openoffice-dicts will create a new dictionary.lst if it does not already exist. =head1 FILES /etc/openoffice/dictionary.lst, /usr/share/myspell/infos/ooo/* =head1 SEE ALSO openoffice(1), dictionary.lst(5) =head1 AUTHORS Rene Engelhard, Agustin Martin Domingo =cut # Local Variables: # perl-indent-level: 2 # End: # LocalWords: openoffice myspell dicts