From 5edfc2c02b71ac5f90ca55cfc3491671c3a6ee1c Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Fri, 15 Jun 2012 16:56:29 +0200 Subject: [PATCH] PPD: Fonts --- ppd/PPD.pm | 43 ++++++++++++++++++++---- ppd/gen-hp | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+), 7 deletions(-) diff --git a/ppd/PPD.pm b/ppd/PPD.pm index f388547..00dc9e5 100644 --- a/ppd/PPD.pm +++ b/ppd/PPD.pm @@ -4,7 +4,7 @@ use strict; use warnings; use Exporter 'import'; -our @EXPORT = qw(define_group define_ui_group switch_group declare get set maybe_set option constrain gen_values generate); +our @EXPORT = qw(define_group define_ui_group switch_group declare get set maybe_set option constrain gen_values fonts generate); ### PPD data model ### @@ -18,6 +18,7 @@ our @EXPORT = qw(define_group define_ui_group switch_group declare get set maybe # # For main keywords: # Type => type, # q=quoted, i=invocation, s=string (unquoted), b=boolean # Value => string, +# Values => list, # (if there are multiple values) # # # For option keywords: # Type => 'o', @@ -29,7 +30,8 @@ our @EXPORT = qw(define_group define_ui_group switch_group declare get set maybe # Values => [ # possible values (mandatory) # { Key => key, # key (mandatory) # Name => key, # descriptive name (default: same as Key) -# PS => string, # PS code to emit (mandatory) +# PS => string, # PS code invocation to emit +# String => string, # Unquoted string to emit instead of PS code # Default => 1, # if this is the default value # }, # ], @@ -145,8 +147,8 @@ sub option($) { my $key = $o->{Key}; !defined $keywords{$key} or die "Keyword $key already known\n"; $keywords{$key} = $o; - my $g = $groups{$current_group_key}; - $o->{Group} = $current_group_key; + $o->{Group} //= $current_group_key; + my $g = $groups{$o->{Group}}; $o->{Type} = 'o'; push @{$g->{Keywords}}, $o; } @@ -189,6 +191,22 @@ sub gen_values($@) { return \@values; } +sub fonts($) { + my ($flist) = @_; + my @values = (); + for my $row (split /\n/, $flist) { + my ($key, $val) = ($row =~ /^(\S+):\s+(.*)$/) or die "Font line parse error: $row\n"; + push @values, { Key => $key, String => $val }; + } + + option({ + Key => 'Font', + Group => 'fonts', + Values => [ @values ], + Default => 'Courier', + }); +} + ### Known main keywords ### # Group "f": file description @@ -245,6 +263,9 @@ declare('j', [ 'JCLEnd', 'q', undef ], ); +# Group "fonts": Fonts +define_group('fonts', { Name => 'Fonts' }); + ### Formatting of PPD ### sub format_value($$) { @@ -299,9 +320,17 @@ sub emit_option($) { print "*Default$key: ", get_default($o), "\n"; for my $v (@{$o->{Values}}) { my $ps = $v->{PS}; - # $ps = "\n$ps" unless $ps =~ /^\n/s; - # $ps = "$ps\n" unless $ps =~ /\n$/s; - print "*$key ", $v->{Key}, '/', ($v->{Name} // $v->{Key}), ': ', format_value('i', $ps), "\n"; + print "*$key ", $v->{Key}; + print '/', $v->{Name} if defined($v->{Name}) && $v->{Name} ne $v->{Key}; + print ": "; + if (defined $ps) { + # $ps = "\n$ps" unless $ps =~ /^\n/s; + # $ps = "$ps\n" unless $ps =~ /\n$/s; + print format_value('i', $ps); + } else { + print format_value('s', $v->{String}); + } + print "\n"; } if (defined $o->{Choice}) { print "*${jcl}CloseUI *$key\n"; } print "\n"; diff --git a/ppd/gen-hp b/ppd/gen-hp index 600882e..89a3124 100755 --- a/ppd/gen-hp +++ b/ppd/gen-hp @@ -133,4 +133,102 @@ constrain(undef, 'Duplex', 'MediaType', sub { return !($dp ne 'None' && $mt =~ /^(Labels|Transparency|Bond)$/); }); +# As reported by the printer +# (versions set to "(1.0)", because the printer reports just "(.)") +fonts( <<'AMEN' ); +Albertus-ExtraBold: Standard (1.0) Standard ROM +Albertus-Medium: Standard (1.0) Standard ROM +AntiqueOlive: Standard (1.0) Standard ROM +AntiqueOlive-Bold: Standard (1.0) Standard ROM +AntiqueOlive-Italic: Standard (1.0) Standard ROM +Arial: Standard (1.0) Standard ROM +Arial-Bold: Standard (1.0) Standard ROM +Arial-BoldItalic: Standard (1.0) Standard ROM +Arial-Italic: Standard (1.0) Standard ROM +AvantGarde-Book: Standard (1.0) Standard ROM +AvantGarde-BookOblique: Standard (1.0) Standard ROM +AvantGarde-Demi: Standard (1.0) Standard ROM +AvantGarde-DemiOblique: Standard (1.0) Standard ROM +Bookman-Demi: Standard (1.0) Standard ROM +Bookman-DemiItalic: Standard (1.0) Standard ROM +Bookman-Light: Standard (1.0) Standard ROM +Bookman-LightItalic: Standard (1.0) Standard ROM +CGOmega: Standard (1.0) Standard ROM +CGOmega-Bold: Standard (1.0) Standard ROM +CGOmega-BoldItalic: Standard (1.0) Standard ROM +CGOmega-Italic: Standard (1.0) Standard ROM +CGTimes: Standard (1.0) Standard ROM +CGTimes-Bold: Standard (1.0) Standard ROM +CGTimes-BoldItalic: Standard (1.0) Standard ROM +CGTimes-Italic: Standard (1.0) Standard ROM +Clarendon-Condensed-Bold: Standard (1.0) Standard ROM +Coronet: Standard (1.0) Standard ROM +Courier: Standard (1.0) Standard ROM +Courier-Bold: Standard (1.0) Standard ROM +Courier-BoldOblique: Standard (1.0) Standard ROM +Courier-Oblique: Standard (1.0) Standard ROM +CourierHP: Standard (1.0) Standard ROM +CourierHP-Bold: Standard (1.0) Standard ROM +CourierHP-BoldItalic: Standard (1.0) Standard ROM +CourierHP-Italic: Standard (1.0) Standard ROM +Dorit: Standard (1.0) Standard ROM +Dorit-Bold: Standard (1.0) Standard ROM +Garamond-Antiqua: Standard (1.0) Standard ROM +Garamond-Halbfett: Standard (1.0) Standard ROM +Garamond-Kursiv: Standard (1.0) Standard ROM +Garamond-KursivHalbfett: Standard (1.0) Standard ROM +Helvetica: Standard (1.0) Standard ROM +Helvetica-Bold: Standard (1.0) Standard ROM +Helvetica-BoldOblique: Standard (1.0) Standard ROM +Helvetica-Narrow: Standard (1.0) Standard ROM +Helvetica-Narrow-Bold: Standard (1.0) Standard ROM +Helvetica-Narrow-BoldOblique: Standard (1.0) Standard ROM +Helvetica-Narrow-Oblique: Standard (1.0) Standard ROM +Helvetica-Oblique: Standard (1.0) Standard ROM +Koufi: Standard (1.0) Standard ROM +Koufi-Bold: Standard (1.0) Standard ROM +LetterGothic: Standard (1.0) Standard ROM +LetterGothic-Bold: Standard (1.0) Standard ROM +LetterGothic-Italic: Standard (1.0) Standard ROM +Malka: Standard (1.0) Standard ROM +Malka-Bold: Standard (1.0) Standard ROM +Malka-Italic: Standard (1.0) Standard ROM +Marigold: Standard (1.0) Standard ROM +Naamit: Standard (1.0) Standard ROM +Naamit-Bold: Standard (1.0) Standard ROM +Naskh: Standard (1.0) Standard ROM +Naskh-Bold: Standard (1.0) Standard ROM +NewCenturySchlbk-Bold: Standard (1.0) Standard ROM +NewCenturySchlbk-BoldItalic: Standard (1.0) Standard ROM +NewCenturySchlbk-Italic: Standard (1.0) Standard ROM +NewCenturySchlbk-Roman: Standard (1.0) Standard ROM +Palatino-Bold: Standard (1.0) Standard ROM +Palatino-BoldItalic: Standard (1.0) Standard ROM +Palatino-Italic: Standard (1.0) Standard ROM +Palatino-Roman: Standard (1.0) Standard ROM +Ryadh: Standard (1.0) Standard ROM +Ryadh-Bold: Standard (1.0) Standard ROM +Symbol: Special (1.0) Special ROM +SymbolMT: Special (1.0) Special ROM +Times-Bold: Standard (1.0) Standard ROM +Times-BoldItalic: Standard (1.0) Standard ROM +Times-Italic: Standard (1.0) Standard ROM +Times-Roman: Standard (1.0) Standard ROM +TimesNewRoman: Standard (1.0) Standard ROM +TimesNewRoman-Bold: Standard (1.0) Standard ROM +TimesNewRoman-BoldItalic: Standard (1.0) Standard ROM +TimesNewRoman-Italic: Standard (1.0) Standard ROM +Univers-Bold: Standard (1.0) Standard ROM +Univers-BoldItalic: Standard (1.0) Standard ROM +Univers-Condensed-Bold: Standard (1.0) Standard ROM +Univers-Condensed-BoldItalic: Standard (1.0) Standard ROM +Univers-Condensed-Medium: Standard (1.0) Standard ROM +Univers-Condensed-MediumItalic: Standard (1.0) Standard ROM +Univers-Medium: Standard (1.0) Standard ROM +Univers-MediumItalic: Standard (1.0) Standard ROM +Wingdings-Regular: Special (1.0) Special ROM +ZapfChancery-MediumItalic: Standard (1.0) Standard ROM +ZapfDingbats: Special (1.0) Special ROM +AMEN + generate(); -- GitLab