Source code for hal.streams.markdown

# -*- coding: utf-8 -*-

"""Markdown r/w models """


[docs]class MarkdownItem: """Models anything that can be written in Markdown""" TYPES = ["text", "url", "image", "title"] ATTRIBUTES = ["ref", "size"] def __init__(self, text, item_type, attributes=None): """ :param text: Text property to write :param item_type: Type of item :param attributes: Extra param, like url, ref ... Each key MUST be in MarkdownItem.ATTRIBUTES """ self.text = str(text) self.type = item_type self.attributes = attributes
[docs] def to_markdown(self): """Converts to markdown :return: item in markdown format """ if self.type == "text": return self.text elif self.type == "url" or self.type == "image": return "[" + self.text + "](" + self.attributes["ref"] + ")" elif self.type == "title": return "#" * int(self.attributes["size"]) + " " + self.text return None
def __str__(self): return self.to_markdown()
[docs]class MarkdownTable: """Models and writes a table to .md""" def __init__(self, labels, table): """ :param labels: Column names :param table: table data """ self.labels = labels self.table = table @staticmethod def _get_row(items): """ :param items: array :return: markdown-formatted array """ items = [ str(item) for item in items ] # convert to strings return "|" + "|".join(items) + "|" def _get_header(self): """Gets header of table :return: markdown-formatted header""" out = self._get_row(self.labels) out += "\n" out += self._get_row(["---"] * len(self.labels)) # line below headers return out
[docs] def to_markdown(self): """Converts to markdown :return: item in markdown format """ out = self._get_header() out += "\n" for row in self.table: out += self._get_row(row) out += "\n" return out
def __str__(self): return self.to_markdown()