From a60fbfd36675eb22152b4b3eda9fc25b5cfeea7f Mon Sep 17 00:00:00 2001 From: Luke Boswell Date: Wed, 22 May 2024 12:35:43 +1000 Subject: [PATCH] remove static-site-gen platform --- examples/static-site-gen/README.md | 22 - examples/static-site-gen/input/banana.md | 50 -- examples/static-site-gen/input/cherry.md | 45 - .../static-site-gen/input/subFolder/apple.md | 74 -- .../input/subFolder/codeExample.roc | 72 -- examples/static-site-gen/output/style.css | 135 --- examples/static-site-gen/platform/Cargo.lock | 814 ------------------ examples/static-site-gen/platform/Cargo.toml | 29 - examples/static-site-gen/platform/Html.roc | 376 -------- .../platform/Html/Attributes.roc | 281 ------ examples/static-site-gen/platform/build.rs | 9 - examples/static-site-gen/platform/host.c | 3 - examples/static-site-gen/platform/main.roc | 9 - examples/static-site-gen/platform/src/lib.rs | 428 --------- examples/static-site-gen/platform/src/main.rs | 3 - examples/static-site-gen/static-site.roc | 65 -- 16 files changed, 2415 deletions(-) delete mode 100644 examples/static-site-gen/README.md delete mode 100644 examples/static-site-gen/input/banana.md delete mode 100644 examples/static-site-gen/input/cherry.md delete mode 100644 examples/static-site-gen/input/subFolder/apple.md delete mode 100644 examples/static-site-gen/input/subFolder/codeExample.roc delete mode 100644 examples/static-site-gen/output/style.css delete mode 100644 examples/static-site-gen/platform/Cargo.lock delete mode 100644 examples/static-site-gen/platform/Cargo.toml delete mode 100644 examples/static-site-gen/platform/Html.roc delete mode 100644 examples/static-site-gen/platform/Html/Attributes.roc delete mode 100644 examples/static-site-gen/platform/build.rs delete mode 100644 examples/static-site-gen/platform/host.c delete mode 100644 examples/static-site-gen/platform/main.roc delete mode 100644 examples/static-site-gen/platform/src/lib.rs delete mode 100644 examples/static-site-gen/platform/src/main.rs delete mode 100644 examples/static-site-gen/static-site.roc diff --git a/examples/static-site-gen/README.md b/examples/static-site-gen/README.md deleted file mode 100644 index f8dd72ab56..0000000000 --- a/examples/static-site-gen/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Static site generator - -This is an example of how you might build a static site generator using Roc. -It searches for Markdown (`.md`) files in the `input` directory, inserts them -into a HTML template defined in Roc, and writes the result into the -corresponding file path in the `output` directory. - -To run, `cd` into this directory and run this in your terminal: - -If `roc` is on your PATH: -```bash -roc run static-site.roc -- input/ output/ -``` - -If not, and you're building Roc from source: -``` -cargo run -- static-site.roc -- input/ output/ -``` - -The example in the `input` directory is a copy of the 2004 website -by John Gruber, introducing the Markdown format. -https://daringfireball.net/projects/markdown/ diff --git a/examples/static-site-gen/input/banana.md b/examples/static-site-gen/input/banana.md deleted file mode 100644 index 767b6f6e27..0000000000 --- a/examples/static-site-gen/input/banana.md +++ /dev/null @@ -1,50 +0,0 @@ -# Ira oculi amisere exsereret repetam corpora - -## Superasque hanc horret - -Lorem markdownum praecessit *cesserat suam multos* quam. Est Ulixis inter -fabricataque auxilioque fossae et *gravidis arbore*, una verum steterat conamina -videre negetur, ista. Isque nubibus et et iam postquam, madefacta cura lugenti -longique somnoque. Resurgere ceu [magnus et](http://example.org) Acheloe, Iovis -fatifero alias. In suo Venus nec fixerat Hercule quisve et coronat tauros sol -Erinys arces; postquam e natus, ille annis? - -Hoc sedes. Ait ait! Clarum excidit collocat, inpluit lacrimabile -[herbis](http://example.org), et **quod** quid nutricis auctor pompa: anguigenae -quo at trahit dum? Me sponsa confundere orant fecit tendentem flamina veteris; -ut. Dabat fecit. - -1. Ait est cauda noctisque scrobibus implesset vultu -2. Philomela metu -3. Partim inmemor -4. Lascivitque vietum potens -5. Addidit Troica tellusAndros induit rectum suos Aulidaque - -## Nece ramos comites dierum - -Et non miseranda eadem ferrum, mersaeque fossa lacrimam Dromas, tempore me iam -Perseus valido. Vinaque viderat habet curaque caelo sine *speluncae est* ignarus -Teucras quantum. Tanta timet auxilioque -[praecordia](http://example.org) unum: legi pondus nacta, est -est agnus erat solantia tenet? - -Scire virgo felix grandior haut. Montibus illi: vir prior, indutus est contra -hos, semina saltuque: hoc radiis alter, intravit. Oravique sed ipsa -[cornu](http://example.org), flere unam suis vindicta spumigeroque -munere fertur figurae saecula mutentur. In suam corpus nare tumulos ignorat. - -## Fraudo Sibyllae mare - -Suspendit erat tincta artus tetigere caret, decoris meorum: parentis. Corporis -prius: que auras insequitur adversas; ab miserata dominam genitor. - - aiff_bin_operating /= bsodMetadata; - terahertz_alignment_system.excel_bash_hdtv = saas_thread_character; - var server = lteHypermediaRom(menu_wan_of.coreNewbieGraphic(imapSector + - download_cluster_rate)); - -Oculos gravitate clipeum ab quid dubiaque apertum celerem vidit caput sine dant -*adstitit*. Acerbo in *bona verba* tutus est ullus metas primus: suo forte tuam -quaterque vincant Minos, [adverso](http://example.org). - -Longa velut pietate. Erat felix avis Erinyn? diff --git a/examples/static-site-gen/input/cherry.md b/examples/static-site-gen/input/cherry.md deleted file mode 100644 index 2ae7efbb99..0000000000 --- a/examples/static-site-gen/input/cherry.md +++ /dev/null @@ -1,45 +0,0 @@ -# Pete milite aura cuius laeva tenuerunt exprimit - -## Semina pectora - -Lorem markdownum auguror domos, tum cuspide induit officio Troia Propoetidas -fila Cyllenius retinacula. Progenies pepercit visa ausa amantes. Disertum sub, -et corpora, si credere cumque est meritumque moram videri levare praeterit -criminis quidem petita *ferreus*. - -Achaidas traxit ad, iacuere iamdudum ab fecit: vestra evicere lacrimis labore: -gavisus forti turba. A vixque incesto et tanti paries, columnae est signis -munera? Grata Parcarum [Aetolius modo](http://example.org): meis quanto -amico oravit venit mihi vertit summam. - -## Terras ab neque moveri mater oculos me - -Qua solet grandia parente, femur *poenas exspectatas dedit* atros abstulit -sumpsere interdum adfusaque utrumque tostae. Regni et ostendit exanimes armis -nec armis lacesse fretumque silvarum fusca ante laevo suggerit matre, **non -caespes** urbes. - -- Dixit qui amantis modo -- Pennas ut iaculo vellet in nec intellegit -- Summe ire annis tribusque haberet suo veteres -- Pede parvoque Tyrioque unum -- Terra traxisse meum Iuppiter in amato imagine - -## Fraude stimulis - -[Templis quotiens](http://example.org) tectus tuo ignara orbi -Zanclen hunc comprenditur *momordi*. Armis nymphae. Vocant rupe omnia -cognosceret fine; per sonant, deque magnum, suo. - -- Quid lamina -- Gravidus pulchros sacris suis est audenti -- Sede quamvis orbata cerva plena tua Hymenaeus -- Nec Achaia deprensi baculo cessit nec mitius -- Fretoque in volucres repperit uda Ixionis etiamnum -- Auras Ceycis petit mundo ter sensi sacrum - -Nosti et spem; tum illa parentes doctas nuntia **laeva virusque**. Magistris -[diversi](http://example.org) lacerare at data margine abesset inscribit -calidumque **copia vidit** attulerat altera incensaque crista versus. Fecit et -posco series dextra. Lacrimis inducta imis non apertos saeva **ripas sumpserat** -pariter quoque aequales. diff --git a/examples/static-site-gen/input/subFolder/apple.md b/examples/static-site-gen/input/subFolder/apple.md deleted file mode 100644 index c1582fb260..0000000000 --- a/examples/static-site-gen/input/subFolder/apple.md +++ /dev/null @@ -1,74 +0,0 @@ -# Resedit tenax Oleniae nitor trunco somnus recessit - -## Quam quemque ensem mea scitusque iactatis ego - -Lorem markdownum nubes, instruis virgo perque victa Lacinia parenti, foret ramis -incessit, frustra illa; adiecit. Agit **memor** ignes paternos exhalarunt -dumque. - -> Fuit dotatissima Aeson curaque **gradu** cum quemque plures, quaque pater. -> Hanc iuvet, sententia inamabile: dum mollitaque plectro habent tacuit tibi. - -## Thracum non quoque arisque Elinque et criminibusque - -Deductus mihi lacrimaeque Apolline strictique, sanguine discite facinus se. -Livor nulla Pallantias virtutis fluctus testantia inponis et tenuerunt clipeo -non sacra date *partes* quoque fugae; cum. Audax contingere moresque dis -requirere senserit spectare generosos formatum modo edidit abluere his infixum -inductae dis concipe nisi redeuntia. Lutulenta [sublimibus pudori -iussis](http://example.org) volucrem recumbis foresque, tecum mater sidus est -imagine. - -Et dea diebus me corpora nunc. Iam parte medium obscuraque **Acheloia** ad iubes -inferius altera nervus! Irasci pes facit Solem, credimus, est aqua regia terrae -mirarique spectabat, dixit. Tuta nimis Canache Quirini et fessa, de nodoso se -procul errant. - -## Neptune longi bis lacertis tempore conpellat est - -Habenas cur pinus; qui vera recurvam? Audieris ex modo Achilles est quamquam -Occupat, rettulit vindicat timentes. - -- Non parere clamare -- Effigiem humana date deum duri -- Urbe minus -- Rettulit illud geminam curva Amuli furta scinditur -- Secutum infelix promissi boum latebras tamen -- Fata se felix poterant ter spoliantis in - -## Quos quoque et posses sororum prodere - -Candore fatebar *avertite abest* et fuerunt Nile inania domum: quid citius -quoque; pulsabant virum tamen ferro quaerens Osiris. Aethera acui regis exstat -ingeniis in pugna quadripedis glandes superos. Tanta quam, illo es prole est -telis **unus verba** quisquis iuvenci annis. Nec velox sed sacra gaudia vacuos, -Herculei undae calcata inmeriti quercus ignes parabant iam. - -### Example Table - -| Tables | Are | Cool | -| :------------ | :-----------: | ----: | -| col 3 is | right-aligned | $1600 | -| col 2 is | centered | $12 | -| zebra stripes | are neat | $1 | - -### Example Code Blocks - -#### Something That Cannot Be Found - -```sh -# This isn't fenced roc code so its not formatted -# Use a fence like ```roc to format code blocks -``` - -#### A Complete File - -```roc -file:codeExample.roc -``` - -#### A Snippet Of Some File - -```roc -file:codeExample.roc:snippet:view -``` diff --git a/examples/static-site-gen/input/subFolder/codeExample.roc b/examples/static-site-gen/input/subFolder/codeExample.roc deleted file mode 100644 index cf107ef802..0000000000 --- a/examples/static-site-gen/input/subFolder/codeExample.roc +++ /dev/null @@ -1,72 +0,0 @@ -## This is a documentation comment -# This is a comment -app [transformFileContent] { pf: platform "platform/main.roc" } - -import pf.Html exposing [html, head, body, div, text, a, ul, li, link, meta] -import pf.Html.Attributes exposing [httpEquiv, content, href, rel, lang, class, title] - -NavLink : { - # this is another comment - url : Str, - title : Str, - text : Str, -} - -navLinks : List NavLink -navLinks = [ - { url: "apple.html", title: "Exempli Gratia Pagina Pomi", text: "Apple" }, - { url: "banana.html", title: "Exempli Gratia Pagina Musa", text: "Banana" }, - { url: "cherry.html", title: "Exempli Pagina Cerasus", text: "Cherry" }, -] - -transformFileContent : Str, Str -> Str -transformFileContent = \currentUrl, htmlContent -> - List.findFirst navLinks (\{ url } -> url == currentUrl) - |> Result.map (\currentNavLink -> view currentNavLink htmlContent) - |> Result.map Html.render - |> Result.withDefault "" - -### start snippet view -view : NavLink, Str -> Html.Node -view = \currentNavLink, htmlContent -> - html [lang "en"] [ - head [] [ - meta [httpEquiv "content-type", content "text/html; charset=utf-8"] [], - Html.title [] [text currentNavLink.title], - link [rel "stylesheet", href "style.css"] [], - ], - ### start snippet body - body [] [ - div [class "main"] [ - div [class "navbar"] [ - viewNavbar currentNavLink, - ], - div [class "article"] [ - # For now `text` is not escaped so we can use it to insert HTML - # We'll probably want something more explicit in the long term though! - text htmlContent, - ], - ], - ], - ### end snippet body - ] -### end snippet view - -viewNavbar : NavLink -> Html.Node -viewNavbar = \currentNavLink -> - ul - [] - (List.map navLinks \nl -> viewNavLink (nl == currentNavLink) nl) - -viewNavLink : Bool, NavLink -> Html.Node -viewNavLink = \isCurrent, navlink -> - if isCurrent then - li [class "nav-link nav-link--current"] [ - text navlink.text, - ] - else - li [class "nav-link"] [ - a - [href navlink.url, title navlink.title] - [text navlink.text], - ] diff --git a/examples/static-site-gen/output/style.css b/examples/static-site-gen/output/style.css deleted file mode 100644 index 0e018a7f36..0000000000 --- a/examples/static-site-gen/output/style.css +++ /dev/null @@ -1,135 +0,0 @@ -.main { - display: flex; - max-width: 900px; - margin: 0 auto; - color: #222; -} -.navbar { - padding: 32px; - font-family: Verdana, Geneva, Tahoma, sans-serif; -} -.navbar ul { - margin: 0; - padding: 0; -} -.nav-link { - list-style: none; - margin: 8px; - padding: 8px 16px; - background-color: lightgray; - font-size: large; -} -.nav-link--current { - background-color: lightblue; -} - -.article { - font-family: "Times New Roman", Times, serif; -} -.article h1, h2 { - font-family: Arial, Helvetica, sans-serif; - color: #444; -} -.article blockquote { - margin: 8px 0; - padding: 2px 8px; - border-radius: 8px; - background-color: #eee; - font-style: italic; - color: #444; -} -.article pre { - background-color: rgb(241, 241, 241); - color: rgb(27, 27, 27); - padding: 16px; -} - -pre { - white-space: pre-wrap; -} - -samp .ann { - /* type annotation - purple in the repl */ - color: #f384fd; -} - -samp .comment { - color: #338545; -} - -samp .kw { - color: #004cc2; -} - -samp .arrow, samp .backslash, samp .bar { - color: #0600c2; -} - -samp .pipe { - color: #0600c2; -} - -samp .op { - color: #0600c2; -} - -samp .assign { - color: #48fd00; -} - -samp .paren, samp .bracket, samp .brace { - color: #ff0000; -} - -samp .comma { - color: #ff00fb; -} - -samp .colon { - color: #9b0098; -} - -samp .number { -/* number literals */ -color: #9669ff; -} - -samp .str { - /* string literals */ - color: #1dbf00; -} - -samp .str-esc, samp .str-interp { - /* escapes inside string literals, e.g. \t */ - color: #3474db; -} - -samp .dim { - opacity: 0.55; -} - -samp .comment { - color: #005a13; -} - - -table { - table-layout: fixed; - width: 100%; - border-collapse: collapse; - border: 3px solid rgb(161, 64, 0); -} - -tbody tr:nth-child(even) { - background-color: #c6f4ff; -} - -th { - background-color: #ffabab; -} - -th, -td { - - padding: 2px; -} \ No newline at end of file diff --git a/examples/static-site-gen/platform/Cargo.lock b/examples/static-site-gen/platform/Cargo.lock deleted file mode 100644 index 1c632b8a0c..0000000000 --- a/examples/static-site-gen/platform/Cargo.lock +++ /dev/null @@ -1,814 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "addr2line" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "ahash" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "allocator-api2" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" - -[[package]] -name = "arrayvec" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "backtrace" -version = "0.3.68" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "base64" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitmaps" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" -dependencies = [ - "typenum", -] - -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "bumpalo" -version = "3.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" - -[[package]] -name = "cc" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "deranged" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8810e7e2cf385b1e9b50d68264908ec367ba642c96d02edfe61c39e88e2a3c01" - -[[package]] -name = "doc-comment" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" - -[[package]] -name = "encode_unicode" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" - -[[package]] -name = "flate2" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "gimli" -version = "0.27.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" -dependencies = [ - "ahash", - "allocator-api2", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "host" -version = "0.0.1" -dependencies = [ - "libc", - "pulldown-cmark", - "roc_highlight", - "roc_std", - "syntect", -] - -[[package]] -name = "html-escape" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476" -dependencies = [ - "utf8-width", -] - -[[package]] -name = "im" -version = "15.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" -dependencies = [ - "bitmaps", - "rand_core", - "rand_xoshiro", - "sized-chunks", - "typenum", - "version_check", -] - -[[package]] -name = "im-rc" -version = "15.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1955a75fa080c677d3972822ec4bad316169ab1cfc6c257a942c2265dbe5fe" -dependencies = [ - "bitmaps", - "rand_core", - "rand_xoshiro", - "sized-chunks", - "typenum", - "version_check", -] - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - -[[package]] -name = "itoa" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" - -[[package]] -name = "libc" -version = "0.2.147" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" - -[[package]] -name = "line-wrap" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" -dependencies = [ - "safemem", -] - -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - -[[package]] -name = "object" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" - -[[package]] -name = "onig" -version = "6.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c4b31c8722ad9171c6d77d3557db078cab2bd50afcc9d09c8b315c59df8ca4f" -dependencies = [ - "bitflags", - "libc", - "once_cell", - "onig_sys", -] - -[[package]] -name = "onig_sys" -version = "69.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b829e3d7e9cc74c7e315ee8edb185bf4190da5acde74afd7fc59c35b1f086e7" -dependencies = [ - "cc", - "pkg-config", -] - -[[package]] -name = "pkg-config" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" - -[[package]] -name = "plist" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdc0001cfea3db57a2e24bc0d818e9e20e554b5f97fabb9bc231dc240269ae06" -dependencies = [ - "base64", - "indexmap", - "line-wrap", - "quick-xml", - "serde", - "time", -] - -[[package]] -name = "proc-macro2" -version = "1.0.71" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75cb1540fadbd5b8fbccc4dddad2734eba435053f725621c070711a14bb5f4b8" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "pulldown-cmark" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a1a2f1f0a7ecff9c31abbe177637be0e97a0aef46cf8738ece09327985d998" -dependencies = [ - "bitflags", - "memchr", - "unicase", -] - -[[package]] -name = "quick-xml" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81b9228215d82c7b61490fec1de287136b5de6f5700f6e58ea9ad61a7964ca51" -dependencies = [ - "memchr", -] - -[[package]] -name = "quote" -version = "1.0.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" - -[[package]] -name = "rand_xoshiro" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" -dependencies = [ - "rand_core", -] - -[[package]] -name = "regex-syntax" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" - -[[package]] -name = "roc_collections" -version = "0.0.1" -dependencies = [ - "bitvec", - "bumpalo", - "fnv", - "hashbrown 0.14.3", - "im", - "im-rc", - "smallvec", - "wyhash", -] - -[[package]] -name = "roc_error_macros" -version = "0.0.1" - -[[package]] -name = "roc_highlight" -version = "0.0.1" -dependencies = [ - "html-escape", - "roc_parse", - "roc_region", -] - -[[package]] -name = "roc_ident" -version = "0.0.1" - -[[package]] -name = "roc_module" -version = "0.0.1" -dependencies = [ - "bumpalo", - "roc_collections", - "roc_error_macros", - "roc_ident", - "roc_region", - "snafu", - "static_assertions", -] - -[[package]] -name = "roc_parse" -version = "0.0.1" -dependencies = [ - "bumpalo", - "encode_unicode", - "roc_collections", - "roc_error_macros", - "roc_module", - "roc_region", -] - -[[package]] -name = "roc_region" -version = "0.0.1" -dependencies = [ - "static_assertions", -] - -[[package]] -name = "roc_std" -version = "0.0.1" -dependencies = [ - "arrayvec", - "static_assertions", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - -[[package]] -name = "ryu" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" - -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "serde" -version = "1.0.180" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea67f183f058fe88a4e3ec6e2788e003840893b91bac4559cabedd00863b3ed" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.180" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24e744d7782b686ab3b73267ef05697159cc0e5abbed3f47f9933165e5219036" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.43", -] - -[[package]] -name = "serde_json" -version = "1.0.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sized-chunks" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" -dependencies = [ - "bitmaps", - "typenum", -] - -[[package]] -name = "smallvec" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" - -[[package]] -name = "snafu" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" -dependencies = [ - "backtrace", - "doc-comment", - "snafu-derive", -] - -[[package]] -name = "snafu-derive" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee659fb5f3d355364e1f3e5bc10fb82068efbf824a1e9d1c9504244a6469ad53" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syntect" -version = "5.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02b4b303bf8d08bfeb0445cba5068a3d306b6baece1d5582171a9bf49188f91" -dependencies = [ - "bincode", - "bitflags", - "flate2", - "fnv", - "once_cell", - "onig", - "plist", - "regex-syntax", - "serde", - "serde_json", - "thiserror", - "walkdir", - "yaml-rust", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "thiserror" -version = "1.0.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.43", -] - -[[package]] -name = "time" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b79eabcd964882a646b3584543ccabeae7869e9ac32a46f6f22b7a5bd405308b" -dependencies = [ - "deranged", - "itoa", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" - -[[package]] -name = "time-macros" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb71511c991639bb078fd5bf97757e03914361c48100d52878b8e52b46fb92cd" -dependencies = [ - "time-core", -] - -[[package]] -name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - -[[package]] -name = "unicode-ident" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" - -[[package]] -name = "utf8-width" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "walkdir" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "wyhash" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf6e163c25e3fac820b4b453185ea2dea3b6a3e0a721d4d23d75bd33734c295" -dependencies = [ - "rand_core", -] - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "yaml-rust" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "zerocopy" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.43", -] diff --git a/examples/static-site-gen/platform/Cargo.toml b/examples/static-site-gen/platform/Cargo.toml deleted file mode 100644 index 3681eb908c..0000000000 --- a/examples/static-site-gen/platform/Cargo.toml +++ /dev/null @@ -1,29 +0,0 @@ -[package] -name = "host" -authors = ["The Roc Contributors"] -edition = "2021" -license = "UPL-1.0" -version = "0.0.1" - -links = "app" - -[lib] -name = "host" -path = "src/lib.rs" -crate-type = ["staticlib", "lib"] - -[[bin]] -name = "host" -path = "src/main.rs" - -[dependencies] -libc = "0.2" -syntect = "5.0" -roc_highlight = { path = "../../../crates/highlight" } -roc_std = { path = "../../../crates/roc_std" } - - -# Default features include building a binary that we don't need -pulldown-cmark = { version = "0.9.2", default-features = false } - -[workspace] diff --git a/examples/static-site-gen/platform/Html.roc b/examples/static-site-gen/platform/Html.roc deleted file mode 100644 index a7a731f625..0000000000 --- a/examples/static-site-gen/platform/Html.roc +++ /dev/null @@ -1,376 +0,0 @@ -module [ - Node, - Attribute, - render, - renderWithoutDocType, - element, - unclosedElem, - text, - attribute, - html, - base, - head, - link, - meta, - style, - title, - body, - address, - article, - aside, - footer, - header, - h1, - h2, - h3, - h4, - h5, - h6, - main, - nav, - section, - blockquote, - dd, - div, - dl, - dt, - figcaption, - figure, - hr, - li, - menu, - ol, - p, - pre, - ul, - a, - abbr, - b, - bdi, - bdo, - br, - cite, - code, - data, - dfn, - em, - i, - kbd, - mark, - q, - rp, - rt, - ruby, - s, - samp, - small, - span, - strong, - sub, - sup, - time, - u, - var, - wbr, - area, - audio, - img, - map, - track, - video, - embed, - iframe, - object, - picture, - portal, - source, - svg, - math, - canvas, - noscript, - script, - del, - ins, - caption, - col, - colgroup, - table, - tbody, - td, - tfoot, - th, - thead, - tr, - button, - datalist, - fieldset, - form, - input, - label, - legend, - meter, - optgroup, - option, - output, - progress, - select, - textarea, - details, - dialog, - summary, - slot, - template, -] - -import Html.Attributes - -Node : [ - Text Str, - Element Str U64 (List Attribute) (List Node), - UnclosedElem Str U64 (List Attribute), -] - -Attribute : Html.Attributes.Attribute - -attribute : Str -> (Str -> Attribute) -attribute = Html.Attributes.attribute - -text : Str -> Node -text = Text - -## Define a non-standard HTML Element -## -## You can use this to add elements that are not already supported. -## For example, you could bring back the obsolete element, -## and add some 90's nostalgia to your web page! -## -## blink : List Attribute, List Node -> Node -## blink = element "blink" -## -## html = blink [] [ text "This text is blinking!" ] -## -element : Str -> (List Attribute, List Node -> Node) -element = \tagName -> - \attrs, children -> - # While building the node tree, calculate the size of Str it will render to - withTag = 2 * (3 + Str.countUtf8Bytes tagName) - withAttrs = List.walk attrs withTag \acc, Attribute name val -> - acc + Str.countUtf8Bytes name + Str.countUtf8Bytes val + 4 - totalSize = List.walk children withAttrs \acc, child -> - acc + nodeSize child - - Element tagName totalSize attrs children - -unclosedElem : Str -> (List Attribute -> Node) -unclosedElem = \tagName -> - \attrs -> - # While building the node tree, calculate the size of Str it will render to - withTag = 2 * (3 + Str.countUtf8Bytes tagName) - totalSize = List.walk attrs withTag \acc, Attribute name val -> - acc + Str.countUtf8Bytes name + Str.countUtf8Bytes val + 4 - - UnclosedElem tagName totalSize attrs - -# internal helper -nodeSize : Node -> U64 -nodeSize = \node -> - when node is - Text content -> - Str.countUtf8Bytes content - - Element _ size _ _ | UnclosedElem _ size _ -> - size - -## Render a Node to an HTML string -## -## The output has no whitespace between nodes, to make it small. -## This is intended for generating full HTML documents, so it -## automatically adds `` to the start of the string. -## See also `renderWithoutDocType`. -render : Node -> Str -render = \node -> - buffer = Str.reserve "" (nodeSize node) - - renderHelp buffer node - -## Render a Node to a string, without a DOCTYPE tag -renderWithoutDocType : Node -> Str -renderWithoutDocType = \node -> - buffer = Str.reserve "" (nodeSize node) - - renderHelp buffer node - -# internal helper -renderHelp : Str, Node -> Str -renderHelp = \buffer, node -> - when node is - Text content -> - Str.concat buffer content - - Element tagName _ attrs children -> - withTagName = "$(buffer)<$(tagName)" - withAttrs = - if List.isEmpty attrs then - withTagName - else - List.walk attrs "$(withTagName) " renderAttr - withTag = Str.concat withAttrs ">" - withChildren = List.walk children withTag renderHelp - - "$(withChildren)" - - UnclosedElem tagName _ attrs -> - if List.isEmpty attrs then - "$(buffer)<$(tagName)>" - else - attrs - |> List.walk "$(buffer)<$(tagName) " renderAttr - |> Str.concat ">" - -# internal helper -renderAttr : Str, Attribute -> Str -renderAttr = \buffer, Attribute key val -> - "$(buffer) $(key)=\"$(val)\"" - -# Main root -html = element "html" - -# Document metadata -base = element "base" -head = element "head" -link = unclosedElem "link" -meta = unclosedElem "meta" -style = element "style" -title = element "title" - -# Sectioning root -body = element "body" - -# Content sectioning -address = element "address" -article = element "article" -aside = element "aside" -footer = element "footer" -header = element "header" -h1 = element "h1" -h2 = element "h2" -h3 = element "h3" -h4 = element "h4" -h5 = element "h5" -h6 = element "h6" -main = element "main" -nav = element "nav" -section = element "section" - -# Text content -blockquote = element "blockquote" -dd = element "dd" -div = element "div" -dl = element "dl" -dt = element "dt" -figcaption = element "figcaption" -figure = element "figure" -hr = element "hr" -li = element "li" -menu = element "menu" -ol = element "ol" -p = element "p" -pre = element "pre" -ul = element "ul" - -# Inline text semantics -a = element "a" -abbr = element "abbr" -b = element "b" -bdi = element "bdi" -bdo = element "bdo" -br = element "br" -cite = element "cite" -code = element "code" -data = element "data" -dfn = element "dfn" -em = element "em" -i = element "i" -kbd = element "kbd" -mark = element "mark" -q = element "q" -rp = element "rp" -rt = element "rt" -ruby = element "ruby" -s = element "s" -samp = element "samp" -small = element "small" -span = element "span" -strong = element "strong" -sub = element "sub" -sup = element "sup" -time = element "time" -u = element "u" -var = element "var" -wbr = element "wbr" - -# Image and multimedia -area = element "area" -audio = element "audio" -img = unclosedElem "img" -map = element "map" -track = element "track" -video = element "video" - -# Embedded content -embed = element "embed" -iframe = element "iframe" -object = element "object" -picture = element "picture" -portal = element "portal" -source = element "source" - -# SVG and MathML -svg = element "svg" -math = element "math" - -# Scripting -canvas = element "canvas" -noscript = element "noscript" -script = element "script" - -# Demarcating edits -del = element "del" -ins = element "ins" - -# Table content -caption = element "caption" -col = element "col" -colgroup = element "colgroup" -table = element "table" -tbody = element "tbody" -td = element "td" -tfoot = element "tfoot" -th = element "th" -thead = element "thead" -tr = element "tr" - -# Forms -button = element "button" -datalist = element "datalist" -fieldset = element "fieldset" -form = element "form" -input = element "input" -label = element "label" -legend = element "legend" -meter = element "meter" -optgroup = element "optgroup" -option = element "option" -output = element "output" -progress = element "progress" -select = element "select" -textarea = element "textarea" - -# Interactive elements -details = element "details" -dialog = element "dialog" -summary = element "summary" - -# Web Components -slot = element "slot" -template = element "template" diff --git a/examples/static-site-gen/platform/Html/Attributes.roc b/examples/static-site-gen/platform/Html/Attributes.roc deleted file mode 100644 index 6e9c5794cb..0000000000 --- a/examples/static-site-gen/platform/Html/Attributes.roc +++ /dev/null @@ -1,281 +0,0 @@ -module [ - Attribute, - attribute, - accept, - acceptCharset, - accesskey, - action, - align, - allow, - alt, - ariaLabel, - ariaLabelledBy, - ariaHidden, - async, - autocapitalize, - autocomplete, - autofocus, - autoplay, - background, - bgcolor, - border, - buffered, - capture, - challenge, - charset, - checked, - cite, - class, - code, - codebase, - color, - cols, - colspan, - content, - contenteditable, - contextmenu, - controls, - coords, - crossorigin, - csp, - data, - dataAttr, - datetime, - decoding, - default, - defer, - dir, - dirname, - disabled, - download, - draggable, - enctype, - enterkeyhint, - for, - form, - formaction, - formenctype, - formmethod, - formnovalidate, - formtarget, - headers, - height, - hidden, - high, - href, - hreflang, - httpEquiv, - icon, - id, - importance, - integrity, - intrinsicsize, - inputmode, - ismap, - itemprop, - keytype, - kind, - label, - lang, - language, - loading, - list, - loop, - low, - manifest, - max, - maxlength, - minlength, - media, - method, - min, - multiple, - muted, - name, - novalidate, - open, - optimum, - pattern, - ping, - placeholder, - poster, - preload, - radiogroup, - readonly, - referrerpolicy, - rel, - required, - reversed, - role, - rows, - rowspan, - sandbox, - scope, - scoped, - selected, - shape, - size, - sizes, - slot, - span, - spellcheck, - src, - srcdoc, - srclang, - srcset, - start, - step, - style, - summary, - tabindex, - target, - title, - translate, - type, - usemap, - value, - width, - wrap, -] - -Attribute : [Attribute Str Str] - -attribute : Str -> (Str -> Attribute) -attribute = \attrName -> - \attrValue -> Attribute attrName attrValue - -accept = attribute "accept" -acceptCharset = attribute "accept-charset" -accesskey = attribute "accesskey" -action = attribute "action" -align = attribute "align" -allow = attribute "allow" -alt = attribute "alt" -ariaLabel = attribute "aria-label" -ariaLabelledBy = attribute "aria-labelledby" -ariaHidden = attribute "aria-label" -async = attribute "async" -autocapitalize = attribute "autocapitalize" -autocomplete = attribute "autocomplete" -autofocus = attribute "autofocus" -autoplay = attribute "autoplay" -background = attribute "background" -bgcolor = attribute "bgcolor" -border = attribute "border" -buffered = attribute "buffered" -capture = attribute "capture" -challenge = attribute "challenge" -charset = attribute "charset" -checked = attribute "checked" -cite = attribute "cite" -class = attribute "class" -code = attribute "code" -codebase = attribute "codebase" -color = attribute "color" -cols = attribute "cols" -colspan = attribute "colspan" -content = attribute "content" -contenteditable = attribute "contenteditable" -contextmenu = attribute "contextmenu" -controls = attribute "controls" -coords = attribute "coords" -crossorigin = attribute "crossorigin" -csp = attribute "csp" -data = attribute "data" -dataAttr = \dataName, dataVal -> Attribute "data-$(dataName)" dataVal -datetime = attribute "datetime" -decoding = attribute "decoding" -default = attribute "default" -defer = attribute "defer" -dir = attribute "dir" -dirname = attribute "dirname" -disabled = attribute "disabled" -download = attribute "download" -draggable = attribute "draggable" -enctype = attribute "enctype" -enterkeyhint = attribute "enterkeyhint" -for = attribute "for" -form = attribute "form" -formaction = attribute "formaction" -formenctype = attribute "formenctype" -formmethod = attribute "formmethod" -formnovalidate = attribute "formnovalidate" -formtarget = attribute "formtarget" -headers = attribute "headers" -height = attribute "height" -hidden = attribute "hidden" -high = attribute "high" -href = attribute "href" -hreflang = attribute "hreflang" -httpEquiv = attribute "http-equiv" -icon = attribute "icon" -id = attribute "id" -importance = attribute "importance" -integrity = attribute "integrity" -intrinsicsize = attribute "intrinsicsize" -inputmode = attribute "inputmode" -ismap = attribute "ismap" -itemprop = attribute "itemprop" -keytype = attribute "keytype" -kind = attribute "kind" -label = attribute "label" -lang = attribute "lang" -language = attribute "language" -loading = attribute "loading" -list = attribute "list" -loop = attribute "loop" -low = attribute "low" -manifest = attribute "manifest" -max = attribute "max" -maxlength = attribute "maxlength" -minlength = attribute "minlength" -media = attribute "media" -method = attribute "method" -min = attribute "min" -multiple = attribute "multiple" -muted = attribute "muted" -name = attribute "name" -novalidate = attribute "novalidate" -open = attribute "open" -optimum = attribute "optimum" -pattern = attribute "pattern" -ping = attribute "ping" -placeholder = attribute "placeholder" -poster = attribute "poster" -preload = attribute "preload" -radiogroup = attribute "radiogroup" -readonly = attribute "readonly" -referrerpolicy = attribute "referrerpolicy" -rel = attribute "rel" -required = attribute "required" -reversed = attribute "reversed" -role = attribute "role" -rows = attribute "rows" -rowspan = attribute "rowspan" -sandbox = attribute "sandbox" -scope = attribute "scope" -scoped = attribute "scoped" -selected = attribute "selected" -shape = attribute "shape" -size = attribute "size" -sizes = attribute "sizes" -slot = attribute "slot" -span = attribute "span" -spellcheck = attribute "spellcheck" -src = attribute "src" -srcdoc = attribute "srcdoc" -srclang = attribute "srclang" -srcset = attribute "srcset" -start = attribute "start" -step = attribute "step" -style = attribute "style" -summary = attribute "summary" -tabindex = attribute "tabindex" -target = attribute "target" -title = attribute "title" -translate = attribute "translate" -type = attribute "type" -usemap = attribute "usemap" -value = attribute "value" -width = attribute "width" -wrap = attribute "wrap" diff --git a/examples/static-site-gen/platform/build.rs b/examples/static-site-gen/platform/build.rs deleted file mode 100644 index 47763b34c3..0000000000 --- a/examples/static-site-gen/platform/build.rs +++ /dev/null @@ -1,9 +0,0 @@ -fn main() { - #[cfg(not(windows))] - println!("cargo:rustc-link-lib=dylib=app"); - - #[cfg(windows)] - println!("cargo:rustc-link-lib=dylib=libapp"); - - println!("cargo:rustc-link-search=."); -} diff --git a/examples/static-site-gen/platform/host.c b/examples/static-site-gen/platform/host.c deleted file mode 100644 index b9214bcf33..0000000000 --- a/examples/static-site-gen/platform/host.c +++ /dev/null @@ -1,3 +0,0 @@ -extern int rust_main(); - -int main() { return rust_main(); } \ No newline at end of file diff --git a/examples/static-site-gen/platform/main.roc b/examples/static-site-gen/platform/main.roc deleted file mode 100644 index 30374d67a0..0000000000 --- a/examples/static-site-gen/platform/main.roc +++ /dev/null @@ -1,9 +0,0 @@ -platform "static-site-gen" - requires {} { transformFileContent : Str, Str -> Str } - exposes [] - packages {} - imports [] - provides [transformFileContentForHost] - -transformFileContentForHost : Box Str, Box Str -> Str -transformFileContentForHost = \relPath, htmlContent -> transformFileContent (Box.unbox relPath) (Box.unbox htmlContent) diff --git a/examples/static-site-gen/platform/src/lib.rs b/examples/static-site-gen/platform/src/lib.rs deleted file mode 100644 index 05b3273f0f..0000000000 --- a/examples/static-site-gen/platform/src/lib.rs +++ /dev/null @@ -1,428 +0,0 @@ -use core::ffi::c_void; -use libc; -use pulldown_cmark::{html, Options, Parser}; -use roc_std::{RocBox, RocStr}; -use std::env; -use std::fs; -use std::path::{Path, PathBuf}; - -use syntect::easy::HighlightLines; -use syntect::highlighting::{ThemeSet}; -use syntect::html::{ClassStyle, ClassedHTMLGenerator}; -use syntect::parsing::SyntaxSet; -use syntect::util::LinesWithEndings; - -extern "C" { - #[link_name = "roc__transformFileContentForHost_1_exposed"] - fn roc_transformFileContentForHost(relPath: RocBox, content: RocBox) -> RocStr; -} - -#[no_mangle] -pub unsafe extern "C" fn roc_alloc(size: usize, _alignment: u32) -> *mut c_void { - libc::malloc(size) -} - -#[no_mangle] -pub unsafe extern "C" fn roc_realloc( - c_ptr: *mut c_void, - new_size: usize, - _old_size: usize, - _alignment: u32, -) -> *mut c_void { - libc::realloc(c_ptr, new_size) -} - -#[no_mangle] -pub unsafe extern "C" fn roc_dealloc(c_ptr: *mut c_void, _alignment: u32) { - libc::free(c_ptr) -} - -#[cfg(unix)] -#[no_mangle] -pub unsafe extern "C" fn roc_getppid() -> libc::pid_t { - libc::getppid() -} - -#[cfg(unix)] -#[no_mangle] -pub unsafe extern "C" fn roc_mmap( - addr: *mut libc::c_void, - len: libc::size_t, - prot: libc::c_int, - flags: libc::c_int, - fd: libc::c_int, - offset: libc::off_t, -) -> *mut libc::c_void { - libc::mmap(addr, len, prot, flags, fd, offset) -} - -#[cfg(unix)] -#[no_mangle] -pub unsafe extern "C" fn roc_shm_open( - name: *const libc::c_char, - oflag: libc::c_int, - mode: libc::mode_t, -) -> libc::c_int { - libc::shm_open(name, oflag, mode as libc::c_uint) -} - -#[no_mangle] -pub extern "C" fn rust_main() -> i32 { - let args: Vec = env::args().collect(); - if args.len() != 3 { - eprintln!("Usage: {} path/to/input/dir path/to/output/dir", args[0]); - return 1; - } - - match run(&args[1], &args[2]) { - Err(e) => { - eprintln!("{}", e); - 1 - } - Ok(()) => 0, - } -} - -#[no_mangle] -pub unsafe extern "C" fn roc_panic(msg: *mut RocStr, tag_id: u32) { - match tag_id { - 0 => { - eprintln!("Roc standard library hit a panic: {}", &*msg); - } - 1 => { - eprintln!("Application hit a panic: {}", &*msg); - } - _ => unreachable!(), - } - std::process::exit(1); -} - -#[no_mangle] -pub unsafe extern "C" fn roc_dbg(loc: *mut RocStr, msg: *mut RocStr, src: *mut RocStr) { - eprintln!("[{}] {} = {}", &*loc, &*src, &*msg); -} - -#[no_mangle] -pub unsafe extern "C" fn roc_memset(dst: *mut c_void, c: i32, n: usize) -> *mut c_void { - libc::memset(dst, c, n) -} - -fn run(input_dirname: &str, output_dirname: &str) -> Result<(), String> { - let input_dir = strip_windows_prefix( - PathBuf::from(input_dirname) - .canonicalize() - .map_err(|e| format!("{}: {}", input_dirname, e))?, - ); - - let output_dir = { - let dir = PathBuf::from(output_dirname); - if !dir.exists() { - fs::create_dir_all(&dir).unwrap(); - } - strip_windows_prefix( - dir.canonicalize() - .map_err(|e| format!("{}: {}", output_dirname, e))?, - ) - }; - - if !input_dir.exists() { - return Err(format!("{} does not exist. The first argument should be the directory where your Markdown files are.", input_dir.display())); - } - - if !output_dir.exists() { - return Err(format!("Could not create {}", output_dir.display())); - } - - let mut input_files: Vec = vec![]; - find_files(&input_dir, &mut input_files) - .map_err(|e| format!("Error finding input files: {}", e))?; - - println!("Processing {} input files...", input_files.len()); - - // TODO: process the files asynchronously - let num_files = input_files.len(); - let mut num_errors = 0; - let mut num_successes = 0; - for input_file in input_files { - match input_file.extension() { - Some(s) if s.eq("md".into()) => { - match process_file(&input_dir, &output_dir, &input_file) { - Ok(()) => { - num_successes += 1; - } - Err(e) => { - eprintln!( - "Failed to process file:\n\n ({:?})with error:\n\n {}", - &input_file, e - ); - num_errors += 1; - } - } - } - _ => {} - }; - } - - println!( - "Processed {} files with {} successes and {} errors", - num_files, num_successes, num_errors - ); - - if num_errors > 0 { - Err("Could not process all files".into()) - } else { - Ok(()) - } -} - -fn process_file(input_dir: &Path, output_dir: &Path, input_file: &Path) -> Result<(), String> { - let input_relpath = input_file - .strip_prefix(input_dir) - .map_err(|e| e.to_string())? - .to_path_buf(); - - let mut output_relpath = input_relpath.clone(); - output_relpath.set_extension("html"); - - let content_md = fs::read_to_string(input_file).map_err(|e| { - format!( - "Error reading {}: {}", - input_file.to_str().unwrap_or("an input file"), - e - ) - })?; - - let mut content_html = String::new(); - let mut options = Options::all(); - - // In the tutorial, this messes up string literals in blocks. - // Those could be done as markdown code blocks, but the repl ones need - // a special class, and there's no way to add that class using markdown alone. - // - // We could make this option user-configurable if people actually want it! - options.remove(Options::ENABLE_SMART_PUNCTUATION); - - let parser = Parser::new_ext(&content_md, options); - - // We'll build a new vector of events since we can only consume the parser once - let mut parser_with_highlighting = Vec::new(); - // As we go along, we'll want to highlight code in bundles, not lines - let mut code_to_highlight = String::new(); - // And track a little bit of state - let mut in_code_block = false; - let mut is_roc_code = false; - let syntax_set: syntect::parsing::SyntaxSet = SyntaxSet::load_defaults_newlines(); - let theme_set: syntect::highlighting::ThemeSet = ThemeSet::load_defaults(); - - for event in parser { - match event { - pulldown_cmark::Event::Code(code_str) => { - if code_str.starts_with("roc!") { - let stripped = code_str - .strip_prefix("roc!") - .expect("expected leading 'roc!'"); - - let highlighted_html = - roc_highlight::highlight_roc_code_inline(stripped.to_string().as_str()); - - parser_with_highlighting.push(pulldown_cmark::Event::Html( - pulldown_cmark::CowStr::from(highlighted_html), - )); - } else { - let inline_code = - pulldown_cmark::CowStr::from(format!("{}", code_str)); - parser_with_highlighting.push(pulldown_cmark::Event::Html(inline_code)); - } - } - pulldown_cmark::Event::Start(pulldown_cmark::Tag::CodeBlock(cbk)) => { - in_code_block = true; - is_roc_code = is_roc_code_block(&cbk); - } - pulldown_cmark::Event::End(pulldown_cmark::Tag::CodeBlock( - pulldown_cmark::CodeBlockKind::Fenced(extention_str), - )) => { - if in_code_block { - match &code_to_highlight.split(':').collect::>()[..] { - ["file", replacement_file_name, "snippet", snippet_name] => { - code_to_highlight = read_replacement_snippet( - replacement_file_name.trim(), - snippet_name.trim(), - input_file, - ); - } - ["file", replacement_file_name] => { - code_to_highlight = - read_replacement_file(replacement_file_name.trim(), input_file); - } - _ => {} - } - - // Format the whole multi-line code block as HTML all at once - let highlighted_html: String; - if is_roc_code { - highlighted_html = roc_highlight::highlight_roc_code(&code_to_highlight) - } else if let Some(syntax) = syntax_set.find_syntax_by_token(&extention_str) { - let mut h = - HighlightLines::new(syntax, &theme_set.themes["base16-ocean.dark"]); - - let mut html_generator = ClassedHTMLGenerator::new_with_class_style( - syntax, - &syntax_set, - ClassStyle::Spaced, - ); - for line in LinesWithEndings::from(&code_to_highlight) { - html_generator.parse_html_for_line_which_includes_newline(line); - } - highlighted_html = - format!("
{}
", html_generator.finalize()) - } else { - highlighted_html = format!("
{}
", &code_to_highlight) - } - - // And put it into the vector - parser_with_highlighting.push(pulldown_cmark::Event::Html( - pulldown_cmark::CowStr::from(highlighted_html), - )); - code_to_highlight = String::new(); - in_code_block = false; - } - } - pulldown_cmark::Event::Text(t) => { - if in_code_block { - // If we're in a code block, build up the string of text - code_to_highlight.push_str(&t); - } else { - parser_with_highlighting.push(pulldown_cmark::Event::Text(t)) - } - } - e => { - parser_with_highlighting.push(e); - } - } - } - - html::push_html(&mut content_html, parser_with_highlighting.into_iter()); - - let roc_relpath = RocStr::from(output_relpath.to_str().unwrap()); - let roc_content_html = RocStr::from(content_html.as_str()); - let roc_output_str = unsafe { - roc_transformFileContentForHost(RocBox::new(roc_relpath), RocBox::new(roc_content_html)) - }; - - let output_file = output_dir.join(&output_relpath); - let rust_output_str: &str = &roc_output_str; - - println!("{} -> {}", input_file.display(), output_file.display()); - - // Create parent directory if it doesn't exist - let parent_dir = output_file.parent().unwrap(); - if !parent_dir.exists() { - fs::create_dir_all(&parent_dir).unwrap(); - } - - fs::write(output_file, rust_output_str).map_err(|e| format!("{}", e)) -} - -fn find_files(dir: &Path, file_paths: &mut Vec) -> std::io::Result<()> { - for entry in fs::read_dir(dir)? { - let pathbuf = entry?.path(); - if pathbuf.is_dir() { - find_files(&pathbuf, file_paths)?; - } else { - file_paths.push(pathbuf); - } - } - Ok(()) -} - -/// On windows, the path is prefixed with `\\?\`, the "verbatim" prefix. -/// Such a path does not works as an argument to `zig` and other command line tools, -/// and there seems to be no good way to strip it. So we resort to some string manipulation. -pub fn strip_windows_prefix(path_buf: PathBuf) -> std::path::PathBuf { - #[cfg(not(windows))] - { - path_buf - } - - #[cfg(windows)] - { - let path_str = path_buf.display().to_string(); - - std::path::Path::new(path_str.trim_start_matches(r"\\?\")).to_path_buf() - } -} - -fn is_roc_code_block(cbk: &pulldown_cmark::CodeBlockKind) -> bool { - match cbk { - pulldown_cmark::CodeBlockKind::Indented => false, - pulldown_cmark::CodeBlockKind::Fenced(cow_str) => cow_str.contains("roc") - } -} - -fn read_replacement_file(replacement_file_name: &str, input_file: &Path) -> String { - if replacement_file_name.contains("../") { - panic!( - "ERROR File \"{}\" must be located within the input diretory.", - replacement_file_name - ); - } - - let input_dir = input_file.parent().unwrap(); - let replacement_file_path = input_dir.join(replacement_file_name); - - match fs::read(&replacement_file_path) { - Ok(content) => String::from_utf8(content).unwrap(), - Err(err) => { - panic!( - "ERROR File \"{}\" is unreadable:\n\t{}", - replacement_file_path.to_str().unwrap(), - err - ); - } - } -} - -fn remove_snippet_comments(input: &str) -> String { - let line_ending = if input.contains("\r\n") { "\r\n" } else { "\n" }; - - input - .lines() - .filter(|line| { - !line.contains("### start snippet") && !line.contains("### end snippet") - }) - .collect::>() - .join(line_ending) -} - -fn read_replacement_snippet( - replacement_file_name: &str, - snippet_name: &str, - input_file: &Path, -) -> String { - let start_marker = format!("### start snippet {}", snippet_name); - let end_marker = format!("### end snippet {}", snippet_name); - - let replacement_file_content = read_replacement_file(replacement_file_name.trim(), input_file); - - let start_position = replacement_file_content - .find(&start_marker) - .expect(format!("ERROR Failed to find snippet start \"{}\". ", &start_marker).as_str()); - - let end_position = replacement_file_content - .find(&end_marker) - .expect(format!("ERROR Failed to find snippet end \"{}\". ", &end_marker).as_str()); - - if start_position >= end_position { - let start_position_str = start_position.to_string(); - let end_position_str = end_position.to_string(); - - panic!( - "ERROR Detected start position ({start_position_str}) of snippet \"{snippet_name}\" was greater than or equal to detected end position ({end_position_str})." - ); - } else { - // We want to remove other snippet comments inside this one if they exist. - remove_snippet_comments( - &replacement_file_content[start_position + start_marker.len()..end_position] - ) - } -} diff --git a/examples/static-site-gen/platform/src/main.rs b/examples/static-site-gen/platform/src/main.rs deleted file mode 100644 index 0765384f29..0000000000 --- a/examples/static-site-gen/platform/src/main.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - std::process::exit(host::rust_main() as _); -} diff --git a/examples/static-site-gen/static-site.roc b/examples/static-site-gen/static-site.roc deleted file mode 100644 index 64d40c0ad5..0000000000 --- a/examples/static-site-gen/static-site.roc +++ /dev/null @@ -1,65 +0,0 @@ -app [transformFileContent] { pf: platform "platform/main.roc" } - -import pf.Html exposing [html, head, body, div, text, a, ul, li, link, meta] -import pf.Html.Attributes exposing [httpEquiv, content, href, rel, lang, class, title] - -NavLink : { - url : Str, - title : Str, - text : Str, -} - -navLinks : List NavLink -navLinks = [ - { url: "subFolder/apple.html", title: "Exempli Gratia Pagina Pomi", text: "Apple" }, - { url: "banana.html", title: "Exempli Gratia Pagina Musa", text: "Banana" }, - { url: "cherry.html", title: "Exempli Pagina Cerasus", text: "Cherry" }, -] - -transformFileContent : Str, Str -> Str -transformFileContent = \currentUrl, htmlContent -> - List.findFirst navLinks (\{ url } -> url == currentUrl) - |> Result.map (\currentNavLink -> view currentNavLink htmlContent) - |> Result.map Html.render - |> Result.withDefault "" - -view : NavLink, Str -> Html.Node -view = \currentNavLink, htmlContent -> - html [lang "en"] [ - head [] [ - meta [httpEquiv "content-type", content "text/html; charset=utf-8"], - Html.title [] [text currentNavLink.title], - link [rel "stylesheet", href "style.css"], - ], - body [] [ - div [class "main"] [ - div [class "navbar"] [ - viewNavbar currentNavLink, - ], - div [class "article"] [ - # For now `text` is not escaped so we can use it to insert HTML - # We'll probably want something more explicit in the long term though! - text htmlContent, - ], - ], - ], - ] - -viewNavbar : NavLink -> Html.Node -viewNavbar = \currentNavLink -> - ul - [] - (List.map navLinks \nl -> viewNavLink (nl == currentNavLink) nl) - -viewNavLink : Bool, NavLink -> Html.Node -viewNavLink = \isCurrent, navlink -> - if isCurrent then - li [class "nav-link nav-link--current"] [ - text navlink.text, - ] - else - li [class "nav-link"] [ - a - [href navlink.url, title navlink.title] - [text navlink.text], - ]