示例#1
0
 def __init__(self, images_dir, *args):
     super().__init__(*args)
     if images_dir:
         self.images_dir = images_dir.strip('/')
     else:
         self.images_dir = ''
     self.image_pattern = ImagePattern(*args)
示例#2
0
文件: post.py 项目: malefs/Crotal
 def handleMatch(self, m):
     node = ImagePattern.handleMatch(self, m)
     image_src = node.attrib["src"]
     if not image_src.startswith("http"):
         if image_src.startswith("/"):
             node.attrib["src"] = "{0}{1}".format(self.config.root_path, image_src[1:])
     return node
class BaseUrlImagePattern(Pattern):

    """
    Adds base url to images which have relative path.
    """

    url_pattern = re.compile(
        r'^(?:http|ftp)s?://'  # http:// or https://
        r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|'  # domain...
        r'localhost|'  # localhost...
        r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'  # ...or ip
        r'(?::\d+)?'  # optional port
        r'(?:/?|[/?]\S+)$', re.IGNORECASE)

    def __init__(self, images_dir, *args):
        super().__init__(*args)
        if images_dir:
            self.images_dir = images_dir.strip('/')
        else:
            self.images_dir = ''
        self.image_pattern = ImagePattern(*args)

    def _is_url(self, text):
        url = text.strip().strip('/').split(' ')[0]
        return self.url_pattern.match(url)

    def handleMatch(self, m):
        if self._is_url(m.group(10)):
            image = m.string
        else:
            image = IMAGE_PATTERN.format(m.group(2), self.images_dir, m.group(10).strip('/'))
        pattern = re.compile("^(.*?)%s(.*?)$" % self.image_pattern.pattern, re.DOTALL | re.UNICODE)
        match = re.match(pattern, ' ' + image + ' ')
        return self.image_pattern.handleMatch(match)
示例#4
0
    def handleMatch(self, match):
        node = ImagePattern.handleMatch(self, match)
        # check 'src' to ensure it is local
        src = node.attrib.get('src')
        storage_class = get_storage_class(STATICBLOG_STORAGE)
        storage = storage_class()

        # otherwise we need to do some downloading!
        if 'http://' in src or 'https://' in src:
            img_data = urllib2.urlopen(src).read()
            md5 = hashlib.md5()
            md5.update(img_data)
            name = md5.hexdigest() + '/' + os.path.basename(src)
        else:
            with open(STATICBLOG_POST_DIRECTORY + src, 'r') as fhandle:
                img_data = fhandle.read()
            name = src

        print >> sys.stderr, 'Uploading ' + src
        try:
            storage.save(name, ContentFile(img_data))
            node.attrib['src'] = storage.url(name)
            print >> sys.stderr, 'Uploaded ' + src + ' to ' + storage.url(name)
        except Exception as e:
            print >> sys.stderr, str(e)
            print >> sys.stderr, '\033[01;31mUpload of %s failed\033[0m' % src
        return node
示例#5
0
 def handleMatch(self, match):
     node = ImagePattern.handleMatch(self, match)
     # check 'src' to ensure it is local
     src = node.attrib.get('src')
     storage_class = get_storage_class(STATICBLOG_STORAGE)
     storage = storage_class()
 
     # otherwise we need to do some downloading!
     if 'http://' in src or 'https://' in src:
         img_data = urllib2.urlopen(src).read()
         md5 = hashlib.md5()
         md5.update(img_data)
         name = md5.hexdigest() + '/' + os.path.basename(src)
     else:
         with open(STATICBLOG_POST_DIRECTORY + src, 'r') as fhandle:
             img_data = fhandle.read()
         name = src
     
     print >> sys.stderr, 'Uploading ' + src
     try:
         storage.save(name, ContentFile(img_data))
         node.attrib['src'] = storage.url(name)
         print >> sys.stderr, 'Uploaded ' + src + ' to ' + storage.url(name)
     except Exception as e:
         print >> sys.stderr, str(e)
         print >> sys.stderr, '\033[01;31mUpload of %s failed\033[0m' % src
     return node
示例#6
0
 def extendMarkdown(self, md, md_globals):
     md.inlinePatterns["link"] = LinkPattern(SPACED_LINK_RE, md)
     md.inlinePatterns["reference"] = ReferencePattern(
         SPACED_REFERENCE_RE, md)
     md.inlinePatterns["image_link"] = ImagePattern(SPACED_IMAGE_LINK_RE,
                                                    md)
     md.inlinePatterns["image_reference"] = ImageReferencePattern(
         SPACED_IMAGE_REFERENCE_RE, md)
示例#7
0
 def handleMatch(self, m):
     image = ImagePattern.handleMatch(self, m)
     title = image.get('title')
     if title:
         figure = etree.Element('figure')
         figure.append(image)
         etree.SubElement(figure, 'figcaption').text = title
         return figure
     else:
         return image
示例#8
0
 def handleMatch(self, m):
     image = ImagePattern.handleMatch(self, m)
     title = image.get('title')
     if title:
         figure = etree.Element('figure')
         figure.append(image)
         etree.SubElement(figure, 'figcaption').text = title
         return figure
     else:
         return image
示例#9
0
 def handleMatch(self, m):
     # get node
     node = ImagePattern.handleMatch(self, m)
     # get image src
     src = node.attrib.get('src')
     # parse image url
     output_asset = self.asset_processor.asset_urlparse(src)
     if output_asset:
         node.attrib['src'] = output_asset
     return node
示例#10
0
    def handleMatch(self, m):
        node = ImagePattern.handleMatch(self, m)
        src = node.attrib.get('src')

        if src.endswith('.gif'):
            node.attrib.pop('src')
            node.set('data-gifffer', src)
            node.set('data-gifffer-width', '240')
            return node
        else:
            anode = util.etree.Element("a")
            anode.set('data-lightbox', str(uuid.uuid4()))
            anode.set('href', src)
            anode.append(node)
            return anode
示例#11
0
class ImageLinkPattern(Pattern):
    def __init__(self, mdi):
        Pattern.__init__(self, IMAGE_LINK_RE, mdi)
        self.link = LinkPattern(LINK_RE, mdi)
        self.image = ImagePattern(IMAGE_LINK_RE, mdi)

    def handleMatch(self, m):
        img = self.image.handleMatch(m)
        img.set('style', 'max-width:100%;')

        anchor = util.etree.Element("a")
        anchor.set('href', img.get('src'))
        anchor.set('target', '_blank')
        anchor.append(img)
        return anchor
示例#12
0
 def handleMatch(self, m):
     node = ImagePattern.handleMatch(self, m)
     node = handle_image_element(node, self.__base_dir)
     return node
示例#13
0
 def __init__(self, asset_processor, pattern, markdown_instance=None):
     ImagePattern.__init__(self, pattern, markdown_instance)
     self.asset_processor = asset_processor
示例#14
0
 def __init__(self, mdi):
     Pattern.__init__(self, IMAGE_LINK_RE, mdi)
     self.link = LinkPattern(LINK_RE, mdi)
     self.image = ImagePattern(IMAGE_LINK_RE, mdi)