{"id":21933636,"url":"https://github.com/chee/kdlcl","last_synced_at":"2026-01-05T00:14:33.586Z","repository":{"id":236628848,"uuid":"614154695","full_name":"chee/kdlcl","owner":"chee","description":"KDL reader/printer for common lisp","archived":false,"fork":false,"pushed_at":"2023-03-15T23:57:55.000Z","size":51,"stargazers_count":4,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-15T15:40:48.533Z","etag":null,"topics":["common-lisp","kdl"],"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-0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chee.png","metadata":{"files":{"readme":"readme.org","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2023-03-15T02:10:27.000Z","updated_at":"2025-01-24T14:27:25.000Z","dependencies_parsed_at":"2024-04-28T04:45:42.959Z","dependency_job_id":"afe84ec6-aca2-48d5-be19-cddb754fa2c4","html_url":"https://github.com/chee/kdlcl","commit_stats":null,"previous_names":["chee/kdlcl"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chee%2Fkdlcl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chee%2Fkdlcl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chee%2Fkdlcl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chee%2Fkdlcl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chee","download_url":"https://codeload.github.com/chee/kdlcl/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244961553,"owners_count":20538988,"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":["common-lisp","kdl"],"created_at":"2024-11-29T00:13:05.182Z","updated_at":"2025-11-03T19:06:55.856Z","avatar_url":"https://github.com/chee.png","language":"Common Lisp","funding_links":[],"categories":[],"sub_categories":[],"readme":"* kdlcl\n\n[[https://kdl.dev/][KDL]] reader/writer for Common Lisp.\n\n** Interface\n*** Reading a document\n\n#+begin_src lisp\n(in-package :kdl-user)\n(read-document stream) ; dispatches to `from-stream'\n(read-document string) ; dispatches to `from-string'\n(read-document filespec) ; dispatches to `from-file'\n#+end_src\n\n*** Working with the document\n\nThese getters all have =setf= forms too.\n\n#+begin_src lisp\n(in-package :kdl-user)\n\n;; Get the value from a value cons cell\n(value value)\n\n;; Get the type from a value cons cell\n(value-type value)\n\n;; Get the name of a property\n(property-name property)\n\n;; Get the value from a property\n(property-value property)\n\n;; Get the value-type from a property\n(property-type property)\n\n;; Get the name of a node\n(node-name node)\n\n;; Get the properties from a node\n(node-properties node)\n\n;; Get the children from a node\n(node-children node)\n\n;; get the second child\n(node-child node 1)\n\n;; Get the type of a node\n(node-type node)\n#+end_src\n\n*** Writing the document\n\n#+begin_src lisp\n(in-package :kdl-user)\n(to-stream kdl-document)\n(to-string kdl-document)\n(to-file kdl-document)\n#+end_src\n\n** Quirks\nThis implementation of KDL is spec-compliant, but the test-cases differ from the\n[[https://github.com/kdl-org/kdl/tree/main/tests/test_cases][official test-cases]] is a few ways:\n\n*** Properties\nLike [[https://github.com/kdl-org/kdl-rs][kdl-rs]], multiple properties with the same name are allowed and all\nduplicated *will be preserved*.\n\n*** Really large numbers\nVery big floats max out at =*most-positive-double-float*=.\nFor example:\n- Input :: =chubby-number 1e1000=\n- Output :: =chubby-number 1.7976931348623157e308=\n\n*** Exponent representation\n- Exponents use lowercase e\n  - official tests :: ~1.1E-100~\n  - :kdl/t :: ~1.1e-100~\n- Positive exponents have no plus\n  - official tests ::  ~1.1E+100~\n  - :kdl/t :: ~1.1e100~\n- Non-integer numbers always have a decimal point:\n  - official tests :: ~1E+100~\n  - :kdl/t :: ~1.0e100~\n**** Lisp implementation differences\n\nThe tests for the exponent formats are based on the output from SBCL. The\nlibrary works on at least GNU CLISP and ECL, but the floating point number\noutput is in a different format. For instance, ECL prints the floats in this\ncute fashion: ~1.e10~.\n\nI haven't been able to test on any other implementations yet because I can't get\nthem running on my computer :o(\n\n** [[file:LICENSE][License]]\n[[https://spdx.org/licenses/MIT-0.html][MIT-0]]\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchee%2Fkdlcl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchee%2Fkdlcl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchee%2Fkdlcl/lists"}