diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ad7416bc..85801822 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: cachix/install-nix-action@v18 with: github_access_token: ${{ secrets.GITHUB_TOKEN }} @@ -42,7 +42,7 @@ jobs: - bans licenses sources steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: EmbarkStudios/cargo-deny-action@v1 with: command: check ${{ matrix.checks }} @@ -51,12 +51,12 @@ jobs: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Check Rustfmt run: cargo fmt -- --check spell-check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: crate-ci/typos@master diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index d85ea588..4ea684c6 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -28,10 +28,10 @@ jobs: prerelease: false build-engine: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Build engine run: | sudo apt-get update @@ -61,10 +61,10 @@ jobs: - build-engine - create-release - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Install deps run: | sudo apt-get update @@ -112,7 +112,7 @@ jobs: - build-engine - create-release - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 strategy: matrix: @@ -144,14 +144,12 @@ jobs: sudo mv ./kime_engine.hpp /usr/include - name: Install Qt-${{ matrix.qt5 }} - uses: jurplel/install-qt-action@v2 + uses: jurplel/install-qt-action@v4 with: dir: /opt version: ${{ matrix.qt5 }} - aqtversion: ==1.1.1 - py7zrversion: ==0.13.0 - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Build Qt-${{ matrix.qt5 }} run: | @@ -208,14 +206,12 @@ jobs: sudo mv ./kime_engine.hpp /usr/include - name: Install Qt-${{ matrix.qt6 }} - uses: jurplel/install-qt-action@v2 + uses: jurplel/install-qt-action@v4 with: dir: /opt version: ${{ matrix.qt6 }} - aqtversion: ==1.1.1 - py7zrversion: ==0.13.0 - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Build Qt-${{ matrix.qt6 }} run: | @@ -275,7 +271,7 @@ jobs: name: latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Create out folder run: mkdir -pv ./build/out diff --git a/Cargo.lock b/Cargo.lock index 9c2ed26a..b3a13594 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,12 +4,12 @@ version = 3 [[package]] name = "ab_glyph" -version = "0.2.19" +version = "0.2.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5568a4aa5ba8adf5175c5c460b030e27d8893412976cc37bef0e4fbc16cfbba" +checksum = "79faae4620f45232f599d9bc7b290f88247a0834162c4495ab2f02d60004adfb" dependencies = [ "ab_glyph_rasterizer", - "owned_ttf_parser 0.18.0", + "owned_ttf_parser 0.24.0", ] [[package]] @@ -46,7 +46,7 @@ checksum = "fabafb94d8a4dd6b20fe4112f943756ff8dc9778e3d742fb5478bf7f000a3282" dependencies = [ "accesskit", "accesskit_consumer", - "objc2", + "objc2 0.3.0-beta.3", "once_cell", "parking_lot", ] @@ -59,11 +59,11 @@ checksum = "662496f45a2e2ddff05e28d0a9fc2b319cc4f886d3664e3469c3d30800598962" dependencies = [ "accesskit", "accesskit_consumer", - "arrayvec 0.7.2", + "arrayvec 0.7.4", "once_cell", "parking_lot", "paste", - "windows 0.42.0", + "windows", ] [[package]] @@ -87,15 +87,25 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "ahash" -version = "0.8.2" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf6ccdb167abbf410dcb915cabd428929d7f6a04980b54a11f26a39f1c7f7107" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", "const-random", - "getrandom 0.2.8", + "getrandom 0.2.15", "once_cell", "version_check", + "zerocopy 0.7.35", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", ] [[package]] @@ -115,9 +125,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.68" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "approx" @@ -130,27 +140,24 @@ dependencies = [ [[package]] name = "arboard" -version = "3.2.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6041616acea41d67c4a984709ddab1587fd0b10efe5cc563fee954d2f011854" +checksum = "9fb4009533e8ff8f1450a5bcbc30f4242a1d34442221f72314bea1f5dc9c7f89" dependencies = [ "clipboard-win", "log", - "objc", - "objc-foundation", - "objc_id", - "once_cell", + "objc2 0.5.2", + "objc2-app-kit", + "objc2-foundation", "parking_lot", - "thiserror", - "winapi", - "x11rb 0.10.1", + "x11rb 0.13.1", ] [[package]] name = "arrayref" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" [[package]] name = "arrayvec" @@ -160,15 +167,15 @@ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] name = "arrayvec" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "atomic_refcell" -version = "0.1.9" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "857253367827bd9d0fd973f0ef15506a96e79e41b0ad7aa691203a4e3214f6c8" +checksum = "41e67cd8309bbd06cd603a9e693a784ac2e5d1e955f11286e355089fcab3047c" [[package]] name = "atty" @@ -176,42 +183,42 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi 0.1.19", + "hermit-abi", "libc", "winapi", ] [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bindgen" -version = "0.63.0" +version = "0.69.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36d860121800b2a9a94f9b5604b332d5cffb234ce17609ea479d723dbc9d3885" +checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" dependencies = [ - "bitflags", + "bitflags 2.6.0", "cexpr", "clang-sys", + "itertools 0.12.1", "lazy_static", "lazycell", - "peeking_take_while", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", - "syn", + "syn 2.0.72", ] [[package]] name = "bit_field" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb6dd1c2376d2e096796e234a70e17e94cc2d5d54ff8ce42b28cef1d0d359a4" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" [[package]] name = "bitflags" @@ -219,6 +226,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + [[package]] name = "block" version = "0.1.6" @@ -231,7 +244,7 @@ version = "0.1.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" dependencies = [ - "objc-sys", + "objc-sys 0.2.0-beta.2", ] [[package]] @@ -241,59 +254,63 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" dependencies = [ "block-sys", - "objc2-encode", + "objc2-encode 2.0.0-pre.2", ] [[package]] -name = "boxfnonce" -version = "0.1.1" +name = "block2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5988cb1d626264ac94100be357308f29ff7cbdd3b36bda27f450a4ee3f713426" +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +dependencies = [ + "objc2 0.5.2", +] [[package]] name = "bumpalo" -version = "3.11.1" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.12.3" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaa3a8d9a1ca92e282c96a32d6511b695d7d994d1d102ba85d279f9b2756947f" +checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.3.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fe233b960f12f8007e3db2d136e3cb1c291bfd7396e384ee76025fc1a3932b4" +checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.72", ] [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.3.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" +checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" [[package]] name = "calloop" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a59225be45a478d772ce015d9743e49e92798ece9e34eda9a6aa2a6a7f40192" +checksum = "52e0d00eb1ea24371a97d2da6201c6747a633dc6dc1988ef503403b4c59504a8" dependencies = [ + "bitflags 1.3.2", "log", "nix 0.25.1", "slotmap", @@ -309,27 +326,27 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cbindgen" -version = "0.24.3" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6358dedf60f4d9b8db43ad187391afe959746101346fe51bb978126bec61dfb" +checksum = "da6bc11b07529f16944307272d5bd9b22530bc7d05751717c9d416586cedab49" dependencies = [ "heck", - "indexmap", + "indexmap 1.9.3", "log", "proc-macro2", "quote", "serde", "serde_json", - "syn", + "syn 1.0.109", "tempfile", "toml", ] [[package]] name = "cc" -version = "1.0.78" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" +checksum = "26a5c3fd7bfa1ce3897a3a3501d362b2d87b7f2583ebcb4a949ec25911025cbc" [[package]] name = "cesu8" @@ -369,9 +386,9 @@ dependencies = [ [[package]] name = "ciborium" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" dependencies = [ "ciborium-io", "ciborium-ll", @@ -380,25 +397,25 @@ dependencies = [ [[package]] name = "ciborium-io" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" [[package]] name = "ciborium-ll" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" dependencies = [ "ciborium-io", - "half 1.8.2", + "half", ] [[package]] name = "clang-sys" -version = "1.4.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", "libc", @@ -412,7 +429,7 @@ checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "ansi_term", "atty", - "bitflags", + "bitflags 1.3.2", "strsim 0.8.0", "textwrap 0.11.0", "unicode-width", @@ -421,14 +438,14 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.23" +version = "3.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" dependencies = [ - "bitflags", + "bitflags 1.3.2", "clap_lex", - "indexmap", - "textwrap 0.16.0", + "indexmap 1.9.3", + "textwrap 0.16.1", ] [[package]] @@ -442,20 +459,18 @@ dependencies = [ [[package]] name = "clipboard-win" -version = "4.5.0" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362" +checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" dependencies = [ "error-code", - "str-buf", - "winapi", ] [[package]] name = "cmake" -version = "0.1.49" +version = "0.1.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db34956e100b30725f2eb215f90d4871051239535632f84fea3bc92722c66b7c" +checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" dependencies = [ "cc", ] @@ -466,27 +481,42 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" dependencies = [ - "bitflags", + "bitflags 1.3.2", "block", "cocoa-foundation", "core-foundation", - "core-graphics", + "core-graphics 0.22.3", "foreign-types 0.3.2", "libc", "objc", ] +[[package]] +name = "cocoa" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics 0.23.2", + "foreign-types 0.5.0", + "libc", + "objc", +] + [[package]] name = "cocoa-foundation" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" dependencies = [ - "bitflags", + "bitflags 1.3.2", "block", "core-foundation", "core-graphics-types", - "foreign-types 0.3.2", "libc", "objc", ] @@ -499,9 +529,9 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "combine" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ "bytes", "memchr", @@ -509,23 +539,21 @@ dependencies = [ [[package]] name = "const-random" -version = "0.1.15" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368a7a772ead6ce7e1de82bfb04c485f3db8ec744f72925af5735e29a22cc18e" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" dependencies = [ "const-random-macro", - "proc-macro-hack", ] [[package]] name = "const-random-macro" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d7d6ab3c3a2282db210df5f02c4dab6e0a7057af0fb7ebd4070f30fe05c0ddb" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.15", "once_cell", - "proc-macro-hack", "tiny-keccak", ] @@ -540,9 +568,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -550,9 +578,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "core-graphics" @@ -560,42 +588,54 @@ version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-graphics-types", "foreign-types 0.3.2", "libc", ] +[[package]] +name = "core-graphics" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types 0.5.0", + "libc", +] + [[package]] name = "core-graphics-types" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", - "foreign-types 0.3.2", "libc", ] [[package]] name = "core-text" -version = "19.2.0" +version = "20.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d74ada66e07c1cefa18f8abfba765b486f250de2e4a999e5727fc0dd4b4a25" +checksum = "c9d2790b5c08465d49f8dc05c8bcae9fea467855947db39b0f8145c091aaced5" dependencies = [ "core-foundation", - "core-graphics", - "foreign-types 0.3.2", + "core-graphics 0.23.2", + "foreign-types 0.5.0", "libc", ] [[package]] name = "crc32fast" -version = "1.3.2" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] @@ -610,9 +650,9 @@ dependencies = [ "atty", "cast", "ciborium", - "clap 3.2.23", + "clap 3.2.25", "criterion-plot", - "itertools", + "itertools 0.10.5", "lazy_static", "num-traits", "oorandom", @@ -633,62 +673,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" dependencies = [ "cast", - "itertools", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" -dependencies = [ - "cfg-if", - "crossbeam-utils", + "itertools 0.10.5", ] [[package]] name = "crossbeam-deque" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.13" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", - "memoffset 0.7.1", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.14" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" -dependencies = [ - "cfg-if", -] +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crossfont" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21fd3add36ea31aba1520aa5288714dd63be506106753226d0eb387a93bc9c45" +checksum = "3eb5a3822b594afc99b503cc1859b94686d3c3efdd60507a28587dab80ee1071" dependencies = [ - "cocoa", + "cocoa 0.25.0", "core-foundation", "core-foundation-sys", - "core-graphics", + "core-graphics 0.23.2", "core-text", "dwrote", "foreign-types 0.5.0", @@ -708,24 +730,14 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" -[[package]] -name = "ctor" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" -dependencies = [ - "quote", - "syn", -] - [[package]] name = "ctrlc" -version = "3.2.4" +version = "3.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1631ca6e3c59112501a9d87fd86f21591ff77acd31331e8a73f8d80a65bbdd71" +checksum = "672465ae37dc1bc6380a6547a8883d5dd397b0f1faaad4f265726cc7042a5345" dependencies = [ - "nix 0.26.1", - "windows-sys 0.42.0", + "nix 0.28.0", + "windows-sys 0.52.0", ] [[package]] @@ -742,11 +754,10 @@ checksum = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9" [[package]] name = "daemonize" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70c24513e34f53b640819f0ac9f705b673fcf4006d7aab8778bee72ebfc89815" +checksum = "ab8bfdaacb3c887a54d41bdf48d3af8873b3f5566469f8ba21b92057509f116e" dependencies = [ - "boxfnonce", "libc", ] @@ -762,12 +773,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.14.2" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ - "darling_core 0.14.2", - "darling_macro 0.14.2", + "darling_core 0.20.10", + "darling_macro 0.20.10", ] [[package]] @@ -781,20 +792,20 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn", + "syn 1.0.109", ] [[package]] name = "darling_core" -version = "0.14.2" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", - "syn", + "syn 2.0.72", ] [[package]] @@ -805,18 +816,18 @@ checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" dependencies = [ "darling_core 0.13.4", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "darling_macro" -version = "0.14.2" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ - "darling_core 0.14.2", + "darling_core 0.20.10", "quote", - "syn", + "syn 2.0.72", ] [[package]] @@ -851,30 +862,19 @@ dependencies = [ ] [[package]] -name = "diff" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" - -[[package]] -name = "dirs" -version = "4.0.0" +name = "deranged" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ - "dirs-sys", + "powerfmt", ] [[package]] -name = "dirs-sys" -version = "0.3.7" +name = "diff" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" -dependencies = [ - "libc", - "redox_users", - "winapi", -] +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" [[package]] name = "dispatch" @@ -884,18 +884,18 @@ checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" [[package]] name = "dlib" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ - "libloading", + "libloading 0.8.5", ] [[package]] name = "downcast-rs" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dwrote" @@ -934,7 +934,7 @@ dependencies = [ "glutin", "js-sys", "percent-encoding", - "raw-window-handle 0.5.0", + "raw-window-handle 0.5.2", "tracing", "wasm-bindgen", "wasm-bindgen-futures", @@ -988,9 +988,9 @@ dependencies = [ [[package]] name = "either" -version = "1.8.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "emath" @@ -1003,38 +1003,38 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.31" +version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" dependencies = [ "cfg-if", ] [[package]] name = "enum-map" -version = "2.4.2" +version = "2.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c25992259941eb7e57b936157961b217a4fc8597829ddef0596d6c3cd86e1a" +checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" dependencies = [ "enum-map-derive", ] [[package]] name = "enum-map-derive" -version = "0.11.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a4da76b3b6116d758c7ba93f7ec6a35d2e2cf24feda76c6e38a375f4d5c59f2" +checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.72", ] [[package]] name = "enumset" -version = "1.0.12" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19be8061a06ab6f3a6cf21106c873578bf01bd42ad15e0311a9c76161cb1c753" +checksum = "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293" dependencies = [ "enumset_derive", "serde", @@ -1042,14 +1042,14 @@ dependencies = [ [[package]] name = "enumset_derive" -version = "0.6.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03e7b551eba279bf0fa88b83a46330168c1560a52a94f5126f892f0b364ab3e0" +checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242" dependencies = [ - "darling 0.14.2", + "darling 0.20.10", "proc-macro2", "quote", - "syn", + "syn 2.0.72", ] [[package]] @@ -1069,15 +1069,27 @@ dependencies = [ ] [[package]] -name = "error-code" -version = "2.3.1" +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", - "str-buf", + "windows-sys 0.52.0", ] +[[package]] +name = "error-code" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" + [[package]] name = "expat-sys" version = "2.1.6" @@ -1090,33 +1102,40 @@ dependencies = [ [[package]] name = "exr" -version = "1.5.2" +version = "1.72.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eb5f255b5980bb0c8cf676b675d1a99be40f316881444f44e0462eaf5df5ded" +checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" dependencies = [ "bit_field", "flume", - "half 2.2.1", + "half", "lebe", "miniz_oxide", + "rayon-core", "smallvec", - "threadpool", + "zune-inflate", ] [[package]] name = "fastrand" -version = "1.8.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + +[[package]] +name = "fdeflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" dependencies = [ - "instant", + "simd-adler32", ] [[package]] name = "flate2" -version = "1.0.25" +version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" dependencies = [ "crc32fast", "miniz_oxide", @@ -1124,14 +1143,10 @@ dependencies = [ [[package]] name = "flume" -version = "0.10.14" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" dependencies = [ - "futures-core", - "futures-sink", - "nanorand", - "pin-project", "spin", ] @@ -1143,9 +1158,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fontconfig-parser" -version = "0.5.1" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2be17a530a842f8a7a60f4397a08e8f08872849a5e31b20c7bd7301dac483296" +checksum = "6a595cb550439a117696039dfc69830492058211b771a2a165379f2a1a53d84d" dependencies = [ "roxmltree", ] @@ -1158,7 +1173,7 @@ checksum = "652aa0009b1406e40114685c96ea2c01069e1c035ad6c340999fa08213fad4c5" dependencies = [ "fontconfig-parser", "log", - "memmap2", + "memmap2 0.5.10", "ttf-parser 0.18.1", ] @@ -1183,13 +1198,13 @@ dependencies = [ [[package]] name = "foreign-types-macros" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8469d0d40519bc608ec6863f1cc88f3f1deee15913f2f3b3e573d81ed38cccc" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.72", ] [[package]] @@ -1206,9 +1221,9 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -1219,7 +1234,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74eadec9d0a5c28c54bb9882e54787275152a4e36ce206b45d7451384e5bf5fb" dependencies = [ - "bitflags", + "bitflags 1.3.2", "freetype-sys", "libc", ] @@ -1235,18 +1250,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "futures-core" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" - -[[package]] -name = "futures-sink" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" - [[package]] name = "gethostname" version = "0.2.3" @@ -1257,6 +1260,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "gethostname" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +dependencies = [ + "libc", + "windows-targets 0.48.5", +] + [[package]] name = "getrandom" version = "0.1.16" @@ -1270,22 +1283,20 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "wasm-bindgen", ] [[package]] name = "gif" -version = "0.11.4" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06" +checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" dependencies = [ "color_quant", "weezl", @@ -1322,42 +1333,42 @@ dependencies = [ [[package]] name = "glutin" -version = "0.30.3" +version = "0.30.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524d807cd49a0c56a53ef9a6738cd15e7c8c4e9d37a3b7fdb3c250c1cd5bf7a3" +checksum = "8fc93b03242719b8ad39fb26ed2b01737144ce7bd4bfc7adadcef806596760fe" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg_aliases", "cgl", - "cocoa", "core-foundation", + "dispatch", "glutin_egl_sys", "glutin_glx_sys", "glutin_wgl_sys", - "libloading", - "objc", + "libloading 0.7.4", + "objc2 0.3.0-beta.3", "once_cell", - "raw-window-handle 0.5.0", + "raw-window-handle 0.5.2", "wayland-sys 0.30.1", - "windows-sys 0.36.1", + "windows-sys 0.45.0", "x11-dl", ] [[package]] name = "glutin_egl_sys" -version = "0.3.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3adbb8fec0e18e340f990c78f79f5f0e142d0d83f46b10909aaa7d251c00afdf" +checksum = "af784eb26c5a68ec85391268e074f0aa618c096eadb5d6330b0911cf34fe57c5" dependencies = [ "gl_generator", - "windows-sys 0.36.1", + "windows-sys 0.45.0", ] [[package]] name = "glutin_glx_sys" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "947c4850c58211c9627969c2b4e2674764b81ae5b47bab2c9a477d7942f96e0f" +checksum = "1b53cb5fe568964aa066a3ba91eac5ecbac869fb0842cd0dc9e412434f1a1494" dependencies = [ "gl_generator", "x11-dl", @@ -1365,25 +1376,20 @@ dependencies = [ [[package]] name = "glutin_wgl_sys" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20c33975a6c9d49d72c8f032a60079bf8df536954fbf9e4cee90396ace815c57" +checksum = "ef89398e90033fc6bc65e9bd42fd29bbbfd483bda5b56dc5562f455550618165" dependencies = [ "gl_generator", ] [[package]] name = "half" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" - -[[package]] -name = "half" -version = "2.2.1" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" dependencies = [ + "cfg-if", "crunchy", ] @@ -1399,11 +1405,17 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + [[package]] name = "heck" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" @@ -1415,12 +1427,12 @@ dependencies = [ ] [[package]] -name = "hermit-abi" -version = "0.2.6" +name = "home" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "libc", + "windows-sys 0.52.0", ] [[package]] @@ -1431,9 +1443,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.3.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -1441,9 +1453,9 @@ dependencies = [ [[package]] name = "image" -version = "0.24.5" +version = "0.24.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945" +checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" dependencies = [ "bytemuck", "byteorder", @@ -1451,10 +1463,9 @@ dependencies = [ "exr", "gif", "jpeg-decoder", - "num-rational", "num-traits", "png", - "scoped_threadpool", + "qoi", "tiff", ] @@ -1467,7 +1478,7 @@ dependencies = [ "approx", "conv", "image", - "itertools", + "itertools 0.10.5", "nalgebra", "num", "rand", @@ -1478,19 +1489,29 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", ] +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", +] + [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", "js-sys", @@ -1507,24 +1528,35 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itoa" -version = "1.0.5" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jni" -version = "0.20.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" dependencies = [ "cesu8", + "cfg-if", "combine", "jni-sys", "log", "thiserror", "walkdir", + "windows-sys 0.45.0", ] [[package]] @@ -1535,18 +1567,18 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jpeg-decoder" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" dependencies = [ "rayon", ] [[package]] name = "js-sys" -version = "0.3.60" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ "wasm-bindgen", ] @@ -1596,7 +1628,7 @@ dependencies = [ name = "kime-engine-backend" version = "0.1.0" dependencies = [ - "bitflags", + "bitflags 1.3.2", "enum-map", "enumset", "serde", @@ -1657,7 +1689,7 @@ name = "kime-engine-candidate" version = "0.1.0" dependencies = [ "kime-engine-dict", - "nix 0.26.1", + "nix 0.26.4", ] [[package]] @@ -1715,7 +1747,7 @@ dependencies = [ name = "kime-engine-dict" version = "0.1.0" dependencies = [ - "itertools", + "itertools 0.10.5", "quick-xml", "serde", "serde_json", @@ -1766,6 +1798,7 @@ dependencies = [ "pico-args", "wayland-client", "wayland-protocols", + "xkbcommon", "zwp-virtual-keyboard", ] @@ -1787,9 +1820,9 @@ dependencies = [ [[package]] name = "ksni" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48b786146a6b576a000a289d8e1a834a3de60db75973f43ebbfec733270973f0" +checksum = "4934310bdd016e55725482b8d35ac0c16fd058c1b955d8959aa2d953b918c85b" dependencies = [ "dbus", "dbus-codegen", @@ -1803,14 +1836,14 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a53776d271cfb873b17c618af0298445c88afc52837f3e948fa3fafd131f449" dependencies = [ - "arrayvec 0.7.2", + "arrayvec 0.7.4", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "lazycell" @@ -1826,15 +1859,15 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "libc" -version = "0.2.139" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libdbus-sys" -version = "0.2.3" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2264f9d90a9b4e60a2dc722ad899ea0374f03c2e96e755fe22a8f551d4d5fb3c" +checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72" dependencies = [ "pkg-config", ] @@ -1849,11 +1882,27 @@ dependencies = [ "winapi", ] +[[package]] +name = "libloading" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +dependencies = [ + "cfg-if", + "windows-targets 0.52.6", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -1861,11 +1910,10 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" dependencies = [ - "cfg-if", "serde", ] @@ -1886,24 +1934,34 @@ checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" [[package]] name = "matrixmultiply" -version = "0.3.2" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" +checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" dependencies = [ + "autocfg", "rawpointer", ] [[package]] name = "memchr" -version = "2.5.0" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memmap2" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] [[package]] name = "memmap2" -version = "0.5.8" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc" +checksum = "43a5a03cefb0d953ec0be133036f14e109412fa594edc2f77227249db66cc3ed" dependencies = [ "libc", ] @@ -1934,11 +1992,12 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.6.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", + "simd-adler32", ] [[package]] @@ -1956,14 +2015,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.5" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.42.0", + "windows-sys 0.48.0", ] [[package]] @@ -2001,25 +2060,16 @@ dependencies = [ ] [[package]] -name = "nanorand" +name = "ndk" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" dependencies = [ - "getrandom 0.2.8", -] - -[[package]] -name = "ndk" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" -dependencies = [ - "bitflags", + "bitflags 1.3.2", "jni-sys", "ndk-sys", "num_enum", - "raw-window-handle 0.5.0", + "raw-window-handle 0.5.2", "thiserror", ] @@ -2055,7 +2105,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2073,7 +2123,7 @@ version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "libc", "memoffset 0.6.5", @@ -2086,7 +2136,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" dependencies = [ "autocfg", - "bitflags", + "bitflags 1.3.2", "cfg-if", "libc", "memoffset 0.6.5", @@ -2094,16 +2144,27 @@ dependencies = [ [[package]] name = "nix" -version = "0.26.1" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a58d1d356c6597d08cde02c2f09d785b09e28711837b1ed667dc652c08a694" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "libc", "memoffset 0.7.1", "pin-utils", - "static_assertions", +] + +[[package]] +name = "nix" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "cfg_aliases", + "libc", ] [[package]] @@ -2133,9 +2194,9 @@ dependencies = [ [[package]] name = "num" -version = "0.4.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ "num-bigint", "num-complex", @@ -2147,24 +2208,29 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "autocfg", "num-integer", "num-traits", ] [[package]] name = "num-complex" -version = "0.4.2" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-derive" version = "0.3.3" @@ -2173,24 +2239,23 @@ checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] [[package]] name = "num-iter" -version = "0.1.43" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ "autocfg", "num-integer", @@ -2199,11 +2264,10 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "autocfg", "num-bigint", "num-integer", "num-traits", @@ -2211,49 +2275,39 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] -[[package]] -name = "num_cpus" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" -dependencies = [ - "hermit-abi 0.2.6", - "libc", -] - [[package]] name = "num_enum" -version = "0.5.7" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.5.7" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "num_threads" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" dependencies = [ "libc", ] @@ -2268,21 +2322,16 @@ dependencies = [ ] [[package]] -name = "objc-foundation" -version = "0.1.1" +name = "objc-sys" +version = "0.2.0-beta.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" -dependencies = [ - "block", - "objc", - "objc_id", -] +checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" [[package]] name = "objc-sys" -version = "0.2.0-beta.2" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" [[package]] name = "objc2" @@ -2290,9 +2339,59 @@ version = "0.3.0-beta.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe31e5425d3d0b89a15982c024392815da40689aceb34bad364d58732bcfd649" dependencies = [ - "block2", - "objc-sys", - "objc2-encode", + "block2 0.2.0-alpha.6", + "objc-sys 0.2.0-beta.2", + "objc2-encode 2.0.0-pre.2", +] + +[[package]] +name = "objc2" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +dependencies = [ + "objc-sys 0.3.5", + "objc2-encode 4.0.3", +] + +[[package]] +name = "objc2-app-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +dependencies = [ + "bitflags 2.6.0", + "block2 0.5.1", + "libc", + "objc2 0.5.2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "objc2-core-data" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +dependencies = [ + "bitflags 2.6.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-image" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +dependencies = [ + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", + "objc2-metal", ] [[package]] @@ -2301,44 +2400,69 @@ version = "2.0.0-pre.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" dependencies = [ - "objc-sys", + "objc-sys 0.2.0-beta.2", ] [[package]] -name = "objc_id" -version = "0.1.1" +name = "objc2-encode" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" + +[[package]] +name = "objc2-foundation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "objc", + "bitflags 2.6.0", + "block2 0.5.1", + "libc", + "objc2 0.5.2", ] [[package]] -name = "once_cell" -version = "1.17.0" +name = "objc2-metal" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +dependencies = [ + "bitflags 2.6.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", +] [[package]] -name = "oorandom" -version = "11.1.3" +name = "objc2-quartz-core" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +dependencies = [ + "bitflags 2.6.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", + "objc2-metal", +] [[package]] -name = "os_str_bytes" -version = "6.4.1" +name = "once_cell" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] -name = "output_vt100" -version = "0.1.3" +name = "oorandom" +version = "11.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628223faebab4e3e40667ee0b2336d34a5b960ff60ea743ddfdbcf7770bcfb66" -dependencies = [ - "winapi", -] +checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" + +[[package]] +name = "os_str_bytes" +version = "6.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" [[package]] name = "owned_ttf_parser" @@ -2351,11 +2475,11 @@ dependencies = [ [[package]] name = "owned_ttf_parser" -version = "0.18.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a5f3c7ca08b6879e7965fb25e24d1f5eeb32ea73f9ad99b3854778a38c57e93" +checksum = "490d3a563d3122bf7c911a59b0add9389e5ec0f5f0c3ac6b91ff235a0e6a7f90" dependencies = [ - "ttf-parser 0.18.1", + "ttf-parser 0.24.0", ] [[package]] @@ -2369,9 +2493,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -2379,34 +2503,28 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.6" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-sys 0.42.0", + "windows-targets 0.52.6", ] [[package]] name = "paste" -version = "1.0.11" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" - -[[package]] -name = "peeking_take_while" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pico-args" @@ -2414,31 +2532,11 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" -[[package]] -name = "pin-project" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "pin-utils" @@ -2448,15 +2546,15 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.26" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "plotters" -version = "0.3.4" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97" +checksum = "a15b6eccb8484002195a3e44fe65a4ce8e93a625797a063735536fd59cb01cf3" dependencies = [ "num-traits", "plotters-backend", @@ -2467,71 +2565,72 @@ dependencies = [ [[package]] name = "plotters-backend" -version = "0.3.4" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" +checksum = "414cec62c6634ae900ea1c56128dfe87cf63e7caece0852ec76aba307cebadb7" [[package]] name = "plotters-svg" -version = "0.3.3" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" +checksum = "81b30686a7d9c3e010b84284bdd26a29f2138574f52f5eb6f794fc0ad924e705" dependencies = [ "plotters-backend", ] [[package]] name = "png" -version = "0.17.7" +version = "0.17.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" dependencies = [ - "bitflags", + "bitflags 1.3.2", "crc32fast", + "fdeflate", "flate2", "miniz_oxide", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "dee4364d9f3b902ef14fab8a1ddffb783a1cb6b4bba3bfc1fa3922732c7de97f" +dependencies = [ + "zerocopy 0.6.6", +] [[package]] name = "pretty_assertions" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a25e9bcb20aa780fd0bb16b72403a9064d6b3f22f026946029acb941a50af755" +checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66" dependencies = [ - "ctor", "diff", - "output_vt100", "yansi", ] [[package]] name = "proc-macro-crate" -version = "1.2.1" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", - "thiserror", - "toml", + "toml_edit", ] -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - [[package]] name = "proc-macro2" -version = "1.0.49" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] @@ -2544,6 +2643,15 @@ dependencies = [ "serde_json", ] +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + [[package]] name = "quick-xml" version = "0.27.1" @@ -2556,9 +2664,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.23" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -2624,12 +2732,9 @@ dependencies = [ [[package]] name = "raw-window-handle" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed7e3d950b66e19e0c372f3fa3fbbcf85b1746b571f74e0c2af6042a5c93420a" -dependencies = [ - "cty", -] +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" [[package]] name = "rawpointer" @@ -2639,9 +2744,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.6.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ "either", "rayon-core", @@ -2649,68 +2754,57 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.10.1" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "num_cpus", ] [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ - "bitflags", + "bitflags 2.6.0", ] [[package]] -name = "redox_users" -version = "0.4.3" +name = "regex" +version = "1.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" dependencies = [ - "getrandom 0.2.8", - "redox_syscall", - "thiserror", + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", ] [[package]] -name = "regex" -version = "1.7.1" +name = "regex-automata" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" 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 = "remove_dir_all" -version = "0.5.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "roxmltree" -version = "0.15.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9de9831a129b122e7e61f242db509fa9d0838008bf0b29bb0624669edfe48a" -dependencies = [ - "xmlparser", -] +checksum = "3cd14fd5e3b777a7422cca79358c57a8f6e3a703d9ac187448d0daf220c2407f" [[package]] name = "rustc-hash" @@ -2718,6 +2812,19 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + [[package]] name = "rusttype" version = "0.9.3" @@ -2730,15 +2837,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.11" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "ryu" -version = "1.0.12" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "safe_arch" @@ -2751,9 +2858,9 @@ dependencies = [ [[package]] name = "safe_arch" -version = "0.6.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794821e4ccb0d9f979512f9c1973480123f9bd62a90d74ab0f9426fcf8f4a529" +checksum = "c3460605018fdc9612bce72735cba0d27efbcd9904780d44c7e3a9948f96148a" dependencies = [ "bytemuck", ] @@ -2773,17 +2880,11 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" -[[package]] -name = "scoped_threadpool" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" - [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sctk-adwaita" @@ -2799,42 +2900,43 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.152" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.152" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.72", ] [[package]] name = "serde_json" -version = "1.0.91" +version = "1.0.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" +checksum = "4ab380d7d9f22ef3f21ad3e6c1ebe8e4fc7a2000ccba2e4d71fc96f15b2cb609" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] [[package]] name = "serde_yaml" -version = "0.9.16" +version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92b5b431e8907b50339b51223b97d102db8d987ced36f6e4d03621db9316c834" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap", + "indexmap 2.2.6", "itoa", "ryu", "serde", @@ -2864,9 +2966,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "simba" @@ -2881,11 +2983,17 @@ dependencies = [ "wide", ] +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + [[package]] name = "simplelog" -version = "0.12.0" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48dfff04aade74dd495b007c831cd6f4e0cee19c344dd9dc0884c0289b70a786" +checksum = "16257adbfaef1ee58b1363bdc0664c9b8e1e30aed86049635fb5f147d065a9c0" dependencies = [ "log", "termcolor", @@ -2894,31 +3002,31 @@ dependencies = [ [[package]] name = "slotmap" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" dependencies = [ "version_check", ] [[package]] name = "smallvec" -version = "1.10.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "smithay-client-toolkit" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454" +checksum = "870427e30b8f2cbe64bf43ec4b86e88fe39b0a84b3f15efd9c9c2d020bc86eb9" dependencies = [ - "bitflags", + "bitflags 1.3.2", "calloop", "dlib", "lazy_static", "log", - "memmap2", + "memmap2 0.5.10", "nix 0.24.3", "pkg-config", "wayland-client", @@ -2938,25 +3046,13 @@ dependencies = [ [[package]] name = "spin" -version = "0.9.4" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" dependencies = [ "lock_api", ] -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "str-buf" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" - [[package]] name = "strsim" version = "0.8.0" @@ -2988,14 +3084,25 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 1.0.109", +] + +[[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 = "1.0.107" +version = "2.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" dependencies = [ "proc-macro2", "quote", @@ -3004,23 +3111,21 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.3.0" +version = "3.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if", "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", + "rustix", + "windows-sys 0.52.0", ] [[package]] name = "termcolor" -version = "1.1.3" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] @@ -3036,44 +3141,35 @@ dependencies = [ [[package]] name = "textwrap" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" +checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.38" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.38" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn", -] - -[[package]] -name = "threadpool" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" -dependencies = [ - "num_cpus", + "syn 2.0.72", ] [[package]] name = "tiff" -version = "0.8.1" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" dependencies = [ "flate2", "jpeg-decoder", @@ -3082,13 +3178,16 @@ dependencies = [ [[package]] name = "time" -version = "0.3.17" +version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ + "deranged", "itoa", "libc", + "num-conv", "num_threads", + "powerfmt", "serde", "time-core", "time-macros", @@ -3096,16 +3195,17 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.6" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" dependencies = [ + "num-conv", "time-core", ] @@ -3155,44 +3255,60 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "toml" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1333c76748e868a4d9d1017b5ab53171dfd095f70c712fdb4653a406547f598f" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fb9f64314842840f1d940ac544da178732128f1c78c21772e876579e0da1db" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.2.6", + "toml_datetime", + "winnow", +] + [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "pin-project-lite", "tracing-core", ] [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", ] @@ -3209,50 +3325,56 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0609f771ad9c6155384897e1df4d948e692667cc0588548b68eb44d052b27633" +[[package]] +name = "ttf-parser" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8686b91785aff82828ed725225925b33b4fde44c4bb15876e5f7c832724c420a" + [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-bidi" -version = "0.3.8" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.6" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" [[package]] name = "unsafe-libyaml" -version = "0.2.5" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc7ed8ba44ca06be78ea1ad2c3682a43349126c8818054231ee6f4748012aed2" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" [[package]] name = "url" -version = "2.3.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", "idna", @@ -3267,18 +3389,17 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", - "winapi", "winapi-util", ] @@ -3296,9 +3417,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.83" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -3306,24 +3427,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.83" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.72", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.33" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" dependencies = [ "cfg-if", "js-sys", @@ -3333,9 +3454,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.83" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3343,22 +3464,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.83" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.72", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.83" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "wayland-client" @@ -3366,7 +3487,7 @@ version = "0.29.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715" dependencies = [ - "bitflags", + "bitflags 1.3.2", "downcast-rs", "libc", "nix 0.24.3", @@ -3405,7 +3526,7 @@ version = "0.29.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6" dependencies = [ - "bitflags", + "bitflags 1.3.2", "wayland-client", "wayland-commons", "wayland-scanner", @@ -3447,9 +3568,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.60" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" dependencies = [ "js-sys", "wasm-bindgen", @@ -3457,36 +3578,35 @@ dependencies = [ [[package]] name = "webbrowser" -version = "0.8.4" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e74f5ff7786c4c21f61ba8e30ea29c9745f06fca0a4a02d083b3c662583399e8" +checksum = "db67ae75a9405634f5882791678772c94ff5f16a66535aae186e26aa0841fc8b" dependencies = [ "core-foundation", - "dirs", + "home", "jni", "log", "ndk-context", "objc", - "raw-window-handle 0.5.0", + "raw-window-handle 0.5.2", "url", "web-sys", - "windows 0.43.0", ] [[package]] name = "weezl" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" [[package]] name = "wide" -version = "0.7.5" +version = "0.7.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae41ecad2489a1655c8ef8489444b0b113c0a0c795944a3572a0931cf7d2525c" +checksum = "901e8597c777fa042e9e245bd56c0dc4418c5db3f845b6ff94fbac732c6a0692" dependencies = [ "bytemuck", - "safe_arch 0.6.0", + "safe_arch 0.7.2", ] [[package]] @@ -3507,18 +3627,18 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" dependencies = [ - "winapi", + "windows-sys 0.52.0", ] [[package]] name = "winapi-wsapoll" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" +checksum = "1eafc5f679c576995526e81635d0cf9695841736712b4e892f87abbe6fed3f28" dependencies = [ "winapi", ] @@ -3536,28 +3656,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0286ba339aa753e70765d521bb0242cc48e1194562bfa2a2ad7ac8a6de28f5d5" dependencies = [ "windows-implement", - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", -] - -[[package]] -name = "windows" -version = "0.43.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04662ed0e3e5630dfa9b26e4cb823b817f1a9addda855d973a9458c236556244" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -3568,7 +3673,7 @@ checksum = "9539b6bd3eadbd9de66c9666b22d802b833da7e996bc06896142e09854a61767" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3586,24 +3691,94 @@ dependencies = [ [[package]] name = "windows-sys" -version = "0.42.0" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -3613,9 +3788,21 @@ checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" [[package]] name = "windows_aarch64_msvc" -version = "0.42.1" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -3625,9 +3812,27 @@ checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" [[package]] name = "windows_i686_gnu" -version = "0.42.1" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -3637,9 +3842,21 @@ checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" [[package]] name = "windows_i686_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -3649,15 +3866,39 @@ checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" [[package]] name = "windows_x86_64_gnu" -version = "0.42.1" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.1" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -3667,9 +3908,21 @@ checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" [[package]] name = "windows_x86_64_msvc" -version = "0.42.1" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winit" @@ -3677,15 +3930,15 @@ version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb796d6fbd86b2fd896c9471e6f04d39d750076ebe5680a3958f00f5ab97657c" dependencies = [ - "bitflags", - "cocoa", + "bitflags 1.3.2", + "cocoa 0.24.1", "core-foundation", - "core-graphics", + "core-graphics 0.22.3", "dispatch", "instant", "libc", "log", - "mio 0.8.5", + "mio 0.8.11", "ndk", "ndk-glue", "objc", @@ -3693,7 +3946,7 @@ dependencies = [ "parking_lot", "percent-encoding", "raw-window-handle 0.4.3", - "raw-window-handle 0.5.0", + "raw-window-handle 0.5.2", "sctk-adwaita", "smithay-client-toolkit", "wasm-bindgen", @@ -3704,6 +3957,15 @@ dependencies = [ "x11-dl", ] +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + [[package]] name = "wio" version = "0.2.2" @@ -3715,35 +3977,22 @@ dependencies = [ [[package]] name = "x11-dl" -version = "2.20.1" +version = "2.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1536d6965a5d4e573c7ef73a2c15ebcd0b2de3347bdf526c34c297c00ac40f0" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" dependencies = [ - "lazy_static", "libc", + "once_cell", "pkg-config", ] -[[package]] -name = "x11rb" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507" -dependencies = [ - "gethostname", - "nix 0.24.3", - "winapi", - "winapi-wsapoll", - "x11rb-protocol 0.10.0", -] - [[package]] name = "x11rb" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdf3c79412dd91bae7a7366b8ad1565a85e35dd049affc3a6a2c549e97419617" dependencies = [ - "gethostname", + "gethostname 0.2.3", "nix 0.25.1", "winapi", "winapi-wsapoll", @@ -3751,12 +4000,14 @@ dependencies = [ ] [[package]] -name = "x11rb-protocol" -version = "0.10.0" +name = "x11rb" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67" +checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" dependencies = [ - "nix 0.24.3", + "gethostname 0.4.3", + "rustix", + "x11rb-protocol 0.13.1", ] [[package]] @@ -3768,29 +4019,29 @@ dependencies = [ "nix 0.25.1", ] +[[package]] +name = "x11rb-protocol" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" + [[package]] name = "xcursor" -version = "0.3.4" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" -dependencies = [ - "nom", -] +checksum = "d491ee231a51ae64a5b762114c3ac2104b967aadba1de45c86ca42cf051513b7" [[package]] name = "xdg" -version = "2.4.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4583db5cbd4c4c0303df2d15af80f0539db703fa1c68802d4cbbd2dd0f88f6" -dependencies = [ - "dirs", -] +checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546" [[package]] name = "xim" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d399cac008df50fb5396d1ddff4c5a081190bc39b980f4d6ae2d5753c08c0f46" +checksum = "d33c4b134739b0462b484db0f0bad06b5f701203dd139ffdd3042ce88542b29d" dependencies = [ "ahash", "hashbrown 0.13.2", @@ -3815,20 +4066,31 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b100b895758fefbf602129502acc0dd474bc08dd1e2036f17a7c118d6fd6fe53" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] -name = "xml-rs" -version = "0.8.4" +name = "xkbcommon" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13867d259930edc7091a6c41b4ce6eee464328c6ff9659b7e4c668ca20d4c91e" +dependencies = [ + "libc", + "memmap2 0.8.0", + "xkeysym", +] + +[[package]] +name = "xkeysym" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" +checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] -name = "xmlparser" -version = "0.13.5" +name = "xml-rs" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d25c75bf9ea12c4040a97f829154768bbbce366287e2dc044af160cd79a13fd" +checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193" [[package]] name = "yansi" @@ -3836,6 +4098,56 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +[[package]] +name = "zerocopy" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854e949ac82d619ee9a14c66a1b674ac730422372ccb759ce0c39cabcf2bf8e6" +dependencies = [ + "byteorder", + "zerocopy-derive 0.6.6", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy-derive" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "125139de3f6b9d625c39e2efdd73d41bdac468ccd556556440e322be0e1bbd91" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] + [[package]] name = "zwp-virtual-keyboard" version = "0.2.7" diff --git a/Cargo.toml b/Cargo.toml index 52f3da73..9a3565de 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,5 @@ [workspace] +resolver = "2" members = [ "src/engine/capi", "src/engine/candidate", diff --git a/README.ko.md b/README.ko.md index 3f66d661..cecbf764 100644 --- a/README.ko.md +++ b/README.ko.md @@ -26,9 +26,9 @@ * 대부분의 코드가 세그멘테이션 오류가 없는 Rust로 작성됨 * 사용자 설정 자판 지원 -## 궁금한게 있으신가요? +## 궁금한 게 있으신가요? -[디스코드](https://discord.gg/YPnEfZqC6y) 채널에 와서 연락하시거나 이슈를 올려주세요 +[디스코드](https://discord.gg/YPnEfZqC6y) 채널에 와서 연락하시거나 이슈를 올려주세요. ## 지원되는 프론트엔드 @@ -49,7 +49,8 @@ i18n = { defaultLocale = "en_US.UTF-8"; inputMethod = { - enabled = "kime"; + enable = true; + type = "kime"; kime.config = { indicator.icon_color = "White"; }; @@ -59,7 +60,7 @@ i18n = { ### 아치 리눅스 -최신 릴리스는 [kime](https://aur.archlinux.org/packages/kime) 만약 소스에서 빌드하시려면 [kime-git](https://aur.archlinux.org/packages/kime-git)에서 설치할 수 있습니다. +최신 릴리스는 AUR의 [kime](https://aur.archlinux.org/packages/kime)에 있으며, 만약 소스에서 빌드하시려면 [kime-git](https://aur.archlinux.org/packages/kime-git)에서 설치할 수 있습니다. ### 데비안, 우분투 @@ -102,9 +103,9 @@ cd kime scripts/build.sh -ar ``` -이제 모든 파일들은 build/out 경로에 있습니다 만약 수동설치를 원하시면 쓰시면 됩니다 +이제 모든 파일은 build/out 경로에 있습니다. 만약 수동 설치를 원하시면 쓰시면 됩니다. -`scripts/install.sh ` 스크립트를 쓸 수도 있습니다 패키징할때 유용합니다 +`scripts/install.sh ` 스크립트를 쓸 수도 있습니다. 패키징할 때 유용합니다. `scripts/release-deb.sh ` 스크립트를 사용하시면 `deb` 파일을 생성합니다. @@ -112,7 +113,7 @@ scripts/build.sh -ar 대부분 배포판들은 이걸 자동으로 해주므로 -패키지로 설치 하실 경우에는 필요 없을수도 있습니다. +패키지로 설치하실 경우에는 필요 없을 수도 있습니다. ```sh # GTK3 설치 시 @@ -125,15 +126,15 @@ sudo gio-querymodules /usr/lib/gtk-4.0/4.0.0/immodules ### C/C++ -`./scripts/generate_properties.sh`을 실행해서 vscode에서 C/C++ 코드의 인텔리센스 기능을 사용할수 있습니다 +`./scripts/generate_properties.sh`을 실행해서 vscode에서 C/C++ 코드의 인텔리센스 기능을 사용할 수 있습니다. ## 설정 -### 데비안계열 +### 데비안 계열 -언어 설정에서 입력기 `kime`를 선택해주세요 +언어 설정에서 입력기 `kime`를 선택해주세요. -### 그외 +### 그 외 init 스크립트에 다음을 추가하세요. @@ -151,6 +152,18 @@ kime은 kime 데몬을 위한 kime.desktop 파일을 /etc/xdg/autostart에 설 혹시 `i3`나 `sway`처럼 `시작 프로그램`을 지원하지 않는다면 해당 WM의 설정파일에서 `kime` 혹은 원하시는 서버 커맨드를 실행해주세요 +### KDE Plasma Wayland + +시스템 설정 > 하드웨어 > 입력 장치 > 가상 키보드에서 `kime 데몬`을 선택해야 합니다. +이후에 로그아웃을 하는 것을 권장합니다. + +### Weston +`~/.config/weston.ini`에 해당 내용이 있어야 합니다. +``` +[input-method] +path=/usr/bin/kime +``` + ### Configuration 자세한 옵션은 [CONFIGURATION.md](docs/CONFIGURATION.ko.md)를 참고하세요. @@ -160,7 +173,7 @@ kime은 kime 데몬을 위한 kime.desktop 파일을 /etc/xdg/autostart에 설 ### 런타임 종속성 참고로 필요하신 종속성만 있으면 됩니다 -예를들어 qt6를 사용하지 않으신다면 필요하지 않습니다. +예를 들어 qt6를 사용하지 않으신다면 필요하지 않습니다. * gtk3 * gtk4 @@ -170,8 +183,9 @@ kime은 kime 데몬을 위한 kime.desktop 파일을 /etc/xdg/autostart에 설 * xcb (candidate) * fontconfig (xim) * freetype (xim) +* libxkbcommon (wayland) -### 빌드타임 종속성 (바이너리 실행시엔 필요 없습니다) +### 빌드타임 종속성 (바이너리 실행 시엔 필요 없습니다) #### 필수 @@ -190,3 +204,4 @@ kime은 kime 데몬을 위한 kime.desktop 파일을 /etc/xdg/autostart에 설 * xcb * fontconfig * freetype +* libxkbcommon diff --git a/README.md b/README.md index d33dcbf3..572b4aaf 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,8 @@ Add this code to your configuration.nix i18n = { defaultLocale = "en_US.UTF-8"; inputMethod = { - enabled = "kime"; + enable = true; + type = "kime"; kime.config = { indicator.icon_color = "White"; }; @@ -151,6 +152,19 @@ if you use X, append above lines to file `~/.xprofile` kime.desktop file is installed in /etc/xdg/autostart when installing kime. +### KDE Plasma Wayland + +It is required to select `kime daemon` under System Settings > Hardware > Input Devices > Virtual Keyboard. +A logout is recommended afterwards. + +### Weston + +It is required to have the following lines in `~/.config/weston.ini` +``` +[input-method] +path=/usr/bin/kime +``` + ### Configuration Read [CONFIGURATION.md](docs/CONFIGURATION.md) for detail options. @@ -169,6 +183,7 @@ These dependencies are optional depending on your environments. For example, qt6 * xcb (candidate) * fontconfig (xim) * freetype (xim) +* libxkbcommon (wayland) ### Build time (you don't need this on running compiled binary) @@ -189,3 +204,4 @@ These dependencies are optional depending on your environments. For example, qt6 * xcb * fontconfig * freetype +* libxkbcommon diff --git a/VERSION b/VERSION index b5021469..fd2a0186 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.0.2 +3.1.0 diff --git a/build-docker/ubuntu-22.10/Dockerfile b/build-docker/ubuntu-22.10/Dockerfile new file mode 100644 index 00000000..1f65611c --- /dev/null +++ b/build-docker/ubuntu-22.10/Dockerfile @@ -0,0 +1,37 @@ +FROM ubuntu:22.10 + +ENV DEBIAN_FRONTEND=noninteractive \ + PATH=/root/.cargo/bin:$PATH + +WORKDIR /opt/kime + +RUN sed -i -re 's/([a-z]{2}.)?archive.ubuntu.com|security.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list +RUN apt-get update +RUN apt-get install -y curl apt-utils \ + build-essential git gcc libclang-11-dev cmake extra-cmake-modules pkg-config zstd \ + libpango1.0-dev libcairo2-dev libgtk-4-dev libgtk-3-dev libglib2.0 libxcb1 \ + qtbase5-dev qtbase5-private-dev libqt5gui5 \ + qt6-base-dev qt6-base-private-dev \ + libxcb-shape0-dev libxcb-xfixes0-dev +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable --no-modify-path --profile minimal +RUN rustc --version +RUN mkdir -pv /opt/kime-out + +COPY src ./src + +COPY Cargo.toml . +COPY Cargo.lock . + +RUN cargo fetch + +COPY res ./res +COPY ci ./ci +COPY docs ./docs +COPY scripts ./scripts +COPY LICENSE . +COPY NOTICE.md . +COPY README.ko.md . +COPY README.md . +COPY VERSION . + +ENTRYPOINT [ "ci/build_deb.sh" ] diff --git a/default.nix b/default.nix index cac0835a..f901d9d0 100644 --- a/default.nix +++ b/default.nix @@ -8,7 +8,7 @@ let testArgs = if debug then "" else "--release"; in with pkgs; -llvmPackages_14.stdenv.mkDerivation rec { +llvmPackages_18.stdenv.mkDerivation rec { name = "kime"; src = ./.; buildInputs = deps.kimeBuildInputs; @@ -17,9 +17,9 @@ llvmPackages_14.stdenv.mkDerivation rec { cargoDeps = rustPlatform.fetchCargoTarball { inherit src; #sha256 = "0000000000000000000000000000000000000000000000000000"; - sha256 = "sha256-/o9b7YvrpV+IujkllFWAz6Mg4CbS9BInF8antfZ0Vsw="; + sha256 = "sha256-hlTxyaE/300CBGIJtFzIh6CT5PcmmqWt8CN428sr2U8="; }; - LIBCLANG_PATH = "${pkgs.llvmPackages_14.libclang.lib}/lib"; + LIBCLANG_PATH = "${pkgs.llvmPackages_18.libclang.lib}/lib"; dontUseCmakeConfigure = true; dontWrapQtApps = true; buildPhase = if debug then "bash scripts/build.sh -ad" else "bash scripts/build.sh -ar"; diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 76fa2ce0..3ba83e00 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -6,6 +6,16 @@ ### Improve +## 3.1.0 + +### Improve + +* Add ubuntu-22.10 Dockerfile **[@OctopusET]** +* Fix KDE autostart [#576](https://github.com/Riey/kime/issues/576) +* Add unicode prime symbols to math mode. (prime, double prime, triple prime, quadruple prime) +* Fix to work on wlroots>=0.17.1 (Sway 1.9) [#664](https://github.com/Riey/kime/issues/664) +* Add wayland zwp_input_method_v1 support **[@Jhyub]** + ## 3.0.2 ### Improve diff --git a/flake.lock b/flake.lock index 76be6d3f..7d837c01 100644 --- a/flake.lock +++ b/flake.lock @@ -1,12 +1,15 @@ { "nodes": { "flake-utils": { + "inputs": { + "systems": "systems" + }, "locked": { - "lastModified": 1667395993, - "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", "owner": "numtide", "repo": "flake-utils", - "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", "type": "github" }, "original": { @@ -17,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1673852661, - "narHash": "sha256-2FuRg7gI5dKfTXHh4U97OSSobXgUNnwNyy9akDliZyg=", + "lastModified": 1722335482, + "narHash": "sha256-ogz81JDwIyuX67JC2dZUr3tIPqJABgSKJF9tynZLksQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "05cbcd86534c8faebfb2ad4149d0139e49804cbd", + "rev": "3563397b2f10ffa1891e1a6ce99d13d960d73acd", "type": "github" }, "original": { @@ -35,6 +38,21 @@ "flake-utils": "flake-utils", "nixpkgs": "nixpkgs" } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index cdd0ba93..ea6056bc 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "A very basic flake"; + description = "Korean IME"; inputs = { nixpkgs.url = github:NixOS/nixpkgs; diff --git a/nix/deps.nix b/nix/deps.nix index 27fd99cf..4e908238 100644 --- a/nix/deps.nix +++ b/nix/deps.nix @@ -20,9 +20,9 @@ with pkgs; kimeNativeBuildInputs = [ python3 # xcb 0.9.0 pkg-config - llvmPackages_14.clang - llvmPackages_14.libclang.lib - llvmPackages_14.bintools + llvmPackages_18.clang + llvmPackages_18.libclang.lib + llvmPackages_18.bintools rustc cargo cmake extra-cmake-modules diff --git a/res/kime-xdg-autostart b/res/kime-xdg-autostart new file mode 100755 index 00000000..b6673dfe --- /dev/null +++ b/res/kime-xdg-autostart @@ -0,0 +1,6 @@ +#!/usr/bin/env sh + +/usr/bin/kime "#@" +if systemctl --user is-active --quiet app-kime@autostart.service; then + sleep 7s +fi diff --git a/res/kime.desktop b/res/kime.desktop index 771cff8a..68f9e282 100644 --- a/res/kime.desktop +++ b/res/kime.desktop @@ -1,5 +1,5 @@ [Desktop Entry] -Exec=/usr/bin/kime +Exec=/usr/bin/kime-xdg-autostart Name=kime daemon Name[ko]=kime 데몬 Comment=Start kime daemon @@ -8,9 +8,8 @@ Terminal=false NoDisplay=true StartupNotify=false X-DBUS-StartupType=Unique -X-GNOME-Autostart-Phase=Applications X-GNOME-AutoRestart=false X-GNOME-Autostart-Notify=false -X-KDE-autostart-after=panel X-KDE-StartupNotify=false -Icon=kime-han-black +X-KDE-Wayland-VirtualKeyboard=true +Icon=kime-hangul-black diff --git a/scripts/install.sh b/scripts/install.sh index 5baefc18..ef68352d 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -37,6 +37,10 @@ if [ -z "$KIME_AUTOSTART_DIR" ]; then KIME_AUTOSTART_DIR=etc/xdg/autostart fi +if [ -z "$KIME_DESKTOP_ENTRY_DIR" ]; then + KIME_DESKTOP_ENTRY_DIR=usr/share/applications +fi + if [ -z "$KIME_LIB_DIR" ]; then KIME_LIB_DIR=usr/lib fi @@ -95,6 +99,8 @@ if [ "${KIME_INSTALL_DOC}" -eq "1" ]; then fi install -Dm644 $KIME_OUT/*.desktop -t "$PREFIX/$KIME_AUTOSTART_DIR" +install -Dm644 $KIME_OUT/*.desktop -t "$PREFIX/$KIME_DESKTOP_ENTRY_DIR" +install -Dm755 $KIME_OUT/kime-xdg-autostart -t "$PREFIX/$KIME_BIN_DIR" install -Dm644 $KIME_OUT/icons/64x64/*.png -t "$PREFIX/$KIME_ICON_DIR/hicolor/64x64/apps" install -Dm755 $KIME_OUT/libkime_engine.so -t "$PREFIX/$KIME_LIB_DIR" diff --git a/shell.nix b/shell.nix index c5d8e958..167ed73a 100644 --- a/shell.nix +++ b/shell.nix @@ -3,7 +3,7 @@ }: let deps = import ./nix/deps.nix { pkgs = pkgs; }; - stdenv = pkgs.llvmPackages_14.stdenv; + stdenv = pkgs.llvmPackages_18.stdenv; mkShell = (pkgs.mkShell.override { stdenv = stdenv; }); in mkShell { @@ -13,11 +13,11 @@ mkShell { buildInputs = deps.kimeBuildInputs; nativeBuildInputs = deps.kimeNativeBuildInputs ++ (with pkgs; [ rustfmt - gnome.gedit - llvmPackages_14.lldb + pkgs.gedit + llvmPackages_18.lldb ]); CMAKE_EXPORT_COMPILE_COMMANDS = 1; - LIBCLANG_PATH = "${pkgs.llvmPackages_14.libclang.lib}/lib"; + LIBCLANG_PATH = "${pkgs.llvmPackages_18.libclang.lib}/lib"; LD_LIBRARY_PATH = "./target/debug:${pkgs.wayland}/lib:${pkgs.libGL}/lib:${pkgs.libxkbcommon}/lib"; G_MESSAGES_DEBUG = "kime"; GTK_IM_MODULE = "kime"; diff --git a/src/engine/backend/Cargo.toml b/src/engine/backend/Cargo.toml index d2d5deb1..c14f4e4e 100644 --- a/src/engine/backend/Cargo.toml +++ b/src/engine/backend/Cargo.toml @@ -2,7 +2,7 @@ name = "kime-engine-backend" version = "0.1.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" [dependencies] diff --git a/src/engine/backends/emoji/Cargo.toml b/src/engine/backends/emoji/Cargo.toml index 70b48dc8..a3cc44e8 100644 --- a/src/engine/backends/emoji/Cargo.toml +++ b/src/engine/backends/emoji/Cargo.toml @@ -2,7 +2,7 @@ name = "kime-engine-backend-emoji" version = "0.1.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" [dependencies] diff --git a/src/engine/backends/hangul/Cargo.toml b/src/engine/backends/hangul/Cargo.toml index 91a0fb0c..9abe8a11 100644 --- a/src/engine/backends/hangul/Cargo.toml +++ b/src/engine/backends/hangul/Cargo.toml @@ -2,7 +2,7 @@ name = "kime-engine-backend-hangul" version = "0.1.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" [dependencies] diff --git a/src/engine/backends/hangul/src/layout.rs b/src/engine/backends/hangul/src/layout.rs index 0a8109ea..94848ff4 100644 --- a/src/engine/backends/hangul/src/layout.rs +++ b/src/engine/backends/hangul/src/layout.rs @@ -9,7 +9,7 @@ pub struct Layout { } impl Layout { - fn from_items(items: HashMap) -> Self { + pub fn from_items(items: HashMap) -> Self { let mut keymap = KeyMap::default(); for (key, value) in items { diff --git a/src/engine/backends/hangul/src/lib.rs b/src/engine/backends/hangul/src/lib.rs index 8990ee55..c4745f79 100644 --- a/src/engine/backends/hangul/src/lib.rs +++ b/src/engine/backends/hangul/src/lib.rs @@ -12,7 +12,7 @@ pub use layout::Layout; pub use state::HangulEngine; #[derive(Hash, Serialize, Deserialize, Debug, EnumSetType)] -#[enumset(serialize_as_list)] +#[enumset(serialize_repr = "list")] pub enum Addon { ComposeChoseongSsang, ComposeJungseongSsang, diff --git a/src/engine/backends/hanja/Cargo.toml b/src/engine/backends/hanja/Cargo.toml index 0e014942..1dcdbfa3 100644 --- a/src/engine/backends/hanja/Cargo.toml +++ b/src/engine/backends/hanja/Cargo.toml @@ -2,7 +2,7 @@ name = "kime-engine-backend-hanja" version = "0.1.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" [dependencies] diff --git a/src/engine/backends/latin/Cargo.toml b/src/engine/backends/latin/Cargo.toml index 57601595..e1e25039 100644 --- a/src/engine/backends/latin/Cargo.toml +++ b/src/engine/backends/latin/Cargo.toml @@ -2,7 +2,7 @@ name = "kime-engine-backend-latin" version = "0.1.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" [dependencies] diff --git a/src/engine/backends/math/Cargo.toml b/src/engine/backends/math/Cargo.toml index 079b1715..0506ba36 100644 --- a/src/engine/backends/math/Cargo.toml +++ b/src/engine/backends/math/Cargo.toml @@ -2,7 +2,7 @@ name = "kime-engine-backend-math" version = "0.1.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" [dependencies] diff --git a/src/engine/candidate/Cargo.toml b/src/engine/candidate/Cargo.toml index 213ea411..560f5424 100644 --- a/src/engine/candidate/Cargo.toml +++ b/src/engine/candidate/Cargo.toml @@ -2,7 +2,7 @@ name = "kime-engine-candidate" version = "0.1.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" [dev-dependencies] diff --git a/src/engine/capi/Cargo.toml b/src/engine/capi/Cargo.toml index bf7c2792..9f625bec 100644 --- a/src/engine/capi/Cargo.toml +++ b/src/engine/capi/Cargo.toml @@ -3,7 +3,7 @@ name = "kime-engine-capi" description = "Kime engine library" version = "0.5.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" [lib] diff --git a/src/engine/cffi/Cargo.toml b/src/engine/cffi/Cargo.toml index 23a1dc55..825c71df 100644 --- a/src/engine/cffi/Cargo.toml +++ b/src/engine/cffi/Cargo.toml @@ -2,7 +2,7 @@ name = "kime-engine-cffi" version = "0.8.1" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" [dependencies] @@ -10,5 +10,5 @@ kime-engine-capi = { path = "../capi" } kime-engine-config = { path = "../config" } [build-dependencies] -bindgen = { version = "0.63", default-features = false } -cbindgen = { version = "0.24", default-features = false } +bindgen = { version = "0.69.4", default-features = false } +cbindgen = { version = "0.26.0", default-features = false } diff --git a/src/engine/cffi/build.rs b/src/engine/cffi/build.rs index 5c20d192..d34bdb79 100644 --- a/src/engine/cffi/build.rs +++ b/src/engine/cffi/build.rs @@ -29,7 +29,7 @@ fn main() { .allowlist_var("kime::.+") .allowlist_type("kime::.+") .allowlist_function("kime::.+") - .parse_callbacks(Box::new(bindgen::CargoCallbacks)) + .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) .generate() .unwrap(); diff --git a/src/engine/config/Cargo.toml b/src/engine/config/Cargo.toml index 0c225882..67146cb3 100644 --- a/src/engine/config/Cargo.toml +++ b/src/engine/config/Cargo.toml @@ -3,7 +3,7 @@ name = "kime-engine-config" version = "0.1.0" authors = ["Riey "] license = "GPL-3.0-or-later" -edition = "2018" +edition = "2021" [features] config-serde = ["serde", "enumset/serde", "log/serde"] @@ -17,4 +17,3 @@ serde = { version = "1.0.124", features = ["derive"], optional = true } enumset = "1.0.6" enum-map = "2" maplit = "1.0.2" - diff --git a/src/engine/config/src/lib.rs b/src/engine/config/src/lib.rs index 444894ae..0da942ae 100644 --- a/src/engine/config/src/lib.rs +++ b/src/engine/config/src/lib.rs @@ -16,7 +16,7 @@ pub use log::LevelFilter; #[derive(Debug, EnumSetType, Enum, PartialOrd, Ord)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -#[cfg_attr(feature = "serde", enumset(serialize_as_list))] +#[cfg_attr(feature = "serde", enumset(serialize_repr = "list"))] #[repr(u32)] pub enum InputCategory { Latin, @@ -25,7 +25,7 @@ pub enum InputCategory { #[derive(Debug, EnumSetType, Enum, PartialOrd, Ord)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -#[cfg_attr(feature = "serde", enumset(serialize_as_list))] +#[cfg_attr(feature = "serde", enumset(serialize_repr = "list"))] #[repr(u32)] pub enum InputMode { Math, @@ -93,7 +93,7 @@ impl Default for IconColor { #[derive(EnumSetType)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -#[cfg_attr(feature = "serde", enumset(serialize_as_list))] +#[cfg_attr(feature = "serde", enumset(serialize_repr = "list"))] pub enum DaemonModule { Xim, Wayland, diff --git a/src/engine/core/Cargo.toml b/src/engine/core/Cargo.toml index c74c61d4..06bd2fc0 100644 --- a/src/engine/core/Cargo.toml +++ b/src/engine/core/Cargo.toml @@ -2,17 +2,17 @@ name = "kime-engine-core" version = "2.0.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" [dependencies] kime-engine-config = { path = "../config", features = ["config-serde"] } kime-engine-backend = { path = "../backend" } kime-engine-backend-hangul = { path = "../backends/hangul" } -kime-engine-backend-hanja = { path = "../backends/hanja" } +kime-engine-backend-hanja = { path = "../backends/hanja", optional = true } kime-engine-backend-latin = { path = "../backends/latin" } -kime-engine-backend-math = { path = "../backends/math" } -kime-engine-backend-emoji = { path = "../backends/emoji" } +kime-engine-backend-math = { path = "../backends/math", optional = true } +kime-engine-backend-emoji = { path = "../backends/emoji", optional = true } serde_yaml = "0.9" parking_lot = "0.12" fontdb = { version = "0.11.2", features = ["fontconfig"] } @@ -30,3 +30,7 @@ name = "call_key" harness = false [features] +default = ["hanja", "math", "emoji"] +hanja = ["dep:kime-engine-backend-hanja"] +math = ["dep:kime-engine-backend-math"] +emoji = ["dep:kime-engine-backend-emoji"] diff --git a/src/engine/core/src/config.rs b/src/engine/core/src/config.rs index c2e096e9..45f5f94f 100644 --- a/src/engine/core/src/config.rs +++ b/src/engine/core/src/config.rs @@ -37,6 +37,7 @@ impl Config { .unwrap_or_default() }; + #[cfg(unix)] let translation_layer: Option> = engine .translation_layer .and_then(|f| { @@ -49,6 +50,9 @@ impl Config { .as_ref() .and_then(|content| serde_yaml::from_str(content).ok()); + #[cfg(not(unix))] + let translation_layer = None; + Self { translation_layer: translation_layer, default_category: engine.default_category, diff --git a/src/engine/core/src/lib.rs b/src/engine/core/src/lib.rs index 4c8bbe32..3f45e436 100644 --- a/src/engine/core/src/lib.rs +++ b/src/engine/core/src/lib.rs @@ -13,10 +13,13 @@ use config::{HotkeyBehavior, HotkeyResult}; use os::{DefaultOsContext, OsContext}; use kime_engine_backend::{InputEngineBackend, InputEngineMode, InputEngineModeResult}; +#[cfg(feature = "emoji")] use kime_engine_backend_emoji::EmojiMode; use kime_engine_backend_hangul::HangulEngine; +#[cfg(feature = "hanja")] use kime_engine_backend_hanja::HanjaMode; use kime_engine_backend_latin::LatinEngine; +#[cfg(feature = "math")] use kime_engine_backend_math::MathMode; pub struct InputEngine { @@ -231,8 +234,11 @@ struct EngineImpl { mode: Option, latin_engine: LatinEngine, hangul_engine: HangulEngine, + #[cfg(feature = "hanja")] hanja_mode: HanjaMode, + #[cfg(feature = "math")] math_mode: MathMode, + #[cfg(feature = "emoji")] emoji_mode: EmojiMode, } @@ -246,8 +252,11 @@ impl EngineImpl { config.hangul_data.word_commit(), config.hangul_data.preedit_johab(), ), + #[cfg(feature = "hanja")] hanja_mode: HanjaMode::new(), + #[cfg(feature = "math")] math_mode: MathMode::new(), + #[cfg(feature = "emoji")] emoji_mode: EmojiMode::new(), } } @@ -265,6 +274,7 @@ impl EngineImpl { true } InputMode::Hanja => match self.category { + #[cfg(feature = "hanja")] InputCategory::Hangul => { preedit_buf.clear(); self.hangul_engine.preedit_str(preedit_buf); @@ -301,30 +311,36 @@ macro_rules! do_mode { }; (@ret $self:expr, $func:ident($($arg:expr,)*)) => { match $self.mode { + #[cfg(feature = "math")] Some(InputMode::Math) => { do_mode!(@retarm $self, math_mode, $func($($arg,)*)); } + #[cfg(feature = "hanja")] Some(InputMode::Hanja) => { do_mode!(@retarm $self, hanja_mode, $func($($arg,)*)); } + #[cfg(feature = "emoji")] Some(InputMode::Emoji) => { do_mode!(@retarm $self, emoji_mode, $func($($arg,)*)); } - None => {} + _ => {} } }; (@direct $self:expr, $func:ident($($arg:expr,)*)) => { match $self.mode { + #[cfg(feature = "hanja")] Some(InputMode::Hanja) => { return $self.hanja_mode.$func($($arg,)*); } + #[cfg(feature = "math")] Some(InputMode::Math) => { return $self.math_mode.$func($($arg,)*); } + #[cfg(feature = "emoji")] Some(InputMode::Emoji) => { return $self.emoji_mode.$func($($arg,)*); } - None => {} + _ => {} } }; } @@ -348,10 +364,13 @@ macro_rules! connect { impl EngineImpl { pub fn check_ready(&self) -> bool { match self.mode { + #[cfg(feature = "hanja")] Some(InputMode::Hanja) => self.hanja_mode.check_ready(), + #[cfg(feature = "emoji")] Some(InputMode::Emoji) => self.emoji_mode.check_ready(), + #[cfg(feature = "math")] Some(InputMode::Math) => self.math_mode.check_ready(), - None => true, + _ => true, } } @@ -371,12 +390,15 @@ impl InputEngineBackend for EngineImpl { .unwrap_or(raw_key); match self.mode { + #[cfg(feature = "emoji")] Some(InputMode::Emoji) => { do_mode!(@retarm self, emoji_mode, press_key(&config.latin_data, key, commit_buf,)) } + #[cfg(feature = "hanja")] Some(InputMode::Hanja) => { do_mode!(@retarm self, hanja_mode, press_key(&(), key, commit_buf,)) } + #[cfg(feature = "math")] Some(InputMode::Math) => { do_mode!(@retarm self, math_mode, press_key(&config.latin_data, key, commit_buf,)) } diff --git a/src/engine/dict/Cargo.toml b/src/engine/dict/Cargo.toml index ba7b296b..3b8c9e8b 100644 --- a/src/engine/dict/Cargo.toml +++ b/src/engine/dict/Cargo.toml @@ -2,7 +2,7 @@ name = "kime-engine-dict" version = "0.1.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" [build-dependencies] diff --git a/src/engine/dict/data/symbol_map.json b/src/engine/dict/data/symbol_map.json index 9f899b3c..9dfe9f04 100644 --- a/src/engine/dict/data/symbol_map.json +++ b/src/engine/dict/data/symbol_map.json @@ -431,4 +431,8 @@ , {"keyword":"(b","symbols":[{"style":[],"symbol":"⟅"}]} , {"keyword":"((","symbols":[{"style":[],"symbol":"⦅"}]} , {"keyword":"&","symbols":[{"style":[],"symbol":"⅋"}]} +, {"keyword":"prime","symbols":[{"style":[],"symbol":"′"}]} +, {"keyword":"pprime","symbols":[{"style":[],"symbol":"″"}]} +, {"keyword":"ppprime","symbols":[{"style":[],"symbol":"‴"}]} +, {"keyword":"pppprime","symbols":[{"style":[],"symbol":"⁗"}]} ] diff --git a/src/frontends/qt5/src/input_context.cc b/src/frontends/qt5/src/input_context.cc index 8ac34f12..0f157b6f 100644 --- a/src/frontends/qt5/src/input_context.cc +++ b/src/frontends/qt5/src/input_context.cc @@ -99,7 +99,9 @@ void KimeInputContext::preedit_str(kime::RustStr s) { fmt.setFontUnderline(true); QString qs = QString::fromUtf8((const char *)(s.ptr), s.len); this->attributes.push_back(QInputMethodEvent::Attribute{ - QInputMethodEvent::AttributeType::TextFormat, 0, qs.length(), fmt}); + QInputMethodEvent::AttributeType::TextFormat, + 0, static_cast(qs.length()), fmt + }); QInputMethodEvent e(qs, this->attributes); this->attributes.clear(); QCoreApplication::sendEvent(this->focus_object, &e); diff --git a/src/frontends/wayland/Cargo.toml b/src/frontends/wayland/Cargo.toml index 289e5125..0e4ba6ba 100644 --- a/src/frontends/wayland/Cargo.toml +++ b/src/frontends/wayland/Cargo.toml @@ -2,7 +2,7 @@ name = "kime-wayland" version = "0.1.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" [dependencies] @@ -12,6 +12,7 @@ kime-version = { path = "../../tools/version" } wayland-client = "0.29" wayland-protocols = { version = "0.29", features = ["client", "unstable_protocols"] } zwp-virtual-keyboard = "0.2.7" +xkbcommon = { version = "0.7.0", features = ["wayland"] } libc = "0.2.82" log = "0.4.13" diff --git a/src/frontends/wayland/src/input_method_v1.rs b/src/frontends/wayland/src/input_method_v1.rs new file mode 100644 index 00000000..db37ecd9 --- /dev/null +++ b/src/frontends/wayland/src/input_method_v1.rs @@ -0,0 +1,492 @@ +use std::error::Error; +use std::os::fd::{FromRawFd, OwnedFd}; +use std::time::{Duration, Instant}; + +use wayland_client::{ + event_enum, + protocol::wl_keyboard::{Event as KeyEvent, KeyState, WlKeyboard, REQ_RELEASE_SINCE}, + DispatchData, Display, EventQueue, Filter, GlobalManager, Main, +}; + +use wayland_protocols::unstable::input_method::v1::client::{ + zwp_input_method_context_v1::{Event as ImCtxEvent, ZwpInputMethodContextV1}, + zwp_input_method_v1::{Event as ImEvent, ZwpInputMethodV1}, +}; + +use kime_engine_cffi::*; + +use mio::{unix::SourceFd, Events as MioEvents, Interest, Poll, Token}; +use mio_timerfd::{ClockId, TimerFd}; +use wayland_client::protocol::wl_keyboard::KeymapFormat; +use xkbcommon::xkb::{ + Context, Keycode, Keymap, CONTEXT_NO_FLAGS, KEYMAP_COMPILE_NO_FLAGS, KEYMAP_FORMAT_TEXT_V1, +}; + +use crate::{PressState, RepeatInfo}; + +event_enum! { + Events | + Im => ZwpInputMethodV1, + ImCtx => ZwpInputMethodContextV1, + Key => WlKeyboard +} + +const ZWP_TEXT_INPUT_V1_PREEDIT_STYLE_NONE: u32 = 1; +const ZWP_TEXT_INPUT_V1_PREEDIT_STYLE_UNDERLINE: u32 = 5; + +struct KimeContext { + config: Config, + engine: InputEngine, + mod_state: ModifierState, + im_ctx: Option>, + keyboard: Option>, + numlock: bool, + engine_ready: bool, + keymap: Option, + grab_activate: bool, //? + serial: u32, + timer: TimerFd, + /// `None` if `KimeContext` have never received a `RepeatInfo` or repeat is disabled (i.e. rate + /// is zero). `Some(..)` if `RepeatInfo` is known and kime-wayland started tracking the press + /// state of keys. + repeat_state: Option<(RepeatInfo, PressState)>, +} + +impl Drop for KimeContext { + fn drop(&mut self) { + if let Some(im_ctx) = &mut self.im_ctx { + im_ctx.destroy(); + } + } +} + +impl KimeContext { + pub fn new(timer: TimerFd) -> Self { + let config = Config::load(); + Self { + engine: InputEngine::new(&config), + config, + mod_state: 0, + serial: 0, + numlock: false, + engine_ready: true, + keymap: None, + grab_activate: false, + im_ctx: None, + keyboard: None, + timer, + // Clients with older protocols might not provide repeat info. + // Therefore a default value is required. + repeat_state: Some(( + RepeatInfo { + rate: 20, + delay: 400, + }, + PressState::NotPressing, + )), + } + } + + pub fn new_data<'a>(data: &'a mut DispatchData) -> &'a mut Self { + data.get::().unwrap() + } + + fn process_input_result(&mut self, ret: InputResult) -> bool { + if ret & InputResult_NOT_READY != 0 { + self.engine_ready = false; + } + + if ret & InputResult_LANGUAGE_CHANGED != 0 { + self.engine.update_layout_state(); + } + + if ret & InputResult_HAS_COMMIT != 0 { + self.commit_string(self.engine.commit_str().into()); + self.engine.clear_commit(); + } + + if ret & InputResult_HAS_PREEDIT != 0 { + let preedit = self.engine.preedit_str().into(); + self.preedit(preedit); + } else { + self.clear_preedit(); + } + + ret & InputResult_CONSUMED == 0 + } + + fn commit_string(&mut self, s: String) { + if !s.is_empty() { + if let Some(im_ctx) = &mut self.im_ctx { + im_ctx.commit_string(self.serial, s); + } + } + } + + fn clear_preedit(&mut self) { + if let Some(im_ctx) = &mut self.im_ctx { + im_ctx.preedit_cursor(0); + im_ctx.preedit_styling(0, 0, ZWP_TEXT_INPUT_V1_PREEDIT_STYLE_NONE); + im_ctx.preedit_string(self.serial, String::new(), String::new()); + } + } + + fn preedit(&mut self, s: String) { + if let Some(im_ctx) = &mut self.im_ctx { + im_ctx.preedit_cursor(s.len() as _); + im_ctx.preedit_styling(0, s.len() as _, ZWP_TEXT_INPUT_V1_PREEDIT_STYLE_UNDERLINE); + im_ctx.preedit_string(self.serial, s.clone(), s); + } + } + + fn key(&mut self, time: u32, key: u32, state: KeyState) { + if let Some(im_ctx) = &mut self.im_ctx { + im_ctx.key(self.serial, time, key, state as _); + } + } + + pub fn handle_im_ctx_ev(&mut self, ev: ImCtxEvent) { + match ev { + ImCtxEvent::CommitState { serial } => { + self.serial = serial; + } + _ => {} + } + } + + pub fn handle_key_ev(&mut self, ev: KeyEvent) { + match ev { + KeyEvent::Keymap { format, fd, size } => { + if let KeymapFormat::XkbV1 = format { + unsafe { + self.keymap = Keymap::new_from_fd( + &Context::new(CONTEXT_NO_FLAGS), + OwnedFd::from_raw_fd(fd), + size as usize, + KEYMAP_FORMAT_TEXT_V1, + KEYMAP_COMPILE_NO_FLAGS, + ) + .unwrap_or(None); + } + } else { + unsafe { + libc::close(fd); + } + } + } + KeyEvent::Key { + time, key, state, .. + } => { + if state == KeyState::Pressed { + if self.grab_activate { + let ret = self.engine.press_key( + &self.config, + (key + 8) as u16, + self.numlock, + self.mod_state, + ); + + let bypassed = self.process_input_result(ret); + + if bypassed { + self.key(time, key, state); + } else { + // If the key was not bypassed by IME, key repeat should be handled by the + // IME. Start waiting for the key hold timer event. + match self.repeat_state { + Some((info, ref mut press_state)) + if !press_state.is_pressing(key) => + { + let duration = Duration::from_millis(info.delay as u64); + self.timer.set_timeout(&duration).unwrap(); + *press_state = PressState::Pressing { + pressed_at: Instant::now(), + is_repeating: false, + key, + wayland_time: time, + } + } + _ => {} + } + } + } else { + self.key(time, key, state); + } + } else { + if let Some((.., ref mut press_state)) = self.repeat_state { + if press_state.is_pressing(key) { + self.timer.disarm().unwrap(); + *press_state = PressState::NotPressing; + } + } + + self.key(time, key, state); + } + } + KeyEvent::Modifiers { + mods_depressed, + mods_latched, + mods_locked, + group, + .. + } => { + self.mod_state = 0; + if mods_depressed & 0x1 != 0 { + self.mod_state |= ModifierState_SHIFT; + } + if mods_depressed & 0x4 != 0 { + self.mod_state |= ModifierState_CONTROL; + } + if mods_depressed & 0x8 != 0 { + self.mod_state |= ModifierState_ALT; + } + if mods_depressed & 0x40 != 0 { + self.mod_state |= ModifierState_SUPER; + } + + self.numlock = mods_depressed & 0x10 != 0; + + if let Some(im_ctx) = &mut self.im_ctx { + im_ctx.modifiers( + self.serial, + mods_depressed, + mods_latched, + mods_locked, + group, + ); + } + } + KeyEvent::RepeatInfo { rate, delay } => { + self.repeat_state = if rate == 0 { + None + } else { + let info = RepeatInfo { rate, delay }; + let press_state = self.repeat_state.map(|pair| pair.1); + Some((info, press_state.unwrap_or(PressState::NotPressing))) + } + } + _ => {} + } + } + + pub fn handle_timer_ev(&mut self) -> std::io::Result<()> { + // Read timer, this MUST be called or timer will be broken + let overrun_count = self.timer.read()?; + if overrun_count != 1 { + log::warn!("Some timer events were not properly handled!"); + } + + if let Some(( + info, + PressState::Pressing { + pressed_at, + ref mut is_repeating, + key, + wayland_time, + }, + )) = self.repeat_state + { + if !*is_repeating { + if self + .keymap + .as_ref() + .map_or_else(|| true, |x| x.key_repeats(Keycode::new(key + 8))) + { + // Start repeat + log::trace!("Start repeating {}", key); + let interval = &Duration::from_secs_f64(1.0 / info.rate as f64); + self.timer.set_timeout_interval(interval)?; + *is_repeating = true; + } + } + + let ev = KeyEvent::Key { + serial: self.serial, // Is this fine? + time: wayland_time + pressed_at.elapsed().as_millis() as u32, + key, + state: KeyState::Pressed, + }; + self.handle_key_ev(ev); + } else { + log::warn!("Received timer event when it has never received RepeatInfo."); + } + Ok(()) + } + + pub fn activate(&mut self, im_ctx: Main, keyboard: Main) { + self.engine.update_layout_state(); + if !self.engine_ready { + if self.engine.check_ready() { + let ret = self.engine.end_ready(); + self.process_input_result(ret); + self.engine_ready = true; + } + } + self.grab_activate = true; + + let filter = Filter::new(|ev, _filter, mut data| { + let ctx = KimeContext::new_data(&mut data); + + match ev { + Events::ImCtx { event, .. } => { + ctx.handle_im_ctx_ev(event); + } + Events::Key { event, .. } => { + ctx.handle_key_ev(event); + } + _ => {} + } + }); + + im_ctx.assign(filter.clone()); + keyboard.assign(filter); + + self.im_ctx = Some(im_ctx); + self.keyboard = Some(keyboard); + } + + pub fn deactivate(&mut self) { + // Focus lost, reset states + if self.engine_ready { + self.engine.reset(); + } + self.grab_activate = false; + + // Input deactivated, stop repeating + self.timer.disarm().unwrap(); + if let Some((_, ref mut press_state)) = self.repeat_state { + *press_state = PressState::NotPressing + } + + if let Some(im_ctx) = &mut self.im_ctx { + im_ctx.destroy(); + } + self.im_ctx = None; + + if let Some(keyboard) = &mut self.keyboard { + if keyboard.as_ref().version() >= REQ_RELEASE_SINCE { + keyboard.release(); + } + } + self.keyboard = None; + } +} + +pub fn run( + display: &Display, + event_queue: &mut EventQueue, + globals: &GlobalManager, +) -> Result<(), Box> { + let im_filter = Filter::new(|ev, _filter, mut data| { + let ctx = KimeContext::new_data(&mut data); + match ev { + Events::Im { event, .. } => match event { + ImEvent::Activate { id: im_ctx } => { + let keyboard = im_ctx.grab_keyboard(); + ctx.activate(im_ctx, keyboard); + } + ImEvent::Deactivate { .. } => { + ctx.deactivate(); + } + _ => {} + }, + _ => {} + } + }); + + let im = globals.instantiate_exact::(1)?; + im.assign(im_filter); + + let mut timer = TimerFd::new(ClockId::Monotonic).expect("Initialize timer"); + + let mut poll = Poll::new().expect("Initialize epoll()"); + let registry = poll.registry(); + + const POLL_WAYLAND: Token = Token(0); + registry + .register( + &mut SourceFd(&display.get_connection_fd()), + POLL_WAYLAND, + Interest::READABLE | Interest::WRITABLE, + ) + .expect("Register wayland socket to the epoll()"); + + const POLL_TIMER: Token = Token(1); + registry + .register(&mut timer, POLL_TIMER, Interest::READABLE) + .expect("Register timer to the epoll()"); + + // Initialize kime context + let mut kime_ctx = KimeContext::new(timer); + event_queue + .sync_roundtrip(&mut kime_ctx, |_, _, _| ()) + .unwrap(); + + log::info!("Server init success!"); + + // Non-blocking event loop + // + // Reference: + // https://docs.rs/wayland-client/0.28.3/wayland_client/struct.EventQueue.html + let mut events = MioEvents::with_capacity(1024); + let stop_reason = 'main: loop { + use std::io::ErrorKind; + + // Sleep until next event + if let Err(e) = poll.poll(&mut events, None) { + // Should retry on EINTR + // + // Reference: + // https://www.gnu.org/software/libc/manual/html_node/Interrupted-Primitives.html + if e.kind() == ErrorKind::Interrupted { + continue; + } + break Err(e); + } + + for event in &events { + match event.token() { + POLL_WAYLAND => {} + POLL_TIMER => { + if let Err(e) = kime_ctx.handle_timer_ev() { + break 'main Err(e); + } + } + _ => unreachable!(), + } + } + + // Perform read() only when it's ready, returns None when there're already pending events + if let Some(guard) = event_queue.prepare_read() { + if let Err(e) = guard.read_events() { + // EWOULDBLOCK here means there's no new messages to read + if e.kind() != ErrorKind::WouldBlock { + break Err(e); + } + } + } + + if let Err(e) = event_queue.dispatch_pending(&mut kime_ctx, |_, _, _| {}) { + break Err(e); + } + + // Flush pending writes + if let Err(e) = display.flush() { + // EWOULDBLOCK here means there're so many to write, retry later + if e.kind() != ErrorKind::WouldBlock { + break Err(e); + } + } + }; + + match stop_reason { + Ok(()) => { + log::info!("Server finished gracefully"); + Ok(()) + } + Err(e) => { + log::error!("Server aborted due to IO Error: {}", e); + Err(Box::from(e)) + } + } +} diff --git a/src/frontends/wayland/src/input_method_v2.rs b/src/frontends/wayland/src/input_method_v2.rs new file mode 100644 index 00000000..1916b973 --- /dev/null +++ b/src/frontends/wayland/src/input_method_v2.rs @@ -0,0 +1,471 @@ +use std::error::Error; +use std::time::{Duration, Instant}; + +use wayland_client::{ + event_enum, + protocol::{wl_keyboard::KeyState, wl_seat::WlSeat}, + DispatchData, Display, EventQueue, Filter, GlobalManager, Main, +}; + +use wayland_protocols::misc::zwp_input_method_v2::client::{ + zwp_input_method_keyboard_grab_v2::{Event as KeyEvent, ZwpInputMethodKeyboardGrabV2}, + zwp_input_method_manager_v2::ZwpInputMethodManagerV2, + zwp_input_method_v2::{Event as ImEvent, ZwpInputMethodV2}, +}; +use zwp_virtual_keyboard::virtual_keyboard_unstable_v1::{ + zwp_virtual_keyboard_manager_v1::ZwpVirtualKeyboardManagerV1, + zwp_virtual_keyboard_v1::ZwpVirtualKeyboardV1, +}; + +use kime_engine_cffi::*; + +use mio::{unix::SourceFd, Events as MioEvents, Interest, Poll, Token}; +use mio_timerfd::{ClockId, TimerFd}; + +use crate::{PressState, RepeatInfo}; + +event_enum! { + Events | + Key => ZwpInputMethodKeyboardGrabV2, + Im => ZwpInputMethodV2 +} + +struct InputMethodState { + activate: bool, + deactivate: bool, +} + +impl Default for InputMethodState { + fn default() -> Self { + Self { + activate: false, + deactivate: false, + } + } +} + +struct KimeContext { + config: Config, + engine: InputEngine, + mod_state: ModifierState, + current_state: InputMethodState, + pending_state: InputMethodState, + vk: Main, + im: Main, + grab: Main, + numlock: bool, + engine_ready: bool, + keymap_init: bool, + grab_activate: bool, + serial: u32, + // Have to concern Multi seats? + + // Key repeat contexts + timer: TimerFd, + /// `None` if `KimeContext` have never received a `RepeatInfo` or repeat is disabled (i.e. rate + /// is zero). `Some(..)` if `RepeatInfo` is known and kime-wayland started tracking the press + /// state of keys. + repeat_state: Option<(RepeatInfo, PressState)>, +} + +impl Drop for KimeContext { + fn drop(&mut self) { + self.grab.release(); + self.vk.destroy(); + self.im.destroy(); + } +} + +impl KimeContext { + pub fn new( + vk: Main, + im: Main, + grab: Main, + timer: TimerFd, + ) -> Self { + let config = Config::load(); + Self { + engine: InputEngine::new(&config), + config, + mod_state: 0, + current_state: InputMethodState::default(), + pending_state: InputMethodState::default(), + serial: 0, + numlock: false, + engine_ready: true, + keymap_init: false, + grab_activate: false, + vk, + im, + grab, + timer, + repeat_state: None, + } + } + + pub fn new_data<'a>(data: &'a mut DispatchData) -> &'a mut Self { + data.get::().unwrap() + } + + fn process_input_result(&mut self, ret: InputResult) -> bool { + if ret & InputResult_NOT_READY != 0 { + self.engine_ready = false; + } + + if ret & InputResult_LANGUAGE_CHANGED != 0 { + self.engine.update_layout_state(); + } + + if ret & InputResult_HAS_PREEDIT != 0 { + let preedit = self.engine.preedit_str().into(); + self.preedit(preedit); + } else { + self.clear_preedit(); + } + + if ret & InputResult_HAS_COMMIT != 0 { + self.commit_string(self.engine.commit_str().into()); + self.engine.clear_commit(); + } + + self.commit(); + + ret & InputResult_CONSUMED == 0 + } + + fn commit(&mut self) { + self.im.commit(self.serial); + } + + fn commit_string(&mut self, s: String) { + if !s.is_empty() { + self.im.commit_string(s); + } + } + + fn clear_preedit(&mut self) { + self.im.set_preedit_string(String::new(), -1, -1); + } + + fn preedit(&mut self, s: String) { + let len = s.len(); + self.im.set_preedit_string(s, 0, len as _); + } + + pub fn handle_im_ev(&mut self, ev: ImEvent) { + match ev { + ImEvent::Activate => { + self.pending_state.activate = true; + } + ImEvent::Deactivate => { + self.pending_state.deactivate = true; + } + ImEvent::Unavailable => { + log::error!("Receive Unavailable event is another server already running?"); + panic!("Unavailable") + } + ImEvent::Done => { + self.serial += 1; + if !self.current_state.activate && self.pending_state.activate { + self.engine.update_layout_state(); + if !self.engine_ready { + if self.engine.check_ready() { + let ret = self.engine.end_ready(); + self.process_input_result(ret); + self.engine_ready = true; + } + } + self.grab_activate = true; + } else if !self.current_state.deactivate && self.pending_state.deactivate { + // Focus lost, reset states + if self.engine_ready { + self.engine.reset(); + } + self.grab_activate = false; + + // Input deactivated, stop repeating + self.timer.disarm().unwrap(); + if let Some((_, ref mut press_state)) = self.repeat_state { + *press_state = PressState::NotPressing + } + } + self.current_state = std::mem::take(&mut self.pending_state); + } + _ => {} + } + } + + pub fn handle_key_ev(&mut self, ev: KeyEvent) { + match ev { + KeyEvent::Keymap { fd, format, size } => { + if !self.keymap_init { + self.vk.keymap(format as _, fd, size); + self.keymap_init = true; + } + unsafe { + libc::close(fd); + } + } + KeyEvent::Key { + state, key, time, .. + } => { + // NOTE: Never read `serial` of KeyEvent. You should rely on serial of KimeContext + if state == KeyState::Pressed { + if self.grab_activate { + let ret = self.engine.press_key( + &self.config, + (key + 8) as u16, + self.numlock, + self.mod_state, + ); + + let bypassed = self.process_input_result(ret); + + if bypassed { + // Bypassed key's repeat will be handled by the clients. + // + // Reference: + // https://github.com/swaywm/sway/pull/4932#issuecomment-774113129 + self.vk.key(time, key, state as _); + } else { + // If the key was not bypassed by IME, key repeat should be handled by the + // IME. Start waiting for the key hold timer event. + match self.repeat_state { + Some((info, ref mut press_state)) + if !press_state.is_pressing(key) => + { + let duration = Duration::from_millis(info.delay as u64); + self.timer.set_timeout(&duration).unwrap(); + *press_state = PressState::Pressing { + pressed_at: Instant::now(), + is_repeating: false, + key, + wayland_time: time, + }; + } + _ => {} + } + } + } else { + // not activated so just skip + self.vk.key(time, key, state as _); + } + } else { + // If user released the last pressed key, clear the timer and state + if let Some((.., ref mut press_state)) = self.repeat_state { + if press_state.is_pressing(key) { + self.timer.disarm().unwrap(); + *press_state = PressState::NotPressing; + } + } + + self.vk.key(time, key, state as _); + } + } + KeyEvent::Modifiers { + mods_depressed, + mods_latched, + mods_locked, + group, + .. + } => { + self.mod_state = 0; + if mods_depressed & 0x1 != 0 { + self.mod_state |= ModifierState_SHIFT; + } + if mods_depressed & 0x4 != 0 { + self.mod_state |= ModifierState_CONTROL; + } + if mods_depressed & 0x8 != 0 { + self.mod_state |= ModifierState_ALT; + } + if mods_depressed & 0x40 != 0 { + self.mod_state |= ModifierState_SUPER; + } + + self.numlock = mods_depressed & 0x10 != 0; + + self.vk + .modifiers(mods_depressed, mods_latched, mods_locked, group); + } + KeyEvent::RepeatInfo { rate, delay } => { + self.repeat_state = if rate == 0 { + // Zero rate means disabled repeat + // + // Reference: + // https://github.com/swaywm/wlroots/blob/3d46d3f7/protocol/input-method-unstable-v2.xml#L444-L455 + None + } else { + let info = RepeatInfo { rate, delay }; + let press_state = self.repeat_state.map(|pair| pair.1); + Some((info, press_state.unwrap_or(PressState::NotPressing))) + } + } + _ => {} + } + } + + pub fn handle_timer_ev(&mut self) -> std::io::Result<()> { + // Read timer, this MUST be called or timer will be broken + let overrun_count = self.timer.read()?; + if overrun_count != 1 { + log::warn!("Some timer events were not properly handled!"); + } + + if let Some(( + info, + PressState::Pressing { + pressed_at, + ref mut is_repeating, + key, + wayland_time, + }, + )) = self.repeat_state + { + if !*is_repeating { + // Start repeat + log::trace!("Start repeating {}", key); + let interval = &Duration::from_secs_f64(1.0 / info.rate as f64); + self.timer.set_timeout_interval(interval)?; + *is_repeating = true; + } + + // Emit key repeat event + let ev = KeyEvent::Key { + serial: self.serial, + time: wayland_time + pressed_at.elapsed().as_millis() as u32, + key, + state: KeyState::Pressed, + }; + self.handle_key_ev(ev); + } else { + log::warn!("Received timer event when it has never received RepeatInfo."); + } + + Ok(()) + } +} + +pub fn run( + display: &Display, + event_queue: &mut EventQueue, + globals: &GlobalManager, +) -> Result<(), Box> { + let im_manager = globals.instantiate_exact::(1)?; + let vk_manager = globals.instantiate_exact::(1)?; + let seat = globals.instantiate_exact::(1).expect("Load Seat"); + + let filter = Filter::new(|ev, _filter, mut data| { + let ctx = KimeContext::new_data(&mut data); + + match ev { + Events::Key { event, .. } => { + ctx.handle_key_ev(event); + } + Events::Im { event, .. } => { + ctx.handle_im_ev(event); + } + } + }); + + let vk = vk_manager.create_virtual_keyboard(&seat); + let im = im_manager.get_input_method(&seat); + let grab = im.grab_keyboard(); + grab.assign(filter.clone()); + im.assign(filter); + + // Initialize timer + let mut timer = TimerFd::new(ClockId::Monotonic).expect("Initialize timer"); + + // Initialize epoll() object + let mut poll = Poll::new().expect("Initialize epoll()"); + let registry = poll.registry(); + + const POLL_WAYLAND: Token = Token(0); + registry + .register( + &mut SourceFd(&display.get_connection_fd()), + POLL_WAYLAND, + Interest::READABLE | Interest::WRITABLE, + ) + .expect("Register wayland socket to the epoll()"); + + const POLL_TIMER: Token = Token(1); + registry + .register(&mut timer, POLL_TIMER, Interest::READABLE) + .expect("Register timer to the epoll()"); + + // Initialize kime context + let mut kime_ctx = KimeContext::new(vk, im, grab, timer); + event_queue + .sync_roundtrip(&mut kime_ctx, |_, _, _| ()) + .unwrap(); + + log::info!("Server init success!"); + + // Non-blocking event loop + // + // Reference: + // https://docs.rs/wayland-client/0.28.3/wayland_client/struct.EventQueue.html + let mut events = MioEvents::with_capacity(1024); + let stop_reason = 'main: loop { + use std::io::ErrorKind; + + // Sleep until next event + if let Err(e) = poll.poll(&mut events, None) { + // Should retry on EINTR + // + // Reference: + // https://www.gnu.org/software/libc/manual/html_node/Interrupted-Primitives.html + if e.kind() == ErrorKind::Interrupted { + continue; + } + break Err(e); + } + + for event in &events { + match event.token() { + POLL_WAYLAND => {} + POLL_TIMER => { + if let Err(e) = kime_ctx.handle_timer_ev() { + break 'main Err(e); + } + } + _ => unreachable!(), + } + } + + // Perform read() only when it's ready, returns None when there're already pending events + if let Some(guard) = event_queue.prepare_read() { + if let Err(e) = guard.read_events() { + // EWOULDBLOCK here means there's no new messages to read + if e.kind() != ErrorKind::WouldBlock { + break Err(e); + } + } + } + + if let Err(e) = event_queue.dispatch_pending(&mut kime_ctx, |_, _, _| {}) { + break Err(e); + } + + // Flush pending writes + if let Err(e) = display.flush() { + // EWOULDBLOCK here means there're so many to write, retry later + if e.kind() != ErrorKind::WouldBlock { + break Err(e); + } + } + }; + + match stop_reason { + Ok(()) => { + log::info!("Server finished gracefully"); + Ok(()) + } + Err(e) => { + log::error!("Server aborted due to IO Error: {}", e); + Err(Box::from(e)) + } + } +} diff --git a/src/frontends/wayland/src/lib.rs b/src/frontends/wayland/src/lib.rs new file mode 100644 index 00000000..77444a30 --- /dev/null +++ b/src/frontends/wayland/src/lib.rs @@ -0,0 +1,49 @@ +use std::time::Instant; + +pub mod input_method_v1; +pub mod input_method_v2; + +#[derive(Clone, Copy)] +pub struct RepeatInfo { + /// The rate of repeating keys in characters per second + rate: i32, + /// Delay in milliseconds since key down until repeating starts + delay: i32, +} + +#[derive(Clone, Copy)] +pub enum PressState { + /// User is pressing no key, or user lifted last pressed key. But kime-wayland is ready for key + /// long-press. + NotPressing, + /// User is pressing a key. + Pressing { + /// User started pressing a key at this moment. + pressed_at: Instant, + /// `false` if user just started pressing a key. Soon, key repeating will be begin. `true` + /// if user have pressed a key for a long enough time, key repeating is happening right + /// now. + is_repeating: bool, + + /// Key code used by wayland + key: u32, + /// Timestamp with millisecond granularity used by wayland. Their base is undefined, so + /// they can't be compared against system time (as obtained with clock_gettime or + /// gettimeofday). They can be compared with each other though, and for instance be used to + /// identify sequences of button presses as double or triple clicks. + /// + /// #### Reference + /// - https://wayland.freedesktop.org/docs/html/ch04.html#sect-Protocol-Input + wayland_time: u32, + }, +} + +impl PressState { + pub fn is_pressing(&self, query_key: u32) -> bool { + if let PressState::Pressing { key, .. } = self { + *key == query_key + } else { + false + } + } +} diff --git a/src/frontends/wayland/src/main.rs b/src/frontends/wayland/src/main.rs index 3de3fd56..069a5846 100644 --- a/src/frontends/wayland/src/main.rs +++ b/src/frontends/wayland/src/main.rs @@ -1,393 +1,4 @@ -use std::time::{Duration, Instant}; - -use wayland_client::{ - event_enum, - protocol::{wl_keyboard::KeyState, wl_seat::WlSeat}, - DispatchData, Display, Filter, GlobalManager, Main, -}; - -use wayland_protocols::misc::zwp_input_method_v2::client::{ - zwp_input_method_keyboard_grab_v2::{Event as KeyEvent, ZwpInputMethodKeyboardGrabV2}, - zwp_input_method_manager_v2::ZwpInputMethodManagerV2, - zwp_input_method_v2::{Event as ImEvent, ZwpInputMethodV2}, -}; -use zwp_virtual_keyboard::virtual_keyboard_unstable_v1::{ - zwp_virtual_keyboard_manager_v1::ZwpVirtualKeyboardManagerV1, - zwp_virtual_keyboard_v1::ZwpVirtualKeyboardV1, -}; - -use kime_engine_cffi::*; - -use mio::{unix::SourceFd, Events as MioEvents, Interest, Poll, Token}; -use mio_timerfd::{ClockId, TimerFd}; - -event_enum! { - Events | - Key => ZwpInputMethodKeyboardGrabV2, - Im => ZwpInputMethodV2 -} - -struct InputMethodState { - activate: bool, - deactivate: bool, -} - -impl Default for InputMethodState { - fn default() -> Self { - Self { - activate: false, - deactivate: false, - } - } -} - -#[derive(Clone, Copy)] -struct RepeatInfo { - /// The rate of repeating keys in characters per second - rate: i32, - /// Delay in milliseconds since key down until repeating starts - delay: i32, -} - -#[derive(Clone, Copy)] -enum PressState { - /// User is pressing no key, or user lifted last pressed key. But kime-wayland is ready for key - /// long-press. - NotPressing, - /// User is pressing a key. - Pressing { - /// User started pressing a key at this moment. - pressed_at: Instant, - /// `false` if user just started pressing a key. Soon, key repeating will be begin. `true` - /// if user have pressed a key for a long enough time, key repeating is happening right - /// now. - is_repeating: bool, - - /// Key code used by wayland - key: u32, - /// Timestamp with millisecond granularity used by wayland. Their base is undefined, so - /// they can't be compared against system time (as obtained with clock_gettime or - /// gettimeofday). They can be compared with each other though, and for instance be used to - /// identify sequences of button presses as double or triple clicks. - /// - /// #### Reference - /// - https://wayland.freedesktop.org/docs/html/ch04.html#sect-Protocol-Input - wayland_time: u32, - }, -} - -impl PressState { - fn is_pressing(&self, query_key: u32) -> bool { - if let PressState::Pressing { key, .. } = self { - *key == query_key - } else { - false - } - } -} - -struct KimeContext { - config: Config, - engine: InputEngine, - mod_state: ModifierState, - current_state: InputMethodState, - pending_state: InputMethodState, - vk: Main, - im: Main, - grab: Main, - numlock: bool, - engine_ready: bool, - keymap_init: bool, - grab_activate: bool, - serial: u32, - // Have to concern Multi seats? - - // Key repeat contexts - timer: TimerFd, - /// `None` if `KimeContext` have never received a `RepeatInfo` or repeat is disabled (i.e. rate - /// is zero). `Some(..)` if `RepeatInfo` is known and kime-wayland started tracking the press - /// state of keys. - repeat_state: Option<(RepeatInfo, PressState)>, -} - -impl Drop for KimeContext { - fn drop(&mut self) { - self.grab.release(); - self.vk.destroy(); - self.im.destroy(); - } -} - -impl KimeContext { - pub fn new( - vk: Main, - im: Main, - grab: Main, - timer: TimerFd, - ) -> Self { - let config = Config::load(); - Self { - engine: InputEngine::new(&config), - config, - mod_state: 0, - current_state: InputMethodState::default(), - pending_state: InputMethodState::default(), - serial: 0, - numlock: false, - engine_ready: true, - keymap_init: false, - grab_activate: false, - vk, - im, - grab, - timer, - repeat_state: None, - } - } - - pub fn new_data<'a>(data: &'a mut DispatchData) -> &'a mut Self { - data.get::().unwrap() - } - - fn process_input_result(&mut self, ret: InputResult) -> bool { - if ret & InputResult_NOT_READY != 0 { - self.engine_ready = false; - } - - if ret & InputResult_LANGUAGE_CHANGED != 0 { - self.engine.update_layout_state(); - } - - if ret & InputResult_HAS_PREEDIT != 0 { - let preedit = self.engine.preedit_str().into(); - self.preedit(preedit); - } else { - self.clear_preedit(); - } - - if ret & InputResult_HAS_COMMIT != 0 { - self.commit_string(self.engine.commit_str().into()); - self.engine.clear_commit(); - } - - self.commit(); - - ret & InputResult_CONSUMED == 0 - } - - fn commit(&mut self) { - self.im.commit(self.serial); - self.serial += 1; - } - - fn commit_string(&mut self, s: String) { - if !s.is_empty() { - self.im.commit_string(s); - } - } - - fn clear_preedit(&mut self) { - self.im.set_preedit_string(String::new(), -1, -1); - } - - fn preedit(&mut self, s: String) { - let len = s.len(); - self.im.set_preedit_string(s, 0, len as _); - } - - pub fn handle_im_ev(&mut self, ev: ImEvent) { - match ev { - ImEvent::Activate => { - self.pending_state.activate = true; - } - ImEvent::Deactivate => { - self.pending_state.deactivate = true; - } - ImEvent::Unavailable => { - log::error!("Receive Unavailable event is another server already running?"); - panic!("Unavailable") - } - ImEvent::Done => { - if !self.current_state.activate && self.pending_state.activate { - self.engine.update_layout_state(); - if !self.engine_ready { - if self.engine.check_ready() { - let ret = self.engine.end_ready(); - self.process_input_result(ret); - self.engine_ready = true; - } - } - self.grab_activate = true; - } else if !self.current_state.deactivate && self.pending_state.deactivate { - // Focus lost, reset states - if self.engine_ready { - self.engine.reset(); - } - self.grab_activate = false; - - // Input deactivated, stop repeating - self.timer.disarm().unwrap(); - if let Some((_, ref mut press_state)) = self.repeat_state { - *press_state = PressState::NotPressing - } - } - self.current_state = std::mem::take(&mut self.pending_state); - } - _ => {} - } - } - - pub fn handle_key_ev(&mut self, ev: KeyEvent) { - match ev { - KeyEvent::Keymap { fd, format, size } => { - if !self.keymap_init { - self.vk.keymap(format as _, fd, size); - self.keymap_init = true; - } - unsafe { - libc::close(fd); - } - } - KeyEvent::Key { - state, key, time, .. - } => { - // NOTE: Never read `serial` of KeyEvent. You should rely on serial of KimeContext - if state == KeyState::Pressed { - if self.grab_activate { - let ret = self.engine.press_key( - &self.config, - (key + 8) as u16, - self.numlock, - self.mod_state, - ); - - let bypassed = self.process_input_result(ret); - - if bypassed { - // Bypassed key's repeat will be handled by the clients. - // - // Reference: - // https://github.com/swaywm/sway/pull/4932#issuecomment-774113129 - self.vk.key(time, key, state as _); - } else { - // If the key was not bypassed by IME, key repeat should be handled by the - // IME. Start waiting for the key hold timer event. - match self.repeat_state { - Some((info, ref mut press_state)) - if !press_state.is_pressing(key) => - { - let duration = Duration::from_millis(info.delay as u64); - self.timer.set_timeout(&duration).unwrap(); - *press_state = PressState::Pressing { - pressed_at: Instant::now(), - is_repeating: false, - key, - wayland_time: time, - }; - } - _ => {} - } - } - } else { - // not activated so just skip - self.vk.key(time, key, state as _); - } - } else { - // If user released the last pressed key, clear the timer and state - if let Some((.., ref mut press_state)) = self.repeat_state { - if press_state.is_pressing(key) { - self.timer.disarm().unwrap(); - *press_state = PressState::NotPressing; - } - } - - self.vk.key(time, key, state as _); - } - } - KeyEvent::Modifiers { - mods_depressed, - mods_latched, - mods_locked, - group, - .. - } => { - self.mod_state = 0; - if mods_depressed & 0x1 != 0 { - self.mod_state |= ModifierState_SHIFT; - } - if mods_depressed & 0x4 != 0 { - self.mod_state |= ModifierState_CONTROL; - } - if mods_depressed & 0x8 != 0 { - self.mod_state |= ModifierState_ALT; - } - if mods_depressed & 0x40 != 0 { - self.mod_state |= ModifierState_SUPER; - } - - self.numlock = mods_depressed & 0x10 != 0; - - self.vk - .modifiers(mods_depressed, mods_latched, mods_locked, group); - } - KeyEvent::RepeatInfo { rate, delay } => { - self.repeat_state = if rate == 0 { - // Zero rate means disabled repeat - // - // Reference: - // https://github.com/swaywm/wlroots/blob/3d46d3f7/protocol/input-method-unstable-v2.xml#L444-L455 - None - } else { - let info = RepeatInfo { rate, delay }; - let press_state = self.repeat_state.map(|pair| pair.1); - Some((info, press_state.unwrap_or(PressState::NotPressing))) - } - } - _ => {} - } - } - - pub fn handle_timer_ev(&mut self) -> std::io::Result<()> { - // Read timer, this MUST be called or timer will be broken - let overrun_count = self.timer.read()?; - if overrun_count != 1 { - log::warn!("Some timer events were not properly handled!"); - } - - if let Some(( - info, - PressState::Pressing { - pressed_at, - ref mut is_repeating, - key, - wayland_time, - }, - )) = self.repeat_state - { - if !*is_repeating { - // Start repeat - log::trace!("Start repeating {}", key); - let interval = &Duration::from_secs_f64(1.0 / info.rate as f64); - self.timer.set_timeout_interval(interval)?; - *is_repeating = true; - } - - // Emit key repeat event - let ev = KeyEvent::Key { - serial: self.serial, - time: wayland_time + pressed_at.elapsed().as_millis() as u32, - key, - state: KeyState::Pressed, - }; - self.serial += 1; - self.handle_key_ev(ev); - } else { - log::warn!("Received timer event when it has never received RepeatInfo."); - } - - Ok(()) - } -} +use wayland_client::{Display, GlobalManager}; fn main() { kime_version::cli_boilerplate!((),); @@ -404,119 +15,9 @@ fn main() { event_queue.sync_roundtrip(&mut (), |_, _, _| ()).unwrap(); - let seat = globals.instantiate_exact::(1).expect("Load Seat"); - let im_manager = globals - .instantiate_exact::(1) - .expect("Load InputManager"); - let vk_manager = globals - .instantiate_exact::(1) - .expect("Load VirtualKeyboardManager"); - - let filter = Filter::new(|ev, _filter, mut data| { - let ctx = KimeContext::new_data(&mut data); - - match ev { - Events::Key { event, .. } => { - ctx.handle_key_ev(event); - } - Events::Im { event, .. } => { - ctx.handle_im_ev(event); - } - } - }); - - let vk = vk_manager.create_virtual_keyboard(&seat); - let im = im_manager.get_input_method(&seat); - let grab = im.grab_keyboard(); - grab.assign(filter.clone()); - im.assign(filter); - - // Initialize timer - let mut timer = TimerFd::new(ClockId::Monotonic).expect("Initialize timer"); - - // Initialize epoll() object - let mut poll = Poll::new().expect("Initialize epoll()"); - let registry = poll.registry(); - - const POLL_WAYLAND: Token = Token(0); - registry - .register( - &mut SourceFd(&display.get_connection_fd()), - POLL_WAYLAND, - Interest::READABLE | Interest::WRITABLE, - ) - .expect("Register wayland socket to the epoll()"); - - const POLL_TIMER: Token = Token(1); - registry - .register(&mut timer, POLL_TIMER, Interest::READABLE) - .expect("Register timer to the epoll()"); - - // Initialize kime context - let mut kime_ctx = KimeContext::new(vk, im, grab, timer); - event_queue - .sync_roundtrip(&mut kime_ctx, |_, _, _| ()) - .unwrap(); - - log::info!("Server init success!"); - - // Non-blocking event loop - // - // Reference: - // https://docs.rs/wayland-client/0.28.3/wayland_client/struct.EventQueue.html - let mut events = MioEvents::with_capacity(1024); - let stop_reason = 'main: loop { - use std::io::ErrorKind; - - // Sleep until next event - if let Err(e) = poll.poll(&mut events, None) { - // Should retry on EINTR - // - // Reference: - // https://www.gnu.org/software/libc/manual/html_node/Interrupted-Primitives.html - if e.kind() == ErrorKind::Interrupted { - continue; - } - break Err(e); - } - - for event in &events { - match event.token() { - POLL_WAYLAND => {} - POLL_TIMER => { - if let Err(e) = kime_ctx.handle_timer_ev() { - break 'main Err(e); - } - } - _ => unreachable!(), - } - } - - // Perform read() only when it's ready, returns None when there're already pending events - if let Some(guard) = event_queue.prepare_read() { - if let Err(e) = guard.read_events() { - // EWOULDBLOCK here means there's no new messages to read - if e.kind() != ErrorKind::WouldBlock { - break Err(e); - } - } - } - - if let Err(e) = event_queue.dispatch_pending(&mut kime_ctx, |_, _, _| {}) { - break Err(e); - } - - // Flush pending writes - if let Err(e) = display.flush() { - // EWOULDBLOCK here means there're so many to write, retry later - if e.kind() != ErrorKind::WouldBlock { - break Err(e); - } - } - }; + let result = kime_wayland::input_method_v2::run(&display, &mut event_queue, &globals); - match stop_reason { - Ok(()) => log::info!("Server finished gracefully"), - Err(e) => log::error!("Server aborted due to IO Error: {}", e), + if let Err(_) = result { + kime_wayland::input_method_v1::run(&display, &mut event_queue, &globals).unwrap(); } } diff --git a/src/frontends/xim/Cargo.toml b/src/frontends/xim/Cargo.toml index f6cd192d..a16bc98c 100644 --- a/src/frontends/xim/Cargo.toml +++ b/src/frontends/xim/Cargo.toml @@ -3,7 +3,7 @@ name = "kime-xim" description = "Kime XIM server" version = "0.3.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" [dependencies] diff --git a/src/tools/candidate-window/Cargo.toml b/src/tools/candidate-window/Cargo.toml index 4c682e2f..837512cf 100644 --- a/src/tools/candidate-window/Cargo.toml +++ b/src/tools/candidate-window/Cargo.toml @@ -2,7 +2,7 @@ name = "kime-candidate-window" version = "0.1.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/tools/check/Cargo.toml b/src/tools/check/Cargo.toml index 3d24b037..06e29646 100644 --- a/src/tools/check/Cargo.toml +++ b/src/tools/check/Cargo.toml @@ -2,7 +2,7 @@ name = "kime-check" version = "0.1.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" [dependencies] diff --git a/src/tools/check/src/main.rs b/src/tools/check/src/main.rs index a4d19741..9d4cbbbe 100644 --- a/src/tools/check/src/main.rs +++ b/src/tools/check/src/main.rs @@ -7,6 +7,7 @@ use kime_engine_cffi::{ }; use pad::PadStr; use std::env; +use std::io::BufRead; use strum::{EnumIter, EnumMessage, IntoEnumIterator, IntoStaticStr}; #[derive(Clone, PartialEq, Eq, IntoStaticStr)] @@ -34,7 +35,7 @@ impl CondResult { print!( "{} {}", c.paint(<&str>::from(self).pad_to_width(8)), - Color::White.bold().paint(message.pad_to_width(30)) + Color::White.bold().paint(message.pad_to_width(40)) ); match self { @@ -62,6 +63,8 @@ enum Check { QtImModule, #[strum(message = "LANG has UTF-8")] Lang, + #[strum(message = "Plasma virtual keyboard has kime")] + PlasmaVirtualKeyboard, } impl Check { @@ -183,6 +186,57 @@ impl Check { }, "set LANG encoding UTF-8", ), + Check::PlasmaVirtualKeyboard => { + let current_desktop = env::var("XDG_CURRENT_DESKTOP").map_or(String::new(), |x| x); + let session_type = env::var("XDG_SESSION_TYPE").map_or(String::new(), |x| x); + if current_desktop.contains("KDE") && session_type == "wayland" { + let dirs = xdg::BaseDirectories::new().expect("Load xdg dirs"); + let config_path = match dirs.find_config_file("kwinrc") { + Some(path) => path, + _ => { + return CondResult::Fail( + "kwinrc configuration file doesn't exist".into(), + ) + } + }; + + println!("Loading kwinrc: {}", config_path.display()); + + let file = std::fs::File::open(config_path).expect("Open kwinrc"); + let lines = std::io::BufReader::new(file).lines(); + + let mut given_input_method = String::new(); + + for line in lines { + if let Ok(s) = line { + if s.contains("=") { + let splits: Vec<&str> = s.split('=').collect(); + if splits[0].contains("InputMethod") { + if splits[1].contains("kime.desktop") { + return CondResult::Ok; + } else { + given_input_method = String::from(splits[1]); + } + } + } + } + } + + if given_input_method.is_empty() { + CondResult::Fail("Virtual keyboard is not set".to_string()) + } else { + CondResult::Fail(format!( + "Virtual keyboard is set to {} not kime", + given_input_method + )) + } + } else { + CondResult::Ignore(format!( + "Current desktop and session type is {} and {}, not KDE and wayland", + current_desktop, session_type + )) + } + } } } } diff --git a/src/tools/indicator/Cargo.toml b/src/tools/indicator/Cargo.toml index 6b8ae05a..3aba21fe 100644 --- a/src/tools/indicator/Cargo.toml +++ b/src/tools/indicator/Cargo.toml @@ -2,7 +2,7 @@ name = "kime-indicator" version = "0.1.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" [dependencies] diff --git a/src/tools/kime/Cargo.toml b/src/tools/kime/Cargo.toml index f98f8b29..692b82eb 100644 --- a/src/tools/kime/Cargo.toml +++ b/src/tools/kime/Cargo.toml @@ -2,7 +2,7 @@ name = "kime" version = "0.1.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" [dependencies] @@ -11,7 +11,6 @@ kime-version = { path = "../version" } kime-run-dir = { path = "../run_dir" } ctrlc = { version = "3.1.8", features = ["termination"] } -daemonize = "0.4.1" +daemonize = "0.5.0" log = "0.4.14" pico-args = "0.5.0" - diff --git a/src/tools/log/Cargo.toml b/src/tools/log/Cargo.toml index 3c7d724b..24ad3e9a 100644 --- a/src/tools/log/Cargo.toml +++ b/src/tools/log/Cargo.toml @@ -2,7 +2,7 @@ name = "kime-log" version = "0.1.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/tools/properties_writer/Cargo.toml b/src/tools/properties_writer/Cargo.toml index aa0cb6d8..a8504d18 100644 --- a/src/tools/properties_writer/Cargo.toml +++ b/src/tools/properties_writer/Cargo.toml @@ -2,7 +2,7 @@ name = "properties_writer" version = "0.1.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/tools/run_dir/Cargo.toml b/src/tools/run_dir/Cargo.toml index 6fa7462d..a5d0d03d 100644 --- a/src/tools/run_dir/Cargo.toml +++ b/src/tools/run_dir/Cargo.toml @@ -2,7 +2,7 @@ name = "kime-run-dir" version = "0.1.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" [dependencies] diff --git a/src/tools/version/Cargo.toml b/src/tools/version/Cargo.toml index ffc1838a..9e9d4259 100644 --- a/src/tools/version/Cargo.toml +++ b/src/tools/version/Cargo.toml @@ -2,10 +2,9 @@ name = "kime-version" version = "0.1.0" authors = ["Riey "] -edition = "2018" +edition = "2021" license = "GPL-3.0-or-later" [dependencies] kime-engine-cffi = { path = "../../engine/cffi" } kime-log = { path = "../../tools/log" } -