mirror of
https://github.com/squidfunk/mkdocs-material.git
synced 2024-06-14 11:52:32 +03:00
67 lines
2.1 KiB
Python
67 lines
2.1 KiB
Python
|
"""
|
||
|
Emoji extras for Material.
|
||
|
|
||
|
Override the Twemoji Index with an extended version that includes short names for Material icons, Fontawesome, etc.
|
||
|
"""
|
||
|
import os
|
||
|
import glob
|
||
|
import copy
|
||
|
from pymdownx import twemoji_db
|
||
|
from pymdownx.emoji import TWEMOJI_SVG_CDN, add_attriubtes
|
||
|
import codecs
|
||
|
import xml.etree.ElementTree as etree
|
||
|
|
||
|
RESOURCES = os.path.dirname(os.path.abspath(__file__))
|
||
|
|
||
|
|
||
|
def material():
|
||
|
"""Provide a copied Twemoji index with additional codes for Material included icons."""
|
||
|
|
||
|
# Copy the Twemoji index
|
||
|
index = {
|
||
|
"name": 'twemoji',
|
||
|
"emoji": copy.deepcopy(twemoji_db.emoji),
|
||
|
"aliases": copy.deepcopy(twemoji_db.aliases)
|
||
|
}
|
||
|
|
||
|
# Find our icons
|
||
|
icon_path = os.path.join(RESOURCES, '.icons')
|
||
|
norm_base = icon_path.replace('\\', '/') + '/'
|
||
|
for result in glob.glob(icon_path.replace('\\', '/') + '/**/*.svg', recursive=True):
|
||
|
name = ':{}:'.format(result.replace('\\', '/').replace(norm_base, '', 1).replace('/', '-').lstrip('.')[:-4])
|
||
|
if name not in index['emoji'] and name not in index['aliases']:
|
||
|
# Easiest to just store the path and pull it out from the index
|
||
|
index["emoji"][name] = {'name': name, 'path': result}
|
||
|
|
||
|
return index
|
||
|
|
||
|
|
||
|
def to_svg(index, shortname, alias, uc, alt, title, category, options, md):
|
||
|
"""Return SVG element."""
|
||
|
|
||
|
is_unicode = uc is not None
|
||
|
|
||
|
if is_unicode:
|
||
|
svg_path = TWEMOJI_SVG_CDN
|
||
|
|
||
|
attributes = {
|
||
|
"class": options.get('classes', index),
|
||
|
"alt": alt,
|
||
|
"src": "%s%s.svg" % (
|
||
|
options.get('image_path', svg_path),
|
||
|
uc
|
||
|
)
|
||
|
}
|
||
|
|
||
|
if title:
|
||
|
attributes['title'] = title
|
||
|
|
||
|
add_attriubtes(options, attributes)
|
||
|
|
||
|
return etree.Element("img", attributes)
|
||
|
else:
|
||
|
el = etree.Element('span', {"class": options.get('classes', index)})
|
||
|
svg_path = md.inlinePatterns['emoji'].emoji_index['emoji'][shortname]['path']
|
||
|
with codecs.open(svg_path, 'r', encoding='utf-8') as f:
|
||
|
el.text = md.htmlStash.store(f.read())
|
||
|
return el
|