{"id":17214452,"url":"https://github.com/leifandersen/racket-sml","last_synced_at":"2026-02-18T02:01:59.970Z","repository":{"id":62424368,"uuid":"134785955","full_name":"LeifAndersen/racket-sml","owner":"LeifAndersen","description":null,"archived":false,"fork":false,"pushed_at":"2023-04-17T22:09:11.000Z","size":14,"stargazers_count":18,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-15T01:59:57.437Z","etag":null,"topics":["language","racket"],"latest_commit_sha":null,"homepage":"","language":"Racket","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LeifAndersen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2018-05-25T01:15:58.000Z","updated_at":"2023-04-19T18:31:45.000Z","dependencies_parsed_at":"2025-03-25T12:47:56.782Z","dependency_job_id":"dd9dfe7c-dbfe-4a34-b538-352a1bb74f5b","html_url":"https://github.com/LeifAndersen/racket-sml","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/LeifAndersen/racket-sml","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeifAndersen%2Fracket-sml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeifAndersen%2Fracket-sml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeifAndersen%2Fracket-sml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeifAndersen%2Fracket-sml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LeifAndersen","download_url":"https://codeload.github.com/LeifAndersen/racket-sml/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeifAndersen%2Fracket-sml/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29566366,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T00:47:08.760Z","status":"online","status_checked_at":"2026-02-18T02:00:09.468Z","response_time":162,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["language","racket"],"created_at":"2024-10-15T03:03:10.865Z","updated_at":"2026-02-18T02:01:59.936Z","avatar_url":"https://github.com/LeifAndersen.png","language":"Racket","readme":"S-Markup Language\n=================\n\nThe S-Markup Language is a simple markup language that embeds the full power of the Racket ecosystem.\n\nThe top level of an SML file is a set of key-value pairs, with possible definitions. For convenience, keys can be any identifier that ends in a colon (`:`), but technically can be any value. For example:\n\n```\n#lang sml\n\ntitle: \"A readme file\"\nauthor: me\n\n(define me \"Leif\")\n```\n\nAny values inside of square brackets (`[` and `]`) become a list:\n\n```\n#lang sml\ntitle: \"A readme file\"\nauthor: [\"Leif\" \"Ben\"]\n```\n\nAny values inside of curly braces (`{` and `}`) becomes a dictionary:\n\n```\n#lang sml\ntitle: \"A readme file\"\nauthor: [{name: \"Leif\"\n          location: \"MA\"}\n         {name: \"Ben\"\n          location: \"MA\"}]\n```\n\nFinally, double curly braces become strings, and can use Racket's `@-expressions` to escape to SML code. For example (using semi-colon for comments):\n\n```\n#lang sml ; readme.sml\ntitle: \"A readme file\"\nauthor: [{name: \"Leif\"\n          location: {{Cambridge, @MA}}}\n         {name: \"Ben\"\n          location: {{Boston, @MA}}}]\n\n(define MA \"Massachusetts\")\n```\n\nOtherwise the syntax is that of Racket with s-expressions enabled.\n\nThe data in each SML program is provided in a hash table called `doc`. Using the repl with the above program:\n\n```\n\u003e (require \"readme.sml\")\n\u003e doc\n'#hash((author . (#hash((location . \"Cambridge, Massachusetts\") (name . \"Leif\")) #hash((location . \"Bostn, Massachusetts\") (name . \"Ben\")))) (title . \"A readme file\"))\n```\n\nAnd you can get the data using Racket's dictionary API.\n\nAdditionally, if you need runtime parameters to build, this can be done with the `#:inputs` keyword:\n\n```\n#lang sml ; data.sml\n#:inputs (hyperlink)\n\n(define project\n  {name: \"SML\"\n   link: \"https://github.com/LeifAndersen/racket-sml\"})\n\ntext:\n{{Find SML at @hyperlink[project].}}\n```\n\nNow doc is a function that takes the `#:inputs` expression:\n\n```\n\u003e (require \"data.sml\")\n\u003e doc\n#\u003cprocedure:doc\u003e\n\u003e (doc (lambda (a) (hash-ref a 'link)))\n'#hash((text . \"Find SML at https://github.com/LeifAndersen/racket-sml\"))\n```\n\n\n# FAQ\n## Q: What does the S in SML stand for?\n\nA: Small, Silly, Stupid, Smart, S-Expression, Stunning, Something else? I don't know, you pick.\n\n## Q: How is this related to Standard ML?\n\nA: It's not. Standard ML is awesome though, and you should check out [SML/NJ][smlnj].\n\n## Q: Why another markup language?\n\nA: I had a CV to write, and I got sick of every other markup language. And its only about 100 lines, why not?\n\n[smlnj]: https://www.smlnj.org/\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleifandersen%2Fracket-sml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleifandersen%2Fracket-sml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleifandersen%2Fracket-sml/lists"}