diff --git a/dissertation/branding/Brand marks - Positive versions/ox_brand_black_pos.eps b/dissertation/branding/Brand marks - Positive versions/ox_brand_black_pos.eps new file mode 100644 index 0000000..a81d82c Binary files /dev/null and b/dissertation/branding/Brand marks - Positive versions/ox_brand_black_pos.eps differ diff --git a/dissertation/branding/Brand marks - Positive versions/ox_brand_black_pos_rect.eps b/dissertation/branding/Brand marks - Positive versions/ox_brand_black_pos_rect.eps new file mode 100644 index 0000000..f20cb74 Binary files /dev/null and b/dissertation/branding/Brand marks - Positive versions/ox_brand_black_pos_rect.eps differ diff --git a/dissertation/branding/Brand marks - Positive versions/ox_brand_cmyk_pos.eps b/dissertation/branding/Brand marks - Positive versions/ox_brand_cmyk_pos.eps new file mode 100644 index 0000000..368e129 Binary files /dev/null and b/dissertation/branding/Brand marks - Positive versions/ox_brand_cmyk_pos.eps differ diff --git a/dissertation/branding/Brand marks - Positive versions/ox_brand_cmyk_pos_rect.eps b/dissertation/branding/Brand marks - Positive versions/ox_brand_cmyk_pos_rect.eps new file mode 100644 index 0000000..695144f Binary files /dev/null and b/dissertation/branding/Brand marks - Positive versions/ox_brand_cmyk_pos_rect.eps differ diff --git a/dissertation/branding/Brand marks - Positive versions/ox_brand_special_pos.eps b/dissertation/branding/Brand marks - Positive versions/ox_brand_special_pos.eps new file mode 100644 index 0000000..87fc0fd Binary files /dev/null and b/dissertation/branding/Brand marks - Positive versions/ox_brand_special_pos.eps differ diff --git a/dissertation/branding/Brand marks - Positive versions/ox_brand_special_pos_rect.eps b/dissertation/branding/Brand marks - Positive versions/ox_brand_special_pos_rect.eps new file mode 100644 index 0000000..8db5562 Binary files /dev/null and b/dissertation/branding/Brand marks - Positive versions/ox_brand_special_pos_rect.eps differ diff --git a/dissertation/branding/Brand marks - Positive versions/ox_small_black_pos.eps b/dissertation/branding/Brand marks - Positive versions/ox_small_black_pos.eps new file mode 100644 index 0000000..7d998b5 Binary files /dev/null and b/dissertation/branding/Brand marks - Positive versions/ox_small_black_pos.eps differ diff --git a/dissertation/branding/Brand marks - Positive versions/ox_small_black_pos_rect.eps b/dissertation/branding/Brand marks - Positive versions/ox_small_black_pos_rect.eps new file mode 100644 index 0000000..9fed263 Binary files /dev/null and b/dissertation/branding/Brand marks - Positive versions/ox_small_black_pos_rect.eps differ diff --git a/dissertation/branding/Brand marks - Positive versions/ox_small_cmyk_pos.eps b/dissertation/branding/Brand marks - Positive versions/ox_small_cmyk_pos.eps new file mode 100644 index 0000000..980b181 Binary files /dev/null and b/dissertation/branding/Brand marks - Positive versions/ox_small_cmyk_pos.eps differ diff --git a/dissertation/branding/Brand marks - Positive versions/ox_small_cmyk_pos_rect.eps b/dissertation/branding/Brand marks - Positive versions/ox_small_cmyk_pos_rect.eps new file mode 100644 index 0000000..f0cbb41 Binary files /dev/null and b/dissertation/branding/Brand marks - Positive versions/ox_small_cmyk_pos_rect.eps differ diff --git a/dissertation/branding/Brand marks - Positive versions/ox_small_special_pos.eps b/dissertation/branding/Brand marks - Positive versions/ox_small_special_pos.eps new file mode 100644 index 0000000..5910039 Binary files /dev/null and b/dissertation/branding/Brand marks - Positive versions/ox_small_special_pos.eps differ diff --git a/dissertation/branding/Brand marks - Positive versions/ox_small_special_pos_rect.eps b/dissertation/branding/Brand marks - Positive versions/ox_small_special_pos_rect.eps new file mode 100644 index 0000000..12c4e81 Binary files /dev/null and b/dissertation/branding/Brand marks - Positive versions/ox_small_special_pos_rect.eps differ diff --git a/dissertation/branding/Brand marks - Reverse versions/ox_brand_black_rev.eps b/dissertation/branding/Brand marks - Reverse versions/ox_brand_black_rev.eps new file mode 100644 index 0000000..9e24f92 Binary files /dev/null and b/dissertation/branding/Brand marks - Reverse versions/ox_brand_black_rev.eps differ diff --git a/dissertation/branding/Brand marks - Reverse versions/ox_brand_black_rev_rect.eps b/dissertation/branding/Brand marks - Reverse versions/ox_brand_black_rev_rect.eps new file mode 100644 index 0000000..a1595b7 Binary files /dev/null and b/dissertation/branding/Brand marks - Reverse versions/ox_brand_black_rev_rect.eps differ diff --git a/dissertation/branding/Brand marks - Reverse versions/ox_brand_cmyk_rev.eps b/dissertation/branding/Brand marks - Reverse versions/ox_brand_cmyk_rev.eps new file mode 100644 index 0000000..487df7e Binary files /dev/null and b/dissertation/branding/Brand marks - Reverse versions/ox_brand_cmyk_rev.eps differ diff --git a/dissertation/branding/Brand marks - Reverse versions/ox_brand_cmyk_rev_rect.eps b/dissertation/branding/Brand marks - Reverse versions/ox_brand_cmyk_rev_rect.eps new file mode 100644 index 0000000..0fcdbe9 Binary files /dev/null and b/dissertation/branding/Brand marks - Reverse versions/ox_brand_cmyk_rev_rect.eps differ diff --git a/dissertation/branding/Brand marks - Reverse versions/ox_brand_special_rev.eps b/dissertation/branding/Brand marks - Reverse versions/ox_brand_special_rev.eps new file mode 100644 index 0000000..81e0f84 Binary files /dev/null and b/dissertation/branding/Brand marks - Reverse versions/ox_brand_special_rev.eps differ diff --git a/dissertation/branding/Brand marks - Reverse versions/ox_brand_special_rev_rect.eps b/dissertation/branding/Brand marks - Reverse versions/ox_brand_special_rev_rect.eps new file mode 100644 index 0000000..007b95e Binary files /dev/null and b/dissertation/branding/Brand marks - Reverse versions/ox_brand_special_rev_rect.eps differ diff --git a/dissertation/branding/Brand marks - Reverse versions/ox_small_black_rev.eps b/dissertation/branding/Brand marks - Reverse versions/ox_small_black_rev.eps new file mode 100644 index 0000000..eac7e36 Binary files /dev/null and b/dissertation/branding/Brand marks - Reverse versions/ox_small_black_rev.eps differ diff --git a/dissertation/branding/Brand marks - Reverse versions/ox_small_black_rev_rect.eps b/dissertation/branding/Brand marks - Reverse versions/ox_small_black_rev_rect.eps new file mode 100644 index 0000000..4939b2c Binary files /dev/null and b/dissertation/branding/Brand marks - Reverse versions/ox_small_black_rev_rect.eps differ diff --git a/dissertation/branding/Brand marks - Reverse versions/ox_small_cmyk_rev.eps b/dissertation/branding/Brand marks - Reverse versions/ox_small_cmyk_rev.eps new file mode 100644 index 0000000..b0198a8 Binary files /dev/null and b/dissertation/branding/Brand marks - Reverse versions/ox_small_cmyk_rev.eps differ diff --git a/dissertation/branding/Brand marks - Reverse versions/ox_small_cmyk_rev_rect.eps b/dissertation/branding/Brand marks - Reverse versions/ox_small_cmyk_rev_rect.eps new file mode 100644 index 0000000..1058f8f Binary files /dev/null and b/dissertation/branding/Brand marks - Reverse versions/ox_small_cmyk_rev_rect.eps differ diff --git a/dissertation/branding/Brand marks - Reverse versions/ox_small_special_rev.eps b/dissertation/branding/Brand marks - Reverse versions/ox_small_special_rev.eps new file mode 100644 index 0000000..93215b2 Binary files /dev/null and b/dissertation/branding/Brand marks - Reverse versions/ox_small_special_rev.eps differ diff --git a/dissertation/branding/Brand marks - Reverse versions/ox_small_special_rev_rect.eps b/dissertation/branding/Brand marks - Reverse versions/ox_small_special_rev_rect.eps new file mode 100644 index 0000000..1d7e067 Binary files /dev/null and b/dissertation/branding/Brand marks - Reverse versions/ox_small_special_rev_rect.eps differ diff --git a/dissertation/branding/Foundry Sterling Medium PCTT/Foustmd_.ttf b/dissertation/branding/Foundry Sterling Medium PCTT/Foustmd_.ttf new file mode 100755 index 0000000..71f1f7f Binary files /dev/null and b/dissertation/branding/Foundry Sterling Medium PCTT/Foustmd_.ttf differ diff --git a/dissertation/branding/Foundry Sterling Medium PCTT/Foustmde.ttf b/dissertation/branding/Foundry Sterling Medium PCTT/Foustmde.ttf new file mode 100755 index 0000000..9787c8d Binary files /dev/null and b/dissertation/branding/Foundry Sterling Medium PCTT/Foustmde.ttf differ diff --git a/dissertation/branding/Foundry Sterling Medium PCTT/Foustmdo.ttf b/dissertation/branding/Foundry Sterling Medium PCTT/Foustmdo.ttf new file mode 100755 index 0000000..8c50898 Binary files /dev/null and b/dissertation/branding/Foundry Sterling Medium PCTT/Foustmdo.ttf differ diff --git a/dissertation/branding/Oxford Blue LR.pdf b/dissertation/branding/Oxford Blue LR.pdf new file mode 100644 index 0000000..c2e3b18 Binary files /dev/null and b/dissertation/branding/Oxford Blue LR.pdf differ diff --git a/dissertation/branding/The Foundry Licence.pdf b/dissertation/branding/The Foundry Licence.pdf new file mode 100644 index 0000000..dd52b89 Binary files /dev/null and b/dissertation/branding/The Foundry Licence.pdf differ diff --git a/dissertation/branding/beltcrest.png b/dissertation/branding/beltcrest.png new file mode 100644 index 0000000..845d8ad Binary files /dev/null and b/dissertation/branding/beltcrest.png differ diff --git a/dissertation/branding/beltcrest_blue.png b/dissertation/branding/beltcrest_blue.png new file mode 100644 index 0000000..418a53a Binary files /dev/null and b/dissertation/branding/beltcrest_blue.png differ diff --git a/dissertation/branding/brand marks for web/.DS_Store b/dissertation/branding/brand marks for web/.DS_Store new file mode 100644 index 0000000..b6709b4 Binary files /dev/null and b/dissertation/branding/brand marks for web/.DS_Store differ diff --git a/dissertation/branding/brand marks for web/apple-touch-icon.png b/dissertation/branding/brand marks for web/apple-touch-icon.png new file mode 100644 index 0000000..80fe741 Binary files /dev/null and b/dissertation/branding/brand marks for web/apple-touch-icon.png differ diff --git a/dissertation/branding/brand marks for web/favicon.ico b/dissertation/branding/brand marks for web/favicon.ico new file mode 100644 index 0000000..ca59430 Binary files /dev/null and b/dissertation/branding/brand marks for web/favicon.ico differ diff --git a/dissertation/branding/brand marks for web/ox_brand1_pos.gif b/dissertation/branding/brand marks for web/ox_brand1_pos.gif new file mode 100644 index 0000000..85fbdd4 Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand1_pos.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand1_pos_rect.gif b/dissertation/branding/brand marks for web/ox_brand1_pos_rect.gif new file mode 100644 index 0000000..6e4fd91 Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand1_pos_rect.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand1_rev.gif b/dissertation/branding/brand marks for web/ox_brand1_rev.gif new file mode 100644 index 0000000..41afd0d Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand1_rev.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand1_rev_rect.gif b/dissertation/branding/brand marks for web/ox_brand1_rev_rect.gif new file mode 100644 index 0000000..2d0b1b8 Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand1_rev_rect.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand2_pos.gif b/dissertation/branding/brand marks for web/ox_brand2_pos.gif new file mode 100644 index 0000000..615eefc Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand2_pos.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand2_pos_rect.gif b/dissertation/branding/brand marks for web/ox_brand2_pos_rect.gif new file mode 100644 index 0000000..46d8237 Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand2_pos_rect.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand2_rev.gif b/dissertation/branding/brand marks for web/ox_brand2_rev.gif new file mode 100644 index 0000000..3561fc7 Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand2_rev.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand2_rev_rect.gif b/dissertation/branding/brand marks for web/ox_brand2_rev_rect.gif new file mode 100644 index 0000000..b1ce0dc Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand2_rev_rect.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand3_pos.gif b/dissertation/branding/brand marks for web/ox_brand3_pos.gif new file mode 100644 index 0000000..5b76a8d Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand3_pos.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand3_pos_rect.gif b/dissertation/branding/brand marks for web/ox_brand3_pos_rect.gif new file mode 100644 index 0000000..5a11095 Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand3_pos_rect.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand3_rev.gif b/dissertation/branding/brand marks for web/ox_brand3_rev.gif new file mode 100644 index 0000000..a42116d Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand3_rev.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand3_rev_rect.gif b/dissertation/branding/brand marks for web/ox_brand3_rev_rect.gif new file mode 100644 index 0000000..dc556ef Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand3_rev_rect.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand4_pos.gif b/dissertation/branding/brand marks for web/ox_brand4_pos.gif new file mode 100644 index 0000000..d9fd363 Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand4_pos.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand4_pos_rect.gif b/dissertation/branding/brand marks for web/ox_brand4_pos_rect.gif new file mode 100644 index 0000000..13a2948 Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand4_pos_rect.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand4_rev.gif b/dissertation/branding/brand marks for web/ox_brand4_rev.gif new file mode 100644 index 0000000..1348440 Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand4_rev.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand4_rev_rect.gif b/dissertation/branding/brand marks for web/ox_brand4_rev_rect.gif new file mode 100644 index 0000000..05129ba Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand4_rev_rect.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand5_pos_rect.gif b/dissertation/branding/brand marks for web/ox_brand5_pos_rect.gif new file mode 100644 index 0000000..8cd40cf Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand5_pos_rect.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand5_rev_rect.gif b/dissertation/branding/brand marks for web/ox_brand5_rev_rect.gif new file mode 100644 index 0000000..f267bda Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand5_rev_rect.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand6_pos_rect.gif b/dissertation/branding/brand marks for web/ox_brand6_pos_rect.gif new file mode 100644 index 0000000..b68a93b Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand6_pos_rect.gif differ diff --git a/dissertation/branding/brand marks for web/ox_brand6_rev_rect.gif b/dissertation/branding/brand marks for web/ox_brand6_rev_rect.gif new file mode 100644 index 0000000..baa1e74 Binary files /dev/null and b/dissertation/branding/brand marks for web/ox_brand6_rev_rect.gif differ diff --git a/dissertation/branding/footer.jpg b/dissertation/branding/footer.jpg new file mode 100644 index 0000000..709e631 Binary files /dev/null and b/dissertation/branding/footer.jpg differ diff --git a/dissertation/branding/header.jpg b/dissertation/branding/header.jpg new file mode 100644 index 0000000..b1fa295 Binary files /dev/null and b/dissertation/branding/header.jpg differ diff --git a/dissertation/branding/mathematics-logo.png b/dissertation/branding/mathematics-logo.png new file mode 100644 index 0000000..59821db Binary files /dev/null and b/dissertation/branding/mathematics-logo.png differ diff --git a/dissertation/branding/oxbeltcrest/oxbeltcrest.600gf b/dissertation/branding/oxbeltcrest/oxbeltcrest.600gf new file mode 100644 index 0000000..6ce7fbf Binary files /dev/null and b/dissertation/branding/oxbeltcrest/oxbeltcrest.600gf differ diff --git a/dissertation/branding/oxbeltcrest/oxbeltcrest.600pk b/dissertation/branding/oxbeltcrest/oxbeltcrest.600pk new file mode 100644 index 0000000..3be2014 Binary files /dev/null and b/dissertation/branding/oxbeltcrest/oxbeltcrest.600pk differ diff --git a/dissertation/branding/oxbeltcrest/oxbeltcrest.dvi b/dissertation/branding/oxbeltcrest/oxbeltcrest.dvi new file mode 100644 index 0000000..e69de29 diff --git a/dissertation/branding/oxbeltcrest/oxbeltcrest.mf b/dissertation/branding/oxbeltcrest/oxbeltcrest.mf new file mode 100644 index 0000000..83b11ac --- /dev/null +++ b/dissertation/branding/oxbeltcrest/oxbeltcrest.mf @@ -0,0 +1,962 @@ +% The "belted" crest of Oxford University. +% MF source by Ian Collier, June 1997, +% (C) Oxford University Computing Laboratory. +% +% The design drawn by this program is a trade mark of the University of +% Oxford. It may only be used for official University business, and +% then only for non-commercial purposes. More information is available +% from ftp://micros.oucs.ox.ac.uk/graphics/crests/readme.1st or from Mrs +% Patricia Whitehead, University Purchasing Officer. + +% If this is invoked in proof mode then reduce the resolution as +% 36 pixels per pt is rather too large for this design. Make sure +% a large enough window is opened on the display. +mode_def myproof = proof_; mode_param (pixels_per_inch, 600); enddef; +if unknown mode: mode=myproof; fi +def openit = openwindow currentwindow + from origin to (1152,1152) at (-50,800) enddef; + +% size# defines the diameter of the whole symbol. It probably doesn't +% help to change this. +size# = 95pt#; + +if unknown cmbase: input cmbase fi + +font_identifier "crest"; font_size size#; +font_coding_scheme "Char0"; +fontdimen 1: 0,0,0,0,0,0,0; +def font_identifier text t = enddef; +def font_size text t = enddef; +def font_coding_scheme text t = enddef; + +% input the definitions of letters +scantokens ("input " & jobname & "letters"); + +% The larger letters will be based on cmr9. +def generate primary p = enddef; +input cmr9; + +mode_setup; font_setup; def t_ = transformed currenttransform enddef; + +% Things satisfying the vague description "parameters" follow. +% Most numbers described as "position" are angles of elevation +% relative to the centre of the crest. It seems to be more +% convenient to work in polar co-ordinates. +% Names ending with f1, f2, etc describe parameters which didn't seem to +% deserve more descriptive names. + +thick# = 1.2pt#; % pen width for outer circle and belt +thin# = 0.33pt#; % pen width for inner circle and most details +outer_diam# = size#-thick# % diameter of outer circle + = 2outer_rad#; % radius of outer circle +circle_gap# = 1.4pt#; % circle-circle and circle-letter gap +belt_left_angle = 236; % position of edge of buckle +belt_over_angle = -49; % position 1 where belt crosses itself +belt_under_angle = -67; % position 2 where belt crosses itself +buckle_vert = -7; % angle of vertical bit of buckle +buckle_diam# = 3.5pt#; % diameter of round ends +buckle_width# = 3.5pt#; % width of buckle at wide end +pin_length# = 8pt#; % length of pin +pin_width# = 2.4pt#; % width of pin +fleur_depth# = 12pt#; % depth of tip of fleur +fleur_width# = 15pt#; % width of fleur +fleur_narrow# = 7pt#; % width of fleur at narrow point +bell_length# = 16pt#; % length of bell-shaped part +wavy_length# = 4.1pt#; % length of black wavy bit +wavy_width# = 2.0pt#; % initial width of wavy bit +wavy_dir = 4; % initial direction of wavy bit +belt_gap1# = 0.9pt#; % gap for horizontal belt +belt_gap2# = 0.6pt#; % gap for vertical belt +beltf1 = -62; % horizontal belt/ra2 cross position +beltf2 = 5; % horizontal belt/ra2 cross angle +beltf3 = -65; % horizontal belt 1-2 cross position +beltf4 = -59; % horizontal belt 2-3 cross position +beltf5 = 5; % angular width of vertical belt curl +beltf6 = -87; % position of top left of vertical belt +beltf7 = -93; % position of bottom left of v.b. +beltf8 = -80; % position of bottom right of v.b. +beltf9 = -83; % position of top right of lower v.b. +beltf10 = -96; % position of top left of lower v.b. +beltf11# = 17pt#; % width of lower v.b. at widest point +beltf12# = 55pt#; % depth of lower v.b. end +dot_angle1 = -89; % position of first dot +dot_angle2 = -79; % position of second dot +fleurf1# = 2.9pt#; % x-coord of inner point +fleurf2# = 4pt#; % y-coord of inner point rel to tip +fleurf3 = 10; % first direction +fleurf4 = 65; % second direction +fleurf5 = 105; % third direction +fleurf6 = -15; % fourth direction +fleurf7 = 80; % fifth direction +fleurf8 = 50; % sixth direction +fleurf9# = 9.8pt#; % height of points rel to tip +fleurf10# = 10pt#; % height of narrowest point rel to tip +book_width# = 38pt#; % overall width of book +book_height# = 22pt#; % overall height of book +book_inset# = 4.0pt#; % distance between cover and top page +book_thick# = 0.6pt#; % thickness of line for book outline +book_pos = 0.38; % how much of book is above centre line +book_wave# = 0.4pt#; % page deformation +seal_offset# = 4.0pt#; % horizontal length of seals +seal_width# = 1.8pt#; % width of seals +seal_diam# = 3.0pt#; % diameter of seals +crown_width_b# = 14.2pt#; % width of crown bottom +crown_width_t# = 20.2pt#; % width of crown between points +crown_height# = 13.4pt#; % total height of crown +crown_band# = 3.0pt#; % width of band at bottom of crown +crown_mag = 1.15; % difference in size of bottom crown +crown_gap# = 0.6pt#; % gap in crown band +crown_pos = 43; % angular position of top crowns +crown_pos3# = 2.3pt#; % height of bottom crown +crownf1# = 1.4pt#; % curve of crown bottom +crownf2# = 1.1pt#; % curve of crown band +crownf3 = 80; % angle of points +crownf4# = 1.0pt#; % protrusion of points + +% At various places in the source there are arbitrary numbers determined +% by trial and error. Any number which is used in two or more places is +% defined here. +ff1 = 0.55; % fudge factor 1 (buckle) +ff2 = -3; % fudge factor 2 (bell shape) +ff3 = 0.7; % fudge factor 3 (belt) +ff4 = 0.84; % fudge factor 4 (crown band) +ff5 = 0.78; % fudge factor 5 (crown) +ff6 = 5; % fudge factor 6 (crown) +ff7 = 0.56; % fudge factor 7 (crown) +ff8 = 0.35; % fudge factor 8 (crown) +ff9 = 1.6; % fudge factor 9 (shape within vertical belt) + +% Conversion from degrees to radians and vice versa +twopi=6.28318531; +vardef rad primary d = save r; 360r=twopi*d; r enddef; +vardef deg primary r = save d; 360r=twopi*d; d enddef; + +% It beats me why this useful definition was left out of plain.mf. :-) +vardef good.xy primary p = (good.x xpart(p),good.y ypart(p)) enddef; + +% For positions which are expressed as angles, it is useful to know +% at what point a path reaches that angle. The time will be +% angletime(path,dir) and the position will therefore be +% point angletime(path,dir) of path. +vardef radius primary d = (origin--2outer_rad*dir d) enddef; +vardef angletime (expr p,d) = xpart (p intersectiontimes radius d) enddef; + +% Helper function for inner_path +def offset(expr l) expr n of p = (unitvector direction n of p zscaled (0,l)) +enddef; + +% The following function takes a path p and a distance l and returns a +% (approximate) parallel path at distance l from p. If p goes +% anti-clockwise and l is positive, the new path will be inside p. +% The new path will be given f points for every point on the old path. +% This doesn't work for paths which are cycles, but some cycles can +% be hacked (see the shapes inside the lower belt). + +def inner_path (expr p,l,f) = + begingroup save a,b,t,d,q; + (point 0 of p shifted offset(l) epsilon of p){direction epsilon of p} + for n=1 upto f*length p-1: + .. + hide ( + pair d[]; + d2 = unitvector (direction (n/f-epsilon) of p); + d3 = unitvector (direction (n/f+epsilon) of p); + d5 = point n/f of p; + ) + if abs ((d2 rotated 90) dotprod d3) < eps: + (d5 shifted offset(l) n/f of p){direction n/f of p} + elseif (d2 zscaled (0,l)) dotprod d3 < 0: + % An external point is being made. + hide ( + d6 = d5 + d2 zscaled (0,l) + whatever*d2; + d6 = d5 + d3 zscaled (0,l) + whatever*d3; + ) + d5 shifted (d2 zscaled (0,l)) .. {curl1}d6{curl1} .. + d5 shifted (d3 zscaled (0,l)) + else: + % An internal point is being made + hide ( + numeric t[]; path q[]; + d1 = unitvector (direction (n-1)/f+epsilon of p); + d4 = unitvector (direction (n+1)/f-epsilon of p); + q1 = point (n-1)/f of p shifted (d1 zscaled (0,l)){d1} + ..{d2}point n/f of p shifted (d2 zscaled (0,l)); + q2 = point n/f of p shifted (d3 zscaled (0,l)){d3} + ..{d4}point (n+1)/f of p shifted (d4 zscaled (0,l)); + (t1,t2) = q1 intersectiontimes q2; + d0 = 1/2[point t1 of q1, point t2 of q2]; + ) + {direction t1 of q1}d0{direction t2 of q2} + fi + endfor + ..{direction (length p-epsilon) of p} + (point (length p) of p shifted offset(l) (length p-epsilon) of p) + endgroup +enddef; + +% It seems convenient for most of these to be in whole pixels, +% but parameters for the crown are going to be magnified by +% crown_mag anyway so they might as well be exact numbers. +define_whole_pixels(circle_gap,outer_rad); +define_whole_pixels(buckle_diam,buckle_width,pin_length,bell_length,pin_width); +define_whole_pixels(wavy_length); +define_whole_blacker_pixels(wavy_width); +define_whole_pixels(belt_gap1,belt_gap2,beltf11,beltf12); +define_whole_pixels(fleur_depth,fleur_width,fleur_narrow); +define_whole_pixels(fleurf1,fleurf2,fleurf9,fleurf10); +define_whole_blacker_pixels(thick,thin); +define_whole_pixels(book_width,book_height,book_inset,book_wave); +define_whole_blacker_pixels(book_thick); +define_whole_pixels(seal_offset,seal_width,seal_diam); +define_pixels(crown_width_b,crown_width_t,crown_height,crown_band); +define_pixels(crownf1,crownf2,crown_pos3); +define_pixels(crownf4); +define_pixels(crown_gap); + +pair centre; % centre of whole figure +centre=(hround(0.5size#*hppp),vround(0.5size#*hppp)); + +% The radii of the four outer circles (ra1-4), plus the baseline +% and centreline (ra5) for the outer lettering. +ra1 = outer_rad-eps; +ra2 = ra1-0.5[thin,thick]-circle_gap; +baseline = ra2-0.5thin-circle_gap-cap_height; +ra3 = baseline-circle_gap-0.5thin; +ra4 = ra3-0.5[thin,thick]-circle_gap; +ra5 = baseline+0.5cap_height; + +% Save some pens for later +pickup pencircle scaled book_thick; +book.nib := savepen; +pickup pencircle scaled thick; +thick.nib := savepen; +pickup pencircle scaled thin; +thin.nib := savepen; + +"The belted crest"; +beginchar(0,size#,size#,fleur_depth#+beltf12#-1/2size#); + adjust_fit(0pt#,0pt#); + % All co-ordinates are relative to the centre + currenttransform := identity shifted centre + if known currenttransform: transformed currenttransform fi; + + % The belt and associated devices are calculated first. They depend + % on things being drawn in the right order so that they overlap nicely. + message "(buckle,"; + % Pin + pair d.pin[]; + z.ptip1 = good.xy(ra5*dir belt_left_angle); + z.ptip2 = good.xy(ra5*dir (belt_left_angle+deg(pin_length/ra5))); + d.pin1 = 1/2pin_width*unitvector (z.ptip2-z.ptip1); + z.pcen1-z.ptip1 = d.pin1; + z.pcen2-z.ptip2 = -d.pin1; + d.pin2 = d.pin1 rotated 90; + z.pin1 = good.xy(z.pcen1+d.pin2); + z.pin2 = good.xy(z.pcen1-d.pin2); + z.pin3 = good.xy(z.pcen2-d.pin2); + z.pin4 = good.xy(z.pcen2+d.pin2); + labels(ptip1,ptip2,pin1,pin2,pin3,pin4); + + % Arms of buckle + z.bcen0 = good.xy(0.38[z.pcen1,z.pcen2]); + pair d.b[]; + d.b1 = dir (buckle_vert-90); + d.b2 = dir (2angle d.pin1 - (buckle_vert-90) + 3); + d.b3 = 1/2buckle_width*unitvector d.pin1; + buckle_length = (ra1-ra5)/(d.b1 dotprod -unitvector d.pin2); + path p.b[][]; + z.bcen1 = good.xy(z.bcen0+buckle_length*d.b1); + z.bcen2 = good.xy(z.bcen0+(buckle_length-1/2thick)*d.b2); + for i=1,2: + p.b[i]1 = good.xy (z.bcen0-d.b3)--good.xy(z.bcen[i]-ff1*d.b3); + p.b[i]2 = good.xy (z.bcen0+d.b3)--good.xy(z.bcen[i]+ff1*d.b3); + p.b[i]3 = fullcircle scaled (buckle_diam-eps) shifted z.bcen[i]; + t.b1[i] = xpart (p.b[i]3 intersectiontimes p.b[i]1); + t.b2[i] = xpart (p.b[i]3 intersectiontimes p.b[i]2); + endfor + labels(bcen0,bcen1,bcen2); + + % Bell-shaped part + z.bel1 = z.bcen1-1/2thick*d.b1; + z.bel2 = z.bcen2-1/2thick*d.b2; + bell_angle = belt_left_angle + deg(bell_length/ra5); + z.bel3 = (ra1+0.6*buckle_diam)*dir (bell_angle+ff2); + z.bel4 = (ra4-0.4buckle_diam)*dir bell_angle; + path p.bel; + p.bel = z.bel1{z.bel1 rotated 90}..z.bel3--z.bel4..{z.bel2 rotated -90}z.bel2; + t1.bel = xpart (p.bel intersectiontimes p.b1 3); + t2.bel = xpart (p.bel intersectiontimes p.b2 3); + labels(bel1,bel2,bel3,bel4); + + message " belt,"; + % Horizontal belt - 4 paths, of which number 1 is the lowest. + pair d.hb[]; + rb1 = ra2; + rb2 = rb1 - 1/2[thin,thick]-belt_gap1; + rb4 = ra3; + rb3 = rb4 + 1/2[thin,thick]+belt_gap1; + d.hb0 = dir (bell_angle+ff2); + for i=1 upto 4: z.hb[i]1 = rb[i]*d.hb0; endfor + d.hb1 = (z.bel2-z.bel1) rotated -90; + z.hb4 2 = ra1*dir belt_over_angle; + z.hb3 2 = z.hb4 2; + + path p.hb[]; + p.hb4 = z.hb4 1{d.hb1}..tension 1.5 and 1..(ra2*dir beltf1){dir beltf2}..{curl 1.5}z.hb4 2; + p.hb3 = subpath (0,ff3*length p.hb4) of (p.hb4 shifted (z.hb3 1-z.hb4 1))..{curl 1.5}z.hb3 2; + z.hb2 2 = point (angletime(p.hb3,beltf4)) of p.hb3; + p.hb2 = subpath (0,0.2*length p.hb3) of (p.hb3 shifted (z.hb2 1-z.hb3 1))..z.hb2 2; + z.hb1 2 = point (angletime(p.hb2,beltf3)) of p.hb2 shifted (thick*dir 45); + p.hb1 = subpath (0,ff3*length p.hb2) of (p.hb2 shifted (z.hb1 1-z.hb2 1))..z.hb1 2; + for i=1 upto 4: labels(z.hb[i]1,z.hb[i]2); endfor + + % The two holes in the horizontal belt + save dot; + z.dot1 1 = point angletime(p.hb2,dot_angle1) of p.hb2; + z.dot1 2 = point angletime(p.hb3,dot_angle1) of p.hb3 + - (0,1/2(thick-thin)); + z.dot2 1 = point angletime(p.hb2,dot_angle2) of p.hb2; + z.dot2 2 = point angletime(p.hb3,dot_angle2) of p.hb3 + - (0,1/2(thick-thin)); + z.dot1 = good.xy (1/2[z.dot1 1,z.dot1 2]); + z.dot2 = good.xy (1/2[z.dot2 1,z.dot2 2]); + labels(dot1,dot2); + + % The black wavy thing + path p.wavy; pair d.w[]; + d.w0 = unitvector (z.bel3-z.bel4); + d.w1 = d.w0 rotated 90; + d.w2 = dir wavy_dir; + z.w0 = good.xy(fullcircle scaled (rb2+rb3-thin+thick) + intersectionpoint p.bel); + z.w1 = z.w0 - 1/2wavy_width*d.w0; + z.w2 = z.w0 + 1/2wavy_width*d.w0; + z.w3 = good.xy(z.w0 + 1/2wavy_width*d.w0 + wavy_length*d.w1); + z.w4 = 1/3wavy_length*dir wavy_dir; + p.wavy = z.w2---(z.w2+z.w4)..{curl 1}z.w3{curl 1}.. + (z.w1+z.w4)---z.w1--cycle; + labels(w1,w2,w3); + + % The upper vertical belt - four paths of which number 1 is on the right + % plus the top of the vertical belt (p.vb5) and the connection between + % the vertical belt and the bell-shaped part (p.vb6). + path p.vb[]; + z.vb1 1 = point angletime(p.hb4,beltf8) of p.hb4; + z.vb1 2 = ra4*dir (belt_under_angle-beltf5); + z.vb1 3 = ra4*dir belt_under_angle; + p.vb1 = z.vb1 1..tension 1.5..z.vb1 2..z.vb1 3; + z.vb4 1 = point angletime(p.hb4,beltf7) of p.hb4; + z.vb4 2 = ra4*dir beltf6; + p.vb4 = z.vb4 1..tension 5 and 1..{direction 2 of p.vb1}z.vb4 2; + t.vb5 1 = xpart (fullcircle scaled 2ra4 intersectiontimes p.vb4); + t.vb5 2 = xpart (fullcircle scaled 2ra4 intersectiontimes p.vb1); + p.vb5 = subpath (t.vb5 2,t.vb5 1) of fullcircle scaled 2ra4; + z.vb6 1 = (fullcircle scaled 2ra4 intersectionpoint p.bel); + z.vb6 2 = (fullcircle scaled 2(ra4+thin) intersectionpoint p.vb4); + p.vb6 = z.vb6 2--z.vb6 1; + gap.vb = 1/2[thin,thick]+belt_gap2; + t.vb2 = xpart (p.vb1 shifted (-gap.vb,0) intersectiontimes p.vb5); + p.vb2 = subpath (0,t.vb2) of p.vb1 shifted (-gap.vb,0); + z.vb4 0 = direction 0 of p.vb4; + z.vb3 0 = point 0 of p.vb4 shifted (-thick*unitvector z.vb4 0); + p.vb3 = (z.vb3 0..p.vb4) shifted (gap.vb,0); + labels(vb1 1,vb1 2,vb1 3,vb4 1,vb4 2,vb6 1,vb6 2); + + % left and right sections of the lower vertical belt + z.vb10 1 = point angletime(p.hb1,beltf9) of p.hb1; + z.vb10 2 = good.xy(0.5beltf11,-beltf12); + z.vb11 1 = point angletime(p.hb1,beltf10) of p.hb1; + z.vb11 2 = (-x.vb10 2,y.vb10 2); + p.vb10 = subpath (1,2) of (z.vb1 1..z.vb10 1..z.vb10 2); + p.vb11 = subpath (1,2) of (z.vb4 1..z.vb11 1..z.vb11 2); + labels(vb10 1,vb10 2,vb11 1,vb11 2); + + % Fleur + z.tip = good.xy(0,-fleur_depth-beltf12); + y.tip = y.fl1-fleurf10 = y.fl2-fleurf9 = + y.fl3-fleurf2 = y.fl4; + y.fl5 = y.fl3; y.fl6 = y.fl2; y.fl7 = y.fl1; + -x.fl1 = x.fl7 = 0.5fleur_narrow; + -x.fl2 = x.fl6 = 0.5fleur_width; + -x.fl3 = x.fl5 = fleurf1; + -x.fl4 = x.fl4; + p.vb12 = z.vb11 2{dir fleurf3}..{down}z.fl1.. + {dir (180-fleurf4)}z.fl2{dir -fleurf5}.. + {dir -fleurf6}z.fl3{dir -fleurf7}.. + {dir -fleurf8}z.fl4{dir fleurf8}.. + {dir fleurf7}z.fl5{dir fleurf6}.. + {dir fleurf5}z.fl6{dir (180+fleurf4)}.. + z.fl7{up}..{dir -fleurf3}z.vb10 2; + labels(fl1,fl2,fl3,fl4,fl5,fl6,fl7); + + % The lower vertical belt is built up of the three above sections. + % Two parallel paths are created (one being for the inside of the + % thick line, and the other for the thin line). + p.vb21 = p.vb11 & p.vb12 & reverse p.vb10; + p.vb22 = inner_path(p.vb21, thick-hair,2); + p.vb23 = inner_path(p.vb21, 1/2thin+thick+belt_gap2,1); + + % The trapezoidal shape inside the lower belt + d.vb24 = 1.5fine+belt_gap2; + z1.vb24 = point 0.95 of p.vb23 shifted (d.vb24,0); + z2.vb24 = point ff9 of p.vb23 shifted (d.vb24,0); + y3.vb24 = y2.vb24; + y4.vb24 = y1.vb24; + x3.vb24 = -x2.vb24; + x4.vb24 = -x1.vb24; + z5.vb24 = direction ff9 of p.vb23; + z6.vb24 = direction (1+eps) of p.vb23; + p.vb24 = z1.vb24{z6.vb24}..{z5.vb24}z2.vb24-- + z3.vb24{(xpart z5.vb24,-ypart z5.vb24)}.. + {(xpart z6.vb24,-ypart z6.vb24)}z4.vb24--cycle; + % Since p.vb24 is a cycle, a small hack is required to get the + % inner path. + p.vb25 = inner_path(z4.vb24--p.vb24, 2.5fine, 1); + p.vb26 = (subpath (1,length p.vb25-1) of p.vb25)--cycle; + labels(1.vb24,2.vb24,3.vb24,4.vb24); + + % The pentagonal shape inside the lower belt + d.vb27 = 1/2thin+2.5fine; + z1.vb27 = point 2 of p.vb23 shifted (d.vb27,0); + z2.vb27 = point 2.3 of p.vb23 shifted (d.vb27,0); + y3.vb27-y2.vb27 = y2.vb27-y1.vb27; + y4.vb27 = y2.vb27; + y5.vb27 = y1.vb27; + x5.vb27 = -x1.vb27; + x4.vb27 = -x2.vb27; + x3.vb27 = -x3.vb27; + p.vb27 = z1.vb27--z2.vb27--z3.vb27--z4.vb27--z5.vb27--cycle; + p.vb28 = inner_path(z5.vb27--p.vb27, 2.5fine, 1); + p.vb29 = (subpath (1,length p.vb28-1) of p.vb28)--cycle; + labels(1.vb27,2.vb27,3.vb27,4.vb27,5.vb27); + + % This is where everything calculated above gets drawn in order, but first... + % Draw outer circles + pickup thick.nib; + t.circ1a = xpart (fullcircle scaled 2ra1 intersectiontimes p.b1 3); + t.circ1b = xpart (fullcircle scaled 2ra1 intersectiontimes p.hb3); + draw subpath (t.circ1b,t.circ1a+8) of fullcircle scaled 2ra1; + t.circ4a = xpart (fullcircle scaled 2ra4 intersectiontimes p.b2 3); + t.circ4b = xpart (fullcircle scaled 2ra4 intersectiontimes p.vb1); + draw subpath (t.circ4b,t.circ4a+8) of fullcircle scaled 2ra4; + pickup thin.nib; + t.circ2a = xpart (fullcircle scaled 2ra2 intersectiontimes p.b1 1); + t.circ2b = xpart (fullcircle scaled 2ra2 intersectiontimes p.hb4); + draw subpath (t.circ2b,t.circ2a+8) of fullcircle scaled 2ra2; + t.circ3a = xpart (fullcircle scaled 2ra3 intersectiontimes p.b2 1); + t.circ3b = xpart (fullcircle scaled 2ra3 intersectiontimes p.vb1); + draw subpath (t.circ3b,t.circ3a+8) of fullcircle scaled 2ra3; + + % Draw vertical belt + pickup thick.nib; + for i=1,4: draw p.vb[i]; endfor + pickup thin.nib; + for i=2,3,5,6: draw p.vb[i]; endfor + pickup pencircle scaled hair; + filldraw p.vb21--reverse p.vb22--cycle; + pickup thin.nib; draw p.vb23; + pickup fine.nib; + draw p.vb24; draw p.vb26; + draw p.vb27; draw p.vb29; + + % Draw horizontal belt + pickup thick.nib;draw p.hb1; + erase fill p.hb2--cycle; + pickup thin.nib;draw p.hb2; + erase fill p.hb3--reverse(p.hb4)--cycle; + draw p.hb4; + pickup thick.nib;draw p.hb3; + pickup pencircle scaled dot_size; + drawdot z.dot1; drawdot z.dot2; + fill p.wavy; + + % Draw bell-shaped part + pickup thin.nib; + erase fill (subpath (t1.bel,t2.bel) of p.bel)--cycle; + draw subpath (t1.bel,t2.bel) of p.bel; + + % Draw buckle arms + for i=1,2: + draw p.b[i]1; + draw p.b[i]2; + erase fill p.b[i]3; + endfor + draw subpath (t.b1 1,t.b2 1+8) of p.b1 3; + draw subpath (t.b2 2,t.b1 2+8) of p.b2 3; + + % Draw pin + erase fill z.pin2{d.pin1}..{d.pin1}z.pin3..{d.pin2}z.ptip2.. + z.pin4{-d.pin1}..{-d.pin1}z.pin1..{-d.pin2}z.ptip1..cycle; + draw z.ptip1{-d.pin2}..z.pin2{d.pin1}..{d.pin1}z.pin3..{d.pin2}z.ptip2; + pickup pencircle yscaled thin xscaled 2thin rotated angle d.pin2; + draw z.ptip2{d.pin2}..z.pin4{-d.pin1}..{-d.pin1}z.pin1..{-d.pin2}z.ptip1; + + message " lettering,"; + letterstart = belt_left_angle; + letterend = 0.3[belt_under_angle,belt_over_angle]; + letterspace*26 + 224u#*hppp = baseline*rad(letterstart-letterend); + % 224u# is an estimate of the width of the letters in + % "UNIVERSITY OF OXFORD", so letterspace now contains an estimate of + % the amount of space between letters, leaving one space at the ends + % and two each side of each dot. + + % "distance" is the distance around the circumference from the origin to + % the current letter. + numeric distance; + distance = rad(letterstart)*(baseline)-letterspace; + % "adjust_transform" is called for each letter to place it in the right position. + transform tfm; tfm:=currenttransform; + def adjust_transform = + save currenttransform; transform currenttransform; + currenttransform := + identity rotated (deg((distance-0.5w)/baseline)-90) + shifted (baseline*dir deg((distance+xoffset)/baseline)) + transformed tfm + enddef; + % Here the word "UNIVERSITY" is printed. + for letter = 0 upto 9: + distance := distance - letterspace - + hppp*scantokens("letter" & substring(letter,letter+1) of "UNIVERSITY"); + endfor; + university = distance; + + distance := rad(letterend)*(baseline)+letterspace; + % The word "OXFORD" will be printed in reverse starting from the end point. + def adjust_transform = + save currenttransform; transform currenttransform; + currenttransform := + identity rotated (deg((distance+0.5w)/baseline)-90) + shifted (baseline*dir deg((distance+r-l)/baseline)) + transformed tfm + enddef; + numeric wid[]; % save the widths of all the letters + for letter = 5 downto 0: + wid[letter] := hppp*scantokens("letter" & substring(letter,letter+1) of "OXFORD"); + distance := distance + letterspace + wid[letter]; + % CM Roman fonts have a small kern inside "OX" and "FO". + if (letter=3) or (letter=1): distance := distance - 0.5u; fi + endfor; + oxford = distance; + Of = wid2+wid0+3letterspace; + + % At this point, university and oxford hold the end points of the two words, + % including one letterspace after the word, and Of holds the width of OF, + % including one letterspace at each side. The word OF can now be centred + % between the other two words and dots can be inserted. + 4dotspace+Of = university-oxford; + distance := 1/2[oxford,university] - 1/2Of + letterspace; + distance := distance + letterspace + hppp*letterF; + distance := distance + letterspace + hppp*letterO; + pickup pencircle scaled dot_size; + drawdot good.xy(ra5*dir deg((oxford+dotspace)/baseline)); + drawdot good.xy(ra5*dir deg((university-dotspace)/baseline)); + + message " crowns,"; + % The "leaves" of the crown are "almost" pointed and slightly curved. + % A tension of 3 seems to do it, so a short-cut is in order. + def -+- = ..tension 3.. enddef; + + % This function draws a crown at point zc with magnification factor mag, + % and labels all the points with suffix s. This may be dependent on the + % line width and other factors, so doesn't work at just any magnification. + def crown(expr zc,mag)(suffix s) = + cgap.s = round(crown_gap*mag); % this number is used quite a lot + + % the band + path p.cr[]s; + z.cr0s=good.xy zc; % bottom + z.cr1s=z.cr0s+round(0,mag*crownf1); % centre of bottom + z.cr2s=z.cr1s+round(-mag*1/2crown_width_b,0); + y.cr3s=y.cr2s; x.cr3s-x.cr1s=x.cr1s-x.cr2s; + z.cr4s=z.cr1s+round(0,mag*crownf2); + + z.ba1s=round (z.cr2s+(-1/2cgap.s,mag*crown_band)); + z.ba2s=z.cr4s+round(0,mag*crown_band); + y.ba3s=y.ba1s; + x.ba3s-x.ba2s=x.ba2s-x.ba1s; + + pickup thin.nib; + draw halfcircle xscaled (x.cr3s-x.cr2s) yscaled (2round(y.cr0s-y.cr1s)+eps) + shifted z.cr1s; + p.cr1s=halfcircle xscaled (x.cr3s-x.cr2s) yscaled (2round(y.cr4s-y.cr1s)-eps) + shifted (z.cr1s+(0,cgap.s)); + draw p.cr1s; draw p.cr1s shifted (0,-cgap.s); + draw (z.cr0s+(-2cgap.s,cgap.s)){dir(180-ff6)}..{curl 5}(z.cr2s+(2cgap.s,0)).. + (good.xy z.cr4s-(0,cgap.s+eps))..(z.cr3s-(2cgap.s,0)){curl5}.. + {dir(180+ff6)}(z.cr0s+(2cgap.s,cgap.s)); + p.cr2s=halfcircle xscaled (x.ba3s-x.ba1s) yscaled (2round(y.cr4s-y.cr1s)-eps) + shifted good.xy (z.cr1s+(0,y.ba1s-y.cr2s)); + p.cr3s=p.cr2s shifted (0,cgap.s); + draw p.cr2s; draw p.cr3s; + for p = z.ba3s,z.ba1s,z.cr2s,z.cr3s: + draw p--(p shifted (0,cgap.s)); + endfor + + draw z.ba1s--(p.cr1s intersectionpoint (z.ba1s-- + (z.ba1s+(1/2(crown_width_t-crown_width_b),-crown_height)))); + draw z.ba3s--(p.cr1s intersectionpoint (z.ba3s-- + (z.ba3s-(1/2(crown_width_t-crown_width_b),crown_height)))); + labels(cr0s,cr1s,cr2s,cr3s,cr4s,ba1s,ba2s,ba3s); + + % These two functions determine where the top and bottom of the jewels go + % with respect to the edge of the band. + vardef band_bot primary p = (xpart p,ypart p-0.9cgap.s) enddef; + vardef band_top primary p = (xpart p,ypart p+0.9cgap.s) enddef; + + z.cir1s = 0.46[z.cr1s,z.cr2s]; + band_bot z.cir1a.s = p.cr1s intersectionpoint (z.cir1s--(z.cir1s+(0,mag*crown_height))); + band_top z.cir1b.s = p.cr2s intersectionpoint (z.cir1s--(z.cir1s+(0,mag*crown_height))); + diam.s = round (length(z.cir1b.s-z.cir1a.s)) - eps; + z.cir1c.s = 1/2[z.cir1b.s,z.cir1a.s]; + draw fullcircle scaled diam.s shifted good.xy z.cir1c.s; + z.cir2s = 0.46[z.cr1s,z.cr3s]; + band_bot z.cir2a.s = p.cr1s intersectionpoint (z.cir2s--(z.cir2s+(0,mag*crown_height))); + band_top z.cir2b.s = p.cr2s intersectionpoint (z.cir2s--(z.cir2s+(0,mag*crown_height))); + z.cir2c.s = 1/2[z.cir2b.s,z.cir2a.s]; + draw fullcircle scaled diam.s shifted good.xy z.cir2c.s; + labels(cir1c.s,cir2c.s); + + z.dia1s.a = ff4[z.cr1s,z.cr2s]; + z.dia1s.b = z.dia1s.a+(-1/2(crown_width_t-crown_width_b),crown_height); + band_bot z.dia1s1 = p.cr1s intersectionpoint (z.dia1s.a--z.dia1s.b); + band_top z.dia3s1 = p.cr2s intersectionpoint (z.dia1s.a--z.dia1s.b); + z.dia2s.a = ff4[z.cr1s,z.cr3s]; + z.dia2s.b = z.dia2s.a+(1/2(crown_width_t-crown_width_b),crown_height); + band_bot z.dia1s2 = p.cr1s intersectionpoint (z.dia2s.a--z.dia2s.b); + band_top z.dia3s2 = p.cr2s intersectionpoint (z.dia2s.a--z.dia2s.b); + band_bot z.dia1s3 = good.xy z.cr4s+(0,cgap.s); + band_top z.dia3s3 = good.xy z.ba2s; + for i=1,2,3: + z.dia0s[i] = good.xy (1/2[z.dia1s[i],z.dia3s[i]]); + z.dia2s[i] = good.xy (z.dia0s[i] + (z.dia1s[i]-z.dia3s[i]) zscaled (0,-1.1)); + z.dia4s[i]-z.dia0s[i] = z.dia0s[i]-z.dia2s[i]; + erase fill good.xy z.dia1s[i]--z.dia2s[i]--good.xy z.dia3s[i]--z.dia4s[i]--cycle; + draw good.xy z.dia1s[i]--z.dia2s[i]--good.xy z.dia3s[i]--z.dia4s[i]--cycle; + labels(dia0s[i],dia1s[i],dia2s[i],dia3s[i],dia4s[i]); + endfor + + % Calculate points for the centre "leaf" (right-hand half only). + % It is based on an equilateral triangle, raised slightly from the + % base of the crown. The side of the triangle is divided equally into 4. + z.tip.s = good.xy (z.cr0s+(0,mag*crown_height)); + hgt.s = length(z.tip.s-z.ba2s)-cgap.s; + y.tip.s - y.tri.s = trihgt.s = round(ff5*hgt.s); + z.tri.s - z.tip.s = whatever*dir-60; + z.circ.s = z.tip.s-2/3(0,trihgt.s); + draw fullcircle scaled diam.s shifted z.circ.s; + gap.s = round(0.7*(cgap.s+thin)); + draw (z.tip.s-(0,gap.s))--(z.circ.s+(0,gap.s+1/2diam.s)); + for j=1,2,3: z.tri[j]s = (j/4)[z.tip.s,z.tri.s]; endfor; + for j=1,2: + z.pt[j]s = 1/2[z.tri[j]s,z.tri[j+1]s] + mag*crownf4*dir30; + endfor + z.pt3s = z.tip.s+whatever*dir(-90+1/2crownf3); + z.pt3s = z.tri1s+whatever*dir30; + z.pt4s = z.tri.s+whatever*dir(150-1/2crownf3); + z.pt4s = z.tri3s+whatever*dir30; + z.pt5s = 1/2[z.pt3s,z.pt4s]; + z.pt6s = z.pt3s+1/2mag*crownf4*dir225; + z.pt7s = z.pt4s+1/2mag*crownf4*left; + z.pt8s = (1/2diam.s+gap.s)*dir 36 + z.circ.s; + z.pt9s = z.tri.s+whatever*dir(150+1/2crownf3); + x.pt9s = ff7[x.tip.s,x.tri.s]; + z.pt10s = z.pt9s+1/2mag*crownf4*dir135; + bot y.pt11s = y.ba2s+cgap.s; + x.pt11s = 1/2[x.tip.s,x.pt9s]; + x.pt12s = x.pt13s = x.tip.s; + y.pt12s = y.pt11s+mag*0.6crownf4; + y.pt13s = y.circ.s-1/2diam.s-gap.s; + x.pt14s = x.pt9s; + y.pt14s = y.pt9s - ff8*mag*crownf4; + labels(tip.s,tri.s,circ.s,pt1s,pt2s,pt3s,pt4s,pt5s,pt6s,pt7s,pt8s,pt9s, + pt10s,pt11s,pt12s,pt13s,pt14s); + + % Calculate points for the right-hand "leaf", a kind of rotated + % version of the centre one. + z.tipr.s = z.cr0s + round(1/2mag*crown_width_t,mag*0.85crown_height); + z.botr.s = good.xy (ff5[z.tipr.s,z.ba3s+(-cgap.s,cgap.s)]); + z.dirr1s = unitvector (z.tipr.s-z.botr.s); + z.dirr2s = z.dirr1s zscaled (0,1); + z.trir.s-z.botr.s = (z.tipr.s-z.botr.s) scaled 1/2 rotated 95; + z.cirr.s = good.xy (1/3[z.botr.s,z.tipr.s]); + path p.cir.s; + p.cir.s = fullcircle xscaled diam.s yscaled 1/2diam.s zscaled z.dirr1s + shifted z.cirr.s; + z.tipr1s = z.tipr.s - 1/2mag*crownf4*z.dirr2s; + z.tipr2s = z.tipr.s - mag*crownf4*z.dirr1s; + z.tipr3s = z.tipr.s+mag*0.7crownf4*z.dirr2s; + for j=1,2,3: + z.trir[j]s = (j/4)[z.tipr3.s,z.trir.s]; + endfor + for j=1,2: + z.ptr[j]s = 1/2[z.trir[j]s,z.trir[j+1]s] + mag*crownf4*unitvector + ((z.tipr3s-z.trir.s)rotated 85); + endfor + z.ptr4s = z.trir.s+whatever*(dir(1/2crownf3) zscaled unitvector + (z.cirr.s-z.trir.s)); + z.ptr4s = z.trir3s+whatever*z.dirr2s; + z.ptr3s = z.ptr4s+whatever*(z.tipr.s-z.trir.s); + z.ptr3s = z.trir1s+whatever*z.dirr2s; + z.ptr5s = 1/2[z.ptr3s,z.ptr4s]; + z.ptr6s = z.ptr3s+1/3mag*crownf4*dir-65; + z.ptr7s = z.ptr4s+1/2mag*crownf4*dir-30; + z.ptr8s = z.ptr5s+2/3mag*crownf4*dir-40; + z.ptr9s = z.trir.s+whatever*(dir(-1/2crownf3) zscaled unitvector + (z.cirr.s-z.trir.s)); + x.ptr9s = ff7[x.botr.s,x.trir.s]; + z.ptr10s = z.ptr9s + 1/2mag*crownf4*dir45; + z.ptr12s = z.botr.s - mag*0.4crownf4*z.dirr1s; + z.ptr13s = z.ptr9s - (0,ff8*mag*crownf4); + z.ptr11s = 0.4[z.ptr13s,z.botr.s] - mag*0.4crownf4*z.dirr1s; + labels(tipr.s,botr.s,trir.s,cirr.s,tipr1s,tipr2s,tipr3s, + ptr1s,ptr2s,ptr3s,ptr4s,ptr5s,ptr6s,ptr7s,ptr8s,ptr9s,ptr10s, + ptr11s,ptr12s,ptr13s); + + % Underneath the right-hand "leaf" appears to be a filled blob to + % fill the space between the "leaf" and the base of the crown. + path p.bl[]s; + p.bl1s = z.ba3s--(x.ba3s,y.tip.s); + p.bl2s = p.bl1s shifted round(x.ptr11s-x.ba3s,0); + p.bl3s = good.xy z.ptr13s-+-good.xy z.ptr11s-+-good.xy z.ptr12s---z.botr.s; + p.bl4s = good.xy(p.bl1s intersectionpoint p.bl3s)-- + good.xy(p.bl1s intersectionpoint p.cr3s)-- + good.xy(p.bl2s intersectionpoint p.cr3s)-- + good.xy(p.bl2s intersectionpoint p.bl3s)--cycle; + + % The bits in between the "leaves". + z.c0s = 0.5[z.circ.s,z.cirr.s]; + z.c1s = good.xy (z.cir2c.s + (y.circ.s-1/2[y.dia1s3,y.dia3s3])*unitvector(z.c0s-z.cir2c.s)); + z.c2s = (z.c1s--z.cir2c.s) intersectionpoint p.cr3s; + for i=1,2: z.c[i]a.s=z.c[i]s+(1/4diam.s,0);z.c[i]b.s=z.c[i]s-(1/4diam.s,0); endfor + forsuffixes i=a,b: z.c3i.s=0.6[z.c1i.s,z.c2i.s]; endfor + t.c1s = xpart (p.cr3s intersectiontimes ((z.c1s--z.cir2c.s) shifted (-diam.s,0))); + t.c2s = xpart (p.cr3s intersectiontimes ((z.c1s--z.cir2c.s) shifted (diam.s,0))); + z.c4s = z.c2s+1/2mag*crownf4*unitvector (z.c1s-z.cir2c.s); + labels(c0s,c1s,c2s,c4s,c1a.s,c1b.s,c2a.s,c2b.s,c3a.s,c3b.s); + + % Now everything is drawn twice - once for the right and once for the left. + forsuffixes i=r,l: + draw (z.tri.s+gap.s*dir 150)--(z.circ.s-(gap.s+1/2diam.s)*dir 150); + draw z.tip.s{right}-+-good.xy z.pt3s-+-good.xy z.pt6s--good.xy z.pt3s-+- + good.xy z.pt1s-+-good.xy z.pt5s-+-good.xy z.pt8s--good.xy z.pt5s-+- + good.xy z.pt2s-+-good.xy z.pt4s-+-good.xy z.pt7s--good.xy z.pt4s-+- + {dir210}good.xy z.tri.s-+-good.xy z.pt9s-+-good.xy z.pt10s-- + good.xy z.pt9s-+-good.xy z.pt14s-+-good.xy z.pt11s-+-good.xy z.pt12s--- + good.xy z.pt13s; + draw z.botr.s---z.tipr2s..z.tipr1s; + erase fill p.cir.s; draw p.cir.s; + draw good.xy (z.trir.s+gap.s*dir10)--good.xy (z.cirr.s-(gap.s+0.3diam.s)*dir10); + draw good.xy z.tipr1s---good.xy z.tipr.s..good.xy z.ptr3s-+-good.xy z.ptr6s-- + good.xy z.ptr3s-+-good.xy z.ptr1s-+-good.xy z.ptr5s-+-good.xy z.ptr8s-- + good.xy z.ptr5s-+-good.xy z.ptr2s-+-good.xy z.ptr4s-+-good.xy z.ptr7s-- + good.xy z.ptr4s-+-good.xy z.trir.s-+-good.xy z.ptr9s-+-good.xy z.ptr10s-- + good.xy z.ptr9s-+-good.xy z.ptr13s-+-good.xy z.ptr11s-+- + good.xy z.ptr12s-+-good.xy z.botr.s; + fill p.bl4s; + draw z.c1b.s---z.c3b.s..tension 1 and 2..good.xy z.pt14s; + draw z.c1a.s---z.c3a.s..tension 1 and 2..good.xy z.ptr13s; + erase fill fullcircle scaled diam.s shifted z.c1s; + draw fullcircle scaled (diam.s-eps) shifted z.c1s; + draw (point t.c1s of p.cr3s){-direction t.c1s of p.cr3s}..z.c4s & + z.c4s..{-direction t.c2s of p.cr3s}(point t.c2s of p.cr3s); + drawdot point 2 of p.cr3s shifted (0,1/2thin); + + currenttransform := identity reflectedabout (z.cr0s,z.tip.s) transformed + currenttransform; + endfor + + enddef; + + % Place the crowns + begingroup + interim proofing:=0; % no labels (instead a separate crown - see below) + -x.pos1 = x.pos2 = round 1/2(ra4*cosd crown_pos-crownf4); + y.pos1 = y.pos2 = round (ra4*sind crown_pos-0.85crown_height); + crown(z.pos1,1,a) + crown(z.pos2,1,b) + crown((0,-ra4+crown_pos3),crown_mag,c) + endgroup; + + message " book,"; + % Book outline (left-hand half) + pickup pencircle scaled book_thick; + z.bk1l = good.xy (-1/2book_width,book_pos*book_height); + y.bk1l = y.bk0l = y.bk5l+book_wave = y.bk6l-book_wave = y.bk7l; + y.bk2l = y.bk3l = y.bk4l-2/3book_inset = y.bk1l-book_height; + x.bk1l = x.bk2l = x.bk0l - book_inset; + x.bk3l+0.85book_inset = x.bk4l = x.bk5l = 0; + x.bk6l = hround (0.33[x.bk5l,x.bk0l]); + x.bk7l = hround (0.67[x.bk5l,x.bk0l]); + + z.bk0'l = z.bk0l - (book_thick,book_thick); + z.bk1'l = z.bk1l - (0,book_thick); + z.bk3'l = z.bk3l + 1/4(book_inset,book_inset); + z.bk3''l = z.bk3'l + (2/3book_thick,-1/3book_thick); + + % The left-hand points are mirrored to form the right-hand points. + % A few of these suffixes are used below. + forsuffixes i=0,1,2,3,4,5,6,7,0',1',3',3'',9,10,11: + y.bk.i.r=y.bk.i.l; x.bk.i.r=-x.bk.i.l; + endfor; + + % Draw outline. + forsuffixes i=l,r: + cutdraw good.xy z.bk0'i--good.xy z.bk1'i--good.xy z.bk2i--- + good.xy z.bk3i..z.bk3'i; + endfor + labels(bk1l,bk2l,bk3l,bk4l,bk5l,bk6l,bk7l,bk3''l,bk0'r,bk1'r,bk3'r); + + % Spine + pickup pencircle scaled book_thick; + vround y.bk3''l-y.bk9l = x.bk9l-hround x.bk3''l = + round (y.bk3'l-y.bk3l+1/2book_thick); + draw z.bk3''l..z.bk9l---z.bk9r..z.bk3''r; + pickup pencircle xscaled fine yscaled book_thick; + z.bk10l = 0.45[z.bk3''l,z.bk4l]; + z.bk12 = 1/2[z.bk3l,z.bk3r] + (0,1/3book_thick); + x.bk11l = x.bk10l; + y.bk11l = 1/2[y.bk10l,y.bk12]; + draw z.bk10l--z.bk11l{dir10}..{curl 5}z.bk12{curl5}..{dir-10}z.bk11r--z.bk10r; + labels(bk10l,bk11l,bk12); + + % Page outline + pickup thin.nib; + forsuffixes i=l,r: + draw z.bk3''i--z.bk4i--z.bk5i{curl 1}..z.bk6i..z.bk7i..z.bk0i; + endfor + + % The individual pages (left and right) + forsuffixes i=l,r: + pg := book_inset/5.5; + % One diagram of the crest has uneven pages on the left-hand side. If that + % were desired the next line might read + % for p = if str i="l": 0,0.9,2,2.8,4 else: 0,1,2,3,4 fi: + % and that's why z.pg[] is calculated twice even though the left ones and + % the right ones are the same in this case. + for p = 0,1,2,3,4: + z.pg0[p]i = z.bk0l; + z.pg1[p]i = z.pg0[p]i-(p*pg,p*0.7pg); + x.pg2[p]i = x.pg1[p]i; + y.pg2[p]i = y.bk2l+book_inset-p*pg; + z.pg3[p]i = (p/4)[z.bk4l,z.bk3''l]; + x.pg4[p]i = 0.33[x.pg2[p]i,x.pg3[p]i]; + x.pg5[p]i = 0.67[x.pg2[p]i,x.pg3[p]i]; + y.pg2[p]i = y.pg4[p]i = y.pg5[p]i-1/2book_wave; + + draw z.pg0[p]i--z.pg1[p]i--z.pg2[p]i{curl1}..z.pg4[p]i..good.xy z.pg5[p]i.. + good.xy z.pg3[p]i; + endfor + currenttransform := identity xscaled -1 transformed currenttransform; + endfor + for i=0 upto 5:labels(pg[i]1l); endfor + + % The seven seals + seal_gap = round(seal_diam+1.5thin); + x.s0 = good.x(x.bk1l-seal_offset); + y.s0 = good.y(y.bk1l-1/2book_height+4seal_gap); + for i = 1 upto 7: + z.s[i] = z.s[i-1]-(0,seal_gap) if i=7: + round(0.15*seal_offset,0) fi; + z.s0[i] = z.bk1l-(0,(i-1/2)*1/7book_height); + z.s1[i] = z.s0[i]+(0,1/2seal_width); + z.s2[i] = z.s[i]+(0.35seal_diam,((i-1)/6)[0.35seal_diam,seal_width-0.35seal_diam]); + draw z.s1[i]--z.s2[i]; + draw (z.s1[i]--z.s2[i]) shifted (0,-seal_width); + erase fill fullcircle scaled seal_diam shifted z.s[i]; + draw fullcircle scaled (seal_diam-eps) shifted z.s[i]; + labels(s[i],s0[i],s1[i],s2[i]); + endfor + + message " book lettering)"; + % The letters in the book will be based on cmbx5, but smaller, bolder and + % with smaller serifs. They are made relatively taller and thinner. + % Such modifications look OK in the book but would probably not bear + % close inspection in general. + + input cmbx5; + cap_height# := 1.5cap_height#; + u# := 0.93u#; + cap_stem# := 1.3cap_stem#; + cap_ess# := 1.4cap_ess#; + cap_curve# := 1.3cap_curve#; + hair#:=1.1hair#; + cap_jut# := 0.8cap_jut#; + + % The following hack makes the letters 2/3 of their real size. + old_hppp := hppp; + old_vppp := vppp; + hppp := 2/3hppp; + vppp := 2/3vppp; + font_setup; + hppp := old_hppp; + vppp := old_vppp; + forsuffixes i = u,cap_height,cap_serif_fit,width_adj: + i# := 2/3i#; + endfor + + def t_ = transformed currenttransform enddef; + currenttransform := tfm; + + let letterN = smallN; % Use the variant forms of these letters + let letterV = smallV; + + % When printing the letters the transform will be adjusted by + % the current value of xoffset. tfm holds the position of each + % letter. + def adjust_transform = + save currenttransform; transform currenttransform; + currenttransform := tfm shifted (xoffset,0) + enddef; + + string lett; + % Print letters. The special letter k inserts a kern. Some of the + % letters appear to need adjusting to make the spacing come out right. + % The letters are moved closer together by 1/2u. + def print_line (expr x,y,t) = + tfm := identity shifted round (x,y) transformed currenttransform; + for letter = 0 upto length(t)-1: + lett := substring(letter,letter+1) of t; + if lett = "A": tfm := tfm shifted (-hround 1.5u,0); + elseif lett="S" : tfm := tfm shifted (-hround u,0); fi + if lett = "k": tfm := tfm shifted (-hround 1.5u,0); + else: + wid := hppp*scantokens("letter" & lett) - 1/2u; + tfm := tfm shifted (hround wid,0); + fi + if (lett = "O") or (lett = "D") : tfm := tfm shifted (-hround u,0); fi + endfor + enddef; + + % Do the printing. + save baseline; + 4baseline-cap_height = book_height-book_inset; + print_line(x.bk0l+4u,y.bk0l-baseline,"DOkMI"); + print_line(x.bk0l+12u,y.bk0l-2baseline,"NVS"); + print_line(x.bk0l+7u,y.bk0l-3baseline,"ILLkkV"); + print_line(x.bk5l+3u,y.bk0l-baseline,"MINA"); + print_line(x.bk5l+13u,y.bk0l-2baseline,"TIO"); + print_line(x.bk5l+9u,y.bk0l-3baseline,"MEA"); + + % These assignments make MF put a suitable box round the character in the display. + currenttransform:=identity; body_height:=h; asc_height:=h/2; x_height:=3/4h; bar_height:=h/4; + desc_depth:=body_depth:=0; u:=w/4; +endchar; + +if displaying>0: stop "Press RETURN to continue"; fi % display the crest + +if proofing>0: % Draw a big crown to help with the proofing + factor=3.6; + wid# = factor*crown_width_t#; + hgt# = factor*crown_height#; + "A large crown"; + beginchar(1,wid#,hgt#,0); + thin# := 2thin#; + define_whole_blacker_pixels(thin); + pickup pencircle scaled thin;thin.nib:=savepen; + adjust_fit(0pt#,0pt#); + crown((w/2,0),factor,s); + body_height:=h; asc_height:=h/2; x_height:=3/4h; + desc_depth:=body_depth:=0; u:=w/4; + endchar; + if displaying>0: stop "Press RETURN to continue"; fi % display the crown +fi +end diff --git a/dissertation/branding/oxbeltcrest/oxbeltcrest.pdf b/dissertation/branding/oxbeltcrest/oxbeltcrest.pdf new file mode 100644 index 0000000..e398dbc Binary files /dev/null and b/dissertation/branding/oxbeltcrest/oxbeltcrest.pdf differ diff --git a/dissertation/branding/oxbeltcrest/oxbeltcrest.tfm b/dissertation/branding/oxbeltcrest/oxbeltcrest.tfm new file mode 100644 index 0000000..0a525ab Binary files /dev/null and b/dissertation/branding/oxbeltcrest/oxbeltcrest.tfm differ diff --git a/dissertation/branding/oxbeltcrest/oxbeltcrestletters.mf b/dissertation/branding/oxbeltcrest/oxbeltcrestletters.mf new file mode 100644 index 0000000..9d1ffd4 --- /dev/null +++ b/dissertation/branding/oxbeltcrest/oxbeltcrestletters.mf @@ -0,0 +1,668 @@ +% Definitions of letters for the "belted" crest, adapted from +% romanu.mf from the Computer Modern typeface. Many of the +% letters appear unchanged; some have been adapted where noted. +% The extra instruction adjust_transform has been inserted +% into each letter to place it in the correct position. + +% Instead of "beginchar" we use "beginletter", which provides +% a similar environment allowing the character to be used +% within another character. Labels are disabled; otherwise +% the many letters in the crest produce too many for gftodvi. +def beginletter(expr letter,w_sharp,h_sharp,d_sharp) = + begingroup + interim proofing:=0; + interim charwd:=w_sharp; + interim charht:=h_sharp; + interim chardp:=d_sharp; + interim charic:=0; + save w;w:=hround(charwd*hppp); + save h;h:=vround(charht*hppp); + save d;d:=vround(chardp*hppp); + save l,r,x,y +enddef; + +% And to end "beginletter" there is "endletter". It makes each +% letter evaluate to its character width. +def endletter = + scantokens extra_endchar; + charwd + endgroup +enddef; + +%def letterA = +% beginletter("A",13u#,cap_height#,0); +% adjust_fit(cap_serif_fit#,cap_serif_fit#); +% adjust_transform; +% numeric left_stem,right_stem,outer_jut,alpha; +% right_stem=cap_stem-stem_corr; +% left_stem=min(cap_hair if hefty: -3stem_corr fi,right_stem); +% outer_jut=.8cap_jut; x1l=w-x4r=l+letter_fit+outer_jut+.5u; y1=y4=0; +% x2-x1=x4-x3; x3r=x2r+apex_corr; y2=y3=h+apex_o+apex_oo; +% alpha=diag_ratio(2,left_stem,y2-y1,x4r-x1l-apex_corr); +% penpos1(alpha*left_stem,0); penpos2(alpha*left_stem,0); +% penpos3(alpha*right_stem,0); penpos4(alpha*right_stem,0); +% z0=whatever[z1r,z2r]=whatever[z3l,z4l]; +% if y0lower_notch: {left}(x4'-1,lower_notch){up}... fi + {z5-z6}diag_in(6r,5r,1,5l)--cycle; % diagonal + else: penpos5(whatever,0); penpos6(whatever,90); + z5l=z1l; z6l=z4l; + z7=z6l+(max(eps,cap_stem-3stem_corr-tiny),0) rotated (angle(z5l-z6l)-90); + z5r=z7+whatever*(z5l-z6l); z6r=z7+whatever*(z5l-z6l); + filldraw stroke z5e..z6e; fi % diagonal + if serifs: if hefty: serif(1,2,a,1/3,-cap_jut); % upper left serif + else: serif(5,6,a,1/3,-cap_jut); fi % upper left serif + dish_serif(2,1,b,1/2,cap_jut,c,1/2,cap_jut)(dark); % lower left serif + dish_serif(3,4,e,1/2,cap_jut,f,1/2,cap_jut)(dark); fi % upper right serif + math_fit(0,max(.5ic#-.5u#,0)); penlabels(1,1',2,3,4,4',5,6,7); + endletter +enddef; + +% The letter N for the book has a sharper point at the bottom right +% and the diagonal protrudes slightly at the top left. +def smallN = + beginletter("N",13u#+width_adj#,cap_height#,0); + italcorr cap_height#*slant-cap_serif_fit#+cap_jut#-2.5u#+min(.5cap_stem#,u#); + adjust_fit(cap_serif_fit#,cap_serif_fit#); + adjust_transform; + numeric thin_stem; thin_stem=hround(fudged.hair+stem_corr); + pickup tiny.nib; pos1(thin_stem,0); pos2(thin_stem,0); + pos3(thin_stem,0); pos4(thin_stem,0); + pickup tiny.nib; top y1=top y3=h; bot y2=bot y4=0; + x1=x2; x3=x4; x1l=w-x3r; + rt x3r=hround min(w-2u,w-3u+.5fudged.cap_stem); + penpos5(whatever,0); penpos6(whatever,90); + z1l-z5l=(2/3cap_jut,0); z6l=z4r; + z7=z6l+(max(eps,cap_stem-3stem_corr-tiny),0) rotated (angle(z5l-z6l)-90); + z5r=z7+whatever*(z5l-z6l); z6r=z7+whatever*(z5l-z6l); + filldraw stroke z1e--z2e; % left stem + pos4'(thin_stem,0); x4'=x4; y4'=y6; + filldraw stroke z3e--z4'e; % right stem + filldraw stroke z5e..z6e; % diagonal + if serifs: + serif(1,2,a,1/3,-cap_jut); % upper left serif + dish_serif(2,1,b,1/2,cap_jut,c,1/2,cap_jut)(dark); % lower left serif + dish_serif(3,4,e,1/2,cap_jut,f,1/2,cap_jut)(dark); fi % upper right serif + math_fit(0,max(.5ic#-.5u#,0)); penlabels(1,1',2,3,4,4',5,6,7); + endletter +enddef; + +def letterO = + beginletter("O",14u#-width_adj#,cap_height#,0); + italcorr .7cap_height#*slant-.5u#; + adjust_fit(0,0); + adjust_transform; + penpos1(vair',90); penpos3(vround(vair+1.5vair_corr),-90); + penpos2(cap_curve,180); penpos4(cap_curve,0); + if monospace: x2r=hround 1.5u; + interim superness:=sqrt superness; % make |"O"|, not |"0"| + else: x2r=hround u; fi + x4r=w-x2r; x1=x3=.5w; y1r=h+o; y3r=-o; + y2=y4=.5h-vair_corr; y2l:=y4l:=.52h; + penstroke pulled_super_arc.e(1,2)(.5superpull) + & pulled_super_arc.e(2,3)(.5superpull) + & pulled_super_arc.e(3,4)(.5superpull) + & pulled_super_arc.e(4,1)(.5superpull) & cycle; % bowl + math_fit(-.3cap_height#*slant-.5u#,ic#-.5u#); penlabels(1,2,3,4); + endletter +enddef; + +%def letterR = +% beginletter("R",if serifs: 12u#+.5max(2u#,cap_curve#) +% else:12.5u#-.5width_adj# fi,cap_height#,0); +% italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#; +% adjust_fit(cap_serif_fit#,0); +% adjust_transform; +% pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0); +% lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0; +% filldraw stroke z1e--z2e; % stem +% penpos3(cap_band,90); penpos4(cap_band,90); +% penpos5(cap_curve if hefty:-3stem_corr fi,0); +% penpos6(vair,-90); penpos7(vair,-90); +% z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7; +% x7=x2; y7l=vround(.5h+.5vair); x4=x6; +% if serifs: x4=.5w-.5u; x5r=hround(w-2.25u); +% else: x4=.5w+.5u; x5r=hround(w-u); fi +% x4l:=x6l:=x4-.125cap_curve; +% fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe +% if serifs: pos6'(vair,-90); pos0(cap_stem,180); +% pos8(cap_curve,180); pos9(vair,-90); pos10(hair,0); +% z6'=z6; lft x0r=lft x8r=hround(x5-2/3u-.5cap_curve); +% y8=1/3[y2,y7]; y0=3/5[y2,y7]; x9=.5[x8l,x10r]; +% bot y9r=-o; rt x10r=hround(w-.05u); y10=1/4[y2,y7]; +% filldraw stroke z6'e{right}..z0e---z8e....z9e{right}..z10e{up}; % tail +% nodish_serif(1,2,a,1/3,cap_jut,b,1/3,.5cap_jut); % upper serif +% dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif +% else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0); +% x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0; +% fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail +% math_fit(0,.75ic#); penlabels(0,1,2,3,4,5,6,7,8,9,10); +% endletter +%enddef; + +% This modified letter R has a straight tail instead of a curly one. +def letterR = + beginletter("R",if serifs: 12u#+.5max(2u#,cap_curve#) + else:12.5u#-.5width_adj# fi,cap_height#,0); + italcorr .75cap_height#*slant- if serifs: 1.75 else: .5 fi\\ u#; + adjust_fit(cap_serif_fit#,cap_serif_fit#); + adjust_transform; + pickup tiny.nib; pos1(cap_stem',0); pos2(cap_stem',0); + lft x1l=lft x2l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0; + filldraw stroke z1e--z2e; % stem + penpos3(cap_band,90); penpos4(cap_band,90); + penpos5(cap_curve if hefty:-3stem_corr fi,0); + penpos6(vair,-90); penpos7(vair,-90); + z3r=top z1; y4=y3; y5=.5[y4l,y6l]; y6=y7; + x7=x2; y7l=vround(.5h+.5vair); x4=x6; + if serifs: x4=.5w-.5u; x5r=hround(w-2.25u); + else: x4=.5w+.5u; x5r=hround(w-u); fi + x4l:=x6l:=x4-.125cap_curve; + fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe + if serifs: + pos8(cap_stem+stem_corr,0); pos9(cap_stem+stem_corr,0); + x8=x6+.5u; y8=y6; x9=hround(x5r); bot y9=0; + filldraw z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; % tail + serif(9,8,e,1/3,0.5cap_jut); % tail serif + nodish_serif(1,2,a,1/3,cap_jut,b,1/3,.5cap_jut); % upper serif + dish_serif(2,1,c,1/3,cap_jut,d,1/3,cap_jut); % lower serif + else: penpos8(cap_stem-2stem_corr,0); penpos9(cap_stem,0); + x8=x6+.5u; y8=y6; x9r=hround(w-.5u); y9=0; + fill z8l--diag_end(8l,9l,.5,1,9r,8r)--z8r--cycle; fi % tail + math_fit(0,.75ic#); penlabels(0,1,2,3,4,5,6,7,8,9,10); + endletter +enddef; + +def letterS = + beginletter("S",10u#,cap_height#,0); + italcorr cap_height#*slant-u#; + adjust_fit(0,0); + adjust_transform; + numeric theta; theta=90-angle(50u,h); slope:=-h/50u; % angle at middle + numeric s_slab; s_slab=if serifs:slab else:vround .2[slab,cap_stem] fi; + numeric ess'; ess'=max(fine.breadth,cap_ess); + pickup fine.nib; pos2(max(fine.breadth,s_slab-vround vair_corr),-90); + pos0(ess',theta); pos7(s_slab,-90); + x2+x7=2x0=w; x7-x2=if serifs: u else: 0 fi; top y2l=h+o; bot y7r=-o; + y0=.52h; lft x3l=hround u; rt x6r=hround(w-u); + x3r-x3l=x6r-x6l=hround .5[s_slab,ess']-fine; + ellipse_set(2l,3l,4l,0l); ellipse_set(2r,3r,4r,0r); y3=y3r; + ellipse_set(7l,6l,5l,0l); ellipse_set(7r,6r,5r,0r); y6=y6r; + filldraw stroke super_arc.e(2,3) & z3e{down} + ..z4e---z5e..z6e{down} & super_arc.e(6,7); % main stroke + if serifs: pos1(hair,180); pos8(hair,180); + rt x1l=hround(w-1.5u); lft x8r=hround u; + bot y1=vround 2/3h+1; top y8=vround 1/3h-1; + filldraw stroke z1e{x2-x1,10(y2-y1)}....{left}z2e; % upper arc + filldraw stroke z7e{left}....{up}z8e; % lower arc + path upper_arc, lower_arc; + upper_arc=z1{x2-x1,10(y2-y1)}....{left}z2; + lower_arc=z7{left}....{up}z8; + pos10(.3[fine.breadth,cap_hair],0); pos9(.3[fine.breadth,cap_hair],0); + x10r=x1l; top y10=top y2l; x9l=x8r; bot y9=bot y7r; + x1l-x1'=x8'-x8r=1.6cap_curve-fine; y1'=y1; y8'=y8; + numeric t; t=xpart(upper_arc intersectiontimes(z10l--z1')); + filldraw z1l--z10r--z10l--subpath(t,0) of upper_arc--cycle; % upper barb + t:=xpart(lower_arc intersectiontimes(z9r--z8')); + filldraw z8r--z9l--z9r--subpath(t,1) of lower_arc--cycle; % lower barb + else: pos1(1.2flare,-100); pos8(1.2flare,-100); + x1l=good.x(x1l+w-1.75u-rt x1); lft x8r=hround .8u; + top y1l=vround .93h+o; bot y8r=vround .1h-o; + filldraw stroke term.e(2,1,right,.9,4); % upper arc and terminal + filldraw stroke term.e(7,8,left,1,4); fi % lower arc and terminal + math_fit(0,.5ic#); penlabels(0,1,1',2,3,4,5,6,7,8,8',9,10); +endletter +enddef; + +def letterT = + beginletter("T",13u#-width_adj#,cap_height#,0); + italcorr cap_height#*slant-beak_jut#-.25u#; + adjust_fit(0,0); + adjust_transform; + h:=vround(h-2stem_corr); + pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0); + lft x1l=lft x2l=hround(.5w-.5cap_stem); top y1=h; bot y2=0; + filldraw stroke z1e--z2e; % stem + pickup crisp.nib; pos3(slab,90); pos4(hair,0); + top y3r=h; x3=x1; rt x4r=hround(w-.65u); y4=good.y(y3l-beak)-eps; + arm(3,4,e,beak_darkness,.7beak_jut); % right arm and beak + pos5(hair,180); x5=w-x4; y5=y4; + arm(3,5,f,beak_darkness,-.7beak_jut); % left arm and beak + if serifs: dish_serif(2,1,c,1/3,1.414cap_jut,d,1/3,1.414cap_jut); % lower serif + nodish_serif(1,2,a,1/3,.5cap_jut,b,1/3,.5cap_jut); fi % upper bracketing + math_fit(-.75cap_height#*slant,ic#-2.5u#); penlabels(1,2,3,4,5,6); + endletter +enddef; + +def letterU = + beginletter("U",13u#+.5width_adj#,cap_height#,0); + italcorr cap_height#*slant-cap_serif_fit#+cap_jut#-2.5u#+min(.5cap_stem#,u#); + if monospace: adjust_fit(cap_serif_fit#-.5u#,cap_serif_fit#-.5u#) + else: adjust_fit(cap_serif_fit#,cap_serif_fit#) fi; + adjust_transform; + pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0); + pos2'(cap_stem,180); z2'=z2; + pos3(cap_band,-90); + pos4(cap_hair,0); pos5(cap_hair,0); + x1=x2; x3=.5[x1,x5]; x4=x5; x1l=w-x5r; + top y1=top y5=h; y2=y4=1/3h; bot y3r=-o; + lft x1l=hround max(2u,3u-.5cap_stem); + filldraw stroke z1e--z2e; % left stem + filldraw stroke pulled_arc.e(2',3) + & pulled_arc.e(3,4)&z4e--z5e; % arc and right stem + if serifs: dish_serif(1,2,a,1/3,cap_jut,b,1/3,cap_jut); % left serif + dish_serif(5,4,c,1/2,cap_jut,d,1/2,cap_jut)(dark); fi % right serif + math_fit(-cap_serif_fit#-.3cap_height#*slant-min(cap_height#*slant,u#), + max(.5ic#-.5u#,0)); penlabels(1,2,3,4,5); + endletter +enddef; + +def letterV = + beginletter("V",13u#,cap_height#,0); + italcorr cap_height#*slant+.25u#; + adjust_fit(cap_serif_fit#,cap_serif_fit#); + adjust_transform; + numeric left_stem,right_stem,outer_jut,alpha; + left_stem=cap_stem-stem_corr; + right_stem=min(cap_hair if hefty:-2stem_corr fi,left_stem); + outer_jut=.75cap_jut; x1l=w-x4r=l+letter_fit+outer_jut+.25u; y1=y4=h; + x2-x1=x4-x3; x2l+apex_corr=x3l; y2=y3=-apex_o; + alpha=diag_ratio(2,right_stem,y1-y2,x4r-x1l-apex_corr); + penpos1(alpha*left_stem,0); penpos2(alpha*left_stem,0); + penpos3(alpha*right_stem,0); penpos4(alpha*right_stem,0); + z0=whatever[z1r,z2r]=whatever[z3l,z4l]; + if y0>cap_notch_cut: y0:=cap_notch_cut; + fill z0+.5right{up}...{z4-z3}diag_end(3l,4l,1,1,4r,3r) + --diag_end(4r,3r,1,1,2l,1l)--diag_end(2l,1l,1,1,1r,2r){z2-z1} + ...{down}z0+.5left--cycle; % left and right diagonals + else: fill z0--diag_end(0,4l,1,1,4r,3r)--diag_end(4r,3r,1,1,2l,1l) + --diag_end(2l,1l,1,1,1r,0)--cycle; fi % left and right diagonals + if serifs: numeric inner_jut; pickup tiny.nib; + prime_points_inside(1,2); prime_points_inside(4,3); + if rt x1'r+cap_jut+.5u+1<=lft x4'l-cap_jut: inner_jut=cap_jut; + else: rt x1'r+inner_jut+.5u+1=lft x4'l-inner_jut; fi + dish_serif(1',2,a,1/3,outer_jut,b,1/2,inner_jut); % left serif + dish_serif(4',3,c,.6,inner_jut,d,1/2,outer_jut)(dark); fi % right serif + math_fit(.75u#-cap_height#*slant,ic#-4u#); penlabels(0,1,2,3,4); + endletter +enddef; + +% The V in the book has a sharper point. +def smallV = + beginletter("V",13u#,cap_height#,0); + italcorr cap_height#*slant+.25u#; + adjust_fit(cap_serif_fit#,cap_serif_fit#); + adjust_transform; + numeric left_stem,right_stem,outer_jut,alpha; + left_stem=cap_stem-stem_corr; + right_stem=min(cap_hair if hefty:-2stem_corr fi,left_stem); + outer_jut=.75cap_jut; x1l=w-x4r=l+letter_fit+outer_jut+.25u; y1=y4=h; + x2-x1=x4-x3; + x2l=x3r; y2=y3=0; + alpha=diag_ratio(2,right_stem,y1-y2,x4r-x1l-apex_corr); + penpos1(alpha*left_stem,0); penpos2(alpha*left_stem,0); + penpos3(alpha*right_stem,0); penpos4(alpha*right_stem,0); + z0=whatever[z1r,z2r]=whatever[z3l,z4l]; + if y0>cap_notch_cut: y0:=cap_notch_cut; + fill z0+.5right{up}...{z4-z3}diag_end(3l,4l,1,1,4r,3r) + --diag_end(4r,3r,1,1,2l,1l)--diag_end(2l,1l,1,1,1r,2r){z2-z1} + ...{down}z0+.5left--cycle; % left and right diagonals + else: fill z0--diag_end(0,4l,1,1,4r,3r)--diag_end(4r,3r,1,1,2l,1l) + --diag_end(2l,1l,1,1,1r,0)--cycle; fi % left and right diagonals + if serifs: numeric inner_jut; pickup tiny.nib; + prime_points_inside(1,2); prime_points_inside(4,3); + if rt x1'r+cap_jut+.5u+1<=lft x4'l-cap_jut: inner_jut=cap_jut; + else: rt x1'r+inner_jut+.5u+1=lft x4'l-inner_jut; fi + dish_serif(1',2,a,1/3,outer_jut,b,1/2,inner_jut); % left serif + dish_serif(4',3,c,.6,inner_jut,d,1/2,outer_jut)(dark); fi % right serif + math_fit(.75u#-cap_height#*slant,ic#-4u#); penlabels(0,1,2,3,4); + endletter +enddef; + +def letterX = + beginletter("X",13u#,cap_height#,0); + italcorr cap_height#*slant-.25u#; + adjust_fit(cap_serif_fit#,cap_serif_fit#); + adjust_transform; + numeric stem[],outer_jut,xjut,alpha[]; + stem1=cap_stem-2stem_corr; stem2=min(cap_hair,stem1); + outer_jut=.75cap_jut; xjut= if serifs: (stem1-stem2)/4 else: 0 fi; + x1l=l+letter_fit+.5u+outer_jut; x2r=r-letter_fit-u-outer_jut-xjut; + x3l=l+letter_fit+.25u+outer_jut+xjut; x4r=r-letter_fit-.25u-outer_jut; + y1=y2=h; y3=y4=0; + alpha1=diag_ratio(1,stem1,h,x4r-x1l); + alpha2=diag_ratio(1,stem2,h,x2r-x3l); + penpos1(alpha1*stem1,0); penpos2(alpha2*stem2,0); + penpos3(alpha2*stem2,0); penpos4(alpha1*stem1,0); + if hefty: z0=whatever[z1,z4]=whatever[z2,z3]; + x12=x34=x0; y13=y24=y0; + z12=whatever[z2l,z3l]; z13=whatever[z2l,z3l]; + z24=whatever[z2r,z3r]; z34=whatever[z2r,z3r]; + forsuffixes $=13,24,34: z$'=.1[z$,z0]; endfor + fill diag_end(12,1r,.5,1,1l,13')--z13'--diag_end(13',3l,1,.5,3r,34')--z34' + --diag_end(34',4l,.5,1,4r,24')--z24' + --diag_end(24',2r,1,.5,2l,12)--z12--cycle; % diagonals + else: fill diag_end(4r,1r,.5,1,1l,4l) + --diag_end(1l,4l,.5,1,4r,1r)--cycle; % left diagonal + fill diag_end(2l,3l,.5,1,3r,2r) + --diag_end(3r,2r,.5,1,2l,3l)--cycle; fi % right diagonal + if serifs: numeric inner_jut[]; pickup tiny.nib; + prime_points_inside(1,4); prime_points_inside(2,3); + prime_points_inside(3,2); prime_points_inside(4,1); + if rt x1'r+cap_jut+.5u+1<=lft x2'l-cap_jut-xjut: inner_jut1=cap_jut; + else: rt x1'r+inner_jut1+.5u+1=lft x2'l-inner_jut1-xjut; fi + if rt x3'r+cap_jut+.5u+1<=lft x4'l-cap_jut-xjut: inner_jut2=cap_jut; + else: rt x3'r+inner_jut2+.5u+1=lft x4'l-inner_jut2-xjut; fi + dish_serif(1',4,a,1/3,outer_jut,b,2/3,inner_jut1); % upper left serif + dish_serif(4',1,c,2/3,inner_jut2,d,1/3,outer_jut); % lower right serif + dish_serif(2',3,e,2/3,inner_jut1+xjut, + f,1/2,outer_jut+xjut)(dark); % upper right serif + dish_serif(3',2,g,1/2,outer_jut+xjut, + h,2/3,inner_jut2+xjut)(dark); fi % lower left serif + math_fit(0,.5ic#); penlabels(0,1,2,3,4,12,13,24,34); + endletter +enddef; + +def letterY = + beginletter("Y",13u#,cap_height#,0); + italcorr cap_height#*slant+.45u#; + adjust_fit(cap_serif_fit#,cap_serif_fit#); + adjust_transform; + numeric left_stem,right_stem,outer_jut,dy,alpha; + left_stem=cap_stem-stem_corr; + right_stem=min(cap_hair if hefty:-2stem_corr fi,left_stem); + outer_jut=.75cap_jut; x1l=w-x4r=l+letter_fit+outer_jut+.05u; + x2l=x5l=hround(.5w-.5left_stem); x3r=x5r; y1=y4=h; y2=y3=y5=.4h; + dy=y1-y2; alpha=((x2l-x1l)++dy)/dy; + penpos1(alpha*left_stem,0); penpos2(alpha*left_stem,0); + penpos3(alpha*right_stem,0); penpos4(alpha*right_stem,0); + penpos5(left_stem,0); penpos6(left_stem,0); x5=x6; y6=0; + z0=whatever[z1r,z2r]=whatever[z3l,z4l]; + if y0>y2+cap_notch_cut: y0:=y2+cap_notch_cut; + fill z0+.5right{up}...{z4-z3}diag_end(3l,4l,1,1,4r,3r)--z5r + --diag_end(5r,6r,1,1,6l,5l)--z5l--diag_end(2l,1l,1,1,1r,2r){z2-z1} + ...{down}z0+.5left--cycle; % diagonals and stem + else: fill z0--diag_end(0,4l,1,1,4r,3r)--z5r + --diag_end(5r,6r,1,1,6l,5l)--z5l + --diag_end(2l,1l,1,1,1r,0)--cycle; fi % diagonals and stem + if serifs: numeric inner_jut; pickup tiny.nib; + prime_points_inside(1,2); prime_points_inside(4,3); prime_points_inside(6,5); + if rt x1'r+cap_jut+.5u+1<=lft x4'l-cap_jut: inner_jut=cap_jut; + else: rt x1'r+inner_jut+.5u+1=lft x4'l-inner_jut; fi + dish_serif(1',2,a,1/3,outer_jut,b,1/2,inner_jut); % upper left serif + dish_serif(4',3,c,.6,inner_jut,d,1/2,outer_jut)(dark); % upper right serif + dish_serif(6',5,e,1/3,cap_jut,f,1/3,cap_jut); fi % lower serif + math_fit(.5u#-cap_height#*slant,ic#-4u#); + penlabels(0,1,2,3,4,5,6); + endletter +enddef; + diff --git a/dissertation/branding/oxbeltcrest/testfont.dvi b/dissertation/branding/oxbeltcrest/testfont.dvi new file mode 100644 index 0000000..229934c Binary files /dev/null and b/dissertation/branding/oxbeltcrest/testfont.dvi differ diff --git a/dissertation/branding/oxbeltcrest/testfont.pdf b/dissertation/branding/oxbeltcrest/testfont.pdf new file mode 100644 index 0000000..48879d9 Binary files /dev/null and b/dissertation/branding/oxbeltcrest/testfont.pdf differ diff --git a/dissertation/branding/oxcrest/oxcrest40.mf b/dissertation/branding/oxcrest/oxcrest40.mf new file mode 100644 index 0000000..f396417 --- /dev/null +++ b/dissertation/branding/oxcrest/oxcrest40.mf @@ -0,0 +1,307 @@ +% METAFONT program to draw Oxford University crest. + +mode_setup; + +def crown(suffix $) = + + def spear (suffix i) = + z.i.c = z.i + (0, 2.5u); + z.i.a = z.i + (-0.25u, 0); z.i.e = z.i.a reflectedabout (z.i, z.i.c); + z.i.b = z.i + (-0.6u, u); z.i.d = z.i.b reflectedabout (z.i, z.i.c); + enddef; + + def spearpath (suffix i)(expr theta) = + (z.i.a{up}...{left}z.i.b--z.i.c--z.i.d{left}...{down}z.i.e) + rotatedaround (z.i,theta) + enddef; + + def axis = + (z1$, z9$) + enddef; + + z1$ = (7.5u, 0); + z2$ = (3.5u, u); + z3$ = (0, 7.5u); + z4$ = (1.75u, 6.5u); + z5$ = (2.5u, 5.5u); + z5$.a = (2u, 5.5u); + z6$ = (4.25u, 5.5u); spear(6$); + z7$ = (5.5u, 6u); + z7$.a = (6u, 6.5u); + z8$ = (7u, 7u); + z9$ = (7.5u, 9.5u); + + path p; + p = z1${left}..z2${dir 135}..{dir 135}z3$ & + z3${dir 20}..{down}z4$ & + z4${dir 45}..{-dir 45}z5$ & + z5${up}..z5$.a{down}..spearpath(6$,15)..{left}z7$.a..{down}z7$ & + z7${dir 135}..{-dir 135}z8$ & + z8${dir 120}..z9$; + pickup pencircle scaled .01pt; + fill (p -- (reverse p reflectedabout axis) -- cycle); + + penpos10$(.5u, -70); z10$l = (3u, 3.5u); + z11$l = z10$l reflectedabout axis; + z11$r = z10$r reflectedabout axis; + unfill z10$l{dir 20}..{dir -20}z11$l--z11$r{dir 160}..{dir 200}z10$r--cycle; + + unfill unitsquare shifted (-.5,-.5) rotated -45 xscaled .75u yscaled u + shifted (7.5u, 3u); + + path ellipticaljewel; + ellipticaljewel = fullcircle xscaled .75u yscaled u rotated 15 + shifted (5.5u, 2.75u); + unfill ellipticaljewel; + unfill ellipticaljewel reflectedabout axis; + + path diamondjewel; + diamondjewel = unitsquare shifted (-.5,-.5) rotated -45 + xscaled .5u yscaled .75u rotated 20 shifted (4u, 2.4u); + unfill diamondjewel; + unfill diamondjewel reflectedabout axis; + + unfill fullcircle xscaled 6u yscaled 1.5u shifted (7.5u, u); + fill fullcircle xscaled 4.5u yscaled u shifted (7.5u, .85u); +enddef; + +def shield(suffix $) = + z1$ = (.5w, 0); + + def axis = (z1$, z1$ + (0,1)) enddef; + + z2$ = (0, 40u); + z3$ = z2$ reflectedabout axis; + + pickup pencircle scaled u; + draw z1${dir 160}..{dir 80}z2$---z3${dir -80}..{dir -160}z1$; + +enddef; + +def book(suffix $) = + z1$ = (12.5u, 0); + + roundness := u; + thick := .4u; + thin := .25u; + + def axis = (z1$, z1$ + (0,1)) enddef; + + z2$ = z1$ + (-2u, 2u); + z3$ = z2$ + 2u*down; z3$a = z3$+roundness*up; z3$b = z3$+roundness*left; + z4$ = (0,0); z4$a = z4$+roundness*right; z4$b = z4$+roundness*up; + z5$ = (0, 13u); z5$a = z5$+roundness*down; z5$b = z5$+roundness*right; + z6$ = (2u, 12u); + + path p; + p = z1${left}..z2${up} & + z2${down}..z3$a..z3$b---z4$a..z4$b---z5$a..z5$b..{dir -45}z6$; + + pickup pencircle scaled thick; + draw p; + draw (p reflectedabout axis); + + z7$ = z1$ + 2u*up; + z8$ = (3u, 3u); + + path pageedge; + pageedge = z7${dir 135}..z8${dir 150}; + + path page; + page = pageedge --- (reverse pageedge shifted (10u*up)) --- cycle; + + pickup pencircle scaled thin; + draw page; + draw page reflectedabout axis; + + z9$ = z1$ + (-3u, 1.5u); + z10$ = (1.5u, 1.5u); + z11$ = z10$ + 10u*up; + + draw z10$--z8$; + draw z11$--(z8$ shifted (10u*up)); + draw z10$--(z10$ + .5u*up); + + draw (z8$--z10$--z11$--(z8$ shifted (10u*up))) reflectedabout axis; + draw ((z10$+(.5u, .5u))--(z11$+(.5u, .5u))) reflectedabout axis; + draw ((z10$+(u, u))--(z11$+(u, u))) reflectedabout axis; + + path pages; + pages=(z9$..(z9$+.8u*up){left}..(z10$+(.8u, .8u)){dir 150}---z10$--- cycle) + shifted (.5thin * down); + fill pages; + fill pages reflectedabout axis; + + fill (halfcircle--cycle) xscaled 2u yscaled u shifted z7$; + fill (halfcircle--cycle) rotated 180 xscaled 2u yscaled 1.5u shifted z7$; + + def blob(expr z) = + fill fullcircle scaled 1.5u shifted z; + enddef; + + def dangle(suffix i) = + draw (z.i + .5u*right)--(z.i + 1.5u*left); + blob (z.i + 1.5u*left) + enddef; + + z12$ = z10$ + (0, u); dangle (12$); + blob (z12$ +1.5u*up); + + z13$ = z12$ + (0, 3u); dangle (13$); + blob (z13$ +1.5u*up); + + z14$ = z13$ + (0, 3u); dangle (14$); + blob (z14$ +1.5u*up); + + z15$ = z14$ + (0, 3u); dangle (15$); + + lht := 2u; + + def letterD ( expr p ) = + pair d.a, d.b; + d.a = p + lht*up; + d.b = p + (5/8lht, 1/2lht); + draw p--d.a{right}..d.b..{left}p; + enddef; + + def letterO ( expr p) = + draw fullcircle xscaled 3/4lht yscaled lht shifted (p + (3/8lht,1/2lht)); + enddef; + + def letterM ( expr p ) = + pair m.a, m.b, m.c, m.d; + m.a = p + lht*up; + m.c = m.a + lht*right; + m.d = p + lht*right; + m.b = .5[p, m.d]; + draw p--m.a--m.b--m.c--m.d; + enddef; + + def letterI ( expr p ) = + draw p--(p+lht*up); + enddef; + + def letterN ( expr p ) = + pair m.a, m.b, m.c; + m.a = p + lht*up; + m.b = p + 3/4lht*right; + m.c = m.b + lht*up; + draw p--m.a--m.b--m.c; + enddef; + + def letterU ( expr p ) = + pair u.a, u.b, u.c; + u.a = p + lht*up; + u.c = u.a + 3/4lht*right; + u.b = p + 3/8lht*right; + draw u.a--u.b--u.c; + enddef; + + def letterS ( expr p ) = + pair s.a, s.b, s.c, s.d, s.e, s.f, s.g; + s.a = p + 1/4lht*up; + ypart s.b = ypart p; xpart s.b = .5[xpart s.a, xpart s.d]; + ypart s.c = ypart p + lht; xpart s.c = xpart s.b; + s.d = p + 3/4lht*up + 3/4lht*right; + xpart s.f = xpart s.a; ypart s.f = ypart s.d; + s.e = .5[s.b, s.c]; + s.g = s.f rotatedabout(s.e,180); + draw s.a..{right}s.b..s.g..{dir 160}s.e..s.f..{right}s.c..s.d; + enddef; + + def letterL ( expr p ) = + pair l.a, l.b; + l.a = p + lht*up; + l.b = p + 5/8lht*right; + draw l.a--p--l.b; + enddef; + + def letterA ( expr p ) = + pair a.b, a.c; + a.c = p + 7/8lht*right; + xpart a.b = .5[xpart p, xpart a.c]; ypart a.b = ypart p + lht; + draw p--a.b--a.c; + draw .4[p,a.b]--.4[a.c,a.b]; + enddef; + + def letterT ( expr p ) = + pair t.a, t.b, t.c; + t.a = p + lht*up; + t.b = t.a + 3/4lht*right; + t.c = p + 3/8lht*right; + draw t.a--t.b; + draw (.5[t.a,t.b])--t.c; + enddef; + + def letterE ( expr p ) = + pair e.a, e.b, e.c, e.d; + e.a = p + lht*up; + e.b = e.a+3/4lht*right; + e.d = p +3/4lht*right; + e.c = .5[p,e.a] + 1/2lht*right; + draw e.b--e.a--p--e.d; + draw .5[p,e.a]--e.c; + enddef; + + z16$ = (4.5u, 9.5u); + letterD ( z16$ ); + letterO ( z16$ + 7/8lht*right); + letterM ( z16$ + 15/8lht*right); + letterI ( z16$ + 26/8lht*right); + + z17$ = z16$ + 1.4lht*down+1/4lht*left; + letterN ( z17$ + 1/2lht*right); + letterU ( z17$ + 3/2lht*right); + letterS ( z17$ + 21/8lht*right); + + z18$ = z16$ + 2.8lht*down; + letterI ( z18$ + 1/4lht*right); + letterL ( z18$ + 5/8lht*right); + letterL ( z18$ + 12/8lht*right); + letterU ( z18$ + 19/8lht*right); + + z19$ = z16$ + 9.5u*right; + letterM ( z19$ - 1/8lht*right); + letterI ( z19$ + 10/8lht*right); + letterN ( z19$ + 13/8lht*right); + letterA ( z19$ + 21/8lht*right); + + z20$ = z19$ + 1.4lht*down + 1/4lht*right; + letterT ( z20$ + 1/4lht*right); + letterI ( z20$ + 11/8lht*right); + letterO ( z20$ + 14/8lht*right); + + z21$ = z19$ + 2.8lht*down; + letterM ( z21$); + letterE ( z21$ + 11/8lht*right); + letterA ( z21$ + 19/8lht*right); + +enddef; + +beginchar(1, 35pt#, 40pt#, 0); "Crown"; + + u := pt; + + transform tfm; + tfm := currenttransform; + + currenttransform := tfm shifted (round 2u, round 29u); + crown(a); + + currenttransform := tfm shifted (round 18u, round 29u); + crown(b); + + currenttransform := tfm shifted (round 10u, round 4u); + crown(c); + + currenttransform := tfm shifted (5u, 15u); + book(d); + + currenttransform := tfm; + shield(e); + +endchar; + +end + + diff --git a/dissertation/branding/oxford-logo.png b/dissertation/branding/oxford-logo.png new file mode 100644 index 0000000..bcf23a3 Binary files /dev/null and b/dissertation/branding/oxford-logo.png differ diff --git a/dissertation/branding/title-slide-background.png b/dissertation/branding/title-slide-background.png new file mode 100644 index 0000000..89fb4a0 Binary files /dev/null and b/dissertation/branding/title-slide-background.png differ diff --git a/dissertation/branding/typeface/Foustbd_.ttf b/dissertation/branding/typeface/Foustbd_.ttf new file mode 100644 index 0000000..a3afefb Binary files /dev/null and b/dissertation/branding/typeface/Foustbd_.ttf differ diff --git a/dissertation/branding/typeface/Foustbde.ttf b/dissertation/branding/typeface/Foustbde.ttf new file mode 100644 index 0000000..d91cb26 Binary files /dev/null and b/dissertation/branding/typeface/Foustbde.ttf differ diff --git a/dissertation/branding/typeface/Foustbdo.ttf b/dissertation/branding/typeface/Foustbdo.ttf new file mode 100644 index 0000000..3899e12 Binary files /dev/null and b/dissertation/branding/typeface/Foustbdo.ttf differ diff --git a/dissertation/branding/typeface/Foustbk_.ttf b/dissertation/branding/typeface/Foustbk_.ttf new file mode 100644 index 0000000..3df804b Binary files /dev/null and b/dissertation/branding/typeface/Foustbk_.ttf differ diff --git a/dissertation/branding/typeface/Foustbke.ttf b/dissertation/branding/typeface/Foustbke.ttf new file mode 100644 index 0000000..2d6e8e4 Binary files /dev/null and b/dissertation/branding/typeface/Foustbke.ttf differ diff --git a/dissertation/branding/typeface/Foustbko.ttf b/dissertation/branding/typeface/Foustbko.ttf new file mode 100644 index 0000000..a0d5526 Binary files /dev/null and b/dissertation/branding/typeface/Foustbko.ttf differ diff --git a/dissertation/branding/typeface/Foustit_.ttf b/dissertation/branding/typeface/Foustit_.ttf new file mode 100644 index 0000000..9eaa1e6 Binary files /dev/null and b/dissertation/branding/typeface/Foustit_.ttf differ diff --git a/dissertation/branding/typeface/Foustite.ttf b/dissertation/branding/typeface/Foustite.ttf new file mode 100644 index 0000000..52ec889 Binary files /dev/null and b/dissertation/branding/typeface/Foustite.ttf differ diff --git a/dissertation/branding/typeface/Foustito.ttf b/dissertation/branding/typeface/Foustito.ttf new file mode 100644 index 0000000..f9f5670 Binary files /dev/null and b/dissertation/branding/typeface/Foustito.ttf differ