{"id":20595427,"url":"https://github.com/adobe-type-tools/aots","last_synced_at":"2025-03-06T14:51:13.763Z","repository":{"id":48349581,"uuid":"61242246","full_name":"adobe-type-tools/aots","owner":"adobe-type-tools","description":"Annotated OpenType Specification","archived":false,"fork":false,"pushed_at":"2021-07-30T16:34:09.000Z","size":3856,"stargazers_count":46,"open_issues_count":1,"forks_count":8,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-01-17T00:43:23.070Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"XSLT","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adobe-type-tools.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-06-15T21:30:15.000Z","updated_at":"2024-10-11T07:16:24.000Z","dependencies_parsed_at":"2022-09-01T12:10:08.538Z","dependency_job_id":null,"html_url":"https://github.com/adobe-type-tools/aots","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe-type-tools%2Faots","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe-type-tools%2Faots/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe-type-tools%2Faots/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe-type-tools%2Faots/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adobe-type-tools","download_url":"https://codeload.github.com/adobe-type-tools/aots/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242230771,"owners_count":20093623,"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-16T08:13:00.818Z","updated_at":"2025-03-06T14:51:13.742Z","avatar_url":"https://github.com/adobe-type-tools.png","language":"XSLT","funding_links":[],"categories":[],"sub_categories":[],"readme":"AOTS\n====\n\nThe **Annotated OpenType specification** interleaves a number of pieces:\n\n* the OpenType specification\n\n* annotations to clarify the specification, when needed\n\n* an XML representation of OpenType fonts. This includes a Relax NG schema, which\nimplements the bulk of the validity checking.\n\n* a compiler, to convert from the XML representation to font files.\n\n* a decompiler, to convert font files to their XML representation.\n\n* a font library, to access the data in fonts, and also to apply GSUB/GPOS features.\nThe goal of this code is to illustrate the specification, and may be substantially\ndifferent from production code.\n\n* a test suite for the compiler, decompiler and font library; this\n      consists of ~200 hand crafted test fonts and ~300\n      test cases (inputs and expected output) that exercise the\n      library. There is also a test harness to exercise Harfbuzz.\n\nSimilarly, there is an Annotated CFF specification, and an Annotated Type2 specification.\n\n\nBuilding\n--------\n\nAll the code is written in Java, so you will need a Java installation.\n\nTo build AOTS, simply run `make`.\n\nAOTS uses a [literate programming](https://en.wikipedia.org/wiki/Literate_programming)\nstyle. The source material is all in src/. The build process tangles the code in java/ and\njars/, the schemas in schemas/, the test fonts and test cases in tests/. It weaves in html/.\n\nThe build process also runs the tests against the code.\n\nAfter you have built AOTS, it may be helpful to look at a simple\npiece of the specification, Section 25.6, [Single Substitution Format 1](html/opentype.html#25.6),\nto see how this Annotated Specification is organized.\n\n\nLimitations\n-----------\n\nThis is work in progress. Among the major missing pieces:\n\n* the text of the OpenType specification is (approximately)\n      that of the 1.4 specification, but some parts are absent.\n\n* the XML representation does not cover a number of tables; when decompiling to XML, those\nwill generate an `\u003cunknownTable\u003e` element, except the glyf and loca tables which disappear\nentirely\n\n* the functionality of the library is somewhat spotty; the methods were added as needed\n\n* there is a bit of documentation for the options of the compiler and decompiler below;\nyou have to read the code to get the full story.\n\n\nThe font decompiler\n-------------------\n\nThe decompiler is implemented as the main method of the class\n`com.adobe.aots.opentype.Decompiler`. It takes an\nOpenType font file and produces an XML representation of\nit.\n\nThe order of arguments matters.\n\nOptional: `-t` followed by names of tables,\nseparated by ',' (e.g. `-t 'CFF,GPOS,GSUB'`), to\nselect which tables to decompile. All tables if this argument is\nabsent.\n\nOptional: one of `-exact` or\n    `-readable`, defaults to readable. In exact mode,\n    the decompilation result is made to closely reflect what is in the\n    font; for example, the details of how a coverage is defined are\n    visible. In readable mode, the result is made as readable as\n    possible; for example, you will only know which glyphs are\n    covered, not how this coverage is expressed. However, readable\n    does not loose information.\n\nOptional: one of `-pointers=never`,\n    `-pointers=asneeded` or\n    `-pointers=always`, defaults to never in readable\n    mode, to asneeded in exact mode. OpenType fonts have internal\n    pointers between data structures. With always, those pointers are\n    explicitly represented; with never, they are never represented;\n    with asneeded, they are represented only if the thing that is\n    pointed to is pointed from multiple places.\n\nOptional: `-o` _outputfile_ sends the output to _outputfile, defaults to standard output.\n\nMandatory: _fontfile_\n\nCurrent limitations: not all tables are supported. There\n    will be no trace of the 'glyf' and 'loca' tables; for the other\n    unsupported table, you will have an\n    `\u003cunknownTable\u003e` element.\n\n\nThe font compiler\n-----------------\n\nThe compiler is implemented as the main method of the class\n    `com.adobe.aot.opentype.Compiler`. It takes an XML\n    representation of an OpenType font and creates a font file.\n\nThe order of arguments matters.\n\nMandatory: `-r` _schemafile_ points to the RNG schema for the XML\n    representation: `schemas/opentype.rnc`.\n\nMandatory: `-o` _outputfile_ for the resulting font file\n\nMandatory: _inputfile_\n\nCurrent limitations: probably many. Use with caution.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadobe-type-tools%2Faots","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadobe-type-tools%2Faots","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadobe-type-tools%2Faots/lists"}