5
5
import json
6
6
import re
7
7
import warnings
8
- from collections import Counter
9
8
from textwrap import dedent
10
9
11
10
import nbformat as nbf
@@ -255,20 +254,6 @@ def read_cell_metadata(token, cell_index):
255
254
return metadata
256
255
257
256
258
- def lexer_to_language (lexer ):
259
- """Convert a lexer name to a language name."""
260
- if lexer == "ipython3" :
261
- return "python"
262
- return None
263
-
264
-
265
- def language_to_lexer (language ):
266
- """Convert a language name to a lexer name."""
267
- if language == "python" :
268
- return "ipython3"
269
- return None
270
-
271
-
272
257
def myst_to_notebook (
273
258
text ,
274
259
code_directive = CODE_DIRECTIVE ,
@@ -293,6 +278,7 @@ def myst_to_notebook(
293
278
tokens = get_parser ().parse (text + "\n " )
294
279
lines = text .splitlines ()
295
280
md_start_line = 0
281
+ default_lexer = None
296
282
297
283
# get the document metadata
298
284
metadata_nb = {}
@@ -325,8 +311,6 @@ def _flush_markdown(start_line, token, md_metadata):
325
311
nesting_level = 0
326
312
md_metadata = {}
327
313
328
- languages = Counter ()
329
-
330
314
for token in tokens :
331
315
nesting_level += token .nesting
332
316
@@ -339,9 +323,14 @@ def _flush_markdown(start_line, token, md_metadata):
339
323
options , body_lines = read_fenced_cell (token , len (notebook .cells ), "Code" )
340
324
assert token .info .startswith (code_directive )
341
325
lexer = token .info [len (code_directive ) :].strip ()
342
- language = lexer_to_language (lexer )
343
- if language :
344
- languages [language ] += 1
326
+ if lexer :
327
+ if not default_lexer :
328
+ default_lexer = lexer
329
+ elif lexer != default_lexer :
330
+ warnings .warn (
331
+ f"All code cells in a MyST notebook must have the same language: { lexer } !={ default_lexer } "
332
+ )
333
+
345
334
meta = nbf .from_dict (options )
346
335
source_map .append (token .map [0 ] + 1 )
347
336
notebook .cells .append (
@@ -371,14 +360,11 @@ def _flush_markdown(start_line, token, md_metadata):
371
360
if add_source_map :
372
361
notebook .metadata ["source_map" ] = source_map
373
362
374
- if "kernelspec" not in notebook .metadata :
375
- for language , count in languages .most_common (1 ):
376
- if count :
377
- jupytext_metadata = {"main_language" : language }
378
- if not notebook .metadata :
379
- jupytext_metadata ["notebook_metadata_filter" ] = "-all"
380
- notebook .metadata ["jupytext" ] = jupytext_metadata
381
- break
363
+ if "kernelspec" not in notebook .metadata and default_lexer :
364
+ jupytext_metadata = {"default_lexer" : default_lexer }
365
+ if not notebook .metadata :
366
+ jupytext_metadata ["notebook_metadata_filter" ] = "-all"
367
+ notebook .metadata ["jupytext" ] = jupytext_metadata
382
368
383
369
return notebook
384
370
0 commit comments