I spent the better part of last weekend revising Adobe Tech Note #5099, which was originally published in 1998 (14 years ago). If memory serves, I wrote the bulk of the original version of this document while on vacation in Indonesia. It seemed like the thing to do at the time.
Anyway, this document is important, because it guides developers in terms of “best practices” for developing CMap resources that are used with CID-keyed fonts, which includes the all-important UTF-32 ones, for OpenType/CFF development, that I described in last week’s blog post. In other words, this document deserved to be updated.
For those who are not aware, CMap resources represent an important part of CID-keyed fonts, because they are used to map character codes, such as Unicode, to glyphs in the font. CMap resources, in effect, are necessary to make CID-keyed fonts usable. When using the AFDKO makeotf tool to build CID-keyed OpenType/CFF fonts, a UTF-32 CMap resource is used as the basis for the Format 4 (BMP-only UTF-16) ‘cmap‘ subtable, along with the Format 12 (UTF-32) one if there are mappings outside the BMP.
One of the major improvements of this new version of this document was to introduce the concept of single and range mappings, and how the begincidchar/endcidchar and begincidrange/endcidrange operator pairs are efficiently used for reflecting those types of mappings. The original version of this document described only the begincidrange/endcidrange operator pair for both single and range mappings.
Besides completely revising this document, I also included, as an attachment to the PDF file itself, the latest version of what I like to refer to as my industrial-strength CMap resource compiler/decompiler, called cmap-tool.pl, which was written in Perl. One of the more interesting features of this tool is its ability to automagically generate UTF-8 and UTF-16 CMap resources when it detects that it is compiling (or decompiling) a UTF-32 one. I am lazy, and would much rather have a tool generate these CMap resources for me. Besides, when having a tool perform this work, it is less error-prone. I use this tool whenever I update a CMap resource, which means new mappings. New mappings are generally triggered by either a new Supplement, or by a new version of Unicode.