120 lines
3.4 KiB
Python
120 lines
3.4 KiB
Python
"""
|
|
========================= 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 = """<a href="%s"><img src="%s" title="%s"/></a>"""
|
|
SLIDESHOW_LINK = """<a href="%s" target="_blank">[slideshow]</a>"""
|
|
ALBUM_LINK = """ <a href="%s">[%s]</a>"""
|
|
|
|
|
|
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 = "<div><br/><center><span class='image-links'>\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 += "<br/>"
|
|
|
|
new_block += "</span>"
|
|
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 + "</center><br/></div>")
|
|
|
|
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)
|
|
|