code: def append(self, *strings):
          
          close_tag_start = self.rfind('</')
          if self.tagname: # More accurate
              close_tag_start = self.rfind('</'+self.tagname)
          if close_tag_start == -1: # Couldn't find closing tag
              return self + "".join(strings) # Just tack on to the end
          ending = self[close_tag_start:]
          beginning = self[:close_tag_start]
          if self.tagname: # Preserve it
              tagname = self.tagname
              new = HTML(beginning + "".join(strings) + ending)
              new.tagname = tagname
              return new
          else:
              return HTML(beginning + "".join(strings) + ending)
docs: Adds any number of supplied *strings* to `self` (we're a subclass of
          `str` remember) just before the last closing tag and returns a new
          instance of `~htmltag.HTML` with the result.
          Example::
  
              >>> from htmltag import span, b
              >>> html = span('Test:')
              >>> print(html)
              <span>Test:</span>
              >>> html = html.append(' ', b('appended'))
              >>> print(html)
              <span>Test: <b>appended</b></span>
  
          In the case of self-closing tags like '<img>' the string will simply be
          appended after the tag::
  
              >>> from htmltag import img
              >>> image = img(src="http://company.com/image.png")
              >>> print(image.append("Appended string"))
              <img src="http://company.com/image.png">Appended string
  
          .. note:: Why not update ourselves in-place?  Because we're a subclass
              of `str`; in Python strings are immutable.