{"id":25195866,"url":"https://github.com/s-expressionists/inravina","last_synced_at":"2026-01-18T17:02:02.548Z","repository":{"id":65402693,"uuid":"409194761","full_name":"s-expressionists/Inravina","owner":"s-expressionists","description":"A portable and extensible Common Lisp pretty printer.","archived":false,"fork":false,"pushed_at":"2025-09-21T15:04:15.000Z","size":1197,"stargazers_count":13,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-09-21T17:27:31.709Z","etag":null,"topics":["common-lisp","pretty-print"],"latest_commit_sha":null,"homepage":"","language":"Common Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/s-expressionists.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-09-22T12:25:11.000Z","updated_at":"2025-09-21T15:04:18.000Z","dependencies_parsed_at":"2023-09-29T21:03:04.515Z","dependency_job_id":"92c586af-50c4-4d0d-98a4-28363973fa60","html_url":"https://github.com/s-expressionists/Inravina","commit_stats":null,"previous_names":["s-expressionists/inravina"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/s-expressionists/Inravina","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-expressionists%2FInravina","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-expressionists%2FInravina/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-expressionists%2FInravina/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-expressionists%2FInravina/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/s-expressionists","download_url":"https://codeload.github.com/s-expressionists/Inravina/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s-expressionists%2FInravina/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28543518,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T14:59:57.589Z","status":"ssl_error","status_checked_at":"2026-01-18T14:59:46.540Z","response_time":98,"last_error":"SSL_read: 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":["common-lisp","pretty-print"],"created_at":"2025-02-10T01:38:52.109Z","updated_at":"2026-01-18T17:02:02.542Z","avatar_url":"https://github.com/s-expressionists.png","language":"Common Lisp","readme":"# Inravina\n\nA portable and extensible Common Lisp pretty printer.\n\nThis is a work in progress and not ready to replace the pretty printer\nin an existing Common Lisp implementation. Most of the pretty printer\ninterface and functionality has been implemented. If you want to kick\nthe tires and light the fires than continue reading!\n\n# Requirements\n\n[ABCL][], [Clasp][], [ECL][], and [SBCL][] is the only current\nimplementations that this system has been tested on. The intention is\nto include this as the stock pretty printer in [SICL][] eventually.\n\nIn addition to a clone of this repository in a location that is\ndiscoverable by ASDF you will also need a clone of\n[nontrivial-gray-streams][] and [Incless][].\n\n# Usage\n\nThe core functionality is in the `inravina` package, but the Common\nLisp-like interface of `pprint-newline`, `pprint-dispatch` is in the\n`inravina-extrinsic` package and system. To call pprint on a form try\nthe following in SBCL:\n\n```\n* (asdf:load-system :inravina-extrinsic)\nT\n* (incless-extrinsic:pprint '(loop for i in '(a b c) \n                                    unless (eq i b) do (stuff i) (quux i) and collect i))\n\n(LOOP FOR I IN '(A B C)\n      UNLESS (EQ I B)\n        DO (STUFF I)\n           (QUUX I)\n        AND COLLECT I)\n```\n\nThere are also some examples of pretty printing with [cl-pdf][] and\n[McCLIM][] in the examples directory.\n\n# Core Functionality\n\nAlmost everything works currently. There are probably bugs abound and\nnothing has been optimized yet. The dispatch tables are functional but\nvery inefficient.  There is a variety of form specific printers but\nnot all forms that need a specific printer in the `common-lisp`\npackage have been covered yet.\n\nIn the case of no available printer in the dispatch table for function\nor macro calls there is a fallback printer. This printer will use\nintrospection on the appropriate lambda list declaration to determine\nnon-key argument counts, body forms, and embedded lambda list\ndesctructuring arguments for macros. Given that information it will\nattempt to do things like keeping key-values together on a single line\nor printing body forms correctly, etc.\n\n# Extended Functionality\n\nInravina is being developed with a \"client\" extensibility design\npattern. It is also being designed with an eye to correct shortcomings\nin the original XP algorithm.\n\nSome extended functionality is already available. Specifically,\nInravina can typeset code using proportional fonts. For an sample of\nthis see the PDF code in the examples directory.\n\nAdditionally, font styles can be injected into the instruction\nsequence normally created by `pprint-logical-block`, `pprint-newline`,\n`pprint-tab`, `pprint-indent` and calls to `write-char` or\n`write-string` on the pretty stream. A sample of this being done is\navailable in the McCLIM code in the examples directory.\n\n[ABCL]: https://armedbear.common-lisp.dev/\n[CLASP]: https://github.com/clasp-developers/clasp\n[ECL]: https://ecl.common-lisp.dev/\n[Incless]: https://github.com/s-expressionists/Incless\n[McCLIM]: https://github.com/McCLIM/McCLIM\n[SBCL]: http://sbcl.org\n[SICL]: https://github.com/robert-strandh/SICL\n[cl-pdf]: https://github.com/mbattyani/cl-pdf\n[nontrivial-gray-streams]: https://github.com/yitzchak/nontrivial-gray-streams\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fs-expressionists%2Finravina","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fs-expressionists%2Finravina","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fs-expressionists%2Finravina/lists"}