You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

217 lines
6.2 KiB

import logging
from pelican import signals
from pelican.generators import ArticlesGenerator
from pelican.generators import PagesGenerator
from pathlib import Path
logger = logging.getLogger(__name__)
IMAGE_PATH = './content/'
IMAGE_SIZES = [200, 375, 480, 800, 1600]
def process_content(article):
"""
Substitute the citations and add a bibliography for an article or
page, using the local bib file if specified or the global one otherwise.
"""
content = article._content
logger.info("start\n\n")
content = "" + content
i = content.count("[lightgallery")
if (i <= 0):
pass
j = content.count("lightgalleryend]")
if (j != i):
pass
m = find_between(content, '[lightgallery', 'lightgalleryend]')
imgs = m.split(';')
logger.info("" + article.title + "\n")
imgs_text = ""
for i in imgs:
cont = i.split(',')
img_url = cont[0].strip()
if img_url == "":
continue
img_text = ""
if (len(cont) > 1):
img_text = "<h4>" + cont[1] + "</h4>"
logger.info("t\'" + img_url + "\'a\'" + img_text + "\'\n")
zoom_url = "/theme/images/zoom.png"
imgs_text += "<li "
imgs_text += "class=\"col-xs-6 col-sm-4 col-md-3\" "
imgs_text += "data-responsive=\""
for i in IMAGE_SIZES[1:-1]:
new_url = "" + str(Path(img_url).parent) + "/" + str(i) + "/" + str(Path(img_url).name)
logger.info("t\'" + new_url + "\n")
# create_scaled_image(IMAGE_PATH + img_url, IMAGE_PATH + new_url, i)
imgs_text += "" + new_url + ", "
imgs_text += "\" "
imgs_text += "data-src=\""
imgs_text += img_url
imgs_text += "\" "
imgs_text += "data-sub-html=\""
imgs_text += img_text
imgs_text += "<p>"
imgs_text += create_exif_print(IMAGE_PATH + img_url)
imgs_text += "</p>"
imgs_text += "\"> "
imgs_text += "<a href=\"\">"
imgs_text += "<img class=\"img-responsive\" src=\""
imgs_text += "" + str(Path(img_url).parent) + "/" + str(200) + "/" + str(Path(img_url).name)
imgs_text += "\" > "
imgs_text += " <div class=\"demo-gallery-poster\"> "
imgs_text += " <img width=26 src=\"" + zoom_url + "\"> "
imgs_text += " </div>"
imgs_text += "</a>"
imgs_text += "</li>\n"
replace_text = " <div class=\"demo-gallery\"> "
replace_text += " <ul id=\"lightgallery\" class=\"list-unstyled row\">"
replace_text += imgs_text
replace_text += "</ul>"
replace_text += "</div>"
logger.info("" + replace_text + "\n")
content = content.replace('[lightgallery' + m + 'lightgalleryend]', replace_text)
article._content = content
logger.info("end\n\n")
pass
def replace_right(source, target, replacement, replacements=None):
return replacement.join(source.rsplit(target, replacements))
def find_between(s, first, last):
try:
start = s.rindex(first) + len(first)
end = s.rindex(last, start)
return s[start:end]
except ValueError:
return ""
def add_gallery(generators):
logger.info("add_gallery\n\n")
# Process the articles and pages
for generator in generators:
if isinstance(generator, ArticlesGenerator):
for article in (generator.articles + generator.translations + generator.drafts):
process_content(article)
elif isinstance(generator, PagesGenerator):
for page in generator.pages:
process_content(page)
pass
def create_scaled_image(org_path, new_path, resize_width):
import PIL.Image
from resizeimage import resizeimage
import os
logger.info("gen " + new_path + "from " + org_path + " size " + str(resize_width) + "\n")
exists = os.path.isfile(new_path)
if exists:
logger.info("skip nothing to do\n")
return ""
dir_path = str(Path(new_path).parent)
exists = os.path.isdir(dir_path)
if not exists:
logger.info("create dir " + dir_path)
os.mkdir(dir_path)
logger.info("convert \n")
img = PIL.Image.open(org_path)
width, height = img.size
logger.info("" + str(width) + "\n")
if (width > resize_width):
img = resizeimage.resize_width(img, resize_width)
img.save(new_path, img.format)
img.close()
logger.info("done \n")
def create_exif_print(img_path):
try:
import PIL.Image
import os
exists = os.path.isfile(img_path)
if not exists:
return ""
img = PIL.Image.open(img_path)
exif = img._getexif()
img.close()
logger.info("######### exif " + img_path + "\n")
if exif is None:
return ""
programm_dic = {0: "N", # "Not defined",
1: "M", # "Manual",
2: "N", # "Normal program",
3: "A", # "Aperture priority",
4: "S", # "Shutter priority",
5: "C", # "Creative program",
6: "A", # "Action program",
7: "P", # "Portrait mode",
8: "L", # "Landscape mode",
}
ret = ""
if 272 in exif:
ret += "" + exif[272]
if 42036 in exif:
ret += " with " + exif[42036]
ret += "<br>"
if 37386 in exif:
ret += "at" + str(exif[37386][0] / exif[37386][1]) + "mm "
if 37378 in exif:
ret += "f" + str(exif[37378][0] / exif[37378][1]) + " "
if 34855 in exif:
ret += " iso" + str(exif[34855]) + " "
if 33434 in exif:
ret += " " + str(exif[33434][0])
if exif[33434][1] != 1:
ret += "/" + str(exif[33434][1])
ret += "sec "
if 34850 in exif:
ret += " <bolt>" + programm_dic[exif[34850]] + "</bolt>"
if 315 in exif:
ret += " " + exif[315]
if 33432 in exif:
ret += " (c) " + exif[33432]
return ret
except ValueError:
return ""
def register():
signals.all_generators_finalized.connect(add_gallery)