mirror of
https://github.com/heyman/heynote.git
synced 2025-04-02 12:08:24 +02:00
Add Language class and move language related settings into editor/language.js In order to add an additional language now, one only has to add in to the LANGUAGES list, and add the token to heynote.grammar
36 lines
1.4 KiB
JavaScript
36 lines
1.4 KiB
JavaScript
import { parseMixed } from "@lezer/common"
|
|
|
|
import { jsonLanguage } from "@codemirror/lang-json"
|
|
import { pythonLanguage } from "@codemirror/lang-python"
|
|
import { javascriptLanguage } from "@codemirror/lang-javascript"
|
|
import { htmlLanguage } from "@codemirror/lang-html"
|
|
import { StandardSQL } from "@codemirror/lang-sql"
|
|
import { markdownLanguage } from "@codemirror/lang-markdown"
|
|
import { javaLanguage } from "@codemirror/lang-java"
|
|
import { lezerLanguage } from "@codemirror/lang-lezer"
|
|
import { phpLanguage } from "@codemirror/lang-php"
|
|
|
|
import { NoteContent, NoteLanguage } from "./parser.terms.js"
|
|
import { LANGUAGES } from "../languages.js"
|
|
|
|
const languageMapping = Object.fromEntries(LANGUAGES.map(l => [l.token, l.parser]))
|
|
|
|
|
|
export function configureNesting() {
|
|
return parseMixed((node, input) => {
|
|
let id = node.type.id
|
|
if (id == NoteContent) {
|
|
let noteLang = node.node.parent.firstChild.getChildren(NoteLanguage)[0]
|
|
let langName = input.read(noteLang?.from, noteLang?.to)
|
|
//console.log("langName:", langName)
|
|
if (langName in languageMapping && languageMapping[langName] !== null) {
|
|
//console.log("found parser for language:", langName)
|
|
return {
|
|
parser:languageMapping[langName],
|
|
}
|
|
}
|
|
}
|
|
return null
|
|
})
|
|
}
|