UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 4.5 kB
import*as CodeMirror from"../../../third_party/codemirror.next/codemirror.next.js";const t=CodeMirror.tags;export const highlightStyle=CodeMirror.HighlightStyle.define([{tag:t.variableName,class:"token-variable"},{tag:t.definition(t.variableName),class:"token-definition"},{tag:t.propertyName,class:"token-property"},{tag:[t.typeName,t.className,t.namespace,t.macroName],class:"token-type"},{tag:[t.special(t.name),t.constant(t.className)],class:"token-variable-special"},{tag:t.standard(t.variableName),class:"token-builtin"},{tag:[t.number,t.literal,t.unit],class:"token-number"},{tag:t.string,class:"token-string"},{tag:[t.special(t.string),t.regexp,t.escape],class:"token-string-special"},{tag:[t.atom,t.labelName,t.bool],class:"token-atom"},{tag:t.keyword,class:"token-keyword"},{tag:[t.comment,t.quote],class:"token-comment"},{tag:t.meta,class:"token-meta"},{tag:t.invalid,class:"token-invalid"},{tag:t.tagName,class:"token-tag"},{tag:t.attributeName,class:"token-attribute"},{tag:t.attributeValue,class:"token-attribute-value"},{tag:t.inserted,class:"token-inserted"},{tag:t.deleted,class:"token-deleted"},{tag:t.heading,class:"token-heading"},{tag:t.link,class:"token-link"},{tag:t.strikethrough,class:"token-strikethrough"},{tag:t.strong,class:"token-strong"},{tag:t.emphasis,class:"token-emphasis"}]);export async function create(t,e){const a=await languageFromMIME(e);let r;return r=a?a.language.parser.parse(t):new CodeMirror.Tree(CodeMirror.NodeType.none,[],[],t.length),new CodeHighlighter(t,r)}export async function highlightNode(t,e){const a=t.textContent||"",r=await create(a,e);t.removeChildren(),r.highlight(((e,a)=>{let r=document.createTextNode(e);if(a){const t=document.createElement("span");t.className=a,t.appendChild(r),r=t}t.appendChild(r)}))}export async function languageFromMIME(t){switch(t){case"application/javascript":case"application/ecmascript":case"application/x-ecmascript":case"application/x-javascript":case"text/ecmascript":case"text/javascript1.0":case"text/javascript1.1":case"text/javascript1.2":case"text/javascript1.3":case"text/javascript1.4":case"text/javascript1.5":case"text/jscript":case"text/livescript ":case"text/x-ecmascript":case"text/x-javascript":case"text/javascript":case"text/jsx":return CodeMirror.javascript.javascript({jsx:!0});case"text/typescript":return CodeMirror.javascript.javascript({typescript:!0});case"text/typescript-jsx":return CodeMirror.javascript.javascript({typescript:!0,jsx:!0});case"text/css":return CodeMirror.css.css();case"text/html":return CodeMirror.html.html({selfClosingTags:!0});case"application/xml":case"image/svg+xml":return(await CodeMirror.xml()).xml();case"application/wasm":return(await CodeMirror.wast()).wast();case"text/x-c++src":return(await CodeMirror.cpp()).cpp();case"text/x-go":return new CodeMirror.LanguageSupport(await CodeMirror.go());case"text/x-java":return(await CodeMirror.java()).java();case"text/x-kotlin":return new CodeMirror.LanguageSupport(await CodeMirror.kotlin());case"application/json":case"application/manifest+json":return(await CodeMirror.json()).json();case"application/x-httpd-php":return(await CodeMirror.php()).php();case"text/x-python":return(await CodeMirror.python()).python();case"text/markdown":return(await CodeMirror.markdown()).markdown();case"text/x-sh":return new CodeMirror.LanguageSupport(await CodeMirror.shell());case"text/x-coffeescript":return new CodeMirror.LanguageSupport(await CodeMirror.coffeescript());case"text/x-clojure":return new CodeMirror.LanguageSupport(await CodeMirror.clojure());case"application/vnd.dart":return new CodeMirror.LanguageSupport(await CodeMirror.dart());case"text/x-gss":return new CodeMirror.LanguageSupport(await CodeMirror.gss());case"text/x-less":return(await CodeMirror.less()).less();case"text/x-sass":return(await CodeMirror.sass()).sass({indented:!0});case"text/x-scala":return new CodeMirror.LanguageSupport(await CodeMirror.scala());case"text/x-scss":return(await CodeMirror.sass()).sass({indented:!1});case"text/x.angular":return(await CodeMirror.angular()).angular();case"text/x.svelte":return(await CodeMirror.svelte()).svelte();case"text/x.vue":return(await CodeMirror.vue()).vue();default:return null}}export class CodeHighlighter{code;tree;constructor(t,e){this.code=t,this.tree=e}highlight(t){this.highlightRange(0,this.code.length,t)}highlightRange(t,e,a){let r=t;const s=(t,e)=>{t>r&&(a(this.code.slice(r,t),e),r=t)};CodeMirror.highlightTree(this.tree,highlightStyle,((t,e,a)=>{s(t,""),s(e,a)}),t,e),s(e,"")}}