16516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru"""
26516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru========================= IMAGE LINKS =================================
36516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
46516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
56516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste QueruTurns paragraphs like
66516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
76516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru<~~~~~~~~~~~~~~~~~~~~~~~~
86516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Querudir/subdir
96516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Querudir/subdir
106516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Querudir/subdir
116516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru~~~~~~~~~~~~~~
126516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Querudir/subdir
136516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Querudir/subdir
146516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Querudir/subdir
156516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru~~~~~~~~~~~~~~~~~~~>
166516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
176516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste QueruInto mini-photo galleries.
186516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
196516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru"""
206516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
216516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queruimport re, markdown
226516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queruimport url_manager
236516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
246516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
256516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste QueruIMAGE_LINK = """<a href="%s"><img src="%s" title="%s"/></a>"""
266516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste QueruSLIDESHOW_LINK = """<a href="%s" target="_blank">[slideshow]</a>"""
276516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste QueruALBUM_LINK = """&nbsp;<a href="%s">[%s]</a>"""
286516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
296516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
306516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queruclass ImageLinksExtension(markdown.Extension):
316516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
326516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru    def extendMarkdown(self, md, md_globals):
336516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
346516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru        md.preprocessors.add("imagelink", ImageLinkPreprocessor(md), "_begin")
356516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
366516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
376516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queruclass ImageLinkPreprocessor(markdown.preprocessors.Preprocessor):
386516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
396516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru    def run(self, lines):
406516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
416516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru        url = url_manager.BlogEntryUrl(url_manager.BlogUrl("all"),
426516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                                       "2006/08/29/the_rest_of_our")
436516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
446516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
456516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru        all_images = []
466516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru        blocks = []
476516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru        in_image_block = False
486516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
496516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru        new_lines = []
506516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
516516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru        for line in lines:
526516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
536516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru            if line.startswith("<~~~~~~~"):
546516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                albums = []
556516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                rows = []
566516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                in_image_block = True
576516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
586516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru            if not in_image_block:
596516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
606516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                new_lines.append(line)
616516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
626516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru            else:
636516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
646516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                line = line.strip()
656516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
666516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                if line.endswith("~~~~~~>") or not line:
676516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    in_image_block = False
686516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    new_block = "<div><br/><center><span class='image-links'>\n"
696516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
706516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    album_url_hash = {}
716516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
726516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    for row in rows:
736516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                        for photo_url, title in row:
746516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                            new_block += "&nbsp;"
756516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                            new_block += IMAGE_LINK % (photo_url,
766516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                                                       photo_url.get_thumbnail(),
776516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                                                       title)
786516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
796516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                            album_url_hash[str(photo_url.get_album())] = 1
806516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
816516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    new_block += "<br/>"
826516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
836516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    new_block += "</span>"
846516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    new_block += SLIDESHOW_LINK % url.get_slideshow()
856516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
866516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    album_urls = album_url_hash.keys()
876516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    album_urls.sort()
886516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
896516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    if len(album_urls) == 1:
906516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                        new_block += ALBUM_LINK % (album_urls[0], "complete album")
916516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    else :
926516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                        for i in range(len(album_urls)) :
936516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                            new_block += ALBUM_LINK % (album_urls[i],
946516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                                                       "album %d" % (i + 1) )
956516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
966516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    new_lines.append(new_block + "</center><br/></div>")
976516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
986516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                elif line[1:6] == "~~~~~" :
996516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    rows.append([])  # start a new row
1006516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                else :
1016516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    parts = line.split()
1026516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    line = parts[0]
1036516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    title = " ".join(parts[1:])
1046516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
1056516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    album, photo = line.split("/")
1066516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    photo_url = url.get_photo(album, photo,
1076516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                                              len(all_images)+1)
1086516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    all_images.append(photo_url)
1096516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    rows[-1].append((photo_url, title))
1106516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
1116516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                    if not album in albums :
1126516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru                        albums.append(album)
1136516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
1146516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru        return new_lines
1156516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
1166516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
1176516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Querudef makeExtension(configs):
1186516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru    return ImageLinksExtension(configs)
1196516b99bb74dfb7187a08f7090bf7ca22a006f15Jean-Baptiste Queru
120