Mark Davis is a computer scientist whose work connects Unicode specifications with practical software internationalization. The Unicode Consortium's2023 workshop profile credits him with co-founding the Unicode project, leading the architecture of International Components for Unicode and founding the Common Locale Data Repository. It records his presidency of the Consortium from1991 through2022.[ref]
Figure 1.
Mark Davis, from his labeled official Unicode Technology Workshop2023 speaker portrait
.
One specific contribution is the Unicode Bidirectional Algorithm: its acknowledgments identify Davis as creator of the initial annex and maintainer of its text through2023. The algorithm computes visual text order from logical text order, allowing differently directed writing systems to coexist in one represented sequence.[ref]
A small original example illustrates the kind of interoperability problem this work addresses. If a line has a right-to-left name next to the digits12, reversing every stored character would turn those digits into21. A direction-sensitive algorithm can reorder surrounding runs while preserving the digits' internal order. Its exact result depends on resolved bidirectional embedding levels and context, rather than a single whole-string reversal.
The specification and the implementation libraries address complementary parts of the problem. A shared algorithm states what independent renderers should compute; reusable internationalization software helps applications apply such behavior consistently. The Common Locale Data Repository supplies another kind of shared resource for locale-sensitive software. These contributions concern data representation and reproducible processing, rather than assigning one fixed glyph shape to every code point.
The Unicode Bidirectional Algorithm computes visual text order from logical text order. Unicode bidirectional classes and context determine bidirectional embedding levels: levels with an even integer value run left-to-right, and those with an odd integer value run right-to-left. Stored code points retain their order; text shaping is separate.[ref]
After levels and line boundaries are resolved, level-based reordering of bidirectional text descends from the largest level to the smallest level that is an odd integer. Each pass reverses maximal consecutive runs at or above its level.[ref]
Here is a small example with the resolved levels supplied. The labels each represent a distinct right-to-left text character, while represent left-to-right text characters. All rows below are written in physical left-to-right order. Start with
The level 2 pass changes the middle digits to . The level 1 pass then reverses the whole five-item middle run, producing
The digits have been reversed twice, preserving their original internal order. Reversing the entire stored sequence once would instead exchange and and leave the digits in the wrong order. This example demonstrates the reordering step, not how all Unicode bidirectional classes are resolved.
Figure 1.
Two level-based reversals preserve the internal order of the digits
. Original illustration with supplied bidirectional embedding levels. The boxes denote individual abstract text characters, not literal multi-character labels. Details.
A bidirectional isolate limits directional interaction between inserted text and its surroundings. Markup can express isolation without storing explicit formatting code points.[ref]
Mark Davis created the annex's initial version; later revisions extended it.[ref]