text: # coding: utf8
  """
      weasyprint.compat
      -----------------
  
      Workarounds for compatibility with Python 2 and 3 in the same code base.
  
      :copyright: Copyright 2011-2013 Simon Sapin and contributors, see AUTHORS.
      :license: BSD, see LICENSE for details.
  
  """
  
  from __future__ import division, unicode_literals
  
  import sys
  import email
  
  
  __all__ = ['Request', 'base64_decode', 'base64_encode', 'basestring',
             'ints_from_bytes', 'iteritems', 'izip', 'parse_email', 'parse_qs',
             'pathname2url', 'quote', 'unicode', 'unquote', 'unquote_to_bytes',
             'urlencode', 'urljoin', 'urlopen', 'urlopen_contenttype',
             'urlparse_uses_relative', 'urlsplit', 'xrange']
  
  
  if sys.version_info[0] >= 3:
      # Python 3
      from urllib.parse import (
          urljoin, urlsplit, quote, unquote, unquote_to_bytes, parse_qs,
          urlencode, uses_relative as urlparse_uses_relative)
      from urllib.request import urlopen, Request, pathname2url
      from array import array
      from base64 import (decodebytes as base64_decode,
                          encodebytes as base64_encode)
  
      unicode = str
      basestring = str
      xrange = range
      iteritems = dict.items
      izip = zip
  
      def urlopen_contenttype(url):
          """Return (file_obj, mime_type, encoding)"""
          result = urlopen(url)
          info = result.info()
          mime_type = info.get_content_type()
          charset = info.get_param('charset')
          return result, mime_type, charset
  
      def parse_email(data):
          if isinstance(data, bytes):
              data = data.decode('utf8')
          return email.message_from_string(data)
  
      def ints_from_bytes(byte_string):
          """Return a list of ints from a byte string"""
          return list(byte_string)
  
  else:
      # Python 2
      from urlparse import (urljoin, urlsplit, parse_qs,
                            uses_relative as urlparse_uses_relative)
      from urllib2 import urlopen, Request
      from urllib import pathname2url, quote, unquote, urlencode
      from array import array as _array
      from itertools import izip, imap
      from base64 import (decodestring as base64_decode,
                          encodestring as base64_encode)
  
      unicode = unicode
      basestring = basestring
      xrange = xrange
      iteritems = dict.iteritems
  
      def array(typecode, initializer):
          return _array(typecode.encode('ascii'), initializer)
  
      def urlopen_contenttype(url):
          """Return (file_obj, mime_type, encoding)"""
          result = urlopen(url)
          info = result.info()
          mime_type = info.gettype()
          charset = info.getparam('charset')
          return result, mime_type, charset
  
      def unquote_to_bytes(data):
          if isinstance(data, unicode):
              data = data.encode('ascii')
          return unquote(data)
  
      def parse_email(data):
          if isinstance(data, unicode):
              data = data.encode('utf8')
          return email.message_from_string(data)
  
      def ints_from_bytes(byte_string):
          """Return a list of ints from a byte string"""
          return imap(ord, byte_string)
  