Exemplo n.º 1
0
    def _replace_cdata_list_attribute_values(self, tag_name, attrs):
        """Replaces class="foo bar" with class=["foo", "bar"]

        Modifies its input in place.
        """
        if not attrs:
            return attrs
        if self.cdata_list_attributes:
            universal = self.cdata_list_attributes.get('*', [])
            tag_specific = self.cdata_list_attributes.get(
                tag_name.lower(), None)
            for attr in list(attrs.keys()):
                if attr in universal or (tag_specific
                                         and attr in tag_specific):
                    # We have a "class"-type attribute whose string
                    # value is a whitespace-separated list of
                    # values. Split it into a list.
                    value = attrs[attr]
                    if isinstance(value, str):
                        values = whitespace_re.split(value)
                    else:
                        # html5lib sometimes calls setAttributes twice
                        # for the same tag when rearranging the parse
                        # tree. On the second call the attribute value
                        # here is already a list.  If this happens,
                        # leave the value alone rather than trying to
                        # split it again.
                        values = value
                    attrs[attr] = values
        return attrs
Exemplo n.º 2
0
    def _replace_cdata_list_attribute_values(self, tag_name, attrs):
        """Replaces class="foo bar" with class=["foo", "bar"]

        Modifies its input in place.
        """
        if self.cdata_list_attributes:
            universal = self.cdata_list_attributes.get('*', [])
            tag_specific = self.cdata_list_attributes.get(
                tag_name.lower(), [])
            for cdata_list_attr in itertools.chain(universal, tag_specific):
                if cdata_list_attr in dict(attrs):
                    # Basically, we have a "class" attribute whose
                    # value is a whitespace-separated list of CSS
                    # classes. Split it into a list.
                    value = attrs[cdata_list_attr]
                    if isinstance(value, basestring):
                        values = whitespace_re.split(value)
                    else:
                        # html5lib sometimes calls setAttributes twice
                        # for the same tag when rearranging the parse
                        # tree. On the second call the attribute value
                        # here is already a list.  If this happens,
                        # leave the value alone rather than trying to
                        # split it again.
                        values = value
                    attrs[cdata_list_attr] = values
        return attrs
Exemplo n.º 3
0
    def _replace_cdata_list_attribute_values(self, tag_name, attrs):
        """Replaces class="foo bar" with class=["foo", "bar"]

        Modifies its input in place.
        """
        if self.cdata_list_attributes:
            universal = self.cdata_list_attributes.get('*', [])
            tag_specific = self.cdata_list_attributes.get(tag_name.lower(), [])
            for cdata_list_attr in itertools.chain(universal, tag_specific):
                if cdata_list_attr in dict(attrs):
                    # Basically, we have a "class" attribute whose
                    # value is a whitespace-separated list of CSS
                    # classes. Split it into a list.
                    value = attrs[cdata_list_attr]
                    if isinstance(value, basestring):
                        values = whitespace_re.split(value)
                    else:
                        # html5lib sometimes calls setAttributes twice
                        # for the same tag when rearranging the parse
                        # tree. On the second call the attribute value
                        # here is already a list.  If this happens,
                        # leave the value alone rather than trying to
                        # split it again.
                        values = value
                    attrs[cdata_list_attr] = values
        return attrs
Exemplo n.º 4
0
    def _replace_cdata_list_attribute_values(self, tag_name, attrs):
        """Replaces class="foo bar" with class=["foo", "bar"]

        Modifies its input in place.
        """
        if not attrs:
            return attrs
        if self.cdata_list_attributes:
            universal = self.cdata_list_attributes.get('*', [])
            tag_specific = self.cdata_list_attributes.get(
                tag_name.lower(), None)
            for attr in list(attrs.keys()):
                if attr in universal or (tag_specific and attr in tag_specific):
                    # We have a "class"-type attribute whose string
                    # value is a whitespace-separated list of
                    # values. Split it into a list.
                    value = attrs[attr]
                    if isinstance(value, str):
                        values = whitespace_re.split(value)
                    else:
                        # html5lib sometimes calls setAttributes twice
                        # for the same tag when rearranging the parse
                        # tree. On the second call the attribute value
                        # here is already a list.  If this happens,
                        # leave the value alone rather than trying to
                        # split it again.
                        values = value
                    attrs[attr] = values
        return attrs
Exemplo n.º 5
0
 def __setitem__(self, name, value):
     # If this attribute is a multi-valued attribute for this element,
     # turn its value into a list.
     list_attr = HTML5TreeBuilder.cdata_list_attributes
     if (name in list_attr['*']
             or (self.element.name in list_attr
                 and name in list_attr[self.element.name])):
         value = whitespace_re.split(value)
     self.element[name] = value
Exemplo n.º 6
0
 def __setitem__(self, name, value):
     # If this attribute is a multi-valued attribute for this element,
     # turn its value into a list.
     list_attr = HTML5TreeBuilder.cdata_list_attributes
     if (name in list_attr['*']
         or (self.element.name in list_attr
             and name in list_attr[self.element.name])):
         value = whitespace_re.split(value)
     self.element[name] = value
Exemplo n.º 7
0
 def __setitem__(self, name, value):
     # If this attribute is a multi-valued attribute for this element,
     # turn its value into a list.
     list_attr = HTML5TreeBuilder.cdata_list_attributes
     if (name in list_attr['*']
         or (self.element.name in list_attr
             and name in list_attr[self.element.name])):
         # A node that is being cloned may have already undergone
         # this procedure.
         if not isinstance(value, list):
             value = whitespace_re.split(value)
     self.element[name] = value
Exemplo n.º 8
0
 def __setitem__(self, name, value):
     # If this attribute is a multi-valued attribute for this element,
     # turn its value into a list.
     list_attr = HTML5TreeBuilder.cdata_list_attributes
     if (name in list_attr['*']
             or (self.element.name in list_attr
                 and name in list_attr[self.element.name])):
         # A node that is being cloned may have already undergone
         # this procedure.
         if not isinstance(value, list):
             value = whitespace_re.split(value)
     self.element[name] = value
Exemplo n.º 9
0
    def _replace_cdata_list_attribute_values(self, tag_name, attrs):
        """Replaces class="foo bar" with class=["foo", "bar"]

        Modifies its input in place.
        """
        if self.cdata_list_attributes:
            universal = self.cdata_list_attributes.get('*', [])
            tag_specific = self.cdata_list_attributes.get(tag_name.lower(), [])
            for cdata_list_attr in itertools.chain(universal, tag_specific):
                if cdata_list_attr in dict(attrs):
                    # Basically, we have a "class" attribute whose
                    # value is a whitespace-separated list of CSS
                    # classes. Split it into a list.
                    value = attrs[cdata_list_attr]
                    values = whitespace_re.split(value)
                    attrs[cdata_list_attr] = values
        return attrs
Exemplo n.º 10
0
    def _replace_cdata_list_attribute_values(self, tag_name, attrs):
        """Replaces class="foo bar" with class=["foo", "bar"]

        Modifies its input in place.
        """
        if self.cdata_list_attributes:
            universal = self.cdata_list_attributes.get('*', [])
            tag_specific = self.cdata_list_attributes.get(
                tag_name.lower(), [])
            for cdata_list_attr in itertools.chain(universal, tag_specific):
                if cdata_list_attr in dict(attrs):
                    # Basically, we have a "class" attribute whose
                    # value is a whitespace-separated list of CSS
                    # classes. Split it into a list.
                    value = attrs[cdata_list_attr]
                    values = whitespace_re.split(value)
                    attrs[cdata_list_attr] = values
        return attrs
Exemplo n.º 11
0
 def maybe_value_list(value):
     if ' ' in value:
         value = whitespace_re.split(value)
     return value