{"id":18578715,"url":"https://github.com/jech/cedilla","last_synced_at":"2026-02-17T03:35:18.265Z","repository":{"id":142346975,"uuid":"5288765","full_name":"jech/cedilla","owner":"jech","description":"The Cedilla opportunistic typesetter","archived":false,"fork":false,"pushed_at":"2012-08-03T22:31:06.000Z","size":308,"stargazers_count":10,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-19T18:42:50.512Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Common Lisp","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jech.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-08-03T18:22:20.000Z","updated_at":"2025-02-18T09:29:57.000Z","dependencies_parsed_at":"2023-03-13T09:41:05.782Z","dependency_job_id":null,"html_url":"https://github.com/jech/cedilla","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/jech/cedilla","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jech%2Fcedilla","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jech%2Fcedilla/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jech%2Fcedilla/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jech%2Fcedilla/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jech","download_url":"https://codeload.github.com/jech/cedilla/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jech%2Fcedilla/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29532437,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T03:01:11.216Z","status":"ssl_error","status_checked_at":"2026-02-17T03:00:31.803Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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-06T23:37:06.685Z","updated_at":"2026-02-17T03:35:18.233Z","avatar_url":"https://github.com/jech.png","language":"Common Lisp","funding_links":[],"categories":[],"sub_categories":[],"readme":"                               CEDILLA\n                                  ¸\n\n                      A best-effort text printer\n\n                          Juliusz Chroboczek\n                         \u003cjch@pps.jussieu.fr\u003e\n\n\nCedilla is a simple text printer that uses Unicode internally.\n\nUsing Unicode means that the set of characters that can appear in the input\nis very large, and the user may very well have no font available that\ncontains glyphs for the characters that he wants to print.  Cedilla attempts\nto at least partially solve this problem using a number of techniques:\n\n1. Cedilla can use an arbitrary number of downloadable fonts; for any given\n   print job, only the necessary fonts will be downloaded.\n\n2. Cedilla will use its own built-in font which contains a number of\n   useful glyphs that are missing from standard fonts.\n\n3. Cedilla will modify existing glyphs in order to e.g. remove dots or\n   add bars.\n\n4. Cedilla will attempt to build composite glyphs (e.g. for accented\n   characters) on the fly.\n\n5. Cedilla will use fallbacks for characters that are not supported by the\n   available fonts.\n\n\nSOURCES OF GLYPHS\n\nCedilla will attempt to use glyphs from all of the following sources.\n\n1. Glyphs present in an available font.\n\nThis is the common case, and covers all simple characters but also,\ndepending on the used font, a number of composites.\n\nExample: Être ou ne pas être ?\n\n2. Built-in glyphs.\n\nCedilla has a built-in font parts of which will be downloaded if needed.\n\nExample: €.\n\n3. Modified glyphs\n\nWhen no suitable glyph is available, Cedilla will sometimes attempt to\nretouch an available glyph.  The main application is to produce dotless\nglyphs for further composition; another use is to provide barred or doubled\nglyphs.\n\nExample: Međunarodna željeznička unija.\n\nThis mechanism is also used to provide circled and more generally enclosed\nglyphs; this is not expected to be useful in practice.\n\n4. Transformed glyphs\n\nCedilla is able to linearly transform (rotate, translate, mirror) a glyph in\na font.  The main application is to provide a turned comma for further\ncompositing.\n\n5. Glyphs composed based on data accompanying the font.\n\nThe Adobe Font Metrics (AFM) format can include positioning information for\ncomposites, and Cedilla will be glad to use such data.  However, as few\nfonts come with extra information in this form, this technique is seldom\nuseful.\n\n6. Glyphs composed out of components present in a single font.\n\nIf a glyph is missing from a font, but all the components needed to\nconstruct it are present, Cedilla will build a composite glyph out of those.\nWhile the positioning of the diacritical marks is approximate, the algorithm\nused appears to be satisfactory with many standard fonts.\n\nExample: Czy pamiętasz jak ze mną tańczyłaś Walca ?\n\nWhen building such composites, Cedilla will, whenever necessary, replace\ndotted letters with their dotless variants or modify the base glyph to\nremove the dot (see Section 2 above).\n\nExample: Tiuj ĉi arĥaismoj neniam estos elĵetitaj.\n\nOf course, Cedilla is not limited to using glyphs that are present in\nUnicode in precomposed form.  For example, the second letter of the third\nword in the sentence below is a Latin small letter e followed with\n‘Combining Vertical Line Below.’\n\nExample: Mo lè je̩ dígí, kò ní pa mí lára.\n\nMultiple combining characters may apply to a single base character, and will\nusually be stacked in the order mandated by Unicode.\n\nExample: í̇ (i◌́◌̇) is different from i̇́ (i◌̇◌́) which is different from í (i◌́).\n\nIn some cases, however, they will be positioned in a specific, culturally\nacceptable manner.\n\nExample: Hành lang hôi mùi cải luộc chiếu nát.\n\n7. Glyphs composed out of components taken from different fonts.\n\nWhen the font containing a selected base glyph doesn't contain suitable\ndiacritical marks, Cedilla will search for a diacritical mark in the other\nfonts available.  This can be useful in some cases, and will in particular\nenable printing almost legible Greek when no decent Greek font is available:\n\nExample: \n  Οὐχὶ ταὐτὰ παρίσταταί μοι γιγνώσκειν, ὦ ἄνδρες ᾿Αθηναῖοι,\n  ὅταν τ᾿ εἰς τὰ πράγματα ἀποβλέψω καὶ ὅταν πρὸς τοὺς\n  λόγους οὓς ἀκούω·\n\n8. Fallbacks.\n\nIn cases when no glyph could be constructed, Cedilla will fall back on ever\nless satisfactory alternatives.  For example, a Polish or German opening\nquotation mark will first be replaced by a sequence of two single quotation\nmarks which will in turn be replaced with a sequence of two commas.\n\nThe fallbacks mechanism is a rather complex beast, and interacts in\nwonderful and mysterious ways with verious mechanisms for glyph generation\n(notably compositing).  Currently, the only place where it is described is\nthe source code.\n\n\nINSTALLING CEDILLA\n\nPlease see the file ‘INSTALL’ for information on installing Cedilla.\n\n\nINVOKING CEDILLA\n\nPlease see the ‘cedilla(1)’ manual page for information on invoking\ncedilla.\n\n\nCONFIGURING CEDILLA\n\nCedilla is configured by inserting fontset definitions in a file named\n‘cedilla-config.lisp’ which, by default, lives in ‘/etc/’.  A fontset\ndefinition is an invocation of the macro DEFINE-FONTSET with two\nparameters: the name of the fontset and an ordered list of font\ndefinitions.\n\n  (define-fontset \"times\"\n    ‘((:afm \"ptmr.afm\" :omit (\"mu\"))\n      (:afm \"psyr.afm\")\n      (:afm \"pzdr.afm\" :encoding ,#’zapf-dingbats-encoding)\n      (:built-in :width 667 :height 662 :x-height 448)))\n\n  (define-fontset \"utopia\"\n    ‘((:afm \"UTRG____.afm\" :resources (\"UTRG____.pfa\"))))\n\nEvery font definition is a list the first element of which is the\nfont's type.\n\nIf the type is :AFM, then the entry specifies a font described by its\nAFM file.  The font definition is of the form\n\n  (:AFM filename . options)\n  \nwhere filename is the location of the AFM file describing the font, and\noptions is an alternating list of keyword/value (a ‘plist’ in Lisp\nparlance).\n\nOptions supported for the :AFM font type include:\n\n• :RESOURCES : specifies a list of resources that must be downloaded if the\n  font is to be used; currently, the only type of downloadable resource\n  supported are fonts in either PFA or PFB format;\n\n• :ENCODING : specifies that the font does not follow the Adobe glyph naming\n  guidelines; the argument is a function that maps normal CCS to glyph names.\n\n• :FIXED-ENCODING : specifies that the font is hopelessly broken, and should\n  never, ever be reencoded; the argument is a function that maps normal CCS\n  to font indices.\n\n• :OMIT : specifies a list of names of glyphs that should be ignored; a\n  typical application is to exclude the glyph “mu” that many Latin fonts\n  include for compatibility with legacy encodings.\n\nIf the type is :BUILT-IN, then the entry specifies Cedilla's built-in font.\nThe entry is of the form\n\n  (:BUILT-IN . options)\n  \nwhere options include:\n\n• :WIDTH : specifies the width of typical glyphs in the font in units of one\n  thousandth of the font size.  The width of the capital Latin letter “C” in\n  the principal font of the fontset is usually a good choice for this value.\n\n• :FIGURE-WIDTH : specifies the width of digits and monetary symbols in the\n  font.  In not specified, defaults to the value of :WIDTH.\n\n• :CAP-HEIGHT : specifies the capital height of the glyphs in the font.  The\n  height of the capital Latin letter “H” in the principal font is usually a\n  good choice for this value.\n\n• :X-HEIGHT : specifies the height of small letters in the font.  The height\n  of the small Latin letter “x” in the principal font is usually a good choice\n  for this value.\n\nIf the type is :SPACE, then the entry specifies a fake font that provides a\nspace glyph; this is meant for use with fonts that do not contain a useable\nspace, such as some fonts designed for TeX; another application is to provide\na space that has a different size from the one included in the font.  The\nentry is of the form\n\n  (:SPACE . options)\n\nwhere the only defined option is :WIDTH, the argument to which is an integer\nspecifying the width of the space that the font will provide.\n\n\nEXTENDING CEDILLA\n\nCedilla uses data from the UnicodeData file and from the Adobe Glyph List.\nThese data are are supplemented with a table of (good) character\nalternatives, a table of (bad) character fallbacks, and a table of alternate\nglyph names.  See the comments at the beginning of ‘unicode.lisp’ for\ninformation about the data structures used, and the file ‘data-add.lisp’ for\nthe additional data provided.\n\nThe built-in font is defined in the file ‘built-in.lisp’.  You should feel\nfree to add glyphs to this font, as Cedilla will only download those glyphs\nthat are needed for the current print job.\n\n\nACKNOWLEDGEMENTS\n\nMarkus Kuhn coined the expression ‘best-effort typesetting’.\n\nLocal variables: ***\nMode: text ***\nCoding: utf-8 ***\nfill-column: 76 ***\nEnd: ***\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjech%2Fcedilla","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjech%2Fcedilla","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjech%2Fcedilla/lists"}