@@ -59,6 +59,38 @@ class CompileRest(PageCompiler):
59
59
demote_headers = True
60
60
logger = None
61
61
62
+ def read_metadata (self , post , file_metadata_regexp = None , unslugify_titles = False , lang = None ):
63
+ """Read the metadata from a post, and return a metadata dict."""
64
+ if lang is None :
65
+ lang = LocaleBorg ().current_lang
66
+ source = post .translated_source_path (lang )
67
+
68
+ with io .open (source , 'r' , encoding = 'utf-8' ) as inf :
69
+ document = docutils .core .publish_doctree (
70
+ inf .read (), reader_name = 'standalone' ,
71
+ settings_overrides = {'expose_internals' :
72
+ ['refnames' , 'do_not_expose' ],
73
+ 'report_level' : 5 })
74
+ meta = {}
75
+ if 'title' in document :
76
+ meta ['title' ] = document ['title' ]
77
+ for docinfo in document .traverse (docutils .nodes .docinfo ):
78
+ for element in docinfo .children :
79
+ if element .tagname == 'field' : # custom fields (e.g. summary)
80
+ name_elem , body_elem = element .children
81
+ name = name_elem .astext ()
82
+ value = body_elem .astext ()
83
+ elif element .tagname == 'authors' : # author list
84
+ name = element .tagname
85
+ value = [element .astext () for element in element .children ]
86
+ else : # standard fields (e.g. address)
87
+ name = element .tagname
88
+ value = element .astext ()
89
+ name = name .lower ()
90
+
91
+ meta [name ] = value
92
+ return meta
93
+
62
94
def compile_string (self , data , source_path = None , is_two_file = True , post = None , lang = None ):
63
95
"""Compile reST into HTML strings."""
64
96
# If errors occur, this will be added to the line number reported by
0 commit comments