def _open(self, bind, kwargs): """Return a ``'<partial'`` opener tag with no terminator.""" contents = kwargs.pop('contents', None) if PY2: attributes = _unicode_keyed(kwargs) else: attributes = kwargs tagname = self.tagname new_contents = transform( tagname, attributes, contents, self._context, bind) if not new_contents: new_contents = u'' elif hasattr(new_contents, '__html__'): new_contents = _unpack(new_contents) self.contents = self._markup(new_contents) if self._context[u'ordered_attributes']: pairs = sorted(attributes.items(), key=_attribute_sort_key) else: pairs = iteritems(attributes) guts = u' '.join(u'%s="%s"' % (k, _attribute_escape(v)) for k, v in pairs) if guts: return u'<' + tagname + u' ' + guts else: return u'<' + tagname
def _open(self, bind, kwargs): """Return a ``'<partial'`` opener tag with no terminator.""" contents = kwargs.pop('contents', None) if PY2: attributes = _unicode_keyed(kwargs) else: attributes = kwargs tagname = self.tagname new_contents = transform(tagname, attributes, contents, self._context, bind) if not new_contents: new_contents = u'' elif hasattr(new_contents, '__html__'): new_contents = _unpack(new_contents) self.contents = self._markup(new_contents) if self._context[u'ordered_attributes']: pairs = sorted(attributes.items(), key=_attribute_sort_key) else: pairs = iteritems(attributes) guts = u' '.join(u'%s="%s"' % (k, _attribute_escape(v)) for k, v in pairs) if guts: return u'<' + tagname + u' ' + guts else: return u'<' + tagname
def _rewrite_stream(stream, directives, ctxt, vars, bind): stream = list(stream) mutable_attrs = {} for control_attribute in directives: control_attribute.inject(mutable_attrs, ctxt, vars) kind, (tagname, attrs), pos = stream[0] if len(stream) == 2: contents = None else: contents = _simplify_stream(stream[1:-1], ctxt, vars) existing_attributes = {} for qname, value in attrs: if qname.namespace is None: if not isinstance(value, unicode): value = _simplify_stream(value, ctxt, vars) attrs |= ((qname, value), ) existing_attributes[qname.localname] = qname mutable_attrs[qname.localname] = value try: render_context = ctxt['flatland_render_context'] except KeyError: ctxt['flatland_render_context'] = render_context = Context() new_contents = transform(tagname.localname, mutable_attrs, contents, render_context, bind) if new_contents is None: new_contents = () elif isinstance(new_contents, unicode): new_contents = [(TEXT, new_contents, (None, -1, -1))] pairs = sorted(mutable_attrs.iteritems(), key=_attribute_sort_key) for attribute_name, value in pairs: if attribute_name in existing_attributes: qname = existing_attributes.pop(attribute_name) else: qname = QName(attribute_name) attrs |= ((qname, value), ) for qname in existing_attributes.values(): attrs -= qname stream[0] = (kind, (tagname, attrs), pos) if new_contents and tagname.localname == u'select' and bind is not None: if tagname.namespace: sub_tag = Namespace(tagname.namespace).option else: # pragma: nocover sub_tag = QName('option') new_contents = _bind_unbound_tags(new_contents, sub_tag, bind) if new_contents: stream[1:-1] = new_contents return iter(stream)
def _rewrite_stream(stream, directives, ctxt, vars, bind): stream = list(stream) mutable_attrs = {} for control_attribute in directives: control_attribute.inject(mutable_attrs, ctxt, vars) kind, (tagname, attrs), pos = stream[0] if len(stream) == 2: contents = None else: contents = _simplify_stream(stream[1:-1], ctxt, vars) existing_attributes = {} for qname, value in attrs: if qname.namespace is None: if not isinstance(value, unicode): value = _simplify_stream(value, ctxt, vars) attrs |= ((qname, value),) existing_attributes[qname.localname] = qname mutable_attrs[qname.localname] = value try: render_context = ctxt['flatland_render_context'] except KeyError: ctxt['flatland_render_context'] = render_context = Context() new_contents = transform(tagname.localname, mutable_attrs, contents, render_context, bind) if new_contents is None: new_contents = () elif isinstance(new_contents, unicode): new_contents = [(TEXT, new_contents, (None, -1, -1))] pairs = sorted(mutable_attrs.iteritems(), key=_attribute_sort_key) for attribute_name, value in pairs: if attribute_name in existing_attributes: qname = existing_attributes.pop(attribute_name) else: qname = QName(attribute_name) attrs |= ((qname, value),) for qname in existing_attributes.values(): attrs -= qname stream[0] = (kind, (tagname, attrs), pos) if new_contents and tagname.localname == u'select' and bind is not None: if tagname.namespace: sub_tag = Namespace(tagname.namespace).option else: # pragma: nocover sub_tag = QName('option') new_contents = _bind_unbound_tags(new_contents, sub_tag, bind) if new_contents: stream[1:-1] = new_contents return iter(stream)