summaryrefslogtreecommitdiffstats
path: root/perl-install/printer/main.pm
diff options
context:
space:
mode:
authorTill Kamppeter <tkamppeter@mandriva.com>2003-01-20 02:48:22 +0000
committerTill Kamppeter <tkamppeter@mandriva.com>2003-01-20 02:48:22 +0000
commit830b8a584925f3152c7efac2009a69fe83f4c5f0 (patch)
tree517dfa9b6bd6e46aa9d47961267cff740f991782 /perl-install/printer/main.pm
parent3957374e1ded186023a817a82458f06d15150192 (diff)
downloaddrakx-830b8a584925f3152c7efac2009a69fe83f4c5f0.tar
drakx-830b8a584925f3152c7efac2009a69fe83f4c5f0.tar.gz
drakx-830b8a584925f3152c7efac2009a69fe83f4c5f0.tar.bz2
drakx-830b8a584925f3152c7efac2009a69fe83f4c5f0.tar.xz
drakx-830b8a584925f3152c7efac2009a69fe83f4c5f0.zip
Improve association of printers with database entries (preparation for
non-interactive print queue generation): - Make use of device ID strings in the Foomatic database - Association of generic printers when PDL (PCL, PCL-XL, PostScript) could be auto-detected - Cleaned up entries from manufacturer-supplied PPDs for PostScript printers to try to match model names of Foomatic entries - Bug fixes on previous association mechanism
Diffstat (limited to 'perl-install/printer/main.pm')
-rw-r--r--perl-install/printer/main.pm59
1 files changed, 55 insertions, 4 deletions
diff --git a/perl-install/printer/main.pm b/perl-install/printer/main.pm
index b45e1f7da..a94f577ab 100644
--- a/perl-install/printer/main.pm
+++ b/perl-install/printer/main.pm
@@ -383,6 +383,7 @@ sub read_printer_db(;$) {
my $inentry = 0;
my $indrivers = 0;
my $inautodetect = 0;
+ my $autodetecttype = "";
local $_;
while (<DBPATH>) {
chomp;
@@ -399,9 +400,31 @@ sub read_printer_db(;$) {
} elsif ($inautodetect) {
# We are inside the autodetect block of a printers entry
# All entries inside this block will be ignored
- if (m!^.*</autodetect>\s*$!) {
- # End of autodetect block
- $inautodetect = 0;
+ if ($autodetecttype) {
+ if (m!^.*</$autodetecttype>\s*$!) {
+ # End of parallel, USB, or SNMP section
+ $autodetecttype = "";
+ } elsif (m!^\s*<manufacturer>\s*([^<>]+)\s*</manufacturer>\s*$!) {
+ # Manufacturer
+ $entry->{devidmake} = $1;
+ } elsif (m!^\s*<model>\s*([^<>]+)\s*</model>\s*$!) {
+ # Model
+ $entry->{devidmodel} = $1;
+ } elsif (m!^\s*<description>\s*([^<>]+)\s*</description>\s*$!) {
+ # Description
+ $entry->{deviddesc} = $1;
+ } elsif (m!^\s*<commandset>\s*([^<>]+)\s*</commandset>\s*$!) {
+ # Command set
+ $entry->{devidcmdset} = $1;
+ }
+ } else {
+ if (m!^.*</autodetect>\s*$!) {
+ # End of autodetect block
+ $inautodetect = 0;
+ } elsif (m!^\s*<(parallel|usb|snmp)>\s*$!) {
+ # Beginning of parallel, USB, or SNMP section
+ $autodetecttype = $1;
+ }
}
} else {
if (m!^\s*</printer>\s*$!) {
@@ -422,6 +445,9 @@ sub read_printer_db(;$) {
$driverstr .= " (recommended)";
}
$entry->{ENTRY} = "$entry->{make}|$entry->{model}|$driverstr";
+ $entry->{ENTRY} =~ s/^CITOH/C.ITOH/i;
+ $entry->{ENTRY} =~
+ s/^KYOCERA[\s\-]*MITA/KYOCERA/i;
$entry->{driver} = $driver;
# Duplicate contents of $entry because it is multiply entered to the database
map { $thedb{$entry->{ENTRY}}{$_} = $entry->{$_} } keys %$entry;
@@ -431,6 +457,9 @@ sub read_printer_db(;$) {
# Make one entry per printer, with the recommended
# driver (manufacturerer|model)
$entry->{ENTRY} = "$entry->{make}|$entry->{model}";
+ $entry->{ENTRY} =~ s/^CITOH/C.ITOH/i;
+ $entry->{ENTRY} =~
+ s/^KYOCERA[\s\-]*MITA/KYOCERA/i;
if ($entry->{defaultdriver}) {
$entry->{driver} = $entry->{defaultdriver};
map { $thedb{$entry->{ENTRY}}{$_} = $entry->{$_} } keys %$entry;
@@ -1459,9 +1488,30 @@ sub poll_ppd_base {
if ($ppd eq "raw") { next }
my ($model, $driver);
if ($descr) {
- if ($descr =~ /^([^,]+), (.*)$/) {
+ $descr =~ s/\s*Series//i;
+ $descr =~ s/\((.*?(PostScript|PS).*?)\)/$1/i;
+ if (($descr =~ /^([^,]+[^,\s])\s+(PS.*)$/i) ||
+ ($descr =~ /^([^,]+[^,\s])\s*(PostScript.*)$/i) ||
+ ($descr =~
+ /^([^,]+[^,\s])\s*(\(\d\d\d\d\.\d\d\d\).*)$/i) ||
+ ($descr =~
+ /^([^,]+[^,\s])\s*(v\d+\.\d+.*)$/i) ||
+ ($descr =~ /^([^,]+), (.*)$/)) {
$model = $1;
$driver = $2;
+ $model =~ s/[\-\s,]+$//;
+ $driver =~
+ s/\b(PS|PostScript\b)/PostScript/gi;
+ $driver =~
+ s/(PostScript)(.*)(PostScript)/$1$2/i;
+ $driver =~
+ s/^\s*(\(\d\d\d\d\.\d\d\d\)|v\d+\.\d+)([,\s]*)(.*)/$3$2$1/;
+ $driver =~ s/[\-\s,]+$//;
+ $driver =~ s/^[\-\s,]+//;
+ if ($driver !~ /[a-z]/i) {
+ $driver = "PostScript " . $driver;
+ $driver =~ s/ $//;
+ }
} else {
# Some PPDs do not have the ", <driver>" part.
$model = $descr;
@@ -1475,6 +1525,7 @@ sub poll_ppd_base {
}
$ppd && $mf && $descr and do {
my $key = "$mf|$model|$driver" . ($lang && " ($lang)");
+ $key =~ s/^KYOCERA[\s\-]*MITA/KYOCERA/i;
$thedb{$key}{ppd} = $ppd;
$thedb{$key}{driver} = $driver;
$thedb{$key}{make} = $mf;