mkdocs-material/material/emoji.py
Isaac Muse 89b474bf33
Added emoji icon integration (#1575)
* Add emoji icons

* Generate new build and ensure build is sane on WSL (windows)

Normalize line endings to ensure when building in Windows Subsystem
for Linux that the results are sane.
Build new JS and CSS.

* Attempt to fix netlify issue
2020-04-08 16:00:20 +02:00

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