Tengwar Transcriber

Usage: This is a live transcriber from our Latin phonetic alphabet to the Elvish Tengwar alphabet. Type a message in the bottom text area and it will be displayed in the equivalent Elvish letters in the area above. Copy the link in the address bar and send your message to friends and colleagues. Copy the Wiki text and paste the Tengwar Markup block into an article on a Wiki that supports this Tengwar Transcriber.

Disclaimer: This transcriber is an amateur’s best attempt to render Tolkien’s Elvish languages. The Elvish languages are incredibly sophisticated and I do not pretend to be an expert, nor pretend that this tool is defect free. Please cross-check anything this tool produces with an expert before commiting the text to a tattoo or metal.

Compatibility: The transcriber may not work in some browsers because I used fancy early-draft features of some other web browsers. I might go through the motions to make it work in legacy browsers some day, but this would be an expensive and unsatisfying project.

However, there is a much older tengwar transcriber that should suffice in the interim.

Purpose: The transcriber is suitable for rendering Sindarin in the mode for general use, or the Mode of Beleriand, and Quenya in the Classical mode. The Mode Selector provides information, options, and instructions for comparing Tengwar modes, fonts, and the supported languages.

Technical details: The transcriber gives you the option of using either the italic of Johan Winge’s Tengwar Annatar or Måns Björkman’s book-hand Tengwar Parmaitë. Both fonts have been modified to include certain alternate characters in the untypable regions of a single font because of technical limitations of rendering fonts in web browsers. Particularly, a font cannot paint outside its container, so a tehta rendered alone in a span would be invisible.

Tengwar Annatar’s italic resembles the Ring Inscription from The Lord of the Rings, presumably in Sauron’s own cursive.

Tengwar Parmaitë is a script suitable for writing with a pen.

The font uses an “encoding” established by Dan Smith wherein letters on an English qwerty keyboard are arranged to correspond with the Tengwar grid transposed on its side. Because there are not enough characters accessible on an the keyboard to represent all of the glyphs and alternate glyphs of the Tengwar alphabet, Johan’s Annatar provides some glyphs in an alternate font.

Because of limitations in rendering text on the web and the peculiarities of Elvish fonts, it was not possible to alternate between the normal and alternate fonts in this application. Instead, I’ve created a custom version of the font that incorporates the alternate glyphs I needed for this mode using code points that are not so accessible on the keyboard, particularly for doubled long-O and long-U diacritics, the paired curls forward and backward, and also some rotated U-hook tehtar that were less prone to overlap with the underlying tengwar.

The particular limitation is that diacritics in Elvish have no width and are drawn before the cursor. Some of the diacritics I use are in the alternate font. To put an alternate diacritic over the previous tengwa, consonant, glyph, you have to put it in a <span> tag with the alternate font face, but as a result, the bounding box for the character has zero-width. I could not find a way to render the text outside the bounding box of the tag.

This transcriber does not require the character encoding to use code points that are accessible on a qwerty keyboard, so it might be worthwhile to create a new font that seizes a neglected pane of Unicode and uses ligatures and kerning instead of zero-width diacritics. The difficulty is that every combination and cluster of diacritics would need to have a unique and customized code-point, anchoring diacritics precisely where they need to be or providing ligatures for difficult placements.

If you take a look under the bonnet, the transcriber is a CommonJS module, suitable for use both with a NodeJS package available in NPM as tengwar and usable as a browser script with the minified bundle.

Further work might include:

— Kris Kowal, 2011, updated 2012