""" ========================= 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 __init__ (self) : self.reset() def extendMarkdown(self, md, md_globals) : self.md = md # Stateless extensions do not need to be registered md.registerExtension(self) # Insert a preprocessor before all preprocessors preprocessor = ImageLinkPreprocessor() preprocessor.md = md md.preprocessors.insert(0, preprocessor) def reset(self) : # May be called by Markdown is state reset is desired pass class ImageLinkPreprocessor (markdown.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)