summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/fonts/amiri/sources/enclosing.fea
blob: e4fccc6530d2b9f7e63afd7f78de0c138d877743 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
//
// subtending signs
//

@EndOfAyah = [uni06DD];
@NumSign   = [uni0600];
@YearSign  = [uni0601];
@FootNote  = [uni0602];
@SafhaSign = [uni0603];

@NumSign3  = [uni0600.3];
@NumSign4  = [uni0600.4];

@SafhaSign3  = [uni0603.3];

#ifdef ITALIC
@Digits.all = [@Digits @Digits.rtl @Digits.ltr];
#else
@Digits.all = [@Digits];
#endif

lookup digit2small {
  sub @Digits by @Digits.small;
#ifdef ITALIC
  sub @Digits.rtl by @Digits.small2;
  sub @Digits.ltr by @Digits.small2;
#endif
} digit2small;

lookup digit2medi {
  sub @Digits by @Digits.medium;
#ifdef ITALIC
  sub @Digits.rtl by @Digits.medium2;
  sub @Digits.ltr by @Digits.medium2;
#endif
} digit2medi;

lookup Sign3 {
  sub @NumSign by @NumSign3;
  sub @SafhaSign by @SafhaSign3;
} Sign3;

lookup Sign4 {
  sub @NumSign by @NumSign4;
} Sign4;

// first we replace any sequence of digits (up to two, three or four places)
// following a subtending sign by smaller alternates
feature calt {
  // Uniscribe or HarfBuzz ‘latn’
  sub [@EndOfAyah          ] @Digits.all' lookup digit2small @Digits.all' lookup digit2small @Digits.all' lookup digit2small;
  sub [@EndOfAyah @FootNote] @Digits.all' lookup digit2small @Digits.all' lookup digit2small;
  sub [@EndOfAyah @FootNote] @Digits.all' lookup digit2small;

  sub [@NumSign @YearSign] @Digits.all' lookup digit2medi @Digits.all' lookup digit2medi @Digits.all' lookup digit2medi @Digits.all' lookup digit2medi;
  sub [@NumSign @YearSign @SafhaSign] @Digits.all' lookup digit2medi @Digits.all' lookup digit2medi @Digits.all' lookup digit2medi;
  sub [@NumSign @YearSign @SafhaSign] @Digits.all' lookup digit2medi @Digits.all' lookup digit2medi;
  sub [@NumSign @YearSign @SafhaSign] @Digits.all' lookup digit2medi;

  // HarfBuzz ‘arab’
  sub @Digits.all' lookup digit2small @Digits.all' lookup digit2small @Digits.all' lookup digit2small [@EndOfAyah];
  sub @Digits.all' lookup digit2small @Digits.all' lookup digit2small [@EndOfAyah @FootNote];
  sub @Digits.all' lookup digit2small [@EndOfAyah @FootNote];

  sub @Digits.all' lookup digit2medi @Digits.all' lookup digit2medi @Digits.all' lookup digit2medi @Digits.all' lookup digit2medi [@NumSign @YearSign]' lookup Sign4;
  sub @Digits.all' lookup digit2medi @Digits.all' lookup digit2medi @Digits.all' lookup digit2medi [@NumSign @YearSign @SafhaSign]' lookup Sign3;
  sub @Digits.all' lookup digit2medi @Digits.all' lookup digit2medi [@NumSign @YearSign @SafhaSign];
  sub @Digits.all' lookup digit2medi [@NumSign @YearSign @SafhaSign];
} calt;

// Should have been merged with the Uniscribe lookup above as we do for
// HarfBuzz, but then Uniscribe would crash
feature calt {
  sub @NumSign'   lookup Sign4 @Digits.medium @Digits.medium @Digits.medium @Digits.medium;
  sub @NumSign'   lookup Sign3 @Digits.medium @Digits.medium @Digits.medium;
  sub @SafhaSign' lookup Sign3 @Digits.medium @Digits.medium @Digits.medium;
} calt;

// then we contextually kern the sign with the digits so that they get enclosed by it
feature kern {
  // Uniscribe or HarfBuzz ‘latn’
  pos @EndOfAyah @Digits.small'  <-2210 0 -600 0> @Digits.small'  <-1610 0 -600 0> @Digits.small'  <-1010 0 -600 0>;
  pos @EndOfAyah @Digits.small'  <-1910 0 -600 0> @Digits.small'  <-1310 0 -600 0>;
  pos @EndOfAyah @Digits.small'  <-1610 0 -600 0>;

  pos @FootNote @Digits.small'  <-1390 0 -600 0> @Digits.small'  <-790  0 -600 0>;
  pos @FootNote @Digits.small'  <-1090 0 -600 0>;

  pos @NumSign4 @Digits.medium' <-3850 0 -900 0> @Digits.medium' <-2950 0 -900 0> @Digits.medium' <-2050 0 -900 0> @Digits.medium' <-1150 0 -900 0>;
  pos @NumSign3 @Digits.medium' <-2950 0 -900 0> @Digits.medium' <-2050 0 -900 0> @Digits.medium' <-1150 0 -900 0>;
  pos @NumSign  @Digits.medium' <-2150 0 -900 0> @Digits.medium' <-1250 0 -900 0>;
  pos @NumSign  @Digits.medium' <-1700 0 -900 0>;

  pos @YearSign @Digits.medium' <-3625 0 -900 0> @Digits.medium' <-2725 0 -900 0> @Digits.medium' <-1825 0 -900 0> @Digits.medium' <-925  0 -900 0>;
  pos @YearSign @Digits.medium' <-3175 0 -900 0> @Digits.medium' <-2275 0 -900 0> @Digits.medium' <-1375 0 -900 0>;
  pos @YearSign @Digits.medium' <-2725 0 -900 0> @Digits.medium' <-1825 0 -900 0>;
  pos @YearSign @Digits.medium' <-2275 0 -900 0>;

  pos @SafhaSign3 @Digits.medium' <-3275 0 -900 0> @Digits.medium' <-2375 0 -900 0> @Digits.medium' <-1475 0 -900 0>;
  pos @SafhaSign  @Digits.medium' <-2225 0 -900 0> @Digits.medium' <-1325 0 -900 0>;
  pos @SafhaSign  @Digits.medium' <-1775 0 -900 0>;

  // HarfBuzz ‘arab’
  pos @Digits.small'  <-1010 0 -600 0> @Digits.small'  <-1610 0 -600 0> @Digits.small'  <-2210 0 -600 0> @EndOfAyah;
  pos @Digits.small'  <-1310 0 -600 0> @Digits.small'  <-1910 0 -600 0> @EndOfAyah;
  pos @Digits.small'  <-1610 0 -600 0> @EndOfAyah;

  pos @Digits.small'  <-790  0 -600 0> @Digits.small'  <-1390 0 -600 0> @FootNote;
  pos @Digits.small'  <-1090 0 -600 0> @FootNote;

  pos @Digits.medium' <-1150 0 -900 0> @Digits.medium' <-2050 0 -900 0> @Digits.medium' <-2950 0 -900 0> @Digits.medium' <-3850 0 -900 0> @NumSign4;
  pos @Digits.medium' <-1150 0 -900 0> @Digits.medium' <-2050 0 -900 0> @Digits.medium' <-2950 0 -900 0> @NumSign3;
  pos @Digits.medium' <-1250 0 -900 0> @Digits.medium' <-2150 0 -900 0> @NumSign;
  pos @Digits.medium' <-1700 0 -900 0> @NumSign;

  pos @Digits.medium' <-925  0 -900 0> @Digits.medium' <-1825 0 -900 0> @Digits.medium' <-2725 0 -900 0> @Digits.medium' <-3625 0 -900 0> @YearSign;
  pos @Digits.medium' <-1375 0 -900 0> @Digits.medium' <-2275 0 -900 0> @Digits.medium' <-3175 0 -900 0> @YearSign;
  pos @Digits.medium' <-1825 0 -900 0> @Digits.medium' <-2725 0 -900 0> @YearSign;
  pos @Digits.medium' <-2275 0 -900 0> @YearSign;

  pos @Digits.medium' <-1475 0 -900 0> @Digits.medium' <-2375 0 -900 0> @Digits.medium' <-3275 0 -900 0> @SafhaSign3;
  pos @Digits.medium' <-1325 0 -900 0> @Digits.medium' <-2225 0 -900 0> @SafhaSign;
  pos @Digits.medium' <-1775 0 -900 0> @SafhaSign;
} kern;