mirror of
https://github.com/spacedriveapp/spacedrive.git
synced 2026-02-20 07:37:26 -05:00
* added some files `standard` mime type * Used `TEXTViewer` Component to show Code Preview * Update Thumb.tsx * added `prismjs` * removed unnecessary comment * `CODEViewer` Component for Syntax Highlighting * formatting * using **Atom** Theme for `Prism` * merge text/code viewers & bg-app-focus for prism currently calling onError and onLoad without an Event argument that should change but i'm not really sure what to do there * removed unused imports * Update index.ts * `TEXTViewer` to `TextViewer_` * `TextViewer_` to `TextViewer` * Don't highlight normal TextFiles * clean code * `TEXTViewer` to `TextViewer` * using tailwind classes more * doing things correctly. * installed `prismjs` in interface * using own scroller * Update Thumb.tsx * Add an AbortController to the fetch request - Fix onError and onLoad calls - Format code * Fix onError being called when request was aborted due to re-render - Fix Compoenent re-rendering loop due to circular reference in useEffect - Remove unused imports * Improve text file serving and code syntax highlight - Implement way to identify text files in file-ext crate - Do not depend only on the file extension to identify text files in custom_uri - Import more prismjs language rules files - Add line numbers to TextViewer when rendering code * Clippy and prettier * Fix reading zero byte data to Vec - Improve empty file handling * Expand code highlight to more file types - Fix 10MB when it should be 10KB - Add supported for more code and config files extensions to sd-file-ext - Add comlink and vite-plugin-comlink for easy js worker integration - Move Prismjs logic to a Worker, because larger files (1000+ lines) where causing the UI to hang - Replace line-number prismjs plugin with our own implementation * Fix uppercase extension name --------- Co-authored-by: Utku <74243531+utkubakir@users.noreply.github.com> Co-authored-by: pr <pineapplerind.info@gmail.com> Co-authored-by: Vítor Vasconcellos <vasconcellos.dev@gmail.com>
45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
import Prism from 'prismjs';
|
|
import './prism';
|
|
|
|
// if you are intending to use Prism functions manually, you will need to set:
|
|
Prism.manual = true;
|
|
|
|
// Mapping between extensions and prismjs language identifier
|
|
// Only for those that are not already internally resolved by prismjs
|
|
// https://prismjs.com/#supported-languages
|
|
const languageMapping = Object.entries({
|
|
applescript: ['scpt', 'scptd'],
|
|
// This is not entirely correct, but better than nothing:
|
|
// https://github.com/PrismJS/prism/issues/3656
|
|
// https://github.com/PrismJS/prism/issues/3660
|
|
sh: ['zsh', 'fish'],
|
|
c: ['h'],
|
|
cpp: ['hpp'],
|
|
js: ['mjs'],
|
|
crystal: ['cr'],
|
|
cs: ['csx'],
|
|
makefile: ['make'],
|
|
nim: ['nims'],
|
|
objc: ['m', 'mm'],
|
|
ocaml: ['ml', 'mli', 'mll', 'mly'],
|
|
perl: ['pl'],
|
|
php: ['php', 'php1', 'php2', 'php3', 'php4', 'php5', 'php6', 'phps', 'phpt', 'phtml'],
|
|
powershell: ['ps1', 'psd1', 'psm1'],
|
|
rust: ['rs']
|
|
}).reduce<Map<string, string>>((mapping, [id, exts]) => {
|
|
for (const ext of exts) mapping.set(ext, id);
|
|
return mapping;
|
|
}, new Map());
|
|
|
|
export const highlight = (code: string, ext: string) => {
|
|
const language = languageMapping.get(ext) ?? ext;
|
|
const grammar = Prism.languages[language];
|
|
|
|
return grammar
|
|
? {
|
|
code: Prism.highlight(code, grammar, language),
|
|
language
|
|
}
|
|
: null;
|
|
};
|