Parameters for the placemat software
Parameters for the placemat software
To help users of the placemat software, in this thread will be posted the used parameters of the placemat software. The intention is that placemats made by JDAW can be used as examples of how the software’s features can be invoked.
This thread is not to hold discussion of these examples, which should be in the usual thread for discussion of the placemat software. For this reason this thread will typically be locked.
These placemats were generally made with the then-current version. Later versions of the software have changed the names or usage or defaults or existence of some of the parameters. Hence readers might prefer to start reading at the end.
This thread is not to hold discussion of these examples, which should be in the usual thread for discussion of the placemat software. For this reason this thread will typically be locked.
These placemats were generally made with the then-current version. Later versions of the software have changed the names or usage or defaults or existence of some of the parameters. Hence readers might prefer to start reading at the end.
Re: Parameters for the placemat software
Monday 12th March 2012, The Bung Hole, Cynthia in London (placemats, planning and arrangements).
Software version: 20:00 Sunday 11th March 2012.
![Image](http://www.jdawiseman.com/2012/20120312_cynthia_20121112_a.png)
![Image](http://www.jdawiseman.com/2012/20120312_cynthia_20121112_b.png)
Code: Select all
/Names [
(CJ) % Cynthia Jenson
(DRT) (RLC) (BMHR)
(AHB) % Arriving at 7ish
(CMAG) % Will see what I can do. Should be able to make it.
[(RA) {-0.06 Kern} (Y) {-0.02 Kern} (C)] [(JDA) {-0.04 Kern} (W)] % late
()
] def
/Titles [
Names {dup length 0 eq {pop} if} forall
(+) (&)
] def
/Circlearrays [ Titles {[exch]} forall ] def
/Belowtitles [ Titles length {()} repeat ] def
/HeaderLeftText [(The Bung Hole, Monday 12) {SuperscriptOn} (th) {SuperscriptOff} ( March 2012)] def
/HeaderCenterText [(Cynthia) /quoteright (s in Town)] def
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=5796&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/papers/2012/20120312_cynthia.pdf) (Latest version this placemat)
(http://www.davy.co.uk/bunghole/) (The Bunghole)
(http://malvedos.wordpress.com/) (The Malvedos Blog)
] def
/TitlesFont /MyriadPro-Bold def
/FontSizesRatioTitlesMin 999 def
/CrossHatchingTitles true def
/GlassesOnSheets [
[ 0 1 Titles length 1 sub 2 idiv {} for ]
[ Titles length 1 add 2 idiv 1 Titles length 1 sub {} for ]
] def % /GlassesOnSheets
/GlassesOnTastingNotePages GlassesOnSheets def
/GlassesClusteredOnVoteRecorders [
GlassesOnTastingNotePages dup
] def % triple-depth array, same length as VoteRecorderTopTexts and VoteRecorderShowTotalRow
/VoteRecorderTopTexts [
[ (What is it?) ]
[ (Wine Of The Night) (Q:) ]
] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderShowTotalRow [ true false ] def % Must be same length as GlassesClusteredOnVoteRecorders
Re: Parameters for the placemat software
Thursday 22nd March 2012, The Bung Hole, JDAW’s oddments (placemats, planning and arrangements).
Software version: 14:00 Monday 19th March 2012.
Edit on 2nd Oct 2013: the new parameter VerticalMiddlingTitlesAlwaysMatchNone has eliminated the need for the code in VerticalMiddlingTitles.
![Image](http://www.jdawiseman.com/2012/20120322_20121112_a.png)
![Image](http://www.jdawiseman.com/2012/20120322_20121112_b.png)
Code: Select all
/Circlearrays [
[ (Santelmo) (White) (from Lidl) ]
[ (Santelmo) (Tawny) (from Lidl) ]
[ (Santelmo) (10Y) (from Lidl) ]
[ (Cruz) (White) (from Franprix) ]
[ (Sao Pedro das Aguias) (10Y) (from Franprix) ]
[ [(Roz) /egrave (s)] (Reserve) (from Franprix) ]
[ (Passadouro) (1995) ]
[ (Passadouro) (1994) ]
[ (Niepoort) (1994) ]
[ (&) (And) ]
[ /plus (Plus) ]
[ /infinity (Much) ]
] def
/Titles [
(Sn)
dup
dup
(Cz)
[(SP) {-0.11 Kern} (A)]
(Rz)
(Pd)
(Pd)
(Ni)
counttomark 1 Circlearrays length 1 sub {Circlearrays exch get 0 get} for
] def
/Overtitles [ Circlearrays {1 get} forall ] def
/Belowtitles [ Titles length {()} repeat ] def
/Names [
[(JDA) {-0.06 Kern} (W)]
(DRT)
(THRA)
(AHB)
[(RA) {-0.06 Kern} (YC)]
()
] def
/HeaderLeftText [(The Bung Hole, Thursday 22) {SuperscriptOn} (nd) {SuperscriptOff} ( March 2012)] def
/HeaderCenterText [(Some Little Ports)] def
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=5841&view=unread#unread) (Review thread on ThePortForum.com)
(http://www.theportforum.com/viewtopic.php?t=5750&view=unread#unread) (Planning thread on ThePortForum.com)
(http://www.jdawiseman.com/papers/2012/20120322.pdf) (Latest version this placemat)
(http://www.davy.co.uk/bunghole/) (The Bung Hole)
(http://www.lidl.fr/) (Lidl France)
(http://www.franprix.fr/) (Franprix)
] def
/SubtitlesTastingNotes Overtitles def
/FontSizesRatioTitlesMin 2 def
/FontSizesRatioAboveBelowOverMin 99 def
/OvertitleMaxFontSizeProportionTitles 0.4 def
/GlassesOnSheets [
[ 0 3 1 4 2 5 ]
dup [ exch {6 add} forall ]
] def % /GlassesOnSheets
/GlassesOnTastingNotePages [
[ 0 1 5 {} for ]
dup [ exch {6 add} forall ]
] def
/WaterCountTarget 15 def % intended number of tickable squares
/VerticalMiddlingTitles {Titles WithinTitles get type /nametype eq {/MatchNone} {/MatchString} ifelse} def
Edit on 2nd Oct 2013: the new parameter VerticalMiddlingTitlesAlwaysMatchNone has eliminated the need for the code in VerticalMiddlingTitles.
Re: Parameters for the placemat software
Thursday 29th March 2012, The Bung Hole, The Birthday Boys (placemats, planning and arrangements).
Software version: 21:00 Monday 26th March 2012.
![Image](http://www.jdawiseman.com/2012/20120329_birthday_20121112_a.png)
![Image](http://www.jdawiseman.com/2012/20120329_birthday_20121112_b.png)
![Image](http://www.jdawiseman.com/2012/20120329_birthday_20121112_c.png)
![Image](http://www.jdawiseman.com/2012/20120329_birthday_20121112_d.png)
Code: Select all
/JDAW [(JDA) {-0.06 Kern} (W)] def
/RAYC [(RA) {-0.06 Kern} (YC)] def
/RubyCount 8 def
/Names [
(BMHR)
(CMAG)
RAYC
(THRA)
(AHB)
(DRT)
(RLC)
()
% (AP)
% (CSD)
% [(CSD) /quoteright (s +1)] % Terry
% JDAW
] def
/Titles [
(G)
(G)
(Ck)
(F)
(N)
(RP)
(Rs)
(TPS)
0 1 Names length 2 sub {Names exch get} for
] def
/Circlearrays [
[ [(Graham) /quoteright (s Six Grapes)] (DRT) ]
[ [(Graham) /quoteright (s Finest Reserve)] JDAW ]
[ (Cockburn Special Reserve) (RLC) ]
[ [(Fonseca T) {-0.08 Kern} (erra Prima)] RAYC ]
[ (Noval Black) RAYC ]
[ (Ramos-Pinto Collector) (RLC) ]
[ (Quinta de la Rosa Reserve) RAYC ]
[ (The Port Society Ruby Reserve) (RLC) ]
0 1 Names length 2 sub {Names exch get [exch]} for
] def
/Overtitles [
(Six Grapes)
(Finest Reserve)
(Special Reserve)
[(T) {-0.08 Kern} (erra Prima)]
(Black)
(Collector)
(Reserve)
(Ruby Reserve)
Circlearrays length RubyCount sub {()} repeat
] def
/SubtitlesTastingNotes Overtitles def
/Belowtitles [ Titles length {()} repeat ] def
/HeaderLeftText [(The Bung Hole, Thursday 29) {SuperscriptOn} (th) {SuperscriptOff} ( March 2012)] def
/HeaderCenterText [
(The Birthday Boys)
{TypeOfPagesBeingRendered dup /Glasses eq exch /TastingNotes eq or {SheetNum 1 le {(: Amuse-Bouche)} {(: Plat Principal)} ifelse} if}
{TypeOfPagesBeingRendered /VoteRecorder eq {SheetNum 0 le {(: Plat Principal)} if} if}
] def
/ExternalLinks [
(http://www.theportforum.com/viewtopic.php?t=5202&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/papers/2012/20120329_birthday.pdf) (Latest version this placemat)
(http://www.davy.co.uk/bunghole/) (The Bunghole)
(http://en.wikipedia.org/wiki/1965#March) (March 1965)
] def
/GlassesOnSheets [
[ 0 1 3 {} for ]
[ 4 1 7 {} for ]
[ 8 1 Circlearrays length 1 sub RubyCount add 2 idiv {} for ]
dup dup length 1 sub get 1 add [ exch 1 Circlearrays length 1 sub {} for ]
] def % /GlassesOnSheets
/GlassesOnTastingNotePages GlassesOnSheets def % For no tasting note pages at all use /GlassesOnTastingNotePages [] def
/TitlesFont /Impact def
/CircletextFont /BookAntiqua-Bold def
/OvertitlesFont {CircletextFont} def
/FontSizesRatioTitlesMin 99 def
/FontSizesSetsGlassesPages [ 0 0 counttomark GlassesOnSheets length exch sub {1} repeat ] def
/GlassesClusteredOnVoteRecorders [
GlassesOnTastingNotePages 2 1 index length 2 sub getinterval
GlassesOnTastingNotePages
] def
/VoteRecorderTopTexts [ % Must be same length as GlassesClusteredOnVoteRecorders
[ (What is it?) ]
[ (Wine Of The Night) (Q:) ]
] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderShowTotalRow [ true false ] def % Must be same length as GlassesClusteredOnVoteRecorders
/CrossHatchingBackground {SheetNum 1 le} def
/CrossHatchingTitles {SheetNum 1 gt} def
/CrossHatchingRadialGapStart 48 def
/CrossHatchingRadialGapAtInfinity 12 def
Re: Parameters for the placemat software
Wednesday 11th April 2012, The Bung Hole, A Small Emergency (placemats, planning and arrangements).
Software version 21:00 Monday 26th March 2012.
In the used typeface, Century, my initials should have been kerned a bit more.
Edit on 2nd Oct 2013: the new parameter VerticalMiddlingTitlesAlwaysMatchNone has eliminated the need for the code in VerticalMiddlingTitles.
![Image](http://www.jdawiseman.com/2012/20120411_blind_20121112.png)
Code: Select all
/Names [
[(JDA) {-0.06 Kern} (W)]
(DRT)
(THRA)
(RLC)
()
] def
/Circlearrays [
[ (+) ]
Names {dup length 0 eq {pop} {[exch]} ifelse} forall
] def
/Titles [ Circlearrays {0 get} forall ] def
/Belowtitles [ Circlearrays length {()} repeat ] def
/HeaderLeftText [(The Bung Hole, Wednesday 11) {SuperscriptOn} (th) {SuperscriptOff} ( April 2012)] def
/HeaderCenterText [(A Small Emergency)] def
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=5889&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/2012/20120411_blind.pdf) (Latest version this placemat)
(http://www.davy.co.uk/bunghole/) (The Bunghole)
(http://oldnickholborn.co.uk/) (The Old Nick (pre-Port beer))
] def
/TitlesFont /Century def
/FontSizesRatioTitlesMin 999 def
/VoteRecorderCrossedBox
{
VoteRecorderShowTotalRow VoteRecorderSheetNum get execU dup
{
pop Titles WithinTitles get ThisName eq ThisName length 0 gt ThisName type /arraytype ne and and
Titles WithinTitles get type /arraytype eq {ThisName (THRA) eq or} if
} if
} def
/GlassesClusteredOnVoteRecorders [
{GlassesOnTastingNotePages} dup
] def
/VoteRecorderTopTexts [
[ (What is it?) ]
[ (Wine Of The Night) (Q:) ]
] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderShowTotalRow [ true false ] def % Must be same length as GlassesClusteredOnVoteRecorders
/VerticalMiddlingTitles {Titles WithinTitles get type /nametype eq {/MatchNone} {/MatchString} ifelse} def
In the used typeface, Century, my initials should have been kerned a bit more.
Edit on 2nd Oct 2013: the new parameter VerticalMiddlingTitlesAlwaysMatchNone has eliminated the need for the code in VerticalMiddlingTitles.
Re: Parameters for the placemat software
Tuesday 17th April 2012, The Bung Hole, A Small Horizontal of 1966s (placemats, planning and arrangements).
Software version 18:00 Saturday 14th April 2012.
The /TitlesTastingNotes Overtitles def was new: using one of the sets of subtitles in one place as titles in another.
![Image](http://www.jdawiseman.com/2012/20120417_1966_20121112.png)
Code: Select all
/JDAW [(JDA) {-0.06 Kern} (W)] def
/RAYC [(RA) {-0.06 Kern} (YC)] def
/Circlearrays [
[ (Croft) (1966) (DRT) ]
[ (Gould Campbell) (1966) RAYC ]
[ (Fonseca) (1966) (AHB) ]
[ [(W) {-0.12 Kern} (arre)] (1966) [JDAW ( & STG)] ]
[ [(T) {-0.04 Kern} (aylor)] (1966) [JDAW ( & STG)] ]
[ (Quinta do Noval) (1966) (WS) ]
] def
/Titles [ (Cr) (GC) (F) (W) (T) (N) ] def
/Belowtitles [ Circlearrays length {()} repeat ] def
/Overtitles [ Circlearrays {0 get} forall ] def
/TitlesTastingNotes Overtitles def
/TitlesVoteRecorder Titles def
/SubtitlesTastingNotes Belowtitles def
/SubtitlesVoteRecorder Overtitles def
/Names [
JDAW
(STG) % Stephanie True Galley, right-handed
RAYC (AHB) (DRT) (WS) ()
] def
/HeaderLeftText [(The Bung Hole, Tuesday 17) {SuperscriptOn} (th) {SuperscriptOff} ( April 2012)] def
/HeaderCenterText (A Small Horizontal of 1966s) def
/ExternalLinks [
(http://www.theportforum.com/viewtopic.php?t=5905&view=unread#unread) (Review thread on ThePortForum.com)
(http://www.theportforum.com/viewtopic.php?t=5858&view=unread#unread) (Organisation thread on ThePortForum.com)
(http://www.jdawiseman.com/papers/2012/20120417_1966.pdf) (Latest version this placemat)
(http://www.davy.co.uk/bunghole/) (The Bung Hole)
] def
/TitlesFont /TimesNewRomanPS-BoldMT def
/OvertitlesFont TitlesFont def
/CircletextFont /TimesNewRomanPSMT def
/FontSizesRatioAboveBelowOverMin 99 def
/OvertitleMaxFontSizeProportionTitles 0.25 def
/ShapesInTitles true def
/ShapesToUse [/Flower] def % At least one of: /Flower /Star
/ShapesInAbovetitles false def
/ShapesInBelowtitles false def
/ShapesInOvertitles false def
The /TitlesTastingNotes Overtitles def was new: using one of the sets of subtitles in one place as titles in another.
Re: Parameters for the placemat software
Tuesday 24th April 2012, The Bung Hole, Delaforce (placemats, planning and arrangements).
Software version 23:00 Monday 23rd April 2012.
The Df75, which was surprisingly good, caused some intricacy. It was to be served as an aperitif, so not to appear on the glasses sheets. It would need a pre-pour sheet and a sticky label. But these two contain repeats of the relevant component of the glasses sheet. Not on glasses sheet ⇒ no pre-pour, no sticky. Hmmm: awkward.
What to do? So it was on a glasses sheet, the first, containing just the ’75 (/GlassesOnSheets [ [ 0 ] ! ] def). But zero copies of this sheet were shown (/NonDecanterLabelGlassesNumCopies {SheetNum 0 eq {0} {1} ifelse} def). Thus pre-pour and sticky repeats of the glasses sheet ’75 could appear. Yes, it is a bit awkward, but driven by the desire for a very strong visual similarity between the pre-pour sheets and the sheets to which glasses are then transferred.
However, be careful if generalising this trick. Imagine that there were a dozen ports to appear on pre-pour but not on the glasses sheets. If these were all put on the first glasses sheet (of which zero copies are printed), the computed radius would be much smaller, and that would shrink the radius on other sheets with which it shared a common radius (controlled by ShrinkRadii). Not good. Obviously there would need to be several different glasses sheets to be printed zero times.
![Image](http://www.jdawiseman.com/2012/20120424_delaforce_20121112_a.png)
![Image](http://www.jdawiseman.com/2012/20120424_delaforce_20121112_b.png)
![Image](http://www.jdawiseman.com/2012/20120424_delaforce_20121112_c.png)
Code: Select all
/CirclearrayPortNames << /Df (Delaforce) /DfC [(Delaforce C) /ocircumflex (rte)] /QC [(Delaforce Quinta da C) /ocircumflex (rte)] >> def
/SubtitlePortNames << /Df (Delaforce) /DfC [(Delaforce C) /ocircumflex (rte)] /QC [(Quinta da C) /ocircumflex (rte)] >> def
/VintageData [
[ (1975) /Df (AP) ]
[ (1960) /Df (THRA) ]
[ (1963) /Df (THRA) ]
[ (1966) /Df (THRA) ]
[ (1970) /Df (AHB) ]
[ (1974) /QC (JHG) ]
[ (1977) /Df (AHB) ]
[ (1980) /DfC (WS) ]
[ (1982) /Df (AP) ]
[ (1984) /QC (AHB) ]
[ (1985) /Df (THRA) ]
[ (1987) /QC (WS) ]
[ (1991) /DfC (AP) ]
[ (1992) /Df (AP) ]
[ (1994) /Df (AP) ]
[ (1997) /DfC (AP) ]
[ (2000) /Df (AP) ]
[ (2003) /Df (AP) ]
[ (2007) /Df (AP) ]
] def
/Circlearrays [ VintageData {
[ exch dup 0 get exch dup 1 get CirclearrayPortNames exch get exch dup length 2 le {pop} {2 get} ifelse ]
} forall] def
/Titles [ VintageData {0 get 2 2 getinterval} forall ] def
/Belowtitles [ VintageData {1 get dup /Df ne {pop ()} {SubtitlePortNames exch get} ifelse} forall ] def
/Overtitles [ VintageData {1 get dup /Df eq {pop ()} {SubtitlePortNames exch get} ifelse} forall ] def
/TitlesTastingNotes [ VintageData {0 get} forall ] def
/SubtitlesTastingNotes [ VintageData {1 get CirclearrayPortNames exch get} forall ] def
/Names [
(Nick D.)
[(J) {-0.02 Kern} (ulian W) {-0.15 Kern} (.)]
(Tom A.)
(Rob C.)
[(Axel P) {-0.15 Kern} (.)]
[(Derek T) {-0.15 Kern} (.)]
(Alex B.)
[(J) {-0.04 Kern} (acob H.)]
(Ben R.)
[(W) {-0.08 Kern} (olfgang S.)]
(Ray C.)
[(Christoper G) {-0.02 Kern} (.)]
()
] def
/HeaderLeftText [(Delaforce at The Bung Hole, Tuesday 24) {SuperscriptOn} (th) {SuperscriptOff} ( April 2012)] def
/HeaderCenterText [] def
/HeaderRightText [
(www) {-0.092 Kern} (.) {-0.092 Kern} (Delaforce.com, )
(www) {-0.092 Kern} (.) {-0.092 Kern} (ThePortForum.com, )
% (www) {-0.092 Kern} (.) {-0.12 Kern} (W) {-0.092 Kern} (orldOf) {+0.12 Kern} (Port.de, )
% (www.jacob-head.com/port,)
(www) {-0.092 Kern} (.jdawiseman.com)
] def
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=5172&view=unread#unread) (Organisation thread on ThePortForum.com)
(http://www.theportforum.com/viewtopic.php?t=5922&view=unread#unread) (Review thread on ThePortForum.com)
(http://www.jdawiseman.com/2012/20120424_delaforce.pdf) (Latest version this placemat)
(http://www.delaforce.com/) (Delaforce)
(http://www.davy.co.uk/bunghole/) (The Bung Hole)
] def
/PlaceNamesNumCopies 1 def
/PrePourNumCopies 1 def
/CorkDisplay true def
/StickyLabelsNumCopies 1 def
/StickyLabelsTypes [0] def
/TitlesFont /BookmanOldStyle-Bold def
/CircletextFont /BookmanOldStyle def
/HeaderFont CircletextFont def
/GlassesOnSheets [
[ 0 ]
dup [ exch dup length 1 sub get 1 add dup 5 add 1 exch {} for ]
dup [ exch dup length 1 sub get 1 add dup 5 add 1 exch {} for ]
dup [ exch dup length 1 sub get 1 add dup 5 add 1 exch {} for ]
] def % /GlassesOnSheets
/GlassesOnTastingNotePages [
[ 0 GlassesOnSheets 1 get {} forall ]
2 1 GlassesOnSheets length 1 sub {GlassesOnSheets exch get} for
] def
/NonDecanterLabelGlassesNumCopies {SheetNum 0 eq {0} {1} ifelse} def
/GlassesClusteredOnVoteRecorders [
GlassesOnSheets
] def % triple-depth array, same length as VoteRecorderTopTexts and VoteRecorderShowTotalRow
/WaterCountTarget 15 def % intended number of tickable squares
/PlaceNamesFirstAndThirdFoldsFromEdge 0 def
The Df75, which was surprisingly good, caused some intricacy. It was to be served as an aperitif, so not to appear on the glasses sheets. It would need a pre-pour sheet and a sticky label. But these two contain repeats of the relevant component of the glasses sheet. Not on glasses sheet ⇒ no pre-pour, no sticky. Hmmm: awkward.
What to do? So it was on a glasses sheet, the first, containing just the ’75 (/GlassesOnSheets [ [ 0 ] ! ] def). But zero copies of this sheet were shown (/NonDecanterLabelGlassesNumCopies {SheetNum 0 eq {0} {1} ifelse} def). Thus pre-pour and sticky repeats of the glasses sheet ’75 could appear. Yes, it is a bit awkward, but driven by the desire for a very strong visual similarity between the pre-pour sheets and the sheets to which glasses are then transferred.
However, be careful if generalising this trick. Imagine that there were a dozen ports to appear on pre-pour but not on the glasses sheets. If these were all put on the first glasses sheet (of which zero copies are printed), the computed radius would be much smaller, and that would shrink the radius on other sheets with which it shared a common radius (controlled by ShrinkRadii). Not good. Obviously there would need to be several different glasses sheets to be printed zero times.
Re: Parameters for the placemat software
Wednesday 2nd May 2012, The Bung Hole, post-BFT with Johnny Symington and the Graham 1952 Single Harvest Tawny (placemats, planning and arrangements).
Software version 22:00 Sunday 29th April 2012.
The combination of the large titles in TrebuchetMS-Bold (sans-serif, pleasingly weighted, with bright negative spaces) and smaller text in Garamond-Bold and Garamond (ornately seriffed, and slightly antique) works well.
![Image](http://www.jdawiseman.com/2012/20120502_20121112_a.png)
![Image](http://www.jdawiseman.com/2012/20120502_20121112_b.png)
![Image](http://www.jdawiseman.com/2012/20120502_20121112_c.png)
Code: Select all
/JDAW [(JDA) {-0.06 Kern} (W)] def
/RAYC [(RA) {-0.06 Kern} (YC)] def
/Names [
(JDS)
(AHB) (DRT) (RLC) (PW) (WS)
(BMHR) (CMAG) JDAW RAYC (THRA)
()
] def
/Circlearrays [
1 1 Names length 2 sub {[exch Names exch get]} for
[ (Graham) (1952) [(Single T) {-0.092 Kern} (awny)] (JDS) ]
[/dagger] [/daggerdbl] [/lozenge] [/currency]
] def
/Titles [
Circlearrays {dup length 2 ge {[exch dup 0 get 0 1 getinterval exch 1 get 2 2 getinterval]} {0 get} ifelse} forall
] def
/Belowtitles [ Circlearrays {dup length 3 ge {2 get} {pop ()} ifelse} forall ] def
/HeaderLeftText [(The Bung Hole, W) {-0.092 Kern} (ednesday 2) {SuperscriptOn} (nd) {SuperscriptOff} ( May 2012)] def
/HeaderCenterText [(Post-BFT: we) /quoteright (ll still be sober, honest guv)] def
/HeaderRightText [
(www) {-0.092 Kern} (.grahams-port.com, )
(www) {-0.092 Kern} (.) {-0.092 Kern} (ThePortForum.com, )
% (www) {-0.092 Kern} (.) {-0.12 Kern} (W) {-0.092 Kern} (orldOf) {+0.12 Kern} (Port.de, )
% (www.jacob-head.com/port,)
(www) {-0.092 Kern} (.jdawiseman.com)
] def
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=5890&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/2012/20120502.pdf) (Latest version this placemat)
(http://www.thebft.co.uk/) (The Big Fortified Tasting)
(http://www.davy.co.uk/bunghole/) (The Bung Hole)
(http://www.grahams-port.com/) (Graham's Port)
] def
/TitlesFont /TrebuchetMS-Bold def
/CircletextFont /Garamond-Bold def
/BelowtitlesFont CircletextFont def
/HeaderFont /Garamond def
/FontSizesRatioTitlesMin 9999 def
/GlassesClusteredOnVoteRecorders [
{[ GlassesOnTastingNotePages {[exch {dup Circlearrays exch get length 3 ge {pop} if} forall]} forall ]}
{GlassesOnTastingNotePages}
] def % triple-depth array, same length as VoteRecorderTopTexts and VoteRecorderShowTotalRow
/VoteRecorderTopTexts [
[ (What is it?) ]
[ (Wine Of The Night) (Q:) ]
] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderShowTotalRow [ true false ] def % Must be same length as GlassesClusteredOnVoteRecorders
/CircletextMaxFontSizeProportionRadius 0.0984 def
The combination of the large titles in TrebuchetMS-Bold (sans-serif, pleasingly weighted, with bright negative spaces) and smaller text in Garamond-Bold and Garamond (ornately seriffed, and slightly antique) works well.
Re: Parameters for the placemat software
Tuesday 15th May 2012, The Bung Hole, A Small 1970 Horizontal, Honouring Ronnie Roots (placemats, planning and arrangements).
Software version 22:00 Sunday 13th May 2012.
I wanted the short Circlearrays to resonate with the Rays, which is why CircletextsMaxCopies is so complicated. This code will be moved into the code proper, perhaps to be activated by a parameter to be called CircletextsAttemptResonateWithRays.
Edit on Sunday 20th May 2012:
![Image](http://www.jdawiseman.com/2012/20120515_1970_20121112_a.png)
![Image](http://www.jdawiseman.com/2012/20120515_1970_20121112_b.png)
Code: Select all
/JDAW [(JDA) {-0.06 Kern} (W)] def
/RAYC [(RA) {-0.06 Kern} (YC)] def
/Circlearrays [
[ [(Dow)] (1970) JDAW ]
[ [(Fonseca)] (1970) (CMAG) ]
[ [(Graham)] (1970) (THRA) ]
[ (Sandeman) (1970) (RLC) ]
[ [(T) {-0.09 Kern} (aylor)] (1970) (RMW) ]
[ [(W) {-0.06 Kern} (arre)] (1970) (AHB) ]
[ [(Cockburn)] (1970) RAYC ]
[ [(Of) /fl (ey Boa Vista)] (1970) (NDS) ]
[ [(Royal Oporto)] (1970) (DRT) ]
[ [(Royal Oporto Carvalhas)] (1970) [RAYC ( from THRA)] ]
[ /dagger ]
[ /daggerdbl ]
] def
/Titles [
(D)
(F)
(G)
(S)
(T)
(W)
(Ck)
(OBV)
(RO)
(ROC)
/dagger
/daggerdbl
] def
/Overtitles [ Circlearrays {0 get} forall ] def
/Belowtitles [ Circlearrays {dup length 3 ge {1 get} {pop ()} ifelse} forall ] def
/TitlesTastingNotes [ 0 1 Titles length 1 sub {dup Overtitles exch get dup length 0 gt {exch pop} {pop Titles exch get} ifelse} for ] def
/TitlesVoteRecorder Titles def
/TitlesDecantingNotes Titles def
/TitlesCorkDisplay TitlesTastingNotes def
/Names [
(RMW) (AHB) (CMAG) (DRT) RAYC (RLC) JDAW (THRA)
(NDS) % Cookie's friend Sandy
()
] def
/HeaderLeftText [(The Bung Hole, Tuesday 15) {SuperscriptOn} (th) {SuperscriptOff} ( May 2012)] def
/HeaderCenterText [(A Small 1970 Horizontal, Honouring Ronnie Roots)] def
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=5977&view=unread#unread) (Review thread on ThePortForum.com)
(http://www.theportforum.com/viewtopic.php?t=5912&view=unread#unread) (Planning thread on ThePortForum.com)
(http://www.jdawiseman.com/2012/20120515_1970.pdf) (Latest version this placemat)
(http://www.davy.co.uk/bunghole/) (The Bung Hole)
(http://en.wikipedia.org/wiki/1970) (Wikipedia on 1970)
] def
/TitlesFont /TrebuchetMS-Bold def
/OvertitlesFont /Garamond-Bold def
/BelowtitlesFont OvertitlesFont def
/CircletextFont OvertitlesFont def
/FontSizesRatioAboveBelowOverMin 999 def
/GlassesOnSheets [
[ 0 Titles length 1 sub /e exch def /s exch def s 1 e {dup e lt e s sub 6 ge and {dup s sub e s sub 1 add dup 6 div ceiling cvi 3 -1 roll 3 copy mul exch idiv 4 1 roll 1 add mul exch idiv ne {][} if} if} for ]
] def % /GlassesOnSheets
/CircletextMaxFontSizeProportionRadius 0.092 def
/TastingNotesTitlesFontSizeMax 16 def
/CircletextsMaxCopies { % Needlessly complicated for this use, but reusably general-purpose
Rays
{
dup RaysLinesPerGlass idiv RaysLinesPerGlass mul dup 0 eq
{pop dup 1 {
RaysLinesPerGlass 3 mod 0 eq {RaysLinesPerGlass 2 mul 3 idiv 2 copy ge {exch pop exit} {pop} ifelse} if
2 1 6 {/i exch def
RaysLinesPerGlass i mod 0 eq {RaysLinesPerGlass i idiv 2 copy ge {exch pop exit} {pop} ifelse} if
} for % i
} repeat} if % ... 0 eq
} {65535} ifelse % Rays
} def % Needlessly complicated for this use, but reusably general-purpose
/Rays true def
/RaysLinesToPaperEdge true def
/RaysLinesPerGlass 56 def
I wanted the short Circlearrays to resonate with the Rays, which is why CircletextsMaxCopies is so complicated. This code will be moved into the code proper, perhaps to be activated by a parameter to be called CircletextsAttemptResonateWithRays.
Edit on Sunday 20th May 2012:
Re: Parameters for the placemat software
Wednesday 25th July 2012, The Olympic Tasting at the Portuguese Embassy (placemats, planning and arrangements).
![Image](http://www.jdawiseman.com/2012/20120725_olympic_20121112.png)
Software version 22:00 Sunday 22nd July 2012.
The Olympic placemats were more complicated than is typical.
• Data is mostly in two arrays, PeopleData and PortData, and is decanted from there into the parameter arrays. For large tastings this can be easier, as it keeps together the relevant items of Titles, Overtitles, FillTexts, etc.
• Some of the people have complicated names, containing code that tests TypeOfPagesBeingRendered and chooses a suitably shortened version. The compound strings to be rendered themselves contain code, kerning, shrinking and superscripting.
• These data are decanted into the parameters with lines like ‟/TitlesTastingNotes [ PortData {0 get} forall ] def” followed by ‟/Titles [ TitlesTastingNotes {2 2 getinterval} forall ] def”.
• With the glasses pages being A3 and the tasting-note pages being A4, GlassesOnSheets ≠GlassesOnTastingNotePages. Also unusually, GlassesClusteredOnVoteRecorders and GlassesClusteredOnCorkDisplay were re-ordered versions of GlassesOnTastingNotePages.
• PermittedPackingStyles contains only one possibility, an array: [ Â [0Â 0] [1Â 1] [2Â 0] [3Â 1] [4Â 0] [5Â 1] [6Â 0] [7Â 1] Â [0Â 2.2] [1Â 3.2] [2Â 2.2] [3Â 3.2] [4Â 2.2] [5Â 3.2] [6Â 2.2] [7Â 3.2] Â ]. (Usually PermittedPackingStyles contains contains multiple named arrangements including /RectangularDislocation, /PseudoHexagonal, and /SquareGrid.) But for the array possibility the code chooses the radius and x and y scaling factors, to fill the page less margins. The extra 0.2 in some of the array’s y values slightly separates the top two rows from the bottom two: before and after dinner. But even without this, observe that the ordering of the glasses would be different to that in a /PseudoHexagonal arrangement.
• FlightSeparationLines is an array of depth four holding the definitions of lines that separate flights. For the first time at least my first time this contains code. The code calculates half the distance between the Ni52c and D80 centres, and, to give the appearance of neatness, ensures that the line starts on the left the same distance below the D80. So the line starts at [/Left 8 -1.13324], which is on the left margin, at a height equal to the y-centre of circle 8 (as ‟8” is an integer), adjusted by the real × radius. (So ‟8” and ‟8.0” would do different things.) This real is stored in JDAW-Rs, so that it could also be used relative to the TV76 circle on the right.
• Finally FillTextPrintQuickerDistillSlower. With this false, distillation took 34 seconds. With it true, removing copies of FillTexts that were entirely clipped away, it took 1302 seconds, more than 38 × slower. The file size fell from 2,135,094 to 1,482,771 bytes, so a change of about -30%. (Indeed, the placenames weren’t used, and without them distillation would have taken only 199 seconds. Also removing the unused pre-pour sheets would have further reduced the time to only 48 seconds.)
Edit in January 2013: recently added to the code is the function HalfDistanceBetweenCentresProportionRadius, which simplifies part of the above to
Edit in autumn 2013: the handling of name variations has been made easier by the new parameters NamesVoteRecorder and its variants. PermittedPackingStyles has also been re-parameterised since summer ’12.
![Image](http://www.jdawiseman.com/2012/20120725_olympic_20121112.png)
![Image](http://www.jdawiseman.com/2012/20120725_olympic_20121112_mz48.png)
Code: Select all
/PeopleData [
[
(JdV)
[
{TypeOfPagesBeingRendered dup dup /PlaceName eq exch /VoteRecorder eq or exch /DecantingNotes eq or {/JDAW-CFS CurrentFontSize def CurrentFontName JDAW-CFS 3 div selectfont 0 JDAW-CFS 0.25 mul rmoveto} if}
(H.E. Dr )
{TypeOfPagesBeingRendered dup dup /PlaceName eq exch /VoteRecorder eq or exch /DecantingNotes eq or {CurrentFontName JDAW-CFS selectfont 0 JDAW-CFS -0.25 mul rmoveto} if}
{TypeOfPagesBeingRendered /VoteRecorder eq {[(J) {-0.09 Kern} (.)]} {[(J) {-0.03 Kern} (o) /atilde (o)]} ifelse}
( de V) {-0.15 Kern} (allera)
]
]
[
(TEB)
[
(Lord Boswell)
{TypeOfPagesBeingRendered dup dup /PlaceName eq exch /VoteRecorder eq or exch /DecantingNotes eq or not {( of Aynho)} if}
]
]
[ (CM) (Charles M.) ] % Charles Metcalfe
[ (AWE) (Alex E.) ] % Ambassador's Guest, Alex W. Ellis
[
(RB)
[(Roger B.) {TypeOfPagesBeingRendered /PlaceName ne {(, Esq)} if}]
] % Ambassador's Guest, Lord Roger Bramble, the Deputy Lieutenant of Greater London ?
[ (RLC) (Ray C.) ]
[ (THRA) [(T) {-0.08 Kern} (om A.)] ]
[ (DRT) [(Derek T) {-0.09 Kern} (.)] ]
[ (WS) [(W) {-0.12 Kern} (olfgang S.)] ]
[ (BMHR) (Ben R.) ]
[ [(JDA) {-0.06 Kern} (W)] [(J) {-0.03 Kern} (ulian W) {-0.12 Kern} (.)] ]
[ [(RA) {-0.06 Kern} (YC)] (Rob C.) ]
[ (OJMQ) [(Oscar Q) {-0.03 Kern} (.)] ] % -0.105
[ (ARK) (Alex K.) ]
[ (CRS) (Carl S.) ]
[ (PW) [(Phil W) {-0.12 Kern} (.)] ]
[ (GW) [(Giles W) {-0.12 Kern} (.)] ] % Giles Wigoder, no middle initial known, right-handed, no special dietary requirements other than an aversion to Pot Noodle
[
(GRJ) % The Right Reverend Graham R James (Bishop of Norwich)
[
{TypeOfPagesBeingRendered dup dup /PlaceName eq exch /VoteRecorder eq or exch /DecantingNotes eq or {/JDAW-CFS CurrentFontSize def CurrentFontName JDAW-CFS 3 div selectfont 0 JDAW-CFS 0.25 mul rmoveto} if}
{TypeOfPagesBeingRendered /TastingNotes eq {(The Right Reverend )} {(T) {-0.09 Kern} (.R.R. )} ifelse}
{TypeOfPagesBeingRendered dup dup /PlaceName eq exch /VoteRecorder eq or exch /DecantingNotes eq or {CurrentFontName JDAW-CFS selectfont 0 JDAW-CFS -0.25 mul rmoveto} if}
{TypeOfPagesBeingRendered /VoteRecorder eq {(G.)} {(Graham)} ifelse}
( James)
{TypeOfPagesBeingRendered /TastingNotes eq {(, the 71) {SuperscriptOn} (st) {SuperscriptOff} ( Bishop of Norwich)} if}
]
]
[ (LB-S) (Lorenzo B.-S.) ] % Lorenzo Bakewell-Stone
[ (SF) [(Steve F) {-0.12 Kern} (.)] ] % Steve Filbey
[ (QA) (Quentin A.) ] % Quentin Archer
[ (RC) [/quoteleft (Oz) /quoteright ( C.)] ] % Oz Clarke
[ () () ] % Industry guest
[ () () ] % Industry guest
] def
/PortData [
% YYYY City Abbreviation Type Subtitle shipper Circlearray shipper
[ (1948) (London) (Mz) () (Martinez) dup ]
[ (1952) (Helsinki) (Ni) (Colheita) (Niepoort) dup ]
[ (1956) (Melbourne) (Ni) (Experimental) (Niepoort) dup ]
[ (1960) (Rome) (Cr) () (Croft) dup ]
[ (1964) [(T) {-0.06 Kern} (okyo)] (GM) () (Malvedos) (Graham Malvedos) ]
[ (1968) (Mexico City) (TV) () (Guimaraens) (Fonseca Guimaraens) ]
[ (1972) (Munich) (OBV) () (Offley Boa Vista) dup ]
[ (1976) (Montreal) (RP) () [(V) {-0.06 Kern} (argellas)] [(T) {-0.08 Kern} (aylor Quinta de ) 4 index] ]
[ (1980) (Moscow) (D) () (Dow) dup ]
[ (1984) (Los Angeles) (WC) () (Cavadinha) [(W) {-0.09 Kern} (arre Quinta da Cavadinha)] ]
[ (1988) (Seoul) (Rs) () (de la Rosa) [(Quinta ) 2 index] ]
[ (1992) (Barcelona) (T) () (Burmester) dup ]
[ (1996) (Atlanta) (V) () (Vesuvio) [(Quinta do V) {-0.15 Kern} (esuvio)] ]
[ (2000) (Sydney) (C) () (Delaforce) dup ]
[ (2004) (Athens) (Cs) () (Cockburn Canais) (Cockburn Quinta dos Canais) ]
[ (2008) (Beijing) (Qv) () (Quevedo) [1 index ( Quinta Vale D) /quoteright {-0.12 Kern} (Agodinho)] ]
] def
/TitlesTastingNotes [ PortData {0 get} forall ] def
/Titles [ TitlesTastingNotes {2 2 getinterval} forall ] def
/Overtitles [ PortData {[exch dup 4 get exch 3 get dup length 0 gt {( ) exch} {pop} ifelse]} forall ] def
/Circlearrays [ PortData {[ exch dup 5 get exch dup 3 get dup length 0 eq {pop} {exch} ifelse 0 get ]} forall ] def
/FillTexts [ PortData {1 get} forall ] def
/Belowtitles [ Titles length {()} repeat ] def
/SubtitlesTastingNotes Overtitles def
/Names [ PeopleData {1 get} forall ] def
/PaperType /A3 def % /A4 /A3 /B4 /USL /USLegal /USL2 [SmallerPts LargerPts]
/Orientation /Landscape def % /Landscape /Portrait
/HeaderLeftText [(The P) {-0.04 Kern} (ortuguese Embassy, London, W) {-0.07 Kern} (ednesday 25) {SuperscriptOn} (th) {SuperscriptOff} ( July 2012)] def
/HeaderCenterText [(P) {-0.04 Kern} (ort from the Y) {-0.12 Kern} (ears of Summer Olympics)] def
/ExternalLinks [
(http://www.theportforum.com/viewtopic.php?t=4567&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/2012/20120725_olympic.pdf) (Latest version this placemat)
] def
/PlaceNamesNumCopies 1 def
/PrePourNumCopies 2 def
/CorkDisplay true def
/CorkDisplayNumCopies 2 def
/TitlesFont /Baskerville-SemiBold def % /Optima-Bold
/OvertitlesFont /LiberateBold def % /LiberateNormal /LiberateBold /LiberateExtendedNormal /Harrington /LucyNormal
/GlassesOnSheets [
[ 0 1 Titles length 1 sub {} for ]
] def % /GlassesOnSheets
/GlassesOnTastingNotePages [
[8 12 0 4] {[ exch dup 3 add 1 exch {} for ]} forall
] def % For no tasting note pages at all use /GlassesOnTastingNotePages [] def
/GlassesClusteredOnVoteRecorders [
[ [2 3 0 1] {GlassesOnTastingNotePages exch get} forall ]
] def % triple-depth array, same length as VoteRecorderTopTexts and VoteRecorderShowTotalRow
/VoteRecorderTopTexts [ % Must be same length as GlassesClusteredOnVoteRecorders, each sub-array containing some number of TopTexts
[ (Wine Of The Night) (Q:) ]
] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderShowTotalRow [ GlassesClusteredOnVoteRecorders length {false} repeat ] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderOrientation /Landscape def
/GlassesClusteredOnCorkDisplay [ [ GlassesOnTastingNotePages aload pop 4 2 roll ] ] def
/PermittedPackingStyles [ [
0 1 7 {[ exch dup 2 mod ]} for
0 1 7 {[ exch dup 2 mod 2.2 add ]} for
] ] def
/FlightSeparations true def
/FlightSeparationLines
[
[
[
[/Left 8
{
/JDAW-Rs
GlassPositions SheetNum get 1 get aload pop
GlassPositions SheetNum get 8 get aload pop
3 -1 roll sub dup mul 3 1 roll sub dup mul add sqrt Radii SheetNum get div 2 div
def
JDAW-Rs neg
}
]
[1 8] [1 10] [3 10] [3 12] [5 12] [5 14] [7 14]
[/Right 7 {JDAW-Rs}]
]
] % SheetNum = 0
] def % /FlightSeparationLines
/ColourSchemeTitles /Black def % /MidGrey /Black
/ColourSchemeOvertitles /Black def % /MidGrey /Black
/FillTitles true def
/FillOvertitles false def
/FillTextPlacename {PeopleData NameNum get 0 get} def
/NamesFontSizeMin 15 def
/NamesFontSizeMax NamesFontSizeMin def
/VerticalMiddlingStringTitles (N) def % Benchmark characters
/FillTextPrintQuickerDistillSlower true def
The Olympic placemats were more complicated than is typical.
• Data is mostly in two arrays, PeopleData and PortData, and is decanted from there into the parameter arrays. For large tastings this can be easier, as it keeps together the relevant items of Titles, Overtitles, FillTexts, etc.
• Some of the people have complicated names, containing code that tests TypeOfPagesBeingRendered and chooses a suitably shortened version. The compound strings to be rendered themselves contain code, kerning, shrinking and superscripting.
• These data are decanted into the parameters with lines like ‟/TitlesTastingNotes [ PortData {0 get} forall ] def” followed by ‟/Titles [ TitlesTastingNotes {2 2 getinterval} forall ] def”.
• With the glasses pages being A3 and the tasting-note pages being A4, GlassesOnSheets ≠GlassesOnTastingNotePages. Also unusually, GlassesClusteredOnVoteRecorders and GlassesClusteredOnCorkDisplay were re-ordered versions of GlassesOnTastingNotePages.
• PermittedPackingStyles contains only one possibility, an array: [ Â [0Â 0] [1Â 1] [2Â 0] [3Â 1] [4Â 0] [5Â 1] [6Â 0] [7Â 1] Â [0Â 2.2] [1Â 3.2] [2Â 2.2] [3Â 3.2] [4Â 2.2] [5Â 3.2] [6Â 2.2] [7Â 3.2] Â ]. (Usually PermittedPackingStyles contains contains multiple named arrangements including /RectangularDislocation, /PseudoHexagonal, and /SquareGrid.) But for the array possibility the code chooses the radius and x and y scaling factors, to fill the page less margins. The extra 0.2 in some of the array’s y values slightly separates the top two rows from the bottom two: before and after dinner. But even without this, observe that the ordering of the glasses would be different to that in a /PseudoHexagonal arrangement.
• FlightSeparationLines is an array of depth four holding the definitions of lines that separate flights. For the first time at least my first time this contains code. The code calculates half the distance between the Ni52c and D80 centres, and, to give the appearance of neatness, ensures that the line starts on the left the same distance below the D80. So the line starts at [/Left 8 -1.13324], which is on the left margin, at a height equal to the y-centre of circle 8 (as ‟8” is an integer), adjusted by the real × radius. (So ‟8” and ‟8.0” would do different things.) This real is stored in JDAW-Rs, so that it could also be used relative to the TV76 circle on the right.
• Finally FillTextPrintQuickerDistillSlower. With this false, distillation took 34 seconds. With it true, removing copies of FillTexts that were entirely clipped away, it took 1302 seconds, more than 38 × slower. The file size fell from 2,135,094 to 1,482,771 bytes, so a change of about -30%. (Indeed, the placenames weren’t used, and without them distillation would have taken only 199 seconds. Also removing the unused pre-pour sheets would have further reduced the time to only 48 seconds.)
Edit in January 2013: recently added to the code is the function HalfDistanceBetweenCentresProportionRadius, which simplifies part of the above to
Code: Select all
/FlightSeparationLines
[
[
[
[/Left 8 {1 8 HalfDistanceBetweenCentresProportionRadius neg}]
[1 8] [1 10] [3 10] [3 12] [5 12] [5 14] [7 14]
[/Right 7 {7 14 HalfDistanceBetweenCentresProportionRadius}]
]
] % SheetNum = 0
] def % /FlightSeparationLines
Re: Parameters for the placemat software
Tuesday 4th September 2012, Bung Hole Blinder (placemats, planning and arrangements).
Software version 23:30 Monday 3rd September 2012.
• The names were auto-generated from the Circlearrays with a nifty stack manipulation that removes duplicates. Careful though: [(JDAW)] [(JDAW)] eq returns false; [(JDAW)] dup eq returns true.
• Unusual values of ShapesStarsPointsAndStepsArray and ShapesAverageSeparation.
• Also unusually, the margins were changed from the default value of 30.
![Image](http://www.jdawiseman.com/2012/20120904_20121112_a.png)
![Image](http://www.jdawiseman.com/2012/20120904_20121112_b.png)
Code: Select all
/Circlearrays [
[ (AHB) ]
[ (DRT) ]
[ (PW) ]
[ [(JDA) {-0.08 Kern} (W)] (Older) ]
dup [ exch 0 get [(Y) {-0.09 Kern} (ounger)] ]
[ (+) ]
[ [(RA) {-0.08 Kern} (Y) {-0.03 Kern} (C)] (One) ]
dup [ exch 0 get [(T) {-0.09 Kern} (wo)] ]
dup [ exch 0 get (Three) ]
dup [ exch 0 get (Four) ]
] def
/Titles [ Circlearrays {0 get} forall ] def
/Belowtitles [ Circlearrays {dup length 1 le {pop ()} {1 get} ifelse} forall ] def
/Names [
Circlearrays {dup length 0 gt {0 get dup length 1 gt {counttomark 1 sub -1 1 {index 1 index eq {pop exit} if} for} {pop} ifelse} {pop} ifelse} forall
()
] def
/HeaderLeftText [(T) {-0.09 Kern} (uesday 4) {SuperscriptOn} (th) {SuperscriptOff} ( September 2012)] def
/HeaderCenterText [(Bung Hole Blinder)] def
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=6201&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/2012/20120904.pdf) (Latest version this placemat)
] def
/TitlesFont /IkariusADFStd-Bold def
/FontSizesRatioTitlesMin 999 def
/ColourSchemeTitles /MidGrey def % /MidGrey /Black
/ExclusionAnnulusProportionInnerRadiusTitlesAboveBelow 0.025 def
/PermittedPackingStyles [ /RectangularDislocation {NG 5 eq {/None} {/PseudoHexagonal} ifelse} ] def % Put, in order of preference, any of /PseudoHexagonal /SquareGrid /RectangularDislocation /RectangularDislocationV /TwoRowsOrTwoColumns /GaiaElegant /Gaia /Irregular /IrregularMirror /IrregularPortrait /IrregularLandscape /IrregularMirrorPortrait /IrregularMirrorLandscape
/WaterCountTarget 12 def % intended number of tickable squares
/GlassesClusteredOnVoteRecorders [
{GlassesOnTastingNotePages} dup
] def % triple-depth array, same length as VoteRecorderTopTexts and VoteRecorderShowTotalRow
/VoteRecorderTopTexts [ % Must be same length as GlassesClusteredOnVoteRecorders, each sub-array containing some number of TopTexts
[ (What is it?) ]
[ (Wine Of The Night) (Q:) ]
] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderShowTotalRow [ true false ] def % Must be same length as GlassesClusteredOnVoteRecorders
/ShapesInTitles true def
/ShapesToUse [/Star] def % At least one of: /Flower /Star
/ShapesStarsPointsAndStepsArray [ [7 2] dup [7 3] dup dup dup dup ] def % Less-polygonal more-pointy: [[3 1.318] [4 1.792] [5 2.278] [6 2.77] [7 3.265] [8 3.762] [9 4.259]]
/ShapesAverageSeparation {7 TypeOfPagesBeingRendered /PlaceName eq {PlaceNamesDetailsScalingFactor mul} if} def
/MarginL 12 def % Left
/MarginR {MarginL} def % Right
/MarginT 18 def % Top
/MarginB {MarginL} def % Bottom
• The names were auto-generated from the Circlearrays with a nifty stack manipulation that removes duplicates. Careful though: [(JDAW)] [(JDAW)] eq returns false; [(JDAW)] dup eq returns true.
• Unusual values of ShapesStarsPointsAndStepsArray and ShapesAverageSeparation.
• Also unusually, the margins were changed from the default value of 30.
[url=http://www.theportforum.com/viewtopic.php?p=51744#p51744]Here[/url] jdaw1 wrote:Printed, though the margins were too small for the printer used.
Re: Parameters for the placemat software
Monday 24th September 2012, Warre and Fonseca, Warre versus Fonseca, 1955 to 1955 (placemats, planning and arrangements).
It was a bug, which has been fixed.PhilW, who made the placemats, wrote:Comments regarding use:Code: Select all
% Warre's Logo /warre_logo_source_width 168 def /warre_logo_source_height 138 def /warre_logo_source_bpp 8 def % /warre_logo { warre_logo_source_width warre_logo_source_height warre_logo_source_bpp % dimensions of source image [ warre_logo_source_width 0 0 warre_logo_source_height 0 0 ] % coordinate transformation matrix {< %***binary data omitted*** >} image } def % /warre_logo % Fonseca Logo /fonseca_logo_source_width 222 def /fonseca_logo_source_height 81 def /fonseca_logo_source_bpp 8 def % /fonseca_logo { fonseca_logo_source_width fonseca_logo_source_height fonseca_logo_source_bpp % dimensions of source image [ fonseca_logo_source_width 0 0 fonseca_logo_source_height 0 0 ] % coordinate transformation matrix {< %***binary data omitted*** >} image } def % /fonseca_logo /warre_logo_dest_width 168 def /warre_logo_dest_height 138 def /warre_logo_below_header_space 5 def /warre_logo_from_margin_space 9 def /fonseca_logo_dest_width 172 def /fonseca_logo_dest_height 70 def /fonseca_logo_below_header_space 15 def /fonseca_logo_from_margin_space 9 def /PlaceFonsecaLogoTopLeft { MgnL fonseca_logo_from_margin_space add PageHeight MgnT sub fonseca_logo_below_header_space sub fonseca_logo_dest_height sub translate fonseca_logo_dest_width fonseca_logo_dest_height scale fonseca_logo } def % /PlaceProducerLogoTopLeft /PlaceWarreLogoTopRight { PageWidth MgnR sub warre_logo_dest_width sub warre_logo_from_margin_space sub PageHeight MgnT sub warre_logo_below_header_space sub warre_logo_dest_height sub translate warre_logo_dest_width warre_logo_dest_height scale warre_logo } def % /PlaceProducerLogoTopRight /PlaceProducerLogo { SheetNum 1 eq { PlaceFonsecaLogoTopLeft } { PlaceWarreLogoTopRight } ifelse } def % /PlaceProducerLogo /HeaderLeftText [(London, Monday 24) {SuperscriptOn} (th) {SuperscriptOff} ( September 2012)] def /HeaderCenterText [(W){-0.09 Kern}(arre's vs Fonseca, double mini vertical)] def /HeaderRightText [ (www) {-0.092 Kern} (.) {-0.092 Kern} (ThePortForum.com, ) (www) {-0.092 Kern} (.jdawiseman.com) ] def /ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ... (http://www.theportforum.com/viewtopic.php?f=3&t=5944) (Thread on ThePortForum.com) (http://www.hallarn.com/placemats/120924_WarreFonseca.pdf) (Placemat creation software) ] def % /ExternalLinks /Circlearrays [ [ [(W) {-0.09 Kern} (arre) /quoteright (s)] (1955) ] [ [(W) {-0.09 Kern} (arre) /quoteright (s)] (1960) ] [ [(W) {-0.09 Kern} (arre) /quoteright (s)] (1963) ] [ [(W) {-0.09 Kern} (arre) /quoteright (s)] (1966) ] [ [(W) {-0.09 Kern} (arre) /quoteright (s)] (1970) ] [ [(W) {-0.09 Kern} (arre) /quoteright (s)] (1977) ] [ [(W) {-0.09 Kern} (arre) /quoteright (s)] (1985) ] [ (Fonseca) (1955) ] [ (Fonseca) (1960) ] [ (Fonseca) (1963) ] [ (Fonseca) (1966) ] [ (Fonseca) (1970) ] [ (Fonseca) (1977) ] [ (Fonseca) (1985) ] ] def /Titles [ (W55) (W60) (W63) (W66) (W70) (W77) (W85) (F55) (F60) (F63) (F66) (F70) (F77) (F85) ] def /Belowtitles [ () () () () () () () () () () () () () () ] def /Names [ [(PW)] [(RAYC)] [(JDA){-0.08 Kern}(W)] [(DRT)] [(WS)] [(CS)] [(CMAG)] [(THRA)] [(AHB)] [(MW)] [(BMHR)] [(spare1)] [(spare2)] ] def /GlassesOnSheets [ [ 0 1 2 3 4 5 6 ] [ 7 8 9 10 11 12 13 ] ] def % /GlassesOnSheets /MarginL 12 def % Left 11x 12 /MarginR 13 def % Right 12x 13 /MarginT 19 def % Top 18x 19 /MarginB 13 def % Bottom 12x 13 /PermittedPackingStyles [ [ [2 5] [0 4] [4 4] [2 3] [0 2] [4 2] [2 1] ] % enforce desired layout ] def /ExclusionAnnulusProportionInnerRadiusTitlesAboveBelow 0.15 def /PaintBackgroundCode { TypeOfPagesBeingRendered /Glasses eq { ThisPageDecanterLabels not { % Draw path lines between glasses 0 1 MakePathConnectingGlasses 1 2 MakePathConnectingGlasses 3 2 MakePathConnectingGlasses 3 4 MakePathConnectingGlasses 4 5 MakePathConnectingGlasses 6 5 MakePathConnectingGlasses 6 setlinewidth 0.5 setgray 0 setlinecap stroke % Add Producer Logo to the page PlaceProducerLogo } if % ThisPageDecanterLabels not } if % TypeOfPagesBeingRendered /Glasses eq } def % /PaintBackgroundCode /ThePortForumIconColour true def /WaterCounts true def /WaterCountsOverrideShowEverySheet false def /WaterCountTarget 14 def /WaterCountMaxRowLengths [ 7 5 3 ] def
- Margins were selected as absolute minimum values for which output was not cropped by the printer, in this case a Dell 3110cn. This was in order to maximise glass sizes, which were expected to be borderline.
- Glass size did work on the night, but was defintely the borderline case (Radius=113.025) for glasses at TBH.
- Layout was enforced since with minor margin change the default layout was sometimes varying from that intended (rows of 1-2-1-2-1 wanted, default varied between this and 2-2-1-2).
- Logos were created from images converted to .eps in PaintShopPro, then manually adjusted for use here.
- Water count boxes appear on each glasses sheet (bug?).
Re: Parameters for the placemat software
Tuesday 13th November 2012, A Smattering of Graham and Malvedos (placemats, planning and arrangements).
![Image](http://www.jdawiseman.com/2012/20121113_graham_20121112.png)
(There are two A3 pages. The right-hand one has been guillotined, and attached to the left, slightly overlapping, with double-sided sticky tape. The green line shows the join.)Software version 19:00 Monday 12th November 2012.
Lots going on.
• Typically, if the same string is to be used for many ports, I assign it to a variable name. That helps with changes, including the addition of kerning.
• The Circlearrays used these strings, a lot.
• The Titles, Belowtitles, Abovetitles, Overtitles, TitlesTastingNotes, and SubtitlesTastingNotes were then derived from the Circlearrays. Depending on how many cases there are, that can be intricate.
• The glass decoration then derived from these observe the code in InlineTitles and InlineTitlesMaxNumberContours.
• The layout on the A3 glasses pages was unusual. The problem was a shortage of table space. We just didn’t have room for 2×A3 each, but the 22 glasses wouldn’t quite fit on 1×A3 + 1×A4. So two A3s were to be used, the right one to be trimmed and the whole held together with double-sided sticky tape. That meant the headers weren’t constant. For simplicity three constants (HeaderLocation, HeaderTastingName, HeaderLinks) were def’d, and then HeaderRightText, HeaderLeftText, and HeaderCenterText set to code that chose between one of these and blank. Also the position of centre header needed to be changed, for which the code had been altered to add the parameter HeaderFooterCenterRelativeX. This was then assigned to some 132 characters of code, the complication of which might suggest that the form of this parameter was not optimally chosen. (See software thread.)
• The strange layout of the pages required an unusual value for GlassesOnSheets (note the pseudo-graphical layout), and a different value for GlassesOnTastingNotePages.
• The PermittedPackingStyles for the first sheet was /PseudoHexagonal, with both RowsMinNum and RowsMaxNum set to 4. But the second sheet was more complicated, circles being laid in a fixed topology, and then shunted right ([ [-1 3 3 3] [1 3 3 3] [3 3] [0 2 3 2] [2 2 3 2] [-1 1 3 1] [1 1 3 1] [3 1] [0 0 3 0] [2 0 3 0] ]).
• The layout semi-compelled WaterCountsOverrideShowEverySheet to be false. In that it would have compelled had there been any left-handers present.
• Having recently added the parameter CircletextsSameFontSizeIfRadiiShrunkToBeSame, there would be good behaviour from setting /CircletextsMinCopies 4 def. So I did.
• Because of the shortage of space the margins were slightly trimmed.
• There’s an imperfection in the pre-pour sheets, as the ’63 and ’83 appear twice, later fixed:
![Image](http://www.jdawiseman.com/2012/20121113_graham_20121112.png)
(There are two A3 pages. The right-hand one has been guillotined, and attached to the left, slightly overlapping, with double-sided sticky tape. The green line shows the join.)
Code: Select all
/Graham (Graham) def
/MalvedosShort (Malvedos) def
/MalvedosLong (Graham Malvedos) def
/JDAW [(JDA) {-0.04 Kern} (W)] def
/RAYC [(RA) {-0.04 Kern} (YC)] def
/Circlearrays [
[ (1942) Graham [(MW & DRT & ) JDAW] ]
[ (1955) Graham (THRA) ]
[ (1960) Graham ]
[ (1963) Graham (WS) ]
[ (1965) MalvedosLong (AP) ]
[ (1966) Graham ]
[ (1968) MalvedosLong ]
[ (1970) Graham ]
[ (1975) Graham (PW) ]
[ (1976) MalvedosLong ]
[ (1977) Graham (Griff) ]
[ (1978) MalvedosLong ]
[ (1979) MalvedosLong (Magnum) (TS-C) ]
[ (1980) Graham (AHB) ]
[ (1983) Graham ]
[ (1984) MalvedosLong ]
[ (1985) [Graham] (Crusted) ]
[ (1985) Graham ]
[ (1987) MalvedosLong (JGH) ]
[ (1990) MalvedosLong JDAW ]
[ (1991) Graham (PW) ]
[ (1994) Graham ]
] def
/Titles [ Circlearrays {0 get dup length 2 sub 2 exch getinterval} forall ] def
/Belowtitles [ Circlearrays {1 get dup Graham ne {pop ()} if} forall ] def
/Abovetitles [ Circlearrays {dup length 3 ge {2 get dup dup (Crusted) ne exch (Magnum) ne and {pop ()} if} {pop ()} ifelse} forall ] def
/Overtitles [ Circlearrays {1 get dup Graham eq {pop ()} if} forall ] def
/TitlesTastingNotes [ Circlearrays {0 get} forall ] def
/SubtitlesTastingNotes [ 0 1 Circlearrays length 1 sub {dup Abovetitles exch get dup length 0 gt {exch pop} {pop Circlearrays exch get 1 get dup MalvedosLong eq {pop MalvedosShort} if} ifelse} for ] def
/Names [
(TS-C) (CJ) RAYC (THRA) (WS) (AP) (AHB) JDAW (DRT) (MW) (JGH) (PW)
(CRS)
(SCP)
()
()
] def
/PaperType /A3 def
/Orientation /Landscape def
/ThePortForumIconPlacement {SheetNum NamesIsLeftHander NameNum get {NumSheets 1 sub} {0} ifelse eq {/LowerNonWaterCount} {/None} ifelse} def % /None
/HeaderLocation [(The Bung Hole, Tuesday 13) {SuperscriptOn} (th) {SuperscriptOff} ( November 2012)] def
/HeaderTastingName (A Smattering of Graham and Malvedos) def
/HeaderLinks [
(www) {-0.092 Kern} (.) {-0.092 Kern} (ThePortForum.com, )
% (www) {-0.092 Kern} (.) {-0.12 Kern} (W) {-0.092 Kern} (orldOf) {+0.12 Kern} (Port.de, )
% (www.jacob-head.com/port,)
(www) {-0.092 Kern} (.jdawiseman.com)
] def
/HeaderRightText {TypeOfPagesBeingRendered /Glasses eq {SheetNum 1 eq} {true} ifelse {HeaderLinks} {()} ifelse} def
/HeaderLeftText {TypeOfPagesBeingRendered /Glasses eq {SheetNum 0 eq} {true} ifelse {HeaderLocation} {()} ifelse} def
/HeaderCenterText {TypeOfPagesBeingRendered /Glasses eq {SheetNum 0 eq} {true} ifelse {HeaderTastingName} {()} ifelse} def
/HeaderFooterCenterRelativeX {TypeOfPagesBeingRendered /Glasses eq {GlassPositions SheetNum get 6 get 0 get MgnL sub PageWidth MgnL MgnR add sub div} {0.5} ifelse} def
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=6274&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/2012/20121113_graham.pdf) (Latest version this placemat)
(http://www.grahams-port.com/) (Graham\220s Port)
(http://www.davy.co.uk/bunghole/) (The Bung Hole)
(http://www.streetmap.co.uk/map.srf?x=530848&y=181628&pc=WC1V+6DT) (London WC1V 6DT)
] def
/PrePourNumCopies 1 def
/DecantingNotesNumCopies 1 def
/CorkDisplay true def
/StickyLabelsNumCopies 1 def
/StickyLabelsTypes [0] def
/TitlesFont /Tahoma-Bold def
/OvertitlesFont /LiberateBold def
/CircletextFont /BookmanOldStyle def
/AbovetitlesFont OvertitlesFont def
/BelowtitlesFont OvertitlesFont def
/OvertitleMaxFontSizeProportionTitles 0.5 def
/FontSizesRatioTitlesMin 99 def
/FontSizesRatioAboveBelowOverMin 99 def
/GlassesOnSheets [
[
0 1 2 3
6 7 8
11 12 13 14
17 18 19
]
[
3 4 5
9 10
14 15 16
20 21
]
] def % /GlassesOnSheets
/GlassesOnTastingNotePages [
[ 0 Titles length 1 sub /e exch def /s exch def s 1 e {dup e lt e s sub 6 ge and {dup s sub e s sub 1 add dup 6 div ceiling cvi 3 -1 roll 3 copy mul exch idiv 4 1 roll 1 add mul exch idiv ne {][} if} if} for ]
] def
/PermittedPackingStyles [ {SheetNum 1 eq {[ [-1 3 3 3] [1 3 3 3] [3 3] [0 2 3 2] [2 2 3 2] [-1 1 3 1] [1 1 3 1] [3 1] [0 0 3 0] [2 0 3 0] ]} {/PseudoHexagonal} ifelse} ] def % Put, in order of preference, any of /PseudoHexagonal /SquareGrid /RectangularDislocation /RectangularDislocationV /TwoRowsOrTwoColumns /GaiaElegant /Gaia /Irregular /IrregularMirror /IrregularPortrait /IrregularLandscape /IrregularMirrorPortrait /IrregularMirrorLandscape
/WaterCountsOverrideShowEverySheet false def
/CircletextsMinCopies 4 def
/InlineTitles {Overtitles WithinTitles get length 0 gt} def
/InlineTitlesMaxNumberContours {Abovetitles WithinTitles get (Crusted) eq {1} {12} ifelse} def
/InlineAbovetitles false def
/InlineBelowtitles false def
/RowsMinNum 4 def
/RowsMaxNum 4 def
/MarginL 18 def % Left
/MarginT 27 def % Top
Lots going on.
• Typically, if the same string is to be used for many ports, I assign it to a variable name. That helps with changes, including the addition of kerning.
• The Circlearrays used these strings, a lot.
• The Titles, Belowtitles, Abovetitles, Overtitles, TitlesTastingNotes, and SubtitlesTastingNotes were then derived from the Circlearrays. Depending on how many cases there are, that can be intricate.
• The glass decoration then derived from these observe the code in InlineTitles and InlineTitlesMaxNumberContours.
• The layout on the A3 glasses pages was unusual. The problem was a shortage of table space. We just didn’t have room for 2×A3 each, but the 22 glasses wouldn’t quite fit on 1×A3 + 1×A4. So two A3s were to be used, the right one to be trimmed and the whole held together with double-sided sticky tape. That meant the headers weren’t constant. For simplicity three constants (HeaderLocation, HeaderTastingName, HeaderLinks) were def’d, and then HeaderRightText, HeaderLeftText, and HeaderCenterText set to code that chose between one of these and blank. Also the position of centre header needed to be changed, for which the code had been altered to add the parameter HeaderFooterCenterRelativeX. This was then assigned to some 132 characters of code, the complication of which might suggest that the form of this parameter was not optimally chosen. (See software thread.)
• The strange layout of the pages required an unusual value for GlassesOnSheets (note the pseudo-graphical layout), and a different value for GlassesOnTastingNotePages.
• The PermittedPackingStyles for the first sheet was /PseudoHexagonal, with both RowsMinNum and RowsMaxNum set to 4. But the second sheet was more complicated, circles being laid in a fixed topology, and then shunted right ([ [-1 3 3 3] [1 3 3 3] [3 3] [0 2 3 2] [2 2 3 2] [-1 1 3 1] [1 1 3 1] [3 1] [0 0 3 0] [2 0 3 0] ]).
• The layout semi-compelled WaterCountsOverrideShowEverySheet to be false. In that it would have compelled had there been any left-handers present.
• Having recently added the parameter CircletextsSameFontSizeIfRadiiShrunkToBeSame, there would be good behaviour from setting /CircletextsMinCopies 4 def. So I did.
• Because of the shortage of space the margins were slightly trimmed.
• There’s an imperfection in the pre-pour sheets, as the ’63 and ’83 appear twice, later fixed:
The author of [url=http://www.jdawiseman.com/papers/placemat/placemat.html#prepour]the manual[/url] wrote:There can, rarely, be an additional complication. If a placemat is made from several A3 placemats, guillotined and overlapped !, then the same glass will appear on two sheets. But it should not have twice as many pre-pour sheets. This technicality is fixed with PrePourRemoveDuplicatesByWithinTitles, which, if true, removes duplicates, equivalence being determined by GlassesOnSheets having the same value of WithinTitles. The guillotine-and-overlap trick also messes with the order of the pre-pour sheets, sometimes fixable with PrePourSortByWithinTitles.
Re: Parameters for the placemat software
Thursday 13th December 2012, The Unknown Shipper and His Peculiar Friends, at The Bell (‘placemats’, being TN sheets and sticky labels, planning and arrangements).
Software version 19:30 Sunday 25th November 2012.
The array NumberWords holds words as numbers, item 0 being (One). That drives much of the data.
There is a trickiness. The sticky labels can only contain copies of what is on the glasses sheets. The TN sheets have, faded, copies of what is on the glasses sheets. But there are no glasses sheets! Oh yes there are, but zero copies are shown: /NonDecanterLabelGlassesNumCopies 0 def. Also observe /StickyLabelsOrientationAutomatic {[true false] StickyLabelsTypeThis get} def, which allows automatic rotation of the bottle labels (2×4 on A4) but not of the glass labels (5×13).
![Image](http://www.jdawiseman.com/2012/20121213_bell_2x4.png)
![Image](http://www.jdawiseman.com/2012/20121213_bell_5x13.png)
Code: Select all
/NumberWords [
(One)
[(T) {CurrentFontSize -0.09 mul 0 rmoveto} (wo)]
(Three)
[(F) {CurrentFontSize -0.09 mul 0 rmoveto} (our)]
(Five) (Six) (Seven) (Eight) (Nine)
[(T) {CurrentFontSize -0.09 mul 0 rmoveto} (en)]
(Eleven)
[(T) {CurrentFontSize -0.09 mul 0 rmoveto} (welve)]
(Thirteen)
[(F) {CurrentFontSize -0.09 mul 0 rmoveto} (ourteen)]
(Fifteen) (Sixteen) (Seventeen) (Eighteen) (Nineteen)
[(T) {CurrentFontSize -0.09 mul 0 rmoveto} (wenty)]
[(T) {CurrentFontSize -0.09 mul 0 rmoveto} (wenty-One)]
[(T) {CurrentFontSize -0.09 mul 0 rmoveto} (wenty-T) {CurrentFontSize -0.09 mul 0 rmoveto} (wo)]
[(T) {CurrentFontSize -0.09 mul 0 rmoveto} (wenty-Three)]
[(T) {CurrentFontSize -0.09 mul 0 rmoveto} (wenty-F) {CurrentFontSize -0.09 mul 0 rmoveto} (our)]
[(T) {CurrentFontSize -0.09 mul 0 rmoveto} (wenty-Five)]
[(T) {CurrentFontSize -0.09 mul 0 rmoveto} (wenty-Six)]
] def % /NumberWords
/Overtitles NumberWords 0 26 getinterval def
/Titles [ 1 1 Overtitles length {5 string cvs} for ] def
/Circlearrays [ 0 1 Overtitles length 1 sub {[ exch dup Overtitles exch get exch Titles exch get ]} for ] def
/Belowtitles [ Titles length {()} repeat ] def
/SubtitlesTastingNotes Overtitles def
/Names [
(Dirk)
[(T) {-0.04 Kern} (om)]
(Ray) (Alex) (Christopher) (Julian) (Jacob) (Axel) (Phil) (Rob)
[(Wolfgang)]
()
] def
/TastingNotesCirclesBehind true def
/HeaderLeftText [(The Bell, Thursday 13) {SuperscriptOn} (th) {SuperscriptOff} ( December 2012)] def
/HeaderCenterText [(The Even More Familiar Unknown Shipper and His Peculiar Friends)] def
/ExternalLinks [
(http://www.theportforum.com/viewtopic.php?t=5914&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/2012/20121213_bell.pdf) (Latest version this placemat)
(http://www.thebellatwenden.co.uk/) (The Bell, Wendens Ambo, Saffron Walden)
(http://www.streetmap.co.uk/map.srf?x=551093&y=236398&pc=CB11+4JY) (Map, CB11 4JY)
] def
/NonDecanterLabelGlassesNumCopies 0 def
/StickyLabelsNumCopies {StickyLabelsTypeThis 0 eq {2} {1} ifelse} def
/TitlesFont /Tahoma-Bold def
/OvertitlesFont /Harrington def
/CircletextFont /Tahoma def
/HeaderFont /Tahoma def
/FontSizesRatioTitlesMin 99 def
/FontSizesRatioAboveBelowOverMin 99 def
/StickyLabelsOrientationAutomatic {[true false] StickyLabelsTypeThis get} def
/GlassesClusteredOnVoteRecorders [ {GlassesOnTastingNotePages} dup ] def
/VoteRecorderTopTexts [
[
(What is it?)
]
[
(Wine Of The Night)
[/quoteleft (Peculiar) /quoteright ( Of The Night)]
[/quoteleft (Unknown) /quoteright ( Of The Night)]
(Non-Port Of The Night)
]
] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderShowTotalRow [ true false ] def % Must be same length as GlassesClusteredOnVoteRecorders
The array NumberWords holds words as numbers, item 0 being (One). That drives much of the data.
There is a trickiness. The sticky labels can only contain copies of what is on the glasses sheets. The TN sheets have, faded, copies of what is on the glasses sheets. But there are no glasses sheets! Oh yes there are, but zero copies are shown: /NonDecanterLabelGlassesNumCopies 0 def. Also observe /StickyLabelsOrientationAutomatic {[true false] StickyLabelsTypeThis get} def, which allows automatic rotation of the bottle labels (2×4 on A4) but not of the glass labels (5×13).
Re: Parameters for the placemat software
Friday 22nd March 2013, Taylor Vertical, at The Bung Hole (placemats, planning and arrangements, review of the evening).
![Image](http://www.jdawiseman.com/2013/20130322_20120312_placemat.jpg)
Software version: 18:00 Friday 15th March 2013.
Lots happening.
• Various strings were used multiple times, so given identities (taylor, specialquintaShort, vargellasShort, terrafeitaShort, specialquintaLong, vargellasLong, terrafeitaLong).
• As is usual, much of the wine-specific action driven by the data in Circlearrays. Logic on this used in Titles (alas some its logic being redundant), Overtitles, SubtitlesVoteRecorder, ShapesInTitles, CrossHatchingTitles, InlineTitles, and InlineTitlesMaxNumberContours.
One of the two A3 pages to be guillotined and overlapped on the other, being affixed with double-sided sticky tape. That caused complications.
• Observe the layout of GlassesOnSheets, and complicated value of the only item of PermittedPackingStyles when SheetNum == 1.
• There were also complications for HeaderCenterText and HeaderRightText, and careful positioning of the centre with HeaderFooterCenterX, which was recently re-named.
• The full-declaration Taylors had CrossHatching. Because there was to be one physical sheet, the CrossHatchingTitles needed a common centre, requiring code in CrossHatchingCentreX.
• Because of the shortage of table space, the left/bottom/right margins were slightly compressed, from the usual 30, to 18. Except in the ‘backstage’ papers, which tend to have a footer, for which the bottom margin wasn’t compressed. Hence the code in MarginB.
And one thing not happening properly.
• Because the T35 and TV70 appear on both glasses sheets, they have twice as many labels as the others. Error. What to do? This could have been fixed in the parameters by making StickyLabelsNumCopies much more complicated, but that would be nasty. Of course there can’t be a !StickyLabels! equivalent of GlassesClusteredOnVoteRecorders, so it can’t be fixed that way. So instead I will code StickyLabels! equivalents to PrePourRemoveDuplicatesByWithinTitles and PrePourSortByWithinTitles.
![Image](http://www.jdawiseman.com/2013/20130322_20120312_placemat.jpg)
Code: Select all
/taylor [(T) {-0.03 Kern} (aylor)] def
/specialquintaShort [(Special Quinta)] def
/vargellasShort [(V) {-0.06 Kern} (argellas)] def
/terrafeitaShort [(T) {-0.06 Kern} (erra Feita)] def
/specialquintaLong [taylor aload pop ( ) specialquintaShort aload pop] def
/vargellasLong [(Quinta de ) vargellasShort aload pop] def
/terrafeitaLong [(Quinta de ) terrafeitaShort aload pop] def
/Circlearrays [
[ (1920) taylor ]
[ (1924) taylor ]
[ (1927) taylor ]
[ (1935) taylor ]
[ (1945) taylor ]
[ (1948) taylor ]
[ (1950) specialquintaLong ]
[ (1955) taylor ]
[ (1960) taylor ]
[ (1963) taylor ]
[ (1965) vargellasLong ]
[ (1966) taylor ]
[ (1970) taylor ]
[ (1970) vargellasLong ]
[ (1976) vargellasLong ]
[ (1977) taylor ]
[ (1980) taylor ]
[ (1983) taylor ]
[ (1985) taylor ]
[ (1986) terrafeitaLong ]
] def
/TitlesTastingNotes [ Circlearrays {0 get} forall ] def
/Titles [ TitlesTastingNotes {dup cvi 1912 gt {2 2 getinterval} if} forall ] def
/TitlesVoteRecorder TitlesTastingNotes def
/Belowtitles [ Circlearrays {1 get dup taylor ne {pop ()} if} forall ] def
/Overtitles [ Circlearrays {1 get
1 {
dup vargellasLong eq {pop vargellasShort exit} if
dup specialquintaLong eq {pop specialquintaShort exit} if
dup terrafeitaLong eq {pop terrafeitaShort exit} if
pop ()
} repeat
} forall ] def
/SubtitlesTastingNotes [ Circlearrays {1 get} forall ] def
/SubtitlesVoteRecorder [
0 1 Belowtitles length 1 sub
{1 {
dup Belowtitles exch get dup length 0 gt {exch pop exit} {pop} ifelse
dup Overtitles exch get dup length 0 gt {exch pop exit} {pop} ifelse
pop ()
} repeat} for
] def % /SubtitlesVoteRecorder
/SubtitlesDecantingNotes SubtitlesVoteRecorder def
/SubtitlesCorkDisplay SubtitlesTastingNotes def
/Names [
(DBFG) (DRT)
[(JDA) {-0.06 Kern} (W)] (THRA) [(RA) {-0.06 Kern} (YC)]
(MW) (AHB) (WS) (DB) (CMAG) (TF) (BMHR) (CS) (AP) ()
] def
/PaperType /A3 def % /A4 /A3 /B4 /USL /USLegal /USL2 [SmallerPts LargerPts]
/Orientation /Landscape def % /Landscape /Portrait
/TastingNotesCirclesBehind true def
/HeaderLeftText [(The Bung Hole WC1V 6DT, Friday 22) {SuperscriptOn} (nd) {SuperscriptOff} ( March 2013)] def
/HeaderCenterText {TypeOfPagesBeingRendered /Glasses eq {SheetNum 0 eq} {true} ifelse {[taylor (, and relatives)]} {()} ifelse} def
/HeaderRightText {TypeOfPagesBeingRendered /Glasses eq {SheetNum 1 eq} {true} ifelse {[
(www) {-0.092 Kern} (.taylor.pt, )
(www) {-0.092 Kern} (.) {-0.092 Kern} (ThePortForum.com, )
% (www) {-0.092 Kern} (.) {-0.12 Kern} (W) {-0.092 Kern} (orldOf) {+0.12 Kern} (Port.de, )
% (www.jacob-head.com/port,)
(www) {-0.092 Kern} (.jdawiseman.com)
]} {()} ifelse} def
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=6731&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/2013/20130322_taylor.pdf) (Latest version this placemat)
(http://www.taylor.pt/) (Taylor)
(http://www.davy.co.uk/bunghole/) (The Bung Hole)
(http://www.streetmap.co.uk/map.srf?x=530848&y=181628&pc=WC1V+6DT) (London WC1V 6DT)
] def
/HeaderFooterCenterX {TypeOfPagesBeingRendered /Glasses eq {GlassPositions SheetNum get dup 6 get 0 get exch 2 get 0 get add 2 div} {0.5} ifelse} def
/PrePourNumCopies 1 def
/DecantingNotesNumCopies 1 def
/CorkDisplay true def
/StickyLabelsNumCopies 2 def
/StickyLabelsTypes [ 0 ] def
/TitlesFont /Tahoma-Bold def
/OvertitlesFont /LiberateBold def
/CircletextFont /BookmanOldStyle def
/BelowtitlesFont OvertitlesFont def
/ColourSchemeTitles /MidGrey def % /MidGrey /Black
/GlassesOnSheets [
[
0 1 2 3
5 6 7
10 11 12 13
15 16 17
]
[
3 4
8 9
13 14
18 19
]
] def % /GlassesOnSheets
/PermittedPackingStyles [ {SheetNum 0 eq {/PseudoHexagonal} {[ [0 3 3 3] [2 3 3 3] [1 2 3 2] [3 2] [0 1 3 1] [2 1 3 1] [1 0 3 0] [3 0] ]} ifelse} ] def
/WaterCountTarget 10 def % intended number of tickable squares
/WaterCountMaxRowLengths [ 4 3 2 1 ] def
/WaterCountsOverrideShowEverySheet false def
/WaterCountShowLeft [ true false ] def
/WaterCountShowRight [ false true ] def
/CircletextsMinCopies 6 def
/BelowtitleMaxFontSizeProportionTitles 0.75 def
/OvertitleMaxFontSizeProportionTitles 0.75 def
/FontSizesRatioTitlesMin 1.4 def
/FontSizesRatioAboveBelowOverMin 99 def
/ShapesInTitles {specialquintaLong Circlearrays WithinTitles get 1 get eq} def
/ShapesInOvertitles false def
/ShapesToUse [/Star] def % At least one of: /Flower /Star
/ShapesTitlesFill {1 setgray fill} def
/CrossHatchingTitles {taylor Circlearrays WithinTitles get 1 get eq} def
/CrossHatchingBelowtitles false def
/CrossHatchingOvertitles false def
/CrossHatchingCentreX {GlassPositions SheetNum get SheetNum 0 eq {0 get 0 get} {dup 0 get 0 get 4 mul exch 1 get 0 get -3 mul add} ifelse} def % /Name /Left /Center /Right
/InlineTitles {Circlearrays WithinTitles get 1 get dup vargellasLong eq exch terrafeitaLong eq or} def
/InlineTitlesMaxNumberContours {Circlearrays WithinTitles get 1 get vargellasLong eq {8} {2} ifelse} def
/MarginL 18 def % Left
/MarginB {TypeOfPagesBeingRendered dup /PrePour eq exch /VoteRecorder eq or {30} {MarginL} ifelse} def % Bottom
Lots happening.
• Various strings were used multiple times, so given identities (taylor, specialquintaShort, vargellasShort, terrafeitaShort, specialquintaLong, vargellasLong, terrafeitaLong).
• As is usual, much of the wine-specific action driven by the data in Circlearrays. Logic on this used in Titles (alas some its logic being redundant), Overtitles, SubtitlesVoteRecorder, ShapesInTitles, CrossHatchingTitles, InlineTitles, and InlineTitlesMaxNumberContours.
One of the two A3 pages to be guillotined and overlapped on the other, being affixed with double-sided sticky tape. That caused complications.
• Observe the layout of GlassesOnSheets, and complicated value of the only item of PermittedPackingStyles when SheetNum == 1.
• There were also complications for HeaderCenterText and HeaderRightText, and careful positioning of the centre with HeaderFooterCenterX, which was recently re-named.
• The full-declaration Taylors had CrossHatching. Because there was to be one physical sheet, the CrossHatchingTitles needed a common centre, requiring code in CrossHatchingCentreX.
• Because of the shortage of table space, the left/bottom/right margins were slightly compressed, from the usual 30, to 18. Except in the ‘backstage’ papers, which tend to have a footer, for which the bottom margin wasn’t compressed. Hence the code in MarginB.
And one thing not happening properly.
• Because the T35 and TV70 appear on both glasses sheets, they have twice as many labels as the others. Error. What to do? This could have been fixed in the parameters by making StickyLabelsNumCopies much more complicated, but that would be nasty. Of course there can’t be a !StickyLabels! equivalent of GlassesClusteredOnVoteRecorders, so it can’t be fixed that way. So instead I will code StickyLabels! equivalents to PrePourRemoveDuplicatesByWithinTitles and PrePourSortByWithinTitles.
Re: Parameters for the placemat software
Tuesday 2nd April 2013, 1983-1985 double Horizontal, at The Bung Hole (placemats, planning and arrangements, review of the evening).
![Image](http://www.jdawiseman.com/2013/20130402_1983_1985_TastingNotes1.png)
Software version 23:45 Monday 1st April 2013.
• The code in DecanterLabelsNumCopies, as only an F85 label was needed. At first attempt this didn’t work code was fixed so that DecanterLabelsNumCopies could depend on SheetNum.
• Cute definition of GlassesOnSheets.
![Image](http://www.jdawiseman.com/2013/20130402_1983_1985_Glasses0.png)
![Image](http://www.jdawiseman.com/2013/20130402_1983_1985_Glasses1.png)
![Image](http://www.jdawiseman.com/2013/20130402_1983_1985_TastingNotes0.png)
![Image](http://www.jdawiseman.com/2013/20130402_1983_1985_TastingNotes1.png)
Code: Select all
/Warre [(W) {-0.06 Kern} (arre)] def
/Taylor [(T) {-0.06 Kern} (aylor)] def
/Circlearrays [
[ (Dow) (1983) ]
[ (Dow) (1985) ]
[ (Graham) (1983) ]
[ (Graham) (1985) ]
[ Warre (1983) ]
[ Warre (1985) ]
[ Taylor (1983) ]
[ Taylor (1985) ]
[ (Fonseca) (1983) ]
[ (Fonseca) (1985) ]
] def
/Titles [
(D83) (D85)
(G83) (G85)
(W83) (W85)
(T83) (T85)
(F83) (F85)
] def
/Belowtitles [ Circlearrays length {()} repeat ] def
/Names [
(DJ)
(MDB) % DRT's +1, Daniel, right-handed
(DRT)
[(JDA) {-0.06 Kern} (W)]
(THRA) (PW) (AHB)
()
] def
/HeaderLeftText [(The Bung Hole, Tuesday 2) {SuperscriptOn} (nd) {SuperscriptOff} ( April 2013)] def
/HeaderCenterText [(1983 versus 1985)] def
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=6813&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/2013/20130402_1983_1985.pdf) (Latest version this placemat)
(http://www.davy.co.uk/bunghole/) (The Bung Hole)
(http://www.streetmap.co.uk/map.srf?x=530848&y=181628&pc=WC1V+6DT) (London WC1V 6DT)
(http://en.wikipedia.org/wiki/1983) (1983 at Wikipedia)
(http://en.wikipedia.org/wiki/1985) (1985 at Wikipedia)
] def
/DecanterLabelsNumCopies {SheetNum 1 eq {1} {0} ifelse} def
/CorkDisplay true def
/TitlesFont /BlueHighwayFreeCondensed def
/CircletextFont /Cochin-Bold def
/FontSizesRatioTitlesMin 1.1 def
/GlassesOnSheets [ 0 1 1 {[exch 2 Titles length 1 sub {} for]} for ] def
/GlassesOnTastingNotePages GlassesOnSheets def
/GlassesClusteredOnVoteRecorders [
GlassesOnTastingNotePages 0 1 getinterval
GlassesOnTastingNotePages 1 1 getinterval
GlassesOnTastingNotePages
] def % triple-depth array, same length as VoteRecorderTopTexts and VoteRecorderShowTotalRow
/VoteRecorderShowTotalRow [ false false false ] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderTopTexts [ % Must be same length as GlassesClusteredOnVoteRecorders, each sub-array containing some number of TopTexts
[ [/quoteright (83 Of The Night)] ]
[ [/quoteright (85 Of The Night)] ]
[ (Wine Of The Night) (Q:) ]
] def % Must be same length as GlassesClusteredOnVoteRecorders
/BackgroundTextsGlasses true def
/BackgroundTextsGlassesTexts [ (83) (85) ] def
• The code in DecanterLabelsNumCopies, as only an F85 label was needed. At first attempt this didn’t work code was fixed so that DecanterLabelsNumCopies could depend on SheetNum.
• Cute definition of GlassesOnSheets.
Re: Parameters for the placemat software
Wednesday 17th April 2013, Oscar in London at The Bung Hole on the day of the funeral of Baroness Thatcher (placemats, planning and arrangements).
Â
Â
 ![Image](http://www.jdawiseman.com/2013/20130417_placemat_4.jpg)
Software version 18:00 Monday 15th April 2013.
• Don’t use the font /Modern-Regular as it has sloppy letter spacing.
![Image](http://www.jdawiseman.com/2013/20130417_placemat_1.jpg)
![Image](http://www.jdawiseman.com/2013/20130417_placemat_2.jpg)
![Image](http://www.jdawiseman.com/2013/20130417_placemat_3.jpg)
![Image](http://www.jdawiseman.com/2013/20130417_placemat_4.jpg)
Code: Select all
/Names [
(OJMQ) % OJMQ = Oscar Quevedo
(AHB)
(CMAG)
[(DR) {+0.04 Kern} (T)]
[(JDA) {-0.12 Kern} (W)]
(BMHR)
[(ID) {+0.02 Kern} (J)] % Ian Johns
(WS)
(RMW) % Ronnie Roots
()
] def
/Circlearrays [
[ (Oscar Quevedo) ]
[ (Alex Bridgeman) ]
[ [(Christ) {+0.04 Kern} (opher Gee)] ]
[ [(Derek Turn) {-0.04 Kern} (bull)] ]
[ [(J) {-0.04 Kern} (ulian Wiseman)] ]
[ (Ben Read) ]
[ (Ian Johns) ]
[ [(W) {-0.08 Kern} (olfgang S) {-0.04 Kern} (t) {+0.04 Kern} (arz)] ]
[ [(Ronnie Root) {+0.04 Kern} (s)] ]
[ (+) ]
[ /dagger ]
[ /daggerdbl ]
] def
/Titles [
(OJMQ) % OJMQ = Oscar Quevedo
(AHB)
(CMAG)
[(DR) {+0.02 Kern} (T)]
[(JDA) {-0.02 Kern} (W)]
(BMHR)
(IDJ)
(WS)
(RMW) % Ronnie Roots
counttomark dup Circlearrays length exch sub Circlearrays 3 1 roll getinterval aload pop
] def
/Belowtitles [ Circlearrays length {()} repeat ] def
/TastingNotesCirclesBehind true def
/HeaderLeftText [(At The Bung Hole on the day of the funeral of Baroness Thatcher)] def
/HeaderCenterText [(Oscar in London)] def
/HeaderRightText [
(www) {-0.02 Kern} (.QuevedoPortWine.com, )
(www) {-0.02 Kern} (.) {-0.092 Kern} (ThePortForum.com, )
(www) {-0.02 Kern} (.) {-0.04 Kern} (jdawiseman.com)
] def
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=6834&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/2013/20130417_oscar.pdf) (Latest version this placemat)
(http://www.davy.co.uk/bunghole/) (The Bung Hole)
(http://www.streetmap.co.uk/map.srf?x=530848&y=181628&pc=WC1V+6DT) (WC1V 6DT, streetmap.co.uk)
(https://maps.google.co.uk/maps?z=20&t=k&layer=c&cbll=51.5182,-0.1154&cbp=11,15,,0,0) (WC1V 6DT, maps.google.co.uk)
(http://www.quevedoportwine.com/) (QuevedoPortWine.com)
(http://www.margaretthatcher.org/) (MargaretThatcher.org)
] def
/StickyLabelsNumCopies 1 def
/StickyLabelsTypes [0] def
/GlassesClusteredOnVoteRecorders [
{GlassesOnTastingNotePages} dup
] def % triple-depth array, same length as VoteRecorderTopTexts and VoteRecorderShowTotalRow
/VoteRecorderTopTexts [ % Must be same length as GlassesClusteredOnVoteRecorders, each sub-array containing some number of TopTexts
[ (What is it?) ]
[ (Wine Of The Night) (Q:) ]
] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderShowTotalRow [ true false ] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderCrossedBox {VoteRecorderShowTotalRow VoteRecorderSheetNum get NameNum WithinTitles eq NameNum Names length 1 sub lt and and} def % replace 'false' with code referring to WithinTitles and NameNum
/TitlesFont /AvenirNextCondensed-DemiBold def
/CircletextFont /Modern-Regular def % Very sloppy letter spacing: don't use again.
/FontSizesRatioTitlesMin 9999 def
/CrossHatchingTitles true def
/CrossHatchingCentreY /Name def % /Name /Bottom /Middle /Top
• Don’t use the font /Modern-Regular as it has sloppy letter spacing.
Re: Parameters for the placemat software
Tuesday 10th September 2013, at The Bung Hole (placemats, planning and arrangements).
![Image](http://www.jdawiseman.com/2013/20130910_v0.png)
Software version: 11:00 Monday 9th September 2013.
Most of this is vanilla. Perhaps worthy of note:
• Recent re-parametrisation of HeadersLeft etc, compound strings being preceded by the PageOrdering! integer from which they apply. In this case easy, as all pages have the same headers.
• VoteRecorderCrossedBox is mostly its default, with one extra line as JDAW knows more about DRT’s bottle than does DRT.
• VerticalMiddlingTitles also mostly its default, except that it looks wrong for a ‟+” which would be too high. So the ‟+” is centred without regard for the vertical position of others it does not need to match anything.
Edit on 2nd Oct 2013: the new parameter VerticalMiddlingTitlesAlwaysMatchNone has eliminated the need for the code in VerticalMiddlingTitles.
![Image](http://www.jdawiseman.com/2013/20130910_g0.png)
![Image](http://www.jdawiseman.com/2013/20130910_v0.png)
Code: Select all
/Names [
(THRA) (AHB) (DRT)
[(JDA) {-0.03 Kern} (W)]
()
] def
/Circlearrays [ [(+)] Names {dup length 0 eq {pop} {[exch]} ifelse} forall ] def
/Titles Circlearrays def
/Belowtitles [ Circlearrays length {()} repeat ] def
/HeadersLeft [
0 [(The Bung Hole, T) {-0.03 Kern} (uesday 10) {SuperscriptOn} (th) {SuperscriptOff} ( September 2013)]
] def % /HeadersLeft
/HeadersCenter [
0 [/quotedblleft (Bring a bottle wrapped in foil) /quotedblright]
] def % /HeadersCenter
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=7370&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/2013/20130910.pdf) (Latest version this placemat)
(http://www.davy.co.uk/bunghole/) (The Bung Hole)
(http://www.streetmap.co.uk/map.srf?x=530848&y=181628&z=106&pc=WC1V+6DT) (WC1V 6DT, streetmap.co.uk)
(https://maps.google.co.uk/maps?z=20&t=k&layer=c&cbll=51.5182,-0.1154&cbp=11,15,,0,0) (WC1V 6DT, maps.google.co.uk)
(http://www.bing.com/maps/default.aspx?where1=WC1V+6DT&cp=51.5182~-0.1154) (WC1V 6DT, bing.com)
] def
/PlaceNames false def
/VoteRecorderTopTexts [ % Must be same length as GlassesClusteredOnVoteRecorders, each sub-array containing some number of TopTexts
[ (What is it?) ]
[ (Wine Of The Night) (Q:) ]
] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderShowTotalRow [ true false ] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderCrossedBox
{
VoteRecorderShowTotalRow VoteRecorderSheetNum GetEU dup
{
pop Titles WithinTitles get ASCIIfy ThisName ASCIIfy eq ThisName length 0 gt and
Titles WithinTitles get ASCIIfy (DRT) eq {pop ThisName ASCIIfy (JDAW) eq} if
} if
} def
/TitlesFont /GillSansMT-Condensed def
/CircletextFont /BookmanOldStyle def
/VerticalMiddlingTitles {Titles WithinTitles get ASCIIfy (+) eq {/MatchNone} {/MatchString} ifelse} def % /MatchNone /MatchRow /MatchPage /MatchAll /MatchString
Most of this is vanilla. Perhaps worthy of note:
• Recent re-parametrisation of HeadersLeft etc, compound strings being preceded by the PageOrdering! integer from which they apply. In this case easy, as all pages have the same headers.
• VoteRecorderCrossedBox is mostly its default, with one extra line as JDAW knows more about DRT’s bottle than does DRT.
• VerticalMiddlingTitles also mostly its default, except that it looks wrong for a ‟+” which would be too high. So the ‟+” is centred without regard for the vertical position of others it does not need to match anything.
Edit on 2nd Oct 2013: the new parameter VerticalMiddlingTitlesAlwaysMatchNone has eliminated the need for the code in VerticalMiddlingTitles.
Re: Parameters for the placemat software
Wednesday 25th September 2013, at The Bung Hole (placemats, planning and arrangements).
![Image](http://www.jdawiseman.com/2013/20130925_v.png)
Software version: 22:00 Monday 22nd September 2013
Again, mostly vanilla.
![Image](http://www.jdawiseman.com/2013/20130925_g.png)
![Image](http://www.jdawiseman.com/2013/20130925_v.png)
Code: Select all
/JDAW [(JDA) {-0.05 Kern} (W)] def
/Circlearrays [
[ (+) ]
[ (Unknown) (AHB) ]
[ (Gonzalez Byass) (1970) JDAW ]
[ [(T) {-0.05 Kern} (aylor)] (1970) (AJM) ]
[ (Graham) (1970) (Magnum) (WS) ]
] def
/Titles [
(+)
(???)
(GB70)
(T70)
(G70)
] def
/Belowtitles [ Circlearrays {dup length 4 ge {2 get} {pop ()} ifelse} forall ] def
/Names [
(AHB) JDAW (WS)
(AJM) % Alex M, rightie
[(RA) {-0.05 Kern} (YC)]
()
] def
/HeadersLeft [
0 [(The Bung Hole, W) {-0.06 Kern} (ednesday 25) {SuperscriptOn} (th) {SuperscriptOff} ( September 2013)]
] def % /HeadersLeft
/HeadersCenter [
0 [(Bring A Bottle of Vintage Port)]
] def % /HeadersCenter
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=7389&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/2013/20130925.pdf) (Latest version this placemat)
(http://www.davy.co.uk/bunghole/) (The Bung Hole)
(http://www.streetmap.co.uk/map.srf?x=530848&y=181628&z=106&pc=WC1V+6DT) (WC1V 6DT, streetmap.co.uk)
(https://maps.google.co.uk/maps?z=20&t=k&layer=c&cbll=51.5182,-0.1154&cbp=11,15,,0,0) (WC1V 6DT, maps.google.co.uk)
(http://www.bing.com/maps/default.aspx?where1=WC1V+6DT&cp=51.5182~-0.1154) (WC1V 6DT, bing.com)
] def
/PlaceNames false def
/PermittedPackingStyles [
[ /RectangularDislocation /Mirror ]
/Diamonds
/DiamondsAndRectangular
] def % /PermittedPackingStyles
/TitlesFont /GillSansMT-Condensed def
/CircletextFont /BookmanOldStyle def
/CircletextsMinCopies 4 def
/VerticalMiddlingTitles {Titles WithinTitles get ASCIIfy (+) eq {/MatchNone} {/MatchString} ifelse} def
/VerticalMiddlingStringTitles (GB70) def % Benchmark characters
Again, mostly vanilla.
- In PermittedPackingStyles the first possibility, the used possibility, is [ /RectangularDislocation /Mirror ], in which the /Mirror is non-standard.
- Copied from the placemats of the 10th of the same month, VerticalMiddlingTitles, and also a non-standard value of VerticalMiddlingStringTitles which probably made little difference.
Re: Parameters for the placemat software
Wednesday 2nd October 2013, at The Bung Hole (placemats, and planning and arrangements).
![Image](http://www.jdawiseman.com/2013/20131003_v0.png)
Software version: 23:00 Sunday 29th September 2013
Oops: wrong date on the placemats, it being the 2nd rather than the 3rd.
![Image](http://www.jdawiseman.com/2013/20131003_g0.png)
![Image](http://www.jdawiseman.com/2013/20131003_v0.png)
Code: Select all
/Names [ (TLW) (AHB) (JDAW) (RAYC) (THRA) (KZZM) () ] def
/Circlearrays [ Names {[exch]} forall pop ] def
/Titles Circlearrays def
/Belowtitles [ Circlearrays length {()} repeat ] def
/HeadersLeft [
0 [(The Bung Hole, Wednesday 3) {SuperscriptOn} (rd) {SuperscriptOff} ( October 2013)]
] def % /HeadersLeft
/HeadersCenter [
0 [(Port)]
] def % /HeadersCenter
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=7372&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/2013/20131003.pdf) (Latest version this placemat)
(http://www.davy.co.uk/bunghole/) (The Bung Hole)
(http://www.streetmap.co.uk/map.srf?x=530848&y=181628&z=106&pc=WC1V+6DT) (WC1V 6DT, streetmap.co.uk)
(https://maps.google.co.uk/maps?z=20&t=k&layer=c&cbll=51.5182,-0.1154&cbp=11,15,,0,0) (WC1V 6DT, maps.google.co.uk)
(http://www.bing.com/maps/default.aspx?where1=WC1V+6DT&cp=51.5182~-0.1154) (WC1V 6DT, bing.com)
] def
/TitlesFont /Harrington def
/CircletextFont /Harrington def
/NamesFont /Optima-Bold def
/PlaceNames false def
/VoteRecorderTopTexts [ % Must be same length as GlassesClusteredOnVoteRecorders, each sub-array containing some number of TopTexts
[ (What is it?) ]
[ (Wine Of The Night) (Q:) ]
] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderShowTotalRow [ true false ] def % Must be same length as GlassesClusteredOnVoteRecorders
Oops: wrong date on the placemats, it being the 2nd rather than the 3rd.
Re: Parameters for the placemat software
Tuesday 8th October 2013, at The Bung Hole, because Andy Velebil was visiting from California (placemats, planning and arrangements, review).
![Image](http://www.jdawiseman.com/2013/20131008_v0.png)
Software version: 23:00 Thursday 3rd October 2013.
• FontSizesRatioTitlesMin is a numeric parameter, defaulting to 2. So either the font sizes of the titles must be the same, or they must differ by a ratio ≥2. The purpose is that there shouldn’t be a Title at 180 point, and another at 175, and another at 160. Make them all 160. But if one Title is very long, so fits only if ≤75 point, have that at 75 and the others at 160. (If it would fit at 82 point, then the 160 shrinks to 82, and the 180 to 175, thus maintaining ratio condition.) So, in effect, /FontSizesRatioTitlesMin 99 def forces all the Titles to be the same size. In this particular case, it shrinks the ‟+” and ‟*” to the same font size as the others.
Edit: at the table, an error was noticed. There was a conflict of dates between the Title ‟(F77)” and the Circlearray ‟[ (Fonseca) (1970) (CPR) ]”. Oops: both should have been !77. Two oops in a row: oops oops.
![Image](http://www.jdawiseman.com/2013/20131008_g0.png)
![Image](http://www.jdawiseman.com/2013/20131008_g1.png)
![Image](http://www.jdawiseman.com/2013/20131008_v0.png)
Code: Select all
/Taylor [(T) {-0.05 Kern} (aylor)] def
/Pinhao [(Pinh) /atilde (o)] def
/JDAW [(JDA) {-0.05 Kern} (W)] def
/RAYC [(RA) {-0.05 Kern} (YC)] def
/Circlearrays [
[ [ Taylor ( ) Pinhao] (1931) (CMAG) ]
[ [(C) /aacute (lem)] (1935) (THRA) ]
[ (Graham) (DRT) ]
[ Taylor (1970) JDAW ]
[ (Croft) (1970) (PW) ]
[ (Martinez) (1970) (AHB) ]
[ [(W) {-0.05 Kern} (arre)] (1970) (ADV) ]
[ (Cockburn) (1970) (IDJ) ]
[ (Quarles Harris) (1970) RAYC ]
[ (Fonseca) (1970) (CPR) ]
[ (+) ]
[ (*) ]
] def
/Titles [
[(T3) {-0.04 Kern} (1)]
[(C) /aacute {-0.02 Kern} (3) {-0.04 Kern} (5)]
[(G7) {-0.04 Kern} (0)]
[(T) {+0.04 Kern} (7) {-0.04 Kern} (0)]
[(Cr) {-0.08 Kern} (7) {-0.04 Kern} (0)]
[(Mz) {-0.08 Kern} (7) {-0.04 Kern} (0)]
[(W7) {-0.04 Kern} (0)]
[(Ck) {-0.08 Kern} (7) {-0.04 Kern} (0)]
[(Q) {-0.04 Kern} (H) {-0.04 Kern} (7) {-0.04 Kern} (0)]
(F77)
(+)
(*)
] def
/Belowtitles [ Pinhao Circlearrays length 1 sub {()} repeat ] def
/Names [
(ADV) (DRT) JDAW (IDJ) (CMAG) (PW) (THRA) (AHB) (CPR) RAYC
()
] def
/HeadersLeft [
0 [(The Bung Hole, T) {-0.05 Kern} (uesday 8) {SuperscriptOn} (th) {SuperscriptOff} ( October 2013)]
] def % /HeadersLeft
/HeadersCenter [
0 [(Port with Andy Velebil)]
] def % /HeadersCenter
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=7329&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/2013/20131008.pdf) (Latest version this placemat)
(http://www.davy.co.uk/bunghole/) (The Bung Hole)
(http://www.streetmap.co.uk/map.srf?x=530848&y=181628&z=106&pc=WC1V+6DT) (WC1V 6DT, streetmap.co.uk)
(https://maps.google.co.uk/maps?z=20&t=k&layer=c&cbll=51.5182,-0.1154&cbp=11,15,,0,0) (WC1V 6DT, maps.google.co.uk)
(http://www.bing.com/maps/default.aspx?where1=WC1V+6DT&cp=51.5182~-0.1154) (WC1V 6DT, bing.com)
] def
/PlaceNames false def
/TitlesFont /GilliusADFNo2-BoldCond def
/CircletextFont /BookmanOldStyle def
/BelowtitleMaxFontSizeProportionTitles 0.25 def
/FontSizesRatioTitlesMin 99 def
• FontSizesRatioTitlesMin is a numeric parameter, defaulting to 2. So either the font sizes of the titles must be the same, or they must differ by a ratio ≥2. The purpose is that there shouldn’t be a Title at 180 point, and another at 175, and another at 160. Make them all 160. But if one Title is very long, so fits only if ≤75 point, have that at 75 and the others at 160. (If it would fit at 82 point, then the 160 shrinks to 82, and the 180 to 175, thus maintaining ratio condition.) So, in effect, /FontSizesRatioTitlesMin 99 def forces all the Titles to be the same size. In this particular case, it shrinks the ‟+” and ‟*” to the same font size as the others.
Edit: at the table, an error was noticed. There was a conflict of dates between the Title ‟(F77)” and the Circlearray ‟[ (Fonseca) (1970) (CPR) ]”. Oops: both should have been !77. Two oops in a row: oops oops.
Re: Parameters for the placemat software
On Friday 11th and Saturday 12th October 2013, at The Cantley House Hotel and The Walter Arms, in Wokingham, to celebrate the Quinquagenary of AHB’s 1963 birth with a horizontal (placemats for 1963 VPs, Review of the event as a whole).
First session, Evening Friday 11th, PageOrdering = 0
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_g2.png)
Second session, Afternoon Saturday 12th, PageOrdering = 10
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_g5.png)
Third session, Evening Saturday 12th, PageOrdering = 20
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_g8.png)
Various sessions, though mostly from the first
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_pn1.png)
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_pp33.png)
Software version: 23:00 Thursday 3rd October 2013.
At 433 pages + 2 log pages = 435 pages, the longest set of placemats yet made by me, and hence probably by this software. There is lots going on.
First session, Evening Friday 11th, PageOrdering = 0
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_g0.png)
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_g1.png)
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_g2.png)
Second session, Afternoon Saturday 12th, PageOrdering = 10
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_g3.png)
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_g4.png)
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_g5.png)
Third session, Evening Saturday 12th, PageOrdering = 20
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_g6.png)
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_g7.png)
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_g8.png)
Various sessions, though mostly from the first
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_tn0.png)
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_vr0.png)
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_dn0.png)
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_pn0.png)
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_pn1.png)
![Image](http://www.jdawiseman.com/2013/20131011_1963_ahb_pp33.png)
Code: Select all
/Vintage [(1) {-0.09 Kern} (963)] def
% [ Title LongName Vintage ]
/PortData [
% Friday evening
[ (VS) (Viera de Souza) Vintage ]
[ (QH) (Quarles Harris) Vintage ]
[ (GC) (Gould Campbell) Vintage ]
[ (Ck) (Cockburn) Vintage ]
[ (G) [(Graham) {-0.06 Kern} /quoteright (s)] Vintage ]
[ (Kh) (Krohn) Vintage ]
[ [(P) /ccedilla] [(Po) /ccedilla (as)] Vintage ]
[ (Mg) (Morgan) Vintage ]
[ (Av) (Avery) Vintage ]
[ (F) [(F) {-0.03 Kern} (onseca)] Vintage ]
[ (RV) [(Rebello V) {-0.06 Kern} (alente)] Vintage ]
[ (Rs) (Quinta de la Rosa) Vintage ]
[ (S) (Sandeman) Vintage ]
[ (Dl) (Dalva) Vintage ]
[ (Cn) (Constantino) Vintage ]
% Saturday afternoon
[ (Sb) (Quinta do Sibio) Vintage ]
[ (RVi) (Real Vinicola) Vintage ]
[ (RCV) [(Real Companhia V) {-0.06 Kern} (elha)] Vintage ]
[ (Ad) (Adams) Vintage ]
[ (RO) (Royal Oporto) Vintage ]
[ (Dm) (Dolamore) Vintage ]
[
[(B) {-0.02 Kern} (B) {-0.02 Kern} (R)]
[
(Berr) {+0.04 Kern} (y Bro)
{
/BrosOriginalFontSize CurrentFontSize def
/BrosHeight-s (s) StringHeight def
/BrosHeight-dot (.) StringHeight def
/BrosHeight-o (o) StringHeight def
/BrosVerticalOffset BrosHeight-o BrosHeight-s 1.5 div BrosHeight-dot div 1 add div def
CurrentFontName
BrosOriginalFontSize BrosHeight-o mul BrosHeight-dot 1.5 mul BrosHeight-s add div
selectfont
/BrosWidth-s (s) StringWidthRecursive def
/BrosWidth-dot (.) StringWidthRecursive def
BrosWidth-dot BrosWidth-s gt {BrosWidth-dot BrosWidth-s sub 2 div} {0} ifelse BrosVerticalOffset rmoveto
}
(s)
{BrosWidth-s BrosWidth-dot add -2 div BrosVerticalOffset neg rmoveto}
(.)
{
BrosWidth-s BrosWidth-dot gt {BrosWidth-s BrosWidth-dot sub 2 div 0 rmoveto} if
CurrentFontName BrosOriginalFontSize selectfont
}
( & Rudd)
] % Berry Bros & Rudd
Vintage
]
[ (T) [(T) {-0.06 Kern} (aylor)] Vintage ]
[ (Cr) (Croft) Vintage ]
[ (Ni) (Niepoort) Vintage ]
[ [] ]
[ (Mk) (Mackenzie) Vintage ]
[ (Fd) [(F) {-0.03 Kern} (euerheerd)] Vintage ]
[ (O) [(Of) /fl (ey)] Vintage ]
[ (Mz) (Martinez) Vintage ]
% Saturday evening
[ (MC) [(Messias Quinta do Cach) /atilde (o)] Vintage ]
[ (W) [(W) {-0.06 Kern} (arre)] Vintage ]
[ (D) (Dow) Vintage ]
[ (N) (Quinta do Noval) Vintage ]
[ (NN) (Quinta do Noval Nacional) Vintage ]
[ (A) (J. H. Andresen) Vintage ]
[ (B&I) [(Borges & Irm) /atilde (o)] Vintage ]
[ (Df) (Delaforce) Vintage ]
[ (PS) (Pinto dos Santos) Vintage ]
[ (Cv) (Cavendish) Vintage ]
[ (GB) (Gonzalez Byass) Vintage ]
[ [(C) /aacute] [(C) /aacute (lem)] Vintage ]
[ [(C) /aacute {-0.015 Kern} (F)] [(C) /aacute (lem Quinta da Foz)] Vintage ]
[ (B) (Burmester) Vintage ]
[ (Fr) [(F) {-0.03 Kern} (erreira)] Vintage ]
] bind def % PortData
/Circlearrays [ PortData {dup length 1 sub 1 exch getinterval} forall ] def
/Titles [ PortData {0 get} forall ] def
/Belowtitles [ PortData {dup length 4 ge {3 get} {dup length 3 ge {2 get dup Vintage eq {pop ()} if} {pop ()} ifelse} ifelse} forall ] def
/TitlesCorkDisplay [ PortData {dup length 2 ge {1 get} {pop ()} ifelse} forall ] def
/Names [
(Alex) % AHB, the birthday boy
(Andy) (Axel) (Ben) (Chris) (Christopher) (Derek) (Julian) (Nicos) (Ray) (Rob) (Roy)
[(T) {-0.05 Kern} (om)]
[(W) {-0.04 Kern} (olfgang)]
()
] def
/LeftHanders [ (Chris) (CSD) (Chris D.) ] def
/ThePortForumIconPlacement /None def % /None
/ThePortForumIconTastingNotePlacement /None def % /None
/HeadersLeft [
21 [(Friday 11) {SuperscriptOn} (th) {SuperscriptOff} ( and Saturday 12) {SuperscriptOn} (th) {SuperscriptOff} ( October 2013)]
300 1 index
0 [(Evening, Friday 11) {SuperscriptOn} (th) {SuperscriptOff} ( October 2013)]
200 1 index
10 [(Afternoon, Saturday 12) {SuperscriptOn} (th) {SuperscriptOff} ( October 2013)]
210 1 index
20 [(Evening, Saturday 12) {SuperscriptOn} (th) {SuperscriptOff} ( October 2013)]
22 1 index
220 1 index
] def % /HeadersLeft
/HeadersCenter [
21 [(1963 Quinquagenary Celebration)]
300 1 index
0 [(1963 Quinquagenary Celebration, Part I)]
200 1 index
10 [(1963 Quinquagenary Celebration, Part II)]
210 1 index
20 [(1963 Quinquagenary Celebration, Part III)]
22 1 index
220 1 index
] def % /HeadersCenter
/HeadersRight [
21 [(W) {-0.08 Kern} (okingham)]
300 1 index
0 [(The Cantley House Hotel, W) {-0.08 Kern} (okingham)]
20 1 index
22 1 index
200 1 index
220 1 index
10 [(The W) {-0.08 Kern} (alter Arms, W) {-0.08 Kern} (okingham)]
210 1 index
] def % /HeadersCenter
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=7404&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/2013/20131011_1963_ahb.pdf) (Latest version this placemat)
(http://www.cantleyhotel.co.uk/) (Cantley House Hotel)
(http://www.thewalterarms.com/) (The Walter Arms)
% (http://www.streetmap.co.uk/map.srf?x=480926&y=169738&z=106&pc=RG40+5QG) (RG40 5QG, streetmap.co.uk)
% (https://maps.google.co.uk/maps?q=RG40+5QG&sll=52.83,-2.3278&z=17) (RG40 5QG, maps.google.co.uk)
% (http://www.bing.com/maps/default.aspx?where1=RG40+5QG&cp=51.4205~-0.8381) (RG40 5QG, bing.com)
] def
/FooterCenterText-Backstage ExternalLinks 0 get def
/DecanterLabelsNumCopies 0 def
/PrePourNumCopies {Circlearrays WithinTitles get length 0 eq {0} {1} ifelse} def
/DecantingNotesNumCopies 1 def
/PrePourReverseOrder false def
/StickyLabelsNumCopies /PrePourNumCopies load def
/StickyLabelsTypes [0] def
/NamesPlaceNames [
Names dup dup
[ % Friday evening
[(Scallops; Black & blue; ) /emdash] % Alex
[(T) {-0.05 Kern} (errine; Medium-rare, chips; ) /emdash] % Andy
[(T) {-0.05 Kern} (errine; Medium-rare, chips; Cheese)] % Axel
(Antipasti; Medallions; Cheese) % Ben
[(T) {-0.05 Kern} (errine; Medallions, chips; Cheesecake)] % Chris
[(Scallops; Medium-rare, chips; T) {-0.06 Kern} (offee)] % Christopher
[(T) {-0.05 Kern} (errine; Medium-rare, chips; ) /emdash] % Derek
[(Asparagus; Pork & black pud.; Cr) /egrave (me br) /ucircumflex (l) /eacute (e)] % Julian
[(Cray) /fi (sh; Medium-rare, chips; T) {-0.06 Kern} (orte)] % Nicos
[(Scallops; Pork & black pud.; ) /emdash] % Ray
[(Cray) /fi (sh; Medallions; Cheese)] % Rob
[(Scallops; Medium-rare, chips; ) /emdash] % Roy
(Soup; Medium-rare, new p., peppercorn; Cheesecake) % Tom
[(T) {-0.05 Kern} (errine; Medium-rare, chips; Lemon tart)] % Wolfgang
() % _
]
[ % Saturday lunch
(Lamb kidneys; Duck & bacon salad, small) % Alex
[(Hummus; Pizza, F) {-0.12 Kern} (.d.Capra, big)] % Andy
(Soup; Duck & bacon salad, small) % Axel
[(Lamb kidneys; T) {-0.05 Kern} (agliatelle, big)] % Ben
[(Mushroom; Pizza, F) {-0.12 Kern} (.d.Capra; )] % Chris
(Lamb kidneys; Duck & bacon salad, big) % Christopher
(Parfait; Duck & bacon salad, small) % Derek
(Soup; Moussaka) % Julian
(Crab; Duck & bacon salad, big) % Nicos
(Parfait; Duck & bacon salad, big) % Ray
(Parfait; Linguini, big) % Rob
[(Prawns; T) {-0.05 Kern} (agliatelle, big)] % Roy
(Soup; Spaghetti, big) % Tom
(Parfait; Moussaka) % Wolfgang
() % _
]
[ % Saturday evening
[(Melon; Roast beef; Pro) /fi (teroles)] % Alex
[(Melon; Roast beef; Fruit)] % Andy
(Melon; Roast beef; Cheese) % Axel
(Melon; Roast beef; Cheese) % Ben
[(T) {-0.05 Kern} (errine; Risotto; Cheese)] % Chris
(Soup; Roast beef; Cheese) % Christopher
(Melon; Roast beef; Cheese) % Derek
[(Soup; Roast beef; Pro) /fi (teroles)] % Julian
[(T) {-0.05 Kern} (errine; Roast beef; Eton)] % Nicos
[(T) {-0.05 Kern} (errine; Roast beef; Cheese)] % Ray
(Soup; Roast beef; Eton) % Rob
(Soup; Roast beef; Eton) % Roy
(Soup; Roast beef; Cheese) % Tom
[(T) {-0.05 Kern} (errine; Roast beef; Cheese)] % Wolfgang
[] % _
]
] def % /NamesPlaceNames
/GlassesOnSheets [
0 5 PortData length 1 sub {[ exch dup 4 add 1 exch {} for ]} for
] def % /GlassesOnSheets
/GlassesOnTastingNotePages [ GlassesOnSheets {[ exch {dup PortData exch get length 1 le {pop} if} forall ]} forall ] def
/PermittedPackingStyles [
/RectangularDislocation
/Diamonds
/DiamondsAndRectangular
[ /Adjusted5 /OnlyIfOrientation /Landscape ]
[ /Adjusted7 ]
% [ /PostsAndLintel /CentralGlasses 1 /GlassesNumMin 7 /OnlyIfOrientation /Landscape ]
% [ /Arch /CentralGlasses 1 /GlassesNumMin 6 /OnlyIfOrientation /Landscape ]
[ /DiamondsPlus /ImprovementPointsMin 0 ]
[ /RectangularAlternateSplitNudge /GlassesNumMin 10 ]
[ /RectangularAlternateNudge /ImprovementPointsMin 2 ]
] def % /PermittedPackingStyles
/VoteRecorderTopTexts [ % Must be same length as GlassesClusteredOnVoteRecorders, each sub-array containing some number of TopTexts
[ (1963 Vintage Port Of The Session) (Q:) ]
dup dup
[ (Port Of The Weekend) (Q:) ]
] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderShowTotalRow [ VoteRecorderTopTexts length {false} repeat ] def % Must be same length as GlassesClusteredOnVoteRecorders
/GlassesClusteredOnVoteRecorders [
GlassesOnTastingNotePages 0 3 getinterval
GlassesOnTastingNotePages 3 3 getinterval
GlassesOnTastingNotePages 6 3 getinterval
GlassesOnTastingNotePages
] def % triple-depth array, same length as VoteRecorderTopTexts and VoteRecorderShowTotalRow
/VoteRecorderTotalColTitle [(T) {-0.05 Kern} (otal)] def
/GlassesClusteredOnCorkDisplay [ GlassesOnTastingNotePages 0 3 getinterval GlassesOnTastingNotePages 3 3 getinterval GlassesOnTastingNotePages 6 3 getinterval ] def
/Rotate180AlternateNames true def
/PageOrderingNonDecanterLabelGlasses [ 0 0 0 10 10 10 20 20 20 ] def
/PageOrderingTastingNotePages PageOrderingNonDecanterLabelGlasses def
/PageOrderingVoteRecorder [ 0 10 20 21 ] def
/PageOrderingDecantingNotes [ PageOrderingNonDecanterLabelGlasses {dup 20 eq {pop 22} if} forall ] def
/PageOrderingCorkDisplay [ 0 10 22 ] def
/PageOrderingPrePourPages PageOrderingDecantingNotes def % Of length the same as GlassesOnSheets, not necessarily being of length PrePourNumCopies
/PageOrderingPlaceNames [ 2 12 23 3 copy ] def % Possible change, if one is folding place-name pages in advance, is to replace this 0 with 1.
/PageOrderingDecanterLabels [ 200 dup dup 210 dup dup 220 dup dup ] def % By default decanter-label pages appear together at the end, to facilitate advance manufacture
/PageOrderingStickyLabels [ GlassesOnSheets length {300} repeat ] def % Of length the same as GlassesOnSheets, not necessarily being of length StickyLabelsNumCopies
/PageOrderingSections [
0 ()
0 [/section ( Friday evening, Cantley House)]
10 ()
10 [/section ( Saturday afternoon, Walter Arms)]
20 ()
20 [/section ( Saturday evening, Cantley House)]
200 ()
200 [/section ( Multiple sessions)]
] def % Array of even length, alternately elements of the PageOrder...s, and compound strings
/TitlesFont {TypeOfPagesBeingRendered /CorkDisplay eq {CircletextFont} {/GillSansMT-Condensed} ifelse} def
/CircletextFont /BookmanOldStyle def
/NamesFont /TitlesFont load def
/BackgroundTextsGlassesFont /GillSansMT-ExtCondensedBold def
/TitleMaxHeightProportionInnerRadius 1.5 def
/CircletextsMinCopies 4 def
/CircletextMaxFontSizeProportionRadius 0.0973 def
/BackgroundTextsGlasses true def
/BackgroundTextsGlassesTexts [ GlassesOnSheets length {(63)} repeat ] def
/BackgroundTextsPrePour false def
/BackgroundTextsGlassesPaintCode {clip 8.64 setlinewidth 0.90625 setgray stroke} def % On AHB's printer, "Grey intensity 90625 looks perfect."
/PlaceNamesMaxFontSizeAbsolute 288 def
/MarginT 24 def % Top
At 433 pages + 2 log pages = 435 pages, the longest set of placemats yet made by me, and hence probably by this software. There is lots going on.
- The port data starts in PortData, and is then decanted in to Titles, Circlearrays, and TitlesCorkDisplay. This simplified re-ordering of the wines as draft placemats were made, arrays automatically being kept synchronised. The decanting is slightly more general-case than was used. PortData contains arrays of length 3: an abbreviation, a long name, a vintage. But what if an item is of length ≥4? Then the fourth item would be in Belowtitles. But this complexity was redundant: all are of length 3, and all have the same Vintage.
- Observe the long definition of the ‟Bros” part of BBR, all just to get a dot under a smaller ‘s’. Perhaps it was gratuitous. The code was copied from one of the more obscure manual pages (in early 2021 moved to GitHub).
- In August 2013 the headers were re-parameterised, greatly simplifying having different headers in different sessions.
- PrePourNumCopies was zero for blank ports.
- NamesPlaceNames is a new parameter, also coded in August 2013 for this tasting. It is an array of Names-like arrays. Indeed, its first three items are plain Names, being the PlaceNames for the three sessions. Next come the ‘food names’ for the three sessions. (After printing it emerged that more names would have been better: at each session, Names for the drinking table, Names for the eating table, and food names for the latter. Even more pages!)
- GlassesOnSheets has every page being exactly five glasses, even if one of those glasses is blank. GlassesOnTastingNotePages is the same but with the blanks removed.
- GlassesClusteredOnVoteRecorders contains parts of GlassesOnTastingNotePages for the ‟1963 Vintage Port Of The Session” questions, but the whole of GlassesOnTastingNotePages for ‟Port Of The Weekend”. GlassesClusteredOnCorkDisplay omits the last of those.
- Three sessions? Which meant lots of use of the PageOrdering! parameters: PageOrderingNonDecanterLabelGlasses, PageOrderingTastingNotePages, PageOrderingDecantingNotes, PageOrderingVoteRecorder, PageOrderingCorkDisplay, PageOrderingDecanterLabels and PageOrderingPlaceNames. Also the new parameter again coded for this placemat PageOrderingSections, which breaks the PDF’s table of contents into sections. (It was easy to do, and adds elegance; see example on right.)
- /GillSansMT-Condensed: me like. Expect to see this again. But the cork-display pages showed the long shipper name rather than the abbreviation, so on these pages the titles were shown in CircletextFont (= /BookmanOldStyle) for consistency of kerning.
- An uncomplicated but worthwhile use of BackgroundTextsGlasses. However, the default grey in BackgroundTextsGlassesPaintCode is 15÷16 = 0.9375, which was ‟a little too light” on AHB’s printer, so replaced with 0.90625 = 29÷32 = 14½÷16.
Re: Parameters for the placemat software
Thursday 31st October 2013, at The Bung Hole, with the theme ‟All Hallows’ Eve: Remember the Dead (Blinded and Decorated)” (placemats, review of the evening as a whole, planning and arrangements).
![Image](http://www.jdawiseman.com/2013/20131031_all_hallows_eve_v0.png)
Software version: 23:00 Thursday 3rd October 2013.
Elementary use of parameters, despite the fancy fonts.
![Image](http://www.jdawiseman.com/2013/20131031_all_hallows_eve_g0.png)
![Image](http://www.jdawiseman.com/2013/20131031_all_hallows_eve_g1.png)
![Image](http://www.jdawiseman.com/2013/20131031_all_hallows_eve_v0.png)
Code: Select all
/Circlearrays [
[ (Julian Wiseman) ]
[ (Tom Archer) ]
[ (Dirk Niepoort) ]
[ (Wolfgang Starz) ]
[ (Ray Cook) ]
[ (Dave Mitchell) ]
[ (Rob Coombes) ]
[ (+) ]
] def
/Titles [
(JDAW)
(THRA)
(EDN)
(WS)
(RLC)
(DFM)
(RAYC)
(+)
] def
/Belowtitles [ Circlearrays length {()} repeat ] def
/Names [ Titles aload pop pop () ] def
/HeadersLeft [
0 [(The Bung Hole, Thursday 31) {SuperscriptOn} (st) {SuperscriptOff} ( October 2013)]
] def % /HeadersLeft
/HeadersCenter [
0 [(All Hallows) /quoteright ( Eve: Remember the Dead (Blinded and Decorated))]
] def % /HeadersCenter
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=7627&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/2013/20131031_all_hallows_eve.pdf) (Latest version this placemat)
(http://www.davy.co.uk/bunghole/) (The Bung Hole)
(http://www.streetmap.co.uk/map.srf?x=530848&y=181628&z=106&pc=WC1V+6DT) (WC1V 6DT, streetmap.co.uk)
(https://maps.google.co.uk/maps?z=20&t=k&layer=c&cbll=51.5182,-0.1154&cbp=11,15,,0,0) (WC1V 6DT, maps.google.co.uk)
(http://www.bing.com/maps/default.aspx?where1=WC1V+6DT&cp=51.5182~-0.1154) (WC1V 6DT, bing.com)
] def
/PlaceNames false def
/VoteRecorderTopTexts [ % Must be same length as GlassesClusteredOnVoteRecorders, each sub-array containing some number of TopTexts
[ (What is it?) ]
[ (Wine Of The Night) (Q:) ]
] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderShowTotalRow [ true false ] def % Must be same length as GlassesClusteredOnVoteRecorders
/TitlesFont /Firecat-Medium def
/CircletextFont /LucidaBlackletter def
/NamesFont /AmericanTypewriter-Light def
Elementary use of parameters, despite the fancy fonts.
Re: Parameters for the placemat software
Thursday 19st December 2013, at The Bell, with the traditional theme of ‟Unknown Shipper, Peculiar Friends, Revisited” (sticky labels and other paperwork, planning and arrangements).
(In following diagram lilac is edge of label, green is boundary of writing zone; neither of these colours will print.)
![Image](http://www.jdawiseman.com/2013/20131219_bell_s7.png)
![Image](http://www.jdawiseman.com/2013/20131219_bell_v0.png)
Software version: 12:30 Wednesday 18th December 2013.
(In following diagram lilac is edge of label, green is boundary of writing zone; neither of these colours will print.)
![Image](http://www.jdawiseman.com/2013/20131219_bell_s7.png)
![Image](http://www.jdawiseman.com/2013/20131219_bell_v0.png)
Code: Select all
/NumberWords [
(One)
[(T) {-0.09 Kern} (wo)]
(Three)
[(F) {-0.09 Kern} (our)]
(Five) (Six) (Seven) (Eight) (Nine)
[(T) {-0.09 Kern} (en)]
(Eleven)
[(T) {-0.09 Kern} (welve)]
(Thirteen)
[(F) {-0.09 Kern} (ourteen)]
(Fifteen) (Sixteen) (Seventeen) (Eighteen) (Nineteen)
[(T) {-0.09 Kern} (wenty)]
[(T) {-0.09 Kern} (wenty-One)]
[(T) {-0.09 Kern} (wenty-) {-0.09 Kern} (T) {-0.09 Kern} (wo)]
[(T) {-0.09 Kern} (wenty-) {-0.09 Kern} (Three)]
[(T) {-0.09 Kern} (wenty-F) {-0.09 Kern} (our)]
[(T) {-0.09 Kern} (wenty-Five)]
[(T) {-0.09 Kern} (wenty-Six)]
] def % /NumberWords
/JDAW [(JDA) {-0.10 Kern} (W)] def
/Wolfgang [(W) {-0.092 Kern} (olfgang)] def
/SnowTopCapsSuperscriptOn {0 CurrentFontSize 0.4 mul rmoveto CurrentFontName CurrentFontSize 2 div selectfont} bind def
/SnowTopCapsSuperscriptOff {CurrentFontName CurrentFontSize 2 mul selectfont 0 CurrentFontSize -0.4 mul rmoveto} bind def
/Titles [
[JDAW {SnowTopCapsSuperscriptOn} (1) {SnowTopCapsSuperscriptOff}] [JDAW {+0.03 Kern SnowTopCapsSuperscriptOn} (2) {SnowTopCapsSuperscriptOff}] (SV99) (SV00)
[(THRA) {-0.08 Kern SnowTopCapsSuperscriptOn} (1) {SnowTopCapsSuperscriptOff}] [(THRA) {-0.04 Kern SnowTopCapsSuperscriptOn} (2) {SnowTopCapsSuperscriptOff}]
[(PW) {SnowTopCapsSuperscriptOn} (1) {SnowTopCapsSuperscriptOff}] [(PW) {+0.03 Kern SnowTopCapsSuperscriptOn} (2) {SnowTopCapsSuperscriptOff}]
[(DJ) {-0.02 Kern SnowTopCapsSuperscriptOn} (1) {SnowTopCapsSuperscriptOff}] [(DJ) {+0.03 Kern SnowTopCapsSuperscriptOn} (2) {SnowTopCapsSuperscriptOff}]
(RLC)
(HM58)
counttomark 24 exch sub 1 exch 1 exch {5 string cvs} for
] def % /Titles
/Circlearrays [
0 1 Titles length 1 sub {/i exch def Titles i get dup (1) eq {pop exit} {[exch dup (HM58) eq {pop (Hatch Mansfield) (1858)} if]} ifelse} for
i 1 Titles length 1 sub {[ exch dup NumberWords exch i sub get exch Titles exch get ]} for
] def
/Belowtitles [ Titles length {()} repeat ] def
/Overtitles [ Titles length {()} repeat ] def
/SubtitlesTastingNotes Overtitles def
/Names [
[(T) {-0.04 Kern} (om)]
(Alex) (Rob) (Ray) (Axel) (Phil) (Christopher) (Julian)
Wolfgang
(Daniel)
() dup
] def
/NamesVoteRecorder [ Names {
dup Wolfgang eq {pop [(W) {-0.09 Kern} (o.)]} if
dup (Christopher) eq {pop [(Ch.)]} if
dup (Julian) eq {pop [(J) {-0.02 Kern} (u.)]} if
dup (Daniel) eq {pop [(Da.)]} if
} forall ] def
/HeadersLeft [
0 [(The Bell, Thursday 19) {SuperscriptOn} (th) {SuperscriptOff} ( December 2013)]
] def % /HeadersLeft
/HeadersCenter [
0 [(Unknown Shipper, Peculiar Friends, Revisited)]
] def % /HeadersCenter
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=6804&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/2013/20131219_bell.pdf) (Latest version this placemat)
(http://www.thebellatwenden.co.uk/) (The Bell, Wendens Ambo, Saffron Walden)
(http://www.streetmap.co.uk/map.srf?x=551093&y=236398&pc=CB11+4JY) (Map, CB11 4JY)
] def
/DecanterLabelsNumCopies 1 def
/PlaceNames false def
/PrePourNumCopies 0 def
/CorkDisplay false def
/NonDecanterLabelGlassesNumCopies 0 def
/StickyLabelsNumCopies {StickyLabelsTypeThis 0 eq {2} {1} ifelse} def
/StickyLabelsOrientationAutomatic {[true false] StickyLabelsTypeThis get} def % of labels, not of paper. Boolean.
/GlassesClusteredOnVoteRecorders [ {GlassesOnTastingNotePages} dup ] def % triple-depth array, same length as VoteRecorderTopTexts and VoteRecorderShowTotalRow
/TitlesFont /SnowtopCaps def
/OvertitlesFont /Helvetica-Bold def
/FontSizesRatioTitlesMin 1.056 def % enough keep "9" and "10" the same size
/VoteRecorderTopTexts [ % Must be same length as GlassesClusteredOnVoteRecorders, each sub-array containing some number of TopTexts
[
(What is it?)
]
[
(Wine Of The Night?)
[/quoteleft (Peculiar) /quoteright ( Of The Night?)]
[/quoteleft (Unknown) /quoteright ( Of The Night?)]
(Non-Port Of The Night?)
(Q:)
]
] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderShowTotalRow [ true false ] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderTotalColTitle [(T) {-0.04 Kern} (ot.)] def
/VoteRecorderTotalRowTitle [(Total)] def
- As always for The Bell, sticky labels contain what is on the glasses sheets, but there aren’t glasses sheets! Yes there are, but zero copies are printed: /NonDecanterLabelGlassesNumCopies 0 def.
- Kludgey construction of Titles and Circlearrays.
- NamesVoteRecorder constructed from Names, with some long names shortened.
Re: Parameters for the placemat software
Thursday 2nd January 2014, in The Bung Hole, Blind (placemats, planning and arrangements, review).
![Image](http://www.jdawiseman.com/2014/20140102_blind_v0.png)
Software version: 00:30 Sunday 29th December 2013.
Other than an addition clause in VoteRecorderCrossedBox, all vanilla.
![Image](http://www.jdawiseman.com/2014/20140102_blind_g0.png)
![Image](http://www.jdawiseman.com/2014/20140102_blind_v0.png)
Code: Select all
/Names [
(DB) % Dr Dirk
(WPS)
[(RA) {-0.06 Kern} (YC)]
[(JDA) {-0.06 Kern} (W)]
()
] def
/Circlearrays [
[ [(Dr) {-0.06 Kern} (. Dirk)] ]
[ [(Mr) {-0.06 Kern} (. Starz)] ]
[ [(Mr) {-0.06 Kern} (. Coombes)] ]
[ [(Mr) {-0.06 Kern} (. Wiseman)] ]
[ /dagger ]
[ /daggerdbl ]
] def
/Titles [
Names aload pop pop
Circlearrays counttomark 1 sub 1 index length 1 index sub getinterval {0 get} forall
] def
/Belowtitles [ Circlearrays length {()} repeat ] def
/HeadersLeft [
0 [(The Bung Hole, Thursday 2) {SuperscriptOn} (nd) {SuperscriptOff} ( January 2014)]
] def % /HeadersLeft
/HeadersCenter [
0 [(Bring a Bottle to Share)]
] def % /HeadersCenter
/ExternalLinks [ % Even-length array of strings: http://URL0, Descriptor0, http://URL1, Descriptor1, ...
(http://www.theportforum.com/viewtopic.php?t=7868&view=unread#unread) (Thread on ThePortForum.com)
(http://www.jdawiseman.com/2014/20140102_blind.pdf) (Latest version this placemat)
(http://www.davy.co.uk/bunghole/) (The Bung Hole)
(http://www.streetmap.co.uk/map.srf?x=530848&y=181628&z=106&pc=WC1V+6DT) (WC1V 6DT, streetmap.co.uk)
(https://maps.google.co.uk/maps?z=20&t=k&layer=c&cbll=51.5182,-0.1154&cbp=11,15,,0,0) (WC1V 6DT, maps.google.co.uk)
(http://www.bing.com/maps/default.aspx?where1=WC1V+6DT&cp=51.5182~-0.1154) (WC1V 6DT, bing.com)
] def
/PlaceNames false def
/VoteRecorderTopTexts [ % Must be same length as GlassesClusteredOnVoteRecorders, each sub-array containing some number of TopTexts
[ (What is it?) ]
[ (Wine Of The Night) (Q:) ]
] def % Must be same length as GlassesClusteredOnVoteRecorders
/VoteRecorderShowTotalRow [ true false ] def % Must be same length as GlassesClusteredOnVoteRecorders
/CrossHatchingTitles true def
/VoteRecorderCrossedBox {VoteRecorderShowTotalRow VoteRecorderSheetNum GetEU dup {pop Titles WithinTitles get ASCIIfy ThisName ASCIIfy eq ThisName Names 3 get ne and ThisName length 0 gt and} if} def
Other than an addition clause in VoteRecorderCrossedBox, all vanilla.