@@ -27,26 +27,11 @@ import { lowlight } from 'lowlight/lib/core.js'
2727import hljs from 'highlight.js/lib/core'
2828
2929import { logger } from './helpers/logger.js'
30+ import { extensionHighlight } from './helpers/mappings.js'
3031import { FocusTrap , Mention , PlainText , RichText } from './extensions/index.js'
3132import { PlainTextLowlight } from './nodes/PlainTextLowlight.js'
3233
33- export const loadSyntaxHighlight = async ( language ) => {
34- const list = hljs . listLanguages ( )
35- logger . debug ( 'Supported languages' , { list } )
36- if ( ! lowlight . listLanguages ( ) . includes ( language ) ) {
37- try {
38- logger . debug ( 'Loading language' , language )
39- // eslint-disable-next-line n/no-missing-import
40- const syntax = await import ( /* webpackChunkName: "highlight/[request]" */ `../node_modules/highlight.js/lib/languages/${ language } .js` )
41- lowlight . registerLanguage ( language , syntax . default )
42- } catch ( error ) {
43- // fallback to none
44- logger . debug ( 'No matching highlighing found' , { error } )
45- }
46- }
47- }
48-
49- export const createRichEditor = ( { extensions = [ ] , session, relativePath, isEmbedded = false } = { } ) => {
34+ export const createRichEditor = async ( { extensions = [ ] , session, relativePath, isEmbedded = false } = { } ) => {
5035 return _createEditor ( [
5136 FocusTrap ,
5237 RichText . configure ( {
@@ -64,7 +49,14 @@ export const createRichEditor = ({ extensions = [], session, relativePath, isEmb
6449 ] )
6550}
6651
67- export const createPlainEditor = ( { language, extensions = [ ] } = { } ) => {
52+ export const createPlainEditor = async ( { relativePath, extensions = [ ] } = { } ) => {
53+
54+ const fileExtension = relativePath
55+ ? relativePath . split ( '/' ) . pop ( ) . split ( '.' ) . pop ( )
56+ : 'txt'
57+ const language = extensionHighlight [ fileExtension ] || fileExtension
58+ await loadSyntaxHighlight ( language )
59+
6860 return _createEditor ( [
6961 PlainText ,
7062 PlainTextLowlight
@@ -79,3 +71,20 @@ const _createEditor = extensions => {
7971 extensions,
8072 } )
8173}
74+
75+ const loadSyntaxHighlight = async language => {
76+
77+ const list = hljs . listLanguages ( )
78+ logger . debug ( 'Supported languages' , { list } )
79+ if ( ! lowlight . listLanguages ( ) . includes ( language ) ) {
80+ try {
81+ logger . debug ( 'Loading language' , language )
82+ // eslint-disable-next-line n/no-missing-import
83+ const syntax = await import ( /* webpackChunkName: "highlight/[request]" */ `../node_modules/highlight.js/lib/languages/${ language } .js` )
84+ lowlight . registerLanguage ( language , syntax . default )
85+ } catch ( error ) {
86+ // fallback to none
87+ logger . debug ( 'No matching highlighing found' , { error } )
88+ }
89+ }
90+ }
0 commit comments