diff --git a/.github/workflows/gatecheck.yml b/.github/workflows/gatecheck.yml index 5e5ee622..cbe30326 100644 --- a/.github/workflows/gatecheck.yml +++ b/.github/workflows/gatecheck.yml @@ -75,6 +75,12 @@ jobs: *+dev.*) ;; *) echo "expected a development build name (+dev.), got: $v" >&2; exit 1 ;; esac + # the checkout carries the potion table as an lfs pointer; `urna doctor` + # and the in-process embed need the table itself, fetched from hugging + # face at the pinned revision and checked against the pointer's oid. + - name: fetch the potion table (embedder payload), verified against its lfs pointer + run: sh tool/tasks/getpotion.sh + shell: bash - name: test run: cargo test --workspace - name: benches compile (numbers are not a gate on shared runners) @@ -117,6 +123,12 @@ jobs: - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 - name: clippy run: cargo clippy -p urna --all-targets -- -D warnings + # the checkout carries the potion table as an lfs pointer; `urna doctor` + # and the in-process embed need the table itself, fetched from hugging + # face at the pinned revision and checked against the pointer's oid. + - name: fetch the potion table (embedder payload), verified against its lfs pointer + run: sh tool/tasks/getpotion.sh + shell: bash - name: test (unit + setup end to end) run: cargo test -p urna --bins --test setup_e2e diff --git a/.gitignore b/.gitignore index fcde481c..02e1a5d5 100644 --- a/.gitignore +++ b/.gitignore @@ -82,3 +82,4 @@ TMP/ # quickstart build output (demo/starter/corpus.toml) demo/starter/out/ tmps/ +/data/ diff --git a/Cargo.lock b/Cargo.lock index 81b5d495..8ec9a757 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2362,6 +2362,7 @@ dependencies = [ "crossterm", "flate2", "hex", + "libc", "memmap2", "rand 0.10.2", "ratatui", @@ -2414,6 +2415,7 @@ version = "0.5.6" dependencies = [ "serde_json", "urna-engine", + "urna-format", "urna-neural", ] diff --git a/data/gitignore/Actionscript.gitignore b/data/gitignore/Actionscript.gitignore deleted file mode 100644 index 5d947ca8..00000000 --- a/data/gitignore/Actionscript.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -# Build and Release Folders -bin-debug/ -bin-release/ -[Oo]bj/ -[Bb]in/ - -# Other files and folders -.settings/ - -# Executables -*.swf -*.air -*.ipa -*.apk - -# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties` -# should NOT be excluded as they contain compiler settings and other important -# information for Eclipse / Flash Builder. diff --git a/data/gitignore/Ada.gitignore b/data/gitignore/Ada.gitignore deleted file mode 100644 index b4d70396..00000000 --- a/data/gitignore/Ada.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Object file -*.o - -# Ada Library Information -*.ali diff --git a/data/gitignore/AdventureGameStudio.gitignore b/data/gitignore/AdventureGameStudio.gitignore deleted file mode 100644 index 27a089f4..00000000 --- a/data/gitignore/AdventureGameStudio.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -# Built things -_Debug/ -Compiled/ - -# AudioCache can be rebuilt from sources -AudioCache/ - -# Lockfile -_OpenInEditor.lock - -# User settings -Game.agf.user -*.crm.user - -# Backups -Game.agf.bak -backup_acsprset.spr - -# Memory dumps -*.dmp - -# Temporary files -# temporarily created during sprite or room background compression -~aclzw.tmp -# temporary, main game data, before getting packed into exe -game28.dta -# temporary build of the game before being moved to Compiled/ folder -*.exe - -# Log files -warnings.log diff --git a/data/gitignore/Agda.gitignore b/data/gitignore/Agda.gitignore deleted file mode 100644 index 3f1eedec..00000000 --- a/data/gitignore/Agda.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.agdai -**/MAlonzo/** diff --git a/data/gitignore/Android.gitignore b/data/gitignore/Android.gitignore deleted file mode 100644 index b7fb64cf..00000000 --- a/data/gitignore/Android.gitignore +++ /dev/null @@ -1,35 +0,0 @@ -# Gradle files -.gradle/ -build/ -.kotlin/ - -# Local configuration file (sdk path, etc) -local.properties - -# Log/OS Files -*.log - -# Android Studio generated files and folders -captures/ -.externalNativeBuild/ -.cxx/ -*.aab -*.apk -output-metadata.json - -# IntelliJ -*.iml -.idea/ -misc.xml -deploymentTargetDropDown.xml -render.experimental.xml - -# Keystore files -*.jks -*.keystore - -# Google Services (e.g. APIs or Firebase) -google-services.json - -# Android Profiling -*.hprof diff --git a/data/gitignore/Angular.gitignore b/data/gitignore/Angular.gitignore deleted file mode 100644 index 0383c3a5..00000000 --- a/data/gitignore/Angular.gitignore +++ /dev/null @@ -1,28 +0,0 @@ -# Angular specific -/dist/ -/out-tsc/ -/tmp/ -/coverage/ -/e2e/test-output/ -/.angular/ -.angular/ - -# Node modules and dependency files -/node_modules/ -/package-lock.json -/yarn.lock - -# Environment files -/.env - -# Angular CLI and build artefacts -/.angular-cli.json -/.ng/ - -# TypeScript cache -*.tsbuildinfo - -# Logs -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/data/gitignore/AppEngine.gitignore b/data/gitignore/AppEngine.gitignore deleted file mode 100644 index 62273454..00000000 --- a/data/gitignore/AppEngine.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Google App Engine generated folder -appengine-generated/ diff --git a/data/gitignore/AppceleratorTitanium.gitignore b/data/gitignore/AppceleratorTitanium.gitignore deleted file mode 100644 index 3abea559..00000000 --- a/data/gitignore/AppceleratorTitanium.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Build folder and log file -build/ -build.log diff --git a/data/gitignore/ArchLinuxPackages.gitignore b/data/gitignore/ArchLinuxPackages.gitignore deleted file mode 100644 index 289fa5c6..00000000 --- a/data/gitignore/ArchLinuxPackages.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -*.tar -*.tar.* -*.jar -*.exe -*.msi -*.deb -*.zip -*.tgz -*.log -*.log.* -*.sig - -pkg/ -src/ diff --git a/data/gitignore/Autotools.gitignore b/data/gitignore/Autotools.gitignore deleted file mode 100644 index 9a478264..00000000 --- a/data/gitignore/Autotools.gitignore +++ /dev/null @@ -1,54 +0,0 @@ -# http://www.gnu.org/software/automake - -Makefile.in -/ar-lib -/mdate-sh -/py-compile -/test-driver -/ylwrap -.deps/ -.dirstamp - -# http://www.gnu.org/software/autoconf - -autom4te.cache -/autoscan.log -/autoscan-*.log -/aclocal.m4 -/compile -/config.cache -/config.guess -/config.h.in -/config.log -/config.status -/config.sub -/configure -/configure.scan -/depcomp -/install-sh -/missing -/stamp-h1 - -# https://www.gnu.org/software/libtool/ - -/libtool -/ltmain.sh -.libs/ - -# http://www.gnu.org/software/texinfo - -/texinfo.tex - -# http://www.gnu.org/software/m4/ - -m4/libtool.m4 -m4/ltoptions.m4 -m4/ltsugar.m4 -m4/ltversion.m4 -m4/lt~obsolete.m4 - -# Generated Makefile -# (meta build system like autotools, -# can automatically generate from config.status script -# (which is called by configure script)) -Makefile diff --git a/data/gitignore/Ballerina.gitignore b/data/gitignore/Ballerina.gitignore deleted file mode 100644 index 030a350f..00000000 --- a/data/gitignore/Ballerina.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -# generated files -target/ -generated/ - -# dependencies -Dependencies.toml - -# config files -Config.toml -# the config files used for testing, Uncomment the following line if you want to commit the test config files -#!**/tests/Config.toml diff --git a/data/gitignore/C++.gitignore b/data/gitignore/C++.gitignore deleted file mode 100644 index cf039d7a..00000000 --- a/data/gitignore/C++.gitignore +++ /dev/null @@ -1,68 +0,0 @@ -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Linker files -*.ilk - -# Debugger Files -*.pdb - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll -*.so.* - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -# Build directories -build/ -Build/ -build-*/ - -# CMake generated files -CMakeFiles/ -CMakeCache.txt -cmake_install.cmake -Makefile -install_manifest.txt -compile_commands.json - -# Temporary files -*.tmp -*.log -*.bak -*.swp - -# vcpkg -vcpkg_installed/ - -# debug information files -*.dwo - -# test output & cache -Testing/ -.cache/ diff --git a/data/gitignore/C.gitignore b/data/gitignore/C.gitignore deleted file mode 100644 index 845cda6a..00000000 --- a/data/gitignore/C.gitignore +++ /dev/null @@ -1,55 +0,0 @@ -# Prerequisites -*.d - -# Object files -*.o -*.ko -*.obj -*.elf - -# Linker output -*.ilk -*.map -*.exp - -# Precompiled Headers -*.gch -*.pch - -# Libraries -*.lib -*.a -*.la -*.lo - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex - -# Debug files -*.dSYM/ -*.su -*.idb -*.pdb - -# Kernel Module Compile Results -*.mod* -*.cmd -.tmp_versions/ -modules.order -Module.symvers -Mkfile.old -dkms.conf - -# debug information files -*.dwo diff --git a/data/gitignore/CFWheels.gitignore b/data/gitignore/CFWheels.gitignore deleted file mode 100644 index f2fec34f..00000000 --- a/data/gitignore/CFWheels.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -# unpacked plugin folders -plugins/**/* - -# files directory where uploads go -files - -# DBMigrate plugin: generated SQL -db/sql - -# AssetBundler plugin: generated bundles -javascripts/bundles -stylesheets/bundles diff --git a/data/gitignore/CMake.gitignore b/data/gitignore/CMake.gitignore deleted file mode 100644 index 1f99f9d2..00000000 --- a/data/gitignore/CMake.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -CMakeLists.txt.user -CMakeCache.txt -CMakeFiles -CMakeScripts -Testing -Makefile -cmake_install.cmake -install_manifest.txt -compile_commands.json -CTestTestfile.cmake -_deps -CMakeUserPresets.json - -# CLion -# JetBrains specific template is maintained in a separate JetBrains.gitignore that can -# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore -# and can be added to the global gitignore or merged into this file. For a more nuclear -# option (not recommended) you can uncomment the following to ignore the entire idea folder. -#cmake-build-* diff --git a/data/gitignore/CONTRIBUTING.md b/data/gitignore/CONTRIBUTING.md deleted file mode 100644 index ab8efb28..00000000 --- a/data/gitignore/CONTRIBUTING.md +++ /dev/null @@ -1,49 +0,0 @@ -# Contributing guidelines - -We’d love you to help us improve this project. To help us keep this collection -high quality, we request that contributions adhere to the following guidelines. -Any contributions that don't meet these guidelines will be closed. - -- **Provide a link to the application or project’s homepage**. Unless it’s - extremely popular, there’s a chance the maintainers don’t know about or use - the language, framework, editor, app, or project your change applies to. - -- **Provide a reason for making this change**. Even if it seems self-evident, - please take a sentence or two to tell us why your change or addition should - happen. It’s especially helpful to articulate why this change applies to - *everyone* who works with the applicable technology, rather than just you or - your team. - -- **Provide links to documentation** supporting the change you’re making. - Current, canonical documentation mentioning the files being ignored is best. - If documentation isn’t available to support your change, do the best you can - to explain what the files being ignored are for. - -- **Keep scope as limited as possible**. Changes should be as small as possible - and apply to the most specific gitignore template available for the target - application. For example: OS-specific ignore rules like `.DS_Store` are not - accepted anywhere but their specific gitignore, `Global/macOS.gitignore` in - this case. - -- **Only modify *one template* per pull request**. This helps keep pull - requests and feedback focused on a specific project or technology. - -- **Add new rules to the most appropriate existing section**. Please ensure - your contribution does not create duplicate sections or add rules in - unrelated sections. - -- **No duplicate rules**. It's easy to do, but it creates confusion and - introduces the risk of one or the other being missed in an update. - -In general, the more you can do to help us understand the change you’re making, -the more likely we’ll be to accept your contribution quickly. - -If a template is mostly a list of files installed by a particular version of -some software (e.g. a PHP framework) then it's brittle and probably no more -helpful than a simple `ls`. If it's not possible to curate a small set of -useful rules, then the template is not a good fit for this collection. - -Please also understand that we can’t list every tool that ever existed. -Our aim is to curate a collection of the *most common and helpful* templates, -not to make sure we cover every project possible. If we choose not to -include your language, tool, or project, it’s not because it’s not awesome. diff --git a/data/gitignore/CUDA.gitignore b/data/gitignore/CUDA.gitignore deleted file mode 100644 index cb385db8..00000000 --- a/data/gitignore/CUDA.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -*.i -*.ii -*.gpu -*.ptx -*.cubin -*.fatbin diff --git a/data/gitignore/CakePHP.gitignore b/data/gitignore/CakePHP.gitignore deleted file mode 100644 index c6597e4e..00000000 --- a/data/gitignore/CakePHP.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -# CakePHP 3 - -/vendor/* -/config/app.php - -/tmp/cache/models/* -!/tmp/cache/models/empty -/tmp/cache/persistent/* -!/tmp/cache/persistent/empty -/tmp/cache/views/* -!/tmp/cache/views/empty -/tmp/sessions/* -!/tmp/sessions/empty -/tmp/tests/* -!/tmp/tests/empty - -/logs/* -!/logs/empty - -# CakePHP 2 - -/app/tmp/* -/app/Config/core.php -/app/Config/database.php -/vendors/* diff --git a/data/gitignore/ChefCookbook.gitignore b/data/gitignore/ChefCookbook.gitignore deleted file mode 100644 index 5ee7b7a9..00000000 --- a/data/gitignore/ChefCookbook.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -.vagrant -/cookbooks - -# Bundler -bin/* -.bundle/* - -.kitchen/ -.kitchen.local.yml diff --git a/data/gitignore/Clojure.gitignore b/data/gitignore/Clojure.gitignore deleted file mode 120000 index 7657a270..00000000 --- a/data/gitignore/Clojure.gitignore +++ /dev/null @@ -1 +0,0 @@ -Leiningen.gitignore \ No newline at end of file diff --git a/data/gitignore/CodeIgniter.gitignore b/data/gitignore/CodeIgniter.gitignore deleted file mode 100644 index f447dc30..00000000 --- a/data/gitignore/CodeIgniter.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -*/config/development -*/logs/log-*.php -!*/logs/index.html -*/cache/* -!system/cache/* -!*/cache/index.html -!*/cache/.htaccess - -user_guide_src/build/* -user_guide_src/cilexer/build/* -user_guide_src/cilexer/dist/* -user_guide_src/cilexer/pycilexer.egg-info/* - -#codeigniter 3 -application/logs/* -!application/logs/index.html -!application/logs/.htaccess -/vendor/ diff --git a/data/gitignore/CommonLisp.gitignore b/data/gitignore/CommonLisp.gitignore deleted file mode 100644 index e7de127b..00000000 --- a/data/gitignore/CommonLisp.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -*.FASL -*.fasl -*.lisp-temp -*.dfsl -*.pfsl -*.d64fsl -*.p64fsl -*.lx64fsl -*.lx32fsl -*.dx64fsl -*.dx32fsl -*.fx64fsl -*.fx32fsl -*.sx64fsl -*.sx32fsl -*.wx64fsl -*.wx32fsl diff --git a/data/gitignore/Composer.gitignore b/data/gitignore/Composer.gitignore deleted file mode 100644 index a67d42b3..00000000 --- a/data/gitignore/Composer.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -composer.phar -/vendor/ - -# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control -# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file -# composer.lock diff --git a/data/gitignore/Concrete5.gitignore b/data/gitignore/Concrete5.gitignore deleted file mode 100644 index d6c11ad2..00000000 --- a/data/gitignore/Concrete5.gitignore +++ /dev/null @@ -1,21 +0,0 @@ -# ignore the error log and .htaccess and others -error_log -.htaccess - -# concrete5 5.6 specific - -config/site.php -files/cache/* -files/tmp/* - -# concrete5 5.7 specific - -# ignore everything but the index.html -/application/files/* -!/application/files/index.html - -# ignore updates folder -/updates/* - -# ignore sitemap.xml -/sitemap.xml diff --git a/data/gitignore/Coq.gitignore b/data/gitignore/Coq.gitignore deleted file mode 100644 index 66596b22..00000000 --- a/data/gitignore/Coq.gitignore +++ /dev/null @@ -1,45 +0,0 @@ -.*.aux -.*.d -*.a -*.cma -*.cmi -*.cmo -*.cmx -*.cmxa -*.cmxs -*.glob -*.ml.d -*.ml4.d -*.mlg.d -*.mli.d -*.mllib.d -*.mlpack.d -*.native -*.o -*.v.d -*.vio -*.vo -*.vok -*.vos -.coq-native -.csdp.cache -.lia.cache -.nia.cache -.nlia.cache -.nra.cache -csdp.cache -lia.cache -nia.cache -nlia.cache -nra.cache -native_compute_profile_*.data - -# generated timing files -*.timing.diff -*.v.after-timing -*.v.before-timing -*.v.timing -time-of-build-after.log -time-of-build-before.log -time-of-build-both.log -time-of-build-pretty.log diff --git a/data/gitignore/CraftCMS.gitignore b/data/gitignore/CraftCMS.gitignore deleted file mode 100644 index 0d81b397..00000000 --- a/data/gitignore/CraftCMS.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Craft 2 Storage (https://craftcms.com/support/craft-storage-gitignore) -# not necessary for Craft 3 (https://github.com/craftcms/craft/issues/26) -/craft/storage/* -!/craft/storage/rebrand diff --git a/data/gitignore/D.gitignore b/data/gitignore/D.gitignore deleted file mode 100644 index 74b926fc..00000000 --- a/data/gitignore/D.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Compiled Object files -*.o -*.obj - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Compiled Static libraries -*.a -*.lib - -# Executables -*.exe - -# DUB -.dub -docs.json -__dummy.html -docs/ - -# Code coverage -*.lst diff --git a/data/gitignore/DM.gitignore b/data/gitignore/DM.gitignore deleted file mode 100644 index ba5abdab..00000000 --- a/data/gitignore/DM.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -*.dmb -*.rsc -*.int -*.lk -*.zip diff --git a/data/gitignore/Dart.gitignore b/data/gitignore/Dart.gitignore deleted file mode 100644 index 3150b406..00000000 --- a/data/gitignore/Dart.gitignore +++ /dev/null @@ -1,29 +0,0 @@ -# See https://www.dartlang.org/guides/libraries/private-files - -# Files and directories created by pub -.dart_tool/ -.packages -build/ -# If you're building an application, you may want to check-in your pubspec.lock -pubspec.lock - -# Directory created by dartdoc -# If you don't generate documentation locally you can remove this line. -doc/api/ - -# dotenv environment variables file -.env* - -# Avoid committing generated Javascript files: -*.dart.js -# Produced by the --dump-info flag. -*.info.json -# When generated by dart2js. Don't specify *.js if your -# project includes source files written in JavaScript. -*.js -*.js_ -*.js.deps -*.js.map - -.flutter-plugins -.flutter-plugins-dependencies diff --git a/data/gitignore/Delphi.gitignore b/data/gitignore/Delphi.gitignore deleted file mode 100644 index 0e35f73f..00000000 --- a/data/gitignore/Delphi.gitignore +++ /dev/null @@ -1,79 +0,0 @@ -# Uncomment these types if you want even more clean repository. But be careful. -# It can make harm to an existing project source. Read explanations below. -# -# Resource files are binaries containing manifest, project icon and version info. -# They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files. -#*.res -# -# Type library file (binary). In old Delphi versions it should be stored. -# Since Delphi 2009 it is produced from .ridl file and can safely be ignored. -#*.tlb -# -# Diagram Portfolio file. Used by the diagram editor up to Delphi 7. -# Uncomment this if you are not using diagrams or use newer Delphi version. -#*.ddp -# -# Visual LiveBindings file. Added in Delphi XE2. -# Uncomment this if you are not using LiveBindings Designer. -#*.vlb -# -# Deployment Manager configuration file for your project. Added in Delphi XE2. -# Uncomment this if it is not mobile development and you do not use remote debug feature. -#*.deployproj -# -# C++ object files produced when C/C++ Output file generation is configured. -# Uncomment this if you are not using external objects (zlib library for example). -#*.obj -# - -# Default Delphi compiler directories -# Content of this directories are generated with each Compile/Construct of a project. -# Most of the time, files here have not there place in a code repository. -#Win32/ -#Win64/ -#OSX64/ -#OSXARM64/ -#Android/ -#Android64/ -#iOSDevice64/ -#Linux64/ - -# Delphi compiler-generated binaries (safe to delete) -*.exe -*.dll -*.bpl -*.bpi -*.dcp -*.so -*.apk -*.drc -*.map -*.dres -*.rsm -*.tds -*.dcu -*.lib -*.a -*.o -*.ocx - -# Delphi autogenerated files (duplicated info) -*.cfg -*.hpp -*Resource.rc - -# Delphi local files (user-specific info) -*.local -*.identcache -*.projdata -*.tvsconfig -*.dsk -*.dsv - -# Delphi history and backups -__history/ -__recovery/ -*.~* - -# Castalia statistics file (since XE7 Castalia is distributed with Delphi) -*.stat diff --git a/data/gitignore/Deno.gitignore b/data/gitignore/Deno.gitignore deleted file mode 100644 index 2faaca02..00000000 --- a/data/gitignore/Deno.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -# Deno -# https://deno.com/ - -# Cache directory (when using project-local DENO_DIR) -# https://docs.deno.com/runtime/fundamentals/setup/#deno_dir -.deno/ - -# Coverage reports -# https://docs.deno.com/runtime/reference/cli/coverage/ -coverage/ -*.lcov diff --git a/data/gitignore/Dotnet.gitignore b/data/gitignore/Dotnet.gitignore deleted file mode 100644 index 7282dbf2..00000000 --- a/data/gitignore/Dotnet.gitignore +++ /dev/null @@ -1,57 +0,0 @@ -## A streamlined .gitignore for modern .NET projects -## including temporary files, build results, and -## files generated by popular .NET tools. If you are -## developing with Visual Studio, the VS .gitignore -## https://github.com/github/gitignore/blob/main/VisualStudio.gitignore -## has more thorough IDE-specific entries. -## -## Get latest from https://github.com/github/gitignore/blob/main/Dotnet.gitignore - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ -[Ll]ogs/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg - -# dotenv environment variables file -.env - -# Others -~$* -*~ -CodeCoverage/ - -# MSBuild Binary and Structured Log -*.binlog - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml diff --git a/data/gitignore/Drupal.gitignore b/data/gitignore/Drupal.gitignore deleted file mode 100644 index 3856fe46..00000000 --- a/data/gitignore/Drupal.gitignore +++ /dev/null @@ -1,65 +0,0 @@ -# gitignore template for Drupal 8 projects -# -# earlier versions of Drupal are tracked in `community/PHP/` -# -# follows official upstream conventions: -# https://www.drupal.org/docs/develop/using-composer - -# Ignore configuration files that may contain sensitive information -/web/sites/*/*settings*.php -/web/sites/*/*services*.yml - -# Ignore paths that may contain user-generated content -/web/sites/*/files -/web/sites/*/public -/web/sites/*/private -/web/sites/*/files-public -/web/sites/*/files-private - -# Ignore paths that may contain temporary files -/web/sites/*/translations -/web/sites/*/tmp -/web/sites/*/cache - -# Ignore drupal core (if not versioning drupal sources) -/web/vendor -/web/core -/web/modules/README.txt -/web/modules/contrib -/web/profiles/README.txt -/web/profiles/contrib -/web/sites/development.services.yml -/web/sites/example.settings.local.php -/web/sites/example.sites.php -/web/sites/README.txt -/web/themes/README.txt -/web/themes/contrib -/web/.csslintrc -/web/.editorconfig -/web/.eslintignore -/web/.eslintrc.json -/web/.gitattributes -/web/.htaccess -/web/.ht.router.php -/web/autoload.php -/web/composer.json -/web/composer.lock -/web/example.gitignore -/web/index.php -/web/INSTALL.txt -/web/LICENSE.txt -/web/README.txt -/web/robots.txt -/web/update.php -/web/web.config - -# Ignore vendor dependencies and scripts -/vendor -/composer.phar -/composer -/robo.phar -/robo -/drush.phar -/drush -/drupal.phar -/drupal diff --git a/data/gitignore/EPiServer.gitignore b/data/gitignore/EPiServer.gitignore deleted file mode 100644 index 97037de7..00000000 --- a/data/gitignore/EPiServer.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -###################### -## EPiServer Files -###################### -*License.config diff --git a/data/gitignore/Eagle.gitignore b/data/gitignore/Eagle.gitignore deleted file mode 100644 index 28f0b971..00000000 --- a/data/gitignore/Eagle.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -# Ignore list for Eagle, a PCB layout tool - -# Backup files -*.s#? -*.b#? -*.l#? -*.b$? -*.s$? -*.l$? - -# Eagle project file -# It contains a serial number and references to the file structure -# on your computer. -# comment the following line if you want to have your project file included. -eagle.epf - -# Autorouter files -*.pro -*.job - -# CAM files -*.$$$ -*.cmp -*.ly2 -*.l15 -*.sol -*.plc -*.stc -*.sts -*.crc -*.crs - -*.dri -*.drl -*.gpi -*.pls -*.ger -*.xln - -*.drd -*.drd.* - -*.s#* -*.b#* - -*.info - -*.eps - -# file locks introduced since 7.x -*.lck diff --git a/data/gitignore/Elisp.gitignore b/data/gitignore/Elisp.gitignore deleted file mode 100644 index adef969d..00000000 --- a/data/gitignore/Elisp.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -# Compiled -*.elc - -# Packaging -.cask/ -.eask/ -.eldev/ -.keg/ - -# Built distribution -dist/ - -# Backup files -*~ - -# Undo-tree save-files -*.~undo-tree diff --git a/data/gitignore/Elixir.gitignore b/data/gitignore/Elixir.gitignore deleted file mode 100644 index b263cd10..00000000 --- a/data/gitignore/Elixir.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -/_build -/cover -/deps -/doc -/.fetch -erl_crash.dump -*.ez -*.beam -/config/*.secret.exs -.elixir_ls/ diff --git a/data/gitignore/Elm.gitignore b/data/gitignore/Elm.gitignore deleted file mode 100644 index 8b631e7d..00000000 --- a/data/gitignore/Elm.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# elm-package generated files -elm-stuff -# elm-repl generated files -repl-temp-* diff --git a/data/gitignore/Erlang.gitignore b/data/gitignore/Erlang.gitignore deleted file mode 100644 index 751a61d1..00000000 --- a/data/gitignore/Erlang.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -.eunit -*.o -*.beam -*.plt -erl_crash.dump -.concrete/DEV_MODE - -# rebar 2.x -.rebar -rel/example_project -ebin/*.beam -deps - -# rebar 3 -.rebar3 -_build/ -_checkouts/ diff --git a/data/gitignore/ExpressionEngine.gitignore b/data/gitignore/ExpressionEngine.gitignore deleted file mode 100644 index 314e4df1..00000000 --- a/data/gitignore/ExpressionEngine.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -.DS_Store - -# Images -images/avatars/ -images/captchas/ -images/smileys/ -images/member_photos/ -images/signature_attachments/ -images/pm_attachments/ - -# For security do not publish the following files -system/expressionengine/config/database.php -system/expressionengine/config/config.php - -# Caches -sized/ -thumbs/ -_thumbs/ -*/expressionengine/cache/* diff --git a/data/gitignore/ExtJs.gitignore b/data/gitignore/ExtJs.gitignore deleted file mode 100644 index ab97a8cc..00000000 --- a/data/gitignore/ExtJs.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -.architect -bootstrap.css -bootstrap.js -bootstrap.json -bootstrap.jsonp -build/ -classic.json -classic.jsonp -ext/ -modern.json -modern.jsonp -resources/sass/.sass-cache/ -resources/.arch-internal-preview.css -.arch-internal-preview.css diff --git a/data/gitignore/Fancy.gitignore b/data/gitignore/Fancy.gitignore deleted file mode 100644 index 70d6e631..00000000 --- a/data/gitignore/Fancy.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.rbc -*.fyc diff --git a/data/gitignore/Finale.gitignore b/data/gitignore/Finale.gitignore deleted file mode 100644 index 7ef08e0c..00000000 --- a/data/gitignore/Finale.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.bak -*.db -*.avi -*.pdf -*.ps -*.mid -*.midi -*.mp3 -*.aif -*.wav -# Some versions of Finale have a bug and randomly save extra copies of -# the music source as " copy.mus" -*copy.mus diff --git a/data/gitignore/Firebase.gitignore b/data/gitignore/Firebase.gitignore deleted file mode 100644 index 55b8b0ea..00000000 --- a/data/gitignore/Firebase.gitignore +++ /dev/null @@ -1,28 +0,0 @@ -# Firebase build and deployment files -/firebase-debug.log -/firebase-debug.*.log -.firebaserc - -# Firebase Hosting -/firebase.json -*.cache -hosting/.cache - -# Firebase Functions -/functions/node_modules/ -/functions/.env -/functions/package-lock.json - -# Firebase Emulators -/firebase-*.zip -/.firebase/ -/emulator-ui/ - -# Logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Environment files (local configs) -/.env.* diff --git a/data/gitignore/FlaxEngine.gitignore b/data/gitignore/FlaxEngine.gitignore deleted file mode 100644 index b4705684..00000000 --- a/data/gitignore/FlaxEngine.gitignore +++ /dev/null @@ -1,45 +0,0 @@ -# Ignore Flax project files -Binaries/ -Cache/ -Logs/ -Output/ -Screenshots/ -*.HotReload.* - -# Ignore Visual Studio project files (generated locally) -*.csproj -*.sln - -# Ignore thumbnails created by Windows -Thumbs.db - -# Ignore files built by Visual Studio -*.obj -*.exe -*.pdb -*.user -*.aps -*.pch -*.vspscc -*_i.c -*_p.c -*.ncb -*.suo -*.tlb -*.tlh -*.bak -*.cache -*.ilk -*.log -[Bb]in -[Dd]ebug*/ -*.lib -*.sbr -obj/ -[Rr]elease*/ -_ReSharper*/ -[Tt]est[Rr]esult* -.vs/ - -# Ignore Nuget packages folder -packages/ diff --git a/data/gitignore/Flutter.gitignore b/data/gitignore/Flutter.gitignore deleted file mode 100644 index 39b8814a..00000000 --- a/data/gitignore/Flutter.gitignore +++ /dev/null @@ -1,119 +0,0 @@ -# Miscellaneous -*.class -*.lock -*.log -*.pyc -*.swp -.buildlog/ -.history - - - -# Flutter repo-specific -/bin/cache/ -/bin/internal/bootstrap.bat -/bin/internal/bootstrap.sh -/bin/mingit/ -/dev/benchmarks/mega_gallery/ -/dev/bots/.recipe_deps -/dev/bots/android_tools/ -/dev/devicelab/ABresults*.json -/dev/docs/doc/ -/dev/docs/flutter.docs.zip -/dev/docs/lib/ -/dev/docs/pubspec.yaml -/dev/integration_tests/**/xcuserdata -/dev/integration_tests/**/Pods -/packages/flutter/coverage/ -version -analysis_benchmark.json - -# packages file containing multi-root paths -.packages.generated - -# Flutter/Dart/Pub related -**/doc/api/ -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -**/generated_plugin_registrant.dart -.packages -.pub-preload-cache/ -.pub/ -build/ -flutter_*.png -linked_*.ds -unlinked.ds -unlinked_spec.ds - -# Android related -**/android/**/gradle-wrapper.jar -.gradle/ -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java -**/android/key.properties -*.jks - -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/.last_build_id -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Flutter.podspec -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/ephemeral -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/flutter_assets/ -**/ios/Flutter/flutter_export_environment.sh -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* - -# macOS -**/Flutter/ephemeral/ -**/Pods/ -**/macos/Flutter/GeneratedPluginRegistrant.swift -**/macos/Flutter/ephemeral -**/xcuserdata/ - -# Windows -**/windows/flutter/generated_plugin_registrant.cc -**/windows/flutter/generated_plugin_registrant.h -**/windows/flutter/generated_plugins.cmake - -# Linux -**/linux/flutter/generated_plugin_registrant.cc -**/linux/flutter/generated_plugin_registrant.h -**/linux/flutter/generated_plugins.cmake - -# Coverage -coverage/ - -# Symbols -app.*.symbols - -# Exceptions to above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages -!/dev/ci/**/Gemfile.lock \ No newline at end of file diff --git a/data/gitignore/ForceDotCom.gitignore b/data/gitignore/ForceDotCom.gitignore deleted file mode 100644 index 3933cd4d..00000000 --- a/data/gitignore/ForceDotCom.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.project -.settings -salesforce.schema -Referenced Packages diff --git a/data/gitignore/Fortran.gitignore b/data/gitignore/Fortran.gitignore deleted file mode 120000 index 5daba98a..00000000 --- a/data/gitignore/Fortran.gitignore +++ /dev/null @@ -1 +0,0 @@ -C++.gitignore \ No newline at end of file diff --git a/data/gitignore/FuelPHP.gitignore b/data/gitignore/FuelPHP.gitignore deleted file mode 100644 index d69f71f4..00000000 --- a/data/gitignore/FuelPHP.gitignore +++ /dev/null @@ -1,21 +0,0 @@ -# the composer package lock file and install directory -# Commit your application's lock file http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file -# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file -# /composer.lock -/fuel/vendor - -# the fuelphp document -/docs/ - -# you may install these packages with `oil package`. -# http://fuelphp.com/docs/packages/oil/package.html -# /fuel/packages/auth/ -# /fuel/packages/email/ -# /fuel/packages/oil/ -# /fuel/packages/orm/ -# /fuel/packages/parser/ - -# dynamically generated files -/fuel/app/logs/*/*/* -/fuel/app/cache/*/* -/fuel/app/config/crypt.php diff --git a/data/gitignore/GWT.gitignore b/data/gitignore/GWT.gitignore deleted file mode 100644 index a01e7fcd..00000000 --- a/data/gitignore/GWT.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -*.class - -# Package Files # -*.jar -*.war - -# gwt caches and compiled units # -war/gwt_bree/ -gwt-unitCache/ - -# boilerplate generated classes # -.apt_generated/ - -# more caches and things from deploy # -war/WEB-INF/deploy/ -war/WEB-INF/classes/ - -#compilation logs -.gwt/ - -#gwt junit compilation files -www-test/ - -#old GWT (1.5) created this dir -.gwt-tmp/ diff --git a/data/gitignore/Gcov.gitignore b/data/gitignore/Gcov.gitignore deleted file mode 100644 index a6451430..00000000 --- a/data/gitignore/Gcov.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# gcc coverage testing tool files - -*.gcno -*.gcda -*.gcov diff --git a/data/gitignore/GitBook.gitignore b/data/gitignore/GitBook.gitignore deleted file mode 100644 index 4cb12d8d..00000000 --- a/data/gitignore/GitBook.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# Node rules: -## Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -## Dependency directory -## Commenting this out is preferred by some people, see -## https://docs.npmjs.com/misc/faq#should-i-check-my-node_modules-folder-into-git -node_modules - -# Book build output -_book - -# eBook build output -*.epub -*.mobi -*.pdf diff --git a/data/gitignore/GitHubPages.gitignore b/data/gitignore/GitHubPages.gitignore deleted file mode 100644 index 807c07fc..00000000 --- a/data/gitignore/GitHubPages.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -# This .gitignore is appropriate for repositories deployed to GitHub Pages and using -# a Gemfile as specified at https://github.com/github/pages-gem#conventional - -# Basic Jekyll gitignores (synchronize to Jekyll.gitignore) -_site/ -.sass-cache/ -.jekyll-cache/ -.jekyll-metadata - -# Additional Ruby/bundler ignore for when you run: bundle install -/vendor - -# Specific ignore for GitHub Pages -# GitHub Pages will always use its own deployed version of pages-gem -# This means GitHub Pages will NOT use your Gemfile.lock and therefore it is -# counterproductive to check this file into the repository. -# Details at https://github.com/github/pages-gem/issues/768 -Gemfile.lock diff --git a/data/gitignore/Gleam.gitignore b/data/gitignore/Gleam.gitignore deleted file mode 100644 index 599be4eb..00000000 --- a/data/gitignore/Gleam.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -*.beam -*.ez -/build -erl_crash.dump diff --git a/data/gitignore/Global/AL.gitignore b/data/gitignore/Global/AL.gitignore deleted file mode 100644 index 3cdf36b7..00000000 --- a/data/gitignore/Global/AL.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -# Local History for Visual Studio Code -.history/ -*.app -.snapshots/* diff --git a/data/gitignore/Global/Agents.gitignore b/data/gitignore/Global/Agents.gitignore deleted file mode 100644 index aa75b385..00000000 --- a/data/gitignore/Global/Agents.gitignore +++ /dev/null @@ -1,68 +0,0 @@ -# AI agents and assistants -# -# Some common agent instruction and project configuration files are listed -# below as commented-out examples. They are often intentionally committed and -# shared with a team, so only uncomment them if they are local-only in your -# project. - -# GEMINI.md -# WARP.md -# CRUSH.md -# QWEN.md - -# OpenAI Codex -# AGENTS.md -# .codex/ - -# Aider -.aider.input.history -.aider.chat.history.md -.aider.llm.history -.aider.tags.cache.v* -# .aiderignore - -# Claude Code -.claude/*.local.json -.claude/**/*.log -CLAUDE.local.md -# .claude/ - -# Gemini CLI -gemini-debug.log -.gemini-clipboard/ -# .gemini/ - -# Cursor AI -# .cursorrules -# .cursor/ -# .cursor.json -# .cursor-settings.yaml - -# Continue -# .continue/ -# .continuerc.json - -# Cline -# .cline/ -# .clinerules -# cline.json - -# Other agent/editor project config -# .warp/ -# .crush/ -# .codeium/ -# .deepseek/ -# .amazon-codewhisperer/ -# .tabnineignore -# .tabnine/ - -# GitHub Copilot -# .github/copilot-instructions.md - -# Windsurf Editor -# .windsurfrules -# .windsurf/ - -# Replit AI Development -# .replit -# replit.nix diff --git a/data/gitignore/Global/Anjuta.gitignore b/data/gitignore/Global/Anjuta.gitignore deleted file mode 100644 index 20dd42c5..00000000 --- a/data/gitignore/Global/Anjuta.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Local configuration folder and symbol database -/.anjuta/ -/.anjuta_sym_db.db diff --git a/data/gitignore/Global/Ansible.gitignore b/data/gitignore/Global/Ansible.gitignore deleted file mode 100644 index 7ca0eec5..00000000 --- a/data/gitignore/Global/Ansible.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# The default root path for Ansible config files on the controller -.ansible/ - -# Retry files generated for failed Ansible playbook runs -*.retry diff --git a/data/gitignore/Global/Archives.gitignore b/data/gitignore/Global/Archives.gitignore deleted file mode 100644 index 8c92521b..00000000 --- a/data/gitignore/Global/Archives.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -# It's better to unpack these files and commit the raw source because -# git has its own built in compression methods. -*.7z -*.jar -*.rar -*.zip -*.gz -*.gzip -*.tgz -*.bzip -*.bzip2 -*.bz2 -*.xz -*.lzma -*.cab -*.xar -*.zst -*.tzst - -# Packing-only formats -*.iso -*.tar - -# Package management formats -*.dmg -*.xpi -*.gem -*.egg -*.deb -*.rpm -*.msi -*.msm -*.msp -*.txz diff --git a/data/gitignore/Global/Backup.gitignore b/data/gitignore/Global/Backup.gitignore deleted file mode 100644 index 99a00d3a..00000000 --- a/data/gitignore/Global/Backup.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -# Generic backup files -*.bak -*.back -*.backup - -# Norton Ghost backup files -*.gho - -# Generic original files -*.ori -*.orig -*.original - -# Generic temporary files -*.tmp -*.temp -*.temporary diff --git a/data/gitignore/Global/Bazaar.gitignore b/data/gitignore/Global/Bazaar.gitignore deleted file mode 100644 index 3cbbcbd1..00000000 --- a/data/gitignore/Global/Bazaar.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.bzr/ -.bzrignore diff --git a/data/gitignore/Global/BricxCC.gitignore b/data/gitignore/Global/BricxCC.gitignore deleted file mode 100644 index c1d16a46..00000000 --- a/data/gitignore/Global/BricxCC.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Bricx Command Center IDE -# http://bricxcc.sourceforge.net -*.bak -*.sym diff --git a/data/gitignore/Global/CVS.gitignore b/data/gitignore/Global/CVS.gitignore deleted file mode 100644 index 1695352e..00000000 --- a/data/gitignore/Global/CVS.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/CVS/* -**/CVS/* -.cvsignore -*/.cvsignore diff --git a/data/gitignore/Global/Calabash.gitignore b/data/gitignore/Global/Calabash.gitignore deleted file mode 100644 index 8a75b329..00000000 --- a/data/gitignore/Global/Calabash.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Calabash / Cucumber -rerun/ -reports/ -screenshots/ -screenshot*.png -test-servers/ - -# bundler -.bundle -vendor diff --git a/data/gitignore/Global/Cloud9.gitignore b/data/gitignore/Global/Cloud9.gitignore deleted file mode 100644 index 3f4384df..00000000 --- a/data/gitignore/Global/Cloud9.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Cloud9 IDE - http://c9.io -.c9revisions -.c9 diff --git a/data/gitignore/Global/CodeKit.gitignore b/data/gitignore/Global/CodeKit.gitignore deleted file mode 100644 index 09b84126..00000000 --- a/data/gitignore/Global/CodeKit.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# General CodeKit files to ignore -config.codekit -config.codekit3 -/min diff --git a/data/gitignore/Global/Cursor.gitignore b/data/gitignore/Global/Cursor.gitignore deleted file mode 100644 index 234f905b..00000000 --- a/data/gitignore/Global/Cursor.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.cursorignore -.cursorindexingignore diff --git a/data/gitignore/Global/DartEditor.gitignore b/data/gitignore/Global/DartEditor.gitignore deleted file mode 100644 index 948920b4..00000000 --- a/data/gitignore/Global/DartEditor.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.project -.buildlog diff --git a/data/gitignore/Global/Diff.gitignore b/data/gitignore/Global/Diff.gitignore deleted file mode 100644 index 59491b44..00000000 --- a/data/gitignore/Global/Diff.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.patch -*.diff diff --git a/data/gitignore/Global/Dreamweaver.gitignore b/data/gitignore/Global/Dreamweaver.gitignore deleted file mode 100644 index 0621a3d5..00000000 --- a/data/gitignore/Global/Dreamweaver.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# DW Dreamweaver added files -_notes -_compareTemp -configs/ -dwsync.xml -dw_php_codehinting.config -*.mno diff --git a/data/gitignore/Global/Dropbox.gitignore b/data/gitignore/Global/Dropbox.gitignore deleted file mode 100644 index 40f4a469..00000000 --- a/data/gitignore/Global/Dropbox.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Dropbox settings and caches -.dropbox -.dropbox.attr -.dropbox.cache diff --git a/data/gitignore/Global/Eclipse.gitignore b/data/gitignore/Global/Eclipse.gitignore deleted file mode 100644 index 85723da8..00000000 --- a/data/gitignore/Global/Eclipse.gitignore +++ /dev/null @@ -1,60 +0,0 @@ -.metadata -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.settings/ -.loadpath -.recommenders - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# PyDev specific (Python IDE for Eclipse) -*.pydevproject - -# CDT-specific (C/C++ Development Tooling) -.cproject - -# CDT- autotools -.autotools - -# Java annotation processor (APT) -.factorypath - -# PDT-specific (PHP Development Tools) -.buildpath - -# sbteclipse plugin -.target - -# Tern plugin -.tern-project - -# TeXlipse plugin -.texlipse - -# STS (Spring Tool Suite) -.springBeans - -# Code Recommenders -.recommenders/ - -# Annotation Processing -.apt_generated/ -.apt_generated_tests/ - -# Scala IDE specific (Scala & Java development for Eclipse) -.cache-main -.scala_dependencies -.worksheet - -# Uncomment this line if you wish to ignore the project description file. -# Typically, this file would be tracked if it contains build/dependency configurations: -#.project diff --git a/data/gitignore/Global/EiffelStudio.gitignore b/data/gitignore/Global/EiffelStudio.gitignore deleted file mode 100644 index f41b4f70..00000000 --- a/data/gitignore/Global/EiffelStudio.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# The compilation directory -EIFGENs diff --git a/data/gitignore/Global/Emacs.gitignore b/data/gitignore/Global/Emacs.gitignore deleted file mode 100644 index 489b8928..00000000 --- a/data/gitignore/Global/Emacs.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -# -*- mode: gitignore; -*- -*~ -\#*\# -/.emacs.desktop -/.emacs.desktop.lock -*.elc -auto-save-list -tramp -.\#* - -# Org-mode -.org-id-locations -*_archive - -# flymake-mode -*_flymake.* - -# eshell files -/eshell/history -/eshell/lastdir - -# elpa packages -/elpa/ - -# reftex files -*.rel - -# AUCTeX auto folder -/auto/ - -# cask packages -.cask/ -dist/ - -# Flycheck -flycheck_*.el - -# server auth directory -/server/ - -# projectiles files -.projectile - -# directory configuration -.dir-locals.el - -# network security -/network-security.data - -# undo-tree -*.~undo-tree~ diff --git a/data/gitignore/Global/Ensime.gitignore b/data/gitignore/Global/Ensime.gitignore deleted file mode 100644 index f2daebb9..00000000 --- a/data/gitignore/Global/Ensime.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ensime specific -.ensime -.ensime_cache/ -.ensime_lucene/ diff --git a/data/gitignore/Global/Espresso.gitignore b/data/gitignore/Global/Espresso.gitignore deleted file mode 100644 index 1234530b..00000000 --- a/data/gitignore/Global/Espresso.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.esproj diff --git a/data/gitignore/Global/FlexBuilder.gitignore b/data/gitignore/Global/FlexBuilder.gitignore deleted file mode 100644 index bbbfb91d..00000000 --- a/data/gitignore/Global/FlexBuilder.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -bin/ -bin-debug/ -bin-release/ diff --git a/data/gitignore/Global/GPG.gitignore b/data/gitignore/Global/GPG.gitignore deleted file mode 100644 index 7740a015..00000000 --- a/data/gitignore/Global/GPG.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -secring.* - diff --git a/data/gitignore/Global/Images.gitignore b/data/gitignore/Global/Images.gitignore deleted file mode 100644 index 97dcdbe6..00000000 --- a/data/gitignore/Global/Images.gitignore +++ /dev/null @@ -1,63 +0,0 @@ -# JPEG -*.jpg -*.jpeg -*.jpe -*.jif -*.jfif -*.jfi - -# JPEG 2000 -*.jp2 -*.j2k -*.jpf -*.jpx -*.jpm -*.mj2 - -# JPEG XR -*.jxr -*.hdp -*.wdp - -# Graphics Interchange Format -*.gif - -# RAW -*.raw - -# Web P -*.webp - -# Portable Network Graphics -*.png - -# Animated Portable Network Graphics -*.apng - -# Multiple-image Network Graphics -*.mng - -# Tagged Image File Format -*.tiff -*.tif - -# Scalable Vector Graphics -*.svg -*.svgz - -# Portable Document Format -*.pdf - -# X BitMap -*.xbm - -# BMP -*.bmp -*.dib - -# ICO -*.ico - -# 3D Images -*.3dm -*.max diff --git a/data/gitignore/Global/JDeveloper.gitignore b/data/gitignore/Global/JDeveloper.gitignore deleted file mode 100644 index 5bba6f37..00000000 --- a/data/gitignore/Global/JDeveloper.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -# default application storage directory used by the IDE Performance Cache feature -.data/ - -# used for ADF styles caching -temp/ - -# default output directories -classes/ -deploy/ -javadoc/ - -# lock file, a part of Oracle Credential Store Framework -cwallet.sso.lck \ No newline at end of file diff --git a/data/gitignore/Global/JEnv.gitignore b/data/gitignore/Global/JEnv.gitignore deleted file mode 100644 index d838300a..00000000 --- a/data/gitignore/Global/JEnv.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# JEnv local Java version configuration file -.java-version - -# Used by previous versions of JEnv -.jenv-version diff --git a/data/gitignore/Global/JetBrains.gitignore b/data/gitignore/Global/JetBrains.gitignore deleted file mode 100644 index 6e0af9c4..00000000 --- a/data/gitignore/Global/JetBrains.gitignore +++ /dev/null @@ -1,87 +0,0 @@ -# Covers JetBrains IDEs: IntelliJ, GoLand, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/**/usage.statistics.xml -.idea/**/dictionaries -.idea/**/shelf - -# AWS User-specific -.idea/**/aws.xml - -# Generated files -.idea/**/contentModel.xml - -# Sensitive or high-churn files -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml -.idea/**/dbnavigator.xml - -# Gradle -.idea/**/gradle.xml -.idea/**/libraries - -# Gradle and Maven with auto-import -# When using Gradle or Maven with auto-import, you should exclude module files, -# since they will be recreated, and may cause churn. Uncomment if using -# auto-import. -# .idea/artifacts -# .idea/compiler.xml -# .idea/jarRepositories.xml -# .idea/modules.xml -# .idea/*.iml -# .idea/modules -# *.iml -# *.ipr - -# CMake -cmake-build-*/ - -# Mongo Explorer plugin -.idea/**/mongoSettings.xml - -# File-based project format -*.iws - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# SonarLint plugin -.idea/sonarlint/ -# see https://community.sonarsource.com/t/is-the-file-idea-idea-idea-sonarlint-xml-intended-to-be-under-source-control/121119 -.idea/sonarlint.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -# Editor-based HTTP Client -.idea/httpRequests -http-client.private.env.json - -# Android studio 3.1+ serialized cache file -.idea/caches/build_file_checksums.ser - -# Apifox Helper cache -.idea/.cache/.Apifox_Helper -.idea/ApifoxUploaderProjectSetting.xml - -# Github Copilot persisted session migrations, see: https://github.com/microsoft/copilot-intellij-feedback/issues/712#issuecomment-3322062215 -.idea/**/copilot.data.migration.*.xml diff --git a/data/gitignore/Global/KDevelop4.gitignore b/data/gitignore/Global/KDevelop4.gitignore deleted file mode 100644 index 7ac57b1a..00000000 --- a/data/gitignore/Global/KDevelop4.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.kdev4 -.kdev4/ diff --git a/data/gitignore/Global/Kate.gitignore b/data/gitignore/Global/Kate.gitignore deleted file mode 100644 index 7ff06ce5..00000000 --- a/data/gitignore/Global/Kate.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Swap Files # -.*.kate-swp -.swp.* diff --git a/data/gitignore/Global/Lazarus.gitignore b/data/gitignore/Global/Lazarus.gitignore deleted file mode 100644 index b32943f1..00000000 --- a/data/gitignore/Global/Lazarus.gitignore +++ /dev/null @@ -1,30 +0,0 @@ -# Lazarus compiler-generated binaries (safe to delete) -*.exe -*.dll -*.so -*.dylib -*.lrs -*.res -*.compiled -*.dbg -*.ppu -*.o -*.or -*.a - -# Lazarus autogenerated files (duplicated info) -*.rst -*.rsj -*.lrt - -# Lazarus local files (user-specific info) -*.lps - -# Lazarus backups and unit output folders. -# These can be changed by user in Lazarus/project options. -backup/ -*.bak -lib/ - -# Application bundle for Mac OS -*.app/ diff --git a/data/gitignore/Global/Lefthook.gitignore b/data/gitignore/Global/Lefthook.gitignore deleted file mode 100644 index 35409f0e..00000000 --- a/data/gitignore/Global/Lefthook.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# https://lefthook.dev/configuration/#config-file-name -/.lefthook-local.json -/.lefthook-local.toml -/.lefthook-local.yaml -/.lefthook-local.yml -/lefthook-local.json -/lefthook-local.toml -/lefthook-local.yaml -/lefthook-local.yml -/.config/lefthook-local.json -/.config/lefthook-local.toml -/.config/lefthook-local.yaml -/.config/lefthook-local.yml - -# https://lefthook.dev/configuration/source_dir_local.html -/.lefthook-local/ diff --git a/data/gitignore/Global/LibreOffice.gitignore b/data/gitignore/Global/LibreOffice.gitignore deleted file mode 100644 index 586beac9..00000000 --- a/data/gitignore/Global/LibreOffice.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# LibreOffice locks -.~lock.*# diff --git a/data/gitignore/Global/Linux.gitignore b/data/gitignore/Global/Linux.gitignore deleted file mode 100644 index 35ea8c67..00000000 --- a/data/gitignore/Global/Linux.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -*~ - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# Metadata left by Dolphin file manager, which comes with KDE Plasma -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* - -# Log files created by default by the nohup command -nohup.out diff --git a/data/gitignore/Global/LyX.gitignore b/data/gitignore/Global/LyX.gitignore deleted file mode 100644 index 8efe0195..00000000 --- a/data/gitignore/Global/LyX.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore LyX backup and autosave files -# http://www.lyx.org/ -*.lyx~ -*.lyx# diff --git a/data/gitignore/Global/MATLAB.gitignore b/data/gitignore/Global/MATLAB.gitignore deleted file mode 100644 index 6724bee3..00000000 --- a/data/gitignore/Global/MATLAB.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -# Autosave files -*.asv -*.m~ -*.autosave -*.slx.r* -*.mdl.r* -*.bak - -# Derived content-obscured files -*.p - -# Compiled MEX files -*.mex* - -# Packaged app and toolbox files -*.mlappinstall -*.mltbx - -# Deployable archives -*.ctf - -# Generated helpsearch folders -helpsearch*/ - -# Code generation folders -slprj/ -sccprj/ -codegen/ - -# Cache files -*.slxc - -# Cloud based storage dotfile -.MATLABDriveTag diff --git a/data/gitignore/Global/Mercurial.gitignore b/data/gitignore/Global/Mercurial.gitignore deleted file mode 100644 index e65d1137..00000000 --- a/data/gitignore/Global/Mercurial.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -.hg/ -.hgignore -.hgsigs -.hgsub -.hgsubstate -.hgtags diff --git a/data/gitignore/Global/Metals.gitignore b/data/gitignore/Global/Metals.gitignore deleted file mode 100644 index 779e796b..00000000 --- a/data/gitignore/Global/Metals.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# Metals (Scala Language Server) -# Reference: https://scalameta.org/metals/docs/editors/vscode#files-and-directories-to-include-in-your-gitignore -.metals/ -.bloop/ -.ammonite/ -metals.sbt diff --git a/data/gitignore/Global/MicrosoftOffice.gitignore b/data/gitignore/Global/MicrosoftOffice.gitignore deleted file mode 100644 index 6501a7d3..00000000 --- a/data/gitignore/Global/MicrosoftOffice.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -*.tmp - -# Word temporary -~$*.doc* -~$*.dot* - -# Word Auto Backup File -Backup of *.doc* - -# Excel temporary -~$*.xls* - -# Excel Backup File -*.xlk - -# PowerPoint temporary -~$*.ppt* - -# Visio autosave temporary files -*.~vsd* diff --git a/data/gitignore/Global/Momentics.gitignore b/data/gitignore/Global/Momentics.gitignore deleted file mode 100644 index b14db2d8..00000000 --- a/data/gitignore/Global/Momentics.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Built files -x86/ -arm/ -arm-p/ -translations/*.qm - -# IDE settings -.settings/ diff --git a/data/gitignore/Global/MonoDevelop.gitignore b/data/gitignore/Global/MonoDevelop.gitignore deleted file mode 100644 index ef38d06b..00000000 --- a/data/gitignore/Global/MonoDevelop.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -#User Specific -*.userprefs -*.usertasks - -#Mono Project Files -*.pidb -*.resources -test-results/ diff --git a/data/gitignore/Global/NetBeans.gitignore b/data/gitignore/Global/NetBeans.gitignore deleted file mode 100644 index 45112875..00000000 --- a/data/gitignore/Global/NetBeans.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -**/nbproject/private/ -**/nbproject/Makefile-*.mk -**/nbproject/Package-*.bash -build/ -nbbuild/ -dist/ -nbdist/ -.nb-gradle/ diff --git a/data/gitignore/Global/Ninja.gitignore b/data/gitignore/Global/Ninja.gitignore deleted file mode 100644 index 50e58f24..00000000 --- a/data/gitignore/Global/Ninja.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.ninja_deps -.ninja_log diff --git a/data/gitignore/Global/NotepadPP.gitignore b/data/gitignore/Global/NotepadPP.gitignore deleted file mode 100644 index 8fbda83a..00000000 --- a/data/gitignore/Global/NotepadPP.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Notepad++ backups # -*.bak diff --git a/data/gitignore/Global/Octave.gitignore b/data/gitignore/Global/Octave.gitignore deleted file mode 120000 index b1d60544..00000000 --- a/data/gitignore/Global/Octave.gitignore +++ /dev/null @@ -1 +0,0 @@ -MATLAB.gitignore \ No newline at end of file diff --git a/data/gitignore/Global/OhMyOpenAgent.gitignore b/data/gitignore/Global/OhMyOpenAgent.gitignore deleted file mode 100644 index 1db73771..00000000 --- a/data/gitignore/Global/OhMyOpenAgent.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.sisyphus/* -!.sisyphus/rules/ diff --git a/data/gitignore/Global/Otto.gitignore b/data/gitignore/Global/Otto.gitignore deleted file mode 100644 index 5aa263f9..00000000 --- a/data/gitignore/Global/Otto.gitignore +++ /dev/null @@ -1 +0,0 @@ -.otto/ diff --git a/data/gitignore/Global/PSoCCreator.gitignore b/data/gitignore/Global/PSoCCreator.gitignore deleted file mode 100644 index 15ae040b..00000000 --- a/data/gitignore/Global/PSoCCreator.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -# Project Settings -*.cywrk.* -*.cyprj.* - -# Generated Assets and Resources -Debug/ -Release/ -Export/ -*/codegentemp -*/Generated_Source -*_datasheet.pdf -*_timing.html -*.cycdx -*.cyfit -*.rpt -*.svd -*.log -*.zip diff --git a/data/gitignore/Global/Patch.gitignore b/data/gitignore/Global/Patch.gitignore deleted file mode 100644 index 6ffab9ad..00000000 --- a/data/gitignore/Global/Patch.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.orig -*.rej diff --git a/data/gitignore/Global/PlatformIO.gitignore b/data/gitignore/Global/PlatformIO.gitignore deleted file mode 100644 index 2de98aba..00000000 --- a/data/gitignore/Global/PlatformIO.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -.pio -.pioenvs -.piolibdeps -.vscode/.browse.c_cpp.db* -.vscode/c_cpp_properties.json -.vscode/launch.json diff --git a/data/gitignore/Global/PuTTY.gitignore b/data/gitignore/Global/PuTTY.gitignore deleted file mode 100644 index c37466b1..00000000 --- a/data/gitignore/Global/PuTTY.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Private key -*.ppk diff --git a/data/gitignore/Global/README.md b/data/gitignore/Global/README.md deleted file mode 100644 index 6e57d87f..00000000 --- a/data/gitignore/Global/README.md +++ /dev/null @@ -1,10 +0,0 @@ -## Globally Useful gitignores - -This directory contains globally useful gitignores, -e.g. OS-specific and editor specific. - -For more on global gitignores: - - -And a good blog post about 'em: - diff --git a/data/gitignore/Global/Redcar.gitignore b/data/gitignore/Global/Redcar.gitignore deleted file mode 100644 index b4a9d1d6..00000000 --- a/data/gitignore/Global/Redcar.gitignore +++ /dev/null @@ -1 +0,0 @@ -.redcar diff --git a/data/gitignore/Global/Redis.gitignore b/data/gitignore/Global/Redis.gitignore deleted file mode 100644 index 57c1c230..00000000 --- a/data/gitignore/Global/Redis.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Ignore redis binary dump (dump.rdb) files - -*.rdb diff --git a/data/gitignore/Global/SBT.gitignore b/data/gitignore/Global/SBT.gitignore deleted file mode 100644 index 98ee5070..00000000 --- a/data/gitignore/Global/SBT.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -# Simple Build Tool -# http://www.scala-sbt.org/release/docs/Getting-Started/Directories.html#configuring-version-control - -dist/* -target/ -lib_managed/ -src_managed/ -project/boot/ -project/plugins/project/ -.history -.cache -.lib/ -.bsp/ diff --git a/data/gitignore/Global/STM32CubeIDE.gitignore b/data/gitignore/Global/STM32CubeIDE.gitignore deleted file mode 100644 index fc7ee5c7..00000000 --- a/data/gitignore/Global/STM32CubeIDE.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -# STM32CubeIDE specific files - -# Project-specific settings. Ignore it if developers have different preferences. -# However, if you want all team members to use the same code formatting and settings, -# consider including the .settings folder in the repository. - -# /.settings/ - -# Ignore Eclipse-based IDE launch configurations. -# Uncomment if you want each developer to have their own unique debug configurations. -#*.launch - -# Ignore any JLink-related files (debug configurations). -# Uncomment if you want each developer to have their own unique debug configurations. -#*.jlink - -# Ignore log files generated by the IDE. -# These are not necessary for version control. -*.log - -# Build files - -# Ignore build output directories. -# These are not needed in the repository as they are generated during the build process. -Debug/ -Release/ - -# Ignore common binary and object files generated during compilation. -# They should not be included in the repository as they are build artifacts. -*.elf -*.map -*.bin -*.hex -*.srec -*.lst -*.o -*.d -*.a -*.su -*.crl - -#TouchGFX files (in case your project has touchGFX) -TouchGFX/generated -TouchGFX/build -TouchGFX/simulator/msvs/.vs - -# Backup files - -# Ignore temporary and backup files generated by the operating system and editor. -# These are not needed in the repository. -*.bak diff --git a/data/gitignore/Global/SVN.gitignore b/data/gitignore/Global/SVN.gitignore deleted file mode 100644 index 1b53ace6..00000000 --- a/data/gitignore/Global/SVN.gitignore +++ /dev/null @@ -1 +0,0 @@ -.svn/ diff --git a/data/gitignore/Global/SlickEdit.gitignore b/data/gitignore/Global/SlickEdit.gitignore deleted file mode 100644 index f30b8da4..00000000 --- a/data/gitignore/Global/SlickEdit.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -# SlickEdit workspace and project files are ignored by default because -# typically they are considered to be developer-specific and not part of a -# project. -*.vpw -*.vpj - -# SlickEdit workspace history and tag files always contain user-specific -# data so they should not be stored in a repository. -*.vpwhistu -*.vpwhist -*.vtg diff --git a/data/gitignore/Global/Stata.gitignore b/data/gitignore/Global/Stata.gitignore deleted file mode 100644 index 288abf8a..00000000 --- a/data/gitignore/Global/Stata.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -# .gitignore file for git projects containing Stata files -# Commercial statistical software: http://www.stata.com - -# Stata dataset and output files -*.dta -*.gph -*.log -*.smcl -*.stpr -*.stsem -~*.stswp - -# Graphic export files from Stata -# Stata command graph export: http://www.stata.com/manuals14/g-2graphexport.pdf -# -# You may add graphic export files to your .gitignore. However you should be -# aware that this will exclude all image files from this main directory -# and subdirectories. -# *.ps -# *.eps -# *.wmf -# *.emf -# *.pdf -# *.png -# *.tif diff --git a/data/gitignore/Global/SublimeText.gitignore b/data/gitignore/Global/SublimeText.gitignore deleted file mode 100644 index fdf0abb4..00000000 --- a/data/gitignore/Global/SublimeText.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -# Cache files for Sublime Text -*.tmlanguage.cache -*.tmPreferences.cache -*.stTheme.cache - -# Workspace files are user-specific -*.sublime-workspace - -# Project files should be checked into the repository, unless a significant -# proportion of contributors will probably not be using Sublime Text -# *.sublime-project - -# SFTP configuration file -sftp-config.json -sftp-config-alt*.json - -# Package control specific files -Package Control.last-run -Package Control.ca-list -Package Control.ca-bundle -Package Control.system-ca-bundle -Package Control.cache/ -Package Control.ca-certs/ -Package Control.merged-ca-bundle -Package Control.user-ca-bundle -oscrypto-ca-bundle.crt -bh_unicode_properties.cache - -# Sublime-github package stores a github token in this file -# https://packagecontrol.io/packages/sublime-github -GitHub.sublime-settings diff --git a/data/gitignore/Global/Syncthing.gitignore b/data/gitignore/Global/Syncthing.gitignore deleted file mode 100644 index e18c9a8b..00000000 --- a/data/gitignore/Global/Syncthing.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Syncthing caches -.stversions diff --git a/data/gitignore/Global/SynopsysVCS.gitignore b/data/gitignore/Global/SynopsysVCS.gitignore deleted file mode 100644 index ad751f6b..00000000 --- a/data/gitignore/Global/SynopsysVCS.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# Waveform formats -*.vcd -*.vpd -*.evcd -*.fsdb - -# Default name of the simulation executable. A different name can be -# specified with this switch (the associated daidir database name is -# also taken from here): -o / -simv - -# Generated for Verilog and VHDL top configs -simv.daidir/ -simv.db.dir/ - -# Infrastructure necessary to co-simulate SystemC models with -# Verilog/VHDL models. An alternate directory may be specified with this -# switch: -Mdir= -csrc/ - -# Log file - the following switch allows to specify the file that will be -# used to write all messages from simulation: -l -*.log - -# Coverage results (generated with urg) and database location. The -# following switch can also be used: urg -dir .vdb -simv.vdb/ -urgReport/ - -# DVE and UCLI related files. -DVEfiles/ -ucli.key - -# When the design is elaborated for DirectC, the following file is created -# with declarations for C/C++ functions. -vc_hdrs.h diff --git a/data/gitignore/Global/Tags.gitignore b/data/gitignore/Global/Tags.gitignore deleted file mode 100644 index 91927af4..00000000 --- a/data/gitignore/Global/Tags.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -# Ignore tags created by etags, ctags, gtags (GNU global) and cscope -TAGS -.TAGS -!TAGS/ -tags -.tags -!tags/ -gtags.files -GTAGS -GRTAGS -GPATH -GSYMS -cscope.files -cscope.out -cscope.in.out -cscope.po.out - diff --git a/data/gitignore/Global/TextMate.gitignore b/data/gitignore/Global/TextMate.gitignore deleted file mode 100644 index 41e8d07a..00000000 --- a/data/gitignore/Global/TextMate.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.tmproj -*.tmproject -tmtags diff --git a/data/gitignore/Global/TortoiseGit.gitignore b/data/gitignore/Global/TortoiseGit.gitignore deleted file mode 100644 index db89590a..00000000 --- a/data/gitignore/Global/TortoiseGit.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Project-level settings -/.tgitconfig diff --git a/data/gitignore/Global/Vagrant.gitignore b/data/gitignore/Global/Vagrant.gitignore deleted file mode 100644 index a8e23454..00000000 --- a/data/gitignore/Global/Vagrant.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# General -.vagrant/ - -# Log files (if you are creating logs in debug mode, uncomment this) -# *.log diff --git a/data/gitignore/Global/Vim.gitignore b/data/gitignore/Global/Vim.gitignore deleted file mode 100644 index cb8a0499..00000000 --- a/data/gitignore/Global/Vim.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -# Swap -[._]*.s[a-v][a-z] -# comment out the next line if you don't need vector files -!*.svg -[._]*.sw[a-p] -[._]s[a-rt-v][a-z] -[._]ss[a-gi-z] -[._]sw[a-p] - -# Session -Session.vim -Sessionx.vim - -# Temporary -.netrwhist -*~ -# Auto-generated tag files -tags -# Persistent undo -[._]*.un~ diff --git a/data/gitignore/Global/VirtualEnv.gitignore b/data/gitignore/Global/VirtualEnv.gitignore deleted file mode 100644 index 018afbf5..00000000 --- a/data/gitignore/Global/VirtualEnv.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -# Virtualenv -# https://realpython.com/python-virtual-environments-a-primer/#the-virtualenv-project -.venv/ -venv/ -.python-version - -# pyenv: Simple Python Version Management -pyvenv.cfg - -# pip: package installer for Python -pip-selfcheck.json - -# Custom python interpreter -.Python -[Bb]in -[Ii]nclude -[Ll]ib -[Ll]ib64 -[Ll]ocal -[Ss]cripts diff --git a/data/gitignore/Global/Virtuoso.gitignore b/data/gitignore/Global/Virtuoso.gitignore deleted file mode 100644 index 2de03673..00000000 --- a/data/gitignore/Global/Virtuoso.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -# Gitignore for Cadence Virtuoso -################################################################ - -# Log files -*.log -panic*.log.* - -# OpenAccess database lock files -*.cdslck* - -# Run directories for layout vs. schematic and design rule check -lvsRunDir/* -drcRunDir/* - -# Abstract generation tool -abstract.log* -abstract.record* - diff --git a/data/gitignore/Global/VisualStudioCode.gitignore b/data/gitignore/Global/VisualStudioCode.gitignore deleted file mode 100644 index 12ee62bb..00000000 --- a/data/gitignore/Global/VisualStudioCode.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -# Visual Studio Code -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -!.vscode/*.code-snippets -!*.code-workspace - -# Built Visual Studio Code Extensions -*.vsix diff --git a/data/gitignore/Global/WebMethods.gitignore b/data/gitignore/Global/WebMethods.gitignore deleted file mode 100644 index b383c25c..00000000 --- a/data/gitignore/Global/WebMethods.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -**/IntegrationServer/datastore/ -**/IntegrationServer/db/ -**/IntegrationServer/DocumentStore/ -**/IntegrationServer/lib/ -**/IntegrationServer/logs/ -**/IntegrationServer/replicate/ -**/IntegrationServer/sdk/ -**/IntegrationServer/support/ -**/IntegrationServer/update/ -**/IntegrationServer/userFtpRoot/ -**/IntegrationServer/web/ -**/IntegrationServer/WmRepository4/ -**/IntegrationServer/XAStore/ -**/IntegrationServer/packages/Wm*/ diff --git a/data/gitignore/Global/Windows.gitignore b/data/gitignore/Global/Windows.gitignore deleted file mode 100644 index 84bffec7..00000000 --- a/data/gitignore/Global/Windows.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Windows thumbnail cache files -Thumbs.db -Thumbs.db:encryptable -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk diff --git a/data/gitignore/Global/Xcode.gitignore b/data/gitignore/Global/Xcode.gitignore deleted file mode 100644 index 5073505e..00000000 --- a/data/gitignore/Global/Xcode.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -## User settings -xcuserdata/ diff --git a/data/gitignore/Global/XilinxISE.gitignore b/data/gitignore/Global/XilinxISE.gitignore deleted file mode 100644 index 4475f843..00000000 --- a/data/gitignore/Global/XilinxISE.gitignore +++ /dev/null @@ -1,67 +0,0 @@ -# intermediate build files -*.bgn -*.bit -*.bld -*.cmd_log -*.drc -*.ll -*.lso -*.msd -*.msk -*.ncd -*.ngc -*.ngd -*.ngr -*.pad -*.par -*.pcf -*.prj -*.ptwx -*.rbb -*.rbd -*.stx -*.syr -*.twr -*.twx -*.unroutes -*.ut -*.xpi -*.xst -*_bitgen.xwbt -*_envsettings.html -*_map.map -*_map.mrp -*_map.ngm -*_map.xrpt -*_ngdbuild.xrpt -*_pad.csv -*_pad.txt -*_par.xrpt -*_summary.html -*_summary.xml -*_usage.xml -*_xst.xrpt - -# iMPACT generated files -_impactbatch.log -impact.xsl -impact_impact.xwbt -ise_impact.cmd -webtalk_impact.xml - -# Core Generator generated files -xaw2verilog.log - -# project-wide generated files -*.gise -par_usage_statistics.html -usage_statistics_webtalk.html -webtalk.log -webtalk_pn.xml - -# generated folders -iseconfig/ -xlnx_auto_0_xdb/ -xst/ -_ngo/ -_xmsgs/ diff --git a/data/gitignore/Global/Zed.gitignore b/data/gitignore/Global/Zed.gitignore deleted file mode 100644 index bf14e0ef..00000000 --- a/data/gitignore/Global/Zed.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Zed -# https://zed.dev/docs/configuring-zed#settings-files -# -# Zed stores project settings in a .zed/ directory, similar to .vscode/. -# By default, ignore the directory but allow commonly shared config files. - -.zed/* -!.zed/settings.json -!.zed/tasks.json -!.zed/debug.json diff --git a/data/gitignore/Global/macOS.gitignore b/data/gitignore/Global/macOS.gitignore deleted file mode 100644 index e5328c06..00000000 --- a/data/gitignore/Global/macOS.gitignore +++ /dev/null @@ -1,57 +0,0 @@ -# General -.DS_Store -.localized -__MACOSX/ -.AppleDouble -.LSOverride -Icon[ ] - -# Resource forks -._* - -# Files and directories that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent -.com.apple.timemachine.supported -.PKInstallSandboxManager -.PKInstallSandboxManager-SystemSoftware -.hotfiles.btree -.vol -.file -.disk_label* -lost+found -.HFS+ Private Directory Data[ ] - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -# Mac OS 6 to 9 -Desktop DB -Desktop DF -TheFindByContentFolder -TheVolumeSettingsFolder -.FBCIndex -.FBCSemaphoreFile -.FBCLockFolder - -# Quota system -.quota.group -.quota.user -.quota.ops.group -.quota.ops.user - -# TimeMachine -Backups.backupdb -.MobileBackups -.MobileBackups.trash -MobileBackups.trash -tmbootpicker.efi diff --git a/data/gitignore/Global/mise.gitignore b/data/gitignore/Global/mise.gitignore deleted file mode 100644 index 8a09dc41..00000000 --- a/data/gitignore/Global/mise.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# https://mise.jdx.dev/configuration.html -# https://mise.jdx.dev/configuration/environments.html -.mise.*.local.toml -.mise.local.toml -mise.*.local.toml -mise.local.toml -.mise/*.local.toml -mise/*.local.toml - -# https://mise.jdx.dev/dev-tools/mise-lock.html#local-lockfiles -# https://mise.jdx.dev/dev-tools/mise-lock.html#environment-specific-lockfiles -mise.local.lock -mise.*.local.lock - -# https://mise.jdx.dev/configuration.html#tool-versions -#.tool-versions diff --git a/data/gitignore/Go.gitignore b/data/gitignore/Go.gitignore deleted file mode 100644 index a5bd2339..00000000 --- a/data/gitignore/Go.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -# If you prefer the allow list template instead of the deny list, see community template: -# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore -# -# Binaries for programs and plugins -*.exe -*.exe~ -*.dll -*.so -*.dylib - -# Test binary, built with `go test -c` -*.test - -# Code coverage profiles and other test artifacts -*.out -coverage.* -!coverage.go -*.coverprofile -profile.cov - -# Dependency directories (remove the comment below to include it) -# vendor/ - -# Go workspace file -go.work -go.work.sum - -# env file -.env - -# Editor/IDE -# .idea/ -# .vscode/ diff --git a/data/gitignore/Godot.gitignore b/data/gitignore/Godot.gitignore deleted file mode 100644 index f0d08d7b..00000000 --- a/data/gitignore/Godot.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -# Godot 4.2+ specific ignores -~*.dll - -# Godot 4+ specific ignores -.godot/ -.nomedia - -# Godot-specific ignores -.import/ -export.cfg -export_credentials.cfg -*.tmp - -# Imported translations (automatically generated from CSV files) -*.translation - -# Mono-specific ignores -.mono/ -data_*/ -mono_crash.*.json - -# Export outputs -*.exe -# Uncomment if your project does not version PCK files as runtime dependencies. -# *.pck diff --git a/data/gitignore/Gradle.gitignore b/data/gitignore/Gradle.gitignore deleted file mode 100644 index 903ca7fe..00000000 --- a/data/gitignore/Gradle.gitignore +++ /dev/null @@ -1,21 +0,0 @@ -.gradle -**/build/ -!**/src/**/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Avoid ignore Gradle wrapper properties -!gradle-wrapper.properties - -# Cache of project -.gradletasknamecache - -# Eclipse Gradle plugin generated files -# Eclipse Core -.project -# JDT-specific (Eclipse Java Development Tools) -.classpath diff --git a/data/gitignore/Grails.gitignore b/data/gitignore/Grails.gitignore deleted file mode 100644 index 9185f14c..00000000 --- a/data/gitignore/Grails.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -# .gitignore for Grails 1.2 and 1.3 -# Although this should work for most versions of grails, it is -# suggested that you use the "grails integrate-with --git" command -# to generate your .gitignore file. - -# web application files -/web-app/WEB-INF/classes - -# default HSQL database files for production mode -/prodDb.* - -# general HSQL database files -*Db.properties -*Db.script - -# logs -/stacktrace.log -/test/reports -/logs - -# project release file -/*.war - -# plugin release files -/*.zip -/plugin.xml - -# older plugin install locations -/plugins -/web-app/plugins - -# "temporary" build files -/target diff --git a/data/gitignore/HIP.gitignore b/data/gitignore/HIP.gitignore deleted file mode 100644 index 6eb329b1..00000000 --- a/data/gitignore/HIP.gitignore +++ /dev/null @@ -1,85 +0,0 @@ -# HIP.gitignore -# GitHub gitignore template for AMD HIP (ROCm) projects -# -# Reference: -# Official AMD ROCm HIP .gitignore: https://github.com/ROCm/hip/blob/amd-staging/.gitignore - -# 1. Build directories and files -# common build directory -/build/ -# CMake internal files -/CMakeFiles/ -# CMake cache file -/CMakeCache.txt -# autogenerated Makefile -/Makefile -# install script -/cmake_install.cmake -# install manifest list -/install_manifest.txt -# Ninja dependency files -*.ninja-dep -# Ninja log files -*.ninja_log -# Meson log directory -meson-logs/ - -# 2. Compilation outputs and intermediates -# object files -*.o -# Windows object files -*.obj -# shared libraries -*.so -# static librarie -*.a -# dependency files -*.d -# precompiled headers -*.gch -# preprocessed output -*.ii -# C++ preprocessed output -*.ii.cpp -# generic executable outputs -*.out -# Windows executables -*.exe - -# 3. HIP/ROCm specific binaries and intermediates -# ROCm compiled binary -*.hsaco -# assembly output -*.s -# autogenerated kernel sources -*.kernels.cpp -# hipcc intermediate outputs -*.hip.cpp.* - -# 4. Official sample binaries and tutorial outputs -# sample binary -bin/hipInfo -# sample binary -bin/hipBusBandwidth -# sample binary -bin/hipDispatchLatency -# sample tool -bin/hipify-clang -# tutorial outputs -samples/**/*.out -# ISA/code dumps -samples/**/*.code -# compiled binaries -samples/**/*.hsaco -# kernel code outputs -samples/**/*.co - -# 5. Tags, logs and test outputs -# ctags index -tags -# log files -*.log -# custom test output directory -/tests_output/ -# custom sample output directory -/samples_output/ diff --git a/data/gitignore/Haskell.gitignore b/data/gitignore/Haskell.gitignore deleted file mode 100644 index 4c9e245b..00000000 --- a/data/gitignore/Haskell.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -dist -dist-* -cabal-dev -*.o -*.hi -*.hie -*.chi -*.chs.h -*.dyn_o -*.dyn_hi -.hpc -.hsenv -.cabal-sandbox/ -cabal.sandbox.config -*.prof -*.aux -*.hp -*.eventlog -.stack-work/ -cabal.project.local -cabal.project.local~ -.HTF/ -.ghc.environment.* diff --git a/data/gitignore/Haxe.gitignore b/data/gitignore/Haxe.gitignore deleted file mode 100644 index efafc9e9..00000000 --- a/data/gitignore/Haxe.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.haxelib/ -.haxelsp/recording/ -dump/ diff --git a/data/gitignore/IAR.gitignore b/data/gitignore/IAR.gitignore deleted file mode 100644 index cb3fdf2c..00000000 --- a/data/gitignore/IAR.gitignore +++ /dev/null @@ -1,47 +0,0 @@ -# Compiled binaries -*.o -*.bin -*.elf -*.hex -*.map -*.out -*.obj - -# Trash -*.bak -thumbs.db -*.~* - -# IAR Settings -**/settings/*.crun -**/settings/*.dbgdt -**/settings/*.cspy -**/settings/*.cspy.* -**/settings/*.xcl -**/settings/*.dni -**/settings/*.wsdt -**/settings/*.wspos - -# IAR Debug Exe -**/Exe/*.sim - -# IAR Debug Obj -**/Obj/*.pbd -**/Obj/*.pbd.* -**/Obj/*.pbi -**/Obj/*.pbi.* - -# IAR project "Debug" directory -Debug/ - -# IAR project "Release" directory -Release/ - -# IAR project settings directory -settings/ - -# IAR backup files -Backup* - -# IAR .dep files -*.dep \ No newline at end of file diff --git a/data/gitignore/IGORPro.gitignore b/data/gitignore/IGORPro.gitignore deleted file mode 100644 index c62be650..00000000 --- a/data/gitignore/IGORPro.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Avoid including Experiment files: they can be created and edited locally to test the ipf files -*.pxp -*.pxt -*.uxp -*.uxt diff --git a/data/gitignore/Idris.gitignore b/data/gitignore/Idris.gitignore deleted file mode 100644 index 0f4e72c7..00000000 --- a/data/gitignore/Idris.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# Idris 2 -*.ttc -*.ttm - -# Idris 1 -*.ibc -*.o diff --git a/data/gitignore/JBoss.gitignore b/data/gitignore/JBoss.gitignore deleted file mode 100644 index 75d1731e..00000000 --- a/data/gitignore/JBoss.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -jboss/server/all/deploy/project.ext -jboss/server/default/deploy/project.ext -jboss/server/minimal/deploy/project.ext -jboss/server/all/log/*.log -jboss/server/all/tmp/**/* -jboss/server/all/data/**/* -jboss/server/all/work/**/* -jboss/server/default/log/*.log -jboss/server/default/tmp/**/* -jboss/server/default/data/**/* -jboss/server/default/work/**/* -jboss/server/minimal/log/*.log -jboss/server/minimal/tmp/**/* -jboss/server/minimal/data/**/* -jboss/server/minimal/work/**/* - -# deployed package files # - -*.DEPLOYED diff --git a/data/gitignore/JENKINS_HOME.gitignore b/data/gitignore/JENKINS_HOME.gitignore deleted file mode 100644 index 2516c099..00000000 --- a/data/gitignore/JENKINS_HOME.gitignore +++ /dev/null @@ -1,50 +0,0 @@ -# Learn more about Jenkins and JENKINS_HOME directory for which this file is -# intended. -# -# http://jenkins-ci.org/ -# https://wiki.jenkins-ci.org/display/JENKINS/Administering+Jenkins -# -# Note: secret.key is purposefully not tracked by git. This should be backed up -# separately because configs may contain secrets which were encrypted using the -# secret.key. To back up secrets use 'tar -czf /tmp/secrets.tgz secret*' and -# save the file separate from your repository. If you want secrets backed up -# with configuration, then see the bottom of this file for an example. - -# Ignore all JENKINS_HOME except jobs directory, root xml config, and -# .gitignore file. -/* -!/jobs -!/.gitignore -!/*.xml - -# Ignore all files in jobs subdirectories except for folders. -# Note: git doesn't track folders, only file content. -jobs/** -!jobs/**/ - -# Uncomment the following line to save next build numbers with config. - -#!jobs/**/nextBuildNumber - -# For performance reasons, we want to ignore builds in Jenkins jobs because it -# contains many tiny files on large installations. This can impact git -# performance when running even basic commands like 'git status'. -builds -indexing - -# Exclude only config.xml files in repository subdirectories. -!config.xml - -# Don't track workspaces (when users build on the master). -jobs/**/*workspace - -# Security warning: If secrets are included with your configuration, then an -# adversary will be able to decrypt all encrypted secrets within Jenkins -# config. Including secrets is a bad practice, but the example is included in -# case someone still wants it for convenience. Uncomment the following line to -# include secrets for decryption with repository configuration in Git. - -#!/secret* - -# As a result, only Jenkins settings and job config.xml files in JENKINS_HOME -# will be tracked by git. diff --git a/data/gitignore/Java.gitignore b/data/gitignore/Java.gitignore deleted file mode 100644 index 524f0963..00000000 --- a/data/gitignore/Java.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* -replay_pid* diff --git a/data/gitignore/Jekyll.gitignore b/data/gitignore/Jekyll.gitignore deleted file mode 100644 index 74a9223a..00000000 --- a/data/gitignore/Jekyll.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -_site/ -.sass-cache/ -.jekyll-cache/ -.jekyll-metadata -# Ignore folders generated by Bundler -.bundle/ -vendor/ diff --git a/data/gitignore/Joomla.gitignore b/data/gitignore/Joomla.gitignore deleted file mode 100644 index 41a9ba41..00000000 --- a/data/gitignore/Joomla.gitignore +++ /dev/null @@ -1,705 +0,0 @@ -/.htaccess -/administrator/cache/* -/administrator/components/com_actionlogs/* -/administrator/components/com_admin/* -/administrator/components/com_ajax/* -/administrator/components/com_associations/* -/administrator/components/com_banners/* -/administrator/components/com_cache/* -/administrator/components/com_categories/* -/administrator/components/com_checkin/* -/administrator/components/com_config/* -/administrator/components/com_contact/* -/administrator/components/com_content/* -/administrator/components/com_contenthistory/* -/administrator/components/com_cpanel/* -/administrator/components/com_fields/* -/administrator/components/com_finder/* -/administrator/components/com_installer/* -/administrator/components/com_joomlaupdate/* -/administrator/components/com_languages/* -/administrator/components/com_login/* -/administrator/components/com_media/* -/administrator/components/com_menus/* -/administrator/components/com_messages/* -/administrator/components/com_modules/* -/administrator/components/com_newsfeeds/* -/administrator/components/com_plugins/* -/administrator/components/com_postinstall/* -/administrator/components/com_privacy/* -/administrator/components/com_redirect/* -/administrator/components/com_search/* -/administrator/components/com_tags/* -/administrator/components/com_templates/* -/administrator/components/com_users/* -/administrator/help/* -/administrator/includes/* -/administrator/index.php -/administrator/language/en-GB/en-GB.com_actionlogs.ini -/administrator/language/en-GB/en-GB.com_actionlogs.sys.ini -/administrator/language/en-GB/en-GB.com_admin.ini -/administrator/language/en-GB/en-GB.com_admin.sys.ini -/administrator/language/en-GB/en-GB.com_ajax.ini -/administrator/language/en-GB/en-GB.com_ajax.sys.ini -/administrator/language/en-GB/en-GB.com_associations.ini -/administrator/language/en-GB/en-GB.com_associations.sys.ini -/administrator/language/en-GB/en-GB.com_banners.ini -/administrator/language/en-GB/en-GB.com_banners.sys.ini -/administrator/language/en-GB/en-GB.com_cache.ini -/administrator/language/en-GB/en-GB.com_cache.sys.ini -/administrator/language/en-GB/en-GB.com_categories.ini -/administrator/language/en-GB/en-GB.com_categories.sys.ini -/administrator/language/en-GB/en-GB.com_checkin.ini -/administrator/language/en-GB/en-GB.com_checkin.sys.ini -/administrator/language/en-GB/en-GB.com_config.ini -/administrator/language/en-GB/en-GB.com_config.sys.ini -/administrator/language/en-GB/en-GB.com_contact.ini -/administrator/language/en-GB/en-GB.com_contact.sys.ini -/administrator/language/en-GB/en-GB.com_content.ini -/administrator/language/en-GB/en-GB.com_content.sys.ini -/administrator/language/en-GB/en-GB.com_contenthistory.ini -/administrator/language/en-GB/en-GB.com_contenthistory.sys.ini -/administrator/language/en-GB/en-GB.com_cpanel.ini -/administrator/language/en-GB/en-GB.com_cpanel.sys.ini -/administrator/language/en-GB/en-GB.com_fields.ini -/administrator/language/en-GB/en-GB.com_fields.sys.ini -/administrator/language/en-GB/en-GB.com_finder.ini -/administrator/language/en-GB/en-GB.com_finder.sys.ini -/administrator/language/en-GB/en-GB.com_installer.ini -/administrator/language/en-GB/en-GB.com_installer.sys.ini -/administrator/language/en-GB/en-GB.com_joomlaupdate.ini -/administrator/language/en-GB/en-GB.com_joomlaupdate.sys.ini -/administrator/language/en-GB/en-GB.com_languages.ini -/administrator/language/en-GB/en-GB.com_languages.sys.ini -/administrator/language/en-GB/en-GB.com_login.ini -/administrator/language/en-GB/en-GB.com_login.sys.ini -/administrator/language/en-GB/en-GB.com_mailto.sys.ini -/administrator/language/en-GB/en-GB.com_media.ini -/administrator/language/en-GB/en-GB.com_media.sys.ini -/administrator/language/en-GB/en-GB.com_menus.ini -/administrator/language/en-GB/en-GB.com_menus.sys.ini -/administrator/language/en-GB/en-GB.com_messages.ini -/administrator/language/en-GB/en-GB.com_messages.sys.ini -/administrator/language/en-GB/en-GB.com_modules.ini -/administrator/language/en-GB/en-GB.com_modules.sys.ini -/administrator/language/en-GB/en-GB.com_newsfeeds.ini -/administrator/language/en-GB/en-GB.com_newsfeeds.sys.ini -/administrator/language/en-GB/en-GB.com_plugins.ini -/administrator/language/en-GB/en-GB.com_plugins.sys.ini -/administrator/language/en-GB/en-GB.com_postinstall.ini -/administrator/language/en-GB/en-GB.com_postinstall.sys.ini -/administrator/language/en-GB/en-GB.com_privacy.ini -/administrator/language/en-GB/en-GB.com_privacy.sys.ini -/administrator/language/en-GB/en-GB.com_redirect.ini -/administrator/language/en-GB/en-GB.com_redirect.sys.ini -/administrator/language/en-GB/en-GB.com_search.ini -/administrator/language/en-GB/en-GB.com_search.sys.ini -/administrator/language/en-GB/en-GB.com_tags.ini -/administrator/language/en-GB/en-GB.com_tags.sys.ini -/administrator/language/en-GB/en-GB.com_templates.ini -/administrator/language/en-GB/en-GB.com_templates.sys.ini -/administrator/language/en-GB/en-GB.com_users.ini -/administrator/language/en-GB/en-GB.com_users.sys.ini -/administrator/language/en-GB/en-GB.com_weblinks.ini -/administrator/language/en-GB/en-GB.com_weblinks.sys.ini -/administrator/language/en-GB/en-GB.com_wrapper.ini -/administrator/language/en-GB/en-GB.com_wrapper.sys.ini -/administrator/language/en-GB/en-GB.ini -/administrator/language/en-GB/en-GB.lib_joomla.ini -/administrator/language/en-GB/en-GB.localise.php -/administrator/language/en-GB/en-GB.mod_custom.ini -/administrator/language/en-GB/en-GB.mod_custom.sys.ini -/administrator/language/en-GB/en-GB.mod_feed.ini -/administrator/language/en-GB/en-GB.mod_feed.sys.ini -/administrator/language/en-GB/en-GB.mod_latest.ini -/administrator/language/en-GB/en-GB.mod_latest.sys.ini -/administrator/language/en-GB/en-GB.mod_latestactions.ini -/administrator/language/en-GB/en-GB.mod_latestactions.sys.ini -/administrator/language/en-GB/en-GB.mod_logged.ini -/administrator/language/en-GB/en-GB.mod_logged.sys.ini -/administrator/language/en-GB/en-GB.mod_login.ini -/administrator/language/en-GB/en-GB.mod_login.sys.ini -/administrator/language/en-GB/en-GB.mod_menu.ini -/administrator/language/en-GB/en-GB.mod_menu.sys.ini -/administrator/language/en-GB/en-GB.mod_multilangstatus.ini -/administrator/language/en-GB/en-GB.mod_multilangstatus.sys.ini -/administrator/language/en-GB/en-GB.mod_online.ini -/administrator/language/en-GB/en-GB.mod_online.sys.ini -/administrator/language/en-GB/en-GB.mod_popular.ini -/administrator/language/en-GB/en-GB.mod_popular.sys.ini -/administrator/language/en-GB/en-GB.mod_privacy_dashboard.ini -/administrator/language/en-GB/en-GB.mod_privacy_dashboard.sys.ini -/administrator/language/en-GB/en-GB.mod_quickicon.ini -/administrator/language/en-GB/en-GB.mod_quickicon.sys.ini -/administrator/language/en-GB/en-GB.mod_sampledata.ini -/administrator/language/en-GB/en-GB.mod_sampledata.sys.ini -/administrator/language/en-GB/en-GB.mod_stats_admin.ini -/administrator/language/en-GB/en-GB.mod_stats_admin.sys.ini -/administrator/language/en-GB/en-GB.mod_status.ini -/administrator/language/en-GB/en-GB.mod_status.sys.ini -/administrator/language/en-GB/en-GB.mod_submenu.ini -/administrator/language/en-GB/en-GB.mod_submenu.sys.ini -/administrator/language/en-GB/en-GB.mod_title.ini -/administrator/language/en-GB/en-GB.mod_title.sys.ini -/administrator/language/en-GB/en-GB.mod_toolbar.ini -/administrator/language/en-GB/en-GB.mod_toolbar.sys.ini -/administrator/language/en-GB/en-GB.mod_unread.ini -/administrator/language/en-GB/en-GB.mod_unread.sys.ini -/administrator/language/en-GB/en-GB.mod_version.ini -/administrator/language/en-GB/en-GB.mod_version.sys.ini -/administrator/language/en-GB/en-GB.plg_actionlog_joomla.ini -/administrator/language/en-GB/en-GB.plg_actionlog_joomla.sys.ini -/administrator/language/en-GB/en-GB.plg_authentication_cookie.ini -/administrator/language/en-GB/en-GB.plg_authentication_cookie.sys.ini -/administrator/language/en-GB/en-GB.plg_authentication_example.ini -/administrator/language/en-GB/en-GB.plg_authentication_example.sys.ini -/administrator/language/en-GB/en-GB.plg_authentication_gmail.ini -/administrator/language/en-GB/en-GB.plg_authentication_gmail.sys.ini -/administrator/language/en-GB/en-GB.plg_authentication_joomla.ini -/administrator/language/en-GB/en-GB.plg_authentication_joomla.sys.ini -/administrator/language/en-GB/en-GB.plg_authentication_ldap.ini -/administrator/language/en-GB/en-GB.plg_authentication_ldap.sys.ini -/administrator/language/en-GB/en-GB.plg_captcha_recaptcha.ini -/administrator/language/en-GB/en-GB.plg_captcha_recaptcha.sys.ini -/administrator/language/en-GB/en-GB.plg_captcha_recaptcha_invisible.ini -/administrator/language/en-GB/en-GB.plg_captcha_recaptcha_invisible.sys.ini -/administrator/language/en-GB/en-GB.plg_content_confirmconsent.ini -/administrator/language/en-GB/en-GB.plg_content_confirmconsent.sys.ini -/administrator/language/en-GB/en-GB.plg_content_contact.ini -/administrator/language/en-GB/en-GB.plg_content_contact.sys.ini -/administrator/language/en-GB/en-GB.plg_content_emailcloak.ini -/administrator/language/en-GB/en-GB.plg_content_emailcloak.sys.ini -/administrator/language/en-GB/en-GB.plg_content_fields.ini -/administrator/language/en-GB/en-GB.plg_content_fields.sys.ini -/administrator/language/en-GB/en-GB.plg_content_finder.ini -/administrator/language/en-GB/en-GB.plg_content_finder.sys.ini -/administrator/language/en-GB/en-GB.plg_content_geshi.ini -/administrator/language/en-GB/en-GB.plg_content_geshi.sys.ini -/administrator/language/en-GB/en-GB.plg_content_joomla.ini -/administrator/language/en-GB/en-GB.plg_content_joomla.sys.ini -/administrator/language/en-GB/en-GB.plg_content_loadmodule.ini -/administrator/language/en-GB/en-GB.plg_content_loadmodule.sys.ini -/administrator/language/en-GB/en-GB.plg_content_pagebreak.ini -/administrator/language/en-GB/en-GB.plg_content_pagebreak.sys.ini -/administrator/language/en-GB/en-GB.plg_content_pagenavigation.ini -/administrator/language/en-GB/en-GB.plg_content_pagenavigation.sys.ini -/administrator/language/en-GB/en-GB.plg_content_vote.ini -/administrator/language/en-GB/en-GB.plg_content_vote.sys.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_article.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_article.sys.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_contact.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_contact.sys.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_fields.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_fields.sys.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_image.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_image.sys.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_menu.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_menu.sys.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_module.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_module.sys.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_pagebreak.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_pagebreak.sys.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_readmore.ini -/administrator/language/en-GB/en-GB.plg_editors-xtd_readmore.sys.ini -/administrator/language/en-GB/en-GB.plg_editors_codemirror.ini -/administrator/language/en-GB/en-GB.plg_editors_codemirror.sys.ini -/administrator/language/en-GB/en-GB.plg_editors_none.ini -/administrator/language/en-GB/en-GB.plg_editors_none.sys.ini -/administrator/language/en-GB/en-GB.plg_editors_tinymce.ini -/administrator/language/en-GB/en-GB.plg_editors_tinymce.sys.ini -/administrator/language/en-GB/en-GB.plg_extension_joomla.ini -/administrator/language/en-GB/en-GB.plg_extension_joomla.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_calendar.ini -/administrator/language/en-GB/en-GB.plg_fields_calendar.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_checkboxes.ini -/administrator/language/en-GB/en-GB.plg_fields_checkboxes.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_color.ini -/administrator/language/en-GB/en-GB.plg_fields_color.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_editor.ini -/administrator/language/en-GB/en-GB.plg_fields_editor.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_image.ini -/administrator/language/en-GB/en-GB.plg_fields_image.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_imagelist.ini -/administrator/language/en-GB/en-GB.plg_fields_imagelist.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_integer.ini -/administrator/language/en-GB/en-GB.plg_fields_integer.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_list.ini -/administrator/language/en-GB/en-GB.plg_fields_list.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_media.ini -/administrator/language/en-GB/en-GB.plg_fields_media.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_radio.ini -/administrator/language/en-GB/en-GB.plg_fields_radio.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_repeatable.ini -/administrator/language/en-GB/en-GB.plg_fields_repeatable.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_sql.ini -/administrator/language/en-GB/en-GB.plg_fields_sql.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_text.ini -/administrator/language/en-GB/en-GB.plg_fields_text.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_textarea.ini -/administrator/language/en-GB/en-GB.plg_fields_textarea.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_url.ini -/administrator/language/en-GB/en-GB.plg_fields_url.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_user.ini -/administrator/language/en-GB/en-GB.plg_fields_user.sys.ini -/administrator/language/en-GB/en-GB.plg_fields_usergrouplist.ini -/administrator/language/en-GB/en-GB.plg_fields_usergrouplist.sys.ini -/administrator/language/en-GB/en-GB.plg_finder_categories.ini -/administrator/language/en-GB/en-GB.plg_finder_categories.sys.ini -/administrator/language/en-GB/en-GB.plg_finder_contacts.ini -/administrator/language/en-GB/en-GB.plg_finder_contacts.sys.ini -/administrator/language/en-GB/en-GB.plg_finder_content.ini -/administrator/language/en-GB/en-GB.plg_finder_content.sys.ini -/administrator/language/en-GB/en-GB.plg_finder_newsfeeds.ini -/administrator/language/en-GB/en-GB.plg_finder_newsfeeds.sys.ini -/administrator/language/en-GB/en-GB.plg_finder_tags.ini -/administrator/language/en-GB/en-GB.plg_finder_tags.sys.ini -/administrator/language/en-GB/en-GB.plg_finder_weblinks.ini -/administrator/language/en-GB/en-GB.plg_finder_weblinks.sys.ini -/administrator/language/en-GB/en-GB.plg_installer_folderinstaller.ini -/administrator/language/en-GB/en-GB.plg_installer_folderinstaller.sys.ini -/administrator/language/en-GB/en-GB.plg_installer_packageinstaller.ini -/administrator/language/en-GB/en-GB.plg_installer_packageinstaller.sys.ini -/administrator/language/en-GB/en-GB.plg_installer_urlinstaller.ini -/administrator/language/en-GB/en-GB.plg_installer_urlinstaller.sys.ini -/administrator/language/en-GB/en-GB.plg_installer_webinstaller.ini -/administrator/language/en-GB/en-GB.plg_installer_webinstaller.sys.ini -/administrator/language/en-GB/en-GB.plg_privacy_actionlogs.ini -/administrator/language/en-GB/en-GB.plg_privacy_actionlogs.sys.ini -/administrator/language/en-GB/en-GB.plg_privacy_consents.ini -/administrator/language/en-GB/en-GB.plg_privacy_consents.sys.ini -/administrator/language/en-GB/en-GB.plg_privacy_contact.ini -/administrator/language/en-GB/en-GB.plg_privacy_contact.sys.ini -/administrator/language/en-GB/en-GB.plg_privacy_content.ini -/administrator/language/en-GB/en-GB.plg_privacy_content.sys.ini -/administrator/language/en-GB/en-GB.plg_privacy_message.ini -/administrator/language/en-GB/en-GB.plg_privacy_message.sys.ini -/administrator/language/en-GB/en-GB.plg_privacy_user.ini -/administrator/language/en-GB/en-GB.plg_privacy_user.sys.ini -/administrator/language/en-GB/en-GB.plg_quickicon_extensionupdate.ini -/administrator/language/en-GB/en-GB.plg_quickicon_extensionupdate.sys.ini -/administrator/language/en-GB/en-GB.plg_quickicon_joomlaupdate.ini -/administrator/language/en-GB/en-GB.plg_quickicon_joomlaupdate.sys.ini -/administrator/language/en-GB/en-GB.plg_quickicon_phpversioncheck.ini -/administrator/language/en-GB/en-GB.plg_quickicon_phpversioncheck.sys.ini -/administrator/language/en-GB/en-GB.plg_quickicon_privacycheck.ini -/administrator/language/en-GB/en-GB.plg_quickicon_privacycheck.sys.ini -/administrator/language/en-GB/en-GB.plg_sampledata_blog.ini -/administrator/language/en-GB/en-GB.plg_sampledata_blog.sys.ini -/administrator/language/en-GB/en-GB.plg_search_categories.ini -/administrator/language/en-GB/en-GB.plg_search_categories.sys.ini -/administrator/language/en-GB/en-GB.plg_search_contacts.ini -/administrator/language/en-GB/en-GB.plg_search_contacts.sys.ini -/administrator/language/en-GB/en-GB.plg_search_content.ini -/administrator/language/en-GB/en-GB.plg_search_content.sys.ini -/administrator/language/en-GB/en-GB.plg_search_newsfeeds.ini -/administrator/language/en-GB/en-GB.plg_search_newsfeeds.sys.ini -/administrator/language/en-GB/en-GB.plg_search_tags.ini -/administrator/language/en-GB/en-GB.plg_search_tags.sys.ini -/administrator/language/en-GB/en-GB.plg_search_weblinks.ini -/administrator/language/en-GB/en-GB.plg_search_weblinks.sys.ini -/administrator/language/en-GB/en-GB.plg_system_actionlogs.ini -/administrator/language/en-GB/en-GB.plg_system_actionlogs.sys.ini -/administrator/language/en-GB/en-GB.plg_system_cache.ini -/administrator/language/en-GB/en-GB.plg_system_cache.sys.ini -/administrator/language/en-GB/en-GB.plg_system_debug.ini -/administrator/language/en-GB/en-GB.plg_system_debug.sys.ini -/administrator/language/en-GB/en-GB.plg_system_fields.ini -/administrator/language/en-GB/en-GB.plg_system_fields.sys.ini -/administrator/language/en-GB/en-GB.plg_system_highlight.ini -/administrator/language/en-GB/en-GB.plg_system_highlight.sys.ini -/administrator/language/en-GB/en-GB.plg_system_languagecode.ini -/administrator/language/en-GB/en-GB.plg_system_languagecode.sys.ini -/administrator/language/en-GB/en-GB.plg_system_languagefilter.ini -/administrator/language/en-GB/en-GB.plg_system_languagefilter.sys.ini -/administrator/language/en-GB/en-GB.plg_system_log.ini -/administrator/language/en-GB/en-GB.plg_system_log.sys.ini -/administrator/language/en-GB/en-GB.plg_system_logout.ini -/administrator/language/en-GB/en-GB.plg_system_logout.sys.ini -/administrator/language/en-GB/en-GB.plg_system_logrotation.ini -/administrator/language/en-GB/en-GB.plg_system_logrotation.sys.ini -/administrator/language/en-GB/en-GB.plg_system_p3p.ini -/administrator/language/en-GB/en-GB.plg_system_p3p.sys.ini -/administrator/language/en-GB/en-GB.plg_system_privacyconsent.ini -/administrator/language/en-GB/en-GB.plg_system_privacyconsent.sys.ini -/administrator/language/en-GB/en-GB.plg_system_redirect.ini -/administrator/language/en-GB/en-GB.plg_system_redirect.sys.ini -/administrator/language/en-GB/en-GB.plg_system_remember.ini -/administrator/language/en-GB/en-GB.plg_system_remember.sys.ini -/administrator/language/en-GB/en-GB.plg_system_sef.ini -/administrator/language/en-GB/en-GB.plg_system_sef.sys.ini -/administrator/language/en-GB/en-GB.plg_system_sessiongc.ini -/administrator/language/en-GB/en-GB.plg_system_sessiongc.sys.ini -/administrator/language/en-GB/en-GB.plg_system_stats.ini -/administrator/language/en-GB/en-GB.plg_system_stats.sys.ini -/administrator/language/en-GB/en-GB.plg_system_updatenotification.ini -/administrator/language/en-GB/en-GB.plg_system_updatenotification.sys.ini -/administrator/language/en-GB/en-GB.plg_twofactorauth_totp.ini -/administrator/language/en-GB/en-GB.plg_twofactorauth_totp.sys.ini -/administrator/language/en-GB/en-GB.plg_twofactorauth_yubikey.ini -/administrator/language/en-GB/en-GB.plg_twofactorauth_yubikey.sys.ini -/administrator/language/en-GB/en-GB.plg_user_contactcreator.ini -/administrator/language/en-GB/en-GB.plg_user_contactcreator.sys.ini -/administrator/language/en-GB/en-GB.plg_user_joomla.ini -/administrator/language/en-GB/en-GB.plg_user_joomla.sys.ini -/administrator/language/en-GB/en-GB.plg_user_profile.ini -/administrator/language/en-GB/en-GB.plg_user_profile.sys.ini -/administrator/language/en-GB/en-GB.plg_user_terms.ini -/administrator/language/en-GB/en-GB.plg_user_terms.sys.ini -/administrator/language/en-GB/en-GB.tpl_hathor.ini -/administrator/language/en-GB/en-GB.tpl_hathor.sys.ini -/administrator/language/en-GB/en-GB.tpl_isis.ini -/administrator/language/en-GB/en-GB.tpl_isis.sys.ini -/administrator/language/en-GB/en-GB.xml -/administrator/language/en-GB/install.xml -/administrator/language/overrides/* -/administrator/language/index.html -/administrator/logs/* -/administrator/manifests/files/joomla.xml -/administrator/manifests/libraries/fof.xml -/administrator/manifests/libraries/idna_convert.xml -/administrator/manifests/libraries/joomla.xml -/administrator/manifests/libraries/phpass.xml -/administrator/manifests/libraries/phputf8.xml -/administrator/manifests/packages/pkg_en-GB.xml -/administrator/manifests/packages/index.html -/administrator/modules/mod_custom/* -/administrator/modules/mod_feed/* -/administrator/modules/mod_latest/* -/administrator/modules/mod_latestactions/* -/administrator/modules/mod_logged/* -/administrator/modules/mod_login/* -/administrator/modules/mod_menu/* -/administrator/modules/mod_multilangstatus/* -/administrator/modules/mod_online/* -/administrator/modules/mod_popular/* -/administrator/modules/mod_privacy_dashboard/* -/administrator/modules/mod_quickicon/* -/administrator/modules/mod_sampledata/* -/administrator/modules/mod_stats_admin/* -/administrator/modules/mod_status/* -/administrator/modules/mod_submenu/* -/administrator/modules/mod_title/* -/administrator/modules/mod_toolbar/* -/administrator/modules/mod_unread/* -/administrator/modules/mod_version/* -/administrator/templates/hathor/* -/administrator/templates/isis/* -/administrator/templates/system/* -/bin/* -/cache/* -/cli/* -/components/com_ajax/* -/components/com_banners/* -/components/com_config/* -/components/com_contact/* -/components/com_content/* -/components/com_contenthistory/* -/components/com_fields/* -/components/com_finder/* -/components/com_mailto/* -/components/com_media/* -/components/com_menus/* -/components/com_modules/* -/components/com_newsfeeds/* -/components/com_privacy/* -/components/com_search/* -/components/com_tags/* -/components/com_users/* -/components/com_wrapper/* -/components/index.html -/images/banners/* -/images/headers/* -/images/sampledata/* -/images/index.html -/images/joomla* -/images/powered_by.png -/includes/* -/installation/* -/language/en-GB/en-GB.com_ajax.ini -/language/en-GB/en-GB.com_config.ini -/language/en-GB/en-GB.com_contact.ini -/language/en-GB/en-GB.com_content.ini -/language/en-GB/en-GB.com_finder.ini -/language/en-GB/en-GB.com_mailto.ini -/language/en-GB/en-GB.com_media.ini -/language/en-GB/en-GB.com_messages.ini -/language/en-GB/en-GB.com_newsfeeds.ini -/language/en-GB/en-GB.com_privacy.ini -/language/en-GB/en-GB.com_search.ini -/language/en-GB/en-GB.com_tags.ini -/language/en-GB/en-GB.com_users.ini -/language/en-GB/en-GB.com_weblinks.ini -/language/en-GB/en-GB.com_wrapper.ini -/language/en-GB/en-GB.files_joomla.sys.ini -/language/en-GB/en-GB.finder_cli.ini -/language/en-GB/en-GB.ini -/language/en-GB/en-GB.lib_fof.ini -/language/en-GB/en-GB.lib_fof.sys.ini -/language/en-GB/en-GB.lib_idna_convert.sys.ini -/language/en-GB/en-GB.lib_joomla.ini -/language/en-GB/en-GB.lib_joomla.sys.ini -/language/en-GB/en-GB.lib_phpass.sys.ini -/language/en-GB/en-GB.lib_phpmailer.sys.ini -/language/en-GB/en-GB.lib_phputf8.sys.ini -/language/en-GB/en-GB.lib_simplepie.sys.ini -/language/en-GB/en-GB.localise.php -/language/en-GB/en-GB.mod_articles_archive.ini -/language/en-GB/en-GB.mod_articles_archive.sys.ini -/language/en-GB/en-GB.mod_articles_categories.ini -/language/en-GB/en-GB.mod_articles_categories.sys.ini -/language/en-GB/en-GB.mod_articles_category.ini -/language/en-GB/en-GB.mod_articles_category.sys.ini -/language/en-GB/en-GB.mod_articles_latest.ini -/language/en-GB/en-GB.mod_articles_latest.sys.ini -/language/en-GB/en-GB.mod_articles_news.ini -/language/en-GB/en-GB.mod_articles_news.sys.ini -/language/en-GB/en-GB.mod_articles_popular.ini -/language/en-GB/en-GB.mod_articles_popular.sys.ini -/language/en-GB/en-GB.mod_banners.ini -/language/en-GB/en-GB.mod_banners.sys.ini -/language/en-GB/en-GB.mod_breadcrumbs.ini -/language/en-GB/en-GB.mod_breadcrumbs.sys.ini -/language/en-GB/en-GB.mod_custom.ini -/language/en-GB/en-GB.mod_custom.sys.ini -/language/en-GB/en-GB.mod_feed.ini -/language/en-GB/en-GB.mod_feed.sys.ini -/language/en-GB/en-GB.mod_finder.ini -/language/en-GB/en-GB.mod_finder.sys.ini -/language/en-GB/en-GB.mod_footer.ini -/language/en-GB/en-GB.mod_footer.sys.ini -/language/en-GB/en-GB.mod_languages.ini -/language/en-GB/en-GB.mod_languages.sys.ini -/language/en-GB/en-GB.mod_login.ini -/language/en-GB/en-GB.mod_login.sys.ini -/language/en-GB/en-GB.mod_menu.ini -/language/en-GB/en-GB.mod_menu.sys.ini -/language/en-GB/en-GB.mod_random_image.ini -/language/en-GB/en-GB.mod_random_image.sys.ini -/language/en-GB/en-GB.mod_related_items.ini -/language/en-GB/en-GB.mod_related_items.sys.ini -/language/en-GB/en-GB.mod_search.ini -/language/en-GB/en-GB.mod_search.sys.ini -/language/en-GB/en-GB.mod_stats.ini -/language/en-GB/en-GB.mod_stats.sys.ini -/language/en-GB/en-GB.mod_syndicate.ini -/language/en-GB/en-GB.mod_syndicate.sys.ini -/language/en-GB/en-GB.mod_tags_popular.ini -/language/en-GB/en-GB.mod_tags_popular.sys.ini -/language/en-GB/en-GB.mod_tags_similar.ini -/language/en-GB/en-GB.mod_tags_similar.sys.ini -/language/en-GB/en-GB.mod_users_latest.ini -/language/en-GB/en-GB.mod_users_latest.sys.ini -/language/en-GB/en-GB.mod_weblinks.ini -/language/en-GB/en-GB.mod_weblinks.sys.ini -/language/en-GB/en-GB.mod_whosonline.ini -/language/en-GB/en-GB.mod_whosonline.sys.ini -/language/en-GB/en-GB.mod_wrapper.ini -/language/en-GB/en-GB.mod_wrapper.sys.ini -/language/en-GB/en-GB.tpl_atomic.ini -/language/en-GB/en-GB.tpl_atomic.sys.ini -/language/en-GB/en-GB.tpl_beez3.ini -/language/en-GB/en-GB.tpl_beez3.sys.ini -/language/en-GB/en-GB.tpl_beez5.ini -/language/en-GB/en-GB.tpl_beez5.sys.ini -/language/en-GB/en-GB.tpl_beez_20.ini -/language/en-GB/en-GB.tpl_beez_20.sys.ini -/language/en-GB/en-GB.tpl_protostar.ini -/language/en-GB/en-GB.tpl_protostar.sys.ini -/language/en-GB/en-GB.xml -/language/en-GB/install.xml -/language/overrides/* -/language/index.html -/layouts/joomla/* -/layouts/libraries/* -/layouts/plugins/* -/layouts/index.html -/libraries/cms/* -/libraries/fof/* -/libraries/idna_convert/* -/libraries/joomla/* -/libraries/legacy/* -/libraries/php-encryption/* -/libraries/phpass/* -/libraries/phpmailer/* -/libraries/phputf8/* -/libraries/simplepie/* -/libraries/src/* -/libraries/vendor/* -/libraries/classmap.php -/libraries/cms.php -/libraries/import.legacy.php -/libraries/import.php -/libraries/index.html -/libraries/loader.php -/media/cms/* -/media/com_associations/* -/media/com_contact/* -/media/com_content/* -/media/com_contenthistory/* -/media/com_fields/* -/media/com_finder/* -/media/com_joomlaupdate/* -/media/com_menus/* -/media/com_modules/* -/media/com_wrapper/* -/media/contacts/* -/media/editors/* -/media/jui/* -/media/mailto/* -/media/media/* -/media/mod_languages/* -/media/mod_sampledata/* -/media/overrider/* -/media/plg_captcha_recaptcha/* -/media/plg_captcha_recaptcha_invisible/* -/media/plg_quickicon_extensionupdate/* -/media/plg_quickicon_joomlaupdate/* -/media/plg_quickicon_privacycheck/* -/media/plg_system_highlight/* -/media/plg_system_stats/* -/media/plg_twofactorauth_totp/* -/media/system/* -/media/index.html -/modules/mod_articles_archive/* -/modules/mod_articles_categories/* -/modules/mod_articles_category/* -/modules/mod_articles_latest/* -/modules/mod_articles_news/* -/modules/mod_articles_popular/* -/modules/mod_banners/* -/modules/mod_breadcrumbs/* -/modules/mod_custom/* -/modules/mod_feed/* -/modules/mod_finder/* -/modules/mod_footer/* -/modules/mod_languages/* -/modules/mod_login/* -/modules/mod_menu/* -/modules/mod_random_image/* -/modules/mod_related_items/* -/modules/mod_search/* -/modules/mod_stats/* -/modules/mod_syndicate/* -/modules/mod_tags_popular/* -/modules/mod_tags_similar/* -/modules/mod_users_latest/* -/modules/mod_whosonline/* -/modules/mod_wrapper/* -/modules/index.html -/plugins/actionlog/joomla/* -/plugins/authentication/cookie/* -/plugins/authentication/example/* -/plugins/authentication/gmail/* -/plugins/authentication/joomla/* -/plugins/authentication/ldap/* -/plugins/captcha/recaptcha/* -/plugins/captcha/recaptcha_invisible/* -/plugins/content/confirmconsent/* -/plugins/content/contact/* -/plugins/content/emailcloak/* -/plugins/content/example/* -/plugins/content/fields/* -/plugins/content/finder/* -/plugins/content/geshi/* -/plugins/content/joomla/* -/plugins/content/loadmodule/* -/plugins/content/pagebreak/* -/plugins/content/pagenavigation/* -/plugins/content/vote/* -/plugins/editors/codemirror/* -/plugins/editors/none/* -/plugins/editors/tinymce/* -/plugins/editors-xtd/article/* -/plugins/editors-xtd/contact/* -/plugins/editors-xtd/fields/* -/plugins/editors-xtd/image/* -/plugins/editors-xtd/menu/* -/plugins/editors-xtd/module/* -/plugins/editors-xtd/pagebreak/* -/plugins/editors-xtd/readmore/* -/plugins/extension/example/* -/plugins/extension/joomla/* -/plugins/fields/calendar/* -/plugins/fields/checkboxes/* -/plugins/fields/color/* -/plugins/fields/editor/* -/plugins/fields/imagelist/* -/plugins/fields/integer/* -/plugins/fields/list/* -/plugins/fields/media/* -/plugins/fields/radio/* -/plugins/fields/repeatable/* -/plugins/fields/sql/* -/plugins/fields/text/* -/plugins/fields/textarea/* -/plugins/fields/url/* -/plugins/fields/user/* -/plugins/fields/usergrouplist/* -/plugins/finder/categories/* -/plugins/finder/contacts/* -/plugins/finder/content/* -/plugins/finder/newsfeeds/* -/plugins/finder/tags/* -/plugins/installer/folderinstaller/* -/plugins/installer/packageinstaller/* -/plugins/installer/urlinstaller/* -/plugins/privacy/actionlogs/* -/plugins/privacy/consents/* -/plugins/privacy/contact/* -/plugins/privacy/content/* -/plugins/privacy/message/* -/plugins/privacy/user/* -/plugins/quickicon/extensionupdate/* -/plugins/quickicon/joomlaupdate/* -/plugins/quickicon/phpversioncheck/* -/plugins/quickicon/privacycheck/* -/plugins/quickicon/index.html -/plugins/sampledata/blog/* -/plugins/search/categories/* -/plugins/search/contacts/* -/plugins/search/content/* -/plugins/search/newsfeeds/* -/plugins/search/tags/* -/plugins/search/weblinks/* -/plugins/search/index.html -/plugins/system/actionlogs/* -/plugins/system/cache/* -/plugins/system/debug/* -/plugins/system/fields/* -/plugins/system/highlight/* -/plugins/system/languagecode/* -/plugins/system/languagefilter/* -/plugins/system/log/* -/plugins/system/logout/* -/plugins/system/logrotation/* -/plugins/system/p3p/* -/plugins/system/privacyconsent/* -/plugins/system/redirect/* -/plugins/system/remember/* -/plugins/system/sef/* -/plugins/system/sessiongc/* -/plugins/system/stats/* -/plugins/system/updatenotification/* -/plugins/system/index.html -/plugins/twofactorauth/totp/* -/plugins/twofactorauth/yubikey/* -/plugins/user/contactcreator/* -/plugins/user/example/* -/plugins/user/joomla/* -/plugins/user/profile/* -/plugins/user/terms/* -/plugins/user/index.html -/plugins/index.html -/templates/beez3/* -/templates/protostar/* -/templates/system/* -/templates/index.html -/tmp/* -/configuration.php -/htaccess.txt -/index.php -/joomla.xml -/LICENSE.txt -/README.txt -/robots.txt.dist -/web.config.txt diff --git a/data/gitignore/Julia.gitignore b/data/gitignore/Julia.gitignore deleted file mode 100644 index bd680cde..00000000 --- a/data/gitignore/Julia.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -# Files generated by invoking Julia with --code-coverage -*.jl.cov -*.jl.*.cov - -# Files generated by invoking Julia with --track-allocation -*.jl.mem -*.jl.*.mem - -# System-specific files and directories generated by the BinaryProvider and BinDeps packages -# They contain absolute paths specific to the host computer, and so should not be committed -deps/deps.jl -deps/build.log -deps/downloads/ -deps/usr/ -deps/src/ - -# Build artifacts for creating documentation generated by the Documenter package -docs/build/ -docs/site/ - -# File generated by Pkg, the package manager, based on a corresponding Project.toml -# It records a fixed state of all packages used by the project. As such, it should not be -# committed for packages, but should be committed for applications that require a static -# environment. -Manifest*.toml - -# File generated by the Preferences package to store local preferences -LocalPreferences.toml -JuliaLocalPreferences.toml - -# Conda environment and metadata created in the project directory by the CondaPkg package -.CondaPkg/ diff --git a/data/gitignore/Katalon.gitignore b/data/gitignore/Katalon.gitignore deleted file mode 100644 index 73a4938f..00000000 --- a/data/gitignore/Katalon.gitignore +++ /dev/null @@ -1,40 +0,0 @@ -# Katalon Test Suite -# Compiled class file -*.class -*.swp -output -!output/.gitkeep -build - -Libs/TempTestCase* -Libs/TempTestSuite* -bin/lib/TempTestCase* -Reports/ -\.classpath -\.project -\.settings/ -bin/lib/ -Libs/ -.svn/ -.gradle - - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* diff --git a/data/gitignore/KiCad.gitignore b/data/gitignore/KiCad.gitignore deleted file mode 100644 index 45def523..00000000 --- a/data/gitignore/KiCad.gitignore +++ /dev/null @@ -1,43 +0,0 @@ -# For PCBs designed using KiCad: https://www.kicad.org/ -# Format documentation: https://kicad.org/help/file-formats/ - -# Temporary files -*.000 -*.bak -*.bck -*.kicad_pcb-bak -*.kicad_sch-bak -*-backups -*-cache* -*-bak -*-bak* -*~ -~* -_autosave-* -\#auto_saved_files\# -*.tmp -*-save.pro -*-save.kicad_pcb -fp-info-cache -~*.lck -\#auto_saved_files# - -# Netlist files (exported from Eeschema) -*.net - -# Autorouter files (exported from Pcbnew) -*.dsn -*.ses - -# Exported BOM files -*.xml -*.csv - -# Archived Backups (KiCad 6.0) -**/*-backups/*.zip - -# Local git-based history (KiCad 9.0+) -.history - -# Local project settings -*.kicad_prl diff --git a/data/gitignore/Kohana.gitignore b/data/gitignore/Kohana.gitignore deleted file mode 100644 index 8b2ab01a..00000000 --- a/data/gitignore/Kohana.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -application/cache/* -application/logs/* diff --git a/data/gitignore/Kotlin.gitignore b/data/gitignore/Kotlin.gitignore deleted file mode 100644 index 566e06bf..00000000 --- a/data/gitignore/Kotlin.gitignore +++ /dev/null @@ -1,27 +0,0 @@ -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* -replay_pid* - -# Kotlin Gradle plugin data, see https://kotlinlang.org/docs/whatsnew20.html#new-directory-for-kotlin-data-in-gradle-projects -.kotlin/ \ No newline at end of file diff --git a/data/gitignore/LICENSE b/data/gitignore/LICENSE deleted file mode 100644 index 670154e3..00000000 --- a/data/gitignore/LICENSE +++ /dev/null @@ -1,116 +0,0 @@ -CC0 1.0 Universal - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator and -subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for the -purpose of contributing to a commons of creative, cultural and scientific -works ("Commons") that the public can reliably and without fear of later -claims of infringement build upon, modify, incorporate in other works, reuse -and redistribute as freely as possible in any form whatsoever and for any -purposes, including without limitation commercial purposes. These owners may -contribute to the Commons to promote the ideal of a free culture and the -further production of creative, cultural and scientific works, or to gain -reputation or greater distribution for their Work in part through the use and -efforts of others. - -For these and/or other purposes and motivations, and without any expectation -of additional consideration or compensation, the person associating CC0 with a -Work (the "Affirmer"), to the extent that he or she is an owner of Copyright -and Related Rights in the Work, voluntarily elects to apply CC0 to the Work -and publicly distribute the Work under its terms, with knowledge of his or her -Copyright and Related Rights in the Work and the meaning and intended legal -effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not limited -to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, communicate, - and translate a Work; - - ii. moral rights retained by the original author(s) and/or performer(s); - - iii. publicity and privacy rights pertaining to a person's image or likeness - depicted in a Work; - - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - - v. rights protecting the extraction, dissemination, use and reuse of data in - a Work; - - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation thereof, - including any amended or successor version of such directive); and - - vii. other similar, equivalent or corresponding rights throughout the world - based on applicable law or treaty, and any national implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention of, -applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and -unconditionally waives, abandons, and surrenders all of Affirmer's Copyright -and Related Rights and associated claims and causes of action, whether now -known or unknown (including existing as well as future claims and causes of -action), in the Work (i) in all territories worldwide, (ii) for the maximum -duration provided by applicable law or treaty (including future time -extensions), (iii) in any current or future medium and for any number of -copies, and (iv) for any purpose whatsoever, including without limitation -commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes -the Waiver for the benefit of each member of the public at large and to the -detriment of Affirmer's heirs and successors, fully intending that such Waiver -shall not be subject to revocation, rescission, cancellation, termination, or -any other legal or equitable action to disrupt the quiet enjoyment of the Work -by the public as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason be -judged legally invalid or ineffective under applicable law, then the Waiver -shall be preserved to the maximum extent permitted taking into account -Affirmer's express Statement of Purpose. In addition, to the extent the Waiver -is so judged Affirmer hereby grants to each affected person a royalty-free, -non transferable, non sublicensable, non exclusive, irrevocable and -unconditional license to exercise Affirmer's Copyright and Related Rights in -the Work (i) in all territories worldwide, (ii) for the maximum duration -provided by applicable law or treaty (including future time extensions), (iii) -in any current or future medium and for any number of copies, and (iv) for any -purpose whatsoever, including without limitation commercial, advertising or -promotional purposes (the "License"). The License shall be deemed effective as -of the date CC0 was applied by Affirmer to the Work. Should any part of the -License for any reason be judged legally invalid or ineffective under -applicable law, such partial invalidity or ineffectiveness shall not -invalidate the remainder of the License, and in such case Affirmer hereby -affirms that he or she will not (i) exercise any of his or her remaining -Copyright and Related Rights in the Work or (ii) assert any associated claims -and causes of action with respect to the Work, in either case contrary to -Affirmer's express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - - b. Affirmer offers the Work as-is and makes no representations or warranties - of any kind concerning the Work, express, implied, statutory or otherwise, - including without limitation warranties of title, merchantability, fitness - for a particular purpose, non infringement, or the absence of latent or - other defects, accuracy, or the present or absence of errors, whether or not - discoverable, all to the greatest extent permissible under applicable law. - - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without limitation - any person's Copyright and Related Rights in the Work. Further, Affirmer - disclaims responsibility for obtaining any necessary consents, permissions - or other rights required for any use of the Work. - - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to this - CC0 or use of the Work. - -For more information, please see - diff --git a/data/gitignore/LabVIEW.gitignore b/data/gitignore/LabVIEW.gitignore deleted file mode 100644 index 472cf4e9..00000000 --- a/data/gitignore/LabVIEW.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -# Libraries -*.lvlibp -*.llb - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe - -# Metadata -*.aliases -*.lvlps -*.lvprojstate -.cache/ -*.UserState diff --git a/data/gitignore/LangChain.gitignore b/data/gitignore/LangChain.gitignore deleted file mode 100644 index c76ebfd9..00000000 --- a/data/gitignore/LangChain.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# gitignore template for LangChain products, e.g., LangGraph, LangSmith -# website: https://www.langchain.com/ -# website: https://www.langchain.com/langgraph - -# LangGraph -.langgraph_api/ diff --git a/data/gitignore/Laravel.gitignore b/data/gitignore/Laravel.gitignore deleted file mode 100644 index 9cbb7838..00000000 --- a/data/gitignore/Laravel.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -/vendor/ -node_modules/ -npm-debug.log -yarn-error.log - -# Laravel 4 specific -bootstrap/compiled.php -app/storage/ - -# Laravel 5 & Lumen specific -public/storage -public/hot - -# Laravel 5 & Lumen specific with changed public path -public_html/storage -public_html/hot - -storage/*.key -.env -Homestead.yaml -Homestead.json -/.vagrant -.phpunit.result.cache -/.phpunit.cache - -/public/build -/storage/pail -.env.backup -.env.production -.phpactor.json -auth.json diff --git a/data/gitignore/Lasal.gitignore b/data/gitignore/Lasal.gitignore deleted file mode 100644 index ca6417e2..00000000 --- a/data/gitignore/Lasal.gitignore +++ /dev/null @@ -1,47 +0,0 @@ -## LASAL ### -# website: https://www.sigmatek-automation.com/en/products/engineering-tool-lasal/ - -# lasal screen/visu runtime folders generated during build -**/Runtime -**/BAK -**/Language -**/TempPreview - -# lasal class runtime folders generated during build -ProjectInternal -Internal -**/Network/*/*.st -**/Drive/*.st - -# bootdisk files -**/Bootdisk - -# various filetypes generated at runtime or used for internal backups -*.ldi -*.bak -*.lob -*.lba -*.lcb -*.lock -*.plc -*.7z -*.zip -*.lcc -*.lds - -# tag files generated by the compiler -*.mme -**/MaeExp.txt -**/MaeExp.xml - -# SigCLib requires lba and lob files -!cObjLib.lob -!cObjLib.lba - -# opc related classes added automatically from lasal instance -!**/Class/OPC_UA/** -!**/Class/OPC_UA_Client/** -!**/Class/OPC_UA_Server/** -!**/Class/OPC_UA_ModuleBase/** -!**/Class/OPC_UA_AddressSpace/** -!**/Class/OPC_UA_OpenSSL_v1_1_1/** diff --git a/data/gitignore/Lean.gitignore b/data/gitignore/Lean.gitignore deleted file mode 100644 index d4aa2921..00000000 --- a/data/gitignore/Lean.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# cache and other artifacts produced by Lean's Lake build tool -.lake/ diff --git a/data/gitignore/Leiningen.gitignore b/data/gitignore/Leiningen.gitignore deleted file mode 100644 index a4cb69a3..00000000 --- a/data/gitignore/Leiningen.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -pom.xml -pom.xml.asc -*.jar -*.class -/lib/ -/classes/ -/target/ -/checkouts/ -.lein-deps-sum -.lein-repl-history -.lein-plugins/ -.lein-failures -.nrepl-port -.cpcache/ diff --git a/data/gitignore/LemonStand.gitignore b/data/gitignore/LemonStand.gitignore deleted file mode 100644 index c7d94ad3..00000000 --- a/data/gitignore/LemonStand.gitignore +++ /dev/null @@ -1,21 +0,0 @@ -boot.php -index.php -install.php -/config/* -!/config/config.php -/controllers/* -/init/* -/logs/* -/phproad/* -/temp/* -/uploaded/* -/installer_files/* -/modules/backend/* -/modules/blog/* -/modules/cms/* -/modules/core/* -/modules/session/* -/modules/shop/* -/modules/system/* -/modules/users/* -# add content_*.php if you don't want erase client changes to content diff --git a/data/gitignore/Lilypond.gitignore b/data/gitignore/Lilypond.gitignore deleted file mode 100644 index 513e6edd..00000000 --- a/data/gitignore/Lilypond.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -*.pdf -*.ps -*.midi -*.mid -*.log -*~ diff --git a/data/gitignore/Lithium.gitignore b/data/gitignore/Lithium.gitignore deleted file mode 100644 index 7b22568e..00000000 --- a/data/gitignore/Lithium.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -libraries/* -resources/tmp/* diff --git a/data/gitignore/Lua.gitignore b/data/gitignore/Lua.gitignore deleted file mode 100644 index 6fd0a376..00000000 --- a/data/gitignore/Lua.gitignore +++ /dev/null @@ -1,41 +0,0 @@ -# Compiled Lua sources -luac.out - -# luarocks build files -*.src.rock -*.zip -*.tar.gz - -# Object files -*.o -*.os -*.ko -*.obj -*.elf - -# Precompiled Headers -*.gch -*.pch - -# Libraries -*.lib -*.a -*.la -*.lo -*.def -*.exp - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex - diff --git a/data/gitignore/Luau.gitignore b/data/gitignore/Luau.gitignore deleted file mode 100644 index f7ecbc96..00000000 --- a/data/gitignore/Luau.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -# A fast, small, safe, gradually typed embeddable scripting language derived from Lua -# -# https://github.com/luau-lang/luau -# https://luau.org/ - -# Code coverage -coverage.out - -# Profiling -profile.out -profile.svg - -# Time trace -trace.json diff --git a/data/gitignore/Magento.gitignore b/data/gitignore/Magento.gitignore deleted file mode 100644 index abe6d79f..00000000 --- a/data/gitignore/Magento.gitignore +++ /dev/null @@ -1,45 +0,0 @@ -#--------------------------# -# Magento Default Files # -#--------------------------# - -/PATCH_*.sh - -/app/etc/local.xml - -/media/* -!/media/.htaccess - -!/media/customer -/media/customer/* -!/media/customer/.htaccess - -!/media/dhl -/media/dhl/* -!/media/dhl/logo.jpg - -!/media/downloadable -/media/downloadable/* -!/media/downloadable/.htaccess - -!/media/xmlconnect -/media/xmlconnect/* - -!/media/xmlconnect/custom -/media/xmlconnect/custom/* -!/media/xmlconnect/custom/ok.gif - -!/media/xmlconnect/original -/media/xmlconnect/original/* -!/media/xmlconnect/original/ok.gif - -!/media/xmlconnect/system -/media/xmlconnect/system/* -!/media/xmlconnect/system/ok.gif - -/var/* -!/var/.htaccess - -!/var/package -/var/package/* -!/var/package/*.xml - diff --git a/data/gitignore/Maven.gitignore b/data/gitignore/Maven.gitignore deleted file mode 100644 index d681b6ad..00000000 --- a/data/gitignore/Maven.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -target/ -pom.xml.tag -pom.xml.releaseBackup -pom.xml.versionsBackup -pom.xml.next -release.properties -dependency-reduced-pom.xml -buildNumber.properties -.mvn/timing.properties -# https://maven.apache.org/tools/wrapper/#Usage_with_or_without_Binary_JAR -.mvn/wrapper/maven-wrapper.jar - -# Eclipse m2e generated files -# Eclipse Core -.project -# JDT-specific (Eclipse Java Development Tools) -.classpath diff --git a/data/gitignore/Mercury.gitignore b/data/gitignore/Mercury.gitignore deleted file mode 100644 index 70ec8693..00000000 --- a/data/gitignore/Mercury.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -Mercury/ -Mercury.modules -*.mh -*.err -*.init -*.dll -*.exe -*.a -*.so -*.dylib -*.beams -*.d -*.c_date diff --git a/data/gitignore/MetaProgrammingSystem.gitignore b/data/gitignore/MetaProgrammingSystem.gitignore deleted file mode 100644 index 3e758410..00000000 --- a/data/gitignore/MetaProgrammingSystem.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -workspace.xml -junitvmwatcher*.properties -build.properties - -# generated java classes and java source files -# manually add any custom artifacts that can't be generated from the models -# http://confluence.jetbrains.com/display/MPSD25/HowTo+--+MPS+and+Git -classes_gen -source_gen -source_gen.caches - -# generated test code and test results -test_gen -test_gen.caches -TEST-*.xml -junit*.properties diff --git a/data/gitignore/ModelSim.gitignore b/data/gitignore/ModelSim.gitignore deleted file mode 100644 index 46592b86..00000000 --- a/data/gitignore/ModelSim.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# ignore ModelSim generated files and directories (temp files and so on) -[_@]* - -# ignore compilation output of ModelSim -*.mti -*.dat -*.dbs -*.psm -*.bak -*.cmp -*.jpg -*.html -*.bsf - -# ignore simulation output of ModelSim -wlf* -*.wlf -*.vstf -*.ucdb -cov*/ -transcript* -sc_dpiheader.h -vsim.dbg diff --git a/data/gitignore/Modelica.gitignore b/data/gitignore/Modelica.gitignore deleted file mode 100644 index aa2cc996..00000000 --- a/data/gitignore/Modelica.gitignore +++ /dev/null @@ -1,42 +0,0 @@ -# Modelica - an object-oriented language for modeling of cyber-physical systems -# https://modelica.org/ -# Ignore temporary files, build results, simulation files - -## Modelica-specific files -*~ -*.bak -*.bak-mo -*.mof -\#*\# -*.moe -*.mol - -## Build artefacts -*.exe -*.exp -*.o -*.pyc - -## Simulation files -*.mat - -## Package files -*.gz -*.rar -*.tar -*.zip - -## Dymola-specific files -buildlog.txt -dsfinal.txt -dsin.txt -dslog.txt -dsmodel* -dsres.txt -dymosim* -request -stat -status -stop -success -*. diff --git a/data/gitignore/MoonBit.gitignore b/data/gitignore/MoonBit.gitignore deleted file mode 100644 index b4ddc16d..00000000 --- a/data/gitignore/MoonBit.gitignore +++ /dev/null @@ -1,53 +0,0 @@ -# Build System Artifacts - -# MoonBit default build output directory. -_build/ -# Local MoonBit package cache directory. -.mooncakes/ - -# Coverage and Test Artifacts - -# Coverage reports generated by MoonBit tooling. -moonbit-coverage-*.txt -# Coverage output directory used by coverage commands. -_coverage/ -# Bisect runtime coverage data file. -bisect.coverage - -# JavaScript Target Artifacts - -# Uncomment if generated JavaScript should be ignored. -# *.js -# Source map files generated for JavaScript output. -*.js.map -# Node.js dependencies used in JS target workflows. -node_modules/ - -# WebAssembly Target Artifacts - -# Compiled WebAssembly binaries. -*.wasm -# WebAssembly text format output. -*.wat - -# MoonBit Pilot / Agent Artifacts - -# MoonBit agent runtime state and temporary files. -.moonagent/ - -# LLVM Backend Artifacts - -# LLVM textual intermediate representation (IR) files. -*.ll -# LLVM bitcode files. -*.bc -# Native object files from LLVM/native compilation. -*.o -# Generated assembly source files. -*.s -# Default executable output name on Unix-like systems. -*.out -# Native executable output on Windows. -*.exe -# macOS debug symbol bundles. -*.dSYM/ diff --git a/data/gitignore/Nanoc.gitignore b/data/gitignore/Nanoc.gitignore deleted file mode 100644 index 6f35daaf..00000000 --- a/data/gitignore/Nanoc.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# For projects using Nanoc (http://nanoc.ws/) - -# Default location for output (needs to match output_dir's value found in nanoc.yaml) -output/ - -# Temporary file directory -tmp/nanoc/ - -# Crash Log -crash.log diff --git a/data/gitignore/Nestjs.gitignore b/data/gitignore/Nestjs.gitignore deleted file mode 100644 index 845341e4..00000000 --- a/data/gitignore/Nestjs.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Nestjs specific -/dist -/node_modules -/build -/tmp - -# Logs -logs -*.log -npm-debug.log* -pnpm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# dotenv environment variable files -.env -.env.development -.env.test -.env.production - -# temp directory -.temp -.tmp diff --git a/data/gitignore/Nextjs.gitignore b/data/gitignore/Nextjs.gitignore deleted file mode 100644 index 45c1abce..00000000 --- a/data/gitignore/Nextjs.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# local env files -.env*.local -.env - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts diff --git a/data/gitignore/Nim.gitignore b/data/gitignore/Nim.gitignore deleted file mode 100644 index 32e1dc0f..00000000 --- a/data/gitignore/Nim.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -nimcache/ -nimblecache/ -htmldocs/ diff --git a/data/gitignore/Nix.gitignore b/data/gitignore/Nix.gitignore deleted file mode 100644 index a3575848..00000000 --- a/data/gitignore/Nix.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -# Ignore build outputs from performing a nix-build or `nix build` command -result -result-* - -# Ignore automatically generated direnv output -.direnv - -# Ignore NixOS interactive test driver history -**/.nixos-test-history diff --git a/data/gitignore/Node.gitignore b/data/gitignore/Node.gitignore deleted file mode 100644 index 1301e01e..00000000 --- a/data/gitignore/Node.gitignore +++ /dev/null @@ -1,149 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.* -!.env.example - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist -.output - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp directory -.temp - -# Sveltekit cache directory -.svelte-kit/ - -# vitepress build output -**/.vitepress/dist - -# vitepress cache directory -**/.vitepress/cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# Firebase cache directory -.firebase/ - -# TernJS port file -.tern-port - -# Stores Visual Studio Code versions used for testing Visual Studio Code extensions -.vscode-test - -# pnpm -.pnpm-store - -# yarn v3 -.pnp.* -.yarn/* -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/sdks -!.yarn/versions - -# Vite files -vite.config.js.timestamp-* -vite.config.ts.timestamp-* -.vite/ - -# Astro generated types -.astro/ - -# Turbo Repo -.turbo diff --git a/data/gitignore/OCaml.gitignore b/data/gitignore/OCaml.gitignore deleted file mode 100644 index 250caf74..00000000 --- a/data/gitignore/OCaml.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -*.annot -*.cmo -*.cma -*.cmi -*.a -*.o -*.cmx -*.cmxs -*.cmxa - -# Files containing detailed information about the compilation (generated -# by `ocamlc`/`ocamlopt` when invoked using the option `-bin-annot`). -# These files are typically useful for code inspection tools -# (e.g. Merlin). -*.cmt -*.cmti - -# ocamlbuild and Dune default working directory -_build/ - -# ocamlbuild targets -*.byte -*.native - -# oasis generated files -setup.data -setup.log - -# Merlin configuring file for Vim and Emacs -.merlin - -# Dune generated files -*.install - -# Local OPAM switch -_opam/ diff --git a/data/gitignore/Objective-C.gitignore b/data/gitignore/Objective-C.gitignore deleted file mode 100644 index 2ebce16e..00000000 --- a/data/gitignore/Objective-C.gitignore +++ /dev/null @@ -1,44 +0,0 @@ -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## User settings -xcuserdata/ - -## Obj-C/Swift specific -*.hmap - -## App packaging -*.ipa -*.dSYM.zip -*.dSYM - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control -# -# Pods/ -# -# Add this line if you want to avoid checking in source code from the Xcode workspace -# *.xcworkspace - -# Carthage -# -# Add this line if you want to avoid checking in source code from Carthage dependencies. -# Carthage/Checkouts - -Carthage/Build/ - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. -# Instead, use fastlane to re-generate the screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/#source-control - -fastlane/report.xml -fastlane/Preview.html -fastlane/screenshots/**/*.png -fastlane/test_output diff --git a/data/gitignore/Opa.gitignore b/data/gitignore/Opa.gitignore deleted file mode 100644 index 74c6219c..00000000 --- a/data/gitignore/Opa.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -_build -_tracks - -opa-debug-js - -*.opp -*.opx -*.opx.broken -*.dump -*.api -*.api-txt -*.exe -*.log diff --git a/data/gitignore/OpenCart.gitignore b/data/gitignore/OpenCart.gitignore deleted file mode 100644 index 97be41fa..00000000 --- a/data/gitignore/OpenCart.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -.htaccess -/config.php -admin/config.php - -!index.html - -download/ -image/data/ -image/cache/ -system/cache/ -system/logs/ - -system/storage/ - -# vQmod log files -vqmod/logs/* -# vQmod cache files -vqmod/vqcache/* -vqmod/checked.cache -vqmod/mods.cache diff --git a/data/gitignore/OracleForms.gitignore b/data/gitignore/OracleForms.gitignore deleted file mode 100644 index 699a4940..00000000 --- a/data/gitignore/OracleForms.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Compiled Form Modules -*.fmx - -# Compiled Menu Modules -*.mmx - -# Compiled Pre-Linked Libraries -*.plx diff --git a/data/gitignore/Packer.gitignore b/data/gitignore/Packer.gitignore deleted file mode 100644 index caa24ec7..00000000 --- a/data/gitignore/Packer.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# Cache objects -packer_cache/ - -# Crash log -crash.log - -# https://www.packer.io/guides/hcl/variables -# Exclude all .pkrvars.hcl files, which are likely to contain sensitive data, -# such as password, private keys, and other secrets. These should not be part of -# version control as they are data points which are potentially sensitive and -# subject to change depending on the environment. -# -*.pkrvars.hcl - -# For built boxes -*.box diff --git a/data/gitignore/Perl.gitignore b/data/gitignore/Perl.gitignore deleted file mode 100644 index 79d77ce6..00000000 --- a/data/gitignore/Perl.gitignore +++ /dev/null @@ -1,41 +0,0 @@ -!Build/ -.last_cover_stats -/META.yml -/META.json -/MYMETA.* -*.o -*.pm.tdy -*.bs - -# Devel::Cover -cover_db/ - -# Devel::NYTProf -nytprof.out - -# Dist::Zilla -/.build/ - -# Module::Build -_build/ -Build -Build.bat - -# Module::Install -inc/ - -# ExtUtils::MakeMaker -/blib/ -/_eumm/ -/*.gz -/Makefile -/Makefile.old -/MANIFEST.bak -/pm_to_blib -/*.zip - -# Carton/Carmel -/local/ -/.carmel/ -# cpanfile.snapshot should generally be ignored for library code, otherwise included -# cpanfile.snapshot diff --git a/data/gitignore/Phalcon.gitignore b/data/gitignore/Phalcon.gitignore deleted file mode 100644 index 6ffe3aa2..00000000 --- a/data/gitignore/Phalcon.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/cache/ -/config/development/ diff --git a/data/gitignore/PlayFramework.gitignore b/data/gitignore/PlayFramework.gitignore deleted file mode 100644 index ae5ec9fe..00000000 --- a/data/gitignore/PlayFramework.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# Ignore Play! working directory # -bin/ -/db -.eclipse -/lib/ -/logs/ -/modules -/project/project -/project/target -/target -tmp/ -test-result -server.pid -*.eml -/dist/ -.cache diff --git a/data/gitignore/Plone.gitignore b/data/gitignore/Plone.gitignore deleted file mode 100644 index 770a8681..00000000 --- a/data/gitignore/Plone.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -*.pyc -*.pyo -*.tmp* -*.mo -*.egg -*.EGG -*.egg-info -*.EGG-INFO -.*.cfg -bin/ -build/ -develop-eggs/ -downloads/ -eggs/ -fake-eggs/ -parts/ -dist/ -var/ diff --git a/data/gitignore/Prestashop.gitignore b/data/gitignore/Prestashop.gitignore deleted file mode 100644 index 9da6d29a..00000000 --- a/data/gitignore/Prestashop.gitignore +++ /dev/null @@ -1,173 +0,0 @@ -# Cache, temp and personal files - -/.htaccess -*.log - -# Cache -/cache/* -!/cache/.htaccess -!/cache/cachefs/index.php -!/cache/deprecated.txt -!/cache/index.php -!/cache/purifier/index.php -!/cache/push/activity -!/cache/push/index.php -!/cache/push/trends -!/cache/sandbox/index.php -!/cache/smarty/cache/index.php -!/cache/smarty/compile/index.php -!/cache/smarty/index.php -!/cache/tcpdf/index.php - -# Download -/download/* -!/download/.htaccess -!/download/index.php - -# Images -/img/* -!/img/.htaccess -!/img/index.php -!/img/404.gif -!/img/bg_500.png -!/img/bg_loader.png -!/img/favicon.ico -!/img/loader.gif -!/img/loadingAnimation.gif -!/img/logo.jpg -!/img/logo.png -!/img/logo_invoice.jpg -!/img/logo_stores.png -!/img/macFFBgHack.png -!/img/prestashop-avatar.png -!/img/prestashop@2x.png -!/img/preston-login-wink@2x.png -!/img/preston-login@2x.png -!/img/questionmark.png -!/img/genders/index.php -!/img/admin/index.php -!/img/c/index.php -!/img/cms/index.php -!/img/co/index.php -!/img/jquery-ui -!/img/l/index.php -!/img/m/index.php -!/img/os/index.php -!/img/p/index.php -!/img/s/index.php -!/img/scenes -!/img/st/index.php -!/img/su/index.php -!/img/t/index.php -!/img/tmp/index.php - -# Upload -/upload/* -!/upload/.htaccess - -/vendor/* -/docs/phpdoc-sf/ -/composer.lock -*.hot-update.js -*.hot-update.json - - -/admin-dev/autoupgrade/* -!/admin-dev/autoupgrade/index.php -!/admin-dev/autoupgrade/backup/index.php - -/admin-dev/backups/* -!/admin-dev/backups/.htaccess - -/admin-dev/import/* -!/admin-dev/import/.htaccess -!/admin-dev/import/index.php - -/admin-dev/export/* -!/admin-dev/export/.htaccess -!/admin-dev/export/index.php - -# Downloaded RTL files -/admin-dev/themes/default/css/bundle/default_rtl.css -/admin-dev/themes/default/css/bundle/shared_rtl.css -/admin-dev/themes/default/css/font_rtl.css -/admin-dev/themes/default/css/overrides_rtl.css -/admin-dev/themes/default/css/vendor/font-awesome/font-awesome_rtl.css -/admin-dev/themes/default/css/vendor/nv.d3_rtl.css -/admin-dev/themes/default/css/vendor/titatoggle-min_rtl.css -/admin-dev/themes/default/public/theme_rtl.css -/admin-dev/themes/new-theme/css/module/drop_rtl.css -/admin-dev/themes/new-theme/css/right-sidebar_rtl.css - -themes/*/cache/* - -# Config - -config/settings.inc.php -config/settings.old.php -config/xml/* -config/themes/* -!config/xml/themes/default.xml -themes/*/config/settings_*.json -app/config/parameters.old.yml -app/config/config.php - -# Themes, modules and overrides - -modules/* -override/* -themes/*/ -!themes/classic -!themes/_core -!themes/_libraries - -# Vendors and dependencies - -bower_components/ -node_modules/ -composer.phar -php-cs-fixer -.grunt/* - -# Translations and emails templates - -translations/* -mails/* -!mails/themes/ -!mails/_partials/ -themes/default-bootstrap/lang/* -themes/default-bootstrap/modules/*/translations/*.php -themes/default-bootstrap/mails/* -!themes/default-bootstrap/mails/en/ -themes/default-bootstrap/modules/*/mails/* -!themes/default-bootstrap/modules/*/mails/en - -# MISC - -*sitemap.xml -/robots.txt - -# Symfony - -/bin/ -/app/Resources/geoip/GeoLite2-City.mmdb -/app/Resources/translations/* -!/app/Resources/translations/default -/app/config/parameters.yml -/app/config/parameters.php -/build/ -/phpunit.xml -/var/* -!/var/cache -/var/cache/* -!var/cache/.gitkeep -!/var/logs -/var/logs/* -!var/logs/.gitkeep -!/var/sessions -/var/sessions/* -!var/sessions/.gitkeep -!var/SymfonyRequirements.php -/vendor/ -/web/bundles/ - diff --git a/data/gitignore/Processing.gitignore b/data/gitignore/Processing.gitignore deleted file mode 100644 index 942ebbcc..00000000 --- a/data/gitignore/Processing.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -.DS_Store -applet -application.linux-arm64 -application.linux-armv6hf -application.linux32 -application.linux64 -application.windows32 -application.windows64 -application.macosx -out diff --git a/data/gitignore/PureScript.gitignore b/data/gitignore/PureScript.gitignore deleted file mode 100644 index de86604d..00000000 --- a/data/gitignore/PureScript.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -# Dependencies -.psci_modules -.spago -bower_components -node_modules - -# Generated files -.psci -output diff --git a/data/gitignore/Python.gitignore b/data/gitignore/Python.gitignore deleted file mode 100644 index 6f596e17..00000000 --- a/data/gitignore/Python.gitignore +++ /dev/null @@ -1,220 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[codz] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py.cover -*.lcov -.hypothesis/ -.pytest_cache/ -cover/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -.pybuilder/ -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -# For a library or package, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# .python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -# Pipfile.lock - -# uv -# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control. -# This is especially recommended for binary packages to ensure reproducibility, and is more -# commonly ignored for libraries. -# uv.lock - -# poetry -# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. -# This is especially recommended for binary packages to ensure reproducibility, and is more -# commonly ignored for libraries. -# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control -# poetry.lock -# poetry.toml - -# pdm -# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. -# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python. -# https://pdm-project.org/en/latest/usage/project/#working-with-version-control -# pdm.lock -# pdm.toml -.pdm-python -.pdm-build/ - -# pixi -# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control. -# pixi.lock -# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one -# in the .venv directory. It is recommended not to include this directory in version control. -.pixi/* -!.pixi/config.toml - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm -__pypackages__/ - -# Celery stuff -celerybeat-schedule* -celerybeat.pid - -# Redis -*.rdb -*.aof -*.pid - -# RabbitMQ -mnesia/ -rabbitmq/ -rabbitmq-data/ - -# ActiveMQ -activemq-data/ - -# SageMath parsed files -*.sage.py - -# Environments -.env -.envrc -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs/Zensical documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# pytype static type analyzer -.pytype/ - -# Cython debug symbols -cython_debug/ - -# PyCharm -# JetBrains specific template is maintained in a separate JetBrains.gitignore that can -# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore -# and can be added to the global gitignore or merged into this file. For a more nuclear -# option (not recommended) you can uncomment the following to ignore the entire idea folder. -# .idea/ - -# Abstra -# Abstra is an AI-powered process automation framework. -# Ignore directories containing user credentials, local state, and settings. -# Learn more at https://abstra.io/docs -.abstra/ - -# Visual Studio Code -# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore that -# can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore -# and can be added to the global gitignore or merged into this file. However, if you prefer, you -# could uncomment the following to ignore the entire vscode folder -# .vscode/ -# Temporary file for partial code execution -tempCodeRunnerFile.py - -# Ruff stuff: -.ruff_cache/ - -# PyPI configuration file -.pypirc - -# Marimo -marimo/_static/ -marimo/_lsp/ -__marimo__/ - -# Streamlit -.streamlit/secrets.toml diff --git a/data/gitignore/Qooxdoo.gitignore b/data/gitignore/Qooxdoo.gitignore deleted file mode 100644 index d0c64102..00000000 --- a/data/gitignore/Qooxdoo.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -cache -cache-downloads -inspector -api -source/inspector.html diff --git a/data/gitignore/Qt.gitignore b/data/gitignore/Qt.gitignore deleted file mode 100644 index f417ad0d..00000000 --- a/data/gitignore/Qt.gitignore +++ /dev/null @@ -1,56 +0,0 @@ -# C++ objects and libs -*.slo -*.lo -*.o -*.a -*.la -*.lai -*.so -*.so.* -*.dll -*.dylib - -# Qt-es -object_script.*.Release -object_script.*.Debug -*_plugin_import.cpp -/.qmake.cache -/.qmake.stash -*.pro.user -*.pro.user.* -*.qbs.user -*.qbs.user.* -*.moc -moc_*.cpp -moc_*.h -qrc_*.cpp -ui_*.h -*.qmlc -*.jsc -Makefile* -*build-* -build/ -*.qm -*.prl -*.qmlls.ini - -# Qt unit tests -target_wrapper.* - -# QtCreator -*.autosave - -# QtCreator Qml -*.qmlproject.user -*.qmlproject.user.* - -# QtCreator CMake -CMakeLists.txt.user* - -# QtCreator 4.8< compilation database -compile_commands.json - -# QtCreator local machine specific files for imported projects -*creator.user* - -*_qmlcache.qrc diff --git a/data/gitignore/R.gitignore b/data/gitignore/R.gitignore deleted file mode 100644 index 05897912..00000000 --- a/data/gitignore/R.gitignore +++ /dev/null @@ -1,50 +0,0 @@ -# History files -.Rhistory -.Rapp.history - -# Session Data files -.RData -.RDataTmp - -# User-specific files -.Ruserdata - -# Example code in package build process -*-Ex.R - -# Output files from R CMD build -/*.tar.gz - -# Output files from R CMD check -/*.Rcheck/ - -# RStudio files -.Rproj.user/ - -# produced vignettes -vignettes/*.html -vignettes/*.pdf - -# OAuth2 token, see https://github.com/hadley/httr/releases/tag/v0.3 -.httr-oauth - -# knitr and R markdown default cache directories -*_cache/ -/cache/ - -# Temporary files created by R markdown -*.utf8.md -*.knit.md - -# R Environment Variables -.Renviron -.env - -# pkgdown site -docs/ - -# translation temp files -po/*~ - -# RStudio Connect folder -rsconnect/ diff --git a/data/gitignore/README.md b/data/gitignore/README.md deleted file mode 100644 index e688adc3..00000000 --- a/data/gitignore/README.md +++ /dev/null @@ -1,133 +0,0 @@ -# A collection of `.gitignore` templates - -This is GitHub’s collection of [`.gitignore`][man] file templates. -We use this list to populate the `.gitignore` template choosers available -in the GitHub.com interface when creating new repositories and files. - -For more information about how `.gitignore` files work, and how to use them, -the following resources are a great place to start: - -- The [Ignoring Files chapter][chapter] of the [Pro Git][progit] book. -- The [Ignoring Files article][help] on the GitHub Help site. -- The [gitignore(5)][man] manual page. - -[man]: https://git-scm.com/docs/gitignore -[help]: https://docs.github.com/en/get-started/git-basics/ignoring-files -[chapter]: https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository#_ignoring -[progit]: https://git-scm.com/book - -## Folder structure - -We support a collection of templates, organized in this way: - -- The root folder contains templates in common use, to help people get started - with popular programming languages and technologies. These define a meaningful - set of rules to help get started, and ensure you are not committing - unimportant files into your repository. -- [`Global`](./Global) contains templates for various editors, tools and - operating systems that can be used in different situations. It is recommended - that you either [add these to your global template](https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files#configuring-ignored-files-for-all-repositories-on-your-computer) - or merge these rules into your project-specific templates if you want to use - them permanently. -- [`community`](./community) contains specialized templates for other popular - languages, tools, and projects that don't currently belong in the mainstream - templates. These should be added to your project-specific templates when you - decide to adopt the framework or tool. - -## What makes a good template? - -First and foremost, a template contribution must adhere to our -[Contributing Guidelines](CONTRIBUTING.md). - -A template should contain a set of rules to help Git repositories work with a -specific programming language, framework, tool or environment. - -If it's not possible to curate a small set of useful rules for this situation, -then the template is not a good fit for this collection. - -If a template is mostly a list of files installed by a particular version of -some software (e.g. a PHP framework), it could live under the `community` -directory. See [versioned templates](#versioned-templates) for more details. - -If you have a small set of rules, or want to support a technology that is not -widely in use, and still believe this will be helpful to others, please read the -section about [specialized templates](#specialized-templates) for more details. - -Include details when opening a pull request if the template is important and visible. We -may not accept it immediately, but we can promote it to the root at a later date -based on interest. - -Please also understand that we can’t list every tool that ever existed. -Our aim is to curate a collection of the _most common and helpful_ templates, -not to make sure we cover every project possible. If we choose not to -include your language, tool, or project, it’s not because it’s not awesome. - -## Contributing guidelines - -Please see our [Contributing Guidelines](CONTRIBUTING.md). - -## Versioned templates - -Some templates can change greatly between versions, and if you wish to contribute -to this repository we need to follow this specific flow: - -- the template at the root should be the current supported version -- the template at the root should not have a version in the filename (i.e. - "evergreen") -- previous versions of templates should live under `community/` -- previous versions of the template should embed the version in the filename, - for readability - -This helps ensure users get the latest version (because they'll use whatever is -at the root) but helps maintainers support older versions still in the wild. - -## Specialized templates - -If you have a template that you would like to contribute, but it isn't quite -mainstream, please consider adding this to the `community` directory under a -folder that best suits where it belongs. - -The rules in your specialized template should be specific to the framework or -tool, and any additional templates should be mentioned in a comment in the -header of the template. - -For example, this template might live at `community/DotNet/InforCRM.gitignore`: - -```gitignore -# gitignore template for InforCRM (formerly SalesLogix) -# website: https://www.infor.com/products/customer-experience-suite/crm -# -# Recommended: VisualStudio.gitignore - -# Ignore model files that are auto-generated -ModelIndex.xml -ExportedFiles.xml - -# Ignore deployment files -[Mm]odel/[Dd]eployment - -# Force include portal SupportFiles -!Model/Portal/*/SupportFiles/[Bb]in/ -!Model/Portal/PortalTemplates/*/SupportFiles/[Bb]in -``` - -## Contributing workflow - -Here’s how we suggest you go about proposing a change to this project: - -1. [Fork this project][fork] to your account. -2. [Create a branch][branch] for the change you intend to make. -3. Make your changes to your fork. -4. [Send a pull request][pr] from your fork’s branch to our `main` branch. - -Using the web-based interface to make changes is fine too, and will help you -by automatically forking the project and prompting to send a pull request too. - -[fork]: https://docs.github.com/en/get-started/quickstart/fork-a-repo -[branch]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-and-deleting-branches-within-your-repository -[pr]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests - -## License - -[CC0-1.0](./LICENSE). - diff --git a/data/gitignore/ROS.gitignore b/data/gitignore/ROS.gitignore deleted file mode 100644 index 35d74bb7..00000000 --- a/data/gitignore/ROS.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -devel/ -logs/ -build/ -bin/ -lib/ -msg_gen/ -srv_gen/ -msg/*Action.msg -msg/*ActionFeedback.msg -msg/*ActionGoal.msg -msg/*ActionResult.msg -msg/*Feedback.msg -msg/*Goal.msg -msg/*Result.msg -msg/_*.py -build_isolated/ -devel_isolated/ - -# Generated by dynamic reconfigure -*.cfgc -/cfg/cpp/ -/cfg/*.py - -# Ignore generated docs -*.dox -*.wikidoc - -# eclipse stuff -.project -.cproject - -# qcreator stuff -CMakeLists.txt.user - -srv/_*.py -*.pcd -*.pyc -qtcreator-* -*.user - -/planning/cfg -/planning/docs -/planning/src - -*~ - -# Emacs -.#* - -# Catkin custom files -CATKIN_IGNORE diff --git a/data/gitignore/Racket.gitignore b/data/gitignore/Racket.gitignore deleted file mode 100644 index 93e40729..00000000 --- a/data/gitignore/Racket.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -.DS_Store -compiled/ -/doc/ -*~ -*.bak -\#* -.\#* diff --git a/data/gitignore/Rails.gitignore b/data/gitignore/Rails.gitignore deleted file mode 100644 index c55bb713..00000000 --- a/data/gitignore/Rails.gitignore +++ /dev/null @@ -1,69 +0,0 @@ -*.rbc -capybara-*.html -.rspec -/db/*.sqlite3 -/db/*.sqlite3-journal -/db/*.sqlite3-[0-9]* -/public/system -/coverage/ -/spec/tmp -*.orig -rerun.txt -pickle-email-*.html - -# Ignore all logfiles and tempfiles. -/log/* -/tmp/* -!/log/.keep -!/tmp/.keep - -# TODO Comment out this rule if you are OK with secrets being uploaded to the repo -config/initializers/secret_token.rb -config/master.key - -# Only include if you have production secrets in this file, which is no longer a Rails default -# config/secrets.yml - -# dotenv, dotenv-rails -# TODO Comment out these rules if environment variables can be committed -.env -.env*.local - -## Environment normalization: -/.bundle -/vendor/bundle - -# these should all be checked in to normalize the environment: -# Gemfile.lock, .ruby-version, .ruby-gemset - -# unless supporting rvm < 1.11.0 or doing something fancy, ignore this: -.rvmrc - -# if using bower-rails ignore default bower_components path bower.json files -/vendor/assets/bower_components -*.bowerrc -bower.json - -# Ignore pow environment settings -.powenv - -# Ignore Byebug command history file. -.byebug_history - -# Ignore node_modules -node_modules/ - -# Ignore precompiled javascript packs -/public/packs -/public/packs-test -/public/assets - -# Ignore yarn files -/yarn-error.log -yarn-debug.log* -.yarn-integrity - -# Ignore uploaded files in development -/storage/* -!/storage/.keep -/public/uploads diff --git a/data/gitignore/Raku.gitignore b/data/gitignore/Raku.gitignore deleted file mode 100644 index e792f6e4..00000000 --- a/data/gitignore/Raku.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# Gitignore for Raku (https://raku.org) -# As part of https://github.com/github/gitignore - -# precompiled files -.precomp -lib/.precomp - diff --git a/data/gitignore/ReScript.gitignore b/data/gitignore/ReScript.gitignore deleted file mode 100644 index b7364c93..00000000 --- a/data/gitignore/ReScript.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/node_modules/ -/lib/ -.bsb.lock diff --git a/data/gitignore/RhodesRhomobile.gitignore b/data/gitignore/RhodesRhomobile.gitignore deleted file mode 100644 index a211dcc3..00000000 --- a/data/gitignore/RhodesRhomobile.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -rholog-* -sim-* -bin/libs -bin/RhoBundle -bin/tmp -bin/target -bin/*.ap_ -*.o -*.jar diff --git a/data/gitignore/Ruby.gitignore b/data/gitignore/Ruby.gitignore deleted file mode 100644 index e3200e0f..00000000 --- a/data/gitignore/Ruby.gitignore +++ /dev/null @@ -1,56 +0,0 @@ -*.gem -*.rbc -/.config -/coverage/ -/InstalledFiles -/pkg/ -/spec/reports/ -/spec/examples.txt -/test/tmp/ -/test/version_tmp/ -/tmp/ - -# Used by dotenv library to load environment variables. -# .env - -# Ignore Byebug command history file. -.byebug_history - -## Specific to RubyMotion: -.dat* -.repl_history -build/ -*.bridgesupport -build-iPhoneOS/ -build-iPhoneSimulator/ - -## Specific to RubyMotion (use of CocoaPods): -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control -# -# vendor/Pods/ - -## Documentation cache and generated files: -/.yardoc/ -/_yardoc/ -/doc/ -/rdoc/ - -## Environment normalization: -/.bundle/ -/vendor/bundle -/lib/bundler/man/ - -# for a library or gem, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# Gemfile.lock -# .ruby-version -# .ruby-gemset - -# unless supporting rvm < 1.11.0 or doing something fancy, ignore this: -.rvmrc - -# Used by RuboCop. Remote config files pulled in from inherit_from directive. -# .rubocop-https?--* diff --git a/data/gitignore/Rust.gitignore b/data/gitignore/Rust.gitignore deleted file mode 100644 index c3ec7d27..00000000 --- a/data/gitignore/Rust.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Cargo -# will have compiled files and executables -debug -target - -# These are backup files generated by rustfmt -**/*.rs.bk - -# MSVC Windows builds of rustc generate these, which store debugging information -*.pdb - -# Generated by cargo mutants -# Contains mutation testing data -**/mutants.out*/ - -# rustc will dump stack traces when hitting an internal compiler error to PWD -rustc-ice-*.txt - -# RustRover -# JetBrains specific template is maintained in a separate JetBrains.gitignore that can -# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore -# and can be added to the global gitignore or merged into this file. For a more nuclear -# option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ diff --git a/data/gitignore/SCons.gitignore b/data/gitignore/SCons.gitignore deleted file mode 100644 index 8c2ad703..00000000 --- a/data/gitignore/SCons.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# for projects that use SCons for building: https://www.scons.org/ -.sconsign.dblite - -# When configure fails, SCons outputs these -config.log -.sconf_temp diff --git a/data/gitignore/SSDT-sqlproj.gitignore b/data/gitignore/SSDT-sqlproj.gitignore deleted file mode 100644 index 36c16598..00000000 --- a/data/gitignore/SSDT-sqlproj.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -## Ignore Visual Studio SSDT sqlproj specific temporary files, build results, etc -## -## -## Get latest from https://github.com/github/gitignore/blob/master/SSDT-sqlproj.gitignore -# Build output -bin/ -obj/ - -# DACPAC files -*.dacpac - -# Publish profiles (optional, if environment-specific) -*.publish.xml - -# SQL Server debug files -*.dbmdl -*.sqlcmdvars - -# Visual Studio settings -.vs/ - -# User-specific files -*.user -*.suo -*.userosscache -*.sln.docstates - -# Backup files -*.bak -*.log - diff --git a/data/gitignore/Salesforce.gitignore b/data/gitignore/Salesforce.gitignore deleted file mode 100644 index 3547a96f..00000000 --- a/data/gitignore/Salesforce.gitignore +++ /dev/null @@ -1,39 +0,0 @@ -# This file is used for Git repositories to specify intentionally untracked files that Git should ignore. -# If you are not using git, you can delete this file. For more information see: https://git-scm.com/docs/gitignore -# For useful gitignore templates see: https://github.com/github/gitignore - -# Salesforce cache -.sf/ -.sfdx/ -.localdevserver/ -deploy-options.json -.localdev - -# LWC VSCode autocomplete -**/lwc/jsconfig.json - -# LWC Jest coverage reports -coverage/ - -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Eslint cache -.eslintcache - -# Windows system files -Thumbs.db -ehthumbs.db -[Dd]esktop.ini -$RECYCLE.BIN/ - -# Salesforce Analyzer results -sca-results.csv -sfca_results.json - -# Local environment variables -.env diff --git a/data/gitignore/Sass.gitignore b/data/gitignore/Sass.gitignore deleted file mode 100644 index 159f5151..00000000 --- a/data/gitignore/Sass.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.sass-cache/ -*.css.map -*.sass.map -*.scss.map diff --git a/data/gitignore/Scala.gitignore b/data/gitignore/Scala.gitignore deleted file mode 100644 index 22eb384e..00000000 --- a/data/gitignore/Scala.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -*.class -*.tasty -*.log - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* diff --git a/data/gitignore/Scheme.gitignore b/data/gitignore/Scheme.gitignore deleted file mode 100644 index cbb89d78..00000000 --- a/data/gitignore/Scheme.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -*.ss~ -*.ss#* -.#*.ss - -*.scm~ -*.scm#* -.#*.scm diff --git a/data/gitignore/Scrivener.gitignore b/data/gitignore/Scrivener.gitignore deleted file mode 100644 index 5884b0c6..00000000 --- a/data/gitignore/Scrivener.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -*/Files/binder.autosave -*/Files/binder.backup -*/Files/search.indexes -*/Files/user.lock -*/Files/Docs/docs.checksum -*/Files/Data/docs.checksum -*/QuickLook/ -*/Settings/ui.plist diff --git a/data/gitignore/Sdcc.gitignore b/data/gitignore/Sdcc.gitignore deleted file mode 100644 index 07ee7d59..00000000 --- a/data/gitignore/Sdcc.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# SDCC stuff -*.lnk -*.lst -*.map -*.mem -*.rel -*.rst -*.sym diff --git a/data/gitignore/SeamGen.gitignore b/data/gitignore/SeamGen.gitignore deleted file mode 100644 index a418cf37..00000000 --- a/data/gitignore/SeamGen.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -/bootstrap/data -/bootstrap/tmp -/classes/ -/dist/ -/exploded-archives/ -/test-build/ -/test-output/ -/test-report/ -/target/ -temp-testng-customsuite.xml - -# based on http://stackoverflow.com/a/8865858/422476 I am removing inline comments - -#/classes/ all class files -#/dist/ contains generated war files for deployment -#/exploded-archives/ war content generation during deploy (or explode) -#/test-build/ test compilation (ant target for Seam) -#/test-output/ test results -#/test-report/ test report generation for, e.g., Hudson -#/target/ maven output folder -#temp-testng-customsuite.xml generated when running test cases under Eclipse - -# Thanks to @VonC and @kraftan for their helpful answers on a related question -# on StackOverflow.com: -# http://stackoverflow.com/questions/4176687 -# /what-is-the-recommended-source-control-ignore-pattern-for-seam-projects diff --git a/data/gitignore/SketchUp.gitignore b/data/gitignore/SketchUp.gitignore deleted file mode 100644 index 5160df3c..00000000 --- a/data/gitignore/SketchUp.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.skb diff --git a/data/gitignore/Smalltalk.gitignore b/data/gitignore/Smalltalk.gitignore deleted file mode 100644 index 178d87af..00000000 --- a/data/gitignore/Smalltalk.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -# changes file -*.changes -*.chg - -# system image -*.image -*.img7 -*.img - -# Pharo Smalltalk Debug log file -PharoDebug.log - -# Squeak Smalltalk Debug log file -SqueakDebug.log - -# Dolphin Smalltalk source file -*.sml - -# Dolphin Smalltalk error file -*.errors - -# Monticello package cache -/package-cache - -# playground cache -/play-cache -/play-stash - -# Metacello-github cache -/github-cache -github-*.zip diff --git a/data/gitignore/SolidWorks.gitignore b/data/gitignore/SolidWorks.gitignore deleted file mode 100644 index 8e35f973..00000000 --- a/data/gitignore/SolidWorks.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -# gitignore file for a SolidWorks project - -# SolidWorks temporary files -~$*.sldprt -~$*.sldasm -~$*.slddrw -~$*.sld - -# For systems with case-sensitive (SolidWorks uses both) -~$*.SLDPRT -~$*.SLDASM -~$*.SLDDRW -~$*.SLD - -# SolidWorks backups and auto-recovery -*.bak -*.swbak - -# Cache of simulation results -/simulation_results/ diff --git a/data/gitignore/Solidity-Remix.gitignore b/data/gitignore/Solidity-Remix.gitignore deleted file mode 100644 index a49555a4..00000000 --- a/data/gitignore/Solidity-Remix.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -# Remix compiler artifacts -**/artifacts/ -**/artifacts/** - -# Remix plugin state folders -deps/ -states/ - -# Debug info -*.dbg.json -*.tsbuildinfo - -# Optional -.env -.env.local \ No newline at end of file diff --git a/data/gitignore/Stella.gitignore b/data/gitignore/Stella.gitignore deleted file mode 100644 index 402a5438..00000000 --- a/data/gitignore/Stella.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -# Atari 2600 (Stella) support for multiple assemblers -# - DASM -# - CC65 - -# Assembled binaries and object directories -obj/ -a.out -*.bin -*.a26 - -# Add in special Atari 7800-based binaries for good measure -*.a78 diff --git a/data/gitignore/SugarCRM.gitignore b/data/gitignore/SugarCRM.gitignore deleted file mode 100644 index 6a183d1c..00000000 --- a/data/gitignore/SugarCRM.gitignore +++ /dev/null @@ -1,27 +0,0 @@ -## SugarCRM -# Ignore custom .htaccess stuff. -/.htaccess -# Ignore the cache directory completely. -# This will break the current behaviour. Which was often leading to -# the misuse of the repository as backup replacement. -# For development the cache directory can be safely ignored and -# therefore it is ignored. -/cache/* -!/cache/index.html -# Ignore some files and directories from the custom directory. -/custom/history/ -/custom/modulebuilder/ -/custom/working/ -/custom/modules/*/Ext/ -/custom/application/Ext/ -# Custom configuration should also be ignored. -/config.php -/config_override.php -# The silent upgrade scripts aren't needed. -/silentUpgrade*.php -# Logs files can safely be ignored. -*.log -# Ignore the new upload directories. -/upload/* -!/upload/index.html -/upload_backup/ diff --git a/data/gitignore/Swift.gitignore b/data/gitignore/Swift.gitignore deleted file mode 100644 index 52fe2f71..00000000 --- a/data/gitignore/Swift.gitignore +++ /dev/null @@ -1,62 +0,0 @@ -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## User settings -xcuserdata/ - -## Obj-C/Swift specific -*.hmap - -## App packaging -*.ipa -*.dSYM.zip -*.dSYM - -## Playgrounds -timeline.xctimeline -playground.xcworkspace - -# Swift Package Manager -# -# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. -# Packages/ -# Package.pins -# Package.resolved -# *.xcodeproj -# -# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata -# hence it is not needed unless you have added a package configuration file to your project -# .swiftpm - -.build/ - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control -# -# Pods/ -# -# Add this line if you want to avoid checking in source code from the Xcode workspace -# *.xcworkspace - -# Carthage -# -# Add this line if you want to avoid checking in source code from Carthage dependencies. -# Carthage/Checkouts - -Carthage/Build/ - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. -# Instead, use fastlane to re-generate the screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/#source-control - -fastlane/report.xml -fastlane/Preview.html -fastlane/screenshots/**/*.png -fastlane/test_output diff --git a/data/gitignore/Symfony.gitignore b/data/gitignore/Symfony.gitignore deleted file mode 100644 index 3dab634c..00000000 --- a/data/gitignore/Symfony.gitignore +++ /dev/null @@ -1,52 +0,0 @@ -# Cache and logs (Symfony2) -/app/cache/* -/app/logs/* -!app/cache/.gitkeep -!app/logs/.gitkeep - -# Email spool folder -/app/spool/* - -# Cache, session files and logs (Symfony3) -/var/cache/* -/var/logs/* -/var/sessions/* -!var/cache/.gitkeep -!var/logs/.gitkeep -!var/sessions/.gitkeep - -# Logs (Symfony4) -/var/log/* -!var/log/.gitkeep - -# Parameters -/app/config/parameters.yml -/app/config/parameters.ini - -# Managed by Composer -/app/bootstrap.php.cache -/var/bootstrap.php.cache -/bin/* -!bin/console -!bin/symfony_requirements -/vendor/ - -# Assets and user uploads -/web/bundles/ -/web/uploads/ - -# PHPUnit -/app/phpunit.xml -/phpunit.xml - -# Build data -/build/ - -# Composer PHAR -/composer.phar - -# Backup entities generated with doctrine:generate:entities command -**/Entity/*~ - -# Embedded web-server pid file -/.web-server-pid diff --git a/data/gitignore/SymphonyCMS.gitignore b/data/gitignore/SymphonyCMS.gitignore deleted file mode 100644 index 671c7ff9..00000000 --- a/data/gitignore/SymphonyCMS.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -manifest/cache/ -manifest/logs/ -manifest/tmp/ -symphony/ -workspace/uploads/ -install-log.txt diff --git a/data/gitignore/TeX.gitignore b/data/gitignore/TeX.gitignore deleted file mode 100644 index 542f7143..00000000 --- a/data/gitignore/TeX.gitignore +++ /dev/null @@ -1,331 +0,0 @@ -## Core latex/pdflatex auxiliary files: -*.aux -*.lof -*.log -*.lot -*.fls -*.out -*.toc -*.fmt -*.fot -*.cb -*.cb2 -.*.lb - -## Intermediate documents: -*.dvi -*.xdv -*-converted-to.* -# these rules might exclude image files for figures etc. -# *.ps -# *.eps -# *.pdf - -## Generated if empty string is given at "Please type another file name for output:" -.pdf - -## Bibliography auxiliary files (bibtex/biblatex/biber): -*.bbl -*.bbl-SAVE-ERROR -*.bcf -*.bcf-SAVE-ERROR -*.blg -*-blx.aux -*-blx.bib -*.run.xml - -## Build tool auxiliary files: -*.fdb_latexmk -*.synctex -*.synctex(busy) -*.synctex.gz -*.synctex.gz(busy) -*.pdfsync -*.rubbercache -rubber.cache - -## Build tool directories for auxiliary files -# latexrun -latex.out/ - -## Auxiliary and intermediate files from other packages: -# algorithms -*.alg -*.loa - -# achemso -acs-*.bib - -# amsthm -*.thm - -# attachfile2 -*.atfi - -# beamer -*.nav -*.pre -*.snm -*.vrb - -# changes -*.soc -*.loc - -# comment -*.cut - -# context -*.tuc -*.tui -*.tuo - -# cprotect -*.cpt - -# elsarticle (documentclass of Elsevier journals) -*.spl - -# endnotes -*.ent - -# fixme -*.lox - -# feynmf/feynmp -*.mf -*.mp -*.t[1-9] -*.t[1-9][0-9] -*.tfm - -#(r)(e)ledmac/(r)(e)ledpar -*.end -*.?end -*.[1-9] -*.[1-9][0-9] -*.[1-9][0-9][0-9] -*.[1-9]R -*.[1-9][0-9]R -*.[1-9][0-9][0-9]R -*.eledsec[1-9] -*.eledsec[1-9]R -*.eledsec[1-9][0-9] -*.eledsec[1-9][0-9]R -*.eledsec[1-9][0-9][0-9] -*.eledsec[1-9][0-9][0-9]R - -# glossaries -*.acn -*.acr -*.glg -*.glg-abr -*.glo -*.glo-abr -*.gls -*.gls-abr -*.glsdefs -*.lzo -*.lzs -*.slg -*.slo -*.sls - -# uncomment this for glossaries-extra (will ignore makeindex's style files!) -# *.ist - -# gnuplot -*.gnuplot -*.table - -# gnuplottex -*-gnuplottex-* - -# gregoriotex -*.gaux -*.glog -*.gtex - -# htlatex -*.4ct -*.4tc -*.idv -*.lg -*.trc -*.xref - -# hypdoc -*.hd - -# hyperref -*.brf - -# knitr -*-concordance.tex -# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files -# *.tikz -*-tikzDictionary - -# latexindent will create succesive backup files by default -#*.bak* - -# listings -*.lol - -# luatexja-ruby -*.ltjruby - -# makeidx -*.idx -*.ilg -*.ind - -# minitoc -*.maf -*.mlf -*.mlt -*.mtc[0-9]* -*.slf[0-9]* -*.slt[0-9]* -*.stc[0-9]* - -# minted -_minted* -*.data.minted -*.pyg - -# morewrites -*.mw - -# newpax -*.newpax - -# nomencl -*.nlg -*.nlo -*.nls - -# pax -*.pax - -# pdfpcnotes -*.pdfpc - -# sagetex -*.sagetex.sage -*.sagetex.py -*.sagetex.scmd - -# scrwfile -*.wrt - -# spelling -*.spell.bad -*.spell.txt - -# svg -svg-inkscape/ - -# sympy -*.sout -*.sympy -sympy-plots-for-*.tex/ - -# pdfcomment -*.upa -*.upb - -# pythontex -*.pytxcode -pythontex-files-*/ - -# tcolorbox -*.listing - -# thmtools -*.loe - -# TikZ & PGF -*.dpth -*.md5 -*.auxlock - -# titletoc -*.ptc - -# todonotes -*.tdo - -# vhistory -*.hst -*.ver - -# easy-todo -*.lod - -# xcolor -*.xcp - -# xmpincl -*.xmpi - -# xindy -*.xdy - -# xypic precompiled matrices and outlines -*.xyc -*.xyd - -# endfloat -*.ttt -*.fff - -# Latexian -TSWLatexianTemp* - -## Editors: -# WinEdt -*.bak -*.sav - -# latexindent.pl -*.bak[0-9]* - -# Texpad -.texpadtmp - -# LyX -*.lyx~ - -# Kile -*.backup - -# gummi -.*.swp - -# KBibTeX -*~[0-9]* - -# TeXnicCenter -*.tps - -# auto folder when using emacs and auctex -./auto/* -*.el - -# expex forward references with \gathertags -*-tags.tex - -# standalone packages -*.sta - -# Makeindex log files -*.lpz - -# xwatermark package -*.xwm - -# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib -# option is specified. Footnotes are the stored in a file with suffix Notes.bib. -# Uncomment the next line to have this generated file ignored. -#*Notes.bib diff --git a/data/gitignore/Terraform.gitignore b/data/gitignore/Terraform.gitignore deleted file mode 100644 index 78e7733b..00000000 --- a/data/gitignore/Terraform.gitignore +++ /dev/null @@ -1,44 +0,0 @@ -# Local .terraform directories -.terraform/ - -# .tfstate files -*.tfstate -*.tfstate.* - -# Crash log files -crash.log -crash.*.log - -# Exclude all .tfvars files, which are likely to contain sensitive data, such as -# password, private keys, and other secrets. These should not be part of version -# control as they are data points which are potentially sensitive and subject -# to change depending on the environment. -*.tfvars -*.tfvars.json - -# Ignore override files as they are usually used to override resources locally and so -# are not checked in -override.tf -override.tf.json -*_override.tf -*_override.tf.json - -# Ignore transient lock info files created by terraform apply -.terraform.tfstate.lock.info - -# Include override files you do wish to add to version control using negated pattern -# !example_override.tf - -# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan -# example: *tfplan* - -# Ignore CLI configuration files -.terraformrc -terraform.rc - -# Optional: ignore graph output files generated by `terraform graph` -# *.dot - -# Optional: ignore plan files saved before destroying Terraform configuration -# Uncomment the line below if you want to ignore planout files. -# planout \ No newline at end of file diff --git a/data/gitignore/TestComplete.gitignore b/data/gitignore/TestComplete.gitignore deleted file mode 100644 index 8378b9ee..00000000 --- a/data/gitignore/TestComplete.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -# Test Complete ignore files: https://support.smartbear.com/viewarticle/68002/ - -# Tester-specific Settings -*.tcCFGExtender -*.tcLS - -# Type library declarations -*.tlb - -# Log files -*.tcLogs - -# Backup files -*.bak diff --git a/data/gitignore/Textpattern.gitignore b/data/gitignore/Textpattern.gitignore deleted file mode 100644 index 3805636d..00000000 --- a/data/gitignore/Textpattern.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -.htaccess -css.php -rpc/ -sites/site*/admin/ -sites/site*/private/ -sites/site*/public/admin/ -sites/site*/public/setup/ -sites/site*/public/theme/ -textpattern/ -HISTORY.txt -README.txt diff --git a/data/gitignore/TurboGears2.gitignore b/data/gitignore/TurboGears2.gitignore deleted file mode 100644 index 122b3de2..00000000 --- a/data/gitignore/TurboGears2.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -*.py[co] - -# Default development database -devdata.db - -# Default data directory -data/* - -# Packages -*.egg -*.egg-info -dist -build - -# Installer logs -pip-log.txt - -# Unit test / coverage reports -.coverage -.tox diff --git a/data/gitignore/TwinCAT3.gitignore b/data/gitignore/TwinCAT3.gitignore deleted file mode 100644 index 1b120968..00000000 --- a/data/gitignore/TwinCAT3.gitignore +++ /dev/null @@ -1,60 +0,0 @@ -### TwinCAT3 ### -# website: https://www.beckhoff.com/twincat3/ - -# TwinCAT PLC -*.plcproj.bak -*.plcproj.orig -*.tpy -*.tclrs -*.library -*.compiled-library -*.compileinfo -*.asm -*.core -LineIDs.dbg -LineIDs.dbg.bak - -# TwinCAT C++ and shared types -# ignoring the TMC file is only useful for plain PLC programming -# as soon as shared data types (via tmc), C++ or in general TcCom-Module are used, the TMC file has to be part of the repository -*.tmc -*.tmcRefac - -# TwinCAT project files -*.tsproj.bak -*.tsproj.b?k -*.tsproj.orig -*.tspproj.bak -*.xti.bak -*.xti.bk? -*.xti.orig -*.xtv -*.xtv.bak -*.xtv.bk? -*.xt?.bk? -*.xt?.orig - -# Multiuser specific -**/.TcGit/ - -# exclude not required folders -**/_Boot/ -**/_CompileInfo/ -**/_Libraries/ -**/_ModuleInstall/ -**/_Deployment/ -**/_Repository/ - - -# To include a specific library directory (i.e. third party/custom libs), -# use pattern `!/**/_Libraries//` i.e. `!/**/_Libraries/www.tcunit.org/` -# - -# VS Shell project specific files and folders -**/.vs/ -*.~u -*.project.~u -*.suo - -# TwinCAT Measurement -*.vsm diff --git a/data/gitignore/Typo3.gitignore b/data/gitignore/Typo3.gitignore deleted file mode 100644 index 200c2a2b..00000000 --- a/data/gitignore/Typo3.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -## TYPO3 v6.2 -# Ignore several upload and file directories. -/fileadmin/user_upload/ -/fileadmin/_temp_/ -/fileadmin/_processed_/ -/uploads/ -# Ignore cache -/typo3conf/temp_CACHED* -/typo3conf/temp_fieldInfo.php -/typo3conf/deprecation_*.log -/typo3conf/ENABLE_INSTALL_TOOL -/typo3conf/realurl_autoconf.php -/FIRST_INSTALL -# Ignore system folders, you should have them symlinked. -# If not comment out the following entries. -/typo3 -/typo3_src -/typo3_src-* -/Packages -/.htaccess -/index.php -# Ignore temp directory. -/typo3temp/ diff --git a/data/gitignore/Unity.gitignore b/data/gitignore/Unity.gitignore deleted file mode 100644 index d6177106..00000000 --- a/data/gitignore/Unity.gitignore +++ /dev/null @@ -1,109 +0,0 @@ -# This .gitignore file should be placed at the root of your Unity project directory -# -# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore -# -# Recommended: add any editor/OS/tool-specific ignore rules from the Global/ templates as needed. -# See: https://github.com/github/gitignore/tree/main/Global -# -.utmp/ -/[Ll]ibrary/ -/[Tt]emp/ -/[Oo]bj/ -/[Bb]uild/ -/[Bb]uilds/ -/[Ll]ogs/ -/[Uu]ser[Ss]ettings/ -*.log - -# By default unity supports Blender asset imports, *.blend1 blender files do not need to be commited to version control. -*.blend1 -*.blend1.meta - -# MemoryCaptures can get excessive in size. -# They also could contain extremely sensitive data -/[Mm]emoryCaptures/ - -# Recordings can get excessive in size -/[Rr]ecordings/ - -# Uncomment this line if you wish to ignore the asset store tools plugin -# /[Aa]ssets/AssetStoreTools* - -# Autogenerated Jetbrains Rider plugin -/[Aa]ssets/Plugins/Editor/JetBrains* -# Jetbrains Rider personal-layer settings -*.DotSettings.user - -# Visual Studio cache directory -.vs/ - -# Gradle cache directory -.gradle/ - -# Autogenerated VS/MD/Consulo solution and project files -ExportedObj/ -.consulo/ -*.csproj -*.unityproj -*.sln -*.slnx -*.suo -*.tmp -*.user -*.userprefs -*.pidb -*.booproj -*.svd -*.pdb -*.mdb -*.opendb -*.VC.db - -# Unity3D generated meta files -*.pidb.meta -*.pdb.meta -*.mdb.meta - -# Unity3D generated file on crash reports -sysinfo.txt - -# Mono auto generated files -mono_crash.* - -# Builds -*.apk -*.aab -*.unitypackage -*.unitypackage.meta -*.app - -# Crashlytics generated file -crashlytics-build.properties - -# TestRunner generated files -InitTestScene*.unity* - -# Addressables default ignores, before user customizations -/ServerData -/[Aa]ssets/StreamingAssets/aa* -/[Aa]ssets/AddressableAssetsData/link.xml* -/[Aa]ssets/Addressables_Temp* -# By default, Addressables content builds will generate addressables_content_state.bin -# files in platform-specific subfolders, for example: -# /Assets/AddressableAssetsData/OSX/addressables_content_state.bin -/[Aa]ssets/AddressableAssetsData/*/*.bin* - -# Visual Scripting auto-generated files -/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db -/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db.meta -/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers -/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers.meta - -# Auto-generated scenes by play mode tests -/[Aa]ssets/[Ii]nit[Tt]est[Ss]cene*.unity* - -# UI Toolkit auto generated files -/UIElementsSchema/ - -# Auto-generated cache in Assets folder -/[Aa]ssets/[Ss]ceneDependencyCache* diff --git a/data/gitignore/UnrealEngine.gitignore b/data/gitignore/UnrealEngine.gitignore deleted file mode 100644 index b70ad5aa..00000000 --- a/data/gitignore/UnrealEngine.gitignore +++ /dev/null @@ -1,75 +0,0 @@ -# Visual Studio 2015 user specific files -.vs/ - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app -*.ipa - -# These project files can be generated by the engine -*.xcodeproj -*.xcworkspace -*.sln -*.suo -*.opensdf -*.sdf -*.VC.db -*.VC.opendb -.vsconfig - -# Precompiled Assets -SourceArt/**/*.png -SourceArt/**/*.tga - -# Binary Files -Binaries/* -Plugins/**/Binaries/* - -# Builds -Build/* - -# Whitelist PakBlacklist-.txt files -!Build/*/ -Build/*/** -!Build/*/PakBlacklist*.txt - -# Don't ignore icon files in Build -!Build/**/*.ico - -# Built data for maps -*_BuiltData.uasset - -# Configuration files generated by the Editor -Saved/* - -# Compiled source files for the engine to use -Intermediate/* -Plugins/**/Intermediate/* - -# Cache files for the editor to use -DerivedDataCache/* diff --git a/data/gitignore/VBA.gitignore b/data/gitignore/VBA.gitignore deleted file mode 100644 index 710dab19..00000000 --- a/data/gitignore/VBA.gitignore +++ /dev/null @@ -1,40 +0,0 @@ - -# Office temporary files -~$* - -# Access database lock files (laccdb, ldb) -*.[lL][aA][cC][cC][dD][bB] -*.[lL][dD][bB] - -# The following sections constitute a list of Office file extensions that support VBA. -# If you want to exclude Office files from your repo, uncomment the corresponding file extensions. - -# Excel (xls, xlsb, xlsm, xlt, xltm, xla, xlam) -#*.[xX][lL][sS] -#*.[xX][lL][sS][bB] -#*.[xX][lL][sS][mM] -#*.[xX][lL][tT] -#*.[xX][lL][tT][mM] -#*.[xX][lL][aA] -#*.[xX][lL][aA][mM] - -# Word (doc, docm, dot, dotm) -#*.[dD][oO][cC] -#*.[dD][oO][cC][mM] -#*.[dD][oO][tT] -#*.[dD][oO][tT][mM] - -# Access (accda, accdb, accde, mdb, mde) -#*.[aA][cC][cC][dD][aA] -#*.[aA][cC][cC][dD][bB] -#*.[aA][cC][cC][dD][eE] -#*.[mM][dD][bB] -#*.[mM][dD][eE] - -# PowerPoint (ppt, pptm, pot, potm, pps, ppsm) -#*.[pP][pP][tT] -#*.[pP][pP][tT][mM] -#*.[pP][oO][tT] -#*.[pP][oO][tT][mM] -#*.[pP][pP][sS] -#*.[pP][pP][sS][mM] diff --git a/data/gitignore/VVVV.gitignore b/data/gitignore/VVVV.gitignore deleted file mode 100644 index 5df43246..00000000 --- a/data/gitignore/VVVV.gitignore +++ /dev/null @@ -1,6 +0,0 @@ - -# .v4p backup files -*~.xml - -# Dynamic plugins .dll -bin/ diff --git a/data/gitignore/VisualStudio.gitignore b/data/gitignore/VisualStudio.gitignore deleted file mode 100644 index d5219a8d..00000000 --- a/data/gitignore/VisualStudio.gitignore +++ /dev/null @@ -1,428 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates -*.env - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ - -[Dd]ebug/x64/ -[Dd]ebugPublic/x64/ -[Rr]elease/x64/ -[Rr]eleases/x64/ -bin/x64/ -obj/x64/ - -[Dd]ebug/x86/ -[Dd]ebugPublic/x86/ -[Rr]elease/x86/ -[Rr]eleases/x86/ -bin/x86/ -obj/x86/ - -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -[Aa][Rr][Mm]64[Ee][Cc]/ -bld/ -[Oo]bj/ -[Oo]ut/ -[Ll]og/ -[Ll]ogs/ - -# Build results on 'Bin' directories -**/[Bb]in/* -# Uncomment if you have tasks that rely on *.refresh files to move binaries -# (https://github.com/github/gitignore/pull/3736) -#!**/[Bb]in/*.refresh - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* -*.trx - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Approval Tests result files -*.received.* - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ -.artifacts/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.idb -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -# but not Directory.Build.rsp, as it configures directory-level build defaults -!Directory.Build.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.tlog -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio 6 workspace and project file (working project files containing files to include in project) -*.dsw -*.dsp - -# Visual Studio 6 technical files -*.ncb -*.aps - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -**/.paket/paket.exe -paket-files/ - -# FAKE - F# Make -**/.fake/ - -# CodeRush personal settings -**/.cr/personal - -# Python Tools for Visual Studio (PTVS) -**/__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -#tools/** -#!tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog -MSBuild_Logs/ - -# AWS SAM Build and Temporary Artifacts folder -.aws-sam - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -**/.mfractor/ - -# Local History for Visual Studio -**/.localhistory/ - -# Visual Studio History (VSHistory) files -.vshistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -**/.ionide/ - -# Fody - auto-generated XML schema -FodyWeavers.xsd - -# VS Code files for those working on multiple tools -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -!.vscode/*.code-snippets - -# Local History for Visual Studio Code -.history/ - -# Built Visual Studio Code Extensions -*.vsix - -# Windows Installer files from build outputs -*.cab -*.msi -*.msix -*.msm -*.msp - -# Official VS Code C# Dev Kit Extension exclusion -#*.lscache diff --git a/data/gitignore/Waf.gitignore b/data/gitignore/Waf.gitignore deleted file mode 100644 index dad2b56b..00000000 --- a/data/gitignore/Waf.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -# For projects that use the Waf build system: https://waf.io/ -# Dot-hidden on Unix-like systems -.waf-*-*/ -.waf3-*-*/ -# Hidden directory on Windows (no dot) -waf-*-*/ -waf3-*-*/ -# Lockfile -.lock-waf_*_build diff --git a/data/gitignore/WordPress.gitignore b/data/gitignore/WordPress.gitignore deleted file mode 100644 index 8b933fa2..00000000 --- a/data/gitignore/WordPress.gitignore +++ /dev/null @@ -1,48 +0,0 @@ -# WordPress - ignore core, configuration, examples, uploads and logs. -# https://github.com/github/gitignore/blob/main/WordPress.gitignore - -# Core -# -# Note: if you want to stage/commit WP core files -# you can delete this whole section/until Configuration. -/wp-admin/ -/wp-content/index.php -/wp-content/languages -/wp-content/plugins/index.php -/wp-content/themes/index.php -/wp-includes/ -/index.php -/license.txt -/readme.html -/wp-*.php -/xmlrpc.php - -# Configuration -wp-config.php - -# Example themes -/wp-content/themes/twenty*/ - -# Example plugin -/wp-content/plugins/hello.php - -# Uploads -/wp-content/uploads/ - -# Log files -*.log - -# htaccess -/.htaccess - -# All plugins -# -# Note: If you wish to whitelist plugins, -# uncomment the next line -#/wp-content/plugins - -# All themes -# -# Note: If you wish to whitelist themes, -# uncomment the next line -#/wp-content/themes diff --git a/data/gitignore/Xojo.gitignore b/data/gitignore/Xojo.gitignore deleted file mode 100644 index 2feb1f70..00000000 --- a/data/gitignore/Xojo.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Xojo (formerly REALbasic and Real Studio) -Builds - */ -*.debug -*.debug.app -Debug*.exe -Debug*/Debug*.exe -Debug*/Debug*\ Libs -*.rbuistate -*.xojo_uistate -*.obsolete* diff --git a/data/gitignore/Yeoman.gitignore b/data/gitignore/Yeoman.gitignore deleted file mode 100644 index 7170d720..00000000 --- a/data/gitignore/Yeoman.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules/ -bower_components/ -*.log - -build/ -dist/ diff --git a/data/gitignore/Yii.gitignore b/data/gitignore/Yii.gitignore deleted file mode 100644 index 70f08754..00000000 --- a/data/gitignore/Yii.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -assets/* -!assets/.gitignore -protected/runtime/* -!protected/runtime/.gitignore -protected/data/*.db -themes/classic/views/ diff --git a/data/gitignore/ZendFramework.gitignore b/data/gitignore/ZendFramework.gitignore deleted file mode 100644 index f0b7d858..00000000 --- a/data/gitignore/ZendFramework.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Composer files -composer.phar -vendor/ - -# Local configs -config/autoload/*.local.php - -# Binary gettext files -*.mo - -# Data -data/logs/ -data/cache/ -data/sessions/ -data/tmp/ -temp/ - -#Doctrine 2 -data/DoctrineORMModule/Proxy/ -data/DoctrineORMModule/cache/ - -# Legacy ZF1 -demos/ -extras/documentation diff --git a/data/gitignore/Zephir.gitignore b/data/gitignore/Zephir.gitignore deleted file mode 100644 index 839cb5d7..00000000 --- a/data/gitignore/Zephir.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -# Cache files, generates by Zephir -.temp/ -.libs/ - -# Object files, generates by linker -*.lo -*.la -*.o -*.loT - -# Files generated by configure and Zephir, -# not required for extension compilation. -ext/build/ -ext/modules/ -ext/Makefile* -ext/config* -ext/acinclude.m4 -ext/aclocal.m4 -ext/autom4te* -ext/install-sh -ext/ltmain.sh -ext/missing -ext/mkinstalldirs -ext/run-tests.php -ext/.deps -ext/libtool diff --git a/data/gitignore/Zig.gitignore b/data/gitignore/Zig.gitignore deleted file mode 100644 index ebb94220..00000000 --- a/data/gitignore/Zig.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.zig-cache/ -zig-out/ -zig-pkg/ -*.o diff --git a/data/gitignore/bun.gitignore b/data/gitignore/bun.gitignore deleted file mode 100644 index 9703c86b..00000000 --- a/data/gitignore/bun.gitignore +++ /dev/null @@ -1,113 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# database -*.sqlite - -# package-json -package-json.lock - -# bun deploy file -node_modules.bun - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# TypeScript v1 declaration files -typings/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache - -# Next.js build output -.next - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and *not* Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port diff --git a/data/gitignore/community/AWS/CDK.gitignore b/data/gitignore/community/AWS/CDK.gitignore deleted file mode 100644 index 3fc2f799..00000000 --- a/data/gitignore/community/AWS/CDK.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# CDK asset staging directory. -# For more information about AWS-CDK, see https://docs.aws.amazon.com/cdk/ -.cdk.staging/ -cdk.out/ diff --git a/data/gitignore/community/AWS/SAM.gitignore b/data/gitignore/community/AWS/SAM.gitignore deleted file mode 100644 index dc9d020a..00000000 --- a/data/gitignore/community/AWS/SAM.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# gitignore template for AWS Serverless Application Model project -# website: https://docs.aws.amazon.com/serverless-application-model - -# Ignore build folder -.aws-sam/ diff --git a/data/gitignore/community/Alteryx.gitignore b/data/gitignore/community/Alteryx.gitignore deleted file mode 100644 index 8fe3c5cd..00000000 --- a/data/gitignore/community/Alteryx.gitignore +++ /dev/null @@ -1,44 +0,0 @@ -# gitignore template for Alteryx Designer -# website: https://www.alteryx.com/ -# website: https://help.alteryx.com/current/designer/alteryx-file-types - -# Alteryx Data Files -*.yxdb -*.cydb -*.cyidx -*.rptx -*.vvf -*.aws - -# Alteryx Special Files -*.yxwv -*.yxft -*.yxbe -*.bak -*.pcxml -*.log -*.bin -*.yxlang -CASS.ini - -# Alteryx License Files -*.yxlc -*.slc -*.cylc -*.alc -*.gzlc - -## gitignore reference sites -# https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository#_ignoring -# https://git-scm.com/docs/gitignore -# https://help.github.com/articles/ignoring-files/ - -## Useful knowledge from stackoverflow -# Even if you haven't tracked the files so far, git seems to be able to "know" about them even after you add them to .gitignore. -# WARNING: First commit your current changes, or you will lose them. -# Then run the following commands from the top folder of your git repo: -# git rm -r --cached . -# git add . -# git commit -m "fixed untracked files" - -# author: Kacper Ksieski \ No newline at end of file diff --git a/data/gitignore/community/AltiumDesigner.gitignore b/data/gitignore/community/AltiumDesigner.gitignore deleted file mode 100644 index 5e410492..00000000 --- a/data/gitignore/community/AltiumDesigner.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -# For PCBs designed using Altium Designer -# Website: https://www.altium.com/altium-designer/ - -# Directories containing cache data -History -__Previews - -# Directories containing logs and generated outputs -Project\ Logs* -Project\ Outputs* - -# Misc files generated by altium -debug.log -Status\ Report.txt -*.PcbDoc.htm -*.SchDocPreview -*.PcbDocPreview - -# Lock files sometimes left behind -.~lock.* diff --git a/data/gitignore/community/AutoIt.gitignore b/data/gitignore/community/AutoIt.gitignore deleted file mode 100644 index 1310b931..00000000 --- a/data/gitignore/community/AutoIt.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Compiled Scripts -*.a3x - -# Tidy Auto-Generated Backups -Backup/* - -# Au3Stripper Auto-Generated Files -*_stripped.au3 diff --git a/data/gitignore/community/AutomationStudio.gitignore b/data/gitignore/community/AutomationStudio.gitignore deleted file mode 100644 index b5552b17..00000000 --- a/data/gitignore/community/AutomationStudio.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -# gitignore template for B&R Automation Studio (AS) 4 -# website: https://www.br-automation.com/en-us/products/software/automation-software/automation-studio/ - -# AS temporary directories -Binaries/ -Diagnosis/ -Temp/ -TempObjects/ - -# AS transfer files -*artransfer.br -*arTrsfmode.nv - -# 'ignored' directory -ignored/ - -# ARNC0ext -*arnc0ext.br - -# AS File types -*.bak -*.isopen -*.orig -*.log -*.asar -*.csvlog* -*.set -!**/Physical/**/*.set - -# RevInfo variables -*RevInfo.var diff --git a/data/gitignore/community/B4X.gitignore b/data/gitignore/community/B4X.gitignore deleted file mode 100644 index 197c7bb2..00000000 --- a/data/gitignore/community/B4X.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -**/Objects -**/AutoBackups -*.meta diff --git a/data/gitignore/community/Bazel.gitignore b/data/gitignore/community/Bazel.gitignore deleted file mode 100644 index 4e1d5a2b..00000000 --- a/data/gitignore/community/Bazel.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -# gitignore template for Bazel build system -# website: https://bazel.build/ - -# Ignore all bazel-* symlinks. There is no full list since this can change -# based on the name of the directory bazel is cloned into. -/bazel-* - -# Directories for the Bazel IntelliJ plugin containing the generated -# IntelliJ project files and plugin configuration. Separate directories are -# for the IntelliJ, Android Studio and CLion versions of the plugin. -/.ijwb/ -/.aswb/ -/.clwb/ diff --git a/data/gitignore/community/Beef.gitignore b/data/gitignore/community/Beef.gitignore deleted file mode 100644 index 5c26f6a2..00000000 --- a/data/gitignore/community/Beef.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -build/ -recovery/ -BeefSpace_User.toml diff --git a/data/gitignore/community/BoxLang/ColdBox.gitignore b/data/gitignore/community/BoxLang/ColdBox.gitignore deleted file mode 100644 index 5cc5ccde..00000000 --- a/data/gitignore/community/BoxLang/ColdBox.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -# Servelet Ignores -WEB-INF - -# Engines + Database + CBFS + Secrets -.tmp/** -.env -.engine/** -.cbfs/** - -# Logs + Test Results -logs/** -tests/results/** - -## Ignored Dependencies -/boxlang_modules/* -effective-pom.xml -/coldbox/** -/testbox/** -/modules/** -/lib/java/** - -# NPM JS Assets (If applicable) -**/node_modules/* -npm-debug.log -yarn-error.log diff --git a/data/gitignore/community/CFML/ColdBox.gitignore b/data/gitignore/community/CFML/ColdBox.gitignore deleted file mode 100644 index 93f003fa..00000000 --- a/data/gitignore/community/CFML/ColdBox.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Servelet Ignores -WEB-INF - -# Engines + Database + CBFS + Secrets -.tmp/** -.env -.engine/** -.cbfs/** - -# Logs + Test Results -logs/** -tests/results/** - -## Ignored Dependencies -effective-pom.xml -/coldbox/** -/testbox/** -/modules/** -/lib/java/** - -# NPM JS Assets (If applicable) -**/node_modules/* -npm-debug.log -yarn-error.log diff --git a/data/gitignore/community/DotNet/InforCMS.gitignore b/data/gitignore/community/DotNet/InforCMS.gitignore deleted file mode 100644 index 29c7d8e5..00000000 --- a/data/gitignore/community/DotNet/InforCMS.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -# gitignore template for InforCRM (formerly SalesLogix) -# website: https://www.infor.com/product-summary/cx/infor-crm/ -# -# Recommended: VisualStudio.gitignore - -# Ignore model files that are auto-generated -ModelIndex.xml -ExportedFiles.xml - -# Ignore deployment files -[Mm]odel/[Dd]eployment - -# Force include portal SupportFiles -!Model/Portal/*/SupportFiles/[Bb]in/ -!Model/Portal/PortalTemplates/*/SupportFiles/[Bb]in diff --git a/data/gitignore/community/DotNet/Kentico.gitignore b/data/gitignore/community/DotNet/Kentico.gitignore deleted file mode 100644 index 3b278b6a..00000000 --- a/data/gitignore/community/DotNet/Kentico.gitignore +++ /dev/null @@ -1,64 +0,0 @@ -# gitignore template for using Kentico CMS -# website: http://www.kentico.com/ -# -# Recommended template: VisualStudio.gitignore - -# Include some Kentico folders excluded by Visual Studio rules -!CMS/CMSAdminControls/*/ -!CMS/CMSModules/System/*/ -!CMS/App_Data/CIRepository/** - -# Kentico temporary/environment files -CMS/App_Data/AzureCache -CMS/App_Data/AzureTemp -CMS/App_Data/CMSModules/DeviceProfile/logFiftyOne.txt -CMS/App_Data/CMSModules/DeviceProfiles/logFiftyOne.txt -CMS/App_Data/CMSModules/WebFarm/webfarm.sync -CMS/App_Data/CMSTemp -CMS/App_Data/Persistent -CMS/CMSSiteUtils/Export -CMS/CMSSiteUtils/Import - -# Ignore all smart search indexes, but not the other system folder contents -CMS/App_Data/CMSModules/SmartSearch/** -!CMS/App_Data/CMSModules/SmartSearch/*/ -!CMS/App_Data/CMSModules/SmartSearch/_StopWords/** -!CMS/App_Data/CMSModules/SmartSearch/_Synonyms/** - -## Kentico Starter Sites -# Starter site resource Files -CMS/App_Data/DancingGoat - -# Starter site web templates -CMS/App_Data/Templates/CommunitySite -CMS/App_Data/Templates/CorporateSite -CMS/App_Data/Templates/DancingGoat -CMS/App_Data/Templates/EcommerceSite -CMS/App_Data/Templates/IntranetPortal -CMS/App_Data/Templates/PersonalSite - -# Starter site app themes -CMS/App_Themes/CommunitySite -CMS/App_Themes/CorporateSite -CMS/App_Themes/EcommerceSite -CMS/App_Themes/IntranetPortal* -CMS/App_Themes/PersonalSite - -# Starter site ASPX templates -CMS/CMSTemplates/CorporateSite - -# Starter site media libraries -CMS/CommunitySite -CMS/CorporateSite -CMS/DancingGoat -CMS/EcommerceSite -CMS/IntranetPortal -CMS/PersonalSite - -## Project specific ignores -# Sensitive settings -AppSettings.config -ConnectionStrings.config - -# Project media libraries (recommend shared file storage) -# e.g. CMS/{SiteCodeName} diff --git a/data/gitignore/community/DotNet/Umbraco.gitignore b/data/gitignore/community/DotNet/Umbraco.gitignore deleted file mode 100644 index 260c7412..00000000 --- a/data/gitignore/community/DotNet/Umbraco.gitignore +++ /dev/null @@ -1,52 +0,0 @@ -## Ignore Umbraco files/folders generated for each instance -## -## Get latest from https://github.com/github/gitignore/blob/main/Umbraco.gitignore - -# Note: VisualStudio gitignore rules may also be relevant - -# Umbraco -# Ignore unimportant folders generated by Umbraco -**/App_Data/Logs/ -**/App_Data/[Pp]review/ -**/App_Data/TEMP/ -**/App_Data/NuGetBackup/ - -# Ignore Umbraco content cache file -**/App_Data/umbraco.config - -## this [Uu]mbraco/ folder should be created by cmd like `Install-Package UmbracoCms -Version 8.5.3` -## you can find your Umbraco version in your Web.config. (i.e. ) -## Uncomment this line if you think it fits the way you work on your project. -## **/[Uu]mbraco/ - -## The [Mm]edia/ folder contains content. Content may vary by environment and should therefore not be added to source control. -## Uncomment this line if you think it fits the way you work on your project. -## **/[Mm]edia/ - -# Don't ignore Umbraco packages (VisualStudio.gitignore mistakes this for a NuGet packages folder) -# Make sure to include details from VisualStudio.gitignore BEFORE this -!**/App_Data/[Pp]ackages/* -!**/[Uu]mbraco/[Dd]eveloper/[Pp]ackages/* -!**/[Uu]mbraco/[Vv]iews/[Pp]ackages/* - -# ImageProcessor DiskCache -**/App_Data/cache/ - -# Ignore the Models Builder models out of date flag -**/ood.flag - -# NEW for version 9 .Net 5 (Core) -#ignore umbraco backoffice assest from wwwroot -**/wwwroot/umbraco/ - -# SQLite files -*.sqlite.db* - -#ignore umbraco data/views/settings -**/umbraco/* - -#include default location for modelsbuilder output -!**/umbraco/models - -#include default location for packages -!**/umbraco/Data/packages diff --git a/data/gitignore/community/DotNet/core.gitignore b/data/gitignore/community/DotNet/core.gitignore deleted file mode 100644 index c4d93934..00000000 --- a/data/gitignore/community/DotNet/core.gitignore +++ /dev/null @@ -1,38 +0,0 @@ -*.swp -*.*~ -project.lock.json -.DS_Store -*.pyc -nupkg/ - -# Visual Studio Code -.vscode - -# Rider -.idea - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -build/ -bld/ -[Bb]in/ -[Oo]bj/ -[Oo]ut/ -msbuild.log -msbuild.err -msbuild.wrn - -# Visual Studio 2015 -.vs/ - diff --git a/data/gitignore/community/Dotter.gitignore b/data/gitignore/community/Dotter.gitignore deleted file mode 100644 index 86e82e8c..00000000 --- a/data/gitignore/community/Dotter.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# local files are for host-specific overrides -.dotter/local.toml - -# ignore caches -.dotter/cache.toml -.dotter/cache diff --git a/data/gitignore/community/Elixir/Phoenix.gitignore b/data/gitignore/community/Elixir/Phoenix.gitignore deleted file mode 100644 index 522c8d56..00000000 --- a/data/gitignore/community/Elixir/Phoenix.gitignore +++ /dev/null @@ -1,22 +0,0 @@ -# gitignore template for Phoenix projects -# website: http://www.phoenixframework.org/ -# -# Recommended template: Elixir.gitignore - -# Temporary files -/tmp - -# Static artifacts -/node_modules -/assets/node_modules - -# Since we are building assets from web/static, -# we ignore priv/static. You may want to comment -# this depending on your deployment strategy. -/priv/static/ - -# Installer-related files -/installer/_build -/installer/tmp -/installer/doc -/installer/deps diff --git a/data/gitignore/community/Exercism.gitignore b/data/gitignore/community/Exercism.gitignore deleted file mode 100644 index b74882c8..00000000 --- a/data/gitignore/community/Exercism.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# gitignore template for Exercism project -# website: https://exercism.io/ - -# Ignore .exercism folder which contain sensitive data -.exercism diff --git a/data/gitignore/community/FreeCAD.gitignore b/data/gitignore/community/FreeCAD.gitignore deleted file mode 100644 index 21e1231a..00000000 --- a/data/gitignore/community/FreeCAD.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# FreeCAD backup and temporary files -*.FC.lock -*.bak -*.FCBak -*.tmp \ No newline at end of file diff --git a/data/gitignore/community/GNOME/GNOMEShellExtension.gitignore b/data/gitignore/community/GNOME/GNOMEShellExtension.gitignore deleted file mode 100644 index a608cbb9..00000000 --- a/data/gitignore/community/GNOME/GNOMEShellExtension.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Ignored files for GNOME extension git repository - -*.zip diff --git a/data/gitignore/community/Golang/Go.AllowList.gitignore b/data/gitignore/community/Golang/Go.AllowList.gitignore deleted file mode 100644 index a309a018..00000000 --- a/data/gitignore/community/Golang/Go.AllowList.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# Allowlisting gitignore template for GO projects prevents us -# from adding various unwanted local files, such as generated -# files, developer configurations or IDE-specific files etc. -# -# Recommended: Go.AllowList.gitignore - -# Ignore everything -* - -# But not these files... -!/.gitignore - -!*.go -!go.sum -!go.mod - -!README.md -!LICENSE - -# !Makefile - -# ...even if they are in subdirectories -!*/ diff --git a/data/gitignore/community/Golang/Hugo.gitignore b/data/gitignore/community/Golang/Hugo.gitignore deleted file mode 100644 index 86c95ef4..00000000 --- a/data/gitignore/community/Golang/Hugo.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -# Generated files by hugo -/public/ -/resources/_gen/ -/assets/jsconfig.json -hugo_stats.json - -# Executable may be added to repository -hugo.exe -hugo.darwin -hugo.linux - -# Temporary lock file while building -/.hugo_build.lock diff --git a/data/gitignore/community/Gretl.gitignore b/data/gitignore/community/Gretl.gitignore deleted file mode 100644 index 582489e5..00000000 --- a/data/gitignore/community/Gretl.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# gitignore template for Gretl -# website: http://gretl.sourceforge.net/ - -# Auto-generated log file is overwritten whenever you start a new session -session.inp - -# Auto-generated temporary string code table -string_table.txt diff --git a/data/gitignore/community/HOL.gitignore b/data/gitignore/community/HOL.gitignore deleted file mode 100644 index da703dc2..00000000 --- a/data/gitignore/community/HOL.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -*Script - -# Holmake generated files -*Theory.sig -*Theory.sml -*.uo -*.ui - -# Holmake auxiliary files -.hollogs -.HOLMK diff --git a/data/gitignore/community/Hexo.gitignore b/data/gitignore/community/Hexo.gitignore deleted file mode 100644 index 570a5e7b..00000000 --- a/data/gitignore/community/Hexo.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -# gitignore template for Hexo sites -# website: https://hexo.io/ -# Recommended: Node.gitignore - -# Ignore generated directory -public/ - -# Ignore temp files -tmp/ -.tmp* - -# additional files -db.json -.deploy*/ diff --git a/data/gitignore/community/Java/JBoss4.gitignore b/data/gitignore/community/Java/JBoss4.gitignore deleted file mode 100644 index d416538c..00000000 --- a/data/gitignore/community/Java/JBoss4.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -# gitignore for JBoss v4 projects - -/server/all/data -/server/all/log -/server/all/tmp -/server/all/work -/server/default/data -/server/default/log -/server/default/tmp -/server/default/work -/server/minimal/data -/server/minimal/log -/server/minimal/tmp -/server/minimal/work - -# Note: -# there may be other directories that contain *.xml.failed or *.war.failed files -/server/default/deploy/*.xml.failed -/server/default/deploy/*.war.failed diff --git a/data/gitignore/community/Java/JBoss6.gitignore b/data/gitignore/community/Java/JBoss6.gitignore deleted file mode 100644 index dc7dce76..00000000 --- a/data/gitignore/community/Java/JBoss6.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -# gitignore for JBoss v6 projects -# -# Note: to ensure empty directories remain part of the repository, like -# `/server/minimal/lib`, you should add an empty `.gitignore` or `.gitkeep` file -# to the directory - otherwise you may have issues when starting the service. - -/server/all/data -/server/all/log -/server/all/tmp -/server/all/work -/server/default/data -/server/default/log -/server/default/tmp -/server/default/work -/server/minimal/data -/server/minimal/log -/server/minimal/tmp -/server/minimal/work -/server/jbossweb-standalone/data -/server/jbossweb-standalone/log -/server/jbossweb-standalone/tmp -/server/jbossweb-standalone/work -/server/standard/data -/server/standard/log -/server/standard/tmp -/server/standard/work -/server/default/deploy/*.jar.failed -/server/default/deploy/*.jar.dodeploy -/server/default/deploy/*.xml.failed -/server/default/deploy/*.xml.dodeploy -/server/default/deploy/*.war.failed -/server/default/deploy/*.war.dodeploy - diff --git a/data/gitignore/community/JavaScript/Cordova.gitignore b/data/gitignore/community/JavaScript/Cordova.gitignore deleted file mode 100644 index 4bd87859..00000000 --- a/data/gitignore/community/JavaScript/Cordova.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# gitignore template for the Cordova framework -# website: https://cordova.apache.org/ -# -# Recommended template: Node.gitignore - -# App platform binaries and built files -/platforms - -# Optional to ignore plugin Git clones -#/plugins diff --git a/data/gitignore/community/JavaScript/Expo.gitignore b/data/gitignore/community/JavaScript/Expo.gitignore deleted file mode 100644 index 3e8c3561..00000000 --- a/data/gitignore/community/JavaScript/Expo.gitignore +++ /dev/null @@ -1,39 +0,0 @@ -# .gitignore template for Expo -# website: https://expo.dev/ -# docs: https://docs.expo.dev/workflow/expo-cli/ -# -# Rationale: -# node_modules/ is always ignored -# .expo/, .expo-shared/ are Expo’s local state and project-settings cache (see docs) -#  Metro caches/logs are *.expo, *.tunnel, *.cache, *.tmp, *.log - -# Node modules -node_modules/ - -# Expo local state and caches -# runtime state (Metro bundler, dev-client data, tunnels) -.expo/ -# shared project settings (app.json edits, etc.) -.expo-shared/ - -# Metro bundler caches/logs -# generic Expo temp files -*.expo -# Expo DevTools tunnels -*.tunnel -# Metro cache folder -*.cache -# temp files created during bundling -*.tmp -# build or Metro logs -*.log - -# Environment variables -.env -.env.local -.env.*.local - -# Package manager logs -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/data/gitignore/community/JavaScript/Meteor.gitignore b/data/gitignore/community/JavaScript/Meteor.gitignore deleted file mode 100644 index 7194fd0e..00000000 --- a/data/gitignore/community/JavaScript/Meteor.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -# gitignore template for the Meteor framework -# website: https://www.meteor.com/ -# -# Recommended template: Node.gitignore - -# protect api keys in setting json -settings-production.json -settings.json - -# protect your mup.json settings -mup.json -mup.js diff --git a/data/gitignore/community/JavaScript/NWjs.gitignore b/data/gitignore/community/JavaScript/NWjs.gitignore deleted file mode 100644 index f006b08b..00000000 --- a/data/gitignore/community/JavaScript/NWjs.gitignore +++ /dev/null @@ -1,29 +0,0 @@ -# gitignore template for NW.js projects -# website: https://nwjs.io/ - -# Seen in standard and sdk versions -credits.html -locales/ -libEGL.dll -libGLEv2.dll -node.dll -nw.dll -nw.exe -natives_blob.bin -nw_100_percent.pak -nw_200_percent.pak -nw_elf.dll -snapshot_blob.bin -resources.pak - -# Seen only in standard -d3dcompiler_47.dll -ffmpeg.dll -icudtl.dat - -# Seen only in sdk -pnacl/ -chromedriver.exe -nacl_irt_x86_64.nexe -nwjc.exe -payload.exe diff --git a/data/gitignore/community/JavaScript/Vue.gitignore b/data/gitignore/community/JavaScript/Vue.gitignore deleted file mode 100644 index 4538951c..00000000 --- a/data/gitignore/community/JavaScript/Vue.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -# gitignore template for Vue.js projects -# -# Recommended template: Node.gitignore - -# TODO: where does this rule come from? -docs/_book - -# TODO: where does this rule come from? -test/ diff --git a/data/gitignore/community/LensStudio.gitignore b/data/gitignore/community/LensStudio.gitignore deleted file mode 100644 index 5aa2e950..00000000 --- a/data/gitignore/community/LensStudio.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# gitignore template for LensStudio -# website: https://lensstudio.snapchat.com/ - -# macOS/IDE # -.DS_Store -.idea - -# js # -node_modules -yarn.lock - -# Python # -__pycache__/ -*.py[cod] -*$py.class -[Bb]ackup* diff --git a/data/gitignore/community/Linux/Flatpak.gitignore b/data/gitignore/community/Linux/Flatpak.gitignore deleted file mode 100644 index 9a5619c6..00000000 --- a/data/gitignore/community/Linux/Flatpak.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.flatpak-builder -builddir -repo diff --git a/data/gitignore/community/Linux/Snap.gitignore b/data/gitignore/community/Linux/Snap.gitignore deleted file mode 100644 index ea38c6dd..00000000 --- a/data/gitignore/community/Linux/Snap.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -# gitginore template for creating Snap packages -# website: https://snapcraft.io/ - -parts/ -prime/ -stage/ -*.snap - -# Snapcraft global state tracking data(automatically generated) -# https://forum.snapcraft.io/t/location-to-save-global-state/768 -/snap/.snapcraft/ - -# Source archive packed by `snapcraft cleanbuild` before pushing to the LXD container -/*_source.tar.bz2 diff --git a/data/gitignore/community/Logtalk.gitignore b/data/gitignore/community/Logtalk.gitignore deleted file mode 100644 index c680e647..00000000 --- a/data/gitignore/community/Logtalk.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -# gitignore template for LogTalk, a programming language that builds upon Prolog -# website: https://logtalk.org/ - -# Logtalk temporary file directories -.lgt_tmp/ -lgt_tmp/ - -# Logtalk default unit testing and doclet results and logs directories -logtalk_tester_logs/ -logtalk_doclet_logs/ - -# backend Prolog compiler temporary files -.pl-history -*.out -*.xwam -*.qo -*.ql -*.itf -*.po diff --git a/data/gitignore/community/MetaTrader5.gitignore b/data/gitignore/community/MetaTrader5.gitignore deleted file mode 100644 index 21fef0aa..00000000 --- a/data/gitignore/community/MetaTrader5.gitignore +++ /dev/null @@ -1,77 +0,0 @@ -# MetaTrader 5 and MQL5 gitignore template -# Project homepage: https://www.metatrader5.com/en - -# Compiled MQL5 executables (binaries) -# These are generated from .mq5 source files and should not be committed. -*.ex5 -# For MQL4 compatibility if you also manage MT4 projects in a similar structure -*.ex4 - -# Log files -# Terminal logs, strategy tester logs, and custom logs from Print() functions. -*.log -# Strategy Tester logs -*.slog - -# Strategy Tester specific files -# History data, optimization results, and temporary files used by the tester. -# FXT files (history data for testing) -*.fxt -# History data files (can be large) -*.hst -# Initialization files (often generated by tester or EAs) -*.ini -# Data files (various purposes, often temporary) -*.dat -# CSV export files (e.g., from tester reports) -*.csv -# Journal files (tester journal) -*.jrn - -# Market Watch sets and profiles -# User-specific lists of symbols in Market Watch, and terminal profiles. -# Market Watch symbol sets -*.set -# Chart templates -*.tpl -# Chart settings files (can be generated when saving templates or profiles) -*.chr - -# External libraries (DLLs) -# If you use custom DLLs, you might want to ignore them if they are built separately -# and not part of your MQL5 source code repository. -*.dll - -# User-specific configuration and credentials -# Files containing sensitive information or local user settings. -# Environment variables (e.g., for Python integration credentials) -.env -# Configuration files (if not meant to be shared) -*.cfg -# Be careful: if you have config JSONs you *do* want to commit, add specific exceptions. -*.json -# Example: !config.json (to include config.json but ignore other *.json) - -# Temporary files and backup files generated by MetaEditor -# Temporary files (e.g., ~MyScript.mq5) -*.~* -# Backup files (e.g., MyScript.mq5.bak) -*.bak -*.mqh.bak -*.mq5.bak - -# MetaEditor project files -# Project files for MetaEditor workspaces. -.mqproj - -# Python specific ignores (if you also keep Python scripts or Jupyter notebooks in this repository) -# These are relevant if your Git repo root is higher up (e.g., the terminal folder itself) -# or if you mix Python code within your MQL5 structure. -# Python compiled bytecode cache -__pycache__/ -# Jupyter Notebook checkpoints -.ipynb_checkpoints/ -# Python compiled files -*.pyc -# Python dynamic modules -*.pyd diff --git a/data/gitignore/community/Move.gitignore b/data/gitignore/community/Move.gitignore deleted file mode 100644 index b7d406e7..00000000 --- a/data/gitignore/community/Move.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# Generated by Move -# will have compiled files -build/ - -# Remove possibly saving credentials to the git repository -.aptos/ diff --git a/data/gitignore/community/NasaSpecsIntact.gitignore b/data/gitignore/community/NasaSpecsIntact.gitignore deleted file mode 100644 index 626d1816..00000000 --- a/data/gitignore/community/NasaSpecsIntact.gitignore +++ /dev/null @@ -1,40 +0,0 @@ -# gitignore template for Nasa SpecsIntact (SI) -# Website: https://specsintact.ksc.nasa.gov/ -# -# Recommended: -# MicrosoftOffice.gitignore -# - -# SpecsIntact (SI) Locking file; this would lock everyone out. -*.se$ - -# SI Reports; auto-generated. They do not belong in the repository -# as they will be re-created exactly when using a specific checkout point. -*.RPT -ADDRVER.* -BRKTVER.* -DUPEREF.* -REFVER.* -SECTVER.* -SUBMVER.* -TTLDIFFS.* - -# SpecsIntact files that change a lot and don't actually affect SI -# PULL.TBL is an auto-generated file to help speed SI loading. -PULL.TBL -pulltbl.bck - -# Tailoring information. -# Keep tailor.tag; it is a list of tailoring options in SI. - -# JOB.OTL informs SI where a spec section came from. -# Keeping the old one isn't useful in git. -JOB.OTL.OLD - -# OneNote TOC Files; SI Work Directories may be installed in a location co-located with OneNote -# notebooks, and if so, OneNote will litter the SI folder with these. -*.onetoc* - -# Log files, typically tagfix or other auto generated logs that aren't useful -# outside of the user that made them and clutter up the index. -*.log diff --git a/data/gitignore/community/Obsidian/NotesAndCoreConfiguration.gitignore b/data/gitignore/community/Obsidian/NotesAndCoreConfiguration.gitignore deleted file mode 100644 index 4eff01da..00000000 --- a/data/gitignore/community/Obsidian/NotesAndCoreConfiguration.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# Excludes Obsidian workspace cache and plugins. All notes and core obsidian -# configuration files are tracked by Git. - -# The current application UI state (DOM layout, recently-opened files, etc.) is -# stored in these files (separate for desktop and mobile) so you can resume -# your session seamlessly after a restart. If you want to track UI state, use -# the Workspaces core plugin instead of relying on these files. -.obsidian/workspace.json -.obsidian/workspace-mobile.json - -# Obsidian plugins are stored under .obsidian/plugins/$plugin_name. They -# contain metadata (manifest.json), application code (main.js), stylesheets -# (styles.css), and user-configuration data (data.json). -# We want to exclude all plugin-related files, so we can exclude everything -# under this directory. -.obsidian/plugins/**/* diff --git a/data/gitignore/community/Obsidian/NotesAndExtendedConfiguration.gitignore b/data/gitignore/community/Obsidian/NotesAndExtendedConfiguration.gitignore deleted file mode 100644 index 58c3f71e..00000000 --- a/data/gitignore/community/Obsidian/NotesAndExtendedConfiguration.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -# Excludes Obsidian workspace cache and plugin code, but retains plugin -# configuration. All notes and user-controlled configuration files are tracked -# by Git. -# -# !!! WARNING !!! -# -# Community plugins may store sensitive secrets in their data.json files. By -# including these files, those secrets may be tracked in your Git repository. -# -# To ignore configurations for specific plugins, add a line like this after the -# contents of this file (order is important): -# .obsidian/plugins/{{plugin_name}}/data.json -# -# Alternatively, ensure that you are treating your entire Git repository as -# sensitive data, since it may contain secrets, or may have contained them in -# past commits. Understand your threat profile, and make the decision -# appropriate for yourself. If in doubt, err on the side of not including -# plugin configuration. Use one of the alternative gitignore files instead: -# * NotesOnly.gitignore -# * NotesAndCoreConfiguration.gitignore - -# The current application UI state (DOM layout, recently-opened files, etc.) is -# stored in these files (separate for desktop and mobile) so you can resume -# your session seamlessly after a restart. If you want to track UI state, use -# the Workspaces core plugin instead of relying on these files. -.obsidian/workspace.json -.obsidian/workspace-mobile.json - -# Obsidian plugins are stored under .obsidian/plugins/$plugin_name. They -# contain metadata (manifest.json), application code (main.js), stylesheets -# (styles.css), and user-configuration data (data.json). -# We only want to track data.json, so we: -# 1. exclude everything that the plugin folders contain, -# 2. unignore data.json in the plugin folders -.obsidian/plugins/*/** -!.obsidian/plugins/*/data.json diff --git a/data/gitignore/community/Obsidian/NotesOnly.gitignore b/data/gitignore/community/Obsidian/NotesOnly.gitignore deleted file mode 100644 index 2b3b76ee..00000000 --- a/data/gitignore/community/Obsidian/NotesOnly.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Excludes all Obsidian-related configuration. All notes are tracked by Git. - -# All Obsidian configuration and runtime state is stored here -.obsidian/**/* diff --git a/data/gitignore/community/OpenSSL.gitignore b/data/gitignore/community/OpenSSL.gitignore deleted file mode 100644 index 732b1f16..00000000 --- a/data/gitignore/community/OpenSSL.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -# OpenSSL-related files best not committed - -## Certificate Authority -*.ca - -## Certificate -*.crt - -## Certificate Sign Request -*.csr - -## Certificate -*.der - -## Key database file -*.kdb - -## OSCP request data -*.org - -## PKCS #12 -*.p12 - -## PEM-encoded certificate data -*.pem - -## Random number seed -*.rnd - -## SSLeay data -*.ssleay - -## S/MIME message -*.smime diff --git a/data/gitignore/community/OpenTofu.gitignore b/data/gitignore/community/OpenTofu.gitignore deleted file mode 100644 index 8a7f7b76..00000000 --- a/data/gitignore/community/OpenTofu.gitignore +++ /dev/null @@ -1,42 +0,0 @@ -# Local .terraform directories -**/.terraform/* - -# .tfstate files -*.tfstate -*.tfstate.* - -# Crash log files -crash.log -crash.*.log - -# Exclude all .tfvars files, which are likely to contain sensitive data, such as -# password, private keys, and other secrets. These should not be part of version -# control as they are data points which are potentially sensitive and subject -# to change depending on the environment. -*.tfvars -*.tfvars.json - -# Ignore override files as they are usually used to override resources locally and so -# are not checked in -override.tf -override.tofu -override.tf.json -override.tofu.json -*_override.tf -*_override.tofu -*_override.tf.json -*_override.tofu.json - -# Ignore transient lock info files created by tofu apply -.terraform.tfstate.lock.info - -# Include override files you do wish to add to version control using negated pattern -# !example_override.tf -# !example_override.tofu - -# Include tfplan files to ignore the plan output of command: tofu plan -out=tfplan -# example: *tfplan* - -# Ignore CLI configuration files -.terraformrc -terraform.rc diff --git a/data/gitignore/community/PHP/Bitrix.gitignore b/data/gitignore/community/PHP/Bitrix.gitignore deleted file mode 100644 index d288916f..00000000 --- a/data/gitignore/community/PHP/Bitrix.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# gitignore template for 1C-Bitrix, a PHP-based CMS -# website: https://www.1c-bitrix.ru - -#Exclude all of core files -/bitrix/* - -#But not the templates and non bitrix components -!/bitrix/templates -!/bitrix/components -/bitrix/components/bitrix - -#Exclude bitrix gadgets -!/bitrix/gadgets -/bitrix/gadgets/bitrix - -#User can use that directory to store some stuff, but it's not really recommended, just use /local instead of this -!/bitrix/php_interface/ - -#Exclude database configs -/bitrix/php_interface/dbconn.php - -#Exclude default file storage directory -/upload/ diff --git a/data/gitignore/community/PHP/CodeSniffer.gitignore b/data/gitignore/community/PHP/CodeSniffer.gitignore deleted file mode 100644 index cf8b8a92..00000000 --- a/data/gitignore/community/PHP/CodeSniffer.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# gitignore for the PHP Codesniffer framework -# website: https://github.com/squizlabs/PHP_CodeSniffer -# -# Recommended template: PHP.gitignore - -/wpcs/* diff --git a/data/gitignore/community/PHP/Drupal7.gitignore b/data/gitignore/community/PHP/Drupal7.gitignore deleted file mode 100644 index da61e4a5..00000000 --- a/data/gitignore/community/PHP/Drupal7.gitignore +++ /dev/null @@ -1,43 +0,0 @@ -# gitignore template for Drupal 7 projects -# -# It is recommended that you use `Drupal.gitignore` as this is the latest version - -# Ignore configuration files that may contain sensitive information. -sites/*/*settings*.php -sites/example.sites.php - -# Ignore paths that contain generated content. -files/ -sites/*/files -sites/*/private -sites/*/translations - -# Ignore default text files -robots.txt -/CHANGELOG.txt -/COPYRIGHT.txt -/INSTALL*.txt -/LICENSE.txt -/MAINTAINERS.txt -/UPGRADE.txt -/README.txt -sites/README.txt -sites/all/libraries/README.txt -sites/all/modules/README.txt -sites/all/themes/README.txt - -# Ignore everything but the "sites" folder ( for non core developer ) -.htaccess -web.config -authorize.php -cron.php -index.php -install.php -update.php -xmlrpc.php -/includes -/misc -/modules -/profiles -/scripts -/themes diff --git a/data/gitignore/community/PHP/Jigsaw.gitignore b/data/gitignore/community/PHP/Jigsaw.gitignore deleted file mode 100644 index 7cf61e81..00000000 --- a/data/gitignore/community/PHP/Jigsaw.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# gitignore template for Jigsaw Static Site Generator -# -# website - https://jigsaw.tighten.co - -# Ignore build folder -build_* diff --git a/data/gitignore/community/PHP/Magento1.gitignore b/data/gitignore/community/PHP/Magento1.gitignore deleted file mode 100644 index aac92ca7..00000000 --- a/data/gitignore/community/PHP/Magento1.gitignore +++ /dev/null @@ -1,45 +0,0 @@ -# gitignore template for Magento v1 projects -# -# It is recommended that you use `Magento.gitignore` as this is the latest version - -/PATCH_*.sh - -/app/etc/local.xml - -/media/* -!/media/.htaccess - -!/media/customer -/media/customer/* -!/media/customer/.htaccess - -!/media/dhl -/media/dhl/* -!/media/dhl/logo.jpg - -!/media/downloadable -/media/downloadable/* -!/media/downloadable/.htaccess - -!/media/xmlconnect -/media/xmlconnect/* - -!/media/xmlconnect/custom -/media/xmlconnect/custom/* -!/media/xmlconnect/custom/ok.gif - -!/media/xmlconnect/original -/media/xmlconnect/original/* -!/media/xmlconnect/original/ok.gif - -!/media/xmlconnect/system -/media/xmlconnect/system/* -!/media/xmlconnect/system/ok.gif - -/var/* -!/var/.htaccess - -!/var/package -/var/package/* -!/var/package/*.xml - diff --git a/data/gitignore/community/PHP/Magento2.gitignore b/data/gitignore/community/PHP/Magento2.gitignore deleted file mode 100644 index 98329d7b..00000000 --- a/data/gitignore/community/PHP/Magento2.gitignore +++ /dev/null @@ -1,54 +0,0 @@ -/sitemap -/sitemap.xml -/pub/sitemap -/pub/sitemap.xml -/app/config_sandbox -/app/etc/config.php -/app/etc/env.php -/app/code/Magento/TestModule* -/lib/internal/flex/uploader/.actionScriptProperties -/lib/internal/flex/uploader/.flexProperties -/lib/internal/flex/uploader/.project -/lib/internal/flex/uploader/.settings -/lib/internal/flex/varien/.actionScriptProperties -/lib/internal/flex/varien/.flexLibProperties -/lib/internal/flex/varien/.project -/lib/internal/flex/varien/.settings -/.grunt -/.php_cs.cache -/grunt-config.json -/dev/tools/grunt/configs/local-themes.js - -/pub/media/*.* -!/pub/media/.htaccess -/pub/media/attribute/* -!/pub/media/attribute/.htaccess -/pub/media/analytics/* -/pub/media/catalog/* -!/pub/media/catalog/.htaccess -/pub/media/customer/* -!/pub/media/customer/.htaccess -/pub/media/downloadable/* -!/pub/media/downloadable/.htaccess -/pub/media/favicon/* -/pub/media/import/* -!/pub/media/import/.htaccess -/pub/media/logo/* -/pub/media/theme/* -/pub/media/theme_customization/* -!/pub/media/theme_customization/.htaccess -/pub/media/wysiwyg/* -!/pub/media/wysiwyg/.htaccess -/pub/media/tmp/* -!/pub/media/tmp/.htaccess -/pub/media/captcha/* -!/pub/media/captcha/.htaccess -/pub/static/* -!/pub/static/.htaccess - -/var/* -!/var/.htaccess -/vendor/* -!/vendor/.htaccess -/generated/* -!/generated/.htaccess diff --git a/data/gitignore/community/PHP/Pimcore.gitignore b/data/gitignore/community/PHP/Pimcore.gitignore deleted file mode 100644 index 4090b4ad..00000000 --- a/data/gitignore/community/PHP/Pimcore.gitignore +++ /dev/null @@ -1,53 +0,0 @@ -# gitignore template for Pimcore CMS - -# pimcore source files -/pimcore - -# asset files -/website/var/assets/* - -# backups -/website/var/backup/* - -# file cache -/website/var/cache/* - -# generated PHP classes, keep definition files (.psf) -/website/var/classes/Object* -!/website/var/classes/objectbricks - -# various configuration files -/website/var/config/system.xml -/website/var/config/cache.xml -/website/var/config/robots.txt -/website/var/config/Geo* -/website/var/config/object/* -/website/var/config/portal/* -/website/var/config/sqlreport/* - -# sent e-mail log files -/website/var/email/* - -# log files -/website/var/log/*.log - -# serialized recyclebin files -/website/var/recyclebin/* - -# search plugin -/website/var/search/* - -# various temp files -/website/var/system/* -/website/var/tmp/* - -# serialized version files -/website/var/versions/asset/* -/website/var/versions/document/* -/website/var/versions/object/* - -# user profile images -/website/var/user-image/* - -# keep .dummy files -!.dummy diff --git a/data/gitignore/community/PHP/ThinkPHP.gitignore b/data/gitignore/community/PHP/ThinkPHP.gitignore deleted file mode 100644 index 348ebf05..00000000 --- a/data/gitignore/community/PHP/ThinkPHP.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# gitignore template for ThinkPHP v3.2.3 -# website: http://www.thinkphp.cn/ - -# Logs and Cache files -/Application/Runtime/ - -# Common configure file -/Application/Common/Conf/config.php \ No newline at end of file diff --git a/data/gitignore/community/Puppet.gitignore b/data/gitignore/community/Puppet.gitignore deleted file mode 100644 index 4fcdca7d..00000000 --- a/data/gitignore/community/Puppet.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# gitignore template for Puppet modules -# website: https://forge.puppet.com/ - -# Built packages -pkg/* - -# Should run on multiple platforms so don't check in -Gemfile.lock - -# Tests -spec/fixtures/* -coverage/* - -# Third-party -vendor/* -.bundle/* diff --git a/data/gitignore/community/Python/JupyterNotebooks.gitignore b/data/gitignore/community/Python/JupyterNotebooks.gitignore deleted file mode 100644 index f45b39de..00000000 --- a/data/gitignore/community/Python/JupyterNotebooks.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# gitignore template for Jupyter Notebooks -# website: http://jupyter.org/ - -.ipynb_checkpoints -*/.ipynb_checkpoints/* - -# IPython -profile_default/ -ipython_config.py - -# Jupyter lab virtual documents -# https://jupyterlab-lsp.readthedocs.io/en/2.x/Configuring.html#virtual_documents_dir -.virtual_documents/ - -# Remove previous ipynb_checkpoints -# git rm -r .ipynb_checkpoints/ diff --git a/data/gitignore/community/Python/Nikola.gitignore b/data/gitignore/community/Python/Nikola.gitignore deleted file mode 100644 index dac64b41..00000000 --- a/data/gitignore/community/Python/Nikola.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# gitignore template for Nikola static site generator -# website: https://getnikola.com/ - -.doit.db -*.py[cod] -cache/ -output/ diff --git a/data/gitignore/community/ROS2.gitignore b/data/gitignore/community/ROS2.gitignore deleted file mode 100644 index 6cc824d8..00000000 --- a/data/gitignore/community/ROS2.gitignore +++ /dev/null @@ -1,29 +0,0 @@ -install/ -log/ -build/ - -# Ignore generated docs -*.dox -*.wikidoc - -# eclipse stuff -.project -.cproject - -# qcreator stuff -CMakeLists.txt.user - -srv/_*.py -*.pcd -*.pyc -qtcreator-* -*.user - -*~ - -# Emacs -.#* - -# Colcon custom files -COLCON_IGNORE -AMENT_IGNORE diff --git a/data/gitignore/community/Racket.gitignore b/data/gitignore/community/Racket.gitignore deleted file mode 100644 index 962478a1..00000000 --- a/data/gitignore/community/Racket.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -# gitignore template for the Racket language -# website: http://www.racket-lang.org/ - -# DrRacket autosave files -*.rkt~ -*.rkt.bak -\#*.rkt# -\#*.rkt#*# - -# Compiled racket bytecode -compiled/ -*.zo - -# Dependency tracking files -*.dep diff --git a/data/gitignore/community/Red.gitignore b/data/gitignore/community/Red.gitignore deleted file mode 100644 index b78a06fc..00000000 --- a/data/gitignore/community/Red.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# gitignore template for Red programming language -# website: http://www.red-lang.org/ - -# Red Compiled code -*.red - -# Libraries -crush.dll -crush.dylib -crush.so - -# Files generated during test -quick-test/quick-test.log -quick-test/runnable/ -system/tests/source/units/auto-tests/ -tests/source/units/auto-tests/ diff --git a/data/gitignore/community/SPFx.gitignore b/data/gitignore/community/SPFx.gitignore deleted file mode 100644 index 5a66b341..00000000 --- a/data/gitignore/community/SPFx.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -#SharePoint Framework (SPFx) -# Logs -logs -*.log -npm-debug.log* - -# Dependency directories -node_modules - -# Build generated files -dist -lib -solution -temp -*.sppkg - -# Coverage directory used by tools like istanbul -coverage - -# OSX -.DS_Store - -# Visual Studio files -.ntvs_analysis.dat -.vs -bin -obj - -# Resx Generated Code -*.resx.ts - -# Styles Generated Code -*.scss.ts diff --git a/data/gitignore/community/Splunk.gitignore b/data/gitignore/community/Splunk.gitignore deleted file mode 100644 index d063da0e..00000000 --- a/data/gitignore/community/Splunk.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# gitignore template for Splunk apps -# documentation: http://docs.splunk.com/Documentation/Splunk/6.2.3/admin/Defaultmetaconf - -# Splunk local meta file -local.meta - -# Splunk local folder -local diff --git a/data/gitignore/community/Strapi.gitignore b/data/gitignore/community/Strapi.gitignore deleted file mode 100644 index 70e65425..00000000 --- a/data/gitignore/community/Strapi.gitignore +++ /dev/null @@ -1,135 +0,0 @@ -############################ -# OS X -############################ - -.DS_Store -.AppleDouble -.LSOverride -Icon -.Spotlight-V100 -.Trashes -._* - - -############################ -# Linux -############################ - -*~ - - -############################ -# Windows -############################ - -Thumbs.db -ehthumbs.db -Desktop.ini -$RECYCLE.BIN/ -*.cab -*.msi -*.msm -*.msp - - -############################ -# Packages -############################ - -*.7z -*.csv -*.dat -*.dmg -*.gz -*.iso -*.jar -*.rar -*.tar -*.zip -*.com -*.class -*.dll -*.exe -*.o -*.seed -*.so -*.swo -*.swp -*.swn -*.swm -*.out -*.pid - - -############################ -# Logs and databases -############################ - -.tmp -*.log -*.sql -*.sqlite - - -############################ -# Misc. -############################ - -*# -.idea -nbproject -.vscode/ - - -############################ -# Node.js -############################ - -lib-cov -lcov.info -pids -logs -results -build -node_modules -.node_history -package-lock.json -**/package-lock.json -!docs/package-lock.json -*.heapsnapshot - - -############################ -# Tests -############################ - -testApp -coverage -cypress/screenshots -cypress/videos - - -############################ -# Documentation -############################ - -dist - -############################ -# Builds -############################ - -packages/strapi-generate-new/files/public/ - -############################ -# Example app -############################ - -.dev -# *.cache - -############################ -# Visual Studio Code -############################ - -front-workspace.code-workspace diff --git a/data/gitignore/community/Tauri.gitignore b/data/gitignore/community/Tauri.gitignore deleted file mode 100644 index 1b1bc54f..00000000 --- a/data/gitignore/community/Tauri.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -# Tauri -# https://tauri.app/ -# -# Recommended: Rust.gitignore - -# Rust compilation output -# https://doc.rust-lang.org/cargo/guide/build-cache.html -target/ - -# WiX Toolset cache (Windows MSI installer builds) -# https://v2.tauri.app/distribute/windows-installer/ -WixTools/ diff --git a/data/gitignore/community/Terragrunt.gitignore b/data/gitignore/community/Terragrunt.gitignore deleted file mode 100644 index ea480863..00000000 --- a/data/gitignore/community/Terragrunt.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Ignore the default terragrunt cache directory -# https://terragrunt.gruntwork.io/docs/features/caching/ -.terragrunt-cache diff --git a/data/gitignore/community/Toit.gitignore b/data/gitignore/community/Toit.gitignore deleted file mode 100644 index 1352ef7e..00000000 --- a/data/gitignore/community/Toit.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.packages -*_pb.toit diff --git a/data/gitignore/community/UTAU.gitignore b/data/gitignore/community/UTAU.gitignore deleted file mode 100644 index 173bc781..00000000 --- a/data/gitignore/community/UTAU.gitignore +++ /dev/null @@ -1,52 +0,0 @@ -# Adobe Audition -*.pkf - -# UTAU Engines -*.ctspec -*.d4c -*.dio -*.frc -*.frt -*.frq -*.harvest -*.lessaudio -*.llsm -*.mrq -*.pitchtier -*.platinum -*.pmk -*.sc.npz -*.star -*.uspec -*.vs4ufrq - -# UTAU related tools -$read -*.setParam-Scache -*.lbp -*.lbp.caches/* - -# OpenUtau -errors.txt - -# Deepvocal -*.DVModel -*-log.txt -SKC -SKI -SKC_1 -SKC_2 -*.sksd - -# VocalSharp -*.scep -*.vssf -*.vsdx -*.vsdxindex - -# Binary Archive -*.7z -*.zip -*.rar -*.exe - diff --git a/data/gitignore/community/UiPath.gitignore b/data/gitignore/community/UiPath.gitignore deleted file mode 100644 index 0948dcc8..00000000 --- a/data/gitignore/community/UiPath.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -# gitignore template for RPA development using UiPath Studio -# website: https://www.uipath.com/product/studio -# -# Recommended: n/a - -# Ignore folders that could cause issues if accidentally tracked -**/.local/** -**/.settings/** -**/.objects/** -**/.tmh/** -**/*.log diff --git a/data/gitignore/community/V.gitignore b/data/gitignore/community/V.gitignore deleted file mode 100644 index dbbb0462..00000000 --- a/data/gitignore/community/V.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -*.exe -*.o -*.so -*.tmp.c -*.exp -*.ilk -*.pdb -*.dll -*.lib -*.bak -*.out diff --git a/data/gitignore/community/Xilinx.gitignore b/data/gitignore/community/Xilinx.gitignore deleted file mode 100644 index afe5e821..00000000 --- a/data/gitignore/community/Xilinx.gitignore +++ /dev/null @@ -1,105 +0,0 @@ -# gitignore template for Xilinx Vivado Design Suite -# website: https://www.xilinx.com/support/download.html - -# [home] -*.jou -*.log -*.debug -*.str -*.zip -*.tmp -*.rst -*.os -*.js -*.pb -*.dcp -*.hwdef -*.vds -*.veo -*.wdf -*.vdi -*.dmp -*.rpx -*.rpt -*_stub.v -*_stub.vhdl -*_funcsim.v -*_funcsim.vhdl -.project - -# [dir] -*.cache -.metadata -*.data -*.ipdefs -.Xil -*.sdk -*.hw -*.ip_user_files - -### IP synth -*_synth_* - -.jobs - -### project synth -*/*.runs/synth*/*.xml -*/*.runs/synth*/*.txt -*/*.runs/synth*/*.sh -*/*.runs/synth*/*.tcl -*/*.runs/synth*/*.bat -*/*.runs/synth*/*.xdc -!*/*.runs/synth*/*utilization*.rpt - -*.runs/synth*/*.xml -*.runs/synth*/*.txt -*.runs/synth*/*.sh -*.runs/synth*/*.tcl -*.runs/synth*/*.bat -*.runs/synth*/*.xdc -!*.runs/synth*/*utilization*.rpt - -### project impl -*/*.runs/impl*/*.xml -*/*.runs/impl*/*.html -*/*.runs/impl*/*.txt -*/*.runs/impl*/*.sh -*/*.runs/impl*/*.tcl -*/*.runs/impl*/*.bat -!*/*.runs/impl*/*utilization*.rpt - -*.runs/impl*/*.xml -*.runs/impl*/*.html -*.runs/impl*/*.txt -*.runs/impl*/*.sh -*.runs/impl*/*.tcl -*.runs/impl*/*.bat -!*.runs/impl*/*utilization*.rpt - -### block design -*/*/bd/*/hdl -*/*/*/bd/*/hdl - -*/*/bd/*/*.xdc -*/*/*/bd/*/*.xdc - -*/*/bd/*/ip/*/*.xdc -*/*/*/bd/*/ip/*/*.xdc - -*/*/bd/*/ip/*/*/ -*/*/*/bd/*/ip/*/*/ - -*/*/bd/*/ip/*/*.vhd -*/*/*/bd/*/ip/*/*.vhd - -*/*/bd/*/ip/*/*.xml -*/*/*/bd/*/ip/*/*.xml - -*.c -*.h -*.vho -*.html -*/*/bd/*/ip/*/*.tcl -*/*/*/bd/*/ip/*/*.tcl -hw_handoff -ipshared diff --git a/data/gitignore/community/embedded/AtmelStudio.gitignore b/data/gitignore/community/embedded/AtmelStudio.gitignore deleted file mode 100644 index 5dfc4696..00000000 --- a/data/gitignore/community/embedded/AtmelStudio.gitignore +++ /dev/null @@ -1,22 +0,0 @@ -## Ignore Atmel Studio temporary files and build results -# https://www.microchip.com/mplab/avr-support/atmel-studio-7 - -# Atmel Studio is powered by an older version of Visual Studio, -# so most of the project and solution files are the same as VS files, -# only prefixed by an `at`. - -#Build Directories -[Dd]ebug/ -[Rr]elease/ - -#Build Results -*.o -*.d -*.eep -*.elf -*.hex -*.map -*.srec - -#User Specific Files -*.atsuo diff --git a/data/gitignore/community/embedded/IAR_EWARM.gitignore b/data/gitignore/community/embedded/IAR_EWARM.gitignore deleted file mode 100644 index 2f04d86d..00000000 --- a/data/gitignore/community/embedded/IAR_EWARM.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -# gitignore template for the IAR EWARM -# website: https://www.iar.com/knowledge/support/technical-notes/ide/which-files-should-be-version-controlled/ - -# Some tools will put the EWARM files -# under a subdirectory with the same name -# as the configuration. -# Example -# EWARM/Config1/Obj /List /Exe -# EWARM/Config2/Obj /List /Exe -EWARM/**/Obj -EWARM/**/List -EWARM/**/Exe - -# Autogenerated project files -*.dep -*.ewt - -# Autogenerated folder for debugger -EWARM/settings diff --git a/data/gitignore/community/embedded/Microchip_MPLAB_X_IDE.gitignore b/data/gitignore/community/embedded/Microchip_MPLAB_X_IDE.gitignore deleted file mode 100644 index 7ad82b9a..00000000 --- a/data/gitignore/community/embedded/Microchip_MPLAB_X_IDE.gitignore +++ /dev/null @@ -1,27 +0,0 @@ -#============================================================================= -# Microchip MPLAB X IDE .gitignore file. -# -# MPLABX: https://www.microchip.com/en-us/tools-resources/develop/mplab-x-ide -# -# MPLABX Version Control:- -# https://developerhelp.microchip.com/xwiki/bin/view/software-tools/ides/x/version-control/working-with-version-control/ -#----------------------------------------------------------------------------- - -# MPLAB X (NetBeans) Project files -**/*.X/nbproject/private/ -**/*.X/nbproject/Makefile-* -**/*.X/nbproject/Package-* -!**/*.X/nbproject/*.xml - -# MPLAB X Generated Files and Build Output -**/*.X/.generated_files/ -**/*.X/build/ -**/*.X/dist/ -**/*.X/debug/ - -# MPLAB Code Configurator (MCC) -**/*.X/mcc_generated_files/ -**/*.X/mcc-manifest-*.yml - -#----------------------------------------------------------------------------- - diff --git a/data/gitignore/community/embedded/esp-idf.gitignore b/data/gitignore/community/embedded/esp-idf.gitignore deleted file mode 100644 index 3713b157..00000000 --- a/data/gitignore/community/embedded/esp-idf.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# gitignore template for esp-idf, the official development framework for ESP32 -# https://github.com/espressif/esp-idf - -build/ -sdkconfig -sdkconfig.old diff --git a/data/gitignore/community/embedded/uVision.gitignore b/data/gitignore/community/embedded/uVision.gitignore deleted file mode 100644 index f69c404f..00000000 --- a/data/gitignore/community/embedded/uVision.gitignore +++ /dev/null @@ -1,45 +0,0 @@ -# git ignore file for Keil µVision Project - -# µVision 5 and µVision 4 Project screen layout file -*.uvguix.* -*.uvgui.* - -# Listing Files -*.i -*.lst -*.m51 -*.m66 -*.map - -# Object Files -*.axf -*.b[0-2][0-9] -*.b3[0-1] -*.bak -*.build_log.htm -*.crf -*.d -*.dep -*.elf -*.htm -*.iex -*.lnp -*.o -*.obj -*.sbr - -# Firmware Files -*.bin -*.h86 -*.hex - -# Build Files -.bat - -# Debugger Files -.ini - -# JLink Files -JLinkLog.txt - -# Other Files diff --git a/data/gitignore/community/libogc.gitignore b/data/gitignore/community/libogc.gitignore deleted file mode 100644 index facd7752..00000000 --- a/data/gitignore/community/libogc.gitignore +++ /dev/null @@ -1,91 +0,0 @@ -# Ignore build directories -build/ - -# Ignore Wii-specific metadata files -meta.xml -icon.png - - -# Ignore editor or IDE-specific files -.vscode/ -.idea/ -*.sublime-project -*.sublime-workspace - -# Ignore backup or temporary files -*~ -*.bak -*.swp -*.tmp - -# Ignore log files -*.log - -# Ignore libraries and dependencies -lib/ -deps/ -obj/ - -# Ignore operating system-specific files -$RECYCLE.BIN/ -.Trash-1000/ -.Spotlight-V100/ -.fseventsd/ -.DS_Store - -# Prerequisites -*.d - -# Object files -*.o -*.ko -*.obj -*.elf -*.o -*.bin - -# Linker output -*.ilk -*.map -*.exp - -# Precompiled Headers -*.gch -*.pch - -# Libraries -*.lib -*.a -*.la -*.lo - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex -*.dol -*.elf - -# Debug files -*.dSYM/ -*.su -*.idb -*.pdb - -# Kernel Module Compile Results -*.mod* -*.cmd -.tmp_versions/ -modules.order -Module.symvers -Mkfile.old -dkms.conf diff --git a/data/gitignore/ecu.test.gitignore b/data/gitignore/ecu.test.gitignore deleted file mode 100644 index fd495030..00000000 --- a/data/gitignore/ecu.test.gitignore +++ /dev/null @@ -1,66 +0,0 @@ -# gitignore template for ecu.test workspaces - by tracetronic https://tracetronic.com -# website: https://www.ecu-test.com -# * all directories are related to the default directories, please adapt the .gitignore if you use customized directories - -# Dynamic workspace settings -# * We don't recommend to ignore the .workspace directory, because of important -# * project specific settings -# * local user settings -.workspace/ETdrive.xml -.workspace/favorites.xml -.workspace/filters.xml -.workspace/generators.xml -.workspace/history.xml -.workspace/parallelExecution.xml -.workspace/signalviewer.xml -.workspace/signalViewerHistory.json -.workspace/signalviewer2layout.xml -.workspace/testeditor.xml -.workspace/tooladapter.xml -.workspace/view.xml -# optional, if your process depends on this file remove exclusion -.workspace/attributeLists.xml -.workspace/interactiveexecution.xml -.workspace/protocol.xml -.workspace/pythonlibrary.xml -# deprecated, support for older versions -.workspace/traceexplorer.xml - -# Custom file formats and test dependencies -# * you can manage your artifacts also with test.guide (https://www.test-guide.info) and reference them via Playbooks -*.arxml -*.a2l -*.dbc -*.hex -*.s19 -[tT]estdata -[tT]estdaten - -# Test results and test execution related content -# * Git is not intended to store and provide test results for all iterations -# * We recommend to use test.guide (https://www.test-guide.info) for the test report management -TestReports - -# Report generators and templates -# * if you want to provide (f.e.) your own report generators exclude the directory here and ignore only the unnecessary subdirectories -Templates - -# optional, default for external Python libraries -PyLibs - -# Exclude large binary artifacts -# * you can manage your artifacts also with test.guide (https://www.test-guide.info) and reference them via Playbooks -Offline-FIUs -Offline-Models -Offline-SGBDs -*.exe -*.msi -*.zip -*.7z - -# Exclude default and custom temporary directories -Backup_* - -# Python bytecode and cache files -__pycache__/ -*.py[cod] diff --git a/docs/ATLAS.toml b/docs/ATLAS.toml index b2609bd3..db6b2497 100644 --- a/docs/ATLAS.toml +++ b/docs/ATLAS.toml @@ -15,7 +15,7 @@ system_view = [ "urna-engine opens .urna files through mmap, validates queries, dispatches SIMD, and executes exact, ANN, graph, and hybrid search while reranking candidates with real cosine. That hot path is why embeddings are never zstd-compressed.", "The CLI crate (rust/clitui, package urna) is a thin clap surface over the runtime and format crates. It carries the twelve engine subcommands (inspect, validate, stats, media, search, search-text, search-ann, search-graph, search-space, benchmark, cite, doctor: file + vector in; only search-text and doctor spawn Python) and the three agent verbs (ask, retrieve, build: text or spec in, shell out to the offline Python embedder / forge), tagged [engine] / [agent] in --help. ask and retrieve are the agent-native flagship verbs layered over the engine (text query in, cited answer out; both embed the query offline with the default potion static table, validate the embedder's model_hash against the manifest exactly like search-text, and route by what the file carries through MmapUrnaFile::search_routed: hybrid when a BM25 section is present, hnsw when an HNSW section is present, exact otherwise; ask prints one cited answer (--disclose answer) or adds the rerank-source honesty line + route + candidate counts (--disclose explain); retrieve emits the agent-shaped JSON/JSONL answer-pack where each hit's score IS the exact-cosine rerank value). doctor is the post-install health check with typed exit codes (0 ok, 2 Python missing, 3 deps missing, 4 embedder missing, 5 potion table missing, 6 embedder run failed). Behind the default-on `tui` feature the CLI also carries the terminal UI in src/tui: `setup` (the interactive installer, exit codes 10 download, 11 checksum, 12 unpack, 13 Python env, 14 blocked, 15 a model install; --model installs catalog models) and `tui` (the corpus explorer; a bare `urna` on a terminal opens it, in a pipe it prints the help and exits 2). Verb-collapse, the urna dev namespace, and the urna-profile crate are deferred.", "The distribution layer (issue #75) turns tags on main into installs: cargo-dist builds the CLI for five targets with SHA256 checksums, Sigstore keyless attestations on the five archives, one CycloneDX SBOM for the CLI package, a Homebrew tap formula (`urna`) and an npm package (`@urna/cli`), and publishes urna-format / urna-engine / urna (the CLI crate, binary `urna`) to crates.io; maturin builds the `urna` abi3 wheel with the potion table bundled (offline embedding after pip install); tool/tasks/installer.sh / installer.ps1 are the one-liner installers (verify-before-write, --version, --uninstall); urna doctor validates the install offline and `urna setup` completes the channels that ship the bare binary (Homebrew, npm, crates.io); .github/workflows/setuptest.yml tests the INSTALLED product per platform after each release, including a job per package channel that waits for the exact version on its registry and ends in `urna setup --yes` + `urna doctor`; .github/workflows/runreport.yml summarizes every completed release run, failed or cancelled included. Three levels of evidence, not interchangeable: tool/tasks/fullcheck.sh is the full local gate (no release build), rehearsal.yml builds the release on pull requests and publishes nothing, and only a tag exercises publishing, setuptest and the report.", - "urna-bridge is the PyO3 bridge. rust/bridge/python/urna/__init__.py loads the compiled extension, rust/bridge/python/urna/pipes/buildfile.py orchestrates chunking and caching, and rust/bridge/python/urna/embed/searchtxt.py preserves model parity for search-text. The agent-native flagship is UrnaFile.retrieve(query, k, ...): a pre-embedded query in, cited spans out, whose score IS the exact rerank value, with tier-1 stored canonical text + hashes + citation_id + rerank-source marker.", + "urna-bridge is the PyO3 bridge. rust/bridge/python/urna/__init__.py loads the compiled extension, rust/bridge/python/urna/pipes/buildfile.py orchestrates chunking and caching, and rust/bridge/python/urna/embed/searchtxt.py embeds the query for a sentence-transformers model no preset names, with the model_hash the corpus was built with. The agent-native flagship is UrnaFile.retrieve(query, k, ...): a pre-embedded query in, cited spans out, whose score IS the exact rerank value, with tier-1 stored canonical text + hashes + citation_id + rerank-source marker.", "tool/tasks/fullcheck.sh is the release gate: rebuilds the extension, runs Rust and Python suites, checks lint and format, measures presets, and compares against the committed baseline.", "rust/ingest is the ingestion layer, a SEPARATE cargo workspace under rust/ that the root Cargo.toml excludes, so its (eventually heavy, possibly non-deterministic) deps never enter urna-format or urna-engine. This phase ships FORGE-0a: the frozen .fci canonical-intermediate schema only. It is not built by the sovereign release gate; it has its own cargo workspace.", "rust/bridge/python/urna is the forge Python surface. Its build-side default is an offline semantic static embedder (rust/bridge/python/urna/embed/potiontab.py): a vendored model2vec/potion-base-8M table (MIT, dim 256, ~30MB via git-lfs), numpy + tokenizers only, no torch, no network round-trip; it self-fingerprints to a SHA256 model_hash recorded in provenance. The #04 lexical bag-of-words (rust/bridge/python/urna/embed/lexifloor.py) stays as the stdlib-only zero-dependency floor/fallback.", @@ -253,12 +253,12 @@ name = "cli-search-text" entry = "rust/clitui/src/cmd/search_text.rs" path = [ "rust/clitui/src/cmd/embed_gate.rs", + "rust/clitui/src/cmd/potion.rs", "rust/clitui/src/cmd/embed_failure.rs", - "rust/bridge/python/urna/embed/searchtxt.py", - "rust/bridge/python/urna/model/modelhash.py", + "rust/bridge/python/urna/embed/presetqry.py", "rust/engine/src/search.rs", ] -summary = "Embed a query in Python (searchtxt.py resolved from a checkout or the data roots), validate name, dim, and model_hash, then route to exact, hnsw, or hybrid search; a failure names its cause and fix" +summary = "Embed the query through embed_gate::embed_and_route, the gate ask and retrieve use (a potion corpus in process, any other model through presetqry.py), validate name, dim, and model_hash (--skip-model-hash-check for a legacy placeholder corpus, which names the embedder on stderr), then route to exact, hnsw, or hybrid search; a failure names its cause and fix" [[flows]] name = "cli-ask-retrieve" @@ -976,7 +976,7 @@ links = ["rust/clitui/src/cmd/embed_gate.rs", "rust/clitui/src/tui/app/ask.rs"] [[inventory.urna_clitui]] path = "rust/clitui/src/cmd/embed_gate.rs" kind = "rust-source" -purpose = "The ONE copy of the query-embedder spawn protocol and the three-layer model gate (name/dim/model_hash); routes ask/retrieve by manifest model (potion script for potion corpora, presetqry.py for registry models, --mrl-dim for truncated default spaces) and by capability through MmapUrnaFile::search_routed; installed_script_in is the script ladder every Python child shares (repo layout, then each data root); spawn and gate failures are typed cmd/embed_failure.rs values; every embedder script (search-text's searchtxt.py included) resolves through installed_script_in, a path under rust/bridge/python/urna/ in a checkout or under /urna/" +purpose = "The ONE copy of the query-embedder spawn protocol and the three-layer model gate (name/dim/model_hash); routes search-text, ask and retrieve by manifest model (a potion corpus in process, its script for --embedder, --model-path or an mrl-truncated corpus; presetqry.py for registry models, --mrl-dim for truncated default spaces) and by capability through MmapUrnaFile::search_routed; installed_script_in is the script ladder every Python child shares (repo layout, then each data root); spawn and gate failures are typed cmd/embed_failure.rs values; every embedder script (searchtxt.py included) resolves through installed_script_in, a path under rust/bridge/python/urna/ in a checkout or under /urna/" links = [ "rust/clitui/src/cmd/search_text.rs", "rust/bridge/python/urna/embed/presetqry.py", @@ -2589,7 +2589,7 @@ links = [ [[inventory.data_docs_python_script_tests]] path = "rust/bridge/python/urna/embed/searchtxt.py" kind = "python-source" -purpose = "sentence-transformers query embedder: the default of CLI search-text, the path of st_text presets and of any ST model no preset names (through presetqry.py), and the load/encode/fingerprint functions the st_text adapter reuses; prints urna-needs (exit 4) and urna-fetch (exit 3) lines; ships in the payload at urna/searchtxt.py" +purpose = "sentence-transformers query embedder: the path of st_text presets and of any ST model no preset names (through presetqry.py), and the load/encode/fingerprint functions the st_text adapter reuses; prints urna-needs (exit 4) and urna-fetch (exit 3) lines; ships in the payload at urna/searchtxt.py" links = [ "rust/bridge/python/urna/model/modelhash.py", "rust/clitui/src/cmd/search_text.rs", @@ -3400,7 +3400,6 @@ sequenceDiagram participant F as urna-format participant N as .urna file participant R as urna-engine - participant E as searchtxt.py participant Q as urna cli / api participant P as potionqry.py participant A as ask / retrieve @@ -3436,8 +3435,8 @@ sequenceDiagram F->>N: deterministic emit + manifest v1 + build.lock.json note over R,Q: query · offline · mmap - Q->>E: search-text spawns embedder - E-->>Q: query vector + model_hash + Q->>P: search-text embeds through the ask/retrieve gate (potion in process, presetqry.py otherwise) + P-->>Q: query vector + model_hash Q->>R: search(vector) / search_space(vector, space) R->>N: mmap open + validate hashes R->>R: model_hash vs manifest (per space, in isolation) diff --git a/rust/cbinds/Cargo.toml b/rust/cbinds/Cargo.toml index 547a8b9b..052a79dc 100644 --- a/rust/cbinds/Cargo.toml +++ b/rust/cbinds/Cargo.toml @@ -17,3 +17,7 @@ crate-type = ["rlib", "cdylib", "staticlib"] urna-engine = { path = "../engine" } urna-neural = { path = "../neural" } serde_json = { workspace = true } + +[dev-dependencies] +# the C round trip builds its own potion corpus from demo/starter/docs.jsonl. +urna-format = { workspace = true } diff --git a/rust/cbinds/tests/c_roundtrip.rs b/rust/cbinds/tests/c_roundtrip.rs index e8764a49..99cdf937 100644 --- a/rust/cbinds/tests/c_roundtrip.rs +++ b/rust/cbinds/tests/c_roundtrip.rs @@ -1,5 +1,5 @@ -//! A C program against the header and the static library: open the -//! quickstart corpus, ask it, read the hits, take an image, read the +//! A C program against the header and the static library: open a corpus +//! built here from `demo/starter/docs.jsonl` with the potion table, ask it, read the hits, take an image, read the //! schema, close, and the error path on a file that is not there. Runs //! under `leaks` on macOS when it is available. Skipped, with a note, //! without a C compiler. @@ -89,6 +89,44 @@ fn staticlib() -> PathBuf { lib } +/// The starter docs, one chunk each, embedded with the potion table and +/// written under its model name and hash: the corpus the ABI asks. +fn build_corpus(table: &Path, out: &Path) { + use urna_format::ChunkInput; + use urna_format::manifest::Manifest; + use urna_format::writer::UrnaFileBuilder; + + let potion = urna_neural::Potion::open(table).expect("potion table"); + let docs = std::fs::read_to_string(root().join("demo/starter/docs.jsonl")).unwrap(); + let mut chunks = Vec::new(); + let mut at = 0u64; + for line in docs.lines().filter(|l| !l.trim().is_empty()) { + let doc: serde_json::Value = serde_json::from_str(line).unwrap(); + let text = doc["text"].as_str().expect("a text field").to_string(); + let end = at + line.len() as u64; + chunks.push(ChunkInput { + embedding: potion.embed(&text).unwrap(), + canonical_text: text, + source_uri: "docs.jsonl".into(), + byte_start: at, + byte_end: end, + }); + at = end + 1; + } + let manifest = Manifest { + embedding_model: "minishlab/potion-base-8M/v1".into(), + embedding_dim: u32::try_from(potion.dim()).unwrap(), + n_chunks: chunks.len() as u64, + chunker_version: "starter-doc/1".into(), + model_hash: potion.model_hash().to_string(), + ..Default::default() + }; + UrnaFileBuilder::new(manifest) + .add_chunks(chunks) + .write_to_path(out) + .unwrap(); +} + #[test] fn a_c_program_opens_asks_reads_and_closes_without_leaks() { if !have("cc") { @@ -102,10 +140,10 @@ fn a_c_program_opens_asks_reads_and_closes_without_leaks() { eprintln!("skip: the potion table is a git-lfs pointer"); return; } - let corpus = root().join("demo/starter/out/quickstart.urna"); - assert!(corpus.is_file(), "{} missing", corpus.display()); let dir = std::env::temp_dir().join(format!("urna-cbinds-c-{}", std::process::id())); std::fs::create_dir_all(&dir).unwrap(); + let corpus = dir.join("starter.urna"); + build_corpus(&table, &corpus); let src = dir.join("main.c"); std::fs::write(&src, PROGRAM).unwrap(); let exe = dir.join("main"); diff --git a/rust/clitui/Cargo.toml b/rust/clitui/Cargo.toml index d6609ca9..1230ee41 100644 --- a/rust/clitui/Cargo.toml +++ b/rust/clitui/Cargo.toml @@ -82,7 +82,8 @@ urna-neural = { workspace = true } ratatui = { version = "0.30.2", optional = true } crossterm = { version = "0.29", optional = true } # the ask tab's image pane: avif decoded by urna-images (the AV1 decoder -# carried in the tree); the terminal protocols are written in tui/graphics. +# carried in the tree); the terminal protocols, and the query that asks the +# terminal which one it speaks, are written in tui/graphics. urna-images = { path = "../images", optional = true } flate2 = { version = "1.1", optional = true } tar = { version = "0.4.46", optional = true } @@ -97,6 +98,11 @@ sysinfo = { version = "0.38", default-features = false, features = ["system"], o [target.'cfg(windows)'.dependencies] zip = { version = "9", default-features = false, features = ["deflate-flate2"], optional = true } +# `poll` on stdin with a deadline, for the reply to the terminal query in +# tui/graphics/probe.rs; already in the tree through cpufeatures. +[target.'cfg(unix)'.dependencies] +libc = { version = "0.2", optional = true } + [features] default = ["tui"] tui = [ @@ -107,6 +113,7 @@ tui = [ "dep:zip", "dep:sysinfo", "dep:urna-images", + "dep:libc", ] [build-dependencies] diff --git a/rust/clitui/src/cli.rs b/rust/clitui/src/cli.rs index 5e4bd5a3..caa57c81 100644 --- a/rust/clitui/src/cli.rs +++ b/rust/clitui/src/cli.rs @@ -108,8 +108,8 @@ pub enum Commands { /// [engine] Search by raw text - embeds the query with the model declared in /// the manifest, then routes by what the file carries: hybrid when it /// has a bm25 section, hnsw when it has an hnsw section, else exact. - /// One of the two engine verbs that run python (the other is - /// `doctor`). Validates the + /// A potion corpus embeds in process; any other model runs its python + /// query embedder, as `ask` and `retrieve` do. Validates the /// embedder's model_hash against the manifest before running search; /// a mismatch fails with a typed error rather than returning /// silently-bad results. @@ -119,8 +119,9 @@ pub enum Commands { query: String, #[arg(short, long, default_value = "10")] k: i32, - /// Override the embedder script. Default: `rust/bridge/python/urna/embed/searchtxt.py` in a - /// checkout, else the installed payload's `/urna/python/urna/embed/searchtxt.py`. + /// Override the embedder script. Default: the potion table in + /// process for a potion corpus, else `urna/embed/presetqry.py` from + /// a checkout or the installed payload. #[arg(long)] embedder: Option, /// `ef` (HNSW) / candidates-per-path (hybrid). Default: 4*k or 64. diff --git a/rust/clitui/src/cmd/embed_gate.rs b/rust/clitui/src/cmd/embed_gate.rs index 4cc0980e..c06859a6 100644 --- a/rust/clitui/src/cmd/embed_gate.rs +++ b/rust/clitui/src/cmd/embed_gate.rs @@ -1,6 +1,6 @@ //! The ONE copy of the query-embedder spawn protocol and the three-layer -//! model gate (name -> dim -> model_hash). `search-text`, `ask` and -//! `retrieve` all come through here. +//! model gate (name -> dim -> model_hash). `search-text`, `ask`, +//! `retrieve` and the tui all come through `embed_and_route`. //! //! Routing: a manifest whose `embedding_model` starts with the potion //! prefix keeps the offline potion script; any other model routes to @@ -8,7 +8,7 @@ //! `--mrl-dim` when the manifest records a truncated default space //! (`full_dim` present). -use anyhow::{Result, bail}; +use anyhow::Result; use std::path::{Path, PathBuf}; use std::process::Command as ProcCommand; @@ -32,13 +32,6 @@ pub struct EmbedderOutput { pub const PLACEHOLDER_MODEL_HASH: &str = "sha256:0000000000000000000000000000000000000000000000000000000000000000"; -/// Find the sentence-transformers embedder (`urna/embed/searchtxt.py`, the -/// path `search-text` keeps as its default): repo layout, then the data -/// roots, where the payload lays it down beside the potion one. -pub fn default_embedder_path() -> PathBuf { - installed_script("searchtxt.py") -} - /// Find the OFFLINE potion embedder (`urna/embed/potionqry.py`): /// repo layout, then the installed data dir, then `/../share` (the /// installer/tarball layouts, issue #75). @@ -230,8 +223,7 @@ pub fn validate_gate( /// Embed `query` offline, gate it against the manifest, route by what the /// file carries (`MmapUrnaFile::search_routed`), search. Shared by `ask` -/// and `retrieve`; `search-text` uses the pieces directly (it keeps -/// `--skip-model-hash-check`). +/// and `retrieve`. pub fn embed_and_search( runtime: &MmapUrnaFile, query: &str, @@ -253,6 +245,25 @@ pub fn embed_and_search_where( embedder: Option, model_path: Option, keep: Option<&urna_engine::scalars::Bitset>, +) -> Result { + embed_and_route( + runtime, query, k, candidates, embedder, model_path, keep, false, + ) +} + +/// The one embed, gate and route every query command runs; only +/// `search-text` may pass `skip_model_hash_check`, for a legacy corpus +/// that carries the placeholder model_hash. +#[allow(clippy::too_many_arguments)] +pub fn embed_and_route( + runtime: &MmapUrnaFile, + query: &str, + k: i32, + candidates: Option, + embedder: Option, + model_path: Option, + keep: Option<&urna_engine::scalars::Bitset>, + skip_model_hash_check: bool, ) -> Result { // the manifest fields the open already parsed: no second pass over the // file (inspect_json re-verifies every checksum, ~1 s on a 1 GB corpus). @@ -266,6 +277,7 @@ pub fn embed_and_search_where( let is_potion = model.starts_with("minishlab/potion"); let truncated = runtime.full_dim().is_some(); let cand = candidates.unwrap_or(((k as usize) * 4).max(64)); + let unchecked = hash_skipped(skip_model_hash_check, &declared_model_hash); // a potion corpus queried with the default embedder embeds in process // (#205): same recipe, same model_hash, no interpreter. the script stays @@ -274,18 +286,26 @@ pub fn embed_and_search_where( if is_potion && embedder.is_none() && model_path.is_none() && !truncated { let table = super::potion::table_dir(&default_potion_embedder_path()); if let Some(dir) = table { - let p = super::potion::shared(&dir)?; - if p.model_hash() != declared_model_hash { - bail!( - "model_hash mismatch: corpus was built with {declared_model_hash}, embedder reports {}", - p.model_hash() - ); - } - if p.dim() != declared_dim { - bail!("dim mismatch: corpus {declared_dim}, embedder {}", p.dim()); + if unchecked { + say_unchecked(&model, &format!("the potion table in {}", dir.display())); } - let vector = p.embed(query)?; - return Ok(runtime.search_routed_where(&vector, Some(query), k, cand, keep)?); + let p = super::potion::shared(&dir)?; + let payload = EmbedderOutput { + model_hash: p.model_hash().to_string(), + // the table was chosen by the manifest's model name. + embedding_model: model.clone(), + embedding_dim: p.dim(), + vector: p.embed(query)?, + fingerprint: serde_json::Value::Null, + }; + validate_gate( + &payload, + &model, + declared_dim, + &declared_model_hash, + skip_model_hash_check, + )?; + return Ok(runtime.search_routed_where(&payload.vector, Some(query), k, cand, keep)?); } } @@ -303,11 +323,45 @@ pub fn embed_and_search_where( extra.push("--mrl-dim".into()); extra.push(declared_dim.to_string()); } + if unchecked { + say_unchecked(&model, &embedder.display().to_string()); + } let payload = spawn_embedder(&embedder, model_path.as_ref(), &extra, &model, query)?; - validate_gate(&payload, &model, declared_dim, &declared_model_hash, false)?; + validate_gate( + &payload, + &model, + declared_dim, + &declared_model_hash, + skip_model_hash_check, + )?; // route by capability (bm25 -> hybrid, hnsw -> ann, else exact), not by // the declared `index_type`: a `hybrid` preset file declares "hnsw" and // carries its bm25 section as a capability. Ok(runtime.search_routed_where(&payload.vector, Some(query), k, cand, keep)?) } + +/// The flag skips the gate only on the legacy placeholder (`validate_gate`); +/// a real fingerprint is checked whatever the flag says. +fn hash_skipped(skip_model_hash_check: bool, declared_model_hash: &str) -> bool { + skip_model_hash_check && declared_model_hash == PLACEHOLDER_MODEL_HASH +} + +/// With the model_hash gate off, nothing proves the query was embedded the +/// way the corpus was: the line names what embedded it, so a ranking that +/// looks off can be traced to the embedder. +fn say_unchecked(model: &str, via: &str) { + eprintln!("[urna] model_hash not checked: embedding the query with {model} via {via}"); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn the_flag_skips_only_the_placeholder() { + assert!(hash_skipped(true, PLACEHOLDER_MODEL_HASH)); + assert!(!hash_skipped(true, "sha256:real")); + assert!(!hash_skipped(false, PLACEHOLDER_MODEL_HASH)); + } +} diff --git a/rust/clitui/src/cmd/payload.rs b/rust/clitui/src/cmd/payload.rs index 7e1485ee..0596c666 100644 --- a/rust/clitui/src/cmd/payload.rs +++ b/rust/clitui/src/cmd/payload.rs @@ -23,8 +23,9 @@ pub fn package_in(root: &Path) -> PathBuf { /// `embedpack.py` ships, since each query path imports or reads /// one of them (the potion route reads the table's config, tokenizer and /// weights; the registry route imports the adapters, the st and image -/// backends and modelhash; search-text runs searchtxt.py). the modules -/// keep the package layout of `rust/bridge/python/urna/` under `python/`. +/// backends and modelhash, and hands a model no preset names to +/// searchtxt.py). the modules keep the package layout of +/// `rust/bridge/python/urna/` under `python/`. /// setup refuses a payload missing one, and the scan reports an installed /// payload missing one so setup repairs it. `tool/tests/test_embedpack.py` /// checks that this list and the staged payload are the same set of files. diff --git a/rust/clitui/src/cmd/potion.rs b/rust/clitui/src/cmd/potion.rs index dfd1069c..6e18a1e9 100644 --- a/rust/clitui/src/cmd/potion.rs +++ b/rust/clitui/src/cmd/potion.rs @@ -38,7 +38,7 @@ pub fn shared(dir: &Path) -> Result> { mod tests { //! parity against the reference embedder script, run when a python with //! numpy and tokenizers is around (the repo venv, then `python3`), and - //! skipped with a note otherwise. + //! skipped with a note otherwise, unless `URNA_REQUIRE_PARITY` is set. use super::*; use std::process::Command; @@ -90,6 +90,12 @@ mod tests { #[test] fn vectors_and_model_hash_match_the_reference_script() { let (Some(dir), Some(py)) = (table(), python()) else { + // the release gate (tool/tasks/fullcheck.sh) sets this: there a + // skip would pass #205 unchecked. + assert!( + std::env::var_os("URNA_REQUIRE_PARITY").is_none(), + "potion parity required: no table (an lfs pointer?) or no python with numpy+tokenizers" + ); eprintln!("skip potion parity: no table or no python with numpy+tokenizers"); return; }; diff --git a/rust/clitui/src/cmd/scalars.rs b/rust/clitui/src/cmd/scalars.rs index a8f120e9..b344ed3e 100644 --- a/rust/clitui/src/cmd/scalars.rs +++ b/rust/clitui/src/cmd/scalars.rs @@ -31,7 +31,7 @@ pub fn run( dataset: Option, media: Option, ) -> Result<()> { - if out == file { + if same_file(&out, &file) { bail!("--out must be a different file: the corpus is rewritten, never edited in place"); } let corpus = MmapUrnaFile::open(&file)?; @@ -79,8 +79,9 @@ pub fn run( let src = File::open(&file)?; // SAFETY: the corpus is opened read-only and never rewritten in place by - // this tool (it refuses `--out` equal to the input), so no writer can - // truncate the mapping under us; the same model `MmapUrnaFile` uses. + // this tool (it refuses an `--out` that is the input, see same_file), + // so no writer can truncate the mapping under us; the same model + // `MmapUrnaFile` uses. let src = unsafe { memmap2::Mmap::map(&src)? }; let dst = BufWriter::new(File::create(&out).with_context(|| format!("create {}", out.display()))?); @@ -114,6 +115,28 @@ pub fn run( Ok(()) } +/// `out` names the corpus itself: the same path, written another way +/// (relative, through a symlink) or a hard link to it. Writing there would +/// truncate the bytes the copy is still reading from the mapping. +fn same_file(out: &Path, file: &Path) -> bool { + if out == file { + return true; + } + let (Ok(a), Ok(b)) = (std::fs::metadata(out), std::fs::metadata(file)) else { + return false; + }; + #[cfg(unix)] + { + use std::os::unix::fs::MetadataExt; + a.dev() == b.dev() && a.ino() == b.ino() + } + #[cfg(not(unix))] + { + let _ = (a, b); + std::fs::canonicalize(out).ok() == std::fs::canonicalize(file).ok() + } +} + fn read_json(path: &Path) -> Result { let raw = std::fs::read(path).with_context(|| format!("read {}", path.display()))?; let bytes = if path.extension().is_some_and(|e| e == "zst") { diff --git a/rust/clitui/src/cmd/search_text.rs b/rust/clitui/src/cmd/search_text.rs index e5d75b25..93515902 100644 --- a/rust/clitui/src/cmd/search_text.rs +++ b/rust/clitui/src/cmd/search_text.rs @@ -1,16 +1,15 @@ -//! `urna search-text "query" -k K` - embed the query via -//! `rust/bridge/python/urna/embed/searchtxt.py`, validate model_hash against the manifest -//! (the shared three-layer gate in `embed_gate`), route by capability -//! (bm25 -> hybrid, hnsw -> ann, else exact). Keeps -//! `--skip-model-hash-check` for legacy placeholder corpora. +//! `urna search-text "query" -k K`: the query embedded and gated +//! by `embed_gate::embed_and_route` (a potion corpus in process, any other +//! model through its query embedder), then routed by capability (bm25 -> +//! hybrid, hnsw -> ann, else exact). Keeps `--skip-model-hash-check` for +//! legacy placeholder corpora. use anyhow::Result; use std::path::PathBuf; -use super::embed_gate::{default_embedder_path, spawn_embedder, validate_gate}; +use super::embed_gate::embed_and_route; use super::util::print_result; -#[allow(clippy::too_many_arguments)] pub fn run( file: PathBuf, query: String, @@ -21,49 +20,16 @@ pub fn run( skip_model_hash_check: bool, ) -> Result<()> { let runtime = urna_engine::MmapUrnaFile::open(&file)?; - let info: serde_json::Value = serde_json::from_str(&runtime.inspect_json()?)?; - let model = info["manifest"]["embedding_model"] - .as_str() - .ok_or_else(|| anyhow::anyhow!("manifest.embedding_model missing"))? - .to_string(); - let declared_dim = info["manifest"]["embedding_dim"] - .as_u64() - .ok_or_else(|| anyhow::anyhow!("manifest.embedding_dim missing"))? - as usize; - let declared_model_hash = info["manifest"]["model_hash"] - .as_str() - .ok_or_else(|| anyhow::anyhow!("manifest.model_hash missing"))? - .to_string(); - - let embedder = embedder.unwrap_or_else(default_embedder_path); - eprintln!( - "[urna] embedding query with {} via {}{}", - model, - embedder.display(), - match &model_path { - Some(p) => format!(" (--model-path {})", p.display()), - None => String::new(), - } - ); - // a corpus whose default space was truncated at build time (full_dim - // recorded) is queried at the manifest dim: the embedder slices and - // renormalizes, exactly like the ask/retrieve path does. - let mut extra: Vec = Vec::new(); - if info["manifest"]["full_dim"].as_u64().is_some() { - extra.push("--mrl-dim".into()); - extra.push(declared_dim.to_string()); - } - let payload = spawn_embedder(&embedder, model_path.as_ref(), &extra, &model, &query)?; - validate_gate( - &payload, - &model, - declared_dim, - &declared_model_hash, + let result = embed_and_route( + &runtime, + &query, + k, + candidates, + embedder, + model_path, + None, skip_model_hash_check, )?; - - let cand = candidates.unwrap_or(((k as usize) * 4).max(64)); - let result = runtime.search_routed(&payload.vector, Some(&query), k, cand)?; print_result(&result); Ok(()) } diff --git a/rust/clitui/src/tui/app/blocks.rs b/rust/clitui/src/tui/app/blocks.rs index 76075679..5e2e5124 100644 --- a/rust/clitui/src/tui/app/blocks.rs +++ b/rust/clitui/src/tui/app/blocks.rs @@ -1,98 +1,176 @@ -//! An image drawn with characters, for terminals that draw no pixels -//! (Terminal.app, Zed, most others). Each cell is split in 2x2 quadrants -//! and gets the quadrant glyph and the two colors that reproduce its four -//! pixels best: twice the horizontal detail of halfblocks, with glyphs -//! (U+2580..U+259F, block elements) that every monospace font carries. +//! An image drawn with characters, for terminals that draw no pixels. Each +//! cell is one glyph in two colors; the image is resampled to 8 x 24 +//! subpixels per cell and every glyph the terminal draws (`graphics::glyphs`) +//! is tried against them: the two colors of a glyph are the means of the +//! subpixels it covers and of the ones it leaves, and the glyph kept is the +//! one whose two means explain the most of the cell. The means and the +//! error are taken in Oklab, where a distance is a perceived difference. + +use std::sync::LazyLock; use ratatui::buffer::Buffer; use ratatui::layout::Rect; use ratatui::style::Color; use crate::tui::graphics::Rgba; +use crate::tui::graphics::glyphs::{self, GH, GW, Glyph, Set}; -/// The quadrant glyph for a mask: bit 0 top-left, 1 top-right, 2 bottom-left, -/// 3 bottom-right; a set bit takes the foreground color. -const GLYPH: [&str; 16] = [ - " ", "▘", "▝", "▀", "▖", "▌", "▞", "▛", "▗", "▚", "▐", "▜", "▄", "▙", "▟", "█", -]; +type Lab = [f32; 3]; -type Rgb = [f32; 3]; +/// Two splits closer than this fraction of the score are a tie, which the +/// earlier glyph wins: the summed-area differences round at about 1e-6 of +/// it, and a flat cell would otherwise draw whichever glyph rounded up. +const TIE: f32 = 1e-5; -/// One drawn cell: the quadrant glyph, its foreground and its background. +/// One drawn cell: the glyph, its foreground and its background. pub type Cell = (&'static str, Color, Color); -fn mean(px: &[Rgb], mask: u8, set: bool) -> Rgb { - let (mut acc, mut n) = ([0f32; 3], 0f32); - for (i, p) in px.iter().enumerate() { - if ((mask >> i) & 1 == 1) == set { +/// The image's cells for a `w` x `h` area, row by row, drawn with `set`. +pub fn cells(img: &Rgba, w: u16, h: u16, set: Set) -> Vec { + let (cols, rows) = (usize::from(w), usize::from(h)); + if cols == 0 || rows == 0 { + return Vec::new(); + } + let small = img.resize((cols * GW) as u32, (rows * GH) as u32); + let width = cols * GW; + let lab: Vec = small.data.as_chunks::<4>().0.iter().map(oklab).collect(); + let glyphs = glyphs::of(set); + let mut sums = vec![[0f32; 3]; (GW + 1) * (GH + 1)]; + let mut out = Vec::with_capacity(cols * rows); + for cy in 0..rows { + for cx in 0..cols { + integrate(&lab, width, cx * GW, cy * GH, &mut sums); + out.push(best(glyphs, &sums)); + } + } + out +} + +/// The summed-area table of one cell's subpixels: `sums[y][x]` holds the +/// sum of every subpixel above and left of (x, y). +fn integrate(lab: &[Lab], width: usize, x0: usize, y0: usize, sums: &mut [Lab]) { + let stride = GW + 1; + for y in 0..GH { + let mut row = [0f32; 3]; + for x in 0..GW { + let p = lab[(y0 + y) * width + x0 + x]; + let above = sums[y * stride + x + 1]; for c in 0..3 { - acc[c] += p[c]; + row[c] += p[c]; } - n += 1.0; + sums[(y + 1) * stride + x + 1] = + [above[0] + row[0], above[1] + row[1], above[2] + row[2]]; } } - if n == 0.0 { - acc - } else { - [acc[0] / n, acc[1] / n, acc[2] / n] - } } -fn dist(a: Rgb, b: Rgb) -> f32 { - // weighted toward green, as the eye is. - let d = [a[0] - b[0], a[1] - b[1], a[2] - b[2]]; - 0.3 * d[0] * d[0] + 0.59 * d[1] * d[1] + 0.11 * d[2] * d[2] +fn rect_sum(sums: &[Lab], (x0, y0, x1, y1): glyphs::Rect) -> Lab { + let stride = GW + 1; + let at = |x: u8, y: u8| sums[usize::from(y) * stride + usize::from(x)]; + let (a, b, c, d) = (at(x1, y1), at(x0, y1), at(x1, y0), at(x0, y0)); + [ + a[0] - b[0] - c[0] + d[0], + a[1] - b[1] - c[1] + d[1], + a[2] - b[2] - c[2] + d[2], + ] } -/// The mask and the two colors that best reproduce four pixels. -fn best(px: &[Rgb; 4]) -> (u8, Rgb, Rgb) { - let err = |mask: u8, fg: Rgb, bg: Rgb| -> f32 { - px.iter() - .enumerate() - .map(|(i, p)| dist(*p, if (mask >> i) & 1 == 1 { fg } else { bg })) - .sum() - }; - // one flat color first, so a split has to do strictly better to win. - let flat = mean(px, 15, true); - let mut pick = (15u8, flat, flat, err(15, flat, flat)); - // masks 1..=7 cover every split once (8..=14 are their inverses). - for mask in 1u8..=7 { - let (fg, bg) = (mean(px, mask, true), mean(px, mask, false)); - let e = err(mask, fg, bg); - if e < pick.3 { - pick = (mask, fg, bg, e); +/// The glyph and colors that explain the most of the cell: for a split into +/// sets of n1 and n2 subpixels with sums s1 and s2, the squared error left +/// is the cell's own energy minus |s1|²/n1 + |s2|²/n2, so the best split is +/// the one with the largest of that term. +fn best(glyphs: &'static [Glyph], sums: &[Lab]) -> Cell { + let n = (GW * GH) as f32; + let total = sums[sums.len() - 1]; + let mut pick: Option<(&'static Glyph, Lab, f32)> = None; + for g in glyphs { + let mut fg = [0f32; 3]; + for r in &g.rects { + let s = rect_sum(sums, *r); + for c in 0..3 { + fg[c] += s[c]; + } + } + let nf = g.area as f32; + let nb = n - nf; + let bg = [total[0] - fg[0], total[1] - fg[1], total[2] - fg[2]]; + let score = energy(fg, nf) + energy(bg, nb); + if pick.is_none_or(|(_, _, s)| score > s * (1.0 + TIE)) { + pick = Some((g, fg, score)); } } - (pick.0, pick.1, pick.2) + let Some((g, fg, _)) = pick else { + return (" ", Color::Reset, Color::Reset); + }; + let nf = g.area as f32; + let nb = n - nf; + let bg = [total[0] - fg[0], total[1] - fg[1], total[2] - fg[2]]; + let mean = |s: Lab, k: f32| [s[0] / k, s[1] / k, s[2] / k]; + let (f, b) = match (nf > 0.0, nb > 0.0) { + (true, true) => (mean(fg, nf), mean(bg, nb)), + (true, false) => (mean(fg, nf), mean(fg, nf)), + _ => (mean(bg, nb), mean(bg, nb)), + }; + (g.ch.as_str(), color(f), color(b)) } -fn color(c: Rgb) -> Color { - Color::Rgb(c[0] as u8, c[1] as u8, c[2] as u8) +fn energy(s: Lab, k: f32) -> f32 { + if k > 0.0 { + (s[0] * s[0] + s[1] * s[1] + s[2] * s[2]) / k + } else { + 0.0 + } } -/// The image's cells for `area`, one (glyph, fg, bg) per cell, row by row. -/// The image is resampled to 2 pixels per cell across and 2 down; the cell -/// is about twice as tall as wide, so a fitted `area` keeps the aspect. -pub fn cells(img: &Rgba, w: u16, h: u16) -> Vec { - let (pw, ph) = (u32::from(w) * 2, u32::from(h) * 2); - if pw == 0 || ph == 0 { - return Vec::new(); - } - let small = img.resize(pw, ph); - let at = |x: u32, y: u32| -> Rgb { - let p = small.pixel(x, y); - [f32::from(p[0]), f32::from(p[1]), f32::from(p[2])] +/// sRGB to linear light, one entry per byte value: the pane's 192 +/// subpixels per cell would otherwise take three `powf` each. +fn to_linear(c: u8) -> f32 { + static TABLE: LazyLock<[f32; 256]> = LazyLock::new(|| { + std::array::from_fn(|i| { + let c = i as f32 / 255.0; + if c <= 0.04045 { + c / 12.92 + } else { + ((c + 0.055) / 1.055).powf(2.4) + } + }) + }); + TABLE[usize::from(c)] +} + +fn to_srgb(c: f32) -> u8 { + let c = c.clamp(0.0, 1.0); + let s = if c <= 0.003_130_8 { + c * 12.92 + } else { + 1.055 * c.powf(1.0 / 2.4) - 0.055 }; - let mut out = Vec::with_capacity(usize::from(w) * usize::from(h)); - for cy in 0..u32::from(h) { - for cx in 0..u32::from(w) { - let (x, y) = (cx * 2, cy * 2); - let px = [at(x, y), at(x + 1, y), at(x, y + 1), at(x + 1, y + 1)]; - let (mask, fg, bg) = best(&px); - out.push((GLYPH[usize::from(mask)], color(fg), color(bg))); - } - } - out + (s * 255.0).round() as u8 +} + +/// sRGB to Oklab (Björn Ottosson's matrices). +fn oklab(px: &[u8; 4]) -> Lab { + let (r, g, b) = (to_linear(px[0]), to_linear(px[1]), to_linear(px[2])); + let l = (0.412_221_47 * r + 0.536_332_55 * g + 0.051_445_995 * b).cbrt(); + let m = (0.211_903_5 * r + 0.680_699_5 * g + 0.107_396_96 * b).cbrt(); + let s = (0.088_302_46 * r + 0.281_718_85 * g + 0.629_978_7 * b).cbrt(); + [ + 0.210_454_26 * l + 0.793_617_8 * m - 0.004_072_047 * s, + 1.977_998_5 * l - 2.428_592_2 * m + 0.450_593_7 * s, + 0.025_904_037 * l + 0.782_771_77 * m - 0.808_675_77 * s, + ] +} + +fn color(lab: Lab) -> Color { + let l = lab[0] + 0.396_337_78 * lab[1] + 0.215_803_76 * lab[2]; + let m = lab[0] - 0.105_561_346 * lab[1] - 0.063_854_17 * lab[2]; + let s = lab[0] - 0.089_484_18 * lab[1] - 1.291_485_5 * lab[2]; + let (l, m, s) = (l * l * l, m * m * m, s * s * s); + Color::Rgb( + to_srgb(4.076_741_7 * l - 3.307_711_6 * m + 0.230_969_94 * s), + to_srgb(-1.268_438 * l + 2.609_757_4 * m - 0.341_319_38 * s), + to_srgb(-0.004_196_086_3 * l - 0.703_418_6 * m + 1.707_614_7 * s), + ) } pub fn draw(buf: &mut Buffer, area: Rect, cells: &[Cell]) { @@ -111,14 +189,107 @@ pub fn draw(buf: &mut Buffer, area: Rect, cells: &[Cell]) { mod tests { use super::*; + /// a `w` x `h` image, `f(x, y)` per pixel. + fn image(w: u32, h: u32, f: impl Fn(u32, u32) -> [u8; 3]) -> Rgba { + let mut data = Vec::new(); + for y in 0..h { + for x in 0..w { + let [r, g, b] = f(x, y); + data.extend_from_slice(&[r, g, b, 255]); + } + } + Rgba::new(w, h, data).expect("image") + } + #[test] - fn a_split_cell_takes_its_two_colors_and_a_flat_one_a_full_block() { - let (r, b) = ([255.0, 0.0, 0.0], [0.0, 0.0, 255.0]); - // left column red, right column blue: the left-half glyph. - let (mask, fg, bg) = best(&[r, b, r, b]); - assert_eq!(GLYPH[usize::from(mask)], "▌"); - assert_eq!((fg, bg), (r, b)); - let (mask, ..) = best(&[r, r, r, r]); - assert_eq!(GLYPH[usize::from(mask)], "█"); + fn a_split_takes_the_glyph_that_draws_it_and_its_two_colors() { + let (red, blue) = ([255, 0, 0], [0, 0, 255]); + // left quarter red: the left one quarter block in every set. + let img = image(8, 24, |x, _| if x < 2 { red } else { blue }); + for set in [Set::Blocks, Set::Sextants, Set::Octants] { + let c = cells(&img, 1, 1, set); + assert_eq!(c[0].0, "▎", "{set:?}"); + assert_eq!(c[0].1, Color::Rgb(255, 0, 0)); + assert_eq!(c[0].2, Color::Rgb(0, 0, 255)); + } + // the top third red: a sextant where the font has them, else the + // nearest block (the upper quarter is not in the basic set). + let img = image(8, 24, |_, y| if y < 8 { red } else { blue }); + assert_eq!(cells(&img, 1, 1, Set::Sextants)[0].0, "\u{1FB02}"); + assert_eq!(cells(&img, 1, 1, Set::Blocks)[0].0.chars().count(), 1); + // flat: one color, both sides the same. + let flat = cells(&image(8, 24, |_, _| [9, 90, 200]), 1, 1, Set::Blocks); + assert_eq!(flat[0].1, flat[0].2); + } + + #[test] + fn a_flat_cell_is_the_first_glyph_whatever_the_rounding() { + let steps = || (0..=255u8).step_by(15); + for rgb in steps().flat_map(|r| steps().flat_map(move |g| steps().map(move |b| [r, g, b]))) + { + let img = image(8, 24, |_, _| rgb); + for set in [Set::Blocks, Set::Sextants, Set::Octants] { + for (ch, fg, bg) in cells(&img, 1, 1, set) { + assert_eq!(ch, " ", "{rgb:?} {set:?}"); + assert_eq!(fg, bg); + } + } + } + } + + #[test] + fn the_table_is_the_formula() { + for c in 0..=255u8 { + let x = f32::from(c) / 255.0; + let want = if x <= 0.04045 { + x / 12.92 + } else { + ((x + 0.055) / 1.055).powf(2.4) + }; + assert_eq!(to_linear(c), want); + } + } + + #[test] + fn more_glyphs_never_draw_worse() { + // a diagonal edge, which no block draws exactly. + let img = image(64, 96, |x, y| { + if 3 * x > 2 * y { + [240, 200, 20] + } else { + [20, 30, 90] + } + }); + let err = |set: Set| -> f32 { + let c = cells(&img, 8, 4, set); + let small = img.resize(8 * GW as u32, 4 * GH as u32); + let lab: Vec = small.data.as_chunks::<4>().0.iter().map(oklab).collect(); + let mut e = 0.0; + for (i, (ch, fg, bg)) in c.iter().enumerate() { + let g = glyphs::of(set).iter().find(|g| g.ch == *ch); + let (cx, cy) = (i % 8, i / 8); + for y in 0..GH { + for x in 0..GW { + let inside = g.is_some_and(|g| { + g.rects.iter().any(|&(x0, y0, x1, y1)| { + (usize::from(x0)..usize::from(x1)).contains(&x) + && (usize::from(y0)..usize::from(y1)).contains(&y) + }) + }); + let drawn = if inside { *fg } else { *bg }; + let Color::Rgb(r, gg, b) = drawn else { + continue; + }; + let q = oklab(&[r, gg, b, 255]); + let p = lab[(cy * GH + y) * 8 * GW + cx * GW + x]; + e += (0..3).map(|k| (p[k] - q[k]).powi(2)).sum::(); + } + } + } + e + }; + let (b, s, o) = (err(Set::Blocks), err(Set::Sextants), err(Set::Octants)); + assert!(s <= b + 1e-3 && o <= s + 1e-3, "{b} {s} {o}"); + assert!(o < b, "{b} {o}"); } } diff --git a/rust/clitui/src/tui/app/draw.rs b/rust/clitui/src/tui/app/draw.rs index a53f9c71..1a46b2ba 100644 --- a/rust/clitui/src/tui/app/draw.rs +++ b/rust/clitui/src/tui/app/draw.rs @@ -93,18 +93,23 @@ impl App { } self.fx.add_unique_effect("page", fx::page_in(body)); } + // what is drawn over the ask tab's image hides its pixels. + let mut covers = Vec::new(); if self.tab == Tab::Ask && let Some(o) = &self.ask.offer { offer::render(buf, body, o, &spin); + covers.push(body); } if let Some(fe) = &self.picker { let r = pick::render(buf, area, fe); + covers.push(r); if std::mem::take(&mut self.picker_new) { self.fx.add_unique_effect("picker", fx::open(r)); } } for r in self.toasts.render(buf, body) { + covers.push(r); self.fx.add_effect(fx::toast_in(r)); } if !self.booted { @@ -114,6 +119,7 @@ impl App { } self.fx.process_effects(dt, buf, area); pal::fit(buf, area, self.depth); + self.ask.media.settle(buf, &covers); })?; Ok(()) } diff --git a/rust/clitui/src/tui/app/headless.rs b/rust/clitui/src/tui/app/headless.rs index 9b0ca901..d6f5e12e 100644 --- a/rust/clitui/src/tui/app/headless.rs +++ b/rust/clitui/src/tui/app/headless.rs @@ -23,7 +23,7 @@ const ROWS: u16 = 40; /// and the caller exits 2. fn open(file: &Path) -> Result, i32>> { let c = corpus::load(file)?; - if c.session.label(0).is_none() && c.session.scalars().is_none() { + if super::session::label_fields(c.session.schema()).is_empty() { eprintln!( "{}: the corpus carries no chunk_scalars with a label column (see `urna scalars`)", file.display() @@ -97,6 +97,13 @@ pub fn eval(file: &Path, want: usize) -> Result { let want = want.max(1); let stride = (all.len() / want).max(1); let names: Vec<(usize, String)> = all.into_iter().step_by(stride).collect(); + if names.is_empty() { + eprintln!( + "{}: no chunk carries both a label and a rank to evaluate", + file.display() + ); + return Ok(2); + } let keep = |_: usize| true; let (mut full_top1, mut search_top1, mut keys_to_top5) = (0usize, 0usize, Vec::new()); let mut lat = Vec::new(); diff --git a/rust/clitui/src/tui/app/media.rs b/rust/clitui/src/tui/app/media.rs index b6882526..ef19af3b 100644 --- a/rust/clitui/src/tui/app/media.rs +++ b/rust/clitui/src/tui/app/media.rs @@ -1,16 +1,17 @@ //! The ask tab's image pane. The terminal says once, at start, what it -//! can draw (kitty, sixel, iterm2, from its environment); without a -//! protocol it gets quadrant characters, which every font has. The -//! selected hit's image blob is sliced off the mmap, decoded by `urna-images` -//! (the AV1 decoder carried in the tree, pure rust) and fitted to the pane -//! with its aspect kept. Pixels go out after the frame, as the escape -//! bytes of the protocol written at the image's anchor cell. +//! draws (`graphics::detect`): kitty, sixel or iTerm2 pixels, or block +//! glyphs from the set its font carries. The selected hit's image blob is +//! sliced off the mmap, decoded by `urna-images` (the AV1 decoder carried +//! in the tree, pure rust) and fitted to the pane with its aspect kept. +//! Glyphs are drawn into the frame; pixels go out after it (`flush`), as +//! the protocol's escape bytes at the image's anchor cell, and the frame +//! is told (`settle`) which cells the pixels cover and which they left. use std::io::Write; use std::time::Instant; use anyhow::{Result, anyhow}; -use ratatui::buffer::Buffer; +use ratatui::buffer::{Buffer, CellDiffOption}; use ratatui::layout::Rect; use super::session::Session; @@ -19,40 +20,45 @@ use crate::tui::graphics::{self, Protocol, Rgba, Terminal}; /// The id the protocols that keep images know this pane's image by. const IMAGE_ID: u32 = 7; +/// The image made for the rect it was last drawn at. +enum Drawn { + Glyphs(Vec), + /// the protocol's escape bytes. + Pixels(Vec), +} + struct Shown { blob: usize, + /// `None` when the blob did not decode (`error` says why). rgba: Option, - /// the character cells last drawn, and the rect they were drawn for. - blocks: Option<(Rect, Vec)>, - /// the protocol bytes last encoded, and the rect they fit. - encoded: Option<(Rect, Vec)>, + drawn: Option<(Rect, Drawn)>, size: (u32, u32), error: Option, ms: f64, } -/// Where the next flush writes the image: the anchor cell and the bytes. -struct Placement { - x: u16, - y: u16, - bytes: Vec, - /// the same image at the same cells as the last flush: nothing to send. - unchanged: bool, -} - #[derive(Default)] pub struct Media { terminal: Option, shown: Option, - pending: Option, - /// a protocol image is on screen from the last flush. + /// where this frame's pixels go: set by `render`, kept by `settle` + /// when nothing covers them, written by `flush`. + pending: Option, + /// the blob and the rect of the pixels on screen since the last flush. on_screen: Option<(usize, Rect)>, + /// a resize cleared the screen since `on_screen` was drawn: its pixels + /// go out again, or the image a terminal may keep is removed. + stale: bool, + /// the frame's size at the last settle: a resize clears the screen. + frame: Rect, } impl Media { - /// The probed terminal, handed over to the next ask. - pub fn take_terminal(&mut self) -> Option { - self.terminal.take() + /// A new corpus: nothing is shown, but what is on screen and what the + /// terminal draws stay known, so the next flush removes the old image. + pub fn forget(&mut self) { + self.shown = None; + self.pending = None; } pub fn set_terminal(&mut self, terminal: Terminal) { @@ -60,10 +66,6 @@ impl Media { self.shown = None; } - pub fn protocol(&self) -> Option { - self.terminal.map(|t| t.protocol) - } - /// The last decode, for the status line. pub fn decode_ms(&self) -> Option { self.shown @@ -83,8 +85,7 @@ impl Media { blob, size: (img.width, img.height), rgba: Some(img), - blocks: None, - encoded: None, + drawn: None, error: None, ms: t.elapsed().as_secs_f64() * 1e3, }, @@ -92,8 +93,7 @@ impl Media { blob, size: (1, 1), rgba: None, - blocks: None, - encoded: None, + drawn: None, error: Some(format!("{e:#}")), ms: 0.0, }, @@ -149,74 +149,114 @@ impl Media { self.shown.as_ref().and_then(|s| s.error.as_deref()) } - /// Draw into the frame: quadrant cells, or blank cells under the - /// pixels the next `flush` writes there. + /// Draw into the frame: the glyphs, or blank cells where the next + /// `flush` writes the pixels. A pane the layout collapsed to nothing + /// draws nothing. pub fn render(&mut self, buf: &mut Buffer, area: Rect) { + if area.is_empty() { + return; + } let Some(t) = self.terminal else { return }; let Some(s) = self.shown.as_mut() else { return }; let Some(rgba) = &s.rgba else { return }; let fit = fit(area, s.size, t.cell); - if !t.protocol.pixels() { - // no pixels: quadrant characters, recomputed only when the rect moves. - if s.blocks.as_ref().is_none_or(|(r, _)| *r != fit) { - s.blocks = Some((fit, super::blocks::cells(rgba, fit.width, fit.height))); - } - if let Some((r, cells)) = &s.blocks { - super::blocks::draw(buf, *r, cells); - } - return; + // made again only when the rect moves. + if s.drawn.as_ref().is_none_or(|(r, _)| *r != fit) { + let drawn = if t.protocol.pixels() { + let px = rgba.resize( + u32::from(fit.width) * u32::from(t.cell.0.max(1)), + u32::from(fit.height) * u32::from(t.cell.1.max(1)), + ); + Drawn::Pixels(graphics::encode( + t.protocol, &px, fit.width, fit.height, IMAGE_ID, + )) + } else { + Drawn::Glyphs(super::blocks::cells(rgba, fit.width, fit.height, t.glyphs)) + }; + s.drawn = Some((fit, drawn)); } - // the terminal draws pixels: the cells under them stay blank so the - // frame never paints text over the image. - for y in fit.y..fit.bottom() { - for x in fit.x..fit.right() { - if let Some(cell) = buf.cell_mut((x, y)) { - cell.reset(); + match &s.drawn { + Some((r, Drawn::Glyphs(cells))) => super::blocks::draw(buf, *r, cells), + Some((r, Drawn::Pixels(_))) => { + for p in r.positions() { + if let Some(c) = buf.cell_mut(p) { + c.reset(); + } } + self.pending = Some(*r); } + None => {} + } + } + + /// At the end of the frame, with every overlay drawn: pixels that + /// something in `covers` overlaps are not drawn this frame. The cells + /// under pixels already on screen are skipped, so no redraw of the + /// frame paints over them; the cells pixels left are drawn again, + /// since ratatui would not repaint a blank over a blank. + pub fn settle(&mut self, buf: &mut Buffer, covers: &[Rect]) { + if buf.area != self.frame { + // a resize clears the screen; kitty may keep its image, so + // the one on screen is still deleted if nothing replaces it. + self.frame = buf.area; + self.stale = self.on_screen.is_some(); } - if s.encoded.as_ref().is_none_or(|(r, _)| *r != fit) { - let px = rgba.resize( - u32::from(fit.width) * u32::from(t.cell.0.max(1)), - u32::from(fit.height) * u32::from(t.cell.1.max(1)), - ); - s.encoded = Some(( - fit, - graphics::encode(t.protocol, &px, fit.width, fit.height, IMAGE_ID), - )); + let blob = self.shown.as_ref().map(|s| s.blob); + self.pending = self + .pending + .filter(|r| !covers.iter().any(|c| c.intersects(*r))); + if let Some((_, old)) = self.on_screen { + let stays = self.pending; + for p in old.intersection(buf.area).positions() { + if !stays.is_some_and(|r| r.contains(p)) + && let Some(c) = buf.cell_mut(p) + { + c.set_diff_option(CellDiffOption::AlwaysUpdate); + } + } } - if let Some((r, bytes)) = &s.encoded { - self.pending = Some(Placement { - x: r.x, - y: r.y, - bytes: bytes.clone(), - unchanged: self.on_screen == Some((s.blob, *r)), - }); + // the first frame of a placement draws its blanks, so nothing the + // pixels leave transparent shows the text that was there. + if let (Some(r), Some(b)) = (self.pending, blob) + && !self.stale + && self.on_screen == Some((b, r)) + { + for p in r.intersection(buf.area).positions() { + if let Some(c) = buf.cell_mut(p) { + c.set_diff_option(CellDiffOption::Skip); + } + } } } /// After the frame: write the pending pixels at their anchor, or - /// remove the image the terminal keeps when nothing was rendered. + /// remove the image the terminal keeps when none were rendered. pub fn flush(&mut self, out: &mut impl Write) -> std::io::Result<()> { let Some(t) = self.terminal else { return Ok(()); }; - match self.pending.take() { - Some(p) if p.unchanged => Ok(()), - Some(p) => { + let placed = self.pending.take().and_then(|r| { + let s = self.shown.as_ref()?; + match &s.drawn { + Some((at, Drawn::Pixels(bytes))) if *at == r => Some((s.blob, r, bytes)), + _ => None, + } + }); + match placed { + Some((blob, r, _)) if !self.stale && self.on_screen == Some((blob, r)) => Ok(()), + Some((blob, r, bytes)) => { // save the cursor, go to the anchor (1-based), draw, restore. out.write_all(b"\x1b7")?; - out.write_all(format!("\x1b[{};{}H", p.y + 1, p.x + 1).as_bytes())?; - out.write_all(&p.bytes)?; + out.write_all(format!("\x1b[{};{}H", r.y + 1, r.x + 1).as_bytes())?; + out.write_all(bytes)?; out.write_all(b"\x1b8")?; out.flush()?; - self.on_screen = self - .shown - .as_ref() - .and_then(|s| s.encoded.as_ref().map(|(r, _)| (s.blob, *r))); + self.on_screen = Some((blob, r)); + self.stale = false; Ok(()) } None => { + self.stale = false; if self.on_screen.take().is_some() { let bytes = graphics::clear(t.protocol, IMAGE_ID); if !bytes.is_empty() { @@ -229,13 +269,20 @@ impl Media { } } - /// What draws the image: the terminal's protocol, or characters. + /// What draws the image, for the status line. pub fn mode(&self) -> &'static str { - self.protocol().unwrap_or(Protocol::Quadrants).name() + match self.terminal.map(|t| (t.protocol, t.glyphs)) { + Some((Protocol::Kitty, _)) => "kitty", + Some((Protocol::Sixel, _)) => "sixel", + Some((Protocol::Iterm2, _)) => "iterm2", + Some((Protocol::Glyphs, g)) => g.name(), + None => graphics::glyphs::Set::default().name(), + } } } -/// `size` pixels fitted in `area` cells with the aspect kept, centered. +/// `size` pixels fitted in `area` cells with the aspect kept, centered; +/// `area` is not empty (`render` returns before). fn fit(area: Rect, size: (u32, u32), font: (u16, u16)) -> Rect { let (fw, fh) = (f64::from(font.0.max(1)), f64::from(font.1.max(1))); let (iw, ih) = (f64::from(size.0.max(1)), f64::from(size.1.max(1))); @@ -259,6 +306,38 @@ fn decode(session: &Session, blob: usize) -> Result { #[cfg(test)] mod tests { use super::*; + use crate::tui::graphics::glyphs::Set; + + fn media(protocol: Protocol) -> Media { + let mut m = Media::default(); + m.set_terminal(Terminal { + protocol, + cell: (10, 20), + glyphs: Set::Blocks, + }); + m.shown = Some(Shown { + blob: 1, + size: (4, 4), + rgba: Rgba::new(4, 4, vec![200; 64]), + drawn: None, + error: None, + ms: 0.0, + }); + m + } + + /// One frame: render the pane at `pane`, settle against `covers`, + /// flush; the bytes written. + fn frame(m: &mut Media, pane: Option, covers: &[Rect]) -> (Buffer, Vec) { + let mut buf = Buffer::empty(Rect::new(0, 0, 40, 20)); + if let Some(p) = pane { + m.render(&mut buf, p); + } + m.settle(&mut buf, covers); + let mut out = Vec::new(); + m.flush(&mut out).expect("writes"); + (buf, out) + } #[test] fn fit_keeps_the_aspect_and_centers() { @@ -272,36 +351,87 @@ mod tests { } #[test] - fn flush_writes_the_anchor_then_the_bytes_and_clears_once_gone() { - let mut m = Media { - terminal: Some(Terminal { - protocol: Protocol::Kitty, - cell: (10, 20), - }), - ..Default::default() - }; - m.pending = Some(Placement { - x: 4, - y: 2, - bytes: b"IMG".to_vec(), - unchanged: false, - }); - m.shown = Some(Shown { - blob: 1, - rgba: None, - blocks: None, - encoded: Some((Rect::new(4, 2, 1, 1), b"IMG".to_vec())), - size: (1, 1), - error: None, - ms: 0.0, - }); - let mut out = Vec::new(); - m.flush(&mut out).expect("writes"); - assert_eq!(out, b"\x1b7\x1b[3;5HIMG\x1b8"); - assert!(m.on_screen.is_some()); - let mut out = Vec::new(); - m.flush(&mut out).expect("clears"); + fn without_pixels_the_pane_draws_glyphs_and_says_so() { + let mut m = media(Protocol::Glyphs); + assert_eq!(m.mode(), "blocks"); + assert_eq!(m.cells_wide(10), 20); + let (buf, out) = frame(&mut m, Some(Rect::new(0, 0, 20, 10)), &[]); + // a flat image: a blank in its color on both sides. + let c = &buf[(5, 5)]; + assert_eq!(c.bg, ratatui::style::Color::Rgb(200, 200, 200)); + assert_eq!(c.fg, c.bg); + assert!(out.is_empty()); + } + + #[test] + fn a_collapsed_pane_draws_nothing_and_does_not_panic() { + for protocol in [Protocol::Glyphs, Protocol::Kitty] { + let mut m = media(protocol); + for pane in [Rect::new(3, 3, 0, 5), Rect::new(3, 3, 5, 0)] { + let (buf, out) = frame(&mut m, Some(pane), &[]); + assert!(buf.content.iter().all(|c| c.symbol() == " ")); + assert!(out.is_empty()); + } + } + } + + #[test] + fn pixels_go_out_once_at_the_anchor_and_leave_when_the_pane_goes() { + let mut m = media(Protocol::Kitty); + let pane = Rect::new(4, 2, 10, 5); + let (_, out) = frame(&mut m, Some(pane), &[]); + // a 4x4 image in 10x5 cells of 10x20 px fills them: anchor (4, 2). + assert!(out.starts_with(b"\x1b7\x1b[3;5H\x1b_G"), "{:?}", &out[..12]); + assert!(out.ends_with(b"\x1b8")); + // the same image at the same cells: nothing to send, the cells skipped. + let (buf, out) = frame(&mut m, Some(pane), &[]); + assert!(out.is_empty()); + assert_eq!(buf[(7, 3)].diff_option, CellDiffOption::Skip); + // off the tab: kitty deletes it, the cells it held are drawn again. + let (buf, out) = frame(&mut m, None, &[]); assert!(out.starts_with(b"\x1b_Ga=d")); - assert!(m.on_screen.is_none()); + assert_eq!(buf[(7, 3)].diff_option, CellDiffOption::AlwaysUpdate); + let (_, out) = frame(&mut m, None, &[]); + assert!(out.is_empty()); + } + + #[test] + fn an_overlay_hides_the_pixels_and_a_resize_sends_them_again() { + let mut m = media(Protocol::Sixel); + let pane = Rect::new(0, 0, 10, 5); + let (_, out) = frame(&mut m, Some(pane), &[]); + assert!(!out.is_empty()); + // a toast over the image: not drawn this frame, its cells repainted. + let (buf, out) = frame(&mut m, Some(pane), &[Rect::new(2, 2, 3, 1)]); + assert!(out.is_empty(), "sixel has nothing to delete"); + assert_eq!(buf[(3, 2)].diff_option, CellDiffOption::AlwaysUpdate); + let (_, out) = frame(&mut m, Some(pane), &[]); + assert!(out.starts_with(b"\x1b7"), "back once the toast is gone"); + // a resize clears the screen: the same placement goes out again. + m.frame = Rect::new(0, 0, 80, 24); + let (_, out) = frame(&mut m, Some(pane), &[]); + assert!(out.starts_with(b"\x1b7")); + } + + #[test] + fn a_resize_that_hides_the_pane_still_deletes_the_kept_image() { + let mut m = media(Protocol::Kitty); + let (_, out) = frame(&mut m, Some(Rect::new(0, 0, 10, 5)), &[]); + assert!(out.starts_with(b"\x1b7")); + m.frame = Rect::new(0, 0, 80, 24); + let (_, out) = frame(&mut m, None, &[]); + assert!(out.starts_with(b"\x1b_Ga=d"), "{out:?}"); + } + + #[test] + fn a_new_corpus_deletes_the_image_the_last_one_left() { + let mut m = media(Protocol::Kitty); + let pane = Rect::new(4, 2, 10, 5); + frame(&mut m, Some(pane), &[]); + m.forget(); + let (buf, out) = frame(&mut m, None, &[]); + assert!(out.starts_with(b"\x1b_Ga=d"), "{out:?}"); + assert_eq!(buf[(7, 3)].diff_option, CellDiffOption::AlwaysUpdate); + assert_eq!(m.mode(), "kitty"); } } diff --git a/rust/clitui/src/tui/app/mod.rs b/rust/clitui/src/tui/app/mod.rs index 1c7e8636..d4e44ec9 100644 --- a/rust/clitui/src/tui/app/mod.rs +++ b/rust/clitui/src/tui/app/mod.rs @@ -214,13 +214,14 @@ impl App { self.corpus = Some(c); self.first_run = false; self.sec_scroll = 0; - // a fresh ask for the new corpus, keeping what the - // terminal answered it can draw (probed once, at start). - let terminal = self.ask.media.take_terminal(); + // a fresh ask for the new corpus, keeping the image + // pane: what the terminal answered it can draw (probed + // once, at start) and the image still on screen, which + // the next flush removes. + let mut media = std::mem::take(&mut self.ask.media); + media.forget(); self.ask = ask::Ask::default(); - if let Some(t) = terminal { - self.ask.media.set_terminal(t); - } + self.ask.media = media; self.go(land); if let Some(q) = self.ask_on_open.take() && let Some(c) = &self.corpus @@ -306,6 +307,9 @@ pub fn run(file: Option, mut ask: Option) -> anyhow::Result = None; loop { let mut terminal = term::fullscreen()?; // a query to ask lands the file on the ask tab instead of corpus; @@ -317,7 +321,16 @@ pub fn run(file: Option, mut ask: Option) -> anyhow::Result &'static str { + match self { + Self::Blocks => "blocks", + Self::Sextants => "sextants", + Self::Octants => "octants", + } + } +} + +/// A half-open rectangle of subpixels: x0, y0, x1, y1. +pub type Rect = (u8, u8, u8, u8); + +/// A glyph and the rectangles it covers. +#[derive(Debug)] +pub struct Glyph { + pub ch: String, + pub rects: Vec, + /// covered subpixels. + pub area: u32, +} + +/// The glyphs of `set`, each coverage once. +pub fn of(set: Set) -> &'static [Glyph] { + static BLOCKS: OnceLock> = OnceLock::new(); + static SEXTANTS: OnceLock> = OnceLock::new(); + static OCTANTS: OnceLock> = OnceLock::new(); + match set { + Set::Blocks => BLOCKS.get_or_init(|| build(set)), + Set::Sextants => SEXTANTS.get_or_init(|| build(set)), + Set::Octants => OCTANTS.get_or_init(|| build(set)), + } +} + +fn build(set: Set) -> Vec { + let mut out = Glyphs::default(); + let (w, h) = (GW as u8, GH as u8); + out.add(' ', vec![]); + out.add('█', vec![(0, 0, w, h)]); + for k in 1..8u8 { + // lower and left eighths, U+2581..U+2587 and U+2589..U+258F + out.add_cp(0x2580 + u32::from(k), vec![(0, h - 3 * k, w, h)]); + out.add_cp(0x2590 - u32::from(k), vec![(0, 0, k, h)]); + } + out.add('▀', vec![(0, 0, w, 12)]); + out.add('▐', vec![(4, 0, w, h)]); + out.add('▔', vec![(0, 0, w, 3)]); + out.add('▕', vec![(7, 0, w, h)]); + // quadrants: bit 0 top left, 1 top right, 2 bottom left, 3 bottom right + const QUAD: [char; 16] = [ + ' ', '▘', '▝', '▀', '▖', '▌', '▞', '▛', '▗', '▚', '▐', '▜', '▄', '▙', '▟', '█', + ]; + for (m, ch) in QUAD.iter().enumerate() { + out.add(*ch, grid(m as u32, 2, 2)); + } + lines(&mut out); + if set == Set::Blocks { + return out.0; + } + // sextants, U+1FB00..U+1FB3B: every 2 x 3 pattern but the empty, the + // full and the two half blocks, in pattern order (bit 0 top left). + let mut cp = 0x1FB00; + for m in 1..63u32 { + if m == 21 || m == 42 { + continue; + } + out.add_cp(cp, grid(m, 2, 3)); + cp += 1; + } + for (i, k) in [2u8, 3, 5, 6, 7].into_iter().enumerate() { + // upper and right quarter to seven eighths, U+1FB82..U+1FB8B + out.add_cp(0x1FB82 + i as u32, vec![(0, 0, w, 3 * k)]); + out.add_cp(0x1FB87 + i as u32, vec![(w - k, 0, w, h)]); + } + if set == Set::Sextants { + return out.0; + } + for (m, cp) in OCTANTS.iter().enumerate() { + out.add_cp(*cp, grid(m as u32, 2, 4)); + } + out.0 +} + +/// The box-drawing lines, light and heavy: the four half-segments from the +/// cell's centre (left, right, up, down) and every glyph U+2500..U+257B +/// makes of them: lines, corners, tees, crosses and the lone halves. +fn lines(out: &mut Glyphs) { + // (left, right, up, down) rectangles of one weight + let light = [ + (0, 11, 4, 13), + (4, 11, 8, 13), + (4, 0, 5, 12), + (4, 12, 5, 24), + ]; + let heavy = [ + (0, 10, 4, 14), + (4, 10, 8, 14), + (3, 0, 5, 12), + (3, 12, 5, 24), + ]; + // (light codepoint, heavy codepoint, which segments) + const L: u8 = 1; + const R: u8 = 2; + const U: u8 = 4; + const D: u8 = 8; + let shapes: [(u32, u32, u8); 15] = [ + (0x2500, 0x2501, L | R), + (0x2502, 0x2503, U | D), + (0x250C, 0x250F, R | D), + (0x2510, 0x2513, L | D), + (0x2514, 0x2517, R | U), + (0x2518, 0x251B, L | U), + (0x251C, 0x2523, U | D | R), + (0x2524, 0x252B, U | D | L), + (0x252C, 0x2533, L | R | D), + (0x2534, 0x253B, L | R | U), + (0x253C, 0x254B, L | R | U | D), + (0x2574, 0x2578, L), + (0x2575, 0x2579, U), + (0x2576, 0x257A, R), + (0x2577, 0x257B, D), + ]; + for (light_cp, heavy_cp, segs) in shapes { + for (weight, cp) in [(&light, light_cp), (&heavy, heavy_cp)] { + let rects = (0..4) + .filter(|i| segs >> i & 1 == 1) + .map(|i| weight[i]) + .collect(); + out.add_cp(cp, rects); + } + } +} + +/// The rectangles of pattern `m` on a `cols` x `rows` grid, bit 0 top +/// left, row by row. +fn grid(m: u32, cols: u8, rows: u8) -> Vec { + let (cw, rh) = (GW as u8 / cols, GH as u8 / rows); + (0..cols * rows) + .filter(|b| m >> b & 1 == 1) + .map(|b| { + let (c, r) = (b % cols, b / cols); + (c * cw, r * rh, (c + 1) * cw, (r + 1) * rh) + }) + .collect() +} + +#[derive(Default)] +struct Glyphs(Vec, Vec<[u64; 3]>); + +impl Glyphs { + /// Adds the glyph covering `rects` (which may overlap: the coverage is + /// their union, stored again as rows of runs, so sums over it count + /// each subpixel once); a coverage already present is skipped. + fn add(&mut self, ch: char, rects: Vec) { + let mut mask = [0u64; 3]; + for &(x0, y0, x1, y1) in &rects { + for y in y0..y1 { + for x in x0..x1 { + let i = usize::from(y) * GW + usize::from(x); + mask[i / 64] |= 1 << (i % 64); + } + } + } + if self.1.contains(&mask) { + return; + } + self.1.push(mask); + let area = mask.iter().map(|w| w.count_ones()).sum(); + self.0.push(Glyph { + ch: ch.to_string(), + rects: runs(&mask), + area, + }); + } + + fn add_cp(&mut self, cp: u32, rects: Vec) { + if let Some(ch) = char::from_u32(cp) { + self.add(ch, rects); + } + } +} + +/// The coverage as rectangles that do not overlap: each row's runs of set +/// subpixels, a run merged with the same run on the row above. +fn runs(mask: &[u64; 3]) -> Vec { + let set = |x: usize, y: usize| { + let i = y * GW + x; + mask[i / 64] >> (i % 64) & 1 == 1 + }; + let mut rects: Vec = Vec::new(); + for y in 0..GH { + let mut x = 0; + while x < GW { + if !set(x, y) { + x += 1; + continue; + } + let start = x; + while x < GW && set(x, y) { + x += 1; + } + let (x0, x1, yy) = (start as u8, x as u8, y as u8); + match rects + .iter_mut() + .find(|r| r.0 == x0 && r.2 == x1 && r.3 == yy) + { + Some(r) => r.3 = yy + 1, + None => rects.push((x0, yy, x1, yy + 1)), + } + } + } + rects +} + +/// The glyph of every 2 x 4 pattern (bit 0 top left, row by row): the +/// octants of U+1CD00..U+1CDE5 and, for the 26 patterns Unicode had drawn +/// before, those older glyphs; read from UnicodeData.txt 16.0. +const OCTANTS: [u32; 256] = [ + 0x20, 0x1CEA8, 0x1CEAB, 0x1FB82, 0x1CD00, 0x2598, 0x1CD01, 0x1CD02, 0x1CD03, 0x1CD04, 0x259D, + 0x1CD05, 0x1CD06, 0x1CD07, 0x1CD08, 0x2580, 0x1CD09, 0x1CD0A, 0x1CD0B, 0x1CD0C, 0x1FBE6, + 0x1CD0D, 0x1CD0E, 0x1CD0F, 0x1CD10, 0x1CD11, 0x1CD12, 0x1CD13, 0x1CD14, 0x1CD15, 0x1CD16, + 0x1CD17, 0x1CD18, 0x1CD19, 0x1CD1A, 0x1CD1B, 0x1CD1C, 0x1CD1D, 0x1CD1E, 0x1CD1F, 0x1FBE7, + 0x1CD20, 0x1CD21, 0x1CD22, 0x1CD23, 0x1CD24, 0x1CD25, 0x1CD26, 0x1CD27, 0x1CD28, 0x1CD29, + 0x1CD2A, 0x1CD2B, 0x1CD2C, 0x1CD2D, 0x1CD2E, 0x1CD2F, 0x1CD30, 0x1CD31, 0x1CD32, 0x1CD33, + 0x1CD34, 0x1CD35, 0x1FB85, 0x1CEA3, 0x1CD36, 0x1CD37, 0x1CD38, 0x1CD39, 0x1CD3A, 0x1CD3B, + 0x1CD3C, 0x1CD3D, 0x1CD3E, 0x1CD3F, 0x1CD40, 0x1CD41, 0x1CD42, 0x1CD43, 0x1CD44, 0x2596, + 0x1CD45, 0x1CD46, 0x1CD47, 0x1CD48, 0x258C, 0x1CD49, 0x1CD4A, 0x1CD4B, 0x1CD4C, 0x259E, + 0x1CD4D, 0x1CD4E, 0x1CD4F, 0x1CD50, 0x259B, 0x1CD51, 0x1CD52, 0x1CD53, 0x1CD54, 0x1CD55, + 0x1CD56, 0x1CD57, 0x1CD58, 0x1CD59, 0x1CD5A, 0x1CD5B, 0x1CD5C, 0x1CD5D, 0x1CD5E, 0x1CD5F, + 0x1CD60, 0x1CD61, 0x1CD62, 0x1CD63, 0x1CD64, 0x1CD65, 0x1CD66, 0x1CD67, 0x1CD68, 0x1CD69, + 0x1CD6A, 0x1CD6B, 0x1CD6C, 0x1CD6D, 0x1CD6E, 0x1CD6F, 0x1CD70, 0x1CEA0, 0x1CD71, 0x1CD72, + 0x1CD73, 0x1CD74, 0x1CD75, 0x1CD76, 0x1CD77, 0x1CD78, 0x1CD79, 0x1CD7A, 0x1CD7B, 0x1CD7C, + 0x1CD7D, 0x1CD7E, 0x1CD7F, 0x1CD80, 0x1CD81, 0x1CD82, 0x1CD83, 0x1CD84, 0x1CD85, 0x1CD86, + 0x1CD87, 0x1CD88, 0x1CD89, 0x1CD8A, 0x1CD8B, 0x1CD8C, 0x1CD8D, 0x1CD8E, 0x1CD8F, 0x2597, + 0x1CD90, 0x1CD91, 0x1CD92, 0x1CD93, 0x259A, 0x1CD94, 0x1CD95, 0x1CD96, 0x1CD97, 0x2590, + 0x1CD98, 0x1CD99, 0x1CD9A, 0x1CD9B, 0x259C, 0x1CD9C, 0x1CD9D, 0x1CD9E, 0x1CD9F, 0x1CDA0, + 0x1CDA1, 0x1CDA2, 0x1CDA3, 0x1CDA4, 0x1CDA5, 0x1CDA6, 0x1CDA7, 0x1CDA8, 0x1CDA9, 0x1CDAA, + 0x1CDAB, 0x2582, 0x1CDAC, 0x1CDAD, 0x1CDAE, 0x1CDAF, 0x1CDB0, 0x1CDB1, 0x1CDB2, 0x1CDB3, + 0x1CDB4, 0x1CDB5, 0x1CDB6, 0x1CDB7, 0x1CDB8, 0x1CDB9, 0x1CDBA, 0x1CDBB, 0x1CDBC, 0x1CDBD, + 0x1CDBE, 0x1CDBF, 0x1CDC0, 0x1CDC1, 0x1CDC2, 0x1CDC3, 0x1CDC4, 0x1CDC5, 0x1CDC6, 0x1CDC7, + 0x1CDC8, 0x1CDC9, 0x1CDCA, 0x1CDCB, 0x1CDCC, 0x1CDCD, 0x1CDCE, 0x1CDCF, 0x1CDD0, 0x1CDD1, + 0x1CDD2, 0x1CDD3, 0x1CDD4, 0x1CDD5, 0x1CDD6, 0x1CDD7, 0x1CDD8, 0x1CDD9, 0x1CDDA, 0x2584, + 0x1CDDB, 0x1CDDC, 0x1CDDD, 0x1CDDE, 0x2599, 0x1CDDF, 0x1CDE0, 0x1CDE1, 0x1CDE2, 0x259F, + 0x1CDE3, 0x2586, 0x1CDE4, 0x1CDE5, 0x2588, +]; + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn each_set_holds_its_glyphs_once_and_grows_with_the_font() { + let (b, s, o) = (of(Set::Blocks), of(Set::Sextants), of(Set::Octants)); + // 2 + 14 eighths + 4 halves and eighths + the 10 quadrants left, + // then 15 light and 15 heavy lines + assert_eq!(b.len(), 60); + assert_eq!(s.len(), b.len() + 60 + 10); + // a cross is four runs that never overlap: its area is one count + for ch in ["┏", "╋", "╹", "┼", "╴"] { + assert!(b.iter().any(|g| g.ch == ch), "{ch}"); + } + assert!(!b.iter().any(|g| g.ch == "┍"), "no mixed weights"); + let cross = b.iter().find(|g| g.ch == "┼").expect("cross"); + let summed: u32 = cross + .rects + .iter() + .map(|&(x0, y0, x1, y1)| u32::from(x1 - x0) * u32::from(y1 - y0)) + .sum(); + assert_eq!(summed, cross.area); + assert_eq!(cross.area, 8 * 2 + 24 - 2); + assert!(o.len() > 300); + assert!(o.iter().any(|g| g.ch == "\u{1CD00}")); + let full = b.iter().find(|g| g.ch == "█").map(|g| g.area); + assert_eq!(full, Some((GW * GH) as u32)); + let lower = b.iter().find(|g| g.ch == "▄").map(|g| g.area); + assert_eq!(lower, Some((GW * GH / 2) as u32)); + } +} diff --git a/rust/clitui/src/tui/graphics/mod.rs b/rust/clitui/src/tui/graphics/mod.rs index 53e42754..94fd03b4 100644 --- a/rust/clitui/src/tui/graphics/mod.rs +++ b/rust/clitui/src/tui/graphics/mod.rs @@ -1,17 +1,19 @@ -//! Pixels in the terminal, by the protocol the terminal speaks, written +//! Pixels for the terminal, by the protocol the terminal speaks, written //! here from the specifications: kitty's graphics protocol (kitty, //! ghostty), iTerm2's inline images (iTerm2, WezTerm) and sixel. Each //! takes an `Rgba` image sized for a cell rectangle and gives the escape //! bytes that draw it at the cursor; the explorer writes them after each -//! frame at the image's anchor cell. Terminals with none of these get -//! quadrant characters (`app::blocks`). The protocol comes from the -//! variables terminals set, `URNA_GRAPHICS` overrides them; nothing here -//! queries the terminal, so no reply can land in the key stream. +//! frame at the image's anchor cell. Which one the terminal speaks, and +//! its cell size, the terminal says itself (`probe`); `URNA_GRAPHICS` +//! overrides it. Terminals with none get the image in block glyphs +//! (`app::blocks`), from the set of `glyphs` the font carries. mod base64; +pub mod glyphs; mod iterm; mod kitty; mod png; +pub mod probe; mod sixel; /// 8-bit RGBA pixels, rows top to bottom, no padding. @@ -94,82 +96,122 @@ pub enum Protocol { Kitty, Iterm2, Sixel, - /// quadrant characters: every terminal and font. - Quadrants, + /// block glyphs (`app::blocks`): every terminal and font. + Glyphs, } impl Protocol { - pub fn name(self) -> &'static str { - match self { - Self::Kitty => "kitty", - Self::Iterm2 => "iterm2", - Self::Sixel => "sixel", - Self::Quadrants => "quadrants", - } - } - pub fn pixels(self) -> bool { - self != Self::Quadrants + self != Self::Glyphs } } -/// The terminal as the explorer draws on it: its protocol and the pixel -/// size of one cell. +/// The terminal as the explorer draws on it: its protocol, the pixel size +/// of one cell and the glyphs its font carries. #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub struct Terminal { pub protocol: Protocol, /// (width, height) of a cell in pixels. pub cell: (u16, u16), + pub glyphs: glyphs::Set, } impl Default for Terminal { fn default() -> Self { Self { - protocol: Protocol::Quadrants, + protocol: Protocol::Glyphs, cell: (10, 20), + glyphs: glyphs::Set::Blocks, } } } -/// The terminal from its environment: `URNA_GRAPHICS` (`kitty`, `iterm`, -/// `sixel`, `halfblocks`/`quadrants`) wins; else kitty's protocol in kitty -/// and ghostty, iTerm2's in iTerm2 and WezTerm, characters everywhere -/// else and inside tmux. The cell size comes from the window size the -/// kernel reports, never from a query. +/// The terminal, asked once per process with the alternate screen up and +/// before any key is read. `URNA_GRAPHICS` (`kitty`, `iterm`, `sixel`, +/// `blocks`) wins over the answer, and `blocks` asks nothing: the glyphs +/// need only the cell size the kernel reports. pub fn detect() -> Terminal { - let cell = crossterm::terminal::window_size() + let env = |k: &str| std::env::var(k).unwrap_or_default(); + let forced = forced(&env("URNA_GRAPHICS")); + let answer = match forced { + Some(Protocol::Glyphs) => None, + _ => probe::ask(probe::DEADLINE), + }; + let kernel = crossterm::terminal::window_size() .ok() .filter(|w| w.width > 0 && w.height > 0 && w.columns > 0 && w.rows > 0) - .map(|w| (w.width / w.columns, w.height / w.rows)) - .unwrap_or((10, 20)); + .map(|w| (w.width / w.columns, w.height / w.rows)); Terminal { - protocol: forced().unwrap_or_else(from_env), - cell, + protocol: forced.unwrap_or_else(|| choose(answer.as_ref(), &env)), + cell: answer + .as_ref() + .and_then(|a| a.cell) + .or(kernel) + .unwrap_or((10, 20)), + glyphs: glyph_set(&env("URNA_GLYPHS")), } } -fn forced() -> Option { - match std::env::var("URNA_GRAPHICS").unwrap_or_default().as_str() { - "kitty" => Some(Protocol::Kitty), - "sixel" => Some(Protocol::Sixel), - "iterm" | "iterm2" => Some(Protocol::Iterm2), - "halfblocks" | "quadrants" => Some(Protocol::Quadrants), - _ => None, +/// The protocol from what the terminal answered. Inside tmux only sixel, +/// which tmux draws itself: an image passed through to the terminal +/// outside would land where that terminal's cursor is, not in the pane. +/// iTerm2 and WezTerm by name take inline images, then kitty's `OK`, then +/// DA1's sixel; a terminal that answered nothing is read from the +/// variables it sets, as before there was a query. +fn choose(answer: Option<&probe::Answer>, env: &dyn Fn(&str) -> String) -> Protocol { + let name = answer.and_then(|a| a.name.as_deref()).unwrap_or_default(); + let term = env("TERM"); + let tmux = !env("TMUX").is_empty() + || term.starts_with("tmux") + || term.starts_with("screen") + || name.starts_with("tmux"); + match answer.filter(|a| a.done) { + Some(a) if tmux => { + if a.sixel { + Protocol::Sixel + } else { + Protocol::Glyphs + } + } + Some(_) if name.starts_with("iTerm2") || name.starts_with("WezTerm") => Protocol::Iterm2, + Some(a) if a.kitty => Protocol::Kitty, + Some(a) if a.sixel => Protocol::Sixel, + Some(_) => Protocol::Glyphs, + None if tmux => Protocol::Glyphs, + None => from_env(env), } } -fn from_env() -> Protocol { - let var = |k: &str| std::env::var(k).unwrap_or_default(); - let (term, program) = (var("TERM"), var("TERM_PROGRAM")); - if term.starts_with("tmux") || term.starts_with("screen") { - Protocol::Quadrants - } else if !var("KITTY_WINDOW_ID").is_empty() || term.contains("kitty") || program == "ghostty" { +fn from_env(env: &dyn Fn(&str) -> String) -> Protocol { + let (term, program) = (env("TERM"), env("TERM_PROGRAM")); + if !env("KITTY_WINDOW_ID").is_empty() || term.contains("kitty") || program == "ghostty" { Protocol::Kitty - } else if program == "iTerm.app" || program == "WezTerm" || var("LC_TERMINAL").contains("iTerm") + } else if program == "iTerm.app" || program == "WezTerm" || env("LC_TERMINAL").contains("iTerm") { Protocol::Iterm2 } else { - Protocol::Quadrants + Protocol::Glyphs + } +} + +fn forced(v: &str) -> Option { + match v { + "kitty" => Some(Protocol::Kitty), + "sixel" => Some(Protocol::Sixel), + "iterm" | "iterm2" => Some(Protocol::Iterm2), + "blocks" | "glyphs" | "halfblocks" | "quadrants" => Some(Protocol::Glyphs), + _ => None, + } +} + +/// The glyphs to draw with where there is no protocol: the blocks every +/// font has, unless `URNA_GLYPHS` (`sextants`, `octants`) says the font +/// has more. A font cannot be asked, so nothing here guesses. +fn glyph_set(v: &str) -> glyphs::Set { + match v { + "sextants" => glyphs::Set::Sextants, + "octants" => glyphs::Set::Octants, + _ => glyphs::Set::Blocks, } } @@ -181,7 +223,7 @@ pub fn encode(protocol: Protocol, img: &Rgba, cols: u16, rows: u16, id: u32) -> Protocol::Kitty => kitty::encode(img, cols, rows, id), Protocol::Iterm2 => iterm::encode(img, cols, rows), Protocol::Sixel => sixel::encode(img), - Protocol::Quadrants => Vec::new(), + Protocol::Glyphs => Vec::new(), } } @@ -217,10 +259,62 @@ mod tests { } #[test] - fn the_override_wins_and_the_names_match() { - assert_eq!(Protocol::Quadrants.name(), "quadrants"); - assert!(Protocol::Sixel.pixels() && !Protocol::Quadrants.pixels()); + fn the_override_names_match_and_only_kitty_clears() { + assert_eq!(forced("quadrants"), Some(Protocol::Glyphs)); + assert_eq!(forced("kitty"), Some(Protocol::Kitty)); + assert_eq!(forced(""), None); + assert_eq!(glyph_set("octants"), glyphs::Set::Octants); assert!(clear(Protocol::Sixel, 1).is_empty()); assert!(clear(Protocol::Kitty, 1).starts_with(b"\x1b_G")); } + + fn vars(pairs: &[(&str, &str)]) -> impl Fn(&str) -> String { + let pairs: Vec<(String, String)> = pairs + .iter() + .map(|(k, v)| ((*k).to_string(), (*v).to_string())) + .collect(); + move |k: &str| { + pairs + .iter() + .find(|(n, _)| n == k) + .map(|(_, v)| v.clone()) + .unwrap_or_default() + } + } + + #[test] + fn the_answer_picks_the_protocol() { + let none = vars(&[]); + let a = |bytes: &[u8]| probe::parse(bytes); + let kitty = a(b"\x1b_Gi=31;OK\x1b\\\x1b[?62;c"); + assert_eq!(choose(Some(&kitty), &none), Protocol::Kitty); + let wez = a(b"\x1b_Gi=31;OK\x1b\\\x1bP>|WezTerm 20240203\x1b\\\x1b[?65;4c"); + assert_eq!(choose(Some(&wez), &none), Protocol::Iterm2); + let foot = a(b"\x1b[?62;4;22c"); + assert_eq!(choose(Some(&foot), &none), Protocol::Sixel); + let apple = a(b"\x1b[?1;2c"); + assert_eq!(choose(Some(&apple), &none), Protocol::Glyphs); + } + + #[test] + fn inside_tmux_only_the_sixel_tmux_draws() { + let tmux = vars(&[("TMUX", "/tmp/tmux-501/default,1,0")]); + let with = probe::parse(b"\x1bP>|tmux 3.5a\x1b\\\x1b[?65;4c"); + assert_eq!(choose(Some(&with), &tmux), Protocol::Sixel); + // kitty outside tmux answered through it: still not drawn there. + let kitty = probe::parse(b"\x1b_Gi=31;OK\x1b\\\x1b[?62;c"); + assert_eq!(choose(Some(&kitty), &tmux), Protocol::Glyphs); + assert_eq!(choose(None, &tmux), Protocol::Glyphs); + } + + #[test] + fn no_answer_falls_back_to_the_variables() { + let ghostty = vars(&[("TERM_PROGRAM", "ghostty")]); + assert_eq!(choose(None, &ghostty), Protocol::Kitty); + let iterm = vars(&[("LC_TERMINAL", "iTerm2")]); + assert_eq!(choose(None, &iterm), Protocol::Iterm2); + // a reply cut before DA1 is no answer either. + let cut = probe::parse(b"\x1b_Gi=31;OK\x1b\\"); + assert_eq!(choose(Some(&cut), &vars(&[])), Protocol::Glyphs); + } } diff --git a/rust/clitui/src/tui/graphics/probe.rs b/rust/clitui/src/tui/graphics/probe.rs new file mode 100644 index 00000000..85e8bee4 --- /dev/null +++ b/rust/clitui/src/tui/graphics/probe.rs @@ -0,0 +1,304 @@ +//! The terminal asked, once, what it draws. Four queries go out in one +//! write and the replies are read off stdin with `poll` and a deadline, +//! on the calling thread, before the first key is read: +//! +//! - kitty's graphics query (`a=q`): `OK` when the terminal takes kitty +//! images; +//! - XTVERSION (`CSI > q`): the terminal's name, which tells iTerm2 and +//! WezTerm (inline images) and tmux apart; +//! - `CSI 16 t`: the cell size in pixels; +//! - DA1 (`CSI c`), last: every terminal answers it, and in order, so its +//! reply closes the read; attribute 4 is sixel. +//! +//! A terminal that answers nothing costs the deadline and keeps nothing +//! reading stdin after it. The read takes one byte at a time, so a key +//! typed after DA1 stays for the explorer; replies that come after the +//! deadline (a slow link) are taken out of the key stream by `Late`. + +use std::sync::OnceLock; +use std::time::{Duration, Instant}; + +use crossterm::event::{Event, KeyCode, KeyModifiers}; + +/// The longest the replies are waited for; DA1 ends the wait sooner on +/// every terminal that answers. +pub const DEADLINE: Duration = Duration::from_millis(1000); + +/// When `ask` stopped before DA1: the replies may still be on their way. +static GAVE_UP: OnceLock = OnceLock::new(); + +/// How long after the deadline a late reply is still looked for. +const LATE: Duration = Duration::from_secs(10); + +/// A reply arrives in one burst: one still open after this was a key. +const BURST: Duration = Duration::from_millis(100); + +/// What the terminal said; `None` where it said nothing. +#[derive(Clone, Debug, Default, PartialEq, Eq)] +pub struct Answer { + pub kitty: bool, + pub sixel: bool, + /// (width, height) of a cell in pixels. + pub cell: Option<(u16, u16)>, + /// XTVERSION's text, such as `kitty(0.39.1)` or `tmux 3.5a`. + pub name: Option, + /// DA1 came back: the terminal answered, and in full. + pub done: bool, +} + +/// The four queries, in the order the replies close the read. The query, +/// and the parser of its replies, exist where a terminal is asked (unix). +#[cfg(any(unix, test))] +pub fn query() -> Vec { + const KITTY: &[u8] = b"\x1b_Gi=31,s=1,v=1,a=q,t=d,f=24;AAAA\x1b\\"; + const XTVERSION: &[u8] = b"\x1b[>0q"; + const CELL: &[u8] = b"\x1b[16t"; + const DA1: &[u8] = b"\x1b[c"; + [KITTY, XTVERSION, CELL, DA1].concat() +} + +/// The replies in `bytes`; what is not a reply (a key, a mouse report) is +/// skipped. +#[cfg(any(unix, test))] +pub fn parse(bytes: &[u8]) -> Answer { + let mut a = Answer::default(); + let mut i = 0; + while i < bytes.len() { + if bytes[i] != 0x1b { + i += 1; + continue; + } + let rest = &bytes[i..]; + if let Some(body) = rest.strip_prefix(b"\x1b_G") { + // APC: `i=31;OK` or `i=31;ENOTSUPPORTED:...`, up to ST. + let Some(end) = find(body, b"\x1b\\") else { + break; + }; + let reply = &body[..end]; + if reply.starts_with(b"i=31;") && reply.ends_with(b";OK") { + a.kitty = true; + } + i += 3 + end + 2; + } else if let Some(body) = rest.strip_prefix(b"\x1bP>|") { + // DCS: XTVERSION's text, up to ST. + let Some(end) = find(body, b"\x1b\\") else { + break; + }; + a.name = Some(String::from_utf8_lossy(&body[..end]).trim().to_string()); + i += 4 + end + 2; + } else if let Some(body) = rest.strip_prefix(b"\x1b[") { + // CSI: parameters up to the final byte. + let Some(end) = body.iter().position(|b| (0x40..=0x7e).contains(b)) else { + break; + }; + csi(&body[..end], body[end], &mut a); + i += 2 + end + 1; + } else { + i += 1; + } + } + a +} + +#[cfg(any(unix, test))] +fn csi(params: &[u8], fin: u8, a: &mut Answer) { + let text = String::from_utf8_lossy(params); + match fin { + // DA1: `?62;4;22`; the first number is the class, the rest are + // attributes, 4 among them where sixel is drawn. + b'c' if text.starts_with('?') => { + let attrs: Vec<&str> = text[1..].split(';').collect(); + a.sixel = attrs.iter().skip(1).any(|p| *p == "4"); + a.done = true; + } + // `CSI 6 ; height ; width t`: the cell in pixels. + b't' => { + let n: Vec = text.split(';').filter_map(|p| p.parse().ok()).collect(); + if let [6, h, w] = n[..] + && w > 0 + && h > 0 + { + a.cell = Some((w, h)); + } + } + _ => {} + } +} + +#[cfg(any(unix, test))] +fn find(hay: &[u8], needle: &[u8]) -> Option { + hay.windows(needle.len()).position(|w| w == needle) +} + +/// Ask the terminal on stdin/stdout, which must be the raw-mode tty the +/// explorer draws on; `None` when stdin is not a terminal. The read stops +/// at DA1's reply or at `deadline`, whichever comes first. +#[cfg(unix)] +pub fn ask(deadline: Duration) -> Option { + use std::io::{IsTerminal, Write}; + use std::os::fd::AsRawFd; + + let stdin = std::io::stdin(); + if !stdin.is_terminal() { + return None; + } + let mut out = std::io::stdout(); + out.write_all(&query()).ok()?; + out.flush().ok()?; + let fd = stdin.as_raw_fd(); + let until = Instant::now() + deadline; + let mut got = Vec::new(); + // one byte per read: nothing past DA1 leaves the kernel's queue. + let mut byte = 0u8; + loop { + let left = until.saturating_duration_since(Instant::now()); + if left.is_zero() { + break; + } + let mut p = libc::pollfd { + fd, + events: libc::POLLIN, + revents: 0, + }; + let ms = i32::try_from(left.as_millis().max(1)).unwrap_or(i32::MAX); + // SAFETY: one valid pollfd for the length given. + let ready = unsafe { libc::poll(&mut p, 1, ms) }; + if ready < 0 { + if std::io::Error::last_os_error().kind() == std::io::ErrorKind::Interrupted { + continue; + } + break; + } + if ready == 0 { + break; + } + // SAFETY: `byte` is valid for one byte; poll said fd reads. + let n = unsafe { libc::read(fd, (&raw mut byte).cast(), 1) }; + if n <= 0 { + break; + } + got.push(byte); + if byte == b'c' && parse(&got).done { + break; + } + } + let answer = parse(&got); + if !answer.done { + let _ = GAVE_UP.set(Instant::now()); + } + Some(answer) +} + +/// Windows reads the console as input records, not bytes: no query there. +#[cfg(not(unix))] +pub fn ask(_deadline: Duration) -> Option { + None +} + +/// The kitty and XTVERSION replies that arrive after `ask` gave up, as +/// crossterm reads them: `Alt+_` (APC) or `Alt+P` (DCS), the reply's +/// characters as keys, `Alt+\` (ST). DA1 and the cell size are CSI, which +/// crossterm drops itself. +#[derive(Default)] +pub struct Late { + open: Option, +} + +impl Late { + /// `ev` is part of a late reply, not a key. + pub fn swallows(&mut self, ev: &Event, now: Instant) -> bool { + let armed = GAVE_UP + .get() + .is_some_and(|t| now.saturating_duration_since(*t) < LATE); + self.swallows_when(armed, ev, now) + } + + fn swallows_when(&mut self, armed: bool, ev: &Event, now: Instant) -> bool { + let Event::Key(k) = ev else { return false }; + let alt = k.modifiers.contains(KeyModifiers::ALT); + if let Some(t) = self.open { + if now.saturating_duration_since(t) <= BURST { + if alt && k.code == KeyCode::Char('\\') { + self.open = None; + } + return true; + } + self.open = None; + } + if armed && alt && matches!(k.code, KeyCode::Char('_' | 'P')) { + self.open = Some(now); + return true; + } + false + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn kitty_answers_ok_its_name_its_cell_and_da1() { + let a = parse(b"\x1b_Gi=31;OK\x1b\\\x1bP>|kitty(0.39.1)\x1b\\\x1b[6;20;10t\x1b[?62;c"); + assert!(a.kitty && a.done && !a.sixel); + assert_eq!(a.cell, Some((10, 20))); + assert_eq!(a.name.as_deref(), Some("kitty(0.39.1)")); + } + + #[test] + fn a_sixel_terminal_says_4_after_the_class() { + let a = parse(b"\x1bP>|foot(1.18.1)\x1b\\\x1b[6;17;8t\x1b[?62;4;22c"); + assert!(a.sixel && !a.kitty && a.done); + assert_eq!(a.cell, Some((8, 17))); + // `?1;2c` (a VT100) has no attribute 4; the class 4 is not one. + assert!(!parse(b"\x1b[?1;2c").sixel); + assert!(!parse(b"\x1b[?4;6c").sixel); + } + + #[test] + fn a_refused_kitty_query_a_key_and_a_mouse_report_are_not_replies() { + let a = parse(b"x\x1b_Gi=31;ENOTSUPPORTED:no\x1b\\\x1b[<0;3;4M\x1b[?65;1;9c"); + assert!(!a.kitty && !a.sixel && a.done); + assert_eq!(a.cell, None); + } + + #[test] + fn a_reply_cut_short_waits_for_the_rest() { + let whole = b"\x1bP>|WezTerm 20240203\x1b\\\x1b[?65;4c"; + assert!(!parse(&whole[..9]).done); + let a = parse(whole); + assert_eq!(a.name.as_deref(), Some("WezTerm 20240203")); + assert!(a.done && a.sixel); + } + + #[test] + fn a_late_reply_is_not_typed_and_a_key_after_it_is() { + use crossterm::event::KeyEvent; + let key = |c: char, m: KeyModifiers| Event::Key(KeyEvent::new(KeyCode::Char(c), m)); + let t0 = Instant::now(); + let at = |ms: u64| t0 + Duration::from_millis(ms); + let mut late = Late::default(); + // `\x1b_Gi=31;OK\x1b\\` as crossterm reads it. + assert!(late.swallows_when(true, &key('_', KeyModifiers::ALT), at(0))); + for c in "Gi=31;OK".chars() { + assert!(late.swallows_when(true, &key(c, KeyModifiers::NONE), at(1))); + } + assert!(late.swallows_when(true, &key('\\', KeyModifiers::ALT), at(1))); + assert!(!late.swallows_when(true, &key('a', KeyModifiers::NONE), at(2))); + // an Alt+P that no reply follows lets the next key through. + assert!(late.swallows_when( + true, + &key('P', KeyModifiers::ALT | KeyModifiers::SHIFT), + at(10) + )); + assert!(!late.swallows_when(true, &key('b', KeyModifiers::NONE), at(500))); + // disarmed (DA1 came back, or long after): Alt+_ is a key. + assert!(!late.swallows_when(false, &key('_', KeyModifiers::ALT), at(600))); + } + + #[test] + fn the_query_ends_with_da1() { + assert!(query().ends_with(b"\x1b[c")); + assert!(query().starts_with(b"\x1b_G")); + } +} diff --git a/rust/clitui/src/tui/term.rs b/rust/clitui/src/tui/term.rs index b4c69e0d..82b51b9b 100644 --- a/rust/clitui/src/tui/term.rs +++ b/rust/clitui/src/tui/term.rs @@ -3,6 +3,7 @@ //! in the scrollback) and the full screen the explorer takes. both restore //! the terminal on panic before the message prints. +use std::cell::RefCell; use std::io::{self, Write}; use std::time::{Duration, Instant}; @@ -10,6 +11,8 @@ use crossterm::event::{self, DisableMouseCapture, EnableMouseCapture, Event}; use crossterm::execute; use ratatui::{DefaultTerminal, TerminalOptions, Viewport}; +use super::graphics::probe; + /// ~30 fps: smooth for the effects, idle enough for a laptop. pub const FRAME: Duration = Duration::from_millis(33); @@ -48,11 +51,18 @@ pub fn leave_fullscreen() -> io::Result<()> { /// Waits up to one frame for input; `None` means "draw the next frame". pub fn next_event() -> io::Result> { - if event::poll(FRAME)? { - Ok(Some(event::read()?)) - } else { - Ok(None) + thread_local! { + static LATE: RefCell = RefCell::default(); + } + if !event::poll(FRAME)? { + return Ok(None); + } + let ev = event::read()?; + // a terminal reply that came after the probe gave up is not a key. + if LATE.with_borrow_mut(|l| l.swallows(&ev, Instant::now())) { + return Ok(None); } + Ok(Some(ev)) } /// Wall time between frames, for the effects and the spinners. diff --git a/rust/clitui/tests/embedder_resolution.rs b/rust/clitui/tests/embedder_resolution.rs index f4d1eeeb..e4d06230 100644 --- a/rust/clitui/tests/embedder_resolution.rs +++ b/rust/clitui/tests/embedder_resolution.rs @@ -1,7 +1,8 @@ //! `ask`, `retrieve` and `search-text` find their python embedders outside a //! checkout: the payload lays the `urna` package down at -//! `/urna/python/urna/`, `searchtxt.py` and the registry embedder -//! in its `embed/`, and the one resolution ladder +//! `/urna/python/urna/`, the registry embedder (which hands a +//! model no preset names to `searchtxt.py`) in its `embed/`, and the one +//! resolution ladder //! (`embed_gate::installed_script_in`) reaches both there. //! the binary is copied out of `target/` first, because a dev-built binary //! also resolves against its own checkout and would always find the repo's @@ -111,7 +112,7 @@ fn every_query_verb_finds_its_embedder_in_the_data_root() { lay_down(&embed); let embed = embed.join("embed"); let cases = [ - ("search-text", embed.join("searchtxt.py")), + ("search-text", embed.join("presetqry.py")), ("ask", embed.join("presetqry.py")), ("retrieve", embed.join("presetqry.py")), ]; @@ -132,7 +133,7 @@ fn without_a_payload_every_verb_names_the_missing_script() { let dir = scratch("missing"); let bin = detached_binary(&dir); for (verb, script) in [ - ("search-text", tail(&[PKG, "embed", "searchtxt.py"])), + ("search-text", tail(&[PKG, "embed", "presetqry.py"])), ("ask", tail(&[PKG, "embed", "presetqry.py"])), ("retrieve", tail(&[PKG, "embed", "presetqry.py"])), ] { @@ -154,7 +155,7 @@ fn a_checkout_in_the_cwd_wins_over_the_data_root() { for (verb, rel) in [ ( "search-text", - tail(&["checkout", PKG, "embed", "searchtxt.py"]), + tail(&["checkout", PKG, "embed", "presetqry.py"]), ), ("ask", tail(&["checkout", PKG, "embed", "presetqry.py"])), ] { diff --git a/rust/engine/src/labels/mod.rs b/rust/engine/src/labels/mod.rs index f4728819..461f7168 100644 --- a/rust/engine/src/labels/mod.rs +++ b/rust/engine/src/labels/mod.rs @@ -142,24 +142,24 @@ impl Index { out.push(hit); } } - let mut last: Option = None; - for i in self.words.prefix(&q) { - let Some(w) = self.words.payload(i) else { - continue; - }; - let id = w.id as usize; - // a label whose two words both start with q is one hit: the - // word index sorts by word and then by id, so repeats of an id - // are not adjacent; the first word in label order wins below. - if whole.contains(&id) || out.iter().rev().take(64).any(|h| h.id == id) { - continue; - } - if let Some(hit) = self.hit(id, w.at as usize, &q, keep) { + // a label with two words that start with q is one hit, at its first + // such word: the word index sorts by word, so the two can sit any + // distance apart in it; sorted by (id, at), a label's first word + // leads its run. + let mut words: Vec<(usize, u16)> = self + .words + .prefix(&q) + .filter_map(|i| self.words.payload(i)) + .map(|w| (w.id as usize, w.at)) + .filter(|(id, _)| !whole.contains(id)) + .collect(); + words.sort_unstable(); + words.dedup_by_key(|(id, _)| *id); + for (id, at) in words { + if let Some(hit) = self.hit(id, at as usize, &q, keep) { out.push(hit); } - last = Some(id); } - let _ = last; out } @@ -339,6 +339,26 @@ mod tests { assert!(whole > word, "{whole:?} {word:?}"); } + #[test] + fn a_label_two_words_match_is_one_hit_however_far_apart_they_index() { + // `shock` and `sword of shock` sort with a hundred `sl…` words + // between them in the word index. + let names: Vec = (0..100) + .map(|i| format!("filler sl{i:03}")) + .chain(["x sword of shock".to_string()]) + .collect(); + let refs: Vec<&str> = names.iter().map(String::as_str).collect(); + let idx = index(&refs); + let hits = idx.exact("s", &|_| true); + assert_eq!(hits.len(), 101); + let sword: Vec<&Hit> = hits.iter().filter(|h| h.ordinal == 100).collect(); + assert_eq!(sword.len(), 1); + let first = Index::from_sorted([("x sword", 0)]) + .expect("one label") + .exact("s", &|_| true); + assert_eq!(sword[0].score, first[0].score, "the first word wins"); + } + #[test] fn fuzzy_scans_for_subsequences_and_matches_merges_the_two() { let idx = index(&[ diff --git a/rust/engine/src/scalars/filter.rs b/rust/engine/src/scalars/filter.rs index a1555315..7cd8eb23 100644 --- a/rust/engine/src/scalars/filter.rs +++ b/rust/engine/src/scalars/filter.rs @@ -22,7 +22,8 @@ pub enum Predicate { column: String, value: String, }, - /// a list column holds `value`. + /// a list column holds `value`; a value that is not an entry but whose + /// every letter is one holds each of its letters (`rg`). Has { column: String, value: String, @@ -142,6 +143,10 @@ fn eval(p: &Predicate, table: &ScalarTable, n: usize) -> Result Result Bitset::from_fn(n, |i| c.data.codes_at(i).contains(&code)), - None => Bitset::empty(n), + Some(code) => held(code), + // `rg` where the dictionary holds `R` and `G` as entries + // (colors, beside a `none` or a hybrid) holds every letter; + // a letter that is not an entry keeps none, and so does no + // letter at all. + None => { + let letters: Option> = value + .chars() + .map(|ch| code_of(dict, ch.encode_utf8(&mut [0; 4]))) + .collect(); + match letters { + Some(codes) if !codes.is_empty() => { + let mut b = Bitset::full(n); + for code in codes { + b.and(&held(code)); + } + b + } + _ => Bitset::empty(n), + } + } } } Predicate::Range { @@ -249,8 +274,8 @@ mod tests { values: vec!["G".into(), "R".into()], numeric: None, }, - offsets: vec![0, 1, 2, 3, 3], - codes: vec![0, 1, 0], + offsets: vec![0, 1, 2, 4, 4], + codes: vec![0, 1, 0, 1], }, }, Column { @@ -291,6 +316,19 @@ mod tests { ones(Filter::default().and(Predicate::Not(Box::new(green)))), vec![1, 3] ); + let has = |v: &str| Predicate::Has { + column: "colors".into(), + value: v.into(), + }; + assert_eq!(ones(Filter::default().and(has("rg"))), vec![2]); + assert_eq!(ones(Filter::default().and(has("g"))), vec![0, 2]); + assert_eq!(ones(Filter::default().and(has("gx"))), Vec::::new()); + assert_eq!(ones(Filter::default().and(has(""))), Vec::::new()); + let empty = Predicate::Contains { + column: "type_line".into(), + value: String::new(), + }; + assert!(Filter::default().and(empty).bitset(&table(), 4).is_err()); let cmc1 = Predicate::Eq { column: "cmc".into(), value: "1".into(), @@ -304,6 +342,34 @@ mod tests { assert_eq!(ones(Filter::default()), vec![0, 1, 2, 3]); } + #[test] + fn letters_split_on_a_dictionary_that_also_holds_words() { + let mut t = table(); + t.columns[2].data = ColumnData::EnumList { + dict: Dictionary { + values: vec!["G".into(), "R".into(), "none".into(), "W/U".into()], + numeric: None, + }, + offsets: vec![0, 1, 2, 4, 5], + codes: vec![0, 1, 0, 1, 2], + }; + let has = |v: &str| { + Filter::default() + .and(Predicate::Has { + column: "colors".into(), + value: v.into(), + }) + .bitset(&t, 4) + .expect("filter") + .ones() + .collect::>() + }; + assert_eq!(has("rg"), vec![2]); + assert_eq!(has("none"), vec![3]); + assert_eq!(has("w/u"), Vec::::new()); + assert_eq!(has("rx"), Vec::::new()); + } + #[test] fn a_missing_column_or_a_wrong_kind_is_an_error() { let missing = Filter::default().and(Predicate::Eq { diff --git a/rust/engine/src/scalars/query.rs b/rust/engine/src/scalars/query.rs index 53b2f0a5..c25af3f7 100644 --- a/rust/engine/src/scalars/query.rs +++ b/rust/engine/src/scalars/query.rs @@ -34,22 +34,40 @@ pub fn parse(line: &str, schema: &[SchemaField]) -> Result (false, raw.as_str()), }; let Some((prefix, op, value)) = split_term(term) else { - free.push(unquote(term)); + if negate && term.starts_with(|c: char| c.is_alphabetic() || c == '"') { + return Err(cannot_exclude(&raw)); + } + // `-1/-1` is text, not a negation. + free.push(unquote(&raw)); continue; }; - if prefix.eq_ignore_ascii_case("o") { - free.push(unquote(value)); + let oracle = prefix.eq_ignore_ascii_case("o"); + let field = schema.iter().find(|f| { + f.prefix + .as_deref() + .is_some_and(|p| p.eq_ignore_ascii_case(prefix)) + }); + // `note:` is a word ending in a colon, not a column. + if value.is_empty() && !oracle && field.is_none() { + if negate { + return Err(cannot_exclude(&raw)); + } + free.push(raw.clone()); continue; } - let field = schema - .iter() - .find(|f| { - f.prefix - .as_deref() - .is_some_and(|p| p.eq_ignore_ascii_case(prefix)) - }) - .ok_or_else(|| RuntimeError::Filter(format!("unknown search prefix {prefix:?}")))?; let value = unquote(value); + if value.is_empty() { + return Err(RuntimeError::Filter(format!("{raw}: the value is empty"))); + } + if oracle { + if negate { + return Err(cannot_exclude(&raw)); + } + free.push(value); + continue; + } + let field = field + .ok_or_else(|| RuntimeError::Filter(format!("unknown search prefix {prefix:?}")))?; let p = predicate(field, op, &value)?; out.filter.predicates.push(if negate { Predicate::Not(Box::new(p)) @@ -65,7 +83,7 @@ pub fn parse(line: &str, schema: &[SchemaField]) -> Result Result { let column = field.name.clone(); let numeric = matches!(field.kind.as_str(), "int" | "real") - || (field.kind == "enum" && op != ":" && op != "="); + || (field.kind == "enum" && matches!(op, ">=" | ">" | "<=" | "<")); if op != ":" && op != "=" && op != "!=" && !numeric { return Err(RuntimeError::Filter(format!( "{} takes `:` or `=`, not {op}", @@ -81,8 +99,14 @@ fn predicate(field: &SchemaField, op: &str, value: &str) -> Result Predicate::Contains { column, value: value.into(), @@ -144,51 +168,31 @@ fn predicate(field: &SchemaField, op: &str, value: &str) -> Result Predicate { - let letters: Vec = value - .chars() - .map(|c| c.to_ascii_uppercase().to_string()) - .collect(); - if letters.len() > 1 && value.chars().all(|c| c.is_ascii_alphabetic()) && value.len() <= 5 { - let mut it = letters.into_iter().map(|v| Predicate::Has { - column: column.clone(), - value: v, - }); - // fold into nested `and` through Not(Not(..))-free chaining: the - // Filter is an `and` already, so return a Has per letter via a - // synthetic all-of predicate. - let first = it.next().unwrap_or(Predicate::Present { - column: column.clone(), - }); - it.fold(first, |acc, p| Predicate::All(vec![acc, p])) - } else { - Predicate::Has { - column, - value: value.into(), - } - } +/// the search runs over the stored chunks and the scalar columns; there +/// is no text column to exclude a free word or an `o:` phrase from. +fn cannot_exclude(raw: &str) -> RuntimeError { + RuntimeError::Filter(format!( + "{raw}: `-` excludes on a prefixed column, not on free text or o:" + )) } -/// `prefix`, operator and value of a term, when it has an operator. +/// `prefix`, operator and value of a term, split at its first operator +/// (`>=` before `>` at the same place), so a value may hold operators. The +/// value may be empty: `parse` tells a bare prefix from a word. fn split_term(term: &str) -> Option<(&str, &str, &str)> { - for op in [">=", "<=", "!=", ":", "=", ">", "<"] { - if let Some(i) = term.find(op) { - let (prefix, rest) = term.split_at(i); - let value = &rest[op.len()..]; - if !prefix.is_empty() - && prefix - .chars() - .all(|c| c.is_ascii_alphanumeric() || c == '_') - && !value.is_empty() - { - return Some((prefix, op, value)); - } - return None; - } - } - None + let (i, op) = term.char_indices().find_map(|(i, _)| { + [">=", "<=", "!=", ":", "=", ">", "<"] + .into_iter() + .find(|op| term[i..].starts_with(op)) + .map(|op| (i, op)) + })?; + let (prefix, rest) = term.split_at(i); + let value = &rest[op.len()..]; + let valid = !prefix.is_empty() + && prefix + .chars() + .all(|c| c.is_ascii_alphanumeric() || c == '_'); + valid.then_some((prefix, op, value)) } fn unquote(s: &str) -> String { @@ -241,6 +245,7 @@ mod tests { f("cmc", "real", "cmc"), f("rarity", "enum", "r"), f("legal", "enum_map", "f"), + f("keywords", "enum_list", "kw"), ] } @@ -260,7 +265,13 @@ mod tests { value: "creature".into() } ); - assert!(matches!(&q.filter.predicates[1], Predicate::All(v) if v.len() == 2)); + assert_eq!( + q.filter.predicates[1], + Predicate::Has { + column: "colors".into(), + value: "rg".into() + } + ); assert_eq!( q.filter.predicates[2], Predicate::Range { @@ -292,4 +303,62 @@ mod tests { "lightning bolt" ); } + + #[test] + fn a_list_word_stays_whole_and_not_equal_on_an_enum_is_not_a_range() { + let one = |line: &str| parse(line, &schema()).expect("parses").filter.predicates[0].clone(); + assert_eq!( + one("kw:haste"), + Predicate::Has { + column: "keywords".into(), + value: "haste".into() + } + ); + let not_eq = |column: &str, value: &str| { + Predicate::Not(Box::new(Predicate::Eq { + column: column.into(), + value: value.into(), + })) + }; + assert_eq!(one("r!=common"), not_eq("rarity", "common")); + assert_eq!(one("pow!=*"), not_eq("power", "*")); + } + + #[test] + fn a_negation_without_a_column_is_an_error_not_a_dropped_sign() { + assert!(parse("t:creature -o:flying", &schema()).is_err()); + assert!(parse("-bolt", &schema()).is_err()); + assert!(parse(r#"-"lightning bolt""#, &schema()).is_err()); + assert_eq!( + parse("-1/-1 counter", &schema()).expect("text").text, + "-1/-1 counter" + ); + } + + #[test] + fn an_empty_quoted_value_is_an_error_not_every_row() { + for line in [r#"c:"""#, r#"t:"""#, r#"-c:"""#, r#"cmc>="""#] { + let e = parse(line, &schema()).expect_err(line); + assert!(e.to_string().contains("the value is empty"), "{line}: {e}"); + } + } + + #[test] + fn a_bare_prefix_is_an_empty_value_and_any_other_word_stays_text() { + for line in ["t:", "-t:", "cmc>=", "o:", "T:"] { + let e = parse(line, &schema()).expect_err(line); + assert!(e.to_string().contains("the value is empty"), "{line}: {e}"); + } + assert_eq!( + parse("note: bolt", &schema()).expect("text").text, + "note: bolt" + ); + } + + #[test] + fn the_first_operator_splits_the_term() { + let q = parse(r#"o:"x >= 3" cmc>=2"#, &schema()).expect("parses"); + assert_eq!(q.text, "x >= 3"); + assert_eq!(q.filter.predicates.len(), 1); + } } diff --git a/rust/format/src/sections/scalars/decode.rs b/rust/format/src/sections/scalars/decode.rs index cd1aae19..25326695 100644 --- a/rust/format/src/sections/scalars/decode.rs +++ b/rust/format/src/sections/scalars/decode.rs @@ -56,7 +56,8 @@ pub fn decode_chunk_scalars(bytes: &[u8], n_rows: usize) -> Result UrnaError { } } -fn decode_body(kind: ColumnKind, body: &[u8], n: usize) -> Result { +fn decode_body( + kind: ColumnKind, + body: &[u8], + n: usize, + validity: Option<&[bool]>, +) -> Result { let mut cur = Cursor::new(body); let data = match kind { ColumnKind::Int => { @@ -132,7 +138,7 @@ fn decode_body(kind: ColumnKind, body: &[u8], n: usize) -> Result { let dict = cur.dictionary()?; - let codes = cur.codes(n, &dict)?; + let codes = cur.codes(n, &dict, validity)?; ColumnData::Enum { dict, codes } } ColumnKind::EnumList => { @@ -145,7 +151,7 @@ fn decode_body(kind: ColumnKind, body: &[u8], n: usize) -> Result u32::MAX as u64 { return Err(malformed("enum_list offsets overflow")); } - let codes = cur.codes(total as usize, &dict)?; + let codes = cur.codes(total as usize, &dict, None)?; ColumnData::EnumList { dict, offsets: offsets.into_iter().map(|o| o as u32).collect(), @@ -242,16 +248,18 @@ impl<'a> Cursor<'a> { }; Ok(Dictionary { values, numeric }) } - fn codes(&mut self, want: usize, dict: &Dictionary) -> Result, UrnaError> { - let n = dict.values.len() as u64; + fn codes( + &mut self, + want: usize, + dict: &Dictionary, + validity: Option<&[bool]>, + ) -> Result, UrnaError> { let packed = self.packed(want)?; - let mut codes = Vec::with_capacity(want); - for c in packed { - if c >= n { - return Err(malformed(format!("code {c} outside a dictionary of {n}"))); - } - codes.push(c as u32); + if packed.iter().any(|&c| c > u64::from(u32::MAX)) { + return Err(malformed("an enum code exceeds u32")); } + let codes: Vec = packed.into_iter().map(|c| c as u32).collect(); + super::check_codes(dict, &codes, validity)?; Ok(codes) } } diff --git a/rust/format/src/sections/scalars/from_json.rs b/rust/format/src/sections/scalars/from_json.rs index 0581edb3..7a4d2915 100644 --- a/rust/format/src/sections/scalars/from_json.rs +++ b/rust/format/src/sections/scalars/from_json.rs @@ -432,4 +432,17 @@ mod tests { let bad: Vec = serde_json::from_str(r#"[{"cmc":"two"}]"#).expect("rows"); assert!(build(&specs[4..5], &bad).is_err()); } + + #[test] + fn an_enum_with_no_value_in_any_row_round_trips() { + let specs: Vec = + serde_json::from_str(r#"[{"name":"loyalty","kind":"enum","numeric":true}]"#) + .expect("specs"); + let rows: Vec = serde_json::from_str(r#"[{"loyalty":null},{}]"#).expect("rows"); + let (table, _) = build(&specs, &rows).expect("builds"); + let bytes = crate::sections::encode_chunk_scalars(&table).expect("encodes"); + let back = crate::sections::decode_chunk_scalars(&bytes, 2).expect("decodes"); + assert_eq!(back, table); + assert!(!back.columns[0].present(0) && !back.columns[0].present(1)); + } } diff --git a/rust/format/src/sections/scalars/mod.rs b/rust/format/src/sections/scalars/mod.rs index b65e54f2..dd311d6c 100644 --- a/rust/format/src/sections/scalars/mod.rs +++ b/rust/format/src/sections/scalars/mod.rs @@ -18,7 +18,8 @@ //! bool bitset, ceil(n_rows/8) bytes //! text intpack offsets (n_rows + 1) · utf-8 bytes //! uuid 16 bytes per row (absent rows zero) -//! enum dictionary · intpack codes, one per row (absent rows 0) +//! enum dictionary · intpack codes, one per row (absent rows 0, +//! so a column with no value has an empty dictionary) //! enum_list dictionary · intpack offsets (n_rows + 1) · intpack codes //! dictionary: u32 n · (u32 len · utf-8) × n · u8 has_numeric · //! [f64 × n, NaN = no value] @@ -294,14 +295,18 @@ pub fn encode_chunk_scalars(table: &ScalarTable) -> Result, UrnaError> { } None => out.push(0), } - let body = encode_body(&c.data, n)?; + let body = encode_body(&c.data, n, c.validity.as_deref())?; out.extend_from_slice(&(body.len() as u32).to_le_bytes()); out.extend_from_slice(&body); } Ok(out) } -fn encode_body(data: &ColumnData, n: usize) -> Result, UrnaError> { +fn encode_body( + data: &ColumnData, + n: usize, + validity: Option<&[bool]>, +) -> Result, UrnaError> { let mut body = Vec::new(); match data { ColumnData::Int(v) => { @@ -333,7 +338,7 @@ fn encode_body(data: &ColumnData, n: usize) -> Result, UrnaError> { } } ColumnData::Enum { dict, codes } => { - check_codes(dict, codes)?; + check_codes(dict, codes, validity)?; push_dictionary(&mut body, dict)?; let packed: Vec = codes.iter().map(|&c| c as u64).collect(); push_packed(&mut body, &packed); @@ -343,7 +348,7 @@ fn encode_body(data: &ColumnData, n: usize) -> Result, UrnaError> { offsets, codes, } => { - check_codes(dict, codes)?; + check_codes(dict, codes, None)?; if offsets.len() != n + 1 || offsets.windows(2).any(|w| w[0] > w[1]) || offsets.last().is_some_and(|&l| l as usize != codes.len()) @@ -362,10 +367,19 @@ fn encode_body(data: &ColumnData, n: usize) -> Result, UrnaError> { Ok(body) } -fn check_codes(dict: &Dictionary, codes: &[u32]) -> Result<(), UrnaError> { +/// a present row's code indexes the dictionary; an absent row's is 0, the +/// only code a column with no value at all (an empty dictionary) carries. +pub(super) fn check_codes( + dict: &Dictionary, + codes: &[u32], + validity: Option<&[bool]>, +) -> Result<(), UrnaError> { let n = dict.values.len() as u32; - if codes.iter().any(|&c| c >= n) { - return Err(malformed("an enum code is outside its dictionary")); + let present = |i: usize| validity.is_none_or(|v| v[i]); + for (i, &c) in codes.iter().enumerate() { + if if present(i) { c >= n } else { c != 0 } { + return Err(malformed(format!("code {c} outside a dictionary of {n}"))); + } } Ok(()) } diff --git a/rust/images/parity/Cargo.lock b/rust/images/parity/Cargo.lock index f5cf76a7..8742947e 100644 --- a/rust/images/parity/Cargo.lock +++ b/rust/images/parity/Cargo.lock @@ -674,7 +674,7 @@ checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" [[package]] name = "urna-av1dec" -version = "0.1.0" +version = "0.5.6" dependencies = [ "assert_matches", "atomig", @@ -720,7 +720,7 @@ dependencies = [ [[package]] name = "urna-images" -version = "0.1.0" +version = "0.5.6" dependencies = [ "thiserror", "urna-av1dec", diff --git a/tool/tasks/fullcheck.sh b/tool/tasks/fullcheck.sh index a3b70187..204e91ce 100755 --- a/tool/tasks/fullcheck.sh +++ b/tool/tasks/fullcheck.sh @@ -30,6 +30,8 @@ # the hugging face cache; tool/tasks/benchdata.py fetches it, only with # URNA_ALLOW_DOWNLOAD=1, and checks its sha-256) # URNA_FRESH - 1 runs every step, ignoring what passed before (default: 0) +# URNA_CARDS_CORPUS - the cards corpus the tokenizer and av1 parity compare on +# (default: unset, the parity step is reported skipped) # # Before any step: exit 3 when the default corpus is not cached and downloads # were not confirmed (6 when the cached file is not the pinned one), exit 9 @@ -38,6 +40,12 @@ set -euo pipefail +# a corpus named relative to where the script was called from, resolved +# before the cd below; cargo test runs each crate from its own directory too. +abspath() { if [[ -z "$1" || "$1" == /* ]]; then printf '%s' "$1"; else printf '%s/%s' "$PWD" "$1"; fi; } +[[ -n "${URNA_CORPUS:-}" ]] && URNA_CORPUS="$(abspath "$URNA_CORPUS")" +[[ -n "${URNA_CARDS_CORPUS:-}" ]] && URNA_CARDS_CORPUS="$(abspath "$URNA_CARDS_CORPUS")" && export URNA_CARDS_CORPUS + cd "$(dirname "$0")/../.." ROOT="$(pwd)" @@ -89,7 +97,7 @@ TOOLCHAIN="$(rustc -vV; cargo -V; "$PY" -VV; uname -sm "$PY" -c 'import importlib.metadata as m print("\n".join(sorted(d.metadata["Name"] + "==" + d.version for d in m.distributions())))' printf 'queries=%s k=%s corpus=%s\n' "$QUERIES" "$K" "$CORPUS" - env | grep '^URNA_' | grep -v -e '^URNA_OUT=' -e '^URNA_FRESH=' -e '^URNA_CLEANHOST=' | sort || true)" + env | grep '^URNA_' | grep -v -e '^URNA_OUT=' -e '^URNA_FRESH=' -e '^URNA_CLEANHOST=' -e '^URNA_CARDS_CORPUS=' | sort || true)" STAMPS="$ROOT/target/fullcheck" mkdir -p "$STAMPS" @@ -170,13 +178,36 @@ cached bridge-so "$RUST_IN" --output rust/bridge/python/urna/_urna.so -- bridge_ # ---- cargo test (release) ---- cargo_test() { step "cargo test --release --workspace" - cargo test --release --workspace 2>&1 \ + URNA_REQUIRE_PARITY=1 cargo test --release --workspace 2>&1 \ | grep -E "^(test result|running [0-9]+ tests)" \ | awk '/^test result/ { passed += $4; failed += $6; ignored += $8 } END { printf " passed=%d failed=%d ignored=%d\n", passed, failed, ignored; if (failed > 0) exit 1 }' ok "all tests" } cached cargo-test "$ALL_IN" -- cargo_test +# ---- parity of the in-tree tokenizer and av1 decoder ---- +# rust/neural/parity and rust/images/parity are workspaces of their own (the +# reference crates stay out of urna's lock and cargo-deny), so the workspace +# test above never runs them. their corpus pass reads the cards corpus named +# by URNA_CARDS_CORPUS; without it the step says so and is not marked passed. +parity() { + step "cargo test --release in rust/neural/parity and rust/images/parity" + URNA_PARITY_LIMIT="${URNA_PARITY_LIMIT:-2000}" cargo test --release \ + --manifest-path rust/neural/parity/Cargo.toml 2>&1 \ + | grep -E "^test result|panicked|FAILED" + URNA_PARITY_LIMIT="${URNA_PARITY_LIMIT:-2000}" cargo test --release \ + --manifest-path rust/images/parity/Cargo.toml 2>&1 \ + | grep -E "^test result|panicked|FAILED" + ok "tokenizer and av1 parity on $URNA_CARDS_CORPUS" +} +if [[ -n "${URNA_CARDS_CORPUS:-}" ]]; then + cached parity "rust/neural rust/images rust/av1dec rust/engine rust/format" \ + --file "$URNA_CARDS_CORPUS" -- parity +else + step "parity" + printf '\033[1;33m SKIP:\033[0m URNA_CARDS_CORPUS unset: no cards corpus to compare on\n' >&2 +fi + # ---- cargo clippy ---- cargo_clippy() { step "cargo clippy --workspace --all-targets -- -D warnings"