33# %% auto 0
44__all__ = ['DEFAULT_FM_KEYS' , 'nbflags_' , 'cell_lang' , 'add_links' , 'strip_ansi' , 'strip_hidden_metadata' , 'hide_' , 'hide_line' ,
55 'filter_stream_' , 'clean_magics' , 'lang_identify' , 'rm_header_dash' , 'rm_export' , 'clean_show_doc' ,
6- 'exec_show_docs' , 'populate_language' , 'insert_warning' , 'add_show_docs' , 'is_frontmatter' , 'nb_fmdict ' ,
7- 'construct_fm' , 'insert_frontmatter' , 'infer_frontmatter' ]
6+ 'exec_show_docs' , 'populate_language' , 'insert_warning' , 'add_show_docs' , 'is_frontmatter' , 'yaml_str ' ,
7+ 'nb_fmdict' , ' construct_fm' , 'insert_frontmatter' , 'infer_frontmatter' ]
88
99# %% ../nbs/09_processors.ipynb 2
1010import ast
@@ -202,6 +202,13 @@ def _default_exp(nb):
202202 return default_exp .group (1 ) if default_exp else None
203203
204204# %% ../nbs/09_processors.ipynb 52
205+ def yaml_str (s :str ):
206+ "Create a valid YAML string from `s`"
207+ if s [0 ]== '"' and s [- 1 ]== '"' : return s
208+ res = s .replace ('\\ ' , '\\ \\ ' ).replace ('"' , r'\"' )
209+ return f'"{ res } "'
210+
211+ # %% ../nbs/09_processors.ipynb 53
205212def nb_fmdict (nb , remove = True ):
206213 "Infer the front matter from a notebook's markdown formatting"
207214 md_cells = _celltyp (nb , 'markdown' ).filter (_istitle )
@@ -212,26 +219,26 @@ def nb_fmdict(nb, remove=True):
212219 flags = re .findall ('^-\s+(.*)' , cell .source , flags = re .MULTILINE )
213220 flags = [s .split (':' , 1 ) for s in flags if ':' in s ] if flags else []
214221 flags = merge ({k :v for k ,v in flags if k and v },
215- {'title' :title }, {'description' :desc } if desc else {})
222+ {'title' :yaml_str ( title ) }, {'description' :yaml_str ( desc ) } if desc else {})
216223 if remove : cell ['source' ] = None
217224 return flags
218225 else : return {}
219226
220- # %% ../nbs/09_processors.ipynb 55
227+ # %% ../nbs/09_processors.ipynb 56
221228DEFAULT_FM_KEYS = ['title' , 'description' , 'author' , 'image' , 'categories' , 'output-file' , 'aliases' ]
222229
223230def construct_fm (fmdict :dict , keys = DEFAULT_FM_KEYS ):
224231 "construct front matter from a dictionary, but only for `keys`"
225232 if not fmdict : return None
226233 return '---\n ' + '\n ' .join ([f"{ k } : { fmdict [k ]} " for k in keys if k in fmdict ])+ '\n ---'
227234
228- # %% ../nbs/09_processors.ipynb 57
235+ # %% ../nbs/09_processors.ipynb 58
229236def insert_frontmatter (nb , fm_dict :dict , filter_keys :list = DEFAULT_FM_KEYS ):
230237 "Add frontmatter into notebook based on `filter_keys` that exist in `fmdict`."
231238 fm = construct_fm (fm_dict , keys = filter_keys )
232239 if fm : nb .cells .insert (0 , NbCell (0 , dict (cell_type = 'raw' , metadata = {}, source = fm , directives_ = {})))
233240
234- # %% ../nbs/09_processors.ipynb 58
241+ # %% ../nbs/09_processors.ipynb 59
235242def infer_frontmatter (nb ):
236243 "Insert front matter if it doesn't exist automatically from nbdev styled markdown."
237244 if is_frontmatter (nb ): return
0 commit comments