Lettersoup collaborated with Viktor Nübel as Working With Type to create a suite of type families for Cornelsen Verlag, one of Germany’s two most prominent publishing houses for educational literature.

In 2019, Viktor Nübel was invited by Cornelsen Verlag to propose a pitch for a new custom typeface. Cornelsen Verlag is one of the leading providers of educational media in German-speaking countries. Building on a high level of didactic competence, they develop tens of thousands of teaching and personal learning products—for print, digital, and cross-media. Nübel had prior history with the publisher: he occasionally supported the company with typeface expansions, advised them on font licensing issues, and created typographic manuals. Realising the massive undertaking would be too extensive to manage on his own, Nübel contacted us to collaborate on this project.

The original brief stipulated which kind of typeface was needed and for which publications. It included an overview of the many typefaces currently used by Cornelsen Verlag, some of which had been designed specifically for the publisher. A thorough analysis revealed the flaws in the fonts used so far. Examining FF Schulbuch Nord, which is used for many of their first readers’ books, showed that its closed letterforms and narrow spacing are not suitable for children just learning to read and write. Besides the aesthetic aspect, there were many advantages to commissioning a custom typeface: it would considerably cut down on licensing costs, clean up the typographic palette, allow for having fonts with character sets tailored to the specific needs of the publisher and its products, and strengthen the brand by having consistent typography throughout the different media.

After processing the information outlined in the brief, we realised that a single typeface could not meet the project’s demands and scope. The range of applications was considerable. The typeface not only needed to help novice readers learn the individual letters. It was also going to be used in materials for high school graduates or adult education, where letterforms take a back seat and the content becomes the main focus. We needed to expand our vision. This insight made us decide to develop a coherent system consisting of two type families: a sans serif and a serif. To allow us to proceed swiftly, we divided the workload. Viktor Nübel designed CV Dida Serif while Botio Nikoltchev took care of CV Dida Sans.

We aimed for a design that would perform admirably in print and on-screen with our sketch for the sans serif. It had to accommodate a wide range of topics and a variety of users, from German to mathematics, from elementary to vocational and adult education. In addition, we wanted the typeface to lend Cornelsen Verlag’s brand values ​​a typographic identity. Instead of going for a radical shake-up, we opted for a gradual and organic improvement. Compared to FF Schulbuch, as mentioned earlier, CV Dida’s character shapes are more open, and the spacing is somewhat looser. The relatively low x-height emphasises the difference between the lowercase letters and the capitals, which received classical proportions. These properties lend the typeface a lively and friendly air, and they also ensure that it performs equally well in print and on the screen.

A serif face, also called Antiqua, lends itself better for immersive reading, particularly long texts for adult education or high school. The new CV Dida Serif is an improvement on Century Schoolbook, for example, which also has been used in Cornelsen Verlag publications. We applied a similar approach as for CV Dida Sans when designing the new typeface. Drawing characters that are more open and increasing the spacing worked wonders. We also decided against teardrop-shaped terminals to achieve an original, contemporary look. With digital media in mind, we made sure our design had a significantly lower contrast to achieve better rendering and legibility on-screen, even in small type sizes.

Armed with the two typeface proposals and a thorough analysis of the shortcomings of Cornelsen Verlag’s current typography and suggestions for areas of improvement, we presented our pitch to the company’s representatives. Because we were going up against formidable competition, we were elated when the project was awarded to us in autumn 2019. We’d like to think the decision was primarily emotional, and it was the actual design of the typeface that won over the client.

When developing a typeface for first readers, type designers need to consider many specific aspects. Germany stipulates official requirements for typefaces for children who are just beginning to read and write, to have letterforms that facilitate the learning process. These include, for example, a ‘7’ with an intersecting horizontal bar, an ‘ß’ with a descender, a small letter ‘t’ with a pronounced upper part, and the typical ‘spoon-l’ that ends in a curve at the bottom. To complicate matters, even more, the federal states each have additional demands. One ministry of culture insisted on an ‘R’ with its leg originating at the intersection of the stem and the bowl. Another wanted an ‘M’ with the vertex reaching down to the baseline. A third one demanded a ‘9’ with a spur at the top right of the bowl, making it look like a raised lowercase ‘g’, a feature unheard of in typography. Storing the required characters as alternatives would not have been a real problem. However, packing them all in OpenType features made the fonts challenging to use and diluted the design concept. Together with Lisa Stöckel, Brand Interactive Manager and Matti Wachholz-Hausmann, Head of Product and Content Design at Cornelsen, we determined that Dida Sans should have a separate variant for elementary school children that implements all these requirements: CV Dida Junior. On the other hand, CV Dida Sans is the original adult version containing the two-story a and g and a straight ‘l’. These details make the typeface look slightly different in text, providing the pupils with a visual cue that they are no longer in primary school.

Our experience with large-scale projects taught us to start small and iterate often. Presenting results frequently offers the possibility for a constant exchange of information and knowledge with the project’s stakeholders, specifically about the value of typeface design. The development of the CV Dida font family became an intensive process in constant dialogue with the clients. Cornelsen Verlag put together a panel of experts consisting of experienced typographers, textbook designers like Christopher Halm, brand strategists, and digital developer Frank Rausch. The milestones in the sprints were discussed, tested, and checked regularly. With the help of a digital specimen, a project website, the group could view every intermediate stage in detail, allowing them to examine all the styles and characters. This strategy also allowed the stakeholders to try out the font at several stages in its development. The project website proved very helpful, especially when physical meetings were no longer possible due to the Corona pandemic. The evolution and test rounds were not limited to just the experts. Teachers at elementary schools and grammar schools as well as high school students—the future users of CV Dida—were presented with mock layouts set in the trial fonts and asked about their impressions. Their feedback, which was consistently positive, was implemented to develop the CV Dida type families further.

When we moved from two typefaces to more variants, the experienced designers in the panel understood the need to expand the project’s scope. However, we needed to build up trust from the upper echelons. We had an ongoing dialogue with the client throughout a long and intensive process, helping them understand how type works and how a comprehensive typographic system would benefit the company. Eventually, Cornelsen Verlag realised that having a narrower version of CV Dida Sans would be a valuable asset and commissioned CV Dida Sans Compact. This variant sets economically—it allows for fitting more characters on the same line length. Another challenge was getting the different departments onboard and catering to their needs. While people working in print prefer compact letterspacing for improved word shaping, developers of apps and online products need looser spacing for better legibility on-screen, and the corporate and advertising teams have an affinity for display faces. All these factors helped us drive our main point home: a single typeface can’t do it all, hence the need for a coordinated system consisting of several font families.


The CV Dida suite of typefaces is still in full development. The typographic system currently consists of four families: CV Dida Sans, CV Dida Serif, CV Dida Sans Junior, and CV Dida Sans Compact. Each typeface comes in six styles: Regular, Semibold, and Bold, all with matching italics. We are continuously expanding the typefaces and their character sets, for example, adding Greek and other characters for mathematics and physics and drawing additional weights. Currently, a workhorse version optimised for continuous text is in production. You could compare the suite of type families to software that gets improved with regular upgrades. CV Dida fonts are already used in some elementary school titles. We can’t wait to see them deployed in all ten thousand educational products and throughout the Cornelsen Verlag brand.

Written by: Yves Peters aka Bald Condensed.
Pictures by: Lisa Stöckel and Lettersoup.
Video by: Cornelsen Verlag GmbH

State 29.05.2021  I might change this text over time, as the project expands.


The story of Sofia Sans started with a phone call from Filip Boyadjiev, a colleague of ours and Ani Petrova’s former fellow student at the National Academy of Art Sofia. At the tail end of 2017, Boyadjiev informed us that his studio Fullmasters had been hired to develop a wayfinding system for helping visitors navigate Sofia’s tourist sights and attractions. That year, the Bulgarian capital had reached second place in tourism growth among European cities. The wayfinding system required a feature-rich OpenType family with a large character set including small caps, several figure styles, arrows, numerals in circles, etc. Most importantly, the fonts needed to offer support for Bulgarian Cyrillic, as all text was to be set in both Latin and Cyrillic.

Because of the modest budget and short deadline, creating a new type family from scratch for this purpose was not feasible. Fortunately, we had a viable candidate that we could expand to meet the project’s requirements: Attractive. The story of this humble font began with another phone call and a simple question. Earlier in 2017, my Bulgarian colleague Ani had asked me: “Why don’t we make a free font? A nice one, not a quick and dirty one! And let’s share it with the world.” A tiny seed was planted, but little did we know how big the project eventually would grow.
First, we needed to decide which kind of typeface to create. Going through potential type styles, we settled on a straight-sided sans. The inspiration for our design came from early-twentieth-century so-called technical sans serifs—typefaces with confident letterforms, a pronounced vertical impetus, and tense curves. We aimed to create a universally useful font family. With narrow proportions and a generous x-height, we drew a space-saving workhorse that would work well in very diverse environments: from large to small, for display and immersive reading, on-screen and in print. When looking for a name, we went back to that original question and christened our typeface Attractive.

Back to Sofia’s wayfinding system—Attractive only existed in two styles—one single weight in upright and italic—and had a limited character set. Still, it provided an excellent jumping-off point for developing an extensive type family. Fullmasters’ concept consisted of three types of elements: large and small totems containing text, directions, and map information, and signboards when only a minimum of information was necessary. We soon concluded that the typeface needed to have condensed widths too, to accommodate the different sizes of the two totems and the signboards. We also had to take into consideration the varying lengths of the names of streets, squares, parks, buildings, monuments, and other tourist sights featured on the signage. Eventually, we ended up planning a comprehensive type system in four widths with extended language support. It needed to cover Extended Latin as well as the Greek and Cyrillic alphabet because we wanted the fonts to support all three scripts used in the European Union.

The successful adoption of the typeface for Sofia’s tourist wayfinding system started a snowball effect. The project culminated in Sofia Municipality commissioning the type system under the name Sofia Sans. Zdravko Zdravkov, Chief Architect of Sofia Municipality, Architecture and Urban Planning Division, envisioned Sofia Sans as becoming the de facto official typeface for the Bulgarian capital. This adoption, however, didn’t happen overnight—it was a long and involved process. For the first time in its history, Sofia Municipality considered adopting a typeface for the city on such a large scale. We took it upon ourselves to guide them through all the lesser-known aspects of typography, informing them about type design, font development, and licensing models. The commission initially took into account four to six weights for Sofia Sans. During the process, Sofia Municipality came to the realisation they needed more variants for catering to all the possible environments and applications. Because of the multitude of options, it took a considerable time before the decision-makers finally agreed on what exactly they wanted this modern, performant type system to be. Once he saw Sofia Sans was a good start for the city, Zdravkov suggested adopting the typeface for the entire municipality, a recommendation supported by Sofia’s mayor Jordanka Fandakowa.

After deploying Sofia Sans for the tourist wayfinding system, Fullmasters used it in their new signage for the Urban Mobility Centre, Sofia’s public transport system. Sofia Sans was integrated into a unified design system that served all nine different types of signs. The new typeface made it possible to incorporate more information than in the previous incarnation and improve the legibility of those signs. The overhaul made the new signage more useful for residents and specifically for tourists thanks to the introduction of English translations next to the original Bulgarian text.

In a related project, True North Ltd‘s Stoian Stoianov applied Sofie Sans for Sofia’s nighttime transport network map and the nightline signs displaying the line numbers, street names, etc.

Putting Sofia Sans through its paces in such complex design environments with high information density proved how versatile, reliable, and robust the typeface was. When the Bulgarian State Railways commissioned True North to create the national railway maps, Stoianov decided that the font family was the perfect option for this project as well. After typographically branding its capital, Sofia Sans was ready to hop on the train and go national in Bulgaria.

The next person to contact us was Ljubo Georgiev, Team Lead for Vision for Sofia. This group of professionals does long-term development strategy for Sofia and the region. An initiative of the City Council of Sofia, the team aims to define a shared concept about the city’s future and the steps necessary to achieve this. It recognised Sofia Sans’ value and deployed it as Vision for Sofia’s corporate typeface. However, Georgiev explained they required a better technological structure, one similar to the one used by Google Fonts. This request led us to contact Dave Crossland, Google Fonts Program Manager, and we started negotiating the release of Sofia Sans on Google Fonts with a SIL Open Font License. (The fonts are already published on GitHub with an OFL license.) Because of the large number of weights and widths, we asked our friends at Alphabet Type to create Variable Font versions of Sofia Sans. All 104 weights and widths—and any imaginable intermediary styles—will be available as two compact VF fonts on Google Fonts. An additional advantage of the Variable Font format is that it dramatically reduces the download size for the font family. The small size will have web pages set in Sofia Sans render more efficiently and much faster.

Sofia Sans’ relevance transcends the fact that it has been adopted by so many official institutions in Sofia and beyond. It also is part of our continuing push to improve and promote the Bulgarian style of the Cyrillic alphabet. Sofia Sans is the first extensive type system to have Bulgarian in the default Cyrillic positions, and the second major step in our efforts to increase the popularity of the Bulgarian variant of Cyrillic. The first one was the creation of a technical standard for Monotype. We specified which Bulgarian glyphs should be included in serif and sans serif typefaces, determined how OpenType features should behave when typing Bulgarian, and designed the Bulgarian glyphs for many of Monotype’s most popular typefaces.

On a side note, we are not happy with the existing terminology. Calling the two styles Russian Cyrillic and Bulgarian Cyrillic amounts to a political act and is, semantically speaking, incorrect. During our discussions in early 2016, Adam Twardoch suggested different, more appropriate names: square and rounded Cyrillic; the latter term also designates Glagolitic. We hope these new names will become more widely used and help to depoliticise the issue.

Sofia Sans’ growth shows no signs of abating yet. Only recently, Mario Evstatiev let us know that he is working on LED signs for buses, trolleybuses, and trams. Reworking Sofia Sans as a very low-resolution font—a 19-pixel-high bitmap font in FNT format—is an exciting challenge, one we are happy to sink our teeth in. Meanwhile, Sofia Municipality continues its adoption of Sofia Sans, implementing it in all city documentation and on the city’s online platforms. And there are even tentative talks for bringing the typeface to broadcast television.

You can get Sofia Sans here! To be continued.


Written by: Yves Peters aka Bald Condensed.

Pictures, Video by: Boryana Pandova, Mario Evstatiev, Stoian Stoianov, Zornitza Todorova, Doriyan Todorov, Filip Boyadjiev and Lettersoup.

State 29.05.2020 I might change this text over time, as the project expands.

This is a quick guide for typedesigners how to add some typographic useful separators and spaces to their typefaces. The following list contains by far not all separators in the unicode charts, but in my opinion it should be a good start for an advanced typographic usage.

SPACE uni0020

SPACE uni0020 is the most used space, that separates words, sentences etc. The width depends on the design of your typeface. It should be wide enough to apparently separates words from each other, but also not too wide so it does not cause gaps in the text.

EM QUAD uni2001 As the name already says this space is one Em wide or a quad (originally from Quadrat). A quad is a metal spacer used in letterpress typesetting. The term was later adopted in digital fonts and is one Em wide – that is usually 1000 UPM for Post Script flavoured fonts and 2048 UPM for True Type fonts. So in use Em Quad is nominally equal to the type size in points.

EN QUAD uni2000  is a space that is one En wide: half the width of an Em quad. That is usually 500 UPM for Post Script flavoured fonts and 1024 UPM for True Type fonts.

EM SPACE uni2003 is usually equal to Em Quad. But it may scale by the condensation factor of a font. That means if you have condensed variations of your typeface Em Space can be optically adjusted and be less than  1000 UPM for Post Script flavoured fonts and less than 2048 UPM for True Type fonts.

EN SPACE uni2002 is ½ the width of an Em Space.

THREE PER EM SPACE uni2004 is a ⅓ of an Em Space. Also called Thick Space.

FOUR PER EM SPACE uni2005 is a ¼ of an Em Space. Also called Mid Space.

SIX PER EM SPACE uni2006 is a ⅙ of an Em Space. It is sometimes equated to Thin Space.

FIGURE SPACE uni2007 is equal to the width of the tabular figures. If your typeface does not have tabular figures I would recommend to do it with the width of the zero digit uni0030.

PUNCTUATION SPACE uni2008 usually with the width of a period uni002E. It is used after quotedblleft (“) or quoterleft (‘)and before quotedblright (”) or quoteright (’) and sometimes questionmark (?) or exclam (!), unless a punctuation mark appears there. 

THIN SPACE uni2009 a 1/5 of an Em, it could be also 1/6. It is used for example for: abbreviation ( i. d. R.), date (1. Mai 2006 or 31. 12. 06), numbers (IBAN DE34 1005 4687 0302 9954 00), abbreviation with number (§ 315c,   Nr. 2,   S. 78 ff), numbers with unit signs or currency (220 V, 37 °C, 33 %,   20 €), mathematical equation (3 + 6 = 5 + 4).

HAIR SPACE uni200A should be the thinnest space in your typeface. I recommend to make it thiner than the Thin Space.

NO BREAK SPACE uni00A0 Also called nbspace (NBSP), or required space, or hard space, or fixed space. It is a space character that prevents an automatic line break at its position. Usually it hast the width of a Space.

NARROW NO BREAK SPACE uni202F Also called narrownbspace (NNBSP) It is a narrow form of a No Break Space, typically the width of a thin space or a Four Per Em Space. Here is some additional information wich I found on Wikepedia:
»It was introduced in Unicode 3.0 for Mongolian,[6] to separate a suffix[7] from the word stem without indicating a word boundary. It is also required for big punctuation in French, sometimes inaccurately referred to as “double punctuation” (before ;, ?, !, », › and after «, ‹; today often also before :), in Russian (before em dash [—]), and in German between multi-part abbreviations (e.g. “z. B.”, “d. h.”, “v. l. n. r.”).[8] When used with Mongolian, its width is usually one third of the normal space; in other contexts, its width is about 70% of the normal space but may resemble that of the thin space (U+2009), at least with some fonts.[9] Also starting from release 34 of Unicode Common Locale Data Repository (CLDR) the NNBSP is used in numbers as thousands group separator for French locale.[10]«

ZERO WIDTH SPACE uni200B Also abbreviated ZWSP has a 0 width. It is intended for invisible word separation when using scripts that do not use visible space between words. It is also used for line break control. ZWSP has no width, but its presence between two characters does not prevent increased letter spacing in justification.

ZERO WIDTH JOINER uni200D Also abbreviated ZWJ has a 0 width. It is used in some  scripts such as Arabic, or Indic scripts. When it is placed between two characters that would otherwise not be connected, a ZWJ causes them to be printed in their connected forms.
When a ZWJ is placed between two emoji characters, it can also result in a new emoji.

ZERO WIDTH NON JOINER uni200C Also abbreviated ZWNJ has a 0 width. When placed between two characters that would otherwise be connected into a ligature, a ZWNJ causes them to be printed in their initial forms. 

CARRIAGE RETURN  or CR uni000D it reset a position to the beginning of a line of text.

.notdef is shown in Apps when some character is missing in your font. you can design some funny stuff for a notdef.

NULL uni0000 According to Apple True Type specification – the second glyph (glyph index 1) must be the NULL glyph. This glyph must have no contours and zero advance width. FontLab 7 adds it automatically when you export a TTF or an OTF.

If you want to reed and learn more about the usage of spaces – Typeseeds is a wonderful source.

State 01.05.2020 I might change this text over time, as I learn more during my work.

In this article I would like to describe the differences between the Bulgarian and Russian Cyrillic. Then I will list the characters you have to include in your fonts if you like to make Bulgarian Cyrillic and the different ways you can make it work with the Open Type features. Lets start with which Letters are different between Russian and Bulgarian Cyrillic. I will specify them for both Sans and Serif typefaces.

.loclBGR for Grotesque Typefaces

The purple characters in the pictures are in Russian style and the orange ones in Bulgarian. Please do not forget to include Ѝ and ѝ letter. This characters are needed in the Bulgarian language. The following characters list is all you have to include for loclBGR in your Sans Fonts. Some of the glyphs don’t have to be redesigned in Italics.

Д (uni0414) is optional
Ѝ (uni040D)
Л (uni041B)
Ф (uni0424) is optional
в (uni0432)
г (uni0433)
д (uni0434)
ж (uni0436)
з (uni0437)
и (uni0438) usually there is no need to redesign in Italic 
й (uni0439) usually there is no need to redesign in Italic 
ѝ (uni045D) usually there is no need to redesign in Italic 
к (uni043A)
л (uni043B)
п (uni043F) usually there is no need to redesign in Italic 
т (uni0442) usually there is no need to redesign in Italic 
ц (uni0446) usually there is no need to redesign in Italic 
ш (uni0448) usually there is no need to redesign in Italic 
щ (uni0449) usually there is no need to redesign in Italic 
ь (uni044C) usually there is no need to redesign in Italic
ъ (uni044A) usually there is no need to redesign in Italic
ю (uni044E)

.loclBGR for Serif Typefaces

The following characters-list have to be included in your Serif Fonts. Please consider that the Serif fonts list is a little bit longer. Some of the glyphs don’t have to be redesigned in Italics.

Д (uni0414) is optional
И (uni0418)
Й (uni0419)
Ѝ (uni040D)
Л (uni041B)
Ф (uni0424) is optional
в (uni0432)
г (uni0433)
д (uni0434)
ж (uni0436)
з (uni0437)
и (uni0438) usually there is no need to redesign in Italic
й (uni0439) usually there is no need to redesign in Italic
ѝ (uni045D) usually there is no need to redesign in Italic
к (uni043A)
л (uni043B)
н (uni043D)
п (uni043F) usually there is no need to redesign in Italic
т (uni0442) usually there is no need to redesign in Italic
ц (uni0446) usually there is no need to redesign in Italic
ч (uni0447) usually there is no need to redesign in Italic
ш (uni0448) usually there is no need to redesign in Italic
щ (uni0449) usually there is no need to redesign in Italic
ь (uni044C) usually there is no need to redesign in Italic
ъ (uni044A) usually there is no need to redesign in Italic
ю (uni044E)

Historical forms

If you like you can also include some historical forms. They are important for scientific and old texts set before the 1945 spelling reform.

Ѫ (uni046A)
ѫ (uni046B)
Ѣ (uni0462)
ѣ (uni0463)

How to make .loclBGR work in OpenType

In my opinion there are two ways to make Bulgarian Cyrillic work in your OpenTypes. The first way is use Open Type ’locl’ feature (Localized Forms). You have to add a .loclBGR suffix to all characters which have Bulgarian Cyrillic forms. The second way is to define them as a Stylistic Set. I recommend implementing both features so you can assure that the Bulgarian forms will work properly in all Apps and will also give the opportunity to non-Bulgarian designers to use them without switching the spell check of the text they are working on. So let’s code a little. First you have to make sure that you have the language system in your Font:

languagesystem cyrl dflt;
languagesystem cyrl BGR;

This is how the script should look like for local Bulgarian feature (locl)

 feature locl{ 
 script cyrl;
 language BGR ;
  sub uni0414 by uni0414.loclBGR;
  sub uni041B by uni041B.loclBGR;
  sub uni0424 by uni0424.loclBGR;
  sub uni0432 by uni0432.loclBGR;
  sub uni0433 by uni0433.loclBGR;
  sub uni0434 by uni0434.loclBGR;
  sub uni0436 by uni0436.loclBGR;
  sub uni0437 by uni0437.loclBGR;
  sub uni0438 by uni0438.loclBGR;
  sub uni0439 by uni0439.loclBGR;
  sub uni045D by uni045D.loclBGR;
  sub uni043A by uni043A.loclBGR;
  sub uni043B by uni043B.loclBGR;
  sub uni043F by uni043F.loclBGR;
  sub uni0442 by uni0442.loclBGR;
  sub uni0446 by uni0446.loclBGR;
  sub uni0448 by uni0448.loclBGR;
  sub uni0449 by uni0449.loclBGR;
  sub uni044C by uni044C.loclBGR;
  sub uni044A by uni044A.loclBGR;
  sub uni044E by uni044E.loclBGR;
 }locl;

Of course if you like your code to be cleaner, you can make two classes. For example, locl1 class for the Russian characters and locl2 class for the Bulgarian ones. Et voilà! The script looks like this:

feature locl{
 script cyrl;
 language BGR ;
 sub @locl1 by @locl2;
 }locl;

Then you can do the same for the Stylistic Set. For example, I decided to make the Bulgarian Cyrillic as stylistic set 04 (.ss04). I’m using the “ss04” (Stylistic Set 04) in my example but of course you can use any stylistic set from 01 to 20, so in your case it can be “ss01” or “ss07”, depending on how many stylistic sets your font will have. Please note that it is not necessary to duplicate the characters which you have already made as .lclBGR and then rename them with suffix .ss04. For that purpose we will just make a little hack in the code:

feature ss04{
 sub uni0414 by uni0414.loclBGR;
 sub uni041B by uni041B.loclBGR;
 sub uni0424 by uni0424.loclBGR;
 sub uni0432 by uni0432.loclBGR;
 sub uni0433 by uni0433.loclBGR;
 sub uni0434 by uni0434.loclBGR;
 sub uni0436 by uni0436.loclBGR;
 sub uni0437 by uni0437.loclBGR;
 sub uni0438 by uni0438.loclBGR;
 sub uni0439 by uni0439.loclBGR;
 sub uni045D by uni045D.loclBGR;
 sub uni043A by uni043A.loclBGR;
 sub uni043B by uni043B.loclBGR;
 sub uni043F by uni043F.loclBGR;
 sub uni0442 by uni0442.loclBGR;
 sub uni0446 by uni0446.loclBGR;
 sub uni0448 by uni0448.loclBGR;
 sub uni0449 by uni0449.loclBGR;
 sub uni044E by uni044E.loclBGR;
 }ss04

For sure you can use also classes:

feature ss04{
 sub @locl1 by @locl2;
 } ss04

Marks in the Cyrillic Script

Some characters in the Cyrillic script need  marks but they do not have a Unicode and actually do not exist as precomposed characters. A nice way to make them work is using  Combining Marks. Please note that in that case the kerning might have some issues. I will talk about them a little bit later.

CyrillicBrevecomb (no unicode)
Gravecomb (uni0300)
Acutecomb (uni0301)

The following characters need Anchors so that the combining marks will be positioned properly:

А (uni0410)
Г (uni0413)
Е (uni0415)
З (uni0417)
И (uni0418)
К (uni041A)
О (uni041E)
С (uni0421)
У (uni0423)
Ъ (uni042A)
Ю (uni042E)
Я (uni042F)
а (uni0430)
г (uni0433)
е (uni0435)
з (uni0437)
и (uni0438)
к (uni043A)
о (uni043E)
с (uni0441)
у (uni0443)
ъ (uni044A)
ю (uni044E)
я (uni044F)

You can also create them as precomposed characters and then access them via OT features. This method works in my opinion better but makes the font size bigger. First you have to define three lookups in the Feature Panel/Prefix (if you work with Glyphs App). In FontLab the “prefix” is the down square in the OpenType panel. In the following code example in the last lookup are the actual precomposed characters.

lookup loclBGRa{
 sub uni0433 by uni0433.loclBGR;
 sub uni043A by uni043A.loclBGR;
 ...
 }loclBGRa;

lookup loclBGRb{
 sub uni0453 by uni0433.loclBGR acutecomb;
 sub uni045C by uni043A.loclBGR acutecomb;
 ...
 }loclBGRb;

lookup loclBGRc{
 sub uni0433.loclBGR acutecomb by uni0433_acutecomb.loclBGR;
 sub uni043A.loclBGR acutecomb by uni043A_acutecomb.loclBGR;
 ...
 }loclBGRc;

Ok, then we can use this lookups in every feature that we need. In our particular case we defined Bulgarian Cyrillic as .loclBGR and .ss04. For the local feature the code will look like this:

feature locl{
 script cyrl;
 language BGR;
 lookup loclBGRa;
 lookup loclBGRb;
 lookup loclBGRc;
 }locl;

And for the stylisic set 04 like this:

feature ss04{
 lookup loclBGRa;
 lookup loclBGRb;
 lookup loclBGRc;
 }ss04;

The Future

Let’s talk a little bit about the future. Cyrillic Script is still evolving nowadays. The type-designers go different ways to solve its issues. That is one of the main reasons why we have Bulgarian and Russian Cyrillic. Actually I am not a big fan of this division. In my opinion there is just one Cyrillic with different solutions, which is quite nice in the complex world we live in. I often hear from Russian and Western type-designers that they do like the so-called Bulgarian forms. And that’s why I asked myself how would it be possible to use both designs not just as local forms but as the entire Cyrillic Extended. One way would be to include all the characters which have different forms:

ѓ ќ ґ ғ җ ҙ қ ҝ ҡ

double (with Russian and Bulgarian form) and then define them in the features as I described above. This will expand the Font and increase the file size. Another possibility or idea, which is based on the ttfdiet tool made by Adam Twardoch and Karsten Lücke, would be to use the  ‘ccmp’ feature, but which can also be used in other features like “locl” and ”ss04”. Then the feature code will look like this:

feature locl{
 script cyrl;
 language BGR;
 lookup loclBGRa{
 sub uni0433 by uni0433.loclBGR;
 sub uni043A by uni043A.loclBGR; ...
 } loclBGRa;
 lookup loclBGRb {
 sub uni0453 by uni0433.loclBGR acutecomb;
 sub uni045C by uni043A.loclBGR acutecomb; ...
 }loclBGRb;
 }locl;

Many years ago in a hardware store I read this quote: “ If your computer does not cause any problems it is already too old.” That seems to be true for all new developments.  The method above is not an exception. The main issue is with the kerning. For example, we have the character ”ӑ” which is actually compounded from two characters: the Cyrillic letter “a” (uni0430) and the cyrillic breve “˘” That means that the text-engine will not interpret the combinations as a “letter, a-breve, letter” but as “letter, a-cyrillic, breve-cyrillic, letter”. This causes two types of problems with the kerning. The first problem appears with combinations like ”T,ӑ-cyrillic” which will be interpreted as “T, a-cyrillic, breve-cyrillic” by the text-engine. This means that we will have the kerning value of ”T,a-cyrillic” thus the “T” might end rather close to the breve – Tӑ . Second problem is with combinations like ”ӑk” which will be interpreted as “a-cyrillic, breve- cyrillic, k-cyrillic” as a result we will have no kerning (it does not make any sense to kern combining marks). There is a possibility to set „lookupflag IgnoreMarks;“ in the kerning feature. The marks between two characters will be ignored from the text engine. In this particular example we will have the kerning value of ”ak”.Another approach is the so called  contextual kerning  “kern ‘Ta’ by +20 if ‘a’ is followed by a combining Mark”. The only App which provides UI for making contextual kerning is Microsoft VOLT. So as you see we still have a lot to do for the Cyrillic Script in technical and in design aspect.

State 28.06.2016 I might change this text over time, as I learn more during my work.

A nice video of our two days Glyphs App workshop in Sofia. Big thanks to: Boril Karaivanov for the perfekt organisation, Ani Petrova who was a big help all the time and Buria Pandova for making this wonderful video! Thanks to all the people who took part in this workshop! You were amazing!