From c1c47bc51363c3044dc2e78c7d5c70a085d7bbc4 Mon Sep 17 00:00:00 2001 From: PJ Date: Fri, 28 Aug 2026 21:47:48 +0530 Subject: [PATCH] feature fixes --- .github/workflows/ci.yml | 2 +- .github/workflows/release.yml | 112 +- docs/release.md | 92 +- src-tauri/Cargo.lock | 4744 ++++++++++++++++- src-tauri/Cargo.toml | 52 +- src-tauri/fonts/HankenGrotesk-Bold.ttf | Bin 0 -> 66604 bytes src-tauri/fonts/HankenGrotesk-BoldItalic.ttf | Bin 0 -> 68152 bytes src-tauri/fonts/HankenGrotesk-Italic.ttf | Bin 0 -> 67980 bytes src-tauri/fonts/HankenGrotesk-Regular.ttf | Bin 0 -> 66668 bytes src-tauri/fonts/Literata-Bold.ttf | Bin 0 -> 271460 bytes src-tauri/fonts/Literata-BoldItalic.ttf | Bin 0 -> 260616 bytes src-tauri/fonts/Literata-Italic.ttf | Bin 0 -> 259388 bytes src-tauri/fonts/Literata-Regular.ttf | Bin 0 -> 270924 bytes src-tauri/fonts/Literata-SemiBold.ttf | Bin 0 -> 271320 bytes src-tauri/fonts/PROVENANCE.md | 31 + src-tauri/src/dto.rs | 58 + src-tauri/src/fonts.rs | 143 + src-tauri/src/fs.rs | 16 + src-tauri/src/grammar.rs | 128 + src-tauri/src/lib.rs | 44 + src-tauri/src/pdf.rs | 387 ++ src-tauri/src/writingtools.rs | 146 + src-tauri/stubs/burn-cuda/Cargo.toml | 21 + src-tauri/stubs/burn-cuda/src/lib.rs | 1 + src-tauri/stubs/cubecl-cpu/Cargo.toml | 17 + src-tauri/stubs/cubecl-cpu/src/lib.rs | 1 + src-tauri/tauri.conf.json | 3 +- src-tauri/tests/export_writes_only_the_pdf.rs | 481 ++ src-tauri/tests/grammar.rs | 126 + src-tauri/tests/pdf.rs | 316 ++ src-tauri/vendor/mitex/LICENSE | 176 + src-tauri/vendor/mitex/PATCHES.md | 20 + src-tauri/vendor/mitex/lib.typ | 1 + src-tauri/vendor/mitex/mitex.typ | 45 + src-tauri/vendor/mitex/mitex.wasm | Bin 0 -> 283073 bytes .../vendor/mitex/specs/latex/standard.typ | 1170 ++++ src-tauri/vendor/mitex/specs/mod.typ | 12 + src-tauri/vendor/mitex/specs/prelude.typ | 230 + src/App.tsx | 23 +- src/api/grammar.ts | 17 + src/api/pdf.ts | 20 + src/api/writing.ts | 17 + src/components/ProofPopover.tsx | 103 +- src/components/Settings.tsx | 192 + src/components/UpdateDialog.tsx | 147 + src/dev/mockIpc.ts | 83 + src/editor/proofing.ts | 294 +- src/editor/writing.ts | 173 + src/export/run.ts | 173 + src/export/typst.test.ts | Bin 0 -> 19563 bytes src/export/typst.ts | 773 +++ src/ipc.ts | 58 +- src/keys/bindings.ts | 30 + src/keys/commands.ts | 56 +- src/keys/menu.ts | 3 + src/main.tsx | 1 + src/store/useProofing.ts | 76 +- src/store/useUpdate.ts | 129 + src/styles/proofing.css | 54 +- src/styles/settings.css | 211 + src/update.ts | 171 + tests/export-writes-only-the-pdf.spec.ts | 343 ++ tests/writing-tools.spec.ts | 590 ++ 63 files changed, 12083 insertions(+), 229 deletions(-) create mode 100644 src-tauri/fonts/HankenGrotesk-Bold.ttf create mode 100644 src-tauri/fonts/HankenGrotesk-BoldItalic.ttf create mode 100644 src-tauri/fonts/HankenGrotesk-Italic.ttf create mode 100644 src-tauri/fonts/HankenGrotesk-Regular.ttf create mode 100644 src-tauri/fonts/Literata-Bold.ttf create mode 100644 src-tauri/fonts/Literata-BoldItalic.ttf create mode 100644 src-tauri/fonts/Literata-Italic.ttf create mode 100644 src-tauri/fonts/Literata-Regular.ttf create mode 100644 src-tauri/fonts/Literata-SemiBold.ttf create mode 100644 src-tauri/fonts/PROVENANCE.md create mode 100644 src-tauri/src/fonts.rs create mode 100644 src-tauri/src/grammar.rs create mode 100644 src-tauri/src/pdf.rs create mode 100644 src-tauri/src/writingtools.rs create mode 100644 src-tauri/stubs/burn-cuda/Cargo.toml create mode 100644 src-tauri/stubs/burn-cuda/src/lib.rs create mode 100644 src-tauri/stubs/cubecl-cpu/Cargo.toml create mode 100644 src-tauri/stubs/cubecl-cpu/src/lib.rs create mode 100644 src-tauri/tests/export_writes_only_the_pdf.rs create mode 100644 src-tauri/tests/grammar.rs create mode 100644 src-tauri/tests/pdf.rs create mode 100644 src-tauri/vendor/mitex/LICENSE create mode 100644 src-tauri/vendor/mitex/PATCHES.md create mode 100644 src-tauri/vendor/mitex/lib.typ create mode 100644 src-tauri/vendor/mitex/mitex.typ create mode 100644 src-tauri/vendor/mitex/mitex.wasm create mode 100644 src-tauri/vendor/mitex/specs/latex/standard.typ create mode 100644 src-tauri/vendor/mitex/specs/mod.typ create mode 100644 src-tauri/vendor/mitex/specs/prelude.typ create mode 100644 src/api/grammar.ts create mode 100644 src/api/pdf.ts create mode 100644 src/api/writing.ts create mode 100644 src/components/Settings.tsx create mode 100644 src/components/UpdateDialog.tsx create mode 100644 src/editor/writing.ts create mode 100644 src/export/run.ts create mode 100644 src/export/typst.test.ts create mode 100644 src/export/typst.ts create mode 100644 src/store/useUpdate.ts create mode 100644 src/styles/settings.css create mode 100644 src/update.ts create mode 100644 tests/export-writes-only-the-pdf.spec.ts create mode 100644 tests/writing-tools.spec.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f5d7f27..1775a45 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,7 +55,7 @@ jobs: # Every target except `no_write_on_open`, which gets the step below to itself. - name: Test working-directory: src-tauri - run: cargo test --lib --bins --test fs --test fts5 --test watch --test watch_payload + run: cargo test --lib --bins --test fs --test fts5 --test watch --test watch_payload --test pdf --test grammar --test export_writes_only_the_pdf # The suite that checks the promise the whole project rests on, that the editor writes # nothing the user did not edit. It runs against a real git repository rather than against a diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e1115bb..6e26b35 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -32,6 +32,13 @@ jobs: IFS=. read -r MAJOR MINOR PATCH <<< "$CURRENT" VERSION="$MAJOR.$MINOR.$((PATCH + 1))" fi + # This string becomes a git tag, a TOML value and a JSON value, and it is typed into a + # box by hand. Anything that is not three numbers is a release that goes wrong somewhere + # further down, where it is much harder to read. + if ! printf '%s' "$VERSION" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+$'; then + echo "::error::'$VERSION' is not a version. Give three numbers separated by dots, such as 0.2.0." + exit 1 + fi echo "version=$VERSION" >> "$GITHUB_OUTPUT" echo "tag=v$VERSION" >> "$GITHUB_OUTPUT" echo "Releasing v$VERSION" @@ -43,7 +50,29 @@ jobs: tmp=$(mktemp) jq --arg v "$VERSION" '.version = $v' src-tauri/tauri.conf.json > "$tmp" && mv "$tmp" src-tauri/tauri.conf.json jq --arg v "$VERSION" '.version = $v' package.json > "$tmp" && mv "$tmp" package.json - sed -i "0,/^version = \".*\"/s//version = \"$VERSION\"/" src-tauri/Cargo.toml + # The crate's own version, and only that one. Anchored to the [package] section rather + # than to the first `version =` line in the file, because a dependency written in the + # long form puts `version = "0.4"` on a line of its own and the first such line is not + # necessarily the crate's. Bumping the wrong one is a release that builds and ships the + # version before it. + awk -v v="$VERSION" ' + /^\[/ { section = $0 } + section == "[package]" && !done && /^version[[:space:]]*=/ { + print "version = \"" v "\"" + done = 1 + next + } + { print } + END { if (!done) exit 1 } + ' src-tauri/Cargo.toml > "$tmp" || { + echo "::error::No version key under [package] in src-tauri/Cargo.toml. Nothing was bumped." + exit 1 + } + mv "$tmp" src-tauri/Cargo.toml + if ! grep -q "^version = \"$VERSION\"\$" src-tauri/Cargo.toml; then + echo "::error::src-tauri/Cargo.toml does not carry version $VERSION after the bump." + exit 1 + fi - name: Commit and tag env: @@ -111,6 +140,62 @@ jobs: - name: Install frontend dependencies run: pnpm install --frozen-lockfile + # Apple codesigning and notarization. Put into the environment here rather than passed + # straight to the build step, because the bundler reads all of these with `var_os` and an + # empty string counts as set: a step that always passed `${{ secrets.APPLE_CERTIFICATE }}` + # would make a repository without a certificate fail on an empty .p12 rather than fall back + # to an ad hoc signature. What is not written below is simply not in the build's environment. + # + # So a repository with none of these secrets still builds and still publishes. What it gets + # is an ad hoc signed bundle, which is fine to install by hand and is not fine as an update: + # macOS will not let one replace a Developer ID signed copy. docs/release.md has the whole of + # that, including why self-update cannot work until the certificate exists. + # + # Half-configured is the one case that fails rather than warning. A repository that has a + # certificate but no notarization credentials produces a signed bundle Gatekeeper still + # refuses on any machine that has not seen it before, and doing that quietly is worse than + # not building. + - name: Prepare Apple signing + env: + APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} + APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} + APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }} + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + run: | + keep() { + delim="EOF_$(openssl rand -hex 12)" + { + printf '%s<<%s\n' "$1" "$delim" + printf '%s\n' "$2" + printf '%s\n' "$delim" + } >> "$GITHUB_ENV" + } + + if [ -z "$APPLE_CERTIFICATE" ] && [ -z "$APPLE_SIGNING_IDENTITY" ]; then + echo "::warning::No Developer ID certificate is configured. This build will be ad hoc signed, and installed copies will not be able to update themselves. See docs/release.md." + exit 0 + fi + + if [ -z "$APPLE_CERTIFICATE" ] || [ -z "$APPLE_CERTIFICATE_PASSWORD" ] || [ -z "$APPLE_SIGNING_IDENTITY" ]; then + echo "::error::Apple signing is half configured. APPLE_CERTIFICATE, APPLE_CERTIFICATE_PASSWORD and APPLE_SIGNING_IDENTITY are set together or not at all." + exit 1 + fi + + if [ -z "$APPLE_ID" ] || [ -z "$APPLE_PASSWORD" ] || [ -z "$APPLE_TEAM_ID" ]; then + echo "::error::A Developer ID signed build has to be notarized or Gatekeeper refuses it on any machine that has not seen it before. Set APPLE_ID, APPLE_PASSWORD and APPLE_TEAM_ID." + exit 1 + fi + + keep APPLE_CERTIFICATE "$APPLE_CERTIFICATE" + keep APPLE_CERTIFICATE_PASSWORD "$APPLE_CERTIFICATE_PASSWORD" + keep APPLE_SIGNING_IDENTITY "$APPLE_SIGNING_IDENTITY" + keep APPLE_ID "$APPLE_ID" + keep APPLE_PASSWORD "$APPLE_PASSWORD" + keep APPLE_TEAM_ID "$APPLE_TEAM_ID" + echo "Signing as a Developer ID application and notarizing." + - name: Build and upload uses: tauri-apps/tauri-action@v0 env: @@ -134,6 +219,17 @@ jobs: gh release download "$TAG" --repo "$REPO" --pattern latest.json --output latest.json --clobber echo "Platforms in latest.json:" jq '.platforms | keys' latest.json + + # The manifest has to describe this release and not the one before it. tauri-action writes + # the version out of the manifests the build job checked out, so a mismatch here means the + # tag and the bump have come apart somewhere, and publishing it would tell every installed + # copy that the version it is already running is the newest one. + MANIFEST_VERSION=$(jq -r '.version // ""' latest.json) + if [ "${MANIFEST_VERSION#v}" != "${TAG#v}" ]; then + echo "::error::latest.json says version '$MANIFEST_VERSION' but the tag is '$TAG'. Refusing to publish a manifest that does not describe this release." + exit 1 + fi + # A universal build emits one .app.tar.gz, but tauri-action writes it into latest.json # under both darwin-aarch64 and darwin-x86_64, pointing them at the same file and the same # signature. It has to: an installed copy asks the manifest for the architecture it is @@ -141,10 +237,22 @@ jobs: # darwin-universal would offer nobody an update. Those two keys are the whole manifest for # this app, and a release that is missing either one is a release half the users cannot # take. + # + # The signature is checked alongside the url because an unsigned entry is not a smaller + # problem than a missing one. The updater refuses a download whose signature does not + # verify against the public key baked into the app, so an entry with an empty signature is + # an update every installed copy will offer, download and then reject. for key in darwin-aarch64 darwin-x86_64; do - if ! jq -e ".platforms[\"$key\"].url" latest.json > /dev/null; then + url=$(jq -r ".platforms[\"$key\"].url // \"\"" latest.json) + signature=$(jq -r ".platforms[\"$key\"].signature // \"\"" latest.json) + if [ -z "$url" ]; then echo "::error::latest.json is missing platform '$key': refusing to publish a partial update manifest. Re-run the release." exit 1 fi + if [ -z "$signature" ]; then + echo "::error::latest.json has no signature for platform '$key'. An installed copy would download the update and refuse it. Check that TAURI_SIGNING_PRIVATE_KEY is set." + exit 1 + fi done + gh release edit "$TAG" --repo "$REPO" --draft=false --latest diff --git a/docs/release.md b/docs/release.md index e7d61c1..dbaad75 100644 --- a/docs/release.md +++ b/docs/release.md @@ -23,12 +23,16 @@ and `src-tauri/Cargo.toml` together, commits that to main, tags it, and builds t whatever main happens to be by then. It builds one universal macOS bundle and publishes nothing until it has landed. The last job -downloads `latest.json` and refuses to take the release out of draft unless `darwin-aarch64` and -`darwin-x86_64` are both present in it. One universal build writes both of those keys, pointing -them at the same archive and the same signature, because an installed copy asks the manifest for -the architecture it is running on and never for a universal one. A half-populated manifest is worse -than no release at all: the updater would offer an update to the platforms that made it and error -on the ones that did not. +downloads `latest.json` and refuses to take the release out of draft unless three things hold: the +version in the manifest is the version in the tag, `darwin-aarch64` and `darwin-x86_64` are both +present, and each of them has a signature as well as a url. One universal build writes both of +those keys, pointing them at the same archive and the same signature, because an installed copy +asks the manifest for the architecture it is running on and never for a universal one. A +half-populated manifest is worse than no release at all: the updater would offer an update to the +platforms that made it and error on the ones that did not. A manifest carrying the version before +this one is worse again, because it tells everybody the copy they are already running is the newest +there is, and an entry with an empty signature is an update every installed copy downloads and then +refuses. Linux is not built. It was until recently, because this pipeline was copied from margin-calendar, which ships on Linux. This app does not, so the row and the manifest key it required are gone and @@ -38,17 +42,54 @@ Windows is not built. Nothing in `tauri.conf.json` targets it and the app has ne ## What the build needs -Two repository secrets: `TAURI_SIGNING_PRIVATE_KEY` and `TAURI_SIGNING_PRIVATE_KEY_PASSWORD`, -which sign the updater artifacts so an installed copy can tell a real update from anything else -offered at the same URL. The public half lives in `src-tauri/tauri.release.conf.json`, baked into -every build, so the private half can never be rotated without stranding everyone who has not -updated yet; back up the key and its password somewhere that is not the machine that generated -them. That file currently carries the placeholder `REPLACE_WITH_TAURI_SIGNER_PUBKEY`; generating -the real keypair and committing its public half in is a one-time step that has to happen before the -first signed release can go out. +Two repository secrets sign the updater artifacts, so that an installed copy can tell a real update +from anything else offered at the same URL: `TAURI_SIGNING_PRIVATE_KEY` and +`TAURI_SIGNING_PRIVATE_KEY_PASSWORD`. The public half lives in +`src-tauri/tauri.release.conf.json`, baked into every build, so the private half can never be +rotated without stranding everyone who has not updated yet; back up the key and its password +somewhere that is not the machine that generated them. -Beyond the signing key there is nothing to provision. Margin Docs talks to no external API and -holds no OAuth client, unlike margin-calendar, so there are no other repository secrets and nothing +That file currently carries the placeholder `REPLACE_WITH_TAURI_SIGNER_PUBKEY`, and the keypair +behind it does not exist yet. Making it is a one-time step, run once by whoever owns the repository +and never again: + +``` +pnpm tauri signer generate -w ~/.tauri/margin-docs.key +``` + +It asks for a password, writes the private key to that path and the public key beside it as +`margin-docs.key.pub`, and prints both. The public one replaces the placeholder in +`tauri.release.conf.json` and is committed. The private one is the contents of +`~/.tauri/margin-docs.key`, pasted into `TAURI_SIGNING_PRIVATE_KEY`, with its password in +`TAURI_SIGNING_PRIVATE_KEY_PASSWORD`. Neither the key file nor the password goes into the +repository. + +Six more secrets codesign and notarize the bundle, and unlike the two above they are optional as +far as the workflow is concerned: with none of them set the build still runs, still publishes, and +produces an ad hoc signed app. `APPLE_CERTIFICATE` is the Developer ID Application certificate +exported from Keychain Access as a `.p12` and base64 encoded (`base64 -i certificate.p12`), with +the password it was exported under in `APPLE_CERTIFICATE_PASSWORD`. `APPLE_SIGNING_IDENTITY` is the +certificate's full name, which looks like `Developer ID Application: Your Name (TEAMID)`. The other +three are for notarization: `APPLE_ID` is the Apple account's email address, `APPLE_PASSWORD` is an +app-specific password made at appleid.apple.com rather than the account password itself, and +`APPLE_TEAM_ID` is the ten character team identifier. + +Those six are all or nothing. A repository with a certificate but no notarization credentials fails +the build rather than warning, because a signed bundle that has not been notarized is one Gatekeeper +refuses on any machine that has not seen it before, and finding that out from a user is worse than +finding it out from a red run. + +The bundle asks for the hardened runtime, which notarization requires, and for no entitlements at +all. That is worth a sentence because it nearly went the other way. Deleting a document goes to the +Trash through the `trash` crate, whose macOS default is to ask Finder over an Apple event, and the +hardened runtime blocks an Apple event unless the bundle carries +`com.apple.security.automation.apple-events` and the user agrees to a permission prompt about +controlling Finder. `src-tauri/src/fs.rs` asks for `trashItemAtURL:` instead, which needs none of +that. The cost is Put Back, which the Finder method leaves on the file and this one does not; the +file is still in the Trash and can still be dragged out of it. + +Beyond signing there is nothing to provision. Margin Docs talks to no external API and holds no +OAuth client, unlike margin-calendar, so there are no other repository secrets and nothing equivalent to a `google-credentials.json` to embed at build time. ## Updates @@ -56,4 +97,21 @@ equivalent to a `google-credentials.json` to embed at build time. Installed copies check `https://github.com/priyanshujain/margin-docs/releases/latest/download/latest.json` and update themselves from it. `--latest` on the publish step is what moves that pointer, so a release that -fails the manifest check stays a draft and no one is offered a broken update. +fails the manifest check stays a draft and no one is offered a broken update. The app checks that +URL once a day in the background and on the Check for Updates menu item, and either way what +happens next is a dialog rather than an install: the version, the release notes, the download with +a progress bar, and Later as a real answer. + +Self-update does not work yet, and it will not until there is an Apple Developer ID certificate. +This is not a gap in the workflow, which is wired for one, or in the app, which is wired for the +whole flow. It is macOS: an update replaces the installed bundle with the downloaded one, and the +system will not let an ad hoc signed bundle take the place of a signed one, nor run a replacement +whose signature does not match what was there before. Every build this repository can currently +produce is ad hoc signed, so every self-update attempt ends in a bundle the system refuses to +launch. Until the certificate exists, updates are something to install by hand, and the honest +version of the feature is that the app will find the update, show it, download it, and fail on the +last step. + +There is a second thing gated behind the same certificate. The build is not notarized either, so a +copy downloaded from the releases page is quarantined by the browser and refused on first launch +with the message about an unidentified developer. Both problems have the one fix. diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 8a20dbc..6098601 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -8,6 +8,18 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.5" @@ -32,6 +44,24 @@ dependencies = [ "alloc-no-stdlib", ] +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "ammonia" +version = "4.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc6d763210e2eb7670d1a5183a08bebefa3f97db2a738a684f2ce00bd49f681d" +dependencies = [ + "cssparser 0.37.0", + "html5ever 0.39.0", + "maplit", + "url", +] + [[package]] name = "android_system_properties" version = "0.1.6" @@ -41,12 +71,80 @@ dependencies = [ "libc", ] +[[package]] +name = "anstream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" + +[[package]] +name = "anstyle-parse" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.61.2", +] + [[package]] name = "anyhow" version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "ar_archive_writer" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73cd58deff2140a0a8eae87e417bd01db68a33e148aa93d1e8cd837e55e312b6" +dependencies = [ + "object", +] + [[package]] name = "arbitrary" version = "1.4.2" @@ -56,6 +154,27 @@ dependencies = [ "derive_arbitrary", ] +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" + +[[package]] +name = "ash" +version = "0.38.0+1.3.281" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" +dependencies = [ + "libloading 0.8.9", +] + [[package]] name = "async-broadcast" version = "0.7.2" @@ -216,12 +335,24 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "atomic_float" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "628d228f918ac3b82fe590352cc719d30664a0c13ca3a60266fe02c7132d480a" + [[package]] name = "autocfg" version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" +[[package]] +name = "az" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be5eb007b7cacc6c660343e96f650fedf4b5a77512399eb952ca6642cf8d13f7" + [[package]] name = "base64" version = "0.21.7" @@ -234,6 +365,39 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "biblatex" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d0c374feba1b9a59042a7c1cf00ce7c34b977b9134fe7c42b08e5183729f66" +dependencies = [ + "paste", + "roman-numerals-rs", + "strum 0.27.2", + "unic-langid", + "unicode-normalization", + "unscanny", +] + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bincode" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" +dependencies = [ + "serde", + "unty", +] + [[package]] name = "bit-set" version = "0.8.0" @@ -264,6 +428,23 @@ dependencies = [ "serde_core", ] +[[package]] +name = "blanket" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56791e4bd64c99fc361e01008f45c984baa93f12a0957d1b3c51dd2c6baab453" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + [[package]] name = "block-buffer" version = "0.10.4" @@ -341,11 +522,333 @@ version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" +[[package]] +name = "burn" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0291ea5c68786545e239a02f63331cfe39da7485164ae05197d5be6f148d0557" +dependencies = [ + "burn-autodiff", + "burn-candle", + "burn-core", + "burn-cuda", + "burn-ndarray", + "burn-nn", + "burn-optim", + "burn-rocm", + "burn-router", + "burn-store", + "burn-wgpu", +] + +[[package]] +name = "burn-autodiff" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "917423a74bf4d39f17a6799089869648e3d2b6ac89d93901aab4aeb9a7f82138" +dependencies = [ + "burn-common", + "burn-tensor", + "derive-new", + "hashbrown 0.15.5", + "log", + "num-traits", + "portable-atomic", + "spin 0.10.1", +] + +[[package]] +name = "burn-candle" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2891811d41ae30b5f1f660e7615b757b2cb4128af5e311b213656de3875e4acb" +dependencies = [ + "burn-common", + "burn-tensor", + "candle-core", + "derive-new", + "half", +] + +[[package]] +name = "burn-common" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb445304e4f91f8633d23c9a5258cd93639d13ce2ee47d4821fd519b683bf02" +dependencies = [ + "cubecl-common", + "rayon", + "serde", +] + +[[package]] +name = "burn-core" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20c93e754864080a8c27b9a47e3b6f7d79013cf82c9ce00ed57c9ba51a3e34c5" +dependencies = [ + "ahash", + "bincode 2.0.1", + "burn-common", + "burn-derive", + "burn-tensor", + "data-encoding", + "derive-new", + "flate2", + "half", + "hashbrown 0.15.5", + "log", + "num-traits", + "portable-atomic", + "portable-atomic-util", + "rand 0.9.5", + "regex", + "rmp-serde", + "serde", + "serde_json", + "spin 0.10.1", + "uuid", +] + +[[package]] +name = "burn-cubecl" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd16308b7b0291c77f2d7acf428bc8254ec3db88a430a26cf3d3b0b63ae2d46" +dependencies = [ + "burn-common", + "burn-cubecl-fusion", + "burn-fusion", + "burn-ir", + "burn-tensor", + "bytemuck", + "cubecl", + "cubecl-quant", + "derive-new", + "futures-lite", + "half", + "hashbrown 0.15.5", + "log", + "num-traits", + "rand 0.9.5", + "serde", + "spin 0.10.1", + "text_placeholder", +] + +[[package]] +name = "burn-cubecl-fusion" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc21cf88201dfbf242cadb638a0cc924010727fc37d6a719f7e10548b339c63a" +dependencies = [ + "burn-common", + "burn-fusion", + "burn-ir", + "burn-tensor", + "cubecl", + "cubecl-quant", + "derive-new", + "half", + "serde", +] + +[[package]] +name = "burn-cuda" +version = "0.19.1" + +[[package]] +name = "burn-derive" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bcf49261de086b8206de6c8962d2adf23feb476119a18e384f5b2c9af07c0cf" +dependencies = [ + "derive-new", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "burn-fusion" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "662bf2679c04be34a0c3f1b11f77f6ff49456af1620d1eca311bc2562bbb56c9" +dependencies = [ + "burn-common", + "burn-ir", + "burn-tensor", + "derive-new", + "half", + "hashbrown 0.15.5", + "log", + "serde", + "spin 0.10.1", +] + +[[package]] +name = "burn-ir" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9161239d5691c4ab6f470f2c65aaec5c0a7c1f0b0da390700bcd59f5a77d1d7b" +dependencies = [ + "burn-tensor", + "hashbrown 0.15.5", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "burn-ndarray" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b78bcf4a3508043342f918e796dc79108b5f3252398403eb73952847e7683374" +dependencies = [ + "atomic_float", + "burn-autodiff", + "burn-common", + "burn-ir", + "burn-tensor", + "const-random", + "derive-new", + "libm", + "macerator", + "matrixmultiply", + "ndarray", + "num-traits", + "paste", + "portable-atomic-util", + "rand 0.9.5", + "spin 0.10.1", +] + +[[package]] +name = "burn-nn" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc7829c87c4dd6c7929b50fd981e7e8d1b77414323da30ce2067a3e8b7ea422b" +dependencies = [ + "burn-core", + "num-traits", +] + +[[package]] +name = "burn-optim" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31758c02e50247f12457fca1905ed8684ac1b1c5292e10cbbfffb9fa0048d4bd" +dependencies = [ + "burn-core", + "derive-new", + "hashbrown 0.15.5", + "log", + "num-traits", + "serde", +] + +[[package]] +name = "burn-rocm" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e1ceb87b6e7349b42d7995477c9a69d0e6c458c64eafa10af3b8b9070f260aa" +dependencies = [ + "burn-cubecl", + "burn-tensor", + "bytemuck", + "cubecl", + "derive-new", + "half", + "log", +] + +[[package]] +name = "burn-router" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45f40403c500b5df380bee47aa0f23032350bdfde5402812d6fcec4d6ff6fbad" +dependencies = [ + "burn-common", + "burn-ir", + "burn-tensor", + "hashbrown 0.15.5", + "log", + "spin 0.10.1", +] + +[[package]] +name = "burn-store" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a2a163486242fcb0c6e2cb89c5a803ab8588673652bb46ecd7af6378d06152f" +dependencies = [ + "burn-core", + "burn-nn", + "burn-tensor", + "byteorder", + "half", + "hashbrown 0.15.5", + "memmap2", + "regex", + "safetensors 0.6.2", +] + +[[package]] +name = "burn-tensor" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8861f7c21d3b07a2b19d028f6eb8903990949708b2ec825559b5200786877c" +dependencies = [ + "burn-common", + "bytemuck", + "colored", + "cubecl", + "cubecl-quant", + "derive-new", + "half", + "hashbrown 0.15.5", + "num-traits", + "rand 0.9.5", + "rand_distr", + "serde", + "serde_bytes", +] + +[[package]] +name = "burn-wgpu" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17aeaa2eadaa4831a64672b99f62ffcdf4874fe4757080633d8a6c4452e2b38" +dependencies = [ + "burn-cubecl", + "burn-tensor", + "cubecl", +] + +[[package]] +name = "by_address" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" + [[package]] name = "bytemuck" version = "1.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0e56a716f1e132ff6bf4bdac1c944a3fcdc1cae65f70a4a2a1ac3b401d2d1f" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] [[package]] name = "byteorder" @@ -353,6 +856,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + [[package]] name = "bytes" version = "1.12.1" @@ -362,6 +871,40 @@ dependencies = [ "serde", ] +[[package]] +name = "cached" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53b6f5d101f0f6322c8646a45b7c581a673e476329040d97565815c2461dd0c4" +dependencies = [ + "ahash", + "cached_proc_macro", + "cached_proc_macro_types", + "hashbrown 0.16.1", + "once_cell", + "parking_lot", + "thiserror 2.0.20", + "web-time", +] + +[[package]] +name = "cached_proc_macro" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ebcf9c75f17a17d55d11afc98e46167d4790a263f428891b8705ab2f793eca3" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "cached_proc_macro_types" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" + [[package]] name = "cairo-rs" version = "0.18.5" @@ -396,6 +939,29 @@ dependencies = [ "serde_core", ] +[[package]] +name = "candle-core" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c15b675b80d994b2eadb20a4bbe434eabeb454eac3ee5e2b4cf6f147ee9be091" +dependencies = [ + "byteorder", + "float8 0.6.1", + "gemm", + "half", + "libm", + "memmap2", + "num-traits", + "num_cpus", + "rand 0.9.5", + "rand_distr", + "rayon", + "safetensors 0.7.0", + "thiserror 2.0.20", + "yoke 0.8.3", + "zip 7.2.0", +] + [[package]] name = "cargo-platform" version = "0.1.9" @@ -436,6 +1002,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ad534f4357a5264cce5019c989cf66a4f0dc4e0d1b1d15f8aacec0ff7360273" dependencies = [ "find-msvc-tools", + "jobserver", + "libc", "shlex", ] @@ -472,6 +1040,30 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "cfg_aliases" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" + +[[package]] +name = "chinese-number" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e964125508474a83c95eb935697abbeb446ff4e9d62c71ce880e3986d1c606b" +dependencies = [ + "chinese-variant", + "enum-ordinalize", + "num-bigint", + "num-traits", +] + +[[package]] +name = "chinese-variant" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d1275808335c5583ea45a4141d631dafcb36b79fa8a5e10b00e356b6af3e08a" + [[package]] name = "chrono" version = "0.4.45" @@ -479,11 +1071,137 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "iana-time-zone", + "js-sys", "num-traits", "serde", + "wasm-bindgen", "windows-link 0.2.1", ] +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half", +] + +[[package]] +name = "citationberg" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f6597e8bdbca37f1f56e5a80d15857b0932aead21a78d20de49e99e74933046" +dependencies = [ + "quick-xml 0.38.4", + "serde", +] + +[[package]] +name = "clap" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "clap_lex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" + +[[package]] +name = "cobs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" +dependencies = [ + "thiserror 2.0.20", +] + +[[package]] +name = "codespan-reporting" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" +dependencies = [ + "serde", + "termcolor", + "unicode-width", +] + +[[package]] +name = "codex" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9589e1effc5cacbea347899645c654158b03b2053d24bb426fd3128ced6e423c" + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "colorchoice" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" + +[[package]] +name = "colored" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "combine" version = "4.6.7" @@ -494,6 +1212,30 @@ dependencies = [ "memchr", ] +[[package]] +name = "comemo" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c963350b2b08aa4b725d7802593245380ab53dacfedcaa971385fc33306c0d4" +dependencies = [ + "comemo-macros", + "parking_lot", + "rustc-hash 2.1.3", + "siphasher", + "slab", +] + +[[package]] +name = "comemo-macros" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3c400139ba1389ef9e20ad2d87cda68b437a66483aa0da616bdf2cea7413853" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "concurrent-queue" version = "2.5.0" @@ -503,6 +1245,35 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.17", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "cookie" version = "0.18.2" @@ -553,6 +1324,15 @@ dependencies = [ "libc", ] +[[package]] +name = "core_maths" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77745e017f5edba1a9c1d854f6f3a52dac8a12dd5af5d2f54aecf61e43d80d30" +dependencies = [ + "libm", +] + [[package]] name = "cpufeatures" version = "0.2.17" @@ -571,6 +1351,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + [[package]] name = "crossbeam-channel" version = "0.5.16" @@ -605,6 +1391,12 @@ version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + [[package]] name = "crypto-common" version = "0.1.7" @@ -628,6 +1420,17 @@ dependencies = [ "smallvec", ] +[[package]] +name = "cssparser" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c9cdaae01d5ed7882b04d795e7f752f46ff52d2fa3b50a20d28c464510bba98" +dependencies = [ + "dtoa-short", + "itoa", + "smallvec", +] + [[package]] name = "cssparser-macros" version = "0.6.1" @@ -638,6 +1441,27 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "csv" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde_core", +] + +[[package]] +name = "csv-core" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" +dependencies = [ + "memchr", +] + [[package]] name = "ctor" version = "0.8.0" @@ -654,14 +1478,431 @@ version = "0.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52560adf09603e58c9a7ee1fe1dcb95a16927b17c127f0ac02d6e768a0e25bc1" +[[package]] +name = "cubecl" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8b7c74ecaca9356c9ae79d0ebf1db04f02bd98be09eea61f51d73373dffe758" +dependencies = [ + "cubecl-convolution", + "cubecl-core", + "cubecl-cpu", + "cubecl-cuda", + "cubecl-hip", + "cubecl-matmul", + "cubecl-random", + "cubecl-reduce", + "cubecl-runtime", + "cubecl-std", + "cubecl-wgpu", + "half", +] + +[[package]] +name = "cubecl-common" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4556981155bffc057a8effcd4549b52b51df3e9edec43af6ccae2dd03fc8fbff" +dependencies = [ + "bytemuck", + "cfg-if", + "cfg_aliases", + "derive-new", + "derive_more 2.1.1", + "dirs", + "embassy-futures", + "embassy-time", + "float4", + "float8 0.4.2", + "futures-lite", + "half", + "hashbrown 0.15.5", + "log", + "num-traits", + "parking_lot", + "portable-atomic", + "portable-atomic-util", + "rand 0.9.5", + "sanitize-filename", + "serde", + "serde_bytes", + "serde_json", + "spin 0.10.1", + "wasm-bindgen-futures", + "web-time", +] + +[[package]] +name = "cubecl-convolution" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27c624ec400b7203673bf2db86d7ff30d1384839d497d2dd029c19b1b7371e0d" +dependencies = [ + "bytemuck", + "cubecl-common", + "cubecl-core", + "cubecl-matmul", + "cubecl-random", + "cubecl-reduce", + "cubecl-runtime", + "cubecl-std", + "half", + "serde", +] + +[[package]] +name = "cubecl-core" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffc10af538ee74535cda260e581f5a177c243803dd30b698934a515f0114b55" +dependencies = [ + "bitflags 2.13.1", + "bytemuck", + "cubecl-common", + "cubecl-ir", + "cubecl-macros", + "cubecl-runtime", + "derive-new", + "derive_more 2.1.1", + "enumset", + "half", + "hashbrown 0.15.5", + "log", + "num-traits", + "paste", + "serde", + "serde_json", + "variadics_please", +] + +[[package]] +name = "cubecl-cpp" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d630e4d10cdd3af268ac753914ca79b48f01d1e36c5b5039970a817acc925fea" +dependencies = [ + "bytemuck", + "cubecl-common", + "cubecl-core", + "cubecl-opt", + "cubecl-runtime", + "derive-new", + "half", + "itertools", + "log", +] + +[[package]] +name = "cubecl-cpu" +version = "0.8.1" + +[[package]] +name = "cubecl-cuda" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67215fcd552a9e8bc68494a71cf2979f2e2bbcbda60f0695f56f86705b89ed5f" +dependencies = [ + "bytemuck", + "cubecl-common", + "cubecl-core", + "cubecl-cpp", + "cubecl-runtime", + "cudarc", + "derive-new", + "half", + "log", + "serde", +] + +[[package]] +name = "cubecl-hip" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5e2e6a257f702fb2eb6f24e640e228a94695e4a4c73a4c549578cbb02ad4ec5" +dependencies = [ + "bytemuck", + "cubecl-common", + "cubecl-core", + "cubecl-cpp", + "cubecl-hip-sys", + "cubecl-quant", + "cubecl-runtime", + "derive-new", + "half", + "log", + "paste", + "serde", +] + +[[package]] +name = "cubecl-hip-sys" +version = "7.14.6085000" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760c605ca1b54d12ba9209d2a47992082ff66346fbd96d830af22ac43adfeebc" +dependencies = [ + "libc", + "regex", +] + +[[package]] +name = "cubecl-ir" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf5d3aa7857e6aee1622aef128d6ad8d9289ed57362b4e65d10cc182aafc585f" +dependencies = [ + "cubecl-common", + "cubecl-macros-internal", + "derive-new", + "derive_more 2.1.1", + "float-ord", + "fnv", + "half", + "hashbrown 0.15.5", + "num-traits", + "portable-atomic", + "serde", + "variadics_please", +] + +[[package]] +name = "cubecl-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5200fb619be424749901e3c6e8e66ae71146c8f83636a74f171bd980cba379d7" +dependencies = [ + "cubecl-common", + "darling 0.21.3", + "derive-new", + "ident_case", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "cubecl-macros-internal" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a1b673f303396fba18df83368aa4eced474584f1bca34852dccc42bd4ff050c" +dependencies = [ + "darling 0.21.3", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "cubecl-matmul" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1cf0a00609a249d5357c27cafea477f35218579db2ab00582d8d5800be4a5a3" +dependencies = [ + "bytemuck", + "cubecl-common", + "cubecl-core", + "cubecl-random", + "cubecl-reduce", + "cubecl-runtime", + "cubecl-std", + "half", + "serde", +] + +[[package]] +name = "cubecl-opt" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "870ca4b52f9eebd358c9b360b89cdc9f82bde05682db63f0e90c666b3c85a04d" +dependencies = [ + "cubecl-common", + "cubecl-core", + "cubecl-ir", + "float-ord", + "log", + "num", + "petgraph", + "smallvec", + "stable-vec", + "type-map", +] + +[[package]] +name = "cubecl-quant" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9be3e1202c219078d85dbad7f30d1195fe4f9d42cbfad2c94ab0ea1a6d9f01f6" +dependencies = [ + "cubecl-common", + "cubecl-core", + "cubecl-runtime", + "cubecl-std", + "half", + "serde", +] + +[[package]] +name = "cubecl-random" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a293a05caa68663675823bab66205bca094a21a2c0f6686ad9f20b392516179" +dependencies = [ + "cubecl-common", + "cubecl-core", + "cubecl-runtime", + "cubecl-std", + "half", + "num-traits", + "rand 0.9.5", + "serde", +] + +[[package]] +name = "cubecl-reduce" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53306ace81f6262f7ae794370f47e6b5019842b27e8800240e5b039386b3ac3a" +dependencies = [ + "cubecl-core", + "cubecl-runtime", + "cubecl-std", + "half", + "num-traits", + "serde", +] + +[[package]] +name = "cubecl-runtime" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91b823bb5899a6fa8809bf7aa36f93f72ced6de58ab9d6edea2c730b235eeda3" +dependencies = [ + "async-channel", + "bytemuck", + "cfg-if", + "cfg_aliases", + "cubecl-common", + "cubecl-ir", + "derive-new", + "dirs", + "enumset", + "foldhash 0.1.5", + "hashbrown 0.15.5", + "log", + "md5", + "serde", + "serde_json", + "spin 0.10.1", + "thiserror 2.0.20", + "toml 0.9.12+spec-1.1.0", + "variadics_please", + "wasm-bindgen-futures", +] + +[[package]] +name = "cubecl-std" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24536998f9fff84f9a1dd2a90f981d5aa4d15eb35cddec5021c4fcf977d2e75e" +dependencies = [ + "cubecl-common", + "cubecl-core", + "cubecl-runtime", + "foldhash 0.1.5", + "half", + "paste", + "serde", + "spin 0.10.1", + "variadics_please", +] + +[[package]] +name = "cubecl-wgpu" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59a7d737259a784247595e2f0cc5a97d3e50f45cdaefbd4cc7d7fd2126f7a58" +dependencies = [ + "async-channel", + "bytemuck", + "cfg-if", + "cfg_aliases", + "cubecl-common", + "cubecl-core", + "cubecl-runtime", + "derive-new", + "derive_more 2.1.1", + "half", + "hashbrown 0.15.5", + "log", + "sanitize-filename", + "wgpu", +] + +[[package]] +name = "cudarc" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf99ab37ee7072d64d906aa2dada9a3422f1d975cdf8c8055a573bc84897ed8" +dependencies = [ + "libloading 0.8.9", +] + +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + [[package]] name = "darling" version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.23.0", + "darling_macro 0.23.0", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.119", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.119", ] [[package]] @@ -677,17 +1918,51 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core 0.20.11", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core 0.21.3", + "quote", + "syn 2.0.119", +] + [[package]] name = "darling_macro" version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ - "darling_core", + "darling_core 0.23.0", "quote", "syn 2.0.119", ] +[[package]] +name = "data-encoding" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06" + +[[package]] +name = "data-url" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" + [[package]] name = "dbus" version = "0.9.12" @@ -739,6 +2014,17 @@ dependencies = [ "serde_core", ] +[[package]] +name = "derive-new" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cdc8d50f426189eef89dac62fabfa0abb27d5cc008f25bf4156a0203325becc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "derive_arbitrary" version = "1.4.2" @@ -750,13 +2036,34 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl 1.0.0", +] + [[package]] name = "derive_more" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" dependencies = [ - "derive_more-impl", + "derive_more-impl 2.1.1", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "unicode-xid", ] [[package]] @@ -765,10 +2072,12 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" dependencies = [ + "convert_case", "proc-macro2", "quote", "rustc_version", "syn 2.0.119", + "unicode-xid", ] [[package]] @@ -848,6 +2157,15 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + [[package]] name = "dom_query" version = "0.27.0" @@ -855,9 +2173,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89" dependencies = [ "bit-set", - "cssparser", - "foldhash", - "html5ever", + "cssparser 0.36.0", + "foldhash 0.2.0", + "html5ever 0.38.0", "precomputed-hash", "selectors", "tendril", @@ -914,6 +2232,68 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" +[[package]] +name = "dyn-stack" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c4713e43e2886ba72b8271aa66c93d722116acf7a75555cce11dcde84388fe8" +dependencies = [ + "bytemuck", + "dyn-stack-macros", +] + +[[package]] +name = "dyn-stack-macros" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d926b4d407d372f141f93bb444696142c29d32962ccbd3531117cf3aa0bfa9" + +[[package]] +name = "ecow" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78e4f79b296fbaab6ce2e22d52cb4c7f010fe0ebe7a32e34fa25885fd797bd02" +dependencies = [ + "serde", +] + +[[package]] +name = "either" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" + +[[package]] +name = "embassy-futures" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc2d050bdc5c21e0862a89256ed8029ae6c290a93aecefc73084b3002cdebb01" + +[[package]] +name = "embassy-time" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f820157f198ada183ad62e0a66f554c610cdcd1a9f27d4b316358103ced7a1f8" +dependencies = [ + "cfg-if", + "critical-section", + "document-features", + "embassy-time-driver", + "embedded-hal 0.2.7", + "embedded-hal 1.0.0", + "embedded-hal-async", + "futures-util", +] + +[[package]] +name = "embassy-time-driver" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ee71af1b3a0deaa53eaf2d39252f83504c853646e472400b763060389b9fcc9" +dependencies = [ + "document-features", +] + [[package]] name = "embed-resource" version = "3.0.11" @@ -934,12 +2314,81 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" +[[package]] +name = "embedded-hal" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff" +dependencies = [ + "nb 0.1.3", + "void", +] + +[[package]] +name = "embedded-hal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89" + +[[package]] +name = "embedded-hal-async" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4c685bbef7fe13c3c6dd4da26841ed3980ef33e841cddfa15ce8a8fb3f1884" +dependencies = [ + "embedded-hal 1.0.0", +] + +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + [[package]] name = "endi" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" +[[package]] +name = "enum-as-inner" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "enum-ordinalize" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89dd01549b09589510cf0647475075d12071456586d70f5c75c98ae2a5537677" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a65863d15a4ce2888bd2f0f543cc963d3879c3a022c8ee43f6141d479a3ac815" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + [[package]] name = "enumflags2" version = "0.7.12" @@ -961,6 +2410,27 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "enumset" +version = "1.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccc5801fd11762e24d1e420d01d2ac518f2a2ca4329d4fbb6639f2412b6204e0" +dependencies = [ + "enumset_derive", +] + +[[package]] +name = "enumset_derive" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd536557b58c682b217b8fb199afdff47cd3eff260623f19e77074eb073d63a" +dependencies = [ + "darling 0.21.3", + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -988,6 +2458,15 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "euclid" +version = "0.22.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1a05365e3b1c6d1650318537c7460c6923f1abdd272ad6842baa2b509957a06" +dependencies = [ + "num-traits", +] + [[package]] name = "event-listener" version = "5.4.2" @@ -1020,6 +2499,17 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" +[[package]] +name = "fancy-regex" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "998b056554fbe42e03ae0e152895cd1a7e1002aec800fdc6635d20270260c46f" +dependencies = [ + "bit-set", + "regex-automata", + "regex-syntax", +] + [[package]] name = "fastrand" version = "2.5.0" @@ -1035,6 +2525,15 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "fid-rs" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6956a1e60e2d1412b44b4169d44a03dae518f8583d3e10090c912c105e48447" +dependencies = [ + "rayon", +] + [[package]] name = "field-offset" version = "0.3.6" @@ -1070,6 +2569,12 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + [[package]] name = "flate2" version = "1.1.9" @@ -1078,6 +2583,55 @@ checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", "miniz_oxide", + "zlib-rs", +] + +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" + +[[package]] +name = "float-cmp" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b09cf3155332e944990140d967ff5eceb70df778b34f77d8075db46e4704e6d8" +dependencies = [ + "num-traits", +] + +[[package]] +name = "float-ord" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce81f49ae8a0482e4c55ea62ebbd7e5a686af544c00b9d090bba3ff9be97b3d" + +[[package]] +name = "float4" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5939bac0ef2ad7c83a53e4fb889c1d81f007b07061d648cd271071984d86f257" + +[[package]] +name = "float8" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4203231de188ebbdfb85c11f3c20ca2b063945710de04e7b59268731e728b462" +dependencies = [ + "half", +] + +[[package]] +name = "float8" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719a903cc23e4a89e87962c2a80fdb45cdaad0983a89bd150bb57b4c8571a7d5" +dependencies = [ + "half", + "num-traits", + "rand 0.9.5", + "rand_distr", ] [[package]] @@ -1086,12 +2640,59 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "foldhash" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" +[[package]] +name = "font-types" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39a654f404bbcbd48ea58c617c2993ee91d1cb63727a37bf2323a4edeed1b8c5" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "font-types" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b38ad915f6dadd993ced50848a8291a543bd41ca62bc10740d5e64e2ab4cfd7" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "fontconfig-parser" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbc773e24e02d4ddd8395fd30dc147524273a83e54e0f312d986ea30de5f5646" +dependencies = [ + "roxmltree", +] + +[[package]] +name = "fontdb" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "457e789b3d1202543297a350643cf459f836cade38934e7a4cf6a39e7cde2905" +dependencies = [ + "fontconfig-parser", + "log", + "memmap2", + "slotmap", + "tinyvec", + "ttf-parser", +] + [[package]] name = "foreign-types" version = "0.5.0" @@ -1137,6 +2738,12 @@ dependencies = [ "libc", ] +[[package]] +name = "fst" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a" + [[package]] name = "futures-channel" version = "0.3.34" @@ -1320,6 +2927,125 @@ dependencies = [ "x11", ] +[[package]] +name = "gemm" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa0673db364b12263d103b68337a68fbecc541d6f6b61ba72fe438654709eacb" +dependencies = [ + "dyn-stack", + "gemm-c32", + "gemm-c64", + "gemm-common", + "gemm-f16", + "gemm-f32", + "gemm-f64", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "seq-macro", +] + +[[package]] +name = "gemm-c32" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "086936dbdcb99e37aad81d320f98f670e53c1e55a98bee70573e83f95beb128c" +dependencies = [ + "dyn-stack", + "gemm-common", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "seq-macro", +] + +[[package]] +name = "gemm-c64" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20c8aeeeec425959bda4d9827664029ba1501a90a0d1e6228e48bef741db3a3f" +dependencies = [ + "dyn-stack", + "gemm-common", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "seq-macro", +] + +[[package]] +name = "gemm-common" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88027625910cc9b1085aaaa1c4bc46bb3a36aad323452b33c25b5e4e7c8e2a3e" +dependencies = [ + "bytemuck", + "dyn-stack", + "half", + "libm", + "num-complex", + "num-traits", + "once_cell", + "paste", + "pulp", + "raw-cpuid", + "rayon", + "seq-macro", + "sysctl", +] + +[[package]] +name = "gemm-f16" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3df7a55202e6cd6739d82ae3399c8e0c7e1402859b30e4cb780e61525d9486e" +dependencies = [ + "dyn-stack", + "gemm-common", + "gemm-f32", + "half", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "rayon", + "seq-macro", +] + +[[package]] +name = "gemm-f32" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e0b8c9da1fbec6e3e3ab2ce6bc259ef18eb5f6f0d3e4edf54b75f9fd41a81c" +dependencies = [ + "dyn-stack", + "gemm-common", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "seq-macro", +] + +[[package]] +name = "gemm-f64" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "056131e8f2a521bfab322f804ccd652520c79700d81209e9d9275bbdecaadc6a" +dependencies = [ + "dyn-stack", + "gemm-common", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "seq-macro", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -1330,6 +3056,15 @@ dependencies = [ "version_check", ] +[[package]] +name = "getopts" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe4fbac503b8d1f88e6676011885f34b7174f46e59956bba534ba83abded4df" +dependencies = [ + "unicode-width", +] + [[package]] name = "getrandom" version = "0.2.17" @@ -1364,6 +3099,26 @@ dependencies = [ "r-efi 6.0.0", ] +[[package]] +name = "gif" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae047235e33e2829703574b54fdec96bfbad892062d97fed2f76022287de61b" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gif" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee8cfcc411d9adbbaba82fb72661cc1bcca13e8bba98b364e62b2dba8f960159" +dependencies = [ + "color_quant", + "weezl", +] + [[package]] name = "gio" version = "0.18.4" @@ -1396,6 +3151,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + [[package]] name = "glib" version = "0.18.5" @@ -1443,6 +3209,12 @@ dependencies = [ "system-deps", ] +[[package]] +name = "glidesort" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2e102e6eb644d3e0b186fc161e4460417880a0a0b87d235f2e5b8fb30f2e9e0" + [[package]] name = "glob" version = "0.3.4" @@ -1462,6 +3234,27 @@ dependencies = [ "regex-syntax", ] +[[package]] +name = "glow" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" +dependencies = [ + "gl_generator", +] + [[package]] name = "gobject-sys" version = "0.18.0" @@ -1473,6 +3266,57 @@ dependencies = [ "system-deps", ] +[[package]] +name = "gpu-alloc" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45cf04b2726f02df5508c6de726acdc90cdf97ac771a9a0ffd8ba10a6e696bf9" +dependencies = [ + "bitflags 2.13.1", + "gpu-alloc-types", +] + +[[package]] +name = "gpu-alloc-types" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2bbed164dd10ed526c2e4fe3e721ca4a71c61730e5aafac6844b417b3227058" +dependencies = [ + "bitflags 2.13.1", +] + +[[package]] +name = "gpu-allocator" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" +dependencies = [ + "log", + "presser", + "thiserror 1.0.69", + "windows 0.56.0", +] + +[[package]] +name = "gpu-descriptor" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" +dependencies = [ + "bitflags 2.13.1", + "gpu-descriptor-types", + "hashbrown 0.15.5", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" +dependencies = [ + "bitflags 2.13.1", +] + [[package]] name = "gtk" version = "0.18.2" @@ -1525,19 +3369,137 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "half" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" +dependencies = [ + "bytemuck", + "cfg-if", + "crunchy", + "num-traits", + "rand 0.9.5", + "rand_distr", + "serde", + "zerocopy", +] + +[[package]] +name = "harper-brill" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9172d4243fc4f7711c974132bb0da6e5963720732bc17b7ef06de344b92edf9c" +dependencies = [ + "harper-pos-utils", + "serde_json", +] + +[[package]] +name = "harper-core" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acab57352d953e0ab227d4a0a7a8f990e28053f47b8d633711677a83180f51fb" +dependencies = [ + "ammonia", + "bitflags 2.13.1", + "blanket", + "cached", + "foldhash 0.2.0", + "fst", + "harper-brill", + "harper-thesaurus", + "hashbrown 0.16.1", + "is-macro", + "itertools", + "levenshtein_automata", + "lru", + "ordered-float 5.5.0", + "paste", + "pulldown-cmark", + "regex", + "serde", + "serde_json", + "smallvec", + "strum 0.28.0", + "strum_macros 0.28.0", + "thiserror 2.0.20", + "trie-rs", + "unicode-blocks", + "unicode-script", + "unicode-width", + "zip 8.6.0", +] + +[[package]] +name = "harper-pos-utils" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f5fe2cd5ca70dda252e74c4c765662b1c757b7c312576c9e8e8b3c73828c91" +dependencies = [ + "burn", + "burn-ndarray", + "hashbrown 0.16.1", + "is-macro", + "lru", + "rs-conllu", + "serde", + "serde_json", + "strum 0.28.0", + "strum_macros 0.28.0", +] + +[[package]] +name = "harper-thesaurus" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "492d0bbdf79449188cfc73fc7068ae0dd95f01a0755059682024cd6d6a6713ea" +dependencies = [ + "hashbrown 0.16.1", + "indexmap 2.14.0", + "itertools", + "ruzstd", + "zstd", +] + [[package]] name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.1.5", + "serde", +] + [[package]] name = "hashbrown" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ - "foldhash", + "allocator-api2", + "equivalent", + "foldhash 0.2.0", + "serde", + "serde_core", ] [[package]] @@ -1546,7 +3508,9 @@ version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" dependencies = [ - "foldhash", + "allocator-api2", + "equivalent", + "foldhash 0.2.0", ] [[package]] @@ -1558,6 +3522,109 @@ dependencies = [ "hashbrown 0.17.1", ] +[[package]] +name = "hayagriva" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cb69425736f184173b3ca6e27fcba440a61492a790c786b1c6af7e06a03e575" +dependencies = [ + "biblatex", + "ciborium", + "citationberg", + "indexmap 2.14.0", + "paste", + "roman-numerals-rs", + "serde", + "serde_yaml", + "thiserror 2.0.20", + "unic-langid", + "unicode-segmentation", + "unscanny", + "url", +] + +[[package]] +name = "hayro" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "048488ba88552bb0fb2a7e4001c64d5bed65d1a92167186a1bb9151571f32e60" +dependencies = [ + "bytemuck", + "hayro-interpret", + "image", + "kurbo 0.12.0", +] + +[[package]] +name = "hayro-font" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10e7e97ce840a6a70e7901e240ec65ba61106b66b37a4a1b899a2ce484248463" +dependencies = [ + "log", + "phf", +] + +[[package]] +name = "hayro-interpret" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56204c972d08e844f3db13b1e14be769f846e576699b46d4f4637cc4f8f70102" +dependencies = [ + "bitflags 2.13.1", + "hayro-font", + "hayro-syntax", + "kurbo 0.12.0", + "log", + "moxcms 0.7.11", + "phf", + "rustc-hash 2.1.3", + "siphasher", + "skrifa 0.37.0", + "smallvec", + "yoke 0.8.3", +] + +[[package]] +name = "hayro-svg" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8c673304cec6e0dfd3b4f71fccecd45646899aa70279b62d3f933842abc4ac5" +dependencies = [ + "base64 0.22.1", + "hayro-interpret", + "image", + "kurbo 0.12.0", + "siphasher", + "xmlwriter", +] + +[[package]] +name = "hayro-syntax" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9e5c7dbc0f11dc42775d1a6cc00f5f5137b90b6288dd7fe5f71d17b14d10be" +dependencies = [ + "flate2", + "kurbo 0.12.0", + "log", + "rustc-hash 2.1.3", + "smallvec", + "zune-jpeg 0.4.21", +] + +[[package]] +name = "hayro-write" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc05d8b4bc878b9aee48d980ecb25ed08f1dd9fad6da5ab4d9b7c56ec03a0cf6" +dependencies = [ + "flate2", + "hayro-syntax", + "log", + "pdf-writer", +] + [[package]] name = "heck" version = "0.4.1" @@ -1582,6 +3649,12 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + [[package]] name = "html5ever" version = "0.38.0" @@ -1589,7 +3662,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2" dependencies = [ "log", - "markup5ever", + "markup5ever 0.38.0", +] + +[[package]] +name = "html5ever" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a1761807faccc9a19e86944bbf40610014066306f96edcdedc2fb714bcb7b8" +dependencies = [ + "log", + "markup5ever 0.39.0", ] [[package]] @@ -1689,6 +3772,12 @@ dependencies = [ "tracing", ] +[[package]] +name = "hypher" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef68590049bab63a464eee1a1158ac04c6f6613a546d8d90f78636b8b94f171" + [[package]] name = "iana-time-zone" version = "0.1.65" @@ -1723,6 +3812,19 @@ dependencies = [ "png 0.17.16", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "serde", + "yoke 0.7.5", + "zerofrom", + "zerovec 0.10.4", +] + [[package]] name = "icu_collections" version = "2.3.0" @@ -1732,9 +3834,9 @@ dependencies = [ "displaydoc", "potential_utf", "utf8_iter", - "yoke", + "yoke 0.8.3", "zerofrom", - "zerovec", + "zerovec 0.11.8", ] [[package]] @@ -1744,24 +3846,57 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" dependencies = [ "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", + "litemap 0.8.3", + "tinystr 0.8.4", + "writeable 0.6.4", + "zerovec 0.11.8", ] +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap 0.7.5", + "tinystr 0.7.6", + "writeable 0.5.5", + "zerovec 0.10.4", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider 1.5.0", + "tinystr 0.7.6", + "zerovec 0.10.4", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" + [[package]] name = "icu_normalizer" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" dependencies = [ - "icu_collections", + "icu_collections 2.3.0", "icu_normalizer_data", - "icu_properties", - "icu_provider", + "icu_properties 2.3.0", + "icu_provider 2.3.1", "smallvec", - "zerovec", + "zerovec 0.11.8", ] [[package]] @@ -1770,6 +3905,22 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections 1.5.0", + "icu_locid_transform", + "icu_properties_data 1.5.1", + "icu_provider 1.5.0", + "serde", + "tinystr 0.7.6", + "zerovec 0.10.4", +] + [[package]] name = "icu_properties" version = "2.3.0" @@ -1777,20 +3928,45 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" dependencies = [ "displaydoc", - "icu_collections", + "icu_collections 2.3.0", "icu_locale_core", - "icu_properties_data", - "icu_provider", - "zerotrie", - "zerovec", + "icu_properties_data 2.3.0", + "icu_provider 2.3.1", + "zerotrie 0.2.5", + "zerovec 0.11.8", ] +[[package]] +name = "icu_properties_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" + [[package]] name = "icu_properties_data" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "postcard", + "serde", + "stable_deref_trait", + "tinystr 0.7.6", + "writeable 0.5.5", + "yoke 0.7.5", + "zerofrom", + "zerovec 0.10.4", +] + [[package]] name = "icu_provider" version = "2.3.1" @@ -1799,13 +3975,74 @@ checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" dependencies = [ "displaydoc", "icu_locale_core", - "writeable", - "yoke", + "writeable 0.6.4", + "yoke 0.8.3", "zerofrom", - "zerotrie", - "zerovec", + "zerotrie 0.2.5", + "zerovec 0.11.8", ] +[[package]] +name = "icu_provider_adapters" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6324dfd08348a8e0374a447ebd334044d766b1839bb8d5ccf2482a99a77c0bc" +dependencies = [ + "icu_locid", + "icu_locid_transform", + "icu_provider 1.5.0", + "tinystr 0.7.6", + "zerovec 0.10.4", +] + +[[package]] +name = "icu_provider_blob" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c24b98d1365f55d78186c205817631a4acf08d7a45bdf5dc9dcf9c5d54dccf51" +dependencies = [ + "icu_provider 1.5.0", + "postcard", + "serde", + "writeable 0.5.5", + "zerotrie 0.1.3", + "zerovec 0.10.4", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "icu_segmenter" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a717725612346ffc2d7b42c94b820db6908048f39434504cb130e8b46256b0de" +dependencies = [ + "core_maths", + "displaydoc", + "icu_collections 1.5.0", + "icu_locid", + "icu_provider 1.5.0", + "icu_segmenter_data", + "serde", + "utf8_iter", + "zerovec 0.10.4", +] + +[[package]] +name = "icu_segmenter_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e52775179941363cc594e49ce99284d13d6948928d8e72c755f55e98caa1eb" + [[package]] name = "ident_case" version = "1.0.1" @@ -1830,7 +4067,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ "icu_normalizer", - "icu_properties", + "icu_properties 2.3.0", ] [[package]] @@ -1849,6 +4086,46 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "image" +version = "0.25.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" +dependencies = [ + "bytemuck", + "byteorder-lite", + "color_quant", + "gif 0.14.2", + "image-webp", + "moxcms 0.8.1", + "num-traits", + "png 0.18.1", + "zune-core 0.5.3", + "zune-jpeg 0.5.15", +] + +[[package]] +name = "image-webp" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" +dependencies = [ + "byteorder-lite", + "quick-error", +] + +[[package]] +name = "imagesize" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" + +[[package]] +name = "imagesize" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09e54e57b4c48b40f7aec75635392b12b3421fa26fe8b4332e63138ed278459c" + [[package]] name = "indexmap" version = "1.9.3" @@ -1916,6 +4193,18 @@ dependencies = [ "once_cell", ] +[[package]] +name = "is-macro" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8267aa6001e25494f3015f9663bbd88a18240c74483afa5f0934a1b3e4c388e9" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "is-wsl" version = "0.4.0" @@ -1926,6 +4215,21 @@ dependencies = [ "once_cell", ] +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.18" @@ -2082,6 +4386,16 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "jobserver" +version = "0.1.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" +dependencies = [ + "getrandom 0.4.3", + "libc", +] + [[package]] name = "js-sys" version = "0.3.104" @@ -2115,6 +4429,15 @@ dependencies = [ "serde_json", ] +[[package]] +name = "kamadak-exif" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1130d80c7374efad55a117d715a3af9368f0fa7a2c54573afc15a188cd984837" +dependencies = [ + "mutate_once", +] + [[package]] name = "keyboard-types" version = "0.7.0" @@ -2126,6 +4449,23 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "khronos-egl" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" +dependencies = [ + "libc", + "libloading 0.8.9", + "pkg-config", +] + +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + [[package]] name = "kqueue" version = "1.2.1" @@ -2146,6 +4486,96 @@ dependencies = [ "libc", ] +[[package]] +name = "krilla" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0ddfec86fec13d068075e14f22a7e217c281f3ed69ddcb427bf3f5d504fd674" +dependencies = [ + "base64 0.22.1", + "bumpalo", + "comemo", + "flate2", + "float-cmp 0.10.0", + "gif 0.13.3", + "hayro-write", + "image-webp", + "imagesize 0.14.0", + "indexmap 2.14.0", + "once_cell", + "pdf-writer", + "png 0.17.16", + "rayon", + "rustc-hash 2.1.3", + "rustybuzz", + "siphasher", + "skrifa 0.37.0", + "smallvec", + "subsetter", + "tiny-skia-path", + "xmp-writer", + "yoke 0.8.3", + "zune-jpeg 0.5.15", +] + +[[package]] +name = "krilla-svg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f485e1a850201a01dcd8d73e7cf09f2cd4c4cc85c2cd296359094d49336d8ef7" +dependencies = [ + "flate2", + "fontdb", + "krilla", + "png 0.17.16", + "resvg", + "tiny-skia", + "usvg", +] + +[[package]] +name = "kurbo" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62026ae44756f8a599ba21140f350303d4f08dcdcc71b5ad9c9bb8128c13c62" +dependencies = [ + "arrayvec", + "euclid", + "smallvec", +] + +[[package]] +name = "kurbo" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce9729cc38c18d86123ab736fd2e7151763ba226ac2490ec092d1dd148825e32" +dependencies = [ + "arrayvec", + "euclid", + "smallvec", +] + +[[package]] +name = "kurbo" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b60dfc32f652b926df6192e55525b16d186c69d47876c3ead4da5cc9f8450e2" +dependencies = [ + "arrayvec", + "euclid", + "polycool", + "smallvec", +] + +[[package]] +name = "levenshtein_automata" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c2cdeb66e45e9f36bfad5bbdb4d2384e70936afbee843c6f6543f0c551ebb25" +dependencies = [ + "fst", +] + [[package]] name = "libappindicator" version = "0.9.0" @@ -2166,7 +4596,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" dependencies = [ "gtk-sys", - "libloading", + "libloading 0.7.4", "once_cell", ] @@ -2195,6 +4625,22 @@ dependencies = [ "winapi", ] +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link 0.2.1", +] + +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + [[package]] name = "libredox" version = "0.1.20" @@ -2215,18 +4661,49 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + [[package]] name = "linux-raw-sys" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" +[[package]] +name = "lipsum" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "636860251af8963cc40f6b4baadee105f02e21b28131d76eba8e40ce84ab8064" +dependencies = [ + "rand 0.8.8", + "rand_chacha 0.3.1", +] + +[[package]] +name = "litemap" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" +dependencies = [ + "serde", +] + [[package]] name = "litemap" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" +[[package]] +name = "litrs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" + [[package]] name = "lock_api" version = "0.4.14" @@ -2242,10 +4719,74 @@ version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" +[[package]] +name = "louds-rs" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "936de6c22f08e7135a921f8ada907acd0d88880c4f42b5591f634b9f1dd8e07f" +dependencies = [ + "fid-rs", +] + +[[package]] +name = "lru" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d317b4b9eb398e6acce275758ec6125535505e7a146fb1a9b8bda2451b0ff4c" +dependencies = [ + "hashbrown 0.17.1", +] + +[[package]] +name = "macerator" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84b0b2dbe8b22f9e96ba12e29964889010117f92e6bd006010887320ae58e2f0" +dependencies = [ + "bytemuck", + "cfg_aliases", + "half", + "macerator-macros", + "moddef", + "num-traits", + "paste", + "rustc_version", +] + +[[package]] +name = "macerator-macros" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5ce85961d618ce9794bdf822bfe96fe9dd341aa5b033b454f7a8d96e79b9b1" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + [[package]] name = "margin-docs" version = "0.0.1" dependencies = [ + "base64 0.22.1", + "fontdb", + "harper-core", "ignore", "notify", "notify-debouncer-full", @@ -2264,6 +4805,9 @@ dependencies = [ "tempfile", "tokio", "trash", + "typst", + "typst-as-lib", + "typst-pdf", ] [[package]] @@ -2277,12 +4821,49 @@ dependencies = [ "web_atoms", ] +[[package]] +name = "markup5ever" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7122d987ec5f704ee56f6e5b41a7d93722e9aae27ae07cafa4036c4d3f9757de" +dependencies = [ + "log", + "tendril", + "web_atoms", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f607c237553f086e7043417a51df26b2eb899d3caff94e6a67592ff992fedc7" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "md5" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebb8d8732c6a6df3d8f032a82911cfc747e00efb95cc46e8d0acd5b5b88570c" + [[package]] name = "memchr" version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" +[[package]] +name = "memmap2" +version = "0.9.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" +dependencies = [ + "libc", + "stable_deref_trait", +] + [[package]] name = "memoffset" version = "0.9.1" @@ -2292,6 +4873,21 @@ dependencies = [ "autocfg", ] +[[package]] +name = "metal" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" +dependencies = [ + "bitflags 2.13.1", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", + "paste", +] + [[package]] name = "mime" version = "0.3.17" @@ -2326,6 +4922,32 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "moddef" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a0b3262dc837d2513fe2ef31ff8461352ef932dcca31ba0c0abe33547cf6b9b" + +[[package]] +name = "moxcms" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97" +dependencies = [ + "num-traits", + "pxfm", +] + +[[package]] +name = "moxcms" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" +dependencies = [ + "num-traits", + "pxfm", +] + [[package]] name = "muda" version = "0.19.3" @@ -2347,6 +4969,68 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "mutate_once" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13d2233c9842d08cfe13f9eac96e207ca6a2ea10b80259ebe8ad0268be27d2af" + +[[package]] +name = "naga" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916cbc7cb27db60be930a4e2da243cf4bc39569195f22fd8ee419cd31d5b662c" +dependencies = [ + "arrayvec", + "bit-set", + "bitflags 2.13.1", + "cfg-if", + "cfg_aliases", + "codespan-reporting", + "half", + "hashbrown 0.15.5", + "hexf-parse", + "indexmap 2.14.0", + "libm", + "log", + "num-traits", + "once_cell", + "rustc-hash 1.1.0", + "spirv", + "thiserror 2.0.20", + "unicode-ident", +] + +[[package]] +name = "nb" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f" +dependencies = [ + "nb 1.1.0", +] + +[[package]] +name = "nb" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" + +[[package]] +name = "ndarray" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "882ed72dce9365842bf196bdeedf5055305f11fc8c03dee7bb0194a6cad34841" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "portable-atomic", + "portable-atomic-util", + "rawpointer", +] + [[package]] name = "ndk" version = "0.9.0" @@ -2417,12 +5101,76 @@ dependencies = [ "bitflags 2.13.1", ] +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "bytemuck", + "num-traits", +] + [[package]] name = "num-conv" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" +[[package]] +name = "num-integer" +version = "0.1.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -2430,6 +5178,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", ] [[package]] @@ -2454,6 +5213,15 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + [[package]] name = "objc2" version = "0.6.4" @@ -2684,12 +5452,27 @@ dependencies = [ "objc2-foundation", ] +[[package]] +name = "object" +version = "0.39.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e5a6c098c7a3b6547378093f5cc30bc54fd361ce711e05293a5cc589562739b" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + [[package]] name = "open" version = "5.4.1" @@ -2713,6 +5496,26 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +[[package]] +name = "ordered-float" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" +dependencies = [ + "num-traits", +] + +[[package]] +name = "ordered-float" +version = "5.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c7c9e0d9b23589f26070720bac724174bfec1083e82f7854cdd0267518343c0" +dependencies = [ + "num-traits", + "rand 0.8.8", + "serde", +] + [[package]] name = "ordered-stream" version = "0.2.0" @@ -2737,6 +5540,39 @@ dependencies = [ "thiserror 2.0.20", ] +[[package]] +name = "palette" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddeed8580d347d2abf3dcf06a5f0b3dc020258338526b277847cd4248a70fc64" +dependencies = [ + "approx", + "libm", + "palette_derive", + "palette_math", +] + +[[package]] +name = "palette_derive" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88537020289b719d81be994ccf1bbf4990f477e2f69ee52fe3e45f43a02e56be" +dependencies = [ + "by_address", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "palette_math" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e6eb142958d64335fb0e345c5b9ead2ecd6fc438c307e9d7d3c4fd428dbaf12" +dependencies = [ + "libm", +] + [[package]] name = "pango" version = "0.18.3" @@ -2791,12 +5627,40 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pdf-writer" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92a79477295a713c2ed425aa82a8b5d20cec3fdee203706cbe6f3854880c1c81" +dependencies = [ + "bitflags 2.13.1", + "itoa", + "memchr", + "ryu", +] + [[package]] name = "percent-encoding" version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap 2.14.0", +] + [[package]] name = "phf" version = "0.13.1" @@ -2850,6 +5714,12 @@ dependencies = [ "siphasher", ] +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" + [[package]] name = "pin-project-lite" version = "0.2.17" @@ -2881,7 +5751,7 @@ checksum = "7da1d65da6dd5d1e44199ac0f58712d241c0f439f80adea8924d832384087f85" dependencies = [ "base64 0.22.1", "indexmap 2.14.0", - "quick-xml", + "quick-xml 0.41.0", "serde", "time", ] @@ -2926,11 +5796,23 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "polycool" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50596ddc09eb5ad5f75cacd40209568e66df71baf86e1499a0e99c4cff12a5a6" +dependencies = [ + "arrayvec", +] + [[package]] name = "portable-atomic" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" +dependencies = [ + "serde", +] [[package]] name = "portable-atomic-util" @@ -2941,13 +5823,25 @@ dependencies = [ "portable-atomic", ] +[[package]] +name = "postcard" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" +dependencies = [ + "cobs", + "embedded-io 0.4.0", + "embedded-io 0.6.1", + "serde", +] + [[package]] name = "potential_utf" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" dependencies = [ - "zerovec", + "zerovec 0.11.8", ] [[package]] @@ -2956,12 +5850,37 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + [[package]] name = "precomputed-hash" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" +[[package]] +name = "presser" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn 2.0.119", +] + [[package]] name = "proc-macro-crate" version = "1.3.1" @@ -3015,6 +5934,12 @@ dependencies = [ "version_check", ] +[[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.107" @@ -3024,6 +5949,92 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "profiling" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5" + +[[package]] +name = "psm" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd034599e63b970727f70d79e02d62390a4a84f7c6b827c27c46d5ac3fa622" +dependencies = [ + "ar_archive_writer", + "cc", +] + +[[package]] +name = "pulldown-cmark" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e" +dependencies = [ + "bitflags 2.13.1", + "getopts", + "memchr", + "pulldown-cmark-escape", + "unicase", +] + +[[package]] +name = "pulldown-cmark-escape" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae" + +[[package]] +name = "pulp" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046aa45b989642ec2e4717c8e72d677b13edd831a4d3b6cf37d9a3e54912496a" +dependencies = [ + "bytemuck", + "cfg-if", + "libm", + "num-complex", + "paste", + "pulp-wasm-simd-flag", + "raw-cpuid", + "reborrow", + "version_check", +] + +[[package]] +name = "pulp-wasm-simd-flag" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8f70e07b9c3962945a74e59ca1c511bba65b6419468acc217c457d93f3c740" + +[[package]] +name = "pxfm" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea" + +[[package]] +name = "qcms" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edecfcd5d755a5e5d98e24cf43113e7cdaec5a070edd0f6b250c03a573da30fa" + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] +name = "quick-xml" +version = "0.38.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "quick-xml" version = "0.41.0" @@ -3054,12 +6065,147 @@ version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" +[[package]] +name = "rand" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c" +dependencies = [ + "rand_core 0.6.4", + "serde", +] + +[[package]] +name = "rand" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.5", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.5", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "serde", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "rand_distr" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8615d50dcf34fa31f7ab52692afec947c4dd0ab803cc87cb3b0b4570ff7463" +dependencies = [ + "num-traits", + "rand 0.9.5", +] + +[[package]] +name = "range-alloc" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca45419789ae5a7899559e9512e58ca889e41f04f1f2445e9f4b290ceccd1d08" + +[[package]] +name = "raw-cpuid" +version = "11.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" +dependencies = [ + "bitflags 2.13.1", +] + [[package]] name = "raw-window-handle" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "read-fonts" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6717cf23b488adf64b9d711329542ba34de147df262370221940dfabc2c91358" +dependencies = [ + "bytemuck", + "font-types 0.10.1", +] + +[[package]] +name = "read-fonts" +version = "0.39.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4ed38b89c2c77ff968c524145ad65fb010f38af5c7a224b53b81d47ac2daa81" +dependencies = [ + "bytemuck", + "font-types 0.11.3", +] + +[[package]] +name = "reborrow" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430" + [[package]] name = "redox_syscall" version = "0.5.18" @@ -3129,6 +6275,12 @@ version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" +[[package]] +name = "renderdoc-sys" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" + [[package]] name = "reqwest" version = "0.13.4" @@ -3168,6 +6320,23 @@ dependencies = [ "web-sys", ] +[[package]] +name = "resvg" +version = "0.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8928798c0a55e03c9ca6c4c6846f76377427d2c1e1f7e6de3c06ae57942df43" +dependencies = [ + "gif 0.13.3", + "image-webp", + "log", + "pico-args", + "rgb", + "svgtypes", + "tiny-skia", + "usvg", + "zune-jpeg 0.4.21", +] + [[package]] name = "rfd" version = "0.16.0" @@ -3192,6 +6361,15 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "rgb" +version = "0.8.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b34b781b31e5d73e9fbc8689c70551fd1ade9a19e3e28cfec8580a79290cc4" +dependencies = [ + "bytemuck", +] + [[package]] name = "ring" version = "0.17.14" @@ -3206,6 +6384,49 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rmp" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ba8be72d372b2c9b35542551678538b562e7cf86c3315773cae48dfbfe7790c" +dependencies = [ + "num-traits", +] + +[[package]] +name = "rmp-serde" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f81bee8c8ef9b577d1681a70ebbc962c232461e397b22c208c43c04b67a155" +dependencies = [ + "rmp", + "serde", +] + +[[package]] +name = "roman-numerals-rs" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c85cd47a33a4510b1424fe796498e174c6a9cf94e606460ef022a19f3e4ff85e" + +[[package]] +name = "roxmltree" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" + +[[package]] +name = "rs-conllu" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6de5aecf17f8fff1b35d59a12e2b8c908cad4d67208805166483655554f9169" +dependencies = [ + "clap", + "derive_more 1.0.0", + "thiserror 1.0.69", + "walkdir", +] + [[package]] name = "rsqlite-vfs" version = "0.1.1" @@ -3231,6 +6452,22 @@ dependencies = [ "sqlite-wasm-rs", ] +[[package]] +name = "rust_decimal" +version = "1.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be2a24f50780bc85f09cc6ac299bdf1424302742d77221106859c9d8b102126a" +dependencies = [ + "arrayvec", + "num-traits", +] + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc-hash" version = "2.1.3" @@ -3338,6 +6575,60 @@ version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" +[[package]] +name = "rustybuzz" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" +dependencies = [ + "bitflags 2.13.1", + "bytemuck", + "core_maths", + "log", + "smallvec", + "ttf-parser", + "unicode-bidi-mirroring", + "unicode-ccc", + "unicode-properties", + "unicode-script", +] + +[[package]] +name = "ruzstd" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a252f5e20f038fe7b4ea53e073e65398d652c864cc162fc77c56c2f13717b888" +dependencies = [ + "twox-hash", +] + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "safetensors" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "172dd94c5a87b5c79f945c863da53b2ebc7ccef4eca24ac63cca66a41aab2178" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "safetensors" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "675656c1eabb620b921efea4f9199f97fc86e36dd6ffd1fbbe48d0f59a4987f5" +dependencies = [ + "hashbrown 0.16.1", + "serde", + "serde_json", +] + [[package]] name = "same-file" version = "1.0.6" @@ -3347,6 +6638,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "sanitize-filename" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc984f4f9ceb736a7bb755c3e3bd17dc56370af2600c9780dcc48c66453da34d" +dependencies = [ + "regex", +] + [[package]] name = "schannel" version = "0.1.29" @@ -3443,14 +6743,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c" dependencies = [ "bitflags 2.13.1", - "cssparser", - "derive_more", + "cssparser 0.36.0", + "derive_more 2.1.1", "log", "new_debug_unreachable", "phf", "phf_codegen", "precomputed-hash", - "rustc-hash", + "rustc-hash 2.1.3", "servo_arc", "smallvec", ] @@ -3465,6 +6765,12 @@ dependencies = [ "serde_core", ] +[[package]] +name = "seq-macro" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" + [[package]] name = "serde" version = "1.0.229" @@ -3487,6 +6793,16 @@ dependencies = [ "typeid", ] +[[package]] +name = "serde_bytes" +version = "0.11.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" +dependencies = [ + "serde", + "serde_core", +] + [[package]] name = "serde_core" version = "1.0.229" @@ -3587,12 +6903,25 @@ version = "3.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8705578779c2b6bd90d84d66eb2e206b708b1a4d7b9f17641b293545bf1c7e46" dependencies = [ - "darling", + "darling 0.23.0", "proc-macro2", "quote", "syn 2.0.119", ] +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.14.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + [[package]] name = "serialize-to-javascript" version = "0.1.2" @@ -3673,23 +7002,64 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" +[[package]] +name = "simplecss" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a9c6883ca9c3c7c90e888de77b7a5c849c779d25d74a1269b0218b14e8b136c" +dependencies = [ + "log", +] + [[package]] name = "siphasher" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" +[[package]] +name = "skrifa" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c31071dedf532758ecf3fed987cdb4bd9509f900e026ab684b4ecb81ea49841" +dependencies = [ + "bytemuck", + "read-fonts 0.35.0", +] + +[[package]] +name = "skrifa" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c34617370ae968efb7161bb2beb517d9084659aae19e24b89e3db25b46e4564" +dependencies = [ + "bytemuck", + "read-fonts 0.39.2", +] + [[package]] name = "slab" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" +[[package]] +name = "slotmap" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038" +dependencies = [ + "version_check", +] + [[package]] name = "smallvec" version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" +dependencies = [ + "serde", +] [[package]] name = "socket2" @@ -3749,6 +7119,31 @@ dependencies = [ "system-deps", ] +[[package]] +name = "spin" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" + +[[package]] +name = "spin" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "023a211cb3138dbc438680b32560ad89f699977624c9f8dbb95a47d5b4c07dd3" +dependencies = [ + "lock_api", + "portable-atomic", +] + +[[package]] +name = "spirv" +version = "0.3.0+sdk-1.3.268.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" +dependencies = [ + "bitflags 2.13.1", +] + [[package]] name = "sqlite-wasm-rs" version = "0.5.5" @@ -3761,12 +7156,46 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "stable-vec" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "047720fbc1c4cc7daa75c925adba9ce3fa8e1f7b039337c281b142d4ecc6d86b" + [[package]] name = "stable_deref_trait" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" +[[package]] +name = "stacker" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707f49d46706bacf8a2b00d51dace3f9de527c13eec3778f570c411f89e69967" +dependencies = [ + "cc", + "cfg-if", + "libc", + "psm", + "windows-sys 0.61.2", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" +dependencies = [ + "float-cmp 0.9.0", +] + [[package]] name = "string_cache" version = "0.9.0" @@ -3797,12 +7226,73 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "strum" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +dependencies = [ + "strum_macros 0.27.2", +] + +[[package]] +name = "strum" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" + +[[package]] +name = "strum_macros" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "strum_macros" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "subsetter" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38803281d1c23166c5ebcb455439a5d2afe711cc909cf88af72448c297756ad6" +dependencies = [ + "kurbo 0.13.1", + "rustc-hash 2.1.3", + "skrifa 0.42.1", + "write-fonts", +] + [[package]] name = "subtle" version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +[[package]] +name = "svgtypes" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc" +dependencies = [ + "kurbo 0.11.3", + "siphasher", +] + [[package]] name = "swift-rs" version = "1.0.8" @@ -3866,6 +7356,41 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "syntect" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "656b45c05d95a5704399aeef6bd0ddec7b2b3531b7c9e900abbf7c4d2190c925" +dependencies = [ + "bincode 1.3.3", + "fancy-regex", + "flate2", + "fnv", + "once_cell", + "plist", + "regex-syntax", + "serde", + "serde_derive", + "serde_json", + "thiserror 2.0.20", + "walkdir", + "yaml-rust", +] + +[[package]] +name = "sysctl" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01198a2debb237c62b6826ec7081082d951f46dbb64b0e8c7649a452230d1dfc" +dependencies = [ + "bitflags 2.13.1", + "byteorder", + "enum-as-inner", + "libc", + "thiserror 1.0.69", + "walkdir", +] + [[package]] name = "system-deps" version = "6.2.2" @@ -4180,7 +7705,7 @@ dependencies = [ "tokio", "url", "windows-sys 0.60.2", - "zip", + "zip 4.6.1", ] [[package]] @@ -4305,6 +7830,32 @@ dependencies = [ "new_debug_unreachable", ] +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "text_placeholder" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5008f74a09742486ef0047596cf35df2b914e2a8dca5727fcb6ba6842a766b" +dependencies = [ + "hashbrown 0.13.2", + "serde", + "serde_json", +] + +[[package]] +name = "thin-vec" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79def32ffcd477db1ff26f76dab9e3a91f0bd42a85ca96577089b24623056f9d" + [[package]] name = "thiserror" version = "1.0.69" @@ -4375,6 +7926,52 @@ dependencies = [ "time-core", ] +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tiny-skia" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "log", + "png 0.17.16", + "tiny-skia-path", +] + +[[package]] +name = "tiny-skia-path" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "serde", + "zerovec 0.10.4", +] + [[package]] name = "tinystr" version = "0.8.4" @@ -4382,7 +7979,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" dependencies = [ "displaydoc", - "zerovec", + "serde_core", + "zerovec 0.11.8", ] [[package]] @@ -4673,12 +8271,68 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "trie-rs" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f88f4b0a1ebd6c3d16be3e45eb0e8089372ccadd88849b7ca162ba64b5e6f6" +dependencies = [ + "louds-rs", +] + [[package]] name = "try-lock" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "ttf-parser" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" +dependencies = [ + "core_maths", +] + +[[package]] +name = "two-face" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e51b6e60e545cfdae5a4639ff423818f52372211a8d9a3e892b4b0761f76b2" +dependencies = [ + "serde", + "serde_derive", + "syntect", +] + +[[package]] +name = "twox-hash" +version = "2.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5283634e518fe9e82c7b20520bb4bc209009fd16c82077c802f8111ecbb0117a" + +[[package]] +name = "type-map" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" +dependencies = [ + "rustc-hash 2.1.3", +] + +[[package]] +name = "typed-arena" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" + +[[package]] +name = "typed-path" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e" + [[package]] name = "typeid" version = "1.0.3" @@ -4691,6 +8345,314 @@ version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" +[[package]] +name = "typst" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f6511ee598476f4f322b4d13891083d96dbacb8f9c2b908604c7094ba390653" +dependencies = [ + "comemo", + "ecow", + "rustc-hash 2.1.3", + "typst-eval", + "typst-html", + "typst-layout", + "typst-library", + "typst-macros", + "typst-realize", + "typst-syntax", + "typst-timing", + "typst-utils", +] + +[[package]] +name = "typst-as-lib" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fc16ea97aecd6bbc7273f33a511b2366e9d513e18c446b73d12a6607e98602e" +dependencies = [ + "chrono", + "comemo", + "dirs", + "ecow", + "thiserror 2.0.20", + "typst", +] + +[[package]] +name = "typst-assets" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5613cb719a6222fe9b74027c3625d107767ec187bff26b8fc931cf58942c834f" + +[[package]] +name = "typst-eval" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "687757487dfc0c1e941344d5024cf7a28364e70c3e304faad89ac65597f62526" +dependencies = [ + "comemo", + "ecow", + "indexmap 2.14.0", + "rustc-hash 2.1.3", + "stacker", + "toml 0.8.2", + "typst-library", + "typst-macros", + "typst-syntax", + "typst-timing", + "typst-utils", + "unicode-segmentation", +] + +[[package]] +name = "typst-html" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e29f8da4f964d4c90739c3c1e0288b0ba1bccc3cc50623a6d558300b86ca8aad" +dependencies = [ + "bumpalo", + "comemo", + "ecow", + "palette", + "rustc-hash 2.1.3", + "time", + "typst-assets", + "typst-library", + "typst-macros", + "typst-svg", + "typst-syntax", + "typst-timing", + "typst-utils", +] + +[[package]] +name = "typst-layout" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cab0200105831a9158e63718a0f6141c78cb2c1722ed17d19ad28941e3b8491" +dependencies = [ + "az", + "bumpalo", + "codex", + "comemo", + "ecow", + "either", + "hypher", + "icu_properties 1.5.1", + "icu_provider 1.5.0", + "icu_provider_adapters", + "icu_provider_blob", + "icu_segmenter", + "kurbo 0.12.0", + "memchr", + "rustc-hash 2.1.3", + "rustybuzz", + "smallvec", + "ttf-parser", + "typst-assets", + "typst-library", + "typst-macros", + "typst-syntax", + "typst-timing", + "typst-utils", + "unicode-bidi", + "unicode-math-class", + "unicode-script", + "unicode-segmentation", +] + +[[package]] +name = "typst-library" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e276a5de53020c43efe2111ec236252e54ea4480b5ac18063e663dfbe03d9d1b" +dependencies = [ + "az", + "bitflags 2.13.1", + "bumpalo", + "chinese-number", + "ciborium", + "codex", + "comemo", + "csv", + "ecow", + "flate2", + "fontdb", + "glidesort", + "hayagriva", + "hayro-syntax", + "icu_properties 1.5.1", + "icu_provider 1.5.0", + "icu_provider_blob", + "image", + "indexmap 2.14.0", + "kamadak-exif", + "kurbo 0.12.0", + "lipsum", + "memchr", + "palette", + "phf", + "png 0.17.16", + "qcms", + "rayon", + "regex", + "regex-syntax", + "roxmltree", + "rust_decimal", + "rustc-hash 2.1.3", + "rustybuzz", + "serde", + "serde_json", + "serde_yaml", + "siphasher", + "smallvec", + "syntect", + "time", + "toml 0.8.2", + "ttf-parser", + "two-face", + "typed-arena", + "typst-assets", + "typst-macros", + "typst-syntax", + "typst-timing", + "typst-utils", + "unicode-math-class", + "unicode-normalization", + "unicode-segmentation", + "unscanny", + "usvg", + "utf8_iter", + "wasmi", + "xmlwriter", +] + +[[package]] +name = "typst-macros" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "141cbd1027129fbf6bda1013f52a264df7befc7388cc8f47767d65e803fd3a59" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "typst-pdf" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37c8a4630754767cd10d48e8b8186e7dc784631a30a3a93521edf7d77aebd0c0" +dependencies = [ + "az", + "bytemuck", + "comemo", + "ecow", + "image", + "indexmap 2.14.0", + "infer", + "krilla", + "krilla-svg", + "rustc-hash 2.1.3", + "serde", + "smallvec", + "typst-assets", + "typst-library", + "typst-macros", + "typst-syntax", + "typst-timing", + "typst-utils", +] + +[[package]] +name = "typst-realize" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7ffe964757fb93d2e98978aa2a74ee85b0f94c8643e8f3550737258b58f39d8" +dependencies = [ + "arrayvec", + "bumpalo", + "comemo", + "ecow", + "regex", + "typst-library", + "typst-macros", + "typst-syntax", + "typst-timing", + "typst-utils", +] + +[[package]] +name = "typst-svg" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e46b811837ade1f0243ef0d8bf3fb06d166443090eac22c28643f374c2ccdc9d" +dependencies = [ + "base64 0.22.1", + "comemo", + "ecow", + "flate2", + "hayro", + "hayro-svg", + "image", + "rustc-hash 2.1.3", + "ttf-parser", + "typst-assets", + "typst-library", + "typst-macros", + "typst-timing", + "typst-utils", + "xmlparser", + "xmlwriter", +] + +[[package]] +name = "typst-syntax" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a95d9192060e23b1e491b0b94dff676acddc92a4d672aeb8ca3890a5a734e879" +dependencies = [ + "ecow", + "rustc-hash 2.1.3", + "serde", + "toml 0.8.2", + "typst-timing", + "typst-utils", + "unicode-ident", + "unicode-math-class", + "unicode-script", + "unicode-segmentation", + "unscanny", +] + +[[package]] +name = "typst-timing" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7be94f8faf19841b49574ef5c7fd7a12e2deb7c3d8deba5a596f35d2222024cd" +dependencies = [ + "parking_lot", + "serde", + "serde_json", +] + +[[package]] +name = "typst-utils" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3966c92e8fa48c7ce898130d07000d985f18206d92b250f0f939287fbccdee3" +dependencies = [ + "once_cell", + "portable-atomic", + "rayon", + "rustc-hash 2.1.3", + "siphasher", + "thin-vec", + "unicode-math-class", +] + [[package]] name = "uds_windows" version = "1.2.1" @@ -4723,6 +8685,50 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" +[[package]] +name = "unic-langid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05" +dependencies = [ + "unic-langid-impl", + "unic-langid-macros", +] + +[[package]] +name = "unic-langid-impl" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658" +dependencies = [ + "serde", + "tinystr 0.8.4", +] + +[[package]] +name = "unic-langid-macros" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5957eb82e346d7add14182a3315a7e298f04e1ba4baac36f7f0dbfedba5fc25" +dependencies = [ + "proc-macro-hack", + "tinystr 0.8.4", + "unic-langid-impl", + "unic-langid-macros-impl", +] + +[[package]] +name = "unic-langid-macros-impl" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1249a628de3ad34b821ecb1001355bca3940bcb2f88558f1a8bd82e977f75b5" +dependencies = [ + "proc-macro-hack", + "quote", + "syn 2.0.119", + "unic-langid-impl", +] + [[package]] name = "unic-ucd-ident" version = "0.9.0" @@ -4743,24 +8749,117 @@ dependencies = [ "unic-common", ] +[[package]] +name = "unicase" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" + +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + +[[package]] +name = "unicode-bidi-mirroring" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfa6e8c60bb66d49db113e0125ee8711b7647b5579dc7f5f19c42357ed039fe" + +[[package]] +name = "unicode-blocks" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "328edfd6d0bb91a22e592bed3a3b54c7b1f5c92a517f5a7aca24a2caef10c363" + +[[package]] +name = "unicode-ccc" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e" + [[package]] name = "unicode-ident" version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +[[package]] +name = "unicode-math-class" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d246cf599d5fae3c8d56e04b20eb519adb89a8af8d0b0fbcded369aa3647d65" + +[[package]] +name = "unicode-normalization" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" + +[[package]] +name = "unicode-script" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee" + [[package]] name = "unicode-segmentation" version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" +[[package]] +name = "unicode-vo" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" + +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "unscanny" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9df2af067a7953e9c3831320f35c1cc0600c30d44d9f7a12b01db1cd88d6b47" + [[package]] name = "untrusted" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" +[[package]] +name = "unty" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" + [[package]] name = "url" version = "2.5.8" @@ -4792,12 +8891,45 @@ dependencies = [ "url", ] +[[package]] +name = "usvg" +version = "0.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80be9b06fbae3b8b303400ab20778c80bbaf338f563afe567cf3c9eea17b47ef" +dependencies = [ + "base64 0.22.1", + "data-url", + "flate2", + "fontdb", + "imagesize 0.13.0", + "kurbo 0.11.3", + "log", + "pico-args", + "roxmltree", + "rustybuzz", + "simplecss", + "siphasher", + "strict-num", + "svgtypes", + "tiny-skia-path", + "unicode-bidi", + "unicode-script", + "unicode-vo", + "xmlwriter", +] + [[package]] name = "utf8_iter" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + [[package]] name = "uuid" version = "1.25.0" @@ -4810,6 +8942,17 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "variadics_please" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b6d82be61465f97d42bd1d15bf20f3b0a3a0905018f38f9d6f6962055b0b5c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "vcpkg" version = "0.2.15" @@ -4828,6 +8971,12 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + [[package]] name = "vswhom" version = "0.1.0" @@ -4950,6 +9099,52 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wasmi" +version = "0.51.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb321403ce594274827657a908e13d1d9918aa02257b8bf8391949d9764023ff" +dependencies = [ + "spin 0.9.9", + "wasmi_collections", + "wasmi_core", + "wasmi_ir", + "wasmparser", +] + +[[package]] +name = "wasmi_collections" +version = "0.51.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9b8e98e45a2a534489f8225e765cbf1cb9a3078072605e58158910cf4749172" + +[[package]] +name = "wasmi_core" +version = "0.51.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c25f375c0cdf14810eab07f532f61f14d4966f09c747a55067fdf3196e8512e6" +dependencies = [ + "libm", +] + +[[package]] +name = "wasmi_ir" +version = "0.51.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624e2a68a4293ecb8f564260b68394b29cf3b3edba6bce35532889a2cb33c3d9" +dependencies = [ + "wasmi_core", +] + +[[package]] +name = "wasmparser" +version = "0.228.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4abf1132c1fdf747d56bbc1bb52152400c70f336870f968b85e89ea422198ae3" +dependencies = [ + "bitflags 2.13.1", +] + [[package]] name = "web-sys" version = "0.3.104" @@ -4960,6 +9155,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "web_atoms" version = "0.2.6" @@ -5061,6 +9266,161 @@ dependencies = [ "windows-core 0.61.2", ] +[[package]] +name = "weezl" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" + +[[package]] +name = "wgpu" +version = "26.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70b6ff82bbf6e9206828e1a3178e851f8c20f1c9028e74dd3a8090741ccd5798" +dependencies = [ + "arrayvec", + "bitflags 2.13.1", + "cfg-if", + "cfg_aliases", + "document-features", + "hashbrown 0.15.5", + "js-sys", + "log", + "naga", + "parking_lot", + "portable-atomic", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "26.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f62f1053bd28c2268f42916f31588f81f64796e2ff91b81293515017ca8bd9" +dependencies = [ + "arrayvec", + "bit-set", + "bit-vec", + "bitflags 2.13.1", + "cfg_aliases", + "document-features", + "hashbrown 0.15.5", + "indexmap 2.14.0", + "log", + "naga", + "once_cell", + "parking_lot", + "portable-atomic", + "profiling", + "raw-window-handle", + "rustc-hash 1.1.0", + "smallvec", + "thiserror 2.0.20", + "wgpu-core-deps-apple", + "wgpu-core-deps-emscripten", + "wgpu-core-deps-windows-linux-android", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core-deps-apple" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18ae5fbde6a4cbebae38358aa73fcd6e0f15c6144b67ef5dc91ded0db125dbdf" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-core-deps-emscripten" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7670e390f416006f746b4600fdd9136455e3627f5bd763abf9a65daa216dd2d" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-core-deps-windows-linux-android" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "720a5cb9d12b3d337c15ff0e24d3e97ed11490ff3f7506e7f3d98c68fa5d6f14" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-hal" +version = "26.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d0e67224cc7305b3b4eb2cc57ca4c4c3afc665c1d1bee162ea806e19c47bdd" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags 2.13.1", + "block", + "bytemuck", + "cfg-if", + "cfg_aliases", + "core-graphics-types", + "glow", + "glutin_wgl_sys", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "hashbrown 0.15.5", + "js-sys", + "khronos-egl", + "libc", + "libloading 0.8.9", + "log", + "metal", + "naga", + "ndk-sys", + "objc", + "ordered-float 4.6.0", + "parking_lot", + "portable-atomic", + "portable-atomic-util", + "profiling", + "range-alloc", + "raw-window-handle", + "renderdoc-sys", + "smallvec", + "thiserror 2.0.20", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "windows 0.58.0", + "windows-core 0.58.0", +] + +[[package]] +name = "wgpu-types" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca7a8d8af57c18f57d393601a1fb159ace8b2328f1b6b5f80893f7d672c9ae2" +dependencies = [ + "bitflags 2.13.1", + "bytemuck", + "js-sys", + "log", + "thiserror 2.0.20", + "web-sys", +] + [[package]] name = "winapi" version = "0.3.9" @@ -5117,6 +9477,16 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +dependencies = [ + "windows-core 0.58.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows" version = "0.61.3" @@ -5151,6 +9521,19 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-core" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement 0.58.0", + "windows-interface 0.58.0", + "windows-result 0.2.0", + "windows-strings 0.1.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows-core" version = "0.61.2" @@ -5199,6 +9582,17 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "windows-implement" version = "0.60.2" @@ -5221,6 +9615,17 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "windows-interface" version = "0.59.3" @@ -5263,6 +9668,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-result" version = "0.3.4" @@ -5281,6 +9695,16 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result 0.2.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows-strings" version = "0.4.2" @@ -5588,6 +10012,25 @@ version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" +[[package]] +name = "write-fonts" +version = "0.48.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb731d4c4d93eacc69a1ad2f270f905788a98e4a3438267bcafbe08d3431c8d8" +dependencies = [ + "font-types 0.11.3", + "indexmap 2.14.0", + "kurbo 0.13.1", + "log", + "read-fonts 0.39.2", +] + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "writeable" version = "0.6.4" @@ -5669,6 +10112,51 @@ dependencies = [ "rustix", ] +[[package]] +name = "xml-rs" +version = "0.8.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e450f9b2ed1dff33c94c12589a87338689467b9c4f5d8a5710bd09a847d2c8a7" + +[[package]] +name = "xmlparser" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" + +[[package]] +name = "xmlwriter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" + +[[package]] +name = "xmp-writer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9440ea3e5aeabb0ac63af70daf835274065238cdd0cec83418f417eae38bacee" + +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive 0.7.5", + "zerofrom", +] + [[package]] name = "yoke" version = "0.8.3" @@ -5676,10 +10164,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", - "yoke-derive", + "yoke-derive 0.8.2", "zerofrom", ] +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] + [[package]] name = "yoke-derive" version = "0.8.2" @@ -5762,6 +10262,26 @@ dependencies = [ "serde", ] +[[package]] +name = "zerocopy" +version = "0.8.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "zerofrom" version = "0.1.8" @@ -5789,6 +10309,18 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" +[[package]] +name = "zerotrie" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb594dd55d87335c5f60177cee24f19457a5ec10a065e0a3014722ad252d0a1f" +dependencies = [ + "displaydoc", + "litemap 0.7.5", + "serde", + "zerovec 0.10.4", +] + [[package]] name = "zerotrie" version = "0.2.5" @@ -5796,19 +10328,43 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" dependencies = [ "displaydoc", - "yoke", + "yoke 0.8.3", "zerofrom", ] +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "serde", + "yoke 0.7.5", + "zerofrom", + "zerovec-derive 0.10.4", +] + [[package]] name = "zerovec" version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" dependencies = [ - "yoke", + "serde", + "yoke 0.8.3", "zerofrom", - "zerovec-derive", + "zerovec-derive 0.11.6", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e3c6377872d72510393f688a555d7097b0f741995c7a00f0407f786dd486b2d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", ] [[package]] @@ -5834,12 +10390,114 @@ dependencies = [ "memchr", ] +[[package]] +name = "zip" +version = "7.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c42e33efc22a0650c311c2ef19115ce232583abbe80850bc8b66509ebef02de0" +dependencies = [ + "crc32fast", + "indexmap 2.14.0", + "memchr", + "typed-path", +] + +[[package]] +name = "zip" +version = "8.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d04a6b5381502aa6087c94c669499eb1602eb9c5e8198e534de571f7154809b" +dependencies = [ + "crc32fast", + "flate2", + "indexmap 2.14.0", + "memchr", + "typed-path", + "zopfli", +] + +[[package]] +name = "zlib-rs" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b31d188d9d685a4f9c7b46d6e36631b07058d2cfe190267adce54dc230bf12" + [[package]] name = "zmij" version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" +[[package]] +name = "zopfli" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249" +dependencies = [ + "bumpalo", + "crc32fast", + "log", + "simd-adler32", +] + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + +[[package]] +name = "zune-core" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56377fd46368984a170bc5aac5567e52ca5da874caa60bea39fcbca78fb658b" + +[[package]] +name = "zune-jpeg" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" +dependencies = [ + "zune-core 0.4.12", +] + +[[package]] +name = "zune-jpeg" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296" +dependencies = [ + "zune-core 0.5.3", +] + [[package]] name = "zvariant" version = "5.15.0" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 2ced78d..b071134 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -33,13 +33,45 @@ trash = "5" rusqlite = { version = "0.40", features = ["bundled"] } tokio = { version = "1", features = ["sync", "time"] } +# PDF export. Typst is the typesetter: a document becomes Typst source, the source is compiled in +# process and the bytes go to whatever the native save panel pointed at. No headless browser, no +# LaTeX install, nothing for the user to have on their machine first. +# +# typst and typst-pdf move together and are pinned to the same minor, because typst-as-lib links +# against a particular pair and a mismatched trio does not compile. fontdb finds a system face for +# the one thing this app does not bundle, a monospace family for code. +typst = "0.14.2" +typst-pdf = "0.14.2" +typst-as-lib = "0.15.5" +fontdb = "0.23" +# Inline image bytes arrive over the IPC boundary as base64: a mermaid diagram is rendered to SVG +# in the webview and has no file behind it to read. +base64 = "0.22" + +# Grammar, which is Harper's and is the one checker this app does ship. Spelling stays the system's +# below; Harper's own spell rule is turned off in grammar.rs for that reason. +# +# Pinned exactly: the [patch] stubs at the foot of this file are tied to this version's burn/cubecl +# graph. A minor bump could silently invalidate a patch ("unused"), and the whole CUDA and LLVM +# subtree those stubs remove would come back. Bump deliberately and re-audit the stubs. +harper-core = { version = "=2.5.0", features = ["concurrent"] } + # Spelling is the system's, not ours. NSSpellChecker is the same checker every other Mac app # corrects into, so a word learned in Mail is not underlined here, and it carries the user's own # languages without this app shipping a dictionary. These objc2 crates are already in the graph # through Tauri, so asking for them adds nothing to the build but the features named. [target.'cfg(target_os = "macos")'.dependencies] objc2 = "0.6" -objc2-app-kit = { version = "0.3", features = ["NSSpellChecker"] } +# NSMenu and its neighbours are for Writing Tools, which has no API this app can call: the system +# puts a submenu on Edit and the only way in is to find that item and perform it. Deliberately not +# NSWritingToolsCoordinator, which the sibling asks for and never uses. +objc2-app-kit = { version = "0.3", features = [ + "NSSpellChecker", + "NSApplication", + "NSMenu", + "NSMenuItem", + "NSResponder", +] } objc2-foundation = { version = "0.3", features = ["NSString", "NSArray", "NSRange", "NSTextCheckingResult"] } # There is no auto-updater and no process to restart on a phone: the store is the update channel. @@ -50,3 +82,21 @@ tauri-plugin-updater = "2" [dev-dependencies] tempfile = "3" + +# harper-core transitively declares optional, disabled GPU backends through burn: a `burn-cuda` +# CUDA backend and, under cubecl, a `cubecl-cpu` LLVM/MLIR JIT runtime. Both are off, and neither +# is ever compiled, but Cargo still version-resolves and downloads the whole dead subtree behind +# them, which is the cuda toolchain crates on one side and tracel-llvm plus its LLVM bundler on the +# other. Replacing the two roots with empty stubs takes several hundred crates out of the graph and +# a large part of the build with them. +[patch.crates-io] +burn-cuda = { path = "stubs/burn-cuda" } +cubecl-cpu = { path = "stubs/cubecl-cpu" } + +# Optimize dependencies even in dev builds. Harper's grammar engine, and the burn-ndarray POS +# tagger under it, is roughly ten times slower unoptimized, which is the difference between a check +# that lands while the user is still typing the next word and one that takes seconds. This compiles +# dependencies at opt-level 3 and leaves this crate itself unoptimized, so incremental rebuilds of +# our own code stay fast. The first build after adding it is slower, once. +[profile.dev.package."*"] +opt-level = 3 diff --git a/src-tauri/fonts/HankenGrotesk-Bold.ttf b/src-tauri/fonts/HankenGrotesk-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5c5d4d31c817a5c1db353017cbb1c763d18c9433 GIT binary patch literal 66604 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

Z*m;+{Md;u?qSfeGPLw*!^Z_nS{+L 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 Iv6m442Lmqw$N&HU literal 0 HcmV?d00001 diff --git a/src-tauri/fonts/HankenGrotesk-BoldItalic.ttf b/src-tauri/fonts/HankenGrotesk-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3b411cff336a926150d5d09a7566137254d8e89f GIT binary patch literal 68152 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 literal 0 HcmV?d00001 diff --git a/src-tauri/fonts/HankenGrotesk-Italic.ttf b/src-tauri/fonts/HankenGrotesk-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3c012b1a9bc353dbb297cea26cede131cbb6335e GIT binary patch literal 67980 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 F{~y=EW+(sv literal 0 HcmV?d00001 diff --git a/src-tauri/fonts/HankenGrotesk-Regular.ttf b/src-tauri/fonts/HankenGrotesk-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e520038297458c9eece920e7de5c68406e9fc012 GIT binary patch literal 66668 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 y7owZ)QBc2^>ZLA1&4&0uB6DSZNfmAX_TKnXwq literal 0 HcmV?d00001 diff --git a/src-tauri/fonts/Literata-Bold.ttf b/src-tauri/fonts/Literata-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ccaa5f9856db442a186ace72268a9ac7e6d50181 GIT binary patch literal 271460 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

-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 literal 0 HcmV?d00001 diff --git a/src-tauri/fonts/Literata-BoldItalic.ttf b/src-tauri/fonts/Literata-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f5f88c0c6761b3b64a1b4a1625ccb789f38487eb GIT binary patch literal 260616 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

-d6m3IUMFvmpOQDpTjXu>Gsq_P3-S*6 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

%FD7&Rqug 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 z zqgu(*>z(tQ5EVaGdPC)%!u+PL8FjskIHW`M{K~y~7W~h)2xRUJZVrUVr(++#pObwq zq-+JROa2`FTA4r1+FjGOk8Ex2D={JatOWCRTXL?G>WRxWx%-6lCptJH;pWaA*C{<0 z++V)1H_nr9eRjOp3guXnqeb&l<=@Ink#Fhg4bD*3k@@TLZJj@U%}W%>^S{!M4eT#R zaNYD{bL=P;m3bZ7u2E@T=PZlU%arFW2ih{%>)i3H>uWwQzg*HH*9A4YpVkirOX0`1 z9}3p?j*`Yp-&7 z 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 literal 0 HcmV?d00001 diff --git a/src-tauri/fonts/Literata-Italic.ttf b/src-tauri/fonts/Literata-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dc7ef4e619c5503187c17b036de66c2e25ac7135 GIT binary patch literal 259388 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 Z{Vv1XYhzJ#Odw%&LD@y++78-~%uZd|vgH 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 I`9Mnie>S}k*#H0l literal 0 HcmV?d00001 diff --git a/src-tauri/fonts/Literata-Regular.ttf b/src-tauri/fonts/Literata-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2b18d3e32bdf01203f81aa24731eeb8bec5865fc GIT binary patch literal 270924 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%0AiRO*ka07mG##7zcJVi06^918+q#DP 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 G>Hi0L3s@@v literal 0 HcmV?d00001 diff --git a/src-tauri/fonts/PROVENANCE.md b/src-tauri/fonts/PROVENANCE.md new file mode 100644 index 0000000..5ac5590 --- /dev/null +++ b/src-tauri/fonts/PROVENANCE.md @@ -0,0 +1,31 @@ +# Where these faces came from + +Nine static instances, cut from the four variable fonts in `public/fonts/` that the editor renders +with. Same designs, same licence, same bytes underneath: the only difference is that a weight axis +has been pinned rather than left open. + +They exist because Typst does not support a variable axis. It warns that it does not, then lays the +text out at the default instance whatever weight was asked for, so a PDF set from the variable files +has its headings, its bold runs and its callout labels all at 400 and no visible hierarchy at all. + +They live here rather than in `public/fonts/` because nothing in the webview loads them. Everything +under `public/` is copied into the frontend bundle, and these are compiled into the binary by +`src-tauri/src/pdf.rs`, so keeping them here ships them once instead of twice. + +To regenerate after updating a variable font, with fonttools installed: + +```python +from fontTools.ttLib import TTFont +from fontTools.varLib import instancer + +font = TTFont("public/fonts/Literata-VF.ttf") +instancer.instantiateVariableFont(font, {"wght": 600, "opsz": 12}, inplace=True) +# then set name IDs 1, 2, 4, 6, 16 and 17 to the family and style, and save. +font.save("src-tauri/fonts/Literata-SemiBold.ttf") +``` + +Literata pins `opsz` to 12, which is its own default and the size the body text is set at. The +weights are 400, 600 and 700 upright and 400 and 700 italic for Literata, and 400 and 700 in both +slopes for Hanken Grotesk, which are the weights `src/export/typst.ts` asks for. Typst falls back to +the nearest weight it has, so a face that is missing is a heading that comes out too heavy rather +than an export that fails. diff --git a/src-tauri/src/dto.rs b/src-tauri/src/dto.rs index 93bf266..8b1a295 100644 --- a/src-tauri/src/dto.rs +++ b/src-tauri/src/dto.rs @@ -183,3 +183,61 @@ pub struct SpellIssue { #[serde(default)] pub suggestions: Vec, } + +/// An image the PDF exporter has to put on a page. +/// +/// `data` present means the bytes came with the request, base64 encoded, which is the only way a +/// mermaid diagram can arrive: the frontend renders it to SVG and there is no file behind it and +/// never will be. `data` absent means read the file at `path`, which is what an ordinary +/// `![](photo.jpg)` is, and it is absent far more often than not: base64 encoding every photograph +/// in a document through the IPC boundary costs a third again in bytes for a file the backend can +/// already open. +/// +/// A read goes through the same root guard every other read in fs.rs does. A document is untrusted +/// input. `![](../../../.ssh/id_rsa)` is a link anybody can type into a markdown file, and an +/// exporter is not the place where this app starts reading outside an open folder. +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ImageInput { + /// How the Typst source refers to it, which is also the key the file resolver answers on. + pub path: String, + #[serde(default)] + pub data: Option, +} + +/// Something the exporter worked around rather than something it refused to do. Payload of the +/// `pdf-warnings` event, which is how these travel: a compile answers with raw bytes and has +/// nowhere to put a second value. +/// +/// `count` is here because the alternative is forty toasts. A document with forty formulas the +/// converter could not typeset has one problem, not forty, and the user wants to be told once with +/// a number on it. +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct PdfWarning { + /// math | image | typst + pub kind: String, + pub message: String, + pub count: u32, +} + +/// One grammar problem in a run of text handed to the checker. +/// +/// `start` and `end` are half-open offsets in *characters*, not bytes and not UTF-16 units, for +/// exactly the reason `SpellIssue` gives: the other end is JavaScript addressing a ProseMirror +/// document, and ProseMirror counts in code points. Harper already counts that way, so unlike the +/// spelling path there is no conversion to do and nowhere for one to go wrong. +/// +/// `kind` is Harper's own name for the rule that fired, which is what the popover shows above the +/// message so a correction can be judged before it is taken. `suggestions` can be empty: a rule +/// that can see a sentence is wrong without knowing how to fix it is still worth an underline. +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct GrammarIssue { + pub start: usize, + pub end: usize, + pub kind: String, + pub message: String, + #[serde(default)] + pub suggestions: Vec, +} diff --git a/src-tauri/src/fonts.rs b/src-tauri/src/fonts.rs new file mode 100644 index 0000000..a8aea8b --- /dev/null +++ b/src-tauri/src/fonts.rs @@ -0,0 +1,143 @@ +// The faces a PDF is set in. +// +// Nine of them are bundled and compiled into the binary by pdf.rs, one per weight and slope, +// because a document that typesets differently on two machines is not an export. The two things this app does not bundle +// are a monospace family for code and a math family for formulas, both of which are large and +// neither of which the editor shows on screen, so they come off the system instead and this module +// is how they are found. +// +// A family that is not installed is not an error. Typst is handed whatever was found and falls +// back through the rest of its book for anything missing, and the export still happens. + +use std::collections::HashSet; + +use fontdb::{Database, Family, Query}; + +/// Monospace families in descending order of preference, starting with the name Typst's `raw` +/// element asks for by default so that a machine which happens to have it needs no help. The rest +/// are what macOS, Windows and the common Linux desktops actually ship. +const MONOSPACE_FAMILIES: [&str; 8] = [ + "DejaVu Sans Mono", + "SF Mono", + "Menlo", + "Monaco", + "Andale Mono", + "Consolas", + "Liberation Mono", + "Courier New", +]; + +/// Math families, again starting with Typst's own default. A math face is not interchangeable with +/// a text one: laying out an equation needs the OpenType MATH table, and Typst will not fall back +/// off this list on its own, so it is long on purpose. +const MATH_FAMILIES: [&str; 8] = [ + "New Computer Modern Math", + "Latin Modern Math", + "STIX Two Math", + "Cambria Math", + "XITS Math", + "TeX Gyre Pagella Math", + "DejaVu Math TeX Gyre", + "Asana Math", +]; + +/// Loading the system font list walks several directories, so it happens once per compile rather +/// than once per family looked up. +fn system_db() -> Database { + let mut db = Database::new(); + db.load_system_fonts(); + db +} + +/// A key that is the same for every face of one font collection, so a `.ttc` is read once instead +/// of once per style. `with_face_data` hands back the whole collection either way, and Typst +/// expands it into every face it holds. +fn source_key(face: &fontdb::FaceInfo) -> String { + match &face.source { + fontdb::Source::File(path) => path.to_string_lossy().into_owned(), + fontdb::Source::SharedFile(path, _) => path.to_string_lossy().into_owned(), + fontdb::Source::Binary(_) => format!("{:?}:{}", face.id, face.index), + } +} + +fn installed(face: &fontdb::FaceInfo, family: &str) -> bool { + face.families + .iter() + .any(|(name, _)| name.eq_ignore_ascii_case(family)) +} + +fn faces_for(db: &Database, family: &str, into: &mut Vec>, seen: &mut HashSet) { + let styles = [ + (fontdb::Weight::NORMAL, fontdb::Style::Normal), + (fontdb::Weight::NORMAL, fontdb::Style::Italic), + (fontdb::Weight::BOLD, fontdb::Style::Normal), + (fontdb::Weight::BOLD, fontdb::Style::Italic), + ]; + for (weight, style) in styles { + let query = Query { + families: &[Family::Name(family)], + weight, + style, + ..Query::default() + }; + let Some(id) = db.query(&query) else { continue }; + // fontdb answers a query with its closest match rather than with nothing, so a family that + // is not installed comes back as some unrelated face. Checking the name of what came back + // is the only way to tell a hit from a substitution. + let Some(face) = db.face(id) else { continue }; + if !installed(face, family) || !seen.insert(source_key(face)) { + continue; + } + if let Some(bytes) = db.with_face_data(id, |data, _index| data.to_vec()) { + into.push(bytes); + } + } +} + +/// What this machine turned out to have. +/// +/// The names matter as much as the bytes. Typst warns once per family it was asked for and could +/// not find, so a preamble naming a hopeful list of eight monospaces produces seven warnings on a +/// machine with one of them, and the export ends with a toast about fonts nobody chose. Naming only +/// what is here means naming nothing that is not. +pub struct Fallbacks { + pub fonts: Vec>, + pub monospace: Vec, + pub math: Vec, +} + +/// The faces the bundle is missing: a monospace for code blocks and a math family for formulas. +/// +/// Every candidate that is installed is loaded, not just the first, so that the preamble can name +/// them in preference order and let Typst pick. +pub fn fallbacks() -> Fallbacks { + let db = system_db(); + let mut fonts = Vec::new(); + let mut seen = HashSet::new(); + let monospace = collect_installed(&db, &MONOSPACE_FAMILIES, &mut fonts, &mut seen); + let math = collect_installed(&db, &MATH_FAMILIES, &mut fonts, &mut seen); + Fallbacks { + fonts, + monospace, + math, + } +} + +fn collect_installed( + db: &Database, + families: &[&str], + fonts: &mut Vec>, + seen: &mut HashSet, +) -> Vec { + families + .iter() + .filter(|family| { + let before = fonts.len(); + faces_for(db, family, fonts, seen); + // A family whose file was already loaded under another name is still installed, so the + // count is not the test on its own. + fonts.len() > before || db.faces().any(|face| installed(face, family)) + }) + .map(|family| (*family).to_string()) + .collect() +} diff --git a/src-tauri/src/fs.rs b/src-tauri/src/fs.rs index 91f2af6..0765424 100644 --- a/src-tauri/src/fs.rs +++ b/src-tauri/src/fs.rs @@ -670,6 +670,22 @@ pub fn duplicate_entry(path: &Path) -> Result { /// Never `fs::remove_file`. These are the user's own documents and this app does not get to be the /// reason one of them is gone for good. pub fn trash_entry(path: &Path) -> Result<(), String> { + // Not `trash::delete`, whose macOS default asks Finder to do it over an Apple event. That is + // the method that leaves Put Back on the file, and it is the wrong trade here: an Apple event + // from a hardened runtime needs an entitlement and a one time permission prompt, and a delete + // that fails because the user said no to a dialog about controlling Finder is a worse answer + // than a delete with no Put Back. `trashItemAtURL:` asks nobody, makes no sound and is faster. + // A file trashed this way is still in the Trash and can still be dragged back out. + #[cfg(target_os = "macos")] + { + use trash::macos::{DeleteMethod, TrashContextExtMacos}; + let mut context = trash::TrashContext::default(); + context.set_delete_method(DeleteMethod::NsFileManager); + context + .delete(path) + .map_err(|e| format!("{}: {e}", path.display())) + } + #[cfg(not(target_os = "macos"))] trash::delete(path).map_err(|e| format!("{}: {e}", path.display())) } diff --git a/src-tauri/src/grammar.rs b/src-tauri/src/grammar.rs new file mode 100644 index 0000000..acab468 --- /dev/null +++ b/src-tauri/src/grammar.rs @@ -0,0 +1,128 @@ +// Grammar, which is Harper's. +// +// Deliberately not a port of the sibling's proofing.rs. That file checks spelling and grammar +// together because it had to ship its own speller; here NSSpellChecker already does the spelling +// in spell.rs and macspell.rs, and Harper's own spell rule stays off for the same reason: the +// system checker knows the user's names, their languages and every word they have ever taught +// their Mac, and a second opinion from a bundled dictionary is a worse one. +// +// The engine is built once and kept. Building it reads a curated dictionary and a part of speech +// model out of the binary, which is far too much work to repeat per paragraph, and this module +// keeps it in a static rather than in `tauri::Manager` state because a `LintGroup` is not the kind +// of thing the rest of the crate has any business reaching. Built on the first check rather than +// at launch, so a window opens without waiting for a model nobody has asked a question of yet. +// +// Nothing here is on the main thread. `grammar_check` is a `#[tauri::command(async)]`, so a long +// paragraph does not hold the window still while it is linted, which matters here for the same +// reason it matters in spell.rs: this runs while the user is typing. + +use std::sync::{Arc, LazyLock, Mutex}; + +use harper_core::linting::{LintGroup, Linter, Suggestion}; +use harper_core::spell::FstDictionary; +use harper_core::{Dialect, Document}; + +use crate::dto::GrammarIssue; + +/// What the popover offers, which is what the spelling menu beside it offers. +const MAX_SUGGESTIONS: usize = 5; + +/// The linter and the dictionary it was built against, which `Document` needs as well. +struct Harper { + linter: LintGroup, + dict: Arc, +} + +/// Built on first use and kept for the life of the process. The `Mutex` is not about sharing: it +/// is that linting takes `&mut self`, and two paragraphs arriving at once would otherwise have +/// nowhere to queue. +static ENGINE: LazyLock> = LazyLock::new(|| Mutex::new(build_harper())); + +fn build_harper() -> Harper { + let dict = FstDictionary::curated(); + let mut linter = LintGroup::new_curated(dict.clone(), Dialect::American); + // The system checker does the spelling, and it does it better: see the note at the top. + linter.config.set_rule_enabled("SpellCheck", false); + Harper { linter, dict } +} + +/// Whether this build has a grammar engine behind it. +/// +/// A compile-time fact, answered the way `spell_available` answers its own: harper-core is a +/// dependency of this crate or it is not, and on a build where it is there is no runtime state in +/// which the engine has gone missing. Deliberately does not touch `ENGINE`, because the frontend +/// asks this once at launch and forcing the model load here would put the whole of it in front of +/// the first window for an answer that is already known. +#[tauri::command] +pub fn grammar_available() -> Result { + Ok(true) +} + +/// Every grammar problem in one run of text, with offsets in characters counted from the start of +/// that run. +/// +/// Like `spell_check`, it is told about a paragraph and answers about that paragraph: it has no +/// idea a document exists, and the caller adds its own base offset afterwards. Harper counts in +/// characters already, so unlike the spelling path there is no conversion here and nowhere for one +/// to go wrong. +#[tauri::command(async)] +pub fn grammar_check(text: String) -> Result, String> { + let mut engine = ENGINE.lock().map_err(|e| e.to_string())?; + Ok(collect_grammar(&mut engine, &text)) +} + +fn collect_grammar(harper: &mut Harper, text: &str) -> Vec { + let chars: Vec = text.chars().collect(); + let doc = Document::new_plain_english(text, harper.dict.as_ref()); + + let mut issues = Vec::new(); + for lint in harper.linter.lint(&doc) { + // Clamped end first and then start against it, so a span this side never indexes past the + // text and never comes out inverted. Harper should not hand back either, but this is a + // foreign engine walking the user's prose and a slice with a bad pair of bounds is a panic + // rather than a wrong underline. + let end = lint.span.end.min(chars.len()); + let start = lint.span.start.min(end); + let existing: String = chars[start..end].iter().collect(); + + // A lint about nothing but whitespace is dropped, and Harper does produce them: two spaces + // between sentences are "French spaces" to it, and the suggestion is one space. There is + // nothing worth drawing there. An underline over characters that are not visible is not + // visible either, it cannot be clicked to reach the offer behind it, and on the caller's + // side those spaces are frequently not the user's at all: src/editor/proofing.ts blanks + // inline code spans and leaf nodes into runs of spaces of the same width so that the words + // either side keep their positions, and a checker underlining those would be underlining + // exactly the thing that file went to the trouble of refusing to send. + if existing.trim().is_empty() { + continue; + } + + let mut suggestions = Vec::new(); + for suggestion in &lint.suggestions { + match suggestion { + Suggestion::ReplaceWith(replacement) => { + suggestions.push(replacement.iter().collect()) + } + // An insertion is offered as the whole of what the span would become, because the + // popover replaces the underlined text with whatever is chosen and knows nothing + // about the shape of the edit behind it. + Suggestion::InsertAfter(insertion) => { + suggestions.push(format!("{existing}{}", insertion.iter().collect::())) + } + Suggestion::Remove => suggestions.push(String::new()), + } + } + suggestions.truncate(MAX_SUGGESTIONS); + + issues.push(GrammarIssue { + start, + end, + // Harper's own name for the category the rule falls into, which is what the popover + // shows above the message so a correction can be judged before it is taken. + kind: format!("{:?}", lint.lint_kind), + message: lint.message, + suggestions, + }); + } + issues +} diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 90dd99a..f7c58f0 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1,11 +1,15 @@ pub mod dto; +pub mod fonts; pub mod fs; +pub mod grammar; pub mod index; mod library; #[cfg(target_os = "macos")] mod macspell; +pub mod pdf; pub mod spell; pub mod watch; +pub mod writingtools; use std::sync::Mutex; @@ -57,6 +61,9 @@ fn build_menu(handle: &tauri::AppHandle) -> tauri::Result let save = MenuItemBuilder::with_id("save", "Save") .accelerator("CmdOrCtrl+S") .build(handle)?; + let export_pdf = MenuItemBuilder::with_id("export-pdf", "Export as PDF…") + .accelerator("CmdOrCtrl+Shift+E") + .build(handle)?; let close_folder = MenuItemBuilder::with_id("close-folder", "Close Folder").build(handle)?; let check_updates = MenuItemBuilder::with_id("check-updates", "Check for Updates…").build(handle)?; @@ -99,6 +106,7 @@ fn build_menu(handle: &tauri::AppHandle) -> tauri::Result &command_palette, &PredefinedMenuItem::separator(handle)?, &save, + &export_pdf, &PredefinedMenuItem::separator(handle)?, &close_folder, &PredefinedMenuItem::separator(handle)?, @@ -114,6 +122,7 @@ fn build_menu(handle: &tauri::AppHandle) -> tauri::Result .item(&command_palette) .item(&PredefinedMenuItem::separator(handle)?) .item(&save) + .item(&export_pdf) .item(&PredefinedMenuItem::separator(handle)?) .item(&close_folder) .build()?; @@ -140,6 +149,28 @@ fn build_menu(handle: &tauri::AppHandle) -> tauri::Result app_submenu.insert(&settings, 3)?; app_submenu.insert(&PredefinedMenuItem::separator(handle)?, 4)?; } + // Writing Tools, which is the system's and needs macOS 15.1 with Apple Intelligence on. + // + // These two rows carry the chords and Apple's own Writing Tools rows deliberately do not, + // which is the opposite of what the sibling app does. AppKit performs a key equivalent by + // firing its menu item directly, so a chord on the system's row would reach Writing Tools + // without passing the selection guard in src/editor/writing.ts, and that guard exists + // because a rewrite spanning a link loses its address and one spanning two table cells + // widens the table. These ids go through the command table, so they meet the guard. + // Exactly one menu item owns each chord either way; this is which one. + if let Some(edit) = find_submenu("Edit") { + let proofread = MenuItemBuilder::with_id("writing-proofread", "Proofread") + .accelerator("Shift+Alt+F") + .build(handle)?; + let rewrite = MenuItemBuilder::with_id("writing-rewrite", "Rewrite") + .accelerator("Shift+Alt+R") + .build(handle)?; + edit.append_items(&[ + &PredefinedMenuItem::separator(handle)?, + &proofread, + &rewrite, + ])?; + } if let Some(view) = find_submenu("View") { let toggle_sidebar = MenuItemBuilder::with_id("toggle-sidebar", "Toggle Sidebar") .accelerator("CmdOrCtrl+\\") @@ -193,6 +224,10 @@ pub fn run() { if let Err(e) = index::open(app.handle()) { eprintln!("failed to open the search index: {e}"); } + // The Writing Tools submenu is AppKit's, not build_menu's: the system inserts it into Edit + // on its own terms, so when it is there to label is writingtools.rs's problem and not this + // file's. One call, whatever it decides to wait for. + writingtools::install(app.handle()); Ok(()) }); @@ -216,6 +251,9 @@ pub fn run() { | "toggle-sidebar" | "check-updates" | "report-issue" + | "export-pdf" + | "writing-proofread" + | "writing-rewrite" ) { app.emit("menu-action", event.id().0.as_str()).ok(); } @@ -253,6 +291,12 @@ pub fn run() { spell::spell_learn, spell::spell_unlearn, spell::spell_available, + writingtools::writing_available, + writingtools::writing_run, + pdf::pdf_compile, + pdf::pdf_write, + grammar::grammar_available, + grammar::grammar_check, ]) .run(context) .expect("error while running Margin Docs"); diff --git a/src-tauri/src/pdf.rs b/src-tauri/src/pdf.rs new file mode 100644 index 0000000..c488c9d --- /dev/null +++ b/src-tauri/src/pdf.rs @@ -0,0 +1,387 @@ +// PDF export: Typst source in, PDF bytes out, compiled in this process. +// +// Nothing about this touches the user's markdown. The converter that produces the source lives in +// src/export/typst.ts and reads the ProseMirror document; this module compiles what it is given +// and writes the result where a native save panel pointed. A document that has never been saved +// exports exactly as well as one that has. +// +// The compiler sees no filesystem and no network. Everything it can open is put in front of it by +// hand: the nine bundled faces, the images this call was handed, and a vendored copy of mitex +// served at `/mitex/`. That is the whole world, so a document cannot make the exporter fetch a +// package, and the export works on a machine that has never been online. + +use std::path::Path; + +use base64::engine::general_purpose::STANDARD; +use base64::Engine; +use tauri::{Emitter, Manager}; +use typst::diag::{Severity, SourceDiagnostic, Warned}; +use typst::layout::PagedDocument; +use typst_as_lib::TypstEngine; + +use crate::dto::{ImageInput, PdfWarning}; + +// The faces a document is set in, one file per weight and slope. +// +// Not the variable fonts in public/fonts/ that the editor itself renders with, and that is not +// duplication for its own sake: Typst does not support a variable axis, warns that it does not, and +// lays the text out at the default instance regardless of the weight asked for. Every heading, every +// bold run and every callout label would come out at 400, which is a PDF where the hierarchy the +// author can see on screen is gone. These nine are static instances cut from those same four files; +// src-tauri/fonts/PROVENANCE.md is how, and is what to repeat when a face is updated. +static FACES: [&[u8]; 9] = [ + include_bytes!("../fonts/Literata-Regular.ttf"), + include_bytes!("../fonts/Literata-SemiBold.ttf"), + include_bytes!("../fonts/Literata-Bold.ttf"), + include_bytes!("../fonts/Literata-Italic.ttf"), + include_bytes!("../fonts/Literata-BoldItalic.ttf"), + include_bytes!("../fonts/HankenGrotesk-Regular.ttf"), + include_bytes!("../fonts/HankenGrotesk-Bold.ttf"), + include_bytes!("../fonts/HankenGrotesk-Italic.ttf"), + include_bytes!("../fonts/HankenGrotesk-BoldItalic.ttf"), +]; + +// mitex 0.2.5, vendored under src-tauri/vendor/mitex with its LICENSE, and served as ordinary +// paths under `/mitex/` rather than through Typst's package system. A package spec would mean a +// download on first export and a cache directory to keep, for a dependency that is 380K and never +// changes. Every file in the package has to be here: lib.typ imports mitex.typ relatively, that +// imports specs/mod.typ, and mitex.typ loads the wasm module beside it. +static MITEX_LIB: &str = include_str!("../vendor/mitex/lib.typ"); +static MITEX_MAIN: &str = include_str!("../vendor/mitex/mitex.typ"); +static MITEX_SPECS: &str = include_str!("../vendor/mitex/specs/mod.typ"); +static MITEX_PRELUDE: &str = include_str!("../vendor/mitex/specs/prelude.typ"); +static MITEX_LATEX: &str = include_str!("../vendor/mitex/specs/latex/standard.typ"); +static MITEX_WASM: &[u8] = include_bytes!("../vendor/mitex/mitex.wasm"); + +/// The import path the generated source uses, and the contract with src/export/typst.ts: +/// `#import "/mitex/lib.typ": mitex, mi`. +const MITEX_ROOT: &str = "/mitex/"; + +/// What `/mitex/lib.typ` answers with on a second attempt, after a formula stopped the first one. +/// +/// It keeps the names the generated source imports and sets every formula as the LaTeX the user +/// wrote, which is the readable thing to do with a formula nothing can typeset. Nothing here loads +/// the wasm module, because that is what failed. +static MITEX_PLAIN_LIB: &str = r#"#let mitex-source(it) = { + if type(it) == str { it } else if type(it) == content and it.has("text") { it.text } else { repr(it) } +} +#let mi(it, ..args) = raw(mitex-source(it)) +#let mimath(it, ..args) = raw(mitex-source(it)) +#let mitext(it) = raw(mitex-source(it)) +#let mitex(it, mode: "math", ..args) = block(raw(mitex-source(it))) +#let mitex-convert(it, mode: "math", spec: none) = mitex-source(it) +"#; + +/// A 1x1 transparent image in each format Typst picks from a file extension, so that an image the +/// exporter could not read leaves a gap on the page rather than killing the export. +/// +/// One per format because Typst trusts the extension over the bytes: handing PNG bytes to +/// `#image("photo.jpg")` is a decode error, which is the hard failure this exists to avoid. The +/// formats Typst does not recognise from an extension fall through to sniffing the data, so PNG is +/// the right default for those. +const PLACEHOLDER_PNG: &str = + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR4nGP4//8/AwAI/AL+p5qgoAAAAABJRU5ErkJggg=="; +const PLACEHOLDER_JPEG: &str = "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////wAALCAABAAEBAREA/8QAFAABAAAAAAAAAAAAAAAAAAAAA//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAD8AR//Z"; +const PLACEHOLDER_GIF: &str = "R0lGODdhAQABAIEAAP///wAAAAAAAAAAACwAAAAAAQABAAAIBAABBAQAOw=="; +const PLACEHOLDER_WEBP: &str = + "UklGRkAAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAIAAAAAAFZQOCAYAAAAMAEAnQEqAQABAAFAJiWkAANwAP789AAA"; +const PLACEHOLDER_SVG: &str = ""; + +fn placeholder_for(path: &str) -> Vec { + let extension = Path::new(path) + .extension() + .and_then(|e| e.to_str()) + .unwrap_or_default() + .to_lowercase(); + let encoded = match extension.as_str() { + "jpg" | "jpeg" => PLACEHOLDER_JPEG, + "gif" => PLACEHOLDER_GIF, + "webp" => PLACEHOLDER_WEBP, + "svg" | "svgz" => return PLACEHOLDER_SVG.as_bytes().to_vec(), + _ => PLACEHOLDER_PNG, + }; + STANDARD.decode(encoded).unwrap_or_default() +} + +/// The bytes of one image, either the ones that came with the request or the ones on disk. +/// +/// A read is guarded exactly as every read in fs.rs is: the path is resolved and has to land +/// inside a folder the user actually opened. A document is untrusted input, `![](../../../.ssh/id_rsa)` +/// is a link anybody can type, and an exporter is not where this app starts reading outside an +/// open folder. The path has to be absolute for that check to mean anything, which is why the +/// converter sends an absolute one for any image it has no bytes for. +fn image_bytes(image: &ImageInput, root_paths: &[String]) -> Result, String> { + match &image.data { + Some(data) => STANDARD + .decode(data.as_bytes()) + .map_err(|e| format!("could not decode \"{}\": {e}", image.path)), + None => { + let path = crate::fs::resolve_in_roots(root_paths, &image.path)?; + std::fs::read(&path).map_err(|e| format!("could not read \"{}\": {e}", image.path)) + } + } +} + +fn font_list(families: &[String], last_resort: &str) -> String { + let mut names: Vec = families.iter().map(|f| format!("\"{f}\"")).collect(); + names.push(format!("\"{last_resort}\"")); + format!("({})", names.join(", ")) +} + +/// The only Typst this module writes, and it names font families and nothing else. +/// +/// It belongs here rather than in the converter because which faces the compiler can see is this +/// module's business: nine bundled, plus whichever monospace and math families the machine turned +/// out to have. src/export/typst.ts names none of them for exactly that reason. +/// +/// Math is the one that cannot be left alone. Typst sets every equation to the single family +/// "New Computer Modern Math" and switches font fallback off while it does it, so on a machine +/// without that family one formula is a hard compile error rather than a warning. Naming a list is +/// what makes a formula typeset at all, and Literata closes both lists so that a machine with none +/// of the candidates gets a page that reads badly and a warning saying so, instead of no PDF. +/// +/// Only families that are actually installed are named, because Typst warns once for every family +/// it was asked for and could not find, and a hopeful list would end every export with a toast +/// about fonts nobody chose. +fn font_preamble(fallbacks: &crate::fonts::Fallbacks) -> String { + format!( + "#set text(font: \"Literata\")\n\ + #show raw: set text(font: {})\n\ + #show math.equation: set text(font: {})\n", + font_list(&fallbacks.monospace, "Literata"), + font_list(&fallbacks.math, "Literata"), + ) +} + +/// Adds a warning, or bumps the count of one already there. +/// +/// Forty formulas that would not typeset are one problem and not forty toasts, and the same +/// message arriving twice is the overwhelmingly common case: one broken construct repeated down a +/// document. +fn note(warnings: &mut Vec, kind: &str, message: String) { + if let Some(existing) = warnings + .iter_mut() + .find(|w| w.kind == kind && w.message == message) + { + existing.count += 1; + return; + } + warnings.push(PdfWarning { + kind: kind.to_string(), + message, + count: 1, + }); +} + +fn in_mitex(span: typst::syntax::Span) -> bool { + span.id().is_some_and(|id| { + id.vpath() + .as_rooted_path() + .to_string_lossy() + .starts_with(MITEX_ROOT) + }) +} + +fn touches_mitex(diagnostic: &SourceDiagnostic) -> bool { + in_mitex(diagnostic.span) || diagnostic.trace.iter().any(|point| in_mitex(point.span)) +} + +/// Which kind a diagnostic gets, or `None` for one the user should never see. +/// +/// A warning raised inside the vendored mitex sources with nothing in its trace leading back out +/// of them is mitex talking about itself: a deprecation in a pinned copy of a dependency, the same +/// on every machine and in every document, and nothing anybody reading a toast can act on. One +/// with the document in its trace is a formula that did not come out right, which is a "math" +/// warning and is worth saying. +fn kind_for(diagnostic: &SourceDiagnostic) -> Option<&'static str> { + if !in_mitex(diagnostic.span) { + return Some("typst"); + } + if diagnostic.trace.iter().any(|point| !in_mitex(point.span)) { + return Some("math"); + } + None +} + +/// One pass over the compiler. `lib` is what `/mitex/lib.typ` answers with, which is the whole +/// difference between a formula that typesets and one that is shown as the source the user wrote. +/// +/// The one error in this crate that is not a `String`, and deliberately. The caller has to ask +/// whether the failure came from inside mitex before it decides whether a second attempt is worth +/// making, and that question is asked of the diagnostics' spans. Formatting them first would throw +/// away the only thing the answer depends on. +fn compile_once( + source: &str, + lib: &str, + binaries: &[(&str, Vec)], + fonts: &[Vec], +) -> Result<(Vec, Vec), Vec> { + let engine = TypstEngine::builder() + .main_file(source) + .fonts(fonts.iter().map(|font| font.as_slice())) + .with_static_source_file_resolver([ + ("/mitex/lib.typ", lib), + ("/mitex/mitex.typ", MITEX_MAIN), + ("/mitex/specs/mod.typ", MITEX_SPECS), + ("/mitex/specs/prelude.typ", MITEX_PRELUDE), + ("/mitex/specs/latex/standard.typ", MITEX_LATEX), + ]) + .with_static_file_resolver(binaries.iter().map(|(path, bytes)| (*path, bytes.as_slice()))) + .build(); + + let Warned { output, warnings } = engine.compile(); + let document: PagedDocument = output.map_err(|e| match e { + typst_as_lib::TypstAsLibError::TypstSource(diagnostics) => diagnostics.into_iter().collect(), + other => vec![SourceDiagnostic::error( + typst::syntax::Span::detached(), + other.to_string(), + )], + })?; + let bytes = typst_pdf::pdf(&document, &Default::default()) + .map_err(|d| d.into_iter().collect::>())?; + Ok((bytes, warnings.into_iter().collect())) +} + +/// Compiles Typst source to PDF bytes, with whatever the compiler had to work around. +/// +/// Separate from the command so a test can reach it: a `#[tauri::command]` taking an `AppHandle` +/// needs a running app, and none of the work below wants one. +pub fn compile( + source: String, + images: &[ImageInput], + root_paths: &[String], +) -> Result<(Vec, Vec), String> { + let mut warnings: Vec = Vec::new(); + + let mut binaries: Vec<(&str, Vec)> = Vec::with_capacity(images.len() + 1); + for image in images { + match image_bytes(image, root_paths) { + Ok(bytes) => binaries.push((image.path.as_str(), bytes)), + Err(e) => { + note(&mut warnings, "image", e); + binaries.push((image.path.as_str(), placeholder_for(&image.path))); + } + } + } + binaries.push(("/mitex/mitex.wasm", MITEX_WASM.to_vec())); + + // The two families this app does not bundle, a monospace for code blocks and a math face for + // formulas, come off the system. Neither is shown in the editor, both are large, and shipping a + // mono nobody ever sees on screen so that a code block matches across machines is a trade this + // project has decided against. + let mut fallbacks = crate::fonts::fallbacks(); + let mut fonts: Vec> = FACES.iter().map(|face| face.to_vec()).collect(); + fonts.append(&mut fallbacks.fonts); + + let source = format!("{}{source}", font_preamble(&fallbacks)); + + let failure = match compile_once(&source, MITEX_LIB, &binaries, &fonts) { + Ok((bytes, diagnostics)) => { + for diagnostic in &diagnostics { + if let Some(kind) = kind_for(diagnostic) { + note(&mut warnings, kind, diagnostic.message.to_string()); + } + } + return Ok((bytes, warnings)); + } + Err(failure) => failure, + }; + + // mitex turns LaTeX into Typst by running a wasm module over it, and a formula it cannot parse + // is a hard error rather than a bad-looking equation. One `$\frac{$` a user typed halfway down + // a page of notes would otherwise cost them the entire export, so the second attempt serves a + // stand-in `/mitex/lib.typ` that sets every formula as the source the user actually wrote. The + // page reads worse and the warning says so, which is a trade the user can act on. + if !failure.iter().any(touches_mitex) { + return Err(format_diagnostics(&failure)); + } + let (bytes, diagnostics) = compile_once(&source, MITEX_PLAIN_LIB, &binaries, &fonts) + // The first failure is the one worth reading: the second is whatever the stand-in tripped + // over on the way, and the formula that started it is named in the first. + .map_err(|_| format_diagnostics(&failure))?; + + note( + &mut warnings, + "math", + "a formula could not be typeset, so every formula is shown as the source it was written in" + .to_string(), + ); + for diagnostic in &diagnostics { + if let Some(kind) = kind_for(diagnostic) { + note(&mut warnings, kind, diagnostic.message.to_string()); + } + } + Ok((bytes, warnings)) +} + +/// Compiles Typst source to PDF bytes. Warnings, when there are any, arrive separately on the +/// `pdf-warnings` event, because a compile answers with raw bytes and has nowhere to put a second +/// value. +#[tauri::command(async)] +pub fn pdf_compile( + app: tauri::AppHandle, + source: String, + images: Vec, +) -> Result { + // The same gate `fs::checked` puts in front of every other read, reached the same way it is: + // the open roots out of shared state, then `resolve_in_roots`. The lock is dropped before the + // compile, which is the slowest thing this app does and has no business holding it. + let roots = app.state::(); + let root_paths: Vec = { + let open = roots.0.lock().map_err(|e| e.to_string())?; + open.iter().map(|root| root.path.clone()).collect() + }; + + let (bytes, warnings) = compile(source, &images, &root_paths)?; + if !warnings.is_empty() { + app.emit("pdf-warnings", warnings).ok(); + } + Ok(tauri::ipc::Response::new(bytes)) +} + +/// Writes the finished file to wherever the save panel pointed. +#[tauri::command(async)] +pub fn pdf_write(path: String, bytes: Vec) -> Result<(), String> { + // No root guard here, deliberately, and the next person to read this will assume that is a + // bug. It is not: this path came from the user through a native save panel, so it is the + // user's own choice of destination and not something a document said. The guard exists to stop + // an untrusted document naming a path, and saving somewhere outside every open folder is the + // ordinary case rather than the attack. + // + // What that argument does not cover is a destination that is already one of the user's + // documents. `atomic_write` replaces whatever is there, so a `.md` name typed into the save + // panel is the one way an export can destroy markdown, and this app does not get to be the + // reason a document is gone. The save panel carries a PDF filter and AppKit usually appends + // `.pdf` to a name typed with another extension, but that is the panel being careful rather + // than this command, and the promise is not the panel's to keep. + // + // Only a file that is already there is refused. Writing a document-shaped name that nothing + // holds yet is odd rather than destructive, and the user can see what they typed. + let target = Path::new(&path); + if target.is_file() && matches!(crate::fs::kind_for(target, false), "markdown" | "text") { + let name = target + .file_name() + .map(|n| n.to_string_lossy().into_owned()) + .unwrap_or_else(|| path.clone()); + return Err(format!("{name} is a document. A PDF cannot be written over it.")); + } + crate::fs::atomic_write(target, &bytes) +} + +fn format_diagnostics(diagnostics: &[SourceDiagnostic]) -> String { + diagnostics + .iter() + .map(|diagnostic| { + let kind = match diagnostic.severity { + Severity::Error => "error", + Severity::Warning => "warning", + }; + let mut message = format!("{kind}: {}", diagnostic.message); + for hint in &diagnostic.hints { + message.push_str(&format!("\n hint: {hint}")); + } + message + }) + .collect::>() + .join("\n") +} diff --git a/src-tauri/src/writingtools.rs b/src-tauri/src/writingtools.rs new file mode 100644 index 0000000..ce00b60 --- /dev/null +++ b/src-tauri/src/writingtools.rs @@ -0,0 +1,146 @@ +// Writing Tools, which is Apple's and not this app's. +// +// There is no API to call. The system puts a "Writing Tools" submenu on the Edit menu of any app +// with an editable text view, and the only way in from here is to find that item on the live +// NSMenu and perform it. What happens next happens in the webview, to the DOM, without asking: +// that is the whole risk in this feature, docs/architecture.md is where the seam is described, and +// src/editor/writing.ts is where the selection that may be handed to one is decided. + +#[cfg(target_os = "macos")] +use std::sync::atomic::{AtomicBool, Ordering}; + +/// What the main thread last saw. Read below by a command that has no handle to hop with. +#[cfg(target_os = "macos")] +static SUBMENU_SEEN: AtomicBool = AtomicBool::new(false); + +#[cfg(target_os = "macos")] +mod mac { + use objc2::rc::Retained; + use objc2::MainThreadMarker; + use objc2_app_kit::{NSApplication, NSMenu, NSMenuItem}; + use objc2_foundation::NSArray; + + fn submenu_named(items: &NSArray, title: &str) -> Option> { + for i in 0..items.count() { + let item = items.objectAtIndex(i); + if item.title().to_string() == title { + return item.submenu(); + } + } + None + } + + fn edit_menu(mtm: MainThreadMarker) -> Option> { + let main = NSApplication::sharedApplication(mtm).mainMenu()?; + for i in 0..main.numberOfItems() { + let Some(item) = main.itemAtIndex(i) else { continue }; + let Some(submenu) = item.submenu() else { continue }; + if submenu.title().to_string() == "Edit" || item.title().to_string() == "Edit" { + return Some(submenu); + } + } + None + } + + pub fn writing_tools_menu(mtm: MainThreadMarker) -> Option> { + submenu_named(&edit_menu(mtm)?.itemArray(), "Writing Tools") + } + + /// Whether the submenu is on the Edit menu right now, and false off the main thread, where + /// AppKit may not be asked. + pub fn available() -> bool { + MainThreadMarker::new().is_some_and(|mtm| writing_tools_menu(mtm).is_some()) + } + + /// Fires one row of the submenu by its title, which is English because the frontend has no way + /// to know what this Mac calls it. A row that is not found is an error rather than a no-op: a + /// gesture that does nothing and says nothing is the worst answer available. + pub fn perform(tool: &str) -> Result<(), String> { + let Some(mtm) = MainThreadMarker::new() else { + return Err("Writing Tools has to be performed on the main thread.".into()); + }; + let Some(menu) = writing_tools_menu(mtm) else { + return Err("This Mac has no Writing Tools menu.".into()); + }; + let items = menu.itemArray(); + for i in 0..items.count() { + if items.objectAtIndex(i).title().to_string() == tool { + menu.performActionForItemAtIndex(i as isize); + return Ok(()); + } + } + Err(format!("The Writing Tools menu has no {tool} item.")) + } +} + +/// Called once from lib.rs's `setup`, which is early enough. +/// +/// The sibling app looks for the submenu here and it was worth checking rather than copying, +/// because the submenu is AppKit's and nothing in this process puts it there. Measured on macOS +/// 26.5: at `setup`, before the webview has loaded a page, the Edit menu already carries "Writing +/// Tools" with Proofread and Rewrite on it, so there is nothing to wait for and no window event to +/// hang this off. A Mac without Apple Intelligence has no submenu at any moment, which is the same +/// code path. +/// +/// This deliberately does not put Shift+Option+F and Shift+Option+R on Apple's own rows, which is +/// what the sibling does. AppKit performs a key equivalent by firing the menu item directly, so a +/// chord on the system's row reaches Writing Tools without passing the selection guard in +/// src/editor/writing.ts, and that guard is refusing selections that corrupt the file: a rewrite +/// spanning a link loses its address, one spanning two table cells widens the table. The chords are +/// on this app's own Edit rows instead, in lib.rs, where they route through the command table and +/// meet the guard. Exactly one menu item still owns each chord. +pub fn install(_app: &tauri::AppHandle) { + #[cfg(target_os = "macos")] + SUBMENU_SEEN.store(mac::available(), Ordering::Relaxed); +} + +/// Whether this machine can actually run a Writing Tool. Writing Tools needs macOS 15.1 and Apple +/// Intelligence turned on, and `minimumSystemVersion` for this app is 10.15, so an unavailable menu +/// is the ordinary case and not an error: the frontend turns it into a toast rather than a button +/// that silently does nothing. +/// +/// Answered from the live menu rather than from a version number, because the version is necessary +/// and not sufficient: the feature is off until the user turns Apple Intelligence on, and the +/// submenu is the only thing that knows. This signature carries no `AppHandle` to hop threads with, +/// so off the main thread it answers with what `install` saw at launch instead of guessing. +#[tauri::command] +pub fn writing_available() -> Result { + #[cfg(target_os = "macos")] + { + if mac::available() { + SUBMENU_SEEN.store(true, Ordering::Relaxed); + return Ok(true); + } + Ok(SUBMENU_SEEN.load(Ordering::Relaxed)) + } + #[cfg(not(target_os = "macos"))] + { + Ok(false) + } +} + +/// Fires one item on the system's Writing Tools submenu, by its English title. +#[tauri::command] +pub fn writing_run(app: tauri::AppHandle, tool: String) -> Result<(), String> { + #[cfg(target_os = "macos")] + { + use objc2::MainThreadMarker; + // Performed here when this is already the main thread, so a missing row comes back as an + // error the frontend can say out loud. The hop is the fallback and it cannot report: waiting + // on its answer would deadlock exactly when the wait was unnecessary. + if MainThreadMarker::new().is_some() { + return mac::perform(&tool); + } + app.run_on_main_thread(move || { + if let Err(e) = mac::perform(&tool) { + eprintln!("writing tools: {e}"); + } + }) + .map_err(|e| e.to_string()) + } + #[cfg(not(target_os = "macos"))] + { + let _ = (app, tool); + Err("Writing Tools is a macOS feature.".into()) + } +} diff --git a/src-tauri/stubs/burn-cuda/Cargo.toml b/src-tauri/stubs/burn-cuda/Cargo.toml new file mode 100644 index 0000000..c0b4a3c --- /dev/null +++ b/src-tauri/stubs/burn-cuda/Cargo.toml @@ -0,0 +1,21 @@ +# Empty stand-in for `burn-cuda`, used via [patch.crates-io] in ../../Cargo.toml. +# harper-core pulls burn-cuda only as an optional, disabled CUDA backend. This stub keeps +# the heavy cubecl + tracel-llvm subtree out of the dependency graph. Never compiled. +# The feature names below must match the ones `burn` references via `burn-cuda?/...` so that +# Cargo's feature validation passes; they are all empty no-ops. +[package] +name = "burn-cuda" +version = "0.19.1" +edition = "2021" +publish = false + +[lib] +path = "src/lib.rs" + +[features] +default = [] +std = [] +doc = [] +fusion = [] +autotune = [] +autotune-checks = [] diff --git a/src-tauri/stubs/burn-cuda/src/lib.rs b/src-tauri/stubs/burn-cuda/src/lib.rs new file mode 100644 index 0000000..5aa8e3c --- /dev/null +++ b/src-tauri/stubs/burn-cuda/src/lib.rs @@ -0,0 +1 @@ +// Intentionally empty. See Cargo.toml: this stubs out the disabled `burn-cuda` backend. diff --git a/src-tauri/stubs/cubecl-cpu/Cargo.toml b/src-tauri/stubs/cubecl-cpu/Cargo.toml new file mode 100644 index 0000000..6cc23ab --- /dev/null +++ b/src-tauri/stubs/cubecl-cpu/Cargo.toml @@ -0,0 +1,17 @@ +# Empty stand-in for `cubecl-cpu`, used via [patch.crates-io] in ../../Cargo.toml. +# cubecl-cpu is the LLVM/MLIR JIT CPU runtime pulled (transitively, through burn's disabled GPU +# backends) by harper-core. It drags in the tracel-llvm / tracel-llvm-bundler crates, which build +# and bundle an LLVM toolchain and are by a wide margin the most expensive thing in the graph. +# Replacing it with this empty stub removes that whole subtree. Nothing here is ever compiled +# (GPU backends are off). +[package] +name = "cubecl-cpu" +version = "0.8.1" +edition = "2021" +publish = false + +[lib] +path = "src/lib.rs" + +[features] +default = [] diff --git a/src-tauri/stubs/cubecl-cpu/src/lib.rs b/src-tauri/stubs/cubecl-cpu/src/lib.rs new file mode 100644 index 0000000..b3248c3 --- /dev/null +++ b/src-tauri/stubs/cubecl-cpu/src/lib.rs @@ -0,0 +1 @@ +// Intentionally empty. See Cargo.toml: this stubs out the disabled cubecl-cpu JIT runtime. diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 4da20ad..afaeb36 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -41,7 +41,8 @@ "icons/icon.ico" ], "macOS": { - "minimumSystemVersion": "10.15" + "minimumSystemVersion": "10.15", + "hardenedRuntime": true } } } diff --git a/src-tauri/tests/export_writes_only_the_pdf.rs b/src-tauri/tests/export_writes_only_the_pdf.rs new file mode 100644 index 0000000..5db5d29 --- /dev/null +++ b/src-tauri/tests/export_writes_only_the_pdf.rs @@ -0,0 +1,481 @@ +// An export over a real folder of markdown, asked the same question src-tauri/tests/no_write_on_open.rs +// asks of a save: did anything in the folder move? +// +// src-tauri/tests/pdf.rs already covers what the compiler refuses and what it survives, against a +// TempDir with two files in it. That is the right shape for a question about diagnostics and the +// wrong shape for a question about bytes: a bag of files in a temporary folder cannot say that a +// folder somebody would plausibly have opened comes back from `git status` with no lines in it. So +// this suite runs against the same generated git repository the no-write suite does, built by +// tests/support/notes_repo.rs, and the oracle is the same one: `git status --porcelain`, plus a +// stat and content snapshot of every path under the root so that a rewrite with identical bytes is +// still caught. +// +// The tests share that one folder and `pristine()` resets it, so they hold a lock rather than +// needing `--test-threads=1`. Running the binary under any thread count is correct. +// +// The sharp question is at the bottom, and it is about `pdf_write` rather than about the compiler. +// `pdf_write` skips the open-roots guard on purpose, because its path came from a native save panel +// and is the user's own choice of destination. What that also means is that it will write to +// whatever it is given, and nothing on either side of the boundary checks that the destination is +// not one of the user's own documents. `a_save_panel_pointed_at_a_document_is_refused` is what +// happens then, written down so that it is a fact somebody decided rather than one nobody noticed. + +use std::collections::BTreeMap; +use std::fs; +use std::os::unix::fs::MetadataExt; +use std::path::{Path, PathBuf}; +use std::sync::{Mutex, MutexGuard}; + +use base64::engine::general_purpose::STANDARD; +use base64::Engine; +use margin_docs_lib::dto::ImageInput; +use margin_docs_lib::pdf::{compile, pdf_write}; +use tempfile::TempDir; + +#[path = "support/notes_repo.rs"] +mod notes_repo; + +// ---------------------------------------------------------------- fixture + +/// One test in the folder at a time. The suite shares a single repository and `pristine()` throws +/// away whatever the last test did to it, so this is what makes the sharing safe under `cargo +/// test`'s default thread count instead of a flag in CI that somebody has to remember. +static FIXTURE: Mutex<()> = Mutex::new(()); + +/// Back to the committed state, with the lock held for as long as the guard lives. +/// +/// A poisoned lock is taken anyway: it means an earlier test panicked, which is a failure that has +/// already been reported, and refusing to run the rest of the suite on top of it turns one red test +/// into a file of them. +fn pristine() -> (MutexGuard<'static, ()>, PathBuf) { + let guard = FIXTURE.lock().unwrap_or_else(|e| e.into_inner()); + let root = notes_repo::path().to_path_buf(); + assert!( + root.join(".git").is_dir(), + "the fixture repo is missing: {}", + root.display() + ); + notes_repo::git(&["reset", "--hard", "-q"]); + notes_repo::git(&["clean", "-fdq"]); + let status = notes_repo::git(&["status", "--porcelain"]); + assert!( + status.is_empty(), + "the fixture repo did not start clean:\n{status}" + ); + (guard, root) +} + +fn git_status() -> String { + notes_repo::git(&["status", "--porcelain"]) +} + +fn quoted(status: &str) -> String { + if status.is_empty() { + " ".to_string() + } else { + status + .lines() + .map(|line| format!(" {line}")) + .collect::>() + .join("\n") + } +} + +fn assert_clean(label: &str) { + let status = git_status(); + println!(" [{label}] git status --porcelain:\n{}", quoted(&status)); + assert!(status.is_empty(), "{label} left git dirty:\n{status}"); +} + +// ---------------------------------------------------------------- snapshots + +/// Enough of a file to notice a rewrite that put the same bytes back. `git status` cannot see one +/// of those and it is exactly what an exporter tidying up after itself would leave. +#[derive(Clone, PartialEq, Eq, Debug)] +struct Stamp { + kind: &'static str, + len: u64, + mtime: (i64, i64), + ino: u64, + /// Content hash, for everything outside the vendored `node_modules`, where the stat is already + /// conclusive and hashing 13,000 files on every snapshot is not worth the second it costs. + hash: Option, +} + +type Snapshot = BTreeMap; + +fn fnv1a(bytes: &[u8]) -> u64 { + let mut hash: u64 = 0xcbf2_9ce4_8422_2325; + for byte in bytes { + hash ^= *byte as u64; + hash = hash.wrapping_mul(0x0000_0100_0000_01b3); + } + hash +} + +/// Every path under `root`, dotfiles, .git and node_modules included. +fn snapshot(root: &Path) -> Snapshot { + let mut out = Snapshot::new(); + walk(root, root, &mut out); + out +} + +fn walk(root: &Path, dir: &Path, out: &mut Snapshot) { + let Ok(entries) = fs::read_dir(dir) else { + return; + }; + for entry in entries.flatten() { + let path = entry.path(); + let rel = path + .strip_prefix(root) + .unwrap_or(&path) + .to_string_lossy() + .into_owned(); + let Ok(meta) = fs::symlink_metadata(&path) else { + continue; + }; + let kind = if meta.is_dir() { + "dir" + } else if meta.is_symlink() { + "link" + } else { + "file" + }; + let cheap = rel.starts_with("node_modules/") || rel.starts_with(".git/"); + out.insert( + rel, + Stamp { + kind, + len: meta.len(), + mtime: (meta.mtime(), meta.mtime_nsec()), + ino: meta.ino(), + hash: if kind == "file" && !cheap { + fs::read(&path).ok().map(|bytes| fnv1a(&bytes)) + } else { + None + }, + }, + ); + if meta.is_dir() { + walk(root, &path, out); + } + } +} + +/// What moved between two snapshots, ignoring nothing. +fn changes(before: &Snapshot, after: &Snapshot) -> (Vec, Vec, Vec) { + let mut added = Vec::new(); + let mut removed = Vec::new(); + let mut changed = Vec::new(); + for (path, stamp) in after { + match before.get(path) { + None => added.push(path.clone()), + Some(was) if was != stamp => { + changed.push(format!("{path}\n was {was:?}\n now {stamp:?}")) + } + Some(_) => {} + } + } + for path in before.keys() { + if !after.contains_key(path) { + removed.push(path.clone()); + } + } + (added, removed, changed) +} + +fn assert_untouched(label: &str, before: &Snapshot, after: &Snapshot) { + let (added, removed, changed) = changes(before, after); + assert!( + added.is_empty() && removed.is_empty() && changed.is_empty(), + "{label} touched the folder\n added: {added:?}\n removed: {removed:?}\n changed:\n {}", + changed.join("\n ") + ); + println!(" [{label}] {} paths, none touched", before.len()); +} + +/// The same, allowing exactly the paths named to appear and the folders holding them to have been +/// written into. A PDF exported next to the documents is a new file, and a new file is a new mtime +/// on its parent directory; nothing else is allowed to move. +fn assert_only_added(label: &str, before: &Snapshot, after: &Snapshot, expected: &[&str]) { + let (added, removed, changed) = changes(before, after); + assert_eq!(added, expected, "{label} added something unexpected"); + assert!(removed.is_empty(), "{label} removed {removed:?}"); + let parents: Vec = expected + .iter() + .map(|p| match p.rfind('/') { + Some(at) => p[..at].to_string(), + None => String::new(), + }) + .collect(); + let unexpected: Vec<&String> = changed + .iter() + .filter(|entry| { + let path = entry.lines().next().unwrap_or_default(); + !parents.iter().any(|parent| parent == path) + }) + .collect(); + assert!( + unexpected.is_empty(), + "{label} changed more than the folder it wrote into:\n {}", + unexpected + .iter() + .map(|s| s.as_str()) + .collect::>() + .join("\n ") + ); + println!(" [{label}] added {expected:?} and moved nothing else"); +} + +// ---------------------------------------------------------------- the document + +/// The head of what src/export/typst.ts writes: the mitex import that is the contract between the +/// converter and src-tauri/src/pdf.rs, and set rules naming no font, because which faces exist is +/// the backend's business. +const PREAMBLE: &str = r#"#import "/mitex/lib.typ": mitex, mi +#set document(title: "Handbook") +#set page(paper: "a4", margin: 2cm) +#set text(size: 11pt, lang: "en") +"#; + +/// A drawn mermaid diagram as it crosses the boundary: SVG from the webview, with no file behind it. +const DIAGRAM: &[u8] = + br##""##; + +/// The whole export, as the converter would have written it for a document in this folder: a +/// picture that is a real file inside the open root, a drawn diagram that is bytes, a table and a +/// formula. Every one of those is a path the exporter does extra work on, and three of them mean +/// the compiler opening something. +fn document_from(root: &Path) -> (String, Vec) { + let picture = root.join("assets/logo.png"); + assert!(picture.is_file(), "the fixture has an asset to point at"); + + let source = format!( + "{PREAMBLE} += The handbook + +Prose, then a picture that is a file in the open folder. + +#image(\"{}\") + +#figure(image(\"/inline/diagram-1.svg\")) + +#table(columns: 2, [region], [total], [north], [12]) + +Inline #mi(\"a^2 + b^2 = c^2\") and a display one: + +#mitex(\"\\\\frac{{1}}{{2}} \\\\int_0^1 x^2 dx\") +", + picture.display() + ); + + let images = vec![ + ImageInput { + path: picture.to_string_lossy().into_owned(), + data: None, + }, + ImageInput { + path: "/inline/diagram-1.svg".to_string(), + data: Some(STANDARD.encode(DIAGRAM)), + }, + ]; + (source, images) +} + +fn roots_of(root: &Path) -> Vec { + vec![root.to_string_lossy().into_owned()] +} + +// ================================================================ compiling + +#[test] +fn compiling_a_document_out_of_a_real_folder_writes_nothing_in_it() { + let (_lock, root) = pristine(); + let (source, images) = document_from(&root); + + let before = snapshot(&root); + let (bytes, warnings) = + compile(source, &images, &roots_of(&root)).expect("the folder compiles"); + let after = snapshot(&root); + + assert_eq!(&bytes[..4], b"%PDF", "the answer is a PDF"); + // The picture really was read off disk rather than worked around, so the one step of the + // compile that opens a file in the user's folder is a step this test actually took. + let worked_around: Vec<&str> = warnings + .iter() + .filter(|w| w.kind == "image") + .map(|w| w.message.as_str()) + .collect(); + assert!( + worked_around.is_empty(), + "the image in the open folder was read: {worked_around:?}" + ); + + assert_untouched("a compile", &before, &after); + assert_clean("a compile"); +} + +#[test] +fn compiling_the_same_folder_ten_times_over_still_writes_nothing() { + // Once could be a compile that failed early and touched nothing because it did nothing. Ten + // laps, with the fonts loaded and the images opened every time, is the shape of the thing the + // user actually does: export, read it, change a line, export again. + let (_lock, root) = pristine(); + let before = snapshot(&root); + + for lap in 0..10 { + let (source, images) = document_from(&root); + let (bytes, _) = + compile(source, &images, &roots_of(&root)).unwrap_or_else(|e| panic!("lap {lap}: {e}")); + assert_eq!(&bytes[..4], b"%PDF"); + } + + assert_untouched("ten compiles", &before, &snapshot(&root)); + assert_clean("ten compiles"); +} + +// ================================================================ writing + +#[test] +fn exporting_to_a_folder_of_its_own_leaves_the_documents_alone() { + // The ordinary export: the panel points somewhere outside the notes folder, which is where a + // PDF belongs. Nothing in the folder the document came from has any business moving, and the + // whole of `git status` is the evidence. + let (_lock, root) = pristine(); + let (source, images) = document_from(&root); + let elsewhere = TempDir::new().expect("a temp dir"); + let target = elsewhere.path().join("The handbook.pdf"); + + let before = snapshot(&root); + let (bytes, _) = compile(source, &images, &roots_of(&root)).expect("the folder compiles"); + pdf_write(target.to_string_lossy().into_owned(), bytes.clone()).expect("the panel's path"); + let after = snapshot(&root); + + assert_eq!(fs::read(&target).expect("the PDF is there"), bytes); + assert_untouched("an export to another folder", &before, &after); + assert_clean("an export to another folder"); +} + +#[test] +fn exporting_beside_the_documents_adds_the_pdf_and_moves_nothing_else() { + // The other ordinary export, and the one that cannot leave `git status` empty: a PDF written + // next to the document is a new file in the folder and shows up as one. What matters is that + // it is the only line, and that no document was rewritten to put it there. + let (_lock, root) = pristine(); + let (source, images) = document_from(&root); + let target = root.join("docs/guides/setup.pdf"); + + let before = snapshot(&root); + let (bytes, _) = compile(source, &images, &roots_of(&root)).expect("the folder compiles"); + pdf_write(target.to_string_lossy().into_owned(), bytes).expect("a path inside the root"); + let after = snapshot(&root); + + assert_only_added( + "an export into the folder", + &before, + &after, + &["docs/guides/setup.pdf"], + ); + + let status = git_status(); + println!( + "git status --porcelain after an export into the folder:\n{}", + quoted(&status) + ); + assert_eq!( + status.lines().collect::>(), + vec!["?? docs/guides/setup.pdf"], + "the PDF is the only thing git can see" + ); + + // And the atomic write left nothing of its own behind: the temp file it renames through is + // gone, so there is no `.setup.pdf.tmp` for the next `git add -A` to sweep up. + let strays: Vec = fs::read_dir(root.join("docs/guides")) + .expect("the guides folder") + .flatten() + .map(|e| e.file_name().to_string_lossy().into_owned()) + .filter(|name| !name.ends_with(".md") && name != "setup.pdf") + .collect(); + assert!(strays.is_empty(), "the write left {strays:?} behind"); +} + +// ================================================================ the guard that is not there + +#[test] +fn a_save_panel_pointed_at_a_document_is_refused() { + // This test was written the other way up, pinning the overwrite as a fact somebody had decided. + // Nobody had: it was the one way an export could destroy markdown, and it needed only a user who + // reached the save panel and typed a `.md` name into it. It has not been seen because the panel + // carries a PDF filter and AppKit usually appends `.pdf` to a name typed with another extension, + // which is the panel being careful rather than this module, and the promise that the editor + // never writes a file the user did not edit is not the panel's to keep. + // + // So `pdf_write` now refuses a destination that already holds one of the user's documents, and + // this is the same test rewritten to the truth that replaced it. Everything about the rest of + // the decision still stands: the root guard is still off this path on purpose, which is what + // `pdf_write_will_also_write_outside_every_open_folder` below is about. + let (_lock, root) = pristine(); + let (source, images) = document_from(&root); + let document = root.join("docs/design.md"); + let markdown = fs::read(&document).expect("a document to aim at"); + assert!( + markdown.starts_with(b"#") || markdown.len() > 100, + "the fixture document has real markdown in it" + ); + + let (bytes, _) = compile(source, &images, &roots_of(&root)).expect("the folder compiles"); + let answer = pdf_write(document.to_string_lossy().into_owned(), bytes.clone()); + + let message = answer.expect_err("a document is not a place to put a PDF"); + assert!( + message.contains("design.md") && message.contains("document"), + "the refusal names the file and says why: {message}" + ); + assert_eq!( + fs::read(&document).expect("the document is still a file"), + markdown, + "the document is untouched, byte for byte" + ); + + let status = git_status(); + assert_eq!(status, "", "the folder is clean:\n{}", quoted(&status)); + + // A .txt is a document too, and a .pdf that is already there is not: replacing one is what a + // save panel is for, and it has already asked. + let notes = root.join("docs/notes.txt"); + fs::write(¬es, b"a plain text document\n").expect("a text file"); + let again = bytes; + pdf_write(notes.to_string_lossy().into_owned(), again.clone()) + .expect_err("a .txt is a document as much as a .md is"); + + let existing = root.join("docs/already.pdf"); + fs::write(&existing, b"%PDF-1.7 an older export\n").expect("an older PDF"); + pdf_write(existing.to_string_lossy().into_owned(), again.clone()) + .expect("replacing a PDF is what the panel asked about"); + assert_eq!(fs::read(&existing).expect("the newer export"), again); + + let fresh = root.join("docs/never-existed.md"); + pdf_write(fresh.to_string_lossy().into_owned(), again) + .expect("a name nothing holds destroys nothing, however odd it looks"); +} + +#[test] +fn pdf_write_will_also_write_outside_every_open_folder() { + // The half of the same decision that is intended, kept next to the half that is not so the two + // are read together. A PDF belongs on the Desktop or in Downloads far more often than it + // belongs in the notes folder, so `resolve_in_roots` is not on this path and must not be. The + // fix for the test above, if there is one, is not a root guard. + let (_lock, root) = pristine(); + let elsewhere = TempDir::new().expect("a temp dir"); + let target = elsewhere.path().join("report.pdf"); + + pdf_write( + target.to_string_lossy().into_owned(), + b"%PDF-1.7\n".to_vec(), + ) + .expect("somewhere the user never opened"); + + assert_eq!(fs::read(&target).expect("the PDF"), b"%PDF-1.7\n"); + assert_clean("a write outside every root"); + let _ = root; +} diff --git a/src-tauri/tests/grammar.rs b/src-tauri/tests/grammar.rs new file mode 100644 index 0000000..ce07561 --- /dev/null +++ b/src-tauri/tests/grammar.rs @@ -0,0 +1,126 @@ +// What the grammar checker promises the frontend, asserted against the real engine. +// +// Three things, and the first is the one that would be invisible everywhere else. Offsets are in +// characters, and src/editor/proofing.ts adds a ProseMirror position to them without converting +// anything, so an engine that counted bytes would draw its underlines further and further to the +// left of the words they are about for every non-ASCII character earlier in the paragraph. That is +// a bug nobody writing in English would ever see and everybody writing in French or Polish would +// see immediately, and no other test in this repository is in a position to notice it: the Rust +// suite otherwise asserts about files, and the browser suite talks to the fixture in +// src/dev/mockIpc.ts rather than to Harper. +// +// The second is that Harper's own spell rule is off. It is turned off in src-tauri/src/grammar.rs because +// NSSpellChecker already does the spelling and knows the user's own names and languages, and a +// second dictionary underlining "Yoshinari" would be exactly the noise that gets a checker switched +// off for good. Left on, everything would still be green: there would just be spelling issues +// arriving through the grammar command, drawn in the grammar colour, with no Learn item on them. +// +// The third is that the engine survives being asked twice. It is a static built on first use and a +// `LintGroup` that lints through `&mut self`, so a second call is the one that would find a lock +// held or a state left dirty by the first. + +use margin_docs_lib::dto::GrammarIssue; +use margin_docs_lib::grammar::{grammar_available, grammar_check}; + +/// The text a lint is about, sliced the way the frontend slices it: by character. +fn flagged(text: &str, issue: &GrammarIssue) -> String { + text.chars() + .skip(issue.start) + .take(issue.end - issue.start) + .collect() +} + +fn check(text: &str) -> Vec { + grammar_check(text.to_string()).expect("the checker answered") +} + +#[test] +fn a_build_with_harper_in_it_says_so() { + assert!(grammar_available().expect("availability answered")); +} + +#[test] +fn a_repeated_word_is_found_and_can_be_corrected() { + let issues = check("I put the the book down."); + let repeat = issues + .iter() + .find(|issue| flagged("I put the the book down.", issue).contains("the the")) + .expect("the repeated word was found"); + + assert!(!repeat.kind.is_empty(), "a lint carries the rule's category"); + assert!(!repeat.message.is_empty(), "and something to show the reader"); + assert!( + repeat.suggestions.iter().any(|s| s.trim() == "the"), + "with the correction on it: {:?}", + repeat.suggestions + ); +} + +#[test] +fn offsets_are_characters_and_not_bytes() { + // Every character before the mistake is three bytes in UTF-8, so a checker counting bytes would + // report a span three times too far along and the assertion below would slice the wrong words. + let text = "Zażółć gęślą jaźń, and then I put the the book down."; + let issues = check(text); + let repeat = issues + .iter() + .find(|issue| flagged(text, issue).contains("the the")) + .expect("the repeated word was found after a run of non-ASCII text"); + + assert_eq!(flagged(text, repeat), "the the"); + assert!( + repeat.end <= text.chars().count(), + "and it ends inside the run it was told about" + ); +} + +#[test] +fn spelling_is_left_to_the_system_checker() { + // Not a word in any dictionary, and Harper's curated one included. Nothing may come back about + // it, because the only rule that would have is the one src-tauri/src/grammar.rs turns off. + let text = "The flurbulent maglifter needs oiling."; + for issue in check(text) { + assert_ne!( + issue.kind, "Spelling", + "the grammar checker reported a spelling issue: {issue:?}" + ); + } +} + +#[test] +fn nothing_to_say_about_nothing() { + assert!(check("").is_empty()); +} + +/// Harper flags two spaces between sentences as "French spaces", and src-tauri/src/grammar.rs drops every +/// lint whose whole span is whitespace for the reasons written there: an underline nobody can see +/// or click on, and, when the spaces are the ones src/editor/proofing.ts writes in place of an +/// inline code span, an underline over the one thing that file went out of its way not to send. +/// +/// These two inputs are the ones that reach the filter, so taking the filter out fails this test +/// rather than leaving it green. What it cannot see is a future Harper that stops raising the lint +/// at all, which would leave the guard unreached and this file none the wiser. +#[test] +fn a_lint_about_nothing_but_spaces_is_not_reported() { + assert!( + check("This is fine. Two spaces there.").is_empty(), + "the two spaces between the sentences were reported" + ); + // The shape src/editor/proofing.ts produces from a blanked inline code span. + assert!( + check("The value is nine.").is_empty(), + "a blanked code span was reported as a run of spaces" + ); +} + +#[test] +fn the_engine_is_kept_and_answers_the_same_way_twice() { + let text = "I put the the book down."; + let first = check(text); + let second = check(text); + assert_eq!(first.len(), second.len()); + assert_eq!( + first.first().map(|i| (i.start, i.end)), + second.first().map(|i| (i.start, i.end)) + ); +} diff --git a/src-tauri/tests/pdf.rs b/src-tauri/tests/pdf.rs new file mode 100644 index 0000000..cd6d413 --- /dev/null +++ b/src-tauri/tests/pdf.rs @@ -0,0 +1,316 @@ +// The exporter compiles a document nobody has checked, so the tests here are about what it refuses +// and what it survives rather than about the typesetting: a formula reaches mitex instead of the +// page as source, an image outside every open folder is never read, and neither a broken link nor a +// formula the converter choked on costs the user the whole PDF. + +use base64::engine::general_purpose::STANDARD; +use base64::Engine; +use margin_docs_lib::dto::ImageInput; +use margin_docs_lib::pdf::compile; +use tempfile::TempDir; + +/// A real 4x4 PNG, so an image that is meant to be read is one Typst can actually decode, and one +/// the placeholder cannot be mistaken for. +const PNG: &str = + "iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAE0lEQVR4nGO8I2LDAANMcBZeDgA8PAE0qLfS9QAAAABJRU5ErkJggg=="; + +/// The shape of what src/export/typst.ts puts at the top of a document with a formula in it: the +/// mitex import, which is the contract between the converter and this module, and set rules that +/// name neither the monospace nor the maths face, because which of those exist is the backend's +/// business and a family named hopefully is a warning per export about fonts nobody chose. A +/// document set rule after the preamble pdf.rs prepends is part of what these fixtures prove. +const PREAMBLE: &str = r#"#import "/mitex/lib.typ": mitex, mi +#set document(title: "Fixture") +#set page(paper: "a4", margin: 2cm) +#set text(size: 11pt, lang: "en") +"#; + +fn png_bytes() -> Vec { + STANDARD.decode(PNG).unwrap() +} + +fn root() -> (TempDir, Vec) { + let dir = TempDir::new().expect("a temp dir"); + let paths = vec![dir.path().to_string_lossy().into_owned()]; + (dir, paths) +} + +fn kinds<'a>(warnings: &'a [margin_docs_lib::dto::PdfWarning], kind: &str) -> Vec<&'a str> { + warnings + .iter() + .filter(|w| w.kind == kind) + .map(|w| w.message.as_str()) + .collect() +} + +#[test] +fn a_document_with_an_image_and_a_formula_compiles() { + let (dir, roots) = root(); + let photo = dir.path().join("photo.png"); + std::fs::write(&photo, png_bytes()).unwrap(); + + let source = format!( + "{PREAMBLE} += Fixture + +Inline #mi(\"a^2 + b^2 = c^2\") in a sentence. + +#mitex(\"\\\\frac{{1}}{{2}} \\\\int_0^1 x^2 dx\") + +#image(\"{}\") + +Diagram: #image(\"diagram.svg\") +", + photo.display() + ); + + let images = vec![ + ImageInput { + path: photo.to_string_lossy().into_owned(), + data: None, + }, + // How a mermaid diagram arrives: rendered to SVG in the webview, with no file behind it. + ImageInput { + path: "diagram.svg".to_string(), + data: Some(STANDARD.encode( + br##""##, + )), + }, + ]; + + let (bytes, warnings) = compile(source, &images, &roots).expect("the fixture compiles"); + + assert_eq!(&bytes[..4], b"%PDF", "the answer is a PDF"); + assert!( + kinds(&warnings, "image").is_empty(), + "no image was worked around: {:?}", + kinds(&warnings, "image") + ); + assert!( + kinds(&warnings, "math").is_empty(), + "no formula was worked around: {:?}", + kinds(&warnings, "math") + ); +} + +#[test] +fn a_formula_typesets_through_mitex_rather_than_falling_back_to_source() { + let (_dir, roots) = root(); + + // Only the wasm plugin can turn `\frac{a}{b}` into Typst's own `frac(a, b )`, so asserting on + // what came back out of it proves the whole path resolved: the import, the relative imports + // underneath it, the specs and the plugin. An `assert` inside the document makes a wrong answer + // a compile error rather than a difference in bytes nobody would notice. + let source = format!( + "{PREAMBLE}#import \"/mitex/lib.typ\": mitex-convert +#assert.eq(mitex-convert(\"\\\\frac{{a}}{{b}}\"), \"frac(a ,b )\") +#mi(\"\\\\alpha + \\\\beta\") +" + ); + + let (bytes, warnings) = compile(source, &[], &roots).expect("mitex loads and converts"); + assert_eq!(&bytes[..4], b"%PDF"); + assert!( + kinds(&warnings, "math").is_empty(), + "the formula typeset without a workaround: {:?}", + kinds(&warnings, "math") + ); +} + +#[test] +fn the_mitex_files_are_the_only_thing_the_compiler_can_import() { + let (_dir, roots) = root(); + + let source = format!("{PREAMBLE}#import \"/etc/passwd\": *\n"); + let error = compile(source, &[], &roots).expect_err("nothing outside the vendored files loads"); + assert!( + error.contains("file not found"), + "the compiler has no filesystem: {error}" + ); +} + +#[test] +fn an_image_outside_every_open_folder_is_never_read() { + let (dir, roots) = root(); + // Somewhere the user did not open, which is what `![](../../../.ssh/id_rsa)` resolves to. + let elsewhere = TempDir::new().expect("a temp dir"); + let secret = elsewhere.path().join("id_rsa"); + std::fs::write(&secret, "PRIVATE KEY").unwrap(); + let _ = dir; + + let source = format!( + "{PREAMBLE}#image(\"{}\")\n", + secret.display() + ); + let images = vec![ImageInput { + path: secret.to_string_lossy().into_owned(), + data: None, + }]; + + let (bytes, warnings) = compile(source, &images, &roots).expect("the export still happens"); + assert_eq!(&bytes[..4], b"%PDF"); + + let refused = kinds(&warnings, "image"); + assert_eq!(refused.len(), 1, "one image was worked around: {refused:?}"); + assert!( + refused[0].contains("outside every open folder"), + "the root guard is what refused it: {}", + refused[0] + ); + assert!( + !String::from_utf8_lossy(&bytes).contains("PRIVATE KEY"), + "nothing from the file reached the page" + ); +} + +#[test] +fn one_broken_image_does_not_cost_the_whole_export() { + let (dir, roots) = root(); + let missing = dir.path().join("gone.jpg"); + + let source = format!( + "{PREAMBLE}#image(\"{0}\")\n\n#image(\"{0}\")\n", + missing.display() + ); + let images = vec![ + ImageInput { + path: missing.to_string_lossy().into_owned(), + data: None, + }, + ImageInput { + path: missing.to_string_lossy().into_owned(), + data: None, + }, + ]; + + let (bytes, warnings) = compile(source, &images, &roots).expect("the export still happens"); + assert_eq!(&bytes[..4], b"%PDF"); + + // Two broken links to one file are one problem with a number on it, not two toasts. + let counted: Vec = warnings + .iter() + .filter(|w| w.kind == "image") + .map(|w| w.count) + .collect(); + assert_eq!(counted, vec![2]); +} + +#[test] +fn a_formula_nothing_can_typeset_does_not_cost_the_export() { + let (_dir, roots) = root(); + + // Unbalanced braces, which is what somebody halfway through typing a formula has. mitex cannot + // parse it and says so by stopping the compile, and the whole page of notes would go with it. + let source = format!("{PREAMBLE}#mi(\"\\\\frac{{\")\n"); + + let (bytes, warnings) = compile(source, &[], &roots).expect("the export still happens"); + assert_eq!(&bytes[..4], b"%PDF"); + assert_eq!( + kinds(&warnings, "math"), + vec!["a formula could not be typeset, so every formula is shown as the source it was written in"] + ); +} + +#[test] +fn an_ordinary_document_says_nothing_at_all() { + let (_dir, roots) = root(); + + // Every construct that has ever made this module warn about its own furniture rather than about + // the document: the bundled variable fonts, the font families the preamble names, and mitex's + // own deprecations. A user who wrote none of that should see no toast. + let source = format!( + "{PREAMBLE} += Heading + +A paragraph with `inline code` and #mi(\"a^2 + b^2\") in it. + +```rust +fn main() {{}} +``` +" + ); + + let (bytes, warnings) = compile(source, &[], &roots).expect("the fixture compiles"); + assert_eq!(&bytes[..4], b"%PDF"); + assert!(warnings.is_empty(), "nothing to say: {warnings:?}"); +} + +#[test] +fn a_broken_link_is_worked_around_in_every_format_the_editor_writes() { + let (dir, roots) = root(); + + // Typst decides how to decode an image from the extension and not from the bytes, so the + // stand-in for a file that could not be read has to be a real image of the format the link + // claimed. A png in place of a jpg is a decode error, which is the failure being avoided. + for extension in ["png", "jpg", "jpeg", "gif", "webp", "svg", "heic"] { + let missing = dir.path().join(format!("gone.{extension}")); + let source = format!("{PREAMBLE}#image(\"{}\")\n", missing.display()); + let images = vec![ImageInput { + path: missing.to_string_lossy().into_owned(), + data: None, + }]; + + let (bytes, warnings) = compile(source, &images, &roots) + .unwrap_or_else(|e| panic!("a missing .{extension} still exports: {e}")); + assert_eq!(&bytes[..4], b"%PDF"); + assert_eq!(kinds(&warnings, "image").len(), 1); + } +} + +/// mitex's `\hspace`, `\vspace` and `\raisebox` handlers used to hand the text between the braces +/// to Typst's `eval`, which ran it as code. The text is whatever the author typed, so a markdown +/// file was a program, and the compiler runs in this process rather than beside it: the payload +/// vendor/mitex/PATCHES.md names took nine gigabytes and the app with it. +/// +/// That payload is deliberately not the fixture here. A test that brings down the machine when it +/// fails is not a test anybody can run, and the property underneath it is smaller and exact: a +/// length literal is evaluated and nothing else is. `2cm*2` is the whole difference, because it is +/// arithmetic rather than a literal, and under `eval` it was four centimetres. +/// +/// Proved by what lands on the page rather than by reading the guard, which needs one control: the +/// same source twice is the same bytes, so two documents differing only in a spacing command and +/// differing in bytes is that spacing command doing something. +#[test] +fn a_spacing_command_takes_a_length_and_never_an_expression() { + let (_dir, roots) = root(); + let page = |length: &str| { + let source = format!("{PREAMBLE}x#mi(\"a\\\\hspace{{{length}}}b\")x\n"); + compile(source, &[], &roots).expect("a spacing command typesets").0 + }; + + assert_eq!(page("0pt"), page("0pt"), "the compiler is deterministic"); + assert_ne!(page("0pt"), page("4cm"), "4cm moved nothing on the page"); + assert_eq!(page("0pt"), page("2cm*2"), "an expression reached eval"); +} + +/// Every weight src/export/typst.ts asks for has to be a face of its own, or the hierarchy the +/// author sees on screen is not in the PDF. +/// +/// This is what the static instances in src-tauri/fonts are for. Typst does not lay out a variable +/// axis: it takes the default instance, and every weight comes out at 400. There is no way to read a +/// weight back out of a PDF here, so the assertion is that the same word at two weights is two +/// different documents, which stops being true the moment two weights resolve to one face. +#[test] +fn every_weight_the_converter_asks_for_has_a_face_of_its_own() { + let (_dir, roots) = root(); + let page = |markup: &str| { + let source = format!("{PREAMBLE}{markup}\n"); + compile(source, &[], &roots).expect("a weight typesets").0 + }; + + let cuts = [ + "#text(weight: 400)[Margin]", + "#text(weight: 600)[Margin]", + "#text(weight: 700)[Margin]", + "#text(weight: 400, style: \"italic\")[Margin]", + "#text(weight: 700, style: \"italic\")[Margin]", + "#text(font: \"Hanken Grotesk\", weight: 400)[Margin]", + "#text(font: \"Hanken Grotesk\", weight: 700)[Margin]", + ]; + + for (i, one) in cuts.iter().enumerate() { + for two in &cuts[i + 1..] { + assert_ne!(page(one), page(two), "{one} and {two} are the same face"); + } + } +} diff --git a/src-tauri/vendor/mitex/LICENSE b/src-tauri/vendor/mitex/LICENSE new file mode 100644 index 0000000..a7e77cb --- /dev/null +++ b/src-tauri/vendor/mitex/LICENSE @@ -0,0 +1,176 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/src-tauri/vendor/mitex/PATCHES.md b/src-tauri/vendor/mitex/PATCHES.md new file mode 100644 index 0000000..d96b36d --- /dev/null +++ b/src-tauri/vendor/mitex/PATCHES.md @@ -0,0 +1,20 @@ +# Local changes to mitex 0.2.5 + +This copy is not stock. mitex is vendored rather than fetched through Typst's package system so +that an export needs no network, which also means an update is a manual copy and a patch applied +here is a patch that can be silently lost. Anyone replacing this directory has to re-apply what is +listed below, or re-check that it is no longer needed. + +Upstream is https://github.com/mitex-rs/mitex, Apache-2.0, and LICENSE beside this file is theirs. + +## specs/latex/standard.typ: `\hspace`, `\vspace` and `\raisebox` no longer evaluate their argument + +Those three handlers passed the text between the braces to `eval`, which runs it as Typst code. +The text is whatever the author typed, so a markdown file containing +`$\hspace{range(999999999).len()*1pt}$` is a program rather than a formula. Typst is hermetic, so +this is not a way to read a file or reach the network, but the compiler runs inside the editor's +own process: measured, that document took nine gigabytes resident before the process died, and it +would have taken any unsaved buffer with it. + +The three handlers now go through `mitex-safe-length`, which evaluates the argument only when it is +a plain length literal and answers `0pt` otherwise. `src-tauri/tests/pdf.rs` pins both halves. diff --git a/src-tauri/vendor/mitex/lib.typ b/src-tauri/vendor/mitex/lib.typ new file mode 100644 index 0000000..3e33673 --- /dev/null +++ b/src-tauri/vendor/mitex/lib.typ @@ -0,0 +1 @@ +#import "mitex.typ": mitex-wasm, mitex-convert, mitex-scope, mitex, mitext, mimath, mi \ No newline at end of file diff --git a/src-tauri/vendor/mitex/mitex.typ b/src-tauri/vendor/mitex/mitex.typ new file mode 100644 index 0000000..d22d04d --- /dev/null +++ b/src-tauri/vendor/mitex/mitex.typ @@ -0,0 +1,45 @@ +#import "specs/mod.typ": mitex-scope +#let mitex-wasm = plugin("./mitex.wasm") + +#let get-elem-text(it) = { + { + if type(it) == str { + it + } else if type(it) == content and it.has("text") { + it.text + } else { + panic("Unsupported type: " + str(type(it))) + } + } +} + +#let mitex-convert(it, mode: "math", spec: bytes(())) = { + if mode == "math" { + str(mitex-wasm.convert_math(bytes(get-elem-text(it)), spec)) + } else { + str(mitex-wasm.convert_text(bytes(get-elem-text(it)), spec)) + } +} + +// Math Mode +#let mimath(it, block: true, ..args) = { + let res = mitex-convert(mode: "math", it) + let eval-res = eval("$" + res + "$", scope: mitex-scope) + math.equation(block: block, eval-res, ..args) +} + +// Text Mode +#let mitext(it) = { + let res = mitex-convert(mode: "text", it) + eval(res, mode: "markup", scope: mitex-scope) +} + +#let mitex(it, mode: "math", ..args) = { + if mode == "math" { + mimath(it, ..args) + } else { + mitext(it, ..args) + } +} + +#let mi = mimath.with(block: false) diff --git a/src-tauri/vendor/mitex/mitex.wasm b/src-tauri/vendor/mitex/mitex.wasm new file mode 100644 index 0000000000000000000000000000000000000000..60bc93c2634777fcd33ada99256d8cef35872376 GIT binary patch literal 283073 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 z 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 it != [ ] and it != [#math.zws]).map(it => it.text).sum() +#let get-tex-str(tex) = if tex.has("children") { + get-tex-str-from-arr(tex.children) +} else { + tex.text +} + +// PATCHED, and not by mitex. See ../../../PATCHES.md. +// +// The three handlers below took the contents of \hspace{}, \vspace{} and \raisebox{} and passed +// them straight to `eval`, which runs them as Typst code. That content is whatever the author typed +// between the braces, so a plain markdown file holding \hspace{range(999999999).len()*1pt} is a +// program, and the compiler runs inside the editor's own process rather than in a sandbox beside +// it: the measured result was nine gigabytes resident and a dead app, taking any unsaved buffer +// with it. Nothing else in the file evaluates document text. +// +// A length is all any of the three can use, so a length is all this accepts. Anything else is zero +// rather than an error, because a document that will not export is a worse answer than a document +// whose spacing command was ignored, and the author can see the second one on the page. +#let mitex-safe-length(raw) = { + if type(raw) != str { + 0pt + } else { + let text = raw.trim() + if text.match(regex("^[+-]?([0-9]+(\\.[0-9]*)?|\\.[0-9]+)(pt|mm|cm|in|em)$")) != none { + eval(text) + } else { + 0pt + } + } +} +#let get-tex-color-from-arr(arr) = { + mitex-color-map.at(lower(get-tex-str-from-arr(arr)), default: none) +} +#let get-tex-color(texcolor) = if texcolor.has("children") { + get-tex-color-from-arr(texcolor.children) +} else { + texcolor.text +} + +// 1. functions created to make it easier to define a spec +#let operatornamewithlimits(it) = math.op(limits: true, math.upright(it)) +#let arrow-handle(arrow-sym) = define-cmd(1, handle: it => $limits(stretch(#arrow-sym)^#it)$) +#let _greedy-handle(fn) = (..args) => $fn(#args.pos().sum())$ +#let greedy-handle(alias, fn) = define-greedy-cmd(alias, handle: _greedy-handle(fn)) +#let limits-handle(alias, wrap) = define-cmd(1, alias: alias, handle: it => math.limits(wrap(it))) +#let matrix-handle(delim: none, handle: none) = define-env( + none, + kind: "is-matrix", + alias: none, + handle: math.mat.with(delim: delim), +) +#let call-or-ignore(fn) = (..args) => if args.pos().len() > 0 { + fn(..args) +} else { + math.zws +} +#let ignore-me = (..args) => { } +#let ignore-sym = define-sym("") + +// 2. Standard package definitions, generate specs and scopes, +// for parser/convert and typst respectively +#let ( + spec, + scope, +) = process-spec(( + // Text mode + section: define-cmd(1, alias: "#heading(level: 1)"), + subsection: define-cmd(1, alias: "#heading(level: 2)"), + subsubsection: define-cmd(1, alias: "#heading(level: 3)"), + footnote: define-cmd(1, alias: "#footnote"), + cite: define-cmd(1, alias: "#mitexcite", handle: it => cite(label(get-tex-str(it)))), + emph: define-cmd(1, alias: "#emph"), + label: define-cmd(1, alias: "mitexlabel", handle: ignore-me), + tag: define-cmd(1, alias: "mitexlabel", handle: ignore-me), + ref: define-cmd(1, alias: "#mitexref", handle: it => ref(label(get-tex-str(it)))), + eqref: define-cmd(1, alias: "#mitexref"), + item: ignore-sym, + // environments for text mode + itemize: define-env(none, kind: "is-itemize"), + enumerate: define-env(none, kind: "is-enumerate"), + quote: define-env(none, alias: "quote(block: true)"), + abstract: define-env(none, alias: "quote(block: true)"), + figure: define-glob-env("{,b}", kind: "is-figure", alias: "figure"), + table: define-glob-env("{,b}", kind: "is-figure", alias: "figure"), + tabular: define-env(1, kind: "is-table", alias: "table"), + // commands for figure + centering: ignore-sym, + textwidth: sym, + caption: define-cmd(1, alias: "mitexcaption", handle: ignore-me), + includegraphics: define-glob-cmd("{,b}t", "#miteximage", handle: ignore-me), + // commands for tabular + toprule: define-glob-cmd("{,b}", "toprule"), + midrule: define-glob-cmd("{,b}", "midrule"), + bottomrule: define-glob-cmd("{,b}", "bottomrule"), + hline: ignore-sym, + vline: ignore-sym, + // Spaces: \! \, \> \: \; \ \quad \qquad + "!": define-sym("negthinspace", sym: h(-(3/18) * 1em)), + negthinspace: of-sym(h(-(3/18) * 1em)), + negthinmedspace: of-sym(h(-(3/18) * 1em)), + negmedspace: of-sym(h(-(4/18) * 1em)), + negthickspace: of-sym(h(-(5/18) * 1em)), + ",": define-sym("thin"), + thinspace: define-sym("thin"), + ">": define-sym("med"), + ":": define-sym("med"), + medspace: define-sym("med"), + ";": define-sym("thick"), + "": define-sym("thick"), + thickspace: define-sym("thick"), + enspace: of-sym(h((1/2) * 1em)), + nobreakspace: define-sym("space.nobreak"), + space: sym, + quad: sym, + qquad: define-sym("wide"), + phantom: define-cmd(1, handle: hide), + hphantom: define-cmd(1, handle: it => box(height: 0pt, hide(it))), + vphantom: define-cmd(1, handle: it => box(width: 0pt, hide(it))), + // Escape symbols + "_": define-sym("\\_"), + "^": define-sym("hat"), + "*": define-sym(""), + "|": define-sym("||"), + "&": define-sym("amp"), + "#": define-sym("hash"), + "%": define-sym("%"), + "-": define-sym("-"), + "+": define-sym("+"), + "$": define-sym("dollar"), + "{": define-sym("\\{"), + "}": define-sym("\\}"), + vert: define-sym("|"), + lvert: of-sym(math.class("opening", "|")), + rvert: of-sym(math.class("closing", "|")), + Vert: define-sym("||"), + lVert: of-sym(math.class("opening", "||")), + rVert: of-sym(math.class("closing", "||")), + lparen: define-sym("paren.l"), + rparen: define-sym("paren.r"), + lceil: define-sym("⌈"), + rceil: define-sym("⌉"), + lfloor: define-sym("⌊"), + rfloor: define-sym("⌋"), + // Sizes and styles + displaystyle: greedy-handle("mitexdisplay", math.display), + textstyle: greedy-handle("mitexinline", math.inline), + scriptstyle: greedy-handle("mitexscript", math.script), + scriptscriptstyle: greedy-handle("mitexsscript", math.sscript), + bf: greedy-handle("mitexbold", it => math.bold(math.upright(it))), + rm: greedy-handle("mitexupright", math.upright), + it: greedy-handle("mitexitalic", math.italic), + sf: greedy-handle("mitexsans", math.sans), + frak: greedy-handle("mitexfrak", math.frak), + tt: greedy-handle("mitexmono", math.mono), + cal: greedy-handle("mitexcal", math.cal), + bold: define-cmd(1, alias: "bold"), + mathbf: define-cmd(1, alias: "mitexmathbf", handle: it => math.bold(math.upright(it))), + bm: define-cmd(1, alias: "bold"), + boldsymbol: define-cmd(1, alias: "bold"), + pmb: define-cmd(1, alias: "bold"), + mathrm: define-cmd(1, alias: "upright"), + mathit: define-cmd(1, alias: "italic"), + mathnormal: define-cmd(1, alias: "italic"), + mathsf: define-cmd(1, alias: "sans"), + mathfrak: define-cmd(1, alias: "frak"), + mathtt: define-cmd(1, alias: "mono"), + Bbb: define-cmd(1, alias: "bb"), + mathbb: define-cmd(1, alias: "bb"), + mathcal: define-cmd(1, alias: "cal"), + mathbin: define-cmd(1, handle: it => math.class("binary", it)), + mathclose: define-cmd(1, handle: it => math.class("closing", it)), + mathinner: define-cmd(1, handle: it => math.class("fence", it)), + mathop: define-cmd(1, handle: it => math.class("unary", it)), + mathopen: define-cmd(1, handle: it => math.class("opening", it)), + mathord: define-cmd(1, handle: it => math.class("normal", it)), + mathpunct: define-cmd(1, handle: it => math.class("punctuation", it)), + mathrel: define-cmd(1, handle: it => math.class("relation", it)), + big: define-cmd(1, handle: it => math.lr(size: 1.2em, it)), + Big: define-cmd(1, handle: it => math.lr(size: 1.8em, it)), + bigg: define-cmd(1, handle: it => math.lr(size: 2.4em, it)), + Bigg: define-cmd(1, handle: it => math.lr(size: 3em, it)), + bigl: define-cmd(1, alias: "big"), + Bigl: define-cmd(1, alias: "Big"), + biggl: define-cmd(1, alias: "bigg"), + Biggl: define-cmd(1, alias: "Bigg"), + bigm: define-cmd(1, alias: "big"), + Bigm: define-cmd(1, alias: "Big"), + biggm: define-cmd(1, alias: "bigg"), + Biggm: define-cmd(1, alias: "Bigg"), + bigr: define-cmd(1, alias: "big"), + Bigr: define-cmd(1, alias: "Big"), + biggr: define-cmd(1, alias: "bigg"), + Biggr: define-cmd(1, alias: "Bigg"), + // todo: size, especially multi-line, ignore it for now. + Huge: ignore-sym, + normalsize: ignore-sym, + huge: ignore-sym, + small: ignore-sym, + footnotesize: ignore-sym, + Large: ignore-sym, + LARGE: ignore-sym, + scriptsize: ignore-sym, + large: ignore-sym, + tiny: ignore-sym, + // Colors + color: define-greedy-cmd("mitexcolor", handle: (texcolor, ..args) => { + let color = get-tex-color(texcolor) + if color != none { + text(fill: color, args.pos().sum()) + } else { + args.pos().sum() + } + }), + textcolor: define-cmd(2, alias: "colortext", handle: (texcolor, body) => { + let color = get-tex-color(texcolor) + if color != none { + text(fill: get-tex-color(texcolor), body) + } else { + body + } + }), + colorbox: define-cmd(2, handle: (texcolor, body) => { + let color = get-tex-color(texcolor) + if color != none { + box(fill: get-tex-color(texcolor), $body$) + } else { + body + } + }), + // Limits + limits: left1-op("limits"), + nolimits: left1-op("scripts"), + // Commands + frac: define-cmd(2, handle: (num, den) => $(num)/(den)$), + // todo: cfrac, dfrac are same? + cfrac: define-cmd(2, handle: (num, den) => $display((num)/(den))$), + dfrac: define-cmd(2, handle: (num, den) => $display((num)/(den))$), + tfrac: define-cmd(2, handle: (num, den) => $inline((num)/(den))$), + binom: define-cmd(2), + dbinom: define-cmd(2, handle: (n, k) => $display(binom(#n, #k))$), + tbinom: define-cmd(2, handle: (n, k) => $inline(binom(#n, #k))$), + stackrel: define-cmd(2, handle: (sup, base) => $limits(base)^(sup)$), + substack: define-cmd(1, handle: it => it), + overset: define-cmd(2, handle: (sup, base) => $limits(base)^(sup)$), + underset: define-cmd(2, handle: (sub, base) => $limits(base)_(sub)$), + // Accents + "not": define-cmd(1, alias: "mitexnot", handle: it => math.cancel(angle: 20deg, it)), + cancel: define-cmd(1), + xcancel: define-cmd(1, handle: math.cancel), + bcancel: define-cmd(1, handle: math.cancel.with(inverted: true)), + sout: define-cmd(1, handle: math.cancel.with(angle: 90deg)), + grave: define-cmd(1, alias: "grave"), + acute: define-cmd(1, alias: "acute"), + hat: define-cmd(1, alias: "hat"), + widehat: define-cmd(1, alias: "hat"), + tilde: define-cmd(1, alias: "tilde"), + widetilde: define-cmd(1, alias: "tilde"), + bar: define-cmd(1, alias: "macron"), + breve: define-cmd(1, alias: "breve"), + dot: define-cmd(1, alias: "dot"), + ddot: define-cmd(1, alias: "dot.double"), + dddot: define-cmd(1, alias: "dot.triple"), + ddddot: define-cmd(1, alias: "dot.quad"), + H: define-cmd(1, alias: "acute.double"), + check: define-cmd(1, alias: "caron"), + widecheck: define-cmd(1, alias: "caron"), + u: define-cmd(1, alias: "breve"), + v: define-cmd(1, alias: "caron"), + r: define-cmd(1, alias: "circle"), + vec: define-cmd(1, alias: "arrow"), + overrightarrow: define-cmd(1, alias: "arrow"), + overleftarrow: define-cmd(1, alias: "arrow.l"), + overline: cmd1, + underline: cmd1, + overbrace: limits-handle("mitexoverbrace", math.overbrace), + underbrace: limits-handle("mitexunderbrace", math.underbrace), + overbracket: limits-handle("mitexoverbracket", math.overbracket), + underbracket: limits-handle("mitexunderbracket", math.underbracket), + boxed: define-cmd(1, handle: it => box(stroke: 0.5pt, inset: 6pt, $it$)), + // Greeks + alpha: sym, + beta: sym, + gamma: sym, + delta: sym, + epsilon: define-sym("epsilon.alt"), + zeta: sym, + eta: sym, + theta: sym, + iota: sym, + kappa: sym, + lambda: sym, + mu: sym, + nu: sym, + xi: sym, + omicron: sym, + pi: sym, + rho: sym, + sigma: sym, + tau: sym, + upsilon: sym, + phi: define-sym("phi.alt"), + chi: sym, + psi: sym, + omega: sym, + Alpha: sym, + Beta: sym, + Gamma: sym, + Delta: sym, + Epsilon: sym, + Zeta: sym, + Eta: sym, + Theta: sym, + Iota: sym, + Kappa: sym, + Lambda: sym, + Mu: sym, + Nu: sym, + Xi: sym, + Omicron: sym, + Pi: sym, + Rho: sym, + Sigma: sym, + Tau: sym, + Upsilon: sym, + Phi: sym, + Chi: sym, + Psi: sym, + Omega: sym, + varbeta: define-sym("beta.alt"), + varepsilon: define-sym("epsilon"), + varkappa: define-sym("kappa.alt"), + varphi: define-sym("phi"), + varpi: define-sym("pi.alt"), + varrho: define-sym("rho.alt"), + varsigma: define-sym("sigma.alt"), + vartheta: define-sym("theta.alt"), + ell: sym, + // Function symbols + sin: sym, + cos: sym, + tan: sym, + cot: sym, + sec: sym, + csc: sym, + arcsin: sym, + arccos: sym, + arctan: sym, + sinh: sym, + cosh: sym, + tanh: sym, + coth: sym, + ln: sym, + log: sym, + lg: sym, + lim: sym, + limsup: sym, + liminf: sym, + hom: sym, + det: sym, + exp: sym, + deg: sym, + gcd: sym, + lcm: sym, + dim: sym, + ker: sym, + arg: sym, + Pr: sym, + // Limits + max: sym, + min: sym, + argmax: sym, + argmin: sym, + sup: sym, + inf: sym, + sum: sym, + prod: define-sym("product"), + int: define-sym("integral"), + iint: define-sym("integral.double"), + iiint: define-sym("integral.triple"), + oint: define-sym("integral.cont"), + oiint: define-sym("integral.surf"), + oiiint: define-sym("integral.vol"), + // Symbols + mod: define-sym("mod"), + bmod: define-sym("mod"), + cdot: define-sym("dot.c"), + cdotp: define-sym("dot.c"), + sdot: define-sym("dot.c"), + times: define-sym("times"), + oplus: define-sym("plus.circle"), + ominus: define-sym("minus.circle"), + pm: define-sym("plus.minus"), + plusmn: define-sym("plus.minus"), + mp: define-sym("minus.plus"), + div: define-sym("div"), + star: define-sym("star"), + cap: define-sym("sect"), + cup: define-sym("union"), + "in": define-sym("in"), + isin: define-sym("in"), + notin: define-sym("in.not"), + subset: define-sym("subset"), + subseteq: define-sym("subset.eq"), + subsetneqq: define-sym("⫋"), + ne: define-sym("!="), + neq: define-sym("!="), + lt: define-sym("<"), + gt: define-sym(">"), + le: define-sym("<="), + ge: define-sym(">="), + leq: define-sym("<="), + geq: define-sym(">="), + leqslant: define-sym("lt.eq.slant"), + geqslant: define-sym("gt.eq.slant"), + eqslantgtr: define-sym("⪖"), + eqslantless: define-sym("⪕"), + approx: define-sym("approx"), + leftarrow: define-sym("<-"), + rightarrow: define-sym("->"), + leftrightarrow: define-sym("<->"), + Leftarrow: define-sym("arrow.l.double"), + Rightarrow: define-sym("=>"), + Leftrightarrow: define-sym("<=>"), + larr: define-sym("<-"), + rarr: define-sym("->"), + lrarr: define-sym("<->"), + lArr: define-sym("arrow.l.double"), + rArr: define-sym("=>"), + lrArr: define-sym("<=>"), + Larr: define-sym("arrow.l.double"), + Rarr: define-sym("=>"), + Lrarr: define-sym("<=>"), + longleftarrow: define-sym("<--"), + longrightarrow: define-sym("-->"), + longleftrightarrow: define-sym("<-->"), + Longleftarrow: define-sym("<=="), + Longrightarrow: define-sym("==>"), + Longleftrightarrow: define-sym("<==>"), + to: define-sym("->"), + implies: define-sym("==>"), + impliedby: define-sym("<=="), + gets: define-sym("<-"), + mapsto: define-sym("|->"), + infty: define-sym("oo"), + lbrack: define-sym("bracket.l"), + rbrack: define-sym("bracket.r"), + lgroup: define-sym("⟮"), + rgroup: define-sym("⟯"), + llbracket: define-sym("bracket.l.double"), + rrbracket: define-sym("bracket.r.double"), + angle: define-sym("angle"), + lang: define-sym("angle.l"), + rang: define-sym("angle.r"), + langle: define-sym("angle.l"), + rangle: define-sym("angle.r"), + measuredangle: define-sym("angle.arc"), + sphericalangle: define-sym("angle.spheric"), + ast: define-sym("ast"), + checkmark: define-sym("checkmark"), + circledast: define-sym("ast.circle"), + backslash: define-sym("backslash"), + dagger: define-sym("dagger"), + ddagger: define-sym("dagger.double"), + circleddash: define-sym("dash.circle"), + odot: define-sym("dot.circle"), + bigodot: define-sym("dot.circle.big"), + boxdot: define-sym("dot.square"), + dots: define-sym("dots.h"), + cdots: define-sym("dots.h.c"), + ldots: define-sym("dots.h"), + vdots: define-sym("dots.v"), + ddots: define-sym("dots.down"), + dotsb: define-sym("dots.h.c"), + dotsc: define-sym("dots.h"), + dotsi: define-sym("dots.h.c"), + dotsm: define-sym("dots.h.c"), + dotso: define-sym("dots.h"), + sim: define-sym("tilde"), + simeq: define-sym("tilde.eq"), + backsimeq: define-sym("tilde.eq.rev"), + cong: define-sym("tilde.equiv"), + ncong: define-sym("tilde.equiv.not"), + nsim: define-sym("tilde.not"), + backsim: define-sym("tilde.rev"), + prime: define-sym("prime"), + backprime: define-sym("prime.rev"), + bigoplus: define-sym("plus.circle.big"), + dotplus: define-sym("plus.dot"), + boxplus: define-sym("plus.square"), + boxminus: define-sym("minus.square"), + eqsim: define-sym("minus.tilde"), + otimes: define-sym("times.circle"), + bigotimes: define-sym("times.circle.big"), + divideontimes: define-sym("times.div"), + leftthreetimes: define-sym("times.three.l"), + rightthreetimes: define-sym("times.three.r"), + ltimes: define-sym("times.l"), + rtimes: define-sym("times.r"), + boxtimes: define-sym("times.square"), + triangleq: define-sym("eq.delta"), + curlyeqprec: define-sym("eq.prec"), + curlyeqsucc: define-sym("eq.succ"), + gtrdot: define-sym("gt.dot"), + gg: define-sym("gt.double"), + gtreqless: define-sym("gt.eq.lt"), + gtreqqless: define-sym("⪌"), + ngeq: define-sym("gt.eq.not"), + geqq: define-sym("gt.equiv"), + gtrless: define-sym("gt.lt"), + gneqq: define-sym("gt.nequiv"), + ngtr: define-sym("gt.not"), + gnsim: define-sym("gt.ntilde"), + gtrsim: define-sym("gt.tilde"), + vartriangleright: define-sym("gt.tri"), + trianglerighteq: define-sym("gt.tri.eq"), + ntrianglerighteq: define-sym("gt.tri.eq.not"), + ntriangleright: define-sym("gt.tri.not"), + ggg: define-sym("gt.triple"), + lessdot: define-sym("lt.dot"), + ll: define-sym("lt.double"), + lesseqgtr: define-sym("lt.eq.gt"), + nleq: define-sym("lt.eq.not"), + leqq: define-sym("lt.equiv"), + lessgtr: define-sym("lt.gt"), + lneqq: define-sym("lt.nequiv"), + nless: define-sym("lt.not"), + lnsim: define-sym("lt.ntilde"), + lesssim: define-sym("lt.tilde"), + vartriangleleft: define-sym("lt.tri"), + trianglelefteq: define-sym("lt.tri.eq"), + ntrianglelefteq: define-sym("lt.tri.eq.not"), + ntriangleleft: define-sym("lt.tri.not"), + lll: define-sym("lt.triple"), + approxeq: define-sym("approx.eq"), + prec: define-sym("prec"), + precapprox: define-sym("prec.approx"), + preceq: define-sym("prec.eq"), + preccurlyeq: define-sym("prec.eq"), + npreceq: define-sym("prec.eq.not"), + precnapprox: define-sym("prec.napprox"), + nprec: define-sym("prec.not"), + precnsim: define-sym("prec.ntilde"), + precsim: define-sym("prec.tilde"), + succ: define-sym("succ"), + succapprox: define-sym("succ.approx"), + succeq: define-sym("succ.eq"), + succcurlyeq: define-sym("succ.eq"), + nsucceq: define-sym("succ.eq.not"), + succnapprox: define-sym("succ.napprox"), + nsucc: define-sym("succ.not"), + succnsim: define-sym("succ.ntilde"), + succsim: define-sym("succ.tilde"), + equiv: define-sym("equiv"), + propto: define-sym("prop"), + empty: define-sym("nothing"), + emptyset: define-sym("nothing"), + varnothing: define-sym("nothing"), + o: define-sym("nothing"), + O: define-sym("nothing"), + osplash: define-sym("⊘"), + setminus: define-sym("without"), + And: define-sym("amp"), + bigcirc: define-sym("circle.stroked.big"), + smallsetminus: define-sym("without"), + complement: define-sym("complement"), + ni: define-sym("in.rev"), + notni: define-sym("in.rev.not"), + Subset: define-sym("subset.double"), + nsubseteq: define-sym("subset.eq.not"), + sqsubseteq: define-sym("subset.eq.sq"), + subsetneq: define-sym("subset.neq"), + supset: define-sym("supset"), + Supset: define-sym("supset.double"), + supseteq: define-sym("supset.eq"), + nsupseteq: define-sym("supset.eq.not"), + sqsupseteq: define-sym("supset.eq.sq"), + supsetneq: define-sym("supset.neq"), + bigcup: define-sym("union.big"), + Cup: define-sym("union.double"), + uplus: define-sym("union.plus"), + biguplus: define-sym("union.plus.big"), + sqcup: define-sym("union.sq"), + bigsqcup: define-sym("union.sq.big"), + bigcap: define-sym("sect.big"), + Cap: define-sym("sect.double"), + sqcap: define-sym("sect.sq"), + partial: define-sym("diff"), + nabla: define-sym("nabla"), + coprod: define-sym("product.co"), + forall: define-sym("forall"), + exist: define-sym("exists"), + exists: define-sym("exists"), + nexists: define-sym("exists.not"), + top: define-sym("top"), + bot: define-sym("bot"), + neg: define-sym("not"), + lnot: define-sym("not"), + land: define-sym("and"), + wedge: define-sym("and"), + lor: define-sym("or"), + bigwedge: define-sym("and.big"), + curlywedge: define-sym("and.curly"), + vee: define-sym("or"), + bigvee: define-sym("or.big"), + curlyvee: define-sym("or.curly"), + models: define-sym("models"), + therefore: define-sym("therefore"), + because: define-sym("because"), + blacksquare: define-sym("qed"), + circ: define-sym("compose"), + multimap: define-sym("multimap"), + mid: define-sym("divides"), + nmid: define-sym("divides.not"), + wr: define-sym("wreath"), + parallel: define-sym("parallel"), + shortparallel: define-sym("parallel"), + nparallel: define-sym("parallel.not"), + perp: define-sym("perp"), + Join: define-sym("join"), + pounds: define-sym("pound"), + clubsuit: define-sym("suit.club"), + spadesuit: define-sym("suit.spade"), + bull: define-sym("bullet"), + bullet: define-sym("bullet"), + circledcirc: define-sym("circle.nested"), + rhd: define-sym("triangle.stroked.r"), + lhd: define-sym("triangle.stroked.l"), + triangle: define-sym("triangle.stroked.t"), + bigtriangleup: define-sym("triangle.stroked.t"), + bigtriangledown: define-sym("triangle.stroked.b"), + triangleright: define-sym("triangle.stroked.small.r"), + triangledown: define-sym("triangle.stroked.small.b"), + triangleleft: define-sym("triangle.stroked.small.l"), + vartriangle: define-sym("triangle.stroked.small.t"), + square: define-sym("square.stroked"), + Diamond: define-sym("diamond.stroked"), + diamond: define-sym("diamond.stroked.small"), + diamonds: define-sym("diamond.stroked"), + diamondsuit: define-sym("diamond.stroked"), + lozenge: define-sym("lozenge.stroked"), + blacklozenge: define-sym("lozenge.filled"), + bigstar: define-sym("star.stroked"), + longmapsto: define-sym("arrow.r.long.bar"), + nRightarrow: define-sym("arrow.r.double.not"), + hookrightarrow: define-sym("arrow.r.hook"), + looparrowright: define-sym("arrow.r.loop"), + nrightarrow: define-sym("arrow.r.not"), + rightsquigarrow: define-sym("arrow.r.squiggly"), + rightarrowtail: define-sym("arrow.r.tail"), + Rrightarrow: define-sym("arrow.r.triple"), + twoheadrightarrow: define-sym("arrow.r.twohead"), + nLeftarrow: define-sym("arrow.l.double.not"), + hookleftarrow: define-sym("arrow.l.hook"), + looparrowleft: define-sym("arrow.l.loop"), + nleftarrow: define-sym("arrow.l.not"), + leftarrowtail: define-sym("arrow.l.tail"), + Lleftarrow: define-sym("arrow.l.triple"), + twoheadleftarrow: define-sym("arrow.l.twohead"), + uparrow: define-sym("arrow.t"), + Uparrow: define-sym("arrow.t.double"), + downarrow: define-sym("arrow.b"), + Downarrow: define-sym("arrow.b.double"), + iff: define-sym("arrow.l.r.double.long"), + nLeftrightarrow: define-sym("arrow.l.r.double.not"), + nleftrightarrow: define-sym("arrow.l.r.not"), + leftrightsquigarrow: define-sym("arrow.l.r.wave"), + updownarrow: define-sym("arrow.t.b"), + Updownarrow: define-sym("arrow.t.b.double"), + nearrow: define-sym("arrow.tr"), + searrow: define-sym("arrow.br"), + nwarrow: define-sym("arrow.tl"), + swarrow: define-sym("arrow.bl"), + circlearrowleft: define-sym("arrow.ccw"), + curvearrowleft: define-sym("arrow.ccw.half"), + circlearrowright: define-sym("arrow.cw"), + curvearrowright: define-sym("arrow.cw.half"), + rightrightarrows: define-sym("arrows.rr"), + leftleftarrows: define-sym("arrows.ll"), + upuparrows: define-sym("arrows.tt"), + downdownarrows: define-sym("arrows.bb"), + leftrightarrows: define-sym("arrows.lr"), + rightleftarrows: define-sym("arrows.rl"), + rightharpoonup: define-sym("harpoon.rt"), + rightharpoondown: define-sym("harpoon.rb"), + leftharpoonup: define-sym("harpoon.lt"), + leftharpoondown: define-sym("harpoon.lb"), + upharpoonleft: define-sym("harpoon.tl"), + upharpoonright: define-sym("harpoon.tr"), + downharpoonleft: define-sym("harpoon.bl"), + downharpoonright: define-sym("harpoon.br"), + leftrightharpoons: define-sym("harpoons.ltrb"), + rightleftharpoons: define-sym("harpoons.rtlb"), + vdash: define-sym("tack.r"), + nvdash: define-sym("tack.r.not"), + vDash: define-sym("tack.r.double"), + nvDash: define-sym("tack.r.double.not"), + dashv: define-sym("tack.l"), + hbar: define-sym("planck.reduce"), + hslash: define-sym("planck.reduce"), + Re: define-sym("Re"), + Im: define-sym("Im"), + AA: define-sym("circle(A)"), + aa: define-sym("circle(A)"), + Box: define-sym("ballot"), + N: define-sym("NN"), + natnums: define-sym("NN"), + natural: define-sym("♮"), + P: define-sym("pilcrow"), + Q: define-sym("QQ"), + R: define-sym("RR"), + Z: define-sym("ZZ"), + S: define-sym("section"), + sect: define-sym("section"), + AE: define-sym("Æ"), + ae: define-sym("æ"), + alef: define-sym("aleph"), + alefsym: define-sym("aleph"), + aleph: define-sym("aleph"), + amalg: define-sym("product.co"), + arctg: of-sym(math.op("arctg")), + asymp: define-sym("≍"), + ch: of-sym(math.op("ch")), + circeq: define-sym("≗"), + colon: define-sym("colon"), + cth: of-sym(math.op("cth")), + dag: define-sym("dagger"), + Dagger: define-sym("dagger.double"), + ddag: define-sym("dagger.double"), + daleth: define-sym("ℸ"), + sharp: define-sym("♯"), + flat: define-sym("♭"), + i: define-sym("dotless.i"), + j: define-sym("dotless.j"), + imath: define-sym("dotless.i"), + jmath: define-sym("dotless.j"), + smallsmile: define-sym("⌣"), + smile: define-sym("⌣"), + ss: define-sym("ß"), + surd: define-sym("\√"), + tg: define-sym("tg"), + th: of-sym(math.op("th")), + weierp: define-sym("℘"), + wp: define-sym("℘"), + lbrace: define-sym("\\{"), + rbrace: define-sym("\\}"), + doteq: define-sym("≐"), + Vdash: define-sym("⊩"), + Doteq: define-sym("≑"), + Vvdash: define-sym("⊪"), + gnapprox: define-sym("⪊"), + ngeqslant: define-sym("gt.eq.not"), + precneqq: define-sym("prec.nequiv"), + gneq: define-sym("⪈"), + approxcolon: define-sym("approx:"), + approxcoloncolon: define-sym("approx::"), + backepsilon: define-sym("in.rev.small"), + barwedge: define-sym("⊼"), + beth: define-sym("beth"), + between: define-sym("≬"), + bigdot: define-sym("dot.circle.big"), + bigplus: define-sym("plus.circle.big"), + bigtimes: define-sym("times.circle.big"), + blacktriangle: define-sym("triangle.filled.t"), + blacktriangledown: define-sym("triangle.filled.b"), + blacktriangleleft: define-sym("triangle.filled.l"), + blacktriangleright: define-sym("triangle.filled.r"), + bowtie: define-sym("⋈"), + Bumpeq: define-sym("≎"), + bumpeq: define-sym("≏"), + centerdot: define-sym("dot.op"), + circledR: define-sym("®"), + circledS: define-sym("Ⓢ"), + clubs: define-sym("suit.club"), + cnums: define-sym("CC"), + Colonapprox: define-sym("::approx"), + colonapprox: define-sym(":approx"), + coloncolon: define-sym("::"), + coloncolonapprox: define-sym("::approx"), + coloncolonequals: define-sym("::="), + coloncolonminus: define-sym("::−"), + coloncolonsim: define-sym("::tilde.op"), + Coloneq: define-sym("::−"), + coloneq: define-sym(":−"), + colonequals: define-sym(":="), + Coloneqq: define-sym("::="), + coloneqq: define-sym(":="), + colonminus: define-sym(":−"), + Colonsim: define-sym("::tilde.op"), + colonsim: define-sym(":tilde.op"), + Complex: define-sym("CC"), + copyright: define-sym("copyright"), + ctg: define-sym("ctg"), + Darr: define-sym("arrow.b.double"), + dArr: define-sym("arrow.b.double"), + darr: define-sym("arrow.b"), + dashleftarrow: define-sym("arrow.l.dash"), + dashrightarrow: define-sym("arrow.r.dash"), + dbcolon: define-sym("::"), + degree: define-sym("degree"), + digamma: define-sym("ϝ"), + diagdown: define-sym("╲"), + diagup: define-sym("╱"), + doteqdot: define-sym("≑"), + doublebarwedge: define-sym("⩞"), + doublecap: define-sym("sect.double"), + doublecup: define-sym("union.double"), + eqcirc: define-sym("≖"), + Eqcolon: define-sym("−::"), + eqcolon: define-sym("dash.colon"), + Eqqcolon: define-sym("=::"), + eqqcolon: define-sym("=:"), + equalscolon: define-sym("=:"), + equalscoloncolon: define-sym("=::"), + eth: define-sym("ð"), + fallingdotseq: define-sym("≒"), + Finv: define-sym("Ⅎ"), + frown: define-sym("⌢"), + Game: define-sym("⅁"), + gggtr: define-sym(">>>"), + gimel: define-sym("gimel"), + Harr: define-sym("<=>"), + hArr: define-sym("<=>"), + harr: define-sym("<->"), + hearts: define-sym("♡"), + heartsuit: define-sym("♡"), + image: define-sym("Im"), + imageof: define-sym("⊷"), + infin: define-sym("infinity"), + intercal: define-sym("⊺"), + intop: define-sym("integral"), + lBrace: define-sym("⦃"), + ldotp: define-sym("."), + leadsto: define-sym("arrow.r.squiggly"), + lessapprox: define-sym("⪅"), + lesseqqgtr: define-sym("⪋"), + llcorner: define-sym("⌞"), + llless: define-sym("<<<"), + lnapprox: define-sym("⪉"), + gtrapprox: define-sym("⪆"), + lneq: define-sym("⪇"), + lrcorner: define-sym("⌟"), + lq: define-sym("quote.l.single"), + Lsh: define-sym("↰"), + maltese: define-sym("maltese"), + mathellipsis: define-sym("..."), + mathsterling: define-sym("pound"), + mho: define-sym("ohm.inv"), + minuscolon: define-sym("dash.colon"), + minuscoloncolon: define-sym("−::"), + minuso: define-sym("⦵"), + newline: define-sym("\\"), + nVDash: define-sym("⊯"), + nVdash: define-sym("⊮"), + OE: define-sym("Œ"), + oe: define-sym("œ"), + origof: define-sym("⊶"), + oslash: define-sym("⊘"), + owns: define-sym("in.rev"), + pitchfork: define-sym("⋔"), + ratio: define-sym(":"), + rBrace: define-sym("⦄"), + real: define-sym("Re"), + Reals: define-sym("RR"), + reals: define-sym("RR"), + restriction: define-sym("harpoon.tr"), + risingdotseq: define-sym("≓"), + rmoustache: define-sym("⎱"), + rq: define-sym("'"), + Rsh: define-sym("↱"), + simcolon: define-sym("tilde.op:"), + simcoloncolon: define-sym("tilde.op::"), + spades: define-sym("suit.spade"), + sqsubset: define-sym("subset.sq"), + sqsupset: define-sym("supset.sq"), + sub: define-sym("subset"), + sube: define-sym("subset.eq"), + subseteqq: define-sym("⫅"), + succneqq: define-sym("succ.nequiv"), + supe: define-sym("supset.eq"), + supseteqq: define-sym("⫆"), + supsetneqq: define-sym("⫌"), + textasciitilde: define-sym("~"), + textasciicircum: define-sym("\\^"), + textbackslash: define-sym("\\\\"), + textbar: define-sym("\\|"), + textbardbl: define-sym("‖"), + textbraceleft: define-sym("{"), + textbraceright: define-sym("}"), + textdagger: define-sym("dagger"), + textdaggerdbl: define-sym("dagger.double"), + textdegree: define-sym("degree"), + textdollarsign: define-sym("\\$"), + textellipsis: define-sym("..."), + textemdash: define-sym("---"), + textendash: define-sym("--"), + textgreater: define-sym("gt"), + textless: define-sym("lt"), + textquotedblleft: define-sym("quote.l.double"), + textquotedblright: define-sym("quote.r.double"), + textquoteleft: define-sym("quote.l.single"), + textquoteright: define-sym("quote.r.single"), + textregistered: define-sym("®"), + textsterling: define-sym("pound"), + textunderscore: define-sym("\\_"), + thetasym: define-sym("theta.alt"), + Uarr: define-sym("arrow.t.double"), + uArr: define-sym("arrow.t.double"), + uarr: define-sym("arrow.t"), + ulcorner: define-sym("⌜"), + unlhd: define-sym("lt.tri.eq"), + unrhd: define-sym("gt.tri.eq"), + urcorner: define-sym("⌝"), + varpropto: define-sym("prop"), + varsubsetneq: define-sym("subset.neq"), + varsubsetneqq: define-sym("⫋"), + varsupsetneq: define-sym("supset.neq"), + varsupsetneqq: define-sym("⫌"), + vcentcolon: define-sym(":"), + veebar: define-sym("⊻"), + yen: define-sym("yen"), + arcctg: of-sym(math.op("arcctg")), + begingroup: ignore-sym, + cosec: of-sym(math.op("cosec")), + cotg: of-sym(math.op("cotg")), + injlim: of-sym(math.op("inj\u{2009}lim", limits: true)), + mathclap: define-cmd(1, handle: it => box(width: 0pt, $it$)), + mathring: define-cmd(1, handle: it => math.circle(it)), + nobreak: ignore-sym, + noexpand: ignore-sym, + overgroup: define-cmd(1, handle: it => $accent(it, \u{0311})$), + undergroup: define-cmd(1, handle: it => $accent(it, \u{032e})$), + overleftharpoon: define-cmd(1, handle: it => $accent(it, \u{20d0})$), + overleftrightarrow: define-cmd(1, handle: it => $accent(it, \u{20e1})$), + overlinesegment: define-cmd(1, handle: it => $accent(it, \u{20e9})$), + overrightharpoon: define-cmd(1, handle: it => $accent(it, \u{20d1})$), + underbar: define-cmd(1, handle: it => $underline(it)$), + plim: of-sym(math.op("plim", limits: true)), + projlim: of-sym(math.op("proj\u{2009}lim", limits: true)), + raisebox: define-cmd(2, handle: (sp, it) => text(baseline: -mitex-safe-length(get-tex-str(sp)), it)), + sh: of-sym(math.op("sh")), + smallint: of-sym($inline(integral)$), + thickapprox: of-sym($bold(approx)$), + thicksim: of-sym($bold(tilde)$), + varDelta: of-sym($italic(Delta)$), + varGamma: of-sym($italic(Gamma)$), + varLambda: of-sym($italic(Lambda)$), + varOmega: of-sym($italic(Omega)$), + varPhi: of-sym($italic(Phi)$), + varPi: of-sym($italic(Pi)$), + varPsi: of-sym($italic(Psi)$), + varSigma: of-sym($italic(Sigma)$), + varTheta: of-sym($italic(Theta)$), + varUpsilon: of-sym($italic(Upsilon)$), + varXi: of-sym($italic(Xi)$), + xleftarrow: arrow-handle(math.arrow.l), + xrightarrow: arrow-handle(math.arrow.r), + xLeftarrow: arrow-handle(math.arrow.l.double), + xRightarrow: arrow-handle(math.arrow.r.double), + xleftrightarrow: arrow-handle(math.arrow.l.r), + xLeftrightarrow: arrow-handle(math.arrow.l.r.double), + xhookleftarrow: arrow-handle(math.arrow.l.hook), + xhookrightarrow: arrow-handle(math.arrow.r.hook), + xtwoheadleftarrow: arrow-handle(math.arrow.l.twohead), + xtwoheadrightarrow: arrow-handle(math.arrow.r.twohead), + xleftharpoonup: arrow-handle(math.harpoon.lt), + xrightharpoonup: arrow-handle(math.harpoon.rt), + xleftharpoondown: arrow-handle(math.harpoon.lb), + xrightharpoondown: arrow-handle(math.harpoon.rb), + xleftrightharpoons: arrow-handle(math.harpoons.ltrb), + xrightleftharpoons: arrow-handle(math.harpoons.rtlb), + xtofrom: arrow-handle(math.arrows.rl), + xmapsto: arrow-handle(math.arrow.r.bar), + xlongequal: arrow-handle(math.eq), + pmod: define-cmd(1, handle: it => $quad (mod thick it)$), + pod: define-cmd(1, handle: it => $quad (it)$), + "set": define-cmd(1, handle: it => $\{it\}$), + Set: define-cmd(1, handle: it => $lr(\{it\})$), + bra: define-cmd(1, handle: it => $angle.l it|$), + Bra: define-cmd(1, handle: it => $lr(angle.l it|)$), + ket: define-cmd(1, handle: it => $|it angle.r$), + Ket: define-cmd(1, handle: it => $lr(|it angle.r)$), + braket: define-cmd(1, handle: it => $angle.l it angle.r$), + Braket: define-cmd(1, handle: it => $lr(angle.l it angle.r)$), + fbox: define-cmd(1, handle: it => box(stroke: 0.5pt, $it$)), + hbox: define-cmd(1, handle: it => it), + // Matrices + matrix: matrix-handle(delim: none), + pmatrix: matrix-handle(delim: "("), + bmatrix: matrix-handle(delim: "["), + Bmatrix: matrix-handle(delim: "{"), + vmatrix: matrix-handle(delim: "|"), + Vmatrix: matrix-handle(delim: "||"), + smallmatrix: matrix-handle(handle: (..args) => math.inline(math.mat.with(delim: none, ..args))), + array: define-env(1, kind: "is-matrix", alias: "mitexarray", handle: (arg0: ("l",), ..args) => { + if args.pos().len() == 0 { + return + } + if type(arg0) != str { + if arg0.has("children") { + arg0 = arg0.children.filter(it => it != [ ] and it != [#math.zws]) + .map(it => it.text) + .filter(it => it == "l" or it == "c" or it == "r") + } else { + arg0 = (arg0.text,) + } + } + let matrix = args.pos().map(row => if type(row) == array { row } else { (row,) } ) + let n = matrix.len() + let m = calc.max(..matrix.map(row => row.len())) + matrix = matrix.map(row => row + (m - row.len()) * (none,)) + let array-at(arr, pos) = { + arr.at(calc.min(pos, arr.len() - 1)) + } + let align-map = ("l": left, "c": center, "r": right) + set align(align-map.at(array-at(arg0, 0))) + pad(y: 0.2em, grid( + columns: m, + column-gutter: 0.5em, + row-gutter: 0.5em, + ..matrix.flatten().map(it => $it$) + )) + }), + subarray: define-env(1, kind: "is-matrix", alias: "mitexarray"), + // Environments + aligned: define-env(none, kind: "is-math", alias: "aligned", handle: call-or-ignore(it => pad(y: 0.2em, block(math.op(math.display(it)))))), + alignedat: define-env(1, kind: "is-math", alias: "alignedat", handle: (arg0: none, it) => pad(y: 0.2em, block(math.op(it)))), + align: define-env(none, kind: "is-math", alias: "aligned"), + "align*": define-env(none, kind: "is-math", alias: "aligned"), + equation: define-env(none, kind: "is-math", alias: "aligned"), + "equation*": define-env(none, kind: "is-math", alias: "aligned"), + split: define-env(none, kind: "is-math", alias: "aligned"), + gather: define-env(none, kind: "is-math", alias: "aligned"), + gathered: define-env(none, kind: "is-math", alias: "aligned"), + cases: define-env(none, kind: "is-cases", alias: "cases"), + rcases: define-env(none, kind: "is-cases", alias: "rcases", handle: math.cases.with(reverse: true)), + // Specials + notag: ignore-sym, + relax: ignore-sym, + cr: ignore-sym, + expandafter: ignore-sym, + hskip: ignore-sym, + mskip: ignore-sym, + kern: ignore-sym, + mkern: ignore-sym, + mathstrut: ignore-sym, + nonumber: ignore-sym, + KaTeX: of-sym(math.upright($kai A T E X$)), + LaTeX: of-sym(math.upright($L A T E X$)), + TeX: of-sym(math.upright($T E X$)), + middle: define-cmd(1, handle: it => math.mid(it)), + operatorname: define-cmd(1, handle: it => math.op(math.upright(it))), + operatornamewithlimits: define-cmd(1, alias: "operatornamewithlimits", handle: operatornamewithlimits), + "operatorname*": define-cmd(1, alias: "operatornamewithlimits", handle: operatornamewithlimits), + vspace: define-cmd(1, handle: it => v(mitex-safe-length(get-tex-str(it)))), + hspace: define-cmd(1, handle: it => h(mitex-safe-length(get-tex-str(it)))), + text: define-cmd(1, alias: "#textmath", handle: it => it), + textmd: define-cmd(1, alias: "#textmd", handle: it => it), + textnormal: define-cmd(1, alias: "#textnormal", handle: it => it), + textbf: define-cmd(1, alias: "#textbf", handle: math.bold), + textit: define-cmd(1, alias: "#textit", handle: math.italic), + textrm: define-cmd(1, alias: "#textrm", handle: math.upright), + textup: define-cmd(1, alias: "#textup", handle: math.upright), + textsf: define-cmd(1, alias: "#textsf", handle: math.sans), + texttt: define-cmd(1, alias: "#texttt", handle: math.mono), + over: define-infix-cmd("frac"), + atop: define-infix-cmd("atop", handle: (a, b) => $mat(delim: #none, #a; #b)$), + choose: define-infix-cmd("binom", handle: math.binom), + brace: define-infix-cmd("brace", handle: (n, k) => $mat(delim: "{", #n;; #k)$), + brack: define-infix-cmd("brack", handle: (n, k) => $mat(delim: "[", #n;; #k)$), + sqrt: define-glob-cmd("{,b}t", "mitexsqrt", handle: (..args) => { + if args.pos().len() == 1 { + $sqrt(#args.pos().at(0))$ + } else if args.pos().len() == 2 { + $root( + #args.pos().at(0).children.filter(it => it != [\[] and it != [\]]).sum(), + #args.pos().at(1) + )$ + } else { + panic("unexpected args in sqrt") + } + }), + // todo: macros + def: ignore-sym, + newcommand: ignore-sym, + "newcommand*": ignore-sym, + renewcommand: ignore-sym, + "renewcommand*": ignore-sym, + DeclareRobustCommand: ignore-sym, + "DeclareRobustCommand*": ignore-sym, + DeclareTextCommand: ignore-sym, + DeclareTextCommandDefault: ignore-sym, + ProvideTextCommand: ignore-sym, + ProvideTextCommandDefault: ignore-sym, + providecommand: ignore-sym, + "providecommand*": ignore-sym, + newenvironment: ignore-sym, + "newenvironment*": ignore-sym, + renewenvironment: ignore-sym, + "renewenvironment*": ignore-sym, + AtEndOfClass: ignore-sym, + AtEndOfPackage: ignore-sym, + AtBeginDocument: ignore-sym, + AtEndDocument: ignore-sym, + "@ifstar": ignore-sym, + "if": ignore-sym, + ifdim: ignore-sym, + iffalse: ignore-sym, + ifnum: ignore-sym, + ifodd: ignore-sym, + iftrue: ignore-sym, + ifx: ignore-sym, + DeclareOption: ignore-sym, + "DeclareOption*": ignore-sym, + CurrentOption: ignore-sym, + ProcessOptions: ignore-sym, + ExecuteOptions: ignore-sym, + RequirePackage: ignore-sym, + RequirePackageWithOptions: ignore-sym, + documentclass: ignore-sym, + PassOptionsToClass: ignore-sym, + PassOptionsToPackage: ignore-sym, + IfFileExists: ignore-sym, + InputIfFileExists: ignore-sym, + ProvidesFile: ignore-sym, + ignorespaces: ignore-sym, + ignorespacesafterend: ignore-sym, + ifvoid: ignore-sym, + ifinner: ignore-sym, + ifhbox: ignore-sym, + ifvbox: ignore-sym, + ifhmode: ignore-sym, + ifmmode: ignore-sym, + ifvmode: ignore-sym, + CheckCommand: ignore-sym, + "CheckCommand*": ignore-sym, + newcounter: ignore-sym, + newlength: ignore-sym, + newsavebox: ignore-sym, + newtheorem: ignore-sym, + newfont: ignore-sym, + ProvidesClass: ignore-sym, + LoadClass: ignore-sym, + LoadClassWithOptions: ignore-sym, +)) + +// export: include package name, spec and scope +#let package = (name: "latex-std", spec: (commands: spec), scope: scope) diff --git a/src-tauri/vendor/mitex/specs/mod.typ b/src-tauri/vendor/mitex/specs/mod.typ new file mode 100644 index 0000000..6b5d957 --- /dev/null +++ b/src-tauri/vendor/mitex/specs/mod.typ @@ -0,0 +1,12 @@ + +#import "prelude.typ": * +#import "latex/standard.typ": package as latex-std + +// 1. import all the packages and form a mitex-scope for mitex to use +#let packages = (latex-std,) +#let mitex-scope = packages.map(pkg => pkg.scope).sum() + +// 2. export all packages with specs by metadata and label, +// mitex-cli can fetch them by +// `typst query --root . ./packages/mitex/specs/mod.typ ""` +#metadata(packages) diff --git a/src-tauri/vendor/mitex/specs/prelude.typ b/src-tauri/vendor/mitex/specs/prelude.typ new file mode 100644 index 0000000..70789f0 --- /dev/null +++ b/src-tauri/vendor/mitex/specs/prelude.typ @@ -0,0 +1,230 @@ +/// Define a normal symbol, as no-argument commands like \alpha +/// +/// Arguments: +/// - s (str): Alias command for typst handler. +/// For example, alias `\prod` to typst's `product`. +/// - sym (content): The specific content, as the value of alias in mitex-scope. +/// For example, there is no direct alias for \negthinspace symbol in typst, +/// but we can add `h(-(3/18) * 1em)` ourselves +/// +/// Return: A spec item and a scope item (none for no scope item) +#let define-sym(s, sym: none) = { + ( + (kind: "alias-sym", alias: s), + if sym != none { + (alias: s, handle: sym) + } else { + none + }, + ) +} + +/// Define a greedy command, like \displaystyle +/// +/// Arguments: +/// - s (str): Alias command for typst handler. +/// For example, alias `\displaystyle` to typst's `mitexdisplay`, as the key in mitex-scope. +/// - handle (function): The handler function, as the value of alias in mitex-scope. +/// It receives a content argument as all greedy matches to the content +/// For example, we define `mitexdisplay` to `math.display` +/// +/// Return: A spec item and a scope item (none for no scope item) +#let define-greedy-cmd(s, handle: none) = { + ( + (kind: "greedy-cmd", alias: s), + if handle != none { + (alias: s, handle: handle) + } else { + none + }, + ) +} + +/// Define an infix command, like \over +/// +/// Arguments: +/// - s (str): Alias command for typst handler. +/// For example, alias `\over` to typst's `frac`, as the key in mitex-scope. +/// - handle (function): The handler function, as the value of alias in mitex-scope. +/// It receives two content arguments, as (prev, after) arguments. +/// For example, we define `\over` to `frac: (num, den) => $(num)/(den)$` +/// +/// Return: A spec item and a scope item (none for no scope item) +#let define-infix-cmd(s, handle: none) = { + ( + (kind: "infix-cmd", alias: s), + if handle != none { + (alias: s, handle: handle) + } else { + none + }, + ) +} + +/// Define a glob (Global Wildcard) match command with a specified pattern for matching args +/// Kind of item to match: +/// - Bracket/b: [] +/// - Parenthesis/p: () +/// - Term/t: any rest of terms, typically {} or single char +/// +/// Arguments: +/// - pat (pattern): The pattern for glob-cmd +/// For example, `{,b}t` for `\sqrt` to support `\sqrt{2}` and `\sqrt[3]{2}` +/// - s (str): Alias command for typst handler. +/// For example, alias `\sqrt` to typst's `mitexsqrt`, as the key in mitex-scope. +/// - handle (function): The handler function, as the value of alias in mitex-scope. +/// It receives variable length arguments, for example `(2,)` or `([3], 2)` for sqrt. +/// Therefore you need to use `(.. arg) = > {..}` to receive them. +/// +/// Return: A spec item and a scope item (none for no scope item) +#let define-glob-cmd(pat, s, handle: none) = { + ( + (kind: "glob-cmd", pattern: pat, alias: s), + if handle != none { + (alias: s, handle: handle) + } else { + none + }, + ) +} + +/// Define a command with a fixed number of arguments, like \hat{x} and \frac{1}{2} +/// +/// Arguments: +/// - num (int): The number of arguments for the command. +/// - alias (str): Alias command for typst handler. +/// For example, alias `\frac` to typst's `frac`, as the key in mitex-scope. +/// - handle (function): The handler function, as the value of alias in mitex-scope. +/// It receives fixed number of arguments, for example `frac(1, 2)` for `\frac{1}{2}`. +/// +/// Return: A spec item and a scope item (none for no scope item) +#let define-cmd(num, alias: none, handle: none) = { + ( + ( + kind: "cmd", + args: ("kind": "right", "pattern": (kind: "fixed-len", len: num)), + alias: alias, + ), + if handle != none { + (alias: alias, handle: handle) + } else { + none + }, + ) +} + +/// Define an environment with a fixed number of arguments, like \begin{alignedat}{2} +/// +/// Arguments: +/// - num (int): The number of arguments as environment options for the environment. +/// - alias (str): Alias command for typst handler. +/// For example, alias `\begin{alignedat}{2}` to typst's `alignedat`, +/// and alias `\begin{aligned}` to typst's `aligned`, as the key in mitex-scope. +/// - kind (str): environment kind, it could be "is-math", "is-cases", "is-matrix", +/// "is-itemize", "is-enumerate" +/// - handle (function): The handler function, as the value of alias in mitex-scope. +/// It receives fixed number of named arguments as environment options, +/// for example `alignedat(arg0: ..)` or `alignedat(arg0: .., arg1: ..)`. +/// And it receives variable length arguments as environment body, +/// Therefore you need to use `(.. arg) = > {..}` to receive them. +/// +/// Return: A spec item and a scope item (none for no scope item) +#let define-env(num, kind: "none", alias: none, handle: none) = { + ( + ( + kind: "env", + args: if num != none { + (kind: "fixed-len", len: num) + } else { + (kind: "none") + }, + ctx_feature: (kind: kind), + alias: alias, + ), + if handle != none { + (alias: alias, handle: handle) + } else { + none + }, + ) +} + +#let define-glob-env(pat, kind: "none", alias: none, handle: none) = { + ( + ( + kind: "glob-env", + pattern: pat, + ctx_feature: (kind: kind), + alias: alias, + ), + if handle != none { + (alias: alias, handle: handle) + } else { + none + }, + ) +} + +/// Define a symbol without alias and without handler function, like \alpha => alpha +/// +/// Return: A spec item and no scope item (none for no scope item) +#let sym = ((kind: "sym"), none) + +/// Define a symbol without alias and with handler function, +/// like \negthinspace => h(-(3/18) * 1em) +/// +/// Arguments: +/// - handle (function): The handler function, as the value of alias in mitex-scope. +/// For example, define `negthinspace` to handle `h(-(3/18) * 1em)` in mitex-scope +/// +/// Return: A symbol spec and a scope item +#let of-sym(handle) = ((kind: "sym"), (handle: handle)) + +/// Define a left1-op command without handler, like `\limits` for `\sum\limits` +/// +/// Arguments: +/// - alias (str): Alias command for typst handler. +/// For example, alias `\limits` to typst's `limits` +/// and alias `\nolimits` to typst's `scripts` +/// +/// Return: A cmd spec and no scope item (none for no scope item) +#let left1-op(alias) = ((kind: "cmd", args: (kind: "left1"), alias: alias), none) + +/// Define a cmd1 command like \hat{x} => hat(x) +/// +/// Return: A cmd1 spec and a scope item (none for no scope item) +#let cmd1 = ((kind: "cmd1"), none) + +/// Define a cmd2 command like \binom{1}{2} => binom(1, 2) +/// +/// Return: A cmd2 spec and a scope item (none for no scope item) +#let cmd2 = ((kind: "cmd2"), none) + +/// Define a matrix environment without handler +/// +/// Return: A matrix-env spec and a scope item (none for no scope item) +#let matrix-env = ((kind: "matrix-env"), none) + +/// Receives a list of definitions composed of the above functions, and processes them to return a dictionary containing spec and scope. +#let process-spec(definitions) = { + let spec = (:) + let scope = (:) + for (key, value) in definitions.pairs() { + let spec-item = value.at(0) + let scope-item = value.at(1) + spec.insert(key, spec-item) + if scope-item != none { + if "alias" in scope-item and type(scope-item.alias) == str { + let key = if scope-item.alias.starts-with("#") { + scope-item.alias.slice(1) + } else { + scope-item.alias + } + scope.insert(key, scope-item.handle) + } else { + scope.insert(key, scope-item.handle) + } + } + } + (spec: spec, scope: scope) +} diff --git a/src/App.tsx b/src/App.tsx index aa9a18e..b358c07 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -20,15 +20,17 @@ import { FindInFiles } from "./components/FindInFiles"; import { ProofPopover } from "./components/ProofPopover"; import { QuickOpen } from "./components/QuickOpen"; import { Recents } from "./components/Recents"; +import { Settings } from "./components/Settings"; import { Shortcuts } from "./components/Shortcuts"; import { Sidebar } from "./components/Sidebar"; import { Titlebar } from "./components/Titlebar"; import { Toast } from "./components/Toast"; +import { UpdateDialog } from "./components/UpdateDialog"; import { flushPendingSave, keepBuffer } from "./document"; import { DocumentEditor, PlainTextEditor, useDocumentFind } from "./editor"; import { Toolbar, type ToolbarSaveState } from "./editor/Toolbar"; import { MENU_ACTION_EVENT, isDesktop, isTauri } from "./ipc"; -import { onCommand, type CommandId } from "./keys/commands"; +import { onCommand } from "./keys/commands"; import { useKeymap } from "./keys/keymap"; import { handleMenuAction } from "./keys/menu"; import { openLink } from "./links"; @@ -36,20 +38,11 @@ import { documentKindForPath } from "./model/doc"; import { useDocument } from "./store/useDocument"; import { notify } from "./store/useToast"; import { useWorkspace } from "./store/useWorkspace"; +import { startUpdateChecks } from "./update"; import { useCompact, useTouch } from "./useMedia"; import { applyWidth } from "./width"; import { restoreSession, startWorkspaceEvents } from "./workspace"; -/** - * Commands whose whole result is a panel that this milestone does not have. They are bound keys - * and native menu rows already, so pressing one has to say something: a key that silently does - * nothing reads as a broken app rather than as an unfinished one. Each line goes when its panel - * arrives. - */ -const UNBUILT: ReadonlyArray<[CommandId, string]> = [ - ["settings", "There is no settings panel yet. The theme is in the title bar."], -]; - const baseName = (path: string): string => path.slice(path.lastIndexOf("/") + 1); function App() { @@ -109,13 +102,17 @@ function App() { onCommand("editor-width-narrow", () => applyWidth("narrow")), onCommand("editor-width-normal", () => applyWidth("normal")), onCommand("editor-width-wide", () => applyWidth("wide")), - ...UNBUILT.map(([id, message]) => onCommand(id, () => notify(message))), ]; return () => { for (const stop of stops) stop(); }; }, []); + // The check the app makes on its own, which is off unless the setting says otherwise and silent + // unless it finds something. Pressing Check for Updates goes through the command table instead + // and answers either way, because somebody who asked is owed a sentence. + useEffect(() => startUpdateChecks(), []); + const conflict = externalChange === "changed-on-disk"; // Asked once, when the conflict appears. Dismissing it leaves the warning in the toolbar to @@ -181,6 +178,8 @@ function App() { + + {resolving && conflict && path !== null && ( diff --git a/src/api/grammar.ts b/src/api/grammar.ts new file mode 100644 index 0000000..8f8e4c6 --- /dev/null +++ b/src/api/grammar.ts @@ -0,0 +1,17 @@ +// Grammar, which is Harper's. +// +// The same shape as src/api/spell.ts on purpose: a run of text goes over, problems come back with +// offsets counted from the start of that run, and neither side knows a document exists. That is +// what lets the editor send one paragraph and add its own base offset afterwards, and it is why +// the two checkers can share a decoration pipeline instead of growing a second one. + +import { call, type GrammarIssue } from "../ipc"; + +/** + * Whether this build has a grammar engine behind it. False hides the underlines and the popover's + * grammar half rather than offering a check that answers nothing, exactly as `spellAvailable` does. + */ +export const grammarAvailable = () => call("grammar_available"); + +/** Every grammar problem in one run of text, with offsets in characters from the start of it. */ +export const grammarCheck = (text: string) => call("grammar_check", { text }); diff --git a/src/api/pdf.ts b/src/api/pdf.ts new file mode 100644 index 0000000..79718ce --- /dev/null +++ b/src/api/pdf.ts @@ -0,0 +1,20 @@ +// PDF export. The source is built here and compiled there; these two calls are the boundary. + +import { call, type ImageInput } from "../ipc"; + +/** + * Compiles Typst source to PDF bytes. Warnings do not come back through the return value, because + * the answer is raw bytes and has no room for a second one: they arrive on `pdf-warnings` instead. + */ +export const pdfCompile = (source: string, images: readonly ImageInput[]) => + call("pdf_compile", { source, images }); + +/** + * Writes the finished file wherever the native save panel pointed. + * + * `Array.from` because the IPC boundary is JSON and a `Uint8Array` stringifies to an object with + * numeric keys, which is not a `Vec` on the other side. One export's worth of numbers is the + * cost of not inventing a second transport for a thing that happens once per document. + */ +export const pdfWrite = (path: string, bytes: Uint8Array) => + call("pdf_write", { path, bytes: Array.from(bytes) }); diff --git a/src/api/writing.ts b/src/api/writing.ts new file mode 100644 index 0000000..8634807 --- /dev/null +++ b/src/api/writing.ts @@ -0,0 +1,17 @@ +// Writing Tools, which is Apple's and not this app's. +// +// There is no API behind these two calls in the way there is behind spelling: the Rust side finds +// the system's own menu item and performs it, and the rewrite that follows lands in the webview by +// itself. Nothing here returns the new text, because nothing here is told what it is. + +import { call } from "../ipc"; + +/** + * Whether this machine can run a Writing Tool at all. It needs macOS 15.1 with Apple Intelligence + * turned on, which is a much newer Mac than this app's minimum, so false is an ordinary answer and + * the caller turns it into a toast rather than a button that does nothing. + */ +export const writingAvailable = () => call("writing_available"); + +/** Fires one item on the system's Writing Tools submenu, by its English title. */ +export const writingRun = (tool: string) => call("writing_run", { tool }); diff --git a/src/components/ProofPopover.tsx b/src/components/ProofPopover.tsx index 3482649..22ceb25 100644 --- a/src/components/ProofPopover.tsx +++ b/src/components/ProofPopover.tsx @@ -1,5 +1,14 @@ -// The menu over a misspelled word: what the system thinks was meant, and the two ways of saying it -// was not a mistake. +// The menu over an underlined word or phrase: what the checker thinks was meant, and the ways of +// saying it was not a mistake. +// +// One menu for both checkers, because from the reader's side there is one underline under one piece +// of their writing and it is either wrong or it is not. What changes with the kind is the top of the +// menu and the bottom of it. Grammar gets a heading: Harper's category for the rule and the sentence +// it wrote, because a grammar correction is a judgement in a way a spelling one is not, and taking +// "their own" over "there own" without being told why is how a checker teaches somebody nothing. +// Spelling keeps "Learn Spelling", and grammar does not get it: the dictionary that item writes to +// is the Mac's own and it holds words, so offering it for a phrase would be offering something that +// cannot happen. // // Mounted once and drawing nothing until src/editor/proofing.ts puts a word in the store, so App.tsx // holds one line for it rather than a piece of the feature. It renders into a portal because the @@ -44,6 +53,23 @@ const MARGIN = 8; /** Everything the arrow keys walk, which is every item and not only the suggestions. */ const ITEM = ".proof-suggestion, .proof-action"; +/** + * Harper's rule categories arrive as the names of its own enum: "WordChoice" is a serviceable key + * and a poor heading, so the words are split apart for the one place a person reads it. + */ +function readableKind(kind: string): string { + return kind.replace(/([a-z0-9])([A-Z])/g, "$1 $2"); +} + +/** + * A suggestion that deletes the text rather than replacing it arrives as an empty string, which is + * the correct thing to write and not something to put on a button. Harper offers it for a repeated + * word and for a redundancy, where what is being suggested really is "take this out". + */ +function suggestionLabel(suggestion: string): string { + return suggestion === "" ? "Remove" : suggestion; +} + /** * The chord's end of the feature, and the one line of explanation it owes when there is nothing * beside the caret to correct. @@ -148,6 +174,17 @@ function ProofMenu({ target }: { target: ProofTarget }) { e.stopPropagation(); }; + const grammar = target.grammar; + // Everything in the menu that is prose rather than a choice, in the order it is drawn, so a + // reader is told what the checker said and then what the menu can do about it. + const described = [ + grammar ? `${ids}-message` : null, + target.suggestions.length === 0 ? `${ids}-none` : null, + grammar ? null : `${ids}-note`, + ] + .filter((id) => id !== null) + .join(" "); + /** * The walk, and the trap. * @@ -172,18 +209,28 @@ function ProofMenu({ target }: { target: ProofTarget }) { ref={popRef} className="proof-pop" role="menu" - aria-label={`Spelling suggestions for ${target.word}`} - aria-describedby={ - target.suggestions.length === 0 ? `${ids}-none ${ids}-note` : `${ids}-note` - } + aria-label={`${grammar ? "Grammar" : "Spelling"} suggestions for ${target.word}`} + aria-describedby={described} style={{ left: at.left, top: at.top }} onKeyDown={onKeyDown} onContextMenu={(e) => e.preventDefault()} > - {/* The two paragraphs and the rule are not items, so a menu announces the things that can be - chosen and nothing else. Neither line is thrown away with them: both are named on the - menu's own aria-describedby above, which is where a sentence about a menu belongs and is + {/* None of the paragraphs and none of the rules are items, so a menu announces the things that + can be chosen and nothing else. None of the lines is thrown away with them: each is named on + the menu's own aria-describedby above, which is where a sentence about a menu belongs and is what gets them read once, on the way in, rather than as a row somebody has to arrow past. */} + {grammar && ( + <> +

+ {readableKind(grammar.kind)} +

+ +
+ + )} + {target.suggestions.length === 0 ? (
+ {!grammar && ( + + )} - - + {!grammar && ( + + )}
, document.body, ); diff --git a/src/components/Settings.tsx b/src/components/Settings.tsx new file mode 100644 index 0000000..ed1ae18 --- /dev/null +++ b/src/components/Settings.tsx @@ -0,0 +1,192 @@ +// Cmd+, and the Settings row on the app menu. Four things, and deliberately not a fifth: which +// version is running, whether there is a newer one, and the two proofing checkers. +// +// Everything else this app can be told is already somewhere better. The theme is in the title bar, +// the editor width is in the toolbar, and both of them are one click from the thing they change. +// Moving either in here would be a second place to look for a setting that already has a first one, +// so this panel holds only what has nowhere else to live. +// +// A checker the machine does not have leaves its row on screen and turns it off. The store's own +// comment argues for taking a missing checker off the screen entirely, and that is right for +// underlines and for the correction menu: an underline that is absent explains itself. A settings +// panel is where somebody goes to look for a setting, and a row that is simply not there reads as a +// missing feature rather than as a missing checker, so the row stays and says which it is. + +import { useEffect, useState } from "react"; +import { useEscapeLayer } from "../escape"; +import { onCommand } from "../keys/commands"; +import { useKeyContext } from "../keys/keymap"; +import { useProofing } from "../store/useProofing"; +import { useUpdate } from "../store/useUpdate"; +import { appVersion, checkForUpdates } from "../update"; +import { Icon } from "./Icon"; + +/** + * Which build this is, decided at bundle time. `pnpm dev`, and `tauri dev` on top of it, are the + * development one; a bundle built through `pnpm build` is the other. It is here because it is the + * first thing worth knowing when the updater says it is not enabled. + */ +const BUILD = import.meta.env.DEV ? "development build" : "release build"; + +function checkedLabel(at: number | null): string { + if (at === null) return "Not checked yet"; + const seconds = Math.max(0, Math.round((Date.now() - at) / 1000)); + if (seconds < 90) return "Checked just now"; + const minutes = Math.round(seconds / 60); + if (minutes < 60) return `Checked ${minutes} minutes ago`; + const hours = Math.round(minutes / 60); + if (hours < 24) return hours === 1 ? "Checked an hour ago" : `Checked ${hours} hours ago`; + const days = Math.round(hours / 24); + if (days < 30) return days === 1 ? "Checked yesterday" : `Checked ${days} days ago`; + return `Checked on ${new Date(at).toLocaleDateString()}`; +} + +interface SettingRowProps { + label: string; + /** The quiet second line. Empty means the row is one line tall. */ + note: string; + on: boolean; + disabled?: boolean; + onChange: (on: boolean) => void; +} + +function SettingRow({ label, note, on, disabled = false, onChange }: SettingRowProps) { + return ( +
+ + {label} + {note !== "" && {note}} + + +
+ ); +} + +export function Settings() { + const [open, setOpen] = useState(false); + const [version, setVersion] = useState(null); + + const phase = useUpdate((s) => s.phase); + const lastChecked = useUpdate((s) => s.lastChecked); + const automatic = useUpdate((s) => s.automatic); + const setAutomatic = useUpdate((s) => s.setAutomatic); + + const spelling = useProofing((s) => s.enabled); + const setSpelling = useProofing((s) => s.setEnabled); + const spellingAvailability = useProofing((s) => s.availability); + const grammar = useProofing((s) => s.grammar); + const setGrammar = useProofing((s) => s.setGrammar); + const grammarAvailability = useProofing((s) => s.grammarAvailability); + const ensureAvailable = useProofing((s) => s.ensureAvailable); + + useEffect(() => onCommand("settings", () => setOpen((v) => !v)), []); + useEscapeLayer(open, () => setOpen(false)); + useKeyContext("overlay", open); + + // Both asked on the way in rather than at launch. The editor asks the same two questions the + // first time it draws a document, and the store answers each of them once per run whichever of + // us gets there first. + useEffect(() => { + if (!open) return; + ensureAvailable(); + let live = true; + void appVersion().then((v) => { + if (live) setVersion(v); + }); + return () => { + live = false; + }; + }, [open, ensureAvailable]); + + if (!open) return null; + + const checking = phase === "checking"; + const spellingMissing = spellingAvailability === "missing"; + const grammarMissing = grammarAvailability === "missing"; + + return ( +
setOpen(false)}> +
e.stopPropagation()} + > +
+

Settings

+ +
+ +
+
+
Margin Docs
+
+ {version === null ? BUILD : `Version ${version}, ${BUILD}`} +
+
+ +
+
Updates
+
+ + Software update + {checkedLabel(lastChecked)} + + +
+ +
+ +
+
Proofing
+ + +
+
+
+
+ ); +} diff --git a/src/components/UpdateDialog.tsx b/src/components/UpdateDialog.tsx new file mode 100644 index 0000000..42d03af --- /dev/null +++ b/src/components/UpdateDialog.tsx @@ -0,0 +1,147 @@ +// There is a new version, and this is what the app says about it before it replaces itself. +// +// A toast was the earlier answer and it was the wrong one twice over: four seconds is not long +// enough to read release notes, and an update that installs itself the moment it is found takes a +// decision away from somebody who might be in the middle of a sentence. So the two answers are on +// screen at once, Later costs nothing, and the download is watched rather than waited on. +// +// Escape and the close button are live while the dialog is asking and gone once it is downloading, +// because dismissing a download that carries on in the background is a lie about what happened. +// There is no cancel: the plugin's download has no handle to stop it, and a button that only stops +// the dialog would be a worse promise than no button. + +import { useEffect, useRef } from "react"; +import { useEscapeLayer } from "../escape"; +import { useKeyContext } from "../keys/keymap"; +import { useUpdate } from "../store/useUpdate"; +import { dismissUpdate, installUpdate } from "../update"; +import { Icon } from "./Icon"; + +/** One decimal from a megabyte up, none below it, so the number under the bar stops twitching. */ +function bytes(count: number): string { + if (count < 1024) return `${count} B`; + if (count < 1024 * 1024) return `${Math.round(count / 1024)} kB`; + return `${(count / (1024 * 1024)).toFixed(1)} MB`; +} + +export function UpdateDialog() { + const phase = useUpdate((s) => s.phase); + const version = useUpdate((s) => s.version); + const notes = useUpdate((s) => s.notes); + const downloaded = useUpdate((s) => s.downloaded); + const total = useUpdate((s) => s.total); + const error = useUpdate((s) => s.error); + + const installRef = useRef(null); + + const open = + phase === "available" || phase === "downloading" || phase === "installing" || phase === "error"; + const busy = phase === "downloading" || phase === "installing"; + + useEffect(() => { + if (phase === "available") installRef.current?.focus(); + }, [phase]); + + useEscapeLayer(open && !busy, dismissUpdate); + useKeyContext("overlay", open); + + if (!open) return null; + + const percent = total === null || total === 0 ? null : Math.min(100, (downloaded / total) * 100); + + return ( +
+
e.stopPropagation()} + > +
+

{version === null ? "Update" : `Margin Docs ${version}`}

+ {!busy && ( + + )} +
+ +
+ {phase === "error" ? ( +

{error ?? "The update could not be installed."}

+ ) : ( + <> +

+ A new version is ready. Margin Docs will restart once it is installed, and anything + unsaved is written to disk first. +

+ {notes !== null && notes.trim() !== "" && ( +
+ {notes.trim()} +
+ )} + + )} + + {busy && ( +
+
+
+
+ + {phase === "installing" + ? "Installing…" + : total === null + ? `${bytes(downloaded)} downloaded` + : `${bytes(downloaded)} of ${bytes(total)}`} + +
+ )} +
+ +
+ {phase === "error" ? ( + + ) : ( + <> + {!busy && ( + + )} + + + )} +
+
+
+ ); +} diff --git a/src/dev/mockIpc.ts b/src/dev/mockIpc.ts index 16fcf4d..86e2119 100644 --- a/src/dev/mockIpc.ts +++ b/src/dev/mockIpc.ts @@ -19,6 +19,7 @@ import type { AssetResult, Backlink, FileNode, + GrammarIssue, IndexStatus, MatchRange, QuickOpenHit, @@ -210,6 +211,47 @@ const DEV_MISSPELLINGS: Record = { /** Words `spell_learn` was told about this session. The real checker teaches the whole machine. */ const devLearned = new Set(); +/** + * Grammar in a browser is not Harper either. It is a handful of patterns, which is enough to put a + * real underline under a real phrase, open a real popover and take a real correction. The rule + * names are Harper's own, so the popover shows what it will show in the app. + */ +const DEV_GRAMMAR: ReadonlyArray<{ pattern: RegExp; kind: string; message: string; fix: string }> = [ + { + pattern: /\bthe the\b/gi, + kind: "Repetition", + message: "Repeated word.", + fix: "the", + }, + { + pattern: /\bshould of\b/gi, + kind: "WordChoice", + message: "“Should of” is not a phrase; “should have” is.", + fix: "should have", + }, + { + pattern: /\bthere own\b/gi, + kind: "WordChoice", + message: "“There” is a place. The possessive is “their”.", + fix: "their own", + }, + { + pattern: /\bis are\b/gi, + kind: "Agreement", + message: "Two verbs where one belongs.", + fix: "are", + }, +]; + +/** Set to keep the dev fixture from claiming a Writing Tools menu the browser plainly has not got. */ +const noWritingTools = (): boolean => { + try { + return localStorage.getItem("margindocs-dev-no-writing-tools") === "1"; + } catch { + return false; + } +}; + export async function mockCall(command: string, args?: Record): Promise { const a = (args ?? {}) as Record; switch (command) { @@ -480,6 +522,47 @@ export async function mockCall(command: string, args?: Record x.start - y.start); + return issues as unknown as T; + } + + // Writing Tools has nothing behind it in a browser: there is no Edit menu to walk and no system + // to rewrite anything. What the fixture can serve is the two answers the UI has to handle, and + // which one it gives is a storage key, so a test can drive either. + case "writing_available": + return !noWritingTools() as unknown as T; + + case "writing_run": + return undefined as T; + + // A PDF the fixture cannot compile, and a header is enough: what the browser suite asserts about + // an export is that it asked, that it wrote nothing to the document, and that the bytes went to + // the panel's path. None of that needs a typesetter. + case "pdf_compile": + return new Uint8Array([0x25, 0x50, 0x44, 0x46, 0x2d, 0x31, 0x2e, 0x37]).buffer as unknown as T; + + case "pdf_write": + return undefined as T; + default: throw new Error(`dev mock has no handler for ${command}`); } diff --git a/src/editor/proofing.ts b/src/editor/proofing.ts index 092702b..d189c53 100644 --- a/src/editor/proofing.ts +++ b/src/editor/proofing.ts @@ -1,4 +1,4 @@ -// Spelling, drawn over the document as decorations and never as an edit to it. +// Spelling and grammar, drawn over the document as decorations and never as an edit to it. // // The whole of this file is paint and a menu. The only transaction in it that carries a step is the // one a user makes by choosing a suggestion, and that one is a single transaction so a single undo @@ -8,14 +8,29 @@ // rewrites text on its own would be a file damaging bug in this project's terms, so it does not have // the ability to. // +// TWO CHECKERS, ONE PIPELINE. +// +// Spelling is the system's and grammar is Harper's. They are separate settings, separate commands +// and separate answers, and they share everything between the document and the underline: the same +// blocks, the same batching, the same debounce, the same decoration set and the same popover. There +// is deliberately no second producer of strings and no second pass. The guard below is `proseBlocks` +// and it is one function; a guard that only one of the two checkers happened to go through is a +// guard that stops being there the day somebody adds a third call beside them. +// +// The caches are the one thing that is per checker, because the answers are. A block can have been +// asked about by one and not the other, which is exactly what the first launch after somebody turns +// grammar on looks like, and a single cache would either re-ask the whole document on every toggle +// or claim a block was checked for something it was never sent to. +// // WHAT IS CHECKED, and where that guard actually sits. // // Prose only. A fenced code block, a raw block, a maths field and an inline code span are not prose, // and underlining somebody's variable names is the fastest way to get a spell checker turned off for // good. The guard is `proseBlocks` below, and it is the single producer of every string this file -// sends: `pass` checks only what `proseBlocks` returned, `spellCheck` is called from nowhere else in -// the app outside src/api/spell.ts itself, and a block that never went to the checker has no entry -// in the cache and therefore no decoration. There is no second path to the checker to forget to +// sends to either checker: `pass` checks only what `proseBlocks` returned, `spellCheck` and +// `grammarCheck` are called from nowhere else in the app outside src/api/spell.ts and +// src/api/grammar.ts themselves, and a block that never went to a checker has no entry in that +// checker's cache and therefore no decoration. There is no second path to either one to forget to // guard, which is the shape of guard this project has now shipped four times unreached. // // A URL is the exception and it is deliberately not handled here. The Rust side asks AppKit to @@ -24,12 +39,13 @@ // // WHEN IT RUNS. // -// Not on every keystroke. Each check crosses the IPC boundary into AppKit, so typing schedules a -// pass a few hundred milliseconds out and every further keystroke pushes it back. A pass sends only -// the blocks whose text the checker has not already answered about, so an ordinary edit is one -// paragraph over the wire and a document nobody has touched is nothing at all. The cache is keyed by -// the exact text of a block, which is what makes that true without any range tracking: text the user -// has not touched is text that is still its own key. +// Not on every keystroke. Each check crosses the IPC boundary, into AppKit for spelling and into +// Harper's linter for grammar, so typing schedules a pass a few hundred milliseconds out and every +// further keystroke pushes it back. A pass sends only the blocks whose text a checker has not +// already answered about, so an ordinary edit is one paragraph over the wire and a document nobody +// has touched is nothing at all. A cache is keyed by the exact text of a block, which is what makes +// that true without any range tracking: text the user has not touched is text that is still its own +// key. // // AND WHY A STALE ANSWER CANNOT LAND. // @@ -46,8 +62,9 @@ import { Plugin, PluginKey, TextSelection } from "@tiptap/pm/state"; import type { EditorState, PluginView } from "@tiptap/pm/state"; import { Decoration, DecorationSet } from "@tiptap/pm/view"; import type { EditorView } from "@tiptap/pm/view"; +import { grammarCheck } from "../api/grammar"; import { spellCheck } from "../api/spell"; -import type { SpellIssue } from "../ipc"; +import type { GrammarIssue, SpellIssue } from "../ipc"; import { useProofing, type ProofTarget } from "../store/useProofing"; /** How long after the last keystroke a pass runs. Long enough that typing a word is one check. */ @@ -79,6 +96,18 @@ interface Block { text: string; } +/** + * The half of an answer this file's plumbing cares about, which is the same half for both checkers. + * + * Everything from the run batching to the cache to the offset arithmetic is about where a problem is + * and nothing about what it is, so it is written once against this and used twice, rather than + * copied and left to drift apart a fix at a time. + */ +interface Ranged { + start: number; + end: number; +} + /** Several blocks' text in one string, and where each of them starts in it. */ interface Run { text: string; @@ -86,14 +115,15 @@ interface Run { } /** - * What the checker has already said, keyed by the exact text it was said about. + * What each checker has already said, keyed by the exact text it was said about. * * Module level rather than per view because it is not about a document: two files that share a - * paragraph share its answer, and switching away from a document and back does not re-ask anything. - * It is pruned at the end of every pass down to the text that is actually in the document, so it - * cannot grow past the size of what is open. + * paragraph share its answers, and switching away from a document and back does not re-ask anything. + * Both are pruned at the end of every pass down to the text that is actually in the document, so + * neither can grow past the size of what is open. */ -let cache = new Map(); +const spellCache = new Map(); +const grammarCache = new Map(); /** * The view a menu acts on. There is one editor and one document (see src/editor/index.ts), so there @@ -156,8 +186,8 @@ function proseBlocks(doc: ProseMirrorNode): Block[] { return blocks; } -/** The distinct texts in the document the checker has not answered about yet. */ -function pending(blocks: readonly Block[]): string[] { +/** The distinct texts in the document one checker has not answered about yet. */ +function pending(cache: ReadonlyMap, blocks: readonly Block[]): string[] { const seen = new Set(); const out: string[] = []; for (const block of blocks) { @@ -193,13 +223,18 @@ function runsOf(texts: readonly string[]): Run[] { * next pass would send again, so a paragraph the checker is happy with has to be recorded as * checked or the document with no misspellings in it is the one that never stops asking. */ -function store(run: Run, issues: readonly SpellIssue[]): void { - const byPart = run.parts.map(() => [] as SpellIssue[]); +function store( + cache: Map, + run: Run, + issues: readonly T[], +): void { + const byPart = run.parts.map(() => [] as T[]); for (const issue of issues) { const index = run.parts.findIndex( (part) => issue.start >= part.at && issue.end <= part.at + part.text.length, ); - // An issue that reaches across the join between two blocks is not a word in either of them. + // An issue that reaches across the join between two blocks is not about either of them: a + // misspelling is not a word there, and a sentence is not one sentence there. if (index === -1) continue; const part = run.parts[index]; byPart[index].push({ ...issue, start: issue.start - part.at, end: issue.end - part.at }); @@ -207,47 +242,88 @@ function store(run: Run, issues: readonly SpellIssue[]): void { run.parts.forEach((part, index) => cache.set(part.text, byPart[index])); } -/** Down to what is in the document, so the cache is never larger than what is open. */ -function prune(blocks: readonly Block[]): void { - const kept = new Map(); - for (const block of blocks) { - const issues = cache.get(block.text); - if (issues) kept.set(block.text, issues); +/** + * Down to what is in the document, so a cache is never larger than what is open. + * + * In place rather than by building a smaller map, so that the two maps below are the same two + * objects for the life of the module. A pass hands one of them to `store` and then waits on the IPC + * boundary, and a second pass can finish and prune in the meantime; if pruning swapped the map, the + * first pass would come back and file its answers into one nothing reads any more. + */ +function prune(cache: Map, blocks: readonly Block[]): void { + const alive = new Set(blocks.map((block) => block.text)); + for (const text of cache.keys()) { + if (!alive.has(text)) cache.delete(text); } - cache = kept; +} + +/** Which underlines are wanted, and what has been waved away for this sitting. */ +interface Drawing { + spelling: boolean; + grammar: boolean; + ignored: ReadonlySet; } /** - * The decorations for the document as it stands, built from what the checker has already said. + * Whether an issue's offsets sit inside the block it claims to be about. + * + * A checker is a foreign process walking the user's text, and a decoration running past the end of + * a node throws inside the view rather than merely looking wrong, so an answer that does not fit is + * dropped rather than clamped: an underline in the wrong place is a claim about the wrong words. + */ +function inside(issue: Ranged, block: Block): boolean { + return issue.start >= 0 && issue.end > issue.start && issue.end <= block.text.length; +} + +/** + * The decorations for the document as it stands, built from what the checkers have already said. * * A block with nothing cached contributes nothing, which is what an underline that has not arrived - * yet looks like, and an issue whose offsets do not sit inside the block they claim to be about is - * dropped: the checker is a foreign process walking the user's text, and a decoration running past - * the end of a node throws inside the view rather than merely looking wrong. + * yet looks like. The two kinds are built in the same set and can overlap: a misspelled word inside + * a phrase Harper does not like gets both marks, and `menuAt` below decides which of them a click + * is about. */ -function decorationsFor( - doc: ProseMirrorNode, - blocks: readonly Block[], - ignored: ReadonlySet, -): DecorationSet { +function decorationsFor(doc: ProseMirrorNode, blocks: readonly Block[], what: Drawing): DecorationSet { const decorations: Decoration[] = []; for (const block of blocks) { - const issues = cache.get(block.text); - if (!issues) continue; - for (const issue of issues) { - if (issue.start < 0 || issue.end <= issue.start || issue.end > block.text.length) continue; - if (ignored.has(issue.word.toLowerCase())) continue; - decorations.push( - Decoration.inline( - block.base + issue.start, - block.base + issue.end, - { class: "proof-mark" }, - // The word and its suggestions ride on the decoration rather than in a list beside it, so - // that mapping the set through an edit keeps the menu's offer attached to the word it was - // about instead of to a position that has moved. - { word: issue.word, suggestions: issue.suggestions }, - ), - ); + if (what.spelling) { + for (const issue of spellCache.get(block.text) ?? []) { + if (!inside(issue, block) || what.ignored.has(issue.word.toLowerCase())) continue; + decorations.push( + Decoration.inline( + block.base + issue.start, + block.base + issue.end, + { class: "proof-mark" }, + // The word and its suggestions ride on the decoration rather than in a list beside it, + // so that mapping the set through an edit keeps the menu's offer attached to the word it + // was about instead of to a position that has moved. + { word: issue.word, suggestions: issue.suggestions, grammar: null }, + ), + ); + } + } + if (what.grammar) { + for (const issue of grammarCache.get(block.text) ?? []) { + if (!inside(issue, block)) continue; + // Harper answers about a span rather than about a word, so what the popover is "about" is + // whatever that span covers. It is taken from the block's own text for the same reason the + // spelling half takes the word the checker sent back: it is what a suggestion will be + // checked against before anything is written. + const text = block.text.slice(issue.start, issue.end); + if (what.ignored.has(text.toLowerCase())) continue; + decorations.push( + Decoration.inline( + block.base + issue.start, + block.base + issue.end, + { class: "proof-mark-grammar" }, + { + word: text, + suggestions: issue.suggestions, + grammar: { kind: issue.kind, message: issue.message }, + }, + ), + ); + } } } return DecorationSet.create(doc, decorations); @@ -263,41 +339,79 @@ function clear(view: EditorView): void { draw(view, DecorationSet.empty); } +/** What is turned on right now, and available to be turned on at all. */ +function wanted(): Drawing { + const state = useProofing.getState(); + return { + spelling: state.enabled && state.availability === "ready", + grammar: state.grammar && state.grammarAvailability === "ready", + ignored: state.ignored, + }; +} + /** - * One check of whatever the checker has not seen, and then a redraw. + * One check of whatever the checkers have not seen, and then a redraw. * * The decorations are built from `view.state.doc` after the awaits rather than from the document the * pass started on. By then the sequence number has already answered whether anything moved, so the * two agree; building from what is on screen is what makes that a fact about the code rather than a * fact about the timing. + * + * Spelling first and grammar after, rather than both at once. The two calls are cheap and the user + * is typing while they run, so the useful thing is that the commoner of the two answers first and + * its underlines land while the other is still being asked, not that the pair finishes a few + * milliseconds sooner. */ async function pass(view: EditorView): Promise { const seq = passSeq; - const state = useProofing.getState(); - if (!state.enabled || state.availability !== "ready") { + const what = wanted(); + if (!what.spelling && !what.grammar) { clear(view); return; } - for (const run of runsOf(pending(proseBlocks(view.state.doc)))) { - try { - store(run, await spellCheck(run.text)); - } catch { - // The checker went away mid document, which on a build without one is what the first call - // does. Nothing is drawn and nothing is said: what is already underlined stays, and the next - // edit asks again. - return; + const blocks = proseBlocks(view.state.doc); + // A checker that is not there, which on a build without one is what the first call finds out, + // ends its own half of the pass and says nothing. There is no toast: "this build cannot check + // grammar" is what the availability question the store asks once per launch is for, and not + // something worth repeating on every keystroke. The other checker's loop is untouched, which is + // why each has its own catch rather than the pair sharing one, and the redraw below still happens + // from whatever the two of them had already answered. + if (what.spelling) { + for (const run of runsOf(pending(spellCache, blocks))) { + try { + store(spellCache, run, await spellCheck(run.text)); + } catch { + break; + } + } + } + if (what.grammar) { + for (const run of runsOf(pending(grammarCache, blocks))) { + try { + store(grammarCache, run, await grammarCheck(run.text)); + } catch { + break; + } } } if (seq !== passSeq || view.isDestroyed) return; - const blocks = proseBlocks(view.state.doc); - draw(view, decorationsFor(view.state.doc, blocks, useProofing.getState().ignored)); - prune(blocks); + const current = proseBlocks(view.state.doc); + draw(view, decorationsFor(view.state.doc, current, wanted())); + prune(spellCache, current); + prune(grammarCache, current); +} + +/** Harper's half of a decoration's spec, and null for a spelling one. */ +function grammarOf(value: unknown): ProofTarget["grammar"] { + if (typeof value !== "object" || value === null) return null; + const { kind, message } = value as { kind?: unknown; message?: unknown }; + return typeof kind === "string" && typeof message === "string" ? { kind, message } : null; } /** - * Puts the menu over one underlined word, whichever of the three ways in found it. + * Puts the menu over one underlined run of text, whichever of the three ways in found it. * * `fromKeyboard` is the only thing that separates a chord from a pointer once the word is known, * and the menu reads it to decide whether to take focus. A click has already put the caret where @@ -306,7 +420,7 @@ async function pass(view: EditorView): Promise { * offered. */ function openFor(view: EditorView, hit: Decoration, fromKeyboard: boolean): boolean { - const spec = hit.spec as { word?: unknown; suggestions?: unknown }; + const spec = hit.spec as { word?: unknown; suggestions?: unknown; grammar?: unknown }; if (typeof spec.word !== "string") return false; const start = view.coordsAtPos(hit.from); @@ -319,6 +433,7 @@ function openFor(view: EditorView, hit: Decoration, fromKeyboard: boolean): bool 0, MAX_SUGGESTIONS, ), + grammar: grammarOf(spec.grammar), left: (start.left + end.left) / 2, top: start.top, // A word that wraps across two lines ends on the lower one, which is where the menu belongs. @@ -328,7 +443,7 @@ function openFor(view: EditorView, hit: Decoration, fromKeyboard: boolean): bool return true; } -/** The misspelling under a position, if the menu should open over one. */ +/** The underlined text under a position, if the menu should open over it. */ function menuAt(view: EditorView, pos: number): boolean { // A document held open while a conflict is resolved is one nothing may edit, and a menu whose // every item is an edit has nothing to offer there. The underlines stay; the menu does not open. @@ -337,14 +452,20 @@ function menuAt(view: EditorView, pos: number): boolean { if (!decorations) return false; const found = decorations.find(pos, pos); if (found.length === 0) return false; - // A position at the seam between two words touches both, so a hit that actually contains it wins. - const hit = found.find((deco) => deco.from < pos && pos < deco.to) ?? found[0]; + // A position at the seam between two words touches both, so hits that actually contain it win. + // Among those, the shortest: a misspelled word inside a phrase Harper flagged carries both marks, + // and a click on that word is about the word. The phrase is still one click away, on any of the + // characters the word does not cover. + const containing = found.filter((deco) => deco.from < pos && pos < deco.to); + const hit = (containing.length > 0 ? containing : found).reduce((best, deco) => + deco.to - deco.from < best.to - best.from ? deco : best, + ); return openFor(view, hit, false); } /** - * The same menu, opened by a chord instead of by a pointer, over the misspelling at the caret or - * the nearest one to it. + * The same menu, opened by a chord instead of by a pointer, over the underlined text at the caret + * or the nearest to it, of either kind. * * Nearest within the caret's own paragraph and no further. The menu is placed at the viewport * coordinates of the word it is about, so a search that ran to the end of the document would open a @@ -397,12 +518,16 @@ class Proofreader implements PluginView { this.unsubscribe = useProofing.subscribe((next, previous) => { // A learned word changes the answer for text nobody has touched, so it is the one thing that - // throws away what the checker already said. Ignoring a word does not: it is filtered when the - // decorations are built, so putting it back costs nothing. - if (next.revision !== previous.revision) cache.clear(); + // throws away what a checker already said. Only the spelling half: Harper's own spell rule is + // off (see src-tauri/src/grammar.rs), so the system dictionary growing a word cannot change a + // single thing it said. Ignoring a word throws away nothing either way, since it is filtered + // when the decorations are built and putting it back costs nothing. + if (next.revision !== previous.revision) spellCache.clear(); if ( next.enabled === previous.enabled && next.availability === previous.availability && + next.grammar === previous.grammar && + next.grammarAvailability === previous.grammarAvailability && next.ignored === previous.ignored && next.revision === previous.revision ) { @@ -441,18 +566,25 @@ class Proofreader implements PluginView { } /** - * Puts a suggestion in place of the word the menu was opened over. + * Puts a suggestion in place of the text the menu was opened over, a word for spelling and a phrase + * for grammar. * - * One transaction, so one undo takes it back, and refused outright unless the word is still exactly + * One transaction, so one undo takes it back, and refused outright unless that text is still exactly * where the menu said it was. The menu closes on every document change, so that check should never * fail; it is here because this is the one function in the file that can write to somebody's * document, and it is worth being unable to write to the wrong part of it. * + * The one case where it refuses something a user meant is a grammar span reaching across an inline + * code span. `blockText` blanked the code into spaces and the document has the code itself there, so + * the two do not match and nothing is written. That is the right way round: a phrase Harper judged + * without being shown the code in the middle of it is a phrase whose correction would have eaten the + * code, and refusing costs a gesture where writing it would cost the line. + * * No `fits` guard, unlike every insert in src/editor/Editor.tsx, and for the reason src/editor/ * fits.test.ts gives the find bar's replace: this is text going into the one textblock it came out * of, not a node being placed somewhere it may not go. The range is inside a block that `proseBlocks` - * already refused to send if it was code or raw, and a suggestion is one word, so there is no blank - * line in it for `holdsText` to be about. + * already refused to send if it was code or raw, and a suggestion is a few words at most, so there + * is no blank line in it for `holdsText` to be about. */ export function replaceSpelling(target: ProofTarget, suggestion: string): void { const view = activeView; diff --git a/src/editor/writing.ts b/src/editor/writing.ts new file mode 100644 index 0000000..6cb2399 --- /dev/null +++ b/src/editor/writing.ts @@ -0,0 +1,173 @@ +// Writing Tools, from the editor's side. +// +// The system rewrites the selection by mutating the DOM under prosemirror-view, which reparses it. +// That is the same seam docs/architecture.md blames for the hard break bug, so this module is where +// the guard belongs: what may be handed to a rewrite, and what has to be refused before one starts. +// +// WHAT THE BYTES ACTUALLY DO, because none of the below is a guess. tests/writing-tools.spec.ts +// makes the mutation the system makes, in a running editor, and reads the file afterwards. +// +// Prose survives. A hand wrapped paragraph rewritten across its wraps comes back as one line and +// no backslash anywhere; a heading, a list item and a single table cell all keep their spelling; +// markdown characters that arrive in the new text are escaped, so a rewrite that opens with "1." or +// "-" stays the paragraph it was. A newline in the new text is a newline in the file, which is the +// paragraph's own contract, and a pipe inside a cell comes out `\|`. +// +// Structure does not. A selection with an end in each of two blocks is where every real failure +// was: two paragraphs became three with ` ` in the middle of the user's words, a heading and +// the paragraph under it became a truncated heading and an invented paragraph, two list items +// became three, and two table cells became a table one column wider whose rows disagree, which is +// not a table any more. So a rewrite gets one block, and it is refused rather than trimmed to fit: +// the selection is the user's and silently rewriting a different range than the one they made is +// its own bug. +// +// Inside one block, the danger is anything whose spelling is not in the words on screen. A range +// crossing a link is replaced by plain text and the address goes with it, invisibly, and the same +// gesture eats an inline picture. A range wholly inside a link is safe and stays allowed, because +// the mark is an ancestor of it rather than something it can delete. Code and formulae are refused +// the way src/editor/proofing.ts refuses them, and for its reason rather than a byte one: a fenced +// block, a raw block and a code span all round trip cleanly, and a tool that rewrites somebody's +// variable names is a tool they turn off. A raw block is the file's own bytes and the only correct +// thing to do with them is nothing. +// +// Nothing here writes to the document. The rewrite arrives as a DOM mutation, TipTap sees the +// transaction it becomes and the shell's debounce saves it, exactly as if the user had typed. +// +// AND THE SELECTION IS READ, NEVER PUT BACK. Writing Tools rewrites whatever holds the keyboard, so +// the document has to be holding it before one starts, and this refuses rather than reaching over +// and focusing the document itself. That is not squeamishness, it was measured: the command palette +// runs its row and then closes on to ``, and focusing the editor at that moment is what +// destroys the selection rather than what saves it, because prosemirror-view takes the collapsed +// selection left behind by the panel that just unmounted as the document's new one. A refusal that +// says which gesture to use costs the user one click. A rewrite aimed at a caret it moved itself +// costs them a paragraph. + +import { writingAvailable, writingRun } from "../api/writing"; +import { notify } from "../store/useToast"; + +/** The two items this app puts on the menu, named as the system's own submenu names them. */ +const TITLES = { proofread: "Proofread", rewrite: "Rewrite" } as const; + +export type WritingTool = keyof typeof TITLES; + +const UNAVAILABLE = + "Writing Tools needs macOS 15.1 or later with Apple Intelligence turned on."; + +/** The two editables a document is ever open in. Exactly one of them is on screen at a time. */ +const MARKDOWN = ".prose"; +const PLAIN = "textarea.plain-text"; + +/** + * Every block a selection's two ends are measured against, prose or not. The ones that may not be + * rewritten are in the list on purpose: a range inside a fence has to resolve to the fence so the + * refusal can name it, rather than resolving to nothing and being reported as spanning blocks. + */ +const BLOCKS = "p, h1, h2, h3, h4, h5, h6, td, th, pre, [data-math-block]"; + +/** What a range inside one prose block may not contain, and what a partly covered one clones as. */ +const FRAGILE = "a, code, img, .math-inline"; + +const REFUSED = { + closed: "Open a document first.", + unfocused: + "Writing Tools rewrites whatever holds the keyboard. Click into the document, select the text you want changed, and use the Edit menu.", + empty: "Select the text you want Writing Tools to change first.", + blocks: + "Writing Tools rewrites one paragraph at a time, and that selection covers more than one.", + raw: "That block is the file's own bytes, kept exactly as they were read, so Writing Tools is not offered it.", + code: "Writing Tools is not offered code.", + math: "Writing Tools is not offered a formula.", + summary: "Writing Tools is not offered a toggle's summary.", + link: "That selection covers a link, and a rewrite would take its address with it. Select the words either side instead.", + image: "That selection covers a picture, and a rewrite would take it out of the document.", +} as const; + +function elementOf(node: Node | null): Element | null { + if (!node) return null; + return node.nodeType === Node.ELEMENT_NODE ? (node as Element) : node.parentElement; +} + +/** The block a range end is in, or null when it is somewhere with no block under it at all. */ +const blockOf = (node: Node): Element | null => elementOf(node)?.closest(BLOCKS) ?? null; + +/** Why this block may not be rewritten, or null when it is prose. */ +function blockRefusal(block: Element): string | null { + if (block.matches("pre[data-raw]")) return REFUSED.raw; + if (block.matches("pre")) return REFUSED.code; + if (block.matches("[data-math-block]")) return REFUSED.math; + return null; +} + +/** + * Why the run inside one prose block may not be rewritten, or null when it may. + * + * Two questions, not one. `cloneContents` reports what the range covers, including an element it + * covers only part of, which is the case that destroys a link. It says nothing about an element the + * range sits wholly inside, since that is an ancestor rather than content, so the marks around the + * range are asked for separately. + */ +function contentRefusal(range: Range): string | null { + const around = elementOf(range.commonAncestorContainer); + if (around?.closest("code")) return REFUSED.code; + if (around?.closest(".math-inline")) return REFUSED.math; + + const covered = range.cloneContents().querySelector(FRAGILE); + if (!covered) return null; + if (covered.matches("code")) return REFUSED.code; + if (covered.matches("img")) return REFUSED.image; + if (covered.matches(".math-inline")) return REFUSED.math; + return REFUSED.link; +} + +/** Why the selection on screen may not be handed to a rewrite, or null when it may. */ +function selectionRefusal(): string | null { + const surface = document.querySelector(`${MARKDOWN}, ${PLAIN}`); + if (!surface) return REFUSED.closed; + + const active = document.activeElement; + + // A .txt file is a textarea with no markdown in it to lose, so there is nothing here to guard + // beyond the document holding the keyboard with something selected in it. + if (surface.matches(PLAIN)) { + const field = surface as HTMLTextAreaElement; + if (active !== field) return REFUSED.unfocused; + return field.selectionStart === field.selectionEnd ? REFUSED.empty : null; + } + + // A formula's source field and a toggle's title are editables of their own nested inside the + // document, so each takes the keyboard away from it. Neither is prose in a block of the file, and + // saying which one the cursor is in is worth more than the general answer below. + if (active && active !== surface && surface.contains(active)) { + if (active.closest("[data-math-block]")) return REFUSED.math; + if (active.closest("[data-toggle-summary]")) return REFUSED.summary; + return REFUSED.unfocused; + } + if (active !== surface) return REFUSED.unfocused; + + const selection = window.getSelection(); + if (!selection || selection.rangeCount === 0) return REFUSED.empty; + const range = selection.getRangeAt(0); + if (range.collapsed || !surface.contains(range.commonAncestorContainer)) return REFUSED.empty; + + const block = blockOf(range.startContainer); + if (!block || block !== blockOf(range.endContainer)) return REFUSED.blocks; + + return blockRefusal(block) ?? contentRefusal(range); +} + +export async function runWritingTool(tool: WritingTool): Promise { + try { + if (!(await writingAvailable())) { + notify(UNAVAILABLE); + return; + } + const refusal = selectionRefusal(); + if (refusal) { + notify(refusal); + return; + } + await writingRun(TITLES[tool]); + } catch (e) { + notify(`Could not run Writing Tools: ${String(e)}`); + } +} diff --git a/src/export/run.ts b/src/export/run.ts new file mode 100644 index 0000000..f5035da --- /dev/null +++ b/src/export/run.ts @@ -0,0 +1,173 @@ +// Running an export: the document on screen becomes Typst source, the source becomes PDF bytes, +// and the bytes go wherever the native save panel points. +// +// Nothing in here writes the user's markdown or touches the open buffer. An export of a document +// with unsaved edits exports what is on screen, and leaves the file alone: this module never calls +// `save`, never dispatches a transaction, and never asks the document store for anything but the +// tree it is already holding. That is not an accident of the current code, it is the requirement. +// A save before an export would mean choosing to export a document turns into writing over a file +// the user had not decided to write yet, and there is no undo for that on disk. + +import { listen } from "@tauri-apps/api/event"; +import { save as savePanel } from "@tauri-apps/plugin-dialog"; +import type { Node as ProseMirrorNode } from "@tiptap/pm/model"; +import { pdfCompile, pdfWrite } from "../api/pdf"; +import { PDF_WARNINGS_EVENT, isDesktop, isTauri, type PdfWarning } from "../ipc"; +import { useDocument } from "../store/useDocument"; +import { notify } from "../store/useToast"; +import { diagramSources, documentToTypst, renderDiagrams, type Diagrams, type TypstDocument } from "./typst"; + +type Phase = "idle" | "converting" | "compiling" | "writing"; + +/** + * Where the export has got to. A phase rather than a boolean because there are four answers and + * only one of them is "nothing is happening", and because the second Cmd-E while a fifty page + * document is compiling has to be refused rather than queued behind the first. + */ +let phase: Phase = "idle"; + +const baseName = (path: string): string => path.slice(path.lastIndexOf("/") + 1) || path; + +/** The same name with a .pdf on it, which is what the save panel opens with. */ +function suggestedName(path: string): string { + const name = baseName(path); + const dot = name.lastIndexOf("."); + return `${dot > 0 ? name.slice(0, dot) : name}.pdf`; +} + +function describe(warnings: readonly PdfWarning[]): string { + const total = warnings.reduce((sum, warning) => sum + Math.max(1, warning.count), 0); + const first = warnings[0]?.message ?? ""; + if (total <= 1) return first; + return `${first} (and ${total - 1} more)`; +} + +/** + * Warnings arrive on an event rather than with the bytes, so the listener has to be up before the + * compile starts and down again after it. Anything that arrives outside that window belongs to + * somebody else's export and is none of this call's business. + */ +async function withWarnings(work: () => Promise): Promise<{ result: T; warnings: PdfWarning[] }> { + const warnings: PdfWarning[] = []; + // In a browser there is no Tauri event bus to listen on. The dev fixture answers the two commands + // so the path can be walked, and it has no warnings to send. + const unlisten = isTauri + ? await listen(PDF_WARNINGS_EVENT, (event) => { + if (Array.isArray(event.payload)) warnings.push(...event.payload); + }) + : null; + try { + return { result: await work(), warnings }; + } finally { + unlisten?.(); + } +} + +/** Whether a document has anything for the maths package to choke on. */ +function hasMath(doc: ProseMirrorNode): boolean { + let found = false; + doc.descendants((node) => { + if (node.type.name === "mathInline" || node.type.name === "mathBlock") found = true; + return !found; + }); + return found; +} + +/** + * The compile, and the one retry worth making. + * + * mitex fails a compile rather than a formula: LaTeX it cannot parse is a hard error out of the + * plugin, and there is no try in Typst to put around it. So a document whose maths will not typeset + * would otherwise cost the whole PDF, over one expression, with no way for the author to tell which. + * The second attempt writes every formula as the monospace source the editor already shows on + * screen, which is a page the author can read and act on rather than a failure they cannot. + * + * Only for a document that actually has a formula in it. Anything else that fails to compile failed + * for a reason a second identical compile will not fix. + * + * This is the second line and not the first. src-tauri/src/pdf.rs already retries a compile that + * mitex brought down, by serving a stand-in library that sets each formula as the source it was + * written in, and that catches almost everything: reaching here means even that failed. The two + * are worth having separately because they fail differently. That one still goes through mitex's + * own files; this one regenerates the source without asking mitex anything at all. + */ +async function compileWithFallback( + doc: ProseMirrorNode, + path: string, + diagrams: Diagrams, + first: TypstDocument, +): Promise<{ bytes: ArrayBuffer; warnings: PdfWarning[]; retried: boolean }> { + try { + const attempt = await withWarnings(() => pdfCompile(first.source, first.images)); + return { bytes: attempt.result, warnings: attempt.warnings, retried: false }; + } catch (e) { + if (!hasMath(doc)) throw e; + const literal = documentToTypst(doc, path, { diagrams, math: "literal" }); + const attempt = await withWarnings(() => pdfCompile(literal.source, literal.images)); + return { bytes: attempt.result, warnings: attempt.warnings, retried: true }; + } +} + +/** + * The whole export, from the tree in the editor to a file on disk. + * + * Bound to the `export-pdf` command in src/keys/commands.ts, which is the only caller. + */ +export async function exportPdf(): Promise { + if (phase !== "idle") { + notify("An export is already running."); + return; + } + + const { path, content } = useDocument.getState(); + if (path === null || content === null) { + notify("Open a document to export it."); + return; + } + // The save panel is a window API, so it is not merely absent in a browser, it is refused. There + // is no point compiling a PDF this build has nowhere to put. + if (!isDesktop) { + notify("PDF export needs the desktop app."); + return; + } + + phase = "converting"; + try { + // Drawn before the conversion rather than during it, because mermaid is asynchronous and wants + // a DOM, and the converter is neither. A diagram that will not draw is simply missing from the + // map and comes out of the converter as the fence it always was. + const drawings = await renderDiagrams(content); + const undrawn = diagramSources(content).length - drawings.size; + + const converted = documentToTypst(content, path, { diagrams: drawings }); + + phase = "compiling"; + const { bytes, warnings, retried } = await compileWithFallback(content, path, drawings, converted); + + phase = "writing"; + const target = await savePanel({ + title: "Export as PDF", + defaultPath: suggestedName(path), + filters: [{ name: "PDF", extensions: ["pdf"] }], + }); + if (target === null) return; + + await pdfWrite(target, new Uint8Array(bytes)); + + const trouble = [ + ...converted.warnings, + ...(undrawn > 0 ? [`${undrawn} diagram${undrawn === 1 ? "" : "s"} could not be drawn`] : []), + ...(retried ? ["every formula shown as the source it was written in"] : []), + ...(warnings.length > 0 ? [describe(warnings)] : []), + ]; + notify( + trouble.length === 0 + ? `Exported ${baseName(target)}` + : `Exported ${baseName(target)}, with ${trouble.join("; ")}`, + ); + } catch (e) { + notify(`Could not export: ${String(e)}`); + } finally { + phase = "idle"; + } +} diff --git a/src/export/typst.test.ts b/src/export/typst.test.ts new file mode 100644 index 0000000000000000000000000000000000000000..b4ddea9495df1833f60da710829d033b96468e56 GIT binary patch literal 19563 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 + +/** + * How a formula is written out. + * + * `typeset` hands the LaTeX to mitex, which is the point of having maths at all. `literal` writes + * it as its own source in monospace, which is what the editor shows on screen and what an export + * falls back to when mitex will not take the document's LaTeX: mitex fails a compile rather than + * a formula, so one expression it cannot parse would otherwise cost the whole PDF. + */ +export type MathMode = "typeset" | "literal"; + +export interface TypstOptions { + diagrams?: Diagrams; + math?: MathMode; +} + +const MERMAID = "mermaid"; + +/** + * Where an image with no file behind it is put. + * + * The leading slash is load bearing. Typst resolves `image("x")` against the file that wrote it and + * the backend's resolver answers on the resolved path, so a relative name in a document compiled at + * the root would be looked up as `/x` and not found. Everything this module names is rooted, which + * is also true of the file-backed images: those carry the absolute path the backend reads them from. + */ +const INLINE = "/inline/"; + +// ------------------------------------------------------------------------------------------------ +// The boundary +// ------------------------------------------------------------------------------------------------ + +/** + * A lone surrogate is half of a character, and it survives neither the JSON of the IPC boundary nor + * UTF-8 on the other side of it. Nothing in a real document has one; a paste out of a broken tool + * does, and it must not be the thing that decides whether an export happens. + */ +function sanitize(value: string): string { + let out = ""; + for (const ch of value) { + const code = ch.codePointAt(0) ?? 0; + out += code >= 0xd800 && code <= 0xdfff ? "�" : ch; + } + return out; +} + +/** + * The one place a string from the document becomes Typst source. + * + * A Typst string literal knows `\\`, `\"`, `\n`, `\r`, `\t` and `\u{...}` and nothing else, so a + * control character is written as its escape rather than passed through, and every other character + * stands for itself. There is no construct inside a string literal for a `#`, a `$` or an `@` to + * open, which is the whole point: the escaping here has one rule instead of a list of them, and a + * list is what goes out of date when Typst gains syntax. + */ +export function str(value: string): string { + let out = '"'; + for (const ch of sanitize(value)) { + const code = ch.codePointAt(0) ?? 0; + if (ch === "\\") out += "\\\\"; + else if (ch === '"') out += '\\"'; + else if (ch === "\n") out += "\\n"; + else if (ch === "\r") out += "\\r"; + else if (ch === "\t") out += "\\t"; + else if (code < 0x20 || code === 0x7f) out += `\\u{${code.toString(16)}}`; + else out += ch; + } + return `${out}"`; +} + +/** A colour from the table below, never from the document. */ +function hex(value: string): string { + return `rgb(${str(value)})`; +} + +/** + * Inline text as a page reads it rather than as the file stores it. + * + * A soft wrap inside a paragraph is a decision the author made about the file, not about the page, + * and a PDF has its own measure, so it becomes a space. Runs of whitespace collapse for the same + * reason every markdown renderer collapses them. A hard break is a separate node and keeps its + * break. The non-breaking space is deliberately not in the class: it is a character somebody typed. + */ +function flow(value: string): string { + return value.replace(/[ \t\n\r\f\v\u2028\u2029]+/g, " "); +} + +// ------------------------------------------------------------------------------------------------ +// The palette and the faces +// +// Both are the app's own, read off src/styles/tokens.css and src/styles/prose.css rather than +// chosen here, because an export is the document on screen and not a second design. The light +// palette specifically: a PDF is a white page whatever `data-theme` says. +// +// Literata and Hanken Grotesk are the two families src-tauri/src/pdf.rs compiles into the binary, +// so they are always there and can be named here. Monospace and the maths face are not named here +// at all: neither is bundled, both come off the machine, and Typst warns once for every family it +// was asked for and could not find, so a hopeful list written on this side would end every export +// with a toast about fonts nobody chose. src-tauri/src/fonts.rs asks the system what it actually +// has, and pdf.rs puts the answer in front of this preamble. +// ------------------------------------------------------------------------------------------------ + +const BODY_FONT = "Literata"; +const UI_FONT = "Hanken Grotesk"; + +// The light palette of src/styles/tokens.css, written out because Typst source cannot read a CSS +// custom property. Each one names the token it is a copy of, so a token that moves can be found +// again from here; nothing checks that they still agree, and a fork between the two is a PDF that +// stops looking like the screen it was exported from. +const INK = "#23201b"; // --ink +const INK_SOFT = "#6b6458"; // --ink-soft +const INK_FAINT = "#9b9484"; // --ink-faint +const DOC_RULE = "#e3ddce"; // --doc-rule +const DOC_RULE_STRONG = "#cdc4ae"; // --doc-rule-strong +const DOC_WASH = "#23201b0d"; // --ink at 5 percent +const CODE_SURFACE = "#f2ece0"; // --code-surface +const CODE_LINE = "#e6dfce"; // --code-line +const CODE_WASH = "#23201b14"; // --ink at 8 percent +const DANGER = "#b4453a"; // --danger +const DANGER_INK = "#963327"; // --danger-ink +const DANGER_WASH = "#b4453a1a"; // --danger at 10 percent + +/** + * The five callouts, in ink tones and the one warning colour rather than in five new hues. + * + * This is prose.css's decision, not a fresh one: the palette has a single danger colour and + * inventing four more here would fork the visual language between the screen and the page. + */ +const CALLOUT_COLOURS: Record = { + note: { edge: INK_FAINT, fill: DOC_WASH, label: INK_SOFT }, + tip: { edge: INK_FAINT, fill: DOC_WASH, label: INK_SOFT }, + important: { edge: INK_FAINT, fill: DOC_WASH, label: INK_SOFT }, + warning: { edge: DANGER, fill: DANGER_WASH, label: DANGER_INK }, + caution: { edge: DANGER, fill: DANGER_WASH, label: DANGER_INK }, +}; + +// ------------------------------------------------------------------------------------------------ +// The preamble +// ------------------------------------------------------------------------------------------------ + +/** + * The document's furniture, and the only markup in this file. + * + * A document editor, not a book: one page size, no chapter openers, no trim. + * + * `mitex` is imported only when the document has a formula in it. The import path is the contract + * with the backend, and a missing package is a hard compile error rather than a warning, so a + * document with no maths in it is not made to depend on it. + */ +function preamble(title: string, math: boolean): string { + const mitex = math ? `#import "/mitex/lib.typ": mitex, mi\n\n` : ""; + return `${mitex}#set document(title: ${str(title)}) +#set page(paper: "a4", margin: (x: 2.4cm, y: 2.6cm), numbering: "1", number-align: center) +#set text(font: ${str(BODY_FONT)}, size: 11pt, fill: ${hex(INK)}, lang: "en") +#set par(leading: 0.7em, spacing: 1.05em, justify: false) +#set heading(numbering: none) + +// Six levels do not come from six sizes: by the fourth step the difference is under a point and +// the reader stops seeing a hierarchy. Size for the first three, a weight step for the fourth, the +// UI face for the last two, case for the sixth. prose.css's scale, in print units. +#show heading: set block(above: 1.9em, below: 0.55em) +#show heading.where(level: 1): set text(size: 1.77em, weight: 600, tracking: -0.016em) +#show heading.where(level: 2): set text(size: 1.35em, weight: 600, tracking: -0.008em) +#show heading.where(level: 3): set text(size: 1.12em, weight: 600) +#show heading.where(level: 4): set text(size: 1em, weight: 700) +#show heading.where(level: 5): set text(font: ${str(UI_FONT)}, size: 0.88em, weight: 700) +#show heading.where(level: 6): set text( + font: ${str(UI_FONT)}, + size: 0.77em, + weight: 700, + tracking: 0.1em, + fill: ${hex(INK_SOFT)}, +) +#show heading.where(level: 6): upper + +// This palette has no link colour, because the book it came from had no links. A link is body text +// with a permanent underline instead: unmistakable in a scan, and it keeps the colour of whatever +// block it sits in. +#show link: it => underline(stroke: 0.6pt + ${hex(INK_FAINT)}, offset: 0.16em, it) +#show strike: set text(fill: ${hex(INK_SOFT)}) + +#show table: set text(size: 0.88em) +#show raw.where(block: true): it => block( + width: 100%, + fill: ${hex(CODE_SURFACE)}, + stroke: 0.5pt + ${hex(CODE_LINE)}, + radius: 5pt, + inset: (x: 0.9em, y: 0.75em), + above: 1.5em, + below: 1.5em, + breakable: true, + text(size: 0.82em, it), +) +#show raw.where(block: false): it => box( + fill: ${hex(CODE_WASH)}, + radius: 2.5pt, + inset: (x: 0.3em), + outset: (y: 0.2em), + text(size: 0.88em, it), +) + +#let doc-rule = block( + width: 100%, + above: 2.6em, + below: 2.6em, + line(length: 100%, stroke: 0.7pt + ${hex(DOC_RULE_STRONG)}), +) + +// Not italic, unlike a book's. A quote in a technical document is as likely to be a paragraph of a +// spec or somebody's bug report as an epigraph, and the bar and the ink carry it instead. +#let doc-quote(body) = block( + width: 100%, + inset: (left: 1.55em), + stroke: (left: 2pt + ${hex(DOC_RULE_STRONG)}), + above: 1.5em, + below: 1.5em, + text(fill: ${hex(INK_SOFT)}, body), +) + +#let doc-callout(edge, fill, label-ink, label, body) = block( + width: 100%, + fill: fill, + radius: 8pt, + stroke: (rest: 0.5pt + ${hex(DOC_RULE)}, left: 3pt + edge), + inset: (x: 1.15em, y: 0.95em), + above: 1.5em, + below: 1.5em, + { + text(font: ${str(UI_FONT)}, size: 0.68em, weight: 700, tracking: 0.12em, fill: label-ink, upper(label)) + v(0.5em, weak: true) + body + }, +) + +// Always open. A PDF has no disclosure to click, so a closed toggle would be a paragraph the export +// lost, and the summary is a line of its own above the body exactly as the is on screen. +#let doc-toggle(summary, body) = block( + width: 100%, + stroke: 0.5pt + ${hex(DOC_RULE)}, + radius: 8pt, + inset: (x: 1.1em, y: 0.85em), + above: 1.5em, + below: 1.5em, + { + text(weight: 600, summary) + v(0.5em, weak: true) + body + }, +) + +// Drawn rather than written, because a checkbox glyph is only a checkbox in a font that has one, +// and the faces behind this compile are not this module's to choose. +#let doc-check(done) = box( + width: 0.8em, + height: 0.8em, + radius: 2.5pt, + baseline: 0.08em, + stroke: 0.8pt + ${hex(INK_FAINT)}, + fill: if done { ${hex(INK_SOFT)} } else { none }, +) + +#let doc-figure(body) = block(width: 100%, above: 1.8em, below: 1.8em, align(center, body)) +`; +} + +// ------------------------------------------------------------------------------------------------ +// Images +// ------------------------------------------------------------------------------------------------ + +interface Context { + /** The document's own path, which every relative link and image src is resolved against. */ + readonly file: string; + readonly diagrams: Diagrams; + readonly mathMode: MathMode; + readonly images: ImageInput[]; + /** A src as the document wrote it, mapped to how the source refers to it, or null for a refusal. */ + readonly seen: Map; + readonly warnings: string[]; + math: boolean; + drawings: number; +} + +function extensionOf(dataUrl: string): string { + const match = /^data:image\/([a-z0-9.+-]+)/i.exec(dataUrl); + const kind = (match?.[1] ?? "png").toLowerCase().split("+")[0]; + return kind === "jpeg" ? "jpg" : kind; +} + +/** + * How the source should refer to this image, and the entry the backend needs to find it. Null when + * there is nothing to point at: a picture on the web, which this app does not fetch, or an src that + * is not a path at all. + * + * A file-backed image travels as a path and the backend opens it, which is also where it is checked + * against the open roots, because an src in a document is untrusted input. Bytes only travel inline + * when there is no file behind them. + */ +function imagePath(ctx: Context, src: string): string | null { + const known = ctx.seen.get(src); + if (known !== undefined) return known; + + let path: string | null = null; + if (src.startsWith("data:image/")) { + const comma = src.indexOf(","); + const data = comma === -1 ? "" : src.slice(comma + 1); + if (data) { + path = `${INLINE}image-${ctx.images.length + 1}.${extensionOf(src)}`; + ctx.images.push({ path, data }); + } + } else { + // Sanitised once, here, so the path the source names and the path the backend is handed are the + // same string. They are compared for equality on the other side, and a path that went through + // this function twice has to come back the same both times. + const resolved = resolveRelative(ctx.file, src); + if (resolved !== null) { + path = sanitize(resolved); + ctx.images.push({ path, data: null }); + } + } + + if (path === null) ctx.warnings.push(`${src || "an image with no source"} could not be included`); + ctx.seen.set(src, path); + return path; +} + +function base64(value: string): string { + const bytes = new TextEncoder().encode(value); + let binary = ""; + for (const byte of bytes) binary += String.fromCharCode(byte); + return btoa(binary); +} + +/** A drawn diagram, which has no file behind it and so travels as bytes. */ +function diagramPath(ctx: Context, svg: string): string { + ctx.drawings += 1; + const path = `${INLINE}diagram-${ctx.drawings}.svg`; + ctx.images.push({ path, data: base64(svg) }); + return path; +} + +// ------------------------------------------------------------------------------------------------ +// Inline content +// ------------------------------------------------------------------------------------------------ + +function marked(node: ProseMirrorNode, body: string): string { + let out = body; + // Code is innermost and the emphasis goes around it, which is the direction src/markdown's + // serializer already picked for the same flat mark set. + if (node.marks.some((m) => m.type.name === "em")) out = `#emph[${out}]`; + if (node.marks.some((m) => m.type.name === "strong")) out = `#strong[${out}]`; + if (node.marks.some((m) => m.type.name === "strikethrough")) out = `#strike[${out}]`; + const href = node.marks.find((m) => m.type.name === "link")?.attrs.href; + if (typeof href === "string" && href) out = `#link(${str(href)})[${out}]`; + return out; +} + +function inline(ctx: Context, node: ProseMirrorNode): string { + switch (node.type.name) { + case "text": { + const text = node.text ?? ""; + if (!text) return ""; + const code = node.marks.some((m) => m.type.name === "code"); + // A code span keeps its whitespace: it is the one inline place where a run of spaces is + // content. Everything else flows. + return marked(node, code ? `#raw(${str(sanitize(text))})` : `#${str(flow(text))}`); + } + case "hardBreak": + return "#linebreak()"; + case "image": { + const path = imagePath(ctx, String(node.attrs.src ?? "")); + if (path === null) return altText(node); + // Sized to the line rather than left at its natural size, because an image sitting inside a + // sentence is a badge or an icon and a photograph does not go there. + return `#box(image(${str(path)}, height: 1em), baseline: 0.15em)`; + } + case "mathInline": { + const latex = String(node.attrs.latex ?? ""); + if (ctx.mathMode === "literal") return `#raw(${str(sanitize(latex))})`; + ctx.math = true; + return `#mi(${str(latex)})`; + } + default: + // Nothing else is inline in this schema. An unknown node still gets its text on the page, + // because a construct nobody thought of is worth less than a construct silently dropped. + return node.textContent ? `#${str(flow(node.textContent))}` : ""; + } +} + +/** What is left of an image that has no file: the words the author wrote in its place. */ +function altText(node: ProseMirrorNode): string { + const alt = String(node.attrs.alt ?? "").trim(); + return alt ? `#emph[#${str(flow(alt))}]` : ""; +} + +function inlines(ctx: Context, node: ProseMirrorNode): string { + let out = ""; + node.forEach((child) => { + out += inline(ctx, child); + }); + return out; +} + +/** Inline content as a Typst content block, which is what every layout helper takes. */ +function content(ctx: Context, node: ProseMirrorNode): string { + return `[${inlines(ctx, node)}]`; +} + +// ------------------------------------------------------------------------------------------------ +// Blocks +// ------------------------------------------------------------------------------------------------ + +/** The children of a container, as one content block. */ +function body(ctx: Context, node: ProseMirrorNode): string { + return `[${blocks(ctx, node)}]`; +} + +function blocks(ctx: Context, node: ProseMirrorNode): string { + const out: string[] = []; + node.forEach((child) => { + const rendered = block(ctx, child); + if (rendered) out.push(rendered); + }); + return out.join("\n\n"); +} + +function isImageOnly(node: ProseMirrorNode): boolean { + let images = 0; + let others = 0; + node.forEach((child) => { + if (child.type.name === "image") images += 1; + else if (child.type.name !== "text" || (child.text ?? "").trim()) others += 1; + }); + return images === 1 && others === 0; +} + +function paragraph(ctx: Context, node: ProseMirrorNode): string { + // Markdown has no block image: a picture on its own line is a paragraph holding nothing else, and + // that is the one this exporter gives a figure to rather than a line's worth of height. + if (isImageOnly(node)) { + let picture = ""; + node.forEach((child) => { + if (child.type.name === "image") picture = blockImage(ctx, child); + }); + if (picture) return picture; + } + const rendered = inlines(ctx, node); + // An empty paragraph is a blank line in a plain text file, and a blank line is content there. + return rendered || "#v(0.9em, weak: true)"; +} + +function blockImage(ctx: Context, node: ProseMirrorNode): string { + const path = imagePath(ctx, String(node.attrs.src ?? "")); + if (path === null) { + const alt = altText(node); + return alt || "#v(0.9em, weak: true)"; + } + const title = String(node.attrs.title ?? "").trim(); + const picture = `image(${str(path)})`; + if (!title) return `#doc-figure(${picture})`; + return `#doc-figure(figure(${picture}, caption: [#${str(flow(title))}]))`; +} + +function listItems(ctx: Context, node: ProseMirrorNode): string[] { + const items: string[] = []; + node.forEach((child) => { + // A GFM list may mix "- [ ] a" with ordinary items, so a checkbox can turn up inside a plain + // list. It rides at the head of the item rather than being dropped. + const box = child.type.name === "taskItem" ? `#doc-check(${child.attrs.checked ? "true" : "false"})#h(0.45em)` : ""; + items.push(`[${box}${blocks(ctx, child)}]`); + }); + return items; +} + +function taskList(ctx: Context, node: ProseMirrorNode): string { + const cells: string[] = []; + node.forEach((child) => { + // No leading `#`: a grid's arguments are already code, and the marker there is a call rather + // than an escape back into markup. + cells.push(`doc-check(${child.attrs.checked ? "true" : "false"})`); + cells.push(body(ctx, child)); + }); + if (cells.length === 0) return ""; + const gutter = node.attrs.tight ? "0.4em" : "0.85em"; + return `#grid(columns: (1.35em, 1fr), row-gutter: ${gutter}, align: (left + top, left + top), ${cells.join(", ")})`; +} + +const ALIGNMENTS: Record = { left: "left", center: "center", right: "right" }; + +function table(ctx: Context, node: ProseMirrorNode): string { + const rows: ProseMirrorNode[] = []; + node.forEach((row) => rows.push(row)); + if (rows.length === 0) return ""; + + const widthOf = (row: ProseMirrorNode): number => { + let width = 0; + row.forEach((cell) => { + width += Math.max(1, Number(cell.attrs.colspan) || 1); + }); + return width; + }; + const columns = Math.max(1, ...rows.map(widthOf)); + + // GFM carries one alignment per column on the delimiter row and the bridge copies it on to every + // cell in that column, so the first row is as good a place to read it as any. + const aligns: string[] = []; + rows[0].forEach((cell) => { + const align = ALIGNMENTS[String(cell.attrs.align ?? "")] ?? "left"; + for (let i = 0; i < Math.max(1, Number(cell.attrs.colspan) || 1); i += 1) aligns.push(align); + }); + while (aligns.length < columns) aligns.push("left"); + aligns.length = columns; + + const cellsOf = (row: ProseMirrorNode): string[] => { + const out: string[] = []; + row.forEach((cell) => { + const inner = cell.type.name === "tableHeader" ? `[#strong[${inlines(ctx, cell)}]]` : content(ctx, cell); + const colspan = Math.max(1, Number(cell.attrs.colspan) || 1); + const rowspan = Math.max(1, Number(cell.attrs.rowspan) || 1); + out.push( + colspan === 1 && rowspan === 1 + ? inner + : `table.cell(colspan: ${colspan}, rowspan: ${rowspan})${inner}`, + ); + }); + return out; + }; + + let heads = 0; + rows[0].forEach((cell) => { + if (cell.type.name === "tableHeader") heads += 1; + }); + const headed = heads > 0 && heads === rows[0].childCount; + + const parts: string[] = []; + rows.forEach((row, index) => { + const cells = cellsOf(row); + if (cells.length === 0) return; + if (index === 0 && headed) parts.push(`table.header(${cells.join(", ")})`); + else parts.push(cells.join(", ")); + }); + if (parts.length === 0) return ""; + + // Horizontal rules and a washed header row: prose.css's table, which has no vertical rules at all + // because a document table is not a spreadsheet. + const fill = headed ? `\n fill: (_, y) => if y == 0 { ${hex(DOC_WASH)} },` : ""; + return `#table( + columns: ${columns}, + align: (${aligns.join(", ")}), + stroke: (x: none, y: 0.5pt + ${hex(DOC_RULE)}), + inset: (x: 0.8em, y: 0.5em),${fill} + ${parts.join(",\n ")}, +)`; +} + +function callout(ctx: Context, node: ProseMirrorNode): string { + const declared = String(node.attrs.kind ?? "note"); + const kind = calloutKindFromLabel(declared); + const colours = CALLOUT_COLOURS[kind ?? "note"]; + // A kind nobody has heard of keeps its own word as the label. It is text off disk either way, so + // it goes through `str` either way; only the colours are chosen here, and never by the document. + const label = kind === null ? declared.trim() || "note" : CALLOUT_LABELS[kind]; + return `#doc-callout(${hex(colours.edge)}, ${hex(colours.fill)}, ${hex(colours.label)}, ${str(flow(label))}, ${body(ctx, node)})`; +} + +function codeBlock(ctx: Context, node: ProseMirrorNode): string { + const text = sanitize(node.textContent); + const language = typeof node.attrs.language === "string" ? node.attrs.language.trim() : ""; + + if (language === MERMAID) { + const svg = ctx.diagrams.get(node.textContent); + // A diagram that would not draw stays the fence the user wrote, which is the same answer the + // editor gives on screen: a broken diagram is a line to go and fix, not a block to hide. + if (svg) return `#doc-figure(image(${str(diagramPath(ctx, svg))}))`; + } + + const lang = language ? `, lang: ${str(language)}` : ""; + return `#raw(${str(text)}${lang}, block: true)`; +} + +function block(ctx: Context, node: ProseMirrorNode): string { + switch (node.type.name) { + case "paragraph": + return paragraph(ctx, node); + case "heading": { + const level = Math.min(6, Math.max(1, Number(node.attrs.level) || 1)); + return `#heading(level: ${level})${content(ctx, node)}`; + } + case "blockquote": + return `#doc-quote(${body(ctx, node)})`; + case "bulletList": { + const items = listItems(ctx, node); + return items.length ? `#list(tight: ${node.attrs.tight ? "true" : "false"}, ${items.join(", ")})` : ""; + } + case "orderedList": { + const items = listItems(ctx, node); + const start = Number(node.attrs.start); + const from = Number.isFinite(start) ? Math.max(0, Math.trunc(start)) : 1; + return items.length + ? `#enum(start: ${from}, tight: ${node.attrs.tight ? "true" : "false"}, ${items.join(", ")})` + : ""; + } + case "taskList": + return taskList(ctx, node); + case "codeBlock": + return codeBlock(ctx, node); + case "horizontalRule": + return "#doc-rule"; + case "table": + return table(ctx, node); + case "callout": + return callout(ctx, node); + case "toggle": + // Open, always. A PDF has no disclosure to click, so a closed toggle would be a paragraph the + // export lost. + return `#doc-toggle(${str(flow(String(node.attrs.summary ?? "")))}, ${body(ctx, node)})`; + case "mathBlock": { + // Bare, with none of the surface the editor draws around it. On screen a formula is a box of + // monospace source because that is what is being edited; on the page it is typeset, and + // typeset mathematics does not want a code block's border around it. + const latex = String(node.attrs.latex ?? ""); + if (ctx.mathMode === "literal") return `#raw(${str(sanitize(latex))}, block: true)`; + ctx.math = true; + return `#mitex(${str(latex)})`; + } + case "raw": + // The bytes the bridge could not model, shown as what they are. No language: this is source + // in no particular language, and guessing one would colour it wrong. + return `#raw(${str(sanitize(node.textContent))}, block: true)`; + default: { + // A node this file has never heard of still reaches the page. Its own children are walked + // where it has any, so a future container does not take its contents down with it. + if (node.isTextblock) return inlines(ctx, node) || ""; + const inner = blocks(ctx, node); + return inner || (node.textContent ? `#${str(flow(node.textContent))}` : ""); + } + } +} + +// ------------------------------------------------------------------------------------------------ +// Mermaid +// ------------------------------------------------------------------------------------------------ + +/** Every mermaid fence in the document, in order, deduplicated. Pure, so a test can call it. */ +export function diagramSources(doc: ProseMirrorNode): string[] { + const out: string[] = []; + doc.descendants((node) => { + if (node.type.name !== "codeBlock") return true; + if (node.attrs.language === MERMAID && node.textContent.trim() && !out.includes(node.textContent)) { + out.push(node.textContent); + } + return false; + }); + return out; +} + +let configured = false; +let drawn = 0; + +/** + * Mermaid is several megabytes, so this import is dynamic exactly as the editor's own is: a user who + * never exports a document with a diagram in it never fetches the library. + * + * The theme is `neutral` rather than the app's own palette, and that is the one place this differs + * from the block on screen. A drawn diagram bakes its colours in, the page it is going on to is + * white whatever the app's theme is, and mermaid's neutral theme is the one meant for a document + * that will be printed. Exporting in dark mode must not produce a black rectangle on white paper. + */ +async function draw(text: string): Promise { + const mermaid = (await import("mermaid")).default; + if (!configured) { + mermaid.initialize({ + startOnLoad: false, + securityLevel: "strict", + suppressErrorRendering: true, + theme: "neutral", + }); + configured = true; + } + await mermaid.parse(text); + drawn += 1; + const { svg } = await mermaid.render(`typst-diagram-${drawn}`, text); + return svg; +} + +/** + * Every diagram in the document, drawn. Needs a DOM, which is why it is not part of the conversion: + * a fence whose render failed is simply absent from the map and comes out of the converter as the + * code it always was. + */ +export async function renderDiagrams(doc: ProseMirrorNode): Promise> { + const svgs = new Map(); + for (const text of diagramSources(doc)) { + try { + svgs.set(text, await draw(text)); + } catch { + // Deliberately swallowed. The caller counts what is missing; one diagram that will not parse + // is not a reason to refuse the other forty pages. + } + } + return svgs; +} + +// ------------------------------------------------------------------------------------------------ +// The document +// ------------------------------------------------------------------------------------------------ + +const baseName = (path: string): string => path.slice(path.lastIndexOf("/") + 1) || path; + +/** + * One document, as Typst source and the images it refers to. + * + * `path` is the file the document came from. It is what relative image sources resolve against, and + * it is the PDF's title: a markdown file's identity is its path and the H1 is content, so a + * document whose first heading disagrees with its filename is not renamed on the way out. There is + * no frontmatter here to strip, because the bridge never put it in the tree. + * + * `diagrams` comes from `renderDiagrams`, which is async and wants a DOM. Everything below is + * neither, so the whole conversion is a pure function of the document. + */ +export function documentToTypst(doc: ProseMirrorNode, path: string, options: TypstOptions = {}): TypstDocument { + const ctx: Context = { + file: path, + diagrams: options.diagrams ?? new Map(), + mathMode: options.math ?? "typeset", + images: [], + seen: new Map(), + warnings: [], + math: false, + drawings: 0, + }; + const rendered = blocks(ctx, doc); + return { + source: `${preamble(baseName(path), ctx.math)}\n${rendered}\n`, + images: ctx.images, + warnings: ctx.warnings, + }; +} diff --git a/src/ipc.ts b/src/ipc.ts index b7ed002..38b487a 100644 --- a/src/ipc.ts +++ b/src/ipc.ts @@ -48,6 +48,9 @@ export const WATCH_EVENT = "watch-event"; /** The `index-progress` event, whose payload is an `IndexStatus`. */ export const INDEX_PROGRESS_EVENT = "index-progress"; +/** The `pdf-warnings` event, whose payload is a `PdfWarning[]`. */ +export const PDF_WARNINGS_EVENT = "pdf-warnings"; + export type MenuAction = | "open-folder" | "new-doc" @@ -61,7 +64,10 @@ export type MenuAction = | "command-palette" | "toggle-sidebar" | "check-updates" - | "report-issue"; + | "report-issue" + | "export-pdf" + | "writing-proofread" + | "writing-rewrite"; /** * One open folder. `id` is derived from the path, so it survives a relaunch and a root can be @@ -220,6 +226,56 @@ export interface SpellIssue { suggestions: string[]; } +/** + * An image the PDF exporter has to put on a page. + * + * `data` present means the bytes travel with the request, base64 encoded, which is the only way a + * mermaid diagram can arrive: it is rendered to SVG here and there is no file behind it. `data` + * absent means the backend reads the file at `path` itself, which is what an ordinary + * `![](photo.jpg)` is and what most images are, because base64 encoding a folder of photographs + * through the IPC boundary costs a third again in bytes for files the backend can already open. + * + * A path read this way is checked against the open roots on the Rust side, because a link in a + * document is untrusted input. + */ +export interface ImageInput { + /** How the Typst source refers to it, which is also the key the file resolver answers on. */ + path: string; + data: string | null; +} + +/** + * Something the exporter worked around rather than something it refused to do. Payload of + * `pdf-warnings`, which is how these travel: a compile answers with raw bytes and has nowhere to + * put a second value. + * + * `count` is here because the alternative is forty toasts. A document with forty formulas that + * would not typeset has one problem, not forty. + */ +export interface PdfWarning { + kind: "math" | "image" | "typst"; + message: string; + count: number; +} + +/** + * One grammar problem in a run of text handed to the checker. + * + * `start` and `end` are half-open offsets in characters, for the same reason `SpellIssue` gives: + * they address a ProseMirror document and ProseMirror counts code points. Harper counts that way + * too, so this path has no conversion in it at all. + * + * `kind` is Harper's own name for the rule that fired, which the popover shows above the message + * so a correction can be judged before it is taken. `suggestions` can be empty. + */ +export interface GrammarIssue { + start: number; + end: number; + kind: string; + message: string; + suggestions: string[]; +} + /** * In Tauri this is `invoke`. Opened in a browser during development it is served from the dev * fixture instead, so the real UI can be driven and looked at without a build of the Rust side diff --git a/src/keys/bindings.ts b/src/keys/bindings.ts index 32e52fd..97d557c 100644 --- a/src/keys/bindings.ts +++ b/src/keys/bindings.ts @@ -49,6 +49,13 @@ export const BINDINGS: readonly Binding[] = [ { keys: ["cmd+o"], command: "open-folder", context: "document", group: "File", allowInInput: true }, { keys: ["cmd+n"], command: "new-doc", context: "document", group: "File", allowInInput: true }, { keys: ["cmd+s"], command: "save", context: "document", group: "File", allowInInput: true }, + { + keys: ["cmd+E"], + command: "export-pdf", + context: "document", + group: "File", + allowInInput: true, + }, { keys: ["cmd+p"], @@ -94,6 +101,29 @@ export const BINDINGS: readonly Binding[] = [ allowInInput: true, }, + // Writing Tools' two chords. Like every accelerator this app puts on a native menu item, macOS + // fires the menu row before the webview sees a keydown, so in practice these are dispatched + // through src/keys/menu.ts rather than by the listener in keymap.ts. They are rows here for the + // same reason Cmd+O is: the sheet is generated from this table, and a key the app answers to + // that is missing from it would be the one thing this table exists to prevent. + // + // They are on this app's own Edit rows rather than on Apple's, so that they pass the selection + // guard in src/editor/writing.ts. src-tauri/src/writingtools.rs says what that is protecting. + { + keys: ["alt+F"], + command: "writing-proofread", + context: "document", + group: "Editing", + allowInInput: true, + }, + { + keys: ["alt+R"], + command: "writing-rewrite", + context: "document", + group: "Editing", + allowInInput: true, + }, + { keys: ["cmd+\\"], command: "toggle-sidebar", diff --git a/src/keys/commands.ts b/src/keys/commands.ts index 947c767..83debdd 100644 --- a/src/keys/commands.ts +++ b/src/keys/commands.ts @@ -12,8 +12,9 @@ // correctly. import { openUrl } from "@tauri-apps/plugin-opener"; -import { relaunch } from "@tauri-apps/plugin-process"; -import { check } from "@tauri-apps/plugin-updater"; +import { runWritingTool } from "../editor/writing"; +import { exportPdf } from "../export/run"; +import { checkForUpdates } from "../update"; import { useDocument } from "../store/useDocument"; import { useProofing } from "../store/useProofing"; import { useTheme } from "../store/useTheme"; @@ -28,6 +29,7 @@ export type CommandId = | "new-folder" | "close-folder" | "save" + | "export-pdf" | "rename-file" | "duplicate-file" | "delete-file" @@ -44,7 +46,10 @@ export type CommandId = | "editor-width-normal" | "editor-width-wide" | "toggle-spelling" + | "toggle-grammar" | "correct-spelling" + | "writing-proofread" + | "writing-rewrite" | "shortcuts" | "settings" | "check-updates" @@ -217,27 +222,6 @@ async function goForward(): Promise { } } -let checkingForUpdates = false; - -async function checkForUpdates(): Promise { - if (checkingForUpdates) return; - checkingForUpdates = true; - try { - const update = await check(); - if (!update) { - notify("Margin Docs is up to date"); - return; - } - notify(`Installing ${update.version}…`); - await update.downloadAndInstall(); - await relaunch(); - } catch (e) { - notify(`Could not check for updates: ${String(e)}`); - } finally { - checkingForUpdates = false; - } -} - const listeners = new Map void>>(); /** @@ -264,6 +248,7 @@ const TABLE: Record> = { "new-folder": { label: "New Folder", palette: true, run: () => void createFolder() }, "close-folder": { label: "Close Folder", palette: false, run: closeActiveFolder }, save: { label: "Save", palette: true, run: () => void saveDocument() }, + "export-pdf": { label: "Export as PDF…", palette: true, run: () => void exportPdf() }, "rename-file": { label: "Rename", palette: false, run: () => void renameSelected() }, "duplicate-file": { label: "Duplicate", palette: false, run: () => void duplicateSelected() }, "delete-file": { label: "Delete", palette: false, run: () => void deleteSelected() }, @@ -320,6 +305,15 @@ const TABLE: Record> = { run: () => useProofing.getState().toggle(), }, + // Its twin, and turned over the same way. The two are separate settings because the checkers + // are: spelling is the system's and grammar is Harper's, and a user who wants one without the + // other is not asking for anything strange. + "toggle-grammar": { + label: "Check Grammar While Typing", + palette: true, + run: () => useProofing.getState().toggleGrammar(), + }, + // Dispatched, unlike the one above it, because its whole result is the correction menu on screen // and the component that draws that menu is the only thing here that knows where the caret is. // @@ -332,6 +326,22 @@ const TABLE: Record> = { run: () => dispatch("correct-spelling"), }, + // Writing Tools is the system's, but these two commands are not, and that is the point: the + // chords and the menu rows are this app's own, so every way in passes the selection guard in + // src/editor/writing.ts before the system is asked to rewrite anything. On a Mac without Apple + // Intelligence there is no submenu to perform, and the honest answer is a sentence rather than a + // gesture that quietly does nothing. + "writing-proofread": { + label: "Proofread with Writing Tools", + palette: true, + run: () => void runWritingTool("proofread"), + }, + "writing-rewrite": { + label: "Rewrite with Writing Tools", + palette: true, + run: () => void runWritingTool("rewrite"), + }, + shortcuts: { label: "Keyboard Shortcuts", palette: true, run: () => dispatch("shortcuts") }, settings: { label: "Settings…", palette: true, run: () => dispatch("settings") }, "check-updates": { diff --git a/src/keys/menu.ts b/src/keys/menu.ts index 13212d1..ac28e51 100644 --- a/src/keys/menu.ts +++ b/src/keys/menu.ts @@ -12,6 +12,7 @@ export const MENU_IDS: readonly CommandId[] = [ "new-doc", "new-folder", "save", + "export-pdf", "close-folder", "settings", "find", @@ -21,6 +22,8 @@ export const MENU_IDS: readonly CommandId[] = [ "toggle-sidebar", "check-updates", "report-issue", + "writing-proofread", + "writing-rewrite", ]; const known = new Set(MENU_IDS); diff --git a/src/main.tsx b/src/main.tsx index c6f0827..1c5722e 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -29,6 +29,7 @@ import "./styles/width-menu.css"; import "./styles/link-picker.css"; import "./styles/tree.css"; import "./styles/palette.css"; +import "./styles/settings.css"; import React from "react"; import ReactDOM from "react-dom/client"; diff --git a/src/store/useProofing.ts b/src/store/useProofing.ts index 074f864..a5e8ba1 100644 --- a/src/store/useProofing.ts +++ b/src/store/useProofing.ts @@ -1,6 +1,10 @@ -// Spelling, as far as the app outside the editor is concerned: whether the machine has a checker at +// Proofing, as far as the app outside the editor is concerned: whether the machine has a checker at // all, whether the user wants underlines, which words they have waved away this session, and which -// misspelling the menu is currently open over. +// underline the menu is currently open over. +// +// Two checkers, one store. Spelling is the system's and grammar is Harper's, they are asked +// separately and can be turned on separately, but they share a decoration pipeline, a popover and +// this state, because from the reader's side they are one underline under one word. // // The checker itself is the system's (see src/api/spell.ts), which is why availability is a piece of // state rather than a constant. `spellAvailable` is asked once per launch and never again: it @@ -19,10 +23,12 @@ // the cache: it filters what is drawn, so waving a word away and putting it back costs nothing. import { create } from "zustand"; +import { grammarAvailable } from "../api/grammar"; import { spellAvailable, spellLearn } from "../api/spell"; import { notify } from "./useToast"; const KEY = "margindocs-spelling"; +const GRAMMAR_KEY = "margindocs-grammar"; /** * Where the menu is, and what it is about. @@ -34,11 +40,18 @@ const KEY = "margindocs-spelling"; export interface ProofTarget { from: number; to: number; - /** What the checker flagged, which is also what "Learn Spelling" and "Ignore" are about. */ + /** What the checker flagged, which is also what "Learn Spelling" and "Ignore" are about. A word + * for spelling and however much of the sentence Harper was talking about for grammar. */ word: string; /** At most five, already trimmed by the editor. Can be empty: the system often knows a word is - * wrong without knowing what was meant. */ + * wrong without knowing what was meant, and a grammar rule can see a sentence is wrong without + * knowing how to fix it. */ suggestions: readonly string[]; + /** Harper's category for the rule that fired and the sentence it wrote about it, and null when + * this underline is a misspelling. It is what the popover shows above the suggestions, and it is + * also what decides which items are offered: "Learn Spelling" teaches the Mac's dictionary a word + * and has nothing to say about a phrase. */ + grammar: { kind: string; message: string } | null; /** Viewport coordinates of the word itself, for placing the menu under it. */ left: number; top: number; @@ -53,10 +66,18 @@ export type SpellAvailability = "unknown" | "asking" | "ready" | "missing"; interface ProofingState { availability: SpellAvailability; + /** The same question about the other checker, asked once per launch alongside it. Grammar is + * Harper's and compiled in, so "missing" here means a build without it rather than a machine + * without it, and it hides the setting rather than offering one that does nothing. */ + grammarAvailability: SpellAvailability; enabled: boolean; + /** Grammar, which is a separate setting because it is a separate checker. A user who wants + * spelling underlined and grammar left alone is not asking for anything strange. */ + grammar: boolean; /** Lower cased, and only for this run of the app. Ignoring is not learning and is not written * anywhere: the system checker owns the dictionary, and a word waved away in one sitting is not a - * word the user has taught their Mac. */ + * word the user has taught their Mac. Grammar shares the set and puts whole phrases in it, which + * cannot collide with a word: nothing the spell checker flags has a space in it. */ ignored: ReadonlySet; revision: number; target: ProofTarget | null; @@ -64,6 +85,8 @@ interface ProofingState { ensureAvailable: () => void; setEnabled: (enabled: boolean) => void; toggle: () => void; + setGrammar: (enabled: boolean) => void; + toggleGrammar: () => void; ignoreWord: (word: string) => void; learnWord: (word: string) => Promise; openMenu: (target: ProofTarget) => void; @@ -75,19 +98,19 @@ interface ProofingState { // because applying one writes an attribute on to the document element. This is one boolean that // nothing outside this store touches, and guarded the same way they are, for the Node test // environment that reaches this file through src/keys/commands.ts. -function readEnabled(): boolean { +function readSetting(key: string): boolean { if (typeof localStorage === "undefined") return true; try { - return localStorage.getItem(KEY) !== "off"; + return localStorage.getItem(key) !== "off"; } catch { return true; } } -function writeEnabled(enabled: boolean): void { +function writeSetting(key: string, enabled: boolean): void { if (typeof localStorage === "undefined") return; try { - localStorage.setItem(KEY, enabled ? "on" : "off"); + localStorage.setItem(key, enabled ? "on" : "off"); } catch { // A webview with storage denied still spell checks, it just forgets between launches. } @@ -95,28 +118,49 @@ function writeEnabled(enabled: boolean): void { export const useProofing = create((set, get) => ({ availability: "unknown", - enabled: readEnabled(), + grammarAvailability: "unknown", + enabled: readSetting(KEY), + grammar: readSetting(GRAMMAR_KEY), ignored: new Set(), revision: 0, target: null, + // Both checkers, each guarded on its own answer rather than on the pair. They are asked together + // today, so one guard would do; a guard that reads the wrong field is how the second checker ends + // up stuck on "unknown" the first time somebody asks them apart. ensureAvailable: () => { - if (get().availability !== "unknown") return; - set({ availability: "asking" }); - spellAvailable() - .then((ok) => set({ availability: ok ? "ready" : "missing" })) - .catch(() => set({ availability: "missing" })); + if (get().availability === "unknown") { + set({ availability: "asking" }); + spellAvailable() + .then((ok) => set({ availability: ok ? "ready" : "missing" })) + .catch(() => set({ availability: "missing" })); + } + if (get().grammarAvailability === "unknown") { + set({ grammarAvailability: "asking" }); + grammarAvailable() + .then((ok) => set({ grammarAvailability: ok ? "ready" : "missing" })) + .catch(() => set({ grammarAvailability: "missing" })); + } }, setEnabled: (enabled) => set((s) => { if (s.enabled === enabled) return {}; - writeEnabled(enabled); + writeSetting(KEY, enabled); return { enabled, target: null }; }), toggle: () => get().setEnabled(!get().enabled), + setGrammar: (enabled) => + set((s) => { + if (s.grammar === enabled) return {}; + writeSetting(GRAMMAR_KEY, enabled); + return { grammar: enabled, target: null }; + }), + + toggleGrammar: () => get().setGrammar(!get().grammar), + ignoreWord: (word) => set((s) => { const ignored = new Set(s.ignored); diff --git a/src/store/useUpdate.ts b/src/store/useUpdate.ts new file mode 100644 index 0000000..5906b40 --- /dev/null +++ b/src/store/useUpdate.ts @@ -0,0 +1,129 @@ +// What the updater is doing, plus the two preferences that sit next to it in the settings panel. +// +// The work itself is in src/update.ts, which is this store's sibling: checking, downloading and +// relaunching all cross the IPC boundary, and the handle `check()` hands back is a resource on the +// Rust side rather than a value, so it cannot be kept here beside the version string it arrived +// with. This file is only what the dialog and the settings panel read. +// +// `lastChecked` and `automatic` are read and written here rather than in a module of their own, the +// same way src/store/useProofing.ts keeps its two settings. Nothing outside this store touches +// either key, and the guard around localStorage is for the Node test environment, which reaches +// this file through src/keys/commands.ts. + +import { create } from "zustand"; + +const CHECKED_KEY = "margindocs-update-checked"; +const AUTOMATIC_KEY = "margindocs-update-automatic"; + +/** + * "available" is an update the user has been shown and has not answered yet, which is the dialog + * sitting open. "downloading" and "installing" are the two halves of what one press of Install does, + * and they are separate because only the first of them has a number to draw. + * + * There is no "done": the last thing installing does is relaunch, so the successful end of this + * union is the process going away. + */ +export type UpdatePhase = + | "idle" + | "checking" + | "available" + | "downloading" + | "installing" + | "error"; + +interface UpdateState { + phase: UpdatePhase; + /** The version on offer, not the one running. Null outside "available" and what follows it. */ + version: string | null; + /** The release notes, as the release wrote them. Plain text, and shown as plain text. */ + notes: string | null; + downloaded: number; + /** + * What the server said the whole download is, or null when it did not say. A server that sends no + * content length leaves this null for the entire download, which the dialog draws as a bar with + * no end rather than as nought percent forever. + */ + total: number | null; + error: string | null; + /** Epoch milliseconds of the last check that actually reached the manifest. */ + lastChecked: number | null; + automatic: boolean; + + begin: () => void; + offer: (version: string, notes: string | null) => void; + progress: (downloaded: number, total: number | null) => void; + installing: () => void; + failed: (message: string) => void; + /** Back to nothing on screen, whether that is Later, Escape or a check that found nothing. */ + dismiss: () => void; + markChecked: () => void; + setAutomatic: (automatic: boolean) => void; +} + +function readAutomatic(): boolean { + if (typeof localStorage === "undefined") return true; + try { + return localStorage.getItem(AUTOMATIC_KEY) !== "off"; + } catch { + return true; + } +} + +function readChecked(): number | null { + if (typeof localStorage === "undefined") return null; + try { + const raw = localStorage.getItem(CHECKED_KEY); + if (raw === null) return null; + const at = Number(raw); + return Number.isFinite(at) ? at : null; + } catch { + return null; + } +} + +function write(key: string, value: string): void { + if (typeof localStorage === "undefined") return; + try { + localStorage.setItem(key, value); + } catch { + // A webview with storage denied still checks for updates, it just forgets when it last did. + } +} + +export const useUpdate = create((set) => ({ + phase: "idle", + version: null, + notes: null, + downloaded: 0, + total: null, + error: null, + lastChecked: readChecked(), + automatic: readAutomatic(), + + begin: () => set({ phase: "checking", error: null }), + + offer: (version, notes) => + set({ phase: "available", version, notes, downloaded: 0, total: null, error: null }), + + progress: (downloaded, total) => set({ phase: "downloading", downloaded, total }), + + installing: () => set({ phase: "installing" }), + + failed: (message) => set({ phase: "error", error: message }), + + dismiss: () => + set({ phase: "idle", version: null, notes: null, downloaded: 0, total: null, error: null }), + + markChecked: () => { + const at = Date.now(); + write(CHECKED_KEY, String(at)); + return set({ lastChecked: at }); + }, + + setAutomatic: (automatic) => + set((s) => { + if (s.automatic === automatic) return {}; + write(AUTOMATIC_KEY, automatic ? "on" : "off"); + return { automatic }; + }), +})); diff --git a/src/styles/proofing.css b/src/styles/proofing.css index 7e5abbe..392ea94 100644 --- a/src/styles/proofing.css +++ b/src/styles/proofing.css @@ -1,4 +1,4 @@ -/* Spelling: the underline on the page, and the menu that opens over it. +/* Spelling and grammar: the underlines on the page, and the menu that opens over one. * * The underline is a text decoration rather than a border or a background, because it is the one * way of drawing under a word that costs the line nothing: a decoration is painted inside the line @@ -8,20 +8,40 @@ * red rather than a hex value of this file's own. skip-ink is off so a descender does not cut a gap * in the dots and leave a word looking half underlined. * + * Grammar is the second mark and it is told apart three ways: dashed rather than dotted, quieter, + * and sitting a little lower. The pattern is doing as much of that work as the colour, so the two + * are still two marks to a reader who cannot tell the colours apart, and the lower offset is what + * keeps both visible when they land on the same word, which they do whenever a misspelling sits + * inside a phrase Harper flagged. The colour is --ink-soft rather than a hue of its own: this app's + * palette is a warm monochrome with one red in it, spending that red on the commoner and more + * certain of the two marks is the right way round, and a blue borrowed from another app's grammar + * checker would be the only blue anywhere in the product. + * * The menu borrows .row-menu-pop's shape from app.css, which is the app's one popup surface: same * paper, same hairline, same shadow, same radius, same layer. The suggestions are set in the * document's own face and not the UI one, since a suggestion is a word from the user's prose and - * seeing it in the type it will be set in is half of choosing it. */ + * seeing it in the type it will be set in is half of choosing it. Everything above them is the UI + * face, because Harper's message is the app talking rather than the document. */ -.prose .proof-mark { - text-decoration: underline dotted var(--danger); - -webkit-text-decoration: underline dotted var(--danger); +.prose .proof-mark, +.prose .proof-mark-grammar { text-decoration-skip-ink: none; text-decoration-thickness: 1.5px; -webkit-text-decoration-thickness: 1.5px; text-underline-offset: 0.16em; } +.prose .proof-mark { + text-decoration: underline dotted var(--danger); + -webkit-text-decoration: underline dotted var(--danger); +} + +.prose .proof-mark-grammar { + text-decoration: underline dashed var(--ink-soft); + -webkit-text-decoration: underline dashed var(--ink-soft); + text-underline-offset: 0.28em; +} + .proof-pop { position: fixed; z-index: 50; @@ -75,6 +95,30 @@ outline-offset: -2px; } +/* Harper's category, drawn as app.css draws .menu-label, which is this app's one way of putting a + heading above a group of items in a popup. */ +.proof-kind { + margin: 0; + padding: 6px 10px 2px; + font-family: var(--font-ui); + font-size: var(--t-1); + font-weight: 600; + letter-spacing: 0.12em; + text-transform: uppercase; + color: var(--ink-faint); +} + +/* The message itself, in full ink and wrapping, because it is the thing the menu was opened to + read. The max-width on .proof-pop above is what keeps it to a few short lines. */ +.proof-message { + margin: 0; + padding: 0 10px 6px; + font-family: var(--font-ui); + font-size: var(--t-3); + line-height: 1.45; + color: var(--ink); +} + .proof-none { margin: 0; padding: 7px 10px; diff --git a/src/styles/settings.css b/src/styles/settings.css new file mode 100644 index 0000000..d4a11f4 --- /dev/null +++ b/src/styles/settings.css @@ -0,0 +1,211 @@ +/* The settings panel and the update dialog. + * + * Both borrow .overlay, .panel, .panel-head, .panel-body and .panel-foot from app.css, and the + * three buttons from tree.css, for the same reason the width menu borrows the menu: a dialog that + * looked like its own app would be the only thing on screen that did. What is here is the two + * layouts those shells hold, the switch, and the progress bar. + * + * The switch is the one control this app has that nothing else needed, so it is drawn here rather + * than in app.css. It is a button with role="switch" and its state is data-on, which is what the + * whole app does with a control that is either on or off. */ + +.panel-settings { + width: min(520px, calc(100vw - 32px)); +} + +.panel-settings .panel-body { + gap: 24px; +} + +.setting-group { + display: flex; + flex-direction: column; + gap: 4px; +} + +/* The label is spaced for a sidebar over in app.css, and the panel has its own padding already. */ +.panel-settings .nav-label { + padding: 0 0 6px; +} + +.setting-app { + font-family: var(--font-book); + font-size: var(--t-5); + font-weight: 500; + color: var(--ink); +} + +.setting-build { + font-family: var(--font-ui); + font-size: var(--t-3); + color: var(--ink-faint); +} + +.setting-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: 18px; + min-height: 34px; + padding: 5px 0; +} + +.setting-row + .setting-row { + border-top: 1px solid var(--line); +} + +.setting-text { + display: flex; + flex-direction: column; + gap: 2px; + min-width: 0; +} + +.setting-label { + font-family: var(--font-ui); + font-size: var(--t-4); + color: var(--ink); +} + +.setting-note { + font-family: var(--font-ui); + font-size: var(--t-2); + color: var(--ink-faint); +} + +.setting-row[data-disabled="true"] .setting-label { + color: var(--ink-faint); +} + +/* A button that carries an action rather than an answer: Check Now sits where a switch sits, so it + is sized to match one rather than to match the buttons along the foot of a dialog. */ +.btn-quiet { + flex: none; + padding: 6px 14px; + border: 1px solid var(--line-strong); + border-radius: var(--r-sm); + background: var(--raised); + font-family: var(--font-ui); + font-size: var(--t-3); + font-weight: 500; + color: var(--ink-soft); + transition: background 120ms var(--ease), color 120ms var(--ease), + border-color 120ms var(--ease); +} + +.btn-quiet:hover:not(:disabled) { + border-color: var(--accent); + color: var(--ink); +} + +.btn-quiet:disabled { + color: var(--ink-faint); + cursor: default; +} + +.switch { + flex: none; + position: relative; + width: 38px; + height: 22px; + padding: 0; + border: 1px solid var(--line-strong); + border-radius: var(--r-pill); + background: var(--shell); + transition: background 140ms var(--ease), border-color 140ms var(--ease); +} + +.switch[data-on="true"] { + background: var(--accent); + border-color: var(--accent); +} + +.switch:disabled { + opacity: 0.45; + cursor: default; +} + +.switch-knob { + position: absolute; + top: 2px; + left: 2px; + width: 16px; + height: 16px; + border-radius: 50%; + background: var(--paper); + box-shadow: var(--shadow-raised); + transition: transform 140ms var(--ease), background 140ms var(--ease); +} + +.switch[data-on="true"] .switch-knob { + transform: translateX(16px); + background: var(--accent-contrast); +} + +/* The update dialog */ + +.panel-update { + width: min(460px, calc(100vw - 32px)); +} + +/* The release notes as the release wrote them, which is text and not markup. Preserved rather than + parsed: this is the one string in the app that arrives from outside it, and running it through a + renderer would be the only place where somebody else's bytes decide what is drawn. */ +.update-notes { + max-height: 180px; + overflow-y: auto; + padding: 12px 14px; + border: 1px solid var(--line); + border-radius: var(--r-md); + background: var(--raised); + font-family: var(--font-ui); + font-size: var(--t-3); + line-height: 1.55; + color: var(--ink-soft); + white-space: pre-wrap; + overflow-wrap: anywhere; +} + +.update-progress { + display: flex; + flex-direction: column; + gap: 8px; +} + +.update-track { + position: relative; + height: 5px; + border-radius: var(--r-pill); + background: var(--accent-wash); + overflow: hidden; +} + +.update-bar { + height: 100%; + border-radius: var(--r-pill); + background: var(--accent); + transition: width 180ms var(--ease); +} + +/* A server that sends no content length leaves nothing to measure, so the bar says "still going" + rather than claiming a fraction it does not know. */ +.update-track[data-unknown="true"] .update-bar { + width: 34%; + animation: update-sweep 1400ms var(--ease) infinite; +} + +@keyframes update-sweep { + 0% { + transform: translateX(-110%); + } + 100% { + transform: translateX(320%); + } +} + +.update-count { + font-family: var(--font-ui); + font-size: var(--t-2); + color: var(--ink-faint); + font-variant-numeric: tabular-nums; +} diff --git a/src/update.ts b/src/update.ts new file mode 100644 index 0000000..9b62647 --- /dev/null +++ b/src/update.ts @@ -0,0 +1,171 @@ +// The updater, from the frontend's side: asking whether there is one, downloading it with progress +// somebody can watch, and relaunching without losing an edit made half a second ago. +// +// `relaunch()` does not go through the window close handler that protects a dirty buffer, so +// anything here that relaunches flushes a pending save first. +// +// Everything Tauri-shaped lives here and the state it produces lives in src/store/useUpdate.ts, +// which is what the dialog and the settings panel read. The one thing that cannot go in that store +// is `offered` below: the value `check()` hands back is a resource handle, a number with a download +// behind it on the Rust side, so it is held here for as long as the dialog is open and closed when +// the dialog is not. + +import { getVersion } from "@tauri-apps/api/app"; +import { relaunch } from "@tauri-apps/plugin-process"; +import { check, type Update } from "@tauri-apps/plugin-updater"; +import { flushPendingSave } from "./document"; +import { isDesktop, isTauri } from "./ipc"; +import { useUpdate } from "./store/useUpdate"; +import { notify } from "./store/useToast"; + +/** + * A dev build has no `plugins.updater` in tauri.conf.json, so the plugin is never registered and + * `check()` fails with a raw plugin error. That is a sentence about the build, not a fault, and it + * reads as one. + */ +const NOT_ENABLED = "Updates are not enabled in this build."; + +/** How stale the last check has to be before an automatic one is worth making on launch. */ +const AUTOMATIC_INTERVAL_MS = 24 * 60 * 60 * 1000; + +/** + * How long after launch the automatic check waits. The first paint, the session restore and the + * first index pass all want the main thread and the network before anything asks GitHub a question + * nobody has asked for. + */ +const LAUNCH_DELAY_MS = 6_000; + +let offered: Update | null = null; + +/** + * Whether a rejection means "this build has no updater in it" rather than "the check failed". + * + * src-tauri/src/lib.rs registers the plugin only when the config it needs is present, so in a dev + * build there is nothing behind `plugin:updater|check` and Tauri rejects it from its own plugin + * store: `PluginStore::extend_api` formats exactly `plugin updater not found`. The ACL arrives at + * the same fact from the other side, ending its longer sentence with `Plugin not found`, for a + * build whose capability no longer grants `updater:default`. Both mean the same thing to somebody + * looking at the screen and neither is theirs to act on, so both become the one sentence above. + * + * Matched against the exact strings rather than against the word "updater", which also appears in + * every ordinary failure this function has to let through: a bad signature, an unreachable endpoint + * and a malformed manifest all name the plugin in their message. + */ +function updaterMissing(e: unknown): boolean { + const message = String(e); + return message === "plugin updater not found" || message.endsWith("Plugin not found"); +} + +async function runCheck(quiet: boolean): Promise { + // The updater and the process plugin are both desktop-only, in lib.rs and in the capability, so + // on a phone and in a browser this is a fact about the build rather than a command that failed. + if (!isDesktop) { + if (!quiet) notify(NOT_ENABLED); + return; + } + // Anything other than idle is a check already running or a dialog already answering the last one. + if (useUpdate.getState().phase !== "idle") return; + + useUpdate.getState().begin(); + try { + const update = await check(); + useUpdate.getState().markChecked(); + if (!update) { + useUpdate.getState().dismiss(); + if (!quiet) notify("Margin Docs is up to date"); + return; + } + offered = update; + useUpdate.getState().offer(update.version, update.body ?? null); + } catch (e) { + useUpdate.getState().dismiss(); + if (quiet) return; + notify(updaterMissing(e) ? NOT_ENABLED : `Could not check for updates: ${String(e)}`); + } +} + +/** + * The `check-updates` command, and the button in the settings panel. Says something either way: + * somebody who pressed it is owed an answer even when the answer is that there is nothing to do. + */ +export async function checkForUpdates(): Promise { + await runCheck(false); +} + +/** + * The same check, made on the app's own initiative and saying nothing unless there is an update to + * show. Off entirely when the user has turned the preference off, and skipped when the last check + * is recent enough that another one would only be noise. + * + * Returns its own cancel, so a shell that unmounts before the delay is up does not leave a check + * behind it. + */ +export function startUpdateChecks(): () => void { + const { automatic, lastChecked } = useUpdate.getState(); + if (!isDesktop || !automatic) return () => {}; + if (lastChecked !== null && Date.now() - lastChecked < AUTOMATIC_INTERVAL_MS) return () => {}; + const timer = window.setTimeout(() => void runCheck(true), LAUNCH_DELAY_MS); + return () => window.clearTimeout(timer); +} + +/** + * Downloads the update the dialog is showing and restarts into it. + * + * The progress callback is the whole reason this is not one line: `downloadAndInstall` reports + * every chunk and the dialog draws them, so a hundred megabytes over a slow connection is a bar + * moving rather than an app that has stopped answering. + * + * Nothing runs after `relaunch()`, which is why the flush is in front of it. The window close + * handler in src/App.tsx is what normally saves a buffer half a second old, and a relaunch does not + * go anywhere near it. + */ +export async function installUpdate(): Promise { + const update = offered; + if (update === null) return; + + let downloaded = 0; + let total: number | null = null; + useUpdate.getState().progress(0, null); + try { + await update.downloadAndInstall((event) => { + if (event.event === "Started") { + total = event.data.contentLength ?? null; + useUpdate.getState().progress(0, total); + } else if (event.event === "Progress") { + downloaded += event.data.chunkLength; + useUpdate.getState().progress(downloaded, total); + } else { + // The bytes are in and the bundle is being swapped over. There is no number for this part + // and it is not instant, so it is a phase rather than a bar sitting full. + useUpdate.getState().installing(); + } + }); + offered = null; + await flushPendingSave(); + await relaunch(); + } catch (e) { + useUpdate.getState().failed(String(e)); + } +} + +/** Later, Escape, or the close button. The handle goes with the dialog. */ +export function dismissUpdate(): void { + const update = offered; + offered = null; + useUpdate.getState().dismiss(); + if (update !== null) void update.close().catch(() => {}); +} + +/** + * What the running bundle says its version is, which is the number the updater compares against the + * manifest. Asked of Tauri rather than read out of package.json so that the settings panel cannot + * disagree with the app it is inside. Null in a browser, where there is no bundle to ask. + */ +export async function appVersion(): Promise { + if (!isTauri) return null; + try { + return await getVersion(); + } catch { + return null; + } +} diff --git a/tests/export-writes-only-the-pdf.spec.ts b/tests/export-writes-only-the-pdf.spec.ts new file mode 100644 index 0000000..131fa1d --- /dev/null +++ b/tests/export-writes-only-the-pdf.spec.ts @@ -0,0 +1,343 @@ +// An export writes the PDF and nothing else. +// +// The claim in src/export/run.ts is a claim about what an export does NOT do: it never calls +// `save`, never dispatches a transaction, and asks the document store for nothing but the path and +// the tree it is already holding. Every other suite reads that off the screen. This one reads it +// off the wire and off the fixture, the way tests/bytes.spec.ts does, because the promise is about +// bytes: choosing to export a document must not turn into writing over a file the user had not +// decided to write yet, and there is no undo for that on disk. +// +// The document exported here has an unsaved edit in it, which is the case that can actually hurt. +// A save on the way into an export would look harmless on a clean buffer and would silently commit +// half a paragraph on a dirty one. Writes are held through `external.pauseWrites` so the buffer +// stays dirty for as long as the export takes rather than racing the 500ms autosave, and the edit +// is let through afterwards to prove it was real: a file that did not change because the edit had +// evaporated would prove nothing at all. +// +// It also carries an image, a table, a formula and a mermaid fence, because those are the four +// blocks the converter does extra work for, and three of them put something in the compile that no +// other block does: the image travels as an absolute path for the backend to open, the diagram is +// drawn to SVG and travels as bytes, and the formula becomes a mitex call. The Typst source and the +// image list handed to `pdf_compile` are asserted here for exactly that reason. An export that +// wrote nothing because it never got past the first paragraph is the shape of green this suite is +// built to refuse. +// +// WHAT A BROWSER CANNOT REACH. `exportPdf` gates on `isDesktop`, which is `isTauri` and not a +// phone. `isTauri` reads `__TAURI_INTERNALS__` off the window and tests/disk.ts puts that there at +// document start, so the gate opens and the whole path runs: convert, draw, compile, panel, write. +// What is behind it is the dev fixture, so `pdf_compile` answers with a PDF header instead of a +// typeset document and `pdf_write` puts nothing anywhere. That the compiler produces a real PDF and +// that the write lands where it was pointed are Rust questions, and they are asked in +// src-tauri/tests/export_writes_only_the_pdf.rs. The one piece nothing can drive from either side +// is the native save panel itself: it is an AppKit window, so this spec answers the command for it +// and cannot say what a real panel would hand back for a name the user typed. That distinction +// matters, and the Rust suite is where it is followed up. + +import { expect, test, type Page } from "@playwright/test"; +import { putCaret } from "./caret"; +import { ask, change, installTauriShim } from "./disk"; + +const HANDBOOK = "/Users/you/Documents/Handbook"; +const README = `${HANDBOOK}/README.md`; +/** The picture the document points at, which the fixture really has. */ +const PICTURE = `${HANDBOOK}/reference/assets/diagram.png`; +/** Where the save panel is pointed: outside the folder, which is the ordinary case. */ +const TARGET = "/Users/you/Desktop/README.pdf"; + +const row = (path: string) => `.tree-row[data-path="${path}"]`; + +/** Longer than the 500ms autosave debounce in src/document.ts, with room for the write itself. */ +const SAVED = 1500; + +/** Mermaid is several megabytes and is fetched on the first diagram, so the first export is slow. */ +const EXPORTED = 20_000; + +/** + * One document holding all four of the blocks the converter does extra work for. Built by joining + * lines rather than as a template literal because a mermaid fence is three backticks. + */ +const SOURCE = [ + "# Quarterly report", + "", + "Prose before anything difficult.", + "", + "![the diagram](reference/assets/diagram.png)", + "", + "| region | total |", + "| ------ | ----- |", + "| north | 12 |", + "| south | 9 |", + "", + "$$", + "E = mc^2", + "$$", + "", + "```mermaid", + "graph TD", + " A[Start] --> B[Finish]", + "```", + "", + "Closing line.", + "", +].join("\n"); + +/** One command as it crossed the boundary, with the fields worth keeping off the ones that have them. */ +interface Sent { + command: string; + /** The destination, for the two commands that name one: `file_write` and `pdf_write`. */ + path: string | null; + /** The Typst source, for the one command that carries it. */ + source: string | null; + /** What the compile was handed to open, and whether the bytes came with it or are on disk. */ + images: { path: string; inline: boolean }[] | null; +} + +/** One `listen` the app has registered: which event, and the callback id the shim gave it. */ +interface Listen { + event: string; + id: number; +} + +interface Internals { + invoke: (command: string, args?: Record) => unknown; + runCallback: (id: number, data: unknown) => void; +} + +declare global { + interface Window { + __sent: Sent[]; + __listens: Listen[]; + /** What the save panel answers with. `null` is the user pressing Cancel. */ + __savePanel: string | null; + __TAURI_INTERNALS__: Internals; + } +} + +/** + * Records every command the app sends, and answers the one a browser has no window for. + * + * Added after `installTauriShim`, which puts `__TAURI_INTERNALS__` on the window synchronously. + * Wrapping that object's `invoke` rather than the app's own wrapper is what makes this a + * measurement of what was sent rather than of what src/api/pdf.ts meant to send: a `file_write` + * from anywhere in the app, on any path, lands in this list. + */ +function recordIpc(): void { + window.__sent = []; + window.__listens = []; + window.__savePanel = null; + const internals = window.__TAURI_INTERNALS__; + const real = internals.invoke; + internals.invoke = (command, args) => { + const images = (args?.images as { path: string; data: string | null }[] | undefined) ?? null; + window.__sent.push({ + command, + path: (args?.path as string) ?? null, + source: (args?.source as string) ?? null, + images: images === null ? null : images.map((i) => ({ path: i.path, inline: i.data !== null })), + }); + if (command === "plugin:event|listen") { + window.__listens.push({ event: args?.event as string, id: args?.handler as number }); + } + // The save panel is an AppKit window. This is the one thing in the whole path a browser cannot + // have, so it is answered here and everything either side of it is the running program. + if (command === "plugin:dialog|save") return Promise.resolve(window.__savePanel); + return real(command, args); + }; +} + +/** Opens the README with the given bytes in it and waits for them to be on screen. */ +async function open(page: Page, source: string): Promise { + await page.addInitScript(installTauriShim); + await page.addInitScript(recordIpc); + await page.addInitScript(() => { + localStorage.clear(); + localStorage.setItem("margindocs-recents", JSON.stringify(["/Users/you/Documents/Handbook"])); + }); + await page.goto("/"); + await expect(page.locator(row(HANDBOOK))).toBeVisible(); + await page.locator(row(README)).click(); + await expect(page.locator(".prose")).toBeVisible(); + + // Written from outside rather than typed, so the app has not registered a self-write and this is + // a file it has only ever read. + await change(page, "write", README, source); + await expect.poll(() => ask(page, "read", README)).toBe(source); +} + +/** What is on disk now. */ +const disk = (page: Page, path = README): Promise => ask(page, "read", path); + +const sent = (page: Page): Promise => page.evaluate(() => window.__sent); + +const commands = async (page: Page): Promise => + (await sent(page)).map((call) => call.command); + +const toast = (page: Page) => page.locator(".toast"); + +/** + * The gesture, which is the File menu and not a call to `exportPdf`. + * + * The same route tests/writing-tools.spec.ts takes and for the same reason: src-tauri/src/lib.rs + * answers its own row by emitting `menu-action` with the command id, App.tsx has a `listen` on that + * event, and src/keys/menu.ts turns the payload into a command. Everything from the event on is the + * running program. + */ +async function runFromMenu(page: Page, command: string): Promise { + const delivered = await page.evaluate((id) => { + let count = 0; + for (const subscription of window.__listens) { + if (subscription.event !== "menu-action") continue; + window.__TAURI_INTERNALS__.runCallback(subscription.id, { + event: "menu-action", + id: subscription.id, + payload: id, + }); + count += 1; + } + return count; + }, command); + // An event nobody is subscribed to is the shape of test that passes because nothing happened. + expect(delivered, "the app has no menu-action listener to fire at").toBeGreaterThan(0); +} + +/** + * Types a character into the first paragraph and holds the save that would follow, so the buffer is + * dirty and the file is not, for as long as the caller needs. Answers with the log as it stood the + * moment the buffer settled, which is the line everything after it is measured from. + */ +async function dirtyWithHeldSave(page: Page): Promise { + await ask(page, "pauseWrites"); + + const paragraph = page.locator(".prose p").first(); + await paragraph.click(); + await putCaret(paragraph, "end"); + await page.keyboard.type("Z"); + + await expect(page.locator(".dirty-dot")).toBeVisible(); + // The autosave has fired and is sitting in the gate. Waiting for it rather than for a timeout is + // what makes the count below a line the export is measured against instead of a race with it. + await expect + .poll(async () => (await commands(page)).filter((c) => c === "file_write").length) + .toBe(1); + + return (await sent(page)).length; +} + +test("an export of a document with unsaved edits writes nothing but the PDF", async ({ page }) => { + test.setTimeout(60_000); + await open(page, SOURCE); + + // All four of the blocks the converter does extra work for are really on screen, so the export + // below is the export this test is about and not a page of prose that happens to be green. + // Not every `img` under `.prose` is the document's: prosemirror-view puts a zero width + // `ProseMirror-separator` after an inline node that ends a textblock, and it is one too. + await expect(page.locator(".prose img:not(.ProseMirror-separator)")).toHaveCount(1); + await expect(page.locator(".prose table")).toHaveCount(1); + await expect(page.locator(".prose [data-math-block]")).toHaveCount(1); + await expect(page.locator(".prose .mermaid-block")).toHaveCount(1); + + const line = await dirtyWithHeldSave(page); + const before = await page.locator(".prose").innerHTML(); + await page.evaluate((target) => { + window.__savePanel = target; + }, TARGET); + + await runFromMenu(page, "export-pdf"); + await expect(toast(page)).toContainText("Exported README.pdf", { timeout: EXPORTED }); + + const during = (await sent(page)).slice(line); + + // 1. Exactly these commands crossed the boundary, in this order, and no other. `file_write` is + // not among them, and neither is `file_read`: the export asked the document store for the + // tree it was already holding and went to the compiler with it. + expect(during.map((call) => call.command)).toEqual([ + "plugin:event|listen", + "pdf_compile", + "plugin:event|unlisten", + "plugin:dialog|save", + "pdf_write", + ]); + + // 2. The bytes went where the panel pointed, and nowhere else. + expect(during.find((call) => call.command === "pdf_write")?.path).toBe(TARGET); + + // 3. The file on disk is the one that was read, byte for byte. This is the whole test. + expect(await disk(page)).toBe(SOURCE); + + // 4. And the buffer is still dirty, which is the other half of it: an export that had quietly + // saved on the way past would leave a clean buffer and an unchanged-looking file, and the + // unchanged-looking file would be the one with the edit in it. The document on screen is the + // one that went in, too: `documentToTypst` is handed the live tree rather than a copy, so a + // converter that mutated it, or a transaction that changed the document on the way past, + // would show up here as a paragraph that is not the one that was exported. + await expect(page.locator(".dirty-dot")).toBeVisible(); + expect(await page.locator(".prose").innerHTML()).toBe(before); + + // 5. The four paths did their extra work. The image travels as the absolute path the backend + // opens under the root guard; the diagram was drawn and travels as bytes because it has no + // file behind it; the formula is a mitex call; the table is a Typst table. A compile handed + // none of that would have written nothing either, and would have proved nothing. + const compile = during.find((call) => call.command === "pdf_compile"); + expect(compile?.images).toEqual([ + { path: PICTURE, inline: false }, + { path: "/inline/diagram-1.svg", inline: true }, + ]); + expect(compile?.source).toContain(PICTURE); + expect(compile?.source).toContain("#table("); + expect(compile?.source).toContain("mitex"); + + // 6. The edit was real all along. Letting the held save through writes the character that was + // typed, so the file that did not move during the export was a file with a pending edit + // against it rather than a buffer that had lost one. + await ask(page, "resumeWrites"); + await expect.poll(() => disk(page)).toContain("difficult.Z"); + expect(await disk(page)).not.toBe(SOURCE); + + // 7. One write for the whole session, which is the autosave's, and it went out before the export + // started rather than because of it. + // + // What this cannot see, said plainly rather than left for the next person to assume. Holding + // the write is what keeps the buffer dirty for the length of an export, and it is also the + // one state in which a fire and forget `void save()` inside `exportPdf` would leave no trace: + // `saveNow` in src/document.ts folds a request that arrives while a write is on the wire into + // a single next lap, and by the time the gate opens that lap finds the buffer clean and skips. + // Measured, by putting that line into the module and watching this test stay green. An + // `await`ed one is caught, loudly, because the export then never reaches the panel at all. + // The reason the gap is narrow rather than alarming is the debounce itself: the buffer can + // only be dirty while a save is pending or in flight, so an export that saved would be + // writing the bytes the debounce was about to write anyway. What is worth proving is that the + // export adds no write of its own, and that is what steps 1 to 6 are. + await page.waitForTimeout(SAVED); + expect((await commands(page)).filter((c) => c === "file_write")).toEqual(["file_write"]); +}); + +test("cancelling the save panel leaves the document exactly where it was", async ({ page }) => { + // The branch that returns halfway through, after a compile and before a write. It is worth its + // own test because it is the one place an export ends without a toast to say so, and a tidy-up + // on that path that reached for `save` would be invisible on screen and permanent on disk. + test.setTimeout(60_000); + await open(page, SOURCE); + await expect(page.locator(".prose .mermaid-block")).toHaveCount(1); + + const line = await dirtyWithHeldSave(page); + // Left as null, which is what the panel answers when the user presses Cancel. + + await runFromMenu(page, "export-pdf"); + await expect + .poll(async () => (await commands(page)).filter((c) => c === "plugin:dialog|save").length, { + timeout: EXPORTED, + }) + .toBe(1); + + const during = (await sent(page)).slice(line); + expect(during.map((call) => call.command)).toEqual([ + "plugin:event|listen", + "pdf_compile", + "plugin:event|unlisten", + "plugin:dialog|save", + ]); + + expect(await disk(page)).toBe(SOURCE); + await expect(page.locator(".dirty-dot")).toBeVisible(); + await expect(toast(page)).toHaveCount(0); +}); diff --git a/tests/writing-tools.spec.ts b/tests/writing-tools.spec.ts new file mode 100644 index 0000000..86255f4 --- /dev/null +++ b/tests/writing-tools.spec.ts @@ -0,0 +1,590 @@ +// Writing Tools, which nothing in this suite can actually run, and the two halves of it that can +// still be proved here. +// +// The feature needs macOS 15.1 with Apple Intelligence turned on, and what it does when it runs is +// not a call this app makes: the system finds the selection in the webview and rewrites it by +// mutating the DOM, and the first this app hears of it is prosemirror-view reparsing its own +// document. So the risk is not "does the menu item fire". It is what those bytes become, and that +// is reproducible in Chromium without a single line of AppKit, because the mutation is an ordinary +// DOM edit: take the range out, put text in. +// +// The first half of this file does exactly that and then reads the file off the fixture, the way +// tests/bytes.spec.ts does, because the promise being made is about the file rather than about the +// screen. The second half drives the gesture, the Edit menu row, and asserts what +// src/editor/writing.ts refuses and that a refusal really did stop the call. A guard asserted by +// calling it would prove nothing about whether the running program asks it, and this project has +// shipped four that did not. +// +// What is deliberately NOT claimed here: that the mutation below is byte for byte the one macOS +// makes. Nobody outside Apple can promise that. It is the worst plausible shape of it, a range +// deleted and replaced, which is what a browser does for any programmatic text replacement, and a +// guard drawn against the worst shape is a guard that holds for the gentler ones. + +import { expect, test, type Locator, type Page } from "@playwright/test"; +import { putCaret, settle, type Where } from "./caret"; +import { ask, change, installTauriShim } from "./disk"; + +const HANDBOOK = "/Users/you/Documents/Handbook"; +const README = `${HANDBOOK}/README.md`; +const NOTES = `${HANDBOOK}/notes.txt`; + +const row = (path: string) => `.tree-row[data-path="${path}"]`; + +/** Longer than the 500ms autosave debounce in src/document.ts, with room for the write itself. */ +const SAVED = 1500; + +interface WritingCall { + command: string; + tool: string | null; +} + +/** One `listen` the app has registered: which event, and the callback id the shim gave it. */ +interface Subscription { + event: string; + id: number; +} + +interface Internals { + invoke: (command: string, args?: Record) => unknown; + runCallback: (id: number, data: unknown) => void; +} + +declare global { + interface Window { + __writing: WritingCall[]; + __listening: Subscription[]; + __TAURI_INTERNALS__: Internals; + } +} + +/** + * Records what crosses the IPC boundary: every writing_* command, so a refusal can be shown to have + * stopped one, and every event the app subscribes to, so the menu can be fired at it below. + * + * Added after `installTauriShim`, which puts `__TAURI_INTERNALS__` on the window synchronously. + * Wrapping that object's `invoke` rather than the app's own wrapper is what makes this a + * measurement of what was sent rather than of what src/api/writing.ts meant to send. + */ +function recordIpc(): void { + window.__writing = []; + window.__listening = []; + const internals = window.__TAURI_INTERNALS__; + const real = internals.invoke; + internals.invoke = (command, args) => { + if (command.startsWith("writing_")) { + window.__writing.push({ command, tool: (args?.tool as string) ?? null }); + } + if (command === "plugin:event|listen") { + window.__listening.push({ event: args?.event as string, id: args?.handler as number }); + } + return real(command, args); + }; +} + +interface OpenOptions { + /** The file to open. The README unless a test wants the .txt surface. */ + path?: string; + /** Sets the fixture's own switch for a Mac with no Writing Tools menu. */ + unavailable?: boolean; +} + +/** Opens a document with the given bytes in it and waits for them to be on screen. */ +async function open(page: Page, source: string, options: OpenOptions = {}): Promise { + const path = options.path ?? README; + await page.addInitScript(installTauriShim); + await page.addInitScript(recordIpc); + await page.addInitScript((unavailable) => { + localStorage.clear(); + localStorage.setItem("margindocs-recents", JSON.stringify(["/Users/you/Documents/Handbook"])); + if (unavailable) localStorage.setItem("margindocs-dev-no-writing-tools", "1"); + }, options.unavailable === true); + await page.goto("/"); + await expect(page.locator(row(HANDBOOK))).toBeVisible(); + await page.locator(row(path)).click(); + await expect(page.locator(path === NOTES ? "textarea.plain-text" : ".prose")).toBeVisible(); + + // Written from outside rather than typed, so the app has not registered a self-write and this is + // a file it has only ever read. + await change(page, "write", path, source); + await expect.poll(() => ask(page, "read", path)).toBe(source); +} + +/** What is on disk now. */ +const disk = (page: Page, path = README): Promise => ask(page, "read", path); + +const calls = (page: Page): Promise => page.evaluate(() => window.__writing); + +const commands = async (page: Page): Promise => + (await calls(page)).map((call) => call.command); + +/** + * What the system does to the selection, as far as anything outside Apple can say: the range comes + * out and one run of text goes in. No input event, no ProseMirror transaction, nothing the editor + * was asked about first. prosemirror-view's own MutationObserver is what notices. + */ +async function rewriteRange( + page: Page, + selector: string, + from: number, + to: number, + text: string, + end = selector, +): Promise { + await page.evaluate( + (job) => { + const at = (selector: string, offset: number): [Node, number] => { + const host = document.querySelector(selector); + if (!host) throw new Error(`nothing matches ${selector}`); + const walker = document.createTreeWalker(host, NodeFilter.SHOW_TEXT); + let seen = 0; + while (walker.nextNode()) { + const node = walker.currentNode as Text; + if (offset <= seen + node.data.length) return [node, offset - seen]; + seen += node.data.length; + } + throw new Error(`offset ${offset} is past the end of ${selector}`); + }; + + const range = document.createRange(); + const [startNode, startOffset] = at(job.selector, job.from); + const [endNode, endOffset] = at(job.end, job.to); + range.setStart(startNode, startOffset); + range.setEnd(endNode, endOffset); + range.deleteContents(); + range.insertNode(document.createTextNode(job.text)); + }, + { selector, from, to, text, end }, + ); + await settle(page); +} + +/** A selection a person could have made: a caret, then Shift and the arrow key, held down. */ +async function selectFrom(target: Locator, at: Where, characters: number): Promise { + const page = target.page(); + await target.click(); + await putCaret(target, at); + for (let i = 0; i < characters; i += 1) await page.keyboard.press("Shift+ArrowRight"); + await settle(page); +} + +/** The blocks the two ends of the live selection are in, named by tag. */ +function selectionBlocks(page: Page): Promise { + return page.evaluate(() => { + const selection = window.getSelection(); + if (!selection || selection.rangeCount === 0) return []; + const range = selection.getRangeAt(0); + const block = (node: Node): string => { + const element = node.nodeType === Node.ELEMENT_NODE ? (node as Element) : node.parentElement; + return ( + element?.closest("p, h1, h2, h3, h4, h5, h6, td, th, pre, [data-math-block]")?.tagName ?? "?" + ); + }; + return [block(range.startContainer), block(range.endContainer)]; + }); +} + +/** + * The gesture, which is the Edit menu and not a call to `runWritingTool`. + * + * A native menu cannot be clicked from a browser, but everything downstream of the click can be + * driven exactly as it happens: src-tauri/src/lib.rs answers its own row by emitting `menu-action` + * with the command id, App.tsx has a `listen` on that event, and src/keys/menu.ts turns the payload + * into a command. So this delivers that event to the app's own subscriber through the shim's + * callback registry, and everything from there on is the running program. It is also the one path + * that leaves the selection alone, which is why it is the path this feature is built around: a + * native menu does not take the keyboard off the webview. + */ +async function runFromMenu(page: Page, command: string): Promise { + const delivered = await page.evaluate((id) => { + let count = 0; + for (const subscription of window.__listening) { + if (subscription.event !== "menu-action") continue; + window.__TAURI_INTERNALS__.runCallback(subscription.id, { + event: "menu-action", + id: subscription.id, + payload: id, + }); + count += 1; + } + return count; + }, command); + // An event nobody is subscribed to is the shape of test that passes because nothing happened. + expect(delivered, "the app has no menu-action listener to fire at").toBeGreaterThan(0); +} + +/** The other way in, and the one that cannot preserve a selection. */ +async function runFromPalette(page: Page, label: string): Promise { + await page.keyboard.press("Meta+k"); + await page.locator(".palette-field").fill(label); + // The row about to run is the row this test means, rather than whatever fuzzy matching put at the + // top today. + await expect(page.locator(".palette-row").first()).toContainText(label); + await page.keyboard.press("Enter"); +} + +const REWRITE = "writing-rewrite"; +const PROOFREAD = "writing-proofread"; + +const toast = (page: Page): Locator => page.locator(".toast"); + +// --------------------------------------------------------------------------------------------- +// What the bytes do. No guard involved: this is the ground the guard below is drawn on. +// --------------------------------------------------------------------------------------------- + +test("a rewrite across a hand wrapped paragraph leaves no backslash behind", async ({ page }) => { + // The one that would matter most, because a hand wrapped file is what a text editor leaves + // behind and a rewrite is asked for on whole sentences. The paragraph is declared + // `whitespace: "pre"` in src/model/schema.ts so prosemirror-view reparses the wraps as newlines + // rather than as hard breaks; without that field the wraps the rewrite did not touch would come + // back as `\` at the end of every line, which is the bug docs/architecture.md is about. + await open(page, "alpha beta\ngamma delta\n"); + + await rewriteRange(page, ".prose p", 0, 22, "One rewritten sentence."); + await page.waitForTimeout(SAVED); + + expect(await disk(page)).toBe("One rewritten sentence.\n"); +}); + +test("a rewrite that only covers the first wrapped line leaves the second one alone", async ({ + page, +}) => { + await open(page, "alpha beta\ngamma delta\n"); + + await rewriteRange(page, ".prose p", 0, 10, "Alpha Beta"); + await page.waitForTimeout(SAVED); + + expect(await disk(page)).toBe("Alpha Beta\ngamma delta\n"); +}); + +test("a rewrite inside a heading is still a heading, and inside a list item still an item", async ({ + page, +}) => { + await open(page, "# Title Here\n\n- one\n- two\n"); + + await rewriteRange(page, ".prose h1", 0, 10, "Another Title"); + await rewriteRange(page, ".prose li p", 0, 3, "ONE rewritten"); + await page.waitForTimeout(SAVED); + + expect(await disk(page)).toBe("# Another Title\n\n- ONE rewritten\n- two\n"); +}); + +test("markdown the rewrite invents is escaped rather than obeyed", async ({ page }) => { + // A rewrite is prose from a language model and it will happily open a sentence with "1." or "-". + // Those are the file's own syntax, so if they went in raw the paragraph would come back as a list + // the next time the file was read, which is a block the user never asked for. + await open(page, "plain sentence\n"); + + await rewriteRange(page, ".prose p", 0, 14, "- a list? *maybe* [really](no)"); + await page.waitForTimeout(SAVED); + + expect(await disk(page)).toBe("\\- a list? \\*maybe\\* \\[really]\\(no)\n"); + await expect(page.locator(".prose ul")).toHaveCount(0); +}); + +test("a rewrite whose ends are in two paragraphs damages both of them", async ({ page }) => { + // The evidence for the guard, reproduced with the guard out of the way. Two paragraphs become + // three, and ` ` lands in the middle of words nobody selected: the serializer's honest + // spelling for a leading space markdown has no other way to keep, in a place no author would + // have put one. Nothing here is a serializer bug. It is the wrong range to hand a rewrite. + await open(page, "one alpha\n\ntwo beta\n"); + + await rewriteRange(page, ".prose p:nth-of-type(1)", 4, 3, "MERGED", ".prose p:nth-of-type(2)"); + await page.waitForTimeout(SAVED); + + expect(await disk(page)).toBe("one \n\nMERGED\n\n beta\n"); +}); + +test("a rewrite whose ends are in two table cells is not a table any more", async ({ page }) => { + // The worst of them. GFM has one header row and every row has to be the same width; this comes + // back a column wider with an empty first cell in both rows, so the file now says something about + // the user's data that the user did not. + await open(page, "| a | b |\n| - | - |\n| c | d |\n"); + + await rewriteRange(page, ".prose td:nth-of-type(1)", 0, 1, "X", ".prose td:nth-of-type(2)"); + await page.waitForTimeout(SAVED); + + expect(await disk(page)).toBe("| | a | b |\n| - | - | - |\n| | X | |\n"); +}); + +test("a rewrite across a link takes the address with it, and one inside the link does not", async ({ + page, +}) => { + // Both halves in one test because the pair is the rule. The address is not in the words on + // screen, so a range that swallows the whole anchor loses something the user cannot see they had. + // A range wholly inside the anchor is safe: the mark is an ancestor of the range rather than + // content the range can delete, so the destination is still there afterwards. + await open(page, "see [docs page](x.md) now\n"); + + await rewriteRange(page, ".prose a", 0, 9, "the guide"); + await page.waitForTimeout(SAVED); + expect(await disk(page)).toBe("see [the guide](x.md) now\n"); + + await rewriteRange(page, ".prose p", 0, 13, "rewritten"); + await page.waitForTimeout(SAVED); + expect(await disk(page)).toBe("rewritten now\n"); +}); + +// --------------------------------------------------------------------------------------------- +// The guard, through the gesture. +// --------------------------------------------------------------------------------------------- + +test("an ordinary sentence is handed to the system", async ({ page }) => { + // The control. Without it every refusal below would still pass on a build where nothing ever + // reaches the system at all, which is the same green as a guard that works. + await open(page, "just a plain sentence here\n"); + + await selectFrom(page.locator(".prose p"), 0, 4); + await runFromMenu(page, REWRITE); + + await expect.poll(() => commands(page)).toEqual(["writing_available", "writing_run"]); + expect((await calls(page))[1].tool).toBe("Rewrite"); + await expect(toast(page)).toHaveCount(0); +}); + +test("Proofread asks for the item the system calls Proofread", async ({ page }) => { + await open(page, "just a plain sentence here\n"); + + await selectFrom(page.locator(".prose p"), 0, 4); + await runFromMenu(page, PROOFREAD); + + await expect.poll(() => commands(page)).toEqual(["writing_available", "writing_run"]); + expect((await calls(page))[1].tool).toBe("Proofread"); +}); + +test("a selection covering two paragraphs is refused and nothing is asked", async ({ page }) => { + await open(page, "one alpha\n\ntwo beta\n"); + + await selectFrom(page.locator(".prose p").first(), 4, 8); + // The gesture really did cross the boundary. Without this the test passes on a build where + // Shift+ArrowRight quietly stopped at the end of the paragraph, and the refusal below would be + // answering a question nobody asked. + expect(await selectionBlocks(page)).toEqual(["P", "P"]); + expect( + await page.evaluate(() => { + const range = window.getSelection()!.getRangeAt(0); + const block = (node: Node) => + (node.nodeType === Node.ELEMENT_NODE ? (node as Element) : node.parentElement)?.closest("p"); + return block(range.startContainer) === block(range.endContainer); + }), + ).toBe(false); + + await runFromMenu(page, REWRITE); + + await expect(toast(page)).toContainText("one paragraph at a time"); + await expect.poll(() => commands(page)).toEqual(["writing_available"]); +}); + +test("a selection covering a link is refused and nothing is asked", async ({ page }) => { + await open(page, "see [docs](x.md) now\n"); + + await selectFrom(page.locator(".prose p"), 0, 8); + await expect + .poll(() => + page.evaluate(() => window.getSelection()!.getRangeAt(0).cloneContents().querySelector("a") !== null), + ) + .toBe(true); + + await runFromMenu(page, REWRITE); + + await expect(toast(page)).toContainText("address"); + await expect.poll(() => commands(page)).toEqual(["writing_available"]); +}); + +test("a selection covering a picture or a formula is refused", async ({ page }) => { + // Both are atoms: a range that covers one deletes it, and neither the file name nor the LaTeX is + // in the words on screen for a rewrite to put back. Inline maths is `$$…$$` here, not `$…$`: + // src/markdown/handlers.ts turns single dollar text maths off, so a lone `$` is a dollar sign. + await open(page, "see ![pic](p.png) now\n\nand $$x+1$$ too\n"); + + await selectFrom(page.locator(".prose p").first(), 0, 6); + await runFromMenu(page, REWRITE); + await expect(toast(page)).toContainText("picture"); + + await selectFrom(page.locator(".prose p").nth(1), 0, 6); + await runFromMenu(page, REWRITE); + await expect(toast(page)).toContainText("formula"); + + await expect.poll(() => commands(page)).toEqual([ + "writing_available", + "writing_available", + ]); +}); + +test("a selection wholly inside a code span is refused", async ({ page }) => { + // The bytes survive this one, which is exactly why it needs its own test: the range is inside the + // `code` element rather than covering it, so `cloneContents` reports nothing and the refusal + // comes from the marks around the range instead. + await open(page, "a `some code` b\n"); + + await selectFrom(page.locator(".prose code"), 0, 4); + await runFromMenu(page, REWRITE); + + await expect(toast(page)).toContainText("code"); + await expect.poll(() => commands(page)).toEqual(["writing_available"]); +}); + +test("with no document open it says to open one", async ({ page }) => { + await page.addInitScript(installTauriShim); + await page.addInitScript(recordIpc); + await page.addInitScript(() => { + localStorage.clear(); + localStorage.setItem("margindocs-recents", JSON.stringify(["/Users/you/Documents/Handbook"])); + }); + await page.goto("/"); + await expect(page.locator(row(HANDBOOK))).toBeVisible(); + await expect(page.locator(".prose")).toHaveCount(0); + + await runFromMenu(page, REWRITE); + + await expect(toast(page)).toContainText("Open a document"); + await expect.poll(() => commands(page)).toEqual(["writing_available"]); +}); + +test("a selection inside a fenced code block is refused and nothing is asked", async ({ page }) => { + // Not a byte argument: a fence round trips a rewrite cleanly. It is the argument + // src/editor/proofing.ts already made for the spell checker, which is that a tool rewriting + // somebody's variable names is a tool they turn off, and a rewriter is the louder version of it. + await open(page, "```js\nconst a = 1;\n```\n"); + + await selectFrom(page.locator(".prose pre code"), 0, 5); + await runFromMenu(page, REWRITE); + + await expect(toast(page)).toContainText("code"); + await expect.poll(() => commands(page)).toEqual(["writing_available"]); + expect(await disk(page)).toBe("```js\nconst a = 1;\n```\n"); +}); + +test("a selection inside a raw block is refused and nothing is asked", async ({ page }) => { + // A raw block is the file's own bytes, held twice so the editor can prove it has not touched + // them. Handing them to a rewriter is the one thing they must never be handed to. + await open(page, 'para\n\n
raw
\n'); + + await selectFrom(page.locator(".prose pre.raw-block code"), 0, 5); + await runFromMenu(page, REWRITE); + + await expect(toast(page)).toContainText("the file's own bytes"); + await expect.poll(() => commands(page)).toEqual(["writing_available"]); + expect(await disk(page)).toBe('para\n\n
raw
\n'); +}); + +test("the cursor in a formula's source is refused, and the message says so", async ({ page }) => { + // A formula is not prose and its field is not the document: it is a textarea of its own inside + // it, so it takes the keyboard away and the general answer would be to click into the document. + // That answer is true and unhelpful, hence the branch and hence this test, which is here because + // a refusal nothing can reach is the shape of guard this project has shipped four times. + const source = "before\n\n$$\ny = 2\n$$\n"; + await open(page, source); + + await page.locator(".prose .math-block").click(); + await expect(page.locator(".prose textarea.math-source")).toBeFocused(); + + await runFromMenu(page, REWRITE); + + await expect(toast(page)).toContainText("formula"); + await expect.poll(() => commands(page)).toEqual(["writing_available"]); +}); + +test("a drag across a rendered formula is refused, and the message says so", async ({ page }) => { + // The other way into a display equation, and the one the cursor never enters: the block is + // `contenteditable=false`, so clicking it opens the source field above, but a drag across the + // rendered maths still leaves a real selection with both ends inside the block and the document + // holding the keyboard. A mouse drag because that is the only gesture that makes one. + await open(page, "before\n\n$$\ny = 2 + 3 + 4\n$$\n\nafter\n"); + + const box = await page.locator(".prose .math-render").boundingBox(); + await page.mouse.move(box!.x + 4, box!.y + box!.height / 2); + await page.mouse.down(); + await page.mouse.move(box!.x + box!.width - 4, box!.y + box!.height / 2, { steps: 10 }); + await page.mouse.up(); + // The drag really made a selection inside the block, rather than a caret somewhere near it. + expect(await page.evaluate(() => window.getSelection()!.isCollapsed)).toBe(false); + expect(await selectionBlocks(page)).toEqual(["DIV", "DIV"]); + + await runFromMenu(page, REWRITE); + + await expect(toast(page)).toContainText("formula"); + await expect.poll(() => commands(page)).toEqual(["writing_available"]); +}); + +test("the cursor in a toggle's title is refused, and the message says so", async ({ page }) => { + // The same shape. A toggle's title is an attribute on the node rather than text in a block, and + // the span holding it is its own editable inside the document. + await open(page, "
\nSum\n\nbody\n\n
\n"); + + await page.locator(".prose [data-toggle-summary]").click(); + await expect(page.locator(".prose [data-toggle-summary]")).toBeFocused(); + + await runFromMenu(page, REWRITE); + + await expect(toast(page)).toContainText("toggle"); + await expect.poll(() => commands(page)).toEqual(["writing_available"]); +}); + +test("a caret with nothing selected is refused", async ({ page }) => { + await open(page, "hello there\n"); + + await page.locator(".prose p").click(); + await putCaret(page.locator(".prose p"), 3); + await runFromMenu(page, REWRITE); + + await expect(toast(page)).toContainText("Select the text"); + await expect.poll(() => commands(page)).toEqual(["writing_available"]); +}); + +test("a Mac with no Writing Tools menu says so and asks for nothing", async ({ page }) => { + await open(page, "just a plain sentence here\n", { unavailable: true }); + + await selectFrom(page.locator(".prose p"), 0, 4); + await runFromMenu(page, REWRITE); + + await expect(toast(page)).toContainText("Apple Intelligence"); + await expect.poll(() => commands(page)).toEqual(["writing_available"]); +}); + +test("a .txt file has no markdown to lose, so its selection goes straight through", async ({ + page, +}) => { + await open(page, "some plain notes\n", { path: NOTES }); + + const field = page.locator("textarea.plain-text"); + await field.click(); + await field.press("Meta+a"); + expect( + await field.evaluate((e: HTMLTextAreaElement) => e.selectionEnd - e.selectionStart), + ).toBeGreaterThan(0); + + await runFromMenu(page, REWRITE); + + await expect.poll(() => commands(page)).toEqual(["writing_available", "writing_run"]); + await expect(toast(page)).toHaveCount(0); +}); + +test("the palette says which gesture to use, rather than rewriting a caret it moved itself", async ({ + page, +}) => { + // The palette runs its row and then closes on to ``, so by the time the command reaches + // src/editor/writing.ts the document holds neither the keyboard nor the selection: measured here + // rather than assumed, because the tempting fix, focusing the editor back, is what destroys the + // selection outright. prosemirror-view takes the collapsed one the panel left behind as the + // document's own, and nothing brings the user's back afterwards. So this path says so and stops. + await open(page, "just a plain sentence here\n"); + + await selectFrom(page.locator(".prose p"), 0, 4); + await runFromPalette(page, "Rewrite with Writing Tools"); + + await expect(toast(page)).toContainText("holds the keyboard"); + await expect.poll(() => commands(page)).toEqual(["writing_available"]); +}); + +test("running the tool writes nothing by itself", async ({ page }) => { + // The system's rewrite is an edit and dirties the buffer like any other. Asking for one must not. + const source = "# Title\n\none wrapped\nline here\n"; + await open(page, source); + + await selectFrom(page.locator(".prose p"), 0, 3); + await runFromMenu(page, REWRITE); + await expect.poll(() => commands(page)).toEqual(["writing_available", "writing_run"]); + await page.waitForTimeout(SAVED * 2); + + expect(await disk(page)).toBe(source); +});