def __init__(self, name, generated, project_name, extension_name, source_file=None, ast=None, output_path='', raw_contents=None, comment=None, meta=None, pre_sorted=False, symbol_names=None): assert name if not generated: assert source_file is not None self.name = name basename = os.path.basename(name) name = os.path.splitext(basename)[0] ref = os.path.join(output_path, re.sub(r'\W+', '-', os.path.splitext(basename)[0])) pagename = '%s.html' % ref self.generated = generated self.project_name = project_name self.extension_name = extension_name self.source_file = source_file self.ast = ast self.raw_contents = raw_contents self.comment = comment self.pre_sorted = pre_sorted self.symbol_names = OrderedSet(symbol_names or []) self.output_attrs = None self.subpages = OrderedSet() self.symbols = [] self.private_symbols = [] self.typed_symbols = OrderedDict() self.by_parent_symbols = OrderedDict() self.formatted_contents = None self.detailed_description = None self.build_path = None self.cached_paths = OrderedSet() if comment: meta = comment.meta elif meta: meta = meta else: meta = {} self.meta = {} for key, value in meta.items(): try: self.meta.update(Schema(Page.meta_schema).validate({ key.replace('_', '-').lower(): value})) except SchemaError as err: warn('invalid-page-metadata', '%s: Invalid metadata: \n%s, discarding metadata' % (self.name, str(err))) if not self.meta.get('extra'): self.meta['extra'] = defaultdict() self.title = self.meta.get( 'title', cmark.title_from_ast(self.ast) if ast else '') self.thumbnail = self.meta.get('thumbnail') self.short_description = self.meta.get('short-description', None) self.render_subpages = self.meta.get('render-subpages', True) self.link = Link(pagename, self.title or name, ref)
def __discover_title(self, meta): if meta is not None and 'title' in meta: self.title = meta['title'] elif self.ast: self.title = cmark.title_from_ast(self.ast)
def test_page_no_title(self): inp = (u'Just a paragraph\n') ast = cmark.hotdoc_to_ast(inp, None) self.assertIsNone(cmark.title_from_ast(ast))
def test_page_title(self): inp = (u'### A title *please* a title\n') ast = cmark.hotdoc_to_ast(inp, None) self.assertEqual(cmark.title_from_ast(ast), u'A title *please* a title')