scitex 2.13.0__py3-none-any.whl → 2.15.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scitex/__init__.py +80 -2
- scitex/__version__.py +11 -8
- scitex/_env_loader.py +156 -0
- scitex/_mcp_resources/__init__.py +37 -0
- scitex/_mcp_resources/_cheatsheet.py +135 -0
- scitex/_mcp_resources/_figrecipe.py +138 -0
- scitex/_mcp_resources/_formats.py +102 -0
- scitex/_mcp_resources/_modules.py +337 -0
- scitex/_mcp_resources/_session.py +149 -0
- scitex/_mcp_tools/__init__.py +40 -0
- scitex/_mcp_tools/audio.py +200 -0
- scitex/_mcp_tools/canvas.py +128 -0
- scitex/_mcp_tools/capture.py +174 -0
- scitex/_mcp_tools/diagram.py +22 -0
- scitex/_mcp_tools/introspect.py +191 -0
- scitex/_mcp_tools/plt.py +305 -0
- scitex/_mcp_tools/scholar.py +447 -0
- scitex/_mcp_tools/social.py +244 -0
- scitex/_mcp_tools/stats.py +206 -0
- scitex/_mcp_tools/template.py +66 -0
- scitex/_mcp_tools/ui.py +80 -0
- scitex/_mcp_tools/writer.py +37 -0
- scitex/ai/_gen_ai/_PARAMS.py +10 -7
- scitex/ai/classification/reporters/_ClassificationReporter.py +0 -0
- scitex/ai/classification/reporters/_SingleClassificationReporter.py +45 -1603
- scitex/ai/classification/reporters/_mixins/__init__.py +36 -0
- scitex/ai/classification/reporters/_mixins/_constants.py +67 -0
- scitex/ai/classification/reporters/_mixins/_cv_summary.py +387 -0
- scitex/ai/classification/reporters/_mixins/_feature_importance.py +119 -0
- scitex/ai/classification/reporters/_mixins/_metrics.py +275 -0
- scitex/ai/classification/reporters/_mixins/_plotting.py +179 -0
- scitex/ai/classification/reporters/_mixins/_reports.py +153 -0
- scitex/ai/classification/reporters/_mixins/_storage.py +160 -0
- scitex/ai/classification/timeseries/_TimeSeriesBlockingSplit.py +0 -0
- scitex/ai/classification/timeseries/_TimeSeriesCalendarSplit.py +0 -0
- scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit.py +0 -0
- scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit_v01-not-using-n_splits.py +0 -0
- scitex/ai/classification/timeseries/_TimeSeriesStratifiedSplit.py +0 -0
- scitex/ai/classification/timeseries/_normalize_timestamp.py +0 -0
- scitex/ai/metrics/_calc_seizure_prediction_metrics.py +0 -0
- scitex/ai/plt/_plot_feature_importance.py +0 -0
- scitex/ai/plt/_plot_learning_curve.py +0 -0
- scitex/ai/plt/_plot_optuna_study.py +0 -0
- scitex/ai/plt/_plot_pre_rec_curve.py +0 -0
- scitex/ai/plt/_plot_roc_curve.py +0 -0
- scitex/ai/plt/_stx_conf_mat.py +0 -0
- scitex/ai/training/_LearningCurveLogger.py +0 -0
- scitex/audio/README.md +88 -7
- scitex/audio/__init__.py +127 -60
- scitex/audio/__main__.py +17 -21
- scitex/audio/_branding.py +185 -0
- scitex/audio/_mcp/__init__.py +36 -0
- scitex/audio/_mcp/handlers.py +419 -0
- scitex/audio/_mcp/speak_handlers.py +238 -0
- scitex/audio/_mcp/tool_schemas.py +203 -0
- scitex/audio/_relay.py +225 -0
- scitex/audio/engines/elevenlabs_engine.py +6 -1
- scitex/audio/mcp_server.py +355 -337
- scitex/bridge/_figrecipe.py +40 -8
- scitex/bridge/_stats_plt.py +2 -4
- scitex/bridge/_stats_vis.py +7 -5
- scitex/browser/automation/CookieHandler.py +0 -0
- scitex/browser/collaboration/__init__.py +0 -1
- scitex/browser/core/BrowserMixin.py +0 -0
- scitex/browser/core/ChromeProfileManager.py +10 -3
- scitex/browser/debugging/_browser_logger.py +6 -9
- scitex/browser/debugging/_highlight_element.py +0 -0
- scitex/browser/debugging/_show_grid.py +0 -0
- scitex/browser/interaction/click_center.py +0 -0
- scitex/browser/interaction/click_with_fallbacks.py +0 -0
- scitex/browser/interaction/close_popups.py +0 -0
- scitex/browser/interaction/fill_with_fallbacks.py +0 -0
- scitex/browser/pdf/click_download_for_chrome_pdf_viewer.py +0 -0
- scitex/browser/pdf/detect_chrome_pdf_viewer.py +0 -0
- scitex/browser/stealth/HumanBehavior.py +0 -0
- scitex/browser/stealth/StealthManager.py +0 -0
- scitex/canvas/README.md +1 -1
- scitex/canvas/_mcp/__init__.py +4 -0
- scitex/canvas/_mcp/handlers.py +372 -0
- scitex/canvas/_mcp/tool_schemas.py +219 -0
- scitex/canvas/editor/_dearpygui/__init__.py +25 -0
- scitex/canvas/editor/_dearpygui/_editor.py +147 -0
- scitex/canvas/editor/_dearpygui/_handlers.py +476 -0
- scitex/canvas/editor/_dearpygui/_panels/__init__.py +17 -0
- scitex/canvas/editor/_dearpygui/_panels/_control.py +119 -0
- scitex/canvas/editor/_dearpygui/_panels/_element_controls.py +190 -0
- scitex/canvas/editor/_dearpygui/_panels/_preview.py +43 -0
- scitex/canvas/editor/_dearpygui/_panels/_sections.py +390 -0
- scitex/canvas/editor/_dearpygui/_plotting.py +187 -0
- scitex/canvas/editor/_dearpygui/_rendering.py +504 -0
- scitex/canvas/editor/_dearpygui/_selection.py +295 -0
- scitex/canvas/editor/_dearpygui/_state.py +93 -0
- scitex/canvas/editor/_dearpygui/_utils.py +61 -0
- scitex/canvas/editor/flask_editor/templates/__init__.py +32 -70
- scitex/canvas/mcp_server.py +2 -2
- scitex/capture/__init__.py +0 -1
- scitex/capture/_mcp/__init__.py +11 -0
- scitex/capture/_mcp/handlers.py +438 -0
- scitex/capture/_mcp/tool_schemas.py +270 -0
- scitex/cli/__init__.py +44 -2
- scitex/cli/audio.py +150 -3
- scitex/cli/browser.py +310 -0
- scitex/cli/capture.py +14 -3
- scitex/cli/introspect.py +443 -0
- scitex/cli/main.py +230 -103
- scitex/cli/mcp.py +362 -0
- scitex/cli/repro.py +18 -0
- scitex/cli/resource.py +18 -0
- scitex/cli/scholar/__init__.py +97 -0
- scitex/cli/scholar/_crossref_scitex.py +296 -0
- scitex/cli/scholar/_fetch.py +369 -0
- scitex/cli/scholar/_jobs.py +306 -0
- scitex/cli/scholar/_library.py +152 -0
- scitex/cli/scholar/_utils.py +35 -0
- scitex/cli/social.py +314 -0
- scitex/cli/stats.py +18 -0
- scitex/cli/template.py +18 -0
- scitex/cli/tex.py +18 -0
- scitex/cli/writer.py +190 -20
- scitex/compat/__init__.py +74 -0
- scitex/config/README.md +1 -1
- scitex/config/__init__.py +16 -2
- scitex/config/_env_registry.py +191 -0
- scitex/config/default.yaml +31 -0
- scitex/cv/__init__.py +87 -0
- scitex/cv/_draw.py +236 -0
- scitex/cv/_filters.py +217 -0
- scitex/cv/_io.py +157 -0
- scitex/cv/_transform.py +184 -0
- scitex/dev/__init__.py +2 -0
- scitex/dev/cv/__init__.py +60 -0
- scitex/dev/cv/_compose.py +330 -0
- scitex/dev/cv/_title_card.py +351 -0
- scitex/dev/plt/__init__.py +0 -0
- scitex/dev/plt/demo_plotters/__init__.py +0 -0
- scitex/dev/plt/mpl/get_dir_ax.py +0 -0
- scitex/dev/plt/mpl/get_signatures.py +0 -0
- scitex/dev/plt/mpl/get_signatures_details.py +0 -0
- scitex/diagram/__init__.py +42 -19
- scitex/diagram/mcp_server.py +13 -125
- scitex/dt/_normalize_timestamp.py +0 -0
- scitex/gen/__init__.py +0 -0
- scitex/gen/misc.py +0 -0
- scitex/git/_init.py +2 -2
- scitex/git/_session.py +0 -0
- scitex/introspect/__init__.py +75 -0
- scitex/introspect/_call_graph.py +303 -0
- scitex/introspect/_class_hierarchy.py +163 -0
- scitex/introspect/_core.py +42 -0
- scitex/introspect/_docstring.py +131 -0
- scitex/introspect/_examples.py +113 -0
- scitex/introspect/_imports.py +271 -0
- scitex/introspect/_mcp/__init__.py +37 -0
- scitex/introspect/_mcp/handlers.py +208 -0
- scitex/introspect/_members.py +151 -0
- scitex/introspect/_resolve.py +89 -0
- scitex/introspect/_signature.py +131 -0
- scitex/introspect/_source.py +80 -0
- scitex/introspect/_type_hints.py +172 -0
- scitex/io/bundle/README.md +1 -1
- scitex/io/bundle/kinds/__init__.py +0 -0
- scitex/io/bundle/kinds/_figure/__init__.py +0 -0
- scitex/io/bundle/kinds/_plot/__init__.py +0 -0
- scitex/io/bundle/kinds/_shape/__init__.py +0 -0
- scitex/io/bundle/kinds/_text/__init__.py +0 -0
- scitex/logging/_context.py +5 -4
- scitex/mcp_server.py +170 -145
- scitex/plt/__init__.py +249 -548
- scitex/plt/_figrecipe_integration.py +121 -0
- scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin/_wrappers.py +5 -10
- scitex/plt/_subplots/_FigWrapper.py +139 -88
- scitex/plt/_subplots/_export_as_csv_formatters/_format_pcolormesh.py +0 -0
- scitex/plt/_subplots/_export_as_csv_formatters/_format_stackplot.py +0 -0
- scitex/plt/docs/EXTERNAL_PACKAGE_BRANDING.md +149 -0
- scitex/plt/gallery/README.md +1 -1
- scitex/plt/styles/_plot_postprocess.py +35 -117
- scitex/plt/styles/_postprocess_helpers.py +158 -0
- scitex/plt/utils/_hitmap/__init__.py +82 -0
- scitex/plt/utils/_hitmap/_artist_extraction.py +343 -0
- scitex/plt/utils/_hitmap/_color_application.py +346 -0
- scitex/plt/utils/_hitmap/_color_conversion.py +121 -0
- scitex/plt/utils/_hitmap/_constants.py +40 -0
- scitex/plt/utils/_hitmap/_hitmap_core.py +334 -0
- scitex/plt/utils/_hitmap/_path_extraction.py +357 -0
- scitex/plt/utils/_hitmap/_query.py +113 -0
- scitex/plt/utils/_hitmap.py +46 -1616
- scitex/plt/utils/_metadata/__init__.py +80 -0
- scitex/plt/utils/_metadata/_artists/__init__.py +25 -0
- scitex/plt/utils/_metadata/_artists/_base.py +195 -0
- scitex/plt/utils/_metadata/_artists/_collections.py +356 -0
- scitex/plt/utils/_metadata/_artists/_extract.py +57 -0
- scitex/plt/utils/_metadata/_artists/_images.py +80 -0
- scitex/plt/utils/_metadata/_artists/_lines.py +261 -0
- scitex/plt/utils/_metadata/_artists/_patches.py +247 -0
- scitex/plt/utils/_metadata/_artists/_text.py +106 -0
- scitex/plt/utils/_metadata/_csv.py +416 -0
- scitex/plt/utils/_metadata/_detect.py +225 -0
- scitex/plt/utils/_metadata/_legend.py +127 -0
- scitex/plt/utils/_metadata/_rounding.py +117 -0
- scitex/plt/utils/_metadata/_verification.py +202 -0
- scitex/repro/_RandomStateManager.py +0 -0
- scitex/repro/_gen_ID.py +0 -0
- scitex/repro/_gen_timestamp.py +0 -0
- scitex/repro/_hash_array.py +0 -0
- scitex/schema/README.md +1 -1
- scitex/scholar/__init__.py +8 -0
- scitex/scholar/_mcp/__init__.py +4 -0
- scitex/scholar/_mcp/all_handlers.py +74 -0
- scitex/scholar/_mcp/crossref_handlers.py +265 -0
- scitex/scholar/_mcp/handlers.py +1478 -0
- scitex/scholar/_mcp/job_handlers.py +172 -0
- scitex/scholar/_mcp/job_tool_schemas.py +166 -0
- scitex/scholar/_mcp/tool_schemas.py +505 -0
- scitex/scholar/auth/core/BrowserAuthenticator.py +126 -9
- scitex/scholar/auth/providers/OpenAthensAuthenticator.py +55 -210
- scitex/scholar/auth/providers/_notifications.py +417 -0
- scitex/scholar/auth/sso/BaseSSOAutomator.py +36 -17
- scitex/scholar/auth/sso/UniversityOfMelbourneSSOAutomator.py +8 -15
- scitex/scholar/citation_graph/__init__.py +0 -1
- scitex/scholar/config/core/_PathManager.py +5 -1
- scitex/scholar/config/default.yaml +1 -1
- scitex/scholar/core/Paper.py +19 -41
- scitex/scholar/core/Scholar.py +64 -1688
- scitex/scholar/core/_mixins/__init__.py +36 -0
- scitex/scholar/core/_mixins/_enrichers.py +270 -0
- scitex/scholar/core/_mixins/_library_handlers.py +100 -0
- scitex/scholar/core/_mixins/_loaders.py +103 -0
- scitex/scholar/core/_mixins/_pdf_download.py +375 -0
- scitex/scholar/core/_mixins/_pipeline.py +312 -0
- scitex/scholar/core/_mixins/_project_handlers.py +125 -0
- scitex/scholar/core/_mixins/_savers.py +69 -0
- scitex/scholar/core/_mixins/_search.py +103 -0
- scitex/scholar/core/_mixins/_services.py +88 -0
- scitex/scholar/core/_mixins/_url_finding.py +105 -0
- scitex/scholar/core/journal_normalizer.py +36 -25
- scitex/scholar/crossref_scitex.py +367 -0
- scitex/scholar/docs/EXTERNAL_PACKAGE_BRANDING.md +149 -0
- scitex/scholar/examples/00_run_all.sh +120 -0
- scitex/scholar/examples/07_storage_integration.py +0 -0
- scitex/scholar/impact_factor/estimation/__init__.py +0 -1
- scitex/scholar/impact_factor/jcr/ImpactFactorJCREngine.py +19 -6
- scitex/scholar/impact_factor/jcr/build_database.py +0 -0
- scitex/scholar/jobs/_Job.py +266 -0
- scitex/scholar/jobs/_JobManager.py +458 -0
- scitex/scholar/jobs/__init__.py +74 -0
- scitex/scholar/jobs/_errors.py +346 -0
- scitex/scholar/jobs/_executors.py +397 -0
- scitex/scholar/mcp_server.py +52 -2
- scitex/scholar/pdf_download/ScholarPDFDownloader.py +38 -416
- scitex/scholar/pdf_download/_cli.py +154 -0
- scitex/scholar/pdf_download/strategies/__init__.py +11 -8
- scitex/scholar/pdf_download/strategies/chrome_pdf_viewer.py +11 -11
- scitex/scholar/pdf_download/strategies/manual_download_fallback.py +80 -3
- scitex/scholar/pipelines/ScholarPipelineBibTeX.py +73 -121
- scitex/scholar/pipelines/ScholarPipelineParallel.py +83 -140
- scitex/scholar/pipelines/ScholarPipelineSearchParallel.py +11 -13
- scitex/scholar/pipelines/ScholarPipelineSingle.py +83 -656
- scitex/scholar/pipelines/_single_steps.py +465 -0
- scitex/scholar/storage/BibTeXHandler.py +71 -23
- scitex/scholar/storage/PaperIO.py +53 -18
- scitex/scholar/storage/_BibTeXValidator.py +571 -0
- scitex/scholar/storage/_LibraryManager.py +97 -1695
- scitex/scholar/storage/__init__.py +17 -3
- scitex/scholar/storage/_mixins/__init__.py +30 -0
- scitex/scholar/storage/_mixins/_bibtex_handlers.py +128 -0
- scitex/scholar/storage/_mixins/_library_operations.py +218 -0
- scitex/scholar/storage/_mixins/_metadata_conversion.py +226 -0
- scitex/scholar/storage/_mixins/_paper_saving.py +456 -0
- scitex/scholar/storage/_mixins/_resolution.py +376 -0
- scitex/scholar/storage/_mixins/_storage_helpers.py +121 -0
- scitex/scholar/storage/_mixins/_symlink_handlers.py +226 -0
- scitex/scholar/url_finder/translators/individual/cell_press.py +131 -4
- scitex/security/README.md +3 -3
- scitex/security/__init__.py +0 -1
- scitex/session/README.md +1 -1
- scitex/session/__init__.py +0 -0
- scitex/session/_decorator.py +0 -0
- scitex/session/_lifecycle.py +0 -0
- scitex/sh/README.md +1 -1
- scitex/social/__init__.py +153 -0
- scitex/social/docs/EXTERNAL_PACKAGE_BRANDING.md +149 -0
- scitex/stats/__init__.py +14 -2
- scitex/stats/__main__.py +2 -2
- scitex/stats/_figrecipe_integration.py +116 -0
- scitex/stats/_mcp/__init__.py +4 -0
- scitex/stats/_mcp/handlers.py +1191 -0
- scitex/stats/_mcp/tool_schemas.py +384 -0
- scitex/stats/auto/__init__.py +0 -1
- scitex/stats/correct/_correct_bonferroni.py +0 -0
- scitex/stats/correct/_correct_fdr.py +0 -0
- scitex/stats/correct/_correct_fdr_.py +0 -0
- scitex/stats/correct/_correct_holm.py +0 -0
- scitex/stats/correct/_correct_sidak.py +0 -0
- scitex/stats/effect_sizes/_cliffs_delta.py +0 -0
- scitex/stats/effect_sizes/_cohens_d.py +0 -0
- scitex/stats/effect_sizes/_epsilon_squared.py +0 -0
- scitex/stats/effect_sizes/_eta_squared.py +0 -0
- scitex/stats/effect_sizes/_prob_superiority.py +0 -0
- scitex/stats/mcp_server.py +2 -2
- scitex/stats/posthoc/_dunnett.py +0 -0
- scitex/stats/posthoc/_games_howell.py +0 -0
- scitex/stats/posthoc/_tukey_hsd.py +0 -0
- scitex/stats/power/_power.py +0 -0
- scitex/stats/utils/_effect_size.py +0 -0
- scitex/stats/utils/_formatters.py +0 -0
- scitex/stats/utils/_power.py +0 -0
- scitex/template/README.md +1 -1
- scitex/template/_mcp/__init__.py +4 -0
- scitex/template/_mcp/handlers.py +259 -0
- scitex/template/_mcp/tool_schemas.py +112 -0
- scitex/template/clone_writer_directory.py +6 -6
- scitex/template/mcp_server.py +2 -2
- scitex/ui/__init__.py +173 -0
- scitex/ui/_backends/__init__.py +66 -0
- scitex/ui/_backends/_audio.py +86 -0
- scitex/ui/_backends/_config.py +250 -0
- scitex/ui/_backends/_desktop.py +184 -0
- scitex/ui/_backends/_emacs.py +210 -0
- scitex/ui/_backends/_email.py +78 -0
- scitex/ui/_backends/_matplotlib.py +118 -0
- scitex/ui/_backends/_playwright.py +109 -0
- scitex/ui/_backends/_types.py +58 -0
- scitex/ui/_backends/_webhook.py +77 -0
- scitex/ui/_backends.py +37 -0
- scitex/ui/_mcp/__init__.py +23 -0
- scitex/ui/_mcp/handlers.py +260 -0
- scitex/ui/_mcp/tool_schemas.py +107 -0
- scitex/ui/mcp_server.py +151 -0
- scitex/utils/_email.py +85 -7
- scitex/utils/_notify.py +16 -5
- scitex/utils/_search.py +11 -9
- scitex/utils/_verify_scitex_format.py +0 -0
- scitex/writer/README.md +1 -1
- scitex/writer/Writer.py +110 -111
- scitex/writer/__init__.py +26 -48
- scitex/writer/_clone_writer_project.py +0 -0
- scitex/writer/_compile/__init__.py +5 -4
- scitex/writer/_compile/_compile_async.py +130 -0
- scitex/writer/_compile/_compile_unified.py +148 -0
- scitex/writer/_compile/_runner.py +2 -2
- scitex/writer/_compile/_validator.py +3 -3
- scitex/writer/_compile/manuscript.py +1 -1
- scitex/writer/_compile/revision.py +1 -1
- scitex/writer/_compile/supplementary.py +1 -1
- scitex/writer/_dataclasses/config/_WriterConfig.py +175 -0
- scitex/writer/_dataclasses/contents/_ManuscriptContents.py +236 -0
- scitex/writer/_dataclasses/core/_Document.py +146 -0
- scitex/writer/_dataclasses/core/_DocumentSection.py +546 -0
- scitex/writer/_dataclasses/results/_CompilationResult.py +165 -0
- scitex/writer/_dataclasses/results/_LaTeXIssue.py +102 -0
- scitex/writer/_dataclasses/tree/MINIMUM_FILES.md +121 -0
- scitex/writer/_mcp/__init__.py +4 -0
- scitex/writer/_mcp/handlers.py +32 -0
- scitex/writer/_mcp/tool_schemas.py +33 -0
- scitex/writer/_project/_trees.py +2 -2
- scitex/writer/utils/__init__.py +19 -2
- scitex/writer/utils/_converters.py +635 -0
- scitex/writer/utils/_parse_latex_logs.py +1 -1
- scitex/writer/utils/_verify_tree_structure.py +205 -0
- scitex-2.15.1.dist-info/METADATA +648 -0
- scitex-2.15.1.dist-info/RECORD +2553 -0
- scitex-2.15.1.dist-info/entry_points.txt +12 -0
- scitex/audio/_mcp_handlers.py +0 -256
- scitex/audio/_mcp_tool_schemas.py +0 -203
- scitex/canvas/_mcp_handlers.py +0 -372
- scitex/canvas/_mcp_tool_schemas.py +0 -219
- scitex/canvas/editor/flask_editor/templates/_scripts.py +0 -4933
- scitex/canvas/editor/flask_editor/templates/_styles.py +0 -1658
- scitex/capture/mcp_handlers.py +0 -401
- scitex/capture/mcp_tool_defs.py +0 -192
- scitex/capture/mcp_tools.py +0 -241
- scitex/capture/mcp_utils.py +0 -30
- scitex/cli/scholar.py +0 -313
- scitex/diagram/_compile.py +0 -312
- scitex/diagram/_diagram.py +0 -355
- scitex/diagram/_mcp_handlers.py +0 -400
- scitex/diagram/_mcp_tool_schemas.py +0 -157
- scitex/diagram/_presets.py +0 -173
- scitex/diagram/_schema.py +0 -182
- scitex/diagram/_split.py +0 -278
- scitex/plt/_mcp_handlers.py +0 -361
- scitex/plt/_mcp_tool_schemas.py +0 -169
- scitex/plt/mcp_server.py +0 -205
- scitex/scholar/.legacy/Scholar.py +0 -400
- scitex/scholar/.legacy/_Scholar.py +0 -1763
- scitex/scholar/.legacy/_ScholarAPI.py +0 -316
- scitex/scholar/.legacy/_tmp/search_engine/_BaseSearchEngine.py +0 -101
- scitex/scholar/.legacy/_tmp/search_engine/_UnifiedSearcher.py +0 -392
- scitex/scholar/.legacy/_tmp/search_engine/__init__.py +0 -53
- scitex/scholar/.legacy/_tmp/search_engine/local/_LocalSearchEngine.py +0 -134
- scitex/scholar/.legacy/_tmp/search_engine/local/_VectorSearchEngine.py +0 -129
- scitex/scholar/.legacy/_tmp/search_engine/web/_ArxivSearchEngine.py +0 -279
- scitex/scholar/.legacy/_tmp/search_engine/web/_CrossRefSearchEngine.py +0 -319
- scitex/scholar/.legacy/_tmp/search_engine/web/_GoogleScholarSearchEngine.py +0 -209
- scitex/scholar/.legacy/_tmp/search_engine/web/_PubMedSearchEngine.py +0 -374
- scitex/scholar/.legacy/_tmp/search_engine/web/_SemanticScholarSearchEngine.py +0 -362
- scitex/scholar/.legacy/database/README.md +0 -121
- scitex/scholar/.legacy/database/README_CONCURRENT_ACCESS.md +0 -103
- scitex/scholar/.legacy/database/_DatabaseEntry.py +0 -232
- scitex/scholar/.legacy/database/_DatabaseIndex.py +0 -426
- scitex/scholar/.legacy/database/_LibraryManager.py +0 -276
- scitex/scholar/.legacy/database/_PaperDatabase.py +0 -543
- scitex/scholar/.legacy/database/_ScholarDatabaseIntegration.py +0 -391
- scitex/scholar/.legacy/database/_StorageIntegratedDB.py +0 -619
- scitex/scholar/.legacy/database/_ZoteroCompatibleDB.py +0 -1194
- scitex/scholar/.legacy/database/__init__.py +0 -28
- scitex/scholar/.legacy/database/manage.py +0 -274
- scitex/scholar/.legacy/lookup/_LookupIndex.py +0 -470
- scitex/scholar/.legacy/lookup/__init__.py +0 -22
- scitex/scholar/.legacy/metadata/README.md +0 -62
- scitex/scholar/.legacy/metadata/__init__.py +0 -1
- scitex/scholar/.legacy/metadata/doi/README.md +0 -368
- scitex/scholar/.legacy/metadata/doi/__init__.py +0 -7
- scitex/scholar/.legacy/metadata/doi/batch/_MetadataHandlerForBatchDOIResolution.py +0 -304
- scitex/scholar/.legacy/metadata/doi/batch/_ProgressManagerForBatchDOIResolution.py +0 -304
- scitex/scholar/.legacy/metadata/doi/batch/_SourceStatsManagerForBatchDOIResolution.py +0 -299
- scitex/scholar/.legacy/metadata/doi/batch/__init__.py +0 -26
- scitex/scholar/.legacy/metadata/doi/resolvers/_BatchDOIResolver.py +0 -586
- scitex/scholar/.legacy/metadata/doi/resolvers/_BibTeXDOIResolver.py +0 -609
- scitex/scholar/.legacy/metadata/doi/resolvers/_DOIResolver.py +0 -192
- scitex/scholar/.legacy/metadata/doi/resolvers/_SingleDOIResolver.py +0 -395
- scitex/scholar/.legacy/metadata/doi/resolvers/__init__.py +0 -2
- scitex/scholar/.legacy/metadata/doi/sources/.combined-SemanticScholarSource/_SemanticScholarSource.py +0 -289
- scitex/scholar/.legacy/metadata/doi/sources/.combined-SemanticScholarSource/_SemanticScholarSourceEnhanced.py +0 -229
- scitex/scholar/.legacy/metadata/doi/sources/_ArXivSource.py +0 -306
- scitex/scholar/.legacy/metadata/doi/sources/_BaseDOISource.py +0 -347
- scitex/scholar/.legacy/metadata/doi/sources/_CrossRefLocalSource.py +0 -79
- scitex/scholar/.legacy/metadata/doi/sources/_CrossRefSource.py +0 -225
- scitex/scholar/.legacy/metadata/doi/sources/_OpenAlexSource.py +0 -306
- scitex/scholar/.legacy/metadata/doi/sources/_PubMedSource.py +0 -302
- scitex/scholar/.legacy/metadata/doi/sources/_SemanticScholarSource.py +0 -341
- scitex/scholar/.legacy/metadata/doi/sources/_SourceManager.py +0 -317
- scitex/scholar/.legacy/metadata/doi/sources/_SourceResolutionStrategy.py +0 -595
- scitex/scholar/.legacy/metadata/doi/sources/_SourceRotationManager.py +0 -585
- scitex/scholar/.legacy/metadata/doi/sources/_URLDOISource.py +0 -394
- scitex/scholar/.legacy/metadata/doi/sources/_UnifiedSource.py +0 -412
- scitex/scholar/.legacy/metadata/doi/sources/__init__.py +0 -38
- scitex/scholar/.legacy/metadata/doi/utils/_PubMedConverter.py +0 -465
- scitex/scholar/.legacy/metadata/doi/utils/_RateLimitHandler.py +0 -707
- scitex/scholar/.legacy/metadata/doi/utils/_TextNormalizer.py +0 -587
- scitex/scholar/.legacy/metadata/doi/utils/_URLDOIExtractor.py +0 -278
- scitex/scholar/.legacy/metadata/doi/utils/__init__.py +0 -40
- scitex/scholar/.legacy/metadata/doi/utils/_to_complete_metadata_structure.py +0 -315
- scitex/scholar/.legacy/metadata/enrichment/README.md +0 -51
- scitex/scholar/.legacy/metadata/enrichment/_LibraryEnricher.py +0 -99
- scitex/scholar/.legacy/metadata/enrichment/__init__.py +0 -2
- scitex/scholar/.legacy/metadata/enrichment/enrichers/_ImpactFactorEnricher.py +0 -107
- scitex/scholar/.legacy/metadata/enrichment/enrichers/_SmartEnricher.py +0 -164
- scitex/scholar/.legacy/metadata/enrichment/enrichers/__init__.py +0 -4
- scitex/scholar/.legacy/metadata/enrichment/sources/_UnifiedMetadataSource.py +0 -126
- scitex/scholar/.legacy/metadata/enrichment/sources/__init__.py +0 -3
- scitex/scholar/.legacy/metadata/query_to_full_meta_json.py +0 -184
- scitex/scholar/.legacy/metadata/urls/.tmp/open_url/KNOWN_RESOLVERS.py +0 -462
- scitex/scholar/.legacy/metadata/urls/.tmp/open_url/README.md +0 -223
- scitex/scholar/.legacy/metadata/urls/.tmp/open_url/_DOIToURLResolver.py +0 -694
- scitex/scholar/.legacy/metadata/urls/.tmp/open_url/_OpenURLResolver.py +0 -1160
- scitex/scholar/.legacy/metadata/urls/.tmp/open_url/_ResolverLinkFinder.py +0 -344
- scitex/scholar/.legacy/metadata/urls/.tmp/open_url/__init__.py +0 -24
- scitex/scholar/.legacy/metadata/urls/README.md +0 -142
- scitex/scholar/.legacy/metadata/urls/_URLMetadataHandler.py +0 -383
- scitex/scholar/.legacy/metadata/urls/_ZoteroTranslatorRunner.py +0 -294
- scitex/scholar/.legacy/metadata/urls/__init__.py +0 -39
- scitex/scholar/.legacy/metadata/urls/_finder.py +0 -319
- scitex/scholar/.legacy/metadata/urls/_handler.py +0 -326
- scitex/scholar/.legacy/metadata/urls/_resolver.py +0 -287
- scitex/scholar/.legacy/metadata/urls/docs/CORE_URL_TYPES.md +0 -187
- scitex/scholar/.legacy/metadata/urls/docs/URL_SCHEMA.md +0 -223
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/.eslintrc +0 -11
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/AGPL +0 -22
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/checkDeletedTxt.sh +0 -46
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/eslint-plugin-zotero-translator/bin/teslint.js +0 -9
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/eslint-plugin-zotero-translator/index.js +0 -15
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/eslint-plugin-zotero-translator/package-lock.json +0 -151
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/eslint-plugin-zotero-translator/package.json +0 -21
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/eslint-plugin-zotero-translator/processor.js +0 -257
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/helper.sh +0 -29
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/lint.sh +0 -12
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/pull-request-check/check-pull-request.sh +0 -39
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/pull-request-check/selenium-test.js +0 -147
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/pull-request-check/translator-server.js +0 -72
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.ci/updateTypes.mjs +0 -75
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.editorconfig +0 -8
- scitex/scholar/.legacy/metadata/urls/zotero_translators/.eslintrc +0 -70
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ABC News Australia.js +0 -224
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ACLS Humanities EBook.js +0 -165
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ACLWeb.js +0 -600
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ACM Digital Library.js +0 -710
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ACS Publications.js +0 -633
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ADS Bibcode.js +0 -664
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AEA Web.js +0 -450
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AGRIS.js +0 -311
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AIP.js +0 -295
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AMS Journals.js +0 -136
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AMS MathSciNet (Legacy).js +0 -313
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AMS MathSciNet.js +0 -288
- scitex/scholar/.legacy/metadata/urls/zotero_translators/APA PsycNET.js +0 -915
- scitex/scholar/.legacy/metadata/urls/zotero_translators/APN.ru.js +0 -132
- scitex/scholar/.legacy/metadata/urls/zotero_translators/APS-Physics.js +0 -204
- scitex/scholar/.legacy/metadata/urls/zotero_translators/APS.js +0 -542
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ARTFL Encyclopedie.js +0 -283
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ARTnews.js +0 -155
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ARTstor.js +0 -619
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ASCE.js +0 -199
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ASCO Meeting Library.js +0 -153
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ASTIS.js +0 -337
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ATS International Journal.js +0 -290
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Access Engineering.js +0 -384
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Access Medicine.js +0 -343
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Access Science.js +0 -391
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Adam Matthew Digital.js +0 -405
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Agencia del ISBN.js +0 -77
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Ahval News.js +0 -309
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Air University Journals.js +0 -236
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Airiti.js +0 -423
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Alexander Street Press.js +0 -198
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AllAfrica.js +0 -291
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Alsharekh.js +0 -242
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AlterNet.js +0 -134
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Aluka.js +0 -261
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Amazon.js +0 -1043
- scitex/scholar/.legacy/metadata/urls/zotero_translators/American Archive of Public Broadcasting.js +0 -592
- scitex/scholar/.legacy/metadata/urls/zotero_translators/American Institute of Aeronautics and Astronautics.js +0 -210
- scitex/scholar/.legacy/metadata/urls/zotero_translators/American Prospect.js +0 -114
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Ancestry.com US Federal Census.js +0 -164
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Annual Reviews.js +0 -329
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Antikvarium.hu.js +0 -280
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AquaDocs.js +0 -390
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Archeion.js +0 -249
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Archiv fuer Sozialgeschichte.js +0 -157
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Archive Ouverte en Sciences de l'Information et de la Communication (AOSIC).js +0 -179
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Archives Canada.js +0 -142
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Ariana News.js +0 -203
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Art Institute of Chicago.js +0 -279
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Artefacts Canada.js +0 -192
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Artforum.js +0 -438
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Atlanta Journal-Constitution.js +0 -311
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Atypon Journals.js +0 -1204
- scitex/scholar/.legacy/metadata/urls/zotero_translators/AustLII and NZLII.js +0 -604
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Australian Dictionary of Biography.js +0 -196
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BAILII.js +0 -176
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BBC Genome.js +0 -254
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BBC.js +0 -430
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BIBSYS.js +0 -112
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BOCC.js +0 -217
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BOE.js +0 -229
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BOFiP-Impots.js +0 -132
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Baidu Scholar.js +0 -276
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bangkok Post.js +0 -216
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Baruch Foundation.js +0 -175
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Beobachter.js +0 -175
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bezneng Gajit.js +0 -92
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BibLaTeX.js +0 -888
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BibTeX.js +0 -4236
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Biblio.com.js +0 -216
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bibliontology RDF.js +0 -1166
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Biblioteca Nacional de Maestros.js +0 -213
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bibliotheque et Archives Nationale du Quebec (Pistard).js +0 -147
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bibliotheque et Archives Nationales du Quebec.js +0 -266
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bibliotheque nationale de France.js +0 -872
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BioMed Central.js +0 -585
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BioOne.js +0 -233
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bioconductor.js +0 -343
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Blaetter.js +0 -192
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Blogger.js +0 -244
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bloomberg.js +0 -205
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bloomsbury Food Library.js +0 -296
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bluesky.js +0 -195
- scitex/scholar/.legacy/metadata/urls/zotero_translators/BnF ISBN.js +0 -129
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bookmarks.js +0 -282
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bookshop.org.js +0 -223
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Boston Review.js +0 -332
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bosworth Toller's Anglo-Saxon Dictionary Online.js +0 -496
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bracero History Archive.js +0 -200
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Brill.js +0 -434
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Brukerhandboken.js +0 -153
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bryn Mawr Classical Review.js +0 -303
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Bundesgesetzblatt.js +0 -231
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Business Standard.js +0 -151
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CABI - CAB Abstracts.js +0 -317
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CAOD.js +0 -260
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CBC.js +0 -439
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CCfr (BnF).js +0 -162
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CERN Document Server.js +0 -277
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CEUR Workshop Proceedings.js +0 -145
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CFF References.js +0 -170
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CFF.js +0 -113
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CIA World Factbook.js +0 -128
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CLACSO.js +0 -226
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CLASE.js +0 -135
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CNKI.js +0 -731
- scitex/scholar/.legacy/metadata/urls/zotero_translators/COBISS.js +0 -1945
- scitex/scholar/.legacy/metadata/urls/zotero_translators/COinS.js +0 -336
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CQ Press.js +0 -418
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CROSBI.js +0 -227
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CSIRO Publishing.js +0 -139
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CSL JSON.js +0 -203
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CSV.js +0 -294
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Cairn.info.js +0 -368
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CalMatters.js +0 -228
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Calisphere.js +0 -355
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Camara Brasileira do Livro ISBN.js +0 -842
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Cambridge Core.js +0 -580
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Cambridge Engage Preprints.js +0 -276
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CanLII.js +0 -284
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Canada.com.js +0 -171
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Canadian Letters and Images.js +0 -148
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Canadiana.ca.js +0 -196
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Cascadilla Proceedings Project.js +0 -390
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Cell Press.js +0 -516
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Central and Eastern European Online Library Journals.js +0 -313
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Champlain Society - Collection.js +0 -220
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Chicago Journal of Theoretical Computer Science.js +0 -203
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Christian Science Monitor.js +0 -148
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Chronicling America.js +0 -131
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CiNii Research.js +0 -168
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Citavi 5 XML.js +0 -516
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CiteSeer.js +0 -196
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Citizen Lab.js +0 -347
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Civilization.ca.js +0 -146
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Climate Change and Human Health Literature Portal.js +0 -283
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Clinical Key.js +0 -367
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Code4Lib Journal.js +0 -143
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Colorado State Legislature.js +0 -215
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Columbia University Press.js +0 -238
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Common-Place.js +0 -218
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Computer History Museum Archive.js +0 -1319
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Copernicus.js +0 -461
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Cornell LII.js +0 -252
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Cornell University Press.js +0 -235
- scitex/scholar/.legacy/metadata/urls/zotero_translators/CourtListener.js +0 -265
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Crossref REST.js +0 -1757
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Crossref Unixref XML.js +0 -965
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Current Affairs.js +0 -160
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DABI.js +0 -476
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DAI-Zenon.js +0 -392
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DART-Europe.js +0 -176
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DBLP Computer Science Bibliography.js +0 -462
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DBpia.js +0 -233
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DEPATISnet.js +0 -373
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DOAJ.js +0 -242
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DOI Content Negotiation.js +0 -352
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DOI.js +0 -322
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DPLA.js +0 -425
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DSpace Intermediate Metadata.js +0 -208
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Dagens Nyheter.js +0 -369
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Dagstuhl Research Online Publication Server.js +0 -278
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Dar Almandumah.js +0 -253
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Data.gov.js +0 -225
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Databrary.js +0 -184
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Datacite JSON.js +0 -1182
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Dataverse.js +0 -418
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Daum News.js +0 -139
- scitex/scholar/.legacy/metadata/urls/zotero_translators/De Gruyter Brill.js +0 -674
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Defense Technical Information Center.js +0 -146
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Delpher.js +0 -413
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Demographic Research.js +0 -164
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Denik CZ.js +0 -273
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Der Freitag.js +0 -236
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Der Spiegel.js +0 -479
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Desiring God.js +0 -216
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Deutsche Fotothek.js +0 -364
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Deutsche Nationalbibliothek.js +0 -594
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Dialnet.js +0 -258
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Die Zeit.js +0 -378
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DigiZeitschriften.js +0 -269
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Digital Humanities Quarterly.js +0 -207
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Digital Spy.js +0 -215
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Dimensions.js +0 -233
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Douban.js +0 -316
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Dreier Neuerscheinungsdienst.js +0 -209
- scitex/scholar/.legacy/metadata/urls/zotero_translators/DrugBank.ca.js +0 -209
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Dryad Digital Repository.js +0 -323
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Duke University Press Books.js +0 -250
- scitex/scholar/.legacy/metadata/urls/zotero_translators/E-periodica Switzerland.js +0 -347
- scitex/scholar/.legacy/metadata/urls/zotero_translators/EBSCO Discovery Layer.js +0 -147
- scitex/scholar/.legacy/metadata/urls/zotero_translators/EBSCOhost.js +0 -592
- scitex/scholar/.legacy/metadata/urls/zotero_translators/EIDR.js +0 -184
- scitex/scholar/.legacy/metadata/urls/zotero_translators/EPA National Library Catalog.js +0 -245
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ERIC.js +0 -986
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ESpacenet.js +0 -465
- scitex/scholar/.legacy/metadata/urls/zotero_translators/EUR-Lex.js +0 -423
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Eastview.js +0 -336
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Edinburgh University Press Journals.js +0 -178
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Education Week.js +0 -197
- scitex/scholar/.legacy/metadata/urls/zotero_translators/El Comercio (Peru).js +0 -347
- scitex/scholar/.legacy/metadata/urls/zotero_translators/El Pais.js +0 -262
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Electronic Colloquium on Computational Complexity.js +0 -230
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Elicit.js +0 -120
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Elsevier Health Journals.js +0 -531
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Elsevier Pure.js +0 -420
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Embedded Metadata.js +0 -1951
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Emerald Insight.js +0 -626
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Encyclopedia of Chicago.js +0 -162
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Encyclopedia of Korean Culture.js +0 -221
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Endnote XML.js +0 -1407
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Engineering Village.js +0 -139
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Envidat.js +0 -331
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Epicurious.js +0 -144
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Erudit.js +0 -272
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Euclid.js +0 -220
- scitex/scholar/.legacy/metadata/urls/zotero_translators/EurasiaNet.js +0 -109
- scitex/scholar/.legacy/metadata/urls/zotero_translators/EurogamerUSgamer.js +0 -380
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Europe PMC.js +0 -448
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Evernote.js +0 -104
- scitex/scholar/.legacy/metadata/urls/zotero_translators/F1000 Research.js +0 -655
- scitex/scholar/.legacy/metadata/urls/zotero_translators/FAO Publications.js +0 -1139
- scitex/scholar/.legacy/metadata/urls/zotero_translators/FAZ.NET.js +0 -231
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Fachportal Padagogik.js +0 -839
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Factiva.js +0 -302
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Failed Architecture.js +0 -114
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Fairfax Australia.js +0 -200
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Fatcat.js +0 -425
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Figshare.js +0 -191
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Financial Times.js +0 -187
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Finna.js +0 -357
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Flickr.js +0 -318
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Foreign Affairs.js +0 -485
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Foreign Policy.js +0 -146
- scitex/scholar/.legacy/metadata/urls/zotero_translators/FreeCite.js +0 -95
- scitex/scholar/.legacy/metadata/urls/zotero_translators/FreePatentsOnline.js +0 -265
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Frieze.js +0 -243
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Frontiers.js +0 -667
- scitex/scholar/.legacy/metadata/urls/zotero_translators/GMS German Medical Science.js +0 -319
- scitex/scholar/.legacy/metadata/urls/zotero_translators/GPO Access e-CFR.js +0 -134
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Gale Databases.js +0 -324
- scitex/scholar/.legacy/metadata/urls/zotero_translators/GaleGDC.js +0 -189
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Galegroup.js +0 -327
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Gallica.js +0 -194
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Game Studies.js +0 -155
- scitex/scholar/.legacy/metadata/urls/zotero_translators/GameSpot.js +0 -199
- scitex/scholar/.legacy/metadata/urls/zotero_translators/GameStar GamePro.js +0 -198
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Gasyrlar Awazy.js +0 -156
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Gemeinsamer Bibliotheksverbund ISBN.js +0 -23
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Gene Ontology.js +0 -128
- scitex/scholar/.legacy/metadata/urls/zotero_translators/GitHub.js +0 -501
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Globes.js +0 -243
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Gmail.js +0 -64
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Goodreads.js +0 -219
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Google Books.js +0 -552
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Google Patents.js +0 -959
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Google Play.js +0 -186
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Google Presentation.js +0 -104
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Google Research.js +0 -221
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Google Scholar.js +0 -1361
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Gulag Many Days, Many Lives.js +0 -179
- scitex/scholar/.legacy/metadata/urls/zotero_translators/HAL Archives Ouvertes.js +0 -429
- scitex/scholar/.legacy/metadata/urls/zotero_translators/HCSP.js +0 -312
- scitex/scholar/.legacy/metadata/urls/zotero_translators/HUDOC.js +0 -650
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Haaretz.js +0 -562
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Habr.js +0 -232
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Handelszeitung.js +0 -273
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Hanrei Watch.js +0 -123
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Harper's Magazine.js +0 -365
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Harvard Business Review.js +0 -326
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Harvard Caselaw Access Project.js +0 -244
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Harvard University Press Books.js +0 -286
- scitex/scholar/.legacy/metadata/urls/zotero_translators/HathiTrust.js +0 -311
- scitex/scholar/.legacy/metadata/urls/zotero_translators/HeinOnline.js +0 -266
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Heise.js +0 -200
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Herder.js +0 -236
- scitex/scholar/.legacy/metadata/urls/zotero_translators/HighBeam.js +0 -198
- scitex/scholar/.legacy/metadata/urls/zotero_translators/HighWire 2.0.js +0 -1355
- scitex/scholar/.legacy/metadata/urls/zotero_translators/HighWire.js +0 -209
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Hindawi Publishers.js +0 -177
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Hispanic-American Periodical Index.js +0 -236
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Homeland Security Digital Library.js +0 -426
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Huff Post.js +0 -223
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Human Rights Watch.js +0 -450
- scitex/scholar/.legacy/metadata/urls/zotero_translators/IBISWorld.js +0 -171
- scitex/scholar/.legacy/metadata/urls/zotero_translators/IDEA ALM.js +0 -536
- scitex/scholar/.legacy/metadata/urls/zotero_translators/IEEE Computer Society.js +0 -429
- scitex/scholar/.legacy/metadata/urls/zotero_translators/IEEE Xplore.js +0 -1000
- scitex/scholar/.legacy/metadata/urls/zotero_translators/IETF.js +0 -451
- scitex/scholar/.legacy/metadata/urls/zotero_translators/IGN.js +0 -136
- scitex/scholar/.legacy/metadata/urls/zotero_translators/IMDb.js +0 -566
- scitex/scholar/.legacy/metadata/urls/zotero_translators/INSPIRE.js +0 -247
- scitex/scholar/.legacy/metadata/urls/zotero_translators/IPCC.js +0 -757
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ISTC.js +0 -181
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Idref.js +0 -179
- scitex/scholar/.legacy/metadata/urls/zotero_translators/In These Times.js +0 -196
- scitex/scholar/.legacy/metadata/urls/zotero_translators/InfoTrac.js +0 -279
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Informationssystem Medienpaedagogik.js +0 -305
- scitex/scholar/.legacy/metadata/urls/zotero_translators/IngentaConnect.js +0 -312
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Inside Higher Ed.js +0 -167
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Insignia OPAC.js +0 -114
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Institute of Contemporary Art.js +0 -180
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Institute of Physics.js +0 -340
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Integrum.js +0 -173
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Intellixir.js +0 -264
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Inter-Research Science Center.js +0 -185
- scitex/scholar/.legacy/metadata/urls/zotero_translators/International Nuclear Information System.js +0 -285
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Internet Archive Scholar.js +0 -106
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Internet Archive Wayback Machine.js +0 -152
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Internet Archive.js +0 -552
- scitex/scholar/.legacy/metadata/urls/zotero_translators/InvenioRDM.js +0 -1260
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Isidore.js +0 -235
- scitex/scholar/.legacy/metadata/urls/zotero_translators/J-Stage.js +0 -272
- scitex/scholar/.legacy/metadata/urls/zotero_translators/JETS.js +0 -122
- scitex/scholar/.legacy/metadata/urls/zotero_translators/JISC Historical Texts.js +0 -273
- scitex/scholar/.legacy/metadata/urls/zotero_translators/JRC Publications Repository.js +0 -569
- scitex/scholar/.legacy/metadata/urls/zotero_translators/JSTOR.js +0 -821
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Jahrbuch.js +0 -213
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Japan Times Online.js +0 -138
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Journal of Electronic Publishing.js +0 -147
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Journal of Extension.js +0 -288
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Journal of Machine Learning Research.js +0 -441
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Journal of Religion and Society.js +0 -174
- scitex/scholar/.legacy/metadata/urls/zotero_translators/JurPC.js +0 -274
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Juricaf.js +0 -141
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Juris.js +0 -728
- scitex/scholar/.legacy/metadata/urls/zotero_translators/K10plus ISBN.js +0 -386
- scitex/scholar/.legacy/metadata/urls/zotero_translators/KStudy.js +0 -632
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Kanopy.js +0 -358
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Khaama Press.js +0 -249
- scitex/scholar/.legacy/metadata/urls/zotero_translators/KitapYurdu.com.js +0 -376
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Kommersant.js +0 -174
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Korean National Library.js +0 -621
- scitex/scholar/.legacy/metadata/urls/zotero_translators/L'Annee Philologique.js +0 -267
- scitex/scholar/.legacy/metadata/urls/zotero_translators/LA Times.js +0 -239
- scitex/scholar/.legacy/metadata/urls/zotero_translators/LIBRIS ISBN.js +0 -103
- scitex/scholar/.legacy/metadata/urls/zotero_translators/LIVIVO.js +0 -260
- scitex/scholar/.legacy/metadata/urls/zotero_translators/LWN.net.js +0 -315
- scitex/scholar/.legacy/metadata/urls/zotero_translators/La Croix.js +0 -237
- scitex/scholar/.legacy/metadata/urls/zotero_translators/La Nacion (Argentina).js +0 -231
- scitex/scholar/.legacy/metadata/urls/zotero_translators/La Presse.js +0 -218
- scitex/scholar/.legacy/metadata/urls/zotero_translators/La Republica (Peru).js +0 -174
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Lagen.nu.js +0 -214
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Landesbibliographie Baden-Wurttemberg.js +0 -324
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Lapham's Quarterly.js +0 -1062
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Le Devoir.js +0 -167
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Le Figaro.js +0 -225
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Le Maitron.js +0 -484
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Le Monde.js +0 -258
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Le monde diplomatique.js +0 -200
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Legifrance.js +0 -641
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Legislative Insight.js +0 -406
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Lexis+.js +0 -264
- scitex/scholar/.legacy/metadata/urls/zotero_translators/LexisNexis.js +0 -505
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Libraries Tasmania.js +0 -778
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Aleph).js +0 -385
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Amicus).js +0 -254
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Aquabrowser).js +0 -253
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (BiblioCommons).js +0 -249
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Blacklight).js +0 -341
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Capita Prism).js +0 -162
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (DRA).js +0 -203
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Dynix).js +0 -315
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Encore).js +0 -211
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (InnoPAC).js +0 -305
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Koha).js +0 -225
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Mango).js +0 -285
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (OPALS).js +0 -200
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (PICA).js +0 -2120
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (PICA2).js +0 -331
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Pika).js +0 -488
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Polaris).js +0 -183
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Quolto).js +0 -320
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (RERO ILS).js +0 -754
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (SIRSI eLibrary).js +0 -407
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (SIRSI).js +0 -452
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (SLIMS).js +0 -146
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (TIND ILS).js +0 -773
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (TLCYouSeeMore).js +0 -132
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (TinREAD).js +0 -277
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (VTLS).js +0 -125
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Visual Library 2021).js +0 -765
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Voyager 7).js +0 -199
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Catalog (Voyager).js +0 -212
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Genesis.js +0 -337
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library Hub Discover.js +0 -359
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library of Congress Digital Collections.js +0 -869
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Library of Congress ISBN.js +0 -86
- scitex/scholar/.legacy/metadata/urls/zotero_translators/LingBuzz.js +0 -359
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Lippincott Williams and Wilkins.js +0 -341
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Literary Hub.js +0 -950
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Litres.js +0 -236
- scitex/scholar/.legacy/metadata/urls/zotero_translators/LiveJournal.js +0 -219
- scitex/scholar/.legacy/metadata/urls/zotero_translators/London Review of Books.js +0 -291
- scitex/scholar/.legacy/metadata/urls/zotero_translators/LookUs.js +0 -260
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Lulu.js +0 -264
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MAB2.js +0 -373
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MARC.js +0 -1080
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MARCXML.js +0 -489
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MCV.js +0 -258
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MDPI Journals.js +0 -356
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MEDLINEnbib.js +0 -1561
- scitex/scholar/.legacy/metadata/urls/zotero_translators/METS.js +0 -384
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MIDAS Journals.js +0 -343
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MIT Press Books.js +0 -637
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MODS.js +0 -2545
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MPG PuRe.js +0 -541
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Mailman.js +0 -136
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Mainichi Daily News.js +0 -189
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Mastodon.js +0 -198
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Matbugat.ru.js +0 -110
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Max Planck Institute for the History of Science Virtual Laboratory Library.js +0 -136
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Medium.js +0 -208
- scitex/scholar/.legacy/metadata/urls/zotero_translators/MetaLib.js +0 -126
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Microbiology Society Journals.js +0 -343
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Microsoft Academic.js +0 -424
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Mikromarc.js +0 -207
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Milli Kutuphane.js +0 -244
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Musee du Louvre.js +0 -265
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NASA ADS.js +0 -889
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NASA NTRS.js +0 -610
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NCBI Nucleotide.js +0 -227
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NPR.js +0 -341
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NRC Research Press.js +0 -181
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NRC.nl.js +0 -226
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NTSB Accident Reports.js +0 -226
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NYPL Menus.js +0 -275
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NYPL Research Catalog.js +0 -458
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NYTimes.com.js +0 -858
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NZZ.ch.js +0 -272
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Nagoya University OPAC.js +0 -336
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Academies Press.js +0 -243
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Agriculture Library.js +0 -524
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Archives of Australia.js +0 -522
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Archives of South Africa.js +0 -122
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Bureau of Economic Research.js +0 -363
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Diet Library Catalogue.js +0 -333
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Gallery of Art - USA.js +0 -149
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Gallery of Australia.js +0 -252
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Library of Australia (new catalog).js +0 -223
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Library of Belarus.js +0 -171
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Library of Norway.js +0 -310
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Library of Poland ISBN.js +0 -140
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Post.js +0 -186
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Technical Reports Library.js +0 -276
- scitex/scholar/.legacy/metadata/urls/zotero_translators/National Transportation Library ROSA P.js +0 -562
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Nature Publishing Group.js +0 -3394
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Neural Information Processing Systems.js +0 -385
- scitex/scholar/.legacy/metadata/urls/zotero_translators/New Left Review.js +0 -245
- scitex/scholar/.legacy/metadata/urls/zotero_translators/New Zealand Herald.js +0 -282
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Newlines Magazine.js +0 -190
- scitex/scholar/.legacy/metadata/urls/zotero_translators/News Corp Australia.js +0 -251
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NewsBank.js +0 -202
- scitex/scholar/.legacy/metadata/urls/zotero_translators/NewsnetTamedia.js +0 -509
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Noor Digital Library.js +0 -267
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Note HTML.js +0 -206
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Note Markdown.js +0 -1638
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Notre Dame Philosophical Reviews.js +0 -201
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OAPEN.js +0 -331
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OCLC WorldCat FirstSearch.js +0 -213
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OECD.js +0 -216
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ORCID.js +0 -104
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OSF Preprints.js +0 -417
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OSTI Energy Citations.js +0 -202
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OVID Tagged.js +0 -1226
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OZON.ru.js +0 -465
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OhioLINK.js +0 -43
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Old Bailey Online.js +0 -315
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Open Conf.js +0 -172
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Open Knowledge Repository.js +0 -811
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Open WorldCat.js +0 -1401
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OpenAlex JSON.js +0 -740
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OpenAlex.js +0 -444
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OpenEdition Books.js +0 -155
- scitex/scholar/.legacy/metadata/urls/zotero_translators/OpenEdition Journals.js +0 -432
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Optical Society of America.js +0 -562
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Optimization Online.js +0 -418
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Ovid.js +0 -302
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Oxford Dictionaries Premium.js +0 -194
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Oxford English Dictionary.js +0 -122
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Oxford Music and Art Online.js +0 -120
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Oxford Reference.js +0 -202
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Oxford University Press.js +0 -277
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PC Gamer.js +0 -302
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PC Games.js +0 -128
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PEI Archival Information Network.js +0 -242
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PEP Web.js +0 -165
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PKP Catalog Systems.js +0 -1455
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PLoS Journals.js +0 -284
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PRC History Review.js +0 -298
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Pajhwok Afghan News.js +0 -198
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Papers Past.js +0 -297
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Paris Review.js +0 -227
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Pastebin.js +0 -199
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Patents - USPTO.js +0 -210
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Peeters.js +0 -587
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Perceiving Systems.js +0 -350
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Perlego.js +0 -416
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PhilPapers.js +0 -249
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Philosopher's Imprint.js +0 -169
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Pleade.js +0 -329
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Polygon.js +0 -270
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Potsdamer Neueste Nachrichten.js +0 -188
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Preprints.org.js +0 -305
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Primo 2018.js +0 -126
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Primo Normalized XML.js +0 -987
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Primo.js +0 -322
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ProMED.js +0 -66
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ProQuest Ebook Central.js +0 -226
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ProQuest PolicyFile.js +0 -115
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ProQuest.js +0 -2210
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Probing the Past.js +0 -151
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Project Gutenberg.js +0 -191
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Project MUSE.js +0 -451
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Protein Data Bank.js +0 -445
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PubFactory Journals.js +0 -712
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PubMed Central.js +0 -577
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PubMed XML.js +0 -1139
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PubMed.js +0 -1317
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PubPub.js +0 -530
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Public Record Office Victoria.js +0 -252
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Publications Office of the European Union.js +0 -540
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Publications du Quebec.js +0 -225
- scitex/scholar/.legacy/metadata/urls/zotero_translators/PyPI.js +0 -288
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Qatar Digital Library.js +0 -802
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Queensland State Archives.js +0 -303
- scitex/scholar/.legacy/metadata/urls/zotero_translators/R-Packages.js +0 -410
- scitex/scholar/.legacy/metadata/urls/zotero_translators/RAND.js +0 -283
- scitex/scholar/.legacy/metadata/urls/zotero_translators/RDF.js +0 -1777
- scitex/scholar/.legacy/metadata/urls/zotero_translators/REDALYC.js +0 -196
- scitex/scholar/.legacy/metadata/urls/zotero_translators/RIS.js +0 -7265
- scitex/scholar/.legacy/metadata/urls/zotero_translators/RSC Publishing.js +0 -250
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Radio Free Europe Radio Liberty.js +0 -706
- scitex/scholar/.legacy/metadata/urls/zotero_translators/RePEc - Econpapers.js +0 -725
- scitex/scholar/.legacy/metadata/urls/zotero_translators/RePEc - IDEAS.js +0 -337
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Rechtspraak.nl.js +0 -295
- scitex/scholar/.legacy/metadata/urls/zotero_translators/RefWorks Tagged.js +0 -1185
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ReferBibIX.js +0 -463
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Regeringskansliet.js +0 -89
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Research Square.js +0 -335
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ResearchGate.js +0 -394
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Retsinformation.js +0 -348
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Reuters.js +0 -255
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Rock, Paper, Shotgun.js +0 -304
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Roll Call.js +0 -173
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Russian State Library.js +0 -1517
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SAE Papers.js +0 -241
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SAGE Journals.js +0 -427
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SAGE Knowledge.js +0 -505
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SAILDART.js +0 -364
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SALT Research Archives.js +0 -196
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SFU IPinCH.js +0 -946
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SIPRI.js +0 -256
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SIRS Knowledge Source.js +0 -546
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SLUB Dresden.js +0 -300
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SORA.js +0 -340
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SSOAR.js +0 -399
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SSRN.js +0 -235
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SVT Nyheter.js +0 -381
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Sacramento Bee.js +0 -274
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Safari Books Online.js +0 -391
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Scholars Portal Journals.js +0 -220
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Scholia.js +0 -189
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Schweizer Radio und Fernsehen SRF.js +0 -152
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SciELO.js +0 -440
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ScienceDirect.js +0 -1304
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Scopus.js +0 -418
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Semantic Scholar.js +0 -513
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Silverchair.js +0 -886
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Slate.js +0 -228
- scitex/scholar/.legacy/metadata/urls/zotero_translators/SlideShare.js +0 -112
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Springer Link.js +0 -696
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Stack Exchange.js +0 -134
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Standard Ebooks.js +0 -198
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Stanford Encyclopedia of Philosophy.js +0 -285
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Stanford University Press.js +0 -343
- scitex/scholar/.legacy/metadata/urls/zotero_translators/State Records Office of Western Australia.js +0 -439
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Stitcher.js +0 -141
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Store norske leksikon.js +0 -291
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Stuff.co.nz.js +0 -446
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Substack.js +0 -237
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Sud Ouest.js +0 -181
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Sueddeutsche.de.js +0 -205
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Summon 2.js +0 -117
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Superlib.js +0 -647
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Svenska Dagbladet.js +0 -274
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Sveriges radio.js +0 -416
- scitex/scholar/.legacy/metadata/urls/zotero_translators/TEI.js +0 -648
- scitex/scholar/.legacy/metadata/urls/zotero_translators/TV by the Numbers.js +0 -194
- scitex/scholar/.legacy/metadata/urls/zotero_translators/TVNZ.js +0 -165
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Tagesspiegel.js +0 -249
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Talis Aspire.js +0 -316
- scitex/scholar/.legacy/metadata/urls/zotero_translators/TalisPrism.js +0 -445
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Tatknigafund.js +0 -174
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Tatpressa.ru.js +0 -121
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Taylor & Francis eBooks.js +0 -334
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Taylor and Francis+NEJM.js +0 -813
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Tesis Doctorals en Xarxa.js +0 -233
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Art Newspaper.js +0 -268
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Atlantic.js +0 -535
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Boston Globe.js +0 -285
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Chronicle of Higher Education.js +0 -308
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Daily Beast.js +0 -183
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Economic Times - The Times of India.js +0 -305
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Economist.js +0 -207
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Free Dictionary.js +0 -58
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Globe and Mail.js +0 -241
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Guardian.js +0 -717
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Hamilton Spectator.js +0 -129
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Hindu.js +0 -318
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Independent.js +0 -184
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Intercept.js +0 -258
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Met.js +0 -300
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Microfinance Gateway.js +0 -174
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Nation.js +0 -188
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The National Archives (UK).js +0 -242
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The New Republic.js +0 -160
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The New York Review of Books.js +0 -467
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The New Yorker.js +0 -360
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Open Library.js +0 -220
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Straits Times.js +0 -528
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Telegraph.js +0 -337
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Times and Sunday Times.js +0 -180
- scitex/scholar/.legacy/metadata/urls/zotero_translators/The Times of Israel.js +0 -151
- scitex/scholar/.legacy/metadata/urls/zotero_translators/TheMarker.js +0 -108
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Theory of Computing.js +0 -488
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ThesesFR.js +0 -298
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Thieme.js +0 -326
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Time.com.js +0 -557
- scitex/scholar/.legacy/metadata/urls/zotero_translators/TimesMachine.js +0 -222
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Tony Blair Institute for Global Change.js +0 -195
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Toronto Star.js +0 -331
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Transportation Research Board.js +0 -253
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Treesearch.js +0 -535
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Trove.js +0 -616
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Tumblr.js +0 -179
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Twitter.js +0 -413
- scitex/scholar/.legacy/metadata/urls/zotero_translators/UChicago VuFind.js +0 -907
- scitex/scholar/.legacy/metadata/urls/zotero_translators/UNZ Print Archive.js +0 -276
- scitex/scholar/.legacy/metadata/urls/zotero_translators/UPCommons.js +0 -227
- scitex/scholar/.legacy/metadata/urls/zotero_translators/US National Archives Research Catalog.js +0 -275
- scitex/scholar/.legacy/metadata/urls/zotero_translators/USENIX.js +0 -151
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Ubiquity Journals.js +0 -228
- scitex/scholar/.legacy/metadata/urls/zotero_translators/University Press Scholarship.js +0 -301
- scitex/scholar/.legacy/metadata/urls/zotero_translators/University of California Press Books.js +0 -403
- scitex/scholar/.legacy/metadata/urls/zotero_translators/University of Chicago Press Books.js +0 -378
- scitex/scholar/.legacy/metadata/urls/zotero_translators/University of Wisconsin-Madison Libraries Catalog.js +0 -298
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Unqualified Dublin Core RDF.js +0 -153
- scitex/scholar/.legacy/metadata/urls/zotero_translators/UpToDate References.js +0 -203
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Vanity Fair.js +0 -242
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Verniana-Jules Verne Studies.js +0 -190
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Verso Books.js +0 -311
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Vice.js +0 -445
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Victoria & Albert Museum.js +0 -277
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Vimeo.js +0 -188
- scitex/scholar/.legacy/metadata/urls/zotero_translators/VoxEU.js +0 -151
- scitex/scholar/.legacy/metadata/urls/zotero_translators/WHO.js +0 -458
- scitex/scholar/.legacy/metadata/urls/zotero_translators/WIPO.js +0 -189
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wall Street Journal.js +0 -525
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wanfang Data.js +0 -310
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Washington Monthly.js +0 -195
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Washington Post.js +0 -447
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Web of Science Nextgen.js +0 -715
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Web of Science Tagged.js +0 -1242
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Web of Science.js +0 -228
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Welt Online.js +0 -161
- scitex/scholar/.legacy/metadata/urls/zotero_translators/WestLaw UK.js +0 -190
- scitex/scholar/.legacy/metadata/urls/zotero_translators/WikiLeaks PlusD.js +0 -182
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wikidata QuickStatements.js +0 -306
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wikidata.js +0 -911
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wikimedia Commons.js +0 -285
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wikipedia Citation Templates.js +0 -432
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wikipedia.js +0 -385
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wikisource.js +0 -399
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wikiwand.js +0 -122
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wiktionary.js +0 -141
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wildlife Biology in Practice.js +0 -172
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wiley Online Library.js +0 -1412
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wilson Center Digital Archive.js +0 -321
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Winnipeg Free Press.js +0 -204
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Wired.js +0 -249
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Womennews.js +0 -230
- scitex/scholar/.legacy/metadata/urls/zotero_translators/World Digital Library.js +0 -403
- scitex/scholar/.legacy/metadata/urls/zotero_translators/World History Connected.js +0 -185
- scitex/scholar/.legacy/metadata/urls/zotero_translators/World Shakespeare Bibliography Online.js +0 -595
- scitex/scholar/.legacy/metadata/urls/zotero_translators/WorldCat Discovery Service.js +0 -630
- scitex/scholar/.legacy/metadata/urls/zotero_translators/XML ContextObject.js +0 -274
- scitex/scholar/.legacy/metadata/urls/zotero_translators/YPSF.js +0 -224
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Yandex Books.js +0 -265
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Ynet.js +0 -171
- scitex/scholar/.legacy/metadata/urls/zotero_translators/YouTube.js +0 -209
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ZIPonline.js +0 -267
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ZOBODAT.js +0 -341
- scitex/scholar/.legacy/metadata/urls/zotero_translators/Zotero RDF.js +0 -583
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ZoteroBib.js +0 -94
- scitex/scholar/.legacy/metadata/urls/zotero_translators/arXiv.org.js +0 -1099
- scitex/scholar/.legacy/metadata/urls/zotero_translators/artnet.js +0 -207
- scitex/scholar/.legacy/metadata/urls/zotero_translators/beck-online.js +0 -1339
- scitex/scholar/.legacy/metadata/urls/zotero_translators/clinicaltrials.gov.js +0 -331
- scitex/scholar/.legacy/metadata/urls/zotero_translators/dLibra.js +0 -367
- scitex/scholar/.legacy/metadata/urls/zotero_translators/dejure.org.js +0 -242
- scitex/scholar/.legacy/metadata/urls/zotero_translators/deleted.txt +0 -132
- scitex/scholar/.legacy/metadata/urls/zotero_translators/dhistory.js +0 -103
- scitex/scholar/.legacy/metadata/urls/zotero_translators/digibib.net.js +0 -245
- scitex/scholar/.legacy/metadata/urls/zotero_translators/eLibrary.ru.js +0 -867
- scitex/scholar/.legacy/metadata/urls/zotero_translators/eLife.js +0 -462
- scitex/scholar/.legacy/metadata/urls/zotero_translators/eMJA.js +0 -246
- scitex/scholar/.legacy/metadata/urls/zotero_translators/eMedicine.js +0 -123
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ePrint IACR.js +0 -608
- scitex/scholar/.legacy/metadata/urls/zotero_translators/ebrary.js +0 -140
- scitex/scholar/.legacy/metadata/urls/zotero_translators/etatar.ru.js +0 -104
- scitex/scholar/.legacy/metadata/urls/zotero_translators/feb-web.ru.js +0 -167
- scitex/scholar/.legacy/metadata/urls/zotero_translators/fishpond.co.nz.js +0 -224
- scitex/scholar/.legacy/metadata/urls/zotero_translators/fr-online.de.js +0 -209
- scitex/scholar/.legacy/metadata/urls/zotero_translators/govinfo.js +0 -189
- scitex/scholar/.legacy/metadata/urls/zotero_translators/index.d.ts +0 -1646
- scitex/scholar/.legacy/metadata/urls/zotero_translators/informIT database.js +0 -248
- scitex/scholar/.legacy/metadata/urls/zotero_translators/io-port.js +0 -68
- scitex/scholar/.legacy/metadata/urls/zotero_translators/jsconfig.json +0 -10
- scitex/scholar/.legacy/metadata/urls/zotero_translators/jurion.js +0 -377
- scitex/scholar/.legacy/metadata/urls/zotero_translators/mEDRA.js +0 -597
- scitex/scholar/.legacy/metadata/urls/zotero_translators/magazines.russ.ru.js +0 -120
- scitex/scholar/.legacy/metadata/urls/zotero_translators/medes.js +0 -284
- scitex/scholar/.legacy/metadata/urls/zotero_translators/newshub.co.nz.js +0 -206
- scitex/scholar/.legacy/metadata/urls/zotero_translators/newspapers.com.js +0 -335
- scitex/scholar/.legacy/metadata/urls/zotero_translators/openJur.js +0 -161
- scitex/scholar/.legacy/metadata/urls/zotero_translators/package-lock.json +0 -2345
- scitex/scholar/.legacy/metadata/urls/zotero_translators/package.json +0 -24
- scitex/scholar/.legacy/metadata/urls/zotero_translators/reddit.js +0 -275
- scitex/scholar/.legacy/metadata/urls/zotero_translators/sbn.it.js +0 -186
- scitex/scholar/.legacy/metadata/urls/zotero_translators/scinapse.js +0 -273
- scitex/scholar/.legacy/metadata/urls/zotero_translators/semantics Visual Library.js +0 -643
- scitex/scholar/.legacy/metadata/urls/zotero_translators/taz.de.js +0 -200
- scitex/scholar/.legacy/metadata/urls/zotero_translators/unAPI.js +0 -481
- scitex/scholar/.legacy/metadata/urls/zotero_translators/wiso.js +0 -314
- scitex/scholar/.legacy/metadata/urls/zotero_translators/zbMATH.js +0 -278
- scitex/scholar/.legacy/metadata/urls/zotero_translators/zotero.org.js +0 -311
- scitex/scholar/.legacy/search/README.md +0 -205
- scitex/scholar/.legacy/search/_Embedder.py +0 -329
- scitex/scholar/.legacy/search/_SemanticSearch.py +0 -278
- scitex/scholar/.legacy/search/_SemanticSearchEngine.py +0 -452
- scitex/scholar/.legacy/search/_UnifiedSearcher.py +0 -1353
- scitex/scholar/.legacy/search/_VectorDatabase.py +0 -443
- scitex/scholar/.legacy/search/__init__.py +0 -25
- scitex/scholar/.legacy/storage/_EnhancedStorageManager.py +0 -617
- scitex/scholar/.legacy/storage/__init__.py +0 -19
- scitex/scholar/CLAUDE.md +0 -257
- scitex/scholar/TODO.md +0 -174
- scitex/scholar/_mcp_handlers.py +0 -685
- scitex/scholar/_mcp_tool_schemas.py +0 -339
- scitex/scholar/docs/backup/papers-orig.bib +0 -698
- scitex/scholar/docs/backup/papers.bib.zip +0 -0
- scitex/scholar/docs/to_claude/bin/elisp/check_parens.sh +0 -56
- scitex/scholar/docs/to_claude/bin/elisp/elisp-ci/README.md +0 -412
- scitex/scholar/docs/to_claude/bin/elisp/elisp-ci/elisp-ci +0 -622
- scitex/scholar/docs/to_claude/bin/elisp/elisp-ci/elisp-ci-simple +0 -105
- scitex/scholar/docs/to_claude/bin/elisp/find_incorrect_require_provide_statements.sh +0 -113
- scitex/scholar/docs/to_claude/bin/elisp/run_tests_elisp.sh +0 -532
- scitex/scholar/docs/to_claude/bin/elisp/run_tests_elisp_v02.sh +0 -555
- scitex/scholar/docs/to_claude/bin/elisp/sync_elisp_tdd.sh +0 -626
- scitex/scholar/docs/to_claude/bin/general/claude_emacs_server.sh +0 -192
- scitex/scholar/docs/to_claude/bin/general/create_github_release.sh +0 -36
- scitex/scholar/docs/to_claude/bin/general/find_errors.sh +0 -75
- scitex/scholar/docs/to_claude/bin/general/rename.sh +0 -145
- scitex/scholar/docs/to_claude/bin/general/render_mermaid.sh +0 -116
- scitex/scholar/docs/to_claude/bin/general/safe_rm.sh +0 -75
- scitex/scholar/docs/to_claude/bin/general/view_repo.sh +0 -4
- scitex/scholar/docs/to_claude/bin/general/wsl2-buzzer.sh +0 -73
- scitex/scholar/docs/to_claude/bin/python/black_all.sh +0 -41
- scitex/scholar/docs/to_claude/bin/python/run_tests_python_pip_package.sh +0 -291
- scitex/scholar/docs/to_claude/bin/safe_rm.sh +0 -3
- scitex/scholar/docs/to_claude/bin/slurm/README.md +0 -54
- scitex/scholar/docs/to_claude/bin/slurm/login.sh +0 -23
- scitex/scholar/docs/to_claude/bin/slurm/request.sh +0 -62
- scitex/scholar/docs/to_claude/bin/slurm/run.sh +0 -73
- scitex/scholar/docs/to_claude/examples/README.md +0 -9
- scitex/scholar/docs/to_claude/examples/example-elisp-project-emacs-hello-world/ELISP-TEST-REPORT-20250513-012234-48-PASSED-49-TOTAL-97-PERCENT.org +0 -105
- scitex/scholar/docs/to_claude/examples/example-elisp-project-emacs-hello-world/LATEST-ELISP-REPORT.org +0 -105
- scitex/scholar/docs/to_claude/examples/example-elisp-project-emacs-hello-world/README.md +0 -11
- scitex/scholar/docs/to_claude/examples/example-elisp-project-emacs-hello-world/run_tests.sh +0 -652
- scitex/scholar/docs/to_claude/examples/example-elisp-project-emacs-hello-world/tests/test-ehw-core/ELISP-TEST-REPORT-20250512-235622-0-SUCCESS-4-TOTAL-0-PERCENT.org +0 -25
- scitex/scholar/docs/to_claude/examples/example-elisp-project-emacs-hello-world/tests/test-ehw-friends/ELISP-TEST-REPORT-20250512-235622-0-SUCCESS-34-TOTAL-0-PERCENT.org +0 -66
- scitex/scholar/docs/to_claude/examples/example-elisp-project-emacs-hello-world/tests/test-ehw-prep/ELISP-TEST-REPORT-20250512-235622-0-SUCCESS-5-TOTAL-0-PERCENT.org +0 -26
- scitex/scholar/docs/to_claude/examples/example-elisp-project-emacs-hello-world/tests/test-ehw-utils/ELISP-TEST-REPORT-20250512-235622-0-SUCCESS-4-TOTAL-0-PERCENT.org +0 -25
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/.gitignore +0 -626
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/README.md +0 -155
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/config/MNIST.yaml +0 -24
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/config/PATH.yaml +0 -30
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/data/.gitkeep +0 -0
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/scripts/mnist/clf_svm.py +0 -124
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/scripts/mnist/download.py +0 -165
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/scripts/mnist/main.sh +0 -26
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/scripts/mnist/plot_conf_mat.py +0 -86
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/scripts/mnist/plot_digits.py +0 -118
- scitex/scholar/docs/to_claude/examples/example-python-project-scitex/scripts/mnist/plot_umap_space.py +0 -110
- scitex/scholar/docs/to_claude/guidelines/README.md +0 -9
- scitex/scholar/docs/to_claude/guidelines/USER_PHILOSOPHY/01_DEVELOPMENT_CYCLE.md +0 -47
- scitex/scholar/docs/to_claude/guidelines/USER_PHILOSOPHY/02_NAMING_CONVENSIONS.md +0 -91
- scitex/scholar/docs/to_claude/guidelines/USER_PHILOSOPHY/03_ARCHITECTUAL_AGREEMENT_PROCESS.md +0 -86
- scitex/scholar/docs/to_claude/guidelines/USER_PHILOSOPHY/04_ARCHITECTURE_PREDEFINED.md +0 -77
- scitex/scholar/docs/to_claude/guidelines/USER_PHILOSOPHY/05_PRIORITY_CONFIG.md +0 -22
- scitex/scholar/docs/to_claude/guidelines/USER_PHILOSOPHY/06_MULTIPLE_SPECIAL_AGENTS.md +0 -35
- scitex/scholar/docs/to_claude/guidelines/USER_PHILOSOPHY/07_DEBUGGING_TECHNIQUES.md +0 -153
- scitex/scholar/docs/to_claude/guidelines/command/IMPORTANT-rm.md +0 -69
- scitex/scholar/docs/to_claude/guidelines/command/IMPORTANT-tree.md +0 -162
- scitex/scholar/docs/to_claude/guidelines/elisp/IMPORTANT-ELISP-01-basic.md +0 -65
- scitex/scholar/docs/to_claude/guidelines/elisp/IMPORTANT-ELISP-02-project-structure.md +0 -97
- scitex/scholar/docs/to_claude/guidelines/elisp/IMPORTANT-ELISP-03-file-template.md +0 -70
- scitex/scholar/docs/to_claude/guidelines/elisp/IMPORTANT-ELISP-04-coding-style.md +0 -42
- scitex/scholar/docs/to_claude/guidelines/elisp/IMPORTANT-ELISP-05-testing-guide.md +0 -190
- scitex/scholar/docs/to_claude/guidelines/elisp/IMPORTANT-ELISP-99-example-project.md +0 -15
- scitex/scholar/docs/to_claude/guidelines/elisp/ci.md +0 -650
- scitex/scholar/docs/to_claude/guidelines/elisp/testing-with-docker.md +0 -243
- scitex/scholar/docs/to_claude/guidelines/programming_common/EXAMPLE-README-MODULE-ROOT.md +0 -32
- scitex/scholar/docs/to_claude/guidelines/programming_common/EXAMPLE-README-REPOSITORY-ROOT.md +0 -60
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-art-of-readable-code.md +0 -1317
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-art-of-testing.md +0 -799
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-cleanliness.md +0 -18
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-documentation-performance-claims.md +0 -163
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-general.md +0 -156
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-refactoring.md +0 -32
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-regression-prevention.md +0 -14
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-slurm.md +0 -73
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-start-from-small.md +0 -30
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-test-driven-workflow.md +0 -80
- scitex/scholar/docs/to_claude/guidelines/programming_common/IMPORTANT-version-control.md +0 -47
- scitex/scholar/docs/to_claude/guidelines/programming_common/clean-code.md +0 -305
- scitex/scholar/docs/to_claude/guidelines/programming_common/debugging-message.md +0 -52
- scitex/scholar/docs/to_claude/guidelines/programming_common/do-not-repeat-yourself.md +0 -27
- scitex/scholar/docs/to_claude/guidelines/programming_common/emacs-server.md +0 -39
- scitex/scholar/docs/to_claude/guidelines/programming_common/keep-it-simple-stupid.md +0 -19
- scitex/scholar/docs/to_claude/guidelines/programming_common/renaming-and-cleaning-workflow.md +0 -311
- scitex/scholar/docs/to_claude/guidelines/programming_common/screen.md +0 -32
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-CLAUDE_ID.md +0 -15
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-beyond-control.md +0 -14
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-bug-report.md +0 -43
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-cleanliness.md +0 -162
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-communication.md +0 -13
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-do-not-create-any-new-file-nor-directory-in-project-root.md +0 -9
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-documentation.md +0 -11
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-feature-request.md +0 -33
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-general-multi-agent-coordination.md +0 -311
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-multi-agent-protocol.md +0 -97
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-project-management-bulletin-board.md +0 -48
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-project-management-markdown.md +0 -156
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-project-management-org.org +0 -161
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-tools.md +0 -10
- scitex/scholar/docs/to_claude/guidelines/project/IMPORTANT-understand-message-in-filename.md +0 -12
- scitex/scholar/docs/to_claude/guidelines/project/general.md +0 -7
- scitex/scholar/docs/to_claude/guidelines/project/report.md +0 -50
- scitex/scholar/docs/to_claude/guidelines/project/timeline-gantt-chart.md +0 -49
- scitex/scholar/docs/to_claude/guidelines/python/CHECKLIST.md +0 -51
- scitex/scholar/docs/to_claude/guidelines/python/HOW-TO-DEBUG-with-MULTIPLE_AGENTS.md +0 -191
- scitex/scholar/docs/to_claude/guidelines/python/Machine-Learning.md +0 -15
- scitex/scholar/docs/to_claude/guidelines/python/NOT-FULL-PYTEST-BUT-PARTIAL-PYTEST.md +0 -21
- scitex/scholar/docs/to_claude/guidelines/python/django.md +0 -217
- scitex/scholar/docs/to_claude/guidelines/python/env.md +0 -10
- scitex/scholar/docs/to_claude/guidelines/python/general.md +0 -55
- scitex/scholar/docs/to_claude/guidelines/python/official/cipdb-README.md +0 -219
- scitex/scholar/docs/to_claude/guidelines/python/official/fastmcp-README.md +0 -442
- scitex/scholar/docs/to_claude/guidelines/python/official/fastmcp-TESTING.md +0 -146
- scitex/scholar/docs/to_claude/guidelines/python/official/icecream-README.md +0 -433
- scitex/scholar/docs/to_claude/guidelines/python/official/priority_config-README.md +0 -126
- scitex/scholar/docs/to_claude/guidelines/python/scitex/01-basic.md +0 -42
- scitex/scholar/docs/to_claude/guidelines/python/scitex/02-file-template.md +0 -132
- scitex/scholar/docs/to_claude/guidelines/python/scitex/03-configuration.md +0 -53
- scitex/scholar/docs/to_claude/guidelines/python/scitex/04-coding-style.md +0 -126
- scitex/scholar/docs/to_claude/guidelines/python/scitex/05-testing-guide.md +0 -56
- scitex/scholar/docs/to_claude/guidelines/python/scitex/06-examples-guide.md +0 -42
- scitex/scholar/docs/to_claude/guidelines/python/scitex/11-gen-module.md +0 -15
- scitex/scholar/docs/to_claude/guidelines/python/scitex/11-session-module.md +0 -24
- scitex/scholar/docs/to_claude/guidelines/python/scitex/12-io-module.md +0 -112
- scitex/scholar/docs/to_claude/guidelines/python/scitex/13-plt-module.md +0 -101
- scitex/scholar/docs/to_claude/guidelines/python/scitex/14-dsp-module.md +0 -78
- scitex/scholar/docs/to_claude/guidelines/python/scitex/15-pd-module.md +0 -24
- scitex/scholar/docs/to_claude/guidelines/python/scitex/16-stats-module.md +0 -79
- scitex/scholar/docs/to_claude/guidelines/python/scitex/17-other-modules.md +0 -23
- scitex/scholar/docs/to_claude/guidelines/python/scitex/17-str-module.md +0 -24
- scitex/scholar/docs/to_claude/guidelines/python/scitex/18-directory-structure-for-scientific-work.md +0 -48
- scitex/scholar/docs/to_claude/guidelines/python/scitex/19-directory-structure-for-pip-package.md +0 -234
- scitex/scholar/docs/to_claude/guidelines/python/scitex/99-example-project.md +0 -19
- scitex/scholar/docs/to_claude/guidelines/python/zen_of_python.md +0 -82
- scitex/scholar/docs/to_claude/guidelines/science/IMPORTANT-general.md +0 -16
- scitex/scholar/docs/to_claude/guidelines/science/IMPORTANT-scientific-attitude.md +0 -25
- scitex/scholar/docs/to_claude/guidelines/science/scientific-writing-abstract.md +0 -93
- scitex/scholar/docs/to_claude/guidelines/science/scientific-writing-discussion.md +0 -116
- scitex/scholar/docs/to_claude/guidelines/science/scientific-writing-general-1.md +0 -157
- scitex/scholar/docs/to_claude/guidelines/science/scientific-writing-general-2.md +0 -83
- scitex/scholar/docs/to_claude/guidelines/science/scientific-writing-introduction.md +0 -123
- scitex/scholar/docs/to_claude/guidelines/science/scientific-writing-methods.md +0 -88
- scitex/scholar/docs/to_claude/guidelines/shell/IMPORTANT-general.md +0 -196
- scitex/scholar/examples/SUGGESTIONS.md +0 -865
- scitex/scholar/examples/dev.py +0 -38
- scitex/scholar/library/neurovista/info/bibtex/seizure_prediction_enriched.bib +0 -1092
- scitex/stats/_mcp_handlers.py +0 -1191
- scitex/stats/_mcp_tool_schemas.py +0 -384
- scitex/template/.legacy/_clone_project.py +0 -267
- scitex/template/_mcp_handlers.py +0 -259
- scitex/template/_mcp_tool_schemas.py +0 -112
- scitex/writer/.legacy/Writer_v01-refactored.py +0 -189
- scitex/writer/.legacy/_compile.py +0 -342
- scitex/writer/_compile_async.py +0 -126
- scitex/writer/_validate_tree_structures.py +0 -197
- scitex/writer/dataclasses/config/_WriterConfig.py +0 -175
- scitex/writer/dataclasses/contents/_ManuscriptContents.py +0 -236
- scitex/writer/dataclasses/core/_Document.py +0 -146
- scitex/writer/dataclasses/core/_DocumentSection.py +0 -546
- scitex/writer/dataclasses/results/_CompilationResult.py +0 -165
- scitex/writer/dataclasses/results/_LaTeXIssue.py +0 -102
- scitex/writer/dataclasses/tree/MINIMUM_FILES.md +0 -121
- scitex/writer/tests/__init__.py +0 -3
- scitex/writer/tests/test_diff_between.py +0 -451
- scitex/writer/tests/test_document_section.py +0 -311
- scitex/writer/tests/test_document_workflow.py +0 -393
- scitex/writer/tests/test_writer.py +0 -361
- scitex/writer/tests/test_writer_integration.py +0 -303
- scitex-2.13.0.dist-info/METADATA +0 -1231
- scitex-2.13.0.dist-info/RECORD +0 -3402
- scitex-2.13.0.dist-info/entry_points.txt +0 -11
- /scitex/scholar/docs/{SUMMARY.md → 00_SUMMARY.md} +0 -0
- /scitex/scholar/docs/{STORAGE_ARCHITECTURE.md → 01_STORAGE_ARCHITECTURE.md} +0 -0
- /scitex/scholar/docs/{PIPELINE_ORGANIZATION.md → 02_PIPELINE_ORGANIZATION.md} +0 -0
- /scitex/scholar/docs/{PIPELINE_IMPLEMENTATION_PLAN.md → 03_PIPELINE_IMPLEMENTATION_PLAN.md} +0 -0
- /scitex/scholar/docs/{PIPELINE_IMPLEMENTATION_COMPLETE.md → 04_PIPELINE_IMPLEMENTATION_COMPLETE.md} +0 -0
- /scitex/scholar/docs/{DETAILS_FOR_DEVELOPERS.md → 05_DETAILS_FOR_DEVELOPERS.md} +0 -0
- /scitex/scholar/docs/{IMPACT_FACTOR_CITATION_INTEGRATION.md → 06_IMPACT_FACTOR_CITATION_INTEGRATION.md} +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/__init__.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/config/_CONSTANTS.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/config/__init__.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/contents/_RevisionContents.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/contents/_SupplementaryContents.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/contents/__init__.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/core/__init__.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/results/_SaveSectionsResponse.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/results/_SectionReadResponse.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/results/__init__.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/tree/_ConfigTree.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/tree/_ManuscriptTree.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/tree/_RevisionTree.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/tree/_ScriptsTree.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/tree/_SharedTree.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/tree/_SupplementaryTree.py +0 -0
- /scitex/writer/{dataclasses → _dataclasses}/tree/__init__.py +0 -0
- {scitex-2.13.0.dist-info → scitex-2.15.1.dist-info}/WHEEL +0 -0
- {scitex-2.13.0.dist-info → scitex-2.15.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,1194 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
# Timestamp: "2025-08-01 13:50:00 (ywatanabe)"
|
|
4
|
-
# File: /home/ywatanabe/proj/scitex_repo/src/scitex/scholar/database/_ZoteroCompatibleDB.py
|
|
5
|
-
# ----------------------------------------
|
|
6
|
-
from __future__ import annotations
|
|
7
|
-
import os
|
|
8
|
-
|
|
9
|
-
__FILE__ = __file__
|
|
10
|
-
__DIR__ = os.path.dirname(__FILE__)
|
|
11
|
-
# ----------------------------------------
|
|
12
|
-
|
|
13
|
-
"""Zotero-compatible scholar database with enrichment workflow.
|
|
14
|
-
|
|
15
|
-
Implements the workflow:
|
|
16
|
-
1. Partial info (title, authors, year) → DOI resolution
|
|
17
|
-
2. DOI → Enrichment (metadata from multiple sources)
|
|
18
|
-
3. Storage in Zotero-compatible structure
|
|
19
|
-
|
|
20
|
-
Key features:
|
|
21
|
-
- Mimics Zotero's database schema for easy import/export
|
|
22
|
-
- Tracks metadata sources for all fields
|
|
23
|
-
- Supports incremental enrichment
|
|
24
|
-
- Maintains Zotero's storage structure
|
|
25
|
-
"""
|
|
26
|
-
|
|
27
|
-
import hashlib
|
|
28
|
-
import json
|
|
29
|
-
import os
|
|
30
|
-
import random
|
|
31
|
-
import re
|
|
32
|
-
import shutil
|
|
33
|
-
import sqlite3
|
|
34
|
-
import string
|
|
35
|
-
import time
|
|
36
|
-
from contextlib import contextmanager
|
|
37
|
-
from datetime import datetime
|
|
38
|
-
from pathlib import Path
|
|
39
|
-
from typing import Any, Dict, List, Optional, Tuple, Union
|
|
40
|
-
|
|
41
|
-
from scitex import logging
|
|
42
|
-
|
|
43
|
-
logger = logging.getLogger(__name__)
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
class ZoteroCompatibleDB:
|
|
47
|
-
"""Zotero-compatible database with enrichment workflow.
|
|
48
|
-
|
|
49
|
-
Follows Zotero's schema and storage patterns for compatibility while
|
|
50
|
-
adding source tracking and enrichment capabilities.
|
|
51
|
-
"""
|
|
52
|
-
|
|
53
|
-
# Zotero-compatible item types
|
|
54
|
-
ITEM_TYPES = {
|
|
55
|
-
"journalArticle": 1,
|
|
56
|
-
"book": 2,
|
|
57
|
-
"bookSection": 3,
|
|
58
|
-
"thesis": 4,
|
|
59
|
-
"conferencePaper": 5,
|
|
60
|
-
"preprint": 6,
|
|
61
|
-
"report": 7,
|
|
62
|
-
"webpage": 8,
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
# Field mappings (Zotero fieldID to our field names)
|
|
66
|
-
FIELD_MAP = {
|
|
67
|
-
1: "title",
|
|
68
|
-
2: "abstract",
|
|
69
|
-
3: "journal",
|
|
70
|
-
4: "volume",
|
|
71
|
-
5: "issue",
|
|
72
|
-
6: "pages",
|
|
73
|
-
7: "date",
|
|
74
|
-
8: "DOI",
|
|
75
|
-
9: "url",
|
|
76
|
-
10: "accessDate",
|
|
77
|
-
11: "extra", # We use this for source tracking
|
|
78
|
-
12: "publisher",
|
|
79
|
-
13: "place",
|
|
80
|
-
14: "series",
|
|
81
|
-
15: "seriesNumber",
|
|
82
|
-
16: "ISBN",
|
|
83
|
-
17: "ISSN",
|
|
84
|
-
18: "shortTitle",
|
|
85
|
-
19: "archive",
|
|
86
|
-
20: "archiveLocation",
|
|
87
|
-
21: "libraryCatalog",
|
|
88
|
-
22: "callNumber",
|
|
89
|
-
23: "rights",
|
|
90
|
-
24: "language",
|
|
91
|
-
25: "dateAdded",
|
|
92
|
-
26: "dateModified",
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
def __init__(self, base_dir: Optional[Path] = None, library_name: str = "default"):
|
|
96
|
-
"""Initialize Zotero-compatible database.
|
|
97
|
-
|
|
98
|
-
Args:
|
|
99
|
-
base_dir: Base directory (default: $SCITEX_DIR/scholar/library/<library_name>)
|
|
100
|
-
library_name: Name of the library (default: "default")
|
|
101
|
-
"""
|
|
102
|
-
# Determine base directory
|
|
103
|
-
if base_dir is None:
|
|
104
|
-
# Check environment variable first
|
|
105
|
-
scitex_dir = os.getenv("SCITEX_DIR")
|
|
106
|
-
if scitex_dir:
|
|
107
|
-
base_dir = Path(scitex_dir) / "scholar" / "library" / library_name
|
|
108
|
-
else:
|
|
109
|
-
# Fallback to ~/.scitex
|
|
110
|
-
base_dir = (
|
|
111
|
-
Path.home() / ".scitex" / "scholar" / "library" / library_name
|
|
112
|
-
)
|
|
113
|
-
|
|
114
|
-
logger.info(f"Using library directory: {base_dir}")
|
|
115
|
-
|
|
116
|
-
self.base_dir = Path(base_dir)
|
|
117
|
-
self.library_name = library_name
|
|
118
|
-
self.db_path = self.base_dir / "zotero.sqlite"
|
|
119
|
-
self.storage_dir = self.base_dir / "storage"
|
|
120
|
-
|
|
121
|
-
# Detect platform
|
|
122
|
-
import platform
|
|
123
|
-
|
|
124
|
-
self.is_windows = platform.system() == "Windows"
|
|
125
|
-
self.is_wsl = "microsoft" in platform.uname().release.lower()
|
|
126
|
-
|
|
127
|
-
# Create structure
|
|
128
|
-
self._init_directories()
|
|
129
|
-
self._init_database()
|
|
130
|
-
|
|
131
|
-
# Create library config
|
|
132
|
-
self._save_library_config()
|
|
133
|
-
|
|
134
|
-
def _init_directories(self):
|
|
135
|
-
"""Create Zotero-style directory structure with human-readable organization."""
|
|
136
|
-
self.base_dir.mkdir(parents=True, exist_ok=True)
|
|
137
|
-
|
|
138
|
-
# Primary storage (Zotero-style)
|
|
139
|
-
(self.storage_dir / "by_key").mkdir(parents=True, exist_ok=True)
|
|
140
|
-
|
|
141
|
-
# Human-readable organization
|
|
142
|
-
(self.storage_dir / "by_citation").mkdir(exist_ok=True)
|
|
143
|
-
(self.storage_dir / "by_year").mkdir(exist_ok=True)
|
|
144
|
-
(self.storage_dir / "by_journal").mkdir(exist_ok=True)
|
|
145
|
-
(self.storage_dir / "by_topic").mkdir(exist_ok=True)
|
|
146
|
-
|
|
147
|
-
# Windows shortcuts directory (separate from symlinks)
|
|
148
|
-
if self.is_windows or self.is_wsl:
|
|
149
|
-
(self.storage_dir / "shortcuts_windows").mkdir(exist_ok=True)
|
|
150
|
-
|
|
151
|
-
# Zotero compatibility directories
|
|
152
|
-
(self.base_dir / "translators").mkdir(exist_ok=True)
|
|
153
|
-
(self.base_dir / "styles").mkdir(exist_ok=True)
|
|
154
|
-
(self.base_dir / "locate").mkdir(exist_ok=True)
|
|
155
|
-
|
|
156
|
-
def _init_database(self):
|
|
157
|
-
"""Initialize Zotero-compatible database schema."""
|
|
158
|
-
with self._get_connection() as conn:
|
|
159
|
-
# Zotero settings
|
|
160
|
-
conn.execute("PRAGMA page_size=4096")
|
|
161
|
-
conn.execute("PRAGMA journal_mode=WAL")
|
|
162
|
-
conn.execute("PRAGMA synchronous=NORMAL")
|
|
163
|
-
|
|
164
|
-
# Version info (Zotero compatibility)
|
|
165
|
-
conn.execute("""
|
|
166
|
-
CREATE TABLE IF NOT EXISTS version (
|
|
167
|
-
schema TEXT PRIMARY KEY,
|
|
168
|
-
version INT NOT NULL
|
|
169
|
-
)
|
|
170
|
-
""")
|
|
171
|
-
conn.execute("INSERT OR REPLACE INTO version VALUES ('userdata', 120)")
|
|
172
|
-
|
|
173
|
-
# Libraries (simplified - we use single library)
|
|
174
|
-
conn.execute("""
|
|
175
|
-
CREATE TABLE IF NOT EXISTS libraries (
|
|
176
|
-
libraryID INTEGER PRIMARY KEY,
|
|
177
|
-
type TEXT NOT NULL,
|
|
178
|
-
editable INT NOT NULL,
|
|
179
|
-
filesEditable INT NOT NULL
|
|
180
|
-
)
|
|
181
|
-
""")
|
|
182
|
-
conn.execute("""
|
|
183
|
-
INSERT OR IGNORE INTO libraries VALUES (1, 'user', 1, 1)
|
|
184
|
-
""")
|
|
185
|
-
|
|
186
|
-
# Items (main table)
|
|
187
|
-
conn.execute("""
|
|
188
|
-
CREATE TABLE IF NOT EXISTS items (
|
|
189
|
-
itemID INTEGER PRIMARY KEY,
|
|
190
|
-
itemTypeID INT NOT NULL,
|
|
191
|
-
dateAdded TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
192
|
-
dateModified TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
193
|
-
clientDateModified TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
194
|
-
libraryID INT,
|
|
195
|
-
key TEXT NOT NULL, -- 8-character key
|
|
196
|
-
version INT DEFAULT 0,
|
|
197
|
-
synced INT DEFAULT 0,
|
|
198
|
-
UNIQUE(libraryID, key),
|
|
199
|
-
FOREIGN KEY (libraryID) REFERENCES libraries(libraryID)
|
|
200
|
-
)
|
|
201
|
-
""")
|
|
202
|
-
|
|
203
|
-
# Item data values
|
|
204
|
-
conn.execute("""
|
|
205
|
-
CREATE TABLE IF NOT EXISTS itemDataValues (
|
|
206
|
-
valueID INTEGER PRIMARY KEY,
|
|
207
|
-
value TEXT UNIQUE
|
|
208
|
-
)
|
|
209
|
-
""")
|
|
210
|
-
|
|
211
|
-
# Item data (field values)
|
|
212
|
-
conn.execute("""
|
|
213
|
-
CREATE TABLE IF NOT EXISTS itemData (
|
|
214
|
-
itemID INT,
|
|
215
|
-
fieldID INT,
|
|
216
|
-
valueID INT,
|
|
217
|
-
PRIMARY KEY (itemID, fieldID),
|
|
218
|
-
FOREIGN KEY (itemID) REFERENCES items(itemID),
|
|
219
|
-
FOREIGN KEY (valueID) REFERENCES itemDataValues(valueID)
|
|
220
|
-
)
|
|
221
|
-
""")
|
|
222
|
-
|
|
223
|
-
# Creators
|
|
224
|
-
conn.execute("""
|
|
225
|
-
CREATE TABLE IF NOT EXISTS creators (
|
|
226
|
-
creatorID INTEGER PRIMARY KEY,
|
|
227
|
-
firstName TEXT,
|
|
228
|
-
lastName TEXT,
|
|
229
|
-
fieldMode INT, -- 0=two fields, 1=single field
|
|
230
|
-
UNIQUE(firstName, lastName)
|
|
231
|
-
)
|
|
232
|
-
""")
|
|
233
|
-
|
|
234
|
-
# Item creators
|
|
235
|
-
conn.execute("""
|
|
236
|
-
CREATE TABLE IF NOT EXISTS itemCreators (
|
|
237
|
-
itemID INT,
|
|
238
|
-
creatorID INT,
|
|
239
|
-
creatorTypeID INT DEFAULT 1, -- 1=author
|
|
240
|
-
orderIndex INT,
|
|
241
|
-
PRIMARY KEY (itemID, orderIndex),
|
|
242
|
-
FOREIGN KEY (itemID) REFERENCES items(itemID),
|
|
243
|
-
FOREIGN KEY (creatorID) REFERENCES creators(creatorID)
|
|
244
|
-
)
|
|
245
|
-
""")
|
|
246
|
-
|
|
247
|
-
# Collections
|
|
248
|
-
conn.execute("""
|
|
249
|
-
CREATE TABLE IF NOT EXISTS collections (
|
|
250
|
-
collectionID INTEGER PRIMARY KEY,
|
|
251
|
-
collectionName TEXT,
|
|
252
|
-
parentCollectionID INT,
|
|
253
|
-
dateAdded TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
254
|
-
dateModified TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
255
|
-
clientDateModified TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
256
|
-
libraryID INT,
|
|
257
|
-
key TEXT NOT NULL,
|
|
258
|
-
version INT DEFAULT 0,
|
|
259
|
-
synced INT DEFAULT 0,
|
|
260
|
-
UNIQUE(libraryID, key),
|
|
261
|
-
FOREIGN KEY (libraryID) REFERENCES libraries(libraryID),
|
|
262
|
-
FOREIGN KEY (parentCollectionID) REFERENCES collections(collectionID)
|
|
263
|
-
)
|
|
264
|
-
""")
|
|
265
|
-
|
|
266
|
-
# Collection items
|
|
267
|
-
conn.execute("""
|
|
268
|
-
CREATE TABLE IF NOT EXISTS collectionItems (
|
|
269
|
-
collectionID INT,
|
|
270
|
-
itemID INT,
|
|
271
|
-
orderIndex INT,
|
|
272
|
-
PRIMARY KEY (collectionID, itemID),
|
|
273
|
-
FOREIGN KEY (collectionID) REFERENCES collections(collectionID),
|
|
274
|
-
FOREIGN KEY (itemID) REFERENCES items(itemID)
|
|
275
|
-
)
|
|
276
|
-
""")
|
|
277
|
-
|
|
278
|
-
# Tags
|
|
279
|
-
conn.execute("""
|
|
280
|
-
CREATE TABLE IF NOT EXISTS tags (
|
|
281
|
-
tagID INTEGER PRIMARY KEY,
|
|
282
|
-
name TEXT NOT NULL UNIQUE
|
|
283
|
-
)
|
|
284
|
-
""")
|
|
285
|
-
|
|
286
|
-
# Item tags
|
|
287
|
-
conn.execute("""
|
|
288
|
-
CREATE TABLE IF NOT EXISTS itemTags (
|
|
289
|
-
itemID INT,
|
|
290
|
-
tagID INT,
|
|
291
|
-
type INT DEFAULT 0,
|
|
292
|
-
PRIMARY KEY (itemID, tagID),
|
|
293
|
-
FOREIGN KEY (itemID) REFERENCES items(itemID),
|
|
294
|
-
FOREIGN KEY (tagID) REFERENCES tags(tagID)
|
|
295
|
-
)
|
|
296
|
-
""")
|
|
297
|
-
|
|
298
|
-
# Item attachments
|
|
299
|
-
conn.execute("""
|
|
300
|
-
CREATE TABLE IF NOT EXISTS itemAttachments (
|
|
301
|
-
itemID INTEGER PRIMARY KEY,
|
|
302
|
-
parentItemID INT,
|
|
303
|
-
linkMode INT, -- 0=imported file, 1=linked file, 2=imported URL
|
|
304
|
-
contentType TEXT,
|
|
305
|
-
charsetID INT,
|
|
306
|
-
path TEXT,
|
|
307
|
-
syncState INT DEFAULT 0,
|
|
308
|
-
storageModTime INT,
|
|
309
|
-
storageHash TEXT,
|
|
310
|
-
FOREIGN KEY (itemID) REFERENCES items(itemID),
|
|
311
|
-
FOREIGN KEY (parentItemID) REFERENCES items(itemID)
|
|
312
|
-
)
|
|
313
|
-
""")
|
|
314
|
-
|
|
315
|
-
# Item notes
|
|
316
|
-
conn.execute("""
|
|
317
|
-
CREATE TABLE IF NOT EXISTS itemNotes (
|
|
318
|
-
itemID INTEGER PRIMARY KEY,
|
|
319
|
-
parentItemID INT,
|
|
320
|
-
note TEXT,
|
|
321
|
-
title TEXT,
|
|
322
|
-
FOREIGN KEY (itemID) REFERENCES items(itemID),
|
|
323
|
-
FOREIGN KEY (parentItemID) REFERENCES items(itemID)
|
|
324
|
-
)
|
|
325
|
-
""")
|
|
326
|
-
|
|
327
|
-
# Deleted items
|
|
328
|
-
conn.execute("""
|
|
329
|
-
CREATE TABLE IF NOT EXISTS deletedItems (
|
|
330
|
-
itemID INTEGER PRIMARY KEY,
|
|
331
|
-
dateDeleted DEFAULT CURRENT_TIMESTAMP
|
|
332
|
-
)
|
|
333
|
-
""")
|
|
334
|
-
|
|
335
|
-
# Full text content
|
|
336
|
-
conn.execute("""
|
|
337
|
-
CREATE TABLE IF NOT EXISTS fulltextItems (
|
|
338
|
-
itemID INTEGER PRIMARY KEY,
|
|
339
|
-
indexedPages INT,
|
|
340
|
-
totalPages INT,
|
|
341
|
-
indexedChars INT,
|
|
342
|
-
totalChars INT,
|
|
343
|
-
version INT DEFAULT 0,
|
|
344
|
-
synced INT DEFAULT 0,
|
|
345
|
-
FOREIGN KEY (itemID) REFERENCES items(itemID)
|
|
346
|
-
)
|
|
347
|
-
""")
|
|
348
|
-
|
|
349
|
-
# Full text words
|
|
350
|
-
conn.execute("""
|
|
351
|
-
CREATE TABLE IF NOT EXISTS fulltextWords (
|
|
352
|
-
wordID INTEGER PRIMARY KEY,
|
|
353
|
-
word TEXT UNIQUE
|
|
354
|
-
)
|
|
355
|
-
""")
|
|
356
|
-
|
|
357
|
-
# Full text item words
|
|
358
|
-
conn.execute("""
|
|
359
|
-
CREATE TABLE IF NOT EXISTS fulltextItemWords (
|
|
360
|
-
wordID INT,
|
|
361
|
-
itemID INT,
|
|
362
|
-
PRIMARY KEY (wordID, itemID),
|
|
363
|
-
FOREIGN KEY (wordID) REFERENCES fulltextWords(wordID),
|
|
364
|
-
FOREIGN KEY (itemID) REFERENCES items(itemID)
|
|
365
|
-
)
|
|
366
|
-
""")
|
|
367
|
-
|
|
368
|
-
# SciTeX extensions
|
|
369
|
-
|
|
370
|
-
# Source tracking table
|
|
371
|
-
conn.execute("""
|
|
372
|
-
CREATE TABLE IF NOT EXISTS scitex_field_sources (
|
|
373
|
-
itemID INT,
|
|
374
|
-
fieldName TEXT,
|
|
375
|
-
source TEXT,
|
|
376
|
-
confidence REAL,
|
|
377
|
-
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
378
|
-
PRIMARY KEY (itemID, fieldName),
|
|
379
|
-
FOREIGN KEY (itemID) REFERENCES items(itemID)
|
|
380
|
-
)
|
|
381
|
-
""")
|
|
382
|
-
|
|
383
|
-
# Enrichment status
|
|
384
|
-
conn.execute("""
|
|
385
|
-
CREATE TABLE IF NOT EXISTS scitex_enrichment_status (
|
|
386
|
-
itemID INTEGER PRIMARY KEY,
|
|
387
|
-
doi_resolved BOOLEAN DEFAULT 0,
|
|
388
|
-
metadata_enriched BOOLEAN DEFAULT 0,
|
|
389
|
-
pdf_download BOOLEAN DEFAULT 0,
|
|
390
|
-
fulltext_extracted BOOLEAN DEFAULT 0,
|
|
391
|
-
last_enrichment TIMESTAMP,
|
|
392
|
-
enrichment_errors TEXT, -- JSON
|
|
393
|
-
FOREIGN KEY (itemID) REFERENCES items(itemID)
|
|
394
|
-
)
|
|
395
|
-
""")
|
|
396
|
-
|
|
397
|
-
# Create indexes
|
|
398
|
-
conn.execute("CREATE INDEX IF NOT EXISTS idx_items_key ON items(key)")
|
|
399
|
-
conn.execute(
|
|
400
|
-
"CREATE INDEX IF NOT EXISTS idx_items_dateAdded ON items(dateAdded)"
|
|
401
|
-
)
|
|
402
|
-
conn.execute(
|
|
403
|
-
"CREATE INDEX IF NOT EXISTS idx_items_dateModified ON items(dateModified)"
|
|
404
|
-
)
|
|
405
|
-
conn.execute(
|
|
406
|
-
"CREATE INDEX IF NOT EXISTS idx_itemData_value ON itemData(itemID, valueID)"
|
|
407
|
-
)
|
|
408
|
-
|
|
409
|
-
conn.commit()
|
|
410
|
-
|
|
411
|
-
@contextmanager
|
|
412
|
-
def _get_connection(self):
|
|
413
|
-
"""Get database connection."""
|
|
414
|
-
conn = sqlite3.connect(self.db_path, timeout=30.0)
|
|
415
|
-
conn.row_factory = sqlite3.Row
|
|
416
|
-
try:
|
|
417
|
-
yield conn
|
|
418
|
-
finally:
|
|
419
|
-
conn.close()
|
|
420
|
-
|
|
421
|
-
def _generate_key(self, length: int = 8) -> str:
|
|
422
|
-
"""Generate Zotero-style key."""
|
|
423
|
-
# Zotero uses base32-like encoding
|
|
424
|
-
chars = string.ascii_uppercase + string.digits
|
|
425
|
-
# Avoid ambiguous characters
|
|
426
|
-
chars = (
|
|
427
|
-
chars.replace("0", "").replace("O", "").replace("1", "").replace("I", "")
|
|
428
|
-
)
|
|
429
|
-
return "".join(random.choice(chars) for _ in range(length))
|
|
430
|
-
|
|
431
|
-
def _get_or_create_value(self, conn: sqlite3.Connection, value: Any) -> int:
|
|
432
|
-
"""Get or create value in itemDataValues table."""
|
|
433
|
-
if value is None:
|
|
434
|
-
return None
|
|
435
|
-
|
|
436
|
-
value_str = str(value)
|
|
437
|
-
|
|
438
|
-
cursor = conn.execute(
|
|
439
|
-
"SELECT valueID FROM itemDataValues WHERE value = ?", (value_str,)
|
|
440
|
-
)
|
|
441
|
-
row = cursor.fetchone()
|
|
442
|
-
|
|
443
|
-
if row:
|
|
444
|
-
return row["valueID"]
|
|
445
|
-
else:
|
|
446
|
-
cursor = conn.execute(
|
|
447
|
-
"INSERT INTO itemDataValues (value) VALUES (?)", (value_str,)
|
|
448
|
-
)
|
|
449
|
-
return cursor.lastrowid
|
|
450
|
-
|
|
451
|
-
def _get_field_id(self, field_name: str) -> Optional[int]:
|
|
452
|
-
"""Get Zotero fieldID from field name."""
|
|
453
|
-
# Reverse lookup in field map
|
|
454
|
-
for field_id, name in self.FIELD_MAP.items():
|
|
455
|
-
if name == field_name:
|
|
456
|
-
return field_id
|
|
457
|
-
# Handle special cases
|
|
458
|
-
if field_name == "doi":
|
|
459
|
-
return 8 # DOI fieldID
|
|
460
|
-
return None
|
|
461
|
-
|
|
462
|
-
def add_item_from_partial(
|
|
463
|
-
self, partial_info: Dict[str, Any], item_type: str = "journalArticle"
|
|
464
|
-
) -> int:
|
|
465
|
-
"""Add item from partial information (step 1 of workflow).
|
|
466
|
-
|
|
467
|
-
Args:
|
|
468
|
-
partial_info: Dict with title, authors, year, etc.
|
|
469
|
-
item_type: Zotero item type
|
|
470
|
-
|
|
471
|
-
Returns:
|
|
472
|
-
Item ID
|
|
473
|
-
"""
|
|
474
|
-
with self._get_connection() as conn:
|
|
475
|
-
# Create item
|
|
476
|
-
key = self._generate_key()
|
|
477
|
-
item_type_id = self.ITEM_TYPES.get(item_type, 1)
|
|
478
|
-
|
|
479
|
-
cursor = conn.execute(
|
|
480
|
-
"""
|
|
481
|
-
INSERT INTO items (itemTypeID, libraryID, key)
|
|
482
|
-
VALUES (?, 1, ?)
|
|
483
|
-
""",
|
|
484
|
-
(item_type_id, key),
|
|
485
|
-
)
|
|
486
|
-
item_id = cursor.lastrowid
|
|
487
|
-
|
|
488
|
-
# Add basic fields
|
|
489
|
-
fields_to_add = {
|
|
490
|
-
"title": partial_info.get("title"),
|
|
491
|
-
"date": str(partial_info.get("year"))
|
|
492
|
-
if partial_info.get("year")
|
|
493
|
-
else None,
|
|
494
|
-
"DOI": partial_info.get("doi"),
|
|
495
|
-
"url": partial_info.get("url"),
|
|
496
|
-
"journal": partial_info.get("journal"),
|
|
497
|
-
"abstract": partial_info.get("abstract"),
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
for field_name, value in fields_to_add.items():
|
|
501
|
-
if value:
|
|
502
|
-
self._set_item_field(conn, item_id, field_name, value)
|
|
503
|
-
|
|
504
|
-
# Track source
|
|
505
|
-
source = partial_info.get(f"{field_name}_source", "initial_import")
|
|
506
|
-
self._track_field_source(conn, item_id, field_name, source)
|
|
507
|
-
|
|
508
|
-
# Add creators
|
|
509
|
-
authors = partial_info.get("authors", [])
|
|
510
|
-
for idx, author in enumerate(authors):
|
|
511
|
-
self._add_creator(conn, item_id, author, idx)
|
|
512
|
-
|
|
513
|
-
# Add tags/keywords
|
|
514
|
-
keywords = partial_info.get("keywords", [])
|
|
515
|
-
for keyword in keywords:
|
|
516
|
-
self._add_tag(conn, item_id, keyword)
|
|
517
|
-
|
|
518
|
-
# Initialize enrichment status
|
|
519
|
-
conn.execute(
|
|
520
|
-
"""
|
|
521
|
-
INSERT INTO scitex_enrichment_status (itemID)
|
|
522
|
-
VALUES (?)
|
|
523
|
-
""",
|
|
524
|
-
(item_id,),
|
|
525
|
-
)
|
|
526
|
-
|
|
527
|
-
conn.commit()
|
|
528
|
-
|
|
529
|
-
# Create storage directory
|
|
530
|
-
storage_path = self.storage_dir / key
|
|
531
|
-
storage_path.mkdir(exist_ok=True)
|
|
532
|
-
|
|
533
|
-
logger.info(
|
|
534
|
-
f"Added item {item_id} with key {key}: {partial_info.get('title', '')[:50]}..."
|
|
535
|
-
)
|
|
536
|
-
|
|
537
|
-
# Create human-readable links
|
|
538
|
-
self._create_human_readable_links(item_id, key, partial_info)
|
|
539
|
-
|
|
540
|
-
return item_id
|
|
541
|
-
|
|
542
|
-
def _create_human_readable_links(
|
|
543
|
-
self, item_id: int, key: str, metadata: Dict[str, Any]
|
|
544
|
-
):
|
|
545
|
-
"""Create human-readable symlinks and Windows shortcuts."""
|
|
546
|
-
# Generate citation-style name
|
|
547
|
-
citation_name = self._generate_citation_name(metadata)
|
|
548
|
-
|
|
549
|
-
# Primary storage path
|
|
550
|
-
primary_path = self.storage_dir / "by_key" / key
|
|
551
|
-
|
|
552
|
-
# Create by_citation links
|
|
553
|
-
citation_dir = self.storage_dir / "by_citation" / citation_name
|
|
554
|
-
citation_dir.mkdir(parents=True, exist_ok=True)
|
|
555
|
-
|
|
556
|
-
# Create symlinks (works on Linux/Mac/WSL)
|
|
557
|
-
if not self.is_windows:
|
|
558
|
-
self._create_symlink(primary_path, citation_dir / f"{citation_name}-{key}")
|
|
559
|
-
|
|
560
|
-
# Create Windows shortcuts
|
|
561
|
-
if self.is_windows or self.is_wsl:
|
|
562
|
-
self._create_windows_shortcut(
|
|
563
|
-
primary_path,
|
|
564
|
-
self.storage_dir
|
|
565
|
-
/ "shortcuts_windows"
|
|
566
|
-
/ citation_name
|
|
567
|
-
/ f"{citation_name}-{key}.lnk",
|
|
568
|
-
)
|
|
569
|
-
|
|
570
|
-
# Create by_year organization
|
|
571
|
-
year = metadata.get("year")
|
|
572
|
-
if year:
|
|
573
|
-
year_dir = self.storage_dir / "by_year" / str(year)
|
|
574
|
-
year_dir.mkdir(parents=True, exist_ok=True)
|
|
575
|
-
|
|
576
|
-
if not self.is_windows:
|
|
577
|
-
self._create_symlink(primary_path, year_dir / f"{citation_name}-{key}")
|
|
578
|
-
|
|
579
|
-
# Create by_journal organization
|
|
580
|
-
journal = metadata.get("journal")
|
|
581
|
-
if journal:
|
|
582
|
-
safe_journal = self._sanitize_filename(journal)[:50]
|
|
583
|
-
journal_dir = self.storage_dir / "by_journal" / safe_journal
|
|
584
|
-
journal_dir.mkdir(parents=True, exist_ok=True)
|
|
585
|
-
|
|
586
|
-
if not self.is_windows:
|
|
587
|
-
self._create_symlink(
|
|
588
|
-
primary_path, journal_dir / f"{citation_name}-{key}"
|
|
589
|
-
)
|
|
590
|
-
|
|
591
|
-
def _generate_citation_name(self, metadata: Dict[str, Any]) -> str:
|
|
592
|
-
"""Generate human-readable citation name.
|
|
593
|
-
|
|
594
|
-
Format: FIRSTAUTHOR-YEAR-SOURCE
|
|
595
|
-
Where SOURCE can be journal abbreviation, conference, book publisher, etc.
|
|
596
|
-
"""
|
|
597
|
-
# Get first author
|
|
598
|
-
authors = metadata.get("authors", [])
|
|
599
|
-
if authors:
|
|
600
|
-
first_author = authors[0]
|
|
601
|
-
if "," in first_author:
|
|
602
|
-
author_name = first_author.split(",")[0].strip()
|
|
603
|
-
else:
|
|
604
|
-
author_name = first_author.split()[-1] if first_author else "Unknown"
|
|
605
|
-
else:
|
|
606
|
-
author_name = "Unknown"
|
|
607
|
-
|
|
608
|
-
# Sanitize author name
|
|
609
|
-
author_name = self._sanitize_filename(author_name)
|
|
610
|
-
|
|
611
|
-
# Get year
|
|
612
|
-
year = metadata.get("year", "XXXX")
|
|
613
|
-
|
|
614
|
-
# Get source (journal, conference, publisher, etc.)
|
|
615
|
-
source = None
|
|
616
|
-
|
|
617
|
-
# Priority order for source
|
|
618
|
-
if metadata.get("journal"):
|
|
619
|
-
source = self._abbreviate_journal(metadata["journal"])
|
|
620
|
-
elif metadata.get("booktitle"): # Conference
|
|
621
|
-
source = self._abbreviate_conference(metadata["booktitle"])
|
|
622
|
-
elif metadata.get("publisher"): # Book
|
|
623
|
-
source = metadata["publisher"]
|
|
624
|
-
elif metadata.get("school"): # Thesis
|
|
625
|
-
source = metadata["school"]
|
|
626
|
-
elif metadata.get("institution"): # Report
|
|
627
|
-
source = metadata["institution"]
|
|
628
|
-
elif "arxiv" in metadata.get("doi", "").lower():
|
|
629
|
-
source = "arXiv"
|
|
630
|
-
else:
|
|
631
|
-
source = "Misc"
|
|
632
|
-
|
|
633
|
-
source = self._sanitize_filename(source)[:30] # Limit length
|
|
634
|
-
|
|
635
|
-
return f"{author_name}-{year}-{source}"
|
|
636
|
-
|
|
637
|
-
def _abbreviate_journal(self, journal_name: str) -> str:
|
|
638
|
-
"""Create journal abbreviation."""
|
|
639
|
-
# Common journal abbreviations
|
|
640
|
-
abbreviations = {
|
|
641
|
-
"nature": "Nature",
|
|
642
|
-
"science": "Science",
|
|
643
|
-
"cell": "Cell",
|
|
644
|
-
"proceedings of the national academy of sciences": "PNAS",
|
|
645
|
-
"physical review letters": "PRL",
|
|
646
|
-
"journal of the american chemical society": "JACS",
|
|
647
|
-
"angewandte chemie": "AngChem",
|
|
648
|
-
"new england journal of medicine": "NEJM",
|
|
649
|
-
"the lancet": "Lancet",
|
|
650
|
-
"ieee transactions": "IEEE-T",
|
|
651
|
-
"acm transactions": "ACM-T",
|
|
652
|
-
"neural information processing systems": "NeurIPS",
|
|
653
|
-
"international conference on machine learning": "ICML",
|
|
654
|
-
"conference on computer vision and pattern recognition": "CVPR",
|
|
655
|
-
}
|
|
656
|
-
|
|
657
|
-
# Check for exact matches
|
|
658
|
-
journal_lower = journal_name.lower()
|
|
659
|
-
for key, abbrev in abbreviations.items():
|
|
660
|
-
if key in journal_lower:
|
|
661
|
-
return abbrev
|
|
662
|
-
|
|
663
|
-
# Create abbreviation from first letters of significant words
|
|
664
|
-
words = journal_name.split()
|
|
665
|
-
stop_words = {"of", "the", "and", "in", "on", "for", "a", "an"}
|
|
666
|
-
significant_words = [w for w in words if w.lower() not in stop_words]
|
|
667
|
-
|
|
668
|
-
if len(significant_words) <= 3:
|
|
669
|
-
return "-".join(significant_words)
|
|
670
|
-
else:
|
|
671
|
-
# Use first letter of each significant word
|
|
672
|
-
return "".join(w[0].upper() for w in significant_words[:6])
|
|
673
|
-
|
|
674
|
-
def _abbreviate_conference(self, conference_name: str) -> str:
|
|
675
|
-
"""Create conference abbreviation."""
|
|
676
|
-
# Extract year if present
|
|
677
|
-
import re
|
|
678
|
-
|
|
679
|
-
year_match = re.search(r"\b(19|20)\d{2}\b", conference_name)
|
|
680
|
-
|
|
681
|
-
# Remove year for abbreviation
|
|
682
|
-
name_without_year = re.sub(r"\b(19|20)\d{2}\b", "", conference_name).strip()
|
|
683
|
-
|
|
684
|
-
# Common conference patterns
|
|
685
|
-
if "workshop" in name_without_year.lower():
|
|
686
|
-
return "Workshop"
|
|
687
|
-
elif "symposium" in name_without_year.lower():
|
|
688
|
-
return "Symposium"
|
|
689
|
-
elif "conference" in name_without_year.lower():
|
|
690
|
-
# Get words before "conference"
|
|
691
|
-
words = name_without_year.lower().split("conference")[0].split()
|
|
692
|
-
if words:
|
|
693
|
-
return "".join(w[0].upper() for w in words if len(w) > 2)[:6] + "-Conf"
|
|
694
|
-
|
|
695
|
-
return self._abbreviate_journal(name_without_year)
|
|
696
|
-
|
|
697
|
-
def _sanitize_filename(self, name: str) -> str:
|
|
698
|
-
"""Sanitize string for use in filename."""
|
|
699
|
-
# Replace problematic characters
|
|
700
|
-
replacements = {
|
|
701
|
-
"/": "-",
|
|
702
|
-
"\\": "-",
|
|
703
|
-
":": "-",
|
|
704
|
-
"*": "-",
|
|
705
|
-
"?": "",
|
|
706
|
-
'"': "",
|
|
707
|
-
"<": "",
|
|
708
|
-
">": "",
|
|
709
|
-
"|": "-",
|
|
710
|
-
" ": "_",
|
|
711
|
-
".": "",
|
|
712
|
-
",": "",
|
|
713
|
-
";": "",
|
|
714
|
-
"'": "",
|
|
715
|
-
"!": "",
|
|
716
|
-
"@": "at",
|
|
717
|
-
"#": "num",
|
|
718
|
-
"$": "S",
|
|
719
|
-
"%": "pct",
|
|
720
|
-
"^": "",
|
|
721
|
-
"&": "and",
|
|
722
|
-
"(": "",
|
|
723
|
-
")": "",
|
|
724
|
-
"[": "",
|
|
725
|
-
"]": "",
|
|
726
|
-
"{": "",
|
|
727
|
-
"}": "",
|
|
728
|
-
"=": "-",
|
|
729
|
-
"+": "plus",
|
|
730
|
-
"~": "-",
|
|
731
|
-
"`": "",
|
|
732
|
-
}
|
|
733
|
-
|
|
734
|
-
result = name
|
|
735
|
-
for old, new in replacements.items():
|
|
736
|
-
result = result.replace(old, new)
|
|
737
|
-
|
|
738
|
-
# Remove multiple underscores/hyphens
|
|
739
|
-
result = re.sub(r"[-_]+", "-", result)
|
|
740
|
-
result = result.strip("-_")
|
|
741
|
-
|
|
742
|
-
# Ensure it's not empty
|
|
743
|
-
if not result:
|
|
744
|
-
result = "Unknown"
|
|
745
|
-
|
|
746
|
-
return result
|
|
747
|
-
|
|
748
|
-
def _create_symlink(self, target: Path, link: Path):
|
|
749
|
-
"""Create symlink (Linux/Mac/WSL)."""
|
|
750
|
-
try:
|
|
751
|
-
link.parent.mkdir(parents=True, exist_ok=True)
|
|
752
|
-
if link.exists():
|
|
753
|
-
link.unlink()
|
|
754
|
-
link.symlink_to(target)
|
|
755
|
-
logger.debug(f"Created symlink: {link} -> {target}")
|
|
756
|
-
except Exception as e:
|
|
757
|
-
logger.warning(f"Failed to create symlink: {e}")
|
|
758
|
-
|
|
759
|
-
def _create_windows_shortcut(self, target: Path, shortcut_path: Path):
|
|
760
|
-
"""Create Windows .lnk shortcut file."""
|
|
761
|
-
try:
|
|
762
|
-
shortcut_path.parent.mkdir(parents=True, exist_ok=True)
|
|
763
|
-
|
|
764
|
-
# Use Windows COM to create shortcut
|
|
765
|
-
if self.is_windows:
|
|
766
|
-
import win32com.client
|
|
767
|
-
|
|
768
|
-
shell = win32com.client.Dispatch("WScript.Shell")
|
|
769
|
-
shortcut = shell.CreateShortCut(str(shortcut_path))
|
|
770
|
-
shortcut.Targetpath = str(target)
|
|
771
|
-
shortcut.WorkingDirectory = str(target.parent)
|
|
772
|
-
shortcut.save()
|
|
773
|
-
logger.debug(f"Created Windows shortcut: {shortcut_path}")
|
|
774
|
-
elif self.is_wsl:
|
|
775
|
-
# For WSL, create a simple text file with the path
|
|
776
|
-
# (Real .lnk files need to be created from Windows side)
|
|
777
|
-
info_file = shortcut_path.with_suffix(".txt")
|
|
778
|
-
with open(info_file, "w") as f:
|
|
779
|
-
f.write(f"Target: {target}\n")
|
|
780
|
-
f.write(
|
|
781
|
-
f"This is a placeholder. Create real .lnk file from Windows.\n"
|
|
782
|
-
)
|
|
783
|
-
logger.debug(f"Created shortcut info file: {info_file}")
|
|
784
|
-
|
|
785
|
-
except Exception as e:
|
|
786
|
-
logger.warning(f"Failed to create Windows shortcut: {e}")
|
|
787
|
-
|
|
788
|
-
def _save_library_config(self):
|
|
789
|
-
"""Save library configuration for easy access."""
|
|
790
|
-
config = {
|
|
791
|
-
"library_name": self.library_name,
|
|
792
|
-
"base_dir": str(self.base_dir),
|
|
793
|
-
"created_at": datetime.now().isoformat(),
|
|
794
|
-
"zotero_compatible": True,
|
|
795
|
-
"scitex_version": "1.0",
|
|
796
|
-
"features": {
|
|
797
|
-
"human_readable_links": True,
|
|
798
|
-
"metadata_source_tracking": True,
|
|
799
|
-
"enrichment_workflow": True,
|
|
800
|
-
"windows_shortcuts": self.is_windows or self.is_wsl,
|
|
801
|
-
},
|
|
802
|
-
}
|
|
803
|
-
|
|
804
|
-
config_path = self.base_dir / "library.json"
|
|
805
|
-
with open(config_path, "w") as f:
|
|
806
|
-
json.dump(config, f, indent=2)
|
|
807
|
-
|
|
808
|
-
# Also save to global library registry
|
|
809
|
-
registry_dir = self.base_dir.parent.parent / "config"
|
|
810
|
-
registry_dir.mkdir(parents=True, exist_ok=True)
|
|
811
|
-
|
|
812
|
-
registry_path = registry_dir / "libraries.json"
|
|
813
|
-
|
|
814
|
-
# Load existing registry
|
|
815
|
-
if registry_path.exists():
|
|
816
|
-
with open(registry_path, "r") as f:
|
|
817
|
-
registry = json.load(f)
|
|
818
|
-
else:
|
|
819
|
-
registry = {"libraries": {}}
|
|
820
|
-
|
|
821
|
-
# Update registry
|
|
822
|
-
registry["libraries"][self.library_name] = {
|
|
823
|
-
"path": str(self.base_dir),
|
|
824
|
-
"created_at": config["created_at"],
|
|
825
|
-
"last_accessed": datetime.now().isoformat(),
|
|
826
|
-
}
|
|
827
|
-
|
|
828
|
-
with open(registry_path, "w") as f:
|
|
829
|
-
json.dump(registry, f, indent=2)
|
|
830
|
-
|
|
831
|
-
logger.info(f"Library config saved: {config_path}")
|
|
832
|
-
|
|
833
|
-
def _set_item_field(
|
|
834
|
-
self, conn: sqlite3.Connection, item_id: int, field_name: str, value: Any
|
|
835
|
-
):
|
|
836
|
-
"""Set field value for item."""
|
|
837
|
-
field_id = self._get_field_id(field_name)
|
|
838
|
-
if not field_id:
|
|
839
|
-
logger.warning(f"Unknown field: {field_name}")
|
|
840
|
-
return
|
|
841
|
-
|
|
842
|
-
value_id = self._get_or_create_value(conn, value)
|
|
843
|
-
if value_id:
|
|
844
|
-
conn.execute(
|
|
845
|
-
"""
|
|
846
|
-
INSERT OR REPLACE INTO itemData (itemID, fieldID, valueID)
|
|
847
|
-
VALUES (?, ?, ?)
|
|
848
|
-
""",
|
|
849
|
-
(item_id, field_id, value_id),
|
|
850
|
-
)
|
|
851
|
-
|
|
852
|
-
def _track_field_source(
|
|
853
|
-
self,
|
|
854
|
-
conn: sqlite3.Connection,
|
|
855
|
-
item_id: int,
|
|
856
|
-
field_name: str,
|
|
857
|
-
source: str,
|
|
858
|
-
confidence: float = 1.0,
|
|
859
|
-
):
|
|
860
|
-
"""Track metadata source for field."""
|
|
861
|
-
conn.execute(
|
|
862
|
-
"""
|
|
863
|
-
INSERT OR REPLACE INTO scitex_field_sources
|
|
864
|
-
(itemID, fieldName, source, confidence)
|
|
865
|
-
VALUES (?, ?, ?, ?)
|
|
866
|
-
""",
|
|
867
|
-
(item_id, field_name, source, confidence),
|
|
868
|
-
)
|
|
869
|
-
|
|
870
|
-
def _add_creator(
|
|
871
|
-
self, conn: sqlite3.Connection, item_id: int, author_name: str, order_index: int
|
|
872
|
-
):
|
|
873
|
-
"""Add creator to item."""
|
|
874
|
-
# Parse name
|
|
875
|
-
if "," in author_name:
|
|
876
|
-
parts = author_name.split(",", 1)
|
|
877
|
-
last_name = parts[0].strip()
|
|
878
|
-
first_name = parts[1].strip() if len(parts) > 1 else ""
|
|
879
|
-
field_mode = 0
|
|
880
|
-
else:
|
|
881
|
-
# Single field mode
|
|
882
|
-
first_name = author_name
|
|
883
|
-
last_name = ""
|
|
884
|
-
field_mode = 1
|
|
885
|
-
|
|
886
|
-
# Get or create creator
|
|
887
|
-
cursor = conn.execute(
|
|
888
|
-
"SELECT creatorID FROM creators WHERE firstName = ? AND lastName = ?",
|
|
889
|
-
(first_name, last_name),
|
|
890
|
-
)
|
|
891
|
-
row = cursor.fetchone()
|
|
892
|
-
|
|
893
|
-
if row:
|
|
894
|
-
creator_id = row["creatorID"]
|
|
895
|
-
else:
|
|
896
|
-
cursor = conn.execute(
|
|
897
|
-
"INSERT INTO creators (firstName, lastName, fieldMode) VALUES (?, ?, ?)",
|
|
898
|
-
(first_name, last_name, field_mode),
|
|
899
|
-
)
|
|
900
|
-
creator_id = cursor.lastrowid
|
|
901
|
-
|
|
902
|
-
# Link to item
|
|
903
|
-
conn.execute(
|
|
904
|
-
"""
|
|
905
|
-
INSERT OR REPLACE INTO itemCreators
|
|
906
|
-
(itemID, creatorID, creatorTypeID, orderIndex)
|
|
907
|
-
VALUES (?, ?, 1, ?)
|
|
908
|
-
""",
|
|
909
|
-
(item_id, creator_id, order_index),
|
|
910
|
-
)
|
|
911
|
-
|
|
912
|
-
def _add_tag(self, conn: sqlite3.Connection, item_id: int, tag_name: str):
|
|
913
|
-
"""Add tag to item."""
|
|
914
|
-
# Get or create tag
|
|
915
|
-
cursor = conn.execute(
|
|
916
|
-
"SELECT tagID FROM tags WHERE name = ?", (tag_name.lower(),)
|
|
917
|
-
)
|
|
918
|
-
row = cursor.fetchone()
|
|
919
|
-
|
|
920
|
-
if row:
|
|
921
|
-
tag_id = row["tagID"]
|
|
922
|
-
else:
|
|
923
|
-
cursor = conn.execute(
|
|
924
|
-
"INSERT INTO tags (name) VALUES (?)", (tag_name.lower(),)
|
|
925
|
-
)
|
|
926
|
-
tag_id = cursor.lastrowid
|
|
927
|
-
|
|
928
|
-
# Link to item
|
|
929
|
-
conn.execute(
|
|
930
|
-
"""
|
|
931
|
-
INSERT OR IGNORE INTO itemTags (itemID, tagID)
|
|
932
|
-
VALUES (?, ?)
|
|
933
|
-
""",
|
|
934
|
-
(item_id, tag_id),
|
|
935
|
-
)
|
|
936
|
-
|
|
937
|
-
def update_item_doi(self, item_id: int, doi: str, source: str) -> bool:
|
|
938
|
-
"""Update item with resolved DOI (step 2 of workflow)."""
|
|
939
|
-
with self._get_connection() as conn:
|
|
940
|
-
self._set_item_field(conn, item_id, "DOI", doi)
|
|
941
|
-
self._track_field_source(conn, item_id, "DOI", source)
|
|
942
|
-
|
|
943
|
-
# Update enrichment status
|
|
944
|
-
conn.execute(
|
|
945
|
-
"""
|
|
946
|
-
UPDATE scitex_enrichment_status
|
|
947
|
-
SET doi_resolved = 1
|
|
948
|
-
WHERE itemID = ?
|
|
949
|
-
""",
|
|
950
|
-
(item_id,),
|
|
951
|
-
)
|
|
952
|
-
|
|
953
|
-
conn.commit()
|
|
954
|
-
logger.info(f"Updated item {item_id} with DOI: {doi}")
|
|
955
|
-
return True
|
|
956
|
-
|
|
957
|
-
def enrich_item_metadata(self, item_id: int, metadata: Dict[str, Any]) -> bool:
|
|
958
|
-
"""Enrich item with metadata from various sources (step 3 of workflow)."""
|
|
959
|
-
with self._get_connection() as conn:
|
|
960
|
-
# Update all provided fields
|
|
961
|
-
for field_name, value in metadata.items():
|
|
962
|
-
if field_name.endswith("_source"):
|
|
963
|
-
continue
|
|
964
|
-
|
|
965
|
-
if value:
|
|
966
|
-
self._set_item_field(conn, item_id, field_name, value)
|
|
967
|
-
|
|
968
|
-
# Track source
|
|
969
|
-
source = metadata.get(f"{field_name}_source", "enrichment")
|
|
970
|
-
self._track_field_source(conn, item_id, field_name, source)
|
|
971
|
-
|
|
972
|
-
# Update modified timestamp
|
|
973
|
-
conn.execute(
|
|
974
|
-
"""
|
|
975
|
-
UPDATE items
|
|
976
|
-
SET dateModified = CURRENT_TIMESTAMP
|
|
977
|
-
WHERE itemID = ?
|
|
978
|
-
""",
|
|
979
|
-
(item_id,),
|
|
980
|
-
)
|
|
981
|
-
|
|
982
|
-
# Update enrichment status
|
|
983
|
-
conn.execute(
|
|
984
|
-
"""
|
|
985
|
-
UPDATE scitex_enrichment_status
|
|
986
|
-
SET metadata_enriched = 1, last_enrichment = CURRENT_TIMESTAMP
|
|
987
|
-
WHERE itemID = ?
|
|
988
|
-
""",
|
|
989
|
-
(item_id,),
|
|
990
|
-
)
|
|
991
|
-
|
|
992
|
-
conn.commit()
|
|
993
|
-
logger.info(f"Enriched item {item_id} with {len(metadata)} fields")
|
|
994
|
-
return True
|
|
995
|
-
|
|
996
|
-
def attach_pdf(
|
|
997
|
-
self, parent_item_id: int, pdf_path: Path, title: str = "Full Text PDF"
|
|
998
|
-
) -> int:
|
|
999
|
-
"""Attach PDF to item (Zotero-style)."""
|
|
1000
|
-
if not pdf_path.exists():
|
|
1001
|
-
logger.error(f"PDF not found: {pdf_path}")
|
|
1002
|
-
return None
|
|
1003
|
-
|
|
1004
|
-
with self._get_connection() as conn:
|
|
1005
|
-
# Get parent key for storage
|
|
1006
|
-
cursor = conn.execute(
|
|
1007
|
-
"SELECT key FROM items WHERE itemID = ?", (parent_item_id,)
|
|
1008
|
-
)
|
|
1009
|
-
parent = cursor.fetchone()
|
|
1010
|
-
if not parent:
|
|
1011
|
-
logger.error(f"Parent item {parent_item_id} not found")
|
|
1012
|
-
return None
|
|
1013
|
-
|
|
1014
|
-
parent_key = parent["key"]
|
|
1015
|
-
|
|
1016
|
-
# Create attachment item
|
|
1017
|
-
attachment_key = self._generate_key()
|
|
1018
|
-
cursor = conn.execute(
|
|
1019
|
-
"""
|
|
1020
|
-
INSERT INTO items (itemTypeID, libraryID, key)
|
|
1021
|
-
VALUES (14, 1, ?)
|
|
1022
|
-
""",
|
|
1023
|
-
(attachment_key,),
|
|
1024
|
-
) # 14 = attachment
|
|
1025
|
-
attachment_id = cursor.lastrowid
|
|
1026
|
-
|
|
1027
|
-
# Copy PDF to storage
|
|
1028
|
-
storage_path = self.storage_dir / parent_key
|
|
1029
|
-
storage_path.mkdir(exist_ok=True)
|
|
1030
|
-
|
|
1031
|
-
dest_path = storage_path / f"{attachment_key}.pdf"
|
|
1032
|
-
shutil.copy2(pdf_path, dest_path)
|
|
1033
|
-
|
|
1034
|
-
# Calculate hash
|
|
1035
|
-
with open(dest_path, "rb") as f:
|
|
1036
|
-
content = f.read()
|
|
1037
|
-
storage_hash = hashlib.md5(content).hexdigest()
|
|
1038
|
-
|
|
1039
|
-
# Create attachment record
|
|
1040
|
-
conn.execute(
|
|
1041
|
-
"""
|
|
1042
|
-
INSERT INTO itemAttachments
|
|
1043
|
-
(itemID, parentItemID, linkMode, contentType, path, storageHash)
|
|
1044
|
-
VALUES (?, ?, 0, 'application/pdf', ?, ?)
|
|
1045
|
-
""",
|
|
1046
|
-
(
|
|
1047
|
-
attachment_id,
|
|
1048
|
-
parent_item_id,
|
|
1049
|
-
f"storage:{attachment_key}.pdf",
|
|
1050
|
-
storage_hash,
|
|
1051
|
-
),
|
|
1052
|
-
)
|
|
1053
|
-
|
|
1054
|
-
# Set title
|
|
1055
|
-
self._set_item_field(conn, attachment_id, "title", title)
|
|
1056
|
-
|
|
1057
|
-
# Update enrichment status
|
|
1058
|
-
conn.execute(
|
|
1059
|
-
"""
|
|
1060
|
-
UPDATE scitex_enrichment_status
|
|
1061
|
-
SET pdf_download = 1
|
|
1062
|
-
WHERE itemID = ?
|
|
1063
|
-
""",
|
|
1064
|
-
(parent_item_id,),
|
|
1065
|
-
)
|
|
1066
|
-
|
|
1067
|
-
conn.commit()
|
|
1068
|
-
|
|
1069
|
-
logger.info(f"Attached PDF to item {parent_item_id}")
|
|
1070
|
-
return attachment_id
|
|
1071
|
-
|
|
1072
|
-
def get_items_needing_enrichment(self, stage: str = "doi") -> List[Dict[str, Any]]:
|
|
1073
|
-
"""Get items that need enrichment at specific stage."""
|
|
1074
|
-
stage_conditions = {
|
|
1075
|
-
"doi": "doi_resolved = 0",
|
|
1076
|
-
"metadata": "doi_resolved = 1 AND metadata_enriched = 0",
|
|
1077
|
-
"pdf": "metadata_enriched = 1 AND pdf_download = 0",
|
|
1078
|
-
"fulltext": "pdf_download = 1 AND fulltext_extracted = 0",
|
|
1079
|
-
}
|
|
1080
|
-
|
|
1081
|
-
condition = stage_conditions.get(stage, "1=1")
|
|
1082
|
-
|
|
1083
|
-
with self._get_connection() as conn:
|
|
1084
|
-
cursor = conn.execute(f"""
|
|
1085
|
-
SELECT i.itemID, i.key,
|
|
1086
|
-
(SELECT value FROM itemDataValues v
|
|
1087
|
-
JOIN itemData d ON v.valueID = d.valueID
|
|
1088
|
-
WHERE d.itemID = i.itemID AND d.fieldID = 1) as title,
|
|
1089
|
-
(SELECT value FROM itemDataValues v
|
|
1090
|
-
JOIN itemData d ON v.valueID = d.valueID
|
|
1091
|
-
WHERE d.itemID = i.itemID AND d.fieldID = 8) as doi,
|
|
1092
|
-
es.*
|
|
1093
|
-
FROM items i
|
|
1094
|
-
LEFT JOIN scitex_enrichment_status es ON i.itemID = es.itemID
|
|
1095
|
-
WHERE i.itemTypeID != 14 -- Not attachment
|
|
1096
|
-
AND {condition}
|
|
1097
|
-
ORDER BY i.dateAdded
|
|
1098
|
-
""")
|
|
1099
|
-
|
|
1100
|
-
return [dict(row) for row in cursor]
|
|
1101
|
-
|
|
1102
|
-
def export_to_zotero_rdf(self, output_path: Path):
|
|
1103
|
-
"""Export database in Zotero RDF format."""
|
|
1104
|
-
# Implementation would generate Zotero RDF/XML format
|
|
1105
|
-
# This is a placeholder for the full implementation
|
|
1106
|
-
logger.info(f"Exporting to Zotero RDF: {output_path}")
|
|
1107
|
-
|
|
1108
|
-
def import_from_zotero(self, zotero_db_path: Path):
|
|
1109
|
-
"""Import from existing Zotero database."""
|
|
1110
|
-
logger.info(f"Importing from Zotero: {zotero_db_path}")
|
|
1111
|
-
|
|
1112
|
-
# This would copy relevant tables and data
|
|
1113
|
-
# Placeholder for full implementation
|
|
1114
|
-
|
|
1115
|
-
def get_statistics(self) -> Dict[str, Any]:
|
|
1116
|
-
"""Get database statistics."""
|
|
1117
|
-
with self._get_connection() as conn:
|
|
1118
|
-
stats = {}
|
|
1119
|
-
|
|
1120
|
-
# Item counts by type
|
|
1121
|
-
cursor = conn.execute("""
|
|
1122
|
-
SELECT
|
|
1123
|
-
COUNT(*) as total,
|
|
1124
|
-
SUM(CASE WHEN itemTypeID = 1 THEN 1 ELSE 0 END) as articles,
|
|
1125
|
-
SUM(CASE WHEN itemTypeID = 14 THEN 1 ELSE 0 END) as attachments
|
|
1126
|
-
FROM items
|
|
1127
|
-
WHERE itemID NOT IN (SELECT itemID FROM deletedItems)
|
|
1128
|
-
""")
|
|
1129
|
-
stats["items"] = dict(cursor.fetchone())
|
|
1130
|
-
|
|
1131
|
-
# Enrichment status
|
|
1132
|
-
cursor = conn.execute("""
|
|
1133
|
-
SELECT
|
|
1134
|
-
COUNT(*) as total,
|
|
1135
|
-
SUM(doi_resolved) as doi_resolved,
|
|
1136
|
-
SUM(metadata_enriched) as metadata_enriched,
|
|
1137
|
-
SUM(pdf_download) as pdf_download
|
|
1138
|
-
FROM scitex_enrichment_status
|
|
1139
|
-
""")
|
|
1140
|
-
stats["enrichment"] = dict(cursor.fetchone())
|
|
1141
|
-
|
|
1142
|
-
# Storage info
|
|
1143
|
-
pdf_count = len(list(self.storage_dir.glob("*/*.pdf")))
|
|
1144
|
-
stats["storage"] = {
|
|
1145
|
-
"pdf_count": pdf_count,
|
|
1146
|
-
"storage_path": str(self.storage_dir),
|
|
1147
|
-
}
|
|
1148
|
-
|
|
1149
|
-
return stats
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
if __name__ == "__main__":
|
|
1153
|
-
print("Zotero-Compatible Scholar Database")
|
|
1154
|
-
print("=" * 60)
|
|
1155
|
-
print("\nWorkflow:")
|
|
1156
|
-
print("1. Add item with partial info (title, authors, year)")
|
|
1157
|
-
print("2. Resolve DOI from partial info")
|
|
1158
|
-
print("3. Enrich metadata using DOI")
|
|
1159
|
-
print("4. Download and attach PDF")
|
|
1160
|
-
print("5. Extract full text for search")
|
|
1161
|
-
|
|
1162
|
-
print("\nExample usage:")
|
|
1163
|
-
print("""
|
|
1164
|
-
# Initialize
|
|
1165
|
-
db = ZoteroCompatibleDB()
|
|
1166
|
-
|
|
1167
|
-
# Step 1: Add item with partial info
|
|
1168
|
-
item_id = db.add_item_from_partial({
|
|
1169
|
-
"title": "Attention is All You Need",
|
|
1170
|
-
"authors": ["Vaswani, A.", "Shazeer, N."],
|
|
1171
|
-
"year": 2017,
|
|
1172
|
-
"journal": "NeurIPS"
|
|
1173
|
-
})
|
|
1174
|
-
|
|
1175
|
-
# Step 2: Update with resolved DOI
|
|
1176
|
-
db.update_item_doi(item_id, "10.48550/arXiv.1706.03762", "crossref")
|
|
1177
|
-
|
|
1178
|
-
# Step 3: Enrich with metadata
|
|
1179
|
-
db.enrich_item_metadata(item_id, {
|
|
1180
|
-
"abstract": "The dominant sequence transduction models...",
|
|
1181
|
-
"abstract_source": "semantic_scholar",
|
|
1182
|
-
"pages": "5998-6008",
|
|
1183
|
-
"pages_source": "crossref"
|
|
1184
|
-
})
|
|
1185
|
-
|
|
1186
|
-
# Step 4: Attach PDF
|
|
1187
|
-
db.attach_pdf(item_id, Path("attention.pdf"))
|
|
1188
|
-
|
|
1189
|
-
# Get items needing enrichment
|
|
1190
|
-
needs_doi = db.get_items_needing_enrichment("doi")
|
|
1191
|
-
needs_metadata = db.get_items_needing_enrichment("metadata")
|
|
1192
|
-
""")
|
|
1193
|
-
|
|
1194
|
-
# EOF
|