{"id":20828292,"url":"https://github.com/googlefonts/gulzar","last_synced_at":"2025-05-07T21:20:33.312Z","repository":{"id":37773387,"uuid":"313301241","full_name":"googlefonts/Gulzar","owner":"googlefonts","description":"Nastaliq font","archived":false,"fork":false,"pushed_at":"2022-12-16T11:58:09.000Z","size":219738,"stargazers_count":41,"open_issues_count":52,"forks_count":7,"subscribers_count":13,"default_branch":"main","last_synced_at":"2025-03-31T14:11:17.806Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://gulzarfont.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"ofl-1.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/googlefonts.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.txt","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-11-16T12:52:14.000Z","updated_at":"2025-03-15T20:11:36.000Z","dependencies_parsed_at":"2023-01-29T13:33:25.373Z","dependency_job_id":null,"html_url":"https://github.com/googlefonts/Gulzar","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googlefonts%2FGulzar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googlefonts%2FGulzar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googlefonts%2FGulzar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/googlefonts%2FGulzar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/googlefonts","download_url":"https://codeload.github.com/googlefonts/Gulzar/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252954908,"owners_count":21830997,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-17T23:14:24.366Z","updated_at":"2025-05-07T21:20:33.289Z","avatar_url":"https://github.com/googlefonts.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gulzar\n\nGulzar is a Nastaliq font for Urdu text with a typographic, rather than calligraphic feel.\n\n## Note to other font designers\n\nWe hope that Gulzar will serve as a reference and model for other Nastaliq font designs, in particular in terms of its engineering and shaping rules. If you are looking to design a Nastaliq font, you will find some documentation on the Gulzar system and how it works in [engineering.md](engineering.md).\n\n## Set up instructions\n\nOnly needs to be done once:\n\n```\nsudo pip3 install -r requirements.txt\n```\n\n## Build instructions\n\nDon't try exporting from Glyphs! It's not going to work!\n\n* Run `make`\n* Output can be found in `fonts/ttf/Gulzar-Regular.ttf`\n\n## Makefile targets\n\n* `make` produces a debug version of the font.\n* `make release` produces a version of the font suitable for release.\n* `make test-shaping` checks the shaping rules and produces a report in `qa/shaping_tests/report.html`.\n* `make test` runs a full fontbakery check on the font.\n* `make proof` produces `urdu-john.pdf`, a comparison between Noto Nastaliq and GS Nastaliq.\n* `make testproof` produces `test-failures.pdf`, PDF containing words with collisions.\n\n## Fixing dot collisions\n\nIf you find a colliding sequence between two \"words\" (i.e. final glyph -\u003e initial glyph + dots), you need to:\n\n* Add the sequence to `qa/shaping_tests/collisions.json` so it can be tested.\n* Create a debug build of the font; the `Makefile` by default turns on `FONTTOOLS_LOOKUP_DEBUGGING=1` which creates a `Debg` table in the final font. This is stripped when building the release version.\n* Strip the sequence down to the smallest possible string which collides. Paste that string into [Crowbar](http://www.corvelsoftware.co.uk/crowbar/) with the debug build of the font.\n* Look down the list of trigged lookups to determine the sequence height. The list will include lookup names like `At_600_800_AtHeight600sub` and `At_600_800_AtHeight600pos` - this tells you the height-specific lookup routines you need to modify to mitigate the collision.\n* Find those lookups in `anchor-attachment.fez`.\n* Decide how you want to mitigate the collision. You can either:\n    *  drop the dot one position (call `DropOne` in the `sub` lookup)\n    *  drop it two positions (`DropTwo` in `sub`)\n* and/or:\n    *  open a short space (`OpenSmallSpaceBeforeKern` in `pos`) \n    *  open a large space (`OpenSpaceBeforeKern` in `pos)`\n    *  bring the final glyph closer to the initial glyph (`Tighten` in `pos`)\n    *  move the dots down a little further (`DropATinyBitMore`) or a lot further (`DropALotMore`, both in `pos`)\n    *  raise the dots a little (`Raise` in `pos`)\n    *  or do something more fancy, and create a new routine to reposition the dots elsewhere.\n* Add a Chain rule call the appropriate routine(s). This is a bit of an art form. It should be as general as possible to avoid proliferating unnecessary rules, but as specific as possible to avoid interacting with other sequences in bad ways. Some hints:\n    * Try to use the shape-based classes (e.g. `@dal_like`) to address the final glyph and all other glyphs like it.\n    * Check out other similar sequences to see how best to address the initial glyph.\n    * Consider using `DoNothing` and `DoNothingPos` (ignore rules) to create exceptions for existing situations.\n* Rebuild the font and run `make test-shaping` to make sure there are no unwanted interactions with other sequences.\n\n## Scripts\n\nThis repository also contains FEZ plugins for Nastaliq as well as scripts to build the font file:\n\n* `dump-glyphs-rules.py` turns the Nastaliq Connection information within the `.glyphs` file into a CSV file so that it can be processed by the `nastaliqTools.NastaliqConnections` plugin.\n* `find-notdefs.py` finds characters not currently mapped in the font.\n* `lint-arabic.py` finds missing entry/exit anchors (and will, in the future, also detect other anchor issues.)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgooglefonts%2Fgulzar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgooglefonts%2Fgulzar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgooglefonts%2Fgulzar/lists"}