summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/fonts/source
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2011-11-10 00:00:57 +0000
committerKarl Berry <karl@freefriends.org>2011-11-10 00:00:57 +0000
commit89c7aec2b8cf45fdb7baba8fc6a92b81b9628194 (patch)
tree2d47f0f892ff6c8a90a72a341b565d1218cc528c /Master/texmf-dist/fonts/source
parent1698db87ceb447239a8f90a00df8b1f0dc1d977d (diff)
frcursive (9nov11)
git-svn-id: svn://tug.org/texlive/trunk@24559 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/fonts/source')
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frca10.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcbx11.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcbx12.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcbx17.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcbx6.mf (renamed from Master/texmf-dist/fonts/source/public/frcursive/frcbx7.mf)14
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcbx8.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcbx9.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcc11.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcc6.mf (renamed from Master/texmf-dist/fonts/source/public/frcursive/frcc12.mf)14
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcf10.mf1
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcf12.mf36
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcf14.mf1
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcf6.mf (renamed from Master/texmf-dist/fonts/source/public/frcursive/frcf11.mf)15
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcr11.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcr12.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcr17.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcr6.mf (renamed from Master/texmf-dist/fonts/source/public/frcursive/frcr8.mf)14
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcr7.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcr9.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcsl12.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcsl17.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcsl6.mf (renamed from Master/texmf-dist/fonts/source/public/frcursive/frcsl9.mf)14
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcsl7.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcslbx11.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcslbx12.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcslbx17.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcslbx6.mf (renamed from Master/texmf-dist/fonts/source/public/frcursive/frcslbx7.mf)14
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcslbx8.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcslbx9.mf29
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcslc10.mf (renamed from Master/texmf-dist/fonts/source/public/frcursive/frcw10.mf)16
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcslc14.mf (renamed from Master/texmf-dist/fonts/source/public/frcursive/frcsl11.mf)18
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcslc6.mf (renamed from Master/texmf-dist/fonts/source/public/frcursive/frcsl8.mf)16
-rw-r--r--Master/texmf-dist/fonts/source/public/frcursive/frcursive.mf1067
33 files changed, 783 insertions, 1037 deletions
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frca10.mf b/Master/texmf-dist/fonts/source/public/frcursive/frca10.mf
deleted file mode 100644
index c80c3716798..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frca10.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the regular "academic" variant
-
-font_identifier := "FCA";
-font_size 10 pt#;
-
-mode_setup;
-
-ex# := 155.0/36 pt#;
-med# := 0.4 pt#;
-thin# := 0.2 pt#;
-thick# := 0.6 pt#;
-dot_size# := 0.8 pt#;
-
-base_width := .800;
-slant := 0;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 3;
-uc_ascend := 3;
-straight_descend := 1;
-loop_descend := 2;
-dot_height := 1.8;
-accent_bot := 1.6;
-accent_top := 2;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcbx11.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcbx11.mf
deleted file mode 100644
index c9782baaa06..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcbx11.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the bold extended variant
-
-font_identifier := "FRCBX";
-font_size 10.95 pt#;
-
-mode_setup;
-
-ex# := 169.725/36 pt#;
-med# := .602 pt#;
-thin# := .219 pt#;
-thick# := .876 pt#;
-dot_size# := 1.368 pt#;
-
-base_width := .886;
-slant := 0;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcbx12.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcbx12.mf
deleted file mode 100644
index 6fbc0bf2f0d..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcbx12.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the bold extended variant
-
-font_identifier := "FRCBX";
-font_size 12 pt#;
-
-mode_setup;
-
-ex# := 186.0/36 pt#;
-med# := .660 pt#;
-thin# := .240 pt#;
-thick# := .960 pt#;
-dot_size# := 1.500 pt#;
-
-base_width := .873;
-slant := 0;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcbx17.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcbx17.mf
deleted file mode 100644
index 6eb839a8006..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcbx17.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the bold extended variant
-
-font_identifier := "FRCBX";
-font_size 17.28 pt#;
-
-mode_setup;
-
-ex# := 267.840/36 pt#;
-med# := .950 pt#;
-thin# := .345 pt#;
-thick# := 1.382 pt#;
-dot_size# := 2.160 pt#;
-
-base_width := .821;
-slant := 0;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcbx7.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcbx6.mf
index 0aeca1a64a8..038da377665 100644
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcbx7.mf
+++ b/Master/texmf-dist/fonts/source/public/frcursive/frcbx6.mf
@@ -2,17 +2,17 @@
%%% This is a parameter file for the bold extended variant
font_identifier := "FRCBX";
-font_size 7 pt#;
+font_size 6 pt#;
mode_setup;
-ex# := 108.5/36 pt#;
-med# := .385 pt#;
-thin# := .140 pt#;
-thick# := .560 pt#;
-dot_size# := .875 pt#;
+ex# := 93.0/36 pt#;
+med# := .330 pt#;
+thin# := .120 pt#;
+thick# := .480 pt#;
+dot_size# := .750 pt#;
-base_width := .955;
+base_width := .980;
slant := 0;
accent_wd := 0.7;
link_width := 0.13;
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcbx8.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcbx8.mf
deleted file mode 100644
index 083bda741e2..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcbx8.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the bold extended variant
-
-font_identifier := "FRCBX";
-font_size 8 pt#;
-
-mode_setup;
-
-ex# := 124.0/36 pt#;
-med# := .440 pt#;
-thin# := .160 pt#;
-thick# := .640 pt#;
-dot_size# := 1.000 pt#;
-
-base_width := .934;
-slant := 0;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcbx9.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcbx9.mf
deleted file mode 100644
index 43395b75b7b..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcbx9.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the bold extended variant
-
-font_identifier := "FRCBX";
-font_size 9 pt#;
-
-mode_setup;
-
-ex# := 139.5/36 pt#;
-med# := .495 pt#;
-thin# := .180 pt#;
-thick# := .720 pt#;
-dot_size# := 1.125 pt#;
-
-base_width := .915;
-slant := 0;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcc11.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcc11.mf
deleted file mode 100644
index 4b938130358..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcc11.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the calligraphic variant
-
-font_identifier := "FRCC";
-font_size 10.95 pt#;
-
-mode_setup;
-
-ex# := 169.725/36 pt#;
-med# := .328 pt#;
-thin# := .219 pt#;
-thick# := .876 pt#;
-dot_size# := .876 pt#;
-
-base_width := .788;
-slant := 0;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcc12.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcc6.mf
index f83a3509f5c..b748a0b4963 100644
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcc12.mf
+++ b/Master/texmf-dist/fonts/source/public/frcursive/frcc6.mf
@@ -2,17 +2,17 @@
%%% This is a parameter file for the calligraphic variant
font_identifier := "FRCC";
-font_size 12 pt#;
+font_size 6 pt#;
mode_setup;
-ex# := 186.0/36 pt#;
-med# := .360 pt#;
-thin# := .240 pt#;
-thick# := .960 pt#;
-dot_size# := .960 pt#;
+ex# := 93.0/36 pt#;
+med# := .180 pt#;
+thin# := .120 pt#;
+thick# := .480 pt#;
+dot_size# := .480 pt#;
-base_width := .776;
+base_width := .871;
slant := 0;
accent_wd := 0.7;
link_width := 0.13;
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcf10.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcf10.mf
index 592b3275295..c6398deaac7 100644
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcf10.mf
+++ b/Master/texmf-dist/fonts/source/public/frcursive/frcf10.mf
@@ -26,6 +26,7 @@ accent_bot := 1.2;
accent_top := 1.6;
cedilla_dp = 0.2;
+boolean fixed; fixed := true;
def penstroke text t =
begingroup
save e; def e = enddef;
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcf12.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcf12.mf
deleted file mode 100644
index aca99f89a5b..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcf12.mf
+++ /dev/null
@@ -1,36 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the fixed-thickness variant
-
-font_identifier := "FRCF";
-font_size 12 pt#;
-
-mode_setup;
-
-ex# := 186.0/36 pt#;
-med# := .480 pt#;
-thin# := .480 pt#;
-thick# := .480 pt#;
-dot_size# := .960 pt#;
-
-base_width := .776;
-slant := 0;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-def penstroke text t =
- begingroup
- save e; def e = enddef;
- draw t withpen pencircle scaled med;
- endgroup
-enddef;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcf14.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcf14.mf
index aebb69a256d..da9cd81d938 100644
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcf14.mf
+++ b/Master/texmf-dist/fonts/source/public/frcursive/frcf14.mf
@@ -26,6 +26,7 @@ accent_bot := 1.2;
accent_top := 1.6;
cedilla_dp = 0.2;
+boolean fixed; fixed := true;
def penstroke text t =
begingroup
save e; def e = enddef;
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcf11.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcf6.mf
index 9eb36c80d22..28e2a4310ad 100644
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcf11.mf
+++ b/Master/texmf-dist/fonts/source/public/frcursive/frcf6.mf
@@ -2,17 +2,17 @@
%%% This is a parameter file for the fixed-thickness variant
font_identifier := "FRCF";
-font_size 10.95 pt#;
+font_size 6 pt#;
mode_setup;
-ex# := 169.725/36 pt#;
-med# := .438 pt#;
-thin# := .438 pt#;
-thick# := .438 pt#;
-dot_size# := .876 pt#;
+ex# := 93.0/36 pt#;
+med# := .240 pt#;
+thin# := .240 pt#;
+thick# := .240 pt#;
+dot_size# := .480 pt#;
-base_width := .788;
+base_width := .871;
slant := 0;
accent_wd := 0.7;
link_width := 0.13;
@@ -26,6 +26,7 @@ accent_bot := 1.2;
accent_top := 1.6;
cedilla_dp = 0.2;
+boolean fixed; fixed := true;
def penstroke text t =
begingroup
save e; def e = enddef;
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcr11.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcr11.mf
deleted file mode 100644
index 4c51063ecde..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcr11.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the regular variant
-
-font_identifier := "FRCR";
-font_size 10.95 pt#;
-
-mode_setup;
-
-ex# := 169.725/36 pt#;
-med# := .438 pt#;
-thin# := .219 pt#;
-thick# := .657 pt#;
-dot_size# := .876 pt#;
-
-base_width := .788;
-slant := 0;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcr12.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcr12.mf
deleted file mode 100644
index 6d7513db266..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcr12.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the regular variant
-
-font_identifier := "FRCR";
-font_size 12 pt#;
-
-mode_setup;
-
-ex# := 186.0/36 pt#;
-med# := .480 pt#;
-thin# := .240 pt#;
-thick# := .720 pt#;
-dot_size# := .960 pt#;
-
-base_width := .776;
-slant := 0;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcr17.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcr17.mf
deleted file mode 100644
index 41527ce7352..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcr17.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the regular variant
-
-font_identifier := "FRCR";
-font_size 17.28 pt#;
-
-mode_setup;
-
-ex# := 267.840/36 pt#;
-med# := .691 pt#;
-thin# := .345 pt#;
-thick# := 1.036 pt#;
-dot_size# := 1.382 pt#;
-
-base_width := .730;
-slant := 0;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcr8.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcr6.mf
index 784d1a1baa7..a2ed72d6b56 100644
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcr8.mf
+++ b/Master/texmf-dist/fonts/source/public/frcursive/frcr6.mf
@@ -2,17 +2,17 @@
%%% This is a parameter file for the regular variant
font_identifier := "FRCR";
-font_size 8 pt#;
+font_size 6 pt#;
mode_setup;
-ex# := 124.0/36 pt#;
-med# := .320 pt#;
-thin# := .160 pt#;
-thick# := .480 pt#;
-dot_size# := .640 pt#;
+ex# := 93.0/36 pt#;
+med# := .240 pt#;
+thin# := .120 pt#;
+thick# := .360 pt#;
+dot_size# := .480 pt#;
-base_width := .830;
+base_width := .871;
slant := 0;
accent_wd := 0.7;
link_width := 0.13;
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcr7.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcr7.mf
deleted file mode 100644
index c75eed11dd6..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcr7.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the regular variant
-
-font_identifier := "FRCR";
-font_size 7 pt#;
-
-mode_setup;
-
-ex# := 108.5/36 pt#;
-med# := .280 pt#;
-thin# := .140 pt#;
-thick# := .420 pt#;
-dot_size# := .560 pt#;
-
-base_width := .849;
-slant := 0;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcr9.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcr9.mf
deleted file mode 100644
index 1cb681b6274..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcr9.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the regular variant
-
-font_identifier := "FRCR";
-font_size 9 pt#;
-
-mode_setup;
-
-ex# := 139.5/36 pt#;
-med# := .360 pt#;
-thin# := .180 pt#;
-thick# := .540 pt#;
-dot_size# := .720 pt#;
-
-base_width := .813;
-slant := 0;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcsl12.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcsl12.mf
deleted file mode 100644
index b4264aeec7e..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcsl12.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the slanted variant
-
-font_identifier := "FRCSL";
-font_size 12 pt#;
-
-mode_setup;
-
-ex# := 186.0/36 pt#;
-med# := .480 pt#;
-thin# := .240 pt#;
-thick# := .720 pt#;
-dot_size# := .960 pt#;
-
-base_width := .776;
-slant := 0.3;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcsl17.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcsl17.mf
deleted file mode 100644
index 3b821255628..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcsl17.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the slanted variant
-
-font_identifier := "FRCSL";
-font_size 17.28 pt#;
-
-mode_setup;
-
-ex# := 267.840/36 pt#;
-med# := .691 pt#;
-thin# := .345 pt#;
-thick# := 1.036 pt#;
-dot_size# := 1.382 pt#;
-
-base_width := .730;
-slant := 0.3;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcsl9.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcsl6.mf
index df0985639c2..19e3af06475 100644
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcsl9.mf
+++ b/Master/texmf-dist/fonts/source/public/frcursive/frcsl6.mf
@@ -2,17 +2,17 @@
%%% This is a parameter file for the slanted variant
font_identifier := "FRCSL";
-font_size 9 pt#;
+font_size 6 pt#;
mode_setup;
-ex# := 139.5/36 pt#;
-med# := .360 pt#;
-thin# := .180 pt#;
-thick# := .540 pt#;
-dot_size# := .720 pt#;
+ex# := 93.0/36 pt#;
+med# := .240 pt#;
+thin# := .120 pt#;
+thick# := .360 pt#;
+dot_size# := .480 pt#;
-base_width := .813;
+base_width := .871;
slant := 0.3;
accent_wd := 0.7;
link_width := 0.13;
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcsl7.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcsl7.mf
deleted file mode 100644
index c813750d649..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcsl7.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the slanted variant
-
-font_identifier := "FRCSL";
-font_size 7 pt#;
-
-mode_setup;
-
-ex# := 108.5/36 pt#;
-med# := .280 pt#;
-thin# := .140 pt#;
-thick# := .420 pt#;
-dot_size# := .560 pt#;
-
-base_width := .849;
-slant := 0.3;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcslbx11.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcslbx11.mf
deleted file mode 100644
index 84405e482e3..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcslbx11.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the slanted bold extended variant
-
-font_identifier := "FRCSLBX";
-font_size 10.95 pt#;
-
-mode_setup;
-
-ex# := 169.725/36 pt#;
-med# := .602 pt#;
-thin# := .219 pt#;
-thick# := .876 pt#;
-dot_size# := 1.368 pt#;
-
-base_width := .886;
-slant := 0.3;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcslbx12.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcslbx12.mf
deleted file mode 100644
index 29dad3732ae..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcslbx12.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the slanted bold extended variant
-
-font_identifier := "FRCSLBX";
-font_size 12 pt#;
-
-mode_setup;
-
-ex# := 186.0/36 pt#;
-med# := .660 pt#;
-thin# := .240 pt#;
-thick# := .960 pt#;
-dot_size# := 1.500 pt#;
-
-base_width := .873;
-slant := 0.3;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcslbx17.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcslbx17.mf
deleted file mode 100644
index 061fa88d15d..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcslbx17.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the slanted bold extended variant
-
-font_identifier := "FRCSLBX";
-font_size 17.28 pt#;
-
-mode_setup;
-
-ex# := 267.840/36 pt#;
-med# := .950 pt#;
-thin# := .345 pt#;
-thick# := 1.382 pt#;
-dot_size# := 2.160 pt#;
-
-base_width := .821;
-slant := 0.3;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcslbx7.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcslbx6.mf
index cb34a5f0e4c..96d5bf5d6ec 100644
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcslbx7.mf
+++ b/Master/texmf-dist/fonts/source/public/frcursive/frcslbx6.mf
@@ -2,17 +2,17 @@
%%% This is a parameter file for the slanted bold extended variant
font_identifier := "FRCSLBX";
-font_size 7 pt#;
+font_size 6 pt#;
mode_setup;
-ex# := 108.5/36 pt#;
-med# := .385 pt#;
-thin# := .140 pt#;
-thick# := .560 pt#;
-dot_size# := .875 pt#;
+ex# := 93.0/36 pt#;
+med# := .330 pt#;
+thin# := .120 pt#;
+thick# := .480 pt#;
+dot_size# := .750 pt#;
-base_width := .955;
+base_width := .980;
slant := 0.3;
accent_wd := 0.7;
link_width := 0.13;
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcslbx8.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcslbx8.mf
deleted file mode 100644
index f1f7e50dca6..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcslbx8.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the slanted bold extended variant
-
-font_identifier := "FRCSLBX";
-font_size 8 pt#;
-
-mode_setup;
-
-ex# := 124.0/36 pt#;
-med# := .440 pt#;
-thin# := .160 pt#;
-thick# := .640 pt#;
-dot_size# := 1.000 pt#;
-
-base_width := .934;
-slant := 0.3;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcslbx9.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcslbx9.mf
deleted file mode 100644
index 07c79e6ee2f..00000000000
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcslbx9.mf
+++ /dev/null
@@ -1,29 +0,0 @@
-%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the slanted bold extended variant
-
-font_identifier := "FRCSLBX";
-font_size 9 pt#;
-
-mode_setup;
-
-ex# := 139.5/36 pt#;
-med# := .495 pt#;
-thin# := .180 pt#;
-thick# := .720 pt#;
-dot_size# := 1.125 pt#;
-
-base_width := .915;
-slant := 0.3;
-accent_wd := 0.7;
-link_width := 0.13;
-straight_ascend := 2;
-loop_ascend := 2.5;
-uc_ascend := 2.5;
-straight_descend := 1.2;
-loop_descend := 1.5;
-dot_height := 1.4;
-accent_bot := 1.2;
-accent_top := 1.6;
-cedilla_dp = 0.2;
-
-input frcursive
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcw10.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcslc10.mf
index 0df51cdf09f..f524d528050 100644
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcw10.mf
+++ b/Master/texmf-dist/fonts/source/public/frcursive/frcslc10.mf
@@ -1,21 +1,21 @@
%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the wide-links variant
+%%% This is a parameter file for the slanted calligraphic variant
-font_identifier := "FCW";
+font_identifier := "FRCSLC";
font_size 10 pt#;
mode_setup;
ex# := 155.0/36 pt#;
-med# := 0.4 pt#;
-thin# := 0.2 pt#;
-thick# := 0.6 pt#;
-dot_size# := 0.8 pt#;
+med# := .300 pt#;
+thin# := .200 pt#;
+thick# := .800 pt#;
+dot_size# := .800 pt#;
base_width := .800;
-slant := 0;
+slant := 0.3;
accent_wd := 0.7;
-link_width := 0.4;
+link_width := 0.13;
straight_ascend := 2;
loop_ascend := 2.5;
uc_ascend := 2.5;
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcsl11.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcslc14.mf
index 26df67a41ce..b97e9a4da4b 100644
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcsl11.mf
+++ b/Master/texmf-dist/fonts/source/public/frcursive/frcslc14.mf
@@ -1,18 +1,18 @@
%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the slanted variant
+%%% This is a parameter file for the slanted calligraphic variant
-font_identifier := "FRCSL";
-font_size 10.95 pt#;
+font_identifier := "FRCSLC";
+font_size 14.4 pt#;
mode_setup;
-ex# := 169.725/36 pt#;
-med# := .438 pt#;
-thin# := .219 pt#;
-thick# := .657 pt#;
-dot_size# := .876 pt#;
+ex# := 223.20/36 pt#;
+med# := .432 pt#;
+thin# := .288 pt#;
+thick# := 1.152 pt#;
+dot_size# := 1.152 pt#;
-base_width := .788;
+base_width := .754;
slant := 0.3;
accent_wd := 0.7;
link_width := 0.13;
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcsl8.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcslc6.mf
index b8048d2938c..64048a87139 100644
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcsl8.mf
+++ b/Master/texmf-dist/fonts/source/public/frcursive/frcslc6.mf
@@ -1,18 +1,18 @@
%%% This file is part of the French Cursive font definition.
-%%% This is a parameter file for the slanted variant
+%%% This is a parameter file for the slanted calligraphic variant
-font_identifier := "FRCSL";
-font_size 8 pt#;
+font_identifier := "FRCSLC";
+font_size 6 pt#;
mode_setup;
-ex# := 124.0/36 pt#;
-med# := .320 pt#;
-thin# := .160 pt#;
+ex# := 93.0/36 pt#;
+med# := .180 pt#;
+thin# := .120 pt#;
thick# := .480 pt#;
-dot_size# := .640 pt#;
+dot_size# := .480 pt#;
-base_width := .830;
+base_width := .871;
slant := 0.3;
accent_wd := 0.7;
link_width := 0.13;
diff --git a/Master/texmf-dist/fonts/source/public/frcursive/frcursive.mf b/Master/texmf-dist/fonts/source/public/frcursive/frcursive.mf
index fa580ca0b1b..f4ab55393c6 100644
--- a/Master/texmf-dist/fonts/source/public/frcursive/frcursive.mf
+++ b/Master/texmf-dist/fonts/source/public/frcursive/frcursive.mf
@@ -1,12 +1,12 @@
%%%% This is the main source for the French Cursive font.
-%%%% © Emanuel Beffara, 2001--2004. This work is covered by the GPL licence.
+%%%% (c) Emanuel Beffara, 2001--2011. This work is covered by the LPPL licence.
%%%%
%%%% You can get a pretty-printed document with the commented source code (and
%%%% especially the first page with an explanation of the parameters) by first
%%%% running "mft frcursive" to get the TeX source and then compiling the
%%%% driver file "fcsource.tex" (normally shipped with this source file). This
%%%% compilation needs the standard 10-pt version (driver "frcr10.mf") to be
-%%%% available. The document is 44 pages long.
+%%%% available. The document is 52 pages long.
%%%%
%%\title French Cursive,
%% a cursive handwriting font in \MF \cr
@@ -25,8 +25,8 @@
%% letter with a high loop like {\def\fs#1{{\fc\smash#1}} \fs b, \fs f, \fs h,
%% \fs k, or \fs l}, the stroke starts at the top of the loop because the
%% initial part depends on the height the previous letter starts at. The link
-%% glyphs are located in the range 128--159, which is thankfully unallocated
-%% in the Latin-1 encoding.
+%% glyphs are located in the range 0--31, which is reserved for accents and
+%% common ligatures in the T1 encoding.
%%
%% This file won't generate a font by itself. It is supposed to be read by a
%% driver file after setting several parameters to control the actual shape of
@@ -44,7 +44,7 @@
%% \item widths, relative to \\{base\_width}: \deflist{%
%% \\{accent\_wd} & base width of accents
%% (width of acute and grave accents)\cr
-%% \\{link\_width} & half the width of inter-letter links\cr}
+%% \\{link\_width} & the width of inter-letter links\cr}
%% \item heights, relative to \\{ex}\SH: \deflist{%
%% \\{straight\_ascend} & height of ascending bars like {\fc t}\cr
%% \\{loop\_ascend} & height of ascending loops like {\fc\smash l}\cr
@@ -58,7 +58,7 @@
%% \\{cedilla\_dp} & depth of the {\it top} of the cedilla's loop\cr}
%%}
%%%% These are MFT formatting definitions:
-%%% length penpos save_accent make_accented
+%%% length penpos make_accented make_cedilla
%%% length label penlabels range save_letter
%%% and thru
%%% end bye
@@ -92,43 +92,44 @@ hl_y := 1/2; % the height of high links
%% Medium links are lower and directed upwards.
-ml_y := 1/6; % the height of medium links
-ml_a := 30; % the angle of medium links
+ml_y := 13/600 / link_width; % the height of medium links
+ml_a := angle(.288675, ml_y); % the angle of medium links
%% We take care of slanted shapes by simply applying a global transformation.
currenttransform := currenttransform slanted slant;
+%% Some shapes are defined differently in fixed-thickness mode.
+
+if unknown fixed:
+ boolean fixed; fixed := false;
+fi
+
%% Some letter shapes have to be saved:
-%% \item a, c, e, n, o, u, y and uppercase letters are normal, they are used
-%% for making accented variants
+%% \item a, c, e, g, l, n, o, r, t, u, y, z and uppercase letters are normal,
+%% they are used for making accented variants
%% \item i is dotless, it is kept for making accented versions
%% \item j is dotless, its shape appears in y, G, J and Y
%% \item q and s are unlinked on the right (like at the end of words), they
%% are kept to make linked versions
%% \item exclamation and interrogation marks are used for the spanish
%% reversed version
-
-forsuffixes ltr = a,c,e,i,j,n,o,q,s,u,y,A,C,E,I,N,O,U,Y,exclam,interg :
- picture letter.ltr;
-endfor;
-
+%%
%% The \\{save\_letter} macro saves the picture of a given glyph so that it
%% can be reused (as explained above). The first argument is a suffix that
%% represents the letter, the second one is the $x$ coordinate where accents
%% should be placed (i.e. roughly the middle of the letter).
-def save_letter (text ltr) (expr pos) =
- begingroup save ltr; % c'est nécessaire à cause de `u'
- letter.ltr := currentpicture;
- accpos.ltr := pos;
- width.ltr := w;
- height.ltr := h;
- if proofing > 1: proofrule((pos,-d), (pos,h)); fi
- width#.ltr := charwd; % for the accented version's width
- height#.ltr := charht; % for the height of accented uppercase letters
- depth#.ltr := chardp
- endgroup
+def save_letter (suffix ltr) (expr pos) =
+ picture letter.ltr;
+ letter.ltr := currentpicture;
+ accpos.ltr := cedpos.ltr := pos;
+ width.ltr := w;
+ height.ltr := h;
+ if proofing > 1: proofrule((pos,-d), (pos,h)); fi
+ width#.ltr := charwd; % for the accented version's width
+ height#.ltr := charht; % for the height of accented uppercase letters
+ depth#.ltr := chardp
enddef;
%% Most characters have absolute widths of the same form:
@@ -205,6 +206,7 @@ beginchar("a", ltr_w(7/6), ex#, 0);
label(9);
save_letter(a)(x2);
+ cedpos.a := x9;
endchar;
"The letter b";
@@ -260,6 +262,8 @@ beginchar("d", ltr_w(7/6), straight_ascend * ex#, 0);
penstroke z6e .. {down}z7e .. {down}z8e .. {right}z9e ;
label(9);
+
+ save_letter(d)(x6);
endchar;
"The letter e";
@@ -324,6 +328,8 @@ beginchar("g", ltr_w(9/8), ex#, loop_descend * ex#);
.. z9e .. z10e .. {ml_dir}z11e ;
label(11);
+
+ save_letter(g)(x2);
endchar;
"The letter h";
@@ -424,6 +430,8 @@ beginchar("l", ltr_w(2/3), loop_ascend * ex#, 0);
.. controls (x5e,1/2[y5e,y6e]) and (x5e,y6e) .. z6e .. {ml_dir}z7e ;
label(7);
+
+ save_letter(l)(x3);
endchar ;
"The letter m";
@@ -512,7 +520,7 @@ beginchar("p", ltr_w(7/4), ex#, straight_descend * ex#);
endchar;
"The letter q with no link";
-beginchar(150, ltr_w(1), ex#, straight_descend * ex#);
+beginchar("q", ltr_wd(1, 0) + thick# - med#, ex#, straight_descend * ex#);
penpos1(med, 0); x1r = hround (base_width * ex); y1 = 2/3 ex;
penpos2(med, 90); z2r = (3/5, 1) u;
penpos3(thick, 180); z3r = (0, a_left) u;
@@ -527,22 +535,12 @@ beginchar(150, ltr_w(1), ex#, straight_descend * ex#);
penstroke z6e .. z7e --- z8e;
+ picture letter.q;
letter.q := currentpicture; % We keep the glyph for the linked version.
label(8);
endchar;
-"The letter q with a right link";
-beginchar("q", ltr_w(7/6), ex#, straight_descend * ex#)
- addto currentpicture also letter.q;
- penpos0(med, 0); x0r = hround (base_width * ex); y0 = 1/3 ex;
- penpos1(thick, 180); z1r = z0l;
- penpos2(med, 270); z2r = (7/6 + lnk, 0) u;
- penstroke z1e{down} .. {right}z2e;
- label(2);
-endchar;
-
-
"The letter r";
beginchar("r", ltr_w(5/4), 6/5 ex#, 0);
penpos1(med, 0); z1l = (1/6, 1) u;
@@ -558,11 +556,15 @@ beginchar("r", ltr_w(5/4), 6/5 ex#, 0);
.. tension 1.3 .. {down}z5e .. {right}z6e;
label(6);
+
+ save_letter(r)(1/2[x1,x4]);
+ height.r := ex;
+ height#.r := ex#;
endchar;
"The letter s with no link";
-beginchar(154, ltr_w(13/12), 7/6 ex#, 0);
- penpos0(thick, 0); z0r = (3/4, 1) u;
+beginchar("s", ltr_wd(5/4, 0), 7/6 ex#, 0);
+ penpos0(thick, 0); z0 = good.rt ((3/4, 1) u);
penpos1(med, 0); z1l = z0l;
penpos2(med, 90); z2r = z1l + (0, 1/6) u;
penpos3(med, 210); z3l = z1l;
@@ -573,18 +575,14 @@ beginchar(154, ltr_w(13/12), 7/6 ex#, 0);
penstroke z1e{dir 60} .. z2e .. z3e{dir 315} .. tension 1.2 .. z4e
.. {left}z5e .. {dir 30}z6e;
+ picture letter.s;
letter.s := currentpicture; % Same trick as for the q.
label(6);
-endchar;
-"The letter s with a right link";
-beginchar("s", ltr_w(5/4), 7/6 ex#, 0);
- addto currentpicture also letter.s;
- penpos1(med, 180); z1l = (5/4, 1/3) u;
- penpos2(med, 270); z2r = (5/4 + lnk, 0) u;
- penstroke z1e .. {right}z2e;
- label(2);
+ save_letter(s)(x5);
+ height.s := ex;
+ height#.s := ex#;
endchar;
"The letter t";
@@ -602,6 +600,8 @@ beginchar("t", ltr_w(7/8), straight_ascend * ex#, 0);
penstroke z5e -- z6e;
label(6);
+
+ save_letter(t)(x3);
endchar;
"The letter u";
@@ -622,7 +622,9 @@ beginchar("u", ltr_w(4/3), ex#, 0);
label(7);
+ begingroup save u;
save_letter(u)(1/2[x1,x5]);
+ endgroup
endchar;
"The letter v";
@@ -723,8 +725,17 @@ beginchar("z", ltr_w(11/6), 6/5 * ex#, loop_descend * ex#);
.. z9e .. z10e .. tension 1.4 .. {ml_dir}z11e;
label(8);
+
+ save_letter(z)(1/2[x1,x4]);
+ height.z := ex;
+ height#.z := ex#;
endchar;
+"The ligature oe";
+beginchar(247, ltr_w(2), ex#, 0)
+ addto currentpicture also letter.o;
+ addto currentpicture also letter.e shifted ((1,0) u);
+endchar;
%% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %%
@@ -775,6 +786,7 @@ beginchar("A", ltr_wd(3,0), hgt, 0);
label(15);
save_letter(A)(x6l);
+ cedpos.A := x9;
endchar;
@@ -850,6 +862,8 @@ beginchar("D", ltr_wd(13/6,0), hgt, 0);
.. z6e .. z7e .. z8e .. z9e .. z10e .. {up}z11e;
label(11);
+
+ save_letter(D)(1/2[x1,x2]);
endchar;
@@ -916,21 +930,24 @@ endchar;
"The letter G";
-beginchar("G", ltr_wd(2,1), hgt, loop_descend * ex#);
+beginchar("G", ltr_w(2), hgt, loop_descend * ex#);
penpos1(thin, 180); z1 = (1/2, 1) uu;
penpos2(med, 200); z2r = (0, 2/3) uu;
penpos3(med, 0); z3r = (2, 5/6) uu;
penpos4(med, 90); z4r = (5/3, 1) uu;
penpos5(thick, 180); z5r = (1/3, 1/3) uu;
penpos6(med, 270); z6r = (1, 0) uu;
- penpos7(thick, 0); z7r = (15/8, 1) u;
+ penpos7(thick, 0); z7 = good.rt ((15/8, 1) u);
penstroke z1e .. {down}z2e .. tension 1.2 .. z3e .. z4e
.. tension 1.2 .. z5e .. z6e .. {up}z7e;
- addto currentpicture also letter.j shifted (9/8 * v, 0);
+ penpos0(thick, 180); z0 = good.lft ((3/4, 1) u);
+ addto currentpicture also letter.j shifted (z7 - z0);
label(7);
+
+ save_letter(G)(1/4[x4,x5]);
endchar;
@@ -996,15 +1013,17 @@ endchar;
"The letter J";
-beginchar("J", ltr_wd(9/8,1) + thick#/2, hgt, loop_descend * ex#);
+beginchar("J", ltr_w(9/8), hgt, loop_descend * ex#);
addto currentpicture also small_loop;
- addto currentpicture also letter.j shifted (1/4 v + thick/2, 0);
+ z0 = good.lft ((3/4, 1) uu);
penpos1(thick, 180); z1 = (1, 1) uu;
penpos2(thick, 180); z2 = (1, 0) uu;
penstroke z1e .. z2e;
+ addto currentpicture also letter.j shifted (z1 - z0);
+
label(2);
endchar;
@@ -1054,6 +1073,8 @@ beginchar("L", ltr_wd(7/3,0), hgt, 0);
.. z7e .. {dir -50}z8e .. {right}z9e .. z10e .. {down}z11e;
label(11);
+
+ save_letter(L)(x9);
endchar;
@@ -1147,7 +1168,7 @@ beginchar("O", ltr_wd(2,0), hgt, 0);
label(6);
- save_letter(O)(x1);
+ save_letter(O)(x3);
endchar;
@@ -1212,6 +1233,8 @@ beginchar("R", ltr_wd(13/4,0), hgt, 0);
.. tension 1.4 .. z11e .. z12e .. z13e .. z14e;
label(14);
+
+ save_letter(R)(x10);
endchar;
@@ -1231,6 +1254,9 @@ beginchar("S", ltr_wd(2,0), hgt, 0);
.. z6e .. z7e .. z8e .. {dir 250}z9e;
label(9);
+
+ save_letter(S)(1/2[x3,x5]);
+ cedpos.S := x7;
endchar;
@@ -1251,6 +1277,9 @@ beginchar("T", ltr_wd(11/4,0), hgt, 0);
.. {left}z6e .. tension 1.2 .. z7e .. {right}z8e .. z9e .. z10e;
label(10);
+
+ save_letter(T)(1/2[x3,x6]);
+ cedpos.T := x8;
endchar;
@@ -1351,7 +1380,7 @@ endchar;
"The letter Y";
-beginchar("Y", ltr_wd(19/8,1), hgt, loop_descend * ex#);
+beginchar("Y", ltr_w(19/8), hgt, loop_descend * ex#);
penpos1(thin, 180); z1 = (3/4, 3/5) uu;
penpos2(med, 0); z2l = (0, 2/3) uu;
penpos3(med, 250); z3l = (3/5, 1) uu;
@@ -1359,8 +1388,8 @@ beginchar("Y", ltr_wd(19/8,1), hgt, loop_descend * ex#);
penpos5(med, 270); z5r = (3/2, 1/8) uu;
penpos6(med, 0); z6l = z8r;
- penpos7(thick, 180); z7l = (9/4, 1) uu;
- penpos8(thick, 180); z8l = (9/4, 1) u;
+ penpos7(thick, 180); x7 = x8; y7 = uc_ascend * ex;
+ penpos8(thick, 180); z8 = good.rt ((9/4, 1) u);
penstroke z1e{down} .. z2e{up} .. z3e .. tension 1.1 .. z4e
.. z5e .. {up}z6e;
@@ -1382,7 +1411,7 @@ beginchar("Z", ltr_wd(3,0), hgt, 0);
penpos4(med, 270); z4 = (5/2, 3/4) uu;
penpos5(med, 0); z5r = (3, 7/8) uu;
penpos6(med, 90); z6r = (8/3, 1) uu;
- penpos7(thick, 135); z7 = (6/4, 1/2) uu;
+ penpos7(thick, 165); z7 = (6/4, 1/2) uu;
penpos8(med, 90); z7 = 1/2[z6, z8];
penpos9(med, 0); z7 = 1/2[z5, z9];
penpos10(med, 270); z7 = 1/2[z4, z10];
@@ -1400,6 +1429,8 @@ beginchar("Z", ltr_wd(3,0), hgt, 0);
penstroke z14e{dir 30} .. z15e .. {dir 30}z16e;
label(16);
+
+ save_letter(Z)(x15);
endchar;
@@ -1407,17 +1438,38 @@ endchar;
%%\sec Inter-letter links. %{{{1
+%% The constants below define the position of the link glyphs in the font.
+%% the names have the form ``{\it lnk.right.left}'' where {\it right} is the
+%% shape of the letter on the right and {\it left} is the kind of link at the
+%% end of the letter on the left.
+
+%% Since we are limited to 256 positions, we have to use some codes that are
+%% defined in the T1 encoding for other purposes. The accent glyphs may be
+%% used for that, since constructed accented letters are unusable in this font
+%% (because they don't link to surrounding letters). The ``f'' ligatures are
+%% also usable since they are irrelevant here.
+
+lnk.small.low = 0; lnk.small.med = 1; lnk.small.high = 2;
+lnk.loop.low = 3; lnk.loop.med = 4; lnk.loop.high = 5;
+lnk.vert.low = 6; lnk.vert.med = 7; lnk.vert.high = 8;
+lnk.far.low = 9; lnk.far.med = 10; lnk.far.high = 11;
+lnk.hloop.low = 12; lnk.hloop.med = 13;
+lnk.mn.low = 14; lnk.mn.med = 15; lnk.mn.high = 16; lnk.mn.beg = 17;
+lnk.x.low = 24; lnk.x.med = 27;
+lnk.sq = 28;
+lnk.high = 29; lnk.low = 30; lnk.lowmed = 31;
+
%% There is a special trick we use in all links: the initial $x$ coordinante
%% is not 0 as would be expected but $-1$. This makes links begin one pixel to
%% the left of their box, ensuring that they actually join with the letter
%% before them.
-%%\subsec For small letters (a, c, d, e, g, o, q). %{{{2
-
lw := link_width * ex#;
+%%\subsec For small letters (a, c, d, e, g, o, q). %{{{2
+
"Low link for small letters";
-beginchar(128, lw, 0, 0);
+beginchar(lnk.small.low, lw, 0, 0);
penpos1(med, 270); z1r = (-1, 0);
penpos2(med, 0); z2l = (lnk, 1/3) u;
penstroke z1e{right} .. {up}z2e;
@@ -1425,15 +1477,15 @@ beginchar(128, lw, 0, 0);
endchar ;
"Medium link for small letters";
-beginchar(129, lw, 0, 0);
+beginchar(lnk.small.med, lw, 0, 0);
penpos1(med, ml_d); z1 = (-1, ml_y * ex);
- penpos2(med, 0); z2l = (lnk, 1/3) u;
+ penpos2(med, ml_d); z2l = (lnk, 1/3) u;
penstroke z1e{ml_dir} .. tension 3 .. {up}z2e;
label(2);
endchar ;
"High link for small letters";
-beginchar(130, lw, 0, 0);
+beginchar(lnk.small.high, lw, 0, 0);
penpos1(med, 270); z1 = (-1, hl_y * ex);
penpos2(thin, 270); z2l = (3/5 + lnk, 1) u;
penstroke z1e{right} .. {right}z2e ;
@@ -1443,7 +1495,7 @@ endchar ;
%%\subsec For loops (b, f, h, l). %{{{2
"Low link for large loops";
-beginchar(132, lw, loop_ascend*ex#, 0);
+beginchar(lnk.loop.low, lw, loop_ascend*ex#, 0);
if proofing > 1: proofrule ((lnk,0) u, (lnk,loop_ascend)u); fi
penpos1(med, 270); z1r = (-1, 0);
penpos2(med, 330); z2 = (3/4 + lnk, 2/3 * loop_ascend) u + (0,0);
@@ -1452,7 +1504,7 @@ beginchar(132, lw, loop_ascend*ex#, 0);
endchar;
"Medium link for large loops";
-beginchar(133, lw, loop_ascend*ex#, 0);
+beginchar(lnk.loop.med, lw, loop_ascend*ex#, 0);
if proofing > 1: proofrule ((lnk,0) u, (lnk,loop_ascend)u); fi
penpos1(med, ml_d); z1 = (-1, ml_y * ex);
penpos2(med, 330); z2 = (3/4 + lnk, 2/3 * loop_ascend) u + (0,0);
@@ -1461,7 +1513,7 @@ beginchar(133, lw, loop_ascend*ex#, 0);
endchar;
"High link for large loops";
-beginchar(134, lw, loop_ascend*ex#, 0);
+beginchar(lnk.loop.high, lw, loop_ascend*ex#, 0);
if proofing > 1: proofrule ((lnk,0) u, (lnk,loop_ascend)u); fi
penpos1(med, 270); z1 = (-1, hl_y * ex);
penpos2(med, 330); z2 = (3/4 + lnk, 2/3 * loop_ascend) u + (0,0);
@@ -1470,7 +1522,7 @@ beginchar(134, lw, loop_ascend*ex#, 0);
endchar;
"Low to medium transition";
-beginchar(135, ltr_w(1/6), 0, 0);
+beginchar(lnk.lowmed, ltr_w(1/6), 0, 0);
penpos1(med, 270); z1r = (-1, 0);
penpos2(med, ml_d); z2 = (1/6 + lnk, ml_y) u;
penstroke z1e{right} .. {ml_dir}z2e ;
@@ -1480,7 +1532,7 @@ endchar;
%%\subsec For those vertical on the left (i, u). %{{{2
"Low link for verticals";
-beginchar(136, lw, 0, 0);
+beginchar(lnk.vert.low, lw, 0, 0);
penpos1(med, 270); z1r = (-1, 0);
penpos2(med, 0); z2l = (1/6 + lnk, 2/3) u;
penpos3(med, 0); z3l = (1/6 + lnk, 1) u;
@@ -1489,7 +1541,7 @@ beginchar(136, lw, 0, 0);
endchar;
"Medium link for verticals";
-beginchar(137, lw, 0, 0);
+beginchar(lnk.vert.med, lw, 0, 0);
penpos1(med, ml_d); z1 = (-1, ml_y * ex);
penpos2(med, 0); z2l = (1/6 + lnk, 1) u;
penstroke z1e{ml_dir} .. tension 1.2 .. {up}z2e;
@@ -1497,7 +1549,7 @@ beginchar(137, lw, 0, 0);
endchar;
"High link for verticals";
-beginchar(138, lw, 0, 0);
+beginchar(lnk.vert.high, lw, 0, 0);
penpos1(med, 270); z1 = (-1, hl_y * ex);
penpos2(med, 0); z2l = (1/6 + lnk, 1) u;
penstroke z1e{right} .. {up}z2e;
@@ -1507,37 +1559,29 @@ endchar;
%%\subsec For the far verticals (j, p). %{{{2
"Low link for far verticals";
-beginchar(140, ltr_w(1/4), 0, 0);
+beginchar(lnk.far.low, lw, 0, 0);
penpos1(med, 270); z1r = (-1, 0);
penpos2(med, 0); z2l = z3l;
pickup thickpen;
- penpos3(thick, 0); z3 = good.rt ((1 + lnk, 1) u);
+ penpos3(thick, 0); z3 = good.rt ((3/4 + lnk, 1) u);
penstroke z1e{right} .. tension 1.2 .. {dir 60}z2e;
label(2);
endchar;
"Medium link for far verticals";
-beginchar(141, lw, 0, 0);
+beginchar(lnk.far.med, ltr_w(-1/4), 0, 0);
penpos1(med, ml_d); z1 = (-1, ml_y * ex);
penpos2(med, 0); z2l = z3l;
- penpos3(thick, 0); z3r = (3/4 + lnk, 1) u;
+ penpos3(thick, 0); z3 = good.rt ((1/2 + lnk, 1) u);
penstroke z1e{ml_dir} .. tension 1.3 .. {dir 60}z2e;
label(2);
endchar;
-"Long medium link for far verticals";
-beginchar(142, ltr_w(1/4), 0, 0);
- penpos1(med, ml_d); z1 = (-1, ml_y * ex);
- penpos2(med, 0); z2r = (1 + lnk, 1) u;
- penstroke z1e{ml_dir} .. tension 1.3 .. {dir 70}z2e;
- label(2);
-endchar;
-
"High link for far verticals";
-beginchar(143, lw, 0, 0);
+beginchar(lnk.far.high, ltr_w(-1/4), 0, 0);
penpos1(med, 270); z1 = (-1, hl_y * ex);
penpos2(med, 0); z2l = z3l;
- penpos3(thick, 0); z3r = (3/4 + lnk, 1) u;
+ penpos3(thick, 0); z3 = good.rt ((1/2 + lnk, 1) u);
penstroke z1e{right} .. {dir 50}z2e;
label(2);
endchar;
@@ -1545,7 +1589,7 @@ endchar;
%%\subsec For high loops (h, k). %{{{2
"Low link for high loops";
-beginchar(144, ltr_w(1/6), 0, 0)
+beginchar(lnk.hloop.low, ltr_w(1/6), 0, 0)
penpos1(med, 270); z1r = (-1, 0);
penpos2(med, 0); z2l = (1/6 + lnk, 6/8) u;
@@ -1560,7 +1604,7 @@ beginchar(144, ltr_w(1/6), 0, 0)
endchar;
"Medium link for high loops";
-beginchar(145, lw, 0, 0)
+beginchar(lnk.hloop.med, lw, 0, 0)
penpos1(med, ml_d); z1 = (-1, ml_y * ex);
penpos2(med, 0); z2l = (lnk, 6/8) u;
@@ -1577,7 +1621,7 @@ endchar;
%%\subsec For m, n, v, and w. %{{{2
"Low link for m and n";
-beginchar(146, ltr_w(1/6), 0, 0)
+beginchar(lnk.mn.low, ltr_w(1/6), 0, 0)
penpos1(med, 270); z1r = (-1, 0);
penpos2(med, 0); z2l = (1/12 + lnk, 1/2) u;
penpos3(med, 270); z3l = (1/2 + lnk, 1) u + (1,0);
@@ -1586,7 +1630,7 @@ beginchar(146, ltr_w(1/6), 0, 0)
endchar;
"Medium link for m and n";
-beginchar(147, ltr_w(1/12), 0, 0)
+beginchar(lnk.mn.med, ltr_w(1/12), 0, 0)
penpos1(med, ml_d); z1 = (-1, ml_y * ex);
penpos2(med, 0); z2l = ((1/24 + lnk) * v, 1/2 [y1, y3]);
penpos3(med, 270); z3l = (5/12 + lnk, 1) u + (1,0);
@@ -1595,7 +1639,7 @@ beginchar(147, ltr_w(1/12), 0, 0)
endchar;
"High link for m and n";
-beginchar(148, ltr_w(1/6), 0, 0)
+beginchar(lnk.mn.high, ltr_w(1/6), 0, 0)
penpos1(med, 270); z1 = (-1, hl_y * ex);
penpos2(med, 330); z2 = 1/2 [z1, z3];
penpos3(med, 270); z3l = (1/2 + lnk, 1) u + (1,0);
@@ -1604,7 +1648,7 @@ beginchar(148, ltr_w(1/6), 0, 0)
endchar;
"Beginning for m and n";
-beginchar(149, 0, 0, 0)
+beginchar(lnk.mn.beg, 0, 0, 0)
penpos1(med, 320); z1 = (-1, 2/5 * ex);
penpos2(med, 270); z2l = (1/3, 1) u + (1,0);
penstroke z1e{up} .. {right} z2e;
@@ -1614,7 +1658,7 @@ endchar;
%%\subsec For the x. %{{{2
"Low link for x";
-beginchar(155, ltr_w(1/2), 0, 0)
+beginchar(lnk.x.low, ltr_w(1/2), 0, 0)
penpos1(med, 270); z1r = (-1, 0);
penpos2(med, 0); z2 = 1/2[z1,z3];
penpos3(med, 270); z3l = (5/6 + lnk, 1) u + (1,0);
@@ -1623,7 +1667,7 @@ beginchar(155, ltr_w(1/2), 0, 0)
endchar;
"Medium link for x";
-beginchar(156, ltr_w(1/4), 0, 0)
+beginchar(lnk.x.med, ltr_w(1/4), 0, 0)
penpos1(med, ml_d); z1 = (-1, ml_y * ex);
penpos2(med, 0); z2 = 1/2[z1,z3];
penpos3(med, 270); z3l = (7/12 + lnk, 1) u + (1,0);
@@ -1633,6 +1677,17 @@ endchar;
%%\subsec Special links. %{{{2
+%% The letters {\fc s} and {\fc q} have final forms without a link on the
+%% right, which is the actual glyph. Inside words, they need an extra link.
+
+"Right link for s and q";
+beginchar(lnk.sq, lw, ex#/3, 0);
+ penpos1(med, 180); z1l = (0, 1/3) u;
+ penpos2(med, 270); z2r = (lnk, 0) u;
+ penstroke z1e {down} .. {right}z2e;
+ label(2);
+endchar;
+
%% \chardef\HL=131
%% This link has to be inserted by hand between the letters {\fc o} and
%% {\fc e}, in order to produce ``{\fc o\HL e}'', which is different
@@ -1640,7 +1695,7 @@ endchar;
%% ``{\tt oe}''.
"High horizontal link";
-beginchar(131, lw, 0, 0);
+beginchar(lnk.high, lw, 0, 0);
penpos1(med, 270); z1 = (-1, hl_y * ex);
penpos2(med, 270); z2 = (lnk, 1/2) u + (1,0);
penstroke z1e{right} .. {right}z2e ;
@@ -1652,7 +1707,7 @@ endchar ;
%% \par\nobreak
"Low horizontal link";
-beginchar(139, lw, 0, 0);
+beginchar(lnk.low, lw, 0, 0);
penpos1(med, 270); z1r = (-1, 0);
penpos2(med, 270); z2r = (lnk * v + 1, 0);
penstroke z1e{right} .. {right}z2e ;
@@ -1670,92 +1725,146 @@ endchar ;
a_wd := accent_wd * base_width * ex#;
a_ht := accent_top * ex#;
-%% We use the following macro to save an accent's picture and dimensions in
-%% order to use it later when building accented characters:
+%%\subsec The glyphs for the accents. %{{{2
-def save_accent (text acc) =
+%% When \TeX\ builds an accented character out of an unaccented one and an
+%% accent glyph, the resulting object is not subject to ligatures. Therefore
+%% the accent glyphs are rather useless in this font, which has the pleasant
+%% effect of freeing a good number of character positions. The glyphs below
+%% are thus drawn, but not saved (except for some of them that correspond to
+%% proper characters, like tilde or circumflex). We use the following macros
+%% to save an accent's picture and dimensions in order to use it later when
+%% building accented characters:
+%%% beginchar beginaccent
+%%% endchar endaccent
+
+ignored = 0;
+
+def beginaccent (expr code, wd, ht, dp) =
+ beginchar(code, wd, ht, dp);
+enddef;
+
+def endaccent (suffix acc) =
picture accent.acc;
accent.acc := currentpicture;
acc_wd.acc := w;
- acc_ht#.acc := charht
-enddef;
+ acc_ht#.acc := charht;
+ acc_dp#.acc := chardp;
-%%\subsec The glyphs for the accents. %{{{2
+ if charcode = ignored:
+ save shipit; let shipit = relax;
+ fi
+ endchar
+enddef;
+
+athin := 2/3 [thin, med];
+athick := 2/3 [med, thick];
"Grave accent";
-beginchar(0, a_wd, a_ht, 0);
- penpos1(med, 225); z1 = (0, 1) ua;
- penpos2(med, 270); z2 = (1, 0) ua;
+beginaccent(ignored, a_wd, a_ht, 0);
+ penpos1(athick, 225); z1 = (0, 1) ua;
+ penpos2(athin, 270); z2 = (1, 0) ua;
penstroke z1e .. tension 1.4 .. {right}z2e;
label(2);
- save_accent(grave);
-endchar;
+endaccent(grave);
"Acute accent";
-beginchar(1, a_wd, a_ht, 0);
- penpos1(med, 135); z1 = (1, 1) ua;
- penpos2(med, 90); z2 = (0, 0) ua;
+beginaccent(ignored, a_wd, a_ht, 0);
+ penpos1(athick, 135); z1 = (1, 1) ua;
+ penpos2(athin, 90); z2 = (0, 0) ua;
penstroke z1e .. tension 1.4 .. {left}z2e;
label(2);
- save_accent(acute);
-endchar;
+endaccent(acute);
"Circumflex";
-beginchar(2, 3/2 * a_wd, a_ht, 0);
- penpos1(med, 270); z1 = (0, 0) ua;
- penpos2(med, 0); z2 = (3/4, 1) ua;
+beginaccent("^", 3/2 * a_wd, a_ht, 0);
+ penpos1(athin, 270); z1 = (0, 0) ua;
+ penpos2(athick, 0); z2 = (3/4, 1) ua;
penstroke z1e{right} .. z2e;
- penpos3(med, 180); z3 = z2;
- penpos4(med, 270); z4 = (3/2, 0) ua;
+ penpos3(athick, 180); z3 = z2;
+ penpos4(athin, 270); z4 = (3/2, 0) ua;
penstroke z3e .. {right}z4e;
label(4);
- save_accent(circum);
-endchar;
+endaccent(circum);
"Tilde";
-beginchar(3, 3/2 * a_wd, (2 accent_top + accent_bot)/3 * ex#, 0);
- penpos1(med, 310); z1 = (0, 1/3) ua;
+beginaccent("~", 3/2 * a_wd, (2 accent_top + accent_bot)/3 * ex#, 0);
+ penpos1(athin, 310); z1 = (0, 1/3) ua;
penpos2(med, 210); z2l = (3/4, 1/2) ua;
- penpos4(med, 310); (x4, y4l) = (3/2, 2/3) ua;
+ penpos4(athick, 310); (x4, y4l) = (3/2, 2/3) ua;
penstroke z1e .. z2e{dir 315} .. z4e;
label(4);
- save_accent(tilde);
-endchar;
+endaccent(tilde);
+
+"Double acute";
+beginaccent(34, 4/3 a_wd, a_ht, 0);
+ penpos1(athick, 135); z1 = (2/3, 1) ua;
+ penpos2(athin, 135); z2 = (0, 0) ua;
+ penstroke z1e .. z2e;
+ z3 = (4/3, 1) ua;
+ addto currentpicture also currentpicture shifted (z3 - z1);
+ label(2);
+endaccent(dblacute);
"Umlaut";
-beginchar(4, a_wd, height_with_dot, 0);
+beginaccent(ignored, a_wd, height_with_dot, 0);
pickup pencircle scaled dot_size;
lft z1 = (0, dot_height) u;
rt z2 = (accent_wd, dot_height) u;
drawdot z1; drawdot z2;
label(2);
- save_accent(umlaut);
-endchar;
+endaccent(umlaut);
"Ring";
-beginchar(6, 3/4 a_wd, a_ht, 0);
+beginaccent(ignored, 3/4 a_wd, a_ht, 0);
penpos1(med, 90); z1r = (3/8, 1) ua;
penpos2(med, 180); z2r = (0, 1/2) ua;
penpos3(med, 270); z3r = (3/8, 0) ua;
penpos4(med, 0); z4r = (3/4, 1/2) ua;
penstroke z1e .. z2e .. z3e .. z4e .. cycle;
label(4);
- save_accent(ring);
-endchar;
+endaccent(ring);
+
+"Hachek";
+beginaccent(ignored, 3/2 * a_wd, a_ht, 0);
+ penpos1(athin, 270); z1l = (0, 1) ua;
+ penpos2(athick, 270); z2r = (3/4, 0) ua;
+ penpos3(athin, 270); z3l = (3/2, 1) ua;
+ penstroke z1e -- z2e -- z3e;
+ label(3);
+endaccent(hachek);
+
+"Breve";
+beginaccent(ignored, 3/2 * a_wd, a_ht, 0);
+ penpos1(athin, 180); z1r = (0, 1) ua;
+ penpos2(med, 270); z2r = (3/4, 0) ua;
+ penpos3(athin, 0); z3r = (3/2, 1) ua;
+ penstroke z1e .. z2e .. z3e;
+ label(3);
+endaccent(breve);
"Cedilla";
-beginchar(11, ltr_wd(3/4,0), 0, (cedilla_dp + 1/3) * ex#);
+beginaccent(ignored, ltr_wd(3/4,0), 0, (cedilla_dp + 1/3) * ex#);
penpos1(thick, 180); z1 = (3/8, 0) u;
penpos2(thick, 180); z2 = (3/8, -cedilla_dp) u;
penstroke z1e .. z2e;
penpos3(med, 270); z3r = z2l;
- penpos4(thick, 180); x4l = 3/4 base_width * ex; y4 = 1/2[y3,y5];
+ penpos4(athick, 180); x4l = 3/4 base_width * ex; y4 = 1/2[y3,y5];
penpos5(med, 90); z5l = (3/8, -cedilla_dp - 1/3) u;
- penpos6(thin, 0); x6l = 0; y6 = y4;
+ penpos6(athin, 0); x6l = 0; y6 = y4;
penstroke z3e .. z4e .. z5e{left} .. z6e;
label(6);
- save_accent(cedilla);
-endchar;
+endaccent(cedilla);
+
+"Ogonek";
+beginaccent(ignored, ltr_wd(3/4,0), 0, 2 * cedilla_dp * ex#);
+ penpos1(med, 90); z1l = (3/8, 0) u;
+ penpos2(athick, 180); z2r = (0, -cedilla_dp) u;
+ penpos3(med, 270); z3r = (3/8, -2 cedilla_dp) u;
+ penpos4(athin, -45); z4 = (0.7, -cedilla_dp) u;
+ penstroke z1e {left} .. z2e .. z3e .. z4e;
+ label(4);
+endaccent(ogonek);
%%\subsec The accented characters. %{{{2
@@ -1763,7 +1872,11 @@ endchar;
%% The definition of `make\_accented' produces characters with the same height
%% as their unaccented version, so that the accented uppercase are not too
%% high (otherwise it would force to space out successive lines too much).
-%% Is this a good choice ?
+%% The macro `make\_cedilla' is used to put something (a cedilla or an
+%% ogonek) under a letter, and this one does modify the depth of the original
+%% letter. The macro `make\_caron' adds a caron (same shape as an apostrophe)
+%% to a glyph, without changing the glyph width, so that linking is not
+%% influenced.
def make_accented(expr name, chr)(text base, acc) =
begingroup save base;
@@ -1776,81 +1889,226 @@ def make_accented(expr name, chr)(text base, acc) =
endgroup
enddef;
-make_accented("The letter a with gravis", "à")(a)(grave);
-make_accented("The letter a with acute", "á")(a)(acute);
-make_accented("The letter a with circumflex", "â")(a)(circum);
-make_accented("The letter a with tilde", "ã")(a)(tilde);
-make_accented("The letter a with umlaut", "ä")(a)(umlaut);
-make_accented("The letter a with ring", "å")(a)(ring);
-
-make_accented("The letter e with gravis", "è")(e)(grave);
-make_accented("The letter e with acute", "é")(e)(acute);
-make_accented("The letter e with circumflex", "ê")(e)(circum);
-make_accented("The letter e with umlaut", "ë")(e)(umlaut);
-
-make_accented("The letter i with gravis", "ì")(i)(grave);
-make_accented("The letter i with acute", "í")(i)(acute);
-make_accented("The letter i with circumflex", "î")(i)(circum);
-make_accented("The letter i with umlaut", "ï")(i)(umlaut);
-
-make_accented("The letter o with gravis", "ò")(o)(grave);
-make_accented("The letter o with acute", "ó")(o)(acute);
-make_accented("The letter o with circumflex", "ô")(o)(circum);
-make_accented("The letter o with tilde", "õ")(o)(tilde);
-make_accented("The letter o with umlaut", "ö")(o)(umlaut);
-
-make_accented("The letter u with gravis", "ù")(u)(grave);
-make_accented("The letter u with acute", "ú")(u)(acute);
-make_accented("The letter u with circumflex", "û")(u)(circum);
-make_accented("The letter u with umlaut", "ü")(u)(umlaut);
-
-make_accented("The letter y with acute", "ý")(y)(acute);
-make_accented("The letter y with umlaut", "ÿ")(y)(umlaut);
-make_accented("The letter n with tilde", "ñ")(n)(tilde);
-
-"The letter c with cedilla";
-beginchar("ç", width#.c, ex#, (cedilla_dp + 1/3) * ex#);
- addto currentpicture also letter.c;
- addto currentpicture also accent.cedilla
- shifted (accpos.c - acc_wd.cedilla/2, 0);
- endchar;
+def make_cedilla(expr name, chr)(text base, acc) =
+ begingroup save base;
+ name;
+ beginchar(chr, width#.base, height#.base, max(depth#.base, acc_dp#.acc))
+ addto currentpicture also letter.base;
+ addto currentpicture also accent.acc
+ shifted (cedpos.base - acc_wd.acc/2, 0);
+ endchar
+ endgroup
+enddef;
+
+def make_caron(expr name, chr)(text base, pos) =
+ begingroup save base;
+ name;
+ beginchar(chr, width#.base, height#.base, depth#.base)
+ addto currentpicture also letter.base;
+ penpos1(athick, 180);
+ penpos2(athin, 90);
+ y1 = h; x2 = pos;
+ z1 - z2 = (accent_wd/2, 1/2) u;
+ penstroke z1e {down} .. z2e;
+ label(2);
+ endchar
+ endgroup
+enddef;
+
+make_accented("The letter a with breve", 160)(a)(breve);
+make_cedilla ("The letter a with ogonek", 161)(a)(ogonek);
+make_accented("The letter a with gravis", 224)(a)(grave);
+make_accented("The letter a with acute", 225)(a)(acute);
+make_accented("The letter a with circumflex", 226)(a)(circum);
+make_accented("The letter a with tilde", 227)(a)(tilde);
+make_accented("The letter a with umlaut", 228)(a)(umlaut);
+make_accented("The letter a with ring", 229)(a)(ring);
+
+make_accented("The letter c with acute", 162)(c)(acute);
+make_accented("The letter c with hachek", 163)(c)(hachek);
+make_cedilla ("The letter c with cedilla", 231)(c)(cedilla);
+
+make_caron("The letter d with caron", 164)(d)(accpos.d + thick*base_width);
+
+make_accented("The letter e with hachek", 165)(e)(hachek);
+make_cedilla ("The letter e with ogonek", 166)(e)(ogonek);
+make_accented("The letter e with gravis", 232)(e)(grave);
+make_accented("The letter e with acute", 233)(e)(acute);
+make_accented("The letter e with circumflex", 234)(e)(circum);
+make_accented("The letter e with umlaut", 235)(e)(umlaut);
+
+make_accented("The letter g with breve", 167)(g)(breve);
+
+make_accented("The letter i with gravis", 236)(i)(grave);
+make_accented("The letter i with acute", 237)(i)(acute);
+make_accented("The letter i with circumflex", 238)(i)(circum);
+make_accented("The letter i with umlaut", 239)(i)(umlaut);
+
+make_accented("The letter l with acute", 168)(l)(acute);
+make_caron ("The letter l with caron", 169)(l)(w);
+
+"The letter l slash";
+beginchar(170, width#.l, height#.l, depth#.l)
+ addto currentpicture also letter.l;
+ penpos1(med, 270);
+ penpos2(med, 270);
+ penpos3(thick, 0); z3l = (0, loop_ascend/2) u;
+ 1/2[z2,z1] = z3;
+ z2 - z1 = (2/3, 1/6) u;
+ penstroke z1e .. z2e;
+ label(2);
+endchar;
+
+make_accented("The letter n with acute", 171)(n)(acute);
+make_accented("The letter n with hachek", 172)(n)(hachek);
+make_accented("The letter n with tilde", 241)(n)(tilde);
+
+make_accented("The letter o with double acute", 174)(o)(dblacute);
+make_accented("The letter o with gravis", 242)(o)(grave);
+make_accented("The letter o with acute", 243)(o)(acute);
+make_accented("The letter o with circumflex", 244)(o)(circum);
+make_accented("The letter o with tilde", 245)(o)(tilde);
+make_accented("The letter o with umlaut", 246)(o)(umlaut);
+
+"Scandinavian letter o slash";
+beginchar(248, width#.o, 7/6 ex#, 1/6 ex#)
+ addto currentpicture also letter.o;
+ penpos1(med, 150); z1l = (w, 7/6 ex);
+ penpos2(med, 150); z2r = (0, -1/6 ex);
+ penstroke z1e .. z2e;
+ label(2);
+endchar;
+
+make_accented("The letter r with acute", 175)(r)(acute);
+make_accented("The letter r with hachek", 176)(r)(hachek);
+
+make_accented("The letter s with acute", 177)(s)(acute);
+make_accented("The letter s with hachek", 178)(s)(hachek);
+make_cedilla ("The letter s with cedilla", 179)(s)(cedilla);
+
+make_caron ("The letter t with caron", 180)(t)(accpos.t);
+make_cedilla ("The letter t with cedilla", 181)(t)(cedilla);
+
+make_accented("The letter u with double acute", 182)(u)(dblacute);
+make_accented("The letter u with ring", 183)(u)(ring);
+make_accented("The letter u with gravis", 249)(u)(grave);
+make_accented("The letter u with acute", 250)(u)(acute);
+make_accented("The letter u with circumflex", 251)(u)(circum);
+make_accented("The letter u with umlaut", 252)(u)(umlaut);
+
+make_accented("The letter y with umlaut", 184)(y)(umlaut);
+make_accented("The letter y with acute", 253)(y)(acute);
+
+make_accented("The letter z with acute", 185)(z)(acute);
+make_accented("The letter z with hachek", 186)(z)(hachek);
+
+"The letter z with dot above";
+beginchar(187, width#.z, height#.z, depth#.z)
+ addto currentpicture also letter.z;
+ pickup pencircle scaled dot_size;
+ drawdot (accpos.z, 1/2[accent_bot, accent_top] * ex);
+endchar;
-make_accented("The letter A with gravis", "À")(A)(grave);
-make_accented("The letter A with acute", "Á")(A)(acute);
-make_accented("The letter A with circumflex", "Â")(A)(circum);
-make_accented("The letter A with tilde", "Ã")(A)(tilde);
-make_accented("The letter A with umlaut", "Ä")(A)(umlaut);
-make_accented("The letter A with ring", "Å")(A)(ring);
-
-make_accented("The letter E with gravis", "È")(E)(grave);
-make_accented("The letter E with acute", "É")(E)(acute);
-make_accented("The letter E with circumflex", "Ê")(E)(circum);
-make_accented("The letter E with umlaut", "Ë")(E)(umlaut);
-
-make_accented("The letter I with gravis", "Ì")(I)(grave);
-make_accented("The letter I with acute", "Í")(I)(acute);
-make_accented("The letter I with circumflex", "Î")(I)(circum);
-make_accented("The letter I with umlaut", "Ï")(I)(umlaut);
-
-make_accented("The letter O with gravis", "Ò")(O)(grave);
-make_accented("The letter O with acute", "Ó")(O)(acute);
-make_accented("The letter O with circumflex", "Ô")(O)(circum);
-make_accented("The letter O with tilde", "Õ")(O)(tilde);
-make_accented("The letter O with umlaut", "Ö")(O)(umlaut);
-
-make_accented("The letter U with gravis", "Ù")(U)(grave);
-make_accented("The letter U with acute", "Ú")(U)(acute);
-make_accented("The letter U with circumflex", "Û")(U)(circum);
-make_accented("The letter U with umlaut", "Ü")(U)(umlaut);
-
-make_accented("The letter Y with acute", "Ý")(Y)(acute);
-make_accented("The letter N with tilde", "Ñ")(N)(tilde);
-
-"The letter C with cedilla";
-beginchar("Ç", width#.C, height#.C, (cedilla_dp + 1/3) * ex#);
- addto currentpicture also letter.C;
- addto currentpicture also accent.cedilla
- shifted (accpos.C - acc_wd.cedilla/2, 0);
+make_accented("The letter A with breve", 128)(A)(breve);
+make_cedilla ("The letter A with ogonek", 129)(A)(ogonek);
+make_accented("The letter A with gravis", 192)(A)(grave);
+make_accented("The letter A with acute", 193)(A)(acute);
+make_accented("The letter A with circumflex", 194)(A)(circum);
+make_accented("The letter A with tilde", 195)(A)(tilde);
+make_accented("The letter A with umlaut", 196)(A)(umlaut);
+make_accented("The letter A with ring", 197)(A)(ring);
+
+make_accented("The letter C with acute", 130)(C)(acute);
+make_accented("The letter C with hachek", 131)(C)(hachek);
+make_cedilla ("The letter C with cedilla", 199)(C)(cedilla);
+
+make_accented("The letter D with hachek", 132)(D)(hachek);
+
+make_accented("The letter E with hachek", 133)(E)(hachek);
+make_cedilla ("The letter E with ogonek", 134)(E)(ogonek);
+make_accented("The letter E with gravis", 200)(E)(grave);
+make_accented("The letter E with acute", 201)(E)(acute);
+make_accented("The letter E with circumflex", 202)(E)(circum);
+make_accented("The letter E with umlaut", 203)(E)(umlaut);
+
+make_accented("The letter G with breve", 135)(G)(breve);
+
+"The letter I with dot above";
+beginchar(157, width#.I, height#.I, depth#.I)
+ addto currentpicture also letter.I;
+ pickup pencircle scaled dot_size;
+ drawdot (accpos.z, (1/2[accent_bot, accent_top] + uc_ascend - 1) * ex);
+endchar;
+
+make_accented("The letter I with gravis", 204)(I)(grave);
+make_accented("The letter I with acute", 205)(I)(acute);
+make_accented("The letter I with circumflex", 206)(I)(circum);
+make_accented("The letter I with umlaut", 207)(I)(umlaut);
+
+make_accented("The letter L with acute", 136)(L)(acute);
+make_caron ("The letter L with caron", 137)(L)(w);
+
+"The letter L slash";
+beginchar(138, width#.L, height#.L, depth#.L)
+ addto currentpicture also letter.L;
+ penpos1(med, 270);
+ penpos2(med, 270);
+ 1/2[z2,z1] = (7/6, 2/5) uu;
+ z2 - z1 = (1, 1/10) u;
+ penstroke z1e .. z2e;
+ label(2);
+endchar;
+
+make_accented("The letter N with acute", 139)(N)(acute);
+make_accented("The letter N with hachek", 140)(N)(hachek);
+make_accented("The letter N with tilde", 209)(N)(tilde);
+
+make_accented("The letter O with double acute", 142)(O)(dblacute);
+make_accented("The letter O with gravis", 210)(O)(grave);
+make_accented("The letter O with acute", 211)(O)(acute);
+make_accented("The letter O with circumflex", 212)(O)(circum);
+make_accented("The letter O with tilde", 213)(O)(tilde);
+make_accented("The letter O with umlaut", 214)(O)(umlaut);
+
+"Scandinavian letter O slash";
+beginchar(216, width#.O, height#.O, depth#.O)
+ addto currentpicture also letter.O;
+ penpos1(med, 150); z1l = (w - 1/8 v, h);
+ penpos2(med, 150); z2r = (1/8 v, 0);
+ penstroke z1e .. z2e;
+ label(2);
+endchar;
+
+make_accented("The letter R with acute", 143)(R)(acute);
+make_accented("The letter R with hachek", 144)(R)(hachek);
+
+make_accented("The letter S with acute", 145)(S)(acute);
+make_accented("The letter S with hachek", 146)(S)(hachek);
+accpos.S := base_width * ex;
+make_cedilla ("The letter S with cedilla", 147)(S)(cedilla);
+
+make_accented("The letter T with hachek", 148)(T)(hachek);
+accpos.T := 2 base_width * ex;
+make_cedilla ("The letter T with cedilla", 149)(T)(cedilla);
+
+make_accented("The letter U with double acute", 150)(U)(dblacute);
+make_accented("The letter U with ring", 151)(U)(ring);
+make_accented("The letter U with gravis", 217)(U)(grave);
+make_accented("The letter U with acute", 218)(U)(acute);
+make_accented("The letter U with circumflex", 219)(U)(circum);
+make_accented("The letter U with umlaut", 220)(U)(umlaut);
+
+make_accented("The letter Y with umlaut", 152)(Y)(umlaut);
+make_accented("The letter Y with acute", 221)(Y)(acute);
+
+make_accented("The letter Z with acute", 153)(Z)(acute);
+make_accented("The letter Z with hachek", 154)(Z)(hachek);
+
+"The letter Z with dot above";
+beginchar(155, width#.Z, height#.Z, depth#.Z)
+ addto currentpicture also letter.Z;
+ pickup pencircle scaled dot_size;
+ drawdot (accpos.Z, (1/2[accent_bot, accent_top] + uc_ascend - 1) * ex);
endchar;
"The letter i with no dot";
@@ -2087,7 +2345,7 @@ beginchar(189, ltr_wd(1/2,2), (loop_ascend - straight_descend) * ex#,
straight_descend * ex#);
addto currentpicture also letter.exclam scaled -1
shifted ((1/2 base_width + 2 link_width,
- loop_ascend - straight_descend) * ex)
+ loop_ascend - straight_descend) * ex)
endchar;
"Apostrophe";
@@ -2101,7 +2359,7 @@ beginchar("'", ltr_wd(1/3,2), straight_ascend * ex#, 0);
endchar;
"High apostrophe";
-beginchar(152, ltr_wd(1/3,2), loop_ascend * ex#, 0);
+beginchar(18, ltr_wd(1/3,2), loop_ascend * ex#, 0);
penpos1(thick, 180);
z1 = ((base_width + 3 link_width) / 3, loop_ascend) * ex;
penpos2(thin, 90);
@@ -2203,7 +2461,7 @@ beginchar(190, ltr_wd(3/2,2), (loop_ascend - straight_descend) * ex#,
straight_descend * ex#);
addto currentpicture also letter.interg scaled -1
shifted ((3/2 base_width + 2 link_width,
- loop_ascend - straight_descend) * ex);
+ loop_ascend - straight_descend) * ex);
endchar;
"Left parenthesis";
@@ -2226,48 +2484,112 @@ endchar;
"Left bracket";
beginchar("[", ltr_wd(1,0), loop_ascend * ex#, 1/2 loop_descend * ex#);
- penpos1(med, 270); z1r = (5/6, loop_ascend) u;
- penpos2(med, 270); z2r = (1/6, loop_ascend) u;
-
- penstroke z1e .. z2e;
+ penpos1(med, 90); z1r = (5/6, loop_ascend) u;
+ penpos2(med, 90); z2r = (1/6, loop_ascend) u;
penpos3(thick, 180); z3r = (1/6, loop_ascend) u;
penpos4(thick, 180); z4r = (1/6, -1/2 loop_descend) u;
- penstroke z3e .. z4e;
-
- penpos5(med, 90); z5l = (1/6, -1/2 loop_descend) u;
- penpos6(med, 90); z6l = (5/6, -1/2 loop_descend) u;
+ penpos5(med, 270); z5r = (1/6, -1/2 loop_descend) u;
+ penpos6(med, 270); z6r = (5/6, -1/2 loop_descend) u;
- penstroke z5e .. z6e;
+ if fixed:
+ draw z1 -- z2 -- z5 -- z6 withpen pencircle scaled med;
+ else:
+ penstroke z1e .. z2e;
+ penstroke z3e .. z4e;
+ penstroke z5e .. z6e;
+ fi
label(6);
endchar;
"Right bracket";
beginchar("]", ltr_wd(1,0), loop_ascend * ex#, 1/2 loop_descend * ex#);
- penpos1(med, 270); z1r = (5/6, loop_ascend) u;
- penpos2(med, 270); z2r = (1/6, loop_ascend) u;
-
- penstroke z1e .. z2e;
+ penpos1(med, 270); z1l = (1/6, loop_ascend) u;
+ penpos2(med, 270); z2l = (5/6, loop_ascend) u;
penpos3(thick, 180); z3l = (5/6, loop_ascend) u;
penpos4(thick, 180); z4l = (5/6, -1/2 loop_descend) u;
- penstroke z3e .. z4e;
+ penpos5(med, 90); z5l = (5/6, -1/2 loop_descend) u;
+ penpos6(med, 90); z6l = (1/6, -1/2 loop_descend) u;
- penpos5(med, 90); z5l = (1/6, -1/2 loop_descend) u;
- penpos6(med, 90); z6l = (5/6, -1/2 loop_descend) u;
+ if fixed:
+ draw z1 -- z2 -- z5 -- z6 withpen pencircle scaled med;
+ else:
+ penstroke z1e .. z2e;
+ penstroke z3e .. z4e;
+ penstroke z5e .. z6e;
+ fi
- penstroke z5e .. z6e;
+ label(6);
+endchar;
+
+"Left brace";
+beginchar("{", ltr_wd(7/6,0), loop_ascend * ex#, 1/2 loop_descend * ex#);
+ penpos1(med, 90);
+ penpos2(thick, 180);
+ penpos3(med, 90);
+ penpos4(med, 270);
+ penpos5(thick, 180);
+ penpos6(med, 270);
+
+ x1 = x6 = v;
+ y1r = loop_ascend * ex;
+ y6r = -1/2 loop_descend * ex;
+ z3 = z4 = (1/6 v, 1/2[y1,y6]);
+ z2 = 1/2 [z1, z3];
+ z5 = 1/2 [z4, z6];
+
+ penstroke z1e {left} .. z2e .. {left} z3e;
+ penstroke z4e {right} .. z5e .. {right} z6e;
+
+ label(6);
+endchar;
+
+"Right brace";
+beginchar("}", ltr_wd(7/6,0), loop_ascend * ex#, 1/2 loop_descend * ex#);
+ penpos1(med, 270);
+ penpos2(thick, 180);
+ penpos3(med, 270);
+ penpos4(med, 90);
+ penpos5(thick, 180);
+ penpos6(med, 90);
+
+ x1 = x6 = 1/6 v;
+ y1l = loop_ascend * ex;
+ y6l = -1/2 loop_descend * ex;
+ z3 = z4 = (v, 1/2[y1,y6]);
+ z2 = 1/2 [z1, z3];
+ z5 = 1/2 [z4, z6];
+
+ penstroke z1e {right} .. z2e .. {right} z3e;
+ penstroke z4e {left} .. z5e .. {left} z6e;
label(6);
endchar;
"Slash";
-beginchar("/", ltr_wd(3/2,0), loop_ascend * ex#, 1/2 loop_descend * ex#);
- penpos1(thick, 180); z1l = (8/6, loop_ascend) u;
- penpos2(thick, 180); z2r = (1/6, -1/2 loop_descend) u;
+beginchar("/", ltr_wd(2,0), loop_ascend * ex#, 1/2 loop_descend * ex#);
+ penpos1(thick, 180); z1l = (w - 1/6 v, loop_ascend * ex);
+ penpos2(thick, 180); z2r = (1/6 v, -1/2 loop_descend * ex);
+ penstroke z1e .. z2e;
+ label(2);
+endchar;
+
+"Vertical bar";
+beginchar("|", ltr_wd(1,0), loop_ascend * ex#, 1/2 loop_descend * ex#);
+ penpos1(thick, 180); z1 = (w/2, loop_ascend * ex);
+ penpos2(thick, 180); z2 = (w/2, -1/2 loop_descend * ex);
+ penstroke z1e .. z2e;
+ label(2);
+endchar;
+
+"Reverse slash";
+beginchar("\", ltr_wd(2,0), loop_ascend * ex#, 1/2 loop_descend * ex#);
+ penpos1(thick, 180); z1r = (1/6 v, loop_ascend * ex);
+ penpos2(thick, 180); z2l = (w - 1/6 v, -1/2 loop_descend * ex);
penstroke z1e .. z2e;
label(2);
endchar;
@@ -2289,27 +2611,48 @@ beginchar("&", ltr_wd(3,0), uc_ascend * ex#, 0);
endchar;
"French opening quote";
-beginchar("«", ltr_wd(1,2), ex#, 0);
- penpos1(med, 180); z1l = (1/2, 9/10) u;
- penpos2(thick, 180); z2r = (0, 1/2) u;
- penpos3(med, 180); z3l = (1/2, 1/10) u;
- penstroke z1e{down} .. tension 1.3 .. z2e;
- penstroke z2e .. tension 1.3 .. {down}z3e;
+beginchar(19, ltr_wd(11/10,2), ex#, 0);
+ penpos1(thick, 150); y1r = ex;
+ penpos2(thin, 90); z2 = (link_width, 1/2) u;
+ penpos3(thick, 30); y3l = 0;
+ x1l = x3r = w - (link_width + 2/5) * v;
+ penstroke z1e .. {dir 190} z2e;
+ penstroke z3e .. {dir 170} z2e;
label(3);
- addto currentpicture also currentpicture shifted (3/8 v, 0);
+ addto currentpicture also currentpicture shifted (2/5 v, 0);
endchar;
"French closing quote";
-beginchar("»", ltr_wd(1,2), ex#, 0);
- penpos1(med, 180); z1r = (2 link_width + 1/2, 9/10) u;
- penpos2(thick, 180); z2l = (2 link_width + 1, 1/2) u;
- penpos3(med, 180); z3r = (2 link_width + 1/2, 1/10) u;
- penstroke z1e{down} .. tension 2 .. z2e;
- penstroke z2e .. tension 2 .. {down}z3e;
+beginchar(20, ltr_wd(11/10,2), ex#, 0);
+ penpos1(thick, 210); y1l = ex;
+ penpos2(thin, 270); z2 = (w - (link_width + 2/5) * v, ex/2);
+ penpos3(thick, 330); y3r = 0;
+ x1r = x3l = link_width * v;
+ penstroke z1e .. {dir -10} z2e;
+ penstroke z3e .. {dir 10} z2e;
label(3);
- addto currentpicture also currentpicture shifted (-3/8 v, 0);
+ addto currentpicture also currentpicture shifted (2/5 v, 0);
endchar;
+"Less than sign";
+beginchar("<", ltr_wd(3/2,2), num_ht, 0);
+ penpos1(med, 90); z1r = (3/2 + link_width, 9/10 straight_ascend) u;
+ penpos2(med, 90); z2 = (link_width, 1/2 straight_ascend) u;
+ penpos3(med, 90); z3l = (3/2 + link_width, 1/10 straight_ascend) u;
+ penstroke z1e .. z2e;
+ penstroke z3e .. z2e;
+ label(3);
+endchar;
+
+"Greater than sign";
+beginchar(">", ltr_wd(3/2,2), num_ht, 0);
+ penpos1(med, 270); z1r = (link_width, 9/10 straight_ascend) u;
+ penpos2(med, 270); z2 = (3/2 + link_width, 1/2 straight_ascend) u;
+ penpos3(med, 270); z3l = (link_width, 1/10 straight_ascend) u;
+ penstroke z1e .. z2e;
+ penstroke z3e .. z2e;
+ label(3);
+endchar;
%% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %%
@@ -2324,6 +2667,8 @@ endchar;
%% successions of an uppercase and a lowercase, but also in some cases for
%% punctuation.
+%%\subsec Macros for ligature tables. %{{{2
+
k# := base_width * ex#;
"Right boundary pseudo-character";
@@ -2332,75 +2677,85 @@ beginchar(23, 0, 0, 0) endchar;
boundarychar := 23;
def word_ends =
- ".", ",", ";", ":", "'", ")", "]", "/", "»", "-", 21, 22 enddef;
-
-%% The following macros enumerate all variants of each vowel.
-
-def var_a = "a","à","á","â","ã","ä","å" enddef;
-def var_c = "c","ç" enddef;
-def var_e = "e","è","é","ê","ë" enddef;
-def var_i = "i","ì","í","î","ï" enddef;
-def var_o = "ò","ó","ô","õ","ö" enddef;
-% We don't include ``o'' because of the special kerning with the ``e''.
-def var_u = "u","ù","ú","û","ü" enddef;
-
-def lig_small (expr lig) =
- for lt = var_a, var_c, var_e, "o", var_o: lt |=:| lig, endfor
- "d" |=:| lig,
- "g" |=:| lig,
- "q" |=:| lig
-enddef;
-
-def lig_loop (expr lig) =
- "b" |=:| lig,
- "f" |=:| lig,
- "h" |=:| lig,
- "k" |=:| lig,
- "l" |=:| lig
+ ".", ",", ";", ":", "'", ")", "]", "/", 20, "-", 21, 22 enddef;
+
+%% The sets of variants of letters.
+
+def var_a = "a",160,161,224,225,226,227,228,229 enddef;
+def var_c = "c",162,163,231 enddef;
+def var_d = "d",164 enddef;
+def var_e = "e",165,166,232,233,234,235 enddef;
+def var_g = "g",167 enddef;
+def var_i = "i",236,237,238,239 enddef;
+def var_l = "l",168,169,170 enddef;
+def var_n = "n",171,172,241 enddef;
+def var_o = "o",174,242,243,244,245,246,248 enddef;
+def var_r = "r",175,176 enddef;
+def var_s = "s",177,178,179 enddef;
+def var_t = "t",180,181 enddef;
+def var_u = "u",182,183,249,250,251,252 enddef;
+def var_y = "y",184,253 enddef;
+def var_z = "z",185,186,187 enddef;
+
+%% The sets of shapes for links.
+
+def sh_small = var_a, var_c, var_d, var_e, var_g, var_o, "q", 247 enddef;
+def sh_loop = "b", "f", "h", "k", var_l enddef;
+def sh_vert = var_i, var_r, var_t, var_u, var_z enddef;
+def sh_far = "j", "p", var_s enddef;
+def sh_hloop = "h", "k" enddef;
+def sh_mn = "m", var_n, "v", "w", "x", var_y enddef;
+def sh_x = "x" enddef;
+
+%% Some macros to use these lists.
+
+boolean ligged[], first;
+
+def ligtables (text list) =
+ ligtable
+ for c = list:
+ if not known ligged[byte c]:
+ hide ( ligged[byte c] = true ) c:
+ fi
+ endfor
enddef;
-def lig_vert (expr lig) =
- for lt = var_i, var_u: lt |=:| lig, endfor
- "r" |=:| lig,
- "t" |=:| lig,
- "u" |=:| lig,
- "z" |=:| lig
+def link (text list) (expr chr) =
+ hide(first := true)
+ for lft = list:
+ if first: hide(first := false) else: , fi lft |=:| chr endfor
enddef;
-def lig_far (expr lig) =
- "j" |=:| lig,
- "p" |=:| lig,
- "s" |=:| lig
-enddef;
-
-def lig_mn (expr lig) =
- "m" |=:| lig,
- "n" |=:| lig, "ñ" |=:| lig,
- "v" |=:| lig,
- "w" |=:| lig,
- "x" |=:| lig,
- "y" |=:| lig, "ý" |=:| lig, "ÿ" |=:| lig
+def links (suffix ln) (text sh) =
+ hide (first := true)
+ forsuffixes # = sh:
+ if first: hide(first := false) else: , fi
+ expandafter link expandafter ( scantokens ("sh_" & str #) )(lnk.#.ln)
+ endfor
enddef;
+%%% ligtable ligtables
+%%% penpos link links
%%\subsec Ligatures between lowercase and punctuations. %{{{2
ligtable "-": "-" =: 21, skipto 0;
-ligtable 21: "-" =: 22;
+ligtable 21: "-" =: 22, skipto 0;
ligtable "!": "`" =: 189;
ligtable "?": "`" =: 190;
ligtable "`": "`" kern -2 link_width * k#, skipto 0;
ligtable "'": "'" kern -2 link_width * k#, skipto 0;
-ligtable 152: "'" =:| "'", skipto 0;
+ligtable 18: "'" =:| "'", skipto 0;
-%% % ligtable "<": "<" =: "«";
-%% % ligtable ">": ">" =: "»";
+ligtable "<": "<" =: 19;
+ligtable ">": ">" =: 20;
-ligtable ||: "(": "[": "/": 189: 190:
+ligtable ||: "(": ")": "[": "]": "{": "}": "/": "|": "\":
+ 189: 190: ".": ":": ";": 20: 22:
0::
- lig_far(140), lig_mn(149),
+ link(sh_far)(lnk.far.low), link(sh_mn)(lnk.mn.beg),
skipto 2;
@@ -2409,90 +2764,94 @@ ligtable ||: "(": "[": "/": 189: 190:
%% Special cases: the q and the s have a different shape at the end of words,
%% they have no right link, contrary to the other letters.
-ligtable "q":
- for c = boundarychar, word_ends: c =:| 150, endfor
- skipto 2;
-ligtable "s":
- for c = boundarychar, word_ends: c =:| 154, endfor
- skipto 2;
+ligtables ("q", var_s)
+ for c = 97 upto 122: c |=:| lnk.sq, endfor
+ for c = 160, 161, 162, 163, 165, 166, 167, 168, 170, 171, 172,
+ 175, 176, 177, 178, 179, 181, 183, 185, 186, 187: c |=:| lnk.sq, endfor
+ for c = 224 upto 252:
+ if (c <> 230) and (c <> 240): c |=:| lnk.sq, fi endfor
+ 253 |=:| lnk.sq;
+
+ligtables ("h", "k")
+ "'" |=: 18, skipto 1;
-ligtable "h": "k": "'" |=: 152, skipto 1;
-ligtable for lt = var_a, var_i, var_u: lt: endfor
+ligtables (var_a, var_d, var_i, "m", var_n, "p", var_r, var_u, lnk.sq)
1::
- "d": "m": "n": "ñ": "p": "r":
- for lt = boundarychar, word_ends: lt |=:| 135, endfor
+ for lt = boundarychar, word_ends: lt |=:| lnk.lowmed, endfor
skipto 2;
-ligtable 139:
+
+ligtables (lnk.low)
2::
- "h" |=:| 144, "k" |=:| 144, "x" |=:| 155,
- lig_small(128), lig_loop(132), lig_vert(136), lig_far(140), lig_mn(146);
-ligtable "f": "g": "j": "y": "ý": "ÿ": "z":
- "j" |=:| 142, skipto 3;
-ligtable "l": "'" |=: 152, skipto 3;
-ligtable for lt = var_c, var_e: lt: endfor "t": "x":
+ links (low) (small, hloop, loop, vert, far, mn, x);
+
+ligtables (var_l)
+ "'" |=: 18, skipto 3;
+
+ligtables (var_c, var_e, "f", var_g, "j", var_t, "x", var_y, var_z, 247)
3::
- "h" |=:| 145, "k" |=:| 145, "x" |=:| 156,
- lig_small(129), lig_loop(133), lig_vert(137), lig_far(141), lig_mn(147);
-ligtable "o":
- "e" kern -link_width*k# - med#, skipto 5;
-ligtable 131:
- "e" kern -thin#, skipto 5;
-ligtable "b": "'" |=: 152, skipto 4;
-ligtable for lt = var_o: lt: endfor "v": "w":
+ links (med) (small, hloop, loop, vert, far, mn, x);
+
+ligtables (lnk.high)
+ for c = var_e: c kern -thin#, endfor
+ skipto 5;
+
+ligtables ("b")
+ "'" |=: 18, skipto 4;
+
+ligtables (var_o, "v", "w")
4::
- "e" |=:| 131,
+ for c = var_e: c |=:| lnk.high, endfor
+ for c = "-", 21, 22: c kern thin#, endfor
5::
- lig_small(130), lig_loop(134), lig_vert(138), lig_far(143), lig_mn(148);
+ links (high) (small, loop, vert, far, mn);
%%\subsec Ligatures and spacings after uppercase letters. %{{{2
-ligtable "G": "J": "Y": "Ý":
- "h" |=:| 145, "j" |=:| 142, "k" |=:| 145, "x" |=:| 156,
- lig_small(129), lig_loop(133), lig_vert(137), lig_far(141), lig_mn(147);
+ligtable "G": "J": "Y": 221:
+ links (med) (small, hloop, loop, vert, far, mn, x);
ligtable "F": "S":
- 128 kern -1/2 k#, % small letters are closer
- 142 kern -1/5 k#, % j, p, s too
- lig_small(128),
+ lnk.small.low kern -1/2 k#, % small letters are closer
+ lnk.vert.low kern -1/4 k#, % verticals too
+ lnk.far.med kern -1/5 k#, % j, p, s too
+ link(sh_small)(lnk.small.low),
skipto 6;
-ligtable "I": "Ì": "Í": "Î": "Ï":
- for l = 134, 136, 149: l kern 1/8ex#, endfor
+ligtable "I": 204: 205: 206: 207:
+ for l = lnk.loop.high, lnk.vert.low, lnk.mn.beg: l kern 1/8ex#, endfor
skipto 6;
-ligtable "N": "Ñ":
- 128 kern -1/3 k#,
- 142 kern -1/5 k#,
+ligtable "N": 209:
+ lnk.small.low kern -1/3 k#,
+ lnk.far.med kern -1/5 k#,
skipto 6;
ligtable "P":
- 128 kern -5/8 k#,
- 142 kern -1/3 k#,
- 136 kern -5/12 k#,
+ lnk.small.low kern -5/8 k#,
+ lnk.far.med kern -1/3 k#,
+ lnk.vert.low kern -5/12 k#,
skipto 6;
ligtable "Q":
- 149 kern 1/5 k#,
- lig_small(128),
+ lnk.mn.beg kern 1/5 k#,
+ link(sh_small)(lnk.small.low),
skipto 6;
-ligtable "H": "K": "L":
- 128 kern 1/8 k#,
- 149 kern 1/6 k#,
+ligtable "H": "K": "L":
+ lnk.small.low kern 1/8 k#,
+ lnk.mn.beg kern 1/6 k#,
skipto 6;
-ligtable "B": "C": "D": "M": "R": "T": "V": "W": "X": "Z":
- "A": "À": "Á": "Â": "Ã": "Ä":
- "E": "È": "É": "Ê": "Ë":
- "O": "Ò": "Ó": "Ô": "Õ": "Ö":
- "U": "Ù": "Ú": "Û": "Ü":
- 149 kern 1/6 k#,
+ligtable "B": "C": 199: "D": "M": "R": "T": "V": "W": "X": "Z":
+ "A": 192: 193: 194: 195: 196: 197:
+ "E": 200: 201: 202: 203:
+ "O": 210: 211: 212: 213: 214: 216:
+ "U": 217: 218: 219: 220:
+ lnk.mn.beg kern 1/6 k#,
6::
- lig_small(128),
- "h" |=:| 145, "k" |=:| 145,
- lig_loop(132),
- lig_vert(136),
- lig_far(142),
- lig_mn(149);
+ links (med) (hloop),
+ links (low) (small, loop, vert),
+ links (med) (far),
+ links (beg) (mn);
bye.