diff --git a/APL387.ufo2/features.fea b/APL387.ufo2/features.fea
index 969679a..d09e46a 100644
--- a/APL387.ufo2/features.fea
+++ b/APL387.ufo2/features.fea
@@ -971,7 +971,9 @@ feature mkmk {
\uni22BF \uni25F8 \uni25F9 \uni25FA \uni25FF \uni29CA \uni29CB \uni1F7D5
\uni25F0 \uni25F1 \uni25F2 \uni25F3 \uni221F \uni2220 \uni2222 \uni22BE \uni27C0
\uni299B \uni299C \uni29A0 \uni29A1 \uni29A2 \uni29A3 \uni29A4 \uni29A5 \uni299F
- \uni2BFE \uni2335 ];
+ \uni2BFE \uni2335 \part_braille_dot_1 \part_braille_dot_2
+ \part_braille_dot_3 \part_braille_dot_4 \part_braille_dot_5
+ \part_braille_dot_6 \part_braille_dot_7 \part_braille_dot_8 ];
@GDEF_Mark = [\gravecomb \acutecomb \uni0302 \tildecomb \uni0304 \uni0305 \uni0306
\uni0307 \uni0308 \uni030A \uni030B \uni030C \uni0326 \uni0327 \uni0328
\uni0302.alt01 \uni0304.alt01 \uni0308.case \uni0307.case \gravecomb.case
diff --git a/APL387.ufo2/fontinfo.plist b/APL387.ufo2/fontinfo.plist
index a684b71..b964221 100644
--- a/APL387.ufo2/fontinfo.plist
+++ b/APL387.ufo2/fontinfo.plist
@@ -29,7 +29,7 @@
italicAngle
0
openTypeHeadCreated
- 2025/08/20 05:54:17
+ 2025/08/26 20:25:42
openTypeHheaAscender
910
openTypeHheaDescender
diff --git a/APL387.ufo2/glyphs/contents.plist b/APL387.ufo2/glyphs/contents.plist
index f9e66cf..9fc3d97 100644
--- a/APL387.ufo2/glyphs/contents.plist
+++ b/APL387.ufo2/glyphs/contents.plist
@@ -2880,5 +2880,21 @@
uni2B_F_E_.glif
uni2335
uni2335.glif
+ part_braille_dot_1
+ part_braille_dot_1.glif
+ part_braille_dot_2
+ part_braille_dot_2.glif
+ part_braille_dot_3
+ part_braille_dot_3.glif
+ part_braille_dot_4
+ part_braille_dot_4.glif
+ part_braille_dot_5
+ part_braille_dot_5.glif
+ part_braille_dot_6
+ part_braille_dot_6.glif
+ part_braille_dot_7
+ part_braille_dot_7.glif
+ part_braille_dot_8
+ part_braille_dot_8.glif
diff --git a/APL387.ufo2/glyphs/part_braille_dot_1.glif b/APL387.ufo2/glyphs/part_braille_dot_1.glif
new file mode 100644
index 0000000..0fad0b6
--- /dev/null
+++ b/APL387.ufo2/glyphs/part_braille_dot_1.glif
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/APL387.ufo2/glyphs/part_braille_dot_2.glif b/APL387.ufo2/glyphs/part_braille_dot_2.glif
new file mode 100644
index 0000000..8e99757
--- /dev/null
+++ b/APL387.ufo2/glyphs/part_braille_dot_2.glif
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/APL387.ufo2/glyphs/part_braille_dot_3.glif b/APL387.ufo2/glyphs/part_braille_dot_3.glif
new file mode 100644
index 0000000..7c6c64d
--- /dev/null
+++ b/APL387.ufo2/glyphs/part_braille_dot_3.glif
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/APL387.ufo2/glyphs/part_braille_dot_4.glif b/APL387.ufo2/glyphs/part_braille_dot_4.glif
new file mode 100644
index 0000000..e44e561
--- /dev/null
+++ b/APL387.ufo2/glyphs/part_braille_dot_4.glif
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/APL387.ufo2/glyphs/part_braille_dot_5.glif b/APL387.ufo2/glyphs/part_braille_dot_5.glif
new file mode 100644
index 0000000..70d011e
--- /dev/null
+++ b/APL387.ufo2/glyphs/part_braille_dot_5.glif
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/APL387.ufo2/glyphs/part_braille_dot_6.glif b/APL387.ufo2/glyphs/part_braille_dot_6.glif
new file mode 100644
index 0000000..a46c4b5
--- /dev/null
+++ b/APL387.ufo2/glyphs/part_braille_dot_6.glif
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/APL387.ufo2/glyphs/part_braille_dot_7.glif b/APL387.ufo2/glyphs/part_braille_dot_7.glif
new file mode 100644
index 0000000..5e8f17f
--- /dev/null
+++ b/APL387.ufo2/glyphs/part_braille_dot_7.glif
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/APL387.ufo2/glyphs/part_braille_dot_8.glif b/APL387.ufo2/glyphs/part_braille_dot_8.glif
new file mode 100644
index 0000000..32af308
--- /dev/null
+++ b/APL387.ufo2/glyphs/part_braille_dot_8.glif
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/APL387.ufo2/glyphs/uni221F_.glif b/APL387.ufo2/glyphs/uni221F_.glif
index 5d62532..917a736 100644
--- a/APL387.ufo2/glyphs/uni221F_.glif
+++ b/APL387.ufo2/glyphs/uni221F_.glif
@@ -4,7 +4,6 @@
-
@@ -21,6 +20,7 @@
+
diff --git a/APL387.ufo2/glyphs/uni22B_E_.glif b/APL387.ufo2/glyphs/uni22B_E_.glif
index d30794c..0e8013d 100644
--- a/APL387.ufo2/glyphs/uni22B_E_.glif
+++ b/APL387.ufo2/glyphs/uni22B_E_.glif
@@ -4,7 +4,6 @@
-
@@ -29,6 +28,7 @@
+
diff --git a/APL387.ufo2/glyphs/uni27C_0.glif b/APL387.ufo2/glyphs/uni27C_0.glif
index 17de1e7..85bc176 100644
--- a/APL387.ufo2/glyphs/uni27C_0.glif
+++ b/APL387.ufo2/glyphs/uni27C_0.glif
@@ -4,7 +4,6 @@
-
@@ -53,6 +52,7 @@
+
diff --git a/APL387.ufo2/glyphs/uni299C_.glif b/APL387.ufo2/glyphs/uni299C_.glif
index 08c5973..99bd1e1 100644
--- a/APL387.ufo2/glyphs/uni299C_.glif
+++ b/APL387.ufo2/glyphs/uni299C_.glif
@@ -4,7 +4,6 @@
-
@@ -28,6 +27,7 @@
+
diff --git a/script.py b/script.py
index d81d8cc..4a3659a 100644
--- a/script.py
+++ b/script.py
@@ -17,6 +17,24 @@
apl387.version = commit
+braille_dots = [apl387.createMappedChar(f'part_braille_dot_{i+1}') for i in range(8)]
+
+for braille_index in range(0x100):
+ glyph = apl387.createChar(0x2800 + braille_index)
+ apl387.selection.select('space')
+ apl387.copy()
+ apl387.selection.select(glyph)
+ apl387.paste()
+ bits = [ch == '1' for ch in bin(braille_index)[2:].rjust(8, '0')][::-1]
+ if braille_index in [0x1b, 0xc0]:
+ print(bits)
+ for bit_idx, bit in enumerate(bits):
+ if bit:
+ apl387.selection.select(braille_dots[bit_idx])
+ apl387.copy()
+ apl387.selection.select(glyph)
+ apl387.pasteInto()
+
try:
os.mkdir(f'{path}/output')
except: