forked from varia/varia.website
many many many Varia's websites, work in progress: https://many.vvvvvvaria.org
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.
62 lines
1.6 KiB
62 lines
1.6 KiB
7 years ago
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
"""
|
||
|
Interlinks
|
||
|
=========================
|
||
|
|
||
|
This plugin allows you to include "interwiki" or shortcuts links into the blog, as keyword>rest_of_url
|
||
|
|
||
|
"""
|
||
|
|
||
|
from bs4 import BeautifulSoup
|
||
|
from bs4 import SoupStrainer
|
||
|
from pelican import signals
|
||
|
import re
|
||
|
|
||
|
interlinks = {}
|
||
|
|
||
|
def getSettings (generator):
|
||
|
|
||
|
global interlinks
|
||
|
|
||
|
interlinks = {'this': generator.settings['SITEURL']+"/"}
|
||
|
if 'INTERLINKS' in generator.settings:
|
||
|
for key, value in generator.settings['INTERLINKS'].items():
|
||
|
interlinks[key] = value
|
||
|
|
||
|
|
||
|
def parse_links(instance):
|
||
|
|
||
|
if instance._content is not None:
|
||
|
content = instance._content
|
||
|
|
||
|
if '<a' in content:
|
||
|
text = BeautifulSoup(content, "html.parser", parse_only=SoupStrainer("a"))
|
||
|
for link in text.find_all("a",href=re.compile("(.+?)>")):
|
||
|
old_tag = str(link)
|
||
|
url = link.get('href')
|
||
|
m = re.search(r"(.+?)>", url).groups()
|
||
|
name = m[0]
|
||
|
if name in interlinks:
|
||
|
hi = url.replace(name + ">", interlinks[name])
|
||
|
link['href'] = hi
|
||
|
|
||
|
content = content.replace(old_tag, str(link))
|
||
|
|
||
|
if '<img' in content:
|
||
|
text = BeautifulSoup(content, "html.parser", parse_only=SoupStrainer("img"))
|
||
|
for img in text.find_all('img', src=re.compile("(.+?)>")):
|
||
|
old_tag = str(img)
|
||
|
url = img.get('src')
|
||
|
m = re.search(r"(.+?)>", url).groups()
|
||
|
name = m[0]
|
||
|
if name in interlinks:
|
||
|
hi = url.replace(name+">",interlinks[name])
|
||
|
img['src'] = hi
|
||
|
content = content.replace(old_tag.replace(">", ">").replace("/>",">"), str(img))
|
||
|
|
||
|
instance._content = content
|
||
|
|
||
|
def register():
|
||
|
signals.generator_init.connect(getSettings)
|
||
|
signals.content_object_init.connect(parse_links)
|