{"id":18592201,"url":"https://github.com/listx/lilac","last_synced_at":"2025-06-11T23:05:46.138Z","repository":{"id":203882306,"uuid":"643442742","full_name":"listx/lilac","owner":"listx","description":"A Literate Programming tool for Orgmode targeting HTML output","archived":false,"fork":false,"pushed_at":"2024-09-05T13:12:59.000Z","size":2343,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-11T02:14:16.603Z","etag":null,"topics":["emacs","literate-programming","orgmode"],"latest_commit_sha":null,"homepage":"https://funloop.org/lilac/","language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/listx.png","metadata":{"files":{"readme":"README.html","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"citations-developer-guide.bib","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-05-21T07:08:04.000Z","updated_at":"2025-03-16T13:45:49.000Z","dependencies_parsed_at":"2023-10-31T07:26:42.429Z","dependency_job_id":"6111740b-e4c8-474a-9b52-babb879568bf","html_url":"https://github.com/listx/lilac","commit_stats":null,"previous_names":["listx/lilac"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/listx/lilac","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/listx%2Flilac","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/listx%2Flilac/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/listx%2Flilac/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/listx%2Flilac/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/listx","download_url":"https://codeload.github.com/listx/lilac/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/listx%2Flilac/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259360804,"owners_count":22845822,"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":["emacs","literate-programming","orgmode"],"created_at":"2024-11-07T01:07:21.635Z","updated_at":"2025-06-11T23:05:46.101Z","avatar_url":"https://github.com/listx.png","language":"Emacs Lisp","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n\u003chead\u003e\n\u003cmeta charset=\"utf-8\" /\u003e\n\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\" /\u003e\n\u003ctitle\u003eLilac\u003c/title\u003e\n\u003cmeta name=\"author\" content=\"Linus Arver\" /\u003e\n\u003cmeta name=\"generator\" content=\"Org Mode\" /\u003e\n\u003cstyle\u003e\n  #content { max-width: 60em; margin: auto; }\n  .title  { text-align: center;\n             margin-bottom: .2em; }\n  .subtitle { text-align: center;\n              font-size: medium;\n              font-weight: bold;\n              margin-top:0; }\n  .todo   { font-family: monospace; color: red; }\n  .done   { font-family: monospace; color: green; }\n  .priority { font-family: monospace; color: orange; }\n  .tag    { background-color: #eee; font-family: monospace;\n            padding: 2px; font-size: 80%; font-weight: normal; }\n  .timestamp { color: #bebebe; }\n  .timestamp-kwd { color: #5f9ea0; }\n  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }\n  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }\n  .org-center { margin-left: auto; margin-right: auto; text-align: center; }\n  .underline { text-decoration: underline; }\n  #postamble p, #preamble p { font-size: 90%; margin: .2em; }\n  p.verse { margin-left: 3%; }\n  pre {\n    border: 1px solid #e6e6e6;\n    border-radius: 3px;\n    background-color: #f2f2f2;\n    padding: 8pt;\n    font-family: monospace;\n    overflow: auto;\n    margin: 1.2em;\n  }\n  pre.src {\n    position: relative;\n    overflow: auto;\n  }\n  pre.src:before {\n    display: none;\n    position: absolute;\n    top: -8px;\n    right: 12px;\n    padding: 3px;\n    color: #555;\n    background-color: #f2f2f299;\n  }\n  pre.src:hover:before { display: inline; margin-top: 14px;}\n  /* Languages per Org manual */\n  pre.src-asymptote:before { content: 'Asymptote'; }\n  pre.src-awk:before { content: 'Awk'; }\n  pre.src-authinfo::before { content: 'Authinfo'; }\n  pre.src-C:before { content: 'C'; }\n  /* pre.src-C++ doesn't work in CSS */\n  pre.src-clojure:before { content: 'Clojure'; }\n  pre.src-css:before { content: 'CSS'; }\n  pre.src-D:before { content: 'D'; }\n  pre.src-ditaa:before { content: 'ditaa'; }\n  pre.src-dot:before { content: 'Graphviz'; }\n  pre.src-calc:before { content: 'Emacs Calc'; }\n  pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }\n  pre.src-fortran:before { content: 'Fortran'; }\n  pre.src-gnuplot:before { content: 'gnuplot'; }\n  pre.src-haskell:before { content: 'Haskell'; }\n  pre.src-hledger:before { content: 'hledger'; }\n  pre.src-java:before { content: 'Java'; }\n  pre.src-js:before { content: 'Javascript'; }\n  pre.src-latex:before { content: 'LaTeX'; }\n  pre.src-ledger:before { content: 'Ledger'; }\n  pre.src-lisp:before { content: 'Lisp'; }\n  pre.src-lilypond:before { content: 'Lilypond'; }\n  pre.src-lua:before { content: 'Lua'; }\n  pre.src-matlab:before { content: 'MATLAB'; }\n  pre.src-mscgen:before { content: 'Mscgen'; }\n  pre.src-ocaml:before { content: 'Objective Caml'; }\n  pre.src-octave:before { content: 'Octave'; }\n  pre.src-org:before { content: 'Org mode'; }\n  pre.src-oz:before { content: 'OZ'; }\n  pre.src-plantuml:before { content: 'Plantuml'; }\n  pre.src-processing:before { content: 'Processing.js'; }\n  pre.src-python:before { content: 'Python'; }\n  pre.src-R:before { content: 'R'; }\n  pre.src-ruby:before { content: 'Ruby'; }\n  pre.src-sass:before { content: 'Sass'; }\n  pre.src-scheme:before { content: 'Scheme'; }\n  pre.src-screen:before { content: 'Gnu Screen'; }\n  pre.src-sed:before { content: 'Sed'; }\n  pre.src-sh:before { content: 'shell'; }\n  pre.src-sql:before { content: 'SQL'; }\n  pre.src-sqlite:before { content: 'SQLite'; }\n  /* additional languages in org.el's org-babel-load-languages alist */\n  pre.src-forth:before { content: 'Forth'; }\n  pre.src-io:before { content: 'IO'; }\n  pre.src-J:before { content: 'J'; }\n  pre.src-makefile:before { content: 'Makefile'; }\n  pre.src-maxima:before { content: 'Maxima'; }\n  pre.src-perl:before { content: 'Perl'; }\n  pre.src-picolisp:before { content: 'Pico Lisp'; }\n  pre.src-scala:before { content: 'Scala'; }\n  pre.src-shell:before { content: 'Shell Script'; }\n  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }\n  /* additional language identifiers per \"defun org-babel-execute\"\n       in ob-*.el */\n  pre.src-cpp:before  { content: 'C++'; }\n  pre.src-abc:before  { content: 'ABC'; }\n  pre.src-coq:before  { content: 'Coq'; }\n  pre.src-groovy:before  { content: 'Groovy'; }\n  /* additional language identifiers from org-babel-shell-names in\n     ob-shell.el: ob-shell is the only babel language using a lambda to put\n     the execution function name together. */\n  pre.src-bash:before  { content: 'bash'; }\n  pre.src-csh:before  { content: 'csh'; }\n  pre.src-ash:before  { content: 'ash'; }\n  pre.src-dash:before  { content: 'dash'; }\n  pre.src-ksh:before  { content: 'ksh'; }\n  pre.src-mksh:before  { content: 'mksh'; }\n  pre.src-posh:before  { content: 'posh'; }\n  /* Additional Emacs modes also supported by the LaTeX listings package */\n  pre.src-ada:before { content: 'Ada'; }\n  pre.src-asm:before { content: 'Assembler'; }\n  pre.src-caml:before { content: 'Caml'; }\n  pre.src-delphi:before { content: 'Delphi'; }\n  pre.src-html:before { content: 'HTML'; }\n  pre.src-idl:before { content: 'IDL'; }\n  pre.src-mercury:before { content: 'Mercury'; }\n  pre.src-metapost:before { content: 'MetaPost'; }\n  pre.src-modula-2:before { content: 'Modula-2'; }\n  pre.src-pascal:before { content: 'Pascal'; }\n  pre.src-ps:before { content: 'PostScript'; }\n  pre.src-prolog:before { content: 'Prolog'; }\n  pre.src-simula:before { content: 'Simula'; }\n  pre.src-tcl:before { content: 'tcl'; }\n  pre.src-tex:before { content: 'TeX'; }\n  pre.src-plain-tex:before { content: 'Plain TeX'; }\n  pre.src-verilog:before { content: 'Verilog'; }\n  pre.src-vhdl:before { content: 'VHDL'; }\n  pre.src-xml:before { content: 'XML'; }\n  pre.src-nxml:before { content: 'XML'; }\n  /* add a generic configuration mode; LaTeX export needs an additional\n     (add-to-list 'org-latex-listings-langs '(conf \" \")) in .emacs */\n  pre.src-conf:before { content: 'Configuration File'; }\n\n  table { border-collapse:collapse; }\n  caption.t-above { caption-side: top; }\n  caption.t-bottom { caption-side: bottom; }\n  td, th { vertical-align:top;  }\n  th.org-right  { text-align: center;  }\n  th.org-left   { text-align: center;   }\n  th.org-center { text-align: center; }\n  td.org-right  { text-align: right;  }\n  td.org-left   { text-align: left;   }\n  td.org-center { text-align: center; }\n  dt { font-weight: bold; }\n  .footpara { display: inline; }\n  .footdef  { margin-bottom: 1em; }\n  .figure { padding: 1em; }\n  .figure p { text-align: center; }\n  .equation-container {\n    display: table;\n    text-align: center;\n    width: 100%;\n  }\n  .equation {\n    vertical-align: middle;\n  }\n  .equation-label {\n    display: table-cell;\n    text-align: right;\n    vertical-align: middle;\n  }\n  .inlinetask {\n    padding: 10px;\n    border: 2px solid gray;\n    margin: 10px;\n    background: #ffffcc;\n  }\n  #org-div-home-and-up\n   { text-align: right; font-size: 70%; white-space: nowrap; }\n  textarea { overflow-x: auto; }\n  .linenr { font-size: smaller }\n  .code-highlighted { background-color: #ffff00; }\n  .org-info-js_info-navigation { border-style: none; }\n  #org-info-js_console-label\n    { font-size: 10px; font-weight: bold; white-space: nowrap; }\n  .org-info-js_search-highlight\n    { background-color: #ffff00; color: #000000; font-weight: bold; }\n  .org-svg { }\n\u003c/style\u003e\n\u003clink rel=\"preconnect\" href=\"https://fonts.googleapis.com\" /\u003e\n\u003clink rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin /\u003e\n\u003clink rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?family=Source+Serif+4:ital,opsz,wght@0,8..60,200..900;1,8..60,200..900\u0026family=Source+Sans+3:ital,wght@0,200..900;1,200..900\u0026family=Source+Code+Pro:ital,wght@0,200..900;1,200..900\"\u003e\n\u003cscript src=\"https://code.jquery.com/jquery-3.6.4.min.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"lilac.js\"\u003e\u003c/script\u003e\n\u003clink rel=\"stylesheet\" type=\"text/css\" href=\"syntax-highlighting.css\"/\u003e\n\u003clink rel=\"stylesheet\" type=\"text/css\" href=\"lilac.css\" /\u003e\n\u003c!-- LILAC_HTML_HEAD --\u003e\n\u003cscript\u003e\n// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050\u0026amp;dn=gpl-3.0.txt GPL-v3-or-Later\n     function CodeHighlightOn(elem, id)\n     {\n       var target = document.getElementById(id);\n       if(null != target) {\n         elem.classList.add(\"code-highlighted\");\n         target.classList.add(\"code-highlighted\");\n       }\n     }\n     function CodeHighlightOff(elem, id)\n     {\n       var target = document.getElementById(id);\n       if(null != target) {\n         elem.classList.remove(\"code-highlighted\");\n         target.classList.remove(\"code-highlighted\");\n       }\n     }\n// @license-end\n\u003c/script\u003e\n\u003cscript\u003e\n  window.MathJax = {\n    tex: {\n      ams: {\n        multlineWidth: '85%'\n      },\n      tags: 'ams',\n      tagSide: 'right',\n      tagIndent: '.8em'\n    },\n    chtml: {\n      scale: 1.0,\n      displayAlign: 'center',\n      displayIndent: '0em'\n    },\n    svg: {\n      scale: 1.0,\n      displayAlign: 'center',\n      displayIndent: '0em'\n    },\n    output: {\n      font: 'mathjax-modern',\n      displayOverflow: 'overflow'\n    }\n  };\n\u003c/script\u003e\n\n\u003cscript\n  id=\"MathJax-script\"\n  async\n  src=\"https://cdn.jsdelivr.net/npm/mathjax@4.0.0-beta.4/tex-mml-chtml.js\"\u003e\n\u003c/script\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n\u003cdiv id=\"content\" class=\"content\"\u003e\n\u003ch1 class=\"title\"\u003eLilac\u003c/h1\u003e\n\u003cdiv id=\"table-of-contents\" role=\"doc-toc\"\u003e\n\n\u003cdiv id=\"text-table-of-contents\" role=\"doc-toc\"\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#h-Introduction\"\u003e1. Introduction\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#h-Motivation-and-differences-vs-Org-defaults\"\u003e1.1. Motivation and differences vs Org defaults\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#h-Source-code-block-captions\"\u003e1.1.1. Source code block captions\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#h-Org-defaults\"\u003e1.1.1.1. Org defaults\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Lilac\"\u003e1.1.1.2. Lilac\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Source-code-block-links\"\u003e1.1.2. Source code block links\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#h-Org-defaults-1\"\u003e1.1.2.1. Org defaults\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Lilac-1\"\u003e1.1.2.2. Lilac\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Link-IDs\"\u003e1.1.3. Link IDs\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#h-Org-defaults-2\"\u003e1.1.3.1. Org defaults\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Lilac-2\"\u003e1.1.3.2. Lilac\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-HTML-Table-of-Contents\"\u003e1.1.4. HTML Table of Contents\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#h-Org-defaults-3\"\u003e1.1.4.1. Org defaults\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Lilac-3\"\u003e1.1.4.2. Lilac\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Side-notes--aka--margin-notes\"\u003e1.1.5. Side notes, aka \"margin notes\"\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#h-Org-defaults-4\"\u003e1.1.5.1. Org defaults\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Lilac-4\"\u003e1.1.5.2. Lilac\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-User-Guide\"\u003e2. User Guide\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#h-Source-code-blocks--monoblocks-and-polyblocks\"\u003e2.1. Source code blocks: monoblocks and polyblocks\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#h-Examples-of-source-code-blocks\"\u003e2.1.1. Examples of source code blocks\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#h-Multi-parent-child-blocks\"\u003e2.1.1.1. Multi-parent child blocks\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Examples\"\u003e2.2. Examples\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#h-Code-blocks\"\u003e2.2.1. Code blocks\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#h-Source-blocks\"\u003e2.2.1.1. Source blocks\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#h-Plain\"\u003e2.2.1.1.1. Plain\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Monoblock\"\u003e2.2.1.1.2. Monoblock\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Monoblock--evaluation-result-s-value\"\u003e2.2.1.1.3. Monoblock (evaluation result's value)\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Monoblock--pass-argument-to-source-code-block\"\u003e2.2.1.1.4. Monoblock (pass argument to source code block)\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Polyblock\"\u003e2.2.1.1.5. Polyblock\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Linking-to-a-line-in-the-code-block-body\"\u003e2.2.1.1.6. Linking to a line in the code block body\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Example-blocks\"\u003e2.2.1.2. Example blocks\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Quote-blocks\"\u003e2.2.1.3. Quote blocks\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Side-notes\"\u003e2.2.2. Side notes\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Math--MathJax\"\u003e2.2.3. Math (MathJax)\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Known-limitations\"\u003e3. Known limitations\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Developer-Guide\"\u003e4. Developer Guide\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Glossary\"\u003e5. Glossary\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-Projects-using-Lilac\"\u003e6. Projects using Lilac\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#h-References\"\u003e7. References\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Introduction\" class=\"outline-2\"\u003e\n\u003ch2 id=\"h-Introduction\"\u003e\u003cspan class=\"section-number-2\"\u003e1.\u003c/span\u003e Introduction\u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-h-Introduction\"\u003e\n\u003cdiv class=\"sidenote\" id=\"org0000000\"\u003e\n\u003cp\u003e\nThe \u003ci\u003elilac\u003c/i\u003e is a \u003ca href=\"https://en.wikipedia.org/wiki/Syringa\"\u003eflowering woody plant\u003c/a\u003e.\n\u003c/p\u003e\n\n\u003c/div\u003e\n\n\u003cp\u003e\n\u003ci\u003eLilac\u003c/i\u003e is an addon for Emacs Org mode to make \u003ca href=\"https://en.wikipedia.org/wiki/Literate_programming\"\u003eLiterate Programming\u003c/a\u003e (LP) using\n\u003ca href=\"#org0000001\"\u003eNoweb\u003c/a\u003e-style \u003ca href=\"#citeproc_bib_item_1\"\u003e[1]\u003c/a\u003e references easy. It comes in two parts:\n\u003c/p\u003e\n\n\u003col class=\"org-ol\"\u003e\n\u003cli\u003e\u003ccode\u003elilac.el\u003c/code\u003e: to be loaded and used when \u003ca href=\"#org0000003\"\u003e\u003ci\u003eweaving\u003c/i\u003e\u003c/a\u003e \u003ca href=\"#citeproc_bib_item_2\"\u003e[2, p. 98]\u003c/a\u003e and\n\u003ca href=\"#org0000005\"\u003e\u003ci\u003etangling\u003c/i\u003e\u003c/a\u003e \u003ca href=\"#citeproc_bib_item_2\"\u003e[2, p. 98]\u003c/a\u003e from your own Org mode files (which use\nNoweb references), and\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elilac.theme\u003c/code\u003e: to be sourced by your Org mode files to use Lilac's CSS and\nJavaScript on top of the HTML export.\u003c/li\u003e\n\u003c/ol\u003e\n\n\u003cp\u003e\nThis document itself reuses the \u003ccode\u003elilac.theme\u003c/code\u003e file, which gives you a preview\n(if you are viewing the HTML output) of what weaving with Lilac looks like.\n\u003c/p\u003e\n\n\u003cp\u003e\nNOTE: Do not view this page using GitHub's default Org file viewer, because many\nsections will appear broken. Instead, please view this page by visiting\n\u003ca href=\"https://funloop.org/lilac\"\u003ehttps://funloop.org/lilac\u003c/a\u003e, or by cloning \u003ca href=\"https://github.com/listx/lilac\"\u003ethe repository\u003c/a\u003e and pointing your\nbrowser to the top-level index.html file directly.\n\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Motivation-and-differences-vs-Org-defaults\" class=\"outline-3\"\u003e\n\u003ch3 id=\"h-Motivation-and-differences-vs-Org-defaults\"\u003e\u003cspan class=\"section-number-3\"\u003e1.1.\u003c/span\u003e Motivation and differences vs Org defaults\u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-h-Motivation-and-differences-vs-Org-defaults\"\u003e\n\u003cp\u003e\nLilac sacrifices some degree of customization in Org mode in order to make it\neasier to write literate programs using Noweb-style references. Lilac also\nfocuses on HTML export for \u003ci\u003eweaving\u003c/i\u003e.\n\u003c/p\u003e\n\n\u003cp\u003e\nThe following are some examples of how things are done in the default Org mode\nsettings, and how Lilac does things differently.\n\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Source-code-block-captions\" class=\"outline-4\"\u003e\n\u003ch4 id=\"h-Source-code-block-captions\"\u003e\u003cspan class=\"section-number-4\"\u003e1.1.1.\u003c/span\u003e Source code block captions\u003c/h4\u003e\n\u003cdiv class=\"outline-text-4\" id=\"text-h-Source-code-block-captions\"\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Org-defaults\" class=\"outline-5\"\u003e\n\u003ch5 id=\"h-Org-defaults\"\u003e\u003cspan class=\"section-number-5\"\u003e1.1.1.1.\u003c/span\u003e Org defaults\u003c/h5\u003e\n\u003cdiv class=\"outline-text-5\" id=\"text-h-Org-defaults\"\u003e\n\u003cp\u003e\nBy default, source code blocks do not get any captions in the HTML output. This\ncan be an annoyance for LP because you have to manually explain the name of each\nblock to keep track of their usage in other blocks (when referring to them with\nNoweb style references).\n\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Lilac\" class=\"outline-5\"\u003e\n\u003ch5 id=\"h-Lilac\"\u003e\u003cspan class=\"section-number-5\"\u003e1.1.1.2.\u003c/span\u003e Lilac\u003c/h5\u003e\n\u003cdiv class=\"outline-text-5\" id=\"text-h-Lilac\"\u003e\n\u003cp\u003e\nLilac frees you from having to write a custom \u003ccode\u003e#+caption: ...\u003c/code\u003e text for every\nsource code block, because it generates them based on the name of the Noweb\nreference. Lilac links child blocks and parent blocks together so that you can\nclick on code block names to navigate around this parent/child hierarchy.\n\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Source-code-block-links\" class=\"outline-4\"\u003e\n\u003ch4 id=\"h-Source-code-block-links\"\u003e\u003cspan class=\"section-number-4\"\u003e1.1.2.\u003c/span\u003e Source code block links\u003c/h4\u003e\n\u003cdiv class=\"outline-text-4\" id=\"text-h-Source-code-block-links\"\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Org-defaults-1\" class=\"outline-5\"\u003e\n\u003ch5 id=\"h-Org-defaults-1\"\u003e\u003cspan class=\"section-number-5\"\u003e1.1.2.1.\u003c/span\u003e Org defaults\u003c/h5\u003e\n\u003cdiv class=\"outline-text-5\" id=\"text-h-Org-defaults-1\"\u003e\n\u003cp\u003e\nWhile Org mode allows source code blocks to refer to other blocks (Noweb\nreferences), it does not do any kind of linking. So you can write blocks like\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cpre class=\"src src-org\" id=\"nil-1\"\u003e\u003cspan class=\"org-org-meta-line\"\u003e#+name: example-parent-block\u003c/span\u003e\n\u003cspan class=\"org-org-block-begin-line\"\u003e#+begin_src bash\u003c/span\u003e\n\u003cspan class=\"org-org-block\"\u003e\u003cspan class=\"org-builtin\"\u003eecho\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"org-org-block\"\u003e \u003c/span\u003e\u003cspan class=\"org-org-block\"\u003e\u003cspan class=\"org-string\"\u003e\"Hello from the parent block\"\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"org-org-block\"\u003e\u0026lt;\u0026lt;some-other-block\u0026gt;\u0026gt;\u003c/span\u003e\n\u003cspan class=\"org-org-block-end-line\"\u003e#+end_src\u003c/span\u003e\n\n...\n\n\u003cspan class=\"org-org-meta-line\"\u003e#+name: some-child-block\u003c/span\u003e\n\u003cspan class=\"org-org-block-begin-line\"\u003e#+begin_src bash\u003c/span\u003e\n\u003cspan class=\"org-org-block\"\u003e\u003cspan class=\"org-builtin\"\u003eecho\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"org-org-block\"\u003e \u003c/span\u003e\u003cspan class=\"org-org-block\"\u003e\u003cspan class=\"org-string\"\u003e\"I am child 1\"\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"org-org-block-end-line\"\u003e#+end_src\u003c/span\u003e\n\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\nbut when this is exported to HTML neither \u003ccode\u003eexample-parent-block\u003c/code\u003e nor\n\u003ccode\u003esome-child-block\u003c/code\u003e have any links to each other. This is frustrating because it\nmakes navigating between them difficult.\n\u003c/p\u003e\n\n\u003cp\u003e\nOrg mode does not create link anchors for headings, which makes referring to\nthem from other external documents slightly annoying. Org mode does not add link\nanchors to source code blocks.\n\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Lilac-1\" class=\"outline-5\"\u003e\n\u003ch5 id=\"h-Lilac-1\"\u003e\u003cspan class=\"section-number-5\"\u003e1.1.2.2.\u003c/span\u003e Lilac\u003c/h5\u003e\n\u003cdiv class=\"outline-text-5\" id=\"text-h-Lilac-1\"\u003e\n\u003cp\u003e\nLilac automatically links child blocks and parent blocks together so that you\ncan click on code block names to navigate around this parent/child hierarchy.\n\u003c/p\u003e\n\n\u003cp\u003e\nAlso, link anchors are added to all source code blocks as well as headlines,\nand they are saved in your browser's history as you click around, such that you\ncan go back/forward and be taken back to these intra-document locations. This\nmakes intra-document navigation more structured to help prevent you from getting\nlost.\n\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Link-IDs\" class=\"outline-4\"\u003e\n\u003ch4 id=\"h-Link-IDs\"\u003e\u003cspan class=\"section-number-4\"\u003e1.1.3.\u003c/span\u003e Link IDs\u003c/h4\u003e\n\u003cdiv class=\"outline-text-4\" id=\"text-h-Link-IDs\"\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Org-defaults-2\" class=\"outline-5\"\u003e\n\u003ch5 id=\"h-Org-defaults-2\"\u003e\u003cspan class=\"section-number-5\"\u003e1.1.3.1.\u003c/span\u003e Org defaults\u003c/h5\u003e\n\u003cdiv class=\"outline-text-5\" id=\"text-h-Org-defaults-2\"\u003e\n\u003cp\u003e\nOrg mode generates random link ID's on every export. That is, even if you change\nnothing in your Org mode file, if you export to HTML there \u003cb\u003ewill\u003c/b\u003e be a diff\nbecause all of the linked objects will get a new link ID.\n\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Lilac-2\" class=\"outline-5\"\u003e\n\u003ch5 id=\"h-Lilac-2\"\u003e\u003cspan class=\"section-number-5\"\u003e1.1.3.2.\u003c/span\u003e Lilac\u003c/h5\u003e\n\u003cdiv class=\"outline-text-5\" id=\"text-h-Lilac-2\"\u003e\n\u003cp\u003e\nLilac makes HTML generation deterministic. This makes it VCS and CI-friendly\nbecause the output changes if and only if the input changes. Speaking of\nCI-friendliness, Lilac was designed to be run from outside of Emacs by default\n(and not interactively).\n\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-HTML-Table-of-Contents\" class=\"outline-4\"\u003e\n\u003ch4 id=\"h-HTML-Table-of-Contents\"\u003e\u003cspan class=\"section-number-4\"\u003e1.1.4.\u003c/span\u003e HTML Table of Contents\u003c/h4\u003e\n\u003cdiv class=\"outline-text-4\" id=\"text-h-HTML-Table-of-Contents\"\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Org-defaults-3\" class=\"outline-5\"\u003e\n\u003ch5 id=\"h-Org-defaults-3\"\u003e\u003cspan class=\"section-number-5\"\u003e1.1.4.1.\u003c/span\u003e Org defaults\u003c/h5\u003e\n\u003cdiv class=\"outline-text-5\" id=\"text-h-Org-defaults-3\"\u003e\n\u003cp\u003e\nWhen exporting to HTML, the Table of Contents (TOC) is at the top of the\ndocument.\n\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Lilac-3\" class=\"outline-5\"\u003e\n\u003ch5 id=\"h-Lilac-3\"\u003e\u003cspan class=\"section-number-5\"\u003e1.1.4.2.\u003c/span\u003e Lilac\u003c/h5\u003e\n\u003cdiv class=\"outline-text-5\" id=\"text-h-Lilac-3\"\u003e\n\u003cp\u003e\nLilac puts the TOC in a sidebar on the left. It also uses some JavaScript to\ncheck where the current mouse position is to update the current location in the\nTOC. That is, the TOC follows you as you scroll down the document.\n\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Side-notes--aka--margin-notes\" class=\"outline-4\"\u003e\n\u003ch4 id=\"h-Side-notes--aka--margin-notes\"\u003e\u003cspan class=\"section-number-4\"\u003e1.1.5.\u003c/span\u003e Side notes, aka \"margin notes\"\u003c/h4\u003e\n\u003cdiv class=\"outline-text-4\" id=\"text-h-Side-notes--aka--margin-notes\"\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Org-defaults-4\" class=\"outline-5\"\u003e\n\u003ch5 id=\"h-Org-defaults-4\"\u003e\u003cspan class=\"section-number-5\"\u003e1.1.5.1.\u003c/span\u003e Org defaults\u003c/h5\u003e\n\u003cdiv class=\"outline-text-5\" id=\"text-h-Org-defaults-4\"\u003e\n\u003cp\u003e\nSide notes are used to insert notes on the right-hand-side margin, and are\ninspired by the ones found in Donald Knuth's books.\n\u003c/p\u003e\n\n\u003cp\u003e\nThey are not supported in Org mode.\n\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Lilac-4\" class=\"outline-5\"\u003e\n\u003ch5 id=\"h-Lilac-4\"\u003e\u003cspan class=\"section-number-5\"\u003e1.1.5.2.\u003c/span\u003e Lilac\u003c/h5\u003e\n\u003cdiv class=\"outline-text-5\" id=\"text-h-Lilac-4\"\u003e\n\u003cp\u003e\nLilac supports the \u003ccode\u003e#+begin_sidenote\u003c/code\u003e and \u003ccode\u003e#+end_sidenote\u003c/code\u003e delimiters. Text\ninside such delimiters are shown on the right hand margin.\n\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-User-Guide\" class=\"outline-2\"\u003e\n\u003ch2 id=\"h-User-Guide\"\u003e\u003cspan class=\"section-number-2\"\u003e2.\u003c/span\u003e User Guide\u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-h-User-Guide\"\u003e\n\u003cp\u003e\nFirst create an Org mode file that uses LP. Then either clone this repo or add\nit as a submodule to your project. The point is to get the \u003ccode\u003elilac.el\u003c/code\u003e (and its\ndependencies, themselves submodules) and \u003ccode\u003elilac.theme\u003c/code\u003e (and associated\nCSS/JavaScript files) available locally. Then for the Org mode file you are\nusing, you can load \u003ccode\u003elilac.el\u003c/code\u003e and run \u003ccode\u003e(lilac-publish)\u003c/code\u003e to generate the HTML\nfile, or run \u003ccode\u003e(org-babel-tangle)\u003c/code\u003e to generate the source code from it. See the\n\u003ccode\u003eMakefile\u003c/code\u003e that this project uses as a reference.\n\u003c/p\u003e\n\n\u003cp\u003e\nThe main thing that you need to keep in mind when writing Org mode files for\nconsumption by Lilac is that the source code blocks must use Noweb references\nusing \u003ccode\u003e__NREF__\u003c/code\u003e as a prefix. See the discussion below.\n\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Source-code-blocks--monoblocks-and-polyblocks\" class=\"outline-3\"\u003e\n\u003ch3 id=\"h-Source-code-blocks--monoblocks-and-polyblocks\"\u003e\u003cspan class=\"section-number-3\"\u003e2.1.\u003c/span\u003e Source code blocks: monoblocks and polyblocks\u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-h-Source-code-blocks--monoblocks-and-polyblocks\"\u003e\n\u003cp\u003e\nIn Org mode, Noweb-style references by default must be enclosed in double angle\nbrackets \u003ccode\u003e\u0026lt;\u0026lt;\u003c/code\u003e and \u003ccode\u003e\u0026gt;\u0026gt;\u003c/code\u003e. While this works, it's problematic because it can mean\ndifferent things syntactically based on the source code language. Your source\ncode block's language might think that the angle brackets are operators or\nkeywords and colorize them differently, for example.\n\u003c/p\u003e\n\n\u003cp\u003e\nInstead, Lilac expects Noweb-style references in the form \u003ccode\u003e__NREF__foo\u003c/code\u003e (where\nthe \"NREF\" stands for \"Noweb reference\"). Then you are free to name your child\nblock with this same \u003ccode\u003e__NREF__foo\u003c/code\u003e name. This is better because now you can\nsearch for this word \u003ccode\u003e__NREF__foo\u003c/code\u003e in your raw Org mode document and you'll\ninstantly be able to see where it is used. Contrast this with the default Org\nmode behavior where you'll have to search for \u003ccode\u003e\u0026lt;\u0026lt;foo\u0026gt;\u0026gt;\u003c/code\u003e and \u003ccode\u003efoo\u003c/code\u003e separately\n(because searching for just \u003ccode\u003efoo\u003c/code\u003e may collide with other names that are not\nsource code block names).\n\u003c/p\u003e\n\n\u003cp\u003e\nIn the example below, the \u003ccode\u003eparent-block\u003c/code\u003e refers to 2 other child blocks for its\ndefinition.\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cdiv class=\"lilac-pre-with-caption\"\u003e\u003cdiv class=\"lilac-caption\"\u003e\u003clabel class=\"org-src-name\"\u003eSample Org-mode Noweb-style references\u003c/label\u003e\u003cspan class=\"lilac-caption-link-symbol\"\u003e\u003ca href=\"#Sample-Org-mode-Noweb-style-references\"\u003e\u0026#x1f517;\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cpre class=\"src src-org\" id=\"Sample-Org-mode-Noweb-style-references\"\u003e\u003cspan class=\"org-org-meta-line\"\u003e#+name: parent-block\u003c/span\u003e\n\u003cspan class=\"org-org-block-begin-line\"\u003e#+begin_src bash\u003c/span\u003e\n\u003cspan class=\"org-org-block\"\u003e\u003cspan class=\"org-builtin\"\u003eecho\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"org-org-block\"\u003e \u003c/span\u003e\u003cspan class=\"org-org-block\"\u003e\u003cspan class=\"org-string\"\u003e\"Hello from the parent block\"\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"org-org-block\"\u003e__NREF__child-block-1\u003c/span\u003e\n\u003cspan class=\"org-org-block\"\u003e__NREF__child-block-2\u003c/span\u003e\n\u003cspan class=\"org-org-block-end-line\"\u003e#+end_src\u003c/span\u003e\n\n...\n\n\u003cspan class=\"org-org-meta-line\"\u003e#+name: __NREF__child-block-1\u003c/span\u003e\n\u003cspan class=\"org-org-block-begin-line\"\u003e#+begin_src bash\u003c/span\u003e\n\u003cspan class=\"org-org-block\"\u003e\u003cspan class=\"org-builtin\"\u003eecho\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"org-org-block\"\u003e \u003c/span\u003e\u003cspan class=\"org-org-block\"\u003e\u003cspan class=\"org-string\"\u003e\"I am child 1\"\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"org-org-block-end-line\"\u003e#+end_src\u003c/span\u003e\n\n...\n\n\u003cspan class=\"org-org-meta-line\"\u003e#+header: :noweb-ref __NREF__child-block-2\u003c/span\u003e\n\u003cspan class=\"org-org-block-begin-line\"\u003e#+begin_src bash\u003c/span\u003e\n\u003cspan class=\"org-org-block\"\u003e\u003cspan class=\"org-builtin\"\u003eecho\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"org-org-block\"\u003e -n \u003c/span\u003e\u003cspan class=\"org-org-block\"\u003e\u003cspan class=\"org-string\"\u003e\"I am \"\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"org-org-block-end-line\"\u003e#+end_src\u003c/span\u003e\n\n\u003cspan class=\"org-org-meta-line\"\u003e#+header: :noweb-ref __NREF__child-block-2\u003c/span\u003e\n\u003cspan class=\"org-org-block-begin-line\"\u003e#+begin_src bash\u003c/span\u003e\n\u003cspan class=\"org-org-block\"\u003e\u003cspan class=\"org-builtin\"\u003eecho\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"org-org-block\"\u003e \u003c/span\u003e\u003cspan class=\"org-org-block\"\u003e\u003cspan class=\"org-string\"\u003e\"child 2\"\u003c/span\u003e\u003c/span\u003e\n\u003cspan class=\"org-org-block-end-line\"\u003e#+end_src\u003c/span\u003e\n\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003e\nThis example illustrates the two ways to define a child block: either as a\nsingle code block with \u003ccode\u003e#+name: __NREF__foo\u003c/code\u003e, or as multiple blocks with\n\u003ccode\u003e#+header: :noweb-ref __NREF__foo\u003c/code\u003e. Lilac calls them \u003ca href=\"#org000000b\"\u003emonoblocks\u003c/a\u003e and \u003ca href=\"#org000000d\"\u003epolyblocks\u003c/a\u003e\nrespectively. Polyblocks are concatenated together in the order they appear in\nthe overall Org file; this final concatenated version is what gets inserted into\nthe Noweb reference in the parent block.\n\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Examples-of-source-code-blocks\" class=\"outline-4\"\u003e\n\u003ch4 id=\"h-Examples-of-source-code-blocks\"\u003e\u003cspan class=\"section-number-4\"\u003e2.1.1.\u003c/span\u003e Examples of source code blocks\u003c/h4\u003e\n\u003cdiv class=\"outline-text-4\" id=\"text-h-Examples-of-source-code-blocks\"\u003e\n\u003cp\u003e\nBelow is an example of the usage described above. Notice how the child blocks\nreferenced in the parent block are linked to their definitions.\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cdiv class=\"lilac-pre-with-caption\"\u003e\u003cdiv class=\"lilac-caption\"\u003e\u003clabel class=\"org-src-name\"\u003eexample-parent-block\u003c/label\u003e\u003cspan class=\"lilac-caption-link-symbol\"\u003e\u003ca href=\"#example-parent-block\"\u003e\u0026#x1f517;\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cpre class=\"src src-bash\" id=\"example-parent-block\"\u003e\u003cspan class=\"org-builtin\"\u003eecho\u003c/span\u003e \u003cspan class=\"org-string\"\u003e\"Hello from the parent block\"\u003c/span\u003e\n\u003cspan class=\"lilac-child-link-from-parent\"\u003e\u003ca href=\"#__NREF__example-child-block-foo\"\u003eexample-child-block-foo\u003c/a\u003e\u003c/span\u003e\n\u003cspan class=\"org-builtin\"\u003eecho\u003c/span\u003e \u003cspan class=\"org-string\"\u003e\"\"\u003c/span\u003e\n\u003cspan class=\"lilac-child-link-from-parent\"\u003e\u003ca href=\"#__NREF__example-child-block-bar-1\"\u003eexample-child-block-bar\u003c/a\u003e\u003c/span\u003e\n\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003e\nBelow are the child blocks. The first is a monoblock. Every child block's name\nlinks back up to the parent block where it is referenced.\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cdiv class=\"lilac-pre-with-caption\"\u003e\u003cdiv class=\"lilac-caption\"\u003e\u003cspan class=\"lilac-caption-parent-link\"\u003e\u003ca href=\"#example-parent-block\"\u003eexample-child-block-foo\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"lilac-caption-link-symbol\"\u003e\u003ca href=\"#__NREF__example-child-block-foo\"\u003e\u0026#x1f517;\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cpre class=\"src src-bash\" id=\"__NREF__example-child-block-foo\"\u003e\u003cspan class=\"org-builtin\"\u003eecho\u003c/span\u003e \u003cspan class=\"org-string\"\u003e\"I am child 1\"\u003c/span\u003e\n\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003e\nThe blocks below are polyblocks.\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cdiv class=\"lilac-pre-with-caption\"\u003e\u003cdiv class=\"lilac-caption\"\u003e\u003cspan class=\"lilac-caption-parent-link\"\u003e\u003ca href=\"#example-parent-block\"\u003eexample-child-block-bar\u003c/a\u003e\u003c/span\u003e(1/2) \u003cspan class=\"lilac-caption-link-symbol\"\u003e\u003ca href=\"#__NREF__example-child-block-bar-1\"\u003e\u0026#x1f517;\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cpre class=\"src src-bash\" id=\"__NREF__example-child-block-bar-1\"\u003e\u003cspan class=\"org-builtin\"\u003eecho\u003c/span\u003e -n \u003cspan class=\"org-string\"\u003e\"I am \"\u003c/span\u003e\n\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003e\nNote the fraction after the name which denotes the position of the block in the\noverall polyblock \"chain\".\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cdiv class=\"lilac-pre-with-caption\"\u003e\u003cdiv class=\"lilac-caption\"\u003e\u003cspan class=\"lilac-caption-parent-link\"\u003e\u003ca href=\"#example-parent-block\"\u003eexample-child-block-bar\u003c/a\u003e\u003c/span\u003e(2/2) \u003cspan class=\"lilac-caption-link-symbol\"\u003e\u003ca href=\"#__NREF__example-child-block-bar-2\"\u003e\u0026#x1f517;\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cpre class=\"src src-bash\" id=\"__NREF__example-child-block-bar-2\"\u003e\u003cspan class=\"org-builtin\"\u003eecho\u003c/span\u003e \u003cspan class=\"org-string\"\u003e\"child 2\"\u003c/span\u003e\n\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Multi-parent-child-blocks\" class=\"outline-5\"\u003e\n\u003ch5 id=\"h-Multi-parent-child-blocks\"\u003e\u003cspan class=\"section-number-5\"\u003e2.1.1.1.\u003c/span\u003e Multi-parent child blocks\u003c/h5\u003e\n\u003cdiv class=\"outline-text-5\" id=\"text-h-Multi-parent-child-blocks\"\u003e\n\u003cp\u003e\nSometimes a piece of code will be reused in different source code blocks. You\ncan think of it as constants in a programming language, but in LP the concept\nextends to any arbitrary piece of text.\n\u003c/p\u003e\n\n\u003cp\u003e\nBelow is an example where we define a child block once\u0026#x2026;\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cdiv class=\"lilac-pre-with-caption\"\u003e\u003cdiv class=\"lilac-caption\"\u003e\u003cspan class=\"lilac-caption-parent-link\"\u003e\u003ca href=\"#example-parent-1\"\u003eexample-child-block-baz\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"lilac-caption-parent-link\"\u003e\u003ca href=\"#example-parent-2\"\u003e2\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"lilac-caption-link-symbol\"\u003e\u003ca href=\"#__NREF__example-child-block-baz\"\u003e\u0026#x1f517;\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cpre class=\"src src-bash\" id=\"__NREF__example-child-block-baz\"\u003e\u003cspan class=\"org-builtin\"\u003eecho\u003c/span\u003e \u003cspan class=\"org-string\"\u003e\"Hello from child block baz\"\u003c/span\u003e\n\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003e\n\u0026#x2026;but where we also reuse it (reference it) in different parent blocks.\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cdiv class=\"lilac-pre-with-caption\"\u003e\u003cdiv class=\"lilac-caption\"\u003e\u003clabel class=\"org-src-name\"\u003eexample-parent-1\u003c/label\u003e\u003cspan class=\"lilac-caption-link-symbol\"\u003e\u003ca href=\"#example-parent-1\"\u003e\u0026#x1f517;\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cpre class=\"src src-bash\" id=\"example-parent-1\"\u003e\u003cspan class=\"org-builtin\"\u003eecho\u003c/span\u003e \u003cspan class=\"org-string\"\u003e\"Hello from parent 1\"\u003c/span\u003e\n\u003cspan class=\"lilac-child-link-from-parent\"\u003e\u003ca href=\"#__NREF__example-child-block-baz\"\u003eexample-child-block-baz\u003c/a\u003e\u003c/span\u003e\n\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"org-src-container\"\u003e\u003cdiv class=\"lilac-pre-with-caption\"\u003e\u003cdiv class=\"lilac-caption\"\u003e\u003clabel class=\"org-src-name\"\u003eexample-parent-2\u003c/label\u003e\u003cspan class=\"lilac-caption-link-symbol\"\u003e\u003ca href=\"#example-parent-2\"\u003e\u0026#x1f517;\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cpre class=\"src src-bash\" id=\"example-parent-2\"\u003e\u003cspan class=\"org-builtin\"\u003eecho\u003c/span\u003e \u003cspan class=\"org-string\"\u003e\"Hello from parent 2\"\u003c/span\u003e\n\u003cspan class=\"lilac-child-link-from-parent\"\u003e\u003ca href=\"#__NREF__example-child-block-baz\"\u003eexample-child-block-baz\u003c/a\u003e\u003c/span\u003e\n\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003e\nNotice that the child block has an additional link named \"2\", which points to\nthe second parent that references this block (the first parent is linked by the\nchild block name itself, as in the previous example). If it is referenced in\nadditional parent blocks, they will show up as links \"3\", \"4\", etc.\n\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Examples\" class=\"outline-3\"\u003e\n\u003ch3 id=\"h-Examples\"\u003e\u003cspan class=\"section-number-3\"\u003e2.2.\u003c/span\u003e Examples\u003c/h3\u003e\n\u003cdiv class=\"outline-text-3\" id=\"text-h-Examples\"\u003e\n\u003cp\u003e\nHere we have some examples of how certain Org mode features look when exported\nto HTML with Lilac. Each section has an orgmode input and HTML output. The input\nis what you type into your \u003ccode\u003e*.org\u003c/code\u003e (plaintext) file, and the output is what you\nget in HTML after it is rendered with Lilac's publishing function,\n\u003ccode\u003e(lilac-publish)\u003c/code\u003e.\n\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Code-blocks\" class=\"outline-4\"\u003e\n\u003ch4 id=\"h-Code-blocks\"\u003e\u003cspan class=\"section-number-4\"\u003e2.2.1.\u003c/span\u003e Code blocks\u003c/h4\u003e\n\u003cdiv class=\"outline-text-4\" id=\"text-h-Code-blocks\"\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Source-blocks\" class=\"outline-5\"\u003e\n\u003ch5 id=\"h-Source-blocks\"\u003e\u003cspan class=\"section-number-5\"\u003e2.2.1.1.\u003c/span\u003e Source blocks\u003c/h5\u003e\n\u003cdiv class=\"outline-text-5\" id=\"text-h-Source-blocks\"\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Plain\" class=\"outline-6\"\u003e\n\u003ch6 id=\"h-Plain\"\u003e\u003cspan class=\"section-number-6\"\u003e2.2.1.1.1.\u003c/span\u003e Plain\u003c/h6\u003e\n\u003cdiv class=\"outline-text-6\" id=\"text-h-Plain\"\u003e\n\u003cp\u003e\nOrgmode input:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cpre class=\"src src-plaintext\" id=\"nil-2\"\u003e#+begin_src python\ndef foo():\n    return 42\n#+end_src\n\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\nRendered HTML output:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cpre class=\"src src-python\" id=\"nil-3\"\u003e\u003cspan class=\"org-keyword\"\u003edef\u003c/span\u003e \u003cspan class=\"org-function-name\"\u003efoo\u003c/span\u003e():\n    \u003cspan class=\"org-keyword\"\u003ereturn\u003c/span\u003e 42\n\u003c/pre\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Monoblock\" class=\"outline-6\"\u003e\n\u003ch6 id=\"h-Monoblock\"\u003e\u003cspan class=\"section-number-6\"\u003e2.2.1.1.2.\u003c/span\u003e Monoblock\u003c/h6\u003e\n\u003cdiv class=\"outline-text-6\" id=\"text-h-Monoblock\"\u003e\n\u003cp\u003e\nOrgmode input:\n\u003c/p\u003e\n\n\u003cdiv class=\"sidenote\" id=\"org0000021\"\u003e\n\u003cp\u003e\nAlthough the \u003ccode\u003eex_monoblock\u003c/code\u003e text is linkified here, ignore it. The text that you\nneed to write in the Orgmode input is literally \u003ccode\u003e__NREF__ex_monoblock\u003c/code\u003e. Lilac\ncurrently doesn't understand that the block here is an example and that it\nshould not linkify it.\n\u003c/p\u003e\n\n\u003c/div\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cpre class=\"src src-plaintext\" id=\"nil-4\"\u003e#+caption: A parent block.\n#+begin_src python\ndef foo():\n    \u003cspan class=\"lilac-child-link-from-parent\"\u003e\u003ca href=\"#__NREF__ex_monoblock\"\u003eex_monoblock\u003c/a\u003e\u003c/span\u003e\n    return 42\n#+end_src\n\n#+name: \u003cspan class=\"lilac-child-link-from-parent\"\u003e\u003ca href=\"#__NREF__ex_monoblock\"\u003eex_monoblock\u003c/a\u003e\u003c/span\u003e\n#+begin_src python\nprint(\"hello world\")\n#+end_src\n\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\nRendered HTML output:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cdiv class=\"lilac-pre-with-caption\"\u003e\u003cdiv class=\"lilac-caption\"\u003e\u003clabel class=\"org-src-name\"\u003eA parent block.\u003c/label\u003e\u003cspan class=\"lilac-caption-link-symbol\"\u003e\u003ca href=\"#A-parent-block-1\"\u003e\u0026#x1f517;\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cpre class=\"src src-python\" id=\"A-parent-block-1\"\u003e\u003cspan class=\"org-keyword\"\u003edef\u003c/span\u003e \u003cspan class=\"org-function-name\"\u003efoo\u003c/span\u003e():\n    \u003cspan class=\"lilac-child-link-from-parent\"\u003e\u003ca href=\"#__NREF__ex_monoblock\"\u003eex_monoblock\u003c/a\u003e\u003c/span\u003e\n    \u003cspan class=\"org-keyword\"\u003ereturn\u003c/span\u003e 42\n\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"sidenote\" id=\"org0000026\"\u003e\n\u003cp\u003e\nSimilarly, the \u003ccode\u003e2\u003c/code\u003e link is only here because Lilac thinks that this child block\nis referenced in multiple blocks. In a real example this \u003ccode\u003e2\u003c/code\u003e would not show up.\n\u003c/p\u003e\n\n\u003c/div\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cdiv class=\"lilac-pre-with-caption\"\u003e\u003cdiv class=\"lilac-caption\"\u003e\u003cspan class=\"lilac-caption-parent-link\"\u003e\u003ca href=\"#nil-4\"\u003eex_monoblock\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"lilac-caption-parent-link\"\u003e\u003ca href=\"#A-parent-block-1\"\u003e2\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"lilac-caption-link-symbol\"\u003e\u003ca href=\"#__NREF__ex_monoblock\"\u003e\u0026#x1f517;\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cpre class=\"src src-python\" id=\"__NREF__ex_monoblock\"\u003e\u003cspan class=\"org-builtin\"\u003eprint\u003c/span\u003e(\u003cspan class=\"org-string\"\u003e\"hello world\"\u003c/span\u003e)\n\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Monoblock--evaluation-result-s-value\" class=\"outline-6\"\u003e\n\u003ch6 id=\"h-Monoblock--evaluation-result-s-value\"\u003e\u003cspan class=\"section-number-6\"\u003e2.2.1.1.3.\u003c/span\u003e Monoblock (evaluation result's value)\u003c/h6\u003e\n\u003cdiv class=\"outline-text-6\" id=\"text-h-Monoblock--evaluation-result-s-value\"\u003e\n\u003cp\u003e\nSometimes it's useful to evaluate code and to use the resulting value. This is\nin contrast to always inserting the contents of the source code blocks\nliterally.\n\u003c/p\u003e\n\n\u003cp\u003e\nHowever you must make sure that the referenced source code block's programming\nlanguage is added to the list of \u003ccode\u003eorg-babel-do-load-languages\u003c/code\u003e. Otherwise the\nevaluation will be forbidden.\n\u003c/p\u003e\n\n\u003cp\u003e\nOrgmode input:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cpre class=\"src src-plaintext\" id=\"nil-5\"\u003e#+name: __NREF__ex_evaluate_me\n#+begin_src python :exports none\nreturn 4 * 10 + 2\n#+end_src\n\n#+caption: This uses an evaluation result.\n#+begin_src python :noweb yes\nprint(\"The answer is \u0026lt;\u0026lt;__NREF__ex_evaluate_me()\u0026gt;\u0026gt;\")\n#+end_src\n\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\nRendered HTML output:\n\u003c/p\u003e\n\n\u003cdiv class=\"sidenote\" id=\"org000002b\"\u003e\n\u003cp\u003e\nThe \"42\" here is computed by the Python interpreter and then injected into the\nprint statement's string argument.\n\u003c/p\u003e\n\n\u003c/div\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cdiv class=\"lilac-pre-with-caption\"\u003e\u003cdiv class=\"lilac-caption\"\u003e\u003clabel class=\"org-src-name\"\u003eThis uses an evaluation result.\u003c/label\u003e\u003cspan class=\"lilac-caption-link-symbol\"\u003e\u003ca href=\"#This-uses-an-evaluation-result\"\u003e\u0026#x1f517;\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cpre class=\"src src-python\" id=\"This-uses-an-evaluation-result\"\u003e\u003cspan class=\"org-builtin\"\u003eprint\u003c/span\u003e(\u003cspan class=\"org-string\"\u003e\"The answer is 42\"\u003c/span\u003e)\n\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Monoblock--pass-argument-to-source-code-block\" class=\"outline-6\"\u003e\n\u003ch6 id=\"h-Monoblock--pass-argument-to-source-code-block\"\u003e\u003cspan class=\"section-number-6\"\u003e2.2.1.1.4.\u003c/span\u003e Monoblock (pass argument to source code block)\u003c/h6\u003e\n\u003cdiv class=\"outline-text-6\" id=\"text-h-Monoblock--pass-argument-to-source-code-block\"\u003e\n\u003cp\u003e\nHere we have an example of passing in an argument to a source code block.\n\u003c/p\u003e\n\n\u003cp\u003e\nOrgmode input:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cpre class=\"src src-plaintext\" id=\"nil-6\"\u003e#+name: __NREF__ex_take_argument\n#+begin_src python :exports none :var my_var=\"foo\"\nreturn \"Hello, my name is \" + my_var\n#+end_src\n\n#+caption: Passing string args.\n#+begin_src python :noweb yes\nprint(\"Call without explicit argument: __NREF__ex_take_argument()\")\nprint(\"Call with explicit argument: __NREF__ex_take_argument(my_var=\"bar\")\")\n#+end_src\n\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\nRendered HTML output:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cdiv class=\"lilac-pre-with-caption\"\u003e\u003cdiv class=\"lilac-caption\"\u003e\u003clabel class=\"org-src-name\"\u003ePassing string args.\u003c/label\u003e\u003cspan class=\"lilac-caption-link-symbol\"\u003e\u003ca href=\"#Passing-string-args\"\u003e\u0026#x1f517;\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cpre class=\"src src-python\" id=\"Passing-string-args\"\u003e\u003cspan class=\"org-builtin\"\u003eprint\u003c/span\u003e(\u003cspan class=\"org-string\"\u003e\"Call without explicit argument: Hello, my name is foo\"\u003c/span\u003e)\n\u003cspan class=\"org-builtin\"\u003eprint\u003c/span\u003e(\u003cspan class=\"org-string\"\u003e\"Call with explicit argument: Hello, my name is bar\"\u003c/span\u003e)\n\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Polyblock\" class=\"outline-6\"\u003e\n\u003ch6 id=\"h-Polyblock\"\u003e\u003cspan class=\"section-number-6\"\u003e2.2.1.1.5.\u003c/span\u003e Polyblock\u003c/h6\u003e\n\u003cdiv class=\"outline-text-6\" id=\"text-h-Polyblock\"\u003e\n\u003cp\u003e\nOrgmode input:\n\u003c/p\u003e\n\n\u003cdiv class=\"sidenote\" id=\"org0000032\"\u003e\n\u003cp\u003e\nLike above for monoblocks, Lilac needlessly linkifies the source code body text\nof the parent block when it doesn't need to (as this is only an illustrative\nexample).\n\u003c/p\u003e\n\n\u003c/div\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cpre class=\"src src-plaintext\" id=\"nil-7\"\u003e#+caption: A parent block.\n#+begin_src python\ndef foo():\n    \u003cspan class=\"lilac-child-link-from-parent\"\u003e\u003ca href=\"#__NREF__ex_polyblock-1\"\u003eex_polyblock\u003c/a\u003e\u003c/span\u003e\n    return 42\n#+end_src\n\n#+header: :noweb-ref \u003cspan class=\"lilac-child-link-from-parent\"\u003e\u003ca href=\"#__NREF__ex_polyblock-1\"\u003eex_polyblock\u003c/a\u003e\u003c/span\u003e\n#+begin_src python\nprint(\"hello world\")\n#+end_src\n\nSome intervening text.\n\n#+header: :noweb-ref \u003cspan class=\"lilac-child-link-from-parent\"\u003e\u003ca href=\"#__NREF__ex_polyblock-1\"\u003eex_polyblock\u003c/a\u003e\u003c/span\u003e\n#+begin_src python\nprint(\"abcdefg\")\n#+end_src\n\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\nRendered HTML output:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cdiv class=\"lilac-pre-with-caption\"\u003e\u003cdiv class=\"lilac-caption\"\u003e\u003clabel class=\"org-src-name\"\u003eA parent block.\u003c/label\u003e\u003cspan class=\"lilac-caption-link-symbol\"\u003e\u003ca href=\"#A-parent-block-2\"\u003e\u0026#x1f517;\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cpre class=\"src src-python\" id=\"A-parent-block-2\"\u003e\u003cspan class=\"org-keyword\"\u003edef\u003c/span\u003e \u003cspan class=\"org-function-name\"\u003efoo\u003c/span\u003e():\n    \u003cspan class=\"lilac-child-link-from-parent\"\u003e\u003ca href=\"#__NREF__ex_polyblock-1\"\u003eex_polyblock\u003c/a\u003e\u003c/span\u003e\n    \u003cspan class=\"org-keyword\"\u003ereturn\u003c/span\u003e 42\n\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"org-src-container\"\u003e\u003cdiv class=\"lilac-pre-with-caption\"\u003e\u003cdiv class=\"lilac-caption\"\u003e\u003cspan class=\"lilac-caption-parent-link\"\u003e\u003ca href=\"#nil-7\"\u003eex_polyblock\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"lilac-caption-parent-link\"\u003e\u003ca href=\"#A-parent-block-2\"\u003e2\u003c/a\u003e\u003c/span\u003e(1/2) \u003cspan class=\"lilac-caption-link-symbol\"\u003e\u003ca href=\"#__NREF__ex_polyblock-1\"\u003e\u0026#x1f517;\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cpre class=\"src src-python\" id=\"__NREF__ex_polyblock-1\"\u003e\u003cspan class=\"org-builtin\"\u003eprint\u003c/span\u003e(\u003cspan class=\"org-string\"\u003e\"hello world\"\u003c/span\u003e)\n\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003e\nSome intervening text.\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cdiv class=\"lilac-pre-with-caption\"\u003e\u003cdiv class=\"lilac-caption\"\u003e\u003cspan class=\"lilac-caption-parent-link\"\u003e\u003ca href=\"#nil-7\"\u003eex_polyblock\u003c/a\u003e\u003c/span\u003e\u003cspan class=\"lilac-caption-parent-link\"\u003e\u003ca href=\"#A-parent-block-2\"\u003e2\u003c/a\u003e\u003c/span\u003e(2/2) \u003cspan class=\"lilac-caption-link-symbol\"\u003e\u003ca href=\"#__NREF__ex_polyblock-2\"\u003e\u0026#x1f517;\u003c/a\u003e\u003c/span\u003e\u003c/div\u003e\u003cpre class=\"src src-python\" id=\"__NREF__ex_polyblock-2\"\u003e\u003cspan class=\"org-builtin\"\u003eprint\u003c/span\u003e(\u003cspan class=\"org-string\"\u003e\"abcdefg\"\u003c/span\u003e)\n\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Linking-to-a-line-in-the-code-block-body\" class=\"outline-6\"\u003e\n\u003ch6 id=\"h-Linking-to-a-line-in-the-code-block-body\"\u003e\u003cspan class=\"section-number-6\"\u003e2.2.1.1.6.\u003c/span\u003e Linking to a line in the code block body\u003c/h6\u003e\n\u003cdiv class=\"outline-text-6\" id=\"text-h-Linking-to-a-line-in-the-code-block-body\"\u003e\n\u003cdiv class=\"sidenote\" id=\"org000003b\"\u003e\n\u003cp\u003e\nThe \u003ccode\u003e-r\u003c/code\u003e flag removes these \u003ccode\u003e#ref:...\u003c/code\u003e labels from the source code. The \u003ccode\u003e-l\u003c/code\u003e\nflag changes the format. In this case we make the format use a leading \u003ccode\u003e#\u003c/code\u003e\ncharacter because that's the comment character in Python. This way they appear\nas comments when we are inserting them into the block while still in Orgmode.\n\u003c/p\u003e\n\n\u003cp\u003e\nThese links are documented in Org's \u003ca href=\"https://orgmode.org/manual/Literal-Examples.html\"\u003eLiteral Examples\u003c/a\u003e section.\n\u003c/p\u003e\n\n\u003c/div\u003e\n\n\u003cp\u003e\nOrgmode input:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cpre class=\"src src-plaintext\" id=\"nil-8\"\u003e#+begin_src python -r -l \"#ref:%s\"\nprint(\"foo\")\nprint(\"hi\")     #ref:embedded-link\nprint(\"bar\")\n#+end_src\n\nThe line at [[(embedded-link)][=embedded-link=]] prints \"hi\".\n\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\nRendered HTML output:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cpre class=\"src src-python\" id=\"nil-9\"\u003e\u003cspan class=\"org-builtin\"\u003eprint\u003c/span\u003e(\u003cspan class=\"org-string\"\u003e\"foo\"\u003c/span\u003e)\n\u003cspan id=\"coderef-embedded-link\" class=\"coderef-off\"\u003e\u003cspan class=\"org-builtin\"\u003eprint\u003c/span\u003e(\u003cspan class=\"org-string\"\u003e\"hi\"\u003c/span\u003e)\u003c/span\u003e\n\u003cspan class=\"org-builtin\"\u003eprint\u003c/span\u003e(\u003cspan class=\"org-string\"\u003e\"bar\"\u003c/span\u003e)\n\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\nThe line at \u003ca href=\"#coderef-embedded-link\" class=\"coderef\" onmouseover=\"CodeHighlightOn(this, 'coderef-embedded-link');\" onmouseout=\"CodeHighlightOff(this, 'coderef-embedded-link');\"\u003e\u003ccode\u003eembedded-link\u003c/code\u003e\u003c/a\u003e prints \"hi\".\n\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Example-blocks\" class=\"outline-5\"\u003e\n\u003ch5 id=\"h-Example-blocks\"\u003e\u003cspan class=\"section-number-5\"\u003e2.2.1.2.\u003c/span\u003e Example blocks\u003c/h5\u003e\n\u003cdiv class=\"outline-text-5\" id=\"text-h-Example-blocks\"\u003e\n\u003cp\u003e\nOrgmode input:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cpre class=\"src src-plaintext\" id=\"nil-10\"\u003e#+begin_example\nHello world.\nFoo bar.\n#+end_example\n\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\nRendered HTML output:\n\u003c/p\u003e\n\n\u003cpre class=\"example\" id=\"org0000042\"\u003e\nHello world.\nFoo bar.\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Quote-blocks\" class=\"outline-5\"\u003e\n\u003ch5 id=\"h-Quote-blocks\"\u003e\u003cspan class=\"section-number-5\"\u003e2.2.1.3.\u003c/span\u003e Quote blocks\u003c/h5\u003e\n\u003cdiv class=\"outline-text-5\" id=\"text-h-Quote-blocks\"\u003e\n\u003cp\u003e\nOrgmode input:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cpre class=\"src src-plaintext\" id=\"nil-11\"\u003e#+begin_quote\nHello world.\nFoo bar.\n#+end_quote\n\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\nRendered HTML output:\n\u003c/p\u003e\n\n\u003cblockquote\u003e\n\u003cp\u003e\nHello world.\nFoo bar.\n\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Side-notes\" class=\"outline-4\"\u003e\n\u003ch4 id=\"h-Side-notes\"\u003e\u003cspan class=\"section-number-4\"\u003e2.2.2.\u003c/span\u003e Side notes\u003c/h4\u003e\n\u003cdiv class=\"outline-text-4\" id=\"text-h-Side-notes\"\u003e\n\u003cp\u003e\nNote that Lilac only adds some special CSS styling to side notes. Orgmode is\ngenerous with source code blocks and accepts any \u003ccode\u003e#+begin_foo\u003c/code\u003e and \u003ccode\u003e#+end_foo\u003c/code\u003e\nlines.\n\u003c/p\u003e\n\n\u003cp\u003e\nOrgmode input:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cpre class=\"src src-plaintext\" id=\"nil-12\"\u003e#+begin_sidenote\nHello world.\nFoo bar.\n#+end_sidenote\n\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\nRendered HTML output (see right hand margin):\n\u003c/p\u003e\n\n\u003cdiv class=\"sidenote\" id=\"org0000047\"\u003e\n\u003cp\u003e\nHello world.\nFoo bar.\n\u003c/p\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Math--MathJax\" class=\"outline-4\"\u003e\n\u003ch4 id=\"h-Math--MathJax\"\u003e\u003cspan class=\"section-number-4\"\u003e2.2.3.\u003c/span\u003e Math (MathJax)\u003c/h4\u003e\n\u003cdiv class=\"outline-text-4\" id=\"text-h-Math--MathJax\"\u003e\n\u003cp\u003e\nThis is not a Lilac feature (it's just part of Org mode), but it's worth\ndemonstrating how it looks.\n\u003c/p\u003e\n\n\u003cp\u003e\nOrgmode input:\n\u003c/p\u003e\n\n\u003cdiv class=\"org-src-container\"\u003e\u003cpre class=\"src src-plaintext\" id=\"nil-13\"\u003eThe equation \\( E = mc^2 \\) is probably the most famous equation in the world,\nperhaps more famous than the Pythagorean theorem\n\n\\[\na^2 + b^2 = c^2.\n\\]\n\nThe equation\n\n\\[\n\\frac{\\pi^2}{6} = \\sum_{n=1}^\\infty \\frac{1}{n^2} = \\\n\\frac{1}{1^2} + \\frac{1}{2^2} + \\frac{1}{3^2} + \\cdots\n\\]\n\nwas first demonstrated by Leonhard Euler in 1734. Here's another equation,\n\n#+name: eqn:1\n\\begin{equation}\n\\pi = \\sum_{k = 0}^{\\infty}\\left[\\frac{1}{16^k} \\\n\\left(\\frac{4}{8k+1}-\\frac{2}{8k+4}-\\frac{1}{8k + 5}-\\frac{1}{8k+6}\\right)\\right]\n\\end{equation}\n\nwhich is known as the Bailey-Borwein-Plouffe formula and can compute arbitrary\ndigits of \\(\\pi\\). A variant of this equation is as follows\n\n#+name: eqn:2\n\\begin{equation}\n\\pi = \\frac1{2^6} \\sum_{n=0}^\\infty \\frac{(-1)^n}{2^{10n}} \\\n\\left(-\\frac{2^5}{4n+1} - \\frac1{4n+3} + \\frac{2^8}{10n+1} - \\\n\\frac{2^6}{10n+3} - \\frac{2^2}{10n+5} - \\frac{2^2}{10n+7} + \\\n\\frac1{10n+9} \\right)\n\\end{equation}\n\nand is known as the Bellard's formula. Equation [[eqn:2]] is too wide so\nMathJax breaks it over multiple lines. Below is a version where we do the line\nbreaking ourselves.\n\n\\begin{equation}\n\\pi = \\frac1{2^6} \\sum_{n=0}^\\infty \\frac{(-1)^n}{2^{10n}} \\\n\\left(-\\frac{2^5}{4n+1} - \\frac1{4n+3} + \\frac{2^8}{10n+1} - \\\\\n\\frac{2^6}{10n+3} - \\frac{2^2}{10n+5} - \\frac{2^2}{10n+7} + \\\n\\frac1{10n+9} \\right)\n\\end{equation}\n\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\nRendered HTML output:\n\u003c/p\u003e\n\n\u003cp\u003e\nThe equation \\( E = mc^2 \\) is probably the most famous equation in the world,\nperhaps more famous than the Pythagorean theorem\n\u003c/p\u003e\n\n\u003cp\u003e\n\\[\na^2 + b^2 = c^2.\n\\]\n\u003c/p\u003e\n\n\u003cp\u003e\nThe equation\n\u003c/p\u003e\n\n\u003cp\u003e\n\\[\n\\frac{\\pi^2}{6} = \\sum_{n=1}^\\infty \\frac{1}{n^2} = \\\n\\frac{1}{1^2} + \\frac{1}{2^2} + \\frac{1}{3^2} + \\cdots\n\\]\n\u003c/p\u003e\n\n\u003cp\u003e\nwas first demonstrated by Leonhard Euler in 1734. Here's another equation,\n\u003c/p\u003e\n\n\\begin{equation}\n\\label{org000004a}\n\\pi = \\sum_{k = 0}^{\\infty}\\left[\\frac{1}{16^k} \\\n\\left(\\frac{4}{8k+1}-\\frac{2}{8k+4}-\\frac{1}{8k + 5}-\\frac{1}{8k+6}\\right)\\right]\n\\end{equation}\n\n\u003cp\u003e\nwhich is known as the Bailey-Borwein-Plouffe formula and can compute arbitrary\ndigits of \\(\\pi\\). A variant of this equation is as follows\n\u003c/p\u003e\n\n\\begin{equation}\n\\label{org000004c}\n\\pi = \\frac1{2^6} \\sum_{n=0}^\\infty \\frac{(-1)^n}{2^{10n}} \\\n\\left(-\\frac{2^5}{4n+1} - \\frac1{4n+3} + \\frac{2^8}{10n+1} - \\\n\\frac{2^6}{10n+3} - \\frac{2^2}{10n+5} - \\frac{2^2}{10n+7} + \\\n\\frac1{10n+9} \\right)\n\\end{equation}\n\n\u003cp\u003e\nand is known as the Bellard's formula. Equation \\eqref{org000004c} is too wide, though. Below\nis a version where we insert manual line breaks.\n\u003c/p\u003e\n\n\\begin{equation}\n\\pi = \\frac1{2^6} \\sum_{n=0}^\\infty \\frac{(-1)^n}{2^{10n}} \\\n\\left(-\\frac{2^5}{4n+1} - \\frac1{4n+3} + \\frac{2^8}{10n+1} - \\\\\n\\frac{2^6}{10n+3} - \\frac{2^2}{10n+5} - \\frac{2^2}{10n+7} + \\\n\\frac1{10n+9} \\right)\n\\end{equation}\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Known-limitations\" class=\"outline-2\"\u003e\n\u003ch2 id=\"h-Known-limitations\"\u003e\u003cspan class=\"section-number-2\"\u003e3.\u003c/span\u003e Known limitations\u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-h-Known-limitations\"\u003e\n\u003cp\u003e\nThese limitations stem from the fact that they are not natively supported by Org\nmode.\n\u003c/p\u003e\n\n\u003cdl class=\"org-dl\"\u003e\n\u003cdiv class=\"lilac-description-list-entry\"\u003e\u003cdt\u003e\u003cb\u003eSource code blocks must reference other blocks in the same file\u003c/b\u003e\u003c/dt\u003e\u003cdd\u003eIf you're\nusing source code blocks, and they refer to other blocks, those referenced\nblocks must be defined in the same Org file. In practice this isn't a big\nproblem.\u003c/dd\u003e\u003c/div\u003e\n\u003c/dl\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Developer-Guide\" class=\"outline-2\"\u003e\n\u003ch2 id=\"h-Developer-Guide\"\u003e\u003cspan class=\"section-number-2\"\u003e4.\u003c/span\u003e Developer Guide\u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-h-Developer-Guide\"\u003e\n\u003cp\u003e\nIf you are interested in contributing back to this project, or if you are\ncurious to see how everything works, have a look at the \u003ca href=\"developer-guide.html\"\u003eDeveloper Guide\u003c/a\u003e.\n\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Glossary\" class=\"outline-2\"\u003e\n\u003ch2 id=\"h-Glossary\"\u003e\u003cspan class=\"section-number-2\"\u003e5.\u003c/span\u003e Glossary\u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-h-Glossary\"\u003e\n\u003cdl class=\"org-dl\"\u003e\n\u003cdiv class=\"lilac-description-list-entry\" id=\"org000004e\"\u003e\u003cdt\u003e \u003cb\u003eliterate document\u003c/b\u003e\u003c/dt\u003e\u003cdd\u003eA file or collection of\nfiles that include both source code and prose to explain it. Well-known\nformats include Noweb files (\u003ccode\u003e*.nw\u003c/code\u003e) and Org mode files (\u003ccode\u003e*.org\u003c/code\u003e).\u003c/dd\u003e\u003c/div\u003e\n\u003cdiv class=\"lilac-description-list-entry\" id=\"org000000b\"\u003e\u003cdt\u003e \u003cb\u003emonoblock\u003c/b\u003e\u003c/dt\u003e\u003cdd\u003ean Org mode source code block with a\n\u003ccode\u003e#+name: ...\u003c/code\u003e field. This block is an independent block and there are no other\nblocks with the same name.\u003c/dd\u003e\u003c/div\u003e\n\u003cdiv class=\"lilac-description-list-entry\" id=\"org0000001\"\u003e\u003cdt\u003e \u003cb\u003eNoweb\u003c/b\u003e\u003c/dt\u003e\u003cdd\u003eA literate programming tool from 1989 that\nstill works and from which \u003ca href=\"#org0000050\"\u003eOrg mode\u003c/a\u003e borrows heavily using \u003ca href=\"#org0000052\"\u003eNoweb-style\nreferences\u003c/a\u003e. See \u003ca href=\"https://en.wikipedia.org/wiki/Noweb\"\u003eWikipedia\u003c/a\u003e.\u003c/dd\u003e\u003c/div\u003e\n\u003cdiv class=\"lilac-description-list-entry\" id=\"org0000052\"\u003e\u003cdt\u003e \u003cb\u003enoweb-ref\u003c/b\u003e\u003c/dt\u003e\u003cdd\u003eaka \"Noweb-style reference\". A\nNoweb-style reference is just a name (string) that refers to a monoblock or\npolyblock. See \u003ca href=\"https://orgmode.org/manual/Noweb-Reference-Syntax.html\"\u003ethe Org manual\u003c/a\u003e.\u003c/dd\u003e\u003c/div\u003e\n\u003cdiv class=\"lilac-description-list-entry\" id=\"org0000050\"\u003e\u003cdt\u003e \u003cb\u003eOrg mode\u003c/b\u003e\u003c/dt\u003e\u003cdd\u003eAn Emacs major mode for \u003ccode\u003e*.org\u003c/code\u003e files,\nwhere \"major mode\" means that it provides things like syntax highlighting and\nkeyboard shortcuts for \u003ccode\u003e*.org\u003c/code\u003e text files if you are using Emacs. For Lilac,\nthe important thing is that we use Org mode as a literate programming tool.\nSee \u003ca href=\"https://orgmode.org/\"\u003eOrg mode\u003c/a\u003e.\u003c/dd\u003e\u003c/div\u003e\n\u003cdiv class=\"lilac-description-list-entry\" id=\"org000000d\"\u003e\u003cdt\u003e \u003cb\u003epolyblock\u003c/b\u003e\u003c/dt\u003e\u003cdd\u003ean Org mode source code block without a\n\u003ccode\u003e#+name: ...\u003c/code\u003e field, but which has a \u003ccode\u003e#+header: :noweb-ref ...\u003c/code\u003e field. Other\nblocks with the same Noweb-ref name are concatenated together when they are\ntangled.  Polyblocks are used in cases where we would like to break up a\nsingle block into smaller pieces for explanatory purposes. In all other cases,\nmonoblocks are preferable, unless the source code block is not to be tangled\nand is only for explanatory purposes in the woven output.\u003c/dd\u003e\u003c/div\u003e\n\u003cdiv class=\"lilac-description-list-entry\" id=\"org0000054\"\u003e\u003cdt\u003e \u003cb\u003esource code block\u003c/b\u003e\u003c/dt\u003e\u003cdd\u003eAn Org mode facility\nthat allows you to enclose a multiline text (typically source code) with\n\u003ccode\u003e#+begin_src ...\u003c/code\u003e and \u003ccode\u003e#+end_src\u003c/code\u003e lines. They are enclosed in a separate\nbackground color in the HTML output, and are often used for illustrating\nsource code listings. The format is \u003ccode\u003e#+begin_src LANGUAGE_NAME\u003c/code\u003e where\n\u003ccode\u003eLANGUAGE_NAME\u003c/code\u003e is the name of the programming language used for the listing.\nIf the name is a recognized name, it will get syntax highlighting in the\noutput automatically.\u003c/dd\u003e\u003c/div\u003e\n\u003cdiv class=\"lilac-description-list-entry\" id=\"org0000005\"\u003e\u003cdt\u003e \u003cb\u003etangling\u003c/b\u003e\u003c/dt\u003e\u003cdd\u003eThe act of extracting source code from a\nraw \u003ca href=\"#org000004e\"\u003eliterate document\u003c/a\u003e.\u003c/dd\u003e\u003c/div\u003e\n\u003cdiv class=\"lilac-description-list-entry\" id=\"org0000003\"\u003e\u003cdt\u003e \u003cb\u003eweaving\u003c/b\u003e\u003c/dt\u003e\u003cdd\u003eThe act of converting a raw literate\ndocument to a richer format such as PDF or HTML. This allows fancier output,\nsuch as for mathematical formulas, which are easier to read versus the\noriginal \u003ca href=\"#org000004e\"\u003eliterate document\u003c/a\u003e.\u003c/dd\u003e\u003c/div\u003e\n\u003c/dl\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-Projects-using-Lilac\" class=\"outline-2\"\u003e\n\u003ch2 id=\"h-Projects-using-Lilac\"\u003e\u003cspan class=\"section-number-2\"\u003e6.\u003c/span\u003e Projects using Lilac\u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-h-Projects-using-Lilac\"\u003e\n\u003cul class=\"org-ul\"\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/listx/codex\"\u003eCodex\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cdiv id=\"outline-container-h-References\" class=\"outline-2\"\u003e\n\u003ch2 id=\"h-References\"\u003e\u003cspan class=\"section-number-2\"\u003e7.\u003c/span\u003e References\u003c/h2\u003e\n\u003cdiv class=\"outline-text-2\" id=\"text-h-References\"\u003e\n\u003cstyle\u003e.csl-left-margin{float: left; padding-right: 0em;}\n .csl-right-inline{margin: 0 0 0 2em;}\u003c/style\u003e\u003cdiv class=\"csl-bib-body\"\u003e\n  \u003cdiv class=\"csl-entry\" id=\"citeproc_bib_item_1\"\u003e\n    \u003cdiv class=\"csl-left-margin\"\u003e[1]\u003c/div\u003e\u003cdiv class=\"csl-right-inline\"\u003eN. Ramsey, “Literate programming simplified,” \u003ci\u003eIEEE Software\u003c/i\u003e, vol. 11, no. 5, pp. 97–105, Sep. 1994, doi: \u003ca href=\"https://doi.org/10.1109/52.311070\"\u003e10.1109/52.311070\u003c/a\u003e.\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"csl-entry\" id=\"citeproc_bib_item_2\"\u003e\n    \u003cdiv class=\"csl-left-margin\"\u003e[2]\u003c/div\u003e\u003cdiv class=\"csl-right-inline\"\u003eD. E. Knuth, “Literate Programming,” \u003ci\u003eThe Computer Journal\u003c/i\u003e, vol. 27, no. 2, pp. 97–111, Feb. 1984, doi: \u003ca href=\"https://doi.org/10.1093/comjnl/27.2.97\"\u003e10.1093/comjnl/27.2.97\u003c/a\u003e.\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flistx%2Flilac","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flistx%2Flilac","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flistx%2Flilac/lists"}