ukarpanghooth.html (view raw)
1<!doctype html>
2<html lang="en">
3<head>
4 <meta charset="utf-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>ukarpanghooth — aaoth.xyz</title>
7 <style>
8 html{background:#777}
9 body{margin:1em auto;max-width:850px;color:#000;background:#fff;padding:0.5em;border:4px solid #5aa}
10 a{color:#005;}
11 img{max-width:100%}
12 pre{overflow:scroll}
13 </style>
14</head>
15<body>
16 <section>
17 <h1>ukarpanghooth</h1>
18<h2>overview</h2>
19
20<p>the first writing system i'm going to talk about is ukarpanghooth
21(meaning 'angular cut', IPA: /ɤ.kaɾ.pan.ɡʱə.uːtʰ/). it was actually
22my first attempt to create a writing system. it's main purpose was just
23to be unreadable by others (steganography? security by obscurity?).</p>
24
25<h2>description</h2>
26
27<p>this is a simple alphabetic script based on latin alphabet. some
28letter shapes are also influenced by runic scripts. the first version
29(proto-ukarpangooth) was actually very similar to the latin alphabet,
30so later it was modified, as an attempt to make it more unique and more
31obscure. words are separated by a special symbol, so that sentences are
32written together as one piece.</p>
33
34<!--
35<figure>
36<img src="{}" alt=""/>
37<figcaption>
38proto-ukarpanghooth, ukarpanghooth, comparison with latin
39</figcaption>
40</figure>
41-->
42
43<p>there is one interesting aspect about it is the order and direction in
44which it is written. initially it was done the usual way (well... for
45some), right-to-left, top-to-bottom. then i came up with something
46creative, writing it in groups of four letters in a square (top-right,
47bottom-right, bottom-left, top-left). if the number of letters in a
48sentence isn't divisible by four, letters are stretched to fit into
49square shape. there also instances of it written snake-shaped, turning
50by 90 degrees after each word.</p>
51
52<!--
53<figure>
54<img src="{}" alt=""/>
55<figcaption>
56example text, writing direction outline
57</figcaption>
58</figure>
59-->
60
61<p>the name of the script suggests that one can cut it on something
62(wood, stone, etc.), as only straight line segments are used.</p>
63
64<h2>usage</h2>
65
66<p>as mentioned before, script's main purpose was to hide some information
67(i once used it to cheat on a test in a physics class :D). mainly i
68wrote english text. some time later i used it to write my unfinished
69conlang named aihnth (IPA: /a.ji.ən.tʰə/).</p>
70
71<p>the script has some ornamental potential, as its glyphs are pretty
72simple and use only straight lines.</p>
73
74<!--
75<figure>
76<img src="{}" alt=""/>
77<figcaption>
78st peter's cross with "hd un'nuhrthh fah'deelhrhu khotghu koth'h" written on it.
79</figcaption>
80</figure>
81-->
82
83<h2>font</h2>
84
85<p>actually, at first, i didn't think that it would be possible
86to replicate this script's peculiar writing order in a computer
87font. however, after reading some specs, decompiling some fonts and
88experiments i've found a way to do it.</p>
89
90<p>open-type features allow two things: substitution (GSUB) and position
91(GSUB) of glyphs. basically, we need to have three versions of each
92letter: full size, half size and quarter size. then we substitute runs
93of four letters with four quarter sized ones, three letters with two
94quarters and one half, and, finally, two letters with two halves. the
95only thing left is to use contextual postitioning to move each component
96where it needs to be.</p>
97
98<pre>
99<code>
100@full = [a b c]; # full-size letters
101@half = [a.half b.half c.half]; # half-size letters
102@qrtr = [a.qrtr b.qrtr c.qrtr]; # quarter-size letters
103
104# helper lookups
105lookup full2qrtr {
106 sub @full by @qrtr;
107} full2qrtr;
108lookup full2half {
109 sub @full by @half;
110};
111
112# main substitution lookup
113lookup charBlock {
114 sub @full' lookup full2qrtr @full' lookup full2qrtr @full' lookup full2qrtr @full' lookup full2qrtr;
115 sub @full' lookup full2qrtr @full' lookup full2qrtr @full lookup full2half;
116 sub @full' lookup full2half @full' lookup full2half;
117} charBlock;
118</code>
119</pre>
120
121 </section>
122</body>
123</html>