Source code for ladybug_display.svg.element

"""Base class for all SVG elements."""
from . import _mixins as m
from ._transforms import Transform
from ._types import _int, _float, _number, _str, _str_enum, _list_of_objs, _dict

OVERFLOWS = set(('visible', 'hidden', 'scroll', 'auto', 'inherit'))
FILL_RULES = set(('evenodd', 'nonzero', 'inherit'))
VECTOR_EFFECTS = set(('none', 'non-scaling-stroke', 'non-scaling-size',
                      'non-rotation', 'fixed-position'))
VISIBILITIES = set(('visible', 'hidden', 'inherit'))
LINECAPS = set(('butt', 'round', 'square', 'inherit'))
LINEJOINS = set(('miter', 'round', 'bevel', 'inherit'))
LENGTH_ADJUSTS = set(('spacing', 'spacingAndGlyphs'))
WRITING_MODES = set(('horizontal-tb', 'vertical-rl', 'vertical-lr'))


[docs] class Element(object): """ https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Core """ element_name = '' def __init__(self, elements=None, text=None, id=None, tabindex=None, lang=None, transform_origin=None, style=None, data=None): self.elements = elements self.text = text self.id = id self.tabindex = tabindex self.lang = lang self.transform_origin = transform_origin self.style = style self.data = data @property def elements(self): """[list of objs] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/elements """ return self._elements @elements.setter def elements(self, value): self._elements = _list_of_objs(value, Element, 'elements', True) @property def text(self): """[str] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text """ return self._text @text.setter def text(self, value): self._text = _str(value, 'text', True) @property def id(self): """[str] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/id """ return self._id @id.setter def id(self, value): self._id = _str(value, 'id', True) @property def tabindex(self): """[int] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/tabindex """ return self._tabindex @tabindex.setter def tabindex(self, value): self._tabindex = _int(value, 'tabindex', True) @property def lang(self): """[str] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/lang """ return self._lang @lang.setter def lang(self, value): self._lang = _str(value, 'lang', True) @property def transform_origin(self): """[str] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform-origin """ return self._transform_origin @transform_origin.setter def transform_origin(self, value): self._transform_origin = _str(value, 'transform_origin', True) @property def style(self): """[str] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/style """ return self._style @style.setter def style(self, value): self._style = _str(value, 'style', True) @property def data(self): """[dict] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/data """ return self._data @data.setter def data(self, value): self._data = _dict(value, 'data', True) @classmethod def _as_str(cls, val): """Get Element as string.""" if val is None: return '' if isinstance(val, Element): return str(val) if isinstance(val, bool): return str(val).lower() if isinstance(val, (list, tuple)): return ' '.join(cls._as_str(v) for v in val) return str(val)
[docs] def as_dict(self): result = {} for key, val in vars(self).items(): if val is None: continue key = key.strip('_') if key in ('elements', 'text', 'data'): continue key = key.rstrip('_') key = key.replace('__', ':') key = key.replace('_', '-') result[key] = self._as_str(val) return result
[docs] def as_str(self): props = ' '.join('{}="{}"'.format(k, v) for k, v in self.as_dict().items()) if self.data: props += ' ' + ' '.join('data-{}="{}"'.format(k, v) for k, v in self.data.items()) if self.text: return '<{} {}>{}</{}>'.format( self.element_name, props, self.text, self.element_name) if self.elements: content = ''.join(self._as_str(e) for e in self.elements) return '<{} {}>{}</{}>'.format(self.element_name, props, content, self.element_name) return '<{} {}/>'.format(self.element_name, props)
def __str__(self): return self.as_str()
[docs] def ToString(self): """Overwrite .NET ToString.""" return self.__str__()
class _FigureElement(m.Color, m.GraphicsElementEvents, m.Graphics, m.FillStroke): PAINT_ORDERS = set(('normal', 'fill', 'stroke', 'markers')) RENDERINGS = set(('auto', 'optimizeSpeed', 'crispEdges', 'geometricPrecision', 'inherit')) def __init__(self, pathLength=None, paint_order=None, shape_rendering=None, class_=None, vector_effect=None, visibility=None, mask=None, opacity=None, clip_path=None): super(_FigureElement, self).__init__() self.pathLength = pathLength self.paint_order = paint_order self.shape_rendering = shape_rendering self.class_ = class_ self.vector_effect = vector_effect self.visibility = visibility self.mask = mask self.opacity = opacity self.clip_path = clip_path @property def pathLength(self): """[float] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/pathLength """ return self._pathLength @pathLength.setter def pathLength(self, value): self._pathLength = _float(value, 'pathLength', True) @property def paint_order(self): """[str enum] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/paint-order """ return self._paint_order @paint_order.setter def paint_order(self, value): self._paint_order = _str_enum(value, self.PAINT_ORDERS, 'paint_order', True) @property def shape_rendering(self): """[str enum] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering """ return self._shape_rendering @shape_rendering.setter def shape_rendering(self, value): self._shape_rendering = _str_enum(value, self.RENDERINGS, 'shape_rendering', True) @property def class_(self): """[list of objs] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/class- """ return self._class_ @class_.setter def class_(self, value): self._class_ = _list_of_objs(value, str, 'class_', True) @property def vector_effect(self): """[str enum] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/vector-effect """ return self._vector_effect @vector_effect.setter def vector_effect(self, value): self._vector_effect = _str_enum(value, VECTOR_EFFECTS, 'vector_effect', True) @property def visibility(self): """[str enum] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/visibility """ return self._visibility @visibility.setter def visibility(self, value): self._visibility = _str_enum(value, VISIBILITIES, 'visibility', True) @property def mask(self): """[str] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/mask """ return self._mask @mask.setter def mask(self, value): self._mask = _str(value, 'mask', True) @property def opacity(self): """[number] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity """ return self._opacity @opacity.setter def opacity(self, value): self._opacity = _number(value, 'opacity', True) @property def clip_path(self): """[str] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/clip-path """ return self._clip_path @clip_path.setter def clip_path(self, value): self._clip_path = _str(value, 'clip_path', True) class _TextElement( m.FontSpecification, m.TextContentElements, m.Color, m.GraphicsElementEvents, m.Graphics, m.FillStroke, ): PAINT_ORDERS = set(('normal', 'fill', 'stroke', 'markers')) def __init__(self, paint_order=None, class_=None, vector_effect=None, visibility=None, fill_opacity=None, fill=None): super(_TextElement, self).__init__() self.paint_order = paint_order self.class_ = class_ self.vector_effect = vector_effect self.visibility = visibility self.fill_opacity = fill_opacity self.fill = fill @property def paint_order(self): """[str enum] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/paint-order """ return self._paint_order @paint_order.setter def paint_order(self, value): self._paint_order = _str_enum(value, self.PAINT_ORDERS, 'paint_order', True) @property def class_(self): """[list of objs] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/class- """ return self._class_ @class_.setter def class_(self, value): self._class_ = _list_of_objs(value, str, 'class_', True) @property def vector_effect(self): """[str enum] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/vector-effect """ return self._vector_effect @vector_effect.setter def vector_effect(self, value): self._vector_effect = _str_enum(value, VECTOR_EFFECTS, 'vector_effect', True) @property def visibility(self): """[str enum] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/visibility """ return self._visibility @visibility.setter def visibility(self, value): self._visibility = _str_enum(value, VISIBILITIES, 'visibility', True) @property def fill_opacity(self): """[number] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity """ return self._fill_opacity @fill_opacity.setter def fill_opacity(self, value): self._fill_opacity = _number(value, 'fill_opacity', True) @property def fill(self): """[str] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill """ return self._fill @fill.setter def fill(self, value): self._fill = _str(value, 'fill', True) class _Gradient: UNITS = set(('userSpaceOnUse', 'objectBoundingBox')) SPREAD_METHODS = set(('pad', 'reflect', 'repeat')) def __init__(self, externalResourcesRequired=None, gradientUnits=None, gradientTransform=None, spreadMethod=None, href=None, class_=None): super(_Gradient, self).__init__() self.externalResourcesRequired = externalResourcesRequired self.gradientUnits = gradientUnits self.gradientTransform = gradientTransform self.spreadMethod = spreadMethod self.href = href self.class_ = class_ @property def externalResourcesRequired(self): """[bool]""" return self._externalResourcesRequired @externalResourcesRequired.setter def externalResourcesRequired(self, value): self._externalResourcesRequired = bool(value) if value is not None else None @property def gradientUnits(self): """[str enum] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/gradientUnits """ return self._gradientUnits @gradientUnits.setter def gradientUnits(self, value): self._gradientUnits = _str_enum(value, self.UNITS, 'gradientUnits', True) @property def gradientTransform(self): """[list of objs] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/gradientTransform """ return self._gradientTransform @gradientTransform.setter def gradientTransform(self, value): self._gradientTransform = _list_of_objs(value, Transform, 'gradientTransform', True) @property def spreadMethod(self): """[str enum] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/spreadMethod """ return self._spreadMethod @spreadMethod.setter def spreadMethod(self, value): self._spreadMethod = _str_enum(value, self.SPREAD_METHODS, 'spreadMethod', True) @property def href(self): """[str] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href """ return self._href @href.setter def href(self, value): self._href = _str(value, 'href', True) @property def class_(self): """[list of objs] https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/class- """ return self._class_ @class_.setter def class_(self, value): self._class_ = _list_of_objs(value, str, 'class_', True)