@heroiclands/fonts 0.1.5 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (318) hide show
  1. package/README.md +70 -207
  2. package/charts/helonika-book/chart-1.png +0 -0
  3. package/charts/helonika-book/chart-1.svg +474 -0
  4. package/charts/helonika-book/glyphs/U+F0300.svg +4 -0
  5. package/charts/helonika-book/glyphs/U+F0301.svg +4 -0
  6. package/charts/helonika-book/glyphs/U+F0302.svg +4 -0
  7. package/charts/helonika-book/glyphs/U+F0303.svg +4 -0
  8. package/charts/helonika-book/glyphs/U+F0304.svg +4 -0
  9. package/charts/helonika-book/glyphs/U+F0305.svg +4 -0
  10. package/charts/helonika-book/glyphs/U+F0306.svg +4 -0
  11. package/charts/helonika-book/glyphs/U+F0307.svg +4 -0
  12. package/charts/helonika-book/glyphs/U+F0308.svg +4 -0
  13. package/charts/helonika-book/glyphs/U+F0309.svg +4 -0
  14. package/charts/helonika-book/glyphs/U+F030A.svg +4 -0
  15. package/charts/helonika-book/glyphs/U+F030B.svg +4 -0
  16. package/charts/helonika-book/glyphs/U+F030C.svg +4 -0
  17. package/charts/helonika-book/glyphs/U+F030D.svg +4 -0
  18. package/charts/helonika-book/glyphs/U+F030E.svg +4 -0
  19. package/charts/helonika-book/glyphs/U+F030F.svg +4 -0
  20. package/charts/helonika-book/glyphs/U+F0310.svg +4 -0
  21. package/charts/helonika-book/glyphs/U+F0311.svg +4 -0
  22. package/charts/helonika-book/glyphs/U+F0312.svg +4 -0
  23. package/charts/helonika-book/glyphs/U+F0313.svg +4 -0
  24. package/charts/helonika-book/glyphs/U+F0314.svg +4 -0
  25. package/charts/helonika-book/glyphs/U+F0315.svg +4 -0
  26. package/charts/helonika-book/glyphs/U+F0316.svg +4 -0
  27. package/charts/helonika-book/glyphs/U+F0317.svg +4 -0
  28. package/charts/helonika-book/glyphs/U+F0318.svg +4 -0
  29. package/charts/helonika-book/glyphs/U+F0319.svg +4 -0
  30. package/charts/helonika-book/glyphs/U+F0320.svg +4 -0
  31. package/charts/helonika-book/glyphs/U+F0321.svg +4 -0
  32. package/charts/helonika-book/glyphs/U+F0322.svg +4 -0
  33. package/charts/helonika-book/glyphs/U+F0330.svg +4 -0
  34. package/charts/helonika-book/glyphs/U+F0331.svg +4 -0
  35. package/charts/helonika-book/glyphs/U+F0332.svg +4 -0
  36. package/charts/helonika-book/glyphs/U+F0333.svg +4 -0
  37. package/charts/helonika-book/glyphs/U+F0334.svg +4 -0
  38. package/charts/helonika-book/glyphs/U+F0335.svg +4 -0
  39. package/charts/helonika-book/glyphs/U+F0336.svg +4 -0
  40. package/charts/helonika-book/glyphs/U+F0337.svg +4 -0
  41. package/charts/helonika-book/glyphs/U+F0338.svg +4 -0
  42. package/charts/helonika-book/glyphs/U+F0339.svg +4 -0
  43. package/charts/helonika-book/glyphs/U+F033A.svg +4 -0
  44. package/charts/helonika-book/glyphs/U+F033B.svg +4 -0
  45. package/charts/helonika-book/glyphs/U+F033C.svg +4 -0
  46. package/charts/helonika-book/glyphs/U+F033D.svg +4 -0
  47. package/charts/helonika-book/glyphs/U+F033E.svg +4 -0
  48. package/charts/helonika-book/glyphs/U+F033F.svg +4 -0
  49. package/charts/helonika-book/glyphs/U+F0340.svg +4 -0
  50. package/charts/helonika-book/glyphs/U+F0341.svg +4 -0
  51. package/charts/helonika-book/glyphs/U+F0342.svg +4 -0
  52. package/charts/helonika-book/glyphs/U+F0343.svg +4 -0
  53. package/charts/helonika-book/glyphs/U+F0344.svg +4 -0
  54. package/charts/helonika-book/glyphs/U+F0345.svg +4 -0
  55. package/charts/helonika-book/glyphs/U+F0346.svg +4 -0
  56. package/charts/helonika-book/glyphs/U+F0347.svg +4 -0
  57. package/charts/helonika-book/glyphs/U+F0348.svg +4 -0
  58. package/charts/helonika-book/glyphs/U+F0349.svg +4 -0
  59. package/charts/helonika-book/glyphs/U+F0350.svg +4 -0
  60. package/charts/helonika-book/glyphs/U+F0351.svg +4 -0
  61. package/charts/helonika-book/glyphs/U+F0352.svg +4 -0
  62. package/charts/helonika-book/glyphs/U+F0360.svg +4 -0
  63. package/charts/helonika-book/glyphs/U+F0361.svg +4 -0
  64. package/charts/helonika-book/glyphs/U+F0362.svg +4 -0
  65. package/charts/helonika-book/glyphs/U+F0363.svg +4 -0
  66. package/charts/helonika-book/glyphs/U+F0364.svg +4 -0
  67. package/charts/helonika-book/glyphs/U+F0365.svg +4 -0
  68. package/charts/helonika-book/glyphs/U+F0366.svg +4 -0
  69. package/charts/helonika-book/glyphs/U+F0367.svg +4 -0
  70. package/charts/helonika-book/glyphs/U+F0368.svg +4 -0
  71. package/charts/helonika-book/glyphs/U+F0369.svg +4 -0
  72. package/charts/helonika-book/glyphs/U+F0370.svg +4 -0
  73. package/charts/helonika-book/glyphs/U+F0371.svg +4 -0
  74. package/charts/helonika-book/glyphs/U+F0378.svg +4 -0
  75. package/charts/helonika-book.md +100 -0
  76. package/charts/index.md +5 -2
  77. package/charts/pirzath/chart-1.png +0 -0
  78. package/charts/pirzath/chart-1.svg +1 -1
  79. package/charts/pirzath/glyphs/U+F0017.svg +1 -1
  80. package/charts/pirzath-hand/chart-1.png +0 -0
  81. package/charts/pirzath-hand/chart-1.svg +1 -1
  82. package/charts/pirzath-hand/glyphs/U+F0017.svg +1 -1
  83. package/charts/pirzath-hand-lifted/chart-1.png +0 -0
  84. package/charts/pirzath-hand-lifted/chart-1.svg +1 -1
  85. package/charts/pirzath-hand-lifted/glyphs/U+F0017.svg +1 -1
  86. package/charts/qalezu-hand/chart-1.png +0 -0
  87. package/charts/qalezu-hand/chart-1.svg +2 -2
  88. package/charts/qalezu-hand.md +1 -51
  89. package/charts/semaron-kuriale/chart-1.png +0 -0
  90. package/charts/semaron-kuriale/chart-1.svg +2 -2
  91. package/charts/semaron-kuriale/glyphs/U+F0215.svg +1 -1
  92. package/charts/semaron-kuriale/glyphs/U+F0245.svg +1 -1
  93. package/charts/thuravark-carved/chart-1.png +0 -0
  94. package/charts/thuravark-carved/chart-1.svg +64 -26
  95. package/charts/thuravark-carved/glyphs/U+F0128.svg +4 -0
  96. package/charts/thuravark-carved/glyphs/U+F0129.svg +4 -0
  97. package/charts/thuravark-carved/glyphs/U+F012A.svg +4 -0
  98. package/charts/thuravark-carved/glyphs/U+F0150.svg +4 -0
  99. package/charts/thuravark-carved/glyphs/U+F0151.svg +4 -0
  100. package/charts/thuravark-carved-bound/chart-1.png +0 -0
  101. package/charts/thuravark-carved-bound/chart-1.svg +334 -0
  102. package/charts/thuravark-carved-bound/glyphs/U+F0100.svg +4 -0
  103. package/charts/thuravark-carved-bound/glyphs/U+F0101.svg +4 -0
  104. package/charts/thuravark-carved-bound/glyphs/U+F0102.svg +4 -0
  105. package/charts/thuravark-carved-bound/glyphs/U+F0103.svg +4 -0
  106. package/charts/thuravark-carved-bound/glyphs/U+F0104.svg +4 -0
  107. package/charts/thuravark-carved-bound/glyphs/U+F0105.svg +4 -0
  108. package/charts/thuravark-carved-bound/glyphs/U+F0106.svg +4 -0
  109. package/charts/thuravark-carved-bound/glyphs/U+F0107.svg +4 -0
  110. package/charts/thuravark-carved-bound/glyphs/U+F0108.svg +4 -0
  111. package/charts/thuravark-carved-bound/glyphs/U+F0109.svg +4 -0
  112. package/charts/thuravark-carved-bound/glyphs/U+F010A.svg +4 -0
  113. package/charts/thuravark-carved-bound/glyphs/U+F010B.svg +4 -0
  114. package/charts/thuravark-carved-bound/glyphs/U+F010C.svg +4 -0
  115. package/charts/thuravark-carved-bound/glyphs/U+F010D.svg +4 -0
  116. package/charts/thuravark-carved-bound/glyphs/U+F010E.svg +4 -0
  117. package/charts/thuravark-carved-bound/glyphs/U+F010F.svg +4 -0
  118. package/charts/thuravark-carved-bound/glyphs/U+F0110.svg +4 -0
  119. package/charts/thuravark-carved-bound/glyphs/U+F0111.svg +4 -0
  120. package/charts/thuravark-carved-bound/glyphs/U+F0112.svg +4 -0
  121. package/charts/thuravark-carved-bound/glyphs/U+F0113.svg +4 -0
  122. package/charts/thuravark-carved-bound/glyphs/U+F0114.svg +4 -0
  123. package/charts/thuravark-carved-bound/glyphs/U+F0115.svg +4 -0
  124. package/charts/thuravark-carved-bound/glyphs/U+F0120.svg +4 -0
  125. package/charts/thuravark-carved-bound/glyphs/U+F0121.svg +4 -0
  126. package/charts/thuravark-carved-bound/glyphs/U+F0122.svg +4 -0
  127. package/charts/thuravark-carved-bound/glyphs/U+F0123.svg +4 -0
  128. package/charts/thuravark-carved-bound/glyphs/U+F0124.svg +4 -0
  129. package/charts/thuravark-carved-bound/glyphs/U+F0125.svg +4 -0
  130. package/charts/thuravark-carved-bound/glyphs/U+F0128.svg +4 -0
  131. package/charts/thuravark-carved-bound/glyphs/U+F0129.svg +4 -0
  132. package/charts/thuravark-carved-bound/glyphs/U+F012A.svg +4 -0
  133. package/charts/thuravark-carved-bound/glyphs/U+F0130.svg +4 -0
  134. package/charts/thuravark-carved-bound/glyphs/U+F0131.svg +4 -0
  135. package/charts/thuravark-carved-bound/glyphs/U+F0132.svg +4 -0
  136. package/charts/thuravark-carved-bound/glyphs/U+F0133.svg +4 -0
  137. package/charts/thuravark-carved-bound/glyphs/U+F0134.svg +4 -0
  138. package/charts/thuravark-carved-bound/glyphs/U+F0135.svg +4 -0
  139. package/charts/thuravark-carved-bound/glyphs/U+F0136.svg +4 -0
  140. package/charts/thuravark-carved-bound/glyphs/U+F0137.svg +4 -0
  141. package/charts/thuravark-carved-bound/glyphs/U+F0138.svg +4 -0
  142. package/charts/thuravark-carved-bound/glyphs/U+F0139.svg +4 -0
  143. package/charts/thuravark-carved-bound/glyphs/U+F0140.svg +4 -0
  144. package/charts/thuravark-carved-bound/glyphs/U+F0148.svg +4 -0
  145. package/charts/thuravark-carved-bound/glyphs/U+F0150.svg +4 -0
  146. package/charts/thuravark-carved-bound/glyphs/U+F0151.svg +4 -0
  147. package/charts/thuravark-carved-bound.md +89 -0
  148. package/charts/thuravark-carved.md +16 -1
  149. package/charts/vedyakshara-classical/chart-1.png +0 -0
  150. package/charts/vedyakshara-classical/chart-1.svg +350 -0
  151. package/charts/vedyakshara-classical/glyphs/U+F0400.svg +4 -0
  152. package/charts/vedyakshara-classical/glyphs/U+F0401.svg +4 -0
  153. package/charts/vedyakshara-classical/glyphs/U+F0402.svg +4 -0
  154. package/charts/vedyakshara-classical/glyphs/U+F0403.svg +4 -0
  155. package/charts/vedyakshara-classical/glyphs/U+F0404.svg +4 -0
  156. package/charts/vedyakshara-classical/glyphs/U+F0405.svg +4 -0
  157. package/charts/vedyakshara-classical/glyphs/U+F0406.svg +4 -0
  158. package/charts/vedyakshara-classical/glyphs/U+F0407.svg +4 -0
  159. package/charts/vedyakshara-classical/glyphs/U+F0408.svg +4 -0
  160. package/charts/vedyakshara-classical/glyphs/U+F0409.svg +4 -0
  161. package/charts/vedyakshara-classical/glyphs/U+F040A.svg +4 -0
  162. package/charts/vedyakshara-classical/glyphs/U+F040B.svg +4 -0
  163. package/charts/vedyakshara-classical/glyphs/U+F040C.svg +4 -0
  164. package/charts/vedyakshara-classical/glyphs/U+F040D.svg +4 -0
  165. package/charts/vedyakshara-classical/glyphs/U+F040E.svg +4 -0
  166. package/charts/vedyakshara-classical/glyphs/U+F040F.svg +4 -0
  167. package/charts/vedyakshara-classical/glyphs/U+F0410.svg +4 -0
  168. package/charts/vedyakshara-classical/glyphs/U+F0411.svg +4 -0
  169. package/charts/vedyakshara-classical/glyphs/U+F0412.svg +4 -0
  170. package/charts/vedyakshara-classical/glyphs/U+F0413.svg +4 -0
  171. package/charts/vedyakshara-classical/glyphs/U+F0414.svg +4 -0
  172. package/charts/vedyakshara-classical/glyphs/U+F0415.svg +4 -0
  173. package/charts/vedyakshara-classical/glyphs/U+F0420.svg +4 -0
  174. package/charts/vedyakshara-classical/glyphs/U+F0421.svg +4 -0
  175. package/charts/vedyakshara-classical/glyphs/U+F0422.svg +4 -0
  176. package/charts/vedyakshara-classical/glyphs/U+F0423.svg +4 -0
  177. package/charts/vedyakshara-classical/glyphs/U+F0424.svg +4 -0
  178. package/charts/vedyakshara-classical/glyphs/U+F0425.svg +4 -0
  179. package/charts/vedyakshara-classical/glyphs/U+F0426.svg +4 -0
  180. package/charts/vedyakshara-classical/glyphs/U+F0430.svg +4 -0
  181. package/charts/vedyakshara-classical/glyphs/U+F0431.svg +4 -0
  182. package/charts/vedyakshara-classical/glyphs/U+F0432.svg +4 -0
  183. package/charts/vedyakshara-classical/glyphs/U+F0433.svg +4 -0
  184. package/charts/vedyakshara-classical/glyphs/U+F0434.svg +4 -0
  185. package/charts/vedyakshara-classical/glyphs/U+F0435.svg +4 -0
  186. package/charts/vedyakshara-classical/glyphs/U+F0438.svg +4 -0
  187. package/charts/vedyakshara-classical/glyphs/U+F0439.svg +4 -0
  188. package/charts/vedyakshara-classical/glyphs/U+F0440.svg +4 -0
  189. package/charts/vedyakshara-classical/glyphs/U+F0441.svg +4 -0
  190. package/charts/vedyakshara-classical/glyphs/U+F0442.svg +4 -0
  191. package/charts/vedyakshara-classical/glyphs/U+F0443.svg +4 -0
  192. package/charts/vedyakshara-classical/glyphs/U+F0444.svg +4 -0
  193. package/charts/vedyakshara-classical/glyphs/U+F0445.svg +4 -0
  194. package/charts/vedyakshara-classical/glyphs/U+F0446.svg +4 -0
  195. package/charts/vedyakshara-classical/glyphs/U+F0447.svg +4 -0
  196. package/charts/vedyakshara-classical/glyphs/U+F0448.svg +4 -0
  197. package/charts/vedyakshara-classical/glyphs/U+F0449.svg +4 -0
  198. package/charts/vedyakshara-classical/glyphs/U+F0450.svg +4 -0
  199. package/charts/vedyakshara-classical/glyphs/U+F0451.svg +4 -0
  200. package/charts/vedyakshara-classical.md +78 -0
  201. package/fonts/HelonikaBook-Regular.ttf +0 -0
  202. package/fonts/HelonikaBook-Regular.woff2 +0 -0
  203. package/fonts/PirzathCarved-Regular.ttf +0 -0
  204. package/fonts/PirzathCarved-Regular.woff2 +0 -0
  205. package/fonts/PirzathHand-Regular.ttf +0 -0
  206. package/fonts/PirzathHand-Regular.woff2 +0 -0
  207. package/fonts/QalezuHand-Regular.ttf +0 -0
  208. package/fonts/QalezuHand-Regular.woff2 +0 -0
  209. package/fonts/SemaronKuriale-Regular.ttf +0 -0
  210. package/fonts/SemaronKuriale-Regular.woff2 +0 -0
  211. package/fonts/ThuravarkCarved-Regular.ttf +0 -0
  212. package/fonts/ThuravarkCarved-Regular.woff2 +0 -0
  213. package/fonts/VedyaksharaClassical-Regular.ttf +0 -0
  214. package/fonts/VedyaksharaClassical-Regular.woff2 +0 -0
  215. package/fonts.css +32 -0
  216. package/fonts.json +3235 -2440
  217. package/keyboards/emacs/heroiclands-helonika.el +206 -0
  218. package/keyboards/emacs/heroiclands-pirzath.el +2 -2
  219. package/keyboards/emacs/heroiclands-qalezu.el +4 -4
  220. package/keyboards/emacs/heroiclands-semaron.el +4 -4
  221. package/keyboards/emacs/heroiclands-thuravark.el +6 -6
  222. package/keyboards/emacs/heroiclands-vedyakshara.el +205 -0
  223. package/keyboards/emacs/heroiclands-veldikko.el +211 -0
  224. package/keyboards/helonika.md +258 -0
  225. package/keyboards/helonika.png +0 -0
  226. package/keyboards/helonika.svg +728 -0
  227. package/keyboards/index.md +319 -156
  228. package/keyboards/keyboard.png +0 -0
  229. package/keyboards/keyboard.svg +10 -2
  230. package/keyboards/linux/hl_helonika +58 -0
  231. package/keyboards/linux/hl_pirzath +1 -1
  232. package/keyboards/linux/hl_qalezu +2 -2
  233. package/keyboards/linux/hl_semaron +2 -2
  234. package/keyboards/linux/hl_thuravark +2 -2
  235. package/keyboards/linux/hl_vedyakshara +58 -0
  236. package/keyboards/linux/hl_veldikko +58 -0
  237. package/keyboards/macos/HeroicLands.bundle/Contents/Info.plist +23 -2
  238. package/keyboards/macos/HeroicLands.bundle/Contents/Resources/HL Helonika.keylayout +392 -0
  239. package/keyboards/macos/HeroicLands.bundle/Contents/Resources/HL Pirzath.keylayout +2 -0
  240. package/keyboards/macos/HeroicLands.bundle/Contents/Resources/HL Qalezu.keylayout +4 -0
  241. package/keyboards/macos/HeroicLands.bundle/Contents/Resources/HL Semaron.keylayout +4 -0
  242. package/keyboards/macos/HeroicLands.bundle/Contents/Resources/HL Thuravark.keylayout +4 -0
  243. package/keyboards/macos/HeroicLands.bundle/Contents/Resources/HL Vedyakshara.keylayout +363 -0
  244. package/keyboards/macos/HeroicLands.bundle/Contents/Resources/HL Veldikko.keylayout +378 -0
  245. package/keyboards/pirzath.md +191 -150
  246. package/keyboards/pirzath.png +0 -0
  247. package/keyboards/pirzath.svg +716 -0
  248. package/keyboards/qalezu.md +191 -150
  249. package/keyboards/qalezu.png +0 -0
  250. package/keyboards/qalezu.svg +468 -0
  251. package/keyboards/semaron.md +191 -150
  252. package/keyboards/semaron.png +0 -0
  253. package/keyboards/semaron.svg +700 -0
  254. package/keyboards/sounds.json +144 -144
  255. package/keyboards/thuravark.md +191 -150
  256. package/keyboards/thuravark.png +0 -0
  257. package/keyboards/thuravark.svg +686 -0
  258. package/keyboards/vedyakshara.md +243 -0
  259. package/keyboards/vedyakshara.png +0 -0
  260. package/keyboards/vedyakshara.svg +605 -0
  261. package/keyboards/veldikko.md +265 -0
  262. package/keyboards/veldikko.png +0 -0
  263. package/keyboards/veldikko.svg +674 -0
  264. package/keyboards/windows/helonika.klc +0 -0
  265. package/keyboards/windows/pirzath.klc +0 -0
  266. package/keyboards/windows/qalezu.klc +0 -0
  267. package/keyboards/windows/semaron.klc +0 -0
  268. package/keyboards/windows/thuravark.klc +0 -0
  269. package/keyboards/windows/vedyakshara.klc +0 -0
  270. package/keyboards/windows/veldikko.klc +0 -0
  271. package/keyboards/zethu.md +353 -350
  272. package/package.json +2 -2
  273. package/charts/qalezu-hand/chart-2.png +0 -0
  274. package/charts/qalezu-hand/chart-2.svg +0 -276
  275. package/charts/qalezu-hand/glyphs/U+1ECC0.svg +0 -4
  276. package/charts/qalezu-hand/glyphs/U+1ECC1.svg +0 -4
  277. package/charts/qalezu-hand/glyphs/U+1ECC2.svg +0 -4
  278. package/charts/qalezu-hand/glyphs/U+1ECC3.svg +0 -4
  279. package/charts/qalezu-hand/glyphs/U+1ECC4.svg +0 -4
  280. package/charts/qalezu-hand/glyphs/U+1ECC5.svg +0 -4
  281. package/charts/qalezu-hand/glyphs/U+1ECC6.svg +0 -4
  282. package/charts/qalezu-hand/glyphs/U+1ECC7.svg +0 -4
  283. package/charts/qalezu-hand/glyphs/U+1ECC8.svg +0 -4
  284. package/charts/qalezu-hand/glyphs/U+1ECC9.svg +0 -4
  285. package/charts/qalezu-hand/glyphs/U+1ECCA.svg +0 -4
  286. package/charts/qalezu-hand/glyphs/U+1ECCB.svg +0 -4
  287. package/charts/qalezu-hand/glyphs/U+1ECCC.svg +0 -4
  288. package/charts/qalezu-hand/glyphs/U+1ECCD.svg +0 -4
  289. package/charts/qalezu-hand/glyphs/U+1ECCE.svg +0 -4
  290. package/charts/qalezu-hand/glyphs/U+1ECCF.svg +0 -4
  291. package/charts/qalezu-hand/glyphs/U+1ECD0.svg +0 -4
  292. package/charts/qalezu-hand/glyphs/U+1ECD1.svg +0 -4
  293. package/charts/qalezu-hand/glyphs/U+1ECD2.svg +0 -4
  294. package/charts/qalezu-hand/glyphs/U+1ECD3.svg +0 -4
  295. package/charts/qalezu-hand/glyphs/U+1ECD4.svg +0 -4
  296. package/charts/qalezu-hand/glyphs/U+1ECD5.svg +0 -4
  297. package/charts/qalezu-hand/glyphs/U+1ECD6.svg +0 -4
  298. package/charts/qalezu-hand/glyphs/U+1ECD7.svg +0 -4
  299. package/charts/qalezu-hand/glyphs/U+1ECD8.svg +0 -4
  300. package/charts/qalezu-hand/glyphs/U+1ECD9.svg +0 -4
  301. package/charts/qalezu-hand/glyphs/U+1ECDA.svg +0 -4
  302. package/charts/qalezu-hand/glyphs/U+1ECDB.svg +0 -4
  303. package/charts/qalezu-hand/glyphs/U+1ECDC.svg +0 -4
  304. package/charts/qalezu-hand/glyphs/U+1ECDD.svg +0 -4
  305. package/charts/qalezu-hand/glyphs/U+1ECDE.svg +0 -4
  306. package/charts/qalezu-hand/glyphs/U+1ECDF.svg +0 -4
  307. package/charts/qalezu-hand/glyphs/U+1ECE0.svg +0 -4
  308. package/charts/qalezu-hand/glyphs/U+1ECE1.svg +0 -4
  309. package/charts/qalezu-hand/glyphs/U+1ECE2.svg +0 -4
  310. package/charts/qalezu-hand/glyphs/U+1ECE3.svg +0 -4
  311. package/charts/qalezu-hand/glyphs/U+1ECE4.svg +0 -4
  312. package/charts/qalezu-hand/glyphs/U+1ECE5.svg +0 -4
  313. package/charts/qalezu-hand/glyphs/U+1ECE6.svg +0 -4
  314. package/charts/qalezu-hand/glyphs/U+1ECE7.svg +0 -4
  315. package/charts/qalezu-hand/glyphs/U+1ECE8.svg +0 -4
  316. package/charts/qalezu-hand/glyphs/U+1ECE9.svg +0 -4
  317. package/charts/qalezu-hand/glyphs/U+1ECEA.svg +0 -4
  318. package/charts/qalezu-hand/glyphs/U+1ECEB.svg +0 -4
package/README.md CHANGED
@@ -1,246 +1,109 @@
1
- # fonts
1
+ # Fantasy script fonts
2
2
 
3
- Fonts for the scripts of the HeroicLands settings, drawn from scratch so that a setting's inscriptions can be shown in their own letters on the sites, in the books and in Foundry.
3
+ Open-source fonts for invented writing systems, free to use in your own campaign, game, book or website. They were built for the [HeroicLands Thalorna](https://www.heroiclands.org/thalorna/) setting, and anyone may use them.
4
4
 
5
- Pirzath Carved and Thuravark Carved draw their script over the setting's Latin spelling. Text stays plain, readable and searchable, and a passage switches to the script by its font alone. A letter pair that the spelling uses for one sound, such as _th_ or _kh_, draws the single letter for that sound.
5
+ | Font | What it is | Direction | Sample | Keyboard |
6
+ | --------------------- | ----------------------------------------------------------------------------------------- | ----------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------ |
7
+ | Pirzath Carved | Khazari (dwarven) runic lapidary | Left to right | ![Pirzath Carved](specimens/readme/hl-pirzath-carved.png) | [HL Pirzath](keyboards/pirzath.md) |
8
+ | Pirzath Hand | Khazari (dwarven) common hand, the modern script | Left to right | ![Pirzath Hand](specimens/readme/hl-pirzath-hand.png) | [HL Pirzath](keyboards/pirzath.md) |
9
+ | Thuravark Carved | Proto-Pelwar (human) runic lapidary, derived from Pirzath, with the Tharavarkon recension | Left to right | ![Thuravark Carved](specimens/readme/hl-thuravark-carved.png) | [HL Thuravark](keyboards/thuravark.md) |
10
+ | Semaron Kuriale | Vylarian (human) chancery hand | Left to right | ![Semaron Kuriale](specimens/readme/hl-semaron-kuriale.png) | [HL Semaron](keyboards/semaron.md) |
11
+ | Helonika Book | Helonic (human) book hand, geometric capitals over a round minuscule | Left to right | ![Helonika Book](specimens/readme/hl-helonika-book.png) | [HL Helónika](keyboards/helonika.md) |
12
+ | Vedyakshara Classical | Vedyari (human) temple syllabary, hung from a headline | Left to right | ![Vedyakshara Classical](specimens/readme/hl-vedyakshara-classical.png) | [HL Vedyakshara](keyboards/vedyakshara.md) |
13
+ | Veldikko | Sinale (elvish) joined calligraphic hand | Right to left | ![Veldikko](specimens/readme/hl-veldikko.png) | [HL Veldikko](keyboards/veldikko.md) |
14
+ | Qalezu Hand | Au'Khelathu merchants' script | Right to left | ![Qalezu Hand](specimens/readme/hl-qalezu-hand.png) | [HL Qalezu](keyboards/qalezu.md) |
15
+ | Khelathi Zethu Glyphs | Au'Khelathu temple hieroglyphs | Right to left | ![Khelathi Zethu Glyphs](specimens/readme/hl-khelathi-zethu-glyphs.png) | none: [use the chart](charts/khelathi-zethu-glyphs.md) |
16
+ | Teng Chou | Tantsou (human) logographic script | Vertical, top to bottom | ![Teng Chou](specimens/readme/hl-teng-chou.png) | none: [use the chart](charts/teng-chou.md) |
6
17
 
7
- Semaron Kuriale, the Vylarian chancery hand, draws the Vylari spelling in majuscules and minuscules: a doubled vowel types the long vowel's curl, a catch after a letter types the grave over it, and every pause types the one point.
18
+ Each font draws only its own characters, on code points of its own, so ordinary English text typed in one shows empty boxes. You type in a script with its keyboard layout, or insert characters by code point from the font's chart.
8
19
 
9
- Each left-to-right face also draws every one of its characters on a code point of its own in plane 15, the Supplementary Private Use Area-A: the Pirzath faces on U+F0000, Thuravark Carved on U+F0100, Semaron Kuriale on U+F0200, and Teng Chou's characters on U+F1000 and its Jurthati syllabary on U+F2000 (see [Code point blocks](#code-point-blocks)). `fonts.json` lists each face's characters under `codepoints`, and `specimens/<face>/codepoints.png` charts them.
20
+ ## Download
10
21
 
11
- Teng Chou, the Celestial Record of Tantsou and Jenchai, writes one character per Tantsou morpheme, and the Jurthati syllabary beside them for the island tongue's particles and endings. It is written in columns, read from the right: every character takes exactly one em down a column, so a column of N characters is N em tall and a page set in vertical text stands on an even grid, and an inline span sets the characters left to right. Its characters are generated from strokes, components and layouts, not drawn one by one; `design/teng-chou.md` gives the system.
22
+ Every font is a TrueType file (`.ttf`, for documents and desktop apps) and a WOFF2 file (`.woff2`, for websites). Download them from the [latest release](https://github.com/HeroicLands/fonts/releases/latest), which also holds `keyboards.zip` (the keyboard layouts for every platform and their cheatsheets) and `charts.zip` (the character charts). Unzip both into one folder so the cheatsheets find their charts. Programs can take everything from npm instead; see [For programs](#for-programs).
12
23
 
13
- Qalezu, the Khelathi alphabet, is written right to left on code points of its own, U+1EA00 to U+1EA3F, with the catch-before forms in U+1ECC0 to U+1ECFF. A converter turns Latin Khelathi into those code points, and the font draws them; `tools/qalezu-hand/encoding.json` is the one table of what each code point is, its sound and the Latin that types it.
24
+ ## Install a font
14
25
 
15
- Veldikko is the starlight-hand of the Sinale, in which both the Sinale and the Áelendi write: a flowing calligraphy written right to left, its letters joined by hairlines along the line and its vowels marks floating above, in one face for both tongues. It is written on code points of its own, U+1ED50 to U+1EDFF: a letter, then the length bar if the consonant is doubled, then each vowel mark, each followed by its signs of length, pitch and emphasis. The font joins each letter to its neighbours, folds a vowel and its signs into one mark and stands the marks over their letter. Its bowls stand at the x-height Semaron Kuriale and Latin text stand at, and its risers and tails reach well beyond, so a block of Veldikko wants a line height of about 2.4 em from the page's style sheet; a Veldikko word inside an English line leaves the line spacing even. `tools/veldikko/encoding.json` is the one table of what each code point is, and `tools/veldikko/convert.mjs` turns romanized Sinale into those code points; `design/veldikko.md` gives the system.
26
+ Install the `.ttf` file. Close and reopen a program that was running, so it sees the new font.
16
27
 
17
- ## Code point blocks
28
+ - **macOS.** Double-click the `.ttf`, then choose Install Font in the Font Book window.
29
+ - **Windows.** Right-click the `.ttf` and choose Install, or Install for all users.
30
+ - **Linux.** Copy the `.ttf` to `~/.local/share/fonts/`, then run `fc-cache -f`.
18
31
 
19
- Every script draws on a block of code points of its own, and every face of a script draws its script's block: Pirzath Carved, Pirzath Hand and Pirzath Hand Lifted share the Pirzath block, so changing the face changes only the look. The blocks are registered in `BLOCKS` in `tools/codepoint_order.py`; `tools/codepoints.py` checks that every face's code points lie in its registered blocks, that no two blocks overlap, and that this table is the registry's.
32
+ ## Use a font in a document
20
33
 
21
- | Range | Use | Direction |
22
- | ----------------- | --------------------------------------------------------------------------------------------------------- | ------------- |
23
- | U+13430–U+1343F | Egyptian Hieroglyph Format Controls, Unicode's own: Khelathi Zethu Glyphs' quadrat and cartouche controls | left to right |
24
- | U+1E960–U+1E9FF | Khelathi Zethu Glyphs, overflow beyond its main block | right to left |
25
- | U+1EA00–U+1EA3F | Qalezu: signs, digits and punctuation | right to left |
26
- | U+1EA40–U+1EC6F | Khelathi Zethu Glyphs: signs, and its format controls at U+1EC60–U+1EC6F | right to left |
27
- | U+1ECC0–U+1ECFF | Qalezu: a sign with a catch before it | right to left |
28
- | U+1ED50–U+1EDFF | Veldikko: letters, vowel marks and the signs of length, pitch, emphasis and doubling | right to left |
29
- | U+F0000–U+F00FF | Pirzath | left to right |
30
- | U+F0100–U+F01FF | Thuravark | left to right |
31
- | U+F0200–U+F02FF | Semaron | left to right |
32
- | U+F0300–U+F0FFF | Reserved for the remaining alphabets and syllabaries, 256 code points each as they are assigned | left to right |
33
- | U+F1000–U+F1FFF | Teng Chou: characters, one per morpheme, in the order they are added | left to right |
34
- | U+F2000–U+F20FF | Teng Chou: the Jurthati syllabary | left to right |
35
- | U+F2100–U+F2FFF | Reserved for Teng Chou | left to right |
36
- | U+100000–U+10FFFD | Plane 16, unassigned | – |
34
+ Choose the font by its name, such as `Pirzath Carved`, in the font box of your word processor.
37
35
 
38
- - **Left-to-right scripts** (Pirzath, Thuravark, Semaron) sit in plane 15, the Supplementary Private Use Area-A, whose characters are left to right by default. Each takes 256 code points. U+F0300 to U+F0FFF is reserved for the remaining alphabets and syllabaries, 256 code points each as they are assigned. Teng Chou takes U+F1000 to U+F2FFF: its characters from U+F1000, one per morpheme in the order they are added so that none is renumbered, its Jurthati syllabary from U+F2000, and the rest reserved. Teng Chou is written in columns; its characters are left to right where an inline span sets them along a line.
39
- - **Right-to-left scripts** (Qalezu, Khelathi Zethu Glyphs and Veldikko) sit in unassigned code points of plane 1 whose default bidi class is right to left. That is why their text runs right to left in any editor, browser or typesetter, mixed with English and with no controls. Because the code points are unassigned rather than private, Unicode could in principle assign them to a script later. Qalezu takes U+1EA00 to U+1EA3F for its signs, digits and punctuation and U+1ECC0 to U+1ECFF for a sign with a catch before it. Khelathi Zethu Glyphs takes U+1EA40 to U+1EC6F with U+1E960 to U+1E9FF as overflow, 720 code points together. Veldikko takes U+1ED50 to U+1EDFF: its letters from U+1ED50, its vowel marks from U+1ED70 and its signs of length, pitch, emphasis and doubling from U+1ED78.
40
- - **Plane 16** is unassigned.
36
+ - **Microsoft Word, LibreOffice Writer and Apple Pages** use an installed font directly. Word, LibreOffice and Pages all shape OpenType text, which the joined scripts need: Veldikko's letters join along the line and its vowel marks stand over them only in an app that shapes text this way.
37
+ - **Web apps such as Google Docs cannot use a font installed on your computer.** Use a desktop app, or put the text in a picture.
38
+ - **Right-to-left scripts** (Veldikko, Qalezu Hand and Khelathi Zethu Glyphs) run right to left on their own, mixed with English, with no setting to change.
39
+ - **Veldikko** has tall risers and long tails. Set its paragraphs to a line height of about 2.4 times the font size so lines do not collide.
40
+ - **Pirzath Hand and Thuravark Carved** each have an optional form, the OpenType stylistic set `ss01`. Turned on, Pirzath Hand draws a joining line under its letters and Thuravark Carved binds common pairs of staves onto one stem. In LibreOffice, write the font name as `Pirzath Hand:ss01` or `Thuravark Carved:ss01`.
41
+ - **Teng Chou** is written in columns. Set it as ordinary text on a line, or use your app's vertical text direction for columns.
41
42
 
42
- ## Licence
43
-
44
- The fonts are licensed under the SIL Open Font License 1.1; see `LICENSE`. Under it they may be embedded in web pages, documents and books, and bundled with software, without that work taking on the font's licence.
45
-
46
- ## Installing and using the fonts
47
-
48
- The fonts are published to npm as `@heroiclands/fonts`. The package holds each font as WOFF2 and TrueType, `fonts.css` with one `@font-face` rule and one `hl-<font>` class per family, `fonts.json`, the manifest of the families, `keyboards/`, the keyboard layouts, Emacs input methods and cheatsheets for typing in them, and `charts/`, the cheatsheet of each font.
49
-
50
- ```sh
51
- npm install @heroiclands/fonts
52
- ```
53
-
54
- **Web.** Import the stylesheet from a bundler or a stylesheet, or link it:
55
-
56
- ```css
57
- @import "@heroiclands/fonts/fonts.css";
58
- ```
59
-
60
- ```html
61
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@heroiclands/fonts@0/fonts.css" />
62
- ```
63
-
64
- The jsDelivr form is `https://cdn.jsdelivr.net/npm/@heroiclands/fonts@<version>/<file>`. `@0` follows the newest 0.x release, and a full version pins one. A rule's URLs are relative, so every file resolves beside the stylesheet. A family is named by its font-family, such as `font-family: "Pirzath Carved"`.
65
-
66
- **Foundry VTT.** A module ships the files it needs from its own folder, then registers each family either by importing `fonts.css` from its stylesheet or through `CONFIG.fontDefinitions`, so every client loads it:
43
+ ## Type in a script
67
44
 
68
- ```js
69
- CONFIG.fontDefinitions["Pirzath Carved"] = {
70
- editor: true,
71
- fonts: [{ urls: ["modules/<module id>/fonts/PirzathCarved-Regular.woff2"] }],
72
- };
73
- ```
74
-
75
- **Typst.** Point the compiler's font path at the package's `fonts/` folder, and name the family in `#set text(font: "Qalezu Hand")`:
76
-
77
- ```sh
78
- typst compile --font-path node_modules/@heroiclands/fonts/fonts book.typ
79
- ```
45
+ Eight of the fonts have a keyboard layout that types by sound. You press the key for the sound, and the layout types the script's character for it: `t` types the script's t, Option+T types its th, and Shift makes a capital. Each layout is a standard US keyboard underneath, so the roman letters are the ones printed on the keys. **Option** is the Option key on a Mac and the **AltGr** key on Windows and Linux (the right Alt key; on a keyboard without one, hold Ctrl and Alt together).
80
46
 
81
- `fonts.json` states, for each entry, its `name` (unique across the manifest), its `family` (the font-family), its `hl-<font>` class, its `files`, its `direction`, its OpenType `features` and its `codepoints`: every character the font draws, each with its code point, character name where the script's name table gives one, glyph name and kind, and for a sign of Khelathi Zethu Glyphs the sign id that types it; that font's format controls are of kind `control`. The class sets the family's `font-family`, `font-feature-settings` and, for a right-to-left family, `direction`. Pirzath Hand's joined form needs `ss01`, which its class turns on; Pirzath Hand Lifted is the same font with `ss01` turned off.
47
+ Every layout has a printable cheatsheet with a picture of the keyboard and a table of every key:
82
48
 
83
- A note's text in one of these fonts is the font's own code points. They are typed with the keyboard layouts in `keyboards/`, or produced by a mapping in the consuming build.
49
+ | Layout | Types | Cheatsheet |
50
+ | -------------- | ---------------------------- | ---------------------------------------------------- |
51
+ | HL Pirzath | Pirzath Carved, Pirzath Hand | [keyboards/pirzath.md](keyboards/pirzath.md) |
52
+ | HL Thuravark | Thuravark Carved | [keyboards/thuravark.md](keyboards/thuravark.md) |
53
+ | HL Semaron | Semaron Kuriale | [keyboards/semaron.md](keyboards/semaron.md) |
54
+ | HL Helónika | Helonika Book | [keyboards/helonika.md](keyboards/helonika.md) |
55
+ | HL Vedyakshara | Vedyakshara Classical | [keyboards/vedyakshara.md](keyboards/vedyakshara.md) |
56
+ | HL Veldikko | Veldikko | [keyboards/veldikko.md](keyboards/veldikko.md) |
57
+ | HL Qalezu | Qalezu Hand | [keyboards/qalezu.md](keyboards/qalezu.md) |
84
58
 
85
- The fonts are licensed under the SIL Open Font License 1.1, which `LICENSE` carries in the package.
59
+ [keyboards/index.md](keyboards/index.md) draws the keys they share. Install a layout, switch to it, and set the text's font to the matching font.
86
60
 
87
- ## Typing in the fonts
61
+ ### Installing a keyboard layout
88
62
 
89
- A note records Unicode characters, so typing in these fonts needs a keyboard layout that produces their code points. HL Semaron, HL Pirzath, HL Thuravark and HL Qalezu type by sound: every sound of thalorna's spelling guide, _Pronouncing Thalorna_, sits on one key or chord, and that key is the same in every layout. Each layout types its script's own characters for the sound, exactly as the script's mapping note spells it, so one key may type several code points: in HL Semaron, `a` types U+F0230, Shift+A U+F0200, Option+T (_th_) U+F0250 and Option+C (_ch_) U+F0241 U+F0240 U+F0236. A key whose sound the script does not write types nothing in that layout, and no key types a roman letter, except the keys of markup described below. A script's faces share its code points, so the Pirzath layout types Pirzath Carved, Pirzath Hand and Pirzath Hand Lifted alike.
63
+ - **macOS.** Copy the `keyboards/macos/HeroicLands.bundle` folder to `~/Library/Keyboard Layouts/` (in Finder, choose Go, Go to Folder, and paste the path). Log out and back in. Open System Settings, Keyboard, Text Input, Input Sources, press the add button and look under English for the `HL` layouts. Switch layouts from the menu bar. Command and Control shortcuts keep working.
64
+ - **Windows.** Each layout is a source file, `keyboards/windows/<layout>.klc`, for Microsoft Keyboard Layout Creator, which builds the installer on Windows only. Install that free tool, open the `.klc` file in it, choose Project, then Build DLL and Setup Package, and run the `setup.exe` it writes. Then add the layout under Settings, Time & language, Language & region, English (United States), Keyboard. Switch layouts with Windows key+Space.
65
+ - **Linux.** Each layout is an XKB symbols file, `keyboards/linux/hl_<layout>`. Copy the files to `~/.config/xkb/symbols/`. Under X11 run `setxkbmap -I$HOME/.config/xkb -layout hl_pirzath` (substitute the layout); a desktop that reads `~/.config/xkb` lists them as custom layouts. `setxkbmap us` returns to the usual layout.
66
+ - **Emacs.** `keyboards/emacs/heroiclands-<layout>.el` is an input method. Put the folder on `load-path`, evaluate `(require 'heroiclands-pirzath)`, then run `M-x set-input-method` and name `heroiclands-pirzath`. Emacs has no Option key, so Option+T is typed as a backslash and then `t`.
90
67
 
91
- [`keyboards/index.md`](keyboards/index.md) is the cheatsheet: a diagram of the shared keys on an ANSI keyboard, the principles of the key map, and a table of every key or chord, its sound and each script's output as glyphs, code points and character names. `keyboards/<script>.md` gives one script's table.
68
+ A few sounds are written with more characters than a Windows key (four UTF-16 code units) or a Linux key (one character) can hold. Those keys type nothing on that platform, and each cheatsheet lists them. macOS and Emacs type everything.
92
69
 
93
- **The key map.** Letters sit on their roman keys and capitals on Shift. A consonant pair sits on Option and its first letter (Option+T _th_, Option+C _ch_), with _ny_ on Option+Y and _ts_ on Option+X. An acute vowel sits on Option and its vowel. The vowel pairs sit on Option and the digit row: the long vowels _aa ee ii oo uu_ on 1 to 5, then _ai au ei oi ou_ on 6 to 0, and _ie uo ae ea_ on `-`, `=`, `[` and `]`. The diaeresis vowels sit on Option and `;`, `'`, `,`, `.` and `/`. The catch is `'`, the stop `.`, the pause `,`, and the open and close quotes Shift+`,` and Shift+`.`, the keys of `<` and `>`; only Pirzath writes quotation marks, so those keys type nothing in the other layouts. Digits sit on the digit row, and Pirzath's numerals ten to fifteen on Shift+2 to Shift+7. A capital is always Shift and its small sound's key: Option+Shift+T is _Th_.
94
-
95
- **Markup types itself.** In every layout on every platform, the characters Markdown and a span's `[text]{font=…}` need type themselves, as plain ASCII, at their U.S. positions: `` * _ [ ] { } ( ) = : | \ ~ ` ``. A note's markup is written without switching layouts, and no script draws it. `#` is not among them, because Shift+3 is Pirzath's numeral eleven. In Emacs the backslash key is the prefix of the Option chords, so a backslash is typed twice.
96
-
97
- **Where the outputs come from.** `tools/sound_keys.json` puts each sound on its key and states the principles. `keyboards/sounds.json` gives each sound's output in each script; `tools/sounds.mjs` writes it by running each sound's spelling through the four mapping notes on thalorna's `origin/main` (`Lore/Scripts/Semaron_Spelling.md`, `Pirzath_Spelling.md`, `Thuravark_Spelling.md` and `Qalezu_Spelling.md`) with package-build's own mapping rules, the ones a run marked `map=` is set by. A vowel is spelled inside a word, between two _t_'s, and _y_ before an _a_, where it is the glide; so a vowel in Qalezu, which writes consonants only, types nothing. `tools/keyboards.py` writes the layouts from those two files, and the fonts build needs no thalorna checkout:
98
-
99
- ```sh
100
- node tools/sounds.mjs --thalorna ~/dev/HeroicLands/thalorna --write
101
- .venv/bin/python tools/keyboards.py
102
- ```
70
+ ### Fonts without a keyboard
103
71
 
104
- **What a platform cannot carry.** A Windows layout types at most four UTF-16 code units from one key, the limit Microsoft Keyboard Layout Creator puts on a ligature, so Semaron's _ch_ and _Ch_, three plane-15 characters each, type nothing on Windows. An XKB key types one keysym, so every sound a script writes with more than one code point types nothing on Linux. macOS and Emacs carry every output. The cheatsheet lists each of these keys.
72
+ Teng Chou writes one character for each word or syllable, and Khelathi Zethu Glyphs has hundreds of pictorial signs, far more than a keyboard has keys. Open the font's chart ([Teng Chou](charts/teng-chou.md), [Khelathi Zethu Glyphs](charts/khelathi-zethu-glyphs.md)), find the character, and insert it by its code point, such as `U+1EA41`:
105
73
 
106
- The layouts and input methods are in `keyboards/`:
74
+ - **Word on Windows, and LibreOffice:** type the hex digits (`1EA41`) with the cursor after them and press Alt+X. The digits become the character.
75
+ - **macOS:** choose Edit, Emoji & Symbols to open the Character Viewer, search for the code point, and double-click the character. The Unicode Hex Input source also types a code point with Option and four hex digits.
76
+ - **Linux:** press Ctrl+Shift+U, type the hex digits, and press Enter.
77
+ - **Emacs:** `M-x set-input-method` with `heroiclands-zethu` types a Khelathi Zethu sign from its sign id, such as `08-001`; see [keyboards/zethu.md](keyboards/zethu.md).
107
78
 
108
- - **macOS layouts.** `keyboards/macos/HeroicLands.bundle` holds HL Semaron, HL Pirzath, HL Thuravark and HL Qalezu. Copy the bundle to `~/Library/Keyboard Layouts/`, log out and back in, then add each layout under System Settings → Keyboard → Text Input → Input Sources, where the layouts appear under the language English. Command and Control chords type the US keys, so shortcuts keep working.
109
- - **Windows layouts.** `keyboards/windows/<script>.klc` is the Microsoft Keyboard Layout Creator source of each layout, saved as UTF-16 with a byte order mark. Option is the right Alt key (AltGr). Every output is a ligature entry, a character of plane 1 or plane 15 written as its surrogate pair. MSKLC builds the installer on Windows only: open the `.klc` in Microsoft Keyboard Layout Creator, choose Project, Build DLL and Setup Package, and run the `setup.exe` it writes. Then add the layout under Settings, Time & language, Language & region, English (United States), Keyboard.
110
- - **Linux layouts.** `keyboards/linux/hl_<script>` is an XKB symbols file for each layout, with a `U<hex>` keysym on every key that types one character and `VoidSymbol` on the rest. Option is the third level, reached with the right Alt key. Copy the files to `~/.config/xkb/symbols/`, then run `setxkbmap -I$HOME/.config/xkb -layout hl_pirzath` under X11; a desktop that reads `~/.config/xkb` lists them as custom layouts. `setxkbmap us` returns to the usual layout.
111
- - **Emacs input methods.** `keyboards/emacs/heroiclands-<script>.el` defines a Quail input method per layout. Put the directory on `load-path`, evaluate `(require 'heroiclands-semaron)`, then `M-x set-input-method RET heroiclands-semaron`. Shift is the shifted character. Emacs has no Option key, so Option+x is typed `\` and then the key x types: Option+T is `\t` and Option+Shift+T is `\T`.
112
- - **Teng Chou.** Teng Chou writes one character per morpheme and has no keyboard layout: its characters and signs are typed by code point, or written by a mapping in the consuming build. `charts/teng-chou.md` lists every code point with its morpheme or syllable.
113
- - **Veldikko.** The Veldikko has no keyboard layout: its letters, vowel marks and signs are typed by code point, or written from romanized Sinale by a mapping in the consuming build. `charts/veldikko.md` lists every code point with its name.
114
- - **Khelathi Zethu Glyphs.** Zethu writes meanings, not sounds, and has far more signs than a keyboard has keys, so it has an Emacs input method only, `heroiclands-zethu`, typed by sign id: `08-001` inserts that sign. `keyboards/zethu.md` lists the ids. The format controls have no key: a mapping in the consuming build writes them.
79
+ Set the character's font to the matching font, or it shows as an empty box. Each chart lists every character with its code point and name.
115
80
 
116
- ## Cheatsheets
81
+ ## For programs
117
82
 
118
- Each font has a cheatsheet of every character it draws, in `charts/`; [`charts/index.md`](charts/index.md) links them all. A sheet holds two views:
119
-
120
- - **A code chart**, laid out like Unicode's charts: columns headed by the code point without its last hex digit, rows `0` to `F`, each cell holding the glyph above its code point, and a code point the font does not draw hatched. The grid runs left to right in every font. A long range is split into pages of eight columns, and a column with no character is left out.
121
- - **A table** of Character Name, Character, Code Point (`U+05DC`), Entity (`&#1500;`) and Hex Entity (`&#x05DC;`), in code point order and grouped by kind.
122
-
123
- The glyphs are outlines taken from the font, so a sheet reads without the font installed: `charts/<face folder>/chart-<n>.svg` and `.png` are the chart pages, `charts/<face folder>/glyphs/U+XXXX.svg` is one glyph for the table, and `charts/<face folder>.md` embeds both. Pirzath Hand Lifted is drawn with `ss01` off. Character names are Unicode-style (uppercase ASCII letters, digits, spaces and hyphens) and come from `tools/names/<script>.json`, one JSON object per script of `"U+XXXX": "NAME"` pairs, which `tools/write_css.py` writes into `fonts.json`. A script without that file has no names, and its table shows an empty Character Name cell. Khelathi Zethu Glyphs names a sign `ZETHU CHARACTER <n>`, where n is its code point's position in the font's code point space: U+1EA40 is `ZETHU CHARACTER 001`, and the overflow block U+1E960 to U+1E9FF continues after the main block. A format control takes Unicode's name at its Unicode code point, `EGYPTIAN HIEROGLYPH VERTICAL JOINER`, and the font's own at its twin, `ZETHU VERTICAL JOINER`. `tools/zethu_names.py` writes `tools/names/zethu.json`, so drawing a sign renames no other.
124
-
125
- ## Setting up
126
-
127
- Install the dependencies, which also activates the repository's git hooks:
83
+ The fonts are on npm as `@heroiclands/fonts`, with the font files, `fonts.css`, the `fonts.json` manifest, the keyboards and the charts:
128
84
 
129
85
  ```sh
130
- npm ci
131
- ```
132
-
133
- Create the virtual environment:
134
-
135
- ```sh
136
- python3 -m venv .venv
137
- .venv/bin/pip install -r requirements.txt
138
- ```
139
-
140
- The source of each font is a UFO under `sources/`: `PirzathCarved.ufo`, `PirzathHand.ufo`, `ThuravarkCarved.ufo`, `QalezuHand.ufo`, `KhelathiZethuGlyphs.ufo`, `SemaronKuriale.ufo`, `TengChou.ufo` and `Veldikko.ufo`. Open one in FontForge, Glyphs or RoboFont to edit it. `TengChou.ufo` is generated from its data by `tools/teng-chou/build_ufo.py`: an edit to a Teng Chou character belongs in `tools/teng-chou/`, and the script is run after it, before the build. `Veldikko.ufo` is generated the same way by `tools/veldikko/build_ufo.py`, from the letters and the joining in `tools/veldikko/`. The UFO carries the outlines, the character map, the metrics and `features.fea`, which holds every OpenType feature. Every glyph's advance is its ink width plus one sidebearing a side, the same across its face; `tools/respace.py` sets a UFO to that rule, and `design/making-fonts.md` gives each face's sidebearing.
141
-
142
- Build the fonts into `fonts/`. The build is reproducible, so the committed fonts match a fresh build byte for byte:
143
-
144
- ```sh
145
- PATH=.venv/bin:$PATH ./build.sh
146
- ```
147
-
148
- `build.sh` runs `fontmake` and compresses the `.woff2`, once per font (`PirzathCarved` shown), adding Khelathi Zethu Glyphs' quadrat layout between the two with `tools/khelathi-zethu-glyphs/layout.py`, then runs `tools/write_css.py`, which writes `fonts.css` and `fonts.json` from the built fonts' name tables and one table of per-family facts. `tools/keyboards.py` then writes `keyboards/` from `tools/sound_keys.json` and `keyboards/sounds.json` (see [Typing in the fonts](#typing-in-the-fonts)). `tools/charts.py` last writes `charts/` from `fonts.json` and the built fonts, and rasterizes the chart pages with `resvg-py`, pinned in `requirements.txt`:
149
-
150
- ```sh
151
- export SOURCE_DATE_EPOCH=1767225600
152
- fontmake -u sources/PirzathCarved.ufo -o ttf --keep-overlaps --no-production-names \
153
- --output-path fonts/PirzathCarved-Regular.ttf
154
- fonttools ttLib.woff2 compress -o fonts/PirzathCarved-Regular.woff2 fonts/PirzathCarved-Regular.ttf
155
- ```
156
-
157
- Check the package holds exactly what it should, and that the formatting is clean:
158
-
159
- ```sh
160
- npm run check:package
161
- npm run format:check
162
- ```
163
-
164
- Check the built fonts, render the specimens, and prove that each guard fails a broken font:
165
-
166
- ```sh
167
- .venv/bin/python tools/pirzath/check_font.py
168
- .venv/bin/python tools/pirzath-hand/check_font.py
169
- .venv/bin/python tools/thuravark-carved/check_font.py
170
- .venv/bin/python tools/qalezu-hand/check_font.py
171
- .venv/bin/python tools/khelathi-zethu-glyphs/check_font.py
172
- .venv/bin/python tools/semaron-kuriale/check_font.py
173
- .venv/bin/python tools/teng-chou/check_font.py
174
- .venv/bin/python tools/veldikko/check_font.py
175
- .venv/bin/python tools/veldikko/guard.py --fixtures-only # the converter's fixtures join and carry their marks
176
- .venv/bin/python tools/teng-chou/syllabary_distinct.py # the Jurthati signs stay distinct at body size
177
- .venv/bin/python tools/teng-chou/stroke_mix.py # every character's body is strokes, dabs a minority
178
- .venv/bin/python tools/notdef_box.py
179
- .venv/bin/python tools/vertical.py
180
- .venv/bin/python tools/spacing.py # every face is set at a natural spacing; --report prints the measures
181
- .venv/bin/python tools/font_names.py
182
- .venv/bin/python tools/codepoints.py
183
- .venv/bin/python tools/keyboards_guard.py --fixtures-only # the layouts type each sound's output, and nothing else
184
- .venv/bin/python tools/charts_guard.py # every character is on its sheet; unnamed rows are listed
185
- .venv/bin/python tools/khelathi-zethu-glyphs/quadrats.py # quadrats and cartouches land where the layout puts them
186
- .venv/bin/python tools/codepoints_chart.py # specimens/<face>/codepoints.png
187
- .venv/bin/python tools/pirzath/specimens.py # specimens/pirzath/
188
- .venv/bin/python tools/pirzath-hand/specimens.py # specimens/pirzath-hand/
189
- .venv/bin/python tools/thuravark-carved/specimens.py # specimens/thuravark-carved/
190
- .venv/bin/python tools/qalezu-hand/specimens.py # specimens/qalezu-hand/
191
- .venv/bin/python tools/khelathi-zethu-glyphs/specimens.py # specimens/khelathi-zethu-glyphs/
192
- .venv/bin/python tools/khelathi-zethu-glyphs/paint_guard.py # every drawn sign has a paint map
193
- .venv/bin/python tools/semaron-kuriale/specimens.py # specimens/semaron-kuriale/
194
- .venv/bin/python tools/teng-chou/character_specimens.py # specimens/teng-chou/characters.png
195
- .venv/bin/python tools/teng-chou/character_specimens.py --name syllabary.png
196
- .venv/bin/python tools/teng-chou/text_specimen.py # specimens/teng-chou/text.png, text-vertical.png and tally.png
197
- .venv/bin/python tools/veldikko/font_sheets.py # specimens/veldikko/forms.png, joined.png, verse.png, sizes.png and beside.png
198
- .venv/bin/python tools/prove_guards.py
199
- ```
200
-
201
- Each guard shapes every form of its lexicon and asserts the font renders it rightly; the Pirzath guards read the Khazari lexicon, the Thuravark guard the Nordmal one, Semaron Kuriale's the Vylari one, Teng Chou's the Tantsou one (each form cut into morphemes and set one character to each, along a line and down a column), Qalezu's converts the Khelathi lexicon from Latin first, through `tools/qalezu-hand/convert.mjs`, an internal tool of that guard, under `node`, and Veldikko's converts the Sinale lexicon the same way, through `tools/veldikko/convert.mjs`, and asserts each letter's form and where each mark stands. Each reads its lexicon from the `origin/main` of a local thalorna checkout, `~/dev/HeroicLands/thalorna` by default:
202
-
203
- ```sh
204
- .venv/bin/python tools/pirzath/guard.py --thalorna /path/to/thalorna
205
- .venv/bin/python tools/pirzath-hand/guard.py --thalorna /path/to/thalorna
206
- .venv/bin/python tools/thuravark-carved/guard.py --thalorna /path/to/thalorna
207
- .venv/bin/python tools/qalezu-hand/guard.py --thalorna /path/to/thalorna
208
- .venv/bin/python tools/semaron-kuriale/guard.py --thalorna /path/to/thalorna
209
- .venv/bin/python tools/teng-chou/guard.py --thalorna /path/to/thalorna
210
- .venv/bin/python tools/veldikko/guard.py --thalorna /path/to/thalorna
86
+ npm install @heroiclands/fonts
211
87
  ```
212
88
 
213
- `tools/keyboards_guard.py` checks the key map (no key or chord carries two sounds, every sound has a key, a capital sits on Shift and its small sound's key) and reads every layout and input method back: each key must type exactly the code points `keyboards/sounds.json` gives its sound in the script, or nothing where the script does not write the sound or the platform cannot carry it, and no key may type a character below U+0080. Without `--fixtures-only` it also writes `keyboards/sounds.json` afresh from thalorna's mapping notes, through `tools/sounds.mjs` under `node`, and fails where the committed file differs.
89
+ On a web page, import the stylesheet and name a family:
214
90
 
215
- ```sh
216
- .venv/bin/python tools/keyboards_guard.py --thalorna /path/to/thalorna
91
+ ```css
92
+ @import "@heroiclands/fonts/fonts.css";
217
93
  ```
218
94
 
219
- Qalezu's character map follows from `encoding.json`; after editing that file, `.venv/bin/python tools/qalezu-hand/apply_encoding.py` rewrites the UFO's code points, and `--check` reports a disagreement.
220
-
221
- Khelathi Zethu Glyphs is the temple hieroglyphs of the Khelathi, on U+1EA40 to U+1EC6F and written right to left. Its guard reads no lexicon: it shapes the sample inscriptions kept in `tools/khelathi-zethu-glyphs/samples.json`.
222
-
223
- ```sh
224
- .venv/bin/python tools/khelathi-zethu-glyphs/guard.py
95
+ ```html
96
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@heroiclands/fonts@0/fonts.css" />
225
97
  ```
226
98
 
227
- Every drawn Zethu sign has a paint map in `tools/khelathi-zethu-glyphs/paint.json`: each enclosed region of the sign, named by a seed point in glyph units, and its colour category, such as `skin-male`, `linen` or `water`, so a banner, a stele or the book paints the sign the conventional way. `tools/khelathi-zethu-glyphs/paint.py` finds the regions and writes the painted contact sheets to `specimens/khelathi-zethu-glyphs/paint/`; a renderer imports it to find the same regions. `paint_guard.py` fails when a drawn sign has no map or a seed misses its region:
99
+ `@0` follows the newest 0.x release, and a full version pins one. A family is named by its font-family, such as `font-family: "Pirzath Carved"`, or by the `hl-<font>` class in `fonts.css`, which also turns on any OpenType feature the family needs and sets right-to-left families to run right to left.
228
100
 
229
- ```sh
230
- .venv/bin/python tools/khelathi-zethu-glyphs/paint_guard.py
231
- .venv/bin/python tools/khelathi-zethu-glyphs/paint.py
232
- ```
101
+ For Foundry VTT, Typst and the manifest's contents, see [DEVELOPING.md](DEVELOPING.md).
233
102
 
234
- **Quadrats and cartouches.** Khelathi Zethu Glyphs lays out quadrats and cartouches itself from format controls typed between its signs: the vertical and horizontal joiners, the four corner insertions, begin and end segment, and begin and end enclosure, the cartouche. Each control is mapped at its Unicode code point, U+13430 to U+1343D, and at the same offset from U+1EC60 in the font's own block; `tools/khelathi-zethu-glyphs/controls.json` lists them. Notes and text store the font's own controls, U+1EC60 to U+1EC6D, the recommended form. The font accepts the Unicode controls so that text pasted from standard Egyptian text shapes in HarfBuzz tools, but a browser shapes a run of one script at a time and the Unicode controls belong to the Egyptian script, so in a browser they fall out of the run of signs and the quadrat comes apart. In a page, text in the font needs no markup and no feature turned on:
235
-
236
- ```html
237
- <span class="hl-khelathi-zethu-glyphs">&#x1EA41;&#x1EC60;&#x1EA42;</span>
238
- ```
103
+ ## Licence
239
104
 
240
- sets sign 01-002 over sign 01-003. `build.sh` adds the layout to the built font with `tools/khelathi-zethu-glyphs/layout.py`, and `tools/khelathi-zethu-glyphs/quadrats.py` shapes the fixtures of `quadrats.json`, the samples written with joiners, runs of quadrats and a seeded sweep of random ones, and asserts where every sign lands. The layout works in a horizontal line; a column is laid out by the page. `design/khelathi-zethu-glyphs.md` gives the controls, the layout and its limits, and `specimens/khelathi-zethu-glyphs/quadrats/` shows them.
105
+ The fonts are licensed under the SIL Open Font License 1.1; see `LICENSE`. Under it they may be used, embedded in web pages, documents and books, and bundled with software, without that work taking on the font's licence.
241
106
 
242
- ```sh
243
- .venv/bin/python tools/khelathi-zethu-glyphs/quadrats.py
244
- ```
107
+ ## Developing
245
108
 
246
- See `design/khelathi-zethu-glyphs.md`.
109
+ To build the fonts, run the checks or add a font, see [DEVELOPING.md](DEVELOPING.md).
Binary file