Demo of NewGardinerOmni

This page is a demo of OpenType fonts constructed using hieropy. These NewGardinerOmni fonts can dynamically interpret control characters. They can be found in the fonts directory of the repository of NewGardiner.

The encoding below of BM EA101 is rendered with one of these fonts. On my platform, this combination of encoding and font can be handled in its entirety with the latest versions of Firefox and Edge, but at least some older versions of various browsers struggle to handle all lines correctly. (Update 2026-10-31: the latest versions of Firefox seem to have regressed. I am trying to find out what happened.)

British Museum EA101 (Stela of Nebipusenusret)

upper register

(top)

π“‚€π“„€π“±π“„€π“±π“„€π“ŠΉπ“„€π“Ήπ“Όπ“‡³π“°π“ˆπ“‚“π“±π“‚“π“°π“‚“π“½π“Ίπ“™οΈ‚π“Š€

(left half)

(1) π“Ήπ“±π“Š¨π“ƒΉπ“·π“ˆ–π“°π“ˆ–π“°π“ŽŸπ“Έπ“±π“„€π“‹π“±π“ƒ€π“ˆ‹π“±π“Š–π“ŒΈπ“±π“‡‹π“±π“‡‹
(2) π“ƒΉπ“°π“ˆ–π“°π“‰Ώπ“·π“°π“ˆ–π“€Ήπ“„€π“„‚π“°π“π“Œžπ“…±π“‰π“°π“‰»π“‰π“°π“ŽŸπ“…±π“³π“Šͺπ“„Šπ“±π“‹΄π“‚‹π“°π“π“°π“Šƒπ“°π“ˆ–π“Œ΄π“°π“Ή
(3) π“„Ώπ“°π“†‘π“Š¨π“Ήπ“°π“€­π“Œ·π“°π“‚π“π“°π“‚‹π“Š€π“†‘π“…“π“‚Έπ“»π“€π“°π“‡·π“±π“π”ƒΌπ“π“­π“Š΅π“°π“π“±π“Šͺ𓆑
(4) π“…“π“‰₯π“†‘π“°π“„«π“…±π“„£π“±π“€π“°π“†‘π“†“π“»π“·π“π“°π“‡Ώπ“Έπ“Š΅π“°π“Ž‘π“…±π“·π“·π“°π“‚‹π“Έπ“±π“‹΄π“‡‹π“±π“·π“ˆ–π“°π“Šƒπ“Έπ“π“°π“ˆ‰
(5) π“‡Όπ“€’π“Š¨π“°π“Ήπ“€­π“…“π“‰²π“Ž±π“°π“₯π“†‘π“„€π“±π“…±π“†“π“»π“·π“π“°π“‡Ώπ“Έπ“‚‹π“Ž›π“±π“Ž›π“‡³

(right half)

(1) π“„‹π“ˆπ“°π“ˆπ“°π“ˆπ“ŽŸπ“°π“‡Ώπ“°π“€π“±π“ˆ…π“‘€π“‚¦π“°π“‚‹π“ˆ‰π“ŒΈπ“±π“‡‹π“±π“‡‹
(2) π“ƒΉπ“°π“ˆ–π“°π“‰Ώπ“·π“°π“ˆ–π“€Ήπ“±π“„€π“„‚π“°π“π“Œžπ“±π“…±π“‰π“°π“‰»π“‰π“°π“ŽŸπ“…±π“³π“Šͺπ“„Šπ“±π“‹΄π“‚‹π“°π“π“°π“Šƒπ“°π“ˆ–π“Œ΄π“°π“Ή
(3) π“†‘π“„€π“±π“„€π“±π“„€π“„‹π“ˆπ“°π“π“±π“¦π“ͺ„π“…“π“‰π“°π“‚‹π“π“±π“‚»π“°π“†‘π“„€π“±π“·π“‚‹π“°π“π“Έπ“‚»π“…±π“°π“†‘π“…“π“°π“Š΅
(4) 𓂋𓐰π“‰₯π“†‘π“°π“ˆ–π“‡›π“…“π“„£π“°π“ƒΉπ“ˆ–π“°π“π“±π“‡Όπ“ŠΉπ“‰žπ“‰π“…“π“Ž›π“‚π“°π“‚π“€ π“…±π“°π“
(5) π“‡Όπ“€’π“„‹π“ˆπ“°π“π“°π“₯π“ƒ§π“…“π“‰π“°π“‚‹π“π“°π“‚»π“†‘π“„€π“±π“·π“‚‹π“°π“π“Έπ“†“π“»π“·π“π“°π“‡Ώπ“Έπ“‚‹π“Ž›π“±π“Ž›π“‡³

central register

(rightmost columns)

(1) π“†“π“³π“Œƒπ“»π“·π“‡‹π“°π“ˆ–π“Έπ“€Ήπ“±π“„€π“„‚π“°π“π“Œžπ“±π“…±π“‰π“°π“‰»π“ŽŸπ“…±π“³π“Šͺπ“„Šπ“±π“‹΄
(2) π“‚‹π“°π“π“Šƒπ“°π“ˆ–π“šπ“°π“Š€οΈ‚π“†£π“°π“‚‹π“Šͺπ“±π“€”π“Œ¨π“±π“‚Ύπ“±π“‚Ύπ“ˆ–π“‡“π“±π“·π“π“°π“ˆ–π“Έπ“‹΄π“±π“ƒ€π“‡Ό
(3) π“…ƒπ“°π“ŽŸπ“‰¦π“°π“‰π“‡‹π“±π“…±π“Ήπ“°π“ˆ–π“€€π“‹΄π“±π“‹π“Œ¨π“°π“‚‹π“ƒ€
(4) π“…‘π“‡‹π“±π“‡‹π“±π”Žπ“‡“π“±π“·π“π“°π“ˆ–π“Έπ“…“π“‰²π“°π“Ž±π“†³π“±π“†³π“±π“†³π“π“°π“‚‹π“›π“±π“€π“ˆ–
(5) π“…ƒπ“‰˜π“Όπ“‰»π“°π“‚π“…’π“½π“Š‚π“‡‹π“±π“…±π“Ήπ“°π“ˆ–π“€€π“…¨π“°π“‚‹π“Ž†π“±π“‡—π“ŠΉπ“±π“›
(6) π“‡Όπ“°π“…¨π“…“π“‰²π“°π“Ž±π“‹΄π“±π“·π“‚§π“°π“ˆ„π“Έπ“‰³π“π“°π“‚‹π“›π“±π“·π“€π“°π“ˆ–π“Έπ“†₯
(7) π“Ήπ“Όπ“‡³π“°π“ˆ–π“ŒΆπ“‚π“°π“π“½π“Ίπ“‹Ήπ“†“π“»π“·π“π“°π“‡Ώπ“Έπ“ƒπ“ˆ–π“°π“π“Š›π“Œ‚π“±π“Ύ‹π“Šͺπ“°π“ˆ–π“…“π“°π“‚ž
(8) π“Ž›π“±π“Œ¨π“±π“ƒ€π“€—π“‡‹π“±π“ƒ€π“ƒ™π“‡‹π“±π“€€π“π“±π“π“°π“†‘π“‡π“±π“π“±π“‡‹π“‚»π“°π“ƒΉπ“ˆ–π“°π“Œπ“±π“
(9) 𓇼𓐰π“₯π“ŠΉπ“±π“‰—π“π“±π“‰π“°π“‚‹π“Œ΄π“°π“Ήπ“‡“π“±π“·π“π“°π“ˆ–π“Έπ“…“π“‰²π“°π“Ž±π“†‘π“„€π“†“π“»π“·π“π“°π“‡Ώπ“Έ

(text accompanying scene)

(1) π“Š¨π“±π“Ήπ“ƒ§π”ƒΌπ“‹π“±π“ƒ€π“ˆ‹π“°π“Š–π“‚žπ“°π“†‘
(2) π“·π“π“±π“π“°π“ŽŸπ“°π“π“Έπ“±π“„€π“ˆ–π“°π“‚“π“°π“ˆ–π“€Ήπ“±π“„€π“„‚π“°π“ŽŸπ“Šͺπ“°π“…±π“šπ“°π“Š€οΈ‚
(3) π“‰“π“…“π“‚žπ“°π“‚ž
(4) π“Š¨π“Ήπ“°π“ˆ–π“‚“π“°π“€π“ˆ–
(5) 𓇋𓐱π“„ͺπ“»π“π“ŽŸπ“°π“Šͺπ“…±
(6) π“„Šπ“±π“‹΄π“‚‹π“°π“π“Šƒπ“°π“ˆ–
(7) π“†Όπ“Š
(8) 𓆼𓏐
(9) π“Š΅π“°π“π“±π“Šͺ𓆓𓐻𓆑𓏔𓐰π“₯
(10) π“‚‹π“°π“ˆ–π“°π“ˆ–π“‡‹π“±π“―π“‚‹π“°π“ˆ–π“°π“ˆ–π“ŽΌπ“±π“…±
(11) π“Œ’π“±π“·π“ˆ–π“°π“†‘π“Έπ“ˆ˜π“°π“†‘π“‡‹π“±π“Šͺ𓐱π“Šͺπ“€€π“šπ“°π“Š€οΈ‚

lower register

(1) π“€Ήπ“±π“„€π“„‚π“°π“π“Œžπ“±π“…±π“‰π“°π“‰»π“°π“‰π“ŽŸπ“°π“Šͺπ“…±π“„Šπ“±π“‹΄π“‚‹π“°π“π“°π“Šƒπ“°π“ˆ–π“†“π“»π“·π“‚§π“°π“†‘π“Έπ“ˆ–π“°π“ƒΉπ“ˆ–π“°π“‡Όπ“°π“π“ŠΉπ“±π“‰žπ“ˆ–π“°π“π“‹π“±π“ƒ€π“ˆ‹π“°π“Š–π“‰žπ“π“°π“‰π“°π“₯π“†‘π“°π“ˆ–π“°π“π“†₯π“Ž›π“‡¬π“°π“ˆ–π“‡“π“π“°π“ˆ–π“€΄
(2) π“…“π“‹Ήπ“Ώπ“°π“ˆ–π“ π“°π“ˆ–π“°π“π“ˆ–π“°π“Ώπ“°π“ˆ–π“ π“°π“Œπ“±π“Œπ“±π“Œπ“°π“ˆ–π”ƒΌπ“Ώπ“°π“ˆ–π“Š–π“…‚π“ƒΉπ“°π“ˆ–π“°π“ˆ–π“Ώπ“°π“ˆ–π“Œ¨π“°π“‚‹π“ŽΏπ“…±π“π“°π“¦π“ˆ–π“°π“π“‡‹π“˜π“‡‹π“‡‹π“€šπ“Ώπ“°π“ˆ–π“‹΄π“Ž—π“…±π“€π“Ώπ“°π“ˆ–
(3) π“Š‘π“π“°π“¦π“Ώπ“°π“ˆ–π“ˆ–π“°π“„‘π“°π“‚§π“€”π“₯π“°π“Ώπ“°π“ˆ–π“ƒΉπ“°π“ˆ–π“°π“ˆ–π“„ π“±π“…±π“€”π“₯π“°π“Ώπ“°π“ˆ–π“ π“°π“ˆ–π“·π“°π“ŽΌπ“ŽΌπ“°π“ŽΌπ“Ώπ“°π“ˆ–π“…“π“Š‘π“π“°π“¦π“Ώπ“°π“ˆ–π“ˆ–π“°π“π“†“π“»π“·π“π“°π“‡Ώπ“Έπ“‚œπ“°π“ˆ–π“Ž›π“±π“·π“ˆŽπ“°π“‚‹π“Έπ“€
(4) π“Ώπ“°π“ˆ–π“‚œπ“°π“ˆ–π“‡‹π“ƒ€π“‡‹π“ˆ—π“Ώπ“°π“ˆ–π“‡‹π“…±π“Ž—π“…±π“›π“°π“ˆ–π“ŠΉπ“‰Όπ“ƒΉπ“°π“ˆ–π“°π“ˆ–π“Ώπ“°π“ˆ–π“Άπ“°π“‡Ύπ“Œ¨π“°π“‚‹π“ŽΏπ“…±π“π“°π“₯π“°π“†‘π“‚œπ“°π“ˆ–π“΅π“ˆ–π“°π“‚π“•π“°π“‰π“…±π“³π“π“Ώπ“°π“ˆ–π“…“
(5) π“Š¨π“±π“·π“π“°π“‰π“Έπ“ŒŸπ“‹΄π“ˆ–π“°π“π“°π“‰π“Œ¨π“°π“‚‹π“ŽΏπ“π“°π“›π“°π“₯π“ˆ–π“°π“π”ƒΌπ“Ώπ“°π“ˆ–π“Š–π“…‚π“†“π“»π“‚§π“Ώπ“°π“ˆ–π“‡“π“π“°π“Š΅π“™π“Š¨π“Ήπ“°π“ŽŸπ“‹π“ƒ€π“ˆ‹π“°π“Š–π“ŠΉπ“‰Όπ“ƒΉπ“°π“ˆ–π“°π“ˆ–π“„€π“†Όπ“…“
(6) π“‘π“±π“Šπ“ƒΎπ“±π“…Ώπ“°π“”π“‰“π“…“π“‰²π“°π“Ž±π“ˆ–π“°π“‚“π“°π“ˆ–π“€Ήπ“±π“„€π“„‚π“°π“π“Œžπ“±π“…±π“‰π“°π“‰»π“°π“‰π“ŽŸπ“°π“Šͺπ“…±π“„Šπ“±π“‹΄π“‚‹π“°π“π“°π“Šƒπ“°π“ˆ–π“Ήπ“°π“ˆ–π“‡‹π“π“°π“π“π“Š‘π“…±π“ˆ–π“°π“‚‹π“°π“€π“…œπ“π“°π“›π“°π“ˆ–
(7) π“ƒΆπ“‚œπ“°π“ˆ–π“‡π“°π“Œπ“…±π“…“π“…¨π“°π“‚‹π“‚§π“°π“π“€‰π“Œ¨π“°π“‚‹π“‹΄π“ƒΉπ“°π“ˆ–π“°π“ˆ–π“Ώπ“°π“ˆ–π“…“π“‡‹π“π“…“π“‹΄π“±π“Žπ“Ž‘π“°π“‡Όπ“…“π“‡Όπ“‡‹π“Άπ“†Όπ“…‘π“‹΄

Line breaks

Rows are broken up automatically:
580px
π“€Ήπ“±π“„€π“„‚π“°π“π“Œžπ“±π“…±π“‰π“°π“‰»π“°π“‰π“ŽŸπ“°π“Šͺπ“…±π“„Šπ“±π“‹΄π“‚‹π“°π“π“°π“Šƒπ“°π“ˆ–π“†“π“»π“·π“‚§π“°π“†‘π“Έπ“ˆ–π“°π“ƒΉπ“ˆ–π“°π“‡Όπ“°π“π“ŠΉπ“±π“‰žπ“ˆ–π“°π“π“‹π“±π“ƒ€π“ˆ‹π“°π“Š–π“‰žπ“π“°π“‰π“°π“₯π“†‘π“°π“ˆ–π“°π“π“†₯π“Ž›π“‡¬π“°π“ˆ–π“‡“π“π“°π“ˆ–π“€΄

Vertical text

The NewGardinerOmni fonts can render (left-to-right) text in a vertical direction. Also columns are broken up automatically.
340px
π“€Ήπ“±π“„€π“„‚π“°π“π“Œžπ“±π“…±π“‰π“°π“‰»π“°π“‰π“ŽŸπ“°π“Šͺπ“…±π“„Šπ“±π“‹΄π“‚‹π“°π“π“°π“Šƒπ“°π“ˆ–π“†“π“»π“·π“‚§π“°π“†‘π“Έπ“ˆ–π“°π“ƒΉπ“ˆ–π“°π“‡Όπ“°π“π“ŠΉπ“±π“‰žπ“ˆ–π“°π“π“‹π“±π“ƒ€π“ˆ‹π“°π“Š–π“‰žπ“π“°π“‰π“°π“₯π“†‘π“°π“ˆ–π“°π“π“†₯π“Ž›π“‡¬π“°π“ˆ–π“‡“π“π“°π“ˆ–π“€΄

(On my platform, Firefox truncates the last sign at the bottom of each column.)

Right-to-left text

Right-to-left text, horizontal or vertical, is inherently more difficult to implement in OpenType than left-to-right text. This is because shaping engines currently do not yet preserve the logical order within clusters when reversing the text direction, at least not for Egyptian.

For web pages, the best solution for now is to mirror the entire elements, as demonstrated here:

π“€Ήπ“±π“„€π“„‚π“°π“π“Œžπ“±π“…±π“‰π“°π“‰»π“°π“‰π“ŽŸπ“°π“Šͺπ“…±π“„Šπ“±π“‹΄π“‚‹π“°π“π“°π“Šƒπ“°π“ˆ–π“†“π“»π“·π“‚§π“°π“†‘π“Έπ“ˆ–π“°π“ƒΉπ“ˆ–π“°π“‡Όπ“°π“π“ŠΉπ“±π“‰žπ“ˆ–π“°π“π“‹π“±π“ƒ€π“ˆ‹π“°π“Š–π“‰žπ“π“°π“‰π“°π“₯π“†‘π“°π“ˆ–π“°π“π“†₯π“Ž›π“‡¬π“°π“ˆ–π“‡“π“π“°π“ˆ–π“€΄

More complex fonts

The font demonstrated above is a simple version of NewGardinerOmni, in that internal dimensions are represented in a coarse manner. This may result in signs not being placed very accurately and even in signs overlapping accidentally. For this reason, more complex versions of the font are available. However, the shaping engines in most modern browsers are ill-equipped to deal with fonts of this complexity. Perhaps your browser is able to deal with individual top-level groups:

𓀹𓐱𓄀 + 𓄂𓐰𓏏 + π“Œžπ“±π“…± + 𓉐𓐰𓉻𓐰𓉐 + π“ŽŸπ“°π“Šͺ + π“…± + π“„Šπ“±π“‹΄ + π“‚‹π“°π“π“°π“Šƒπ“°π“ˆ– + 𓆓𓐻𓐷𓂧𓐰𓆑𓐸 + π“ˆ–π“°π“ƒΉ + π“ˆ–π“°π“‡Όπ“°π“ + π“ŠΉπ“±π“‰ž + π“ˆ–π“°π“ + 𓍋𓐱𓃀 + π“ˆ‹π“°π“Š– + π“‰ž + 𓏏𓐰𓉐𓐰π“₯ + π“†‘π“°π“ˆ–π“°π“ + π“†₯ + π“Ž› + π“‡¬π“°π“ˆ– + 𓇓 + π“π“°π“ˆ– + 𓀴

Now let's merge consecutive pairs:

𓀹𓐱𓄀𓄂𓐰𓏏 + π“Œžπ“±π“…±π“‰π“°π“‰»π“°π“‰ + π“ŽŸπ“°π“Šͺπ“…± + π“„Šπ“±π“‹΄π“‚‹π“°π“π“°π“Šƒπ“°π“ˆ– + π“†“π“»π“·π“‚§π“°π“†‘π“Έπ“ˆ–π“°π“ƒΉ + π“ˆ–π“°π“‡Όπ“°π“π“ŠΉπ“±π“‰ž + π“ˆ–π“°π“π“‹π“±π“ƒ€ + π“ˆ‹π“°π“Š–π“‰ž + 𓏏𓐰𓉐𓐰π“₯π“†‘π“°π“ˆ–π“°π“ + π“†₯π“Ž› + π“‡¬π“°π“ˆ–π“‡“ + π“π“°π“ˆ–π“€΄

Again larger fragments:

π“€Ήπ“±π“„€π“„‚π“°π“π“Œžπ“±π“…±π“‰π“°π“‰»π“°π“‰ + π“ŽŸπ“°π“Šͺπ“…±π“„Šπ“±π“‹΄π“‚‹π“°π“π“°π“Šƒπ“°π“ˆ– + π“†“π“»π“·π“‚§π“°π“†‘π“Έπ“ˆ–π“°π“ƒΉπ“ˆ–π“°π“‡Όπ“°π“π“ŠΉπ“±π“‰ž + π“ˆ–π“°π“π“‹π“±π“ƒ€π“ˆ‹π“°π“Š–π“‰ž + 𓏏𓐰𓉐𓐰π“₯π“†‘π“°π“ˆ–π“°π“π“†₯π“Ž› + π“‡¬π“°π“ˆ–π“‡“π“π“°π“ˆ–π“€΄

And the line divided into only three fragments:

π“€Ήπ“±π“„€π“„‚π“°π“π“Œžπ“±π“…±π“‰π“°π“‰»π“°π“‰π“ŽŸπ“°π“Šͺπ“…±π“„Šπ“±π“‹΄π“‚‹π“°π“π“°π“Šƒπ“°π“ˆ– + π“†“π“»π“·π“‚§π“°π“†‘π“Έπ“ˆ–π“°π“ƒΉπ“ˆ–π“°π“‡Όπ“°π“π“ŠΉπ“±π“‰žπ“ˆ–π“°π“π“‹π“±π“ƒ€π“ˆ‹π“°π“Š–π“‰ž + 𓏏𓐰𓉐𓐰π“₯π“†‘π“°π“ˆ–π“°π“π“†₯π“Ž›π“‡¬π“°π“ˆ–π“‡“π“π“°π“ˆ–π“€΄

The entire line as a single fragment:

π“€Ήπ“±π“„€π“„‚π“°π“π“Œžπ“±π“…±π“‰π“°π“‰»π“°π“‰π“ŽŸπ“°π“Šͺπ“…±π“„Šπ“±π“‹΄π“‚‹π“°π“π“°π“Šƒπ“°π“ˆ–π“†“π“»π“·π“‚§π“°π“†‘π“Έπ“ˆ–π“°π“ƒΉπ“ˆ–π“°π“‡Όπ“°π“π“ŠΉπ“±π“‰žπ“ˆ–π“°π“π“‹π“±π“ƒ€π“ˆ‹π“°π“Š–π“‰žπ“π“°π“‰π“°π“₯π“†‘π“°π“ˆ–π“°π“π“†₯π“Ž›π“‡¬π“°π“ˆ–π“‡“π“π“°π“ˆ–π“€΄

Rendering seems to fail for most browsers somewhere within the above steps.

The complexity of fonts is influenced by parameters of compilation:

Simpler fonts can be handled by more browsers, but this may go at the expense of limiting the number of texts that can be encoded (in the case of a lower maximum depth of nesting), and the appearance will be less refined.

Further demonstrations of NewGardinerOmni

Sign variants are determined by presence or absence of insertions

π“„ͺ versus π“„ͺ𓐻𓐍

Extra whitespace is added where needed because of insertions

π“€€π“…± versus 𓀀𓅱𓐳𓏏

Rotation and mirroring

π“Œ‘ ︂π“‘€ becomes π“Œ‘οΈ‚π“‘€

Ligatures

π“Œ‰π“Άπ“‹ž becomes π“Œ‰π“Άπ“‹ž

𓐷𓃀𓐱𓃀𓐸𓐢𓐷𓂝𓐰𓂝𓐸 becomes 𓐷𓃀𓐱𓃀𓐸𓐢𓐷𓂝𓐰𓂝𓐸

Insertion into rotated sign

𓉗 ︁︁𓐹𓅃 becomes 𓉗︁𓐹𓅃

Combination of an overlay forming a ligature and an insertion

𓉗𓐢𓉻𓐹𓏏 becomes 𓉗𓐢𓉻𓐹𓏏

Shading of individual signs and caps of enclosures

π“Ήπ“‘‹π“Όπ“‡³π“°π“ˆ–π“‘•π“ŒΆπ“‚π“‘‰π“°π“π“½π“Ίπ“‘

Shading is preserved for constituent signs in ligatures

π“Ž›π“±π“Œ¨π“±π“ƒ€π“‘‹ becomes π“Ž›π“±π“Œ¨π“±π“ƒ€π“‘‹

𓆓𓐰𓆓𓐰𓏏𓑉 becomes 𓆓𓐰𓆓𓐰𓏏𓑉

𓐷𓃀𓐱𓃀𓐸𓐢𓐷𓂝𓑑𓐰𓂝𓐸 becomes 𓐷𓃀𓐱𓃀𓐸𓐢𓐷𓂝𓑑𓐰𓂝𓐸

Parentheses

[π“‰²π“°π“Ž±π“ˆ–π“°π“‚“}π“°π“ˆ–

Nested enclosures

π“Ήπ“Όπ“ŠΉπ“„€π“Ήπ“Όπ“‡³π“ π“†£π“½π“Ίπ“™π“°π“Š€οΈ‚π“½π“Ί

(On my platform, the above is rendered in Chrome but not Firefox and Edge.)