mirror of
https://github.com/squidfunk/mkdocs-material.git
synced 2024-06-14 11:52:32 +03:00
89b474bf33
* 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
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 |