""" ========================= IMAGE LINKS ================================= Turns paragraphs like <~~~~~~~~~~~~~~~~~~~~~~~~ dir/subdir dir/subdir dir/subdir ~~~~~~~~~~~~~~ dir/subdir dir/subdir dir/subdir ~~~~~~~~~~~~~~~~~~~> Into mini-photo galleries. """ import re, markdown import url_manager IMAGE_LINK = """""" SLIDESHOW_LINK = """[slideshow]""" ALBUM_LINK = """ [%s]""" class ImageLinksExtension(markdown.Extension): def extendMarkdown(self, md, md_globals): md.preprocessors.add("imagelink", ImageLinkPreprocessor(md), "_begin") class ImageLinkPreprocessor(markdown.preprocessors.Preprocessor): def run(self, lines): url = url_manager.BlogEntryUrl(url_manager.BlogUrl("all"), "2006/08/29/the_rest_of_our") all_images = [] blocks = [] in_image_block = False new_lines = [] for line in lines: if line.startswith("<~~~~~~~"): albums = [] rows = [] in_image_block = True if not in_image_block: new_lines.append(line) else: line = line.strip() if line.endswith("~~~~~~>") or not line: in_image_block = False new_block = "

\n" album_url_hash = {} for row in rows: for photo_url, title in row: new_block += " " new_block += IMAGE_LINK % (photo_url, photo_url.get_thumbnail(), title) album_url_hash[str(photo_url.get_album())] = 1 new_block += "
" new_block += "
" new_block += SLIDESHOW_LINK % url.get_slideshow() album_urls = album_url_hash.keys() album_urls.sort() if len(album_urls) == 1: new_block += ALBUM_LINK % (album_urls[0], "complete album") else : for i in range(len(album_urls)) : new_block += ALBUM_LINK % (album_urls[i], "album %d" % (i + 1) ) new_lines.append(new_block + "

") elif line[1:6] == "~~~~~" : rows.append([]) # start a new row else : parts = line.split() line = parts[0] title = " ".join(parts[1:]) album, photo = line.split("/") photo_url = url.get_photo(album, photo, len(all_images)+1) all_images.append(photo_url) rows[-1].append((photo_url, title)) if not album in albums : albums.append(album) return new_lines def makeExtension(configs): return ImageLinksExtension(configs)