Source code for pythonkss.example

from __future__ import unicode_literals

import yaml
from pythonkss import exceptions
from pythonkss import markdownformatter
from yaml import YAMLError


[docs]class Example(object): """ Represents a Example part in a :class:`pythonkss.section.Section` (the part that starts with ``Example:``). .. attribute:: text The markup text (the lines below ``Example:``) .. attribute:: filename The filename. Can be ``None``. .. attribute:: title The title for the markup block. Can be ``None``. """ def __init__(self, text, filename=None, argumentstring=None): """ Args: text: The text in the lines below ``Example:``. filename: The filename that the markup belongs to. Optional. argumentstring: An optional argumentstring in the following format: ``[(<arguments>)] [<title>]``, where (<arguments>) are arguments on formatted as ``key: value``. The only argument supported by this class is ``syntax``, but the subclasses for supported arguments. """ self.text = text self.filename = filename self.argumentstring = None self.argumentdict = {} self.title = '' if argumentstring: self.argumentstring = argumentstring.strip() self.title, self.argumentdict = self._parse_argumentstring() else: self.argumentstring = argumentstring def _parse_argumentstring(self): argumentdict = {} if self.argumentstring.startswith('{') and '}' in self.argumentstring: arguments, title = self.argumentstring.split('}', 1) arguments = arguments[1:] title = title.strip() try: argumentdict = yaml.load('{{{arguments}}}'.format(arguments=arguments)) except YAMLError as e: raise exceptions.ArgumentStringError('Invalid argument string: {!r}. {}'.format( self.argumentstring, e)) else: title = self.argumentstring return title, argumentdict @property def syntax(self): """ Get syntax identifier. Returns: str: Returns :attr:`.syntax` if set, falling back to "html". """ return self.argumentdict.get('syntax', 'html') @property def html(self): """ Format the text as HTML with syntax hilighting. """ markdowntext = '```{syntax}\n{text}\n```'.format( syntax=self.syntax, text=self.text) return markdownformatter.MarkdownFormatter.to_html(markdowntext=markdowntext) @property def type(self): """ Get the value of the ``type`` option, or ``"embedded"`` if it is not specified. """ return self.argumentdict.get('type', 'embedded') @property def height(self): """ Get the value of the ``height`` option, or ``None`` if it is not specified. """ return self.argumentdict.get('height', None) @property def code(self): return self.argumentdict.get('code', True) @property def preview(self): return self.argumentdict.get('preview', self.syntax == 'html')