Koddan shriftgacha · Ipak

> Ipakning aktsent shriftlari dasturlar bilan quriladi: ilashib terilgan gʻishtlar, ustaning faskasi va yorugʻlik, klinsimon seriflar, keng qalam izi. Har bir qoida qanday qilib harflarga aylanishi va harflardan shrift fayli qanday yigʻilishi.

[Oʻzbekcha](https://ipak.xronocode.com/jarayon/from-code-to-font/index.md) · [English](https://ipak.xronocode.com/en/jarayon/from-code-to-font/index.md) · [Русский](https://ipak.xronocode.com/ru/jarayon/from-code-to-font/index.md) · [Español](https://ipak.xronocode.com/es/jarayon/from-code-to-font/index.md) · [Português](https://ipak.xronocode.com/pt/jarayon/from-code-to-font/index.md) · [中文](https://ipak.xronocode.com/zh/jarayon/from-code-to-font/index.md)

[Jarayon]

# Koddan shriftgacha

Ipakning aktsent shriftlari dasturlar bilan quriladi: ilashib terilgan gʻishtlar, ustaning faskasi va yorugʻlik, klinsimon seriflar, keng qalam izi. Har bir qoida qanday qilib harflarga aylanishi va harflardan shrift fayli qanday yigʻilishi.

Odatda shrift tahrirchida qoʻlda chiziladi: dizayner nuqtalar qoʻyadi va egri chiziqlarni tortadi. Ipakning aktsent shriftlari — Bannai, Ganch, Metro va Kalam — boshqacha qilingan. Har bir harfni butun shrift uchun bitta qoida asosida kichik Python dasturi quradi. Qoida bitta, shuning uchun qalinliklar, kesimlar va ritm barcha belgilarda — A dan Ҳ gacha va 0 dan № gacha — mos keladi.

Maqolada — har bir shrift qoidasi qanday tuzilgani, chizilgan harflardan shrift fayli qanday yigʻilgani va 0.1 versiyasining hozircha chegaralari qayerdaligi.

![Ipakning toʻrt aktsent shrifti](https://ipak.xronocode.com/images/p/from-code-to-font/four-fonts.png)

*Ipakning toʻrt aktsent shrifti — Bannai, Ganch, Metro, Kalam. Matn oddiy apostrof bilan terilgan; ʻ belgilarini shriftning oʻzidagi almashtirish qoʻydi Ipak; Ipak v0.1 shriftlaridan HarfBuzz (hb-view) renderi; shriftlar — SIL OFL 1.1 · CC BY 4.0 · Ipak*

## Avval motiv, keyin harflar

Har bir aktsent shrift harfdan emas, birinchi qarashdayoq taniladigan motivdan boshlanadi: bannai gʻishti, ganch oʻymachisining pichogʻi, Toshkent metrosining metall harflari, qalamning oʻzi (bu usullar tarixi haqida — «Bannai, ganch, qalam» maqolasida). Motiv qoidaga aylanadi, qoida esa unga koʻra istalgan harfni quradigan dasturga.

Motivlarni ishda solishtirish uchun TOSHKENT soʻzi Toshkent aeroporti fotosida haqiqiy yozuv oʻrniga qoʻyilgan.

![Toshkent aeroporti fotosida toʻrt motiv](https://ipak.xronocode.com/images/p/from-code-to-font/concepts-sheet.jpg)

*Toshkent aeroporti fotosidagi maketda aktsent shriftlarning toʻrt motivi: bannai, ganch, metro, qalam Foto: Alpasli, Wikimedia Commons; maket — Ipak · CC BY-SA 4.0 (foto: Alpasli; maket — Ipak)*

**Maʼlumot.** Kontur — harfni aylantirib chiqadigan yopiq chiziq. Shrift harflarni aynan konturlar sifatida saqlaydi. Shrift birligi — keglning (shrift oʻlchamining) mingdan bir qismi. Ipakning aktsent shriftlarida bosh harf balandligi — 700 shunday birlik. Konturlar grafik tahrirchidagidek mantiqiy amallar bilan qoʻshiladi, ayiriladi va kesib oʻtiladi: «birlashtirish», «ayirish», «umumiysini qoldirish». Buning uchun ochiq skia-pathops kutubxonasi ishlatiladi.

## Bannai: ilashib terilgan gʻishtlar

Harf avval kataklardan iborat rasm sifatida yoziladi — katak daftardagidek panjara va nuqtalardan iborat qatorlar. Bosh harf 10 qatorni egallaydi. Katak kvadrat, 70 birlik. Chiziq — ikki katak, harf ichidagi boʻshliq — kamida ikki katak: shunda harflar masofada bir-biriga qoʻshilib ketmaydi.

Keyin dastur gʻishtlarni teradi. Gʻisht — ikki katak, qoʻshni qatorlarda boʻgʻimlar yarim gʻishtga surilgan. Bu — ilashib terish: bir qatorning boʻgʻimlari qoʻshni qatornikiga toʻgʻri kelmaydi. Gʻishtlar orasida 9 birliklik boʻgʻim qoladi. K, N, Z ning qiyshiq chiziqlari tekis qiyshiq emas, terish zinapoyasi boʻylab ketadi. Ö nuqtalari, Ў yoychasi va ʻ belgisi bosh harfdan yuqoridagi qatorlarda yotadi, Қ Ҳ dumlari va Ş Ç sedillari — satrdan pastdagi qatorlarda.

![Ipak Bannai: 10 qatorli toʻr, gʻishtlar ilashib terilgan](https://ipak.xronocode.com/images/p/from-code-to-font/spec-bannai.png)

*Ipak Bannai: 10 qatorli toʻr ustidagi harflar, gʻishtlar ilashib terilgan Ipak · CC BY 4.0 · Ipak*

## Ganch: ustaning faskasi va yorugʻlik

Kontur toʻrtburchaklar va sakkizqirraliklardan quriladi. Vertikal chiziq — 168 birlik, gorizontal — 140: shunda ular bir xildek koʻrinadi. «Yumaloq» harflar — O, C, G, Q — sakkizqirraliklar.

Oxirgi oʻtish — ustaning faskasi. Dastur konturni aylanib chiqadi va toʻgʻri yoki undan oʻtkir (100° gacha) boʻlgan har bir tashqi burchakning uchini kesadi: ikkala tomon boʻylab 40 birlikdan chekinadi va nuqtalarni toʻgʻri chiziq bilan birlashtiradi. Toʻgʻri burchakda bu — 45° li kesim. Ichki burchaklar oʻtkir qoladi: u yerga pichoq kiradi. Sakkizqirraliklarning oʻtmas qirralariga tegilmaydi.

Hajm alohida, harf rasmidan hisoblanadi. Harf ichidagi har bir nuqta uchun eng yaqin chetgacha boʻlgan masofa topiladi. «Masofalar maydoni» hosil boʻladi: chetda nol, chiziq oʻrtasiga tomon kattaroq. Bu maydonni balandlik deb tasavvur qilsak, chiziq oʻrtasida togʻorcha va chetlarga ikki yonbagʻir chiqadi — V-kesim. Keyin dastur har bir yonbagʻir qayga qaraganini koʻradi. Yuqoridan chapdagi yorugʻlikka qaragan yonbagʻir yorishadi, qarama-qarshisi qorayadi. Yuqoridan pastga-oʻngga yumshoq soya qoʻshiladi: harf devordan boʻrtib turadi. Tosh devor uchun xuddi shu maydon teskari aylantiriladi va harf oʻyiqqa aylanadi.

![Ganch: masofalar maydonidan relyef](https://ipak.xronocode.com/images/p/from-code-to-font/ganch.png)

*Ipak Ganch: V-kesim relyefi konturdan masofalar maydoni bilan hisoblangan, yorugʻlik yuqoridan chapdan Ipak · CC BY 4.0 · Ipak*

**Maʼlumot.** Masofalar maydoni — har bir nuqtaga shakl chetidan qancha uzoqda ekani yozilgan xarita. Uni kompyuter grafikasida, masalan, oʻyinlarda aniq matn chizish uchun ishlatadi. Bu yerda u barcha belgilar uchun relyefni birdan beradi: qirralar har bir harf uchun qoʻlda chizilmaydi, ularni bitta funksiya hisoblab chiqadi.

## Metro: ingichka bosh harflar va klinsimon seriflar

Namuna — 1984-yilgi stansiya platformasidagi «КОСМОНАВТЛАР» yozuvi (meʼmorlar Sergo Sutyagin va Sergey Sokolov). Chiziq ingichka: asosiy chiziqlarda 48 birlik, gorizontalarda 40. Harflar keng, balandlik 700 da taxminan 600 birlik.

Chiziq uchlarida — mayda klinsimon seriflar. Klinning asosi chiziqdan har bir tomonda 40 birlik keng, klinning balandligi 34 birlik, yuqorisi esa aynan chiziq chetlariga yigʻiladi. Soʻz katta oraliq bilan teriladi. Л — stansiyadagidek «uycha». Chizma oʻziniki, tamoyil boʻyicha; lotin yozuvi xuddi shu tizim bilan qurilgan.

![Ipak Metro: КОСМОНАВТЛАР](https://ipak.xronocode.com/images/p/from-code-to-font/scene-metro.png)

*Ipak Metro: klinsimon serifli va katta oraliqli ingichka keng bosh harflar, lotin va kirill bitta tizimda Ipak · CC BY 4.0 · Ipak*

## Kalam: burchak ostida ushlangan keng qalam

Har bir harf uchun skelet — nuqtalardan iborat oʻq chizigʻi — beriladi. Qalam — satrga nisbatan 65° burchak ostida 150 birlik uzunlikdagi kesim. Dastur qalamni skeletning har bir nuqtasiga qoʻyadi, qoʻshni holatlarni toʻrtburchakka birlashtiradi va barcha toʻrtburchaklarni qoʻshadi. Qalinlikni hech kim belgilamaydi: u chiziq yoʻnalishidan oʻzi chiqadi. 65° burchakda gorizontal chiziqlar ogʻir, vertikallar yengil chiqadi.

Chiziq qalam boʻylab deyarli yursa, u ipday ingichka boʻlib qoladi. Shuning uchun qiyshiq chiziqlar qalam burchagidan kamida 9–10° chetga suriladi: shunda eng ingichka chiziq 25 birlikdan tor boʻlmaydi. Barcha belgilar — harflar, nuqtalar, raqamlar, tinish belgilari — bir xil qalam bilan yoziladi.

![Ipak Kalam: yassi qalam izi](https://ipak.xronocode.com/images/p/from-code-to-font/kalam-65.png)

*Ipak Kalam: 65° burchak ostida 150 birlik kenglikdagi yassi qalam izi Ipak · CC BY 4.0 · Ipak*

## Har bir uslubdagi ʻ va ʼ belgilari

Belgilar qoʻshtirnoqlardan tayyor olinmaydi: har biri oʻz shriftining qoidasi boʻyicha chizilgan. Umumiyligi bitta: ʻ da massa pastda, ʼ da — yuqorida, shuning uchun siluetlar turli tomonga qaraydi va aralashib qolmaydi.

| Shrift | ʻ | ʼ |
| --- | --- | --- |
| Bannai | terishdan «olti»: boshi pastda 2×2 katak, dumi yuqori-oʻngga | xuddi shu, 180° burilgan |
| Ganch | massasi pastdagi klin, ogʻish 10° | massasi yuqoridagi klin, ogʻish 23° |
| Metro | asosi pastda, uchi yuqori-oʻngga qaragan klin | asosi yuqorida, uchi past-chapga qaragan klin |
| Kalam | qalam harakati: yuqoridan past-chapka ip ingichka, pastda bosimli burilish | xuddi shu harakat, 180° burilgan |

Belgini O va G ga oʻlchov asosidagi kerning yaqinlashtiradi (u haqda quyida): ʻ alohida qoʻshtirnoq emas, harfning bir qismi boʻlib oʻqilishi kerak.

## Rasmdan shriftgacha

Rasm — hali shrift emas. Shrift harflarni toʻgʻri oraliqlar bilan qoʻya olishi, oʻzbek qoidalarini bilishi va istalgan dasturda ochilishi kerak.

**Maʼlumot.** FontBuilder — ochiq fontTools kutubxonasining bir qismi. Unga harf konturlari, kengliklar, «belgi → harf» jadvali va nomlar beriladi, u esa .ttf faylini yigʻadi.

**Yigʻish.** Har bir uslub dasturi lugʻat beradi: belgi, kontur, kenglik, chap va oʻng boʻshliqlar. Yigʻish egri chiziqlarni TrueType formatiga oʻgiradi, konturlar yoʻnalishini tekislaydi va faylni FontBuilder orqali yozadi. Kichik harflar xuddi shu bosh harflarga olib boradi: shriftlar aktsent, bosh harf yozuvlari uchun. Klaviaturadan terilgan ' ‘ ’ ` belgilari ʻ va ʼ belgilariga olib boriladi.

**Oʻlchov boʻyicha oraliqlar.** Dastur harf juftligini oladi va ular orasidagi oq masofani satr-satr, butun bosh harf balandligi boʻylab oʻlchaydi; chuqur choʻkkilar kesib tashlanadi, chunki koʻz ularga boqmaydi. Etalon — xuddi shu shriftdagi HH, HO, OH va OO juftliklarining oʻrtachasi. Har bir juftlik etalonga, lekin faqat yarmigacha yetkaziladi: aks holda LT kabi ochiq juftliklar yopishib qoladi. Alohida harf juftligi uchun bunday tuzatish kerning deb ataladi. Lotin lotin bilan, kirill kirill bilan kerning qilinadi. Raqamlar kerning qilinmaydi — shunda son ustunlari tekis qoladi.

**ʻ va ʼ belgilari — alohida.** Belgi kichkina va yuqorida turadi, shuning uchun uni faqat belgi polosasida — bosh harf balandligining yuqori 38 % ida — oʻlchashadi (batafsil — «Belgi polosasi» maqolasida). ʻ O va G ga zich qoʻyiladi: HH oq masofasining 0,45 i. ʻ dan keyin — odatdagi HH oq masofasi. ʼ aynan oʻrtada turadi: ikkala tomondan 0,8 oq masofa.

**Teginish taqiqi.** Barcha tuzatishlardan keyin dastur juftlikning eng tor joyini butun balandlik boʻylab, satr ostidagi dumlar bilan birga tekshiradi. Bironta juftlik keglning 5 % idan yaqin kela olmaydi. Tuzatish ham cheklangan: istalgan tomonga keglning 15 % idan katta emas. 20 birlikdan kichik tuzatishlar yozilmaydi.

**Oʻzbekcha almashtirish.** Odamlar Oʻzbekiston soʻzini oddiy apostrof bilan teradi. Shrift uni fayl ichiga yozilgan qoida bilan oʻzi kerakli belgiga almashtiradi; OpenType formatida bunday qoida kontekstli almashtirish (calt) deb ataladi. O dan keyin harf oldida — ʻ. G dan keyin — ʻ, soʻz oxirida ham (BOGʻ), lekin soʻz oxiridagi ng birikmasida emas va soʻz oxiridagi s dan oldin emas (inglizcha egalik qoʻshimchasi 's). Qolgan hollarda ikki harf orasida — ʼ, MAʼNO dagidek. Mantiq ish shrifti Ipak Davlat dagidek; u haqda — «o' → oʻ» maqolasida.

![Almashtirishsiz va almashtirishli QOʻNGʻIROQ](https://ipak.xronocode.com/images/p/from-code-to-font/calt-qongiroq.png)

*Klaviatura apostrofi bilan terilgan QOʻNGʻIROQ soʻzi Ipak Metroda: yuqorida almashtirish oʻchirilgan, pastda yoqilgan Ipak; IpakMetro-Regular.ttf v0.1 dan HarfBuzz (hb-view) renderi; shrift — SIL OFL 1.1 · CC BY 4.0 · Ipak*

Oxirida yigʻish sinovni chop etadi: belgilarning toʻliq toʻplami va nazorat soʻzlari — OʻZBEKISTON RESPUBLIKASI, ҚЎҚОН · ҒАЛЛАОРОЛ · ҲАЁТ, ÖZBEKISTON · TOŞKENT.

![Ipak Bannai sinovi](https://ipak.xronocode.com/images/p/from-code-to-font/bannai-proof.png)

*Ipak Bannai sinovi: belgilarning toʻliq toʻplami va uch alifbodagi nazorat soʻzlari Ipak; HarfBuzz (hb-view) renderi; shrift — SIL OFL 1.1 · CC BY 4.0 · Ipak*

## 0.1 versiyasining chegaralari

**Faqat bosh harflar va bitta koʻrinish.** Kichik harflar xuddi shu bosh harflar bilan teriladi. Qalinlik turlari hali yoʻq.

**Bannai — katta yozuvlar uchun.** Kvadrat terish piksel shriftiga yaqin, taxtalar va mayda kegl uchun moʻljalanmagan.

**Kalam ning qalam burchagi — bizning tanlovimiz.** 65° bitta soʻzdagi solishtirish bilan tanlangan, bu manbadan iqtibos emas.

**Oraliqlar avtomatik qoʻyilgan.** Yozuv uchun ularni muayyan soʻzda koʻz bilan tekshirish foydali.

**Almashtirish tillarni ajratmaydi.** Aktsent shriftlarda qoida istalgan matn uchun ishlaydi: inglizcha DON'T dagi apostrof ham ʼ ga aylanadi. Oʻzbekcha boʻlmagan matn uchun almashtirishni matn terish dasturida oʻchirish foydali.

## Yakun

Toʻrtta aktsent shriftning har birida 94 belgi bor: Ö Ğ Ş Ç li lotin yozuvi, Ў Қ Ғ Ҳ li kirill, ʻ va ʼ belgilari, raqamlar va tinish belgilari. Barchasi har bir shrift uchun bitta qoida bilan qurilgan va butun kutubxona singari ochiq SIL OFL 1.1 litsenziyasi bilan tarqatiladi.

## Manbalar

Tavsif Ipakning aktsent shriftlarini qurish kodi va vositalar hujjatlariga asoslangan: fontTools, skia-pathops, SciPy, HarfBuzz, OpenType spetsifikatsiyasi; Metro uchun namuna haqida — Wikipedia «Kosmonavtlar (Tashkent Metro)».

Havolalar:

fontTools: FontBuilder. [https://fonttools.readthedocs.io/en/latest/fontBuilder/fontBuilder.html](https://fonttools.readthedocs.io/en/latest/fontBuilder/fontBuilder.html)

skia-pathops — konturlar ustidagi mantiqiy amallar. [https://github.com/fonttools/skia-pathops](https://github.com/fonttools/skia-pathops)

SciPy: distance_transform_edt — masofalar maydoni. [https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.distance_transform_edt.html](https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.distance_transform_edt.html)

HarfBuzz — matn terish dvigateli. [https://harfbuzz.github.io/](https://harfbuzz.github.io/)

OpenType: calt xususiyati (Contextual Alternates). [https://learn.microsoft.com/en-us/typography/opentype/spec/features_ae#tag-calt](https://learn.microsoft.com/en-us/typography/opentype/spec/features_ae#tag-calt)

OpenType: kern xususiyati (Kerning). [https://learn.microsoft.com/en-us/typography/opentype/spec/features_ko#tag-kern](https://learn.microsoft.com/en-us/typography/opentype/spec/features_ko#tag-kern)

Wikipedia: Kosmonavtlar (Tashkent Metro). [https://en.wikipedia.org/wiki/Kosmonavtlar_(Tashkent_Metro)](https://en.wikipedia.org/wiki/Kosmonavtlar_(Tashkent_Metro))

---
Sahifa: https://ipak.xronocode.com/jarayon/from-code-to-font/ · SIL Open Font License 1.1 · avenex@xronocode.com
