@jupyter-lsp/jupyterlab-lsp
Version:
Language Server Protocol integration for JupyterLab
84 lines (80 loc) • 2.54 kB
text/typescript
import { IForeignCodeExtractor } from '@jupyterlab/lsp';
import { RegExpForeignCodeExtractor } from '../../extractors/regexp';
export interface IForeignCodeExtractorsRegistry {
[host_language: string]: IForeignCodeExtractor[];
}
export let foreignCodeExtractors: IForeignCodeExtractorsRegistry = {
// general note: to match new lines use [^] instead of dot, unless the target is ES2018, then use /s
python: [
//
// Standalone IPython magics
// (script magics are standalone, i.e. consecutive code cells with the same magic create two different namespaces)
//
new RegExpForeignCodeExtractor({
language: 'python',
pattern: '^%%(python|python2|python3|pypy)( .*?)?\n([^]*)',
foreignCaptureGroups: [3],
isStandalone: true,
fileExtension: 'py'
}),
new RegExpForeignCodeExtractor({
language: 'perl',
pattern: '^%%(perl)( .*?)?\n([^]*)',
foreignCaptureGroups: [3],
isStandalone: true,
fileExtension: 'pl'
}),
new RegExpForeignCodeExtractor({
language: 'ruby',
pattern: '^%%(ruby)( .*?)?\n([^]*)',
foreignCaptureGroups: [3],
isStandalone: true,
fileExtension: 'rb'
}),
new RegExpForeignCodeExtractor({
language: 'sh',
pattern: '^%%(sh|bash)( .*?)?\n([^]*)',
foreignCaptureGroups: [3],
isStandalone: true,
fileExtension: 'sh'
}),
new RegExpForeignCodeExtractor({
language: 'html',
pattern: '^%%(html --isolated)( .*?)?\n([^]*)',
foreignCaptureGroups: [3],
isStandalone: true,
fileExtension: 'html'
}),
//
// IPython magics producing continuous documents (non-standalone):
//
new RegExpForeignCodeExtractor({
language: 'javascript',
pattern: '^%%(js|javascript)( .*?)?\n([^]*)',
foreignCaptureGroups: [3],
isStandalone: false,
fileExtension: 'js'
}),
new RegExpForeignCodeExtractor({
language: 'html',
pattern: '^%%(?!html --isolated)(html)( .*?)?\n([^]*)',
foreignCaptureGroups: [3],
isStandalone: false,
fileExtension: 'html'
}),
new RegExpForeignCodeExtractor({
language: 'latex',
pattern: '^%%(latex)( .*?)?\n([^]*)',
foreignCaptureGroups: [3],
isStandalone: false,
fileExtension: 'tex'
}),
new RegExpForeignCodeExtractor({
language: 'markdown',
pattern: '^%%(markdown)( .*?)?\n([^]*)',
foreignCaptureGroups: [3],
isStandalone: false,
fileExtension: 'md'
})
]
};