From 30f7d39ca2ed4590b5d356b1a4c024d11156a383 Mon Sep 17 00:00:00 2001 From: Minijackson Date: Sun, 25 Dec 2022 15:46:31 +0100 Subject: WIP before core rewrite --- Cargo.lock | 566 ++++++++++++++++++++++++++----------- TODO.md | 10 +- cairo-renderer/Cargo.toml | 6 +- cairo-renderer/src/lib.rs | 22 +- core/src/core_shapes.rs | 2 +- core/src/solving.rs | 6 +- core/src/styles.rs | 7 +- examples/lib-dfscq-log/src/main.rs | 2 +- flake.nix | 3 + lua-bindings/src/lib.rs | 32 ++- z3-solver/Cargo.toml | 2 +- z3-solver/src/lib.rs | 20 +- 12 files changed, 468 insertions(+), 210 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f39c0de..dc7737b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,11 +2,29 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + [[package]] name = "anyhow" -version = "1.0.36" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68803225a7b13e47191bab76f2687382b60d259e8cf37f6e1893658b84bb9479" +checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" [[package]] name = "approx" @@ -17,17 +35,51 @@ dependencies = [ "num-traits", ] +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + [[package]] name = "autocfg" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bindgen" +version = "0.58.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f8523b410d7187a43085e7e064416ea32ded16bd0a4e6fc025e21616d01258f" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "clap", + "env_logger", + "lazy_static", + "lazycell", + "log", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "which", +] [[package]] name = "bitflags" -version = "1.2.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bstr" @@ -40,24 +92,23 @@ dependencies = [ [[package]] name = "cairo-rs" -version = "0.9.1" +version = "0.16.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5c0f2e047e8ca53d0ff249c54ae047931d7a6ebe05d00af73e0ffeb6e34bdb8" +checksum = "f3125b15ec28b84c238f6f476c6034016a5f6cc0221cb514ca46c532139fc97d" dependencies = [ "bitflags", "cairo-sys-rs", "glib", - "glib-sys", - "gobject-sys", "libc", + "once_cell", "thiserror", ] [[package]] name = "cairo-sys-rs" -version = "0.10.0" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ed2639b9ad5f1d6efa76de95558e11339e7318426d84ac4890b86c03e828ca7" +checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" dependencies = [ "glib-sys", "libc", @@ -66,15 +117,59 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.77" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4" +checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" + +[[package]] +name = "cexpr" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-expr" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0357a6402b295ca3a86bc148e84df46c02e41f41fef186bda662557ef6328aa" +dependencies = [ + "smallvec", +] [[package]] name = "cfg-if" -version = "0.1.10" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "clang-sys" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clap" +version = "2.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "ansi_term", + "atty", + "bitflags", + "strsim", + "textwrap", + "unicode-width", + "vec_map", +] [[package]] name = "diaphragm-cairo-renderer" @@ -121,44 +216,56 @@ dependencies = [ ] [[package]] -name = "either" -version = "1.6.1" +name = "env_logger" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] [[package]] name = "futures-channel" -version = "0.3.8" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b7109687aa4e177ef6fe84553af6280ef2778bdb7783ba44c9dc3399110fe64" +checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" dependencies = [ "futures-core", ] [[package]] name = "futures-core" -version = "0.3.8" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "847ce131b72ffb13b6109a221da9ad97a64cbe48feb1028356b836b47b8f1748" +checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" [[package]] name = "futures-executor" -version = "0.3.8" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4caa2b2b68b880003057c1dd49f1ed937e38f22fcf6c212188a121f08cf40a65" +checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" dependencies = [ "futures-core", "futures-task", "futures-util", ] +[[package]] +name = "futures-io" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" + [[package]] name = "futures-macro" -version = "0.3.8" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77408a692f1f97bcc61dc001d752e00643408fbc922e4d634c655df50d595556" +checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" dependencies = [ - "proc-macro-hack", "proc-macro2", "quote", "syn", @@ -166,45 +273,73 @@ dependencies = [ [[package]] name = "futures-task" -version = "0.3.8" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c554eb5bf48b2426c4771ab68c6b14468b6e76cc90996f528c3338d761a4d0d" -dependencies = [ - "once_cell", -] +checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" [[package]] name = "futures-util" -version = "0.3.8" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d304cff4a7b99cfb7986f7d43fbe93d175e72e704a8860787cc95e9ffd85cbd2" +checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" dependencies = [ "futures-core", "futures-macro", "futures-task", - "pin-project", + "pin-project-lite", "pin-utils", - "proc-macro-hack", - "proc-macro-nested", "slab", ] [[package]] name = "getrandom" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ "cfg-if", "libc", "wasi", ] +[[package]] +name = "gio" +version = "0.16.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a1c84b4534a290a29160ef5c6eff2a9c95833111472e824fc5cb78b513dd092" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror", +] + +[[package]] +name = "gio-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + [[package]] name = "glib" -version = "0.10.3" +version = "0.16.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c685013b7515e668f1b57a165b009d4d28cb139a8a989bbd699c10dad29d0c5" +checksum = "ddd4df61a866ed7259d6189b8bcb1464989a77f1d85d25d002279bbe9dd38b2f" dependencies = [ "bitflags", "futures-channel", @@ -212,22 +347,24 @@ dependencies = [ "futures-executor", "futures-task", "futures-util", + "gio-sys", "glib-macros", "glib-sys", "gobject-sys", "libc", "once_cell", + "smallvec", + "thiserror", ] [[package]] name = "glib-macros" -version = "0.10.1" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41486a26d1366a8032b160b59065a59fb528530a46a49f627e7048fb8c064039" +checksum = "e084807350b01348b6d9dbabb724d1a0bb987f47a2c85de200e98e12e30733bf" dependencies = [ "anyhow", "heck", - "itertools", "proc-macro-crate", "proc-macro-error", "proc-macro2", @@ -237,19 +374,25 @@ dependencies = [ [[package]] name = "glib-sys" -version = "0.10.1" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e9b997a66e9a23d073f2b1abb4dbfc3925e0b8952f67efd8d9b6e168e4cdc1" +checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" dependencies = [ "libc", "system-deps", ] +[[package]] +name = "glob" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" + [[package]] name = "gobject-sys" -version = "0.10.0" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "952133b60c318a62bf82ee75b93acc7e84028a093e06b9e27981c2b6fe68218c" +checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" dependencies = [ "glib-sys", "libc", @@ -258,39 +401,58 @@ dependencies = [ [[package]] name = "heck" -version = "0.3.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac" -dependencies = [ - "unicode-segmentation", -] +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" [[package]] -name = "itertools" -version = "0.9.0" +name = "hermit-abi" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ - "either", + "libc", ] +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + [[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + [[package]] name = "libc" -version = "0.2.81" +version = "0.2.139" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" + +[[package]] +name = "libloading" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] [[package]] name = "log" -version = "0.4.11" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if", ] @@ -327,20 +489,30 @@ dependencies = [ "syn", ] +[[package]] +name = "nom" +version = "5.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +dependencies = [ + "memchr", + "version_check", +] + [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", ] [[package]] name = "once_cell" -version = "1.5.2" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" +checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" [[package]] name = "palette" @@ -368,14 +540,13 @@ dependencies = [ [[package]] name = "pango" -version = "0.9.1" +version = "0.16.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9937068580bebd8ced19975938573803273ccbcbd598c58d4906efd4ac87c438" +checksum = "cdff66b271861037b89d028656184059e03b0b6ccb36003820be19f7200b1e94" dependencies = [ "bitflags", + "gio", "glib", - "glib-sys", - "gobject-sys", "libc", "once_cell", "pango-sys", @@ -383,9 +554,9 @@ dependencies = [ [[package]] name = "pango-sys" -version = "0.10.0" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d2650c8b62d116c020abd0cea26a4ed96526afda89b1c4ea567131fdefc890" +checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" dependencies = [ "glib-sys", "gobject-sys", @@ -395,27 +566,23 @@ dependencies = [ [[package]] name = "pangocairo" -version = "0.10.0" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00f5ae67a05a5e023f09f64e9a71c845274d4b82dedee237b70425811885e883" +checksum = "16ad2ec87789371b551fd2367c10aa37060412ffd3e60abd99491b21b93a3f9b" dependencies = [ "bitflags", "cairo-rs", - "cairo-sys-rs", "glib", - "glib-sys", - "gobject-sys", "libc", "pango", - "pango-sys", "pangocairo-sys", ] [[package]] name = "pangocairo-sys" -version = "0.11.0" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94ccc97f698c2f0233b84e5ca676893a1e676785b60eec700b9c0e6dcd0feb98" +checksum = "848d2df9b7f1a8c7a19d994de443bcbe5d4382610ccb8e64247f932be74fcf76" dependencies = [ "cairo-sys-rs", "glib-sys", @@ -424,6 +591,12 @@ dependencies = [ "system-deps", ] +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + [[package]] name = "phf" version = "0.8.0" @@ -463,24 +636,10 @@ dependencies = [ ] [[package]] -name = "pin-project" -version = "1.0.2" +name = "pin-project-lite" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ccc2237c2c489783abd8c4c80e5450fc0e98644555b1364da68cc29aa151ca7" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8e8d2bf0b23038a4424865103a4df472855692821aab4e4f5c3312d461d9e5f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pin-utils" @@ -490,22 +649,24 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.19" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" [[package]] name = "ppv-lite86" -version = "0.2.10" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro-crate" -version = "0.1.5" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" dependencies = [ + "once_cell", + "thiserror", "toml", ] @@ -533,32 +694,20 @@ dependencies = [ "version_check", ] -[[package]] -name = "proc-macro-hack" -version = "0.5.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" - -[[package]] -name = "proc-macro-nested" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eba180dafb9038b050a4c280019bbedf9f2467b61e5d892dcad585bb57aadc5a" - [[package]] name = "proc-macro2" -version = "1.0.24" +version = "1.0.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] name = "quote" -version = "1.0.8" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" dependencies = [ "proc-macro2", ] @@ -614,6 +763,23 @@ dependencies = [ "rand_core", ] +[[package]] +name = "regex" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" + [[package]] name = "rustc-hash" version = "1.1.0" @@ -622,80 +788,99 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "serde" -version = "1.0.118" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fed41fc1a24994d044e6db6935e69511a1153b52c15eb42493b26fa87feba0" + +[[package]] +name = "shlex" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c64263859d87aa2eb554587e2d23183398d617427327cf2b3d0ed8c69e4800" +checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" [[package]] name = "siphasher" -version = "0.3.3" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa8f3741c7372e75519bd9346068370c9cdaabcc1f9599cbcf2a2719352286b7" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" [[package]] name = "slab" -version = "0.4.2" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] [[package]] -name = "strum" -version = "0.18.0" +name = "smallvec" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57bd81eb48f4c437cadc685403cad539345bf703d78e63707418431cecd4522b" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] -name = "strum_macros" -version = "0.18.0" +name = "strsim" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c85aa3f8ea653bfd3ddf25f7ee357ee4d204731f6aa9ad04002306f6e2774c" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "syn" -version = "1.0.55" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a571a711dddd09019ccc628e1b17fe87c59b09d513c06c026877aa708334f37a" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", ] [[package]] name = "system-deps" -version = "1.3.2" +version = "6.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3ecc17269a19353b3558b313bba738b25d82993e30d62a18406a24aba4649b" +checksum = "2955b1fe31e1fa2fbd1976b71cc69a606d7d4da16f6de3333d0c92d51419aeff" dependencies = [ + "cfg-expr", "heck", "pkg-config", - "strum", - "strum_macros", - "thiserror", "toml", "version-compare", ] +[[package]] +name = "termcolor" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + [[package]] name = "thiserror" -version = "1.0.22" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e9ae34b84616eedaaf1e9dd6026dbe00dcafa92aa0c8077cb69df1fcfe5e53e" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.22" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ba20f23e85b10754cd195504aebf6a27e2e6cbe28c17778a0c930724628dd56" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" dependencies = [ "proc-macro2", "quote", @@ -704,36 +889,42 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.8" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +checksum = "1333c76748e868a4d9d1017b5ab53171dfd095f70c712fdb4653a406547f598f" dependencies = [ "serde", ] [[package]] -name = "unicode-segmentation" -version = "1.7.1" +name = "unicode-ident" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" [[package]] -name = "unicode-xid" -version = "0.2.1" +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[package]] +name = "vec_map" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version-compare" -version = "0.0.10" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d63556a25bae6ea31b52e640d7c41d1ab27faba4ccb600013837a3d0b3994ca1" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" [[package]] name = "version_check" -version = "0.9.2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "wasi" @@ -741,11 +932,51 @@ version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" +[[package]] +name = "which" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724" +dependencies = [ + "libc", +] + +[[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 = "z3" -version = "0.9.0" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c5bdc8c9e19d1b983c5584cd4baf6fbd71f3ca5c83283b9d46ad7780d67bd3b" +checksum = "d25754b4bf4516a65d0e596ea9c1f0082224bdf20823a37fdd9111fa08d5bf48" dependencies = [ "lazy_static", "log", @@ -754,6 +985,9 @@ dependencies = [ [[package]] name = "z3-sys" -version = "0.6.3" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afa18ba5fbd4933e41ffb440c3fd91f91fe9cdb7310cce3ddfb6648563811de0" +checksum = "1c82dcbc58be4bf1994c520066cb2bd6c3d36aed0fdc57244f34d277421986a6" +dependencies = [ + "bindgen", +] diff --git a/TODO.md b/TODO.md index da8c9b4..da27b30 100644 --- a/TODO.md +++ b/TODO.md @@ -1,4 +1,6 @@ -- Add the diaphragm language -- Add a piet-based renderer -- Add a web-based renderer? (maybe piet) -- Add a live renderer (maybe druid) +- [ ] Rewrite so that core is just about core shapes and adding constraints +- [-] Add the lua bindings + - [ ] Add the diaphragm language +- [ ] Add a piet-based renderer +- [ ] Add a web-based renderer? (maybe piet) +- [ ] Add a live renderer (maybe druid) diff --git a/cairo-renderer/Cargo.toml b/cairo-renderer/Cargo.toml index 9d7d818..ebef7d5 100644 --- a/cairo-renderer/Cargo.toml +++ b/cairo-renderer/Cargo.toml @@ -9,6 +9,6 @@ edition = "2021" [dependencies] diaphragm-core = { path = "../core" } -cairo-rs = { version = "0.9", features = ["svg", "png"] } -pango = "0.9" -pangocairo = "0.10" +cairo-rs = { version = "0.16", features = ["svg", "png"] } +pango = "0.16" +pangocairo = "0.16" diff --git a/cairo-renderer/src/lib.rs b/cairo-renderer/src/lib.rs index 26ca089..d912afc 100644 --- a/cairo-renderer/src/lib.rs +++ b/cairo-renderer/src/lib.rs @@ -12,7 +12,7 @@ impl CairoRenderer { pub fn new() -> Self { // TODO: properly let surface = cairo::SvgSurface::for_stream(1920., 1080., std::io::stdout()).unwrap(); - let ctx = cairo::Context::new(&surface); + let ctx = cairo::Context::new(&surface).unwrap(); Self { ctx } } @@ -24,15 +24,15 @@ impl Renderer for CairoRenderer { } fn stroke(&mut self) { - self.ctx.stroke(); + self.ctx.stroke().unwrap(); } fn fill(&mut self) { - self.ctx.fill(); + self.ctx.fill().unwrap(); } fn fill_preserve(&mut self) { - self.ctx.fill_preserve(); + self.ctx.fill_preserve().unwrap(); } fn set_pattern(&mut self, pattern: &Pattern) { @@ -47,7 +47,7 @@ impl Renderer for CairoRenderer { } fn set_dash(&mut self, dash: &DefinedDashStyle) { - self.ctx.set_dash(&dash.dashes(), dash.offset()); + self.ctx.set_dash(dash.dashes(), dash.offset()); } fn clear_dash(&mut self) { @@ -67,7 +67,7 @@ impl Renderer for CairoRenderer { } fn text_extents(&self, text: &str, font: &FontDescription) -> (f64, f64) { - let layout = pangocairo::create_layout(&self.ctx).expect("Couldn't create layout"); + let layout = pangocairo::create_layout(&self.ctx); let font_desc = pango::FontDescription::from_string(&font.family); layout.set_font_description(Some(&font_desc)); layout.set_markup(text); @@ -76,26 +76,26 @@ impl Renderer for CairoRenderer { //(extents.width as f64, extents.height as f64) // TODO: get height from the baseline - let mut layout_iter = layout.get_iter().unwrap(); + let mut layout_iter = layout.iter(); let _height = loop { if layout_iter.at_last_line() { - break layout_iter.get_baseline(); + break layout_iter.baseline(); } layout_iter.next_line(); }; // TODO: Probably should use the logical extents, but it has weird width - let (_, extents) = layout.get_pixel_extents(); + let (_, extents) = layout.pixel_extents(); //let (extents, _) = layout.get_pixel_extents(); - (extents.width as f64, extents.height as f64) + (extents.width() as f64, extents.height() as f64) //let (width, height) = layout.get_pixel_size(); //(width as f64, height as f64) } fn show_text(&mut self, text: &str, font: &DefinedFontDescription) { - let layout = pangocairo::create_layout(&self.ctx).expect("Couldn't create layout"); + let layout = pangocairo::create_layout(&self.ctx); let mut font_desc = pango::FontDescription::from_string(&font.family); // TODO: I have no fucking idea why diff --git a/core/src/core_shapes.rs b/core/src/core_shapes.rs index c3d3cae..805d82e 100644 --- a/core/src/core_shapes.rs +++ b/core/src/core_shapes.rs @@ -30,7 +30,7 @@ pub struct Rectangle {} impl CoreShape for Rectangle { fn to_render(&self, _model: &dyn SolverModel) -> Option> { - Some(Box::new(self.clone())) + Some(Box::new(*self)) } } diff --git a/core/src/solving.rs b/core/src/solving.rs index c7e94ba..4760611 100644 --- a/core/src/solving.rs +++ b/core/src/solving.rs @@ -196,7 +196,7 @@ impl Constrainable for StrokeStyle { }; Some(DefinedStrokeStyle { - pattern: self.pattern.clone(), + pattern: self.pattern, dash, line_width: self.line_width.fixate(model)?, }) @@ -249,7 +249,7 @@ impl Constrainable for FontDescription { family: self.family.clone(), style: self.style, weight: self.weight, - size: self.size.fixate(&*model)?, + size: self.size.fixate(model)?, }) } } @@ -260,7 +260,7 @@ impl Constrainable for Text { fn fixate(&self, model: &dyn SolverModel) -> Option { Some(DefinedText { content: self.content.clone(), - font: self.font.fixate(&*model)?, + font: self.font.fixate(model)?, }) } } diff --git a/core/src/styles.rs b/core/src/styles.rs index c061c58..73373ba 100644 --- a/core/src/styles.rs +++ b/core/src/styles.rs @@ -10,10 +10,7 @@ pub enum Pattern { impl Pattern { pub fn is_none(&self) -> bool { - match self { - Pattern::None => true, - _ => false, - } + matches!(self, Pattern::None) } } @@ -97,7 +94,7 @@ impl StrokeStyleBuilder { pub fn build(&mut self) -> StrokeStyle { StrokeStyle { - pattern: self.pattern.clone().unwrap_or_default(), + pattern: self.pattern.unwrap_or_default(), dash: self.dash.clone(), line_width: self.line_width.unwrap_or(Float::Fixed(2.)), } diff --git a/examples/lib-dfscq-log/src/main.rs b/examples/lib-dfscq-log/src/main.rs index fe5db9a..ee95884 100644 --- a/examples/lib-dfscq-log/src/main.rs +++ b/examples/lib-dfscq-log/src/main.rs @@ -19,7 +19,7 @@ use spacer::*; use diaphragm_cairo_renderer::CairoRenderer; use diaphragm_core::{ colors::Color, - core_shapes::{Text}, + core_shapes::Text, styles::*, text::FontDescription, types::*, diff --git a/flake.nix b/flake.nix index bbe2ab1..372072e 100644 --- a/flake.nix +++ b/flake.nix @@ -8,6 +8,9 @@ pkgs = nixpkgs.legacyPackages.x86_64-linux; in { devShell.x86_64-linux = pkgs.mkShell { + + LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib"; + buildInputs = with pkgs; [ pkgconfig cairo diff --git a/lua-bindings/src/lib.rs b/lua-bindings/src/lib.rs index 6628ee2..fcf307b 100644 --- a/lua-bindings/src/lib.rs +++ b/lua-bindings/src/lib.rs @@ -1,17 +1,21 @@ -use std::sync::atomic::{AtomicUsize, Ordering}; +use std::{sync::atomic::{AtomicUsize, Ordering}, cell::RefCell}; +use diaphragm_cairo_renderer::CairoRenderer; use diaphragm_core::{ solving::VariableHandle, text::{FontDescription as CoreFontDescription, FontStyle, FontWeight, Text as CoreText}, types::Float as CoreFloat, + Runtime, }; -// use diaphragm_cairo_renderer::CairoRenderer; -// use diaphragm_core::Runtime; -// use diaphragm_z3_solver::{z3, Z3Context}; +use diaphragm_z3_solver::{z3, Z3Context}; use mlua::prelude::*; static MAX_ID: AtomicUsize = AtomicUsize::new(0); +thread_local! { + static SENDER: RefCell>> = RefCell::new(None); +} + #[derive(Clone, Copy, Debug)] struct Float(CoreFloat); @@ -78,7 +82,14 @@ fn font(_: &Lua, params: LuaTable) -> LuaResult { #[derive(Clone, Debug)] struct Text(CoreText); -impl LuaUserData for Text {} +impl LuaUserData for Text { + fn add_methods<'lua, M: LuaUserDataMethods<'lua, Self>>(methods: &mut M) { + methods.add_method("draw", |_, this, _params: ()| { + println!("I'm drawing: {}", this.0.content); + Ok(()) + }) + } +} fn text(_: &Lua, params: LuaTable) -> LuaResult { let content = params.get("content")?; @@ -97,6 +108,17 @@ fn draw(_: &Lua, params: LuaTable) -> LuaResult<()> { let content: LuaTable = params.get("content")?; let output: LuaTable = params.get("output")?; + let z3_cfg = z3::Config::new(); + let z3_ctx = z3::Context::new(&z3_cfg); + let ctx = Z3Context::new(&z3_ctx); + + let cairo_renderer = CairoRenderer::new(); + + // TODO: we shouldn't need the renderer until the end + let mut runtime = Runtime::new(Box::new(ctx), Box::new(cairo_renderer)); + + let _solver = runtime.solver_ctx(); + dbg!(content, output); Ok(()) diff --git a/z3-solver/Cargo.toml b/z3-solver/Cargo.toml index 6f63e1c..f598f53 100644 --- a/z3-solver/Cargo.toml +++ b/z3-solver/Cargo.toml @@ -9,4 +9,4 @@ edition = "2021" [dependencies] diaphragm-core = { path = "../core" } -z3 = "0.9" +z3 = "0.11" diff --git a/z3-solver/src/lib.rs b/z3-solver/src/lib.rs index 04d77eb..35a17a8 100644 --- a/z3-solver/src/lib.rs +++ b/z3-solver/src/lib.rs @@ -45,7 +45,7 @@ impl<'z3> Z3Context<'z3> { pub fn new(ctx: &'z3 z3::Context) -> Self { Self { ctx, - solver: z3::Solver::new(&ctx), + solver: z3::Solver::new(ctx), floats: HashMap::new(), max_float_id: 0, bools: HashMap::new(), @@ -85,7 +85,7 @@ impl<'z3> Z3Context<'z3> { let handle = match f { Float::Fixed(value) => { let (num, den) = value_to_num_den(value); - return z3::ast::Real::from_real(&self.ctx, num, den); + return z3::ast::Real::from_real(self.ctx, num, den); } Float::Variable(handle) => handle, }; @@ -128,7 +128,7 @@ impl<'z3> SolverContext for Z3Context<'z3> { let id = self.max_float_id; let handle = VariableHandle::new(id as usize); self.floats - .insert(handle, z3::ast::Real::new_const(&self.ctx, id)); + .insert(handle, z3::ast::Real::new_const(self.ctx, id)); Float::from_handle(handle) } @@ -140,7 +140,7 @@ impl<'z3> SolverContext for Z3Context<'z3> { let (num, den) = value_to_num_den(value); self.floats - .insert(handle, z3::ast::Real::from_real(&self.ctx, num, den)); + .insert(handle, z3::ast::Real::from_real(self.ctx, num, den)); Float::from_handle(handle) } @@ -236,7 +236,7 @@ impl<'z3> SolverContext for Z3Context<'z3> { let id = self.max_bool_id; let handle = VariableHandle::new(id as usize); self.bools - .insert(handle, z3::ast::Bool::new_const(&self.ctx, id)); + .insert(handle, z3::ast::Bool::new_const(self.ctx, id)); Bool::new(handle) } @@ -246,21 +246,21 @@ impl<'z3> SolverContext for Z3Context<'z3> { let handle = VariableHandle::new(id as usize); self.bools - .insert(handle, z3::ast::Bool::from_bool(&self.ctx, value)); + .insert(handle, z3::ast::Bool::from_bool(self.ctx, value)); Bool::new(handle) } fn bool_eq(&mut self, lhs: Bool, rhs: Bool) -> Bool { let lhs = self.bool(lhs); let rhs = self.bool(rhs); - let result = lhs._eq(&rhs); + let result = lhs._eq(rhs); self.anon_bool(result) } fn bool_ne(&mut self, lhs: Bool, rhs: Bool) -> Bool { let lhs = self.bool(lhs); let rhs = self.bool(rhs); - let result = lhs._eq(&rhs).not(); + let result = lhs._eq(rhs).not(); self.anon_bool(result) } @@ -308,7 +308,7 @@ impl SolverModel for Z3Model<'_> { let (num, den) = self .model - .eval::(self.ctx.floats.get(&handle).expect("Couldn't find float")) + .eval::(self.ctx.floats.get(&handle).expect("Couldn't find float"), true) .unwrap() .as_real() .unwrap(); @@ -319,7 +319,7 @@ impl SolverModel for Z3Model<'_> { fn eval_bool(&self, f: Bool) -> Option { Some( self.model - .eval::(&self.ctx.bool(f)) + .eval::(self.ctx.bool(f), true) .unwrap() .as_bool() .unwrap(), -- cgit v1.2.3