1st commit
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
.venv
|
||||
.output
|
||||
__pycache__
|
20
LICENSE
Normal file
@ -0,0 +1,20 @@
|
||||
MIT License
|
||||
Copyright (c) 2025 > Djeex
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
226
README.MD
Normal file
@ -0,0 +1,226 @@
|
||||
<h1 align="center">Lumeex</h1>
|
||||
<div align="center" >
|
||||
<img src="https://git.djeex.fr/Djeex/lumeex/raw/branch/main/illustration/lumeex.png" alt="Lumeex Screenshot">
|
||||
</div>
|
||||
|
||||
**Lumeex** - Yet another minimalist photo gallery with a static site generator.
|
||||
|
||||
Lumeex is a static site generator that builds a minimalist photo gallery. The project was born from the need to create a gallery focused more on the artworks than the author, while allowing users to organize works using tags and share filtered views. In this spirit, each page load displays the photos in random order, allowing users to discover new content they might not have seen before.
|
||||
|
||||
The project comes with two themes: one modern, the other more minimalistic, both designed to keep the focus on the artworks.
|
||||
|
||||
> [!NOTE]
|
||||
> _This GitHub repository is a mirror of https://git.djeex.fr/Djeex/lumeex. You’ll find the complete package, history, and release notes there. An LLM is used for bug checking and language file generation._
|
||||
|
||||
## 📌 Table of Contents
|
||||
|
||||
- [Features](#-features)
|
||||
- [Python Installation](#-python-installation)
|
||||
- [Configuration](#-configuration)
|
||||
- [Build the Site](#-build-the-site)
|
||||
|
||||
## Features
|
||||
|
||||
**Gallery (Static Website)**
|
||||
- Photos displayed in a random order on each page load.
|
||||
- Tag-based filtering (with the ability to combine multiple tags).
|
||||
- Shareable URLs with active tag filters.
|
||||
- A photo carousel on the landing page.
|
||||
- A legal notice page.
|
||||
- Two visual themes (easily customizable).
|
||||
- Supports Google Fonts and local fonts.
|
||||
|
||||
**No-Code Builder Based on YAML Files**
|
||||
- YAML files to configure site information, SEO, colors, fonts, etc.—no code needed
|
||||
- YAML files to reference and tag photos—no code needed.
|
||||
- *(Optional)* Automatically add photos to the reference file.
|
||||
|
||||
**Simple Build Process**
|
||||
- Compiles from YAML config files (theme selection, template building, fonts, colors, etc.).
|
||||
- Automatically converts the favicon to all required formats.
|
||||
- Automatically resize social thumbnail
|
||||
- *(Optional)* Automatically resizes photos to a max width of 1140px.
|
||||
- *(Optional)* Converts images to WebP for better performance.
|
||||
- Outputs a fully generated static website, ready to be copied to any web server.
|
||||
|
||||
## Python Installation
|
||||
|
||||
Instructions to run the Python scripts directly.
|
||||
|
||||
**Requirements**
|
||||
|
||||
- Python 3.11 or higher
|
||||
- PyYAML
|
||||
- Pillow
|
||||
|
||||
**Installation**
|
||||
|
||||
```sh
|
||||
git clone https://git.djeex.fr/Djeex/lumeex.git
|
||||
cd lumeex
|
||||
python3 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
pip install requirements.txt
|
||||
```
|
||||
|
||||
You're ready to go!
|
||||
|
||||
## Configuration
|
||||
|
||||
All user configuration files are located in the `config` folder.
|
||||
|
||||
```sh
|
||||
Lumeex/
|
||||
└── config/
|
||||
├── photos/
|
||||
│ ├── gallery
|
||||
│ └── hero
|
||||
├── themes/
|
||||
│ ├── modern
|
||||
│ └── typewriter
|
||||
├── gallery.yaml
|
||||
└── site.yaml
|
||||
```
|
||||
|
||||
**`photos/`**
|
||||
|
||||
- `gallery/`: place your gallery photos here.
|
||||
- `hero/`: place carousel photos for the homepage here.
|
||||
|
||||
> [!TIP]
|
||||
> You can use `gallery.py` to automatically reference all photos in `gallery/` and `hero/` into `gallery.yaml` and `site.yaml` by running `python3 gallery.py` from the `lumeex` directory.
|
||||
> You’ll just need to tag the photos in `gallery.yaml`.
|
||||
|
||||
**`site.yaml`**
|
||||
|
||||
This file contains all your site’s metadata and settings. For example:
|
||||
|
||||
```yaml
|
||||
info:
|
||||
title: your title
|
||||
subtitle: your subtitle
|
||||
description: your description
|
||||
canonical: all, your, keywords
|
||||
author: you
|
||||
google_analytics_id: G-XXXXXXX # optional
|
||||
|
||||
social:
|
||||
instagram_url: https://www.instagram.com/yourprofile
|
||||
thumbnail: gallery/anyphoto.png # put the path from your photo folder to your file
|
||||
menu:
|
||||
items:
|
||||
- label: your_home
|
||||
href: /
|
||||
- label: your_second_menu
|
||||
href: /?tag=yourtag1
|
||||
- label: Your_third_menu
|
||||
href: /?tag=yourtag2
|
||||
|
||||
hero:
|
||||
images:
|
||||
- src: hero/your_photo_1.jpg
|
||||
- src: hero/your_photo_2.jpg
|
||||
- src: hero/your_photo_3.jpg
|
||||
|
||||
footer:
|
||||
copyright: Copyright © 2025 – You
|
||||
legal_link: '/legals.html'
|
||||
legal_label: Legal notice
|
||||
|
||||
build:
|
||||
theme: modern
|
||||
convert_images: false
|
||||
resize_images: false
|
||||
|
||||
legals:
|
||||
hoster_name: Your_hoster
|
||||
hoster_adress: Your hoster address
|
||||
hoster_contact: Your hoster contact
|
||||
intellectual_property:
|
||||
- paragraph: "Your text here"
|
||||
- paragraph: "Your second paragraph here"
|
||||
- paragraph: "Etc..."
|
||||
```
|
||||
|
||||
**`gallery.yaml`**
|
||||
|
||||
Use this file to reference the images in `photos/gallery/`. You can do this manually or automatically by running `python3 gallery.py`. You can also assign tags to the photos here.
|
||||
|
||||
```yaml
|
||||
images:
|
||||
- src: gallery/your_photo_1.jpg
|
||||
tags: ["portrait"]
|
||||
- src: gallery/your_photo_2.jpg
|
||||
tags: ["portrait", "sunset", "boat"]
|
||||
- src: gallery/your_photo_3.jpg
|
||||
tags: ["landscape", "sea", "beach", "sand"]
|
||||
```
|
||||
|
||||
**`themes/`**
|
||||
|
||||
```sh
|
||||
themes/
|
||||
└── yourtheme/
|
||||
├── fonts (optional)
|
||||
├── theme.yaml
|
||||
├── theme.css (optional)
|
||||
└── favicon.png
|
||||
```
|
||||
|
||||
You can edit existing themes or create your own. Each theme can include:
|
||||
- **Required:** a `theme.yaml` file for visual settings (colors, fonts, etc.)
|
||||
- *(Optional)* a `theme.css` file for additional styling
|
||||
- *(Optional)* a `fonts` folder for local fonts
|
||||
- *(Optional)* a square `favicon.png` (min 196px) that will be automatically converted to all required formats.
|
||||
|
||||
Example `theme.yaml`:
|
||||
|
||||
```yaml
|
||||
colors:
|
||||
primary: '#0065a1'
|
||||
primary_dark: '#005384'
|
||||
secondary: '#00b0f0'
|
||||
accent: '#ffc700'
|
||||
text_dark: '#333'
|
||||
background: '#fff'
|
||||
browser_color: '#fff'
|
||||
favicon:
|
||||
path: favicon.png
|
||||
google_fonts:
|
||||
- family: Lato
|
||||
weights:
|
||||
- '200'
|
||||
- '400'
|
||||
- '700'
|
||||
- family: Montserrat
|
||||
weights:
|
||||
- '200'
|
||||
- '400'
|
||||
- '700'
|
||||
fonts:
|
||||
primary:
|
||||
name: Lato
|
||||
fallback: sans-serif
|
||||
secondary:
|
||||
name: Montserrat
|
||||
fallback: serif
|
||||
```
|
||||
|
||||
## Build the Site
|
||||
|
||||
Once everything is configured, make sure you're in the `lumeex` directory and your Python virtual environment is activated (`source .venv/bin/activate`).
|
||||
|
||||
- *(Optional)* Run `python3 gallery.py` to auto-fill `gallery.yaml` and add carousel photos to `site.yaml`. Don't forget to add tags to your photos in `gallery.yaml`.
|
||||
- Run `python3 build.py` to generate the static site.
|
||||
- *(Optional)* Serve locally with:
|
||||
|
||||
```sh
|
||||
python3 -m http.server 3000 --directory .output
|
||||
```
|
||||
|
||||
Then visit `http://localhost:3000` or, if remote, `http://your-server-ip:3000`.
|
||||
|
||||
> [!WARNING]
|
||||
> Use this only to test your site. Don't use python server for production !
|
||||
|
||||
- Finally, copy the contents of the `.output/` directory to your favorite web server.
|
164
build.py
Normal file
@ -0,0 +1,164 @@
|
||||
import logging
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
from shutil import copyfile
|
||||
from PIL import Image
|
||||
from src.py.utils import ensure_dir, copy_assets, load_yaml, load_theme_config
|
||||
from src.py.css_generator import generate_css_variables, generate_fonts_css, generate_google_fonts_link
|
||||
from src.py.image_processor import process_images, copy_original_images, convert_and_resize_image, generate_favicons_from_logo, generate_favicon_ico
|
||||
from src.py.html_generator import render_template, render_gallery_images, generate_gallery_json_from_images, generate_robots_txt, generate_sitemap_xml
|
||||
|
||||
# Configure logging to display only the messages
|
||||
logging.basicConfig(level=logging.INFO, format='%(message)s')
|
||||
|
||||
# Define key directories used throughout the script
|
||||
SRC_DIR = Path.cwd()
|
||||
BUILD_DIR = SRC_DIR / ".output"
|
||||
TEMPLATE_DIR = SRC_DIR / "src/templates"
|
||||
IMG_DIR = SRC_DIR / "config/photos"
|
||||
JS_DIR = SRC_DIR / "src/public/js"
|
||||
STYLE_DIR = SRC_DIR / "src/public/style"
|
||||
GALLERY_FILE = SRC_DIR / "config/gallery.yaml"
|
||||
SITE_FILE = SRC_DIR / "config/site.yaml"
|
||||
THEMES_DIR = SRC_DIR / "config/themes"
|
||||
|
||||
def build():
|
||||
logging.info("🚀 Starting build...")
|
||||
ensure_dir(BUILD_DIR)
|
||||
copy_assets(JS_DIR, STYLE_DIR, BUILD_DIR)
|
||||
build_date = datetime.now().strftime("%Y%m%d%H%M%S")
|
||||
|
||||
site_vars = load_yaml(SITE_FILE)
|
||||
gallery_sections = load_yaml(GALLERY_FILE)
|
||||
build_section = site_vars.get("build", {})
|
||||
theme_name = site_vars.get("build", {}).get("theme", "default")
|
||||
theme_vars, theme_dir = load_theme_config(theme_name, THEMES_DIR)
|
||||
fonts_dir = theme_dir / "fonts"
|
||||
theme_css_path = theme_dir / "theme.css"
|
||||
|
||||
if theme_css_path.exists():
|
||||
dest_theme_css = BUILD_DIR / "style" / "theme.css"
|
||||
dest_theme_css.parent.mkdir(parents=True, exist_ok=True)
|
||||
copyfile(theme_css_path, dest_theme_css)
|
||||
theme_css = f'<link rel="stylesheet" href="/style/theme.css?build_date={build_date}">'
|
||||
logging.info(f"[✓] Theme CSS found, copied to build folder: {dest_theme_css}")
|
||||
else:
|
||||
theme_css = ""
|
||||
logging.warning(f"[~] No theme.css found in {theme_css_path}, skipping theme CSS injection.")
|
||||
|
||||
preload_links = generate_fonts_css(fonts_dir, BUILD_DIR / "style" / "fonts.css", fonts_cfg=theme_vars.get("fonts"))
|
||||
generate_css_variables(theme_vars.get("colors", {}), BUILD_DIR / "style" / "colors.css")
|
||||
generate_favicons_from_logo(theme_vars, theme_dir, BUILD_DIR / "img" / "favicon")
|
||||
generate_favicon_ico(theme_vars, theme_dir, BUILD_DIR / "favicon.ico")
|
||||
|
||||
convert_images = build_section.get("convert_images", False)
|
||||
resize_images = build_section.get("resize_images", False)
|
||||
logging.info(f"[~] convert_images = {convert_images}")
|
||||
logging.info(f"[~] resize_images = {resize_images}")
|
||||
|
||||
hero_images = site_vars.get("hero", {}).get("images", [])
|
||||
gallery_images = [img for section in gallery_sections for img in section["images"]] if isinstance(gallery_sections, list) else gallery_sections.get("images", [])
|
||||
|
||||
if convert_images:
|
||||
process_images(hero_images, resize_images, IMG_DIR, BUILD_DIR)
|
||||
process_images(gallery_images, resize_images, IMG_DIR, BUILD_DIR)
|
||||
else:
|
||||
copy_original_images(hero_images, IMG_DIR, BUILD_DIR)
|
||||
copy_original_images(gallery_images, IMG_DIR, BUILD_DIR)
|
||||
|
||||
menu_html = "\n".join(
|
||||
f'<li class="nav-item appear"><a href="{item["href"]}">{item["label"]}</a></li>'
|
||||
for item in site_vars.get("menu", {}).get("items", [])
|
||||
)
|
||||
site_vars["hero"]["menu_items"] = menu_html
|
||||
if "footer" in site_vars:
|
||||
site_vars["footer"]["menu_items"] = menu_html
|
||||
|
||||
google_fonts_link = generate_google_fonts_link(theme_vars.get("google_fonts", []))
|
||||
logging.info(f"[✓] Google Fonts link generated:\n{google_fonts_link}")
|
||||
|
||||
thumbnail_path = site_vars.get("social", {}).get("thumbnail")
|
||||
if thumbnail_path:
|
||||
src_thumb = IMG_DIR / thumbnail_path
|
||||
dest_thumb_dir = BUILD_DIR / "img" / "social"
|
||||
dest_thumb_dir.mkdir(parents=True, exist_ok=True)
|
||||
dest_thumb = dest_thumb_dir / Path(thumbnail_path).name
|
||||
try:
|
||||
img = Image.open(src_thumb)
|
||||
img = img.convert("RGB")
|
||||
img = img.resize((1200, 630), Image.LANCZOS)
|
||||
img.save(dest_thumb, "JPEG", quality=90)
|
||||
logging.info(f"[✓] Thumbnail resized and saved to {dest_thumb}")
|
||||
except Exception as e:
|
||||
logging.error(f"[✗] Failed to process thumbnail: {e}")
|
||||
else:
|
||||
logging.warning("[~] No thumbnail found in social section")
|
||||
|
||||
head_vars = dict(site_vars.get("info", {}))
|
||||
head_vars.update(theme_vars.get("colors", {}))
|
||||
head_vars.update(site_vars.get("social", {}))
|
||||
head_vars["thumbnail"] = f"/img/social/{Path(thumbnail_path).name}" if thumbnail_path else ""
|
||||
head_vars["google_fonts_link"] = google_fonts_link
|
||||
head_vars["font_preloads"] = "\n".join(preload_links)
|
||||
head_vars["theme_css"] = theme_css
|
||||
head_vars["build_date"] = build_date
|
||||
|
||||
head = render_template(TEMPLATE_DIR / "head.html", head_vars)
|
||||
hero = render_template(TEMPLATE_DIR / "hero.html", {**site_vars["hero"], **head_vars})
|
||||
footer = render_template(TEMPLATE_DIR / "footer.html", {**site_vars.get("footer", {}), **head_vars})
|
||||
gallery_html = render_gallery_images(gallery_images)
|
||||
gallery = render_template(TEMPLATE_DIR / "gallery.html", {"gallery_images": gallery_html})
|
||||
|
||||
signature = f"<!-- Build with Lumeex v0.2 | https://git.djeex.fr/Djeex/lumeex | {build_date} -->"
|
||||
body = f"""
|
||||
<body>
|
||||
<div class="page-loader"><div class="spinner"></div></div>
|
||||
{hero}
|
||||
{gallery}
|
||||
{footer}
|
||||
</body>
|
||||
"""
|
||||
output_file = BUILD_DIR / "index.html"
|
||||
with open(output_file, "w", encoding="utf-8") as f:
|
||||
f.write(f"<!DOCTYPE html>\n{signature}\n<html lang='en'>\n{head}\n{body}\n</html>")
|
||||
logging.info(f"[✓] HTML generated: {output_file}")
|
||||
|
||||
legals_vars = site_vars.get("legals", {})
|
||||
if legals_vars:
|
||||
ip_paragraphs = legals_vars.get("intellectual_property", [])
|
||||
paragraphs_html = "\n".join(f"<p>{item['paragraph']}</p>" for item in ip_paragraphs)
|
||||
legals_context = {
|
||||
"hoster_name": legals_vars.get("hoster_name", ""),
|
||||
"hoster_adress": legals_vars.get("hoster_adress", ""),
|
||||
"hoster_contact": legals_vars.get("hoster_contact", ""),
|
||||
"intellectual_property": paragraphs_html,
|
||||
}
|
||||
legals_body = render_template(TEMPLATE_DIR / "legals.html", legals_context)
|
||||
legals_html = f"<!DOCTYPE html>\n{signature}\n<html lang='en'>\n{head}\n{legals_body}\n{footer}\n</html>"
|
||||
output_legals = BUILD_DIR / "legals" / "index.html"
|
||||
output_legals.parent.mkdir(parents=True, exist_ok=True)
|
||||
with open(output_legals, "w", encoding="utf-8") as f:
|
||||
f.write(legals_html)
|
||||
logging.info(f"[✓] Legals page generated: {output_legals}")
|
||||
else:
|
||||
logging.warning("[~] No legals section found in site.yaml")
|
||||
|
||||
if hero_images:
|
||||
generate_gallery_json_from_images(hero_images, BUILD_DIR / "data" / "gallery.json")
|
||||
else:
|
||||
logging.warning("[~] No hero images found, skipping JSON generation.")
|
||||
|
||||
site_info = site_vars.get("info", {})
|
||||
canonical_url = site_info.get("canonical", "").rstrip("/")
|
||||
if canonical_url:
|
||||
allowed_pages = ["/", "/legals/"]
|
||||
generate_robots_txt(canonical_url, allowed_pages)
|
||||
generate_sitemap_xml(canonical_url, allowed_pages)
|
||||
else:
|
||||
logging.warning("[~] No canonical URL found in site.yaml info section, skipping robots.txt and sitemap.xml generation.")
|
||||
|
||||
logging.info("✅ Build complete.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
build()
|
||||
|
30
config/gallery.yaml
Normal file
@ -0,0 +1,30 @@
|
||||
# Source your photos here
|
||||
# Relative path is set from built img folder
|
||||
# You can also use gallery.py to automatically add photos stored in your /config/photos/gallery folder
|
||||
# Add tags to your photos as shown below
|
||||
|
||||
images:
|
||||
- src: gallery/almos-bechtold-3402kvtHhOo-unsplash.jpg
|
||||
tags: ["portrait"]
|
||||
- src: gallery/arthur-savary-nLfAqmZ2hJo-unsplash.jpg
|
||||
tags: ["portrait", "sunset", "boat"]
|
||||
- src: gallery/francesco-ungaro-Zbc9Ka8msdI-unsplash.jpg
|
||||
tags: ["landscape", "sea", "beach", "sand"]
|
||||
- src: gallery/gilley-aguilar-ywGDhTlf93E-unsplash.jpg
|
||||
tags: ["landscape", "sky", "cloud", "mountains"]
|
||||
- src: gallery/jacob-reinikainen-nGG6m3RbjSk-unsplash.jpg
|
||||
tags: ["lanscape", "sunset", "mountains"]
|
||||
- src: gallery/jonas-degener-LueP5EdWGFY-unsplash.jpg
|
||||
tags: ["landscape", "mountains", "fog"]
|
||||
- src: gallery/michiel-annaert-M27pZnHV6M0-unsplash.jpg
|
||||
tags: ["flowers", "nature"]
|
||||
- src: gallery/nir-himi-AjecvkfSHxA-unsplash.jpg
|
||||
tags: ["landscape", "mountains", "sky"]
|
||||
- src: gallery/rachel-mcdermott-0fN7Fxv1eWA-unsplash.jpg
|
||||
tags: ["portrait", "black and white"]
|
||||
- src: gallery/tianlei-wu-g5o6T-PWT3g-unsplash.jpg
|
||||
tags: ["cat", "animals"]
|
||||
- src: gallery/we-care-wild-zLweeVLU9Fo-unsplash.jpg
|
||||
tags: ["bison", "animals"]
|
||||
- src: gallery/y-s-z90w7yStOkk-unsplash.jpg
|
||||
tags: ["frog", "green", "animals"]
|
BIN
config/photos/.DS_Store
vendored
Normal file
BIN
config/photos/gallery/almos-bechtold-3402kvtHhOo-unsplash.jpg
Normal file
After Width: | Height: | Size: 2.7 MiB |
BIN
config/photos/gallery/arthur-savary-nLfAqmZ2hJo-unsplash.jpg
Normal file
After Width: | Height: | Size: 1.5 MiB |
BIN
config/photos/gallery/francesco-ungaro-Zbc9Ka8msdI-unsplash.jpg
Normal file
After Width: | Height: | Size: 2.7 MiB |
BIN
config/photos/gallery/gilley-aguilar-ywGDhTlf93E-unsplash.jpg
Normal file
After Width: | Height: | Size: 2.4 MiB |
BIN
config/photos/gallery/jacob-reinikainen-nGG6m3RbjSk-unsplash.jpg
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
config/photos/gallery/jonas-degener-LueP5EdWGFY-unsplash.jpg
Normal file
After Width: | Height: | Size: 2.2 MiB |
BIN
config/photos/gallery/michiel-annaert-M27pZnHV6M0-unsplash.jpg
Normal file
After Width: | Height: | Size: 5.7 MiB |
BIN
config/photos/gallery/nir-himi-AjecvkfSHxA-unsplash.jpg
Normal file
After Width: | Height: | Size: 2.7 MiB |
BIN
config/photos/gallery/rachel-mcdermott-0fN7Fxv1eWA-unsplash.jpg
Normal file
After Width: | Height: | Size: 364 KiB |
BIN
config/photos/gallery/tianlei-wu-g5o6T-PWT3g-unsplash.jpg
Normal file
After Width: | Height: | Size: 5.6 MiB |
BIN
config/photos/gallery/we-care-wild-zLweeVLU9Fo-unsplash.jpg
Normal file
After Width: | Height: | Size: 8.4 MiB |
BIN
config/photos/gallery/y-s-z90w7yStOkk-unsplash.jpg
Normal file
After Width: | Height: | Size: 706 KiB |
BIN
config/photos/hero/francesco-ungaro-Zbc9Ka8msdI-unsplash.jpg
Normal file
After Width: | Height: | Size: 2.7 MiB |
BIN
config/photos/hero/gilley-aguilar-ywGDhTlf93E-unsplash.jpg
Normal file
After Width: | Height: | Size: 2.4 MiB |
BIN
config/photos/hero/jacob-reinikainen-nGG6m3RbjSk-unsplash.jpg
Normal file
After Width: | Height: | Size: 1.1 MiB |
55
config/site.yaml
Normal file
@ -0,0 +1,55 @@
|
||||
info:
|
||||
title: Lumeex
|
||||
subtitle: A minimalistic Gallery
|
||||
description: A minimalistic Gallery
|
||||
canonical: https://lumeex.djeex.fr
|
||||
keywords: photography, lumen, demo, gallery, minimalistic
|
||||
author: Djeex
|
||||
google_analytics_id: G-XXXXXXX # optional
|
||||
|
||||
social:
|
||||
instagram_url: https://www.instagram.com/
|
||||
thumbnail: hero/jacob-reinikainen-nGG6m3RbjSk-unsplash.jpg
|
||||
|
||||
menu:
|
||||
items:
|
||||
- label: Home
|
||||
href: /
|
||||
- label: Nature
|
||||
href: /?tag=Nature
|
||||
- label: Landscape
|
||||
href: /?tag=landscape
|
||||
- label: Portrait
|
||||
href: /?tag=portrait
|
||||
- label: Animals
|
||||
href: /?tag=animals
|
||||
|
||||
|
||||
hero:
|
||||
# Source your hero carrousel images here.
|
||||
# Root folder is img.
|
||||
# You can also use gallery.py to automatically add images from config/photos/hero folder.
|
||||
|
||||
images:
|
||||
- src: hero/francesco-ungaro-Zbc9Ka8msdI-unsplash.jpg
|
||||
- src: hero/gilley-aguilar-ywGDhTlf93E-unsplash.jpg
|
||||
- src: hero/jacob-reinikainen-nGG6m3RbjSk-unsplash.jpg
|
||||
|
||||
footer:
|
||||
copyright: Copyright © 2025 – Lumeex
|
||||
legal_link: '/legals/'
|
||||
legal_label: Legal notice
|
||||
|
||||
build:
|
||||
theme: modern # choose a theme in config/theme folder.
|
||||
convert_images: true # use true to automatically convert images to webp small weight images.
|
||||
resize_images: true # use true to automatically resize to width 1140px (maximum width used in the gallery)
|
||||
|
||||
legals:
|
||||
hoster_name: Djeex
|
||||
hoster_adress: Paris, France
|
||||
hoster_contact: contact@djeex.fr
|
||||
intellectual_property:
|
||||
- paragraph: "Users of this website are required to comply with the provisions of the French Data Protection Act (Loi Informatique et Libertés), the violation of which may result in criminal penalties. In particular, they must refrain from any collection or misuse of personal data accessible through the site, and more generally, from any act likely to infringe upon the privacy or reputation of individuals."
|
||||
- paragraph: "The overall structure, as well as the software, texts, animated or still images, know-how, and all other components of the site, are the exclusive property of Lumeex"
|
||||
- paragraph: "Any total or partial reproduction of this website, by any means whatsoever, without the express authorization of Lumeex, is prohibited and constitutes an infringement punishable under articles L.335-2 and following of the French Intellectual Property Code. The same applies to the databases appearing on the website, which are protected by the provisions of the law of July 1, 1998, implementing into the Intellectual Property Code the European directive of March 11, 1996, on the legal protection of databases."
|
BIN
config/themes/modern/favicon.png
Normal file
After Width: | Height: | Size: 69 KiB |
61
config/themes/modern/theme.css
Normal file
@ -0,0 +1,61 @@
|
||||
/*-----------------------------------*/
|
||||
/* Modern theme for Lumeex */
|
||||
/* https://git.djeex.fr/Djeex/lumeex */
|
||||
/*-----------------------------------*/
|
||||
|
||||
.hero-background {
|
||||
border-radius: 0 0 15px 15px;
|
||||
}
|
||||
|
||||
img, tag {
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
.tag, .scroll-up, .back-button {
|
||||
padding: 5px 10px;
|
||||
background: rgb(245 245 245);
|
||||
border-radius: 30px;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.back-button {
|
||||
padding: 8px 15px 10px 15px;
|
||||
margin-left: 100px;
|
||||
}
|
||||
|
||||
.tag:hover {
|
||||
background: rgb(231, 231, 231);
|
||||
color: var(--color-primary-dark);
|
||||
}
|
||||
|
||||
.tag.active, .scroll-up:hover, .back-button:hover {
|
||||
color: var(--color-background);
|
||||
background: var(--color-primary-dark);
|
||||
}
|
||||
|
||||
#footer {
|
||||
box-shadow: 0px 20px 100px -44px rgba(0, 0, 0, 0.5);
|
||||
border-radius: 15px 15px 0 0;
|
||||
max-width: 1140px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
|
||||
#footer {
|
||||
box-shadow: 0px 20px 100px -44px rgba(0, 0, 0, 0.5);
|
||||
border-radius: 15px 15px 0 0;
|
||||
max-width: 1140px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.hero-background {
|
||||
max-width: 90%;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.back-button {
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
}
|
32
config/themes/modern/theme.yaml
Normal file
@ -0,0 +1,32 @@
|
||||
#-----------------------------------#
|
||||
# Modern theme for Lumeex #
|
||||
# https://git.djeex.fr/Djeex/lumeex #
|
||||
#-----------------------------------#
|
||||
colors:
|
||||
primary: '#0065a1'
|
||||
primary_dark: '#005384'
|
||||
secondary: '#00b0f0'
|
||||
accent: '#ffc700'
|
||||
text_dark: '#333'
|
||||
background: '#fff'
|
||||
browser_color: '#fff'
|
||||
favicon:
|
||||
path: favicon.png
|
||||
google_fonts:
|
||||
- family: Lato
|
||||
weights:
|
||||
- '200'
|
||||
- '400'
|
||||
- '700'
|
||||
- family: Montserrat
|
||||
weights:
|
||||
- '200'
|
||||
- '400'
|
||||
- '700'
|
||||
fonts:
|
||||
primary:
|
||||
name: Lato
|
||||
fallback: sans-serif
|
||||
secondary:
|
||||
name: Montserrat
|
||||
fallback: serif
|
BIN
config/themes/typewriter/favicon.png
Normal file
After Width: | Height: | Size: 69 KiB |
BIN
config/themes/typewriter/fonts/trixie.eot
Normal file
610
config/themes/typewriter/fonts/trixie.svg
Normal file
@ -0,0 +1,610 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
|
||||
<metadata>
|
||||
Created by FontForge 20230101 at Mon Apr 30 18:04:47 2007
|
||||
By Unknown
|
||||
Copr. LettError; Erik van Blokland 1991
|
||||
</metadata>
|
||||
<defs>
|
||||
<font id="Trixie-Text" horiz-adv-x="550" >
|
||||
<font-face
|
||||
font-family="Trixie-Text"
|
||||
font-weight="500"
|
||||
font-stretch="normal"
|
||||
units-per-em="1000"
|
||||
panose-1="0 0 0 0 0 0 0 0 0 0"
|
||||
ascent="800"
|
||||
descent="-200"
|
||||
x-height="404"
|
||||
cap-height="560"
|
||||
bbox="-103 -286 657 882"
|
||||
underline-thickness="20"
|
||||
underline-position="-143"
|
||||
stemh="12"
|
||||
stemv="11"
|
||||
unicode-range="U+0020-FB02"
|
||||
/>
|
||||
<missing-glyph horiz-adv-x="280"
|
||||
/>
|
||||
<glyph glyph-name=".notdef" horiz-adv-x="280"
|
||||
/>
|
||||
<glyph glyph-name="space" unicode=" "
|
||||
d="M0 0z" />
|
||||
<glyph glyph-name="exclam" unicode="!"
|
||||
d="M324 133l24 -52l-17 -76l-42 -8l-52 8l-25 24l-9 27l9 43l43 58zM297 569l51 -69l-24 -60l-10 -61l10 -25l-10 -128v-25l-42 -17h-10l-25 42l-7 94v34l7 8l-25 96l18 76l25 35h42z" />
|
||||
<glyph glyph-name="quotedbl" unicode="""
|
||||
d="M423 635l8 -35l-8 -177l-9 -27l9 -8l-17 -24l-10 -10h-34l-17 59l9 44l-24 50h7l8 -7l9 7l-9 27l-25 76l25 25l26 9zM140 627v-9l-24 9h24zM244 644l42 -51l-8 -7l18 -52h-10l-8 -10l-17 17l-17 -17l-10 -59l10 -17v-35l-10 -8l10 -9v-17l-17 -15h-35l-17 111l9 42
|
||||
l-17 24l-10 86l27 17h60z" />
|
||||
<glyph glyph-name="numbersign" unicode="#"
|
||||
d="M267 596l-28 -3l-2 17l5 3l1 2l-1 21h4l18 26h4l9 -9l-2 -14h2l-3 -13zM323 351l-24 -6l4 16l10 4h30l18 41h2l4 22v7l11 16l-1 2l9 14l-3 4v10l4 3v2l-3 24l9 9l2 7l14 18l3 11l15 58l1 2l-1 21h4l29 3h2l-3 -13l-3 -11l-4 -15l-3 -2v-15l5 -9l-2 -5l-9 -21l-5 -15
|
||||
l-30 -88l-5 -11l11 -19l-2 -9l-3 1l-5 -38h5h36l24 3l10 -3h4h23l-10 -18h-27l-7 8l-34 -11l-9 6c4 0 -44 -22 -44 -22l-7 -44l-3 -13h2l-2 -15h1l-4 -16h35l2 3h11h33l42 -3l19 -17l-9 -18l-25 4h-50h-20l-52 2l-4 -4l-1 -11l-4 -15l-13 -70l-12 -16l-7 -56l-19 -71
|
||||
l-28 -13l-11 2l-2 2h-7l1 4l-2 1l2 8v48l8 13l1 10l19 96l4 4l1 2v6l8 9l22 31l4 23l-7 -2l4 3l-14 4l-84 -7l-24 7l-14 -2l-6 -53l-4 -1l-5 -19l-8 -13l3 -20l-29 -89l2 -6l-2 -1l-5 -19l-9 -17l-50 -7l-7 1l15 60l1 10l6 24h-2l-2 9l32 68l1 7l5 4l-4 13l18 23l4 24h-1h-5
|
||||
h-36l-24 -3l-10 3h-4h-23l10 18h27l7 -8l34 11l9 -6s8 2 18 2l4 9l13 43l-1 7l13 13l1 6l1 12l2 18h-29l-2 -3h-11h-33l-42 3l-19 17l9 18l25 -4h50h20l40 -2l10 33h2l4 22v7l16 33l20 34s27 -2 27 -1l-10 -50l-12 -6l-5 -11l11 -19l-2 -9l-3 1l-19 -29v-12l18 6l35 -3
|
||||
l8 -11l-6 -12l-36 1l-41 -59l-3 -13h2l-2 -15h1l-5 -19l-3 -4h10l10 7l10 -7l110 6l1 2l12 50l13 13l1 6l1 12l-8 18z" />
|
||||
<glyph glyph-name="dollar" unicode="$"
|
||||
d="M356 517v-8l27 -24l15 15v34l10 10h17l8 -10v-25l-17 -17l17 -103l-8 -7l-34 34l-8 25l-44 44l-66 32h-51l-18 -32h-26l-25 24h-8l-9 -9l9 -42l-17 -25l17 -68l33 -25h26v-9l8 -8l44 8l110 -25l76 -77l17 -109l-34 -77l-34 -44l-94 -17h-17l-7 -7l-27 17h-34l-34 24h-25
|
||||
l-25 -24l-44 7l-8 27l18 84l-10 76v9l10 8l34 -8l17 -17l8 -51l59 -59l61 -17l66 17l27 34l25 25l17 85l-10 25l-76 35l-93 7l-17 35l-17 -18v-7h-17v17l-42 25l-42 51l-10 59l17 44l35 24v18l42 7l51 27zM252 612l11 -26h4l-6 -21v-2l4 -3l-6 -17v-14l4 -9l-2 -15v-11
|
||||
l9 -18v-7l7 -9l-10 -24v-2l3 -3l-3 -10l-4 -4l5 -14l-1 -2l7 -16l-2 -7l-2 -22h2l2 -55l-4 -25l-2 -12v-6l9 -13l-3 -7l3 -8l-1 -16l4 -4l-4 -15l1 -15h-1l-4 -35l12 -23l-7 -13l4 -4l-1 -7l5 -9l-1 -6v-2l3 -4l2 -5l-4 -14l2 -5l4 -17l2 -6l-4 -9h-2v-24l-2 -10l4 -13l2 -9
|
||||
v-17l-6 -11l-1 -10l-7 -1l-1 -8l-2 -1v-4h-7l-2 -2l-12 -2l-11 13l-2 15l-5 17v19l-2 1l4 6l-4 13l6 9l-6 12v16v10l4 9l-8 16l8 20l-4 13v19l-4 1l6 17v15l2 11l-8 13l4 4l-5 13v19h1l2 15h2v13l-2 2v26v13l2 19l-4 3l6 27l-11 29l-3 -1v9l16 19l-2 11l-10 6v7h3v13l-7 8
|
||||
l7 12v10l1 32l-1 15l-4 21v5l7 9l4 15l-2 2v15v11v13h2l2 14l11 9h4z" />
|
||||
<glyph glyph-name="percent" unicode="%"
|
||||
d="M477 292h27l43 -76h9v-94h-9v8l-8 10l-27 -27l-52 -49l-66 -18l-69 25l-25 42l8 78l9 8l-9 25l34 44l103 41zM477 667l-7 -59l-18 -35l-58 18l-104 -94l-25 -7l-9 7l-32 -35l14 -66l10 -27l-41 -42v-24l-45 -35h-24l-35 -27l-42 27l-35 49l-9 69l17 35l44 41v11l17 17
|
||||
l67 7l10 10l41 -10l18 17l59 17l18 17h26l77 87v14l41 28zM428 556l-10 -66l-84 -146v-52l-26 -17l-18 -17v-34l-25 -25v-17l-41 -42l-28 -76h-7l-17 -35l7 -9l-17 -35l-42 -50l-7 -51l-27 -25h-25l-10 25v34l35 42l9 42l60 93l24 52l28 27l6 42v18l43 41l17 59l35 35l9 44
|
||||
l84 143h27zM477 207l-7 44h-42l-17 -35h-10l-35 -34l11 -69h17v9l7 8h27l32 35zM207 428l-35 17l-34 28l-43 -52l-26 -87l17 -25h27l83 52v25z" />
|
||||
<glyph glyph-name="ampersand" unicode="&"
|
||||
d="M319 524l27 -32l7 -62v-17l-24 -25l-10 -34l-60 -59v-25l43 -44l27 9l17 52l31 33l62 27l42 -18l25 -26l-8 -60l-26 -17l-25 9l-25 35h-27l-24 -35v-58l-18 -17l18 -70l51 -42l67 60l9 7l25 -7l18 -18l-8 -51l-77 -59l-68 17h-17l-35 34h-17l-25 -27l-44 -24l-66 -11
|
||||
l-11 11l-24 -11l-17 18h-25l-44 44l-18 67l10 128l84 52l34 34v35l-24 34l-10 49l17 52l45 42l17 10zM259 150l-58 85l-35 18l-34 -35l-43 -68v-35l35 -50l60 -26l58 17l35 42zM284 474l-25 25h-17l-41 -34l-11 -42l28 -69l-10 -7l10 -10h7l86 76v17l8 27l-17 17h-18z" />
|
||||
<glyph glyph-name="quoteright" unicode="’"
|
||||
d="M346 728l14 -13l-8 -103v-20l-33 -41v-13l-56 -48h-19l-8 -6l-28 34l8 27h7l21 28l19 19v20l-33 22l-22 61l28 41l35 19z" />
|
||||
<glyph glyph-name="parenleft" unicode="("
|
||||
d="M421 662v-42l-52 -51v-17l-60 -59l-17 -128l-17 -17l-7 -139l17 -25v-17l-10 -7l17 -17l11 -52l31 -76l69 -76l10 -44v-18l-27 -15l-77 77l-6 34l-45 59l-24 118l-18 111l18 145l34 77l66 120l62 59h25z" />
|
||||
<glyph glyph-name="parenright" unicode=")"
|
||||
d="M261 653l8 -25l75 -101l43 -145l9 -180l-34 -145l-42 -84l-51 -78l-25 -8h-35l-9 17v35l103 127l34 77l7 76l18 35l-8 42l8 9l-8 32l8 11l-25 100l-34 87l-69 85l-17 33l9 9z" />
|
||||
<glyph glyph-name="asterisk" unicode="*"
|
||||
d="M390 676l37 5l9 -12v-18l12 -21h9l-4 -4v-9h-8l-22 -33l-24 -6l-18 -37l-4 4l-17 -13v-5l9 -4h12l9 9l9 -9h28v-8l14 -9h4l3 5l36 -34h3v-8h-3v3l-6 5v-30l9 -12l-3 -14l7 -16l-29 -5l-14 -13l-25 9l-12 9h-9v9l-9 7h-3l-9 -7l-12 12h-6l-3 -21l9 -27l-6 -33l-21 -25v-13
|
||||
l-28 -8l3 -6v-7h-9v4l-24 3l-9 22l-4 5l-5 21l-4 4l9 17l-5 30v8l9 8l-13 13l-21 -4v4l-5 5h-4l-3 -5v-4l7 -9h-13l-12 -12h-30l-16 4h-14l-7 -8l-36 29h-3l-13 21l-8 -7v16l8 21v21l46 9l18 9h37l9 9l5 -5l4 5v3l-9 9l-9 -9l-3 4h9l3 5l-9 9l-7 -5h-14l-16 17l4 4v5l-25 7
|
||||
l9 9l-6 30h-3v13h3v21l-1 -2l-6 4l4 3l3 -5l6 18v12l12 -3h16l5 3v-9l22 -12h21l9 9l3 -6l-9 -7l6 -5l12 -21l4 5l21 -26l-4 -4l13 -5h12l5 5l16 9v16l13 21v12l5 -3l21 21l-5 4v5l18 9z" />
|
||||
<glyph glyph-name="plus" unicode="+"
|
||||
d="M316 402l8 -69l-8 -10l8 -66l44 -17l84 6l52 -6l7 -11v-34l-42 -32l-76 8l-42 -8h-17l-18 -27l8 -83l-8 -52l-41 -35l-28 35l-6 75l6 43v34l-17 18l-153 9l-9 8h-8v34l35 24h135l17 18l-6 121l17 31l24 18z" />
|
||||
<glyph glyph-name="comma" unicode=","
|
||||
d="M361 156l18 -17l-10 -128v-25l-42 -51v-17l-69 -60h-24l-10 -7l-35 42l10 34h8l27 35l24 24v25l-42 27l-27 76l35 52l44 24z" />
|
||||
<glyph glyph-name="hyphen" unicode="-"
|
||||
d="M381 326h18l9 -6l49 6l52 -6l27 -28v-59l-35 -34l-34 -8l-76 17l-59 -9l-10 9l-76 -9l-69 9l-8 -9l-86 17l-17 17v35l-7 7l24 45l86 17z" />
|
||||
<glyph glyph-name="period" unicode="."
|
||||
d="M307 173l69 -67l-7 -86l-62 -42l-34 8l-8 -8l-59 25l-27 68l17 52l52 43l42 7h17z" />
|
||||
<glyph glyph-name="slash" unicode="/"
|
||||
d="M538 671v-72l-48 -49l9 -7l-40 -48v-33l-88 -143l-97 -176l-33 -49v-23l-95 -178l-16 -31l-65 -32h-16l-7 39l7 49l39 56v23l75 113l55 111l23 25l40 80l26 32v25l39 47l9 32l56 81v23l32 26l7 30l56 58z" />
|
||||
<glyph glyph-name="zero" unicode="0"
|
||||
d="M351 577l77 -76l10 -34l24 -17l25 -129l9 -58l-34 -136l-17 -28v-14l-51 -52l-8 -27l-17 -17l-94 -14l-17 14l-103 17v18l-16 17l-9 -8v-9h-18l10 9v25l-27 17v18l-17 17l-7 -11v-6h-17l-11 68v25l-6 9l17 95v31l-11 10l18 59l27 77l42 62l103 66zM317 484l-25 34h-34
|
||||
l-34 -7l-43 -27l-17 -17l8 -42l-17 -25h-16l16 -189l26 -25v-52h18l34 -41h25l17 24l17 -18h17l42 35v17l-7 10l17 17l8 85l25 27v58l-18 17v25l10 10l-10 8v25l-32 51h-27z" />
|
||||
<glyph glyph-name="one" unicode="1"
|
||||
d="M213 566l8 -10l35 18l41 -18l11 -66l-11 -121l11 -66l-11 -181l28 -58h24l10 7l18 -17h83l17 -25l-34 -34l-52 -8l-8 8l-24 -8h-17l-17 16l-11 -8l-66 8l-69 -16l-24 16l-28 -8h-34l-17 25l10 27l17 17l59 7l7 10l27 -10l35 34l-10 25l17 52l10 10l-27 25v17h10l25 69
|
||||
l-8 41l17 17l-9 52v25l-8 7l8 11l-8 34l8 7l-18 17l-59 10l-59 -10l-27 10l-7 7v35l17 8z" />
|
||||
<glyph glyph-name="two" unicode="2"
|
||||
d="M190 446v12h11v-12h-11zM343 549l26 -17h32l17 -17l10 -42l35 -51l-10 -42v-10l10 -8l-69 -86l-51 -41l-68 -28l-17 -17l-10 10l-34 -27l-24 -25v-25l-25 -27l32 -17l69 10l25 -10l78 10l42 -10h25l27 -25l-10 -51l-59 -17l-42 10l-61 -10l-8 10l-25 -10h-10l-7 10
|
||||
l-10 -10l-34 10l-7 -10l-42 10l-10 -10l-59 17l-10 45l10 66l42 59l137 103l50 17l44 25l49 93l-7 62l-42 42h-52l-42 25l-103 -50l-17 -79l-17 -17v-7h-25l-10 24l27 62l25 25h17l18 42l24 17l69 10z" />
|
||||
<glyph glyph-name="three" unicode="3"
|
||||
d="M433 550l8 -27l-8 -35l-68 -42l-77 -83l25 -18l62 -9l58 -35l25 -77l-8 -100l-34 -79h-10l-17 -32l-93 -69l-33 -9l-17 -16l-10 8l-51 -35l-67 -7l-26 17l-8 8v25l25 26l9 -9l49 27l11 7h-11v17h11v-7l7 -10h17l61 51h25l35 35h17l42 59l7 69l10 7l-10 35l-76 76l-25 10
|
||||
l-86 -61h-41l-8 9l25 60l51 34l67 69l27 24v10l8 8l-178 7l-35 -42h-34l-10 42l10 35l42 27l128 7z" />
|
||||
<glyph glyph-name="four" unicode="4"
|
||||
d="M331 608l24 -25l-7 -214l17 -77l-10 -41v-35l17 -17l45 10l50 -10l9 -25l-9 -27l-68 -8h-27l-17 -41l10 -69l-10 -9l10 -8v-25l-51 -35l-35 35l10 8l-10 51l18 76l-35 25l-33 -8l-51 8l-45 -17l-66 27l-9 7l34 87l69 101l17 44l25 17l9 42l42 52v24l25 17v43l27 17h25z
|
||||
M289 251l17 152l-17 87l-27 -35l-17 -59l-42 -104l-25 -24l7 -27l-24 -25l59 -7l69 7l8 25z" />
|
||||
<glyph glyph-name="five" unicode="5"
|
||||
d="M205 616l76 10l45 -10l76 10l25 -27v-18l-35 -31h-59l-17 17l-111 -27h-17l-35 -34l10 -35h-10l-14 -15l7 -27l34 -24l60 24l69 -18l7 11h17l27 -28h15l52 -66l10 -61l-18 -111l-34 -50l-59 -52l-121 -68h-34l-18 -17h-59l-7 10v34l18 15h34l14 17l79 17l66 35l52 59
|
||||
l10 27l32 24l-17 94l-59 69l-67 -10l-9 -7h-25l-10 7l-83 -49h-28l-17 256v25l28 24l41 10z" />
|
||||
<glyph glyph-name="six" unicode="6"
|
||||
d="M442 599l17 -17v-24l-59 -28l-86 -6l-94 -60l-17 -44l-25 -42l-27 -69l10 -7l67 41h44l8 11l9 -11l49 11l62 -35l59 -77v-17l8 -9l-8 -8l8 -76l-8 -35l-52 -59l-42 -44l-85 -17l-77 26l-104 119l11 51l-11 18l11 51l-11 8l11 59l7 10l-7 7l24 79v50l52 69l103 68l128 17z
|
||||
M314 302l-42 -8l-9 8l-35 -8l-33 -34l-9 7l-35 -83l10 -11l7 -58l43 -52l78 -17l59 9l52 50l7 62l-7 75l-27 35z" />
|
||||
<glyph glyph-name="seven" unicode="7"
|
||||
d="M394 651l8 -9l9 9l77 -27l8 -15v-34l-50 -62l-61 -125l-49 -111l-18 -197l8 -25l-17 -79l-35 -7l-32 17l-10 60l17 127l17 35l8 77l52 110l17 59l17 45l25 42l-32 34h-10l-7 -10l-70 10l-69 -10l-7 10l-34 -10l-17 -76l-25 -25l-27 17l-8 25l8 59l-8 10l8 49l44 18
|
||||
l178 -8l76 17h9z" />
|
||||
<glyph glyph-name="eight" unicode="8"
|
||||
d="M326 625l24 -17l52 -52l27 -76l-18 -76l-34 -60v-17l59 -59l18 -86v-17l7 -8l-7 -10l7 -34l-15 -32l-52 -61l-68 -42l-94 -8l-52 8l-76 42l-8 27l-9 7l-17 27l-8 49l-17 35l25 86l75 101l-49 79l-9 49l9 51l32 52l79 52zM360 286l-59 17l-86 7l-76 -42l-35 -69l17 -42
|
||||
l-17 -27l24 -25v-6l111 -70h27l84 42l52 103l-18 67zM360 531l-42 35h-44l-84 -10l-34 -32v-27l-11 -41l18 -43l94 -44l61 10l25 25l34 69z" />
|
||||
<glyph glyph-name="nine" unicode="9"
|
||||
d="M343 617h17l59 -59l17 -34l10 -59l17 -35l8 -61l-8 -60l8 -7l-8 -44l-17 -50l-18 -110l-27 -44l-100 -77h-25l-18 -17l-120 -8l-25 17v35l25 25l120 8l68 44l34 41l51 94l-10 27l10 8v24l-10 10l-24 -27l-86 -32l-59 -10l-42 17l-25 25l-34 10l-52 86l8 142l51 87l86 42
|
||||
l42 9zM326 548l-35 -7l-59 7l-59 -24l-17 -59l-18 -18l35 -121l103 -34l59 17l52 52l7 52l-7 7l7 52l-7 7z" />
|
||||
<glyph glyph-name="colon" unicode=":"
|
||||
d="M331 265l49 -35l18 -41l-8 -62l-10 -7v-18l-66 -25l-52 16l-51 61l9 41l60 52l24 18h27zM355 494l43 -60l-8 -58l-42 -35l-34 -10l-59 17l-27 45v18l-8 6l35 69l59 25z" />
|
||||
<glyph glyph-name="semicolon" unicode=";"
|
||||
d="M375 147l17 -32l-8 -103l-27 -35v-25l-69 -85l-32 -8h-34l-10 17l10 49l34 35v17l7 10l-51 59l-7 25l7 51l44 42l49 17zM332 420l52 -59l-9 -52l-18 -24l-17 -17l-77 -10l-24 17l-27 27l10 76l41 42h69z" />
|
||||
<glyph glyph-name="equal" unicode="="
|
||||
d="M233 199l79 9l7 -9l52 9l7 8l34 -8l70 8l42 -35v-48l-35 -18l-67 -10l-145 17l-9 -7l-136 7h-25l-27 25h-7v27l42 34l41 -9l52 17zM516 354l8 -10v-35l-35 -24l-67 -10l-34 17l-51 -17l-52 17l-25 -7l-59 7l-10 10l-24 -17l-35 17h-25l-17 18l32 34l45 7l152 -17l86 17
|
||||
l50 8z" />
|
||||
<glyph glyph-name="question" unicode="?"
|
||||
d="M343 61l18 -44l-10 -25l-76 -17l-77 17v34l67 52zM351 522l52 -27l52 -67l7 -62l-69 -76l-17 -17l-60 -34l-7 -18l7 -49l-7 -10v-18l-27 -6h-24l-17 17l-8 52l-10 7l18 25h17l24 44h17l17 17l45 25l15 34l-25 76l-42 35l-93 8l-52 -25l-10 -10v-15l44 -27l8 -7v-28
|
||||
l-17 -17l-42 -7l-8 7l-34 -7l-17 17l24 94l35 42l86 34l32 10z" />
|
||||
<glyph glyph-name="A" unicode="A"
|
||||
d="M268 461l-17 -17l-8 -94h-9l-18 -17l-7 -76l7 -8l-7 -27v-7l17 -18l83 8l11 -8l24 35l-7 60l-28 23l11 28l-11 76v25h18l17 -77l17 -24v-51l25 -25l27 -128l17 -28v-35l25 -23l59 -8l17 -17v-27l-17 -18h-32l-9 -7l-153 17l-17 17l6 18l28 25h17l17 23l-10 28v7l-24 28
|
||||
l-146 -11l-9 -6l9 -52l35 -17l25 -43l-25 -27h-10l-7 -7l-69 7l-69 -7l-42 17h-7l-10 8l10 44l83 25l28 34l17 76l24 42v52l17 18v23l25 18l10 86l17 42h25zM292 537l17 -17v-17l-41 10v24h24z" />
|
||||
<glyph glyph-name="B" unicode="B"
|
||||
d="M89 39l17 -18v-17l-27 -7h-25l-9 7l17 35h27zM156 541l44 17l35 -7l75 7l84 -24l35 -17l51 -87v-52l-34 -49l-17 -17l17 -44l34 -33l8 -85l10 -11l-27 -83l-49 -42l-28 -17l-118 -10l-52 17h-101v17l33 18l17 42l-7 44l7 118l-17 239l-8 8h-17l-17 -18l-77 27v35l25 17
|
||||
l44 7zM353 472l-8 -7l-110 17l-18 -25l-10 -154h59l27 17l8 -8h59l51 49v35l-34 69zM301 260l-60 -9l-24 17l-27 -50l27 -172h7l181 10v34l34 25l7 59l-41 52l-45 25z" />
|
||||
<glyph glyph-name="C" unicode="C"
|
||||
d="M329 569l42 -28l68 28l8 -28l-17 -93l-8 -8l34 -86l-9 -42l-25 8l-34 34v17l-7 11l7 6l-17 35v34l-77 50l-25 10l-44 -10l-24 -32h-17l-52 -79v-8l-17 -17l9 -7l-9 -10l9 -42v-9l-9 -8l17 -34l-8 -8l25 -69l10 -51l76 -69l59 9l35 35l17 8l25 27v17l27 24v42l32 10
|
||||
l26 -18l8 -34l-17 -68l-66 -85l-18 -34l-86 -17l-84 24l-78 69v25l-33 45l-17 83l8 27l-8 77l17 93l50 84v17l69 45l68 17z" />
|
||||
<glyph glyph-name="D" unicode="D"
|
||||
d="M505 377l17 -68l-8 -28l-27 52v44h18zM292 232v12h13v-12h-13zM214 537h17l10 -7l34 17l77 -27l25 10l44 -17l41 -25l18 -69v-9l7 -8l-76 94l-69 17l-32 -10l-52 10l-27 -25l-7 -61l7 -8v-34l-7 -8l7 -180l-7 -51l7 -76v-17l121 -8l42 25l59 69l9 41l25 25v17l-7 10
|
||||
l17 25l8 10h9l8 -10l-25 -129l-35 -58l-85 -69l-111 -8l-25 8l-93 -18l-52 10h-25l-17 17v18l17 17h101l18 14l9 87l8 10l-17 66l9 52l8 7l-8 11l8 6l-8 28l15 110v18l-7 7l-17 52l-112 -10l-7 10v24l67 17z" />
|
||||
<glyph glyph-name="E" unicode="E"
|
||||
d="M461 536h7l27 -118l-10 -7l10 -45l-10 -7l-35 52l-6 58l-52 60l-8 -8l-10 8l45 24zM205 546l9 -10l32 17l28 -7l58 7l8 -7v-17l-126 -17l-17 -18l8 -100l-8 -11l8 -41l24 -28l34 -7l17 17l35 35l11 35l6 6l35 -6l7 -70l-17 -51l10 -69l-27 -25h-8l-17 34l11 25l-18 27
|
||||
l-17 17h-77l-17 -17l-10 -121l18 -24v-42l17 -17l76 -10l17 10l59 -10l52 52l35 101l7 9h17l17 -17l-17 -69l10 -17l-17 -101l-10 -10l-32 10h-35l-17 -17l-44 7l-49 -7l-45 7l-76 -7l-52 7l-7 -7l-24 7l-35 -7l-27 24l10 35l93 17l34 35l8 34l-8 18l8 66l-8 266l-17 17
|
||||
l-41 -10l-62 10l-7 8l17 41z" />
|
||||
<glyph glyph-name="F" unicode="F"
|
||||
d="M360 417v15h12v-15h-12zM377 189v-28l-10 -7h-7l-8 41l8 52zM377 528l17 18l76 -18l25 -49l-7 -27v-24l17 -18v-34l-10 -8l18 -35l-8 -26v-8h-17l-18 34v8l8 10l-8 7l8 24l-25 46l10 6l-18 28l-51 32l-68 -8l-8 8l-35 -15l-27 7l-15 -17l8 -24v-11l-18 -17l10 -35
|
||||
l-10 -66l25 -27l45 -7l25 34l26 25l8 41l24 -24l-17 -42v-34l-7 -10h-8l-9 10l-25 -18l-87 -24l-17 -111l17 -35v-44l43 -25l34 11h35l17 -17v-18l-17 -17l-42 8l-52 -8l-18 8l-69 -8l-6 8l-43 -8h-26v41l17 11l58 -11l35 43l-7 9l17 35l-10 66l10 11l-10 24v10l-7 7l7 17
|
||||
l-17 215l-18 24h-17l-7 -7l-7 7l-27 -7l-35 7l-7 25v10l17 17l52 8l7 -8l136 17z" />
|
||||
<glyph glyph-name="G" unicode="G"
|
||||
d="M347 553l18 -17l58 17h10l17 -17l-17 -145l7 -9v-25l-7 -8h-27l-32 50l-9 44l-69 49l-94 -14l-41 -45l-18 -93l-17 -17l17 -84l18 -120l58 -69l52 -8l59 34l44 43l8 42v34l-86 17h-8l-10 10l18 34l26 15l52 -8l66 8l86 -15l8 -10v-34l-94 -17l-7 -128v-32l7 -10l-17 -24
|
||||
l-7 -10h-17l-25 34l-52 -41l-103 7l-76 76l-7 44l-27 34l-8 84l8 10v24l-17 17l9 87v24l25 25l27 68l49 60l34 17z" />
|
||||
<glyph glyph-name="H" unicode="H"
|
||||
d="M241 536v-41l-59 -17l-10 9l-15 -17l8 -9l-8 -77l8 -52l69 -24h17l7 7v10l69 -17l52 41l-10 42l10 10l-17 52l7 8l-25 26h-17l-10 -9l-42 34h-7l-10 7v11l10 6h7l8 -6l17 17l145 7l35 -7h25l9 -28v-32l-41 -9h-28l-7 -8l7 -27l-24 -273l7 -8l-7 -86v-32l17 -10l52 10
|
||||
l7 -10h8v-25l-15 -17l-180 8v9l-10 8l79 35l15 152l-15 52h-10l-7 -8l-18 18h-61l-8 -10l-76 10h-34l-17 -44v-25l9 -10l-17 -49l8 -69v-25l24 -17l45 7l7 -7v-27l-7 -8l-10 8l-25 -8l-34 8l-52 -8l-8 -9l-51 17l-8 9v18l18 7l58 -7l8 118l-8 42l8 27l-17 34l17 43l-17 69
|
||||
l9 49l-9 9l9 43l-34 34l-51 7v28l17 17l41 7z" />
|
||||
<glyph glyph-name="I" unicode="I"
|
||||
d="M192 553h25l10 -10l31 17l28 -7l84 7l78 -7l8 -10v-31l-59 -35l-27 7h-16l-9 -7l-8 7h-27l-7 -7l7 -44l-7 -212l24 -139l18 -14h111l17 -27l7 -8l-14 -44l-35 -17l-9 10l-85 -10l-51 10l-34 -10l-69 10l-25 -10l-52 10l-35 17l-6 25l23 27l87 17h25l9 8l8 -8l17 205l-7 7
|
||||
l7 76l-7 27l7 50v34l-17 10l-52 -10l-66 17l-28 28l11 23l76 25z" />
|
||||
<glyph glyph-name="J" unicode="J"
|
||||
d="M333 555l32 8l103 -18v-49l-17 -17h-42l-17 -17l-10 7h-7l-18 -52v-42l-9 -7l17 -35l-17 -103l-8 -128l8 -8l-77 -93l-66 -27l-79 18l-25 26l-34 7l-25 60l7 103l35 35h59l27 -35l-9 -52l-60 10l-7 -10l17 -76l25 -24h110l52 66l8 104l-18 69l10 58l-17 136l-86 17
|
||||
l-25 25l8 27l17 17l59 8z" />
|
||||
<glyph glyph-name="K" unicode="K"
|
||||
d="M242 547l35 -35l32 35l204 7v-67h-7l-17 -17l-34 32l-153 -153l-25 -58v-18l49 -51l28 -60l41 -41v-18l52 -44l42 -7h24v-77l-236 17l-10 8l-34 -17l-94 9l-34 -9l-77 9l-17 17v18l44 25h25l17 24l8 86l-8 8l8 78l-8 49l8 181l-25 17h-59l-10 7v28l17 17h43l9 -11l111 28
|
||||
zM343 76l-83 79v76l-10 -27h-17l-42 -34l-10 -49l10 -62h69l25 -15l58 15v17zM309 436v51l-76 8l-52 -25l-8 -9l-6 -136l14 -52v7l35 35v17l51 45z" />
|
||||
<glyph glyph-name="L" unicode="L"
|
||||
d="M166 555l27 8h31l18 -18l86 10l52 -10l8 -7v-18l-43 -17l-59 8h-34l-10 -32l10 -80l-10 -6l27 -136l-17 -86l7 -52l-7 -8v-26l24 -25l146 7l41 44l-7 43l7 24l-7 28v24l25 34h34l10 -110l-10 -69l10 -18v-31l-35 -44l-27 9l-58 -9l-8 9l-77 -9l-44 9l-58 -9l-25 9l-79 -9
|
||||
l-77 9v52l129 7h17l17 290l10 8l-10 59v34l24 18v17l-24 25l-152 9l-11 -9v44l11 -10l58 18z" />
|
||||
<glyph glyph-name="M" unicode="M"
|
||||
d="M-8 524l26 17l42 -8l7 7l77 -17l10 10h17l41 -45v-66l-58 41l-17 -17l-10 -76l10 -51l-10 -18l27 -195l-10 -9v-17l44 -35h35l14 -25l10 -7l8 7l-25 187l-24 17l17 18l-17 94l6 9l-6 60h17l-11 -35l18 -17l17 -101l25 -52v-34l17 -17l10 17v24h25l9 -7v-27l-9 -7l9 -8
|
||||
l-9 -35l9 -61h-9l-18 -59l-7 -7l-27 7v10l-17 17l-32 -27l-79 -7h-32l-18 17h-52l-9 24l9 11v14h35l25 27l-8 84l18 120l-10 25l10 52l7 10l-7 7l7 42l-17 27v34l-17 15l-77 10zM459 405l10 -35v-25l7 -9l-7 -25l7 -59l-7 -10l7 -76l-7 -52l17 -42l-10 -10l18 -17l51 -8
|
||||
l10 -24v-10l-35 -17l-9 10l-52 -17l-32 17l-51 -17h-11l-24 24v28l76 24l28 350h14zM365 377l-24 -101h-8l15 94l10 7h7zM341 242v-18l-8 -6v24h8zM469 533l7 7h10l17 -17l-34 -42l-18 -42v-17l-24 76l-10 8l-24 -33v-34l-11 -10l-24 10l-10 7l34 77l17 17zM154 503v-15h12
|
||||
v15h-12z" />
|
||||
<glyph glyph-name="N" unicode="N"
|
||||
d="M559 530l-22 -31l-17 -17l-42 7l-27 -25l10 -59l-17 -85l7 -25l-7 -60v-27h-11l-14 52l8 60l-18 137v7l-25 25l-9 -7l-52 17l-14 17l6 25l52 17l25 -7l121 7zM170 541l10 10l59 -10l24 -25l-17 -52l45 -42l-10 -27l42 -100l9 -35v-35l-41 43l-28 86l-24 41l-27 27l10 35
|
||||
l-10 7h-7l-17 -69l9 -66l-9 -9l17 -257l58 -17h18l17 -25v-17l-17 -18l-59 11l-10 -11l-7 11l-8 -11l-61 11l-25 -11l-69 11l-7 7l24 42l59 27l10 52l-17 25l17 51l-10 7l18 27l9 60l-27 34v25h27l8 10l-25 66l8 27v7l-18 18l-76 17v8l-7 9l52 42zM384 285v17h8v-17h-8z
|
||||
M315 174v-32l-17 32l11 10zM384 174h25v-24h-7l-10 -8v-10l27 -25l25 8l17 -17l7 -77l-17 -24l-7 -11l-35 11l-17 17v24l-25 25h-17l-10 10l10 25h7l18 17l-25 41l7 28zM451 167v-35h-18l-6 35h24z" />
|
||||
<glyph glyph-name="O" unicode="O"
|
||||
d="M37 58v13h11v-13h-11zM317 -43v12h12v-12h-12zM351 577l77 -76l10 -34l24 -17l25 -129l9 -58l-34 -136l-17 -28v-14l-51 -52l-8 -27l-17 -17l-94 -14l-17 14l-103 17v18l-16 17l-9 -8v-9h-18l10 9v25l-27 17v18l-17 17l-7 -11v-6h-17l-11 68v25l-6 9l17 95v31l-11 10
|
||||
l18 59l27 77l42 62l103 66zM317 484l-25 34h-34l-34 -7l-43 -27l-17 -17l8 -42l-17 -25h-16l16 -189l26 -25v-52h18l34 -41h25l17 24l17 -18h17l42 35v17l-7 10l17 17l8 85l25 27v58l-18 17v25l10 10l-10 8v25l-32 51h-27zM317 314v12h12v-12h-12zM317 195v13h12v-13h-12z
|
||||
" />
|
||||
<glyph glyph-name="P" unicode="P"
|
||||
d="M269 552l6 10l129 -27l10 -8h7l18 17l34 -34l-7 -8l14 -17v-27l27 -25l7 8l10 -42l-10 -101h10v-35h-10v60l-7 7l-27 -25l-66 -59l-69 -17h-8l-10 7l-83 -17l-18 -58l18 -85l14 -17l62 -10l7 10h18l9 -17l-9 -51l-8 -11l-44 11l-111 -11l-66 11l-10 -11l-7 11l-35 -11
|
||||
l-34 17l-18 18v27l42 24l62 10l7 -10h17l25 70l-8 76l18 212l-18 78h-24l-10 -9l-69 17l-17 17l17 35zM327 485l-24 -10l-34 18l-25 -8l-10 -52l10 -103l-10 -7l10 -10v-8l59 -7l51 7l8 -7l17 15l25 10l35 52l-8 41l-27 42h-25z" />
|
||||
<glyph glyph-name="Q" unicode="Q"
|
||||
d="M273 587l10 -7l7 7l35 -7v-17l41 -17l62 -60l24 -34l8 -70l17 -24v-76l10 -10l-35 -135l-17 -60l-34 -27l-24 -25l6 -24v-9l11 -8l34 8l32 33h17l27 -33l-9 -42l-52 -52l-25 7h-24l-63 45v17l-41 25h-69l-25 24l-34 9l-76 112l-25 179l7 60l18 52l9 41l49 69l63 17l41 32
|
||||
h25zM290 60l10 25l-17 17l-35 -34l8 -8h34zM265 521l-9 7h-18l-31 -25l-52 -75l-11 -46l-24 -41l7 -59l-7 -10l7 -94l28 -41l7 7h10l7 -7l52 24l17 17l42 -7l69 -52l18 18l51 110l-10 42l10 27l-17 84l-28 17l-52 94h-24l-34 17z" />
|
||||
<glyph glyph-name="R" unicode="R"
|
||||
d="M150 546l6 -10l42 10l77 -10l10 10l17 -17l35 7l93 -24l52 -60l7 -93l-17 -45l-86 -66l34 -69l10 -59l-10 -44v-15l27 -27h17l8 -8l24 18l35 -10v-8l10 -9l-28 -18l-6 -7l-43 7l-9 -7l-18 17h-7l-10 -10l-25 45l-9 59l9 24l-17 69l-59 52l-111 17l-17 -17l-10 -110
|
||||
l17 -28v-59l18 -17l59 -8h17v-9l10 -8l-17 -17l-42 7l-10 -7l-35 7l-118 -17l-26 17v27l96 25l14 136l-14 26l6 35l-17 101l17 34l-24 60l7 9l-17 18l-7 -10l-69 17l-8 27v15l16 17l85 10h11zM361 477l-42 -7l-10 7l-49 -7l-44 -27v-129h34l25 -24h17l17 17l86 24l25 46v24
|
||||
l-7 7l7 27z" />
|
||||
<glyph glyph-name="S" unicode="S"
|
||||
d="M356 517v-8l27 -24l15 15v34l10 10h17l8 -10v-25l-17 -17l17 -103l-8 -7l-34 34l-8 25l-44 44l-66 32h-51l-18 -32h-26l-25 24h-8l-9 -9l9 -42l-17 -25l17 -68l33 -25h26v-9l8 -8l44 8l110 -25l76 -77l17 -109l-34 -77l-34 -44l-94 -17h-17l-7 -7l-27 17h-34l-34 24h-25
|
||||
l-25 -24l-44 7l-8 27l18 84l-10 76v9l10 8l34 -8l17 -17l8 -51l59 -59l61 -17l66 17l27 34l25 25l17 85l-10 25l-76 35l-93 7l-17 35l-17 -18v-7h-17v17l-42 25l-42 51l-10 59l17 44l35 24v18l42 7l51 27z" />
|
||||
<glyph glyph-name="T" unicode="T"
|
||||
d="M139 535l62 10l59 -10l8 10l52 -10l51 10l51 -17l25 -27l10 -60l-10 -76l10 -7v-27l-10 -8l10 -9v-25l-17 -18h-18l-26 111l9 25l-27 52l-66 27h-10l-24 -27l-10 -212l-8 -62v-24l-9 -8l9 -9v-17l-9 -8l17 -52v-10l44 -25l49 10l52 -17l9 -10v-17l-26 -17l-229 10
|
||||
l-69 -10l-17 27l9 24l8 10l59 -10l10 10l51 -10l17 77l16 44l-16 15l-9 155l17 25l-8 93v27l-34 25h-44l-32 -25v-34l-17 -18l-10 -68l10 -17v-35l-27 -25h-18l-17 18l10 69l-10 7l17 76l-7 10v17l7 8l-7 10l7 24l35 35z" />
|
||||
<glyph glyph-name="U" unicode="U"
|
||||
d="M237 484v14h13v-14h-13zM348 365v13h12v-13h-12zM348 228v-16l-7 -9h-10l-7 25h24zM434 -129v-18l-9 18h9zM348 577l10 10l76 -18l25 18l44 -10l15 -17v-32l-59 -10l-8 10l-26 -17l9 -111l-9 -76l9 -79l-9 -42l9 -69l-52 -93l-93 -49v6l-7 8l-35 -8l-76 25h-17l-61 111
|
||||
l-8 34l8 10l-8 25l17 69l-9 17l9 49l-9 17l9 52l-17 27l8 42l-18 52h-7l-8 -10l-17 17h-27l-8 25l8 9l34 18l43 -10l78 10l49 -10l10 -17v-32l-69 -10l-17 -17l10 -42l-17 -34l17 -35l-17 -25v-10l7 -7l-7 -24l7 -52l-7 -17l7 -69l27 -25v-34l66 -35h70l24 24v28l34 17
|
||||
l-7 111l18 52l-18 126l18 17l-18 44l-86 24v25l59 34z" />
|
||||
<glyph glyph-name="V" unicode="V"
|
||||
d="M133 576l62 8l7 -8l10 8l25 -8l8 -27v-34l-33 -8h-27l-7 -10l7 -24l-7 -25l17 -26v-43l32 -25l-7 -26l7 -42l-7 -10l25 -84l17 -17l34 42v76l18 17l17 62l17 67l7 9l-7 49l-52 27l-7 8v27l17 17l93 -9l50 9l61 -9l18 -18v-42l-35 -17l-9 7h-25l-43 -31l-61 -222l-24 -79
|
||||
l-8 -7l8 -52l-17 -24l-8 -52l-44 -42h-17l-33 42v41l-10 11l10 7l-34 155l-17 49l-17 104l-18 51l-17 59l-8 8l-61 -8h-8l-17 17v43l25 17z" />
|
||||
<glyph glyph-name="W" unicode="W"
|
||||
d="M344 528l10 -8v-17l-45 -18l-31 -51l-10 -7h-8l-9 7l17 94l17 9zM278 180v13h12v-13h-12zM98 537l7 8l62 -17l7 -8v-7l-52 -17l17 -94l11 -10v-17l-11 -8l28 -44l7 -59l8 -7h9l17 66v17l35 45v17h8l17 -62h17l35 35l-11 35l-6 6h6l11 11l7 -11l-7 -6l51 -112l-10 -6
|
||||
l10 -28l7 -7l18 41l17 17l-10 8v27l18 17v94h9l17 18l-26 34v15l44 -8l34 17h15v-41h-24l-18 -52l10 -59l-27 -79l-17 -94l9 -7l-17 -52l-27 -145l-15 -17v-8l-51 8l-28 44l11 101l-17 35v9l6 8l-17 24l11 52l-18 34l-7 8l-18 -25l-17 -162l8 -25l-8 -76l-44 -27l-32 10
|
||||
l-28 34l11 7l-11 42l11 35l-17 17l-11 110l-17 18l10 94l-17 76l-17 62h-35l-17 17v24l17 8zM292 498v-13h15v13h-15z" />
|
||||
<glyph glyph-name="X" unicode="X"
|
||||
d="M167 558h24l10 -7l7 7l27 -7h25l9 -10l-17 -34l-44 10l-7 -10l24 -77v-24l-7 -10l67 -42l27 28l7 48l27 27v25l-52 42v17l69 17l144 -7l9 -10v-24l-77 -17h-17l-59 -94l-51 -94l7 -59l27 -52l49 -41l10 -69l25 -18l17 -17h69l25 -25v-27l-25 -17l-162 10l-8 -10l-34 10
|
||||
l-18 17v34l43 16l9 9l-9 52l-25 25l-10 59l-17 27l-8 7l-17 -17v-25h-8l-27 -27v-41l-34 -60l52 -25h17l9 -26l-9 -8v-17l-111 -10l-25 10l-61 -10l-42 17l-17 18v34l69 8h25l34 34l10 35l25 10l17 41l24 25l17 44l27 25v25l8 9l-42 42l7 10l-58 93l-52 50l-25 -7l-52 7
|
||||
l-7 27l24 24l18 11z" />
|
||||
<glyph glyph-name="Y" unicode="Y"
|
||||
d="M219 552l18 -35l-35 -52l-9 -7l26 -79l25 -25l35 -51l17 62l35 41l24 69l10 8l-17 24l-34 10l-11 7v28l62 6l7 -6l25 6l10 -6l25 6l9 -6l25 6l35 -6l6 -11v-24l-41 -10l-69 -67l-8 -44v-17l-34 -14l-24 -87l-35 -77l18 -120l34 -17h59l25 -25v-34l-118 -18l-60 -7
|
||||
l-138 25l-7 9v25l35 25l24 -8l42 8h17l17 69l10 24l-10 17l18 79l-69 84l-8 42l-52 79l-24 25l-69 17l-17 17v24h9l8 11l10 -11l111 17z" />
|
||||
<glyph glyph-name="Z" unicode="Z"
|
||||
d="M415 552l34 -25v-42l-34 -34l7 -10l-59 -83l-35 -18l-25 -69h-9l-25 -25v-27l-34 -7l-17 -42l-60 -51l-25 -70v-7l8 -10l25 17l44 -7l42 7l7 10l27 -17l69 7l50 52l-8 8l8 69v24l27 17l24 -24l-17 -86l-7 -17v-33l7 -10l-7 -17v-24l-27 -10h-25l-10 10l-24 -17l-35 7
|
||||
l-42 -18l-42 18l-86 10l-42 -17h-10l-17 17v24l52 60l25 34l27 59l51 86l49 87l27 24l-9 10v15l17 9l27 25v27l-17 17l-76 -9l-18 17h-26l-35 -42l-33 -103h-26l-8 68l17 111l42 25h35l8 -7l44 17z" />
|
||||
<glyph glyph-name="backslash" unicode="\"
|
||||
d="M502 -121l9 -34l-14 -4l-25 16l-25 57l-30 16l-9 18l4 3l-12 18l5 3l-14 13h-4l-3 17v9l-18 25h-9l-12 27l-4 24l-5 18l-25 12l-5 13h-4l-9 39l-16 21l-51 106l-34 21l-14 50l-21 27l-12 42l-25 30l-12 28l-36 48v21l-12 16l-37 57l-6 -5v12l6 14l-9 7l3 22l18 5l16 -12
|
||||
l21 -6l14 -12l22 -46l33 -52l30 -93l13 -4l16 -30l-4 -21l18 -27l49 -71l18 -51l-4 -5l46 -46l22 -52l24 -37l-3 -5l39 -73l21 -12l7 -30l-3 -21l12 -13h5l13 -30l-9 -12l9 -13l3 4l18 -4v-12z" />
|
||||
<glyph glyph-name="asciicircum" unicode="^"
|
||||
d="M266 795l4 6l42 -13l34 -35l21 -43l21 -15v-13l48 -35l-5 -50v-5l-29 -12l-21 3l-48 39l-16 25l-42 30l-27 5l-16 25l-42 -12l-5 -6l-22 14l-3 -47l-18 -38l-30 -30l-25 9l-12 37l58 85l15 6l21 24l67 55z" />
|
||||
<glyph glyph-name="underscore" unicode="_"
|
||||
d="M184 -14l110 -9l8 9h27l8 -9l41 17l52 -8l9 8h8l10 -8l25 18l86 -18l17 -27l-10 -66l-24 -17l-112 -10l-9 10l-25 -10l-59 10l-44 -10l-50 10l-154 -17l-84 17l-34 32l6 61l60 25l44 -8l42 18z" />
|
||||
<glyph glyph-name="quoteleft" unicode="‘"
|
||||
d="M205 534l14 -13l75 -27l35 19l28 41l-22 61l-33 22v20l19 19l21 28h7l8 27l-28 34l-8 -6h-19l-56 -48v-13l-33 -41v-20z" />
|
||||
<glyph glyph-name="a" unicode="a"
|
||||
d="M279 404l7 10l69 -18l25 -9l35 -43l7 -110l-7 -59l7 -18v-34l-7 -10l24 -25l62 8l7 -76l-35 -42l-58 -8l-52 33l-8 9l-103 -34h-59l-10 8l-7 -8l-43 8h-26l-49 51l-10 76v35l68 59h8l9 10l-9 7h-17l-25 62l7 76l27 25l85 27zM321 148l7 27h-17l-66 -18l-10 8l-8 -8h-51
|
||||
l-43 -27l8 -7l-8 -35l18 -24h94l58 18l35 41zM346 310l-25 17l-94 25l-51 -17v-8l25 -41l-8 -11v-6l-52 -35h42l79 17l17 18h24l52 17l-9 7v17z" />
|
||||
<glyph glyph-name="b" unicode="b"
|
||||
d="M160 541l18 -34l-11 -43l11 -26l-18 -84l7 -11h17l35 35l52 17l52 -7l7 7h35l24 -52l44 -58l8 -69l9 -8l-17 -86l-27 -66l-76 -79l-59 -8l-52 8l-24 27h-28l-34 -27h-7l-18 17l10 104l-17 83l7 180l-17 94l-59 17l-35 35l11 24l24 17zM296 309h-35l-25 10l-58 -94
|
||||
l-11 -75l11 -18l-11 -10l69 -66l52 -18l8 8l27 17l17 42h14l11 62l-18 49l7 9l-7 43l-42 51z" />
|
||||
<glyph glyph-name="c" unicode="c"
|
||||
d="M342 404l76 -35l17 -25l25 -26l-7 -84l-25 -17h-68l-18 41l35 35l-28 34l-41 25l-52 -8l-42 -17l-59 -69l17 -128l18 -25l6 -9h18l34 -32l35 -17l49 17l86 76h52l8 -27l-18 -49l-49 -52l-79 -34l-59 -8l-25 8h-27l-77 52l-58 75l-8 77l18 93l59 87l41 34l60 8l9 10z" />
|
||||
<glyph glyph-name="d" unicode="d"
|
||||
d="M329 558l8 7l41 -7l18 -25l-8 -35l8 -34l-8 -76l8 -28l-8 -41l8 -8l-8 -34l8 -10l-8 -25l17 -69l-9 -7l17 -76l42 -27l44 -8l8 -10v-25l-17 -17h-25l-18 -17l-42 8h-9l-8 -8l-59 34l-44 -17l-17 -24l-35 7l-7 -7l-59 15l-34 26l-25 25v27l-27 25l-17 87l17 93l27 66
|
||||
l66 52l59 10l45 -10l42 -24h17l24 34l-17 24l-7 60l-17 17l-8 -8l-79 18l-7 7l7 35l18 7zM295 311l-27 25l-50 7l-44 -24l-41 -60v-34l6 -17l-6 -7v-28l17 -34l34 -42l34 -34l50 17l27 34h17v18l25 52l-17 75l9 25l-17 27h-17z" />
|
||||
<glyph glyph-name="e" unicode="e"
|
||||
d="M335 386l70 -76l26 -52v-34l-9 -7l9 -8l-9 -27l-42 10l-45 -18l-24 18l-42 -10l-17 -17v9l-52 8l-69 -8l-8 -9l18 -60l51 -41l67 -27l34 10l10 -10l84 76h27l8 -25l-17 -34l-60 -51l-93 -25l-28 17h-49l-61 59v17l-32 34l-17 94l-11 10l28 77l24 49l42 26l27 25l25 10z
|
||||
M210 241v17h-44l17 -34zM286 335h-27l-49 9l-10 -9l10 -8l-10 -7v-28l10 -6h7l35 24l24 -24v-11l-24 -41l59 7v69z" />
|
||||
<glyph glyph-name="f" unicode="f"
|
||||
d="M450 541l49 -52l-18 -42l-7 -10l-41 17l24 52l-24 35h-18l-10 -8l-7 25zM338 558l8 -11l-77 -49l-24 -69l49 -52l62 18h25l17 -18l-27 -17l-25 11l-25 -11l-27 11h-17l-17 -18l9 -42l-9 -27l17 -118v-86l94 -17l10 9h24l28 -27v-25l-18 -17l-94 -9h-27l-7 9l-10 -9h-25
|
||||
l-7 9l-17 -17h-10l-17 17l-59 -17l-69 17l-8 25l17 27l60 17l25 -9h34l17 17l10 69l-10 7l17 121l-7 42v24l-44 28l-42 -18l-60 18v6l-9 11l86 17h25l17 -17h17l17 17v32l-7 10l17 42l32 52l44 17h17zM252 360v17l-7 11l-10 -28h17z" />
|
||||
<glyph glyph-name="g" unicode="g"
|
||||
d="M305 395l52 -41l32 41l44 10l50 -62l-8 -24l-25 -25h-17l-27 49h-7l-10 11l-24 -35l17 -34v-60l-42 -58h-17l-27 -28l-60 -7l-69 24l-32 -7l-34 -34l25 -27l34 -15l59 24l17 -9l77 9l17 -17h76l44 -25l17 -34l16 -69l9 -7l-42 -79l-79 -25l-14 -17h-17l-10 10l-42 -27
|
||||
l-27 17l-42 -8l-153 50l-27 35l-7 61l25 93l-8 60v34l35 35l7 -11l27 11l8 7l-18 34v84l94 96zM246 21l-34 -18l-17 18l-77 -35v-24h8l9 -10v-24l101 -35l69 17l8 -9l52 9l34 35v32l-10 9l-49 25l-44 -8l-18 18h-32zM278 354h-25l-41 6l-34 -24l-11 -51l17 -43l-6 -44l6 -7
|
||||
l69 -7l43 7l44 34v35l-10 59z" />
|
||||
<glyph glyph-name="h" unicode="h"
|
||||
d="M133 549l9 8l25 -18v-49l-7 -10l7 -17l-7 -59l7 -8l-7 -44v-17l17 -17l83 69l52 27l59 -10l59 -60l18 -58l-8 -28l8 -51l-8 -119l8 -24l86 -17v-52l-17 -17h-35l-8 8l-9 -8l-66 8l-79 -8l-33 42l33 34h51l10 10l-10 24l17 146l-17 35l10 34l-34 32l-44 9l-33 -9l-52 -60
|
||||
l-41 -51l-17 -24v-70l7 -7l-7 -10l7 -42l24 -24h62v-10l17 -17l-17 -25l-35 -17l-58 -8l-27 16l-43 -8l-59 8l-10 9l10 52h67l17 83l-7 180l7 8l-7 96l7 66l-76 17h-8l-10 10v32l18 18z" />
|
||||
<glyph glyph-name="i" unicode="i"
|
||||
d="M257 403l7 10h25l27 -35l8 -162l-18 -34l10 -66v-28l17 -17l94 10h35l17 -17l7 -44l-17 -25l-35 -8l-59 8l-7 -8h-18l-9 8l-8 -8l-27 8l-83 -18l-45 10l-7 8l-8 -8l-44 8h-25l-27 34l10 35l111 17l7 -10h35l17 17l-7 28l-10 6h10l17 87l-10 66l10 69l-17 17l-28 -24
|
||||
l-34 15l-7 9l-17 -9h-35l-8 69zM316 548l8 -41l-18 -28l-31 -17l-63 17l-6 45l17 24l41 25z" />
|
||||
<glyph glyph-name="j" unicode="j"
|
||||
d="M286 430l42 8h26l25 -35l10 -128l-10 -7v-17l10 -8l-17 -79l7 -127l-7 -50l-27 -76l-17 -35l-67 -34l-94 7l-9 -7l-59 69l-10 83v35l61 42l50 -8l17 -51l-7 -60h-35l-8 -10l18 -17l59 10h17l18 25l24 27v7l-7 10l-35 -17h-9v25l17 17h17l10 -8l7 8l-7 59l7 34l-7 77l7 27
|
||||
l-7 59l7 69l-17 15l-101 -8l-52 25h-10v27l44 34zM328 608l61 -60v-24l-35 -34l-51 -11l-34 17l-17 28v34l51 50h25z" />
|
||||
<glyph glyph-name="k" unicode="k"
|
||||
d="M480 396h10v-17l-10 -10h-7l-17 17l17 18zM157 566l17 -25l-9 -61v-24l-8 -11l8 -7l-8 -59l17 -35l-17 -24l17 -62l35 -24l42 24l76 86v17l-7 8l-45 -8v35l52 8l27 -25l25 25h52l7 -8l-42 -44h-42l-34 -32v-28l-34 -41l6 -27l52 -32l10 -27v-25l32 -35l45 -41l25 7l41 -7
|
||||
l10 -17v-35h-86l-8 -9l-27 9l-49 -9l-10 -8l-35 17l-17 17v25h28l17 17v34l-34 52l-18 60h-17l-34 -35l-35 -25l-8 -35v-34l25 -24h52l7 -10l-7 -51h-8l-9 -8l-25 17l-10 -9h-7l-10 9l-25 -17l-58 8l-18 -8h-34l-18 17v35l18 17l58 7l18 69l-7 77l7 7l-7 44l17 52l-10 142
|
||||
l10 11l-10 34l-76 24h-10l-8 10v15l104 18z" />
|
||||
<glyph glyph-name="l" unicode="l"
|
||||
d="M213 566l8 -10l35 18l41 -18l11 -66l-11 -121l11 -66l-11 -181l28 -58h24l10 7l18 -17h83l17 -25l-34 -34l-52 -8l-8 8l-24 -8h-17l-17 16l-11 -8l-66 8l-69 -16l-24 16l-28 -8h-34l-17 25l10 27l17 17l59 7l7 10l27 -10l35 34l-10 25l17 52l10 10l-27 25v17h10l25 69
|
||||
l-8 41l17 17l-9 52v25l-8 7l8 11l-8 34l8 7l-18 17l-59 10l-59 -10l-27 10l-7 7v35l17 8z" />
|
||||
<glyph glyph-name="m" unicode="m"
|
||||
d="M-3 3l14 44l79 7l17 17l8 146l7 7l-15 27l8 59v17l-17 17h-35l-34 25v18l34 27l76 -27l17 -18h28l24 35l42 10l35 -27l27 -25l42 7l24 27h44l8 8l52 -25l17 -69l-17 -118l17 -128v-10l25 -7h27v-44l-190 -8l-7 8l-86 -8h-35l-15 25l50 34l17 17l-8 52l8 7l-8 62l8 8
|
||||
l-8 69l25 24l-25 34l-59 8l-44 -42l-18 -52l-6 -7l17 -152v-18l24 -17l10 -10v-34l-79 -17zM447 293l-42 42l-27 9l-34 -51l-24 -76l17 -25l-17 -79l17 -49l-8 -10h32l27 -7l42 17l-8 49l18 27l-10 67l17 17v69z" />
|
||||
<glyph glyph-name="n" unicode="n"
|
||||
d="M524 21l-28 -26l-52 8l-69 -8h-34l-18 17v25l87 17h9l8 10l-8 49v35l8 9l-17 153l-60 34l-52 -26l-69 -94l-24 -59l7 -60l-7 -23v-11l24 -24l69 7h-6l-18 -42v-9l-17 -17l-28 9l-24 -9l-7 9l-35 -9l-44 9l-60 -9l-17 17h-7l7 27l28 24l49 10l17 18l10 75l-10 129v24
|
||||
l-66 42l-17 27v25l24 17l59 -17l35 24l34 -32h7l28 -27l101 52l69 -7l58 -62l11 -101l-11 -197z" />
|
||||
<glyph glyph-name="o" unicode="o"
|
||||
d="M334 413l60 -44l51 -66l24 -52l10 -77l-17 -27l-17 -76l-69 -76h-25l-34 -25l-111 17l-34 25l-42 35l-52 66l17 162l35 60l69 61l83 17h52zM369 292l-27 28l-67 32l-27 -17l-49 -8l-27 -17l-25 -69l17 -49l-9 -10l9 -42l49 -76l79 -10l25 17l8 -7h9l8 7l34 59l18 87z" />
|
||||
<glyph glyph-name="p" unicode="p"
|
||||
d="M148 412h17l34 -35l59 11l42 34h35l17 -17l52 -11l66 -24h17v-10l-7 -7l-35 17l-7 7l-10 -7l10 -27l32 -42l10 -100l-18 -104l-41 -60l-52 -34v-17l-77 10l-17 -17v-10l-34 42h-7l-10 -8l-7 8h-10l-8 -49v-35l35 -17l58 -10l8 -8v-34l-25 -17h-27l-7 9l-7 -9h-27l-8 9
|
||||
l-61 -17l-33 8l-9 -8l-59 17l-17 18v42l24 7h17l10 -7l52 17l15 187l-15 17l15 42l10 180l-10 7l-60 -7l-24 7l-10 10v35l27 17zM360 336h-16l-44 7l-42 -32l-51 -79v-42l27 -41l-10 -10v-17l59 -60l52 -7l69 67v17l-10 10l10 7h7v17l-17 34l10 25l-17 79z" />
|
||||
<glyph glyph-name="q" unicode="q"
|
||||
d="M292 403l17 -17h25l34 27h17l18 -27l7 -66l-7 -11l17 -367l25 -17l44 10l32 -34v-17l-32 -35l-35 10l-59 -17l-35 7l-61 -7l-41 17h-8l-10 8v34l45 24h31l10 -7l17 17l8 59l-17 27l-8 8l-68 -35l-94 10l-87 111l-14 143l32 79l61 58l33 18zM258 337v17h-43l-9 -17
|
||||
l-42 -28l-8 -58l-17 -43l7 -44l27 -42l33 -34l52 -7l41 52l35 31v27l9 25l-9 27l-8 -10l-17 18v17l7 7l-24 34z" />
|
||||
<glyph glyph-name="r" unicode="r"
|
||||
d="M161 405l11 7l41 -7l35 -35l-7 -51l14 -25l35 42l27 41h25l17 17l52 11l17 7h34l42 -52l-10 -66l-25 -18h-7l-27 25l-7 42l-17 17h-28l-66 -49l-10 -27l-42 -42l-17 -86l17 -17v-50l25 -27l9 10l84 -17l10 -10v-25l-27 -24l-59 -10l-25 10l-41 -10l-63 10l-24 -17l-86 17
|
||||
l-17 32v17l27 17l66 10l10 -10h18l24 52l10 52l-10 7l10 28v6l-10 11l10 7l-10 51l10 18v34l-28 25l-83 -10l-27 34l17 35z" />
|
||||
<glyph glyph-name="s" unicode="s"
|
||||
d="M305 404l59 -35l35 27l7 8l25 -25l9 -27l-17 -34l8 -43v-6h-15l-45 58l-51 42l-101 10l-35 -27l-24 -25l-10 -34l17 -35l69 -17l69 -7l83 -17l35 -17l42 -60l-7 -44v-25l-76 -68l-94 -25l-87 25l-76 -8h-17l-17 17l8 145l9 8h17l35 -42l35 -18h6v-9l-6 -8l24 -17l34 11
|
||||
l8 -11v-7l-8 -10l8 -7l34 17l10 -10h25l7 10l34 18v23l28 25l-17 27l-28 25l-49 18l-62 -8l-48 15l-70 34l-17 34l8 77l34 35l45 17h110z" />
|
||||
<glyph glyph-name="t" unicode="t"
|
||||
d="M418 224v15h12v-15h-12zM256 557l24 -43l-15 -17l8 -69l-8 -7v-7l32 -18l80 8l49 -8l9 -27l-17 -25h-41l-11 8l-86 -17v-17l-24 -25l17 -93l7 -8l-24 -27l41 -25l-17 -17v-27l28 -14h6l18 41h10l7 -10l69 69h17l17 -34l-9 -25v-27l-35 -42v-17h-7l-18 -34l-41 -17v-8
|
||||
l-10 -8l-59 8h-25l-44 52l-17 41l9 25l-9 44l17 195l-49 9l-69 -9l-27 17v35l34 27l94 -10l17 153h52z" />
|
||||
<glyph glyph-name="u" unicode="u"
|
||||
d="M154 394l7 -24l-17 -103l10 -8l-10 -52l17 -110v-8l52 -17l52 8l52 59v27l31 41l18 112l10 9v15l-28 17h-76l-7 28l52 24l49 -18l27 11l24 -11l11 -24l-11 -76l11 -62l-11 -7l18 -128l7 -8l10 8l77 -42l9 -10l-9 -42l-69 -17l-77 17h-24l-42 25l-111 -42l-69 25l-17 17
|
||||
l-10 -8l-15 25l8 128l-8 52l8 69l-7 40l-12 16l-32 -6h-17l-12 16l-9 2l-10 10l-8 16l26 20l56 4z" />
|
||||
<glyph glyph-name="v" unicode="v"
|
||||
d="M263 414l10 -10v-25l-34 -35h-18l-9 -9l9 -42l35 -52h17l15 -34l69 79l-8 24l17 17l-27 25l-25 10l-9 7v27l27 25l111 -7l52 7l32 -17l17 -17v-18l-49 -25l-28 8l-34 -34l-42 -143l-34 -70v-41h-8l-17 -52l-35 -34h-34l-24 34l-35 111l-27 69l-15 66l-17 17l-10 52
|
||||
l-17 25h-66l-18 17v35l18 17l31 7zM288 177v-12h15v12h-15z" />
|
||||
<glyph glyph-name="w" unicode="w"
|
||||
d="M89 386l10 10h24l17 -17l-17 -44l17 -25l-17 -35l17 -24v-34l-9 -8l17 -35l35 -17h9l18 17l-10 67l10 10h31l11 -10l-28 -170l11 -7l-25 -77l-27 -17h-18l-42 67l8 34l-25 76v35l8 10l-15 25l-10 58l-18 17l-6 43l-35 26l-10 8l10 27zM328 386h7l10 -7v-27h-17l-18 -17
|
||||
v-32h-17v7l-7 10h-28l-6 -10l6 -7v-11l-17 60l-24 9v18l7 7l28 -7l51 17zM507 404l8 -8v-27l-25 -25l-27 -110l-24 -42l-8 -79l-9 -8l9 -58l-17 -52l-17 -17l-27 9l-35 33l-7 93l-18 34l10 45l-27 59v7l17 17l18 -17v-24l25 -25l9 8h8l-17 -25l17 -45l9 -7h18l17 17v25
|
||||
l17 17l-9 93l9 28l8 7l-25 25h-10v27l76 25h27z" />
|
||||
<glyph glyph-name="x" unicode="x"
|
||||
d="M389 387l111 9l10 -9h7v-35l-52 -8l-7 8h-18l-26 -25h-15l-28 -58l-41 -45l-10 -32l51 -44l28 -25l7 -35l25 -17l17 -17l76 -7l11 -10v-34l-18 -17l-77 9l-41 -9h-34l-11 9l-7 -9h-27l-7 17v34l24 17l10 10l-27 41l-7 35l-17 17h-8l-44 -75v-28l9 -7h18v-44l-18 -17l-9 9
|
||||
l-43 -9l-24 9l-86 -9h-34l-25 34l7 10v17l77 17l44 24l32 52h17l52 60l-8 24l-69 79v15l-24 26h-86l-25 25l8 10l24 17l128 -9l10 9l52 -9v-25l-45 -10l-7 -8l34 -26l18 -60l7 -7h18l34 52l41 24l11 8v17l-11 10l-24 -18h-17l-10 18v34l17 8z" />
|
||||
<glyph glyph-name="y" unicode="y"
|
||||
d="M257 396v-17h-8l-10 8l10 9h8zM496 387l9 -8v-10l-9 -7h-8l-17 17l17 8h8zM427 387h26l-9 -43l-25 -26l-10 -67l-42 -111l-17 -17l-35 -180l-41 -59v-17l-52 -34l-77 -8l-41 18l-34 31l-8 52l8 52l23 25l28 9l24 -9l28 -42v-18l-28 -25l35 -34l42 25l35 52l27 42v61
|
||||
l-27 18l-35 100l10 10l-27 25v52l9 6l-41 43l-10 34l-24 27h-11l-7 -10l-10 10l-24 -10l-11 10v17l69 -9l28 9h32l9 -127l25 -62l27 -25l8 -59l24 -35l34 35l18 84l44 96l8 59l-70 17l11 25z" />
|
||||
<glyph glyph-name="z" unicode="z"
|
||||
d="M175 404l10 9l204 -9h17l18 -18v-25l-59 -51v-18l-34 -17l-11 -41l-34 -35l-94 -94l10 -24l17 -17l8 7l35 -7l41 17l28 -10l6 -7l43 58v35l26 35h18l25 -35l-18 -86l10 -7l-17 -61l-69 -16l-24 -9l-45 17h-24l-25 -35l-18 27h-52l-24 -27l-17 27l-69 8l-10 17l10 52
|
||||
l25 24l103 86l7 25l111 104l17 7l35 34l-180 8l-25 -17l-17 -84v-17l-24 -25h-10l-17 15l10 103l7 8v9l-7 8l7 9v25l44 27z" />
|
||||
<glyph glyph-name="bar" unicode="|"
|
||||
d="M242 662l11 -26h4l-6 -21v-2l4 -3l-6 -17v-14l4 -9l-2 -15v-11l9 -18v-7l7 -9l-10 -24v-2l3 -3l-3 -10l-4 -4l5 -14l-1 -2l7 -16l-2 -7l-2 -22h2l2 -55l-4 -25l-2 -12v-6l9 -13l-3 -7l3 -8l-1 -16l4 -4l-4 -15l1 -15h-1l-4 -35l12 -23l-7 -13l4 -4l-1 -7l5 -9l-1 -6v-2
|
||||
l3 -4l2 -5l-4 -14l2 -5l4 -17l2 -6l-4 -9h-2v-24l-2 -10l4 -13l2 -9v-17l-6 -11l-1 -10l-7 -1l-1 -8l-2 -1v-4h-7l-2 -2l-12 -2l-11 13l-2 15l-5 17v19l-2 1l4 6l-4 13l6 9l-6 12v16v10l4 9l-8 16l8 20l-4 13v19l-4 1l6 17v15l2 11l-8 13l4 4l-5 13v19h1l2 15h2v13l-2 2v26
|
||||
v13l2 19l-4 3l6 27l-11 29l-3 -1v9l16 19l-2 11l-10 6v7h3v13l-7 8l7 12v10l1 32l-1 15l-4 21v5l7 9l4 15l-2 2v15v11v13h2l2 14l11 9h4z" />
|
||||
<glyph glyph-name="asciitilde" unicode="~"
|
||||
d="M210 311l22 -12l3 3l36 -21l3 -25l12 -9l9 9l30 -5l34 30l4 -4h8l-3 -5h21l4 18l21 17l34 -5l21 -16l9 -14l-4 -42l-18 -16h6v-6h-6l-30 -24l-21 -4l-7 -21l-5 3l-16 -12h-21l-6 -5l-16 8l-17 -8l-25 8h-6l-33 9l-34 30l-26 22h-22l-46 -64h-8l-9 -9l-7 9l-15 -5l-24 14
|
||||
l-4 -6l-14 43l21 42l14 13v5l16 25l22 5l5 -5l25 18l30 12h33z" />
|
||||
<glyph glyph-name="exclamdown" unicode="¡" horiz-adv-x="500"
|
||||
d="M172 485l24 -52l69 -24l43 58l9 43l-9 27l-25 24l-52 8l-42 -8zM172 66l51 -69h42l25 35l18 76l-25 96l7 8v34l-7 94l-25 42h-10l-42 -17v-25l-10 -128l10 -25l-10 -61z" />
|
||||
<glyph glyph-name="fraction" unicode="⁄"
|
||||
d="M538 671v-72l-48 -49l9 -7l-40 -48v-33l-88 -143l-97 -176l-33 -49v-23l-95 -178l-16 -31l-65 -32h-16l-7 39l7 49l39 56v23l75 113l55 111l23 25l40 80l26 32v25l39 47l9 32l56 81v23l32 26l7 30l56 58z" />
|
||||
<glyph glyph-name="section" unicode="§"
|
||||
d="M330 654l7 -25l34 -35l-9 -25v-27l-49 -17l-27 27l9 42h8l17 17v18l-25 17h-9l-8 -10v-17l-9 10h-33l-35 -60l8 -44l42 -66l35 -18l85 -110l60 -69v-17l9 -8l-9 -10l9 -7l-9 -52h-8l-35 -69l-26 -24l17 -87l-17 -76l-67 -59l-121 8l-48 34l-10 76l58 52h27l43 -42l7 -27
|
||||
v-8l10 -7l42 42l-8 52l-26 17l-25 49l-52 62h-18l-58 66v18l-35 34v93l52 60v17l24 17l-17 103l27 60l59 34zM330 286l-79 86l-32 35l-35 -10l-27 -25l10 -58l77 -87l42 -66l9 -28l35 -6v6l32 69z" />
|
||||
<glyph glyph-name="quotesingle" unicode="'"
|
||||
d="M316 667l35 -52l-8 -84l-17 -34l14 -57l-14 -106l-51 -34l-8 -8l-27 8l-25 34l10 106l-35 124l-9 9l9 25l25 62l35 14z" />
|
||||
<glyph glyph-name="quotedblleft" unicode="“"
|
||||
d="M314 534l14 -13l75 -27l35 19l28 41l-22 61l-33 22v20l19 19l21 28h7l8 27l-28 34l-8 -6h-19l-56 -48v-13l-33 -41v-20zM99 534l14 -13l75 -27l35 19l28 41l-22 61l-33 22v20l19 19l21 28h7l8 27l-28 34l-8 -6h-19l-56 -48v-13l-33 -41v-20z" />
|
||||
<glyph glyph-name="fi" unicode="fi"
|
||||
d="M310 541l49 -52l-18 -42l-7 -10l-41 17l24 52l-24 35h-18l-10 -8l-7 25zM198 558l8 -11l-77 -49l-24 -69l49 -52l62 18h25l17 -18l-27 -17l-25 11l-25 -11l-27 11h-17l-17 -18l9 -42l-9 -27l17 -118v-86l94 -17l10 9h24l28 -27v-25l-18 -17l-94 -9h-27l-7 9l-10 -9h-25
|
||||
l-7 9l-17 -17h-10l-17 17l-59 -17l-69 17l-8 25l17 27l60 17l25 -9h34l17 17l10 69l-10 7l17 121l-7 42v24l-44 28l-42 -18l-60 18v6l-9 11l86 17h25l17 -17h17l17 17v32l-7 10l17 42l32 52l44 17h17zM112 360v17l-7 11l-10 -28h17zM280 381l-6 -5l18 -4h25l18 -21l-55 -4
|
||||
h-30l-4 16l-9 9l4 9h39zM416 360l7 -13l-7 -42l3 -5l4 -22l-12 -25l12 -42v-21l-12 -27l5 -49l7 -27l-7 -34l3 -12v-5l34 -7l21 7l9 -4l30 9l30 4l43 -16l7 -39l-16 -18l-55 5h-30l-60 4l-25 5l-9 -9l-21 4h-4h-60l-9 -9l-24 9l-69 5v37l42 13l18 -7l3 3l57 -9h-5v9h5v-3
|
||||
l42 12l13 21v16l-5 6l5 85h3l6 3l-14 39l21 42l-16 22l9 25h3l-3 33l-30 21v9l24 13z" />
|
||||
<glyph glyph-name="fl" unicode="fl"
|
||||
d="M310 541l49 -52l-18 -42l-7 -10l-41 17l24 52l-24 35h-18l-10 -8l-7 25zM198 558l8 -11l-77 -49l-24 -69l49 -52l62 18h25l17 -18l-27 -17l-25 11l-25 -11l-27 11h-17l-17 -18l9 -42l-9 -27l17 -118v-86l94 -17l10 9h24l28 -27v-25l-18 -17l-94 -9h-27l-7 9l-10 -9h-25
|
||||
l-7 9l-17 -17h-10l-17 17l-59 -17l-69 17l-8 25l17 27l60 17l25 -9h34l17 17l10 69l-10 7l17 121l-7 42v24l-44 28l-42 -18l-60 18v6l-9 11l86 17h25l17 -17h17l17 17v32l-7 10l17 42l32 52l44 17h17zM112 360v17l-7 11l-10 -28h17zM393 566l8 -10l35 18l41 -18l11 -66
|
||||
l-11 -121l11 -66l-11 -181l28 -58h24l10 7l18 -17h83l17 -25l-34 -34l-52 -8l-8 8l-24 -8h-17l-17 16l-11 -8l-66 8l-69 -16l-24 16l-28 -8h-34l-17 25l10 27l17 17l59 7l7 10l27 -10l35 34l-10 25l17 52l10 10l-27 25v17h10l25 69l-8 41l17 17l-9 52v25l-8 7l8 11l-8 34
|
||||
l8 7l-18 17l-59 10l-59 -10l-27 10l-7 7v35l17 8z" />
|
||||
<glyph glyph-name="endash" unicode="–"
|
||||
d="M381 326h18l9 -6l49 6l52 -6l27 -28v-59l-35 -34l-34 -8l-76 17l-59 -9l-10 9l-76 -9l-69 9l-8 -9l-86 17l-17 17v35l-7 7l24 45l86 17z" />
|
||||
<glyph glyph-name="dagger" unicode="†"
|
||||
d="M238 -20v11l-45 13l-78 69v25l-33 45l-17 83l8 27l-8 77l17 93l50 84v17l69 45l68 17l60 -17l42 -28l68 28l8 -28l-17 -93l-8 -8l34 -86l-9 -42l-25 8l-34 34v17l-7 11l7 6l-17 35v34l-77 50l-25 10l-44 -10l-24 -32h-17l-52 -79v-8l-17 -17l9 -7l-9 -10l9 -42v-9l-9 -8
|
||||
l17 -34l-8 -8l25 -69l10 -51l76 -69l59 9l35 35l17 8l25 27v17l27 24v42l32 10l26 -18l8 -34l-17 -68l-66 -85l-18 -34l-76 -15l-4 -9v-8l2 -2l-4 -17l4 -14l6 -2l13 -16l11 -1l17 -17l4 -15l5 -2l6 -5l-2 -9l3 -4l-1 -17v-2l5 -19l-5 -13l-2 2l-12 -19v-13l-13 -15l-16 -6
|
||||
l-13 -9l-23 -7l-2 -2v-4h-2l-16 -3l-19 3l-4 -3l-13 1l-4 6h-7v8l-12 9l-3 11l-8 8l8 14l-2 2l8 16l-3 10l10 19h4h5h34l19 -9l11 -15l9 -2h4l6 11v14l-2 18l-9 11v8l-16 5v4l-11 6h-5l-24 1l-12 12l-11 5l-8 14l6 14l9 4l12 3l1 4l10 -4l7 12l-2 20l4 4z" />
|
||||
<glyph glyph-name="periodcentered" unicode="·"
|
||||
d="M307 328l69 -67l-7 -86l-62 -42l-34 8l-8 -8l-59 25l-27 68l17 52l52 43l42 7h17z" />
|
||||
<glyph glyph-name="bullet" unicode="•"
|
||||
d="M307 328l69 -67l-7 -86l-62 -42l-34 8l-8 -8l-59 25l-27 68l17 52l52 43l42 7h17z" />
|
||||
<glyph glyph-name="quotesinglbase" unicode="‚"
|
||||
d="M326 133l14 -13l-8 -103v-20l-33 -41v-13l-56 -48h-19l-8 -6l-28 34l8 27h7l21 28l19 19v20l-33 22l-22 61l28 41l35 19z" />
|
||||
<glyph glyph-name="quotedblbase" unicode="„"
|
||||
d="M216 133l14 -13l-8 -103v-20l-33 -41v-13l-56 -48h-19l-8 -6l-28 34l8 27h7l21 28l19 19v20l-33 22l-22 61l28 41l35 19zM431 133l14 -13l-8 -103v-20l-33 -41v-13l-56 -48h-19l-8 -6l-28 34l8 27h7l21 28l19 19v20l-33 22l-22 61l28 41l35 19z" />
|
||||
<glyph glyph-name="quotedblright" unicode="”"
|
||||
d="M231 728l14 -13l-8 -103v-20l-33 -41v-13l-56 -48h-19l-8 -6l-28 34l8 27h7l21 28l19 19v20l-33 22l-22 61l28 41l35 19zM446 728l14 -13l-8 -103v-20l-33 -41v-13l-56 -48h-19l-8 -6l-28 34l8 27h7l21 28l19 19v20l-33 22l-22 61l28 41l35 19z" />
|
||||
<glyph glyph-name="questiondown" unicode="¿" horiz-adv-x="500"
|
||||
d="M158 497l18 -44l78 -17l67 52v34l-77 17l-76 -17zM116 19l52 -27l86 -17l32 10l86 34l35 42l24 94l-17 17l-34 -7l-8 7l-42 -7l-17 -17v-28l8 -7l44 -27v-15l-10 -10l-52 -25l-93 8l-42 35l-25 76l15 34l45 25l17 17h17l24 44h17l18 25l-10 7l-8 52l-17 17h-24l-27 -6
|
||||
v-18l-7 -10l7 -49l-7 -18l-60 -34l-17 -17l-69 -76l7 -62z" />
|
||||
<glyph glyph-name="grave" unicode="`"
|
||||
d="M243 648l25 -16l3 -5l-7 -9l25 -24v-31l21 -3l46 -43l15 -8l-6 -34v-5l-25 -7l-63 37l3 5l-12 7l3 5l-7 16l-17 15l-4 -6l-48 21l-12 27l-30 28l12 36l14 7z" />
|
||||
<glyph glyph-name="acute" unicode="´"
|
||||
d="M332 677l16 -5l17 -25l-21 -47l-51 -29l-52 -60l-7 -34l-35 -26l-13 14h-3l-12 -14v14l-22 25l4 17l12 8l-3 14l21 16l-5 5l17 25l22 12l3 27l21 24l6 22l46 21z" />
|
||||
<glyph glyph-name="circumflex" unicode="ˆ"
|
||||
d="M317 814l5 4l34 -22l33 -63l21 -13v-12l46 -39l-3 -28l9 -9l-13 -39h-60l-30 26h-9l-25 43l-67 42l-5 9l-4 4l-51 -22l-25 -38v-4l-21 -42l-21 -27v-4h-30l-13 4h-14l-7 30l4 39l46 46l47 85l68 27l30 21z" />
|
||||
<glyph glyph-name="tilde" unicode="˜"
|
||||
d="M210 311l22 -12l3 3l36 -21l3 -25l12 -9l9 9l30 -5l34 30l4 -4h8l-3 -5h21l4 18l21 17l34 -5l21 -16l9 -14l-4 -42l-18 -16h6v-6h-6l-30 -24l-21 -4l-7 -21l-5 3l-16 -12h-21l-6 -5l-16 8l-17 -8l-25 8h-6l-33 9l-34 30l-26 22h-22l-46 -64h-8l-9 -9l-7 9l-15 -5l-24 14
|
||||
l-4 -6l-14 43l21 42l14 13v5l16 25l22 5l5 -5l25 18l30 12h33z" />
|
||||
<glyph glyph-name="breve" unicode="˘"
|
||||
d="M324 594l-5 4l-55 -18l-30 21l-68 27l-47 85l-46 46l-4 39l7 30h14l13 4h30v-4l21 -27l21 -42v-4l25 -38l51 -22l4 4l5 9l67 42l25 43h9l30 26h60l13 -39l-9 -9l3 -28l-46 -39v-12l-21 -13l-33 -63z" />
|
||||
<glyph glyph-name="dotaccent" unicode="˙"
|
||||
d="M292 524l21 -7l9 -26l-13 -30l-17 5l-29 -9l-21 9l-14 21v4l9 9l-4 3v9l22 12l24 9z" />
|
||||
<glyph glyph-name="dieresis" unicode="¨"
|
||||
d="M156 565l25 -24v-52l-35 -52l-49 27l-17 25l8 52l44 24h24zM385 558l35 -35l-8 -59l-27 -27l-49 10l-27 25l10 51l41 35h25z" />
|
||||
<glyph glyph-name="ring" unicode="˚"
|
||||
d="M280 653h13v-8l17 -34l13 -48l-4 -3l7 -13l-24 -47l-39 -34l-25 -9h-25l-5 -4l-30 22l-25 25l-4 17v30l-17 34l12 16h5l7 30l30 30h6l25 4l21 17zM263 606l-16 17l-34 9l-14 -9v-42l-13 -34l31 -42l30 16v9l9 17l3 59h4z" />
|
||||
<glyph glyph-name="cedilla" unicode="¸"
|
||||
d="M273 73v-11l3 -2h1l-5 -15l5 -8l10 -20l-4 -9v-8l2 -2l-4 -17l4 -14l6 -2l13 -16l11 -1l17 -17l4 -15l5 -2l6 -5l-2 -9l3 -4l-1 -17v-2l5 -19l-5 -13l-2 2l-12 -19v-13l-13 -15l-16 -6l-13 -9l-23 -7l-2 -2v-4h-2l-16 -3l-19 3l-4 -3l-13 1l-4 6h-7v8l-12 9l-3 11l-8 8
|
||||
l8 14l-2 2l8 16l-3 10l10 19h4h5h34l19 -9l11 -15l9 -2h4l6 11v14l-2 18l-9 11v8l-16 5v4l-11 6h-5l-24 1l-12 12l-11 5l-8 14l6 14l9 4l12 3l1 4l10 -4l7 12l-2 20l4 4l-2 2v12l-5 7l5 17l14 22l14 2z" />
|
||||
<glyph glyph-name="hungarumlaut" unicode="˝"
|
||||
d="M257 677l16 -5l17 -25l-21 -47l-51 -29l-52 -60l-7 -34l-35 -26l-13 14h-3l-12 -14v14l-22 25l4 17l12 8l-3 14l21 16l-5 5l17 25l22 12l3 27l21 24l6 22l46 21zM487 677l16 -5l17 -25l-21 -47l-51 -29l-52 -60l-7 -34l-35 -26l-13 14h-3l-12 -14v14l-22 25l4 17l12 8
|
||||
l-3 14l21 16l-5 5l17 25l22 12l3 27l21 24l6 22l46 21z" />
|
||||
<glyph glyph-name="caron" unicode="ˇ"
|
||||
d="M324 594l-5 4l-55 -18l-30 21l-68 27l-47 85l-46 46l-4 39l7 30h14l13 4h30v-4l21 -27l21 -42v-4l25 -38l51 -22l4 4l5 9l67 42l25 43h9l30 26h60l13 -39l-9 -9l3 -28l-46 -39v-12l-21 -13l-33 -63z" />
|
||||
<glyph glyph-name="emdash" unicode="—"
|
||||
d="M381 326h78l9 -6l49 6l52 -6l27 -28v-59l-35 -34l-34 -8l-76 17l-119 -9l-10 9l-76 -9l-199 9l-8 -9l-61 17l-17 17v35l-7 7l24 45l61 17z" />
|
||||
<glyph glyph-name="AE" unicode="Æ"
|
||||
d="M551 536h7l27 -118l-10 -7l10 -45l-10 -7l-35 52l-6 58l-52 60l-8 -8l-10 8l45 24zM287 265l-4 -53l15 -73l17 -28v-35l19 -18l54 -7l17 10l59 -10l52 52l35 101l7 9h17l17 -17l-17 -69l10 -17l-17 -101l-10 -10l-32 10h-35l-17 -17l-44 7l-18 -3l-13 -13h-32l-9 -7
|
||||
l-153 17l-1 2l-3 -3l-24 7l-35 -7l-12 11l-19 -20h-10l-7 -7l-69 7l-69 -7l-42 17h-7l-10 8l10 44l83 25l28 34l17 76l24 42v52l17 18v23l25 18l10 86l17 42h25l-17 -17l-8 -94h-9l-18 -17l-7 -76l7 -8l-7 -27v-7l17 -18l83 8l11 -8l24 35l-7 60l-28 23l11 28l-11 76v25h18
|
||||
l17 -77l27 16l-4 104l-17 17l-41 -10l-62 10l-7 8l17 41l153 -7l9 -10l32 17l28 -7l58 7l8 -7v-17l-126 -17l-17 -18l8 -100l-8 -11l8 -41l24 -28l34 -7l17 17l35 35l11 35l6 6l35 -6l7 -70l-17 -51l10 -69l-27 -25h-8l-17 34l11 25l-18 27l-17 17h-77zM218 68l30 31l-2 5v7
|
||||
l-24 28l-146 -11l-9 -6l9 -52l35 -17l10 -17l4 15z" />
|
||||
<glyph glyph-name="Oslash" unicode="Ø"
|
||||
d="M202 -2l-56 -105l-16 -31l-65 -32h-16l-7 39l7 49l39 56v23l38 57l-4 4l-27 17v18l-17 17l-7 -11v-6h-17l-11 68v25l-6 9l17 95v31l-11 10l18 59l27 77l42 62l103 66l118 -18l50 -49l10 15v23l32 26l7 30l56 58l32 -9v-72l-48 -49l9 -7l-40 -48v-33l-4 -7l7 -5l25 -129
|
||||
l9 -58l-34 -136l-17 -28v-14l-51 -52l-8 -27l-17 -17l-94 -14l-17 14zM391 351l-20 -32l-97 -176l-33 -49v-1h17l17 24l17 -18h17l42 35v17l-7 10l17 17l8 85l25 27v58zM181 146l37 75l23 25l40 80l26 32v25l39 47l9 32l1 2l-12 20h-27l-25 34h-34l-34 -7l-43 -27l-17 -17
|
||||
l8 -42l-17 -25h-16l16 -189l26 -25v-40z" />
|
||||
<glyph glyph-name="OE" unicode="Œ"
|
||||
d="M525 536h7l27 -118l-10 -7l10 -45l-10 -7l-35 52l-6 58l-52 60l-8 -8l-10 8l45 24zM-69 309l17 68h18v-44l-27 -52zM126 0l-50 1l-85 69l-35 58l-25 129l8 10h9l8 -10l17 -25l-7 -10v-17l25 -25l9 -41l59 -69l63 -26l23 8s45 15 47 16l34 35l8 34l-8 18l8 66l-8 266
|
||||
l-17 17s-56 -1 -66 -1l-32 10l-69 -17l-76 -94l7 8v9l18 69l41 25l44 17l55 23l58 -10l33 9l15 12l32 -18l9 -10l32 17l28 -7l58 7l8 -7v-17l-126 -17l-17 -18l8 -100l-8 -11l8 -41l24 -28l34 -7l17 17l35 35l11 35l6 6l35 -6l7 -70l-17 -51l10 -69l-27 -25h-8l-17 34l11 25
|
||||
l-18 27l-17 17h-77l-17 -17l-10 -121l18 -24v-42l17 -17l76 -10l17 10l59 -10l52 52l35 101l7 9h17l17 -17l-17 -69l10 -17l-17 -101l-10 -10l-32 10h-35l-17 -17l-44 7l-49 -7l-45 7l-76 -7l-36 5l-31 -19z" />
|
||||
<glyph glyph-name="ae" unicode="æ"
|
||||
d="M260 387l18 -22l22 21l25 10l135 -10l70 -76l26 -52v-34l-9 -7l9 -8l-9 -27l-42 10l-45 -18l-24 18l-42 -10l-17 -17v9l-52 8l-30 -3v-4l7 -18v-34l-7 -10l24 -25l62 8l5 -58l32 9l10 -10l84 76h27l8 -25l-17 -34l-60 -51l-93 -25l-16 10l-8 -10l-58 -8l-52 33l-8 9
|
||||
l-103 -34h-59l-10 8l-7 -8l-43 8h-26l-49 51l-10 76v35l68 59h8l9 10l-9 7h-17l-25 62l7 76l27 25l85 27l78 -10l7 10l69 -18zM411 335h-27l-49 9l-10 -9l10 -8l-10 -7v-28l10 -6h7l35 24l24 -24v-11l-24 -41l59 7v69zM201 148l7 27h-17l-66 -18l-10 8l-8 -8h-51l-43 -27
|
||||
l8 -7l-8 -35l18 -24h94l58 18l35 41zM226 310l-25 17l-94 25l-51 -17v-8l25 -41l-8 -11v-6l-52 -35h42l79 17l17 18h24l52 17l-9 7v17zM335 241v17h-44l17 -34z" />
|
||||
<glyph glyph-name="dotlessi" unicode="ı"
|
||||
d="M170 381l-6 -5l18 -4h25l18 -21l-55 -4h-30l-4 16l-9 9l4 9h39zM306 360l7 -13l-7 -42l3 -5l4 -22l-12 -25l12 -42v-21l-12 -27l5 -49l7 -27l-7 -34l3 -12v-5l34 -7l21 7l9 -4l30 9l30 4l43 -16l7 -39l-16 -18l-55 5h-30l-60 4l-25 5l-9 -9l-21 4h-4h-60l-9 -9l-24 9
|
||||
l-69 5v37l42 13l18 -7l3 3l57 -9h-5v9h5v-3l42 12l13 21v16l-5 6l5 85h3l6 3l-14 39l21 42l-16 22l9 25h3l-3 33l-30 21v9l24 13z" />
|
||||
<glyph glyph-name="oslash" unicode="ø"
|
||||
d="M199 -8l-53 -99l-16 -31l-65 -32h-16l-7 39l7 49l39 56v23l37 56l-47 60l17 162l35 60l69 61l83 17h50l14 17l9 32l56 81v23l32 26l7 30l56 58l32 -9v-72l-48 -49l9 -7l-40 -48v-33l-61 -99l47 -60l24 -52l10 -77l-17 -27l-17 -76l-69 -76h-25l-34 -25l-111 17zM361 301
|
||||
l-87 -158l-33 -49v-23l-5 -10l56 -7l25 17l8 -7h9l8 7l34 59l18 87l-25 75zM172 128l46 93l23 25l40 80l13 17l-19 9l-27 -17l-49 -8l-27 -17l-25 -69l17 -49l-9 -10l9 -42z" />
|
||||
<glyph glyph-name="oe" unicode="œ"
|
||||
d="M295 -5l-7 7l-7 -7h-25l-34 -25l-111 17l-34 25l-42 35l-52 66l17 162l35 60l69 61l83 17h52l47 -35l9 8l25 10l135 -10l70 -76l26 -52v-34l-9 -7l9 -8l-9 -27l-42 10l-45 -18l-24 18l-42 -10l-5 -5v-3l-17 -27l-17 -76l-15 -16l44 -18l34 10l10 -10l84 76h27l8 -25
|
||||
l-17 -34l-60 -51l-93 -25l-28 17h-49zM406 335h-27l-49 9l-10 -9l10 -8l-10 -7v-28l10 -6h7l35 24l24 -24v-11l-24 -41l59 7v69zM261 105l4 -3l16 28l10 49l-40 -5l-8 -9zM202 286l22 45l-44 21l-27 -17l-49 -8l-27 -17l-25 -69l17 -49l-9 -10l9 -42l49 -76l79 -10l25 17
|
||||
l8 -7h4v7l-32 34l-17 94l-11 10zM330 241v17h-44l17 -34z" />
|
||||
<glyph glyph-name="germandbls" unicode="ß"
|
||||
d="M381 565l61 -75l-10 -87l-17 -42l-25 -35v-17l42 -24l35 -59l7 -70l-15 -17l-9 -58l-69 -69l-60 -18l-41 10l-35 25l-7 -8l-35 -17h-110l-18 25v8l24 26h18l17 18l-7 93l-10 7l25 87l-25 69l17 142l25 45l52 41l75 18zM314 514l-10 -7l-52 7l-59 -42l-17 -77l10 -9
|
||||
l-10 -49l10 -28l-18 -17l18 -128l-10 -66l44 -35l8 8h10v51l31 34h17l45 -17l7 -34l-34 -34l44 -17l42 27l25 52l-8 6l8 8v9l-17 52l9 8l-51 59l-42 -7l-10 7l-66 10l-18 17v18l18 17l110 17l25 24l25 35l-8 7v59z" />
|
||||
<glyph glyph-name="Adieresis" unicode="Ä"
|
||||
d="M268 461l-17 -17l-8 -94h-9l-18 -17l-7 -76l7 -8l-7 -27v-7l17 -18l83 8l11 -8l24 35l-7 60l-28 23l11 28l-11 76v25h18l17 -77l17 -24v-51l25 -25l27 -128l17 -28v-35l25 -23l59 -8l17 -17v-27l-17 -18h-32l-9 -7l-153 17l-17 17l6 18l28 25h17l17 23l-10 28v7l-24 28
|
||||
l-146 -11l-9 -6l9 -52l35 -17l25 -43l-25 -27h-10l-7 -7l-69 7l-69 -7l-42 17h-7l-10 8l10 44l83 25l28 34l17 76l24 42v52l17 18v23l25 18l10 86l17 42h25zM292 537l17 -17v-17l-41 10v24h24zM181 725l25 -24v-52l-35 -52l-49 27l-17 25l8 52l44 24h24zM410 718l35 -35
|
||||
l-8 -59l-27 -27l-49 10l-27 25l10 51l41 35h25z" />
|
||||
<glyph glyph-name="Aring" unicode="Å"
|
||||
d="M268 461l-17 -17l-8 -94h-9l-18 -17l-7 -76l7 -8l-7 -27v-7l17 -18l83 8l11 -8l24 35l-7 60l-28 23l11 28l-11 76v25h18l17 -77l17 -24v-51l25 -25l27 -128l17 -28v-35l25 -23l59 -8l17 -17v-27l-17 -18h-32l-9 -7l-153 17l-17 17l6 18l28 25h17l17 23l-10 28v7l-24 28
|
||||
l-146 -11l-9 -6l9 -52l35 -17l25 -43l-25 -27h-10l-7 -7l-69 7l-69 -7l-42 17h-7l-10 8l10 44l83 25l28 34l17 76l24 42v52l17 18v23l25 18l10 86l17 42h25zM292 537l17 -17v-17l-41 10v24h24zM335 708h13v-8l17 -34l13 -48l-4 -3l7 -13l-24 -47l-39 -34l-25 -9h-25l-5 -4
|
||||
l-30 22l-25 25l-4 17v30l-17 34l12 16h5l7 30l30 30h6l25 4l21 17zM318 661l-16 17l-34 9l-14 -9v-42l-13 -34l31 -42l30 16v9l9 17l3 59h4z" />
|
||||
<glyph glyph-name="Ccedilla" unicode="Ç" horiz-adv-x="500"
|
||||
d="M329 569l42 -28l68 28l8 -28l-17 -93l-8 -8l34 -86l-9 -42l-25 8l-34 34v17l-7 11l7 6l-17 35v34l-77 50l-25 10l-44 -10l-24 -32h-17l-52 -79v-8l-17 -17l9 -7l-9 -10l9 -42v-9l-9 -8l17 -34l-8 -8l25 -69l10 -51l76 -69l59 9l35 35l17 8l25 27v17l27 24v42l32 10
|
||||
l26 -18l8 -34l-17 -68l-66 -85l-18 -34l-86 -17l-84 24l-78 69v25l-33 45l-17 83l8 27l-8 77l17 93l50 84v17l69 45l68 17zM361 76l18 -17l-10 -128v-25l-42 -51v-17l-69 -60h-24l-10 -7l-35 42l10 34h8l27 35l24 24v25l-42 27l-27 76l35 52l44 24z" />
|
||||
<glyph glyph-name="Eacute" unicode="É"
|
||||
d="M461 536h7l27 -118l-10 -7l10 -45l-10 -7l-35 52l-6 58l-52 60l-8 -8l-10 8l45 24zM205 546l9 -10l32 17l28 -7l58 7l8 -7v-17l-126 -17l-17 -18l8 -100l-8 -11l8 -41l24 -28l34 -7l17 17l35 35l11 35l6 6l35 -6l7 -70l-17 -51l10 -69l-27 -25h-8l-17 34l11 25l-18 27
|
||||
l-17 17h-77l-17 -17l-10 -121l18 -24v-42l17 -17l76 -10l17 10l59 -10l52 52l35 101l7 9h17l17 -17l-17 -69l10 -17l-17 -101l-10 -10l-32 10h-35l-17 -17l-44 7l-49 -7l-45 7l-76 -7l-52 7l-7 -7l-24 7l-35 -7l-27 24l10 35l93 17l34 35l8 34l-8 18l8 66l-8 266l-17 17
|
||||
l-41 -10l-62 10l-7 8l17 41zM432 837l16 -5l17 -25l-21 -47l-51 -29l-52 -60l-7 -34l-35 -26l-13 14h-3l-12 -14v14l-22 25l4 17l12 8l-3 14l21 16l-5 5l17 25l22 12l3 27l21 24l6 22l46 21z" />
|
||||
<glyph glyph-name="Ntilde" unicode="Ñ"
|
||||
d="M210 771l22 -12l3 3l36 -21l3 -25l12 -9l9 9l30 -5l34 30l4 -4h8l-3 -5h21l4 18l21 17l34 -5l21 -16l9 -14l-4 -42l-18 -16h6v-6h-6l-30 -24l-21 -4l-7 -21l-5 3l-16 -12h-21l-6 -5l-16 8l-17 -8l-25 8h-6l-33 9l-34 30l-26 22h-22l-46 -64h-8l-9 -9l-7 9l-15 -5l-24 14
|
||||
l-4 -6l-14 43l21 42l14 13v5l16 25l22 5l5 -5l25 18l30 12h33zM559 530l-22 -31l-17 -17l-42 7l-27 -25l10 -59l-17 -85l7 -25l-7 -60v-27h-11l-14 52l8 60l-18 137v7l-25 25l-9 -7l-52 17l-14 17l6 25l52 17l25 -7l121 7zM170 541l10 10l59 -10l24 -25l-17 -52l45 -42
|
||||
l-10 -27l42 -100l9 -35v-35l-41 43l-28 86l-24 41l-27 27l10 35l-10 7h-7l-17 -69l9 -66l-9 -9l17 -257l58 -17h18l17 -25v-17l-17 -18l-59 11l-10 -11l-7 11l-8 -11l-61 11l-25 -11l-69 11l-7 7l24 42l59 27l10 52l-17 25l17 51l-10 7l18 27l9 60l-27 34v25h27l8 10l-25 66
|
||||
l8 27v7l-18 18l-76 17v8l-7 9l52 42zM384 285v17h8v-17h-8zM315 174v-32l-17 32l11 10zM384 174h25v-24h-7l-10 -8v-10l27 -25l25 8l17 -17l7 -77l-17 -24l-7 -11l-35 11l-17 17v24l-25 25h-17l-10 10l10 25h7l18 17l-25 41l7 28zM451 167v-35h-18l-6 35h24z" />
|
||||
<glyph glyph-name="Odieresis" unicode="Ö"
|
||||
d="M37 58v13h11v-13h-11zM317 -43v12h12v-12h-12zM351 577l77 -76l10 -34l24 -17l25 -129l9 -58l-34 -136l-17 -28v-14l-51 -52l-8 -27l-17 -17l-94 -14l-17 14l-103 17v18l-16 17l-9 -8v-9h-18l10 9v25l-27 17v18l-17 17l-7 -11v-6h-17l-11 68v25l-6 9l17 95v31l-11 10
|
||||
l18 59l27 77l42 62l103 66zM216 725l25 -24v-52l-35 -52l-49 27l-17 25l8 52l44 24h24zM445 718l35 -35l-8 -59l-27 -27l-49 10l-27 25l10 51l41 35h25zM317 484l-25 34h-34l-34 -7l-43 -27l-17 -17l8 -42l-17 -25h-16l16 -189l26 -25v-52h18l34 -41h25l17 24l17 -18h17
|
||||
l42 35v17l-7 10l17 17l8 85l25 27v58l-18 17v25l10 10l-10 8v25l-32 51h-27zM317 195v13h12v-13h-12zM317 314v12h12v-12h-12z" />
|
||||
<glyph glyph-name="Udieresis" unicode="Ü"
|
||||
d="M237 484v14h13v-14h-13zM348 365v13h12v-13h-12zM348 228v-16l-7 -9h-10l-7 25h24zM434 -129v-18l-9 18h9zM348 577l10 10l76 -18l25 18l44 -10l15 -17v-32l-59 -10l-8 10l-26 -17l9 -111l-9 -76l9 -79l-9 -42l9 -69l-52 -93l-93 -49v6l-7 8l-35 -8l-76 25h-17l-61 111
|
||||
l-8 34l8 10l-8 25l17 69l-9 17l9 49l-9 17l9 52l-17 27l8 42l-18 52h-7l-8 -10l-17 17h-27l-8 25l8 9l34 18l43 -10l78 10l49 -10l10 -17v-32l-69 -10l-17 -17l10 -42l-17 -34l17 -35l-17 -25v-10l7 -7l-7 -24l7 -52l-7 -17l7 -69l27 -25v-34l66 -35h70l24 24v28l34 17
|
||||
l-7 111l18 52l-18 126l18 17l-18 44l-86 24v25l59 34zM181 720l25 -24v-52l-35 -52l-49 27l-17 25l8 52l44 24h24zM410 713l35 -35l-8 -59l-27 -27l-49 10l-27 25l10 51l41 35h25z" />
|
||||
<glyph glyph-name="aacute" unicode="á"
|
||||
d="M279 404l7 10l69 -18l25 -9l35 -43l7 -110l-7 -59l7 -18v-34l-7 -10l24 -25l62 8l7 -76l-35 -42l-58 -8l-52 33l-8 9l-103 -34h-59l-10 8l-7 -8l-43 8h-26l-49 51l-10 76v35l68 59h8l9 10l-9 7h-17l-25 62l7 76l27 25l85 27zM387 677l16 -5l17 -25l-21 -47l-51 -29
|
||||
l-52 -60l-7 -34l-35 -26l-13 14h-3l-12 -14v14l-22 25l4 17l12 8l-3 14l21 16l-5 5l17 25l22 12l3 27l21 24l6 22l46 21zM346 310l-25 17l-94 25l-51 -17v-8l25 -41l-8 -11v-6l-52 -35h42l79 17l17 18h24l52 17l-9 7v17zM321 148l7 27h-17l-66 -18l-10 8l-8 -8h-51l-43 -27
|
||||
l8 -7l-8 -35l18 -24h94l58 18l35 41z" />
|
||||
<glyph glyph-name="agrave" unicode="à"
|
||||
d="M279 404l7 10l69 -18l25 -9l35 -43l7 -110l-7 -59l7 -18v-34l-7 -10l24 -25l62 8l7 -76l-35 -42l-58 -8l-52 33l-8 9l-103 -34h-59l-10 8l-7 -8l-43 8h-26l-49 51l-10 76v35l68 59h8l9 10l-9 7h-17l-25 62l7 76l27 25l85 27zM146 648l25 -16l3 -5l-7 -9l25 -24v-31l21 -3
|
||||
l46 -43l15 -8l-6 -34v-5l-25 -7l-63 37l3 5l-12 7l3 5l-7 16l-17 15l-4 -6l-48 21l-12 27l-30 28l12 36l14 7zM346 310l-25 17l-94 25l-51 -17v-8l25 -41l-8 -11v-6l-52 -35h42l79 17l17 18h24l52 17l-9 7v17zM321 148l7 27h-17l-66 -18l-10 8l-8 -8h-51l-43 -27l8 -7
|
||||
l-8 -35l18 -24h94l58 18l35 41z" />
|
||||
<glyph glyph-name="acircumflex" unicode="â"
|
||||
d="M279 404l7 10l69 -18l25 -9l35 -43l7 -110l-7 -59l7 -18v-34l-7 -10l24 -25l62 8l7 -76l-35 -42l-58 -8l-52 33l-8 9l-103 -34h-59l-10 8l-7 -8l-43 8h-26l-49 51l-10 76v35l68 59h8l9 10l-9 7h-17l-25 62l7 76l27 25l85 27zM300 669l5 4l34 -22l33 -63l21 -13v-12
|
||||
l46 -39l-3 -28l9 -9l-13 -39h-60l-30 26h-9l-25 43l-67 42l-5 9l-4 4l-51 -22l-25 -38v-4l-21 -42l-21 -27v-4h-30l-13 4h-14l-7 30l4 39l46 46l47 85l68 27l30 21zM346 310l-25 17l-94 25l-51 -17v-8l25 -41l-8 -11v-6l-52 -35h42l79 17l17 18h24l52 17l-9 7v17zM321 148
|
||||
l7 27h-17l-66 -18l-10 8l-8 -8h-51l-43 -27l8 -7l-8 -35l18 -24h94l58 18l35 41z" />
|
||||
<glyph glyph-name="adieresis" unicode="ä"
|
||||
d="M267 404l7 10l69 -18l25 -9l35 -43l7 -110l-7 -59l7 -18v-34l-7 -10l24 -25l62 8l7 -76l-35 -42l-58 -8l-52 33l-8 9l-103 -34h-59l-10 8l-7 -8l-43 8h-26l-49 51l-10 76v35l68 59h8l9 10l-9 7h-17l-25 62l7 76l27 25l85 27zM138 565l25 -24v-52l-35 -52l-49 27l-17 25
|
||||
l8 52l44 24h24zM367 558l35 -35l-8 -59l-27 -27l-49 10l-27 25l10 51l41 35h25zM309 148l7 27h-17l-66 -18l-10 8l-8 -8h-51l-43 -27l8 -7l-8 -35l18 -24h94l58 18l35 41zM334 310l-25 17l-94 25l-51 -17v-8l25 -41l-8 -11v-6l-52 -35h42l79 17l17 18h24l52 17l-9 7v17z" />
|
||||
<glyph glyph-name="atilde" unicode="ã"
|
||||
d="M230 761l22 -12l3 3l36 -21l3 -25l12 -9l9 9l30 -5l34 30l4 -4h8l-3 -5h21l4 18l21 17l34 -5l21 -16l9 -14l-4 -42l-18 -16h6v-6h-6l-30 -24l-21 -4l-7 -21l-5 3l-16 -12h-21l-6 -5l-16 8l-17 -8l-25 8h-6l-33 9l-34 30l-26 22h-22l-46 -64h-8l-9 -9l-7 9l-15 -5l-24 14
|
||||
l-4 -6l-14 43l21 42l14 13v5l16 25l22 5l5 -5l25 18l30 12h33zM279 404l7 10l69 -18l25 -9l35 -43l7 -110l-7 -59l7 -18v-34l-7 -10l24 -25l62 8l7 -76l-35 -42l-58 -8l-52 33l-8 9l-103 -34h-59l-10 8l-7 -8l-43 8h-26l-49 51l-10 76v35l68 59h8l9 10l-9 7h-17l-25 62l7 76
|
||||
l27 25l85 27zM321 148l7 27h-17l-66 -18l-10 8l-8 -8h-51l-43 -27l8 -7l-8 -35l18 -24h94l58 18l35 41zM346 310l-25 17l-94 25l-51 -17v-8l25 -41l-8 -11v-6l-52 -35h42l79 17l17 18h24l52 17l-9 7v17z" />
|
||||
<glyph glyph-name="aring" unicode="å"
|
||||
d="M279 404l7 10l69 -18l25 -9l35 -43l7 -110l-7 -59l7 -18v-34l-7 -10l24 -25l62 8l7 -76l-35 -42l-58 -8l-52 33l-8 9l-103 -34h-59l-10 8l-7 -8l-43 8h-26l-49 51l-10 76v35l68 59h8l9 10l-9 7h-17l-25 62l7 76l27 25l85 27zM292 653h13v-8l17 -34l13 -48l-4 -3l7 -13
|
||||
l-24 -47l-39 -34l-25 -9h-25l-5 -4l-30 22l-25 25l-4 17v30l-17 34l12 16h5l7 30l30 30h6l25 4l21 17zM346 310l-25 17l-94 25l-51 -17v-8l25 -41l-8 -11v-6l-52 -35h42l79 17l17 18h24l52 17l-9 7v17zM321 148l7 27h-17l-66 -18l-10 8l-8 -8h-51l-43 -27l8 -7l-8 -35
|
||||
l18 -24h94l58 18l35 41zM275 606l-16 17l-34 9l-14 -9v-42l-13 -34l31 -42l30 16v9l9 17l3 59h4z" />
|
||||
<glyph glyph-name="ccedilla" unicode="ç" horiz-adv-x="500"
|
||||
d="M342 404l76 -35l17 -25l25 -26l-7 -84l-25 -17h-68l-18 41l35 35l-28 34l-41 25l-52 -8l-42 -17l-59 -69l17 -128l18 -25l6 -9h18l34 -32l35 -17l49 17l86 76h52l8 -27l-18 -49l-49 -52l-79 -34l-59 -8l-25 8h-27l-77 52l-58 75l-8 77l18 93l59 87l41 34l60 8l9 10z
|
||||
M361 66l18 -17l-10 -128v-25l-42 -51v-17l-69 -60h-24l-10 -7l-35 42l10 34h8l27 35l24 24v25l-42 27l-27 76l35 52l44 24z" />
|
||||
<glyph glyph-name="eacute" unicode="é"
|
||||
d="M335 386l70 -76l26 -52v-34l-9 -7l9 -8l-9 -27l-42 10l-45 -18l-24 18l-42 -10l-17 -17v9l-52 8l-69 -8l-8 -9l18 -60l51 -41l67 -27l34 10l10 -10l84 76h27l8 -25l-17 -34l-60 -51l-93 -25l-28 17h-49l-61 59v17l-32 34l-17 94l-11 10l28 77l24 49l42 26l27 25l25 10z
|
||||
M434 677l16 -5l17 -25l-21 -47l-51 -29l-52 -60l-7 -34l-35 -26l-13 14h-3l-12 -14v14l-22 25l4 17l12 8l-3 14l21 16l-5 5l17 25l22 12l3 27l21 24l6 22l46 21zM286 335h-27l-49 9l-10 -9l10 -8l-10 -7v-28l10 -6h7l35 24l24 -24v-11l-24 -41l59 7v69zM210 241v17h-44
|
||||
l17 -34z" />
|
||||
<glyph glyph-name="egrave" unicode="è"
|
||||
d="M335 386l70 -76l26 -52v-34l-9 -7l9 -8l-9 -27l-42 10l-45 -18l-24 18l-42 -10l-17 -17v9l-52 8l-69 -8l-8 -9l18 -60l51 -41l67 -27l34 10l10 -10l84 76h27l8 -25l-17 -34l-60 -51l-93 -25l-28 17h-49l-61 59v17l-32 34l-17 94l-11 10l28 77l24 49l42 26l27 25l25 10z
|
||||
M153 648l25 -16l3 -5l-7 -9l25 -24v-31l21 -3l46 -43l15 -8l-6 -34v-5l-25 -7l-63 37l3 5l-12 7l3 5l-7 16l-17 15l-4 -6l-48 21l-12 27l-30 28l12 36l14 7zM286 335h-27l-49 9l-10 -9l10 -8l-10 -7v-28l10 -6h7l35 24l24 -24v-11l-24 -41l59 7v69zM210 241v17h-44l17 -34z
|
||||
" />
|
||||
<glyph glyph-name="ecircumflex" unicode="ê"
|
||||
d="M335 386l70 -76l26 -52v-34l-9 -7l9 -8l-9 -27l-42 10l-45 -18l-24 18l-42 -10l-17 -17v9l-52 8l-69 -8l-8 -9l18 -60l51 -41l67 -27l34 10l10 -10l84 76h27l8 -25l-17 -34l-60 -51l-93 -25l-28 17h-49l-61 59v17l-32 34l-17 94l-11 10l28 77l24 49l42 26l27 25l25 10z
|
||||
M312 669l5 4l34 -22l33 -63l21 -13v-12l46 -39l-3 -28l9 -9l-13 -39h-60l-30 26h-9l-25 43l-67 42l-5 9l-4 4l-51 -22l-25 -38v-4l-21 -42l-21 -27v-4h-30l-13 4h-14l-7 30l4 39l46 46l47 85l68 27l30 21zM286 335h-27l-49 9l-10 -9l10 -8l-10 -7v-28l10 -6h7l35 24l24 -24
|
||||
v-11l-24 -41l59 7v69zM210 241v17h-44l17 -34z" />
|
||||
<glyph glyph-name="edieresis" unicode="ë"
|
||||
d="M335 386l70 -76l26 -52v-34l-9 -7l9 -8l-9 -27l-42 10l-45 -18l-24 18l-42 -10l-17 -17v9l-52 8l-69 -8l-8 -9l18 -60l51 -41l67 -27l34 10l10 -10l84 76h27l8 -25l-17 -34l-60 -51l-93 -25l-28 17h-49l-61 59v17l-32 34l-17 94l-11 10l28 77l24 49l42 26l27 25l25 10z
|
||||
M165 565l25 -24v-52l-35 -52l-49 27l-17 25l8 52l44 24h24zM394 558l35 -35l-8 -59l-27 -27l-49 10l-27 25l10 51l41 35h25zM210 241v17h-44l17 -34zM286 335h-27l-49 9l-10 -9l10 -8l-10 -7v-28l10 -6h7l35 24l24 -24v-11l-24 -41l59 7v69z" />
|
||||
<glyph glyph-name="iacute" unicode="í"
|
||||
d="M170 381l-6 -5l18 -4h25l18 -21l-55 -4h-30l-4 16l-9 9l4 9h39zM306 360l7 -13l-7 -42l3 -5l4 -22l-12 -25l12 -42v-21l-12 -27l5 -49l7 -27l-7 -34l3 -12v-5l34 -7l21 7l9 -4l30 9l30 4l43 -16l7 -39l-16 -18l-55 5h-30l-60 4l-25 5l-9 -9l-21 4h-4h-60l-9 -9l-24 9
|
||||
l-69 5v37l42 13l18 -7l3 3l57 -9h-5v9h5v-3l42 12l13 21v16l-5 6l5 85h3l6 3l-14 39l21 42l-16 22l9 25h3l-3 33l-30 21v9l24 13zM415 677l16 -5l17 -25l-21 -47l-51 -29l-52 -60l-7 -34l-35 -26l-13 14h-3l-12 -14v14l-22 25l4 17l12 8l-3 14l21 16l-5 5l17 25l22 12l3 27
|
||||
l21 24l6 22l46 21z" />
|
||||
<glyph glyph-name="igrave" unicode="ì"
|
||||
d="M170 381l-6 -5l18 -4h25l18 -21l-55 -4h-30l-4 16l-9 9l4 9h39zM306 360l7 -13l-7 -42l3 -5l4 -22l-12 -25l12 -42v-21l-12 -27l5 -49l7 -27l-7 -34l3 -12v-5l34 -7l21 7l9 -4l30 9l30 4l43 -16l7 -39l-16 -18l-55 5h-30l-60 4l-25 5l-9 -9l-21 4h-4h-60l-9 -9l-24 9
|
||||
l-69 5v37l42 13l18 -7l3 3l57 -9h-5v9h5v-3l42 12l13 21v16l-5 6l5 85h3l6 3l-14 39l21 42l-16 22l9 25h3l-3 33l-30 21v9l24 13zM174 648l25 -16l3 -5l-7 -9l25 -24v-31l21 -3l46 -43l15 -8l-6 -34v-5l-25 -7l-63 37l3 5l-12 7l3 5l-7 16l-17 15l-4 -6l-48 21l-12 27
|
||||
l-30 28l12 36l14 7z" />
|
||||
<glyph glyph-name="icircumflex" unicode="î"
|
||||
d="M170 381l-6 -5l18 -4h25l18 -21l-55 -4h-30l-4 16l-9 9l4 9h39zM306 360l7 -13l-7 -42l3 -5l4 -22l-12 -25l12 -42v-21l-12 -27l5 -49l7 -27l-7 -34l3 -12v-5l34 -7l21 7l9 -4l30 9l30 4l43 -16l7 -39l-16 -18l-55 5h-30l-60 4l-25 5l-9 -9l-21 4h-4h-60l-9 -9l-24 9
|
||||
l-69 5v37l42 13l18 -7l3 3l57 -9h-5v9h5v-3l42 12l13 21v16l-5 6l5 85h3l6 3l-14 39l21 42l-16 22l9 25h3l-3 33l-30 21v9l24 13zM317 684l5 4l34 -22l33 -63l21 -13v-12l46 -39l-3 -28l9 -9l-13 -39h-60l-30 26h-9l-25 43l-67 42l-5 9l-4 4l-51 -22l-25 -38v-4l-21 -42
|
||||
l-21 -27v-4h-30l-13 4h-14l-7 30l4 39l46 46l47 85l68 27l30 21z" />
|
||||
<glyph glyph-name="idieresis" unicode="ï"
|
||||
d="M170 381l-6 -5l18 -4h25l18 -21l-55 -4h-30l-4 16l-9 9l4 9h39zM306 360l7 -13l-7 -42l3 -5l4 -22l-12 -25l12 -42v-21l-12 -27l5 -49l7 -27l-7 -34l3 -12v-5l34 -7l21 7l9 -4l30 9l30 4l43 -16l7 -39l-16 -18l-55 5h-30l-60 4l-25 5l-9 -9l-21 4h-4h-60l-9 -9l-24 9
|
||||
l-69 5v37l42 13l18 -7l3 3l57 -9h-5v9h5v-3l42 12l13 21v16l-5 6l5 85h3l6 3l-14 39l21 42l-16 22l9 25h3l-3 33l-30 21v9l24 13zM155 565l25 -24v-52l-35 -52l-49 27l-17 25l8 52l44 24h24zM384 558l35 -35l-8 -59l-27 -27l-49 10l-27 25l10 51l41 35h25z" />
|
||||
<glyph glyph-name="ntilde" unicode="ñ"
|
||||
d="M524 21l-28 -26l-52 8l-69 -8h-34l-18 17v25l87 17h9l8 10l-8 49v35l8 9l-17 153l-60 34l-52 -26l-69 -94l-24 -59l7 -60l-7 -23v-11l24 -24l69 7h-6l-18 -42v-9l-17 -17l-28 9l-24 -9l-7 9l-35 -9l-44 9l-60 -9l-17 17h-7l7 27l28 24l49 10l17 18l10 75l-10 129v24
|
||||
l-66 42l-17 27v25l24 17l59 -17l35 24l34 -32h7l28 -27l101 52l69 -7l58 -62l11 -101l-11 -197zM210 741l22 -12l3 3l36 -21l3 -25l12 -9l9 9l30 -5l34 30l4 -4h8l-3 -5h21l4 18l21 17l34 -5l21 -16l9 -14l-4 -42l-18 -16h6v-6h-6l-30 -24l-21 -4l-7 -21l-5 3l-16 -12h-21
|
||||
l-6 -5l-16 8l-17 -8l-25 8h-6l-33 9l-34 30l-26 22h-22l-46 -64h-8l-9 -9l-7 9l-15 -5l-24 14l-4 -6l-14 43l21 42l14 13v5l16 25l22 5l5 -5l25 18l30 12h33z" />
|
||||
<glyph glyph-name="oacute" unicode="ó"
|
||||
d="M334 413l60 -44l51 -66l24 -52l10 -77l-17 -27l-17 -76l-69 -76h-25l-34 -25l-111 17l-34 25l-42 35l-52 66l17 162l35 60l69 61l83 17h52zM437 677l16 -5l17 -25l-21 -47l-51 -29l-52 -60l-7 -34l-35 -26l-13 14h-3l-12 -14v14l-22 25l4 17l12 8l-3 14l21 16l-5 5l17 25
|
||||
l22 12l3 27l21 24l6 22l46 21zM369 292l-27 28l-67 32l-27 -17l-49 -8l-27 -17l-25 -69l17 -49l-9 -10l9 -42l49 -76l79 -10l25 17l8 -7h9l8 7l34 59l18 87z" />
|
||||
<glyph glyph-name="ograve" unicode="ò"
|
||||
d="M19 404v12h12v-12h-12zM334 413l60 -44l51 -66l24 -52l10 -77l-17 -27l-17 -76l-69 -76h-25l-34 -25l-111 17l-34 25l-42 35l-52 66l17 162l35 60l69 61l83 17h52zM183 648l25 -16l3 -5l-7 -9l25 -24v-31l21 -3l46 -43l15 -8l-6 -34v-5l-25 -7l-63 37l3 5l-12 7l3 5
|
||||
l-7 16l-17 15l-4 -6l-48 21l-12 27l-30 28l12 36l14 7zM369 292l-27 28l-67 32l-27 -17l-49 -8l-27 -17l-25 -69l17 -49l-9 -10l9 -42l49 -76l79 -10l25 17l8 -7h9l8 7l34 59l18 87z" />
|
||||
<glyph glyph-name="ocircumflex" unicode="ô"
|
||||
d="M19 404v12h12v-12h-12zM334 413l60 -44l51 -66l24 -52l10 -77l-17 -27l-17 -76l-69 -76h-25l-34 -25l-111 17l-34 25l-42 35l-52 66l17 162l35 60l69 61l83 17h52zM335 654l5 4l34 -22l33 -63l21 -13v-12l46 -39l-3 -28l9 -9l-13 -39h-60l-30 26h-9l-25 43l-67 42l-5 9
|
||||
l-4 4l-51 -22l-25 -38v-4l-21 -42l-21 -27v-4h-30l-13 4h-14l-7 30l4 39l46 46l47 85l68 27l30 21zM369 292l-27 28l-67 32l-27 -17l-49 -8l-27 -17l-25 -69l17 -49l-9 -10l9 -42l49 -76l79 -10l25 17l8 -7h9l8 7l34 59l18 87z" />
|
||||
<glyph glyph-name="odieresis" unicode="ö"
|
||||
d="M19 404v12h12v-12h-12zM334 413l60 -44l51 -66l24 -52l10 -77l-17 -27l-17 -76l-69 -76h-25l-34 -25l-111 17l-34 25l-42 35l-52 66l17 162l35 60l69 61l83 17h52zM190 565l25 -24v-52l-35 -52l-49 27l-17 25l8 52l44 24h24zM419 558l35 -35l-8 -59l-27 -27l-49 10
|
||||
l-27 25l10 51l41 35h25zM369 292l-27 28l-67 32l-27 -17l-49 -8l-27 -17l-25 -69l17 -49l-9 -10l9 -42l49 -76l79 -10l25 17l8 -7h9l8 7l34 59l18 87z" />
|
||||
<glyph glyph-name="otilde" unicode="õ"
|
||||
d="M253 781l22 -12l3 3l36 -21l3 -25l12 -9l9 9l30 -5l34 30l4 -4h8l-3 -5h21l4 18l21 17l34 -5l21 -16l9 -14l-4 -42l-18 -16h6v-6h-6l-30 -24l-21 -4l-7 -21l-5 3l-16 -12h-21l-6 -5l-16 8l-17 -8l-25 8h-6l-33 9l-34 30l-26 22h-22l-46 -64h-8l-9 -9l-7 9l-15 -5l-24 14
|
||||
l-4 -6l-14 43l21 42l14 13v5l16 25l22 5l5 -5l25 18l30 12h33zM334 413l60 -44l51 -66l24 -52l10 -77l-17 -27l-17 -76l-69 -76h-25l-34 -25l-111 17l-34 25l-42 35l-52 66l17 162l35 60l69 61l83 17h52zM369 292l-27 28l-67 32l-27 -17l-49 -8l-27 -17l-25 -69l17 -49
|
||||
l-9 -10l9 -42l49 -76l79 -10l25 17l8 -7h9l8 7l34 59l18 87z" />
|
||||
<glyph glyph-name="uacute" unicode="ú"
|
||||
d="M437 677l16 -5l17 -25l-21 -47l-51 -29l-52 -60l-7 -34l-35 -26l-13 14h-3l-12 -14v14l-22 25l4 17l12 8l-3 14l21 16l-5 5l17 25l22 12l3 27l21 24l6 22l46 21zM154 394l7 -24l-17 -103l10 -8l-10 -52l17 -110v-8l52 -17l52 8l52 59v27l31 41l18 112l10 9v15l-28 17h-76
|
||||
l-7 28l52 24l49 -18l27 11l24 -11l11 -24l-11 -76l11 -62l-11 -7l18 -128l7 -8l10 8l77 -42l9 -10l-9 -42l-69 -17l-77 17h-24l-42 25l-111 -42l-69 25l-17 17l-10 -8l-15 25l8 128l-8 52l8 69l-7 40l-12 16l-32 -6h-17l-12 16l-9 2l-10 10l-8 16l26 20l56 4z" />
|
||||
<glyph glyph-name="ugrave" unicode="ù"
|
||||
d="M154 394l7 -24l-17 -103l10 -8l-10 -52l17 -110v-8l52 -17l52 8l52 59v27l31 41l18 112l10 9v15l-28 17h-76l-7 28l52 24l49 -18l27 11l24 -11l11 -24l-11 -76l11 -62l-11 -7l18 -128l7 -8l10 8l77 -42l9 -10l-9 -42l-69 -17l-77 17h-24l-42 25l-111 -42l-69 25l-17 17
|
||||
l-10 -8l-15 25l8 128l-8 52l8 69l-25 118zM172 648l25 -16l3 -5l-7 -9l25 -24v-31l21 -3l46 -43l15 -8l-6 -34v-5l-25 -7l-63 37l3 5l-12 7l3 5l-7 16l-17 15l-4 -6l-48 21l-12 27l-30 28l12 36l14 7z" />
|
||||
<glyph glyph-name="ucircumflex" unicode="û"
|
||||
d="M331 674l5 4l34 -22l33 -63l21 -13v-12l46 -39l-3 -28l9 -9l-13 -39h-60l-30 26h-9l-25 43l-67 42l-5 9l-4 4l-51 -22l-25 -38v-4l-21 -42l-21 -27v-4h-30l-13 4h-14l-7 30l4 39l46 46l47 85l68 27l30 21zM154 394l7 -24l-17 -103l10 -8l-10 -52l17 -110v-8l52 -17l52 8
|
||||
l52 59v27l31 41l18 112l10 9v15l-28 17h-76l-7 28l52 24l49 -18l27 11l24 -11l11 -24l-11 -76l11 -62l-11 -7l18 -128l7 -8l10 8l77 -42l9 -10l-9 -42l-69 -17l-77 17h-24l-42 25l-111 -42l-69 25l-17 17l-10 -8l-15 25l8 128l-8 52l8 69l-7 40l-12 16l-32 -6h-17l-12 16
|
||||
l-9 2l-10 10l-8 16l26 20l56 4z" />
|
||||
<glyph glyph-name="udieresis" unicode="ü"
|
||||
d="M174 565l25 -24v-52l-35 -52l-49 27l-17 25l8 52l44 24h24zM403 558l35 -35l-8 -59l-27 -27l-49 10l-27 25l10 51l41 35h25zM154 394l7 -24l-17 -103l10 -8l-10 -52l17 -110v-8l52 -17l52 8l52 59v27l31 41l18 112l10 9v15l-28 17h-76l-7 28l52 24l49 -18l27 11l24 -11
|
||||
l11 -24l-11 -76l11 -62l-11 -7l18 -128l7 -8l10 8l77 -42l9 -10l-9 -42l-69 -17l-77 17h-24l-42 25l-111 -42l-69 25l-17 17l-10 -8l-15 25l8 128l-8 52l8 69l-7 40l-12 16l-32 -6h-17l-12 16l-9 2l-10 10l-8 16l26 20l56 4z" />
|
||||
<glyph glyph-name="degree" unicode="°"
|
||||
d="M238 -28l-4 6h-13l-77 52l-58 75l-8 77l18 93l59 87l41 34l60 8l9 10l77 -10l76 -35l17 -25l25 -26l-7 -84l-25 -17h-68l-18 41l35 35l-28 34l-41 25l-52 -8l-42 -17l-59 -69l17 -128l18 -25l6 -9h18l34 -32l35 -17l49 17l86 76h52l8 -27l-18 -49l-49 -52l-79 -34l-50 -7
|
||||
l5 -9l-4 -9v-8l2 -2l-4 -17l4 -14l6 -2l13 -16l11 -1l17 -17l4 -15l5 -2l6 -5l-2 -9l3 -4l-1 -17v-2l5 -19l-5 -13l-2 2l-12 -19v-13l-13 -15l-16 -6l-13 -9l-23 -7l-2 -2v-4h-2l-16 -3l-19 3l-4 -3l-13 1l-4 6h-7v8l-12 9l-3 11l-8 8l8 14l-2 2l8 16l-3 10l10 19h4h5h34
|
||||
l19 -9l11 -15l9 -2h4l6 11v14l-2 18l-9 11v8l-16 5v4l-11 6h-5l-24 1l-12 12l-11 5l-8 14l6 14l9 4l12 3l1 4l10 -4l7 12l-2 20l4 4l-2 2v12z" />
|
||||
<glyph glyph-name="partialdiff" unicode="∂"
|
||||
d="M146 533l76 -67v-61l10 -8l25 8h17v-8l10 -7l14 15h17l11 -50l-28 -27v44l-14 18l-10 -18h10v-34h-10v7l-8 10l-9 -17v-35l9 -9h8l-17 -84l-8 -10v-24l8 -8l9 8l18 -25l14 32v10h11l6 -52l-6 -59l-18 42l-25 -25l18 -59l14 17h17l11 -26v-35l-11 -8h-17l-14 18l-10 -10
|
||||
l-8 10h-17l17 34v17l-9 8l-35 -34l-49 -52l-45 -8l-52 8l-6 -8l-43 17l-9 8v27l17 17l-17 32l9 10l-9 59l9 10l-9 76l17 76l-8 8l8 27l-25 34v25l35 35l-27 69l9 7v7l25 -14l18 14l41 18h35zM326 490l7 -24v-34l-42 41l18 17h17zM274 456v17h10v-17h-10zM520 515l17 -42
|
||||
l-7 -76l7 -7l-17 -35l27 -69l-10 -34l-7 -7l17 -35l-10 -138l10 -32v-34l-17 -18h-17l-42 43l17 75v18l-9 9l-25 -27l-10 -41l10 -42v-17l-35 -18h-25l-27 25h-17l10 44l17 15l-17 61l7 43l-17 42l10 61l59 -61l42 120v25l10 9l34 -34l8 7v18l-8 9l8 18l-8 49l-17 17l8 52
|
||||
l9 7h15zM488 227v-17h8v17h-8zM139 456l17 17h-34l-35 -58l-11 -52l-24 -25v-52l35 -34l-11 -7v-69l18 -52l-7 -8l-11 -85h28l18 26l41 15l17 86l-24 35l24 25l25 137l-25 35v25l8 7l-49 17v17z" />
|
||||
<glyph glyph-name="nbspace" unicode=" "
|
||||
d="M0 0z" />
|
||||
<glyph glyph-name="Agrave" unicode="À"
|
||||
d="M268 461l-17 -17l-8 -94h-9l-18 -17l-7 -76l7 -8l-7 -27v-7l17 -18l83 8l11 -8l24 35l-7 60l-28 23l11 28l-11 76v25h18l17 -77l17 -24v-51l25 -25l27 -128l17 -28v-35l25 -23l59 -8l17 -17v-27l-17 -18h-32l-9 -7l-153 17l-17 17l6 18l28 25h17l17 23l-10 28v7l-24 28
|
||||
l-146 -11l-9 -6l9 -52l35 -17l25 -43l-25 -27h-10l-7 -7l-69 7l-69 -7l-42 17h-7l-10 8l10 44l83 25l28 34l17 76l24 42v52l17 18v23l25 18l10 86l17 42h25zM292 537l17 -17v-17l-41 10v24h24zM168 808l25 -16l3 -5l-7 -9l25 -24v-31l21 -3l46 -43l15 -8l-6 -34v-5l-25 -7
|
||||
l-63 37l3 5l-12 7l3 5l-7 16l-17 15l-4 -6l-48 21l-12 27l-30 28l12 36l14 7z" />
|
||||
<glyph glyph-name="Atilde" unicode="Ã"
|
||||
d="M268 461l-17 -17l-8 -94h-9l-18 -17l-7 -76l7 -8l-7 -27v-7l17 -18l83 8l11 -8l24 35l-7 60l-28 23l11 28l-11 76v25h18l17 -77l17 -24v-51l25 -25l27 -128l17 -28v-35l25 -23l59 -8l17 -17v-27l-17 -18h-32l-9 -7l-153 17l-17 17l6 18l28 25h17l17 23l-10 28v7l-24 28
|
||||
l-146 -11l-9 -6l9 -52l35 -17l25 -43l-25 -27h-10l-7 -7l-69 7l-69 -7l-42 17h-7l-10 8l10 44l83 25l28 34l17 76l24 42v52l17 18v23l25 18l10 86l17 42h25zM292 537l17 -17v-17l-41 10v24h24zM253 781l22 -12l3 3l36 -21l3 -25l12 -9l9 9l30 -5l34 30l4 -4h8l-3 -5h21l4 18
|
||||
l21 17l34 -5l21 -16l9 -14l-4 -42l-18 -16h6v-6h-6l-30 -24l-21 -4l-7 -21l-5 3l-16 -12h-21l-6 -5l-16 8l-17 -8l-25 8h-6l-33 9l-34 30l-26 22h-22l-46 -64h-8l-9 -9l-7 9l-15 -5l-24 14l-4 -6l-14 43l21 42l14 13v5l16 25l22 5l5 -5l25 18l30 12h33z" />
|
||||
<glyph glyph-name="Otilde" unicode="Õ"
|
||||
d="M37 58v13h11v-13h-11zM317 -43v12h12v-12h-12zM351 577l77 -76l10 -34l24 -17l25 -129l9 -58l-34 -136l-17 -28v-14l-51 -52l-8 -27l-17 -17l-94 -14l-17 14l-103 17v18l-16 17l-9 -8v-9h-18l10 9v25l-27 17v18l-17 17l-7 -11v-6h-17l-11 68v25l-6 9l17 95v31l-11 10
|
||||
l18 59l27 77l42 62l103 66zM317 484l-25 34h-34l-34 -7l-43 -27l-17 -17l8 -42l-17 -25h-16l16 -189l26 -25v-52h18l34 -41h25l17 24l17 -18h17l42 35v17l-7 10l17 17l8 85l25 27v58l-18 17v25l10 10l-10 8v25l-32 51h-27zM317 314v12h12v-12h-12zM317 195v13h12v-13h-12z
|
||||
M253 781l22 -12l3 3l36 -21l3 -25l12 -9l9 9l30 -5l34 30l4 -4h8l-3 -5h21l4 18l21 17l34 -5l21 -16l9 -14l-4 -42l-18 -16h6v-6h-6l-30 -24l-21 -4l-7 -21l-5 3l-16 -12h-21l-6 -5l-16 8l-17 -8l-25 8h-6l-33 9l-34 30l-26 22h-22l-46 -64h-8l-9 -9l-7 9l-15 -5l-24 14
|
||||
l-4 -6l-14 43l21 42l14 13v5l16 25l22 5l5 -5l25 18l30 12h33z" />
|
||||
<glyph glyph-name="ydieresis" unicode="ÿ"
|
||||
d="M257 396v-17h-8l-10 8l10 9h8zM496 387l9 -8v-10l-9 -7h-8l-17 17l17 8h8zM427 387h26l-9 -43l-25 -26l-10 -67l-42 -111l-17 -17l-35 -180l-41 -59v-17l-52 -34l-77 -8l-41 18l-34 31l-8 52l8 52l23 25l28 9l24 -9l28 -42v-18l-28 -25l35 -34l42 25l35 52l27 42v61
|
||||
l-27 18l-35 100l10 10l-27 25v52l9 6l-41 43l-10 34l-24 27h-11l-7 -10l-10 10l-24 -10l-11 10v17l69 -9l28 9h32l9 -127l25 -62l27 -25l8 -59l24 -35l34 35l18 84l44 96l8 59l-70 17l11 25zM195 590l25 -24v-52l-35 -52l-49 27l-17 25l8 52l44 24h24zM424 583l35 -35
|
||||
l-8 -59l-27 -27l-49 10l-27 25l10 51l41 35h25z" />
|
||||
<glyph glyph-name="Ydieresis" unicode="Ÿ"
|
||||
d="M185 735l25 -24v-52l-35 -52l-49 27l-17 25l8 52l44 24h24zM414 728l35 -35l-8 -59l-27 -27l-49 10l-27 25l10 51l41 35h25zM219 552l18 -35l-35 -52l-9 -7l26 -79l25 -25l35 -51l17 62l35 41l24 69l10 8l-17 24l-34 10l-11 7v28l62 6l7 -6l25 6l10 -6l25 6l9 -6l25 6
|
||||
l35 -6l6 -11v-24l-41 -10l-69 -67l-8 -44v-17l-34 -14l-24 -87l-35 -77l18 -120l34 -17h59l25 -25v-34l-118 -18l-60 -7l-138 25l-7 9v25l35 25l24 -8l42 8h17l17 69l10 24l-10 17l18 79l-69 84l-8 42l-52 79l-24 25l-69 17l-17 17v24h9l8 11l10 -11l111 17z" />
|
||||
<glyph glyph-name="Acircumflex" unicode="Â"
|
||||
d="M268 461l-17 -17l-8 -94h-9l-18 -17l-7 -76l7 -8l-7 -27v-7l17 -18l83 8l11 -8l24 35l-7 60l-28 23l11 28l-11 76v25h18l17 -77l17 -24v-51l25 -25l27 -128l17 -28v-35l25 -23l59 -8l17 -17v-27l-17 -18h-32l-9 -7l-153 17l-17 17l6 18l28 25h17l17 23l-10 28v7l-24 28
|
||||
l-146 -11l-9 -6l9 -52l35 -17l25 -43l-25 -27h-10l-7 -7l-69 7l-69 -7l-42 17h-7l-10 8l10 44l83 25l28 34l17 76l24 42v52l17 18v23l25 18l10 86l17 42h25zM292 537l17 -17v-17l-41 10v24h24zM337 769l5 4l34 -22l33 -63l21 -13v-12l46 -39l-3 -28l9 -9l-13 -39h-60l-30 26
|
||||
h-9l-25 43l-67 42l-5 9l-4 4l-51 -22l-25 -38v-4l-21 -42l-21 -27v-4h-30l-13 4h-14l-7 30l4 39l46 46l47 85l68 27l30 21z" />
|
||||
<glyph glyph-name="Ecircumflex" unicode="Ê"
|
||||
d="M461 536h7l27 -118l-10 -7l10 -45l-10 -7l-35 52l-6 58l-52 60l-8 -8l-10 8l45 24zM205 546l9 -10l32 17l28 -7l58 7l8 -7v-17l-126 -17l-17 -18l8 -100l-8 -11l8 -41l24 -28l34 -7l17 17l35 35l11 35l6 6l35 -6l7 -70l-17 -51l10 -69l-27 -25h-8l-17 34l11 25l-18 27
|
||||
l-17 17h-77l-17 -17l-10 -121l18 -24v-42l17 -17l76 -10l17 10l59 -10l52 52l35 101l7 9h17l17 -17l-17 -69l10 -17l-17 -101l-10 -10l-32 10h-35l-17 -17l-44 7l-49 -7l-45 7l-76 -7l-52 7l-7 -7l-24 7l-35 -7l-27 24l10 35l93 17l34 35l8 34l-8 18l8 66l-8 266l-17 17
|
||||
l-41 -10l-62 10l-7 8l17 41zM342 824l5 4l34 -22l33 -63l21 -13v-12l46 -39l-3 -28l9 -9l-13 -39h-60l-30 26h-9l-25 43l-67 42l-5 9l-4 4l-51 -22l-25 -38v-4l-21 -42l-21 -27v-4h-30l-13 4h-14l-7 30l4 39l46 46l47 85l68 27l30 21z" />
|
||||
<glyph glyph-name="Aacute" unicode="Á"
|
||||
d="M268 461l-17 -17l-8 -94h-9l-18 -17l-7 -76l7 -8l-7 -27v-7l17 -18l83 8l11 -8l24 35l-7 60l-28 23l11 28l-11 76v25h18l17 -77l17 -24v-51l25 -25l27 -128l17 -28v-35l25 -23l59 -8l17 -17v-27l-17 -18h-32l-9 -7l-153 17l-17 17l6 18l28 25h17l17 23l-10 28v7l-24 28
|
||||
l-146 -11l-9 -6l9 -52l35 -17l25 -43l-25 -27h-10l-7 -7l-69 7l-69 -7l-42 17h-7l-10 8l10 44l83 25l28 34l17 76l24 42v52l17 18v23l25 18l10 86l17 42h25zM292 537l17 -17v-17l-41 10v24h24zM477 837l16 -5l17 -25l-21 -47l-51 -29l-52 -60l-7 -34l-35 -26l-13 14h-3
|
||||
l-12 -14v14l-22 25l4 17l12 8l-3 14l21 16l-5 5l17 25l22 12l3 27l21 24l6 22l46 21z" />
|
||||
<glyph glyph-name="Edieresis" unicode="Ë"
|
||||
d="M461 536h7l27 -118l-10 -7l10 -45l-10 -7l-35 52l-6 58l-52 60l-8 -8l-10 8l45 24zM205 546l9 -10l32 17l28 -7l58 7l8 -7v-17l-126 -17l-17 -18l8 -100l-8 -11l8 -41l24 -28l34 -7l17 17l35 35l11 35l6 6l35 -6l7 -70l-17 -51l10 -69l-27 -25h-8l-17 34l11 25l-18 27
|
||||
l-17 17h-77l-17 -17l-10 -121l18 -24v-42l17 -17l76 -10l17 10l59 -10l52 52l35 101l7 9h17l17 -17l-17 -69l10 -17l-17 -101l-10 -10l-32 10h-35l-17 -17l-44 7l-49 -7l-45 7l-76 -7l-52 7l-7 -7l-24 7l-35 -7l-27 24l10 35l93 17l34 35l8 34l-8 18l8 66l-8 266l-17 17
|
||||
l-41 -10l-62 10l-7 8l17 41zM216 725l25 -24v-52l-35 -52l-49 27l-17 25l8 52l44 24h24zM445 718l35 -35l-8 -59l-27 -27l-49 10l-27 25l10 51l41 35h25z" />
|
||||
<glyph glyph-name="Egrave" unicode="È"
|
||||
d="M461 536h7l27 -118l-10 -7l10 -45l-10 -7l-35 52l-6 58l-52 60l-8 -8l-10 8l45 24zM205 546l9 -10l32 17l28 -7l58 7l8 -7v-17l-126 -17l-17 -18l8 -100l-8 -11l8 -41l24 -28l34 -7l17 17l35 35l11 35l6 6l35 -6l7 -70l-17 -51l10 -69l-27 -25h-8l-17 34l11 25l-18 27
|
||||
l-17 17h-77l-17 -17l-10 -121l18 -24v-42l17 -17l76 -10l17 10l59 -10l52 52l35 101l7 9h17l17 -17l-17 -69l10 -17l-17 -101l-10 -10l-32 10h-35l-17 -17l-44 7l-49 -7l-45 7l-76 -7l-52 7l-7 -7l-24 7l-35 -7l-27 24l10 35l93 17l34 35l8 34l-8 18l8 66l-8 266l-17 17
|
||||
l-41 -10l-62 10l-7 8l17 41zM233 808l25 -16l3 -5l-7 -9l25 -24v-31l21 -3l46 -43l15 -8l-6 -34v-5l-25 -7l-63 37l3 5l-12 7l3 5l-7 16l-17 15l-4 -6l-48 21l-12 27l-30 28l12 36l14 7z" />
|
||||
<glyph glyph-name="Iacute" unicode="Í"
|
||||
d="M192 553h25l10 -10l31 17l28 -7l84 7l78 -7l8 -10v-31l-59 -35l-27 7h-16l-9 -7l-8 7h-27l-7 -7l7 -44l-7 -212l24 -139l18 -14h111l17 -27l7 -8l-14 -44l-35 -17l-9 10l-85 -10l-51 10l-34 -10l-69 10l-25 -10l-52 10l-35 17l-6 25l23 27l87 17h25l9 8l8 -8l17 205l-7 7
|
||||
l7 76l-7 27l7 50v34l-17 10l-52 -10l-66 17l-28 28l11 23l76 25zM422 837l16 -5l17 -25l-21 -47l-51 -29l-52 -60l-7 -34l-35 -26l-13 14h-3l-12 -14v14l-22 25l4 17l12 8l-3 14l21 16l-5 5l17 25l22 12l3 27l21 24l6 22l46 21z" />
|
||||
<glyph glyph-name="Icircumflex" unicode="Î"
|
||||
d="M192 553h25l10 -10l31 17l28 -7l84 7l78 -7l8 -10v-31l-59 -35l-27 7h-16l-9 -7l-8 7h-27l-7 -7l7 -44l-7 -212l24 -139l18 -14h111l17 -27l7 -8l-14 -44l-35 -17l-9 10l-85 -10l-51 10l-34 -10l-69 10l-25 -10l-52 10l-35 17l-6 25l23 27l87 17h25l9 8l8 -8l17 205l-7 7
|
||||
l7 76l-7 27l7 50v34l-17 10l-52 -10l-66 17l-28 28l11 23l76 25zM342 809l5 4l34 -22l33 -63l21 -13v-12l46 -39l-3 -28l9 -9l-13 -39h-60l-30 26h-9l-25 43l-67 42l-5 9l-4 4l-51 -22l-25 -38v-4l-21 -42l-21 -27v-4h-30l-13 4h-14l-7 30l4 39l46 46l47 85l68 27l30 21z
|
||||
" />
|
||||
<glyph glyph-name="Idieresis" unicode="Ï"
|
||||
d="M192 553h25l10 -10l31 17l28 -7l84 7l78 -7l8 -10v-31l-59 -35l-27 7h-16l-9 -7l-8 7h-27l-7 -7l7 -44l-7 -212l24 -139l18 -14h111l17 -27l7 -8l-14 -44l-35 -17l-9 10l-85 -10l-51 10l-34 -10l-69 10l-25 -10l-52 10l-35 17l-6 25l23 27l87 17h25l9 8l8 -8l17 205l-7 7
|
||||
l7 76l-7 27l7 50v34l-17 10l-52 -10l-66 17l-28 28l11 23l76 25zM186 725l25 -24v-52l-35 -52l-49 27l-17 25l8 52l44 24h24zM415 718l35 -35l-8 -59l-27 -27l-49 10l-27 25l10 51l41 35h25z" />
|
||||
<glyph glyph-name="Igrave" unicode="Ì"
|
||||
d="M192 553h25l10 -10l31 17l28 -7l84 7l78 -7l8 -10v-31l-59 -35l-27 7h-16l-9 -7l-8 7h-27l-7 -7l7 -44l-7 -212l24 -139l18 -14h111l17 -27l7 -8l-14 -44l-35 -17l-9 10l-85 -10l-51 10l-34 -10l-69 10l-25 -10l-52 10l-35 17l-6 25l23 27l87 17h25l9 8l8 -8l17 205l-7 7
|
||||
l7 76l-7 27l7 50v34l-17 10l-52 -10l-66 17l-28 28l11 23l76 25zM193 808l25 -16l3 -5l-7 -9l25 -24v-31l21 -3l46 -43l15 -8l-6 -34v-5l-25 -7l-63 37l3 5l-12 7l3 5l-7 16l-17 15l-4 -6l-48 21l-12 27l-30 28l12 36l14 7z" />
|
||||
<glyph glyph-name="Oacute" unicode="Ó"
|
||||
d="M351 577l77 -76l10 -34l24 -17l25 -129l9 -58l-34 -136l-17 -28v-14l-51 -52l-8 -27l-17 -17l-94 -14l-17 14l-103 17v18l-16 17l-9 -8v-9h-18l10 9v25l-27 17v18l-17 17l-35 51v25l-6 9l17 95v31l-11 10l18 59l27 77l42 62l103 66zM457 837l16 -5l17 -25l-21 -47
|
||||
l-51 -29l-52 -60l-7 -34l-35 -26l-13 14h-3l-12 -14v14l-22 25l4 17l12 8l-3 14l21 16l-5 5l17 25l22 12l3 27l21 24l6 22l46 21zM317 484l-25 34h-34l-34 -7l-43 -27l-17 -17l8 -42l-17 -25h-16l16 -189l26 -25v-52h18l34 -41h25l17 24l17 -18h17l42 35v17l-7 10l17 17
|
||||
l8 85l25 27v58l-18 17v25l10 10l-10 8v25l-32 51h-27zM317 314v12h12v-12h-12z" />
|
||||
<glyph glyph-name="Ocircumflex" unicode="Ô"
|
||||
d="M37 58v13h11v-13h-11zM317 -43v12h12v-12h-12zM351 577l77 -76l10 -34l24 -17l25 -129l9 -58l-34 -136l-17 -28v-14l-51 -52l-8 -27l-17 -17l-94 -14l-17 14l-103 17v18l-16 17l-9 -8v-9h-18l10 9v25l-27 17v18l-17 17l-7 -11v-6h-17l-11 68v25l-6 9l17 95v31l-11 10
|
||||
l18 59l27 77l42 62l103 66zM362 819l5 4l34 -22l33 -63l21 -13v-12l46 -39l-3 -28l9 -9l-13 -39h-60l-30 26h-9l-25 43l-67 42l-5 9l-4 4l-51 -22l-25 -38v-4l-21 -42l-21 -27v-4h-30l-13 4h-14l-7 30l4 39l46 46l47 85l68 27l30 21zM317 484l-25 34h-34l-34 -7l-43 -27
|
||||
l-17 -17l8 -42l-17 -25h-16l16 -189l26 -25v-52h18l34 -41h25l17 24l17 -18h17l42 35v17l-7 10l17 17l8 85l25 27v58l-18 17v25l10 10l-10 8v25l-32 51h-27z" />
|
||||
<glyph glyph-name="apple" unicode=""
|
||||
d="M381 871h78l9 -6l49 6l52 -6l27 -28v-59l-35 -34l-34 -8l-76 17l-119 -9l-10 9l-76 -9l-199 9l-8 -9l-61 17l-17 17v35l-7 7l24 45l61 17zM381 681h78l9 -6l49 6l52 -6l27 -28v-59l-35 -34l-34 -8l-76 17l-119 -9l-10 9l-76 -9l-199 9l-8 -9l-61 17l-17 17v35l-7 7l24 45
|
||||
l61 17zM381 496h78l9 -6l49 6l52 -6l27 -28v-59l-35 -34l-34 -8l-76 17l-119 -9l-10 9l-76 -9l-199 9l-8 -9l-61 17l-17 17v35l-7 7l24 45l61 17zM381 316h78l9 -6l49 6l52 -6l27 -28v-59l-35 -34l-34 -8l-76 17l-119 -9l-10 9l-76 -9l-199 9l-8 -9l-61 17l-17 17v35l-7 7
|
||||
l24 45l61 17zM381 126h78l9 -6l49 6l52 -6l27 -28v-59l-35 -34l-34 -8l-76 17l-119 -9l-10 9l-76 -9l-199 9l-8 -9l-61 17l-17 17v35l-7 7l24 45l61 17zM381 -64h78l9 -6l49 6l52 -6l27 -28v-59l-35 -34l-34 -8l-76 17l-119 -9l-10 9l-76 -9l-199 9l-8 -9l-61 17l-17 17v35
|
||||
l-7 7l24 45l61 17z" />
|
||||
<glyph glyph-name="Ograve" unicode="Ò"
|
||||
d="M37 58v13h11v-13h-11zM317 -43v12h12v-12h-12zM351 577l77 -76l10 -34l24 -17l25 -129l9 -58l-34 -136l-17 -28v-14l-51 -52l-8 -27l-17 -17l-94 -14l-17 14l-103 17v18l-16 17l-9 -8v-9h-18l10 9v25l-27 17v18l-17 17l-7 -11v-6h-17l-11 68v25l-6 9l17 95v31l-11 10
|
||||
l18 59l27 77l42 62l103 66zM223 808l25 -16l3 -5l-7 -9l25 -24v-31l21 -3l46 -43l15 -8l-6 -34v-5l-25 -7l-63 37l3 5l-12 7l3 5l-7 16l-17 15l-4 -6l-48 21l-12 27l-30 28l12 36l14 7zM317 484l-25 34h-34l-34 -7l-43 -27l-17 -17l8 -42l-17 -25h-16l16 -189l26 -25v-52h18
|
||||
l34 -41h25l17 24l17 -18h17l42 35v17l-7 10l17 17l8 85l25 27v58l-18 17v25l10 10l-10 8v25l-32 51h-27zM317 195v13h12v-13h-12zM317 314v12h12v-12h-12z" />
|
||||
<glyph glyph-name="Uacute" unicode="Ú"
|
||||
d="M348 365v13h12v-13h-12zM348 228v-16l-7 -9h-10l-7 25h24zM348 577l10 10l76 -18l25 18l44 -10l15 -17v-32l-59 -10l-8 10l-26 -17l9 -111l-9 -76l9 -79l-9 -42l9 -69l-52 -93l-93 -49v6l-7 8l-35 -8l-76 25h-17l-61 111l-8 34l8 10l-8 25l17 69l-9 17l9 49l-9 17l9 52
|
||||
l-17 27l8 42l-18 52h-7l-8 -10l-17 17h-27l-8 25l8 9l34 18l43 -10l78 10l49 -10l10 -17v-32l-69 -10l-17 -17l10 -42l-17 -34l17 -35l-17 -25v-10l7 -7l-7 -24l7 -52l-7 -17l7 -69l27 -25v-34l66 -35h70l24 24v28l34 17l-7 111l18 52l-18 126l18 17l-18 44l-86 24v25l59 34
|
||||
zM452 837l16 -5l17 -25l-21 -47l-51 -29l-52 -60l-7 -34l-35 -26l-13 14h-3l-12 -14v14l-22 25l4 17l12 8l-3 14l21 16l-5 5l17 25l22 12l3 27l21 24l6 22l46 21z" />
|
||||
<glyph glyph-name="Ucircumflex" unicode="Û"
|
||||
d="M237 484v14h13v-14h-13zM348 577l10 10l76 -18l25 18l44 -10l15 -17v-32l-59 -10l-8 10l-26 -17l9 -111l-9 -76l9 -79l-9 -42l9 -69l-52 -93l-93 -49v6l-7 8l-35 -8l-76 25h-17l-61 111l-8 34l8 10l-8 25l17 69l-9 17l9 49l-9 17l9 52l-17 27l8 42l-18 52h-7l-8 -10
|
||||
l-17 17h-27l-8 25l8 9l34 18l43 -10l78 10l49 -10l10 -17v-32l-69 -10l-17 -17l10 -42l-17 -34l17 -35l-17 -25v-10l7 -7l-7 -24l7 -52l-7 -17l7 -69l27 -25v-34l66 -35h70l24 24v28l34 17l-7 111l18 52l-18 126l18 17l-18 44l-86 24v25l59 34zM327 814l5 4l34 -22l33 -63
|
||||
l21 -13v-12l46 -39l-3 -28l9 -9l-13 -39h-60l-30 26h-9l-25 43l-67 42l-5 9l-4 4l-51 -22l-25 -38v-4l-21 -42l-21 -27v-4h-30l-13 4h-14l-7 30l4 39l46 46l47 85l68 27l30 21z" />
|
||||
<glyph glyph-name="Ugrave" unicode="Ù"
|
||||
d="M348 365v13h12v-13h-12zM348 577l10 10l76 -18l25 18l44 -10l15 -17v-32l-59 -10l-8 10l-26 -17l9 -111l-9 -76l9 -79l-9 -42l9 -69l-52 -93l-93 -49v6l-7 8l-35 -8l-76 25h-17l-61 111l-8 34l8 10l-8 25l17 69l-9 17l9 49l-9 17l9 52l-17 27l8 42l-18 52h-7l-8 -10
|
||||
l-17 17h-27l-8 25l8 9l34 18l43 -10l78 10l49 -10l10 -17v-32l-69 -10l-17 -17l10 -42l-17 -34l17 -35l-17 -25v-10l7 -7l-7 -24l7 -52l-7 -17l7 -69l27 -25v-34l66 -35h70l24 24v28l34 17l-7 111l18 52l-18 126l18 17l-18 44l-86 24v25l59 34zM213 808l25 -16l3 -5l-7 -9
|
||||
l25 -24v-31l21 -3l46 -43l15 -8l-6 -34v-5l-25 -7l-63 37l3 5l-12 7l3 5l-7 16l-17 15l-4 -6l-48 21l-12 27l-30 28l12 36l14 7z" />
|
||||
</font>
|
||||
</defs></svg>
|
After Width: | Height: | Size: 86 KiB |
BIN
config/themes/typewriter/fonts/trixie.ttf
Normal file
BIN
config/themes/typewriter/fonts/trixie.woff
Normal file
BIN
config/themes/typewriter/fonts/trixie.woff2
Normal file
21
config/themes/typewriter/theme.yaml
Normal file
@ -0,0 +1,21 @@
|
||||
#-----------------------------------#
|
||||
# Typewriter theme for Lumeex #
|
||||
# https://git.djeex.fr/Djeex/lumeex #
|
||||
#-----------------------------------#
|
||||
colors:
|
||||
primary: '#0065a1'
|
||||
primary_dark: '#005384'
|
||||
secondary: '#00b0f0'
|
||||
accent: '#ffc700'
|
||||
text_dark: '#333'
|
||||
background: '#fff'
|
||||
browser_color: '#fff'
|
||||
favicon:
|
||||
path: favicon.png
|
||||
fonts:
|
||||
primary:
|
||||
name: Trixie
|
||||
fallback: sans-serif
|
||||
secondary:
|
||||
name: Trixie
|
||||
fallback: serif
|
81
gallery.py
Normal file
@ -0,0 +1,81 @@
|
||||
import yaml
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
# YAML file paths
|
||||
GALLERY_YAML = "config/gallery.yaml"
|
||||
SITE_YAML = "config/site.yaml"
|
||||
|
||||
# Image directories
|
||||
GALLERY_DIR = Path("public/img/gallery")
|
||||
HERO_DIR = Path("public/img/hero")
|
||||
|
||||
def load_yaml(path):
|
||||
print(f"[→] Loading {path}...")
|
||||
if not os.path.exists(path):
|
||||
print(f"[✗] File not found: {path}")
|
||||
return {}
|
||||
with open(path, "r", encoding="utf-8") as f:
|
||||
data = yaml.safe_load(f) or {}
|
||||
images = data.get("images") or []
|
||||
print(f"[✓] Loaded {len(images)} image(s) from {path}")
|
||||
return data
|
||||
|
||||
def save_yaml(data, path):
|
||||
with open(path, "w", encoding="utf-8") as f:
|
||||
yaml.dump(data, f, sort_keys=False, allow_unicode=True)
|
||||
print(f"[✓] Saved updated YAML to {path}")
|
||||
|
||||
def get_all_image_paths(directory):
|
||||
return sorted([
|
||||
str(p.relative_to(directory.parent)).replace("\\", "/")
|
||||
for p in directory.rglob("*")
|
||||
if p.suffix.lower() in [".jpg", ".jpeg", ".png", ".webp"]
|
||||
])
|
||||
|
||||
def update_gallery():
|
||||
print("\n=== Updating gallery.yaml ===")
|
||||
gallery = load_yaml(GALLERY_YAML)
|
||||
gallery_images = gallery.get("images") or []
|
||||
known = {img["src"] for img in gallery_images}
|
||||
all_images = get_all_image_paths(GALLERY_DIR)
|
||||
|
||||
new_images = [
|
||||
{"src": path, "tags": []}
|
||||
for path in all_images
|
||||
if path not in known
|
||||
]
|
||||
|
||||
if new_images:
|
||||
gallery_images.extend(new_images)
|
||||
gallery["images"] = gallery_images
|
||||
save_yaml(gallery, GALLERY_YAML)
|
||||
print(f"[✓] Added {len(new_images)} new image(s) to gallery.yaml")
|
||||
else:
|
||||
print("[✓] No new images to add to gallery.yaml")
|
||||
|
||||
def update_hero():
|
||||
print("\n=== Updating site.yaml (hero section) ===")
|
||||
site = load_yaml(SITE_YAML)
|
||||
hero_section = site.get("hero", {})
|
||||
hero_images = hero_section.get("images") or []
|
||||
known = {img["src"] for img in hero_images}
|
||||
all_images = get_all_image_paths(HERO_DIR)
|
||||
|
||||
new_images = [
|
||||
{"src": path}
|
||||
for path in all_images
|
||||
if path not in known
|
||||
]
|
||||
|
||||
if new_images:
|
||||
hero_images.extend(new_images)
|
||||
site["hero"]["images"] = hero_images
|
||||
save_yaml(site, SITE_YAML)
|
||||
print(f"[✓] Added {len(new_images)} new image(s) to site.yaml (hero)")
|
||||
else:
|
||||
print("[✓] No new images to add to site.yaml")
|
||||
|
||||
if __name__ == "__main__":
|
||||
update_gallery()
|
||||
update_hero()
|
BIN
illustration/lumeex.png
Normal file
After Width: | Height: | Size: 376 KiB |
2
requirements.txt
Normal file
@ -0,0 +1,2 @@
|
||||
pyyaml
|
||||
pillow
|
45
src/public/js/lazy.js
Normal file
@ -0,0 +1,45 @@
|
||||
// js for Lumeex
|
||||
// https://git.djeex.fr/Djeex/lumeex
|
||||
|
||||
window.addEventListener("DOMContentLoaded", () => {
|
||||
// Lazy loading
|
||||
const lazyImages = document.querySelectorAll('img.lazyload');
|
||||
|
||||
const observer = new IntersectionObserver((entries, obs) => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) {
|
||||
const img = entry.target;
|
||||
console.log("Lazy-loading image:", img.dataset.src);
|
||||
img.src = img.dataset.src;
|
||||
img.onload = () => {
|
||||
img.classList.add("loaded");
|
||||
};
|
||||
obs.unobserve(img);
|
||||
}
|
||||
});
|
||||
}, {
|
||||
rootMargin: "0px 0px 300px 0px",
|
||||
threshold: 0.01
|
||||
});
|
||||
|
||||
lazyImages.forEach(img => observer.observe(img));
|
||||
|
||||
// Fade-in effect for loaded images (even outside lazy ones)
|
||||
const fadeImages = document.querySelectorAll("img.fade-in-img");
|
||||
|
||||
fadeImages.forEach(img => {
|
||||
const onLoad = () => {
|
||||
console.log("Image loaded (fade-in):", img.src);
|
||||
img.classList.add("loaded");
|
||||
};
|
||||
|
||||
if (img.complete && img.naturalHeight !== 0) {
|
||||
onLoad(); // already loaded
|
||||
} else {
|
||||
img.addEventListener("load", onLoad, { once: true });
|
||||
img.addEventListener("error", () => {
|
||||
console.warn("Image failed to load:", img.dataset.src || img.src);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
152
src/public/js/lumeex.js
Normal file
@ -0,0 +1,152 @@
|
||||
// js for Lumeex
|
||||
// https://git.djeex.fr/Djeex/lumeex
|
||||
|
||||
// Fade in effect for elements with class 'appear'
|
||||
const setupIntersectionObserver = () => {
|
||||
const items = document.querySelectorAll('.appear');
|
||||
const io = new IntersectionObserver((entries) => {
|
||||
entries.forEach((entry) => {
|
||||
entry.target.classList.toggle('inview', entry.isIntersecting);
|
||||
});
|
||||
});
|
||||
items.forEach((item) => io.observe(item));
|
||||
};
|
||||
|
||||
// Loader fade out after page load
|
||||
const setupLoader = () => {
|
||||
window.addEventListener('load', () => {
|
||||
setTimeout(() => {
|
||||
const loader = document.querySelector('.page-loader');
|
||||
if (loader) {
|
||||
loader.classList.add('hidden');
|
||||
}
|
||||
}, 50);
|
||||
});
|
||||
};
|
||||
|
||||
// Gallery randomizer to shuffle gallery sections on page load
|
||||
const shuffleGallery = () => {
|
||||
const gallery = document.querySelector('.gallery');
|
||||
if (!gallery) return;
|
||||
const sections = Array.from(gallery.querySelectorAll('.section'));
|
||||
while (sections.length) {
|
||||
const randomIndex = Math.floor(Math.random() * sections.length);
|
||||
gallery.appendChild(sections.splice(randomIndex, 1)[0]);
|
||||
}
|
||||
};
|
||||
|
||||
// Hero background randomizer
|
||||
const randomizeHeroBackground = () => {
|
||||
const heroBg = document.querySelector(".hero-background");
|
||||
if (!heroBg) return;
|
||||
fetch("/data/gallery.json")
|
||||
.then((res) => res.json())
|
||||
.then((images) => {
|
||||
if (images.length === 0) return;
|
||||
let currentIndex = Math.floor(Math.random() * images.length);
|
||||
heroBg.style.backgroundImage = `url(/img/${images[currentIndex]})`;
|
||||
setInterval(() => {
|
||||
let nextIndex;
|
||||
do {
|
||||
nextIndex = Math.floor(Math.random() * images.length);
|
||||
} while (nextIndex === currentIndex);
|
||||
const nextImage = images[nextIndex];
|
||||
heroBg.style.setProperty("--next-image", `url(/img/${nextImage})`);
|
||||
heroBg.classList.add("fade-in");
|
||||
const onTransitionEnd = () => {
|
||||
heroBg.style.backgroundImage = `url(/img/${nextImage})`;
|
||||
heroBg.classList.remove("fade-in");
|
||||
heroBg.removeEventListener("transitionend", onTransitionEnd);
|
||||
};
|
||||
heroBg.addEventListener("transitionend", onTransitionEnd);
|
||||
currentIndex = nextIndex;
|
||||
}, 7000);
|
||||
})
|
||||
.catch(console.error);
|
||||
};
|
||||
|
||||
// Tags filter functionality
|
||||
const setupTagFilter = () => {
|
||||
const allSections = document.querySelectorAll('.section[data-tags]');
|
||||
const allTags = document.querySelectorAll('.tag');
|
||||
let activeTags = [];
|
||||
const applyFilter = () => {
|
||||
allSections.forEach((section) => {
|
||||
const sectionTags = section.dataset.tags.toLowerCase().split(/\s+/);
|
||||
const hasAllTags = activeTags.every((tag) => sectionTags.includes(tag));
|
||||
section.style.display = hasAllTags ? '' : 'none';
|
||||
});
|
||||
allTags.forEach((tagEl) => {
|
||||
const tagText = tagEl.textContent.replace('#', '').toLowerCase();
|
||||
tagEl.classList.toggle('active', activeTags.includes(tagText));
|
||||
});
|
||||
const base = window.location.pathname;
|
||||
const query = activeTags.length > 0 ? `?tag=${activeTags.join(',')}` : '';
|
||||
window.history.pushState({}, '', base + query);
|
||||
};
|
||||
|
||||
allTags.forEach((tagEl) => {
|
||||
tagEl.addEventListener('click', () => {
|
||||
const tagText = tagEl.textContent.replace('#', '').toLowerCase();
|
||||
activeTags = activeTags.includes(tagText)
|
||||
? activeTags.filter((t) => t !== tagText)
|
||||
: [...activeTags, tagText];
|
||||
applyFilter();
|
||||
});
|
||||
});
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
const urlTags = params.get('tag');
|
||||
if (urlTags) {
|
||||
activeTags = urlTags.split(',').map((t) => t.toLowerCase());
|
||||
applyFilter();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Disable right-click context menu and image dragging
|
||||
const disableRightClickAndDrag = () => {
|
||||
document.addEventListener("contextmenu", (e) => e.preventDefault());
|
||||
document.addEventListener("dragstart", (e) => {
|
||||
if (e.target.tagName === "IMG") {
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Scroll-to-top button functionality
|
||||
const setupScrollToTopButton = () => {
|
||||
const scrollBtn = document.getElementById("scrollToTop");
|
||||
window.addEventListener("scroll", () => {
|
||||
scrollBtn.style.display = window.scrollY > 300 ? "block" : "none";
|
||||
});
|
||||
scrollBtn.addEventListener("click", () => {
|
||||
window.scrollTo({ top: 0, behavior: "smooth" });
|
||||
});
|
||||
};
|
||||
|
||||
// Adjust navigation list items
|
||||
const fixNavSeparators = () => {
|
||||
const items = document.querySelectorAll('.nav-list li');
|
||||
let prevTop = null;
|
||||
items.forEach((item) => {
|
||||
const top = item.getBoundingClientRect().top;
|
||||
item.classList.toggle('first-on-line', prevTop !== null && top !== prevTop);
|
||||
prevTop = top;
|
||||
});
|
||||
};
|
||||
|
||||
// Initialize all functions
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
setupIntersectionObserver();
|
||||
setupLoader();
|
||||
shuffleGallery();
|
||||
randomizeHeroBackground();
|
||||
setupTagFilter();
|
||||
disableRightClickAndDrag();
|
||||
setupScrollToTopButton();
|
||||
fixNavSeparators();
|
||||
});
|
||||
|
||||
window.addEventListener('resize', fixNavSeparators);
|
BIN
src/public/style/.DS_Store
vendored
Normal file
496
src/public/style/style.css
Normal file
@ -0,0 +1,496 @@
|
||||
/*-----------------------------------*/
|
||||
/* CSS style for Lumeex */
|
||||
/* https://git.djeex.fr/Djeex/lumeex */
|
||||
/*-----------------------------------*/
|
||||
|
||||
:root {
|
||||
--color-primary: #0065a1;
|
||||
--color-primary-dark: #005384;
|
||||
--color-secondary: #00b0f0;
|
||||
--color-accent: #ffc700;
|
||||
--color-text-dark: #333333;
|
||||
--color-background: #ffffff;
|
||||
}
|
||||
|
||||
|
||||
/* Custom scroll bar */
|
||||
|
||||
/* width */
|
||||
::-webkit-scrollbar {
|
||||
width: 3px;
|
||||
}
|
||||
|
||||
/* Track */
|
||||
::-webkit-scrollbar-track {
|
||||
border-radius: 10px;
|
||||
background-color:var(--color-background)
|
||||
}
|
||||
|
||||
/* Handle */
|
||||
::-webkit-scrollbar-thumb {
|
||||
background-color: var(--color-primary);
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
/* Scroll to top */
|
||||
.scroll-up {
|
||||
position: fixed;
|
||||
bottom: 20px;
|
||||
right: 20px;
|
||||
background: none;
|
||||
color: var(--color-primary-dark);
|
||||
border: none;
|
||||
border-radius: 50%;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
font-size: 20px;
|
||||
cursor: pointer;
|
||||
z-index: 1000;
|
||||
display: none;
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
|
||||
.scroll-up:hover, .back-button:hover {
|
||||
color:var(--color-secondary);
|
||||
}
|
||||
|
||||
/* back button */
|
||||
|
||||
.back-button {
|
||||
padding: 20px;
|
||||
text-decoration: none;
|
||||
color: var(--color-primary-dark);
|
||||
font-size: 1.1rem;
|
||||
font-family: arial;
|
||||
border-radius: 8px;
|
||||
transition: background 0.2s ease;
|
||||
}
|
||||
|
||||
|
||||
/* Body structure */
|
||||
|
||||
html,body {
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
font-family: var(--font-secondary), Helvetica, sans-serif;
|
||||
min-width:320px;
|
||||
font-weight: 400;
|
||||
line-height:1.5;
|
||||
color:var(--color-primary-dark);
|
||||
}
|
||||
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
@media screen and (prefers-reduced-motion: reduce) {
|
||||
html {
|
||||
scroll-behavior: auto;
|
||||
}
|
||||
}
|
||||
|
||||
body a, body a:hover {
|
||||
transition: all 0.25s ease-out;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
.inner {
|
||||
max-width:1200px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-family: var(--font-primary), Arial, sans-serif;
|
||||
font-size: 18px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
/* Loader */
|
||||
.page-loader {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
position: fixed;
|
||||
background: var(--color-background);
|
||||
z-index: 1000;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
opacity: 1;
|
||||
transition: opacity 1s ease-out;
|
||||
}
|
||||
|
||||
/* Hide the loader with a fade-out effect */
|
||||
.page-loader.hidden {
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* Spinner */
|
||||
.spinner {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
background-color: var(--color-primary);
|
||||
border-radius: 100%;
|
||||
animation: sk-scaleout 1.0s infinite ease-in-out;
|
||||
}
|
||||
|
||||
@keyframes sk-scaleout {
|
||||
0% {
|
||||
transform: scale(0);
|
||||
}
|
||||
100% {
|
||||
transform: scale(1.0);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* navigation */
|
||||
|
||||
.nav-item {
|
||||
display: inline;
|
||||
|
||||
}
|
||||
|
||||
.nav-list {
|
||||
list-style-type: disc;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.nav-list li {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.nav-list > li + li::before {
|
||||
content: " • ";
|
||||
color: var(--color-accent);
|
||||
margin: -5px;
|
||||
}
|
||||
|
||||
.nav-list li.first-on-line::before {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
/* animation */
|
||||
|
||||
.appear {
|
||||
-webkit-transition: all 0.3s;
|
||||
transition: all 0.3s;
|
||||
opacity: 0;
|
||||
-webkit-transform: translateY(20px);
|
||||
transform: translateY(20px);
|
||||
}
|
||||
|
||||
.appear.inview {
|
||||
opacity: 1;
|
||||
-webkit-transform: none;
|
||||
transform: none;
|
||||
}
|
||||
|
||||
.appear.inview:nth-child(1) {
|
||||
-webkit-transition-delay: 0s;
|
||||
transition-delay: 0s;
|
||||
}
|
||||
|
||||
.appear.inview:nth-child(2) {
|
||||
-webkit-transition-delay: 0.2s;
|
||||
transition-delay: 0.2s;
|
||||
}
|
||||
|
||||
.appear.inview:nth-child(3) {
|
||||
-webkit-transition-delay: 0.4s;
|
||||
transition-delay: 0.4s;
|
||||
}
|
||||
|
||||
.appear.inview:nth-child(4) {
|
||||
-webkit-transition-delay: 0.6s;
|
||||
transition-delay: 0.6s;
|
||||
}
|
||||
|
||||
.appear.inview:nth-child(5) {
|
||||
-webkit-transition-delay: 0.8s;
|
||||
transition-delay: 0.8s;
|
||||
}
|
||||
|
||||
.appear.inview:nth-child(6) {
|
||||
-webkit-transition-delay: 1s;
|
||||
transition-delay: 1s;
|
||||
}
|
||||
|
||||
/* img fade in */
|
||||
|
||||
.fade-in-img {
|
||||
opacity: 0;
|
||||
transform: scale(1.02);
|
||||
transition: opacity 1.2s ease-out, transform 1.2s ease-out;
|
||||
will-change: opacity, transform;
|
||||
}
|
||||
|
||||
.fade-in-img.loaded {
|
||||
opacity: 1;
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
/* tag */
|
||||
|
||||
.tags {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 6px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.tag {
|
||||
padding: 5px 5px;
|
||||
cursor: pointer;
|
||||
font-size: 18px;
|
||||
transition: background 0.2s ease;
|
||||
}
|
||||
|
||||
.tag:hover,
|
||||
.tag.active {
|
||||
color: var(--color-secondary);
|
||||
}
|
||||
|
||||
/* Content */
|
||||
|
||||
/* wrapper */
|
||||
.content-wrapper {
|
||||
margin: 0 100px;
|
||||
}
|
||||
/* Hero */
|
||||
|
||||
#hero {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
#hero .content-wrapper, #hero .section {
|
||||
height:100%;
|
||||
}
|
||||
.hero-background {
|
||||
height: 66%;
|
||||
width: 100%;
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column-reverse;
|
||||
z-index: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.hero-background::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
opacity: 0;
|
||||
transition: opacity 1.5s ease-in-out;
|
||||
z-index: 1; /* derrière le contenu */
|
||||
pointer-events: none;
|
||||
background-image: var(--next-image);
|
||||
}
|
||||
|
||||
.hero-background.fade-in::after {
|
||||
opacity: 1;
|
||||
background-image: var(--next-image);
|
||||
}
|
||||
|
||||
.hero-menu {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.hero-title {
|
||||
text-align: center;
|
||||
margin-bottom: 40px;
|
||||
color: var(--color-background);
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
display: flex;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
|
||||
}
|
||||
|
||||
.hero-title h1 {
|
||||
font-size: 38px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.hero-title p {
|
||||
margin: 0;
|
||||
font-style: italic;
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
/* Sections */
|
||||
|
||||
.section {
|
||||
max-width: 1140px;
|
||||
margin:auto;
|
||||
}
|
||||
|
||||
.section img {
|
||||
width:100%;
|
||||
margin: 0 0 60px 0;
|
||||
}
|
||||
|
||||
.text-block {
|
||||
padding:10px;
|
||||
margin:10px;
|
||||
}
|
||||
|
||||
.text-block p {
|
||||
font-size: 18px;
|
||||
font-family: var(--font-secondary), Helvetica, sans-serif;
|
||||
font-weight: 200;
|
||||
}
|
||||
|
||||
/* Buttons */
|
||||
|
||||
/* Text */
|
||||
|
||||
.text-inner {
|
||||
margin-left: 10%;
|
||||
margin-right:10%;
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
|
||||
.navigation {
|
||||
text-align: center;
|
||||
padding-top: 40px;
|
||||
}
|
||||
|
||||
.navigation-title {
|
||||
font-family: var(--font-primary), Arial, sans-serif;
|
||||
font-weight: bold;
|
||||
font-size: 32px;
|
||||
color:var(--color-text-dark);
|
||||
margin-top: 0px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.navigation a {
|
||||
color:var(--color-primary);
|
||||
}
|
||||
|
||||
.navigation a:hover {
|
||||
color:var(--color-secondary);
|
||||
}
|
||||
|
||||
|
||||
.navigation-subtitle {
|
||||
color:var(--color-text-dark);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.navigation-bottom-link {
|
||||
color:var(--color-accent);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
|
||||
.social {
|
||||
display: inline;
|
||||
text-align: center;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.social-item {
|
||||
display: inline;
|
||||
text-align: center;
|
||||
font-size: 25px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.navigation .nav-links {
|
||||
margin: 20px 0;
|
||||
font-family: var(--font-secondary), Helvetica, sans-serif;
|
||||
font-weight: 200;
|
||||
}
|
||||
|
||||
.nav-list > li + li::before {
|
||||
margin: 3px;
|
||||
}
|
||||
|
||||
.bottom-link {
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
|
||||
.bottom-link p {
|
||||
margin-left:10px;
|
||||
margin-right:10px;
|
||||
}
|
||||
/* legals */
|
||||
|
||||
#legals.content-wrapper {
|
||||
max-width: 1140px;
|
||||
margin-top: 100px;
|
||||
margin-bottom: 100px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.legals-content h2 {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
.legals-content {
|
||||
margin: 0 100px;
|
||||
}
|
||||
|
||||
/* responsive */
|
||||
|
||||
@media (max-width: 1000px) {
|
||||
.button {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.content-wrapper {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.content-wrapper.gallery {
|
||||
margin: 0 5%;
|
||||
}
|
||||
|
||||
.navigation .nav-links {
|
||||
margin: 20px;
|
||||
}
|
||||
|
||||
.nav-links > ul {
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
font-size: 20px;
|
||||
top: 15%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size:18px;
|
||||
}
|
||||
|
||||
#legals.content-wrapper {
|
||||
max-width: 90%;
|
||||
margin: auto;
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
||||
.legals-content {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.back-button {
|
||||
padding-left: 0;
|
||||
margin-top: 60px;
|
||||
}
|
||||
}
|
0
src/py/__init__.py
Normal file
71
src/py/css_generator.py
Normal file
@ -0,0 +1,71 @@
|
||||
import logging
|
||||
from pathlib import Path
|
||||
from shutil import copyfile
|
||||
|
||||
def generate_css_variables(colors_dict, output_path):
|
||||
css_lines = [":root {"]
|
||||
for key, value in colors_dict.items():
|
||||
css_lines.append(f" --color-{key.replace('_', '-')}: {value};")
|
||||
css_lines.append("}")
|
||||
output_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
with open(output_path, "w", encoding="utf-8") as f:
|
||||
f.write("\n".join(css_lines))
|
||||
logging.info(f"[✓] CSS variables written to {output_path}")
|
||||
|
||||
def generate_fonts_css(fonts_dir, output_path, fonts_cfg=None):
|
||||
font_files = list(fonts_dir.glob("*"))
|
||||
font_faces = {}
|
||||
preload_links = []
|
||||
format_map = {".woff2": "woff2", ".woff": "woff", ".ttf": "truetype", ".otf": "opentype"}
|
||||
|
||||
for font_file in font_files:
|
||||
name = font_file.stem
|
||||
ext = font_file.suffix.lower()
|
||||
if ext not in format_map:
|
||||
continue
|
||||
font_faces.setdefault(name, []).append((font_file.name, format_map[ext]))
|
||||
dest_font_path = output_path.parent.parent / "fonts" / font_file.name
|
||||
dest_font_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
copyfile(font_file, dest_font_path)
|
||||
preload_links.append(
|
||||
f'<link rel="preload" href="fonts/{font_file.name}" as="font" type="font/{format_map[ext]}" crossorigin>'
|
||||
)
|
||||
|
||||
css_lines = []
|
||||
for font_name, sources in font_faces.items():
|
||||
css_lines.append(f"@font-face {{")
|
||||
css_lines.append(f" font-family: '{font_name}';")
|
||||
srcs = [f"url('../fonts/{file}') format('{fmt}')" for file, fmt in sorted(sources)]
|
||||
css_lines.append(f" src: {', '.join(srcs)};")
|
||||
css_lines.append(" font-weight: normal;")
|
||||
css_lines.append(" font-style: normal;")
|
||||
css_lines.append("}")
|
||||
|
||||
if fonts_cfg:
|
||||
css_lines.append(":root {")
|
||||
if "primary" in fonts_cfg:
|
||||
p = fonts_cfg["primary"]
|
||||
css_lines.append(f" --font-primary: '{p['name']}', {p['fallback']};")
|
||||
if "secondary" in fonts_cfg:
|
||||
s = fonts_cfg["secondary"]
|
||||
css_lines.append(f" --font-secondary: '{s['name']}', {s['fallback']};")
|
||||
css_lines.append("}")
|
||||
|
||||
output_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
output_path.write_text("\n\n".join(css_lines), encoding="utf-8")
|
||||
logging.info(f"[✓] Generated fonts CSS: {output_path}")
|
||||
return preload_links
|
||||
|
||||
def generate_google_fonts_link(fonts):
|
||||
if not fonts:
|
||||
return ""
|
||||
families = []
|
||||
for font in fonts:
|
||||
family = font["family"].replace(" ", "+")
|
||||
weights = font.get("weights", [])
|
||||
if weights:
|
||||
families.append(f"{family}:wght@{';'.join(weights)}")
|
||||
else:
|
||||
families.append(family)
|
||||
href = "https://fonts.googleapis.com/css2?" + "&".join(f"family={f}" for f in families) + "&display=swap"
|
||||
return f'<link href="{href}" rel="stylesheet">'
|
60
src/py/html_generator.py
Normal file
@ -0,0 +1,60 @@
|
||||
import json
|
||||
import logging
|
||||
from pathlib import Path
|
||||
|
||||
def render_template(template_path, context):
|
||||
with open(template_path, encoding="utf-8") as f:
|
||||
content = f.read()
|
||||
for key, value in context.items():
|
||||
placeholder = "{{ " + key + " }}"
|
||||
content = content.replace(placeholder, str(value) if value is not None else "")
|
||||
return content
|
||||
|
||||
def render_gallery_images(images):
|
||||
html = ""
|
||||
for img in images:
|
||||
tags = " ".join(img.get("tags", []))
|
||||
tag_html = "".join(f'<span class="tag">#{t}</span>' for t in img.get("tags", []))
|
||||
html += f"""
|
||||
<div class="section" data-tags="{tags}">
|
||||
<div class="tags">{tag_html}</div>
|
||||
<img class="fade-in-img lazyload" data-src="/img/{img['src']}" alt="{img.get('alt', '')}" loading="lazy">
|
||||
</div>
|
||||
"""
|
||||
return html
|
||||
|
||||
def generate_gallery_json_from_images(images, output_path):
|
||||
try:
|
||||
img_list = [img["src"] for img in images]
|
||||
output_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
with open(output_path, "w", encoding="utf-8") as f:
|
||||
json.dump(img_list, f, indent=2)
|
||||
logging.info(f"[✓] Generated hero gallery JSON: {output_path}")
|
||||
except Exception as e:
|
||||
logging.error(f"[✗] Error generating gallery JSON: {e}")
|
||||
|
||||
def generate_robots_txt(canonical_url, allowed_paths):
|
||||
robots_lines = ["User-agent: *"]
|
||||
for path in allowed_paths:
|
||||
robots_lines.append(f"Allow: {path}")
|
||||
robots_lines.append("Disallow: /")
|
||||
robots_lines.append("")
|
||||
robots_lines.append(f"Sitemap: {canonical_url}/sitemap.xml")
|
||||
content = "\n".join(robots_lines)
|
||||
output_path = Path(".output/robots.txt")
|
||||
with open(output_path, "w", encoding="utf-8") as f:
|
||||
f.write(content)
|
||||
logging.info(f"[✓] robots.txt generated at {output_path}")
|
||||
|
||||
def generate_sitemap_xml(canonical_url, allowed_paths):
|
||||
urlset_start = '<?xml version="1.0" encoding="UTF-8"?>\n<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n'
|
||||
urlset_end = '</urlset>\n'
|
||||
urls = ""
|
||||
for path in allowed_paths:
|
||||
loc = canonical_url.rstrip("/") + path
|
||||
urls += f" <url>\n <loc>{loc}</loc>\n </url>\n"
|
||||
sitemap_content = urlset_start + urls + urlset_end
|
||||
output_path = Path(".output/sitemap.xml")
|
||||
with open(output_path, "w", encoding="utf-8") as f:
|
||||
f.write(sitemap_content)
|
||||
logging.info(f"[✓] sitemap.xml generated at {output_path}")
|
73
src/py/image_processor.py
Normal file
@ -0,0 +1,73 @@
|
||||
import logging
|
||||
from pathlib import Path
|
||||
from PIL import Image
|
||||
from shutil import copyfile
|
||||
|
||||
def convert_and_resize_image(input_path, output_path, resize=True, max_width=1140):
|
||||
try:
|
||||
img = Image.open(input_path)
|
||||
if img.mode != "RGB":
|
||||
img = img.convert("RGB")
|
||||
if resize:
|
||||
width, height = img.size
|
||||
if width > max_width:
|
||||
new_height = int((max_width / width) * height)
|
||||
img = img.resize((max_width, new_height), Image.LANCZOS)
|
||||
output_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
img.save(output_path, "WEBP", quality=100)
|
||||
logging.info(f"[✓] Processed: {input_path} → {output_path}")
|
||||
except Exception as e:
|
||||
logging.error(f"[✗] Failed to process {input_path}: {e}")
|
||||
|
||||
def process_images(images, resize_images, img_dir, build_dir):
|
||||
for img in images:
|
||||
src_path = img_dir / img["src"]
|
||||
webp_path = build_dir / "img" / Path(img["src"]).with_suffix(".webp")
|
||||
convert_and_resize_image(src_path, webp_path, resize=resize_images)
|
||||
img["src"] = str(Path(img["src"]).with_suffix(".webp"))
|
||||
|
||||
def copy_original_images(images, img_dir, build_dir):
|
||||
for img in images:
|
||||
src_path = img_dir / img["src"]
|
||||
dest_path = build_dir / "img" / img["src"]
|
||||
try:
|
||||
dest_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
copyfile(src_path, dest_path)
|
||||
logging.info(f"[✓] Copied original: {src_path} → {dest_path}")
|
||||
except Exception as e:
|
||||
logging.error(f"[✗] Failed to copy {src_path}: {e}")
|
||||
|
||||
def generate_favicons_from_logo(theme_vars, theme_dir, output_dir):
|
||||
logo_path = get_favicon_path(theme_vars, theme_dir)
|
||||
if not logo_path:
|
||||
logging.warning("[~] No favicon path defined, skipping favicon PNGs.")
|
||||
return
|
||||
output_dir.mkdir(parents=True, exist_ok=True)
|
||||
specs = [(32, "favicon-32.png"), (96, "favicon-96.png"), (128, "favicon-128.png"),
|
||||
(192, "favicon-192.png"), (196, "favicon-196.png"), (152, "favicon-152.png"), (180, "favicon-180.png")]
|
||||
img = Image.open(logo_path).convert("RGBA")
|
||||
for size, name in specs:
|
||||
img.resize((size, size), Image.LANCZOS).save(output_dir / name, format="PNG")
|
||||
logging.info(f"[✓] Favicons generated in {output_dir}")
|
||||
|
||||
def generate_favicon_ico(theme_vars, theme_dir, output_path):
|
||||
logo_path = get_favicon_path(theme_vars, theme_dir)
|
||||
if not logo_path:
|
||||
logging.warning("[~] No favicon path defined, skipping .ico generation.")
|
||||
return
|
||||
try:
|
||||
img = Image.open(logo_path).convert("RGBA")
|
||||
output_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
img.save(output_path, format="ICO", sizes=[(16, 16), (32, 32), (48, 48)])
|
||||
logging.info(f"[✓] favicon.ico generated at {output_path}")
|
||||
except Exception as e:
|
||||
logging.error(f"[✗] Failed to generate favicon.ico: {e}")
|
||||
|
||||
def get_favicon_path(theme_vars, theme_dir):
|
||||
fav_path = theme_vars.get("favicon", {}).get("path")
|
||||
if not fav_path:
|
||||
return None
|
||||
path = Path(fav_path)
|
||||
if not path.is_absolute():
|
||||
path = theme_dir / path
|
||||
return path if path.exists() else None
|
34
src/py/utils.py
Normal file
@ -0,0 +1,34 @@
|
||||
import yaml
|
||||
import logging
|
||||
from pathlib import Path
|
||||
from shutil import copytree, rmtree, copyfile
|
||||
|
||||
def load_yaml(path):
|
||||
if not path.exists():
|
||||
logging.warning(f"[!] YAML file not found: {path}")
|
||||
return {}
|
||||
with open(path, "r", encoding="utf-8") as f:
|
||||
return yaml.safe_load(f)
|
||||
|
||||
def load_theme_config(theme_name, themes_dir):
|
||||
theme_dir = themes_dir / theme_name
|
||||
theme_config_path = theme_dir / "theme.yaml"
|
||||
if not theme_config_path.exists():
|
||||
raise FileNotFoundError(f"[✗] Theme config not found: {theme_config_path}")
|
||||
with open(theme_config_path, "r", encoding="utf-8") as f:
|
||||
theme_vars = yaml.safe_load(f)
|
||||
return theme_vars, theme_dir
|
||||
|
||||
def ensure_dir(path):
|
||||
if path.exists():
|
||||
rmtree(path)
|
||||
path.mkdir(parents=True)
|
||||
|
||||
def copy_assets(js_dir, style_dir, build_dir):
|
||||
for folder in [js_dir, style_dir]:
|
||||
if folder.exists():
|
||||
dest = build_dir / folder.name
|
||||
copytree(folder, dest)
|
||||
logging.info(f"[✓] Copied assets from {folder.name}")
|
||||
else:
|
||||
logging.warning(f"[~] Skipped missing folder: {folder.name}")
|
20
src/templates/footer.html
Normal file
@ -0,0 +1,20 @@
|
||||
<!-- Footer -->
|
||||
<div id="footer" class="content-wrapper navigation appear">
|
||||
<div class="footer-content">
|
||||
<ul class="social">
|
||||
<li class="social-item appear">
|
||||
<a href="{{ instagram_url }}"><i class="fa-brands fa-instagram"></i></a>
|
||||
</ul>
|
||||
<div class="nav-links">
|
||||
<ul class="nav-list">
|
||||
{{ menu_items }}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="inner bottom-link appear">
|
||||
<p class="navigation-subtitle appear">{{ copyright }}</p>
|
||||
<p class="navigation-bottom-link appear"><a href="{{ legal_link }}">{{ legal_label }}</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<button id="scrollToTop" class="scroll-up" aria-label="up">↑</button>
|
||||
<script type="text/javascript" src="/js/lazy.js?{{ build_date }}" defer></script>
|
4
src/templates/gallery.html
Normal file
@ -0,0 +1,4 @@
|
||||
<!-- Gallery -->
|
||||
<div id="gallery" class="gallery content-wrapper">
|
||||
{{ gallery_images }}
|
||||
</div>
|
44
src/templates/head.html
Normal file
@ -0,0 +1,44 @@
|
||||
<head>
|
||||
<!-- Meta -->
|
||||
<title>{{ title }}</title>
|
||||
<link rel="icon" href="/favicon.ico" type="image/x-icon">
|
||||
<link rel="icon" type="image/png" href="/img/favicon/favicon-32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="/img/favicon/favicon-96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="/img/favicon/favicon-128.png" sizes="128x128">
|
||||
<link rel="icon" type="image/png" href="/img/favicon/favicon-192.png" sizes="192x192">
|
||||
<!-- Android -->
|
||||
<link rel="shortcut icon" sizes="196x196" href="/img/favicon/favicon-196.png">
|
||||
<!-- iOS -->
|
||||
<link rel="apple-touch-icon" href="/img/favicon/favicon-152.png" sizes="152x152">
|
||||
<link rel="apple-touch-icon" href="/img/favicon/favicon-180.png" sizes="180x180">
|
||||
<meta charset="utf-8">
|
||||
<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' />
|
||||
<meta name="theme-color" content="{{ browser_color }}">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="description" content="{{ description }}">
|
||||
<meta name="keywords" content="{{ keywords }}">
|
||||
<meta name="author" content="{{ author }}">
|
||||
<link rel="canonical" href="{{ canonical }}"/>
|
||||
<!-- Ressources -->
|
||||
{{ google_fonts_link }}
|
||||
{{ font_preloads }}
|
||||
<link href="/style/style.css?{{ build_date }}" rel="stylesheet" type="text/css">
|
||||
<link rel="stylesheet" href="/style/colors.css?{{ build_date }}">
|
||||
<link rel="stylesheet" href="/style/fonts.css?{{ build_date }}">
|
||||
{{ theme_css }}
|
||||
<!-- Social -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta property="og:image" content="{{ thumbnail }}">
|
||||
<meta property="og:locale" content="en_US" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:title" content="Home - {{ title }}" />
|
||||
<meta property="og:description" content="{{ description }}" />
|
||||
<meta property="og:url" content="{{ canonical }}" />
|
||||
<meta property="og:site_name" content="{{ title }}" />
|
||||
<!-- Scripts -->
|
||||
<script src="https://kit.fontawesome.com/7c6bfe3c24.js" crossorigin="anonymous"></script>
|
||||
<script type="text/javascript" src="/js/lumeex.js?{{ build_date }}" defer></script>
|
||||
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
|
||||
</head>
|
29
src/templates/hero.html
Normal file
@ -0,0 +1,29 @@
|
||||
<!-- Hero -->
|
||||
<div id="hero">
|
||||
<div class="content-wrapper appear">
|
||||
<div class="section">
|
||||
<div class="hero-background">
|
||||
<div class="hero-title appear">
|
||||
<div>
|
||||
<h1>{{ title }}</h1>
|
||||
<p>{{ subtitle }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hero-menu navigation">
|
||||
<ul class="social">
|
||||
<li class="social-item appear">
|
||||
<a href="{{ instagram_url }}"><i class="fa-brands fa-instagram"></i></a>
|
||||
</ul>
|
||||
<div class="nav-links">
|
||||
<ul class="nav-list">
|
||||
{{ menu_items }}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="inner bottom-link appear">
|
||||
<p class="navigation-bottom-link appear"><a href="#gallery">↓</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
12
src/templates/legals.html
Normal file
@ -0,0 +1,12 @@
|
||||
<div id="legals" class="content-wrapper appear">
|
||||
<a href="/" class="back-button" aria-label="Go back to homepage">←</a>
|
||||
<div class="legals-content">
|
||||
<h1>Legals</h1>
|
||||
<h2>Hoster</h2>
|
||||
<p><strong>Name:</strong> {{ hoster_name }}</p>
|
||||
<p><strong>Adress:</strong> {{ hoster_adress }}</p>
|
||||
<p><strong>Contact:</strong> {{ hoster_contact }}</p>
|
||||
<h2>Intellectual Property</h2>
|
||||
{{ intellectual_property }}
|
||||
</div>
|
||||
</div>
|