├── annimate_desktop
├── .nvmrc
├── .gitignore
├── .prettierignore
├── src-tauri
│ ├── .gitignore
│ ├── build.rs
│ ├── icons
│ │ ├── 32x32.png
│ │ ├── icon.icns
│ │ ├── icon.ico
│ │ ├── icon.png
│ │ ├── 128x128.png
│ │ ├── 128x128@2x.png
│ │ ├── StoreLogo.png
│ │ ├── Square30x30Logo.png
│ │ ├── Square44x44Logo.png
│ │ ├── Square71x71Logo.png
│ │ ├── Square89x89Logo.png
│ │ ├── Square107x107Logo.png
│ │ ├── Square142x142Logo.png
│ │ ├── Square150x150Logo.png
│ │ ├── Square284x284Logo.png
│ │ └── Square310x310Logo.png
│ ├── nsis-media
│ │ └── header.bmp
│ ├── capabilities
│ │ └── default.json
│ ├── src
│ │ ├── error.rs
│ │ ├── state.rs
│ │ └── preload.rs
│ ├── Cargo.toml
│ ├── release.toml
│ └── tauri.conf.json
├── .prettierrc.json
├── src
│ ├── setup-tests.ts
│ ├── vite-env.d.ts
│ ├── lib
│ │ ├── __mocks__
│ │ │ ├── assert-type.ts
│ │ │ └── mock-release-notes.md
│ │ ├── urls.ts
│ │ ├── query-node-utils.ts
│ │ ├── utils.ts
│ │ └── query-node-utils.spec.ts
│ ├── global.ts
│ ├── components
│ │ ├── main-page
│ │ │ ├── columns
│ │ │ │ ├── utils.ts
│ │ │ │ ├── props.ts
│ │ │ │ ├── utils.spec.ts
│ │ │ │ ├── layout.tsx
│ │ │ │ ├── anno-corpus-column.tsx
│ │ │ │ ├── anno-document-column.tsx
│ │ │ │ ├── query-nodes-display.tsx
│ │ │ │ ├── anno-select.tsx
│ │ │ │ └── anno-match-column.tsx
│ │ │ ├── export-section.tsx
│ │ │ ├── export-format-select.tsx
│ │ │ └── main-page.tsx
│ │ ├── store-provider.tsx
│ │ ├── ui
│ │ │ ├── custom
│ │ │ │ ├── spinner.tsx
│ │ │ │ ├── select-list.tsx
│ │ │ │ └── auto-scroller.ts
│ │ │ ├── collapsible.tsx
│ │ │ ├── label.tsx
│ │ │ ├── separator.tsx
│ │ │ ├── progress.tsx
│ │ │ ├── textarea.tsx
│ │ │ ├── toaster.tsx
│ │ │ ├── input.tsx
│ │ │ ├── checkbox.tsx
│ │ │ ├── radio-group.tsx
│ │ │ ├── badge.tsx
│ │ │ ├── tooltip.tsx
│ │ │ ├── alert.tsx
│ │ │ ├── tabs.tsx
│ │ │ ├── card.tsx
│ │ │ ├── button.tsx
│ │ │ ├── resizable.tsx
│ │ │ └── scroll-area.tsx
│ │ ├── dialogs
│ │ │ ├── use-dialog-state.ts
│ │ │ ├── delete-corpus-dialog.tsx
│ │ │ └── corpus-set-dialog.tsx
│ │ ├── error-alert.tsx
│ │ ├── error-boundary.tsx
│ │ ├── app.tsx
│ │ ├── manage-page
│ │ │ ├── manage-page.tsx
│ │ │ ├── corpora-section.tsx
│ │ │ ├── advanced-section.tsx
│ │ │ └── corpora-in-set-list.tsx
│ │ └── update-app-trigger.tsx
│ ├── main.tsx
│ └── assets
│ │ ├── annimate-logo.svg
│ │ └── github-mark.svg
├── pnpm-workspace.yaml
├── tsconfig.node.json
├── index.html
├── components.json
├── tsconfig.json
├── vite.config.ts
├── eslint.config.mjs
└── package.json
├── .tokeignore
├── release.json
├── package.json
├── .vscode
└── extensions.json
├── pages
├── img
│ ├── annimate-logo.png
│ └── github-mark.svg
└── index.html
├── docs
├── readme
│ ├── images
│ │ └── screenshot.png
│ └── documents
│ │ └── 2025-ids-methodenmesse-poster.pdf
└── user-guide
│ ├── src
│ ├── img
│ │ ├── export-run.png
│ │ ├── macos-home.png
│ │ ├── import-menu.png
│ │ ├── macos-update.png
│ │ ├── manage-back.png
│ │ ├── update-error.png
│ │ ├── annimate-logo.png
│ │ ├── column-number.png
│ │ ├── export-columns.png
│ │ ├── export-finished.png
│ │ ├── export-format.png
│ │ ├── import-continue.png
│ │ ├── import-dialog.png
│ │ ├── import-manage.png
│ │ ├── macos-archive.png
│ │ ├── macos-damaged.png
│ │ ├── macos-extracted.png
│ │ ├── macos-terminal.png
│ │ ├── projects-load.png
│ │ ├── projects-save.png
│ │ ├── export-add-column.png
│ │ ├── export-query-meta.png
│ │ ├── import-add-to-set.png
│ │ ├── projects-partial.png
│ │ ├── export-missing-info.png
│ │ ├── export-query-invalid.png
│ │ ├── export-query-partof.png
│ │ ├── export-query-valid.png
│ │ ├── macos-applications.png
│ │ ├── manage-delete-corpus.png
│ │ ├── projects-load-dialog.png
│ │ ├── projects-save-dialog.png
│ │ ├── column-corpus-metadata.png
│ │ ├── export-select-corpora.png
│ │ ├── macos-terminal-button.png
│ │ ├── manage-add-corpus-set.png
│ │ ├── column-document-metadata.png
│ │ ├── column-match-annotation.png
│ │ ├── column-match-in-context.png
│ │ ├── manage-add-corpus-to-set.png
│ │ ├── manage-delete-corpus-set.png
│ │ ├── manage-remove-corpus-from-set.png
│ │ ├── arrow-left.svg
│ │ ├── pencil.svg
│ │ ├── trash-2.svg
│ │ ├── grip-vertical.svg
│ │ └── settings.svg
│ ├── SUMMARY.md
│ ├── columns
│ │ ├── number.md
│ │ └── metadata.md
│ └── introduction.md
│ ├── book.toml
│ ├── README.md
│ └── rea-prenominal-genitive.anmt
├── annimate_core
├── tests
│ ├── data
│ │ ├── empty_graphml.zip
│ │ ├── pcc2_v7_relANNIS.zip
│ │ ├── subtok.demo_graphml.zip
│ │ ├── subtok.demo2_relANNIS.zip
│ │ ├── subtok.demo3_relANNIS.zip
│ │ ├── subtok.demo4_relANNIS.zip
│ │ ├── subtok.demo_relANNIS.zip
│ │ ├── nocoverage.demo_graphml.zip
│ │ ├── subtok.demo_renamed_graphml.zip
│ │ ├── nondefaultsegmentation.demo_graphml.zip
│ │ └── README.md
│ ├── snapshots
│ │ ├── segmentations__pcc2.snap
│ │ ├── segmentations__subtok.snap
│ │ ├── segmentations__subtok_renamed.snap
│ │ ├── export_matches__empty.snap
│ │ ├── segmentations__nondefaultsegmentation.snap
│ │ ├── metadata__11_delete_corpus_set_with_corpora.snap
│ │ ├── project__default.snap
│ │ ├── project__with_export_format_xlsx.snap
│ │ ├── metadata__00-default.snap
│ │ ├── project__with_aql_query.snap
│ │ ├── project__with_query_language_aql_quirks_v3.snap
│ │ ├── project__with_corpus_set.snap
│ │ ├── project__with_aql_query_complex.snap
│ │ ├── project__with_one_corpus_name.snap
│ │ ├── metadata__02_toggle1.snap
│ │ ├── project__with_two_corpus_names.snap
│ │ ├── metadata__11_delete_corpus_set_only.snap
│ │ ├── export_matches__nocoverage.snap
│ │ ├── metadata__01_initial.snap
│ │ ├── metadata__03_toggle2.snap
│ │ ├── metadata__06_add_corpora_to_set_new1.snap
│ │ ├── metadata__04_add_corpora_to_set_existing1.snap
│ │ ├── metadata__05_add_corpora_to_set_existing2.snap
│ │ ├── metadata__10_delete_corpus.snap
│ │ ├── import__import-2.snap
│ │ ├── project__with_export_columns_with_segmentation.snap
│ │ ├── project__with_export_columns_with_asymmetric_context.snap
│ │ ├── export_matches__subtok_varying_number_of_match_nodes_with_explicit_primary_node_indices.snap
│ │ ├── export_matches__subtok_optional_nodes.snap
│ │ ├── metadata__07_add_corpora_to_set_new2.snap
│ │ ├── export_matches__nondefaultsegmentation.snap
│ │ ├── metadata__08_create_corpus_set.snap
│ │ ├── project__with_export_columns_with_node_indices.snap
│ │ ├── metadata__09_rename_corpus_set.snap
│ │ ├── export_matches__subtok_annos.snap
│ │ ├── export_matches__subtok_renamed.snap
│ │ ├── project__with_export_columns_with_annos.snap
│ │ ├── project__with_export_columns_default.snap
│ │ ├── exportable_anno_keys__empty.snap
│ │ ├── export_matches__subtok_multiple_corpora.snap
│ │ ├── export_matches__subtok_segmentation_norm.snap
│ │ ├── export_matches__subtok_segmentation_tokens.snap
│ │ ├── export_matches__subtok_segmentation_diplomatic.snap
│ │ ├── export_matches__subtok_gap.snap
│ │ ├── export_matches__subtok_varying_number_of_match_nodes.snap
│ │ ├── project__full.snap
│ │ └── import__import.snap
│ ├── validation.rs
│ ├── segmentations.rs
│ └── exportable_anno_keys.rs
├── build.rs
├── src
│ ├── version.rs
│ └── format
│ │ ├── csv.rs
│ │ └── mod.rs
└── Cargo.toml
├── .gitignore
├── rustfmt.toml
├── .github
├── workflows
│ ├── audit-cargo.yml
│ ├── fmt-check-cargo.yml
│ ├── ci.yml
│ ├── audit-pnpm.yml
│ ├── check-cargo.yml
│ ├── test-pnpm.yml
│ ├── test-cargo.yml
│ ├── fmt-check-pnpm.yml
│ ├── check-pnpm.yml
│ ├── docs.yml
│ ├── udeps-cargo.yml
│ └── build-macos.yml
└── ISSUE_TEMPLATE
│ ├── config.yml
│ ├── 2-docs.yml
│ └── 1-bug.yml
├── Cargo.toml
└── renovate.json
/annimate_desktop/.nvmrc:
--------------------------------------------------------------------------------
1 | 24.12.0
--------------------------------------------------------------------------------
/.tokeignore:
--------------------------------------------------------------------------------
1 | docs/**/*.css
2 | pnpm-lock.yaml
--------------------------------------------------------------------------------
/annimate_desktop/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
--------------------------------------------------------------------------------
/release.json:
--------------------------------------------------------------------------------
1 | {
2 | "versionBump": "none"
3 | }
4 |
--------------------------------------------------------------------------------
/annimate_desktop/.prettierignore:
--------------------------------------------------------------------------------
1 | **/gen/**
2 | pnpm-lock.yaml
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/.gitignore:
--------------------------------------------------------------------------------
1 | # Tauri
2 | /gen/schemas
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "packageManager": "pnpm@10.22.0"
3 | }
4 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"]
3 | }
4 |
--------------------------------------------------------------------------------
/pages/img/annimate-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/pages/img/annimate-logo.png
--------------------------------------------------------------------------------
/docs/readme/images/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/readme/images/screenshot.png
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/build.rs:
--------------------------------------------------------------------------------
1 | //! Build script for `annimate_desktop`.
2 |
3 | fn main() {
4 | tauri_build::build();
5 | }
6 |
--------------------------------------------------------------------------------
/docs/user-guide/src/img/export-run.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/export-run.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/macos-home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/macos-home.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/import-menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/import-menu.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/macos-update.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/macos-update.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/manage-back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/manage-back.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/update-error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/update-error.png
--------------------------------------------------------------------------------
/annimate_core/tests/data/empty_graphml.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_core/tests/data/empty_graphml.zip
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/icons/32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_desktop/src-tauri/icons/32x32.png
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/icons/icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_desktop/src-tauri/icons/icon.icns
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/icons/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_desktop/src-tauri/icons/icon.ico
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/icons/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_desktop/src-tauri/icons/icon.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/annimate-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/annimate-logo.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/column-number.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/column-number.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/export-columns.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/export-columns.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/export-finished.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/export-finished.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/export-format.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/export-format.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/import-continue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/import-continue.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/import-dialog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/import-dialog.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/import-manage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/import-manage.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/macos-archive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/macos-archive.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/macos-damaged.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/macos-damaged.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/macos-extracted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/macos-extracted.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/macos-terminal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/macos-terminal.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/projects-load.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/projects-load.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/projects-save.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/projects-save.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Editor directories and files
2 | .vscode/*
3 | !.vscode/extensions.json
4 |
5 | # Cargo
6 | /target/
7 |
8 | # mdbook
9 | /pages/user-guide
--------------------------------------------------------------------------------
/annimate_core/tests/data/pcc2_v7_relANNIS.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_core/tests/data/pcc2_v7_relANNIS.zip
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/icons/128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_desktop/src-tauri/icons/128x128.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/export-add-column.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/export-add-column.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/export-query-meta.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/export-query-meta.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/import-add-to-set.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/import-add-to-set.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/projects-partial.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/projects-partial.png
--------------------------------------------------------------------------------
/annimate_core/tests/data/subtok.demo_graphml.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_core/tests/data/subtok.demo_graphml.zip
--------------------------------------------------------------------------------
/annimate_desktop/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": ["prettier-plugin-tailwindcss"],
3 | "singleQuote": true,
4 | "tailwindFunctions": ["cn"]
5 | }
6 |
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/icons/128x128@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_desktop/src-tauri/icons/128x128@2x.png
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/icons/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_desktop/src-tauri/icons/StoreLogo.png
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/nsis-media/header.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_desktop/src-tauri/nsis-media/header.bmp
--------------------------------------------------------------------------------
/docs/user-guide/src/img/export-missing-info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/export-missing-info.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/export-query-invalid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/export-query-invalid.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/export-query-partof.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/export-query-partof.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/export-query-valid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/export-query-valid.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/macos-applications.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/macos-applications.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/manage-delete-corpus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/manage-delete-corpus.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/projects-load-dialog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/projects-load-dialog.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/projects-save-dialog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/projects-save-dialog.png
--------------------------------------------------------------------------------
/annimate_core/tests/data/subtok.demo2_relANNIS.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_core/tests/data/subtok.demo2_relANNIS.zip
--------------------------------------------------------------------------------
/annimate_core/tests/data/subtok.demo3_relANNIS.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_core/tests/data/subtok.demo3_relANNIS.zip
--------------------------------------------------------------------------------
/annimate_core/tests/data/subtok.demo4_relANNIS.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_core/tests/data/subtok.demo4_relANNIS.zip
--------------------------------------------------------------------------------
/annimate_core/tests/data/subtok.demo_relANNIS.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_core/tests/data/subtok.demo_relANNIS.zip
--------------------------------------------------------------------------------
/docs/user-guide/src/img/column-corpus-metadata.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/column-corpus-metadata.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/export-select-corpora.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/export-select-corpora.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/macos-terminal-button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/macos-terminal-button.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/manage-add-corpus-set.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/manage-add-corpus-set.png
--------------------------------------------------------------------------------
/annimate_core/tests/data/nocoverage.demo_graphml.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_core/tests/data/nocoverage.demo_graphml.zip
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/icons/Square30x30Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_desktop/src-tauri/icons/Square30x30Logo.png
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/icons/Square44x44Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_desktop/src-tauri/icons/Square44x44Logo.png
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/icons/Square71x71Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_desktop/src-tauri/icons/Square71x71Logo.png
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/icons/Square89x89Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_desktop/src-tauri/icons/Square89x89Logo.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/column-document-metadata.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/column-document-metadata.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/column-match-annotation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/column-match-annotation.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/column-match-in-context.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/column-match-in-context.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/manage-add-corpus-to-set.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/manage-add-corpus-to-set.png
--------------------------------------------------------------------------------
/docs/user-guide/src/img/manage-delete-corpus-set.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/manage-delete-corpus-set.png
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/icons/Square107x107Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_desktop/src-tauri/icons/Square107x107Logo.png
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/icons/Square142x142Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_desktop/src-tauri/icons/Square142x142Logo.png
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/icons/Square150x150Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_desktop/src-tauri/icons/Square150x150Logo.png
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/icons/Square284x284Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_desktop/src-tauri/icons/Square284x284Logo.png
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/icons/Square310x310Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_desktop/src-tauri/icons/Square310x310Logo.png
--------------------------------------------------------------------------------
/docs/readme/documents/2025-ids-methodenmesse-poster.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/readme/documents/2025-ids-methodenmesse-poster.pdf
--------------------------------------------------------------------------------
/annimate_core/tests/data/subtok.demo_renamed_graphml.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_core/tests/data/subtok.demo_renamed_graphml.zip
--------------------------------------------------------------------------------
/docs/user-guide/src/img/manage-remove-corpus-from-set.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/docs/user-guide/src/img/manage-remove-corpus-from-set.png
--------------------------------------------------------------------------------
/annimate_desktop/src/setup-tests.ts:
--------------------------------------------------------------------------------
1 | import { cleanup } from '@testing-library/react';
2 | import { afterEach } from 'vitest';
3 |
4 | afterEach(() => {
5 | cleanup();
6 | });
7 |
--------------------------------------------------------------------------------
/annimate_core/tests/data/nondefaultsegmentation.demo_graphml.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matthias-stemmler/annimate/HEAD/annimate_core/tests/data/nondefaultsegmentation.demo_graphml.zip
--------------------------------------------------------------------------------
/annimate_desktop/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | interface ImportMetaEnv {
5 | readonly VITE_MOCK?: string;
6 | }
7 |
--------------------------------------------------------------------------------
/annimate_desktop/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | autoInstallPeers: false
2 | minimumReleaseAge: 1440
3 | onlyBuiltDependencies:
4 | - '@tailwindcss/oxide'
5 | - esbuild
6 | strictDepBuilds: true
7 | verifyDepsBeforeRun: prompt
8 |
--------------------------------------------------------------------------------
/rustfmt.toml:
--------------------------------------------------------------------------------
1 | # unstable
2 | comment_width = 120
3 | doc_comment_code_block_width = 120
4 | format_code_in_doc_comments = true
5 | group_imports = "StdExternalCrate"
6 | imports_granularity = "Module"
7 | wrap_comments = true
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/segmentations__pcc2.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/segmentations.rs
3 | info:
4 | corpus_paths:
5 | - pcc2_v7_relANNIS.zip
6 | corpus_names:
7 | - pcc2
8 | ---
9 | []
10 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/segmentations__subtok.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/segmentations.rs
3 | info:
4 | corpus_paths:
5 | - subtok.demo_relANNIS.zip
6 | corpus_names:
7 | - subtok.demo
8 | ---
9 | [
10 | "diplomatic",
11 | "norm",
12 | ]
13 |
--------------------------------------------------------------------------------
/annimate_desktop/src/lib/__mocks__/assert-type.ts:
--------------------------------------------------------------------------------
1 | // This asserts that the mocked API module has the same interface as the real API module
2 |
3 | import * as api from '../api';
4 | import * as apiMock from './api';
5 |
6 | apiMock satisfies typeof api;
7 | api satisfies typeof apiMock;
8 |
--------------------------------------------------------------------------------
/annimate_desktop/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true
8 | },
9 | "include": ["vite.config.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/docs/user-guide/src/img/arrow-left.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/annimate_desktop/src/global.ts:
--------------------------------------------------------------------------------
1 | export {};
2 |
3 | declare global {
4 | interface Window {
5 | __ANNIMATE__: {
6 | updateEnabled: boolean;
7 | versionInfo: {
8 | annimateVersion: string;
9 | graphannisVersion: string;
10 | };
11 | };
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/segmentations__subtok_renamed.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/segmentations.rs
3 | info:
4 | corpus_paths:
5 | - subtok.demo_renamed_graphml.zip
6 | corpus_names:
7 | - subtok.demo_renamed
8 | ---
9 | [
10 | "diplomatic",
11 | "norm",
12 | ]
13 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/export_matches__empty.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/export_matches.rs
3 | info:
4 | corpus_paths:
5 | - empty_graphml.zip
6 | corpus_names:
7 | - empty
8 | aql_query: doc
9 | query_language: AQL
10 | export_columns:
11 | - Number
12 | ---
13 | Number
14 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/segmentations__nondefaultsegmentation.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/segmentations.rs
3 | info:
4 | corpus_paths:
5 | - nondefaultsegmentation.demo_graphml.zip
6 | corpus_names:
7 | - nondefaultsegmentation.demo
8 | ---
9 | [
10 | "diplomatic",
11 | "norm",
12 | ]
13 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/metadata__11_delete_corpus_set_with_corpora.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/metadata.rs
3 | ---
4 | Corpora {
5 | corpora: [],
6 | sets: [
7 | "Test set 3",
8 | ],
9 | }
10 |
11 | --
12 |
13 | metadata-version = 1
14 |
15 | [corpus-sets."Test set 3"]
16 | corpus-names = []
17 |
--------------------------------------------------------------------------------
/annimate_desktop/src/components/main-page/columns/utils.ts:
--------------------------------------------------------------------------------
1 | import { AnnoKey } from '@/lib/api-types';
2 |
3 | export const annoKeyToValue = (annoKey: AnnoKey): string =>
4 | `${annoKey.ns}:${annoKey.name}`;
5 |
6 | export const valueToAnnoKey = (value: string): AnnoKey => {
7 | const [ns, name] = value.split(':');
8 | return { ns, name };
9 | };
10 |
--------------------------------------------------------------------------------
/annimate_desktop/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Annimate
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/annimate_desktop/src/components/store-provider.tsx:
--------------------------------------------------------------------------------
1 | import { StoreContext, createStoreForContext } from '@/lib/store';
2 | import { FC, PropsWithChildren, useState } from 'react';
3 |
4 | export const StoreProvider: FC = ({ children }) => {
5 | const [store] = useState(createStoreForContext);
6 | return ;
7 | };
8 |
--------------------------------------------------------------------------------
/annimate_desktop/src/components/ui/custom/spinner.tsx:
--------------------------------------------------------------------------------
1 | import { cn } from '@/lib/utils';
2 | import { LoaderIcon } from 'lucide-react';
3 | import { FC } from 'react';
4 |
5 | export type SpinnerProps = {
6 | className?: string;
7 | };
8 |
9 | export const Spinner: FC = ({ className }) => (
10 |
11 | );
12 |
--------------------------------------------------------------------------------
/annimate_desktop/src/components/ui/collapsible.tsx:
--------------------------------------------------------------------------------
1 | import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
2 |
3 | const Collapsible = CollapsiblePrimitive.Root;
4 |
5 | const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger;
6 |
7 | const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent;
8 |
9 | export { Collapsible, CollapsibleTrigger, CollapsibleContent };
10 |
--------------------------------------------------------------------------------
/docs/user-guide/src/img/pencil.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/annimate_desktop/src/lib/urls.ts:
--------------------------------------------------------------------------------
1 | export const URL_ANNIMATE = 'https://github.com/matthias-stemmler/annimate';
2 |
3 | export const URL_ANNIMATE_USER_GUIDE =
4 | 'https://matthias-stemmler.github.io/annimate/user-guide/';
5 |
6 | export const URL_AQL_OPERATORS =
7 | 'https://korpling.github.io/ANNIS/4.0/user-guide/aql/operators.html';
8 |
9 | export const URL_GRAPHANNIS = 'https://corpus-tools.org/graphannis/';
10 |
--------------------------------------------------------------------------------
/docs/user-guide/book.toml:
--------------------------------------------------------------------------------
1 | [book]
2 | authors = ["Matthias Stemmler"]
3 | description = "User Guide for the Annimate corpus export tool"
4 | language = "en"
5 | src = "src"
6 | title = "Annimate User Guide"
7 |
8 | [build]
9 | build-dir = "../../pages/user-guide"
10 | create-missing = false
11 |
12 | [output.html]
13 | git-repository-url = "https://github.com/matthias-stemmler/annimate"
14 | smart-punctuation = true
15 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/project__default.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/project.rs
3 | info:
4 | corpus_set: ~
5 | corpus_names: []
6 | aql_query: ""
7 | query_language: AQL
8 | export_columns: []
9 | export_format: Csv
10 | ---
11 | # Annimate project file
12 | # https://github.com/matthias-stemmler/annimate
13 |
14 | format-version = 1
15 |
16 | [project]
17 | query-language = "aql"
18 | export-format = "csv"
19 |
--------------------------------------------------------------------------------
/annimate_desktop/components.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://ui.shadcn.com/schema.json",
3 | "style": "default",
4 | "rsc": false,
5 | "tsx": true,
6 | "tailwind": {
7 | "config": "",
8 | "css": "src/index.css",
9 | "baseColor": "slate",
10 | "cssVariables": true,
11 | "prefix": ""
12 | },
13 | "aliases": {
14 | "components": "@/components",
15 | "utils": "@/lib/utils"
16 | },
17 | "iconLibrary": "lucide"
18 | }
19 |
--------------------------------------------------------------------------------
/docs/user-guide/src/img/trash-2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/project__with_export_format_xlsx.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/project.rs
3 | info:
4 | corpus_set: ~
5 | corpus_names: []
6 | aql_query: ""
7 | query_language: AQL
8 | export_columns: []
9 | export_format: Xlsx
10 | ---
11 | # Annimate project file
12 | # https://github.com/matthias-stemmler/annimate
13 |
14 | format-version = 1
15 |
16 | [project]
17 | query-language = "aql"
18 | export-format = "xlsx"
19 |
--------------------------------------------------------------------------------
/docs/user-guide/src/img/grip-vertical.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/annimate_desktop/src/components/main-page/columns/props.ts:
--------------------------------------------------------------------------------
1 | import { AutoScroller } from '@/components/ui/custom/auto-scroller';
2 | import { ExportColumnData, ExportColumnType } from '@/lib/api-types';
3 | import { ExportColumnUpdate } from '@/lib/store';
4 |
5 | export type ColumnProps = {
6 | autoScroller?: AutoScroller;
7 | data: ExportColumnData;
8 | onChange: (payload: (ExportColumnUpdate & { type: T })['payload']) => void;
9 | };
10 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/metadata__00-default.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/metadata.rs
3 | ---
4 | Corpora {
5 | corpora: [
6 | Corpus {
7 | name: "subtok.demo",
8 | included_in_sets: [],
9 | },
10 | Corpus {
11 | name: "subtok.demo2",
12 | included_in_sets: [],
13 | },
14 | ],
15 | sets: [],
16 | }
17 |
18 | --
19 |
20 | metadata-version = 1
21 |
22 | [corpus-sets]
23 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/project__with_aql_query.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/project.rs
3 | info:
4 | corpus_set: ~
5 | corpus_names: []
6 | aql_query: Test AQL query
7 | query_language: AQL
8 | export_columns: []
9 | export_format: Csv
10 | ---
11 | # Annimate project file
12 | # https://github.com/matthias-stemmler/annimate
13 |
14 | format-version = 1
15 |
16 | [project]
17 | query = "Test AQL query"
18 | query-language = "aql"
19 | export-format = "csv"
20 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/project__with_query_language_aql_quirks_v3.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/project.rs
3 | info:
4 | corpus_set: ~
5 | corpus_names: []
6 | aql_query: ""
7 | query_language: AQLQuirksV3
8 | export_columns: []
9 | export_format: Csv
10 | ---
11 | # Annimate project file
12 | # https://github.com/matthias-stemmler/annimate
13 |
14 | format-version = 1
15 |
16 | [project]
17 | query-language = "aql-compatibility"
18 | export-format = "csv"
19 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/project__with_corpus_set.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/project.rs
3 | info:
4 | corpus_set: Test Corpus Set
5 | corpus_names: []
6 | aql_query: ""
7 | query_language: AQL
8 | export_columns: []
9 | export_format: Csv
10 | ---
11 | # Annimate project file
12 | # https://github.com/matthias-stemmler/annimate
13 |
14 | format-version = 1
15 |
16 | [project]
17 | corpus-set = "Test Corpus Set"
18 | query-language = "aql"
19 | export-format = "csv"
20 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/project__with_aql_query_complex.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/project.rs
3 | info:
4 | corpus_set: ~
5 | corpus_names: []
6 | aql_query: "a'''\"\nb"
7 | query_language: AQL
8 | export_columns: []
9 | export_format: Csv
10 | ---
11 | # Annimate project file
12 | # https://github.com/matthias-stemmler/annimate
13 |
14 | format-version = 1
15 |
16 | [project]
17 | query = """
18 | a'''"
19 | b"""
20 | query-language = "aql"
21 | export-format = "csv"
22 |
--------------------------------------------------------------------------------
/docs/user-guide/src/SUMMARY.md:
--------------------------------------------------------------------------------
1 | [Introduction](introduction.md)
2 |
3 | - [Installation](installation.md)
4 | - [Importing Corpus Data](import.md)
5 | - [Exporting Query Results](export.md)
6 | - [Number](columns/number.md)
7 | - [Match in context](columns/match-in-context.md)
8 | - [Match annotation](columns/match-annotation.md)
9 | - [Corpus/document metadata](columns/metadata.md)
10 | - [Working With Projects](projects.md)
11 | - [Troubleshooting](troubleshooting.md)
12 | - [Links](links.md)
13 |
--------------------------------------------------------------------------------
/.github/workflows/audit-cargo.yml:
--------------------------------------------------------------------------------
1 | name: Audit (Cargo)
2 |
3 | on:
4 | push:
5 | paths:
6 | - '**/Cargo.lock'
7 | schedule:
8 | - cron: "0 0 * * *"
9 | workflow_dispatch:
10 |
11 | jobs:
12 | audit:
13 | name: Audit
14 | runs-on: ubuntu-latest
15 |
16 | steps:
17 | - name: Checkout
18 | uses: actions/checkout@v6
19 |
20 | - name: Run audit
21 | uses: rustsec/audit-check@v2.0.0
22 | with:
23 | token: ${{ secrets.GITHUB_TOKEN }}
24 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/project__with_one_corpus_name.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/project.rs
3 | info:
4 | corpus_set: ~
5 | corpus_names:
6 | - Test Corpus 1
7 | aql_query: ""
8 | query_language: AQL
9 | export_columns: []
10 | export_format: Csv
11 | ---
12 | # Annimate project file
13 | # https://github.com/matthias-stemmler/annimate
14 |
15 | format-version = 1
16 |
17 | [project]
18 | corpora = ["Test Corpus 1"]
19 | query-language = "aql"
20 | export-format = "csv"
21 |
--------------------------------------------------------------------------------
/docs/user-guide/README.md:
--------------------------------------------------------------------------------
1 | # Annimate User Guide Authoring
2 |
3 | ## Taking Screenshots
4 |
5 | - In `tauri.conf.json`, set window size to `1088x768`
6 | - In `main.rs`, comment the restoration of the window state
7 | - Configure window decorations appropriately
8 | - In KDE use `Breeze` with `Small` shadows of strength `50%`, otherwise keep the defaults
9 | - Start the application and navigate to the state of which you want to take a screenshot
10 | - Take a screenshot of the window with Spectacle
11 | - Add annotations as needed
12 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/metadata__02_toggle1.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/metadata.rs
3 | ---
4 | Corpora {
5 | corpora: [
6 | Corpus {
7 | name: "subtok.demo",
8 | included_in_sets: [],
9 | },
10 | Corpus {
11 | name: "subtok.demo2",
12 | included_in_sets: [],
13 | },
14 | ],
15 | sets: [
16 | "Test set",
17 | ],
18 | }
19 |
20 | --
21 |
22 | metadata-version = 1
23 |
24 | [corpus-sets."Test set"]
25 | corpus-names = []
26 |
--------------------------------------------------------------------------------
/annimate_desktop/src/main.tsx:
--------------------------------------------------------------------------------
1 | import { App } from '@/components/app';
2 | import '@/index.css';
3 | import { StrictMode } from 'react';
4 | import ReactDOM from 'react-dom/client';
5 |
6 | if (import.meta.env.PROD) {
7 | document.addEventListener('contextmenu', (event) => {
8 | if (!(event.target instanceof HTMLTextAreaElement)) {
9 | event.preventDefault();
10 | }
11 | });
12 | }
13 |
14 | ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
15 |
16 |
17 | ,
18 | );
19 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/project__with_two_corpus_names.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/project.rs
3 | info:
4 | corpus_set: ~
5 | corpus_names:
6 | - Test Corpus 1
7 | - Test Corpus 2
8 | aql_query: ""
9 | query_language: AQL
10 | export_columns: []
11 | export_format: Csv
12 | ---
13 | # Annimate project file
14 | # https://github.com/matthias-stemmler/annimate
15 |
16 | format-version = 1
17 |
18 | [project]
19 | corpora = [
20 | "Test Corpus 1",
21 | "Test Corpus 2",
22 | ]
23 | query-language = "aql"
24 | export-format = "csv"
25 |
--------------------------------------------------------------------------------
/annimate_desktop/src/lib/__mocks__/mock-release-notes.md:
--------------------------------------------------------------------------------
1 | ## [1.1.4] - 2024-10-01
2 |
3 | ### Added
4 |
5 | - New feature that will prove to be very useful once you work a bit with it so you get used to it
6 | - Another new feature
7 | - Yet another new feature
8 |
9 | ### Changed
10 |
11 | - Improved existing feature
12 | - Improved another existing feature
13 | - Improved yet another existing feature
14 |
15 | ### Fixed
16 |
17 | - Some bug
18 | - Another bug
19 | - Yet another bug
20 |
21 | [1.1.4]: https://github.com/matthias-stemmler/annimate/compare/v1.1.3...v1.1.4
22 |
--------------------------------------------------------------------------------
/annimate_desktop/src/components/main-page/columns/utils.spec.ts:
--------------------------------------------------------------------------------
1 | import {
2 | annoKeyToValue,
3 | valueToAnnoKey,
4 | } from '@/components/main-page/columns/utils';
5 | import { describe, expect, test } from 'vitest';
6 |
7 | describe('utils', () => {
8 | test('annoKeyToValue', () => {
9 | const value = annoKeyToValue({ ns: 'ns', name: 'name' });
10 |
11 | expect(value).toEqual('ns:name');
12 | });
13 |
14 | test('valueToAnnoKey', () => {
15 | const value = valueToAnnoKey('ns:name');
16 |
17 | expect(value).toEqual({ ns: 'ns', name: 'name' });
18 | });
19 | });
20 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/metadata__11_delete_corpus_set_only.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/metadata.rs
3 | ---
4 | Corpora {
5 | corpora: [
6 | Corpus {
7 | name: "subtok.demo",
8 | included_in_sets: [
9 | "Test set",
10 | ],
11 | },
12 | ],
13 | sets: [
14 | "Test set",
15 | "Test set 3",
16 | ],
17 | }
18 |
19 | --
20 |
21 | metadata-version = 1
22 |
23 | [corpus-sets."Test set"]
24 | corpus-names = ["subtok.demo"]
25 |
26 | [corpus-sets."Test set 3"]
27 | corpus-names = []
28 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/export_matches__nocoverage.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/export_matches.rs
3 | info:
4 | corpus_paths:
5 | - nocoverage.demo_graphml.zip
6 | corpus_names:
7 | - nocoverage.demo
8 | aql_query: "tok=\"no\""
9 | query_language: AQL
10 | export_columns:
11 | - Number
12 | - Data:
13 | Text:
14 | left_context: 2
15 | right_context: 2
16 | segmentation: ~
17 | primary_node_indices: ~
18 | ---
19 | Number,Left context (tokens),Match (tokens),Right context (tokens)
20 | 1,There is,no,coverage .
21 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/metadata__01_initial.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/metadata.rs
3 | ---
4 | Corpora {
5 | corpora: [
6 | Corpus {
7 | name: "subtok.demo",
8 | included_in_sets: [
9 | "Test set",
10 | ],
11 | },
12 | Corpus {
13 | name: "subtok.demo2",
14 | included_in_sets: [],
15 | },
16 | ],
17 | sets: [
18 | "Test set",
19 | ],
20 | }
21 |
22 | --
23 |
24 | metadata-version = 1
25 |
26 | [corpus-sets."Test set"]
27 | corpus-names = ["subtok.demo"]
28 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/metadata__03_toggle2.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/metadata.rs
3 | ---
4 | Corpora {
5 | corpora: [
6 | Corpus {
7 | name: "subtok.demo",
8 | included_in_sets: [],
9 | },
10 | Corpus {
11 | name: "subtok.demo2",
12 | included_in_sets: [
13 | "Test set",
14 | ],
15 | },
16 | ],
17 | sets: [
18 | "Test set",
19 | ],
20 | }
21 |
22 | --
23 |
24 | metadata-version = 1
25 |
26 | [corpus-sets."Test set"]
27 | corpus-names = ["subtok.demo2"]
28 |
--------------------------------------------------------------------------------
/annimate_desktop/src/components/main-page/export-section.tsx:
--------------------------------------------------------------------------------
1 | import { ExportColumnList } from '@/components/main-page/export-column-list';
2 | import { ExportFormatSelect } from '@/components/main-page/export-format-select';
3 | import { ExportTrigger } from '@/components/main-page/export-trigger';
4 |
5 | export const ExportSection = () => (
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | );
15 |
--------------------------------------------------------------------------------
/annimate_desktop/src/components/main-page/columns/layout.tsx:
--------------------------------------------------------------------------------
1 | import { cn } from '@/lib/utils';
2 | import { FC, PropsWithChildren } from 'react';
3 |
4 | export const ColumnConfigGrid: FC = ({ children }) => (
5 | {children}
6 | );
7 |
8 | export type ColumnConfigItemProps = PropsWithChildren<{
9 | wide?: boolean;
10 | }>;
11 |
12 | export const ColumnConfigItem: FC = ({
13 | children,
14 | wide = false,
15 | }) => (
16 |
17 | {children}
18 |
19 | );
20 |
--------------------------------------------------------------------------------
/docs/user-guide/src/columns/number.md:
--------------------------------------------------------------------------------
1 | # Number
2 |
3 | 
4 |
5 | This produces a single column that just contains the number of each match, i.e. it contains `1` for the first match, `2` for the second match and so on.
6 |
7 | This can be useful for referring to specific matches when analyzing the exported data. When exporting to Excel, it is particularly useful because Excel's automatic row numbering counts the header row as row number 1 and the first match row as row number 2, while a "Number" column produced by Annimate starts with 1 for the first match. The number next to the last match is the total number of matches.
8 |
--------------------------------------------------------------------------------
/.github/workflows/fmt-check-cargo.yml:
--------------------------------------------------------------------------------
1 | name: Format check (Cargo)
2 |
3 | on:
4 | - workflow_call
5 | - workflow_dispatch
6 |
7 | env:
8 | RUSTFLAGS: --deny warnings
9 |
10 | jobs:
11 | fmt-check:
12 | name: Format check
13 | runs-on: ubuntu-latest
14 |
15 | steps:
16 | - name: Checkout
17 | uses: actions/checkout@v6
18 |
19 | - name: Install nightly toolchain with rustfmt
20 | uses: dtolnay/rust-toolchain@nightly
21 | with:
22 | components: rustfmt
23 |
24 | - name: Rust cache
25 | uses: swatinem/rust-cache@v2
26 |
27 | - name: Run format check
28 | run: cargo fmt --check
29 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: "\U0001F4A1 Idea"
4 | about: "Suggest a new feature to make Annimate better"
5 | url: https://github.com/matthias-stemmler/annimate/discussions/new?category=ideas
6 | - name: Start a Discussion
7 | about: "Start a discussion to share your experience with Annimate"
8 | url: https://github.com/matthias-stemmler/annimate/discussions/new/choose
9 | - name: Read the User Guide
10 | about: "Please make sure you have read the User Guide (especially the Troubleshooting section) before filing a bug report"
11 | url: https://matthias-stemmler.github.io/annimate/user-guide/
--------------------------------------------------------------------------------
/annimate_desktop/src/components/ui/label.tsx:
--------------------------------------------------------------------------------
1 | import { cn } from '@/lib/utils';
2 | import * as LabelPrimitive from '@radix-ui/react-label';
3 | import { cva, type VariantProps } from 'class-variance-authority';
4 | import { ComponentProps, FC } from 'react';
5 |
6 | const labelVariants = cva(
7 | 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',
8 | );
9 |
10 | const Label: FC<
11 | ComponentProps &
12 | VariantProps
13 | > = ({ className, ...props }) => (
14 |
15 | );
16 |
17 | export { Label };
18 |
--------------------------------------------------------------------------------
/annimate_desktop/src-tauri/capabilities/default.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "../gen/schemas/desktop-schema.json",
3 | "identifier": "default",
4 | "description": "Capability for the main window",
5 | "windows": ["main"],
6 | "permissions": [
7 | "core:default",
8 | "dialog:allow-open",
9 | "dialog:allow-save",
10 | "dialog:default",
11 | "opener:default",
12 | "process:allow-exit",
13 | "process:allow-restart",
14 | "updater:default",
15 | "window-state:default",
16 | {
17 | "identifier": "opener:allow-open-path",
18 | "allow": [
19 | {
20 | "path": "**/*"
21 | }
22 | ]
23 | }
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/annimate_core/build.rs:
--------------------------------------------------------------------------------
1 | //! Build script for `annimate_core`.
2 |
3 | use cargo_metadata::MetadataCommand;
4 |
5 | fn main() {
6 | inject_graphannis_version();
7 | }
8 |
9 | fn inject_graphannis_version() {
10 | let metadata = MetadataCommand::new()
11 | .exec()
12 | .expect("`cargo metadata` should run successfully");
13 |
14 | let graphannis_version = metadata
15 | .packages
16 | .iter()
17 | .find(|p| p.name.as_str() == "graphannis")
18 | .expect("Cargo metadata should contain `graphannis` package")
19 | .version
20 | .to_string();
21 |
22 | println!("cargo::rustc-env=GRAPHANNIS_VERSION={graphannis_version}");
23 | }
24 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/metadata__06_add_corpora_to_set_new1.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/metadata.rs
3 | ---
4 | Corpora {
5 | corpora: [
6 | Corpus {
7 | name: "subtok.demo",
8 | included_in_sets: [
9 | "Test set",
10 | ],
11 | },
12 | Corpus {
13 | name: "subtok.demo2",
14 | included_in_sets: [
15 | "Test set",
16 | ],
17 | },
18 | ],
19 | sets: [
20 | "Test set",
21 | ],
22 | }
23 |
24 | --
25 |
26 | metadata-version = 1
27 |
28 | [corpus-sets."Test set"]
29 | corpus-names = [
30 | "subtok.demo",
31 | "subtok.demo2",
32 | ]
33 |
--------------------------------------------------------------------------------
/annimate_desktop/src/components/ui/separator.tsx:
--------------------------------------------------------------------------------
1 | import { cn } from '@/lib/utils';
2 | import * as SeparatorPrimitive from '@radix-ui/react-separator';
3 | import { ComponentProps, FC } from 'react';
4 |
5 | const Separator: FC> = ({
6 | className,
7 | orientation = 'horizontal',
8 | decorative = true,
9 | ...props
10 | }) => (
11 |
21 | );
22 |
23 | export { Separator };
24 |
--------------------------------------------------------------------------------
/annimate_desktop/src/lib/query-node-utils.ts:
--------------------------------------------------------------------------------
1 | import { QueryNodeRef } from '@/lib/api-types';
2 |
3 | export const findEligibleQueryNodeRefIndex = (
4 | eligibleNodeRefs: QueryNodeRef[],
5 | nodeRef: QueryNodeRef,
6 | ): number | undefined => {
7 | const eligibleNodeRefsWithIndex = eligibleNodeRefs
8 | .map((n, i): [QueryNodeRef, number] => [n, i])
9 | .filter(([n]) => n.variables.some((v) => nodeRef.variables.includes(v)));
10 |
11 | if (eligibleNodeRefsWithIndex.length === 0) {
12 | return undefined;
13 | }
14 |
15 | const [, index] =
16 | eligibleNodeRefsWithIndex.find(([n]) => n.index === nodeRef.index) ??
17 | eligibleNodeRefsWithIndex[0];
18 |
19 | return index;
20 | };
21 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/metadata__04_add_corpora_to_set_existing1.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/metadata.rs
3 | ---
4 | Corpora {
5 | corpora: [
6 | Corpus {
7 | name: "subtok.demo",
8 | included_in_sets: [
9 | "Test set",
10 | ],
11 | },
12 | Corpus {
13 | name: "subtok.demo2",
14 | included_in_sets: [
15 | "Test set",
16 | ],
17 | },
18 | ],
19 | sets: [
20 | "Test set",
21 | ],
22 | }
23 |
24 | --
25 |
26 | metadata-version = 1
27 |
28 | [corpus-sets."Test set"]
29 | corpus-names = [
30 | "subtok.demo",
31 | "subtok.demo2",
32 | ]
33 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/metadata__05_add_corpora_to_set_existing2.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/metadata.rs
3 | ---
4 | Corpora {
5 | corpora: [
6 | Corpus {
7 | name: "subtok.demo",
8 | included_in_sets: [
9 | "Test set",
10 | ],
11 | },
12 | Corpus {
13 | name: "subtok.demo2",
14 | included_in_sets: [
15 | "Test set",
16 | ],
17 | },
18 | ],
19 | sets: [
20 | "Test set",
21 | ],
22 | }
23 |
24 | --
25 |
26 | metadata-version = 1
27 |
28 | [corpus-sets."Test set"]
29 | corpus-names = [
30 | "subtok.demo",
31 | "subtok.demo2",
32 | ]
33 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/metadata__10_delete_corpus.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/metadata.rs
3 | ---
4 | Corpora {
5 | corpora: [
6 | Corpus {
7 | name: "subtok.demo",
8 | included_in_sets: [
9 | "Test set",
10 | "Test set 2 new",
11 | ],
12 | },
13 | ],
14 | sets: [
15 | "Test set",
16 | "Test set 2 new",
17 | "Test set 3",
18 | ],
19 | }
20 |
21 | --
22 |
23 | metadata-version = 1
24 |
25 | [corpus-sets."Test set"]
26 | corpus-names = ["subtok.demo"]
27 |
28 | [corpus-sets."Test set 2 new"]
29 | corpus-names = ["subtok.demo"]
30 |
31 | [corpus-sets."Test set 3"]
32 | corpus-names = []
33 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/import__import-2.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/import.rs
3 | ---
4 | Corpora {
5 | corpora: [
6 | Corpus {
7 | name: "empty",
8 | included_in_sets: [],
9 | },
10 | Corpus {
11 | name: "subtok.demo",
12 | included_in_sets: [],
13 | },
14 | Corpus {
15 | name: "subtok.demo2",
16 | included_in_sets: [],
17 | },
18 | Corpus {
19 | name: "subtok.demo3",
20 | included_in_sets: [],
21 | },
22 | Corpus {
23 | name: "subtok.demo4",
24 | included_in_sets: [],
25 | },
26 | ],
27 | sets: [],
28 | }
29 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/project__with_export_columns_with_segmentation.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/project.rs
3 | info:
4 | corpus_set: ~
5 | corpus_names: []
6 | aql_query: ""
7 | query_language: AQL
8 | export_columns:
9 | - MatchInContext:
10 | context:
11 | Symmetric: 20
12 | primary_node_indices: ~
13 | segmentation: Test Segmentation
14 | export_format: Csv
15 | ---
16 | # Annimate project file
17 | # https://github.com/matthias-stemmler/annimate
18 |
19 | format-version = 1
20 |
21 | [project]
22 | query-language = "aql"
23 | export-format = "csv"
24 |
25 | [[project.columns]]
26 | type = "match-in-context"
27 | segmentation = "Test Segmentation"
28 | context = 20
29 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/project__with_export_columns_with_asymmetric_context.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/project.rs
3 | info:
4 | corpus_set: ~
5 | corpus_names: []
6 | aql_query: ""
7 | query_language: AQL
8 | export_columns:
9 | - MatchInContext:
10 | context:
11 | Asymmetric:
12 | left: 5
13 | right: 10
14 | primary_node_indices: ~
15 | segmentation: ~
16 | export_format: Csv
17 | ---
18 | # Annimate project file
19 | # https://github.com/matthias-stemmler/annimate
20 |
21 | format-version = 1
22 |
23 | [project]
24 | query-language = "aql"
25 | export-format = "csv"
26 |
27 | [[project.columns]]
28 | type = "match-in-context"
29 | context = { left = 5, right = 10 }
30 |
--------------------------------------------------------------------------------
/annimate_desktop/src/components/ui/progress.tsx:
--------------------------------------------------------------------------------
1 | import { cn } from '@/lib/utils';
2 | import * as ProgressPrimitive from '@radix-ui/react-progress';
3 | import { ComponentProps, FC } from 'react';
4 |
5 | const Progress: FC> = ({
6 | className,
7 | value,
8 | ...props
9 | }) => (
10 |
17 |
21 |
22 | );
23 |
24 | export { Progress };
25 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/export_matches__subtok_varying_number_of_match_nodes_with_explicit_primary_node_indices.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/export_matches.rs
3 | info:
4 | corpus_paths:
5 | - subtok.demo_relANNIS.zip
6 | corpus_names:
7 | - subtok.demo
8 | aql_query: "(pos=\"DT\" .5,5 pos=\"DT\") | pos=\"NN\""
9 | query_language: AQL
10 | export_columns:
11 | - Data:
12 | Text:
13 | left_context: 1
14 | right_context: 1
15 | segmentation: ~
16 | primary_node_indices:
17 | - 0
18 | - 1
19 | ---
20 | Context 1 (tokens),Match 1 (tokens),Context 2 (tokens),Match 2 (tokens),Context 3 (tokens)
21 | ,T his,is (...) of,a,sub-
22 | an,example,of,,
23 | tokenized,corpus,.,,
24 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/export_matches__subtok_optional_nodes.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/export_matches.rs
3 | info:
4 | corpus_paths:
5 | - subtok.demo_relANNIS.zip
6 | corpus_names:
7 | - subtok.demo
8 | aql_query: "norm? !.norm,3 norm"
9 | query_language: AQL
10 | export_columns:
11 | - Data:
12 | Anno:
13 | MatchNode:
14 | anno_key:
15 | - grammar
16 | - lemma
17 | index: 0
18 | - Data:
19 | Text:
20 | left_context: 1
21 | right_context: 1
22 | segmentation: norm
23 | primary_node_indices: ~
24 | ---
25 | #2 lemma,Left context (norm),Match (norm),Right context (norm)
26 | This,,This,is
27 | be,This,is,an
28 | a,is,an,example
29 |
--------------------------------------------------------------------------------
/annimate_desktop/src/components/main-page/export-format-select.tsx:
--------------------------------------------------------------------------------
1 | import { Select } from '@/components/ui/custom/select';
2 | import {
3 | useExportFormat,
4 | useIsExporting,
5 | useSetExportFormat,
6 | } from '@/lib/store';
7 | import { FC } from 'react';
8 |
9 | export const ExportFormatSelect: FC = () => {
10 | const exportFormat = useExportFormat();
11 | const setExportFormat = useSetExportFormat();
12 | const isExporting = useIsExporting();
13 |
14 | return (
15 |
25 | );
26 | };
27 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/metadata__07_add_corpora_to_set_new2.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/metadata.rs
3 | ---
4 | Corpora {
5 | corpora: [
6 | Corpus {
7 | name: "subtok.demo",
8 | included_in_sets: [
9 | "Test set",
10 | "Test set 2",
11 | ],
12 | },
13 | Corpus {
14 | name: "subtok.demo2",
15 | included_in_sets: [
16 | "Test set",
17 | ],
18 | },
19 | ],
20 | sets: [
21 | "Test set",
22 | "Test set 2",
23 | ],
24 | }
25 |
26 | --
27 |
28 | metadata-version = 1
29 |
30 | [corpus-sets."Test set"]
31 | corpus-names = [
32 | "subtok.demo",
33 | "subtok.demo2",
34 | ]
35 |
36 | [corpus-sets."Test set 2"]
37 | corpus-names = ["subtok.demo"]
38 |
--------------------------------------------------------------------------------
/docs/user-guide/src/img/settings.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/export_matches__nondefaultsegmentation.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/export_matches.rs
3 | info:
4 | corpus_paths:
5 | - nondefaultsegmentation.demo_graphml.zip
6 | corpus_names:
7 | - nondefaultsegmentation.demo
8 | aql_query: norm
9 | query_language: AQL
10 | export_columns:
11 | - Number
12 | - Data:
13 | Text:
14 | left_context: 2
15 | right_context: 2
16 | segmentation: norm
17 | primary_node_indices: ~
18 | ---
19 | Number,Left context (norm),Match (norm),Right context (norm)
20 | 1,,This,is an
21 | 2,This,is,an example
22 | 3,This is,an,example of
23 | 4,is an,example,of a
24 | 5,an example,of,a subtokenized
25 | 6,example of,a,subtokenized
26 | 7,of a,subtokenized,corpus .
27 | 8,subtokenized,corpus,.
28 | 9,subtokenized corpus,.,
29 |
--------------------------------------------------------------------------------
/annimate_desktop/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2020",
4 | "useDefineForClassFields": true,
5 | "lib": ["ES2020", "DOM", "DOM.Iterable"],
6 | "module": "ESNext",
7 | "skipLibCheck": true,
8 |
9 | /* Bundler mode */
10 | "moduleResolution": "bundler",
11 | "allowImportingTsExtensions": true,
12 | "resolveJsonModule": true,
13 | "isolatedModules": true,
14 | "noEmit": true,
15 | "jsx": "react-jsx",
16 |
17 | /* Linting */
18 | "strict": true,
19 | "noUnusedLocals": true,
20 | "noUnusedParameters": true,
21 | "noFallthroughCasesInSwitch": true,
22 |
23 | /* Paths */
24 | "baseUrl": ".",
25 | "paths": {
26 | "@/*": ["./src/*"]
27 | }
28 | },
29 | "include": ["src"],
30 | "references": [{ "path": "./tsconfig.node.json" }]
31 | }
32 |
--------------------------------------------------------------------------------
/annimate_desktop/src/components/ui/textarea.tsx:
--------------------------------------------------------------------------------
1 | import { cn } from '@/lib/utils';
2 | import { FC, RefAttributes, TextareaHTMLAttributes } from 'react';
3 |
4 | const Textarea: FC<
5 | TextareaHTMLAttributes &
6 | RefAttributes
7 | > = ({ className, ...props }) => (
8 |
19 | );
20 |
21 | export { Textarea };
22 |
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | - pull_request
5 | - workflow_call
6 | - workflow_dispatch
7 |
8 | jobs:
9 | check-cargo:
10 | name: Check (Cargo)
11 | uses: ./.github/workflows/check-cargo.yml
12 |
13 | check-pnpm:
14 | name: Check (pnpm)
15 | uses: ./.github/workflows/check-pnpm.yml
16 |
17 | fmt-check-cargo:
18 | name: Format check (Cargo)
19 | uses: ./.github/workflows/fmt-check-cargo.yml
20 |
21 | fmt-check-pnpm:
22 | name: Format check (pnpm)
23 | uses: ./.github/workflows/fmt-check-pnpm.yml
24 |
25 | test-cargo:
26 | name: Test (Cargo)
27 | uses: ./.github/workflows/test-cargo.yml
28 |
29 | test-pnpm:
30 | name: Test (pnpm)
31 | uses: ./.github/workflows/test-pnpm.yml
32 |
33 | udeps-cargo:
34 | name: Unused dependencies (Cargo)
35 | uses: ./.github/workflows/udeps-cargo.yml
36 |
--------------------------------------------------------------------------------
/annimate_desktop/src/components/ui/toaster.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | Toast,
3 | ToastClose,
4 | ToastDescription,
5 | ToastProvider,
6 | ToastTitle,
7 | ToastViewport,
8 | } from '@/components/ui/toast';
9 | import { useToast } from '@/components/ui/use-toast';
10 | import { FC } from 'react';
11 |
12 | export const Toaster: FC = () => {
13 | const { toasts } = useToast();
14 |
15 | return (
16 |
17 | {toasts.map(({ id, title, description, action, ...props }) => (
18 |
19 |
20 | {title && {title}}
21 | {description && {description}}
22 |
23 | {action}
24 |
25 |
26 | ))}
27 |
28 |
29 | );
30 | };
31 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/metadata__08_create_corpus_set.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/metadata.rs
3 | ---
4 | Corpora {
5 | corpora: [
6 | Corpus {
7 | name: "subtok.demo",
8 | included_in_sets: [
9 | "Test set",
10 | "Test set 2",
11 | ],
12 | },
13 | Corpus {
14 | name: "subtok.demo2",
15 | included_in_sets: [
16 | "Test set",
17 | ],
18 | },
19 | ],
20 | sets: [
21 | "Test set",
22 | "Test set 2",
23 | "Test set 3",
24 | ],
25 | }
26 |
27 | --
28 |
29 | metadata-version = 1
30 |
31 | [corpus-sets."Test set"]
32 | corpus-names = [
33 | "subtok.demo",
34 | "subtok.demo2",
35 | ]
36 |
37 | [corpus-sets."Test set 2"]
38 | corpus-names = ["subtok.demo"]
39 |
40 | [corpus-sets."Test set 3"]
41 | corpus-names = []
42 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/project__with_export_columns_with_node_indices.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/project.rs
3 | info:
4 | corpus_set: ~
5 | corpus_names: []
6 | aql_query: ""
7 | query_language: AQL
8 | export_columns:
9 | - AnnoMatch:
10 | anno_key: ~
11 | node_index: 0
12 | - MatchInContext:
13 | context:
14 | Symmetric: 20
15 | primary_node_indices:
16 | - 1
17 | - 2
18 | - 3
19 | segmentation: ~
20 | export_format: Csv
21 | ---
22 | # Annimate project file
23 | # https://github.com/matthias-stemmler/annimate
24 |
25 | format-version = 1
26 |
27 | [project]
28 | query-language = "aql"
29 | export-format = "csv"
30 |
31 | [[project.columns]]
32 | type = "match-annotation"
33 | node-index = 0
34 |
35 | [[project.columns]]
36 | type = "match-in-context"
37 | context = 20
38 | primary-node-indices = [1, 2, 3]
39 |
--------------------------------------------------------------------------------
/annimate_desktop/src/assets/annimate-logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/metadata__09_rename_corpus_set.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/metadata.rs
3 | ---
4 | Corpora {
5 | corpora: [
6 | Corpus {
7 | name: "subtok.demo",
8 | included_in_sets: [
9 | "Test set",
10 | "Test set 2 new",
11 | ],
12 | },
13 | Corpus {
14 | name: "subtok.demo2",
15 | included_in_sets: [
16 | "Test set",
17 | ],
18 | },
19 | ],
20 | sets: [
21 | "Test set",
22 | "Test set 2 new",
23 | "Test set 3",
24 | ],
25 | }
26 |
27 | --
28 |
29 | metadata-version = 1
30 |
31 | [corpus-sets."Test set"]
32 | corpus-names = [
33 | "subtok.demo",
34 | "subtok.demo2",
35 | ]
36 |
37 | [corpus-sets."Test set 2 new"]
38 | corpus-names = ["subtok.demo"]
39 |
40 | [corpus-sets."Test set 3"]
41 | corpus-names = []
42 |
--------------------------------------------------------------------------------
/.github/workflows/audit-pnpm.yml:
--------------------------------------------------------------------------------
1 | name: Audit (pnpm)
2 |
3 | on:
4 | push:
5 | paths:
6 | - annimate_desktop/pnpm-lock.yaml
7 | schedule:
8 | - cron: "0 0 * * SAT"
9 | workflow_dispatch:
10 |
11 | env:
12 | # renovate: datasource=npm versioning=semver-coerced depName=corepack
13 | VERSION_COREPACK: 0.34.5
14 |
15 | jobs:
16 | audit:
17 | name: Audit
18 | runs-on: ubuntu-latest
19 | defaults:
20 | run:
21 | working-directory: annimate_desktop
22 |
23 | steps:
24 | - name: Checkout
25 | uses: actions/checkout@v6
26 |
27 | # Install a specific version of corepack to make sure we have the latest signing keys
28 | - name: Install corepack
29 | run: npm install --global --force corepack@${{ env.VERSION_COREPACK }}
30 |
31 | - name: Enable corepack
32 | run: corepack enable
33 |
34 | - name: Run audit
35 | run: pnpm audit --audit-level high
36 |
--------------------------------------------------------------------------------
/pages/img/github-mark.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/annimate_desktop/src/components/ui/input.tsx:
--------------------------------------------------------------------------------
1 | import { cn } from '@/lib/utils';
2 | import { FC, InputHTMLAttributes, RefAttributes } from 'react';
3 |
4 | const Input: FC<
5 | InputHTMLAttributes & RefAttributes
6 | > = ({ className, type, ...props }) => {
7 | return (
8 |
20 | );
21 | };
22 |
23 | export { Input };
24 |
--------------------------------------------------------------------------------
/annimate_core/tests/snapshots/export_matches__subtok_annos.snap:
--------------------------------------------------------------------------------
1 | ---
2 | source: annimate_core/tests/export_matches.rs
3 | info:
4 | corpus_paths:
5 | - subtok.demo_relANNIS.zip
6 | corpus_names:
7 | - subtok.demo
8 | aql_query: "tok=\"tokenized\" | norm=\"subtokenized\""
9 | query_language: AQL
10 | export_columns:
11 | - Number
12 | - Data:
13 | Anno:
14 | MatchNode:
15 | anno_key:
16 | - annis
17 | - tok
18 | index: 0
19 | - Data:
20 | Anno:
21 | MatchNode:
22 | anno_key:
23 | - grammar
24 | - norm
25 | index: 0
26 | - Data:
27 | Anno:
28 | MatchNode:
29 | anno_key:
30 | - structure
31 | - line
32 | index: 0
33 | ---
34 | Number,#1|#2 tok,#1|#2 norm,#1|#2 line
35 | 1,subtokenized,subtokenized,1
36 | 2,tokenized,subtokenized,2
37 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/2-docs.yml:
--------------------------------------------------------------------------------
1 | name: 📖 Documentation Issue
2 | description: Help improve our docs
3 | title: "[Docs] "
4 | labels: ["docs"]
5 | assignees:
6 | - matthias-stemmler
7 | body:
8 | - type: checkboxes
9 | id: type
10 | attributes:
11 | label: Issue Type
12 | description: What type of documentation issue would you like to report?
13 | options:
14 | - label: Typo
15 | - label: Wrong information
16 | - label: Suggestion for improvement
17 | - label: General feedback
18 | - type: textarea
19 | id: pages
20 | attributes:
21 | label: Documentation Page(s)
22 | description: |
23 | Does your issue apply to a specific page or pages in the documentation? If so, enter the page URL(s) here.
24 | - type: textarea
25 | id: description
26 | attributes:
27 | label: Description
28 | description: Please describe your issue.
29 | validations:
30 | required: true
--------------------------------------------------------------------------------
/annimate_desktop/src/assets/github-mark.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/annimate_desktop/src/components/dialogs/use-dialog-state.ts:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 |
3 | type DialogState = [boolean, (open: boolean) => void, number];
4 |
5 | // The