X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/dce51234527d1a0075f04d81b619e3d00e14ed3a..HEAD:/resources/js/code/languages.js diff --git a/resources/js/code/languages.js b/resources/js/code/languages.js index 4a3591624..da9631a13 100644 --- a/resources/js/code/languages.js +++ b/resources/js/code/languages.js @@ -1,119 +1,102 @@ -import {StreamLanguage} from "@codemirror/language" +import {StreamLanguage} from '@codemirror/language'; -import {css} from '@codemirror/legacy-modes/mode/css'; -import {c, cpp, csharp, java, kotlin, scala, dart} from '@codemirror/legacy-modes/mode/clike'; -import {diff} from '@codemirror/legacy-modes/mode/diff'; -import {fortran} from '@codemirror/legacy-modes/mode/fortran'; -import {go} from '@codemirror/legacy-modes/mode/go'; -import {haskell} from '@codemirror/legacy-modes/mode/haskell'; -import {javascript, json, typescript} from '@codemirror/legacy-modes/mode/javascript'; -import {julia} from '@codemirror/legacy-modes/mode/julia'; -import {lua} from '@codemirror/legacy-modes/mode/lua'; +import {css} from '@codemirror/lang-css'; +import {json} from '@codemirror/lang-json'; +import {javascript} from '@codemirror/lang-javascript'; +import {html} from '@codemirror/lang-html'; import {markdown} from '@codemirror/lang-markdown'; -import {oCaml, fSharp, sml} from '@codemirror/legacy-modes/mode/mllike'; -import {nginx} from '@codemirror/legacy-modes/mode/nginx'; -import {octave} from '@codemirror/legacy-modes/mode/octave'; -import {perl} from '@codemirror/legacy-modes/mode/perl'; -import {pascal} from '@codemirror/legacy-modes/mode/pascal'; import {php} from '@codemirror/lang-php'; -import {powerShell} from '@codemirror/legacy-modes/mode/powershell'; -import {properties} from '@codemirror/legacy-modes/mode/properties'; -import {python} from '@codemirror/legacy-modes/mode/python'; -import {ruby} from '@codemirror/legacy-modes/mode/ruby'; -import {rust} from '@codemirror/legacy-modes/mode/rust'; -import {scheme} from '@codemirror/legacy-modes/mode/scheme'; -import {shell} from '@codemirror/legacy-modes/mode/shell'; -import {smarty} from "@ssddanbrown/codemirror-lang-smarty"; -import {standardSQL, pgSQL, msSQL, mySQL, sqlite, plSQL} from '@codemirror/legacy-modes/mode/sql'; -import {stex} from '@codemirror/legacy-modes/mode/stex'; -import {swift} from "@codemirror/legacy-modes/mode/swift"; -import {toml} from '@codemirror/legacy-modes/mode/toml'; -import {twig} from "@ssddanbrown/codemirror-lang-twig"; -import {vb} from '@codemirror/legacy-modes/mode/vb'; -import {vbScript} from '@codemirror/legacy-modes/mode/vbscript'; -import {xml, html} from '@codemirror/legacy-modes/mode/xml'; -import {yaml} from '@codemirror/legacy-modes/mode/yaml'; +import {twig} from '@ssddanbrown/codemirror-lang-twig'; +import {xml} from '@codemirror/lang-xml'; +const legacyLoad = async mode => { + const modes = await window.importVersioned('legacy-modes'); + return StreamLanguage.define(modes[mode]); +}; // Mapping of possible languages or formats from user input to their codemirror modes. // Value can be a mode string or a function that will receive the code content & return the mode string. // The function option is used in the event the exact mode could be dynamic depending on the code. const modeMap = { - bash: () => StreamLanguage.define(shell), - c: () => StreamLanguage.define(c), - css: () => StreamLanguage.define(css), - 'c++': () => StreamLanguage.define(cpp), - 'c#': () => StreamLanguage.define(csharp), - csharp: () => StreamLanguage.define(csharp), - dart: () => StreamLanguage.define(dart), - diff: () => StreamLanguage.define(diff), - for: () => StreamLanguage.define(fortran), - fortran: () => StreamLanguage.define(fortran), - 'f#': () => StreamLanguage.define(fSharp), - fsharp: () => StreamLanguage.define(fSharp), - go: () => StreamLanguage.define(go), - haskell: () => StreamLanguage.define(haskell), - hs: () => StreamLanguage.define(haskell), - html: () => StreamLanguage.define(html), - ini: () => StreamLanguage.define(properties), - java: () => StreamLanguage.define(java), - javascript: () => StreamLanguage.define(javascript), - json: () => StreamLanguage.define(json), - js: () => StreamLanguage.define(javascript), - jl: () => StreamLanguage.define(julia), - julia: () => StreamLanguage.define(julia), - kotlin: () => StreamLanguage.define(kotlin), - latex: () => StreamLanguage.define(stex), - lua: () => StreamLanguage.define(lua), - markdown: () => markdown(), - matlab: () => StreamLanguage.define(octave), - md: () => markdown(), - mdown: () => markdown(), - ml: () => StreamLanguage.define(sml), - mssql: () => StreamLanguage.define(msSQL), - mysql: () => StreamLanguage.define(mySQL), - nginx: () => StreamLanguage.define(nginx), - octave: () => StreamLanguage.define(octave), - pas: () => StreamLanguage.define(pascal), - pascal: () => StreamLanguage.define(pascal), - perl: () => StreamLanguage.define(perl), - pgsql: () => StreamLanguage.define(pgSQL), - php: (code) => { + bash: () => legacyLoad('shell'), + c: () => legacyLoad('c'), + css: async () => css(), + 'c++': () => legacyLoad('cpp'), + 'c#': () => legacyLoad('csharp'), + clj: () => legacyLoad('clojure'), + clojure: () => legacyLoad('clojure'), + csharp: () => legacyLoad('csharp'), + dart: () => legacyLoad('dart'), + diff: () => legacyLoad('diff'), + for: () => legacyLoad('fortran'), + fortran: () => legacyLoad('fortran'), + 'f#': () => legacyLoad('fSharp'), + fsharp: () => legacyLoad('fSharp'), + go: () => legacyLoad('go'), + haskell: () => legacyLoad('haskell'), + hs: () => legacyLoad('haskell'), + html: async () => html({selfClosingTags: true}), + ini: () => legacyLoad('properties'), + java: () => legacyLoad('java'), + javascript: async () => javascript(), + json: async () => json(), + js: async () => javascript(), + jl: () => legacyLoad('julia'), + julia: () => legacyLoad('julia'), + kotlin: () => legacyLoad('kotlin'), + latex: () => legacyLoad('stex'), + lua: () => legacyLoad('lua'), + markdown: async () => markdown(), + matlab: () => legacyLoad('octave'), + md: async () => markdown(), + mdown: async () => markdown(), + ml: () => legacyLoad('sml'), + mssql: () => legacyLoad('msSQL'), + mysql: () => legacyLoad('mySQL'), + nginx: () => legacyLoad('nginx'), + octave: () => legacyLoad('octave'), + pas: () => legacyLoad('pascal'), + pascal: () => legacyLoad('pascal'), + perl: () => legacyLoad('perl'), + pgsql: () => legacyLoad('pgSQL'), + php: async code => { const hasTags = code.includes(' StreamLanguage.define(perl), - 'pl/sql': () => StreamLanguage.define(plSQL), - postgresql: () => StreamLanguage.define(pgSQL), - powershell: () => StreamLanguage.define(powerShell), - properties: () => StreamLanguage.define(properties), - ocaml: () => StreamLanguage.define(oCaml), - py: () => StreamLanguage.define(python), - python: () => StreamLanguage.define(python), - rb: () => StreamLanguage.define(ruby), - rs: () => StreamLanguage.define(rust), - ruby: () => StreamLanguage.define(ruby), - rust: () => StreamLanguage.define(rust), - scala: () => StreamLanguage.define(scala), - scheme: () => StreamLanguage.define(scheme), - shell: () => StreamLanguage.define(shell), - sh: () => StreamLanguage.define(shell), - smarty: () => StreamLanguage.define(smarty), - stext: () => StreamLanguage.define(stex), - swift: () => StreamLanguage.define(swift), - toml: () => StreamLanguage.define(toml), - ts: () => StreamLanguage.define(typescript), - twig: () => twig(), - typescript: () => StreamLanguage.define(typescript), - sql: () => StreamLanguage.define(standardSQL), - sqlite: () => StreamLanguage.define(sqlite), - vbs: () => StreamLanguage.define(vbScript), - vbscript: () => StreamLanguage.define(vbScript), - 'vb.net': () => StreamLanguage.define(vb), - vbnet: () => StreamLanguage.define(vb), - xml: () => StreamLanguage.define(xml), - yaml: () => StreamLanguage.define(yaml), - yml: () => StreamLanguage.define(yaml), + pl: () => legacyLoad('perl'), + 'pl/sql': () => legacyLoad('plSQL'), + postgresql: () => legacyLoad('pgSQL'), + powershell: () => legacyLoad('powerShell'), + properties: () => legacyLoad('properties'), + ocaml: () => legacyLoad('oCaml'), + py: () => legacyLoad('python'), + python: () => legacyLoad('python'), + r: () => legacyLoad('r'), + rb: () => legacyLoad('ruby'), + rs: () => legacyLoad('rust'), + ruby: () => legacyLoad('ruby'), + rust: () => legacyLoad('rust'), + sas: () => legacyLoad('sas'), + scala: () => legacyLoad('scala'), + scheme: () => legacyLoad('scheme'), + shell: () => legacyLoad('shell'), + sh: () => legacyLoad('shell'), + smarty: () => legacyLoad('smarty'), + stext: () => legacyLoad('stex'), + swift: () => legacyLoad('swift'), + toml: () => legacyLoad('toml'), + ts: async () => javascript({typescript: true}), + twig: async () => twig(), + typescript: async () => javascript({typescript: true}), + sql: () => legacyLoad('standardSQL'), + sqlite: () => legacyLoad('sqlite'), + vbs: () => legacyLoad('vbScript'), + vbscript: () => legacyLoad('vbScript'), + 'vb.net': () => legacyLoad('vb'), + vbnet: () => legacyLoad('vb'), + xml: async () => xml(), + yaml: () => legacyLoad('yaml'), + yml: () => legacyLoad('yaml'), }; /** @@ -121,7 +104,7 @@ const modeMap = { * suggestion and content. * @param {String} langSuggestion * @param {String} content - * @returns {StreamLanguage} + * @returns {Promise} */ export function getLanguageExtension(langSuggestion, content) { const suggestion = langSuggestion.trim().replace(/^\./g, '').toLowerCase(); @@ -133,4 +116,4 @@ export function getLanguageExtension(langSuggestion, content) { } return language(content); -} \ No newline at end of file +}