// Syntax colouring for file bodies and diffs. // // The whole app is one inlined document, so the grammars are chosen rather // than imported wholesale: highlight.js ships over a megabyte of them and // this list is what a repository usually holds. A file whose extension is // not here renders as plain text, which is the same thing the page does for // a file it cannot colour. import hljs from 'highlight.js/lib/core'; import bash from 'highlight.js/lib/languages/bash'; import css from 'highlight.js/lib/languages/css'; import diff from 'highlight.js/lib/languages/diff'; import dockerfile from 'highlight.js/lib/languages/dockerfile'; import go from 'highlight.js/lib/languages/go'; import groovy from 'highlight.js/lib/languages/groovy'; import ini from 'highlight.js/lib/languages/ini'; import java from 'highlight.js/lib/languages/java'; import javascript from 'highlight.js/lib/languages/javascript'; import json from 'highlight.js/lib/languages/json'; import kotlin from 'highlight.js/lib/languages/kotlin'; import markdown from 'highlight.js/lib/languages/markdown'; import objectivec from 'highlight.js/lib/languages/objectivec'; import plaintext from 'highlight.js/lib/languages/plaintext'; import properties from 'highlight.js/lib/languages/properties'; import python from 'highlight.js/lib/languages/python'; import ruby from 'highlight.js/lib/languages/ruby'; import rust from 'highlight.js/lib/languages/rust'; import sql from 'highlight.js/lib/languages/sql'; import swift from 'highlight.js/lib/languages/swift'; import typescript from 'highlight.js/lib/languages/typescript'; import xml from 'highlight.js/lib/languages/xml'; import yaml from 'highlight.js/lib/languages/yaml'; for (const [name, grammar] of Object.entries({ bash, css, diff, dockerfile, go, groovy, ini, java, javascript, json, kotlin, markdown, objectivec, plaintext, properties, python, ruby, rust, sql, swift, typescript, xml, yaml, })) { hljs.registerLanguage(name, grammar); } /** File extension to grammar. Anything absent renders plain. */ /** @type {Record} */ const BY_EXTENSION = { bash: 'bash', cjs: 'javascript', css: 'css', diff: 'diff', entitlements: 'xml', go: 'go', gradle: 'groovy', groovy: 'groovy', h: 'objectivec', htm: 'xml', html: 'xml', ini: 'ini', java: 'java', js: 'javascript', json: 'json', jsonc: 'json', jsx: 'javascript', kt: 'kotlin', kts: 'kotlin', m: 'objectivec', markdown: 'markdown', md: 'markdown', mjs: 'javascript', mm: 'objectivec', patch: 'diff', plist: 'xml', properties: 'properties', py: 'python', rb: 'ruby', rs: 'rust', sh: 'bash', sql: 'sql', storyboard: 'xml', // highlight.js has no Svelte grammar. The xml grammar colours the markup, // and its