Merge branch 'develop' of https://github.com/explosion/spaCy into develop

This commit is contained in:
Matthew Honnibal 2017-10-04 14:56:46 +02:00
commit b3a7082bf8
263 changed files with 8951 additions and 9440 deletions

4
.gitignore vendored
View File

@ -1,14 +1,12 @@
# spaCy # spaCy
spacy/data/ spacy/data/
corpora/ corpora/
models/ /models/
keys/ keys/
# Website # Website
website/www/ website/www/
website/_deploy.sh website/_deploy.sh
website/package.json
website/announcement.jade
website/.gitignore website/.gitignore
# Cython / C extensions # Cython / C extensions

View File

@ -11,7 +11,7 @@ __email__ = 'contact@explosion.ai'
__license__ = 'MIT' __license__ = 'MIT'
__release__ = False __release__ = False
__docs_models__ = 'https://spacy.io/docs/usage/models' __docs_models__ = 'https://alpha.spacy.io/usage/models'
__download_url__ = 'https://github.com/explosion/spacy-models/releases/download' __download_url__ = 'https://github.com/explosion/spacy-models/releases/download'
__compatibility__ = 'https://raw.githubusercontent.com/explosion/spacy-models/master/compatibility.json' __compatibility__ = 'https://raw.githubusercontent.com/explosion/spacy-models/master/compatibility.json'
__shortcuts__ = 'https://raw.githubusercontent.com/explosion/spacy-models/master/shortcuts.json' __shortcuts__ = 'https://raw.githubusercontent.com/explosion/spacy-models/master/shortcuts.json'

View File

@ -8,4 +8,5 @@ include _includes/_mixins
| does not exist! | does not exist!
h2.c-landing__title.u-heading-3.u-padding-small h2.c-landing__title.u-heading-3.u-padding-small
a(href="javascript:history.go(-1)") Click here to go back. +button(false, true, "secondary-light")(href="javascript:history.go(-1)")
| Click here to go back

View File

@ -3,24 +3,22 @@
"landing": true, "landing": true,
"logos": [ "logos": [
{ {
"quora": [ "https://www.quora.com", 150 ], "airbnb": [ "https://www.airbnb.com", 150, 45],
"chartbeat": [ "https://chartbeat.com", 200 ], "quora": [ "https://www.quora.com", 120, 34 ],
"duedil": [ "https://www.duedil.com", 150 ], "retriever": [ "https://www.retriever.no", 150, 33 ],
"stitchfix": [ "https://www.stitchfix.com", 190 ] "stitchfix": [ "https://www.stitchfix.com", 150, 18 ]
}, },
{ {
"wayblazer": [ "http://wayblazer.com", 200 ], "chartbeat": [ "https://chartbeat.com", 180, 25 ],
"indico": [ "https://indico.io", 150 ], "allenai": [ "https://allenai.org", 220, 37 ]
"chattermill": [ "https://chattermill.io", 175 ], }
"turi": [ "https://turi.com", 150 ], ],
"kip": [ "http://kipthis.com", 70 ] "features": [
},
{ {
"socrata": [ "https://www.socrata.com", 150 ], "thoughtworks": ["https://www.thoughtworks.com/radar/tools", 150, 28],
"cytora": [ "http://www.cytora.com", 125 ], "wapo": ["https://www.washingtonpost.com/news/wonk/wp/2016/05/18/googles-new-artificial-intelligence-cant-understand-these-sentences-can-you/", 100, 77],
"signaln": [ "http://signaln.com", 150 ], "venturebeat": ["https://venturebeat.com/2017/01/27/4-ai-startups-that-analyze-customer-reviews/", 150, 19],
"wonderflow": [ "http://www.wonderflow.co", 200 ], "microsoft": ["https://www.microsoft.com/developerblog/2016/09/13/training-a-classifier-for-relation-extraction-from-medical-literature/", 130, 28]
"synapsify": [ "http://www.gosynapsify.com", 150 ]
} }
] ]
}, },
@ -34,7 +32,24 @@
"landing": true "landing": true
}, },
"announcement" : { "styleguide": {
"title": "Important Announcement" "title": "Styleguide",
"sidebar": {
"Styleguide": { "": "styleguide" },
"Resources": {
"Website Source": "https://github.com/explosion/spacy/tree/master/website",
"Contributing Guide": "https://github.com/explosion/spaCy/blob/master/CONTRIBUTING.md"
}
},
"menu": {
"Introduction": "intro",
"Logo": "logo",
"Colors": "colors",
"Typography": "typography",
"Elements": "elements",
"Components": "components",
"Embeds": "embeds",
"Markup Reference": "markup"
}
} }
} }

View File

@ -11,12 +11,9 @@
"COMPANY": "Explosion AI", "COMPANY": "Explosion AI",
"COMPANY_URL": "https://explosion.ai", "COMPANY_URL": "https://explosion.ai",
"DEMOS_URL": "https://demos.explosion.ai", "DEMOS_URL": "https://demos.explosion.ai",
"MODELS_REPO": "explosion/spacy-models",
"SPACY_VERSION": "1.8", "SPACY_VERSION": "2.0",
"LATEST_NEWS": {
"url": "https://github.com/explosion/spaCy/releases/tag/v2.0.0-alpha",
"title": "Test spaCy v2.0.0 alpha!"
},
"SOCIAL": { "SOCIAL": {
"twitter": "spacy_io", "twitter": "spacy_io",
@ -27,25 +24,23 @@
}, },
"NAVIGATION": { "NAVIGATION": {
"Home": "/", "Usage": "/usage",
"Usage": "/docs/usage", "Models": "/models",
"Reference": "/docs/api", "API": "/api"
"Demos": "/docs/usage/showcase",
"Blog": "https://explosion.ai/blog"
}, },
"FOOTER": { "FOOTER": {
"spaCy": { "spaCy": {
"Usage": "/docs/usage", "Usage": "/usage",
"API Reference": "/docs/api", "Models": "/models",
"Tutorials": "/docs/usage/tutorials", "API Reference": "/api",
"Showcase": "/docs/usage/showcase" "Resources": "/usage/resources"
}, },
"Support": { "Support": {
"Issue Tracker": "https://github.com/explosion/spaCy/issues", "Issue Tracker": "https://github.com/explosion/spaCy/issues",
"StackOverflow": "http://stackoverflow.com/questions/tagged/spacy", "StackOverflow": "http://stackoverflow.com/questions/tagged/spacy",
"Reddit usergroup": "https://www.reddit.com/r/spacynlp/", "Reddit Usergroup": "https://www.reddit.com/r/spacynlp/",
"Gitter chat": "https://gitter.im/explosion/spaCy" "Gitter Chat": "https://gitter.im/explosion/spaCy"
}, },
"Connect": { "Connect": {
"Twitter": "https://twitter.com/spacy_io", "Twitter": "https://twitter.com/spacy_io",
@ -74,21 +69,11 @@
{"id": "venv", "title": "virtualenv", "help": "Use a virtual environment and install spaCy into a user directory" }, {"id": "venv", "title": "virtualenv", "help": "Use a virtual environment and install spaCy into a user directory" },
{"id": "gpu", "title": "GPU", "help": "Run spaCy on GPU to make it faster. Requires an NVDIA graphics card with CUDA 2+. See section below for more info."}] {"id": "gpu", "title": "GPU", "help": "Run spaCy on GPU to make it faster. Requires an NVDIA graphics card with CUDA 2+. See section below for more info."}]
}, },
{ "id": "model", "title": "Models", "multiple": true, "options": [ { "id": "model", "title": "Models", "multiple": true }
{ "id": "en", "title": "English", "meta": "50MB" },
{ "id": "de", "title": "German", "meta": "645MB" },
{ "id": "fr", "title": "French", "meta": "1.33GB" },
{ "id": "es", "title": "Spanish", "meta": "377MB"}]
}
], ],
"QUICKSTART_MODELS": [ "QUICKSTART_MODELS": [
{ "id": "lang", "title": "Language", "options": [ { "id": "lang", "title": "Language"},
{ "id": "en", "title": "English", "checked": true },
{ "id": "de", "title": "German" },
{ "id": "fr", "title": "French" },
{ "id": "es", "title": "Spanish" }]
},
{ "id": "load", "title": "Loading style", "options": [ { "id": "load", "title": "Loading style", "options": [
{ "id": "spacy", "title": "Use spacy.load()", "checked": true, "help": "Use spaCy's built-in loader to load the model by name." }, { "id": "spacy", "title": "Use spacy.load()", "checked": true, "help": "Use spaCy's built-in loader to load the model by name." },
{ "id": "module", "title": "Import as module", "help": "Import the model explicitly as a Python module." }] { "id": "module", "title": "Import as module", "help": "Import the model explicitly as a Python module." }]
@ -98,50 +83,15 @@
} }
], ],
"MODELS": {
"en": [
{ "id": "en_core_web_sm", "lang": "English", "feats": [1, 1, 1, 1], "size": "50 MB", "license": "CC BY-SA", "def": true },
{ "id": "en_core_web_md", "lang": "English", "feats": [1, 1, 1, 1], "size": "1 GB", "license": "CC BY-SA" },
{ "id": "en_depent_web_md", "lang": "English", "feats": [1, 1, 1, 0], "size": "328 MB", "license": "CC BY-SA" },
{ "id": "en_vectors_glove_md", "lang": "English", "feats": [1, 0, 0, 1], "size": "727 MB", "license": "CC BY-SA" }
],
"de": [
{ "id": "de_core_news_md", "lang": "German", "feats": [1, 1, 1, 1], "size": "645 MB", "license": "CC BY-SA" }
],
"fr": [
{ "id": "fr_depvec_web_lg", "lang": "French", "feats": [1, 1, 0, 1], "size": "1.33 GB", "license": "CC BY-NC" }
],
"es": [
{ "id": "es_core_web_md", "lang": "Spanish", "feats": [1, 1, 1, 1], "size": "377 MB", "license": "CC BY-SA"}
]
},
"EXAMPLE_SENTENCES": {
"en": "This is a sentence.",
"de": "Dies ist ein Satz.",
"fr": "C'est une phrase.",
"es": "Esto es una frase."
},
"ALPHA": true, "ALPHA": true,
"V_CSS": "1.6", "V_CSS": "2.0",
"V_JS": "1.2", "V_JS": "2.0",
"DEFAULT_SYNTAX": "python", "DEFAULT_SYNTAX": "python",
"ANALYTICS": "UA-58931649-1", "ANALYTICS": "UA-58931649-1",
"MAILCHIMP": { "MAILCHIMP": {
"user": "spacy.us12", "user": "spacy.us12",
"id": "83b0498b1e7fa3c91ce68c3f1", "id": "83b0498b1e7fa3c91ce68c3f1",
"list": "89ad33e698" "list": "89ad33e698"
},
"BADGES": {
"pipy": {
"badge": "https://img.shields.io/pypi/v/spacy.svg?style=flat-square",
"link": "https://pypi.python.org/pypi/spacy"
},
"conda": {
"badge": "https://anaconda.org/conda-forge/spacy/badges/version.svg",
"link": "https://anaconda.org/conda-forge/spacy"
}
} }
} }
} }

View File

@ -1,8 +1,6 @@
//- 💫 INCLUDES > FOOTER //- 💫 INCLUDES > FOOTER
include _mixins footer.o-footer.u-text
footer.o-footer.u-text.u-border-dotted
+grid.o-content +grid.o-content
each group, label in FOOTER each group, label in FOOTER
+grid-col("quarter") +grid-col("quarter")
@ -13,18 +11,18 @@ footer.o-footer.u-text.u-border-dotted
li li
+a(url)=item +a(url)=item
if SECTION != "docs" if SECTION == "index"
+grid-col("quarter") +grid-col("quarter")
include _newsletter include _newsletter
if SECTION == "docs" if SECTION != "index"
.o-content.o-block.u-border-dotted .o-content.o-block.u-border-dotted
include _newsletter include _newsletter
.o-inline-list.u-text-center.u-text-tiny.u-color-subtle .o-inline-list.u-text-center.u-text-tiny.u-color-subtle
span © 2016-#{new Date().getFullYear()} #[+a(COMPANY_URL, true)=COMPANY] span © 2016-#{new Date().getFullYear()} #[+a(COMPANY_URL, true)=COMPANY]
+a(COMPANY_URL, true) +a(COMPANY_URL, true)(aria-label="Explosion AI")
+svg("graphics", "explosion", 45).o-icon.u-color-theme.u-grayscale +icon("explosion", 45).o-icon.u-color-theme.u-grayscale
+a(COMPANY_URL + "/legal", true) Legal / Imprint +a(COMPANY_URL + "/legal", true) Legal / Imprint

View File

@ -1,35 +1,71 @@
//- 💫 INCLUDES > FUNCTIONS //- 💫 INCLUDES > FUNCTIONS
//- More descriptive variables for current.path and current.source //- Descriptive variables, available in the global scope
- CURRENT = current.source - CURRENT = current.source
- SECTION = current.path[0] - SECTION = current.path[0]
- SUBSECTION = current.path[1] - LANGUAGES = public.models._data.LANGUAGES
- MODELS = public.models._data.MODELS
- CURRENT_MODELS = MODELS[current.source] || []
- MODEL_COUNT = Object.keys(MODELS).map(m => Object.keys(MODELS[m]).length).reduce((a, b) => a + b)
- MODEL_LANG_COUNT = Object.keys(MODELS).length
- LANG_COUNT = Object.keys(LANGUAGES).length
- MODEL_META = public.models._data.MODEL_META
- MODEL_LICENSES = public.models._data.MODEL_LICENSES
- MODEL_ACCURACY = public.models._data.MODEL_ACCURACY
- EXAMPLE_SENTENCES = public.models._data.EXAMPLE_SENTENCES
- IS_PAGE = (SECTION != "index") && !landing
- IS_MODELS = (SECTION == "models" && LANGUAGES[current.source])
- HAS_MODELS = IS_MODELS && CURRENT_MODELS.length
//- Add prefixes to items of an array (for modifier CSS classes) //- Add prefixes to items of an array (for modifier CSS classes)
array - [array] list of class names or options, e.g. ["foot"]
prefix - [string] prefix to add to each class, e.g. "c-table__row"
RETURNS - [array] list of modified class names
- function prefixArgs(array, prefix) { - function prefixArgs(array, prefix) {
- return array.map(function(arg) { - return array.map(arg => prefix + '--' + arg).join(' ');
- return prefix + '--' + arg; - }
- }).join(' ');
//- Convert API paths (semi-temporary fix for renamed sections)
path - [string] link path supplied to +api mixin
RETURNS - [string] new link path to correct location
- function convertAPIPath(path) {
- if (path.startsWith('spacy#') || path.startsWith('displacy#') || path.startsWith('util#')) {
- var comps = path.split('#');
- return "top-level#" + comps[0] + '.' + comps[1];
- }
- else if (path.startsWith('cli#')) {
- return "top-level#" + path.split('#')[1];
- }
- return path;
- }
//- Get model components from ID. Components can then be looked up in LANGUAGES
and MODEL_META respectively, to get their human-readable form.
id - [string] model ID, e.g. "en_core_web_sm"
RETURNS - [object] object keyed by components lang, type, genre and size
- function getModelComponents(id) {
- var comps = id.split('_');
- return {'lang': comps[0], 'type': comps[1], 'genre': comps[2], 'size': comps[3]}
- } - }
//- Generate GitHub links //- Generate GitHub links
repo - [string] name of repo owned by explosion
filepath - [string] logical path to file relative to repository root
branch - [string] optional branch, defaults to "master"
RETURNS - [string] the correct link to the file on GitHub
- function gh(repo, filepath, branch) { - function gh(repo, filepath, branch) {
- var branch = ALPHA ? 'develop' : branch - var branch = ALPHA ? 'develop' : branch
- return 'https://github.com/' + SOCIAL.github + '/' + repo + (filepath ? '/blob/' + (branch || 'master') + '/' + filepath : '' ); - return 'https://github.com/' + SOCIAL.github + '/' + (repo || '') + (filepath ? '/blob/' + (branch || 'master') + '/' + filepath : '' );
- }
//- Get social images
- function getSocialImg() {
- var base = SITE_URL + '/assets/img/social/preview_'
- var image = ALPHA ? 'alpha' : 'default'
- if (preview) image = preview
- else if (SECTION == 'docs' && !ALPHA) image = 'docs'
- return base + image + '.jpg'
- } - }

View File

@ -1,5 +1,13 @@
//- 💫 MIXINS > BASE //- 💫 MIXINS > BASE
//- Section
id - [string] anchor assigned to section (used for breadcrumb navigation)
mixin section(id)
section.o-section(id="section-" + id data-section=id)
block
//- Aside wrapper //- Aside wrapper
label - [string] aside label label - [string] aside label
@ -11,34 +19,26 @@ mixin aside-wrapper(label)
block block
//- Date
input - [string] date in the format YYYY-MM-DD
mixin date(input) //- SVG from map (uses embedded SVG sprite)
- var date = new Date(input)
- var months = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ]
time(datetime=JSON.parse(JSON.stringify(date)))&attributes(attributes)=months[date.getMonth()] + ' ' + date.getDate() + ', ' + date.getFullYear()
//- SVG from map
file - [string] SVG file name in /assets/img/
name - [string] SVG symbol id name - [string] SVG symbol id
width - [integer] width in px width - [integer] width in px
height - [integer] height in px (default: same as width) height - [integer] height in px (default: same as width)
mixin svg(file, name, width, height) mixin svg(name, width, height)
svg(aria-hidden="true" viewBox="0 0 #{width} #{height || width}" width=width height=(height || width))&attributes(attributes) svg(aria-hidden="true" viewBox="0 0 #{width} #{height || width}" width=width height=(height || width))&attributes(attributes)
use(xlink:href="/assets/img/#{file}.svg##{name}") use(xlink:href="#svg_#{name}")
//- Icon //- Icon
name - [string] icon name, should be SVG symbol ID name - [string] icon name (will be used as symbol id: #svg_{name})
size - [integer] icon width and height (default: 20) width - [integer] icon width (default: 20)
height - [integer] icon height (defaults to width)
mixin icon(name, size) mixin icon(name, width, height)
- var size = size || 20 - var width = width || 20
+svg("icons", name, size).o-icon(style="min-width: #{size}px")&attributes(attributes) - var height = height || width
+svg(name, width, height).o-icon(style="min-width: #{width}px")&attributes(attributes)
//- Pro/Con/Neutral icon //- Pro/Con/Neutral icon
@ -46,8 +46,8 @@ mixin icon(name, size)
size - [integer] icon size (optional) size - [integer] icon size (optional)
mixin procon(icon, size) mixin procon(icon, size)
- colors = { pro: "green", con: "red", neutral: "yellow" } - colors = { pro: "green", con: "red", neutral: "subtle" }
+icon(icon, size)(class="u-color-#{colors[icon] || 'subtle'}" aria-label=icon)&attributes(attributes) +icon("circle", size || 16)(class="u-color-#{colors[icon] || 'subtle'}" aria-label=icon)&attributes(attributes)
//- Headlines Helper Mixin //- Headlines Helper Mixin
@ -80,8 +80,7 @@ mixin headline(level)
mixin permalink(id) mixin permalink(id)
if id if id
a.u-permalink(id=id href="##{id}") a.u-permalink(href="##{id}")
+icon("anchor").u-permalink__icon
block block
else else
@ -109,7 +108,7 @@ mixin quickstart(groups, headline, description, hide_results)
.c-quickstart__fields .c-quickstart__fields
for option in group.options for option in group.options
input.c-quickstart__input(class="c-quickstart__input--" + (group.input_style ? group.input_style : group.multiple ? "check" : "radio") type=group.multiple ? "checkbox" : "radio" name=group.id id="qs-#{option.id}" value=option.id checked=option.checked) input.c-quickstart__input(class="c-quickstart__input--" + (group.input_style ? group.input_style : group.multiple ? "check" : "radio") type=group.multiple ? "checkbox" : "radio" name=group.id id="qs-#{option.id}" value=option.id checked=option.checked)
label.c-quickstart__label(for="qs-#{option.id}")!=option.title label.c-quickstart__label.u-text-tiny(for="qs-#{option.id}")!=option.title
if option.meta if option.meta
| #[span.c-quickstart__label__meta (#{option.meta})] | #[span.c-quickstart__label__meta (#{option.meta})]
if option.help if option.help
@ -122,12 +121,10 @@ mixin quickstart(groups, headline, description, hide_results)
code.c-code-block__content.c-quickstart__code(data-qs-results="") code.c-code-block__content.c-quickstart__code(data-qs-results="")
block block
.c-quickstart__info.u-text-tiny.o-block.u-text-right
| Like this widget? Check out #[+a("https://github.com/ines/quickstart").u-link quickstart.js]!
//- Quickstart code item //- Quickstart code item
data [object] - Rendering conditions (keyed by option group ID, value: option) data - [object] Rendering conditions (keyed by option group ID, value: option)
style - [string] modifier ID for line style
mixin qs(data, style) mixin qs(data, style)
- args = {} - args = {}
@ -148,6 +145,13 @@ mixin terminal(label)
+code.x-terminal__code +code.x-terminal__code
block block
//- Chart.js
id - [string] chart ID, will be assigned as #chart_{id}
mixin chart(id)
figure.o-block&attributes(attributes)
canvas(id="chart_#{id}" width="800" height="400" style="max-width: 100%")
//- Gitter chat button and widget //- Gitter chat button and widget
button - [string] text shown on button button - [string] text shown on button
@ -156,26 +160,24 @@ mixin terminal(label)
mixin gitter(button, label) mixin gitter(button, label)
aside.js-gitter.c-chat.is-collapsed(data-title=(label || button)) aside.js-gitter.c-chat.is-collapsed(data-title=(label || button))
button.js-gitter-button.c-chat__button.u-text-small button.js-gitter-button.c-chat__button.u-text-tag
+icon("chat").o-icon--inline +icon("chat", 16).o-icon--inline
!=button !=button
//- Badge //- Badge
name - [string] "pipy" or "conda" image - [string] path to badge image
url - [string] badge link
mixin badge(name) mixin badge(image, url)
- site = BADGES[name] +a(url).u-padding-small.u-hide-link&attributes(attributes)
img.o-badge(src=image alt=url height="20")
if site
+a(site.link).u-padding-small
img(src=site.badge alt="{name} version" height="20")
//- Logo //- spaCy logo
mixin logo() mixin logo()
+svg("graphics", "spacy", 675, 215).o-logo&attributes(attributes) +svg("spacy", 675, 215).o-logo&attributes(attributes)
//- Landing //- Landing
@ -186,18 +188,56 @@ mixin landing-header()
.c-landing__content .c-landing__content
block block
mixin landing-banner(headline, label)
.c-landing__banner.u-padding.o-block.u-color-light
+grid.c-landing__banner__content.o-no-block
+grid-col("third")
h3.u-heading.u-heading-1
if label
div
span.u-text-label.u-text-label--light=label
!=headline
mixin landing-badge(url, graphic, alt, size) +grid-col("two-thirds").c-landing__banner__text
+a(url)(aria-label=alt title=alt).c-landing__badge block
+svg("graphics", graphic, size || 225)
mixin landing-logos(title, logos)
.o-content.u-text-center&attributes(attributes)
h3.u-heading.u-text-label.u-color-dark=title
each row, i in logos
- var is_last = i == logos.length - 1
+grid("center").o-inline-list.o-no-block(class=is_last ? "o-no-block" : null)
each details, name in row
+a(details[0]).u-padding-medium
+icon(name, details[1], details[2])
if is_last
block
//- Under construction (temporary) //- Under construction (temporary)
Marks sections that still need to be completed for the v2.0 release. Marks sections that still need to be completed for the v2.0 release.
mixin under-construction() mixin under-construction()
+infobox("🚧 Under construction") +infobox("Under construction", "🚧")
| This section is still being written and will be updated for the v2.0 | This section is still being written and will be updated for the v2.0
| release. Is there anything that you think should definitely mentioned or | release. Is there anything that you think should definitely mentioned or
| explained here? Any examples you'd like to see? #[strong Let us know] | explained here? Any examples you'd like to see? #[strong Let us know]
| on the #[+a(gh("spacy") + "/issues/1105") v2.0 alpha thread] on GitHub! | on the #[+a(gh("spacy") + "/issues/1105") v2.0 alpha thread] on GitHub!
//- Alpha infobox (temporary)
Added in the templates to notify user that they're visiting the alpha site.
mixin alpha-info()
+infobox("You are viewing the spaCy v2.0.0 alpha docs", "⚠️")
strong This page is part of the alpha documentation for spaCy v2.0.
| It does not reflect the state of the latest stable release.
| Because v2.0 is still under development, the implementation
| may differ from the intended state described here. See the
| #[+a(gh("spaCy") + "/releases/tag/v2.0.0-alpha") release notes]
| for details on how to install and test the new version. To
| read the official docs for spaCy v1.x,
| #[+a("https://spacy.io/docs") go here].

View File

@ -8,11 +8,15 @@ include _mixins-base
level - [integer] headline level, corresponds to h1, h2, h3 etc. level - [integer] headline level, corresponds to h1, h2, h3 etc.
id - [string] unique identifier, creates permalink (optional) id - [string] unique identifier, creates permalink (optional)
mixin h(level, id) mixin h(level, id, source)
+headline(level).u-heading&attributes(attributes) +headline(level).u-heading(id=id)&attributes(attributes)
+permalink(id) +permalink(id)
block block
if source
+button(gh("spacy", source), false, "secondary", "small").u-nowrap.u-float-right
span Source #[+icon("code", 14).o-icon--inline]
//- External links //- External links
url - [string] link href url - [string] link href
@ -38,21 +42,23 @@ mixin src(url)
//- API link (with added tag and automatically generated path) //- API link (with added tag and automatically generated path)
path - [string] path to API docs page relative to /docs/api/ path - [string] path to API docs page relative to /api/
mixin api(path) mixin api(path)
+a("/docs/api/" + path, true)(target="_self").u-no-border.u-inline-block.u-nowrap - path = convertAPIPath(path)
+a("/api/" + path, true)(target="_self").u-no-border.u-inline-block.u-nowrap
block block
| #[+icon("book", 18).o-icon--inline.u-color-theme] | #[+icon("book", 16).o-icon--inline.u-color-theme]
//- Help icon with tooltip //- Help icon with tooltip
tooltip - [string] Tooltip text tooltip - [string] Tooltip text
icon_size - [integer] Optional size of help icon in px.
mixin help(tooltip) mixin help(tooltip, icon_size)
span(data-tooltip=tooltip)&attributes(attributes) span(data-tooltip=tooltip)&attributes(attributes)
+icon("help", 16).i-icon--inline +icon("help", icon_size || 16).o-icon--inline
//- Aside for text //- Aside for text
@ -68,24 +74,43 @@ mixin aside(label)
label - [string] aside title (optional or false for no label) label - [string] aside title (optional or false for no label)
language - [string] language for syntax highlighting (default: "python") language - [string] language for syntax highlighting (default: "python")
supports basic relevant languages available for PrismJS supports basic relevant languages available for PrismJS
prompt - [string] prompt displayed before first line, e.g. "$"
mixin aside-code(label, language) mixin aside-code(label, language, prompt)
+aside-wrapper(label) +aside-wrapper(label)
+code(false, language).o-no-block +code(false, language, prompt).o-no-block
block block
//- Infobox //- Infobox
label - [string] infobox title (optional or false for no title) label - [string] infobox title (optional or false for no title)
emoji - [string] optional emoji displayed before the title, necessary as
argument to be able to wrap it for spacing
mixin infobox(label) mixin infobox(label, emoji)
aside.o-box.o-block.u-text-small aside.o-box.o-block.u-text-small
if label if label
h3.u-text-label.u-color-theme=label h3.u-heading.u-text-label.u-color-theme
if emoji
span.o-emoji=emoji
| #{label}
block block
//- Logos displayed in the top corner of some infoboxes
logos - [array] List of icon ID, width, height and link.
mixin infobox-logos(...logos)
.o-box__logos.u-text-right.u-float-right
for logo in logos
if logo[3]
| #[+a(logo[3]).u-inline-block.u-hide-link.u-padding-small #[+icon(logo[0], logo[1], logo[2]).u-color-dark]]
else
| #[+icon(logo[0], logo[1], logo[2]).u-color-dark]
//- Link button //- Link button
url - [string] link href url - [string] link href
trusted - [boolean] if not set / false, rel="noopener nofollow" is added trusted - [boolean] if not set / false, rel="noopener nofollow" is added
@ -94,7 +119,7 @@ mixin infobox(label)
see assets/css/_components/_buttons.sass see assets/css/_components/_buttons.sass
mixin button(url, trusted, ...style) mixin button(url, trusted, ...style)
- external = url.includes("http") - external = url && url.includes("http")
a.c-button.u-text-label(href=url class=prefixArgs(style, "c-button") role="button" target=external ? "_blank" : null rel=external && !trusted ? "noopener nofollow" : null)&attributes(attributes) a.c-button.u-text-label(href=url class=prefixArgs(style, "c-button") role="button" target=external ? "_blank" : null rel=external && !trusted ? "noopener nofollow" : null)&attributes(attributes)
block block
@ -103,31 +128,33 @@ mixin button(url, trusted, ...style)
label - [string] aside title (optional or false for no label) label - [string] aside title (optional or false for no label)
language - [string] language for syntax highlighting (default: "python") language - [string] language for syntax highlighting (default: "python")
supports basic relevant languages available for PrismJS supports basic relevant languages available for PrismJS
prompt - [string] prompt or icon to display next to code block, (mostly used for old/new) prompt - [string] prompt displayed before first line, e.g. "$"
height - [integer] optional height to clip code block to height - [integer] optional height to clip code block to
icon - [string] icon displayed next to code block (e.g. "accept" for new code)
wrap - [boolean] wrap text and disable horizontal scrolling
mixin code(label, language, prompt, height) mixin code(label, language, prompt, height, icon, wrap)
pre.c-code-block.o-block(class="lang-#{(language || DEFAULT_SYNTAX)}" class=icon ? "c-code-block--has-icon" : null style=height ? "height: #{height}px" : null)&attributes(attributes) pre.c-code-block.o-block(class="lang-#{(language || DEFAULT_SYNTAX)}" class=icon ? "c-code-block--has-icon" : null style=height ? "height: #{height}px" : null)&attributes(attributes)
if label if label
h4.u-text-label.u-text-label--dark=label h4.u-text-label.u-text-label--dark=label
- var icon = (prompt == 'accept' || prompt == 'reject') - var icon = icon || (prompt == 'accept' || prompt == 'reject')
if icon if icon
- var classes = {'accept': 'u-color-green', 'reject': 'u-color-red'} - var classes = {'accept': 'u-color-green', 'reject': 'u-color-red'}
.c-code-block__icon(class=classes[icon] || null class=classes[icon] ? "c-code-block__icon--border" : null) .c-code-block__icon(class=classes[icon] || null class=classes[icon] ? "c-code-block__icon--border" : null)
+icon(icon, 18) +icon(icon, 18)
code.c-code-block__content(data-prompt=icon ? null : prompt) code.c-code-block__content(class=wrap ? "u-wrap" : null data-prompt=icon ? null : prompt)
block block
//- Code blocks to display old/new versions //- Code blocks to display old/new versions
mixin code-old() mixin code-old()
+code(false, false, "reject").o-block-small +code(false, false, false, false, "reject").o-block-small
block block
mixin code-new() mixin code-new()
+code(false, false, "accept").o-block-small +code(false, false, false, false, "accept").o-block-small
block block
@ -138,12 +165,33 @@ mixin code-new()
mixin codepen(slug, height, default_tab) mixin codepen(slug, height, default_tab)
figure.o-block(style="min-height: #{height}px")&attributes(attributes) figure.o-block(style="min-height: #{height}px")&attributes(attributes)
.codepen(data-height=height data-theme-id="26467" data-slug-hash=slug data-default-tab=(default_tab || "result") data-embed-version="2" data-user=SOCIAL.codepen) .codepen(data-height=height data-theme-id="31335" data-slug-hash=slug data-default-tab=(default_tab || "result") data-embed-version="2" data-user=SOCIAL.codepen)
+a("https://codepen.io/" + SOCIAL.codepen + "/" + slug) View on CodePen +a("https://codepen.io/" + SOCIAL.codepen + "/" + slug) View on CodePen
script(async src="https://assets.codepen.io/assets/embed/ei.js") script(async src="https://assets.codepen.io/assets/embed/ei.js")
//- GitHub embed
repo - [string] repository owned by explosion organization
file - [string] logical path to file, relative to repository root
alt_file - [string] alternative file path used in footer and link button
height - [integer] height of code preview in px
mixin github(repo, file, alt_file, height)
- var branch = ALPHA ? "develop" : "master"
- var height = height || 250
figure.o-block
pre.c-code-block.o-block-small(class="lang-#{(language || DEFAULT_SYNTAX)}" style="height: #{height}px; min-height: #{height}px")
code.c-code-block__content(data-gh-embed="#{repo}/#{branch}/#{file}")
footer.o-grid.u-text
.o-block-small.u-flex-full #[+icon("github")] #[code=repo + '/' + (alt_file || file)]
div
+button(gh(repo, alt_file || file), false, "primary", "small") View on GitHub
//- Images / figures //- Images / figures
url - [string] url or path to image url - [string] url or path to image
width - [integer] image width in px, for better rendering (default: 500) width - [integer] image width in px, for better rendering (default: 500)
@ -168,10 +216,26 @@ mixin image-caption()
block block
//- Label //- Graphic or illustration with button
original - [string] Path to original image
mixin graphic(original)
+image
block
if original
.u-text-right
+button(original, false, "secondary", "small") View large graphic
//- Labels
mixin label() mixin label()
.u-text-label.u-color-subtle&attributes(attributes) .u-text-label.u-color-dark&attributes(attributes)
block
mixin label-inline()
strong.u-text-label.u-color-dark&attributes(attributes)
block block
@ -188,8 +252,10 @@ mixin tag()
mixin tag-model(...capabs) mixin tag-model(...capabs)
- var intro = "To use this functionality, spaCy needs a model to be installed" - var intro = "To use this functionality, spaCy needs a model to be installed"
- var ext = capabs.length ? " that supports the following capabilities: " + capabs.join(', ') : "" - var ext = capabs.length ? " that supports the following capabilities: " + capabs.join(', ') : ""
+tag Requires model
+help(intro + ext + ".").u-color-theme span.u-nowrap
+tag Needs model
+help(intro + ext + ".").u-color-theme
//- "New" tag to label features new in a specific version //- "New" tag to label features new in a specific version
@ -219,15 +285,9 @@ mixin list(type, start)
//- List item (only used within +list) //- List item (only used within +list)
mixin item(procon) mixin item()
if procon li.c-list__item&attributes(attributes)
li&attributes(attributes) block
+procon(procon).c-list__icon
block
else
li.c-list__item&attributes(attributes)
block
//- Table //- Table
@ -237,9 +297,9 @@ mixin table(head)
table.c-table.o-block&attributes(attributes) table.c-table.o-block&attributes(attributes)
if head if head
+row +row("head")
each column in head each column in head
th.c-table__head-cell.u-text-label=column +head-cell=column
block block
@ -251,10 +311,11 @@ mixin row(...style)
block block
//- Footer table row (only ued within +table)
mixin footrow() //- Header table cell (only used within +row)
tr.c-table__row.c-table__row--foot&attributes(attributes)
mixin head-cell()
th.c-table__head-cell.u-text-label&attributes(attributes)
block block
@ -284,71 +345,58 @@ mixin grid-col(width)
//- Card (only used within +grid) //- Card (only used within +grid)
title - [string] card title title - [string] card title
details - [object] url, image, author, description, tags etc. url - [string] link for card
(see /docs/usage/_data.json) author - [string] optional author, displayed as byline at the bottom
icon - [string] optional ID of icon displayed with card
width - [string] optional width of grid column, defaults to "half"
mixin card(title, details) mixin card(title, url, author, icon, width)
+grid-col("half").o-card.u-text&attributes(attributes) +grid-col(width || "half").o-box.o-grid.o-grid--space.u-text&attributes(attributes)
if details.image +a(url)
+a(details.url).o-block-small h4.u-heading.u-text-label
img(src=details.image alt=title width="300" role="presentation") if icon
+icon(icon, 25).u-float-right
if title if title
+a(details.url) span.u-color-dark=title
+h(3)=title .o-block-small.u-text-small
block
if details.author if author
.u-text-small.u-color-subtle by #{details.author} .u-color-subtle.u-text-tiny by #{author}
if details.description || details.tags
ul
if details.description
li=details.description
if details.tags
li
each tag in details.tags
span.u-text-tag #{tag}
|  
block
//- Simpler card list item (only used within +list) //- Table of contents, to be used with +item mixins for links
title - [string] card title col - [string] width of column (see +grid-col)
details - [object] url, image, author, description, tags etc.
(see /docs/usage/_data.json)
mixin card-item(title, details) mixin table-of-contents(col)
+item&attributes(attributes) +grid-col(col || "half")
+a(details.url)=title +infobox
+label.o-block-small Table of contents
if details.description +list("numbers").u-text-small.o-no-block
br block
span=details.description
if details.author
br
span.u-text-small.u-color-subtle by #{details.author}
//- Table row for models table //- Bibliography
id - [string] ID of bibliography component, for anchor links. Can be used if
there's more than one bibliography on one page.
mixin model-row(name, lang, procon, size, license, default_model, divider) mixin bibliography(id)
- var licenses = { "CC BY-SA": "https://creativecommons.org/licenses/by-sa/3.0/", "CC BY-NC": "https://creativecommons.org/licenses/by-nc/3.0/" } section(id=id || "bibliography")
+infobox
+label.o-block-small Bibliography
+list("numbers").u-text-small.o-no-block
block
+row(divider ? "divider": null)
+cell #[code=name] //- Footnote
if default_model id - [string / integer] ID of footnote.
| #[span.u-color-theme(title="default model") #[+icon("star", 16)]] bib_id - [string] ID of bibliography component, defaults to "bibliography".
+cell=lang tooltip - [string] optional text displayed as tooltip
each icon in procon
+cell.u-text-center #[+procon(icon ? "pro" : "con")] mixin fn(id, bib_id, tooltip)
+cell.u-text-right=size sup.u-padding-small(id="bib" + id data-tooltip=tooltip)
+cell span.u-text-tag
if license in licenses +a("#" + (bib_id || "bibliography")).u-hide-link #{id}
+a(licenses[license])=license
//- Table rows for annotation specs //- Table rows for annotation specs
@ -383,14 +431,3 @@ mixin annotation-row(annots, style)
else else
+cell=cell +cell=cell
block block
//- Table of contents, to be used with +item mixins for links
col - [string] width of column (see +grid-col)
mixin table-of-contents(col)
+grid-col(col || "half")
+infobox
+label.o-block-small Table of contents
+list("numbers").u-text-small.o-no-block
block

View File

@ -1,19 +1,15 @@
//- 💫 INCLUDES > TOP NAVIGATION //- 💫 INCLUDES > TOP NAVIGATION
include _mixins
nav.c-nav.u-text.js-nav(class=landing ? "c-nav--theme" : null) nav.c-nav.u-text.js-nav(class=landing ? "c-nav--theme" : null)
a(href='/') #[+logo] a(href="/" aria-label=SITENAME) #[+logo]
if SUBSECTION != "index"
.u-text-label.u-padding-small.u-hidden-xs=SUBSECTION
ul.c-nav__menu ul.c-nav__menu
- var NAV = ALPHA ? { "Usage": "/docs/usage", "Reference": "/docs/api" } : NAVIGATION - var current_url = '/' + current.path[0]
each url, item in NAVIGATION
each url, item in NAV li.c-nav__menu__item(class=(current_url == url) ? "is-active" : null)
li.c-nav__menu__item(class=(url == "/") ? "u-hidden-xs" : null)
+a(url)=item +a(url)=item
li.c-nav__menu__item li.c-nav__menu__item.u-hidden-xs
+a(gh("spaCy"))(aria-label="GitHub").u-hidden-xs #[+icon("github", 20)] +a(gh("spaCy"))(aria-label="GitHub") #[+icon("github", 20)]
progress.c-progress.js-progress(value="0" max="1")

View File

@ -1,6 +1,6 @@
//- 💫 INCLUDES > NEWSLETTER //- 💫 INCLUDES > NEWSLETTER
ul.o-block ul.o-block-small
li.u-text-label.u-color-subtle Stay in the loop! li.u-text-label.u-color-subtle Stay in the loop!
li Receive updates about new releases, tutorials and more. li Receive updates about new releases, tutorials and more.
@ -10,7 +10,6 @@ form.o-grid#mc-embedded-subscribe-form(action="//#{MAILCHIMP.user}.list-manage.c
div(style="position: absolute; left: -5000px;" aria-hidden="true") div(style="position: absolute; left: -5000px;" aria-hidden="true")
input(type="text" name="b_#{MAILCHIMP.id}_#{MAILCHIMP.list}" tabindex="-1" value="") input(type="text" name="b_#{MAILCHIMP.id}_#{MAILCHIMP.list}" tabindex="-1" value="")
.o-grid-col.u-border.u-padding-small .o-grid-col.o-grid.o-grid--nowrap.o-field.u-padding-small
input#mce-EMAIL.u-text(type="email" name="EMAIL" placeholder="Your email") input#mce-EMAIL.o-field__input.u-text(type="email" name="EMAIL" placeholder="Your email" aria-label="Your email")
button#mc-embedded-subscribe.o-field__button.u-text-label.u-color-theme.u-nowrap(type="submit" name="subscribe") Sign up
button#mc-embedded-subscribe.u-text-label.u-color-theme(type="submit" name="subscribe") Sign up

View File

@ -1,47 +1,56 @@
//- 💫 INCLUDES > DOCS PAGE TEMPLATE //- 💫 INCLUDES > DOCS PAGE TEMPLATE
- sidebar_content = (SUBSECTION != "index") ? public.docs[SUBSECTION]._data.sidebar : public.docs._data.sidebar || FOOTER - sidebar_content = (public[SECTION] ? public[SECTION]._data.sidebar : public._data[SECTION] ? public._data[SECTION].sidebar : false) || FOOTER
include _sidebar include _sidebar
main.o-main.o-main--sidebar.o-main--aside main.o-main.o-main--sidebar.o-main--aside
article.o-content article.o-content
+grid.o-no-block +grid.o-no-block
+grid-col(source ? "two-thirds" : "full") +h(1).u-heading--title=title.replace("'", "")
+h(1)=title if tag
if tag +tag=tag
+tag=tag if tag_new
+tag-new(tag_new)
if teaser
.u-heading__teaser.u-text-small.u-color-dark=teaser
else if IS_MODELS
.u-heading__teaser.u-text-small.u-color-dark
| Available statistical models for
| #[code=current.source] (#{LANGUAGES[current.source]}).
if source if source
+grid-col("third").u-text-right .o-block.u-text-right
.o-inline-list +button(gh("spacy", source), false, "secondary", "small").u-nowrap
+button(gh("spacy", source), false, "secondary").u-text-tag Source #[+icon("code", 14)] | Source #[+icon("code", 14)]
//-if ALPHA
//- +alpha-info
if ALPHA if IS_MODELS
+infobox("⚠️ You are viewing the spaCy v2.0.0 alpha docs") include _page_models
strong This page is part of the alpha documentation for spaCy v2.0. else
| It does not reflect the state of the latest stable release. !=yield
| Because v2.0 is still under development, the implementation
| may differ from the intended state described here. See the
| #[+a(gh("spaCy") + "/releases/tag/v2.0.0-alpha") release notes]
| for details on how to install and test the new version. To
| read the official docs for spaCy v1.x,
| #[+a("https://spacy.io/docs") go here].
!=yield
+grid.o-content.u-text +grid.o-content.u-text
+grid-col("half") +grid-col("half")
if next && public.docs[SUBSECTION]._data[next] if !IS_MODELS
- data = public.docs[SUBSECTION]._data[next]
.o-inline-list .o-inline-list
span #[strong.u-text-label Read next:] #[+a(next).u-link=data.title] +button(gh("spacy", "website/" + current.path.join('/') + ".jade"), false, "secondary", "small")
| #[span.o-icon Suggest edits] #[+icon("code", 14)]
+grid-col("half").u-text-right +grid-col("half").u-text-right
.o-inline-list if next && public[SECTION]._data[next]
+button(gh("spacy", "website/" + current.path.join('/') + ".jade"), false, "secondary").u-text-tag Suggest edits #[+icon("code", 14)] - data = public[SECTION]._data[next]
+grid("vcenter")
+a(next).u-text-small.u-flex-full
h4.u-text-label.u-color-dark Read next
| #{data.title}
+a(next).c-icon-button.c-icon-button--right(aria-hidden="true")
+icon("arrow-right", 24)
+gitter("spaCy chat") +gitter("spaCy chat")

View File

@ -0,0 +1,77 @@
//- 💫 INCLUDES > MODELS PAGE TEMPLATE
for id in CURRENT_MODELS
+section(id)
+grid("vcenter").o-no-block(id=id)
+grid-col("two-thirds")
+h(2)
+a("#" + id).u-permalink=id
+grid-col("third").u-text-right
.u-color-subtle.u-text-tiny
+button(gh("spacy-models") + "/releases", true, "secondary", "small")(data-tpl=id data-tpl-key="download")
| Release details
.u-padding-small Latest: #[code(data-tpl=id data-tpl-key="version") n/a]
+aside-code("Installation", "bash", "$").
spacy download #{id}
- var comps = getModelComponents(id)
p(data-tpl=id data-tpl-key="description")
div(data-tpl=id data-tpl-key="error" style="display: none")
+infobox
| Unable to load model details from GitHub. To find out more
| about this model, see the overview of the
| #[+a(gh("spacy-models") + "/releases") latest model releases].
+table(data-tpl=id data-tpl-key="table")
+row
+cell #[+label Language]
+cell #[+tag=comps.lang] #{LANGUAGES[comps.lang]}
for comp, label in {"Type": comps.type, "Genre": comps.genre}
+row
+cell #[+label=label]
+cell #[+tag=comp] #{MODEL_META[comp]}
+row
+cell #[+label Size]
+cell #[+tag=comps.size] #[span(data-tpl=id data-tpl-key="size") #[em n/a]]
each label in ["Pipeline", "Sources", "Author", "License"]
- var field = label.toLowerCase()
+row
+cell.u-nowrap
+label=label
if MODEL_META[field]
| #[+help(MODEL_META[field]).u-color-subtle]
+cell
span(data-tpl=id data-tpl-key=field) #[em n/a]
+row(data-tpl=id data-tpl-key="compat-wrapper" style="display: none")
+cell
+label Compat #[+help("Latest compatible model version for your spaCy installation").u-color-subtle]
+cell
.o-field.u-float-left
select.o-field__select.u-text-small(data-tpl=id data-tpl-key="compat")
.o-empty(data-tpl=id data-tpl-key="compat-versions")  
section(data-tpl=id data-tpl-key="accuracy-wrapper" style="display: none")
+grid.o-no-block
+grid-col("third")
+h(4) Accuracy
+table.o-block-small
for label, field in MODEL_ACCURACY
+row(style="display: none")
+cell.u-nowrap
+label=label
if MODEL_META[field]
| #[+help(MODEL_META[field]).u-color-subtle]
+cell.u-text-right(data-tpl=id data-tpl-key=field)
| n/a
+grid-col("two-thirds")
+h(4) Comparison
+chart(id).u-padding-small
p.u-text-small.u-color-dark(data-tpl=id data-tpl-key="notes")

View File

@ -1,27 +1,46 @@
//- 💫 INCLUDES > SCRIPTS //- 💫 INCLUDES > SCRIPTS
script(src="/assets/js/main.js?v#{V_JS}") if quickstart
script(src="/assets/js/prism.js") script(src="/assets/js/quickstart.min.js")
if SECTION == "docs" if IS_PAGE
if quickstart script(src="/assets/js/in-view.min.js")
script(src="/assets/js/quickstart.js")
script var qs = new Quickstart("#qs")
script. if HAS_MODELS
((window.gitter = {}).chat = {}).options = { script(src="/assets/js/chart.min.js")
useStyles: false,
activationElement: '.js-gitter-button',
targetElement: '.js-gitter',
room: '!{SOCIAL.gitter}'
};
script(src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer)
if environment == "deploy" if environment == "deploy"
script script(async src="https://www.google-analytics.com/analytics.js")
script(src="/assets/js/prism.min.js")
script(src="/assets/js/main.js?v#{V_JS}")
script
| new ProgressBar('.js-progress');
if changelog
| new Changelog('!{SOCIAL.github}', 'spacy');
if quickstart
| new Quickstart("#qs");
if IS_PAGE
| new SectionHighlighter('data-section', 'data-nav');
| new GitHubEmbed('!{SOCIAL.github}', 'data-gh-embed');
| ((window.gitter = {}).chat = {}).options = {
| useStyles: false,
| activationElement: '.js-gitter-button',
| targetElement: '.js-gitter',
| room: '!{SOCIAL.gitter}'
| };
if HAS_MODELS
| new ModelLoader('!{MODELS_REPO}', !{JSON.stringify(CURRENT_MODELS)}, !{JSON.stringify(MODEL_LICENSES)}, !{JSON.stringify(MODEL_ACCURACY)});
if environment == "deploy"
| window.ga=window.ga||function(){ | window.ga=window.ga||function(){
| (ga.q=ga.q||[]).push(arguments)}; ga.l=+new Date; | (ga.q=ga.q||[]).push(arguments)}; ga.l=+new Date;
| ga('create', '#{ANALYTICS}', 'auto'); ga('send', 'pageview'); | ga('create', '#{ANALYTICS}', 'auto'); ga('send', 'pageview');
script(async src="https://www.google-analytics.com/analytics.js") if IS_PAGE
script(src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer)

View File

@ -1,13 +1,23 @@
//- 💫 INCLUDES > SIDEBAR //- 💫 INCLUDES > SIDEBAR
include _mixins
menu.c-sidebar.js-sidebar.u-text menu.c-sidebar.js-sidebar.u-text
if sidebar_content if sidebar_content
each items, menu in sidebar_content each items, sectiontitle in sidebar_content
ul.c-sidebar__section.o-block ul.c-sidebar__section.o-block-small
li.u-text-label.u-color-subtle=menu li.u-text-label.u-color-dark=sectiontitle
each url, item in items each url, item in items
li(class=(CURRENT == url || (CURRENT == "index" && url == "./")) ? "is-active" : null) - var is_current = CURRENT == url || (CURRENT == "index" && url == "./")
+a(url)=item li.c-sidebar__item
+a(url)(class=is_current ? "is-active" : null)=item
if is_current
if IS_MODELS && CURRENT_MODELS.length
- menu = Object.assign({}, ...CURRENT_MODELS.map(id => ({ [id]: id })))
if menu
ul.c-sidebar__crumb.u-hidden-sm
- var counter = 0
for id, title in menu
- counter++
li.c-sidebar__crumb__item(data-nav=id class=(counter == 1) ? "is-active" : null)
+a("#section-" + id)=title

157
website/_includes/_svg.jade Normal file

File diff suppressed because one or more lines are too long

View File

@ -2,11 +2,16 @@
include _includes/_mixins include _includes/_mixins
- title = IS_MODELS ? LANGUAGES[current.source] || title : title
- social_title = (SECTION == "index") ? SITENAME + " - " + SLOGAN : title + " - " + SITENAME
- social_img = SITE_URL + "/assets/img/social/preview_" + (preview || ALPHA ? "alpha" : "default") + ".jpg"
doctype html doctype html
html(lang="en") html(lang="en")
title title
if SECTION == "docs" && SUBSECTION && SUBSECTION != "index" if SECTION == "api" || SECTION == "usage" || SECTION == "models"
| #{title} | #{SITENAME} #{SUBSECTION == "api" ? "API" : "Usage"} Documentation - var title_section = (SECTION == "api") ? "API" : SECTION.charAt(0).toUpperCase() + SECTION.slice(1)
| #{title} | #{SITENAME} #{title_section} Documentation
else if SECTION != "index" else if SECTION != "index"
| #{title} | #{SITENAME} | #{title} | #{SITENAME}
@ -22,32 +27,30 @@ html(lang="en")
meta(property="og:type" content="website") meta(property="og:type" content="website")
meta(property="og:site_name" content=sitename) meta(property="og:site_name" content=sitename)
meta(property="og:url" content="#{SITE_URL}/#{current.path.join('/')}") meta(property="og:url" content="#{SITE_URL}/#{current.path.join('/')}")
meta(property="og:title" content="#{title} - spaCy") meta(property="og:title" content=social_title)
meta(property="og:description" content=description) meta(property="og:description" content=description)
meta(property="og:image" content=getSocialImg()) meta(property="og:image" content=social_img)
meta(name="twitter:card" content="summary_large_image") meta(name="twitter:card" content="summary_large_image")
meta(name="twitter:site" content="@" + SOCIAL.twitter) meta(name="twitter:site" content="@" + SOCIAL.twitter)
meta(name="twitter:title" content="#{title} - spaCy") meta(name="twitter:title" content=social_title)
meta(name="twitter:description" content=description) meta(name="twitter:description" content=description)
meta(name="twitter:image" content=getSocialImg()) meta(name="twitter:image" content=social_img)
link(rel="shortcut icon" href="/assets/img/favicon.ico") link(rel="shortcut icon" href="/assets/img/favicon.ico")
link(rel="icon" type="image/x-icon" href="/assets/img/favicon.ico") link(rel="icon" type="image/x-icon" href="/assets/img/favicon.ico")
if ALPHA && SECTION == "docs" if SECTION == "api"
link(href="/assets/css/style_green.css?v#{V_CSS}" rel="stylesheet") link(href="/assets/css/style_green.css?v#{V_CSS}" rel="stylesheet")
else if SUBSECTION == "usage"
link(href="/assets/css/style_red.css?v#{V_CSS}" rel="stylesheet")
else else
link(href="/assets/css/style.css?v#{V_CSS}" rel="stylesheet") link(href="/assets/css/style.css?v#{V_CSS}" rel="stylesheet")
body body
include _includes/_svg
include _includes/_navigation include _includes/_navigation
if SECTION == "docs" if !landing
include _includes/_page-docs include _includes/_page-docs
else else

View File

@ -0,0 +1,43 @@
//- 💫 DOCS > API > ANNOTATION > BILUO
+table([ "Tag", "Description" ])
+row
+cell #[code #[span.u-color-theme B] EGIN]
+cell The first token of a multi-token entity.
+row
+cell #[code #[span.u-color-theme I] N]
+cell An inner token of a multi-token entity.
+row
+cell #[code #[span.u-color-theme L] AST]
+cell The final token of a multi-token entity.
+row
+cell #[code #[span.u-color-theme U] NIT]
+cell A single-token entity.
+row
+cell #[code #[span.u-color-theme O] UT]
+cell A non-entity token.
+aside("Why BILUO, not IOB?")
| There are several coding schemes for encoding entity annotations as
| token tags. These coding schemes are equally expressive, but not
| necessarily equally learnable.
| #[+a("http://www.aclweb.org/anthology/W09-1119") Ratinov and Roth]
| showed that the minimal #[strong Begin], #[strong In], #[strong Out]
| scheme was more difficult to learn than the #[strong BILUO] scheme that
| we use, which explicitly marks boundary tokens.
p
| spaCy translates the character offsets into this scheme, in order to
| decide the cost of each action given the current state of the entity
| recogniser. The costs are then used to calculate the gradient of the
| loss, to train the model. The exact algorithm is a pastiche of
| well-known methods, and is not currently described in any single
| publication. The model is a greedy transition-based parser guided by a
| linear model whose weights are learned using the averaged perceptron
| loss, via the #[+a("http://www.aclweb.org/anthology/C12-1059") dynamic oracle]
| imitation learning strategy. The transition system is equivalent to the
| BILOU tagging scheme.

View File

@ -0,0 +1,115 @@
//- 💫 DOCS > API > ARCHITECTURE > CYTHON
+aside("What's Cython?")
| #[+a("http://cython.org/") Cython] is a language for writing
| C extensions for Python. Most Python code is also valid Cython, but
| you can add type declarations to get efficient memory-managed code
| just like C or C++.
p
| spaCy's core data structures are implemented as
| #[+a("http://cython.org/") Cython] #[code cdef] classes. Memory is
| managed through the #[+a(gh("cymem")) #[code cymem]]
| #[code cymem.Pool] class, which allows you
| to allocate memory which will be freed when the #[code Pool] object
| is garbage collected. This means you usually don't have to worry
| about freeing memory. You just have to decide which Python object
| owns the memory, and make it own the #[code Pool]. When that object
| goes out of scope, the memory will be freed. You do have to take
| care that no pointers outlive the object that owns them — but this
| is generally quite easy.
p
| All Cython modules should have the #[code # cython: infer_types=True]
| compiler directive at the top of the file. This makes the code much
| cleaner, as it avoids the need for many type declarations. If
| possible, you should prefer to declare your functions #[code nogil],
| even if you don't especially care about multi-threading. The reason
| is that #[code nogil] functions help the Cython compiler reason about
| your code quite a lot — you're telling the compiler that no Python
| dynamics are possible. This lets many errors be raised, and ensures
| your function will run at C speed.
p
| Cython gives you many choices of sequences: you could have a Python
| list, a numpy array, a memory view, a C++ vector, or a pointer.
| Pointers are preferred, because they are fastest, have the most
| explicit semantics, and let the compiler check your code more
| strictly. C++ vectors are also great — but you should only use them
| internally in functions. It's less friendly to accept a vector as an
| argument, because that asks the user to do much more work. Here's
| how to get a pointer from a numpy array, memory view or vector:
+code.
cdef void get_pointers(np.ndarray[int, mode='c'] numpy_array, vector[int] cpp_vector, int[::1] memory_view) nogil:
pointer1 = <int*>numpy_array.data
pointer2 = cpp_vector.data()
pointer3 = &memory_view[0]
p
| Both C arrays and C++ vectors reassure the compiler that no Python
| operations are possible on your variable. This is a big advantage:
| it lets the Cython compiler raise many more errors for you.
p
| When getting a pointer from a numpy array or memoryview, take care
| that the data is actually stored in C-contiguous order — otherwise
| you'll get a pointer to nonsense. The type-declarations in the code
| above should generate runtime errors if buffers with incorrect
| memory layouts are passed in. To iterate over the array, the
| following style is preferred:
+code.
cdef int c_total(const int* int_array, int length) nogil:
total = 0
for item in int_array[:length]:
total += item
return total
p
| If this is confusing, consider that the compiler couldn't deal with
| #[code for item in int_array:] — there's no length attached to a raw
| pointer, so how could we figure out where to stop? The length is
| provided in the slice notation as a solution to this. Note that we
| don't have to declare the type of #[code item] in the code above —
| the compiler can easily infer it. This gives us tidy code that looks
| quite like Python, but is exactly as fast as C — because we've made
| sure the compilation to C is trivial.
p
| Your functions cannot be declared #[code nogil] if they need to
| create Python objects or call Python functions. This is perfectly
| okay — you shouldn't torture your code just to get #[code nogil]
| functions. However, if your function isn't #[code nogil], you should
| compile your module with #[code cython -a --cplus my_module.pyx] and
| open the resulting #[code my_module.html] file in a browser. This
| will let you see how Cython is compiling your code. Calls into the
| Python run-time will be in bright yellow. This lets you easily see
| whether Cython is able to correctly type your code, or whether there
| are unexpected problems.
p
| Working in Cython is very rewarding once you're over the initial
| learning curve. As with C and C++, the first way you write something
| in Cython will often be the performance-optimal approach. In
| contrast, Python optimisation generally requires a lot of
| experimentation. Is it faster to have an #[code if item in my_dict]
| check, or to use #[code .get()]? What about
| #[code try]/#[code except]? Does this numpy operation create a copy?
| There's no way to guess the answers to these questions, and you'll
| usually be dissatisfied with your results — so there's no way to
| know when to stop this process. In the worst case, you'll make a
| mess that invites the next reader to try their luck too. This is
| like one of those
| #[+a("http://www.wemjournal.org/article/S1080-6032%2809%2970088-2/abstract") volcanic gas-traps],
| where the rescuers keep passing out from low oxygen, causing
| another rescuer to follow — only to succumb themselves. In short,
| just say no to optimizing your Python. If it's not fast enough the
| first time, just switch to Cython.
+infobox("Resources")
+list.o-no-block
+item #[+a("http://docs.cython.org/en/latest/") Official Cython documentation] (cython.org)
+item #[+a("https://explosion.ai/blog/writing-c-in-cython", true) Writing C in Cython] (explosion.ai)
+item #[+a("https://explosion.ai/blog/multithreading-with-cython") Multi-threading spaCys parser and named entity recogniser] (explosion.ai)

View File

@ -0,0 +1,141 @@
//- 💫 DOCS > API > ARCHITECTURE > NN MODEL ARCHITECTURE
p
| The parsing model is a blend of recent results. The two recent
| inspirations have been the work of Eli Klipperwasser and Yoav Goldberg at
| Bar Ilan#[+fn(1)], and the SyntaxNet team from Google. The foundation of
| the parser is still based on the work of Joakim Nivre#[+fn(2)], who
| introduced the transition-based framework#[+fn(3)], the arc-eager
| transition system, and the imitation learning objective. The model is
| implemented using #[+a(gh("thinc")) Thinc], spaCy's machine learning
| library. We first predict context-sensitive vectors for each word in the
| input:
+code.
(embed_lower | embed_prefix | embed_suffix | embed_shape)
>> Maxout(token_width)
>> convolution ** 4
p
| This convolutional layer is shared between the tagger, parser and NER,
| and will also be shared by the future neural lemmatizer. Because the
| parser shares these layers with the tagger, the parser does not require
| tag features. I got this trick from David Weiss's "Stack Combination"
| paper#[+fn(4)].
p
| To boost the representation, the tagger actually predicts a "super tag"
| with POS, morphology and dependency label#[+fn(5)]. The tagger predicts
| these supertags by adding a softmax layer onto the convolutional layer
| so, we're teaching the convolutional layer to give us a representation
| that's one affine transform from this informative lexical information.
| This is obviously good for the parser (which backprops to the
| convolutions too). The parser model makes a state vector by concatenating
| the vector representations for its context tokens. The current context
| tokens:
+table
+row
+cell #[code S0], #[code S1], #[code S2]
+cell Top three words on the stack.
+row
+cell #[code B0], #[code B1]
+cell First two words of the buffer.
+row
+cell.u-nowrap
| #[code S0L1], #[code S1L1], #[code S2L1], #[code B0L1],
| #[code B1L1]#[br]
| #[code S0L2], #[code S1L2], #[code S2L2], #[code B0L2],
| #[code B1L2]
+cell
| Leftmost and second leftmost children of #[code S0], #[code S1],
| #[code S2], #[code B0] and #[code B1].
+row
+cell.u-nowrap
| #[code S0R1], #[code S1R1], #[code S2R1], #[code B0R1],
| #[code B1R1]#[br]
| #[code S0R2], #[code S1R2], #[code S2R2], #[code B0R2],
| #[code B1R2]
+cell
| Rightmost and second rightmost children of #[code S0], #[code S1],
| #[code S2], #[code B0] and #[code B1].
p
| This makes the state vector quite long: #[code 13*T], where #[code T] is
| the token vector width (128 is working well). Fortunately, there's a way
| to structure the computation to save some expense (and make it more
| GPU-friendly).
p
| The parser typically visits #[code 2*N] states for a sentence of length
| #[code N] (although it may visit more, if it back-tracks with a
| non-monotonic transition#[+fn(4)]). A naive implementation would require
| #[code 2*N (B, 13*T) @ (13*T, H)] matrix multiplications for a batch of
| size #[code B]. We can instead perform one #[code (B*N, T) @ (T, 13*H)]
| multiplication, to pre-compute the hidden weights for each positional
| feature with respect to the words in the batch. (Note that our token
| vectors come from the CNN — so we can't play this trick over the
| vocabulary. That's how Stanford's NN parser#[+fn(3)] works — and why its
| model is so big.)
p
| This pre-computation strategy allows a nice compromise between
| GPU-friendliness and implementation simplicity. The CNN and the wide
| lower layer are computed on the GPU, and then the precomputed hidden
| weights are moved to the CPU, before we start the transition-based
| parsing process. This makes a lot of things much easier. We don't have to
| worry about variable-length batch sizes, and we don't have to implement
| the dynamic oracle in CUDA to train.
p
| Currently the parser's loss function is multilabel log loss#[+fn(6)], as
| the dynamic oracle allows multiple states to be 0 cost. This is defined
| as follows, where #[code gZ] is the sum of the scores assigned to gold
| classes:
+code.
(exp(score) / Z) - (exp(score) / gZ)
+bibliography
+item
| #[+a("https://www.semanticscholar.org/paper/Simple-and-Accurate-Dependency-Parsing-Using-Bidir-Kiperwasser-Goldberg/3cf31ecb2724b5088783d7c96a5fc0d5604cbf41") Simple and Accurate Dependency Parsing Using Bidirectional LSTM Feature Representations]
br
| Eliyahu Kiperwasser, Yoav Goldberg. (2016)
+item
| #[+a("https://www.semanticscholar.org/paper/A-Dynamic-Oracle-for-Arc-Eager-Dependency-Parsing-Goldberg-Nivre/22697256ec19ecc3e14fcfc63624a44cf9c22df4") A Dynamic Oracle for Arc-Eager Dependency Parsing]
br
| Yoav Goldberg, Joakim Nivre (2012)
+item
| #[+a("https://explosion.ai/blog/parsing-english-in-python") Parsing English in 500 Lines of Python]
br
| Matthew Honnibal (2013)
+item
| #[+a("https://www.semanticscholar.org/paper/Stack-propagation-Improved-Representation-Learning-Zhang-Weiss/0c133f79b23e8c680891d2e49a66f0e3d37f1466") Stack-propagation: Improved Representation Learning for Syntax]
br
| Yuan Zhang, David Weiss (2016)
+item
| #[+a("https://www.semanticscholar.org/paper/Deep-multi-task-learning-with-low-level-tasks-supe-S%C3%B8gaard-Goldberg/03ad06583c9721855ccd82c3d969a01360218d86") Deep multi-task learning with low level tasks supervised at lower layers]
br
| Anders Søgaard, Yoav Goldberg (2016)
+item
| #[+a("https://www.semanticscholar.org/paper/An-Improved-Non-monotonic-Transition-System-for-De-Honnibal-Johnson/4094cee47ade13b77b5ab4d2e6cb9dd2b8a2917c") An Improved Non-monotonic Transition System for Dependency Parsing]
br
| Matthew Honnibal, Mark Johnson (2015)
+item
| #[+a("http://cs.stanford.edu/people/danqi/papers/emnlp2014.pdf") A Fast and Accurate Dependency Parser using Neural Networks]
br
| Danqi Cheng, Christopher D. Manning (2014)
+item
| #[+a("https://www.semanticscholar.org/paper/Parsing-the-Wall-Street-Journal-using-a-Lexical-Fu-Riezler-King/0ad07862a91cd59b7eb5de38267e47725a62b8b2") Parsing the Wall Street Journal using a Lexical-Functional Grammar and Discriminative Estimation Techniques]
br
| Stefan Riezler et al. (2002)

View File

@ -1,29 +1,32 @@
{ {
"sidebar": { "sidebar": {
"Introduction": { "Overview": {
"Facts & Figures": "./", "Architecture": "./",
"Languages": "language-models", "Annotation Specs": "annotation",
"Annotation Specs": "annotation" "Functions": "top-level"
}, },
"Top-level": { "Containers": {
"spacy": "spacy",
"displacy": "displacy",
"Utility Functions": "util",
"Command line": "cli"
},
"Classes": {
"Doc": "doc", "Doc": "doc",
"Token": "token", "Token": "token",
"Span": "span", "Span": "span",
"Lexeme": "lexeme"
},
"Pipeline": {
"Language": "language", "Language": "language",
"Tokenizer": "tokenizer", "Pipe": "pipe",
"Tensorizer": "tensorizer", "Tensorizer": "tensorizer",
"Tagger": "tagger", "Tagger": "tagger",
"DependencyParser": "dependencyparser", "DependencyParser": "dependencyparser",
"EntityRecognizer": "entityrecognizer", "EntityRecognizer": "entityrecognizer",
"TextCategorizer": "textcategorizer", "TextCategorizer": "textcategorizer",
"Tokenizer": "tokenizer",
"Lemmatizer": "lemmatizer",
"Matcher": "matcher", "Matcher": "matcher",
"Lexeme": "lexeme", "PhraseMatcher": "phrasematcher"
},
"Other": {
"Vocab": "vocab", "Vocab": "vocab",
"StringStore": "stringstore", "StringStore": "stringstore",
"Vectors": "vectors", "Vectors": "vectors",
@ -34,52 +37,37 @@
}, },
"index": { "index": {
"title": "Facts & Figures", "title": "Architecture",
"next": "language-models" "next": "annotation",
"menu": {
"Basics": "basics",
"Neural Network Model": "nn-model",
"Cython Conventions": "cython"
}
}, },
"language-models": { "top-level": {
"title": "Languages", "title": "Top-level Functions",
"next": "philosophy" "menu": {
}, "spacy": "spacy",
"displacy": "displacy",
"philosophy": { "Utility Functions": "util",
"title": "Philosophy" "Compatibility": "compat",
}, "Command Line": "cli"
}
"spacy": {
"title": "spaCy top-level functions",
"source": "spacy/__init__.py",
"next": "displacy"
},
"displacy": {
"title": "displaCy",
"tag": "module",
"source": "spacy/displacy",
"next": "util"
},
"util": {
"title": "Utility Functions",
"source": "spacy/util.py",
"next": "cli"
},
"cli": {
"title": "Command Line Interface",
"source": "spacy/cli"
}, },
"language": { "language": {
"title": "Language", "title": "Language",
"tag": "class", "tag": "class",
"teaser": "A text-processing pipeline.",
"source": "spacy/language.py" "source": "spacy/language.py"
}, },
"doc": { "doc": {
"title": "Doc", "title": "Doc",
"tag": "class", "tag": "class",
"teaser": "A container for accessing linguistic annotations.",
"source": "spacy/tokens/doc.pyx" "source": "spacy/tokens/doc.pyx"
}, },
@ -103,6 +91,7 @@
"vocab": { "vocab": {
"title": "Vocab", "title": "Vocab",
"teaser": "A storage class for vocabulary and other data shared across a language.",
"tag": "class", "tag": "class",
"source": "spacy/vocab.pyx" "source": "spacy/vocab.pyx"
}, },
@ -115,10 +104,27 @@
"matcher": { "matcher": {
"title": "Matcher", "title": "Matcher",
"teaser": "Match sequences of tokens, based on pattern rules.",
"tag": "class", "tag": "class",
"source": "spacy/matcher.pyx" "source": "spacy/matcher.pyx"
}, },
"phrasematcher": {
"title": "PhraseMatcher",
"teaser": "Match sequences of tokens, based on documents.",
"tag": "class",
"tag_new": 2,
"source": "spacy/matcher.pyx"
},
"pipe": {
"title": "Pipe",
"teaser": "Abstract base class defining the API for pipeline components.",
"tag": "class",
"tag_new": 2,
"source": "spacy/pipeline.pyx"
},
"dependenyparser": { "dependenyparser": {
"title": "DependencyParser", "title": "DependencyParser",
"tag": "class", "tag": "class",
@ -127,18 +133,22 @@
"entityrecognizer": { "entityrecognizer": {
"title": "EntityRecognizer", "title": "EntityRecognizer",
"teaser": "Annotate named entities on documents.",
"tag": "class", "tag": "class",
"source": "spacy/pipeline.pyx" "source": "spacy/pipeline.pyx"
}, },
"textcategorizer": { "textcategorizer": {
"title": "TextCategorizer", "title": "TextCategorizer",
"teaser": "Add text categorization models to spaCy pipelines.",
"tag": "class", "tag": "class",
"tag_new": 2,
"source": "spacy/pipeline.pyx" "source": "spacy/pipeline.pyx"
}, },
"dependencyparser": { "dependencyparser": {
"title": "DependencyParser", "title": "DependencyParser",
"teaser": "Annotate syntactic dependencies on documents.",
"tag": "class", "tag": "class",
"source": "spacy/pipeline.pyx" "source": "spacy/pipeline.pyx"
}, },
@ -149,15 +159,23 @@
"source": "spacy/tokenizer.pyx" "source": "spacy/tokenizer.pyx"
}, },
"lemmatizer": {
"title": "Lemmatizer",
"tag": "class"
},
"tagger": { "tagger": {
"title": "Tagger", "title": "Tagger",
"teaser": "Annotate part-of-speech tags on documents.",
"tag": "class", "tag": "class",
"source": "spacy/pipeline.pyx" "source": "spacy/pipeline.pyx"
}, },
"tensorizer": { "tensorizer": {
"title": "Tensorizer", "title": "Tensorizer",
"teaser": "Add a tensor with position-sensitive meaning representations to a document.",
"tag": "class", "tag": "class",
"tag_new": 2,
"source": "spacy/pipeline.pyx" "source": "spacy/pipeline.pyx"
}, },
@ -169,23 +187,38 @@
"goldcorpus": { "goldcorpus": {
"title": "GoldCorpus", "title": "GoldCorpus",
"teaser": "An annotated corpus, using the JSON file format.",
"tag": "class", "tag": "class",
"tag_new": 2,
"source": "spacy/gold.pyx" "source": "spacy/gold.pyx"
}, },
"binder": { "binder": {
"title": "Binder", "title": "Binder",
"tag": "class", "tag": "class",
"tag_new": 2,
"source": "spacy/tokens/binder.pyx" "source": "spacy/tokens/binder.pyx"
}, },
"vectors": { "vectors": {
"title": "Vectors", "title": "Vectors",
"teaser": "Store, save and load word vectors.",
"tag": "class", "tag": "class",
"tag_new": 2,
"source": "spacy/vectors.pyx" "source": "spacy/vectors.pyx"
}, },
"annotation": { "annotation": {
"title": "Annotation Specifications" "title": "Annotation Specifications",
"teaser": "Schemes used for labels, tags and training data.",
"menu": {
"Tokenization": "tokenization",
"Sentence Boundaries": "sbd",
"POS Tagging": "pos-tagging",
"Lemmatization": "lemmatization",
"Dependencies": "dependency-parsing",
"Named Entities": "named-entities",
"Training Data": "training"
}
} }
} }

View File

@ -1,26 +1,17 @@
//- 💫 DOCS > USAGE > COMMAND LINE INTERFACE //- 💫 DOCS > API > TOP-LEVEL > COMMAND LINE INTERFACE
include ../../_includes/_mixins
p p
| As of v1.7.0, spaCy comes with new command line helpers to download and | As of v1.7.0, spaCy comes with new command line helpers to download and
| link models and show useful debugging information. For a list of available | link models and show useful debugging information. For a list of available
| commands, type #[code spacy --help]. | commands, type #[code spacy --help].
+infobox("⚠️ Deprecation note") +h(3, "download") Download
| As of spaCy 2.0, the #[code model] command to initialise a model data
| directory is deprecated. The command was only necessary because previous
| versions of spaCy expected a model directory to already be set up. This
| has since been changed, so you can use the #[+api("cli#train") #[code train]]
| command straight away.
+h(2, "download") Download
p p
| Download #[+a("/docs/usage/models") models] for spaCy. The downloader finds the | Download #[+a("/usage/models") models] for spaCy. The downloader finds the
| best-matching compatible version, uses pip to download the model as a | best-matching compatible version, uses pip to download the model as a
| package and automatically creates a | package and automatically creates a
| #[+a("/docs/usage/models#usage") shortcut link] to load the model by name. | #[+a("/usage/models#usage") shortcut link] to load the model by name.
| Direct downloads don't perform any compatibility checks and require the | Direct downloads don't perform any compatibility checks and require the
| model name to be specified with its version (e.g., #[code en_core_web_sm-1.2.0]). | model name to be specified with its version (e.g., #[code en_core_web_sm-1.2.0]).
@ -49,15 +40,15 @@ p
| detailed messages in case things go wrong. It's #[strong not recommended] | detailed messages in case things go wrong. It's #[strong not recommended]
| to use this command as part of an automated process. If you know which | to use this command as part of an automated process. If you know which
| model your project needs, you should consider a | model your project needs, you should consider a
| #[+a("/docs/usage/models#download-pip") direct download via pip], or | #[+a("/usage/models#download-pip") direct download via pip], or
| uploading the model to a local PyPi installation and fetching it straight | uploading the model to a local PyPi installation and fetching it straight
| from there. This will also allow you to add it as a versioned package | from there. This will also allow you to add it as a versioned package
| dependency to your project. | dependency to your project.
+h(2, "link") Link +h(3, "link") Link
p p
| Create a #[+a("/docs/usage/models#usage") shortcut link] for a model, | Create a #[+a("/usage/models#usage") shortcut link] for a model,
| either a Python package or a local directory. This will let you load | either a Python package or a local directory. This will let you load
| models from any location using a custom name via | models from any location using a custom name via
| #[+api("spacy#load") #[code spacy.load()]]. | #[+api("spacy#load") #[code spacy.load()]].
@ -95,7 +86,7 @@ p
+cell flag +cell flag
+cell Show help message and available arguments. +cell Show help message and available arguments.
+h(2, "info") Info +h(3, "info") Info
p p
| Print information about your spaCy installation, models and local setup, | Print information about your spaCy installation, models and local setup,
@ -122,15 +113,15 @@ p
+cell flag +cell flag
+cell Show help message and available arguments. +cell Show help message and available arguments.
+h(2, "convert") Convert +h(3, "convert") Convert
p p
| Convert files into spaCy's #[+a("/docs/api/annotation#json-input") JSON format] | Convert files into spaCy's #[+a("/api/annotation#json-input") JSON format]
| for use with the #[code train] command and other experiment management | for use with the #[code train] command and other experiment management
| functions. The right converter is chosen based on the file extension of | functions. The right converter is chosen based on the file extension of
| the input file. Currently only supports #[code .conllu]. | the input file. Currently only supports #[code .conllu].
+code(false, "bash", "$"). +code(false, "bash", "$", false, false, true).
spacy convert [input_file] [output_dir] [--n-sents] [--morphology] spacy convert [input_file] [output_dir] [--n-sents] [--morphology]
+table(["Argument", "Type", "Description"]) +table(["Argument", "Type", "Description"])
@ -159,14 +150,18 @@ p
+cell flag +cell flag
+cell Show help message and available arguments. +cell Show help message and available arguments.
+h(2, "train") Train +h(3, "train") Train
p p
| Train a model. Expects data in spaCy's | Train a model. Expects data in spaCy's
| #[+a("/docs/api/annotation#json-input") JSON format]. | #[+a("/api/annotation#json-input") JSON format]. On each epoch, a model
| will be saved out to the directory. Accuracy scores and model details
| will be added to a #[+a("/usage/training#models-generating") #[code meta.json]]
| to allow packaging the model using the
| #[+api("cli#package") #[code package]] command.
+code(false, "bash", "$"). +code(false, "bash", "$", false, false, true).
spacy train [lang] [output_dir] [train_data] [dev_data] [--n-iter] [--n-sents] [--use-gpu] [--no-tagger] [--no-parser] [--no-entities] spacy train [lang] [output_dir] [train_data] [dev_data] [--n-iter] [--n-sents] [--use-gpu] [--meta-path] [--vectors] [--no-tagger] [--no-parser] [--no-entities] [--gold-preproc]
+table(["Argument", "Type", "Description"]) +table(["Argument", "Type", "Description"])
+row +row
@ -204,6 +199,27 @@ p
+cell option +cell option
+cell Use GPU. +cell Use GPU.
+row
+cell #[code --vectors], #[code -v]
+cell option
+cell Model to load vectors from.
+row
+cell #[code --meta-path], #[code -m]
+cell option
+cell
| #[+tag-new(2)] Optional path to model
| #[+a("/usage/training#models-generating") #[code meta.json]].
| All relevant properties like #[code lang], #[code pipeline] and
| #[code spacy_version] will be overwritten.
+row
+cell #[code --version], #[code -V]
+cell option
+cell
| Model version. Will be written out to the model's
| #[code meta.json] after training.
+row +row
+cell #[code --no-tagger], #[code -T] +cell #[code --no-tagger], #[code -T]
+cell flag +cell flag
@ -219,12 +235,18 @@ p
+cell flag +cell flag
+cell Don't train NER. +cell Don't train NER.
+row
+cell #[code --gold-preproc], #[code -G]
+cell flag
+cell Use gold preprocessing.
+row +row
+cell #[code --help], #[code -h] +cell #[code --help], #[code -h]
+cell flag +cell flag
+cell Show help message and available arguments. +cell Show help message and available arguments.
+h(3, "train-hyperparams") Environment variables for hyperparameters +h(4, "train-hyperparams") Environment variables for hyperparameters
+tag-new(2)
p p
| spaCy lets you set hyperparameters for training via environment variables. | spaCy lets you set hyperparameters for training via environment variables.
@ -236,98 +258,149 @@ p
+code(false, "bash"). +code(false, "bash").
parser_hidden_depth=2 parser_maxout_pieces=1 train-parser parser_hidden_depth=2 parser_maxout_pieces=1 train-parser
+under-construction
+table(["Name", "Description", "Default"]) +table(["Name", "Description", "Default"])
+row +row
+cell #[code dropout_from] +cell #[code dropout_from]
+cell +cell Initial dropout rate.
+cell #[code 0.2] +cell #[code 0.2]
+row +row
+cell #[code dropout_to] +cell #[code dropout_to]
+cell +cell Final dropout rate.
+cell #[code 0.2] +cell #[code 0.2]
+row +row
+cell #[code dropout_decay] +cell #[code dropout_decay]
+cell +cell Rate of dropout change.
+cell #[code 0.0] +cell #[code 0.0]
+row +row
+cell #[code batch_from] +cell #[code batch_from]
+cell +cell Initial batch size.
+cell #[code 1] +cell #[code 1]
+row +row
+cell #[code batch_to] +cell #[code batch_to]
+cell +cell Final batch size.
+cell #[code 64] +cell #[code 64]
+row +row
+cell #[code batch_compound] +cell #[code batch_compound]
+cell +cell Rate of batch size acceleration.
+cell #[code 1.001] +cell #[code 1.001]
+row +row
+cell #[code token_vector_width] +cell #[code token_vector_width]
+cell +cell Width of embedding tables and convolutional layers.
+cell #[code 128] +cell #[code 128]
+row +row
+cell #[code embed_size] +cell #[code embed_size]
+cell +cell Number of rows in embedding tables.
+cell #[code 7500] +cell #[code 7500]
+row +row
+cell #[code parser_maxout_pieces] +cell #[code parser_maxout_pieces]
+cell +cell Number of pieces in the parser's and NER's first maxout layer.
+cell #[code 2] +cell #[code 2]
+row +row
+cell #[code parser_hidden_depth] +cell #[code parser_hidden_depth]
+cell +cell Number of hidden layers in the parser and NER.
+cell #[code 1] +cell #[code 1]
+row +row
+cell #[code hidden_width] +cell #[code hidden_width]
+cell +cell Size of the parser's and NER's hidden layers.
+cell #[code 128] +cell #[code 128]
+row +row
+cell #[code learn_rate] +cell #[code learn_rate]
+cell +cell Learning rate.
+cell #[code 0.001] +cell #[code 0.001]
+row +row
+cell #[code optimizer_B1] +cell #[code optimizer_B1]
+cell +cell Momentum for the Adam solver.
+cell #[code 0.9] +cell #[code 0.9]
+row +row
+cell #[code optimizer_B2] +cell #[code optimizer_B2]
+cell +cell Adagrad-momentum for the Adam solver.
+cell #[code 0.999] +cell #[code 0.999]
+row +row
+cell #[code optimizer_eps] +cell #[code optimizer_eps]
+cell +cell Epsylon value for the Adam solver.
+cell #[code 1e-08] +cell #[code 1e-08]
+row +row
+cell #[code L2_penalty] +cell #[code L2_penalty]
+cell +cell L2 regularisation penalty.
+cell #[code 1e-06] +cell #[code 1e-06]
+row +row
+cell #[code grad_norm_clip] +cell #[code grad_norm_clip]
+cell +cell Gradient L2 norm constraint.
+cell #[code 1.0] +cell #[code 1.0]
+h(2, "package") Package +h(3, "evaluate") Evaluate
+tag-new(2)
p p
| Generate a #[+a("/docs/usage/saving-loading#generating") model Python package] | Evaluate a model's accuracy and speed on JSON-formatted annotated data.
| Will print the results and optionally export
| #[+a("/usage/visualizers") displaCy visualizations] of a sample set of
| parses to #[code .html] files. Visualizations for the dependency parse
| and NER will be exported as separate files if the respective component
| is present in the model's pipeline.
+code(false, "bash", "$", false, false, true).
spacy evaluate [model] [data_path] [--displacy-path] [--displacy-limit] [--gpu-id] [--gold-preproc]
+table(["Argument", "Type", "Description"])
+row
+cell #[code model]
+cell positional
+cell
| Model to evaluate. Can be a package or shortcut link name, or a
| path to a model data directory.
+row
+cell #[code data_path]
+cell positional
+cell Location of JSON-formatted evaluation data.
+row
+cell #[code --displacy-path], #[code -dp]
+cell option
+cell
| Directory to output rendered parses as HTML. If not set, no
| visualizations will be generated.
+row
+cell #[code --displacy-limit], #[code -dl]
+cell option
+cell
| Number of parses to generate per file. Defaults to #[code 25].
| Keep in mind that a significantly higher number might cause the
| #[code .html] files to render slowly.
+row
+cell #[code --gpu-id], #[code -g]
+cell option
+cell GPU to use, if any. Defaults to #[code -1] for CPU.
+row
+cell #[code --gold-preproc], #[code -G]
+cell flag
+cell Use gold preprocessing.
+h(3, "package") Package
p
| Generate a #[+a("/usage/training#models-generating") model Python package]
| from an existing model data directory. All data files are copied over. | from an existing model data directory. All data files are copied over.
| If the path to a meta.json is supplied, or a meta.json is found in the | If the path to a meta.json is supplied, or a meta.json is found in the
| input directory, this file is used. Otherwise, the data can be entered | input directory, this file is used. Otherwise, the data can be entered
@ -336,8 +409,8 @@ p
| sure you're always using the latest versions. This means you need to be | sure you're always using the latest versions. This means you need to be
| connected to the internet to use this command. | connected to the internet to use this command.
+code(false, "bash", "$"). +code(false, "bash", "$", false, false, true).
spacy package [input_dir] [output_dir] [--meta] [--force] spacy package [input_dir] [output_dir] [--meta-path] [--create-meta] [--force]
+table(["Argument", "Type", "Description"]) +table(["Argument", "Type", "Description"])
+row +row
@ -353,14 +426,14 @@ p
+row +row
+cell #[code --meta-path], #[code -m] +cell #[code --meta-path], #[code -m]
+cell option +cell option
+cell Path to meta.json file (optional). +cell #[+tag-new(2)] Path to meta.json file (optional).
+row +row
+cell #[code --create-meta], #[code -c] +cell #[code --create-meta], #[code -c]
+cell flag +cell flag
+cell +cell
| Create a meta.json file on the command line, even if one already | #[+tag-new(2)] Create a meta.json file on the command line, even
| exists in the directory. | if one already exists in the directory.
+row +row
+cell #[code --force], #[code -f] +cell #[code --force], #[code -f]

View File

@ -0,0 +1,91 @@
//- 💫 DOCS > API > TOP-LEVEL > COMPATIBILITY
p
| All Python code is written in an
| #[strong intersection of Python 2 and Python 3]. This is easy in Cython,
| but somewhat ugly in Python. Logic that deals with Python or platform
| compatibility only lives in #[code spacy.compat]. To distinguish them from
| the builtin functions, replacement functions are suffixed with an
| undersocre, e.e #[code unicode_]. For specific checks, spaCy uses the
| #[code six] and #[code ftfy] packages.
+aside-code("Example").
from spacy.compat import unicode_, json_dumps
compatible_unicode = unicode_('hello world')
compatible_json = json_dumps({'key': 'value'})
+table(["Name", "Python 2", "Python 3"])
+row
+cell #[code compat.bytes_]
+cell #[code str]
+cell #[code bytes]
+row
+cell #[code compat.unicode_]
+cell #[code unicode]
+cell #[code str]
+row
+cell #[code compat.basestring_]
+cell #[code basestring]
+cell #[code str]
+row
+cell #[code compat.input_]
+cell #[code raw_input]
+cell #[code input]
+row
+cell #[code compat.json_dumps]
+cell #[code ujson.dumps] with #[code .decode('utf8')]
+cell #[code ujson.dumps]
+row
+cell #[code compat.path2str]
+cell #[code str(path)] with #[code .decode('utf8')]
+cell #[code str(path)]
+h(3, "is_config") compat.is_config
+tag function
p
| Check if a specific configuration of Python version and operating system
| matches the user's setup. Mostly used to display targeted error messages.
+aside-code("Example").
from spacy.compat import is_config
if is_config(python2=True, windows=True):
print("You are using Python 2 on Windows.")
+table(["Name", "Type", "Description"])
+row
+cell #[code python2]
+cell bool
+cell spaCy is executed with Python 2.x.
+row
+cell #[code python3]
+cell bool
+cell spaCy is executed with Python 3.x.
+row
+cell #[code windows]
+cell bool
+cell spaCy is executed on Windows.
+row
+cell #[code linux]
+cell bool
+cell spaCy is executed on Linux.
+row
+cell #[code osx]
+cell bool
+cell spaCy is executed on OS X or macOS.
+row("foot")
+cell returns
+cell bool
+cell Whether the specified configuration matches the user's platform.

View File

@ -1,14 +1,12 @@
//- 💫 DOCS > API > DISPLACY //- 💫 DOCS > API > TOP-LEVEL > DISPLACY
include ../../_includes/_mixins
p p
| As of v2.0, spaCy comes with a built-in visualization suite. For more | As of v2.0, spaCy comes with a built-in visualization suite. For more
| info and examples, see the usage guide on | info and examples, see the usage guide on
| #[+a("/docs/usage/visualizers") visualizing spaCy]. | #[+a("/usage/visualizers") visualizing spaCy].
+h(2, "serve") displacy.serve +h(3, "displacy.serve") displacy.serve
+tag method +tag method
+tag-new(2) +tag-new(2)
@ -60,7 +58,7 @@ p
+cell bool +cell bool
+cell +cell
| Don't parse #[code Doc] and instead, expect a dict or list of | Don't parse #[code Doc] and instead, expect a dict or list of
| dicts. #[+a("/docs/usage/visualizers#manual-usage") See here] | dicts. #[+a("/usage/visualizers#manual-usage") See here]
| for formats and examples. | for formats and examples.
+cell #[code False] +cell #[code False]
@ -70,7 +68,7 @@ p
+cell Port to serve visualization. +cell Port to serve visualization.
+cell #[code 5000] +cell #[code 5000]
+h(2, "render") displacy.render +h(3, "displacy.render") displacy.render
+tag method +tag method
+tag-new(2) +tag-new(2)
@ -127,24 +125,24 @@ p Render a dependency parse tree or named entity visualization.
+cell bool +cell bool
+cell +cell
| Don't parse #[code Doc] and instead, expect a dict or list of | Don't parse #[code Doc] and instead, expect a dict or list of
| dicts. #[+a("/docs/usage/visualizers#manual-usage") See here] | dicts. #[+a("/usage/visualizers#manual-usage") See here]
| for formats and examples. | for formats and examples.
+cell #[code False] +cell #[code False]
+footrow +row("foot")
+cell returns +cell returns
+cell unicode +cell unicode
+cell Rendered HTML markup. +cell Rendered HTML markup.
+cell +cell
+h(2, "options") Visualizer options +h(3, "displacy_options") Visualizer options
p p
| The #[code options] argument lets you specify additional settings for | The #[code options] argument lets you specify additional settings for
| each visualizer. If a setting is not present in the options, the default | each visualizer. If a setting is not present in the options, the default
| value will be used. | value will be used.
+h(3, "options-dep") Dependency Visualizer options +h(4, "options-dep") Dependency Visualizer options
+aside-code("Example"). +aside-code("Example").
options = {'compact': True, 'color': 'blue'} options = {'compact': True, 'color': 'blue'}
@ -219,7 +217,7 @@ p
+cell Distance between words in px. +cell Distance between words in px.
+cell #[code 175] / #[code 85] (compact) +cell #[code 175] / #[code 85] (compact)
+h(3, "options-ent") Named Entity Visualizer options +h(4, "displacy_options-ent") Named Entity Visualizer options
+aside-code("Example"). +aside-code("Example").
options = {'ents': ['PERSON', 'ORG', 'PRODUCT'], options = {'ents': ['PERSON', 'ORG', 'PRODUCT'],
@ -244,6 +242,6 @@ p
p p
| By default, displaCy comes with colours for all | By default, displaCy comes with colours for all
| #[+a("/docs/api/annotation#named-entities") entity types supported by spaCy]. | #[+a("/api/annotation#named-entities") entity types supported by spaCy].
| If you're using custom entity types, you can use the #[code colors] | If you're using custom entity types, you can use the #[code colors]
| setting to add your own colours for them. | setting to add your own colours for them.

View File

@ -1,15 +1,13 @@
//- 💫 DOCS > API > SPACY //- 💫 DOCS > API > TOP-LEVEL > SPACY
include ../../_includes/_mixins +h(3, "spacy.load") spacy.load
+h(2, "load") spacy.load
+tag function +tag function
+tag-model +tag-model
p p
| Load a model via its #[+a("/docs/usage/models#usage") shortcut link], | Load a model via its #[+a("/usage/models#usage") shortcut link],
| the name of an installed | the name of an installed
| #[+a("/docs/usage/saving-loading#generating") model package], a unicode | #[+a("/usage/training#models-generating") model package], a unicode
| path or a #[code Path]-like object. spaCy will try resolving the load | path or a #[code Path]-like object. spaCy will try resolving the load
| argument in this order. If a model is loaded from a shortcut link or | argument in this order. If a model is loaded from a shortcut link or
| package name, spaCy will assume it's a Python package and import it and | package name, spaCy will assume it's a Python package and import it and
@ -38,25 +36,57 @@ p
+cell list +cell list
+cell +cell
| Names of pipeline components to | Names of pipeline components to
| #[+a("/docs/usage/language-processing-pipeline#disabling") disable]. | #[+a("/usage/processing-pipelines#disabling") disable].
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Language] +cell #[code Language]
+cell A #[code Language] object with the loaded model. +cell A #[code Language] object with the loaded model.
+infobox("⚠️ Deprecation note") +infobox("Deprecation note", "⚠️")
.o-block .o-block
| As of spaCy 2.0, the #[code path] keyword argument is deprecated. spaCy | As of spaCy 2.0, the #[code path] keyword argument is deprecated. spaCy
| will also raise an error if no model could be loaded and never just | will also raise an error if no model could be loaded and never just
| return an empty #[code Language] object. If you need a blank language, | return an empty #[code Language] object. If you need a blank language,
| you need to import it explicitly (#[code from spacy.lang.en import English]) | you can use the new function #[+api("spacy#blank") #[code spacy.blank()]]
| or use #[+api("util#get_lang_class") #[code util.get_lang_class]]. | or import the class explicitly, e.g.
| #[code from spacy.lang.en import English].
+code-new nlp = spacy.load('/model') +code-new nlp = spacy.load('/model')
+code-old nlp = spacy.load('en', path='/model') +code-old nlp = spacy.load('en', path='/model')
+h(2, "info") spacy.info +h(3, "spacy.blank") spacy.blank
+tag function
+tag-new(2)
p
| Create a blank model of a given language class. This function is the
| twin of #[code spacy.load()].
+aside-code("Example").
nlp_en = spacy.blank('en')
nlp_de = spacy.blank('de')
+table(["Name", "Type", "Description"])
+row
+cell #[code name]
+cell unicode
+cell ISO code of the language class to load.
+row
+cell #[code disable]
+cell list
+cell
| Names of pipeline components to
| #[+a("/usage/processing-pipelines#disabling") disable].
+row("foot")
+cell returns
+cell #[code Language]
+cell An empty #[code Language] object of the appropriate subclass.
+h(4, "spacy.info") spacy.info
+tag function +tag function
p p
@ -83,13 +113,13 @@ p
+cell Print information as Markdown. +cell Print information as Markdown.
+h(2, "explain") spacy.explain +h(3, "spacy.explain") spacy.explain
+tag function +tag function
p p
| Get a description for a given POS tag, dependency label or entity type. | Get a description for a given POS tag, dependency label or entity type.
| For a list of available terms, see | For a list of available terms, see
| #[+src(gh("spacy", "spacy/glossary.py")) glossary.py]. | #[+src(gh("spacy", "spacy/glossary.py")) #[code glossary.py]].
+aside-code("Example"). +aside-code("Example").
spacy.explain('NORP') spacy.explain('NORP')
@ -107,18 +137,18 @@ p
+cell unicode +cell unicode
+cell Term to explain. +cell Term to explain.
+footrow +row("foot")
+cell returns +cell returns
+cell unicode +cell unicode
+cell The explanation, or #[code None] if not found in the glossary. +cell The explanation, or #[code None] if not found in the glossary.
+h(2, "set_factory") spacy.set_factory +h(3, "spacy.set_factory") spacy.set_factory
+tag function +tag function
+tag-new(2) +tag-new(2)
p p
| Set a factory that returns a custom | Set a factory that returns a custom
| #[+a("/docs/usage/language-processing-pipeline") processing pipeline] | #[+a("/usage/processing-pipelines") processing pipeline]
| component. Factories are useful for creating stateful components, especially ones which depend on shared data. | component. Factories are useful for creating stateful components, especially ones which depend on shared data.
+aside-code("Example"). +aside-code("Example").

View File

@ -1,10 +1,8 @@
//- 💫 DOCS > API > UTIL //- 💫 DOCS > API > TOP-LEVEL > UTIL
include ../../_includes/_mixins
p p
| spaCy comes with a small collection of utility functions located in | spaCy comes with a small collection of utility functions located in
| #[+src(gh("spaCy", "spacy/util.py")) spacy/util.py]. | #[+src(gh("spaCy", "spacy/util.py")) #[code spacy/util.py]].
| Because utility functions are mostly intended for | Because utility functions are mostly intended for
| #[strong internal use within spaCy], their behaviour may change with | #[strong internal use within spaCy], their behaviour may change with
| future releases. The functions documented on this page should be safe | future releases. The functions documented on this page should be safe
@ -12,7 +10,7 @@ p
| recommend having additional tests in place if your application depends on | recommend having additional tests in place if your application depends on
| any of spaCy's utilities. | any of spaCy's utilities.
+h(2, "get_data_path") util.get_data_path +h(3, "util.get_data_path") util.get_data_path
+tag function +tag function
p p
@ -25,12 +23,12 @@ p
+cell bool +cell bool
+cell Only return path if it exists, otherwise return #[code None]. +cell Only return path if it exists, otherwise return #[code None].
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Path] / #[code None] +cell #[code Path] / #[code None]
+cell Data path or #[code None]. +cell Data path or #[code None].
+h(2, "set_data_path") util.set_data_path +h(3, "util.set_data_path") util.set_data_path
+tag function +tag function
p p
@ -47,12 +45,12 @@ p
+cell unicode or #[code Path] +cell unicode or #[code Path]
+cell Path to new data directory. +cell Path to new data directory.
+h(2, "get_lang_class") util.get_lang_class +h(3, "util.get_lang_class") util.get_lang_class
+tag function +tag function
p p
| Import and load a #[code Language] class. Allows lazy-loading | Import and load a #[code Language] class. Allows lazy-loading
| #[+a("/docs/usage/adding-languages") language data] and importing | #[+a("/usage/adding-languages") language data] and importing
| languages using the two-letter language code. | languages using the two-letter language code.
+aside-code("Example"). +aside-code("Example").
@ -67,12 +65,12 @@ p
+cell unicode +cell unicode
+cell Two-letter language code, e.g. #[code 'en']. +cell Two-letter language code, e.g. #[code 'en'].
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Language] +cell #[code Language]
+cell Language class. +cell Language class.
+h(2, "load_model") util.load_model +h(3, "util.load_model") util.load_model
+tag function +tag function
+tag-new(2) +tag-new(2)
@ -101,12 +99,12 @@ p
+cell - +cell -
+cell Specific overrides, like pipeline components to disable. +cell Specific overrides, like pipeline components to disable.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Language] +cell #[code Language]
+cell #[code Language] class with the loaded model. +cell #[code Language] class with the loaded model.
+h(2, "load_model_from_path") util.load_model_from_path +h(3, "util.load_model_from_path") util.load_model_from_path
+tag function +tag function
+tag-new(2) +tag-new(2)
@ -139,18 +137,18 @@ p
+cell - +cell -
+cell Specific overrides, like pipeline components to disable. +cell Specific overrides, like pipeline components to disable.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Language] +cell #[code Language]
+cell #[code Language] class with the loaded model. +cell #[code Language] class with the loaded model.
+h(2, "load_model_from_init_py") util.load_model_from_init_py +h(3, "util.load_model_from_init_py") util.load_model_from_init_py
+tag function +tag function
+tag-new(2) +tag-new(2)
p p
| A helper function to use in the #[code load()] method of a model package's | A helper function to use in the #[code load()] method of a model package's
| #[+src(gh("spacy-dev-resources", "templates/model/en_model_name/__init__.py")) __init__.py]. | #[+src(gh("spacy-dev-resources", "templates/model/en_model_name/__init__.py")) #[code __init__.py]].
+aside-code("Example"). +aside-code("Example").
from spacy.util import load_model_from_init_py from spacy.util import load_model_from_init_py
@ -169,12 +167,12 @@ p
+cell - +cell -
+cell Specific overrides, like pipeline components to disable. +cell Specific overrides, like pipeline components to disable.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Language] +cell #[code Language]
+cell #[code Language] class with the loaded model. +cell #[code Language] class with the loaded model.
+h(2, "get_model_meta") util.get_model_meta +h(3, "util.get_model_meta") util.get_model_meta
+tag function +tag function
+tag-new(2) +tag-new(2)
@ -190,17 +188,17 @@ p
+cell unicode or #[code Path] +cell unicode or #[code Path]
+cell Path to model directory. +cell Path to model directory.
+footrow +row("foot")
+cell returns +cell returns
+cell dict +cell dict
+cell The model's meta data. +cell The model's meta data.
+h(2, "is_package") util.is_package +h(3, "util.is_package") util.is_package
+tag function +tag function
p p
| Check if string maps to a package installed via pip. Mainly used to | Check if string maps to a package installed via pip. Mainly used to
| validate #[+a("/docs/usage/models") model packages]. | validate #[+a("/usage/models") model packages].
+aside-code("Example"). +aside-code("Example").
util.is_package('en_core_web_sm') # True util.is_package('en_core_web_sm') # True
@ -212,18 +210,18 @@ p
+cell unicode +cell unicode
+cell Name of package. +cell Name of package.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code bool] +cell #[code bool]
+cell #[code True] if installed package, #[code False] if not. +cell #[code True] if installed package, #[code False] if not.
+h(2, "get_package_path") util.get_package_path +h(3, "util.get_package_path") util.get_package_path
+tag function +tag function
+tag-new(2) +tag-new(2)
p p
| Get path to an installed package. Mainly used to resolve the location of | Get path to an installed package. Mainly used to resolve the location of
| #[+a("/docs/usage/models") model packages]. Currently imports the package | #[+a("/usage/models") model packages]. Currently imports the package
| to find its path. | to find its path.
+aside-code("Example"). +aside-code("Example").
@ -236,12 +234,12 @@ p
+cell unicode +cell unicode
+cell Name of installed package. +cell Name of installed package.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Path] +cell #[code Path]
+cell Path to model package directory. +cell Path to model package directory.
+h(2, "is_in_jupyter") util.is_in_jupyter +h(3, "util.is_in_jupyter") util.is_in_jupyter
+tag function +tag function
+tag-new(2) +tag-new(2)
@ -257,17 +255,17 @@ p
return display(HTML(html)) return display(HTML(html))
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell bool +cell bool
+cell #[code True] if in Jupyter, #[code False] if not. +cell #[code True] if in Jupyter, #[code False] if not.
+h(2, "update_exc") util.update_exc +h(3, "util.update_exc") util.update_exc
+tag function +tag function
p p
| Update, validate and overwrite | Update, validate and overwrite
| #[+a("/docs/usage/adding-languages#tokenizer-exceptions") tokenizer exceptions]. | #[+a("/usage/adding-languages#tokenizer-exceptions") tokenizer exceptions].
| Used to combine global exceptions with custom, language-specific | Used to combine global exceptions with custom, language-specific
| exceptions. Will raise an error if key doesn't match #[code ORTH] values. | exceptions. Will raise an error if key doesn't match #[code ORTH] values.
@ -288,20 +286,20 @@ p
+cell dicts +cell dicts
+cell Exception dictionaries to add to the base exceptions, in order. +cell Exception dictionaries to add to the base exceptions, in order.
+footrow +row("foot")
+cell returns +cell returns
+cell dict +cell dict
+cell Combined tokenizer exceptions. +cell Combined tokenizer exceptions.
+h(2, "prints") util.prints +h(3, "util.prints") util.prints
+tag function +tag function
+tag-new(2) +tag-new(2)
p p
| Print a formatted, text-wrapped message with optional title. If a text | Print a formatted, text-wrapped message with optional title. If a text
| argument is a #[code Path], it's converted to a string. Should only | argument is a #[code Path], it's converted to a string. Should only
| be used for interactive components like the #[+api("cli") cli]. | be used for interactive components like the command-line interface.
+aside-code("Example"). +aside-code("Example").
data_path = Path('/some/path') data_path = Path('/some/path')

131
website/api/annotation.jade Normal file
View File

@ -0,0 +1,131 @@
//- 💫 DOCS > API > ANNOTATION SPECS
include ../_includes/_mixins
p This document describes the target annotations spaCy is trained to predict.
+section("tokenization")
+h(2, "tokenization") Tokenization
p
| Tokenization standards are based on the
| #[+a("https://catalog.ldc.upenn.edu/LDC2013T19") OntoNotes 5] corpus.
| The tokenizer differs from most by including tokens for significant
| whitespace. Any sequence of whitespace characters beyond a single space
| (#[code ' ']) is included as a token.
+aside-code("Example").
from spacy.lang.en import English
nlp = English()
tokens = nlp('Some\nspaces and\ttab characters')
tokens_text = [t.text for t in tokens]
assert tokens_text == ['Some', '\n', 'spaces', ' ', 'and',
'\t', 'tab', 'characters']
p
| The whitespace tokens are useful for much the same reason punctuation is
| it's often an important delimiter in the text. By preserving it in the
| token output, we are able to maintain a simple alignment between the
| tokens and the original string, and we ensure that no information is
| lost during processing.
+section("sbd")
+h(2, "sentence-boundary") Sentence boundary detection
p
| Sentence boundaries are calculated from the syntactic parse tree, so
| features such as punctuation and capitalisation play an important but
| non-decisive role in determining the sentence boundaries. Usually this
| means that the sentence boundaries will at least coincide with clause
| boundaries, even given poorly punctuated text.
+section("pos-tagging")
+h(2, "pos-tagging") Part-of-speech Tagging
+aside("Tip: Understanding tags")
| You can also use #[code spacy.explain()] to get the description for the
| string representation of a tag. For example,
| #[code spacy.explain("RB")] will return "adverb".
include _annotation/_pos-tags
+section("lemmatization")
+h(2, "lemmatization") Lemmatization
p A "lemma" is the uninflected form of a word. In English, this means:
+list
+item #[strong Adjectives]: The form like "happy", not "happier" or "happiest"
+item #[strong Adverbs]: The form like "badly", not "worse" or "worst"
+item #[strong Nouns]: The form like "dog", not "dogs"; like "child", not "children"
+item #[strong Verbs]: The form like "write", not "writes", "writing", "wrote" or "written"
p
| The lemmatization data is taken from
| #[+a("https://wordnet.princeton.edu") WordNet]. However, we also add a
| special case for pronouns: all pronouns are lemmatized to the special
| token #[code -PRON-].
+infobox("About spaCy's custom pronoun lemma")
| Unlike verbs and common nouns, there's no clear base form of a personal
| pronoun. Should the lemma of "me" be "I", or should we normalize person
| as well, giving "it" — or maybe "he"? spaCy's solution is to introduce a
| novel symbol, #[code -PRON-], which is used as the lemma for
| all personal pronouns.
+section("dependency-parsing")
+h(2, "dependency-parsing") Syntactic Dependency Parsing
+aside("Tip: Understanding labels")
| You can also use #[code spacy.explain()] to get the description for the
| string representation of a label. For example,
| #[code spacy.explain("prt")] will return "particle".
include _annotation/_dep-labels
+section("named-entities")
+h(2, "named-entities") Named Entity Recognition
+aside("Tip: Understanding entity types")
| You can also use #[code spacy.explain()] to get the description for the
| string representation of an entity label. For example,
| #[code spacy.explain("LANGUAGE")] will return "any named language".
include _annotation/_named-entities
+h(3, "biluo") BILUO Scheme
include _annotation/_biluo
+section("training")
+h(2, "json-input") JSON input format for training
+under-construction
p spaCy takes training data in the following format:
+code("Example structure").
doc: {
id: string,
paragraphs: [{
raw: string,
sents: [int],
tokens: [{
start: int,
tag: string,
head: int,
dep: string
}],
ner: [{
start: int,
end: int,
label: string
}],
brackets: [{
start: int,
end: int,
label: string
}]
}]
}

View File

@ -1,6 +1,6 @@
//- 💫 DOCS > API > BINDER //- 💫 DOCS > API > BINDER
include ../../_includes/_mixins include ../_includes/_mixins
p A container class for serializing collections of #[code Doc] objects. p A container class for serializing collections of #[code Doc] objects.

View File

@ -0,0 +1,5 @@
//- 💫 DOCS > API > DEPENDENCYPARSER
include ../_includes/_mixins
!=partial("pipe", { subclass: "DependencyParser", short: "parser", pipeline_id: "parser" })

View File

@ -1,8 +1,6 @@
//- 💫 DOCS > API > DOC //- 💫 DOCS > API > DOC
include ../../_includes/_mixins include ../_includes/_mixins
p A container for accessing linguistic annotations.
p p
| A #[code Doc] is a sequence of #[+api("token") #[code Token]] objects. | A #[code Doc] is a sequence of #[+api("token") #[code Token]] objects.
@ -47,7 +45,7 @@ p
| subsequent space. Must have the same length as #[code words], if | subsequent space. Must have the same length as #[code words], if
| specified. Defaults to a sequence of #[code True]. | specified. Defaults to a sequence of #[code True].
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Doc] +cell #[code Doc]
+cell The newly constructed object. +cell The newly constructed object.
@ -73,7 +71,7 @@ p
+cell int +cell int
+cell The index of the token. +cell The index of the token.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Token] +cell #[code Token]
+cell The token at #[code doc[i]]. +cell The token at #[code doc[i]].
@ -96,7 +94,7 @@ p
+cell tuple +cell tuple
+cell The slice of the document to get. +cell The slice of the document to get.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Span] +cell #[code Span]
+cell The span at #[code doc[start : end]]. +cell The span at #[code doc[start : end]].
@ -120,7 +118,7 @@ p
| from Cython. | from Cython.
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell yields +cell yields
+cell #[code Token] +cell #[code Token]
+cell A #[code Token] object. +cell A #[code Token] object.
@ -135,7 +133,7 @@ p Get the number of tokens in the document.
assert len(doc) == 7 assert len(doc) == 7
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell int +cell int
+cell The number of tokens in the document. +cell The number of tokens in the document.
@ -172,7 +170,7 @@ p Create a #[code Span] object from the slice #[code doc.text[start : end]].
+cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']] +cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']]
+cell A meaning representation of the span. +cell A meaning representation of the span.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Span] +cell #[code Span]
+cell The newly constructed object. +cell The newly constructed object.
@ -200,7 +198,7 @@ p
| The object to compare with. By default, accepts #[code Doc], | The object to compare with. By default, accepts #[code Doc],
| #[code Span], #[code Token] and #[code Lexeme] objects. | #[code Span], #[code Token] and #[code Lexeme] objects.
+footrow +row("foot")
+cell returns +cell returns
+cell float +cell float
+cell A scalar similarity score. Higher is more similar. +cell A scalar similarity score. Higher is more similar.
@ -226,7 +224,7 @@ p
+cell int +cell int
+cell The attribute ID +cell The attribute ID
+footrow +row("foot")
+cell returns +cell returns
+cell dict +cell dict
+cell A dictionary mapping attributes to integer counts. +cell A dictionary mapping attributes to integer counts.
@ -251,7 +249,7 @@ p
+cell list +cell list
+cell A list of attribute ID ints. +cell A list of attribute ID ints.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code.u-break numpy.ndarray[ndim=2, dtype='int32']] +cell #[code.u-break numpy.ndarray[ndim=2, dtype='int32']]
+cell +cell
@ -285,7 +283,7 @@ p
+cell #[code.u-break numpy.ndarray[ndim=2, dtype='int32']] +cell #[code.u-break numpy.ndarray[ndim=2, dtype='int32']]
+cell The attribute values to load. +cell The attribute values to load.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Doc] +cell #[code Doc]
+cell Itself. +cell Itself.
@ -326,7 +324,7 @@ p Loads state from a directory. Modifies the object in place and returns it.
| A path to a directory. Paths may be either strings or | A path to a directory. Paths may be either strings or
| #[code Path]-like objects. | #[code Path]-like objects.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Doc] +cell #[code Doc]
+cell The modified #[code Doc] object. +cell The modified #[code Doc] object.
@ -341,7 +339,7 @@ p Serialize, i.e. export the document contents to a binary string.
doc_bytes = doc.to_bytes() doc_bytes = doc.to_bytes()
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell bytes +cell bytes
+cell +cell
@ -367,7 +365,7 @@ p Deserialize, i.e. import the document contents from a binary string.
+cell bytes +cell bytes
+cell The string to load from. +cell The string to load from.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Doc] +cell #[code Doc]
+cell The #[code Doc] object. +cell The #[code Doc] object.
@ -378,7 +376,7 @@ p Deserialize, i.e. import the document contents from a binary string.
p p
| Retokenize the document, such that the span at | Retokenize the document, such that the span at
| #[code doc.text[start_idx : end_idx]] is merged into a single token. If | #[code doc.text[start_idx : end_idx]] is merged into a single token. If
| #[code start_idx] and #[end_idx] do not mark start and end token | #[code start_idx] and #[code end_idx] do not mark start and end token
| boundaries, the document remains unchanged. | boundaries, the document remains unchanged.
+aside-code("Example"). +aside-code("Example").
@ -405,7 +403,7 @@ p
| attributes are inherited from the syntactic root token of | attributes are inherited from the syntactic root token of
| the span. | the span.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Token] +cell #[code Token]
+cell +cell
@ -440,7 +438,7 @@ p
+cell bool +cell bool
+cell Don't include arcs or modifiers. +cell Don't include arcs or modifiers.
+footrow +row("foot")
+cell returns +cell returns
+cell dict +cell dict
+cell Parse tree as dict. +cell Parse tree as dict.
@ -462,7 +460,7 @@ p
assert ents[0].text == 'Mr. Best' assert ents[0].text == 'Mr. Best'
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell yields +cell yields
+cell #[code Span] +cell #[code Span]
+cell Entities in the document. +cell Entities in the document.
@ -485,7 +483,7 @@ p
assert chunks[1].text == "another phrase" assert chunks[1].text == "another phrase"
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell yields +cell yields
+cell #[code Span] +cell #[code Span]
+cell Noun chunks in the document. +cell Noun chunks in the document.
@ -507,7 +505,7 @@ p
assert [s.root.text for s in sents] == ["is", "'s"] assert [s.root.text for s in sents] == ["is", "'s"]
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell yields +cell yields
+cell #[code Span] +cell #[code Span]
+cell Sentences in the document. +cell Sentences in the document.
@ -525,7 +523,7 @@ p
assert doc.has_vector assert doc.has_vector
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell bool +cell bool
+cell Whether the document has a vector data attached. +cell Whether the document has a vector data attached.
@ -544,7 +542,7 @@ p
assert doc.vector.shape == (300,) assert doc.vector.shape == (300,)
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']] +cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']]
+cell A 1D numpy array representing the document's semantics. +cell A 1D numpy array representing the document's semantics.
@ -564,7 +562,7 @@ p
assert doc1.vector_norm != doc2.vector_norm assert doc1.vector_norm != doc2.vector_norm
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell float +cell float
+cell The L2 norm of the vector representation. +cell The L2 norm of the vector representation.

View File

@ -0,0 +1,5 @@
//- 💫 DOCS > API > ENTITYRECOGNIZER
include ../_includes/_mixins
!=partial("pipe", { subclass: "EntityRecognizer", short: "ner", pipeline_id: "ner" })

View File

@ -1,14 +1,12 @@
//- 💫 DOCS > API > GOLDCORPUS //- 💫 DOCS > API > GOLDCORPUS
include ../../_includes/_mixins include ../_includes/_mixins
p p
| An annotated corpus, using the JSON file format. Manages annotations for | This class manages annotations for tagging, dependency parsing and NER.
| tagging, dependency parsing and NER.
+h(2, "init") GoldCorpus.__init__ +h(2, "init") GoldCorpus.__init__
+tag method +tag method
+tag-new(2)
p Create a #[code GoldCorpus]. p Create a #[code GoldCorpus].

View File

@ -1,6 +1,6 @@
//- 💫 DOCS > API > GOLDPARSE //- 💫 DOCS > API > GOLDPARSE
include ../../_includes/_mixins include ../_includes/_mixins
p Collection for training annotations. p Collection for training annotations.
@ -40,7 +40,7 @@ p Create a #[code GoldParse].
+cell iterable +cell iterable
+cell A sequence of named entity annotations, either as BILUO tag strings, or as #[code (start_char, end_char, label)] tuples, representing the entity positions. +cell A sequence of named entity annotations, either as BILUO tag strings, or as #[code (start_char, end_char, label)] tuples, representing the entity positions.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code GoldParse] +cell #[code GoldParse]
+cell The newly constructed object. +cell The newly constructed object.
@ -51,7 +51,7 @@ p Create a #[code GoldParse].
p Get the number of gold-standard tokens. p Get the number of gold-standard tokens.
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell int +cell int
+cell The number of gold-standard tokens. +cell The number of gold-standard tokens.
@ -64,7 +64,7 @@ p
| tree. | tree.
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell bool +cell bool
+cell Whether annotations form projective tree. +cell Whether annotations form projective tree.
@ -119,7 +119,7 @@ p
p p
| Encode labelled spans into per-token tags, using the | Encode labelled spans into per-token tags, using the
| #[+a("/docs/api/annotation#biluo") BILUO scheme] (Begin/In/Last/Unit/Out). | #[+a("/api/annotation#biluo") BILUO scheme] (Begin/In/Last/Unit/Out).
p p
| Returns a list of unicode strings, describing the tags. Each tag string | Returns a list of unicode strings, describing the tags. Each tag string
@ -157,11 +157,11 @@ p
| and #[code end] should be character-offset integers denoting the | and #[code end] should be character-offset integers denoting the
| slice into the original string. | slice into the original string.
+footrow +row("foot")
+cell returns +cell returns
+cell list +cell list
+cell +cell
| Unicode strings, describing the | Unicode strings, describing the
| #[+a("/docs/api/annotation#biluo") BILUO] tags. | #[+a("/api/annotation#biluo") BILUO] tags.

14
website/api/index.jade Normal file
View File

@ -0,0 +1,14 @@
//- 💫 DOCS > API > ARCHITECTURE
include ../_includes/_mixins
+section("basics")
include ../usage/_spacy-101/_architecture
+section("nn-model")
+h(2, "nn-model") Neural network model architecture
include _architecture/_nn-model
+section("cython")
+h(2, "cython") Cython conventions
include _architecture/_cython

View File

@ -1,10 +1,10 @@
//- 💫 DOCS > API > LANGUAGE //- 💫 DOCS > API > LANGUAGE
include ../../_includes/_mixins include ../_includes/_mixins
p p
| A text-processing pipeline. Usually you'll load this once per process, | Usually you'll load this once per process as #[code nlp] and pass the
| and pass the instance around your application. | instance around your application.
+h(2, "init") Language.__init__ +h(2, "init") Language.__init__
+tag method +tag method
@ -49,7 +49,7 @@ p Initialise a #[code Language] object.
| Custom meta data for the #[code Language] class. Is written to by | Custom meta data for the #[code Language] class. Is written to by
| models to add model meta data. | models to add model meta data.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Language] +cell #[code Language]
+cell The newly constructed object. +cell The newly constructed object.
@ -77,14 +77,14 @@ p
+cell list +cell list
+cell +cell
| Names of pipeline components to | Names of pipeline components to
| #[+a("/docs/usage/language-processing-pipeline#disabling") disable]. | #[+a("/usage/processing-pipelines#disabling") disable].
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Doc] +cell #[code Doc]
+cell A container for accessing the annotations. +cell A container for accessing the annotations.
+infobox("⚠️ Deprecation note") +infobox("Deprecation note", "⚠️")
.o-block .o-block
| Pipeline components to prevent from being loaded can now be added as | Pipeline components to prevent from being loaded can now be added as
| a list to #[code disable], instead of specifying one keyword argument | a list to #[code disable], instead of specifying one keyword argument
@ -136,9 +136,9 @@ p
+cell list +cell list
+cell +cell
| Names of pipeline components to | Names of pipeline components to
| #[+a("/docs/usage/language-processing-pipeline#disabling") disable]. | #[+a("/usage/processing-pipelines#disabling") disable].
+footrow +row("foot")
+cell yields +cell yields
+cell #[code Doc] +cell #[code Doc]
+cell Documents in the order of the original text. +cell Documents in the order of the original text.
@ -175,7 +175,7 @@ p Update the models in the pipeline.
+cell callable +cell callable
+cell An optimizer. +cell An optimizer.
+footrow +row("foot")
+cell returns +cell returns
+cell dict +cell dict
+cell Results from the update. +cell Results from the update.
@ -200,7 +200,7 @@ p
+cell - +cell -
+cell Config parameters. +cell Config parameters.
+footrow +row("foot")
+cell yields +cell yields
+cell tuple +cell tuple
+cell An optimizer. +cell An optimizer.
@ -242,7 +242,7 @@ p
+cell iterable +cell iterable
+cell Tuples of #[code Doc] and #[code GoldParse] objects. +cell Tuples of #[code Doc] and #[code GoldParse] objects.
+footrow +row("foot")
+cell yields +cell yields
+cell tuple +cell tuple
+cell Tuples of #[code Doc] and #[code GoldParse] objects. +cell Tuples of #[code Doc] and #[code GoldParse] objects.
@ -271,7 +271,7 @@ p
+cell list +cell list
+cell +cell
| Names of pipeline components to | Names of pipeline components to
| #[+a("/docs/usage/language-processing-pipeline#disabling") disable] | #[+a("/usage/processing-pipelines#disabling") disable]
| and prevent from being saved. | and prevent from being saved.
+h(2, "from_disk") Language.from_disk +h(2, "from_disk") Language.from_disk
@ -300,14 +300,14 @@ p
+cell list +cell list
+cell +cell
| Names of pipeline components to | Names of pipeline components to
| #[+a("/docs/usage/language-processing-pipeline#disabling") disable]. | #[+a("/usage/processing-pipelines#disabling") disable].
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Language] +cell #[code Language]
+cell The modified #[code Language] object. +cell The modified #[code Language] object.
+infobox("⚠️ Deprecation note") +infobox("Deprecation note", "⚠️")
.o-block .o-block
| As of spaCy v2.0, the #[code save_to_directory] method has been | As of spaCy v2.0, the #[code save_to_directory] method has been
| renamed to #[code to_disk], to improve consistency across classes. | renamed to #[code to_disk], to improve consistency across classes.
@ -332,10 +332,10 @@ p Serialize the current state to a binary string.
+cell list +cell list
+cell +cell
| Names of pipeline components to | Names of pipeline components to
| #[+a("/docs/usage/language-processing-pipeline#disabling") disable] | #[+a("/usage/processing-pipelines#disabling") disable]
| and prevent from being serialized. | and prevent from being serialized.
+footrow +row("foot")
+cell returns +cell returns
+cell bytes +cell bytes
+cell The serialized form of the #[code Language] object. +cell The serialized form of the #[code Language] object.
@ -362,14 +362,14 @@ p Load state from a binary string.
+cell list +cell list
+cell +cell
| Names of pipeline components to | Names of pipeline components to
| #[+a("/docs/usage/language-processing-pipeline#disabling") disable]. | #[+a("/usage/processing-pipelines#disabling") disable].
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Language] +cell #[code Language]
+cell The #[code Language] object. +cell The #[code Language] object.
+infobox("⚠️ Deprecation note") +infobox("Deprecation note", "⚠️")
.o-block .o-block
| Pipeline components to prevent from being loaded can now be added as | Pipeline components to prevent from being loaded can now be added as
| a list to #[code disable], instead of specifying one keyword argument | a list to #[code disable], instead of specifying one keyword argument

View File

@ -0,0 +1,5 @@
//- 💫 DOCS > API > LEMMATIZER
include ../_includes/_mixins
+under-construction

View File

@ -1,6 +1,6 @@
//- 💫 DOCS > API > LEXEME //- 💫 DOCS > API > LEXEME
include ../../_includes/_mixins include ../_includes/_mixins
p p
| An entry in the vocabulary. A #[code Lexeme] has no string context it's | An entry in the vocabulary. A #[code Lexeme] has no string context it's
@ -24,7 +24,7 @@ p Create a #[code Lexeme] object.
+cell int +cell int
+cell The orth id of the lexeme. +cell The orth id of the lexeme.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Lexeme] +cell #[code Lexeme]
+cell The newly constructed object. +cell The newly constructed object.
@ -65,7 +65,7 @@ p Check the value of a boolean flag.
+cell int +cell int
+cell The attribute ID of the flag to query. +cell The attribute ID of the flag to query.
+footrow +row("foot")
+cell returns +cell returns
+cell bool +cell bool
+cell The value of the flag. +cell The value of the flag.
@ -91,7 +91,7 @@ p Compute a semantic similarity estimate. Defaults to cosine over vectors.
| The object to compare with. By default, accepts #[code Doc], | The object to compare with. By default, accepts #[code Doc],
| #[code Span], #[code Token] and #[code Lexeme] objects. | #[code Span], #[code Token] and #[code Lexeme] objects.
+footrow +row("foot")
+cell returns +cell returns
+cell float +cell float
+cell A scalar similarity score. Higher is more similar. +cell A scalar similarity score. Higher is more similar.
@ -110,7 +110,7 @@ p
assert apple.has_vector assert apple.has_vector
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell bool +cell bool
+cell Whether the lexeme has a vector data attached. +cell Whether the lexeme has a vector data attached.
@ -127,7 +127,7 @@ p A real-valued meaning representation.
assert apple.vector.shape == (300,) assert apple.vector.shape == (300,)
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']] +cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']]
+cell A 1D numpy array representing the lexeme's semantics. +cell A 1D numpy array representing the lexeme's semantics.
@ -146,7 +146,7 @@ p The L2 norm of the lexeme's vector representation.
assert apple.vector_norm != pasta.vector_norm assert apple.vector_norm != pasta.vector_norm
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell float +cell float
+cell The L2 norm of the vector representation. +cell The L2 norm of the vector representation.

View File

@ -1,10 +1,8 @@
//- 💫 DOCS > API > MATCHER //- 💫 DOCS > API > MATCHER
include ../../_includes/_mixins include ../_includes/_mixins
p Match sequences of tokens, based on pattern rules. +infobox("Deprecation note", "⚠️")
+infobox("⚠️ Deprecation note")
| As of spaCy 2.0, #[code Matcher.add_pattern] and #[code Matcher.add_entity] | As of spaCy 2.0, #[code Matcher.add_pattern] and #[code Matcher.add_entity]
| are deprecated and have been replaced with a simpler | are deprecated and have been replaced with a simpler
| #[+api("matcher#add") #[code Matcher.add]] that lets you add a list of | #[+api("matcher#add") #[code Matcher.add]] that lets you add a list of
@ -39,7 +37,7 @@ p Create the rule-based #[code Matcher].
+cell dict +cell dict
+cell Patterns to add to the matcher, keyed by ID. +cell Patterns to add to the matcher, keyed by ID.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Matcher] +cell #[code Matcher]
+cell The newly constructed object. +cell The newly constructed object.
@ -64,7 +62,7 @@ p Find all token sequences matching the supplied patterns on the #[code Doc].
+cell #[code Doc] +cell #[code Doc]
+cell The document to match over. +cell The document to match over.
+footrow +row("foot")
+cell returns +cell returns
+cell list +cell list
+cell +cell
@ -81,7 +79,7 @@ p Find all token sequences matching the supplied patterns on the #[code Doc].
| actions per pattern within the same matcher. For example, you might only | actions per pattern within the same matcher. For example, you might only
| want to merge some entity types, and set custom flags for other matched | want to merge some entity types, and set custom flags for other matched
| patterns. For more details and examples, see the usage guide on | patterns. For more details and examples, see the usage guide on
| #[+a("/docs/usage/rule-based-matching") rule-based matching]. | #[+a("/usage/linguistic-features#rule-based-matching") rule-based matching].
+h(2, "pipe") Matcher.pipe +h(2, "pipe") Matcher.pipe
+tag method +tag method
@ -113,7 +111,7 @@ p Match a stream of documents, yielding them in turn.
| parallel, if the #[code Matcher] implementation supports | parallel, if the #[code Matcher] implementation supports
| multi-threading. | multi-threading.
+footrow +row("foot")
+cell yields +cell yields
+cell #[code Doc] +cell #[code Doc]
+cell Documents, in order. +cell Documents, in order.
@ -134,7 +132,7 @@ p
assert len(matcher) == 1 assert len(matcher) == 1
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell int +cell int
+cell The number of rules. +cell The number of rules.
@ -156,7 +154,8 @@ p Check whether the matcher contains rules for a match ID.
+cell #[code key] +cell #[code key]
+cell unicode +cell unicode
+cell The match ID. +cell The match ID.
+footrow
+row("foot")
+cell returns +cell returns
+cell int +cell int
+cell Whether the matcher contains rules for this match ID. +cell Whether the matcher contains rules for this match ID.
@ -203,7 +202,7 @@ p
| Match pattern. A pattern consists of a list of dicts, where each | Match pattern. A pattern consists of a list of dicts, where each
| dict describes a token. | dict describes a token.
+infobox("⚠️ Deprecation note") +infobox("Deprecation note", "⚠️")
.o-block .o-block
| As of spaCy 2.0, #[code Matcher.add_pattern] and #[code Matcher.add_entity] | As of spaCy 2.0, #[code Matcher.add_pattern] and #[code Matcher.add_entity]
| are deprecated and have been replaced with a simpler | are deprecated and have been replaced with a simpler
@ -257,7 +256,7 @@ p
+cell unicode +cell unicode
+cell The ID of the match rule. +cell The ID of the match rule.
+footrow +row("foot")
+cell returns +cell returns
+cell tuple +cell tuple
+cell The rule, as an #[code (on_match, patterns)] tuple. +cell The rule, as an #[code (on_match, patterns)] tuple.

View File

@ -0,0 +1,181 @@
//- 💫 DOCS > API > PHRASEMATCHER
include ../_includes/_mixins
p
| The #[code PhraseMatcher] lets you efficiently match large terminology
| lists. While the #[+api("matcher") #[code Matcher]] lets you match
| squences based on lists of token descriptions, the #[code PhraseMatcher]
| accepts match patterns in the form of #[code Doc] objects.
+h(2, "init") PhraseMatcher.__init__
+tag method
p Create the rule-based #[code PhraseMatcher].
+aside-code("Example").
from spacy.matcher import PhraseMatcher
matcher = Matcher(nlp.vocab, max_length=6)
+table(["Name", "Type", "Description"])
+row
+cell #[code vocab]
+cell #[code Vocab]
+cell
| The vocabulary object, which must be shared with the documents
| the matcher will operate on.
+row
+cell #[code max_length]
+cell int
+cell Mamimum length of a phrase pattern to add.
+row("foot")
+cell returns
+cell #[code PhraseMatcher]
+cell The newly constructed object.
+h(2, "call") PhraseMatcher.__call__
+tag method
p Find all token sequences matching the supplied patterns on the #[code Doc].
+aside-code("Example").
from spacy.matcher import Matcher
matcher = Matcher(nlp.vocab)
matcher.add('OBAMA', None, nlp(u"Barack Obama"))
doc = nlp(u"Barack Obama lifts America one last time in emotional farewell")
matches = matcher(doc)
+table(["Name", "Type", "Description"])
+row
+cell #[code doc]
+cell #[code Doc]
+cell The document to match over.
+row("foot")
+cell returns
+cell list
+cell
| A list of #[code (match_id, start, end)] tuples, describing the
| matches. A match tuple describes a span #[code doc[start:end]].
| The #[code match_id] is the ID of the added match pattern.
+h(2, "pipe") PhraseMatcher.pipe
+tag method
p Match a stream of documents, yielding them in turn.
+aside-code("Example").
from spacy.matcher import PhraseMatcher
matcher = PhraseMatcher(nlp.vocab)
for doc in matcher.pipe(texts, batch_size=50, n_threads=4):
pass
+table(["Name", "Type", "Description"])
+row
+cell #[code docs]
+cell iterable
+cell A stream of documents.
+row
+cell #[code batch_size]
+cell int
+cell The number of documents to accumulate into a working set.
+row
+cell #[code n_threads]
+cell int
+cell
| The number of threads with which to work on the buffer in
| parallel, if the #[code PhraseMatcher] implementation supports
| multi-threading.
+row("foot")
+cell yields
+cell #[code Doc]
+cell Documents, in order.
+h(2, "len") PhraseMatcher.__len__
+tag method
p
| Get the number of rules added to the matcher. Note that this only returns
| the number of rules (identical with the number of IDs), not the number
| of individual patterns.
+aside-code("Example").
matcher = PhraseMatcher(nlp.vocab)
assert len(matcher) == 0
matcher.add('OBAMA', None, nlp(u"Barack Obama"))
assert len(matcher) == 1
+table(["Name", "Type", "Description"])
+row("foot")
+cell returns
+cell int
+cell The number of rules.
+h(2, "contains") PhraseMatcher.__contains__
+tag method
p Check whether the matcher contains rules for a match ID.
+aside-code("Example").
matcher = PhraseMatcher(nlp.vocab)
assert len(matcher) == 0
matcher.add('OBAMA', None, nlp(u"Barack Obama"))
assert len(matcher) == 1
+table(["Name", "Type", "Description"])
+row
+cell #[code key]
+cell unicode
+cell The match ID.
+row("foot")
+cell returns
+cell int
+cell Whether the matcher contains rules for this match ID.
+h(2, "add") PhraseMatcher.add
+tag method
p
| Add a rule to the matcher, consisting of an ID key, one or more patterns, and
| a callback function to act on the matches. The callback function will
| receive the arguments #[code matcher], #[code doc], #[code i] and
| #[code matches]. If a pattern already exists for the given ID, the
| patterns will be extended. An #[code on_match] callback will be
| overwritten.
+aside-code("Example").
def on_match(matcher, doc, id, matches):
print('Matched!', matches)
matcher = PhraseMatcher(nlp.vocab)
matcher.add('OBAMA', on_match, nlp(u"Barack Obama"))
matcher.add('HEALTH', on_match, nlp(u"health care reform"),
nlp(u"healthcare reform"))
doc = nlp(u"Barack Obama urges Congress to find courage to defend his healthcare reforms")
matches = matcher(doc)
+table(["Name", "Type", "Description"])
+row
+cell #[code match_id]
+cell unicode
+cell An ID for the thing you're matching.
+row
+cell #[code on_match]
+cell callable or #[code None]
+cell
| Callback function to act on matches. Takes the arguments
| #[code matcher], #[code doc], #[code i] and #[code matches].
+row
+cell #[code *docs]
+cell list
+cell
| #[code Doc] objects of the phrases to match.

390
website/api/pipe.jade Normal file
View File

@ -0,0 +1,390 @@
//- 💫 DOCS > API > PIPE
include ../_includes/_mixins
//- This page can be used as a template for all other classes that inherit
//- from `Pipe`.
if subclass
+infobox
| This class is a subclass of #[+api("pipe") #[code Pipe]] and
| follows the same API. The pipeline component is available in the
| #[+a("/usage/processing-pipelines") processing pipeline] via the ID
| #[code "#{pipeline_id}"].
else
p
| This class is not instantiated directly. Components inherit from it,
| and it defines the interface that components should follow to
| function as components in a spaCy analysis pipeline.
- CLASSNAME = subclass || 'Pipe'
- VARNAME = short || CLASSNAME.toLowerCase()
+h(2, "model") #{CLASSNAME}.Model
+tag classmethod
p
| Initialise a model for the pipe. The model should implement the
| #[code thinc.neural.Model] API. Wrappers are available for
| #[+a("/usage/deep-learning") most major machine learning libraries].
+table(["Name", "Type", "Description"])
+row
+cell #[code **kwargs]
+cell -
+cell Parameters for initialising the model
+row("foot")
+cell returns
+cell object
+cell The initialised model.
+h(2, "init") #{CLASSNAME}.__init__
+tag method
p Create a new pipeline instance.
+aside-code("Example").
from spacy.pipeline import #{CLASSNAME}
#{VARNAME} = #{CLASSNAME}(nlp.vocab)
+table(["Name", "Type", "Description"])
+row
+cell #[code vocab]
+cell #[code Vocab]
+cell The shared vocabulary.
+row
+cell #[code model]
+cell #[code thinc.neural.Model] or #[code True]
+cell
| The model powering the pipeline component. If no model is
| supplied, the model is created when you call
| #[code begin_training], #[code from_disk] or #[code from_bytes].
+row
+cell #[code **cfg]
+cell -
+cell Configuration parameters.
+row("foot")
+cell returns
+cell #[code=CLASSNAME]
+cell The newly constructed object.
+h(2, "call") #{CLASSNAME}.__call__
+tag method
p
| Apply the pipe to one document. The document is modified in place, and
| returned. Both #[code #{CLASSNAME}.__call__] and
| #[code #{CLASSNAME}.pipe] should delegate to the
| #[code #{CLASSNAME}.predict] and #[code #{CLASSNAME}.set_annotations]
| methods.
+aside-code("Example").
#{VARNAME} = #{CLASSNAME}(nlp.vocab)
doc = nlp(u"This is a sentence.")
processed = #{VARNAME}(doc)
+table(["Name", "Type", "Description"])
+row
+cell #[code doc]
+cell #[code Doc]
+cell The document to process.
+row("foot")
+cell returns
+cell #[code Doc]
+cell The processed document.
+h(2, "pipe") #{CLASSNAME}.pipe
+tag method
p
| Apply the pipe to a stream of documents. Both
| #[code #{CLASSNAME}.__call__] and #[code #{CLASSNAME}.pipe] should
| delegate to the #[code #{CLASSNAME}.predict] and
| #[code #{CLASSNAME}.set_annotations] methods.
+aside-code("Example").
texts = [u'One doc', u'...', u'Lots of docs']
#{VARNAME} = #{CLASSNAME}(nlp.vocab)
for doc in #{VARNAME}.pipe(texts, batch_size=50):
pass
+table(["Name", "Type", "Description"])
+row
+cell #[code stream]
+cell iterable
+cell A stream of documents.
+row
+cell #[code batch_size]
+cell int
+cell The number of texts to buffer. Defaults to #[code 128].
+row
+cell #[code n_threads]
+cell int
+cell
| The number of worker threads to use. If #[code -1], OpenMP will
| decide how many to use at run time. Default is #[code -1].
+row("foot")
+cell yields
+cell #[code Doc]
+cell Processed documents in the order of the original text.
+h(2, "predict") #{CLASSNAME}.predict
+tag method
p
| Apply the pipeline's model to a batch of docs, without modifying them.
+aside-code("Example").
#{VARNAME} = #{CLASSNAME}(nlp.vocab)
scores = #{VARNAME}.predict([doc1, doc2])
+table(["Name", "Type", "Description"])
+row
+cell #[code docs]
+cell iterable
+cell The documents to predict.
+row("foot")
+cell returns
+cell -
+cell Scores from the model.
+h(2, "set_annotations") #{CLASSNAME}.set_annotations
+tag method
p
| Modify a batch of documents, using pre-computed scores.
+aside-code("Example").
#{VARNAME} = #{CLASSNAME}(nlp.vocab)
scores = #{VARNAME}.predict([doc1, doc2])
#{VARNAME}.set_annotations([doc1, doc2], scores)
+table(["Name", "Type", "Description"])
+row
+cell #[code docs]
+cell iterable
+cell The documents to modify.
+row
+cell #[code scores]
+cell -
+cell The scores to set, produced by #[code #{CLASSNAME}.predict].
+h(2, "update") #{CLASSNAME}.update
+tag method
p
| Learn from a batch of documents and gold-standard information, updating
| the pipe's model. Delegates to #[code #{CLASSNAME}.predict] and
| #[code #{CLASSNAME}.get_loss].
+aside-code("Example").
#{VARNAME} = #{CLASSNAME}(nlp.vocab)
losses = {}
optimizer = nlp.begin_training()
#{VARNAME}.update([doc1, doc2], [gold1, gold2], losses=losses, sgd=optimizer)
+table(["Name", "Type", "Description"])
+row
+cell #[code docs]
+cell iterable
+cell A batch of documents to learn from.
+row
+cell #[code golds]
+cell iterable
+cell The gold-standard data. Must have the same length as #[code docs].
+row
+cell #[code drop]
+cell int
+cell The dropout rate.
+row
+cell #[code sgd]
+cell callable
+cell
| The optimizer. Should take two arguments #[code weights] and
| #[code gradient], and an optional ID.
+row
+cell #[code losses]
+cell dict
+cell
| Optional record of the loss during training. The value keyed by
| the model's name is updated.
+h(2, "get_loss") #{CLASSNAME}.get_loss
+tag method
p
| Find the loss and gradient of loss for the batch of documents and their
| predicted scores.
+aside-code("Example").
#{VARNAME} = #{CLASSNAME}(nlp.vocab)
scores = #{VARNAME}.predict([doc1, doc2])
loss, d_loss = #{VARNAME}.get_loss([doc1, doc2], [gold1, gold2], scores)
+table(["Name", "Type", "Description"])
+row
+cell #[code docs]
+cell iterable
+cell The batch of documents.
+row
+cell #[code golds]
+cell iterable
+cell The gold-standard data. Must have the same length as #[code docs].
+row
+cell #[code scores]
+cell -
+cell Scores representing the model's predictions.
+row("foot")
+cell returns
+cell tuple
+cell The loss and the gradient, i.e. #[code (loss, gradient)].
+h(2, "begin_training") #{CLASSNAME}.begin_training
+tag method
p
| Initialize the pipe for training, using data exampes if available. If no
| model has been initialized yet, the model is added.
+aside-code("Example").
#{VARNAME} = #{CLASSNAME}(nlp.vocab)
nlp.pipeline.append(#{VARNAME})
#{VARNAME}.begin_training(pipeline=nlp.pipeline)
+table(["Name", "Type", "Description"])
+row
+cell #[code gold_tuples]
+cell iterable
+cell
| Optional gold-standard annotations from which to construct
| #[+api("goldparse") #[code GoldParse]] objects.
+row
+cell #[code pipeline]
+cell list
+cell
| Optional list of #[+api("pipe") #[code Pipe]] components that
| this component is part of.
+h(2, "use_params") #{CLASSNAME}.use_params
+tag method
+tag contextmanager
p Modify the pipe's model, to use the given parameter values.
+aside-code("Example").
#{VARNAME} = #{CLASSNAME}(nlp.vocab)
with #{VARNAME}.use_params():
#{VARNAME}.to_disk('/best_model')
+table(["Name", "Type", "Description"])
+row
+cell #[code params]
+cell -
+cell
| The parameter values to use in the model. At the end of the
| context, the original parameters are restored.
+h(2, "to_disk") #{CLASSNAME}.to_disk
+tag method
p Serialize the pipe to disk.
+aside-code("Example").
#{VARNAME} = #{CLASSNAME}(nlp.vocab)
#{VARNAME}.to_disk('/path/to/#{VARNAME}')
+table(["Name", "Type", "Description"])
+row
+cell #[code path]
+cell unicode or #[code Path]
+cell
| A path to a directory, which will be created if it doesn't exist.
| Paths may be either strings or #[code Path]-like objects.
+h(2, "from_disk") #{CLASSNAME}.from_disk
+tag method
p Load the pipe from disk. Modifies the object in place and returns it.
+aside-code("Example").
#{VARNAME} = #{CLASSNAME}(nlp.vocab)
#{VARNAME}.from_disk('/path/to/#{VARNAME}')
+table(["Name", "Type", "Description"])
+row
+cell #[code path]
+cell unicode or #[code Path]
+cell
| A path to a directory. Paths may be either strings or
| #[code Path]-like objects.
+row("foot")
+cell returns
+cell #[code=CLASSNAME]
+cell The modified #[code=CLASSNAME] object.
+h(2, "to_bytes") #{CLASSNAME}.to_bytes
+tag method
+aside-code("example").
#{VARNAME} = #{CLASSNAME}(nlp.vocab)
#{VARNAME}_bytes = #{VARNAME}.to_bytes()
p Serialize the pipe to a bytestring.
+table(["Name", "Type", "Description"])
+row
+cell #[code **exclude]
+cell -
+cell Named attributes to prevent from being serialized.
+row("foot")
+cell returns
+cell bytes
+cell The serialized form of the #[code=CLASSNAME] object.
+h(2, "from_bytes") #{CLASSNAME}.from_bytes
+tag method
p Load the pipe from a bytestring. Modifies the object in place and returns it.
+aside-code("Example").
#{VARNAME}_bytes = #{VARNAME}.to_bytes()
#{VARNAME} = #{CLASSNAME}(nlp.vocab)
#{VARNAME}.from_bytes(#{VARNAME}_bytes)
+table(["Name", "Type", "Description"])
+row
+cell #[code bytes_data]
+cell bytes
+cell The data to load from.
+row
+cell #[code **exclude]
+cell -
+cell Named attributes to prevent from being loaded.
+row("foot")
+cell returns
+cell #[code=CLASSNAME]
+cell The #[code=CLASSNAME] object.

View File

@ -1,6 +1,6 @@
//- 💫 DOCS > API > SPAN //- 💫 DOCS > API > SPAN
include ../../_includes/_mixins include ../_includes/_mixins
p A slice from a #[+api("doc") #[code Doc]] object. p A slice from a #[+api("doc") #[code Doc]] object.
@ -40,7 +40,7 @@ p Create a Span object from the #[code slice doc[start : end]].
+cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']] +cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']]
+cell A meaning representation of the span. +cell A meaning representation of the span.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Span] +cell #[code Span]
+cell The newly constructed object. +cell The newly constructed object.
@ -61,7 +61,7 @@ p Get a #[code Token] object.
+cell int +cell int
+cell The index of the token within the span. +cell The index of the token within the span.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Token] +cell #[code Token]
+cell The token at #[code span[i]]. +cell The token at #[code span[i]].
@ -79,7 +79,7 @@ p Get a #[code Span] object.
+cell tuple +cell tuple
+cell The slice of the span to get. +cell The slice of the span to get.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Span] +cell #[code Span]
+cell The span at #[code span[start : end]]. +cell The span at #[code span[start : end]].
@ -95,7 +95,7 @@ p Iterate over #[code Token] objects.
assert [t.text for t in span] == ['it', 'back', '!'] assert [t.text for t in span] == ['it', 'back', '!']
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell yields +cell yields
+cell #[code Token] +cell #[code Token]
+cell A #[code Token] object. +cell A #[code Token] object.
@ -111,7 +111,7 @@ p Get the number of tokens in the span.
assert len(span) == 3 assert len(span) == 3
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell int +cell int
+cell The number of tokens in the span. +cell The number of tokens in the span.
@ -140,7 +140,7 @@ p
| The object to compare with. By default, accepts #[code Doc], | The object to compare with. By default, accepts #[code Doc],
| #[code Span], #[code Token] and #[code Lexeme] objects. | #[code Span], #[code Token] and #[code Lexeme] objects.
+footrow +row("foot")
+cell returns +cell returns
+cell float +cell float
+cell A scalar similarity score. Higher is more similar. +cell A scalar similarity score. Higher is more similar.
@ -167,7 +167,7 @@ p
+cell list +cell list
+cell A list of attribute ID ints. +cell A list of attribute ID ints.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code.u-break numpy.ndarray[long, ndim=2]] +cell #[code.u-break numpy.ndarray[long, ndim=2]]
+cell +cell
@ -194,7 +194,7 @@ p Retokenize the document, such that the span is merged into a single token.
| Attributes to assign to the merged token. By default, attributes | Attributes to assign to the merged token. By default, attributes
| are inherited from the syntactic root token of the span. | are inherited from the syntactic root token of the span.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Token] +cell #[code Token]
+cell The newly merged token. +cell The newly merged token.
@ -216,7 +216,7 @@ p
assert new_york.root.text == 'York' assert new_york.root.text == 'York'
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Token] +cell #[code Token]
+cell The root token. +cell The root token.
@ -233,7 +233,7 @@ p Tokens that are to the left of the span, whose head is within the span.
assert lefts == [u'New'] assert lefts == [u'New']
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell yields +cell yields
+cell #[code Token] +cell #[code Token]
+cell A left-child of a token of the span. +cell A left-child of a token of the span.
@ -250,7 +250,7 @@ p Tokens that are to the right of the span, whose head is within the span.
assert rights == [u'in'] assert rights == [u'in']
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell yields +cell yields
+cell #[code Token] +cell #[code Token]
+cell A right-child of a token of the span. +cell A right-child of a token of the span.
@ -267,7 +267,7 @@ p Tokens that descend from tokens in the span, but fall outside it.
assert subtree == [u'Give', u'it', u'back', u'!'] assert subtree == [u'Give', u'it', u'back', u'!']
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell yields +cell yields
+cell #[code Token] +cell #[code Token]
+cell A descendant of a token within the span. +cell A descendant of a token within the span.
@ -285,7 +285,7 @@ p
assert doc[1:].has_vector assert doc[1:].has_vector
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell bool +cell bool
+cell Whether the span has a vector data attached. +cell Whether the span has a vector data attached.
@ -304,7 +304,7 @@ p
assert doc[1:].vector.shape == (300,) assert doc[1:].vector.shape == (300,)
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']] +cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']]
+cell A 1D numpy array representing the span's semantics. +cell A 1D numpy array representing the span's semantics.
@ -323,7 +323,7 @@ p
assert doc[1:].vector_norm != doc[2:].vector_norm assert doc[1:].vector_norm != doc[2:].vector_norm
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell float +cell float
+cell The L2 norm of the vector representation. +cell The L2 norm of the vector representation.

View File

@ -1,6 +1,6 @@
//- 💫 DOCS > API > STRINGSTORE //- 💫 DOCS > API > STRINGSTORE
include ../../_includes/_mixins include ../_includes/_mixins
p p
| Look up strings by 64-bit hashes. As of v2.0, spaCy uses hash values | Look up strings by 64-bit hashes. As of v2.0, spaCy uses hash values
@ -23,7 +23,7 @@ p
+cell iterable +cell iterable
+cell A sequence of unicode strings to add to the store. +cell A sequence of unicode strings to add to the store.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code StringStore] +cell #[code StringStore]
+cell The newly constructed object. +cell The newly constructed object.
@ -38,7 +38,7 @@ p Get the number of strings in the store.
assert len(stringstore) == 2 assert len(stringstore) == 2
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell int +cell int
+cell The number of strings in the store. +cell The number of strings in the store.
@ -60,7 +60,7 @@ p Retrieve a string from a given hash, or vice versa.
+cell bytes, unicode or uint64 +cell bytes, unicode or uint64
+cell The value to encode. +cell The value to encode.
+footrow +row("foot")
+cell returns +cell returns
+cell unicode or int +cell unicode or int
+cell The value to be retrieved. +cell The value to be retrieved.
@ -81,7 +81,7 @@ p Check whether a string is in the store.
+cell unicode +cell unicode
+cell The string to check. +cell The string to check.
+footrow +row("foot")
+cell returns +cell returns
+cell bool +cell bool
+cell Whether the store contains the string. +cell Whether the store contains the string.
@ -100,7 +100,7 @@ p
assert all_strings == [u'apple', u'orange'] assert all_strings == [u'apple', u'orange']
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell yields +cell yields
+cell unicode +cell unicode
+cell A string in the store. +cell A string in the store.
@ -125,7 +125,7 @@ p Add a string to the #[code StringStore].
+cell unicode +cell unicode
+cell The string to add. +cell The string to add.
+footrow +row("foot")
+cell returns +cell returns
+cell uint64 +cell uint64
+cell The string's hash value. +cell The string's hash value.
@ -166,7 +166,7 @@ p Loads state from a directory. Modifies the object in place and returns it.
| A path to a directory. Paths may be either strings or | A path to a directory. Paths may be either strings or
| #[code Path]-like objects. | #[code Path]-like objects.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code StringStore] +cell #[code StringStore]
+cell The modified #[code StringStore] object. +cell The modified #[code StringStore] object.
@ -185,7 +185,7 @@ p Serialize the current state to a binary string.
+cell - +cell -
+cell Named attributes to prevent from being serialized. +cell Named attributes to prevent from being serialized.
+footrow +row("foot")
+cell returns +cell returns
+cell bytes +cell bytes
+cell The serialized form of the #[code StringStore] object. +cell The serialized form of the #[code StringStore] object.
@ -211,7 +211,7 @@ p Load state from a binary string.
+cell - +cell -
+cell Named attributes to prevent from being loaded. +cell Named attributes to prevent from being loaded.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code StringStore] +cell #[code StringStore]
+cell The #[code StringStore] object. +cell The #[code StringStore] object.
@ -233,7 +233,7 @@ p Get a 64-bit hash for a given string.
+cell unicode +cell unicode
+cell The string to hash. +cell The string to hash.
+footrow +row("foot")
+cell returns +cell returns
+cell uint64 +cell uint64
+cell The hash. +cell The hash.

5
website/api/tagger.jade Normal file
View File

@ -0,0 +1,5 @@
//- 💫 DOCS > API > TAGGER
include ../_includes/_mixins
!=partial("pipe", { subclass: "Tagger", pipeline_id: "tagger" })

View File

@ -0,0 +1,5 @@
//- 💫 DOCS > API > TENSORIZER
include ../_includes/_mixins
!=partial("pipe", { subclass: "Tensorizer", pipeline_id: "tensorizer" })

View File

@ -0,0 +1,19 @@
//- 💫 DOCS > API > TEXTCATEGORIZER
include ../_includes/_mixins
p
| The model supports classification with multiple, non-mutually exclusive
| labels. You can change the model architecture rather easily, but by
| default, the #[code TextCategorizer] class uses a convolutional
| neural network to assign position-sensitive vectors to each word in the
| document. This step is similar to the #[+api("tensorizer") #[code Tensorizer]]
| component, but the #[code TextCategorizer] uses its own CNN model, to
| avoid sharing weights with the other pipeline components. The document
| tensor is then
| summarized by concatenating max and mean pooling, and a multilayer
| perceptron is used to predict an output vector of length #[code nr_class],
| before a logistic activation is applied elementwise. The value of each
| output neuron is the probability that some class is present.
!=partial("pipe", { subclass: "TextCategorizer", short: "textcat", pipeline_id: "textcat" })

View File

@ -1,6 +1,6 @@
//- 💫 DOCS > API > TOKEN //- 💫 DOCS > API > TOKEN
include ../../_includes/_mixins include ../_includes/_mixins
p An individual token — i.e. a word, punctuation symbol, whitespace, etc. p An individual token — i.e. a word, punctuation symbol, whitespace, etc.
@ -30,7 +30,7 @@ p Construct a #[code Token] object.
+cell int +cell int
+cell The index of the token within the document. +cell The index of the token within the document.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Token] +cell #[code Token]
+cell The newly constructed object. +cell The newly constructed object.
@ -46,7 +46,7 @@ p The number of unicode characters in the token, i.e. #[code token.text].
assert len(token) == 4 assert len(token) == 4
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell int +cell int
+cell The number of unicode characters in the token. +cell The number of unicode characters in the token.
@ -68,7 +68,7 @@ p Check the value of a boolean flag.
+cell int +cell int
+cell The attribute ID of the flag to check. +cell The attribute ID of the flag to check.
+footrow +row("foot")
+cell returns +cell returns
+cell bool +cell bool
+cell Whether the flag is set. +cell Whether the flag is set.
@ -93,7 +93,7 @@ p Compute a semantic similarity estimate. Defaults to cosine over vectors.
| The object to compare with. By default, accepts #[code Doc], | The object to compare with. By default, accepts #[code Doc],
| #[code Span], #[code Token] and #[code Lexeme] objects. | #[code Span], #[code Token] and #[code Lexeme] objects.
+footrow +row("foot")
+cell returns +cell returns
+cell float +cell float
+cell A scalar similarity score. Higher is more similar. +cell A scalar similarity score. Higher is more similar.
@ -114,7 +114,7 @@ p Get a neighboring token.
+cell int +cell int
+cell The relative position of the token to get. Defaults to #[code 1]. +cell The relative position of the token to get. Defaults to #[code 1].
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Token] +cell #[code Token]
+cell The token at position #[code self.doc[self.i+i]]. +cell The token at position #[code self.doc[self.i+i]].
@ -139,7 +139,7 @@ p
+cell #[code Token] +cell #[code Token]
+cell Another token. +cell Another token.
+footrow +row("foot")
+cell returns +cell returns
+cell bool +cell bool
+cell Whether this token is the ancestor of the descendant. +cell Whether this token is the ancestor of the descendant.
@ -158,7 +158,7 @@ p The rightmost token of this token's syntactic descendants.
assert [t.text for t in he_ancestors] == [u'pleaded'] assert [t.text for t in he_ancestors] == [u'pleaded']
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell yields +cell yields
+cell #[code Token] +cell #[code Token]
+cell +cell
@ -177,7 +177,7 @@ p A sequence of coordinated tokens, including the token itself.
assert [t.text for t in apples_conjuncts] == [u'oranges'] assert [t.text for t in apples_conjuncts] == [u'oranges']
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell yields +cell yields
+cell #[code Token] +cell #[code Token]
+cell A coordinated token. +cell A coordinated token.
@ -194,7 +194,7 @@ p A sequence of the token's immediate syntactic children.
assert [t.text for t in give_children] == [u'it', u'back', u'!'] assert [t.text for t in give_children] == [u'it', u'back', u'!']
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell yields +cell yields
+cell #[code Token] +cell #[code Token]
+cell A child token such that #[code child.head==self]. +cell A child token such that #[code child.head==self].
@ -211,7 +211,7 @@ p A sequence of all the token's syntactic descendents.
assert [t.text for t in give_subtree] == [u'Give', u'it', u'back', u'!'] assert [t.text for t in give_subtree] == [u'Give', u'it', u'back', u'!']
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell yields +cell yields
+cell #[code Token] +cell #[code Token]
+cell A descendant token such that #[code self.is_ancestor(descendant)]. +cell A descendant token such that #[code self.is_ancestor(descendant)].
@ -230,7 +230,7 @@ p
assert apples.has_vector assert apples.has_vector
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell bool +cell bool
+cell Whether the token has a vector data attached. +cell Whether the token has a vector data attached.
@ -248,7 +248,7 @@ p A real-valued meaning representation.
assert apples.vector.shape == (300,) assert apples.vector.shape == (300,)
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']] +cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']]
+cell A 1D numpy array representing the token's semantics. +cell A 1D numpy array representing the token's semantics.
@ -268,7 +268,7 @@ p The L2 norm of the token's vector representation.
assert apples.vector_norm != pasta.vector_norm assert apples.vector_norm != pasta.vector_norm
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell float +cell float
+cell The L2 norm of the vector representation. +cell The L2 norm of the vector representation.
@ -280,20 +280,29 @@ p The L2 norm of the token's vector representation.
+cell #[code text] +cell #[code text]
+cell unicode +cell unicode
+cell Verbatim text content. +cell Verbatim text content.
+row +row
+cell #[code text_with_ws] +cell #[code text_with_ws]
+cell unicode +cell unicode
+cell Text content, with trailing space character if present. +cell Text content, with trailing space character if present.
+row
+cell #[code whitespace]
+cell int
+cell Trailing space character if present.
+row +row
+cell #[code whitespace_] +cell #[code whitespace_]
+cell unicode +cell unicode
+cell Trailing space character if present. +cell Trailing space character if present.
+row
+cell #[code orth]
+cell int
+cell ID of the verbatim text content.
+row
+cell #[code orth_]
+cell unicode
+cell
| Verbatim text content (identical to #[code Token.text]). Existst
| mostly for consistency with the other attributes.
+row +row
+cell #[code vocab] +cell #[code vocab]
+cell #[code Vocab] +cell #[code Vocab]

View File

@ -1,6 +1,6 @@
//- 💫 DOCS > API > TOKENIZER //- 💫 DOCS > API > TOKENIZER
include ../../_includes/_mixins include ../_includes/_mixins
p p
| Segment text, and create #[code Doc] objects with the discovered segment | Segment text, and create #[code Doc] objects with the discovered segment
@ -57,7 +57,7 @@ p Create a #[code Tokenizer], to create #[code Doc] objects given unicode text.
+cell callable +cell callable
+cell A boolean function matching strings to be recognised as tokens. +cell A boolean function matching strings to be recognised as tokens.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Tokenizer] +cell #[code Tokenizer]
+cell The newly constructed object. +cell The newly constructed object.
@ -77,7 +77,7 @@ p Tokenize a string.
+cell unicode +cell unicode
+cell The string to tokenize. +cell The string to tokenize.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Doc] +cell #[code Doc]
+cell A container for linguistic annotations. +cell A container for linguistic annotations.
@ -110,7 +110,7 @@ p Tokenize a stream of texts.
| The number of threads to use, if the implementation supports | The number of threads to use, if the implementation supports
| multi-threading. The default tokenizer is single-threaded. | multi-threading. The default tokenizer is single-threaded.
+footrow +row("foot")
+cell yields +cell yields
+cell #[code Doc] +cell #[code Doc]
+cell A sequence of Doc objects, in order. +cell A sequence of Doc objects, in order.
@ -126,7 +126,7 @@ p Find internal split points of the string.
+cell unicode +cell unicode
+cell The string to split. +cell The string to split.
+footrow +row("foot")
+cell returns +cell returns
+cell list +cell list
+cell +cell
@ -147,7 +147,7 @@ p
+cell unicode +cell unicode
+cell The string to segment. +cell The string to segment.
+footrow +row("foot")
+cell returns +cell returns
+cell int +cell int
+cell The length of the prefix if present, otherwise #[code None]. +cell The length of the prefix if present, otherwise #[code None].
@ -165,7 +165,7 @@ p
+cell unicode +cell unicode
+cell The string to segment. +cell The string to segment.
+footrow +row("foot")
+cell returns +cell returns
+cell int / #[code None] +cell int / #[code None]
+cell The length of the suffix if present, otherwise #[code None]. +cell The length of the suffix if present, otherwise #[code None].
@ -176,7 +176,7 @@ p
p p
| Add a special-case tokenization rule. This mechanism is also used to add | Add a special-case tokenization rule. This mechanism is also used to add
| custom tokenizer exceptions to the language data. See the usage guide | custom tokenizer exceptions to the language data. See the usage guide
| on #[+a("/docs/usage/adding-languages#tokenizer-exceptions") adding languages] | on #[+a("/usage/adding-languages#tokenizer-exceptions") adding languages]
| for more details and examples. | for more details and examples.
+aside-code("Example"). +aside-code("Example").

View File

@ -0,0 +1,24 @@
//- 💫 DOCS > API > TOP-LEVEL
include ../_includes/_mixins
+section("spacy")
//-+h(2, "spacy") spaCy
//- spacy/__init__.py
include _top-level/_spacy
+section("displacy")
+h(2, "displacy", "spacy/displacy") displaCy
include _top-level/_displacy
+section("util")
+h(2, "util", "spacy/util.py") Utility functions
include _top-level/_util
+section("compat")
+h(2, "compat", "spacy/compaty.py") Compatibility functions
include _top-level/_compat
+section("cli", "spacy/cli")
+h(2, "cli") Command line
include _top-level/_cli

333
website/api/vectors.jade Normal file
View File

@ -0,0 +1,333 @@
//- 💫 DOCS > API > VECTORS
include ../_includes/_mixins
p
| Vectors data is kept in the #[code Vectors.data] attribute, which should
| be an instance of #[code numpy.ndarray] (for CPU vectors) or
| #[code cupy.ndarray] (for GPU vectors).
+h(2, "init") Vectors.__init__
+tag method
p
| Create a new vector store. To keep the vector table empty, pass
| #[code data_or_width=0]. You can also create the vector table and add
| vectors one by one, or set the vector values directly on initialisation.
+aside-code("Example").
from spacy.vectors import Vectors
from spacy.strings import StringStore
empty_vectors = Vectors(StringStore())
vectors = Vectors([u'cat'], 300)
vectors[u'cat'] = numpy.random.uniform(-1, 1, (300,))
vector_table = numpy.zeros((3, 300), dtype='f')
vectors = Vectors(StringStore(), vector_table)
+table(["Name", "Type", "Description"])
+row
+cell #[code strings]
+cell #[code StringStore] or list
+cell
| List of strings, or a #[+api("stringstore") #[code StringStore]]
| that maps strings to hash values, and vice versa.
+row
+cell #[code data_or_width]
+cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']] or int
+cell Vector data or number of dimensions.
+row("foot")
+cell returns
+cell #[code Vectors]
+cell The newly created object.
+h(2, "getitem") Vectors.__getitem__
+tag method
p
| Get a vector by key. If key is a string, it is hashed to an integer ID
| using the #[code Vectors.strings] table. If the integer key is not found
| in the table, a #[code KeyError] is raised.
+aside-code("Example").
vectors = Vectors(StringStore(), 300)
vectors.add(u'cat', numpy.random.uniform(-1, 1, (300,)))
cat_vector = vectors[u'cat']
+table(["Name", "Type", "Description"])
+row
+cell #[code key]
+cell unicode / int
+cell The key to get the vector for.
+row
+cell returns
+cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']]
+cell The vector for the key.
+h(2, "setitem") Vectors.__setitem__
+tag method
p
| Set a vector for the given key. If key is a string, it is hashed to an
| integer ID using the #[code Vectors.strings] table.
+aside-code("Example").
vectors = Vectors(StringStore(), 300)
vectors[u'cat'] = numpy.random.uniform(-1, 1, (300,))
+table(["Name", "Type", "Description"])
+row
+cell #[code key]
+cell unicode / int
+cell The key to set the vector for.
+row
+cell #[code vector]
+cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']]
+cell The vector to set.
+h(2, "iter") Vectors.__iter__
+tag method
p Yield vectors from the table.
+aside-code("Example").
vector_table = numpy.zeros((3, 300), dtype='f')
vectors = Vectors(StringStore(), vector_table)
for vector in vectors:
print(vector)
+table(["Name", "Type", "Description"])
+row("foot")
+cell yields
+cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']]
+cell A vector from the table.
+h(2, "len") Vectors.__len__
+tag method
p Return the number of vectors that have been assigned.
+aside-code("Example").
vector_table = numpy.zeros((3, 300), dtype='f')
vectors = Vectors(StringStore(), vector_table)
assert len(vectors) == 3
+table(["Name", "Type", "Description"])
+row("foot")
+cell returns
+cell int
+cell The number of vectors in the data.
+h(2, "contains") Vectors.__contains__
+tag method
p
| Check whether a key has a vector entry in the table. If key is a string,
| it is hashed to an integer ID using the #[code Vectors.strings] table.
+aside-code("Example").
vectors = Vectors(StringStore(), 300)
vectors.add(u'cat', numpy.random.uniform(-1, 1, (300,)))
assert u'cat' in vectors
+table(["Name", "Type", "Description"])
+row
+cell #[code key]
+cell unicode / int
+cell The key to check.
+row("foot")
+cell returns
+cell bool
+cell Whether the key has a vector entry.
+h(2, "add") Vectors.add
+tag method
p
| Add a key to the table, optionally setting a vector value as well. If
| key is a string, it is hashed to an integer ID using the
| #[code Vectors.strings] table.
+aside-code("Example").
vectors = Vectors(StringStore(), 300)
vectors.add(u'cat', numpy.random.uniform(-1, 1, (300,)))
+table(["Name", "Type", "Description"])
+row
+cell #[code key]
+cell unicode / int
+cell The key to add.
+row
+cell #[code vector]
+cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']]
+cell An optional vector to add.
+h(2, "items") Vectors.items
+tag method
p Iterate over #[code (string key, vector)] pairs, in order.
+aside-code("Example").
vectors = Vectors(StringStore(), 300)
vectors.add(u'cat', numpy.random.uniform(-1, 1, (300,)))
for key, vector in vectors.items():
print(key, vector)
+table(["Name", "Type", "Description"])
+row("foot")
+cell yields
+cell tuple
+cell #[code (string key, vector)] pairs, in order.
+h(2, "shape") Vectors.shape
+tag property
p
| Get #[code (rows, dims)] tuples of number of rows and number of
| dimensions in the vector table.
+aside-code("Example").
vectors = Vectors(StringStore(), 300)
vectors.add(u'cat', numpy.random.uniform(-1, 1, (300,)))
rows, dims = vectors.shape
assert rows == 1
assert dims == 300
+table(["Name", "Type", "Description"])
+row("foot")
+cell returns
+cell tuple
+cell #[code (rows, dims)] pairs.
+h(2, "from_glove") Vectors.from_glove
+tag method
p
| Load #[+a("https://nlp.stanford.edu/projects/glove/") GloVe] vectors from
| a directory. Assumes binary format, that the vocab is in a
| #[code vocab.txt], and that vectors are named
| #[code vectors.{size}.[fd].bin], e.g. #[code vectors.128.f.bin] for 128d
| float32 vectors, #[code vectors.300.d.bin] for 300d float64 (double)
| vectors, etc. By default GloVe outputs 64-bit vectors.
+table(["Name", "Type", "Description"])
+row
+cell #[code path]
+cell unicode / #[code Path]
+cell The path to load the GloVe vectors from.
+h(2, "to_disk") Vectors.to_disk
+tag method
p Save the current state to a directory.
+aside-code("Example").
vectors.to_disk('/path/to/vectors')
+table(["Name", "Type", "Description"])
+row
+cell #[code path]
+cell unicode or #[code Path]
+cell
| A path to a directory, which will be created if it doesn't exist.
| Paths may be either strings or #[code Path]-like objects.
+h(2, "from_disk") Vectors.from_disk
+tag method
p Loads state from a directory. Modifies the object in place and returns it.
+aside-code("Example").
vectors = Vectors(StringStore())
vectors.from_disk('/path/to/vectors')
+table(["Name", "Type", "Description"])
+row
+cell #[code path]
+cell unicode or #[code Path]
+cell
| A path to a directory. Paths may be either strings or
| #[code Path]-like objects.
+row("foot")
+cell returns
+cell #[code Vectors]
+cell The modified #[code Vectors] object.
+h(2, "to_bytes") Vectors.to_bytes
+tag method
p Serialize the current state to a binary string.
+aside-code("Example").
vectors_bytes = vectors.to_bytes()
+table(["Name", "Type", "Description"])
+row
+cell #[code **exclude]
+cell -
+cell Named attributes to prevent from being serialized.
+row("foot")
+cell returns
+cell bytes
+cell The serialized form of the #[code Vectors] object.
+h(2, "from_bytes") Vectors.from_bytes
+tag method
p Load state from a binary string.
+aside-code("Example").
fron spacy.vectors import Vectors
vectors_bytes = vectors.to_bytes()
new_vectors = Vectors(StringStore())
new_vectors.from_bytes(vectors_bytes)
+table(["Name", "Type", "Description"])
+row
+cell #[code bytes_data]
+cell bytes
+cell The data to load from.
+row
+cell #[code **exclude]
+cell -
+cell Named attributes to prevent from being loaded.
+row("foot")
+cell returns
+cell #[code Vectors]
+cell The #[code Vectors] object.
+h(2, "attributes") Attributes
+table(["Name", "Type", "Description"])
+row
+cell #[code data]
+cell #[code numpy.ndarray] / #[code cupy.ndarray]
+cell
| Stored vectors data. #[code numpy] is used for CPU vectors,
| #[code cupy] for GPU vectors.
+row
+cell #[code key2row]
+cell dict
+cell
| Dictionary mapping word hashes to rows in the
| #[code Vectors.data] table.
+row
+cell #[code keys]
+cell #[code numpy.ndarray]
+cell
| Array keeping the keys in order, such that
| #[code keys[vectors.key2row[key]] == key]

View File

@ -1,17 +1,22 @@
//- 💫 DOCS > API > VOCAB //- 💫 DOCS > API > VOCAB
include ../../_includes/_mixins include ../_includes/_mixins
p p
| A lookup table that allows you to access #[code Lexeme] objects. The | The #[code Vocab] object provides a lookup table that allows you to
| #[code Vocab] instance also provides access to the #[code StringStore], | access #[+api("lexeme") #[code Lexeme]] objects, as well as the
| and owns underlying C-data that is shared between #[code Doc] objects. | #[+api("stringstore") #[code StringStore]]. It also owns underlying
| C-data that is shared between #[code Doc] objects.
+h(2, "init") Vocab.__init__ +h(2, "init") Vocab.__init__
+tag method +tag method
p Create the vocabulary. p Create the vocabulary.
+aside-code("Example").
from spacy.vocab import Vocab
vocab = Vocab(strings=[u'hello', u'world'])
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+row +row
+cell #[code lex_attr_getters] +cell #[code lex_attr_getters]
@ -39,7 +44,7 @@ p Create the vocabulary.
| A #[+api("stringstore") #[code StringStore]] that maps | A #[+api("stringstore") #[code StringStore]] that maps
| strings to hash values, and vice versa, or a list of strings. | strings to hash values, and vice versa, or a list of strings.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Vocab] +cell #[code Vocab]
+cell The newly constructed object. +cell The newly constructed object.
@ -54,7 +59,7 @@ p Get the current number of lexemes in the vocabulary.
assert len(nlp.vocab) > 0 assert len(nlp.vocab) > 0
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell returns +cell returns
+cell int +cell int
+cell The number of lexems in the vocabulary. +cell The number of lexems in the vocabulary.
@ -76,7 +81,7 @@ p
+cell int / unicode +cell int / unicode
+cell The hash value of a word, or its unicode string. +cell The hash value of a word, or its unicode string.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Lexeme] +cell #[code Lexeme]
+cell The lexeme indicated by the given ID. +cell The lexeme indicated by the given ID.
@ -90,7 +95,7 @@ p Iterate over the lexemes in the vocabulary.
stop_words = (lex for lex in nlp.vocab if lex.is_stop) stop_words = (lex for lex in nlp.vocab if lex.is_stop)
+table(["Name", "Type", "Description"]) +table(["Name", "Type", "Description"])
+footrow +row("foot")
+cell yields +cell yields
+cell #[code Lexeme] +cell #[code Lexeme]
+cell An entry in the vocabulary. +cell An entry in the vocabulary.
@ -115,7 +120,7 @@ p
+cell unicode +cell unicode
+cell The ID string. +cell The ID string.
+footrow +row("foot")
+cell returns +cell returns
+cell bool +cell bool
+cell Whether the string has an entry in the vocabulary. +cell Whether the string has an entry in the vocabulary.
@ -152,11 +157,100 @@ p
| which the flag will be stored. If #[code -1], the lowest | which the flag will be stored. If #[code -1], the lowest
| available bit will be chosen. | available bit will be chosen.
+footrow +row("foot")
+cell returns +cell returns
+cell int +cell int
+cell The integer ID by which the flag value can be checked. +cell The integer ID by which the flag value can be checked.
+h(2, "add_flag") Vocab.clear_vectors
+tag method
+tag-new(2)
p
| Drop the current vector table. Because all vectors must be the same
| width, you have to call this to change the size of the vectors.
+aside-code("Example").
nlp.vocab.clear_vectors(new_dim=300)
+table(["Name", "Type", "Description"])
+row
+cell #[code new_dim]
+cell int
+cell
| Number of dimensions of the new vectors. If #[code None], size
| is not changed.
+h(2, "add_flag") Vocab.get_vector
+tag method
+tag-new(2)
p
| Retrieve a vector for a word in the vocabulary. Words can be looked up
| by string or hash value. If no vectors data is loaded, a
| #[code ValueError] is raised.
+aside-code("Example").
nlp.vocab.get_vector(u'apple')
+table(["Name", "Type", "Description"])
+row
+cell #[code orth]
+cell int / unicode
+cell The hash value of a word, or its unicode string.
+row("foot")
+cell returns
+cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']]
+cell
| A word vector. Size and shape are determined by the
| #[code Vocab.vectors] instance.
+h(2, "add_flag") Vocab.set_vector
+tag method
+tag-new(2)
p
| Set a vector for a word in the vocabulary. Words can be referenced by
| by string or hash value.
+aside-code("Example").
nlp.vocab.set_vector(u'apple', array([...]))
+table(["Name", "Type", "Description"])
+row
+cell #[code orth]
+cell int / unicode
+cell The hash value of a word, or its unicode string.
+row
+cell #[code vector]
+cell #[code.u-break numpy.ndarray[ndim=1, dtype='float32']]
+cell The vector to set.
+h(2, "add_flag") Vocab.has_vector
+tag method
+tag-new(2)
p
| Check whether a word has a vector. Returns #[code False] if no vectors
| are loaded. Words can be looked up by string or hash value.
+aside-code("Example").
if nlp.vocab.has_vector(u'apple'):
vector = nlp.vocab.get_vector(u'apple')
+table(["Name", "Type", "Description"])
+row
+cell #[code orth]
+cell int / unicode
+cell The hash value of a word, or its unicode string.
+row("foot")
+cell returns
+cell bool
+cell Whether the word has a vector.
+h(2, "to_disk") Vocab.to_disk +h(2, "to_disk") Vocab.to_disk
+tag method +tag method
+tag-new(2) +tag-new(2)
@ -192,7 +286,7 @@ p Loads state from a directory. Modifies the object in place and returns it.
| A path to a directory. Paths may be either strings or | A path to a directory. Paths may be either strings or
| #[code Path]-like objects. | #[code Path]-like objects.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Vocab] +cell #[code Vocab]
+cell The modified #[code Vocab] object. +cell The modified #[code Vocab] object.
@ -211,7 +305,7 @@ p Serialize the current state to a binary string.
+cell - +cell -
+cell Named attributes to prevent from being serialized. +cell Named attributes to prevent from being serialized.
+footrow +row("foot")
+cell returns +cell returns
+cell bytes +cell bytes
+cell The serialized form of the #[code Vocab] object. +cell The serialized form of the #[code Vocab] object.
@ -238,7 +332,7 @@ p Load state from a binary string.
+cell - +cell -
+cell Named attributes to prevent from being loaded. +cell Named attributes to prevent from being loaded.
+footrow +row("foot")
+cell returns +cell returns
+cell #[code Vocab] +cell #[code Vocab]
+cell The #[code Vocab] object. +cell The #[code Vocab] object.
@ -256,3 +350,14 @@ p Load state from a binary string.
+cell #[code strings] +cell #[code strings]
+cell #[code StringStore] +cell #[code StringStore]
+cell A table managing the string-to-int mapping. +cell A table managing the string-to-int mapping.
+row
+cell #[code vectors]
+tag-new(2)
+cell #[code Vectors]
+cell A table associating word IDs to word vectors.
+row
+cell #[code vectors_length]
+cell int
+cell Number of dimensions for each word vector.

View File

@ -19,3 +19,10 @@
to to
transform: translate3d(0, 0, 0) transform: translate3d(0, 0, 0)
//- Element rotates
@keyframes rotate
to
transform: rotate(360deg)

View File

@ -1,41 +1,27 @@
//- 💫 CSS > BASE > FONTS //- 💫 CSS > BASE > FONTS
// Source Sans Pro // HK Grotesk
@font-face @font-face
font-family: "Source Sans Pro" font-family: "HK Grotesk"
font-style: normal font-style: normal
font-weight: 400 font-weight: 500
src: url("/assets/fonts/sourcesanspro-regular.eot") src: url("/assets/fonts/hkgrotesk-semibold.woff2") format("woff2"), url("/assets/fonts/hkgrotesk-semibold.woff") format("woff")
src: url("/assets/fonts/sourcesanspro-regular.eot?#iefix") format("embedded-opentype"), url("/assets/fonts/sourcesanspro-regular.woff2") format("woff2"), url("/assets/fonts/sourcesanspro-regular.woff") format("woff"), url("/assets/fonts/sourcesanspro-regular.ttf") format("truetype"), url("/assets/fonts/sourcesanspro-regular.svg#source_sans_proregular") format("svg")
@font-face @font-face
font-family: "Source Sans Pro" font-family: "HK Grotesk"
font-style: italic font-style: italic
font-weight: 400 font-weight: 500
src: url("/assets/fonts/sourcesanspro-italic.eot") src: url("/assets/fonts/hkgrotesk-semibolditalic.woff2") format("woff2"), url("/assets/fonts/hkgrotesk-semibolditalic.woff") format("woff")
src: url("/assets/fonts/sourcesanspro-italic.eot?#iefix") format("embedded-opentype"), url("/assets/fonts/sourcesanspro-italic.woff2") format("woff2"), url("/assets/fonts/sourcesanspro-italic.woff") format("woff"), url("/assets/fonts/sourcesanspro-italic.ttf") format("truetype"), url("/assets/fonts/sourcesanspro-italic.svg#source_sans_proitalic") format("svg")
@font-face @font-face
font-family: "Source Sans Pro" font-family: "HK Grotesk"
font-style: normal
font-weight: 700
src: url("/assets/fonts/sourcesanspro-bold.eot")
src: url("/assets/fonts/sourcesanspro-bold.eot?#iefix") format("embedded-opentype"), url("/assets/fonts/sourcesanspro-bold.woff2") format("woff2"), url("/assets/fonts/sourcesanspro-bold.woff") format("woff"), url("/assets/fonts/sourcesanspro-bold.ttf") format("truetype"), url("/assets/fonts/sourcesanspro-bold.svg#source_sans_probold") format("svg")
@font-face
font-family: "Source Sans Pro"
font-style: italic
font-weight: 700
src: url("/assets/fonts/sourcesanspro-bolditalic.eot")
src: url("/assets/fonts/sourcesanspro-bolditalic.eot?#iefix") format("embedded-opentype"), url("/assets/fonts/sourcesanspro-bolditalic.woff2") format("woff2"), url("/assets/fonts/sourcesanspro-bolditalic.woff") format("woff"), url("/assets/fonts/sourcesanspro-bolditalic.ttf") format("truetype"), url("/assets/fonts/sourcesanspro-bolditalic.svg#source_sans_probold_italic") format("svg")
// Source Code Pro
@font-face
font-family: "Source Code Pro"
font-style: normal font-style: normal
font-weight: 600 font-weight: 600
src: url("/assets/fonts/sourcecodepro-semibold.eot") src: url("/assets/fonts/hkgrotesk-bold.woff2") format("woff2"), url("/assets/fonts/hkgrotesk-bold.woff") format("woff")
src: url("/assets/fonts/sourcecodepro-semibold.eot?#iefix") format("embedded-opentype"), url("/assets/fonts/sourcecodepro-semibold.woff") format("woff"), url("/assets/fonts/sourcecodepro-semibold.ttf") format("truetype"), url("/assets/fonts/sourcecodepro-semibold.svg#sourcecodepro_semibold") format("svg")
@font-face
font-family: "HK Grotesk"
font-style: italic
font-weight: 600
src: url("/assets/fonts/hkgrotesk-bolditalic.woff2") format("woff2"), url("/assets/fonts/hkgrotesk-bolditalic.woff") format("woff")

View File

@ -15,6 +15,15 @@
align-items: center align-items: center
justify-content: center justify-content: center
&.o-grid--vcenter
align-items: center
&.o-grid--space
justify-content: space-between
&.o-grid--nowrap
flex-wrap: nowrap
//- Grid column //- Grid column
@ -22,7 +31,6 @@
$grid-gutter: 2rem $grid-gutter: 2rem
margin-top: $grid-gutter margin-top: $grid-gutter
overflow: hidden
@include breakpoint(min, lg) @include breakpoint(min, lg)
display: flex display: flex

View File

@ -12,6 +12,7 @@ body
animation: fadeIn 0.25s ease animation: fadeIn 0.25s ease
background: $color-back background: $color-back
color: $color-front color: $color-front
//scroll-behavior: smooth
//- Paragraphs //- Paragraphs
@ -19,6 +20,9 @@ body
p p
@extend .o-block, .u-text @extend .o-block, .u-text
p:empty
margin-bottom: 0
//- Links //- Links

View File

@ -43,12 +43,25 @@
position: relative position: relative
padding: 2.5rem 0 padding: 2.5rem 0
overflow: auto overflow: auto
background: $color-subtle-light
.o-main &
border-top-left-radius: $border-radius
//- Blocks //- Blocks
.o-section
width: 100%
max-width: 100%
&:not(:last-child)
margin-bottom: 7rem
padding-bottom: 4rem
border-bottom: 1px dotted $color-subtle
.o-block .o-block
margin-bottom: 3rem margin-bottom: 4rem
.o-block-small .o-block-small
margin-bottom: 2rem margin-bottom: 2rem
@ -58,17 +71,18 @@
.o-card .o-card
background: $color-back background: $color-back
border-radius: 2px border-radius: $border-radius
border: 1px solid $color-subtle box-shadow: $box-shadow
padding: 3rem 2.5%
//- Box //- Box
.o-box .o-box
background: $color-theme-light background: $color-subtle-light
padding: 2rem padding: 2rem
border-left: 4px solid $color-theme border-radius: $border-radius
.o-box__logos
padding-bottom: 1rem
//- Icons //- Icons
@ -77,7 +91,14 @@
vertical-align: middle vertical-align: middle
&.o-icon--inline &.o-icon--inline
margin: 0 0.5rem 0 0.25rem margin: 0 0.5rem 0 0.1rem
.o-emoji
margin-right: 0.75rem
vertical-align: text-bottom
.o-badge
border-radius: 1em
//- SVG //- SVG
@ -102,3 +123,45 @@
fill: currentColor fill: currentColor
vertical-align: middle vertical-align: middle
margin: 0 0.5rem margin: 0 0.5rem
//- Embeds
.o-chart
max-width: 100%
.cp_embed_iframe
border: 1px solid $color-subtle
border-radius: $border-radius
//- Form fields
.o-field
background: $color-back
padding: 0 0.25em
border-radius: 2em
border: 1px solid $color-subtle
margin-bottom: 0.25rem
.o-field__input,
.o-field__button
padding: 0 0.35em
.o-field__input
width: 100%
.o-field__select
background: transparent
color: $color-dark
height: 1.4em
border: none
text-align-last: center
.o-empty:empty:before
@include size(1em)
border-radius: 50%
content: ""
display: inline-block
background: $color-red
vertical-align: middle

View File

@ -1,6 +1,6 @@
//- 💫 CSS > BASE > RESET //- 💫 CSS > BASE > RESET
* *, *:before, *:after
box-sizing: border-box box-sizing: border-box
padding: 0 padding: 0
margin: 0 margin: 0
@ -94,7 +94,10 @@ ul, ol
input, button input, button
appearance: none appearance: none
background: transparent
button button
background: transparent
cursor: pointer cursor: pointer
progress
appearance: none

View File

@ -2,38 +2,53 @@
//- Text //- Text
.u-text,
.u-text-small,
.u-text-tiny
font-family: $font-primary
.u-text .u-text
font: 1.5rem/#{1.55} $font-primary font-size: 1.35rem
line-height: 1.5
.u-text-small .u-text-small
font: 1.4rem/#{1.375} $font-primary font-size: 1.3rem
line-height: 1.375
.u-text-tiny .u-text-tiny
font: 1.1rem/#{1.375} $font-primary font-size: 1.1rem
line-height: 1.375
//- Labels & Tags //- Labels & Tags
.u-text-label .u-text-label
font: normal 600 1.4rem/#{1.5} $font-code font: normal 600 1.4rem/#{1.5} $font-secondary
text-transform: uppercase text-transform: uppercase
&.u-text-label--light,
&.u-text-label--dark &.u-text-label--dark
display: inline-block display: inline-block
border-radius: 1em
padding: 0 1rem 0.15rem
&.u-text-label--dark
background: $color-dark background: $color-dark
box-shadow: inset 1px 1px 1px rgba($color-front, 0.25) box-shadow: inset 1px 1px 1px rgba($color-front, 0.25)
color: $color-back color: $color-back
padding: 0 0.75rem
margin: 1.5rem 0 0 2rem margin: 1.5rem 0 0 2rem
border-radius: 2px
&.u-text-label--light
background: $color-back
color: $color-theme
margin-bottom: 1rem
.u-text-tag .u-text-tag
display: inline-block display: inline-block
font: 600 1.1rem/#{1} $font-code font: 600 1.1rem/#{1} $font-secondary
background: $color-theme background: $color-theme
color: $color-back color: $color-back
padding: 0.15em 0.25em padding: 0.15em 0.5em 0.35em
border-radius: 2px border-radius: 1em
text-transform: uppercase text-transform: uppercase
vertical-align: middle vertical-align: middle
@ -45,7 +60,7 @@
//- Headings //- Headings
.u-heading .u-heading
margin-bottom: 2rem margin-bottom: 1em
@include breakpoint(max, md) @include breakpoint(max, md)
word-wrap: break-word word-wrap: break-word
@ -53,12 +68,29 @@
&:not(:first-child) &:not(:first-child)
padding-top: 3.5rem padding-top: 3.5rem
&.u-heading--title:after
content: ""
display: block
width: 10%
min-width: 6rem
height: 6px
background: $color-theme
margin-top: 3rem
.u-heading-0 .u-heading-0
font: normal bold 7rem/#{1} $font-primary font: normal 600 7rem/#{1} $font-secondary
@include breakpoint(max, sm)
font-size: 6rem
@each $level, $size in $headings @each $level, $size in $headings
.u-heading-#{$level} .u-heading-#{$level}
font: normal bold #{$size}rem/#{1.25} $font-primary font: normal 500 #{$size}rem/#{1.1} $font-secondary
.u-heading__teaser
margin-top: 2rem
font-weight: normal
//- Links //- Links
@ -66,31 +98,59 @@
.u-link .u-link
color: $color-theme color: $color-theme
border-bottom: 1px solid border-bottom: 1px solid
transition: color 0.2s ease
&:hover
color: $color-theme-dark
.u-hide-link.u-hide-link
border: none
color: inherit
&:hover
color: inherit
.u-permalink .u-permalink
position: relative position: relative
&:before
content: "\00b6"
font-size: 0.9em
font-weight: normal
color: $color-subtle
@include position(absolute, top, left, 0.15em, -2.85rem)
opacity: 0
transition: opacity 0.2s ease
&:hover:before
opacity: 1
&:active:before
color: $color-theme
&:target &:target
display: inline-block display: inline-block
padding-top: $nav-height * 1.25
& + * &:before
margin-top: $nav-height * 1.25 bottom: 0.15em
top: initial
.u-permalink__icon
@include position(absolute, bottom, left, 0.35em, -2.75rem)
@include size(1.5rem)
color: $color-subtle
.u-permalink:hover & [id]:target
color: $color-subtle-dark padding-top: $nav-height * 1.25
.u-permalink:active &
color: $color-theme
//- Layout //- Layout
.u-float-left
float: left
margin-right: 1rem
.u-float-right
float: right
margin-left: 1rem
.u-text-center .u-text-center
text-align: center text-align: center
@ -104,14 +164,20 @@
padding: 0.5em 0.75em padding: 0.5em 0.75em
.u-padding-medium .u-padding-medium
padding: 2.5rem padding: 1.8rem
.u-inline-block .u-inline-block
display: inline-block display: inline-block
.u-flex-full
flex: 1
.u-nowrap .u-nowrap
white-space: nowrap white-space: nowrap
.u-wrap
white-space: pre-wrap
.u-break.u-break .u-break.u-break
word-wrap: break-word word-wrap: break-word
white-space: initial white-space: initial
@ -123,13 +189,10 @@
border: 1px solid $color-subtle border: 1px solid $color-subtle
border-radius: 2px border-radius: 2px
.u-border-bottom
border: 1px solid $color-subtle
.u-border-dotted .u-border-dotted
border-top: 1px dotted $color-subtle border-bottom: 1px dotted $color-subtle
@each $name, $color in (theme: $color-theme, subtle: $color-subtle-dark, light: $color-back, red: $color-red, green: $color-green, yellow: $color-yellow) @each $name, $color in (theme: $color-theme, dark: $color-dark, subtle: $color-subtle-dark, light: $color-back, red: $color-red, green: $color-green, yellow: $color-yellow)
.u-color-#{$name} .u-color-#{$name}
color: $color color: $color
@ -145,6 +208,32 @@
background: $pattern background: $pattern
//- Loaders
.u-loading,
[data-loading]
$spinner-size: 75px
$spinner-bar: 8px
position: relative
& > *
opacity: 0.35
&:before
@include position(absolute, top, left, 0, 0)
@include size($spinner-size)
right: 0
bottom: 0
margin: auto
content: ""
border: $spinner-bar solid $color-subtle
border-right: $spinner-bar solid $color-theme
border-radius: 50%
animation: rotate 1s linear infinite
z-index: 10
//- Hidden elements //- Hidden elements
.u-hidden .u-hidden

View File

@ -10,6 +10,8 @@
.c-aside__content .c-aside__content
background: $color-front background: $color-front
border-top-left-radius: $border-radius
border-bottom-left-radius: $border-radius
z-index: 10 z-index: 10
@include breakpoint(min, md) @include breakpoint(min, md)
@ -21,12 +23,12 @@
&:after &:after
$triangle-size: 2rem $triangle-size: 2rem
@include position(absolute, bottom, left, -$triangle-size / 2, 0) @include position(absolute, bottom, left, -$triangle-size / 2, $border-radius / 2)
@include size(0) @include size(0)
border-color: transparent border-color: transparent
border-style: solid border-style: solid
border-top-color: $color-dark border-top-color: $color-dark
border-width: $triangle-size / 2 0 0 $triangle-size border-width: $triangle-size / 2 0 0 calc(#{$triangle-size} - #{$border-radius / 2})
content: "" content: ""
@include breakpoint(max, sm) @include breakpoint(max, sm)

View File

@ -3,23 +3,50 @@
.c-button .c-button
display: inline-block display: inline-block
font-weight: bold font-weight: bold
padding: 0.75em 1em padding: 0.8em 1.1em 1em
margin-bottom: 1px margin-bottom: 1px
border: 2px solid border: 2px solid $color-theme
border-radius: 2px border-radius: 2em
text-align: center text-align: center
transition: background 0.25s ease transition: background-color, color 0.25s ease
&:hover
border-color: $color-theme-dark
&.c-button--small
font-size: 1.1rem
padding: 0.65rem 1.1rem 0.825rem
&.c-button--primary &.c-button--primary
background: $color-theme background: $color-theme
color: $color-back color: $color-back
border-color: $color-theme
&:hover &:hover
background: $color-theme-dark background: $color-theme-dark
border-color: $color-theme-dark
&.c-button--secondary &.c-button--secondary
background: $color-back background: $color-back
color: $color-theme color: $color-theme
border-color: $color-theme
&:hover
color: $color-theme-dark
&.c-button--secondary-light
background: transparent
color: $color-back
border-color: $color-back
.c-icon-button
@include size(35px)
background: $color-subtle-light
color: $color-subtle-dark
border-radius: 50%
padding: 0.5rem
transition: color 0.2s ease
&:hover
color: $color-theme
&.c-icon-button--right
float: right
margin-left: 3rem

View File

@ -24,9 +24,9 @@
transform: translateX(110%) transform: translateX(110%)
&:before &:before
@include position(absolute, top, left, 1rem, 2rem) @include position(absolute, top, left, 1.25rem, 2rem)
content: attr(data-title) content: attr(data-title)
font: bold 1.4rem $font-code font: bold 1.4rem $font-secondary
text-transform: uppercase text-transform: uppercase
color: $color-back color: $color-back
@ -88,13 +88,18 @@
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTguOTg0IDYuNDIybC01LjU3OCA1LjU3OCA1LjU3OCA1LjU3OC0xLjQwNiAxLjQwNi01LjU3OC01LjU3OC01LjU3OCA1LjU3OC0xLjQwNi0xLjQwNiA1LjU3OC01LjU3OC01LjU3OC01LjU3OCAxLjQwNi0xLjQwNiA1LjU3OCA1LjU3OCA1LjU3OC01LjU3OHoiPjwvcGF0aD48L3N2Zz4=) background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTguOTg0IDYuNDIybC01LjU3OCA1LjU3OCA1LjU3OCA1LjU3OC0xLjQwNiAxLjQwNi01LjU3OC01LjU3OC01LjU3OCA1LjU3OC0xLjQwNi0xLjQwNiA1LjU3OC01LjU3OC01LjU3OC01LjU3OCAxLjQwNi0xLjQwNiA1LjU3OCA1LjU3OCA1LjU3OC01LjU3OHoiPjwvcGF0aD48L3N2Zz4=)
.c-chat__button .c-chat__button
@include position(fixed, bottom, right, 0, 2rem) @include position(fixed, bottom, right, 1.5rem, 1.5rem)
padding: 1rem 1.5rem z-index: 5
background: $color-front
color: $color-back color: $color-back
border-top-left-radius: 4px background: $color-front
border-top-right-radius: 4px border-radius: 1em
z-index: 20 padding: 0.5rem 1.15rem 0.35rem
border-color: $color-theme opacity: 0.7
border-style: solid transition: opacity 0.2s ease
border-width: 1px 1px 0 1px
&:hover
opacity: 1
.gitter-open-chat-button
display: none

View File

@ -4,9 +4,9 @@
.c-code-block .c-code-block
background: $color-front background: $color-front
color: $color-back color: darken($color-back, 20)
padding: 0.75em 0 padding: 0.75em 0
border-radius: 2px border-radius: $border-radius
overflow: auto overflow: auto
width: 100% width: 100%
max-width: 100% max-width: 100%
@ -16,6 +16,8 @@
&.c-code-block--has-icon &.c-code-block--has-icon
padding: 0 padding: 0
display: flex display: flex
border-top-left-radius: 0
border-bottom-left-radius: 0
.c-code-block__icon .c-code-block__icon
padding: 0 0 0 1rem padding: 0 0 0 1rem
@ -43,17 +45,26 @@
opacity: 0.5 opacity: 0.5
//- Code
code
-webkit-font-smoothing: subpixel-antialiased
-moz-osx-font-smoothing: auto
//- Inline code //- Inline code
*:not(a):not(.c-code-block) > code
color: $color-dark
*:not(.c-code-block) > code *:not(.c-code-block) > code
font: normal 600 0.8em/#{1} $font-code font-size: 90%
background: darken($color-theme-light, 5) background-color: $color-subtle-light
box-shadow: 1px 1px 0 rgba($color-front, 0.05) padding: 0.2rem 0.4rem
text-shadow: 1px 1px 0 rgba($color-back, 0.5) border-radius: 0.25rem
color: $color-front font-family: $font-code
padding: 0.1em 0.5em white-space: nowrap
margin: 0 margin: 0
border-radius: 1px
box-decoration-break: clone box-decoration-break: clone
white-space: nowrap white-space: nowrap

View File

@ -2,12 +2,11 @@
.c-landing .c-landing
background: $color-theme background: $color-theme
padding-top: 5rem padding-top: $nav-height * 1.5
width: 100% width: 100%
.c-landing__wrapper .c-landing__wrapper
background: $pattern background: $pattern
padding-bottom: 6rem
width: 100% width: 100%
.c-landing__content .c-landing__content
@ -15,9 +14,45 @@
width: 100% width: 100%
min-height: 573px min-height: 573px
.c-landing__headlines
position: relative
top: -1.5rem
left: 1rem
.c-landing__title .c-landing__title
color: $color-back color: $color-back
text-align: center text-align: center
margin-bottom: 0.75rem
.c-landing__blocks
@include breakpoint(min, sm)
position: relative
top: -25rem
margin-bottom: -25rem
.c-landing__card
padding: 3rem 2.5rem
.c-landing__banner
background: $color-theme
.c-landing__banner__content
@include breakpoint(min, md)
border: 4px solid
padding: 1rem 6.5rem 2rem 4rem
.c-landing__banner__text
font-weight: 500
strong
font-weight: 800
p
font-size: 1.5rem
@include breakpoint(min, md)
padding-top: 7rem
.c-landing__badge .c-landing__badge
transform: rotate(7deg) transform: rotate(7deg)

View File

@ -9,6 +9,8 @@
.c-list__item:before .c-list__item:before
content: counter(li, #{$counter}) '.' content: counter(li, #{$counter}) '.'
font-size: 1em
padding-right: 1rem
//- List Item //- List Item
@ -21,13 +23,14 @@
&:before &:before
content: '\25CF' content: '\25CF'
display: inline-block display: inline-block
font-size: 1em font-size: 0.6em
font-weight: bold font-weight: bold
padding-right: 1.25rem padding-right: 1.25rem
margin-left: -3.75rem margin-left: -3.75rem
text-align: right text-align: right
width: 2.5rem width: 2.5rem
counter-increment: li counter-increment: li
box-sizing: content-box
//- List icon //- List icon

View File

@ -3,9 +3,8 @@
.x-terminal .x-terminal
background: $color-subtle-light background: $color-subtle-light
color: $color-front color: $color-front
padding: 4px padding: $border-radius
border: 1px dotted $color-subtle border-radius: 1em
border-radius: 5px
width: 100% width: 100%
.x-terminal__icons .x-terminal__icons

View File

@ -1,22 +1,21 @@
//- 💫 CSS > COMPONENTS > NAVIGATION //- 💫 CSS > COMPONENTS > NAVIGATION
.c-nav .c-nav
@include position(absolute, top, left, 0, 0) @include position(fixed, top, left, 0, 0)
@include size(100%, $nav-height) @include size(100%, $nav-height)
background: $color-back background: $color-back
color: $color-theme color: $color-theme
align-items: center align-items: center
display: flex display: flex
justify-content: space-between justify-content: space-between
flex-flow: row wrap
padding: 0 2rem 0 1rem padding: 0 2rem 0 1rem
z-index: 20 z-index: 30
width: 100% width: 100%
border-bottom: 1px solid $color-subtle box-shadow: $box-shadow
&.c-nav--theme //@include breakpoint(min, md)
background: $color-theme // position: fixed
color: $color-back
border-bottom: none
&.is-fixed &.is-fixed
animation: slideInDown 0.5s ease-in-out animation: slideInDown 0.5s ease-in-out
@ -28,12 +27,21 @@
justify-content: flex-end justify-content: flex-end
flex-flow: row nowrap flex-flow: row nowrap
border-color: inherit border-color: inherit
flex: 1
.c-nav__menu__item .c-nav__menu__item
display: flex display: flex
align-items: center align-items: center
height: 100% height: 100%
text-transform: uppercase text-transform: uppercase
font-family: $font-secondary
font-size: 1.6rem
font-weight: bold
color: $color-theme
&:not(:last-child) &:not(:first-child)
margin-right: 1em margin-left: 2em
&.is-active
color: $color-dark
pointer-events: none

View File

@ -0,0 +1,24 @@
//- 💫 CSS > COMPONENTS > PROGRESS
.c-progress
display: block
flex: 105%
width: 105%
height: 3px
color: $color-theme
background: transparent
border: none
position: absolute
bottom: 0
left: -2.5%
&::-webkit-progress-bar
background: $color-back
border-radius: none
&::-webkit-progress-value
background: $color-theme
border-radius: none
&::-moz-progress-bar
background: $color-theme

View File

@ -1,14 +1,17 @@
//- 💫 CSS > COMPONENTS > QUICKSTART //- 💫 CSS > COMPONENTS > QUICKSTART
.c-quickstart .c-quickstart
border: 1px solid $color-subtle border-radius: $border-radius
border-radius: 2px
display: none display: none
background: $color-subtle-light background: $color-subtle-light
&:not([style]) + .c-quickstart__info &:not([style]) + .c-quickstart__info
display: none display: none
.c-code-block
border-top-left-radius: 0
border-top-right-radius: 0
.c-quickstart__content .c-quickstart__content
padding: 2rem 3rem padding: 2rem 3rem
@ -72,7 +75,6 @@
flex: 100% flex: 100%
.c-quickstart__legend .c-quickstart__legend
color: $color-subtle-dark
margin-right: 2rem margin-right: 2rem
padding-top: 0.75rem padding-top: 0.75rem
flex: 1 1 35% flex: 1 1 35%
@ -95,4 +97,4 @@
padding: 1.5rem 0 padding: 1.5rem 0
.c-quickstart__code .c-quickstart__code
font-size: 1.6rem font-size: 1.4rem

View File

@ -3,16 +3,15 @@
//- Sidebar container //- Sidebar container
.c-sidebar .c-sidebar
background: $color-subtle-light
overflow-y: auto overflow-y: auto
@include breakpoint(min, md) @include breakpoint(min, md)
@include position(fixed, top, left, 0, 0) @include position(fixed, top, left, 0, 0)
@include size($sidebar-width, 100vh) @include size($sidebar-width, calc(100vh - 3px))
@include scroll-shadow($color-back, $color-front, $nav-height)
flex: 0 0 $sidebar-width flex: 0 0 $sidebar-width
padding: calc(#{$nav-height} + 1.5rem) 0 0 padding: calc(#{$nav-height} + 1.5rem) 0 0
z-index: 10 z-index: 10
border-right: 1px solid $color-subtle
@include breakpoint(max, sm) @include breakpoint(max, sm)
flex: 100% flex: 100%
@ -27,7 +26,7 @@
.c-sidebar__section .c-sidebar__section
& > * & > *
padding: 0 2rem padding: 0 2rem 0.35rem
@include breakpoint(max, sm) @include breakpoint(max, sm)
flex: 1 1 0 flex: 1 1 0
@ -38,7 +37,59 @@
&:not(:last-child) &:not(:last-child)
border-right: 1px solid $color-subtle border-right: 1px solid $color-subtle
.is-active .c-sidebar__item
color: $color-theme
&:hover
color: $color-theme-dark
& > .is-active
font-weight: bold font-weight: bold
color: $color-theme color: $color-dark
background: rgba($color-subtle, 0.4) margin-top: 1rem
//- Sidebar subsections
$crumb-bullet: 14px
$crumb-bar: 2px
.c-sidebar__crumb
display: block
padding-top: 1rem
padding-left: 1rem
position: relative
.c-sidebar__crumb__item
margin-bottom: $crumb-bullet / 2
position: relative
padding-left: 2rem
color: $color-theme
font-size: 1.2rem
&:hover
color: $color-theme-dark
&:after
@include size($crumb-bullet)
@include position(absolute, top, left, $crumb-bullet / 4, 0)
content: ""
border-radius: 50%
background: $color-theme
z-index: 10
&:not(:last-child):before
@include size($crumb-bar, 100%)
@include position(absolute, top, left, $crumb-bullet, ($crumb-bullet - $crumb-bar) / 2)
content: ""
background: $color-subtle
&:first-child:before
height: calc(100% + #{$crumb-bullet * 2})
top: -$crumb-bullet / 2
&.is-active
color: $color-dark
&:after
background: $color-dark

View File

@ -9,7 +9,7 @@
//- Table row //- Table row
.c-table__row .c-table__row
&:nth-child(odd) &:nth-child(odd):not(.c-table__row--head)
background: rgba($color-subtle-light, 0.35) background: rgba($color-subtle-light, 0.35)
&.c-table__row--foot &.c-table__row--foot
@ -38,7 +38,6 @@
.c-table__head-cell .c-table__head-cell
font-weight: bold font-weight: bold
color: $color-theme color: $color-theme
background: $color-back
padding: 1rem 0.5rem padding: 1rem 0.5rem
border-bottom: 2px solid $color-theme border-bottom: 2px solid $color-theme

View File

@ -4,24 +4,34 @@
position: relative position: relative
@include breakpoint(min, sm) @include breakpoint(min, sm)
&[data-tooltip-style="code"]:before
-webkit-font-smoothing: subpixel-antialiased
-moz-osx-font-smoothing: auto
padding: 0.35em 0.85em 0.45em
font: normal 1rem/#{1.25} $font-code
white-space: nowrap
min-width: auto
&:before &:before
@include position(absolute, top, left, 125%, 50%) @include position(absolute, top, left, 125%, 50%)
display: inline-block display: inline-block
content: attr(data-tooltip) content: attr(data-tooltip)
background: $color-front background: $color-front
border-radius: 2px border-radius: $border-radius
border: 1px solid rgba($color-subtle-dark, 0.5) border: 1px solid rgba($color-subtle-dark, 0.5)
color: $color-back color: $color-back
font: normal 1.3rem/#{1.25} $font-primary font: normal 1.2rem/#{1.25} $font-primary
text-transform: none text-transform: none
text-align: left
opacity: 0 opacity: 0
padding: 0.5em 0.75em
transform: translateX(-50%) translateY(-2px) transform: translateX(-50%) translateY(-2px)
transition: opacity 0.1s ease-out, transform 0.1s ease-out transition: opacity 0.1s ease-out, transform 0.1s ease-out
visibility: hidden visibility: hidden
min-width: 200px
max-width: 300px max-width: 300px
min-width: 200px
padding: 0.75em 1em 1em
z-index: 200 z-index: 200
white-space: pre-wrap
&:hover:before &:hover:before
opacity: 1 opacity: 1

View File

@ -42,8 +42,8 @@
// $scroll-shadow-side - side to cover shadow (left or right) // $scroll-shadow-side - side to cover shadow (left or right)
// $scroll-shadow-background - original background color to match // $scroll-shadow-background - original background color to match
@mixin scroll-shadow-base($scroll-shadow-color) @mixin scroll-shadow-base($scroll-shadow-color, $scroll-shadow-intensity: 0.2)
background: radial-gradient(left, ellipse, rgba(0,0,0, .2) 0%, rgba(0,0,0, 0) 75%) 0 center, radial-gradient(right, ellipse, rgba(0,0,0, .2) 0%, rgba(0,0,0, 0) 75%) 100% center background: radial-gradient(ellipse at 0 50%, rgba($scroll-shadow-color, $scroll-shadow-intensity) 0%, rgba(0,0,0,0) 75%) 0 center, radial-gradient(ellipse at 100% 50%, rgba($scroll-shadow-color, $scroll-shadow-intensity) 0%, transparent 75%) 100% center
background-attachment: scroll, scroll background-attachment: scroll, scroll
background-repeat: no-repeat background-repeat: no-repeat
background-size: 10px 100%, 10px 100% background-size: 10px 100%, 10px 100%
@ -58,3 +58,16 @@
background-image: linear-gradient(to #{$scroll-gradient-direction}, rgba($scroll-shadow-background, 1) 50%, rgba($scroll-shadow-background, 0) 100%) background-image: linear-gradient(to #{$scroll-gradient-direction}, rgba($scroll-shadow-background, 1) 50%, rgba($scroll-shadow-background, 0) 100%)
background-repeat: no-repeat background-repeat: no-repeat
background-size: 20px 100% background-size: 20px 100%
// Full vertical scroll shadows
// adapted from: https://codepen.io/laustdeleuran/pen/DBaAu
@mixin scroll-shadow($background-color, $shadow-color, $shadow-offset: 0, $shadow-intensity: 0.4, $cover-size: 40px, $shadow-size: 15px)
background: linear-gradient($background-color 30%, rgba($background-color,0)) 0 $shadow-offset, linear-gradient(rgba($background-color,0), $background-color 70%) 0 100%, radial-gradient(50% 0, farthest-side, rgba($shadow-color,$shadow-intensity), rgba($shadow-color,0)) 0 $shadow-offset, radial-gradient(50% 100%,farthest-side, rgba($shadow-color,$shadow-intensity), rgba($shadow-color,0)) 0 100%
background: linear-gradient($background-color 30%, rgba($background-color,0)) 0 $shadow-offset, linear-gradient(rgba($background-color,0), $background-color 70%) 0 100%, radial-gradient(farthest-side at 50% 0, rgba($shadow-color,$shadow-intensity), rgba($shadow-color,0)) -20px $shadow-offset, radial-gradient(farthest-side at 50% 100%, rgba($shadow-color, $shadow-intensity), rgba($shadow-color,0)) 0 100%
background-repeat: no-repeat
background-color: $background-color
background-size: 100% $cover-size, 100% $cover-size, 100% $shadow-size, 100% $shadow-size
background-attachment: local, local, scroll, scroll

View File

@ -4,47 +4,48 @@
$type-base: 11px $type-base: 11px
$nav-height: 45px $nav-height: 55px
$content-width: 1250px $content-width: 1250px
$sidebar-width: 200px $sidebar-width: 235px
$aside-width: 30vw $aside-width: 27.5vw
$aside-padding: 25px $aside-padding: 25px
$border-radius: 6px
$logo-width: 85px $logo-width: 85px
$logo-height: 27px $logo-height: 27px
$grid: ( quarter: 4, third: 3, half: 2, two-thirds: 1.5, three-quarters: 1.33 ) $grid: ( quarter: 4, third: 3, half: 2, two-thirds: 1.5, three-quarters: 1.33 )
$breakpoints: ( sm: 768px, md: 992px, lg: 1200px ) $breakpoints: ( sm: 768px, md: 992px, lg: 1200px )
$headings: (1: 3, 2: 2.6, 3: 2, 4: 1.8, 5: 1.5) $headings: (1: 4.4, 2: 3.4, 3: 2.6, 4: 2.2, 5: 1.8)
// Fonts // Fonts
$font-primary: "Source Sans Pro", Tahoma, Geneva, sans-serif !default $font-primary: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default
$font-code: 'Source Code Pro', Consolas, 'Andale Mono', Menlo, Monaco, Courier, monospace !default $font-secondary: "HK Grotesk", Roboto, Helvetica, Arial, sans-serif !default
$font-code: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default
// Colors // Colors
$colors: ( blue: #09a3d5, red: #d9515d, green: #08c35e ) $colors: ( blue: #09a3d5, green: #05b083 )
$color-back: #fff !default $color-back: #fff !default
$color-front: #1a1e23 !default $color-front: #1a1e23 !default
$color-dark: lighten($color-front, 20) !default $color-dark: lighten($color-front, 20) !default
$color-theme: map-get($colors, $theme) $color-theme: map-get($colors, $theme)
$color-theme-dark: darken(map-get($colors, $theme), 5) $color-theme-dark: darken(map-get($colors, $theme), 10)
$color-theme-light: rgba($color-theme, 0.05) $color-theme-light: rgba($color-theme, 0.05)
$color-subtle: #ddd !default $color-subtle: #ddd !default
$color-subtle-light: #f6f6f6 !default $color-subtle-light: #f6f6f6 !default
$color-subtle-dark: #949e9b !default $color-subtle-dark: #949e9b !default
$color-red: #d9515d $color-red: #ef476f
$color-green: #3ec930 $color-green: #7ddf64
$color-yellow: #f4c025 $color-yellow: #f4c025
$syntax-highlighting: ( comment: #949e9b, tag: #b084eb, number: #b084eb, selector: #ffb86c, operator: #ff2c6d, function: #35b3dc, keyword: #ff2c6d, regex: #f4c025 ) $syntax-highlighting: ( comment: #949e9b, tag: #b084eb, number: #b084eb, selector: #ffb86c, operator: #ff2c6d, function: #35b3dc, keyword: #ff2c6d, regex: #f4c025 )
$pattern: $color-theme url("/assets/img/pattern_#{$theme}.jpg") center top repeat $pattern: $color-theme url("/assets/img/pattern_#{$theme}.jpg") center top repeat
$pattern-overlay: transparent url("/assets/img/pattern_landing.jpg") center -138px no-repeat $pattern-overlay: transparent url("/assets/img/pattern_landing.jpg") center -138px no-repeat
$box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2)

View File

@ -30,6 +30,7 @@ $theme: blue !default
@import _components/lists @import _components/lists
@import _components/misc @import _components/misc
@import _components/navigation @import _components/navigation
@import _components/progress
@import _components/sidebar @import _components/sidebar
@import _components/tables @import _components/tables
@import _components/quickstart @import _components/quickstart

View File

@ -1,4 +0,0 @@
//- 💫 STYLESHEET (RED)
$theme: red
@import style

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,244 +0,0 @@
<?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">
<metadata></metadata>
<defs>
<font id="source_code_prosemibold" horiz-adv-x="1228" >
<font-face units-per-em="2048" ascent="1536" descent="-512" />
<missing-glyph horiz-adv-x="500" />
<glyph horiz-adv-x="0" />
<glyph horiz-adv-x="682" />
<glyph horiz-adv-x="0" />
<glyph horiz-adv-x="0" />
<glyph unicode="&#xd;" />
<glyph unicode=" " />
<glyph unicode="!" d="M436 160q0 82 51.5 131t126.5 49q76 0 127.5 -49t51.5 -131q0 -84 -51.5 -134.5t-127.5 -50.5t-127 50.5t-51 134.5zM498 1372h233l-6 -233l-33 -639h-155l-33 639z" />
<glyph unicode="&#x22;" d="M219 1405h287l-6 -262l-62 -473h-151l-62 473zM725 1405h287l-6 -262l-62 -473h-151l-62 473z" />
<glyph unicode="#" d="M160 399v156h176l33 264h-168v156h186l47 356h139l-43 -356h242l45 356h141l-43 -356h162v-156h-180l-33 -264h172v-156h-190l-49 -399h-144l49 399h-241l-47 -399h-144l47 399h-157zM479 555h242l33 264h-242z" />
<glyph unicode="$" d="M152 233l106 162q88 -59 178 -96t197 -37q98 0 148 37t50 98q0 53 -46 88t-115.5 65t-149.5 59.5t-149.5 72.5t-115.5 103.5t-46 152.5q0 133 90 217t244 105v268h164v-266q109 -12 185.5 -55.5t139.5 -106.5l-119 -137q-72 53 -136 81.5t-159 28.5q-86 0 -134 -34.5 t-48 -96.5q0 -47 46 -77.5t116 -58.5t150.5 -57.5t150.5 -72.5t116 -105.5t46 -156.5q0 -131 -93.5 -222.5t-260.5 -115.5v-301h-164v297q-106 10 -211 54t-180 107z" />
<glyph unicode="%" d="M47 182l379 371l86 -80l-338 -412zM53 991q0 80 23 142.5t61.5 105.5t93 65.5t117.5 22.5t117.5 -22.5t93.5 -65.5t61.5 -105.5t22.5 -142.5t-22.5 -143t-61.5 -108t-93.5 -69t-117.5 -24t-117.5 24t-93 69t-61.5 108.5t-23 142.5zM221 991q0 -113 37 -163t90 -50 t90 50.5t37 162.5q0 115 -36.5 160t-90.5 45q-53 0 -90 -45t-37 -160zM587 319q0 80 23 142.5t61.5 105.5t93 65.5t117.5 22.5t117.5 -22.5t93.5 -65.5t61.5 -105.5t22.5 -142.5t-22.5 -143t-61.5 -108t-93.5 -69t-117.5 -24t-117.5 24t-93 69t-61.5 108.5t-23 142.5z M721 866l338 412l127 -121l-379 -371zM755 319q0 -113 37 -163t90 -50t90 50.5t37 162.5q0 115 -36.5 160t-90.5 45q-53 0 -90 -45t-37 -160z" />
<glyph unicode="&#x26;" d="M66 352q0 68 19 122t51 99t74 83t89 71q-41 82 -64.5 159t-23.5 144q0 70 22.5 130.5t63.5 105.5t98.5 71.5t128.5 26.5q137 0 214 -78t77 -207q0 -66 -23.5 -119t-62.5 -99t-87 -87t-99 -80q59 -82 132 -159.5t152 -143.5q94 145 140 348h217q-35 -127 -84 -243.5 t-117 -221.5q57 -39 109.5 -65.5t99.5 -40.5l-59 -193q-135 37 -283 140q-74 -63 -165 -101.5t-204 -38.5q-96 0 -174 30t-131 80t-81.5 118.5t-28.5 148.5zM291 367q0 -94 62.5 -151.5t156.5 -57.5q49 0 96 20.5t90 57.5q-86 74 -162.5 158.5t-140.5 176.5 q-45 -45 -73.5 -95t-28.5 -109zM408 1032q0 -88 51 -194q72 51 122 107t50 132q0 53 -22.5 90t-82.5 37q-53 0 -85.5 -47t-32.5 -125z" />
<glyph unicode="'" d="M471 1405h287l-6 -262l-62 -473h-151l-62 473z" />
<glyph unicode="(" d="M397 569q0 293 120 526.5t327 405.5l131 -108q-195 -176 -285 -375t-90 -449t90 -448.5t285 -374.5l-131 -108q-207 172 -327 405t-120 526z" />
<glyph unicode=")" d="M254 -254q195 176 285 374.5t90 448.5t-90 449t-285 375l131 108q207 -172 326.5 -405.5t119.5 -526.5t-119.5 -526t-326.5 -405z" />
<glyph unicode="*" d="M152 754l38 120l338 -100l21 375h131l20 -375l338 100l39 -120l-323 -142l211 -329l-109 -76l-242 307l-241 -307l-109 76l211 329z" />
<glyph unicode="+" d="M160 590v172h364v387h181v-387h364v-172h-364v-387h-181v387h-364z" />
<glyph unicode="," d="M387 -299q260 104 262 315q-10 -2 -28 -2q-78 0 -135.5 46t-57.5 137q0 86 58.5 134t138.5 48q111 0 166 -82t55 -225q0 -188 -102.5 -318.5t-294.5 -193.5z" />
<glyph unicode="-" d="M160 590v172h909v-172h-909z" />
<glyph unicode="." d="M412 182q0 90 57 148.5t145 58.5t145.5 -58.5t57.5 -148.5t-57.5 -148.5t-145.5 -58.5t-145 58.5t-57 148.5z" />
<glyph unicode="/" d="M176 -328l674 1782h203l-674 -1782h-203z" />
<glyph unicode="0" d="M131 657q0 332 130 501t353 169t353.5 -169t130.5 -501q0 -330 -130.5 -506t-353.5 -176t-353 176.5t-130 505.5zM344 657q0 -133 20.5 -228t56.5 -154.5t85 -87t108 -27.5q57 0 107.5 27.5t86.5 87t56.5 154.5t20.5 228t-20.5 226.5t-56.5 151t-86.5 83t-107.5 25.5 q-59 0 -108 -25.5t-85 -83t-56.5 -150.5t-20.5 -227zM473 666q0 68 41 106.5t100 38.5t100.5 -39t41.5 -106q0 -68 -41.5 -107t-100.5 -39t-100 39t-41 107z" />
<glyph unicode="1" d="M184 0v193h353v856h-273v147q111 18 189.5 44t146.5 63h172v-1110h320v-193h-908z" />
<glyph unicode="2" d="M123 1126q94 96 198.5 148.5t247.5 52.5q100 0 182.5 -28.5t140.5 -81t90 -126t32 -163.5q0 -86 -42 -175t-114 -180.5t-171 -187.5t-212 -199q57 4 120.5 9.5t117.5 5.5h368v-201h-948v137q154 131 274.5 240.5t205.5 204t130 176.5t45 157q0 104 -63 165t-186 61 q-86 0 -157 -43t-130 -103z" />
<glyph unicode="3" d="M102 160l111 151q66 -59 153 -101t193 -42q121 0 200 52t79 145q0 51 -22.5 92t-73 69.5t-133.5 44t-203 15.5v172q104 0 177.5 15t120 43t68 67t21.5 84q0 82 -62.5 128t-167.5 46q-86 0 -158.5 -34t-138.5 -89l-123 145q90 74 196.5 119t233.5 45q100 0 184.5 -22.5 t145 -66.5t94 -108.5t33.5 -146.5q0 -111 -71.5 -184.5t-192.5 -114.5v-8q63 -16 119.5 -44t98.5 -69t66.5 -94t24.5 -117q0 -90 -40 -159.5t-107.5 -117.5t-157.5 -74t-190 -26q-168 0 -287 53.5t-191 131.5z" />
<glyph unicode="4" d="M76 336v160l598 809h272v-787h184v-182h-184v-336h-221v336h-649zM315 518h410v311q2 59 5 129t7 129h-10q-33 -51 -67.5 -102t-69.5 -104z" />
<glyph unicode="5" d="M104 156l109 151q66 -55 146.5 -97t193.5 -42q123 0 206 65.5t83 184.5q0 117 -77 180.5t-202 63.5q-72 0 -123 -17.5t-118 -56.5l-113 71l41 644h768v-199h-563l-29 -316q51 20 98 31.5t107 11.5q92 0 174 -24.5t142.5 -74.5t96 -127t35.5 -181q0 -106 -41 -190 t-110.5 -141.5t-158.5 -87.5t-187 -30q-172 0 -286 54.5t-192 126.5z" />
<glyph unicode="6" d="M139 612q0 190 46 325.5t124 221.5t177.5 127t207.5 41q129 0 226.5 -43t162.5 -104l-127 -144q-45 43 -109.5 71t-133.5 28q-70 0 -132.5 -25t-110.5 -82t-78 -150.5t-34 -228.5q76 74 166 116t176 42q88 0 162 -24.5t128 -75t85 -126t31 -178.5q0 -98 -37 -177 t-99.5 -134t-144.5 -86t-172 -31q-102 0 -195 38t-164 116t-113 199t-42 284zM367 483q23 -174 98 -250.5t186 -76.5q49 0 91 16t75 48t51.5 78t18.5 105q0 117 -62.5 174.5t-173.5 57.5q-66 0 -139.5 -34t-144.5 -118z" />
<glyph unicode="7" d="M135 1104v199h963v-144q-127 -141 -207 -269t-127 -261t-67.5 -286t-28.5 -343h-240q8 174 33.5 318.5t74 274.5t122 254t180.5 257h-703z" />
<glyph unicode="8" d="M131 334q0 63 21.5 114.5t58.5 91.5t85 71.5t99 56.5v8q-82 53 -138 127t-56 178q0 80 31.5 143.5t88 108.5t133 69.5t169.5 24.5q195 0 306 -96t111 -256q0 -92 -57 -168t-137 -129v-8q53 -27 99 -57.5t80 -70.5t53.5 -92.5t19.5 -119.5q0 -76 -32 -140.5t-93.5 -112.5 t-151.5 -75t-205 -27q-113 0 -202.5 27t-152 74t-96.5 112.5t-34 145.5zM340 358q0 -98 78 -156.5t203 -58.5q119 0 186 51.5t67 143.5q0 55 -27.5 94t-75.5 67.5t-113.5 52t-143.5 50.5q-76 -45 -125 -103.5t-49 -140.5zM410 981q0 -49 22.5 -86t63.5 -64.5t96 -51.5 t121 -44q129 104 129 226q0 86 -57.5 142t-166.5 56q-92 0 -150 -46t-58 -132z" />
<glyph unicode="9" d="M123 901q0 98 37 177t98 134.5t143 85t172 29.5q104 0 197.5 -38t164.5 -115.5t111.5 -197.5t40.5 -284q0 -190 -46 -325.5t-122.5 -222.5t-177 -128t-206.5 -41q-129 0 -227.5 43t-164.5 105l127 143q47 -43 110.5 -70.5t135.5 -27.5q68 0 130.5 24.5t110.5 82 t78.5 150.5t34.5 228q-78 -72 -167 -113.5t-175 -41.5q-88 0 -162.5 24.5t-128 74.5t-84 126t-30.5 178zM340 901q0 -117 62 -175t173 -58q68 0 142 34.5t145 118.5q-23 172 -98.5 249t-185.5 77q-49 0 -92.5 -16.5t-75 -47t-51 -76.5t-19.5 -106z" />
<glyph unicode=":" d="M412 182q0 90 57 148.5t145 58.5t145.5 -58.5t57.5 -148.5t-57.5 -148.5t-145.5 -58.5t-145 58.5t-57 148.5zM412 878q0 90 57 148.5t145 58.5t145.5 -58.5t57.5 -148.5t-57.5 -148.5t-145.5 -58.5t-145 58.5t-57 148.5z" />
<glyph unicode=";" d="M387 -299q260 104 262 315q-10 -2 -28 -2q-78 0 -135.5 46t-57.5 137q0 86 58.5 134t138.5 48q111 0 166 -82t55 -225q0 -188 -102.5 -318.5t-294.5 -193.5zM412 878q0 90 57 148.5t145 58.5t145.5 -58.5t57.5 -148.5t-57.5 -148.5t-145.5 -58.5t-145 58.5t-57 148.5z " />
<glyph unicode="&#x3c;" d="M242 596v168l778 516v-219l-580 -377v-8l580 -377v-219z" />
<glyph unicode="=" d="M160 363v172h909v-172h-909zM160 819v172h909v-172h-909z" />
<glyph unicode="&#x3e;" d="M209 80v219l579 377v8l-579 377v219l778 -516v-168z" />
<glyph unicode="?" d="M213 1221q72 78 168 127t219 49q86 0 160 -21.5t127 -63.5t82.5 -102.5t29.5 -140.5q0 -66 -25.5 -117t-64.5 -93t-83 -81t-78.5 -80t-56 -89t-13.5 -109h-207q-12 70 6.5 125t51 100t75.5 83t80 75t62.5 74.5t25.5 82.5q0 74 -50 119t-138 45q-72 0 -129.5 -28.5 t-108.5 -77.5zM408 160q0 82 51 131t127 49t127 -49t51 -131q0 -84 -51 -134.5t-127 -50.5t-127 50.5t-51 134.5z" />
<glyph unicode="@" d="M82 516q0 203 48 352.5t130 247.5t192.5 146.5t237.5 48.5q111 0 193 -38t135 -104.5t78.5 -157.5t25.5 -196v-610h-131l-18 110h-8q-41 -55 -109 -95t-149 -40q-55 0 -103.5 20.5t-83.5 57.5t-55.5 88t-20.5 113q0 160 138.5 239.5t388.5 110.5v31q0 66 -17.5 124 t-52.5 103t-90 70.5t-129 25.5q-82 0 -160 -39t-138 -118.5t-97 -203.5t-37 -294q0 -162 37 -285t98 -206t144 -125t176 -42q92 0 155.5 22t122.5 62l74 -120q-84 -53 -169 -83t-192 -30q-123 0 -233.5 51t-195.5 152.5t-135 255t-50 356.5zM623 463q0 -59 35.5 -92 t99.5 -33q49 0 96 27.5t94 74.5v224q-178 -27 -251.5 -73t-73.5 -128z" />
<glyph unicode="A" d="M41 0l434 1339h279l434 -1339h-252l-102 362h-447l-104 -362h-242zM440 549h340l-47 164q-29 106 -59.5 218.5t-59.5 223.5h-8q-29 -113 -58.5 -224.5t-60.5 -217.5z" />
<glyph unicode="B" d="M190 0v1339h396q102 0 189 -17t150.5 -55t99.5 -101.5t36 -155.5q0 -96 -57.5 -178t-176.5 -113v-8q147 -25 224 -104t77 -214q0 -100 -37.5 -174t-106.5 -123t-162 -72.5t-204 -23.5h-428zM428 184h166q147 0 225 55.5t78 170.5q0 204 -300 204h-3h-166v-430zM428 784 h135q141 0 202.5 51.5t61.5 145.5q0 92 -64.5 133t-193.5 41h-141v-371z" />
<glyph unicode="C" d="M123 666q0 164 47 294t130 220t196.5 137t246.5 47q123 0 219.5 -51t161.5 -117l-133 -147q-49 49 -109.5 78.5t-138.5 29.5q-84 0 -153.5 -33.5t-118.5 -96t-76.5 -153t-27.5 -202.5q0 -115 27.5 -206t77.5 -153.5t121 -96.5t157 -34q82 0 146.5 35t121.5 98l131 -145 q-82 -94 -184.5 -144.5t-229.5 -50.5q-129 0 -240.5 45.5t-194.5 133.5t-130 217t-47 295z" />
<glyph unicode="D" d="M154 0v1339h346q297 0 463.5 -165.5t166.5 -497.5q0 -166 -43 -293t-122.5 -212t-194.5 -128t-258 -43h-358zM391 193h94q193 0 297.5 117.5t104.5 365.5q0 246 -104.5 358.5t-297.5 112.5h-94v-954z" />
<glyph unicode="E" d="M213 0v1339h856v-200h-618v-342h524v-201h-524v-395h639v-201h-877z" />
<glyph unicode="F" d="M248 0v1339h852v-200h-615v-379h523v-201h-523v-559h-237z" />
<glyph unicode="G" d="M98 666q0 166 46 295t127 219t192.5 137t243.5 47q133 0 226 -52t152 -116l-131 -147q-47 47 -103 77.5t-144 30.5q-80 0 -146.5 -33.5t-115 -96t-75 -153t-26.5 -202.5q0 -229 93 -359.5t274 -130.5q53 0 102 15.5t78 44.5v288h-232v195h447v-590q-66 -66 -173.5 -113 t-236.5 -47q-127 0 -236.5 45.5t-189.5 133.5t-126 217t-46 295z" />
<glyph unicode="H" d="M147 0v1339h238v-538h459v538h237v-1339h-237v594h-459v-594h-238z" />
<glyph unicode="I" d="M172 0v201h324v938h-324v200h885v-200h-324v-938h324v-201h-885z" />
<glyph unicode="J" d="M143 197l144 145q57 -80 126.5 -121t141.5 -41q123 0 182.5 64.5t59.5 218.5v678h-543v198h780v-897q0 -96 -24.5 -181t-80 -148.5t-146.5 -100.5t-222 -37q-55 0 -113.5 12.5t-112.5 39t-103.5 68.5t-88.5 102z" />
<glyph unicode="K" d="M170 0v1339h240v-608h6l477 608h264l-412 -522l457 -817h-264l-334 631l-194 -240v-391h-240z" />
<glyph unicode="L" d="M246 0v1339h235v-1138h629v-201h-864z" />
<glyph unicode="M" d="M150 0v1339h245l162 -520l57 -203h7l55 203l158 520h245v-1339h-194v594q0 47 3 114.5t7 140.5t9 140.5t9 114.5h-6l-96 -328l-141 -416h-115l-143 416l-95 328h-6q4 -47 9.5 -114.5t10.5 -140.5t8 -140.5t3 -114.5v-594h-192z" />
<glyph unicode="N" d="M152 0v1339h241l359 -753l125 -285h6q-8 104 -20.5 224t-12.5 233v581h227v-1339h-241l-359 756l-125 282h-6q8 -106 20.5 -223t12.5 -229v-586h-227z" />
<glyph unicode="O" d="M88 676q0 162 39 290t107.5 216t166 135t213.5 47q117 0 214.5 -47t166 -135t107.5 -216t39 -290q0 -164 -39 -293t-107.5 -220t-166 -139.5t-214.5 -48.5t-214 48.5t-165.5 139.5t-107.5 220t-39 293zM332 676q0 -113 19.5 -204t56 -155.5t88.5 -99.5t118 -35 q63 0 115.5 35t89.5 99.5t57.5 155.5t20.5 204q0 225 -77 353t-206 128t-205.5 -128t-76.5 -353z" />
<glyph unicode="P" d="M178 0v1339h451q111 0 204 -20.5t161.5 -69.5t106.5 -128t38 -195q0 -111 -39 -193t-107.5 -136t-162 -79.5t-201.5 -25.5h-213v-492h-238zM416 682h194q295 0 295 244q0 127 -73.5 175t-221.5 48h-194v-467z" />
<glyph unicode="Q" d="M88 676q0 162 38 290t106.5 216t165 135t212.5 47q117 0 213.5 -47t165 -135t106.5 -216t38 -290q0 -276 -104.5 -453.5t-280.5 -228.5q35 -78 106.5 -114t159.5 -36q31 0 57.5 7.5t46.5 17.5l43 -182q-35 -16 -78 -25.5t-96 -9.5q-188 0 -310 94t-179 242 q-92 20 -168 77.5t-130.5 145.5t-83 206t-28.5 259zM330 676q0 -113 19.5 -205t55 -156.5t88 -99.5t117.5 -35q63 0 115.5 35t88.5 99.5t55.5 156.5t19.5 205q0 225 -75 354t-204 129q-131 0 -205.5 -129t-74.5 -354z" />
<glyph unicode="R" d="M172 0v1339h446q104 0 194.5 -20.5t157 -66.5t104.5 -121.5t38 -188.5q0 -154 -72.5 -248t-193.5 -135l319 -559h-268l-287 524h-200v-524h-238zM410 713h184q139 0 212 57t73 172q0 117 -73 162t-212 45h-184v-436z" />
<glyph unicode="S" d="M119 172l139 162q76 -68 171 -110t194 -42q123 0 186 47t63 125q0 41 -16 70t-46 50.5t-72 39.5t-91 37l-182 80q-53 20 -104.5 51t-92.5 74t-65.5 100t-24.5 131q0 80 35 148.5t96.5 120t146.5 80t187 28.5q123 0 234.5 -46t195.5 -124l-123 -152q-68 53 -141.5 84 t-165.5 31q-104 0 -164.5 -42t-60.5 -116q0 -39 18.5 -66.5t50 -49t73.5 -38t87 -34.5l176 -76q63 -25 116.5 -57.5t92.5 -75.5t60.5 -99.5t21.5 -129.5q0 -82 -33.5 -154t-97 -126t-156 -86t-209.5 -32q-141 0 -270 51.5t-229 145.5z" />
<glyph unicode="T" d="M74 1139v200h1081v-200h-422v-1139h-237v1139h-422z" />
<glyph unicode="U" d="M147 512v827h238v-845q0 -166 61.5 -239t169.5 -73q111 0 174.5 73t63.5 239v845h227v-827q0 -276 -120.5 -406.5t-344.5 -130.5q-219 0 -344 131.5t-125 405.5z" />
<glyph unicode="V" d="M57 1339h252l189 -673q33 -115 58.5 -217.5t59.5 -219.5h9q35 117 60.5 219.5t55.5 217.5l187 673h243l-415 -1339h-281z" />
<glyph unicode="W" d="M14 1339h240l74 -776q4 -86 10 -168t10 -168h6q16 86 38 169t40 167l117 434h151l115 -434q16 -82 37.5 -166t38.5 -170h8q4 86 10 170t11 166l69 776h225l-182 -1339h-252l-118 489q-14 63 -24.5 127t-19.5 123h-6q-10 -59 -20 -122.5t-25 -127.5l-112 -489h-248z" />
<glyph unicode="X" d="M74 0l393 690l-369 649h264l158 -297q25 -47 49.5 -96t55.5 -108h8q27 59 49.5 108t44.5 96l152 297h251l-368 -659l393 -680h-262l-174 315q-29 53 -55.5 105.5t-57.5 114.5h-8q-29 -61 -53.5 -113.5t-50.5 -106.5l-168 -315h-252z" />
<glyph unicode="Y" d="M55 1339h252l168 -360q35 -78 69 -152.5t68 -156.5h9q37 82 71.5 157.5t69.5 153.5l166 358h246l-441 -874v-465h-237v465z" />
<glyph unicode="Z" d="M125 0v143l686 998h-625v198h918v-143l-688 -995h696v-201h-987z" />
<glyph unicode="[" d="M436 -311v1761h586v-129h-404v-1503h404v-129h-586z" />
<glyph unicode="\" d="M176 1454h203l674 -1782h-203z" />
<glyph unicode="]" d="M209 -182h401v1503h-401v129h586v-1761h-586v129z" />
<glyph unicode="^" d="M201 571l315 801h197l315 -801h-199l-114 310l-97 276h-8l-96 -276l-115 -310h-198z" />
<glyph unicode="_" d="M123 -127h983v-184h-983v184z" />
<glyph unicode="`" d="M336 1497h246l184 -323h-176z" />
<glyph unicode="a" d="M145 270q0 84 39 148.5t123 109.5t215 74t318 41q-6 86 -61.5 141.5t-178.5 55.5q-86 0 -169 -32t-161 -75l-86 158q92 53 211 96t248 43q211 0 321.5 -111.5t110.5 -322.5v-596h-192l-19 125h-6q-80 -61 -177 -105.5t-200 -44.5q-74 0 -135 21.5t-106 60.5t-70 93 t-25 120zM373 289q0 -68 52 -98.5t128 -30.5t146.5 33.5t140.5 89.5v213q-135 -10 -225.5 -27.5t-143.5 -44.5t-75.5 -60.5t-22.5 -74.5z" />
<glyph unicode="b" d="M168 0v1446h238v-373l-9 -176q66 61 148 97t164 36q98 0 173.5 -36t129 -102.5t81 -160.5t27.5 -211q0 -129 -36.5 -230.5t-99 -171t-143.5 -106.5t-167 -37q-72 0 -150 35t-143 101h-6l-21 -111h-186zM406 262q55 -51 114.5 -71.5t106.5 -20.5q106 0 178 87t72 259 q0 152 -55.5 236t-178.5 84q-57 0 -116.5 -29t-120.5 -92v-453z" />
<glyph unicode="c" d="M150 502q0 125 46 223t123.5 165.5t182 103.5t219.5 36q123 0 216 -41t157 -100l-113 -148q-59 47 -119.5 72t-128.5 25q-152 0 -246 -91.5t-94 -244.5q0 -76 24.5 -137.5t68.5 -105.5t105.5 -67.5t135.5 -23.5q86 0 156.5 32.5t130.5 78.5l98 -152q-86 -76 -192.5 -114 t-214.5 -38q-119 0 -220.5 35t-176.5 102.5t-116.5 166t-41.5 223.5z" />
<glyph unicode="d" d="M109 502q0 123 36.5 221t99 165.5t142.5 104.5t166 37q90 0 154.5 -31.5t126.5 -87.5l-11 170v365h238v-1446h-195l-18 117h-6q-59 -59 -138 -100.5t-165 -41.5q-96 0 -176 36t-136.5 103.5t-87 165t-30.5 222.5zM352 504q0 -164 63.5 -249t180.5 -85q125 0 227 121v452 q-53 51 -106 72t-109 21q-53 0 -99 -22.5t-81 -64.5t-55.5 -103.5t-20.5 -141.5z" />
<glyph unicode="e" d="M127 502q0 123 44 221t115.5 166.5t165 104.5t191.5 36q113 0 200 -36t146.5 -98t90 -150.5t30.5 -192.5q0 -35 -3 -65.5t-7 -49.5h-731q12 -135 106 -207.5t232 -72.5q78 0 145.5 21.5t136.5 60.5l80 -148q-82 -51 -182.5 -84t-210.5 -33q-115 0 -215.5 36t-174 103.5 t-116.5 165t-43 222.5zM367 598h526q0 117 -61.5 183.5t-182.5 66.5q-102 0 -182 -63.5t-100 -186.5z" />
<glyph unicode="f" d="M188 819v176l279 11v55q0 88 24.5 163.5t77 130t133 85t191.5 30.5q82 0 156.5 -14t142.5 -41l-49 -174q-55 23 -107.5 33t-113.5 10q-117 0 -169.5 -56.5t-52.5 -162.5v-59h383v-187h-383v-819h-233v819h-279z" />
<glyph unicode="g" d="M127 -176q0 59 41 114.5t119 96.5v8q-41 23 -72 63.5t-31 104.5q0 51 33 101t88 89v9q-53 37 -91 102.5t-38 155.5q0 86 34 153.5t90 113.5t131 70.5t159 24.5q90 0 158 -24h411v-175h-235q27 -31 47 -74.5t20 -97.5q0 -84 -30.5 -147t-85 -106.5t-128 -65t-157.5 -21.5 q-76 0 -154 27q-61 -39 -61 -92q0 -96 190 -96h205q197 0 296 -57.5t99 -188.5q0 -74 -41 -139.5t-115.5 -113.5t-182 -75.5t-240.5 -27.5q-104 0 -188.5 16t-144.5 50t-93 84t-33 118zM324 -145q0 -68 74.5 -107t215.5 -39q74 0 133.5 13.5t102.5 36t65.5 52t22.5 62.5 q0 59 -51 78.5t-152 19.5h-160q-49 0 -86.5 3t-66.5 14q-53 -33 -75.5 -65.5t-22.5 -67.5zM399 668q0 -96 56.5 -148.5t134.5 -52.5t135 52t57 149q0 92 -57 146t-135 54t-134.5 -54t-56.5 -146z" />
<glyph unicode="h" d="M168 0v1446h238v-373l-15 -215q70 70 157 121t204 51q174 0 256 -105.5t82 -301.5v-623h-238v592q0 123 -42 179t-146 56q-74 0 -131.5 -34.5t-126.5 -106.5v-686h-238z" />
<glyph unicode="i" d="M172 819v187h672v-1006h-236v819h-436zM541 1339q0 72 48 116t120 44q74 0 121 -44t47 -116t-47 -114.5t-121 -42.5q-72 0 -120 43t-48 114z" />
<glyph unicode="j" d="M100 -354l72 170q57 -27 111.5 -39.5t103.5 -12.5q129 0 175 61.5t46 180.5v813h-436v187h672v-988q0 -92 -21.5 -171.5t-72 -140t-136.5 -94.5t-215 -34q-88 0 -162.5 19.5t-136.5 48.5zM541 1339q0 72 48 116t120 44q74 0 121 -44t47 -116t-47 -114.5t-121 -42.5 q-72 0 -120 43t-48 114z" />
<glyph unicode="k" d="M184 0v1446h238v-905h8l453 465h262l-389 -406l432 -600h-258l-316 455l-192 -193v-262h-238z" />
<glyph unicode="l" d="M145 1260v186h553v-1092q0 -102 51.5 -144t129.5 -42q74 0 172 39l55 -174q-72 -25 -134.5 -41.5t-150.5 -16.5q-178 0 -268 102.5t-90 289.5v893h-318z" />
<glyph unicode="m" d="M98 0v1006h178l19 -129h6q35 66 85 109.5t136 43.5q147 0 185 -168q35 72 89 120t138 48q106 0 164.5 -83t58.5 -234v-713h-223v694q0 133 -84 133q-41 0 -71.5 -30.5t-59.5 -94.5v-702h-184v694q0 133 -86 133q-41 0 -70 -30.5t-57 -94.5v-702h-224z" />
<glyph unicode="n" d="M168 0v1006h194l19 -152h8q72 72 159 124t204 52q174 0 256 -105.5t82 -301.5v-623h-238v592q0 123 -42 179t-146 56q-74 0 -131.5 -34.5t-126.5 -106.5v-686h-238z" />
<glyph unicode="o" d="M109 502q0 125 42 223t111.5 165.5t161.5 103.5t190 36t190.5 -36t162 -103.5t111.5 -165.5t42 -223t-42 -223.5t-111.5 -166t-161.5 -102.5t-191 -35q-98 0 -190 35t-161.5 102.5t-111.5 166t-42 223.5zM352 502q0 -152 70 -243t192 -91q123 0 193 91t70 243 q0 154 -70 245t-193 91t-192.5 -91t-69.5 -245z" />
<glyph unicode="p" d="M168 -397v1403h194l19 -115h6q66 59 151 99t171 40q98 0 175 -36t129 -103.5t79.5 -161.5t27.5 -211q0 -129 -36.5 -230.5t-99 -170t-143.5 -105.5t-167 -37q-70 0 -142.5 31t-134.5 88l9 -176v-315h-238zM406 262q55 -51 113.5 -71.5t105.5 -20.5q109 0 180.5 87 t71.5 259q0 152 -55.5 236t-178.5 84q-57 0 -116.5 -29t-120.5 -92v-453z" />
<glyph unicode="q" d="M109 502q0 123 36.5 221t99 165.5t142.5 104.5t166 37q88 0 158.5 -32.5t136.5 -98.5h6l20 107h187v-1403h-238v338l11 168q-59 -57 -136 -95.5t-159 -38.5q-96 0 -176 36t-136.5 103.5t-87 165t-30.5 222.5zM352 504q0 -164 63.5 -249t180.5 -85q125 0 227 121v452 q-53 51 -106 72t-109 21q-53 0 -99 -22.5t-81 -64.5t-55.5 -103.5t-20.5 -141.5z" />
<glyph unicode="r" d="M266 0v1006h195l20 -228h6q78 123 187.5 187.5t240.5 64.5q61 0 105.5 -9t89.5 -32l-49 -198q-49 16 -87 23t-95 7q-104 0 -200.5 -59.5t-174.5 -206.5v-555h-238z" />
<glyph unicode="s" d="M127 131l111 150q86 -59 179 -93t210 -34q119 0 174 33.5t55 86.5t-71.5 89t-225.5 77q-72 18 -139.5 45t-118.5 62t-82 80t-31 102q0 133 115 217t330 84q123 0 231.5 -41t186.5 -92l-109 -145q-68 45 -144.5 72.5t-162.5 27.5q-117 0 -164 -32t-47 -79q0 -27 21.5 -48 t59.5 -38.5t89 -34t113 -30.5q88 -23 158.5 -50.5t120.5 -62.5t78 -82t28 -108q0 -66 -31 -122t-90.5 -98t-147.5 -67t-202 -25q-141 0 -270.5 45.5t-223.5 110.5z" />
<glyph unicode="t" d="M121 819v176l278 11l31 274h195v-274h458v-187h-458v-413q0 -125 51 -183.5t180 -58.5q66 0 119 11t102 30l45 -172q-68 -23 -149.5 -40.5t-173.5 -17.5q-115 0 -193 31t-126 87.5t-69.5 136t-21.5 176.5v413h-268z" />
<glyph unicode="u" d="M143 383v623h236v-592q0 -123 42 -179.5t146 -56.5q72 0 128.5 33t123.5 117v678h236v-1006h-193l-18 160h-8q-72 -84 -158 -134.5t-199 -50.5q-176 0 -256 105.5t-80 302.5z" />
<glyph unicode="v" d="M84 1006h238l194 -523q29 -76 52.5 -150.5t47.5 -152.5h9q25 78 48 153t52 150l195 523h225l-391 -1006h-269z" />
<glyph unicode="w" d="M12 1006h234l92 -523q12 -72 21.5 -143.5t19.5 -144.5h8q10 74 22.5 145.5t28.5 142.5l94 424h177l94 -424q16 -72 29.5 -143.5t25.5 -144.5h8q12 74 21.5 145.5t19.5 142.5l92 523h218l-187 -1006h-276l-88 420q-12 72 -23.5 143.5t-24.5 149.5h-8q-10 -59 -19 -128 t-26 -167l-86 -418h-272z" />
<glyph unicode="x" d="M104 0l365 522l-340 484h256l131 -191q25 -41 53.5 -85t57.5 -87h8q23 43 49.5 88t48.5 86l119 189h248l-342 -508l366 -498h-256l-145 199q-29 41 -60.5 88t-62.5 90h-8q-29 -45 -54.5 -89t-54.5 -91l-131 -197h-248z" />
<glyph unicode="y" d="M82 1006h235l207 -494q29 -68 55.5 -143.5t55.5 -151.5h8q23 72 49.5 147.5t50.5 147.5l183 494h223l-420 -1051q-33 -86 -73 -153.5t-93 -115.5t-122.5 -74t-159.5 -26q-41 0 -78 5.5t-66 15.5l45 184q20 -6 41 -10t43 -4q96 0 153.5 48t88.5 124l24 63z" />
<glyph unicode="z" d="M145 0v127l605 692h-535v187h866v-125l-606 -693h625v-188h-955z" />
<glyph unicode="{" d="M231 498v143q86 0 142.5 14.5t89.5 36t45 48t12 55.5q0 96 -10 181t-10 191q0 82 22.5 136.5t69.5 87t118.5 46t170.5 13.5h141v-129h-94q-72 0 -117 -8t-70.5 -27.5t-35 -51.5t-9.5 -77q0 -86 5.5 -172t5.5 -180q0 -109 -43 -161t-152 -71v-8q109 -18 152 -70.5 t43 -160.5q0 -98 -5.5 -180t-5.5 -172q0 -47 9.5 -78t35 -50.5t70.5 -27.5t117 -8h94v-129h-141q-98 0 -170 13t-119 46t-69.5 87t-22.5 136q0 55 3 101.5t7 89.5t7 87t3 95q0 27 -12 54.5t-45 49t-89.5 36t-142.5 14.5z" />
<glyph unicode="|" d="M510 -512v2048h209v-2048h-209z" />
<glyph unicode="}" d="M209 -182h94q70 0 115 8t71.5 27.5t36 50t9.5 78.5q0 90 -5.5 172t-5.5 180q0 109 42 161t153 70v8q-111 18 -153 70.5t-42 161.5q0 94 5.5 180t5.5 172q0 45 -9.5 77t-36 51.5t-71.5 27.5t-115 8h-94v129h141q98 0 169 -13.5t118 -46t69.5 -87t22.5 -136.5 q0 -106 -10 -191t-10 -181q0 -29 12 -55.5t45 -48t89 -36t142 -14.5v-143q-86 0 -142 -14.5t-89 -36t-45 -49t-12 -54.5q0 -51 3 -95t7 -87t7 -89t3 -102q0 -82 -22.5 -136t-69.5 -87t-117.5 -46t-169.5 -13h-141v129z" />
<glyph unicode="~" d="M131 565q59 154 139 216.5t168 62.5q61 0 108.5 -25.5t88.5 -56.5t79 -56.5t81 -25.5q47 0 86 37t73 135l144 -68q-59 -152 -139 -214t-168 -62q-61 0 -108.5 25.5t-88.5 56.5t-79 56.5t-81 25.5q-47 0 -86 -38t-74 -134z" />
<glyph unicode="&#xa0;" />
<glyph unicode="&#xa1;" d="M436 846q0 84 51.5 134t126.5 50q76 0 127.5 -50t51.5 -134q0 -82 -51.5 -131t-127.5 -49t-127 49t-51 131zM498 -367l6 234l33 639h155l33 -639l6 -234h-233z" />
<glyph unicode="&#xa2;" d="M213 631q0 106 33 193t89 150.5t134 103.5t170 55v206h137v-200q84 -4 148.5 -37t111.5 -80l-110 -145q-72 63 -150 71v-631q53 6 98.5 31t81.5 53l99 -149q-59 -53 -132 -85t-147 -40v-203h-137v203q-193 25 -309.5 154t-116.5 350zM444 631q0 -115 50.5 -193 t144.5 -106v600q-94 -31 -144.5 -110t-50.5 -191z" />
<glyph unicode="&#xa3;" d="M150 0v145q117 49 181 138.5t64 201.5q0 23 -3 42.5t-7 41.5h-233v142l184 10q-20 53 -35.5 105.5t-15.5 103.5q0 92 32.5 165.5t92 125t142.5 79t183 27.5q125 0 215 -43t156 -117l-131 -129q-45 45 -97.5 71t-123.5 26q-117 0 -180.5 -56.5t-63.5 -160.5 q0 -51 13.5 -99.5t29.5 -97.5h367v-152h-326q8 -39 8 -86q0 -92 -32.5 -153.5t-98.5 -120.5v-8h637v-201h-958z" />
<glyph unicode="&#xa4;" d="M96 272l168 170q-35 47 -53 105.5t-18 126.5q0 70 18 128t51 105l-166 170l121 123l180 -184q98 63 217 63t217 -63l181 184l121 -123l-168 -170q35 -47 53 -105.5t18 -127.5q0 -68 -19.5 -126.5t-53.5 -105.5l170 -170l-121 -122l-183 184q-47 -33 -102 -48.5 t-113 -15.5q-121 0 -217 64l-180 -184zM406 674q0 -106 61 -171t147 -65t147.5 64.5t61.5 171.5q0 109 -61.5 173t-147.5 64t-147 -64t-61 -173z" />
<glyph unicode="&#xa5;" d="M86 1303h242l155 -310q35 -68 65 -135t64 -137h9q35 70 65.5 137.5t65.5 134.5l155 310h236l-357 -627h306v-121h-361v-121h361v-123h-361v-311h-235v311h-359v123h359v121h-359v121h303z" />
<glyph unicode="&#xa6;" d="M510 428h209v-940h-209v940zM510 618v918h209v-918h-209z" />
<glyph unicode="&#xa7;" d="M166 684q0 84 49 152.5t127 111.5q-61 68 -61 168q0 61 22.5 114.5t65.5 92.5t105.5 61.5t143.5 22.5q111 0 200 -39t153 -86l-111 -149q-51 41 -108.5 68.5t-120.5 27.5q-72 0 -103.5 -29t-31.5 -74q0 -47 42 -78.5t105.5 -61.5t136 -61.5t136 -76.5t105.5 -109.5 t42 -156.5q0 -94 -47 -159t-131 -112q25 -33 39 -71.5t14 -89.5q0 -66 -24.5 -120.5t-70.5 -95t-113.5 -63.5t-151.5 -23q-115 0 -216.5 41t-168.5 119l139 123q53 -51 112.5 -78.5t133.5 -27.5q72 0 109.5 32.5t37.5 81.5t-41 82t-103.5 61.5t-135 59.5t-135 75 t-103.5 107.5t-41 159.5zM367 700q0 -57 37.5 -96t95 -69.5t127 -58t131.5 -62.5q53 27 78.5 61.5t25.5 87.5q0 57 -37 97t-94 71t-125.5 57.5t-132.5 61.5q-51 -27 -78.5 -63t-27.5 -87z" />
<glyph unicode="&#xa8;" d="M268 1323q0 59 38 99t97 40t98.5 -40t39.5 -99t-39.5 -98t-98.5 -39t-97 39t-38 98zM688 1323q0 59 39 99t98 40t97.5 -40t38.5 -99t-38.5 -98t-97.5 -39t-98 39t-39 98z" />
<glyph unicode="&#xa9;" d="M49 664q0 158 44 283.5t121 212.5t180.5 133t219.5 46q117 0 220.5 -46t180.5 -133t121 -213t44 -283q0 -158 -44 -284t-121 -215t-180.5 -137t-220.5 -48t-220 48t-180 137t-121 215t-44 284zM164 664q0 -129 32.5 -235.5t91 -182.5t141.5 -118t185 -42q100 0 184.5 42 t142.5 118t91 182.5t33 235.5q0 131 -33 236.5t-91 180t-142 114.5t-185 40q-102 0 -185 -40t-141.5 -114.5t-91 -180t-32.5 -236.5zM291 662q0 90 28.5 162.5t75.5 122.5t110.5 78t131.5 28q78 0 130 -29t93 -70l-92 -102q-29 27 -55.5 41t-61.5 14q-86 0 -134 -69.5 t-48 -175.5q0 -119 47 -189t125 -70q47 0 79 17.5t66 42.5l78 -115q-47 -39 -102 -64.5t-127 -25.5q-74 0 -136.5 27.5t-108.5 80t-72.5 127.5t-26.5 169z" />
<glyph unicode="&#xaa;" d="M330 713q0 109 99 167t316 81q-4 51 -33.5 84.5t-97.5 33.5q-49 0 -99 -18.5t-97 -46.5l-64 114q59 35 135 60.5t158 25.5q131 0 201 -73.5t70 -216.5v-392h-142l-12 72h-4q-47 -37 -103.5 -62.5t-115.5 -25.5q-92 0 -151.5 55.5t-59.5 141.5zM496 727q0 -41 28.5 -59.5 t69.5 -18.5t79 17.5t72 48.5v139q-139 -16 -194 -48t-55 -79z" />
<glyph unicode="&#xab;" d="M129 399v234l332 321l104 -94l-260 -344l260 -346l-104 -92zM635 399v234l332 321l104 -94l-260 -344l260 -346l-104 -92z" />
<glyph unicode="&#xac;" d="M160 590v172h909v-559h-178v387h-731z" />
<glyph unicode="&#xad;" d="M160 590v172h909v-172h-909z" />
<glyph unicode="&#xae;" d="M217 1053q0 90 31 165.5t85 130t125.5 84t153.5 29.5t155 -29.5t126 -84t85 -130t32 -165.5t-32 -165t-85 -129t-126 -84t-155 -30t-153.5 30t-125.5 84t-85 129t-31 165zM313 1053q0 -72 22.5 -130.5t62.5 -100.5t94 -65.5t120 -23.5q63 0 118.5 23.5t95.5 65.5 t62.5 100.5t22.5 130.5t-22.5 131t-62.5 102t-95 66.5t-119 23.5q-66 0 -120 -23.5t-94 -66.5t-62.5 -102.5t-22.5 -130.5zM457 854v408h168q68 0 115.5 -31t47.5 -103q0 -35 -19 -65.5t-54 -46.5l90 -162h-111l-65 133h-72v-133h-100zM557 1061h47q37 0 56.5 16.5 t19.5 44.5q0 27 -17.5 44.5t-54.5 17.5h-51v-123z" />
<glyph unicode="&#xaf;" d="M348 1221v155h533v-155h-533z" />
<glyph unicode="&#xb0;" d="M338 1124q0 61 22.5 112.5t60.5 88.5t88 57.5t107 20.5t107.5 -20.5t88.5 -57.5t59.5 -88t21.5 -113q0 -61 -21.5 -112t-59.5 -88t-88.5 -57.5t-107.5 -20.5t-107 20.5t-88 57.5t-60.5 88t-22.5 112zM469 1124q0 -70 40.5 -113.5t106.5 -43.5t106 44t40 113q0 72 -40 116 t-106 44t-106.5 -44t-40.5 -116z" />
<glyph unicode="&#xb1;" d="M160 0v170h909v-170h-909zM160 612v170h364v367h181v-367h364v-170h-364v-319h-181v319h-364z" />
<glyph unicode="&#xb2;" d="M338 1429q53 55 116.5 91t141.5 36q117 0 184.5 -56t67.5 -159q0 -39 -16.5 -75.5t-44 -73.5t-65.5 -74t-79 -74h233v-143h-512v94q143 102 229.5 180t86.5 138q0 47 -27.5 74.5t-81.5 27.5q-72 0 -129 -78z" />
<glyph unicode="&#xb3;" d="M344 975l76 108q33 -31 81 -53.5t97 -22.5q45 0 74.5 18.5t29.5 59.5q0 45 -40.5 66.5t-131.5 21.5v97q145 0 146 86q0 31 -24.5 50t-71.5 19q-35 0 -74 -17.5t-70 -41.5l-74 102q43 41 110 64.5t144 23.5q98 0 165 -47t67 -129q0 -57 -26.5 -92t-86.5 -57 q139 -35 139 -158q0 -45 -20 -81t-56 -61.5t-83 -40t-101 -14.5q-68 0 -138 22.5t-132 76.5z" />
<glyph unicode="&#xb4;" d="M463 1174l184 323h246l-254 -323h-176z" />
<glyph unicode="&#xb5;" d="M143 -393v1399h236v-592q0 -123 44 -179.5t138 -56.5q70 0 131.5 38t126.5 153v637h238q-4 -94 -6 -195.5t-5.5 -202t-4.5 -193.5t-1 -169q0 -43 18.5 -60.5t47.5 -17.5h15t22 4l28 -176q-47 -20 -122 -21q-90 0 -137.5 51.5t-67.5 157.5h-6q-53 -100 -126 -150t-159 -50 q-57 0 -106.5 14t-84.5 63q0 -70 2.5 -127t4.5 -109t5 -105.5t7 -112.5h-238z" />
<glyph unicode="&#xb6;" d="M123 893q0 125 38 210t102.5 137t152.5 75.5t190 23.5h88v-905h-73q-104 0 -195.5 27.5t-158 85t-105.5 143.5t-39 203zM803 -164v1503h233v-1503h-233z" />
<glyph unicode="&#xb7;" d="M412 717q0 90 57 148.5t145 58.5t145.5 -58.5t57.5 -148.5t-57.5 -148.5t-145.5 -58.5t-145 58.5t-57 148.5z" />
<glyph unicode="&#xb8;" d="M430 -342q78 10 127 31.5t49 62.5q0 33 -29.5 55.5t-95.5 38.5l82 160h143l-47 -100q51 -18 86 -52t35 -98q0 -49 -26.5 -83.5t-72.5 -59.5t-105.5 -39t-125.5 -18z" />
<glyph unicode="&#xb9;" d="M414 1354v108q37 6 64.5 12.5t51 14.5t45 18t43.5 25h138v-631h-176v453h-166z" />
<glyph unicode="&#xba;" d="M281 864q0 84 27.5 149.5t73.5 109.5t106.5 67.5t125.5 23.5q66 0 126.5 -23.5t106.5 -67.5t73.5 -109.5t27.5 -149.5q0 -82 -27.5 -146.5t-73.5 -109.5t-106.5 -68.5t-126.5 -23.5t-126 23.5t-106 68.5t-73.5 109.5t-27.5 146.5zM459 864q0 -94 40 -151.5t115 -57.5 q78 0 117 57.5t39 151.5q0 96 -39 154.5t-117 58.5q-76 0 -115.5 -58.5t-39.5 -154.5z" />
<glyph unicode="&#xbb;" d="M160 170l260 346l-260 344l104 94l332 -321v-234l-332 -321zM666 170l260 346l-260 344l104 94l332 -321v-234l-332 -321z" />
<glyph unicode="&#xbc;" d="M45 182l379 371l86 -80l-338 -412zM150 1125v108q37 6 64.5 12.5t51 14.5t45 18t43.5 25h138v-631h-176v453h-166zM606 137v84l274 410h211v-383h105v-111h-105v-137h-155v137h-330zM719 866l338 412l127 -121l-379 -371zM770 248h166v80l10 186h-6l-80 -129z" />
<glyph unicode="&#xbd;" d="M45 182l379 371l86 -80l-338 -412zM150 1125v108q37 6 64.5 12.5t51 14.5t45 18t43.5 25h138v-631h-176v453h-166zM606 528q53 55 116.5 91t141.5 36q117 0 184.5 -56t67.5 -159q0 -39 -16.5 -75.5t-44 -73.5t-65.5 -74t-79 -74h233v-143h-512v94q143 102 229.5 180 t86.5 138q0 47 -27.5 74.5t-81.5 27.5q-72 0 -129 -78zM719 866l338 412l127 -121l-379 -371z" />
<glyph unicode="&#xbe;" d="M78 182l379 371l86 -80l-338 -412zM78 746l76 108q33 -31 81 -53.5t97 -22.5q45 0 74.5 18.5t29.5 59.5q0 45 -40.5 66.5t-131.5 21.5v97q145 0 146 86q0 31 -24.5 50t-71.5 19q-35 0 -74 -17.5t-70 -41.5l-74 102q43 41 110 64.5t144 23.5q98 0 165 -47t67 -129 q0 -57 -26.5 -92t-86.5 -57q139 -35 139 -158q0 -45 -20 -81t-56 -61.5t-83 -40t-101 -14.5q-68 0 -138 22.5t-132 76.5zM608 137v84l274 410h211v-383h105v-111h-105v-137h-155v137h-330zM752 866l338 412l127 -121l-379 -371zM772 248h166v80l10 186h-6l-80 -129z" />
<glyph unicode="&#xbf;" d="M231 -63q0 68 26 117.5t64.5 92.5t83 81t79 79t56 88t13.5 111h207q12 -70 -6.5 -125t-51 -100t-75.5 -83t-80 -75t-62.5 -75t-25.5 -83q0 -74 50 -119t138 -45q72 0 129.5 30t108.5 77l133 -123q-72 -78 -169 -127t-218 -49q-86 0 -160 21.5t-127 63.5t-83 102.5 t-30 140.5zM467 846q0 84 51 134t127 50t127 -50t51 -134q0 -82 -51 -131t-127 -49t-127 49t-51 131z" />
<glyph unicode="&#xc0;" d="M41 0l434 1339h279l434 -1339h-252l-102 362h-447l-104 -362h-242zM313 1679h258l172 -237h-190zM440 549h340l-47 164q-29 106 -59.5 218.5t-59.5 223.5h-8q-29 -113 -58.5 -224.5t-60.5 -217.5z" />
<glyph unicode="&#xc1;" d="M41 0l434 1339h279l434 -1339h-252l-102 362h-447l-104 -362h-242zM440 549h340l-47 164q-29 106 -59.5 218.5t-59.5 223.5h-8q-29 -113 -58.5 -224.5t-60.5 -217.5zM485 1442l172 237h258l-239 -237h-191z" />
<glyph unicode="&#xc2;" d="M41 0l434 1339h279l434 -1339h-252l-102 362h-447l-104 -362h-242zM303 1442l197 237h229l197 -237h-185l-123 131h-8l-123 -131h-184zM440 549h340l-47 164q-29 106 -59.5 218.5t-59.5 223.5h-8q-29 -113 -58.5 -224.5t-60.5 -217.5z" />
<glyph unicode="&#xc3;" d="M41 0l434 1339h279l434 -1339h-252l-102 362h-447l-104 -362h-242zM291 1448q12 119 65.5 184.5t130.5 65.5q41 0 75 -15.5t63.5 -34t55.5 -34t52 -15.5q29 0 49.5 24t30.5 75h125q-12 -117 -65.5 -183.5t-131.5 -66.5q-41 0 -74.5 15.5t-63.5 35t-55.5 34.5t-51.5 15 q-29 0 -49.5 -24.5t-30.5 -75.5h-125zM440 549h340l-47 164q-29 106 -59.5 218.5t-59.5 223.5h-8q-29 -113 -58.5 -224.5t-60.5 -217.5z" />
<glyph unicode="&#xc4;" d="M41 0l434 1339h279l434 -1339h-252l-102 362h-447l-104 -362h-242zM303 1571q0 53 34 88t87 35t88 -35t35 -88t-35 -87t-88 -34t-87 34t-34 87zM440 549h340l-47 164q-29 106 -59.5 218.5t-59.5 223.5h-8q-29 -113 -58.5 -224.5t-60.5 -217.5zM682 1571q0 53 35 88t88 35 t87 -35t34 -88t-34 -87t-87 -34t-88 34t-35 87z" />
<glyph unicode="&#xc5;" d="M41 0l434 1339h279l434 -1339h-252l-102 362h-447l-104 -362h-242zM403 1620q0 86 58.5 138t152.5 52q92 0 151.5 -52t59.5 -138q0 -88 -59.5 -139t-151.5 -51q-94 0 -152.5 51t-58.5 139zM440 549h340l-47 164q-29 106 -59.5 218.5t-59.5 223.5h-8 q-29 -113 -58.5 -224.5t-60.5 -217.5zM524 1620q0 -47 25.5 -71.5t64.5 -24.5q37 0 64 24.5t27 71.5q0 45 -27 70.5t-64 25.5q-39 0 -64.5 -25.5t-25.5 -70.5z" />
<glyph unicode="&#xc6;" d="M-4 0l479 1339h721v-200h-340v-340h270v-201h-270v-397h358v-201h-571v348h-283l-118 -348h-246zM424 535h219v622h-6q-35 -104 -70 -206.5t-69 -200.5z" />
<glyph unicode="&#xc7;" d="M123 666q0 164 47 294t130 220t196.5 137t246.5 47q123 0 219.5 -51t161.5 -117l-133 -147q-49 49 -109.5 78.5t-138.5 29.5q-84 0 -153.5 -33.5t-118.5 -96t-76.5 -153t-27.5 -202.5q0 -115 27.5 -206t77.5 -153.5t121 -96.5t157 -34q82 0 146.5 35t121.5 98l131 -145 q-82 -94 -184.5 -144.5t-229.5 -50.5q-129 0 -240.5 45.5t-194.5 133.5t-130 217t-47 295zM512 -342q78 10 126 31.5t48 62.5q0 33 -29 55.5t-94 38.5l82 160h143l-47 -100q51 -18 86 -52t35 -98q0 -49 -26.5 -83.5t-72.5 -59.5t-106.5 -39t-126.5 -18z" />
<glyph unicode="&#xc8;" d="M213 0v1339h856v-200h-618v-342h524v-201h-524v-395h639v-201h-877zM366 1679h258l172 -237h-190z" />
<glyph unicode="&#xc9;" d="M213 0v1339h856v-200h-618v-342h524v-201h-524v-395h639v-201h-877zM538 1442l172 237h258l-239 -237h-191z" />
<glyph unicode="&#xca;" d="M213 0v1339h856v-200h-618v-342h524v-201h-524v-395h639v-201h-877zM356 1442l197 237h229l197 -237h-185l-123 131h-8l-123 -131h-184z" />
<glyph unicode="&#xcb;" d="M213 0v1339h856v-200h-618v-342h524v-201h-524v-395h639v-201h-877zM356 1571q0 53 34 88t87 35t88 -35t35 -88t-35 -87t-88 -34t-87 34t-34 87zM735 1571q0 53 35 88t88 35t87 -35t34 -88t-34 -87t-87 -34t-88 34t-35 87z" />
<glyph unicode="&#xcc;" d="M172 0v201h324v938h-324v200h885v-200h-324v-938h324v-201h-885zM313 1679h258l172 -237h-190z" />
<glyph unicode="&#xcd;" d="M172 0v201h324v938h-324v200h885v-200h-324v-938h324v-201h-885zM485 1442l172 237h258l-239 -237h-191z" />
<glyph unicode="&#xce;" d="M172 0v201h324v938h-324v200h885v-200h-324v-938h324v-201h-885zM303 1442l197 237h229l197 -237h-185l-123 131h-8l-123 -131h-184z" />
<glyph unicode="&#xcf;" d="M172 0v201h324v938h-324v200h885v-200h-324v-938h324v-201h-885zM303 1571q0 53 34 88t87 35t88 -35t35 -88t-35 -87t-88 -34t-87 34t-34 87zM682 1571q0 53 35 88t88 35t87 -35t34 -88t-34 -87t-87 -34t-88 34t-35 87z" />
<glyph unicode="&#xd0;" d="M18 637v111l148 10v581h346q295 0 463 -165.5t168 -497.5q0 -166 -43 -293t-123 -212t-194.5 -128t-258.5 -43h-358v637h-148zM403 193h95q193 0 297 117.5t104 365.5q0 246 -105.5 358.5t-295.5 112.5h-95v-389h256v-121h-256v-444z" />
<glyph unicode="&#xd1;" d="M152 0v1339h241l359 -753l125 -285h6q-8 104 -20.5 224t-12.5 233v581h227v-1339h-241l-359 756l-125 282h-6q8 -106 20.5 -223t12.5 -229v-586h-227zM303 1448q12 119 65.5 184.5t130.5 65.5q41 0 75 -15.5t63.5 -34t55.5 -34t52 -15.5q29 0 49.5 24t30.5 75h125 q-12 -117 -65.5 -183.5t-131.5 -66.5q-41 0 -74.5 15.5t-63.5 35t-55.5 34.5t-51.5 15q-29 0 -49.5 -24.5t-30.5 -75.5h-125z" />
<glyph unicode="&#xd2;" d="M88 676q0 162 39 290t107.5 216t166 135t213.5 47q117 0 214.5 -47t166 -135t107.5 -216t39 -290q0 -164 -39 -293t-107.5 -220t-166 -139.5t-214.5 -48.5t-214 48.5t-165.5 139.5t-107.5 220t-39 293zM313 1679h258l172 -237h-190zM332 676q0 -113 19.5 -204t56 -155.5 t88.5 -99.5t118 -35q63 0 115.5 35t89.5 99.5t57.5 155.5t20.5 204q0 225 -77 353t-206 128t-205.5 -128t-76.5 -353z" />
<glyph unicode="&#xd3;" d="M88 676q0 162 39 290t107.5 216t166 135t213.5 47q117 0 214.5 -47t166 -135t107.5 -216t39 -290q0 -164 -39 -293t-107.5 -220t-166 -139.5t-214.5 -48.5t-214 48.5t-165.5 139.5t-107.5 220t-39 293zM332 676q0 -113 19.5 -204t56 -155.5t88.5 -99.5t118 -35 q63 0 115.5 35t89.5 99.5t57.5 155.5t20.5 204q0 225 -77 353t-206 128t-205.5 -128t-76.5 -353zM485 1442l172 237h258l-239 -237h-191z" />
<glyph unicode="&#xd4;" d="M88 676q0 162 39 290t107.5 216t166 135t213.5 47q117 0 214.5 -47t166 -135t107.5 -216t39 -290q0 -164 -39 -293t-107.5 -220t-166 -139.5t-214.5 -48.5t-214 48.5t-165.5 139.5t-107.5 220t-39 293zM303 1442l197 237h229l197 -237h-185l-123 131h-8l-123 -131h-184z M332 676q0 -113 19.5 -204t56 -155.5t88.5 -99.5t118 -35q63 0 115.5 35t89.5 99.5t57.5 155.5t20.5 204q0 225 -77 353t-206 128t-205.5 -128t-76.5 -353z" />
<glyph unicode="&#xd5;" d="M88 676q0 162 39 290t107.5 216t166 135t213.5 47q117 0 214.5 -47t166 -135t107.5 -216t39 -290q0 -164 -39 -293t-107.5 -220t-166 -139.5t-214.5 -48.5t-214 48.5t-165.5 139.5t-107.5 220t-39 293zM291 1448q12 119 65.5 184.5t130.5 65.5q41 0 75 -15.5t63.5 -34 t55.5 -34t52 -15.5q29 0 49.5 24t30.5 75h125q-12 -117 -65.5 -183.5t-131.5 -66.5q-41 0 -74.5 15.5t-63.5 35t-55.5 34.5t-51.5 15q-29 0 -49.5 -24.5t-30.5 -75.5h-125zM332 676q0 -113 19.5 -204t56 -155.5t88.5 -99.5t118 -35q63 0 115.5 35t89.5 99.5t57.5 155.5 t20.5 204q0 225 -77 353t-206 128t-205.5 -128t-76.5 -353z" />
<glyph unicode="&#xd6;" d="M88 676q0 162 39 290t107.5 216t166 135t213.5 47q117 0 214.5 -47t166 -135t107.5 -216t39 -290q0 -164 -39 -293t-107.5 -220t-166 -139.5t-214.5 -48.5t-214 48.5t-165.5 139.5t-107.5 220t-39 293zM303 1571q0 53 34 88t87 35t88 -35t35 -88t-35 -87t-88 -34t-87 34 t-34 87zM332 676q0 -113 19.5 -204t56 -155.5t88.5 -99.5t118 -35q63 0 115.5 35t89.5 99.5t57.5 155.5t20.5 204q0 225 -77 353t-206 128t-205.5 -128t-76.5 -353zM682 1571q0 53 35 88t88 35t87 -35t34 -88t-34 -87t-87 -34t-88 34t-35 87z" />
<glyph unicode="&#xd7;" d="M190 367l304 307l-304 309l121 123l303 -311l304 311l120 -123l-303 -309l303 -307l-120 -123l-304 309l-303 -309z" />
<glyph unicode="&#xd8;" d="M78 12l129 191q-57 88 -88 206.5t-31 266.5q0 162 39 290t107.5 216t166 135t213.5 47q182 0 312 -111l108 160l129 -86l-133 -194q53 -86 82 -201t29 -256q0 -164 -39 -293t-107.5 -220t-166 -139.5t-214.5 -48.5q-174 0 -303 107l-106 -156zM332 676q0 -141 30 -248 l435 637q-74 92 -183 92q-129 0 -205.5 -128t-76.5 -353zM440 270q70 -88 174 -88q63 0 115.5 35t89.5 99.5t57.5 155.5t20.5 204q0 127 -25 225z" />
<glyph unicode="&#xd9;" d="M147 512v827h238v-845q0 -166 61.5 -239t169.5 -73q111 0 174.5 73t63.5 239v845h227v-827q0 -276 -120.5 -406.5t-344.5 -130.5q-219 0 -344 131.5t-125 405.5zM313 1679h258l172 -237h-190z" />
<glyph unicode="&#xda;" d="M147 512v827h238v-845q0 -166 61.5 -239t169.5 -73q111 0 174.5 73t63.5 239v845h227v-827q0 -276 -120.5 -406.5t-344.5 -130.5q-219 0 -344 131.5t-125 405.5zM485 1442l172 237h258l-239 -237h-191z" />
<glyph unicode="&#xdb;" d="M147 512v827h238v-845q0 -166 61.5 -239t169.5 -73q111 0 174.5 73t63.5 239v845h227v-827q0 -276 -120.5 -406.5t-344.5 -130.5q-219 0 -344 131.5t-125 405.5zM303 1442l197 237h229l197 -237h-185l-123 131h-8l-123 -131h-184z" />
<glyph unicode="&#xdc;" d="M147 512v827h238v-845q0 -166 61.5 -239t169.5 -73q111 0 174.5 73t63.5 239v845h227v-827q0 -276 -120.5 -406.5t-344.5 -130.5q-219 0 -344 131.5t-125 405.5zM303 1571q0 53 34 88t87 35t88 -35t35 -88t-35 -87t-88 -34t-87 34t-34 87zM682 1571q0 53 35 88t88 35 t87 -35t34 -88t-34 -87t-87 -34t-88 34t-35 87z" />
<glyph unicode="&#xdd;" d="M55 1339h252l168 -360q35 -78 69 -152.5t68 -156.5h9q37 82 71.5 157.5t69.5 153.5l166 358h246l-441 -874v-465h-237v465zM485 1442l172 237h258l-239 -237h-191z" />
<glyph unicode="&#xde;" d="M178 0v1339h238v-213h213q111 0 204 -21.5t160.5 -69.5t106.5 -127t39 -195q0 -113 -39 -195t-107.5 -135t-162 -78.5t-201.5 -25.5h-213v-279h-238zM416 469h192q152 0 223.5 60.5t71.5 183.5q0 125 -73.5 174t-221.5 49h-192v-467z" />
<glyph unicode="&#xdf;" d="M152 0v1038q0 94 28.5 174t83.5 137.5t137 89t189 31.5q90 0 158.5 -26.5t113.5 -71.5t67.5 -103.5t22.5 -121.5q0 -76 -23.5 -128t-53 -94t-53 -81t-23.5 -84q0 -41 26.5 -71t67.5 -55.5t88 -52t88 -64.5t67.5 -91t26.5 -131q0 -68 -23.5 -126t-68.5 -101t-108.5 -68 t-145.5 -25q-86 0 -154.5 21.5t-134.5 62.5l84 162q51 -35 99.5 -51t97.5 -16q63 0 98 35.5t35 86.5q0 49 -26.5 82t-67.5 60.5t-88 54.5t-88 60.5t-67.5 81t-26.5 116.5q0 66 23.5 113t53 91t53 90t23.5 108q0 66 -38 108.5t-105 42.5q-98 0 -149.5 -69.5t-51.5 -198.5 v-1016h-235z" />
<glyph unicode="&#xe0;" d="M145 270q0 84 39 148.5t123 109.5t215 74t318 41q-6 86 -61.5 141.5t-178.5 55.5q-86 0 -169 -32t-161 -75l-86 158q92 53 211 96t248 43q211 0 321.5 -111.5t110.5 -322.5v-596h-192l-19 125h-6q-80 -61 -177 -105.5t-200 -44.5q-74 0 -135 21.5t-106 60.5t-70 93 t-25 120zM359 1497h246l184 -323h-176zM373 289q0 -68 52 -98.5t128 -30.5t146.5 33.5t140.5 89.5v213q-135 -10 -225.5 -27.5t-143.5 -44.5t-75.5 -60.5t-22.5 -74.5z" />
<glyph unicode="&#xe1;" d="M145 270q0 84 39 148.5t123 109.5t215 74t318 41q-6 86 -61.5 141.5t-178.5 55.5q-86 0 -169 -32t-161 -75l-86 158q92 53 211 96t248 43q211 0 321.5 -111.5t110.5 -322.5v-596h-192l-19 125h-6q-80 -61 -177 -105.5t-200 -44.5q-74 0 -135 21.5t-106 60.5t-70 93 t-25 120zM373 289q0 -68 52 -98.5t128 -30.5t146.5 33.5t140.5 89.5v213q-135 -10 -225.5 -27.5t-143.5 -44.5t-75.5 -60.5t-22.5 -74.5zM486 1174l184 323h246l-254 -323h-176z" />
<glyph unicode="&#xe2;" d="M145 270q0 84 39 148.5t123 109.5t215 74t318 41q-6 86 -61.5 141.5t-178.5 55.5q-86 0 -169 -32t-161 -75l-86 158q92 53 211 96t248 43q211 0 321.5 -111.5t110.5 -322.5v-596h-192l-19 125h-6q-80 -61 -177 -105.5t-200 -44.5q-74 0 -135 21.5t-106 60.5t-70 93 t-25 120zM334 1174l203 323h201l203 -323h-177l-123 198h-8l-123 -198h-176zM373 289q0 -68 52 -98.5t128 -30.5t146.5 33.5t140.5 89.5v213q-135 -10 -225.5 -27.5t-143.5 -44.5t-75.5 -60.5t-22.5 -74.5z" />
<glyph unicode="&#xe3;" d="M145 270q0 84 39 148.5t123 109.5t215 74t318 41q-6 86 -61.5 141.5t-178.5 55.5q-86 0 -169 -32t-161 -75l-86 158q92 53 211 96t248 43q211 0 321.5 -111.5t110.5 -322.5v-596h-192l-19 125h-6q-80 -61 -177 -105.5t-200 -44.5q-74 0 -135 21.5t-106 60.5t-70 93 t-25 120zM318 1182q14 123 67.5 191.5t141.5 68.5q37 0 67.5 -17.5t57 -38t50 -38t46.5 -17.5q33 0 53.5 25.5t30.5 85.5h125q-14 -123 -67.5 -191.5t-141.5 -68.5q-37 0 -67.5 17.5t-57.5 37.5t-49.5 37.5t-46.5 17.5q-33 0 -53.5 -25.5t-30.5 -84.5h-125zM373 289 q0 -68 52 -98.5t128 -30.5t146.5 33.5t140.5 89.5v213q-135 -10 -225.5 -27.5t-143.5 -44.5t-75.5 -60.5t-22.5 -74.5z" />
<glyph unicode="&#xe4;" d="M145 270q0 84 39 148.5t123 109.5t215 74t318 41q-6 86 -61.5 141.5t-178.5 55.5q-86 0 -169 -32t-161 -75l-86 158q92 53 211 96t248 43q211 0 321.5 -111.5t110.5 -322.5v-596h-192l-19 125h-6q-80 -61 -177 -105.5t-200 -44.5q-74 0 -135 21.5t-106 60.5t-70 93 t-25 120zM291 1323q0 59 38 99t97 40t98.5 -40t39.5 -99t-39.5 -98t-98.5 -39t-97 39t-38 98zM373 289q0 -68 52 -98.5t128 -30.5t146.5 33.5t140.5 89.5v213q-135 -10 -225.5 -27.5t-143.5 -44.5t-75.5 -60.5t-22.5 -74.5zM711 1323q0 59 39 99t98 40t97.5 -40t38.5 -99 t-38.5 -98t-97.5 -39t-98 39t-39 98z" />
<glyph unicode="&#xe5;" d="M145 270q0 84 39 148.5t123 109.5t215 74t318 41q-6 86 -61.5 141.5t-178.5 55.5q-86 0 -169 -32t-161 -75l-86 158q92 53 211 96t248 43q211 0 321.5 -111.5t110.5 -322.5v-596h-192l-19 125h-6q-80 -61 -177 -105.5t-200 -44.5q-74 0 -135 21.5t-106 60.5t-70 93 t-25 120zM373 289q0 -68 52 -98.5t128 -30.5t146.5 33.5t140.5 89.5v213q-135 -10 -225.5 -27.5t-143.5 -44.5t-75.5 -60.5t-22.5 -74.5zM426 1315q0 92 58.5 146.5t152.5 54.5t152.5 -54.5t58.5 -146.5q0 -90 -58.5 -144.5t-152.5 -54.5t-152.5 54.5t-58.5 144.5zM547 1315 q0 -47 25.5 -76t64.5 -29t65 29t26 76t-26 76.5t-65 29.5t-64.5 -29.5t-25.5 -76.5z" />
<glyph unicode="&#xe6;" d="M33 274q0 154 120.5 241t364.5 128q-4 92 -36.5 145.5t-110.5 53.5q-47 0 -108.5 -22.5t-112.5 -55.5l-87 158q74 45 156 76.5t172 31.5q94 0 152.5 -48t89.5 -126q51 86 116.5 130t159.5 44q76 0 134.5 -38t97.5 -102.5t58.5 -150.5t19.5 -182q0 -35 -3.5 -65.5 t-7.5 -53.5h-497q12 -129 66 -202.5t153 -73.5q49 0 92 15.5t84 43.5l82 -153q-55 -41 -126 -67t-140 -26q-111 0 -184.5 46.5t-123.5 125.5q-84 -86 -157.5 -129t-149.5 -43q-129 0 -201.5 83t-72.5 216zM248 291q0 -66 32.5 -98.5t88.5 -32.5q41 0 90 27.5t90 78.5 q-14 41 -21.5 88t-9.5 95l-2 47q-143 -27 -205.5 -78t-62.5 -127zM709 588h319q0 53 -7 100t-23.5 83t-43 56.5t-67.5 20.5q-72 0 -120 -65.5t-58 -194.5z" />
<glyph unicode="&#xe7;" d="M150 502q0 125 46 223t123.5 165.5t182 103.5t219.5 36q123 0 216 -41t157 -100l-113 -148q-59 47 -119.5 72t-128.5 25q-152 0 -246 -91.5t-94 -244.5q0 -76 24.5 -137.5t68.5 -105.5t105.5 -67.5t135.5 -23.5q86 0 156.5 32.5t130.5 78.5l98 -152q-86 -76 -192.5 -114 t-214.5 -38q-119 0 -220.5 35t-176.5 102.5t-116.5 166t-41.5 223.5zM506 -342q78 10 127 31.5t49 62.5q0 33 -29.5 55.5t-95.5 38.5l82 160h143l-47 -100q51 -18 86 -52t35 -98q0 -49 -26.5 -83.5t-72.5 -59.5t-105.5 -39t-125.5 -18z" />
<glyph unicode="&#xe8;" d="M127 502q0 123 44 221t115.5 166.5t165 104.5t191.5 36q113 0 200 -36t146.5 -98t90 -150.5t30.5 -192.5q0 -35 -3 -65.5t-7 -49.5h-731q12 -135 106 -207.5t232 -72.5q78 0 145.5 21.5t136.5 60.5l80 -148q-82 -51 -182.5 -84t-210.5 -33q-115 0 -215.5 36t-174 103.5 t-116.5 165t-43 222.5zM365 1497h246l184 -323h-176zM367 598h526q0 117 -61.5 183.5t-182.5 66.5q-102 0 -182 -63.5t-100 -186.5z" />
<glyph unicode="&#xe9;" d="M127 502q0 123 44 221t115.5 166.5t165 104.5t191.5 36q113 0 200 -36t146.5 -98t90 -150.5t30.5 -192.5q0 -35 -3 -65.5t-7 -49.5h-731q12 -135 106 -207.5t232 -72.5q78 0 145.5 21.5t136.5 60.5l80 -148q-82 -51 -182.5 -84t-210.5 -33q-115 0 -215.5 36t-174 103.5 t-116.5 165t-43 222.5zM367 598h526q0 117 -61.5 183.5t-182.5 66.5q-102 0 -182 -63.5t-100 -186.5zM492 1174l184 323h246l-254 -323h-176z" />
<glyph unicode="&#xea;" d="M127 502q0 123 44 221t115.5 166.5t165 104.5t191.5 36q113 0 200 -36t146.5 -98t90 -150.5t30.5 -192.5q0 -35 -3 -65.5t-7 -49.5h-731q12 -135 106 -207.5t232 -72.5q78 0 145.5 21.5t136.5 60.5l80 -148q-82 -51 -182.5 -84t-210.5 -33q-115 0 -215.5 36t-174 103.5 t-116.5 165t-43 222.5zM340 1174l203 323h201l203 -323h-177l-123 198h-8l-123 -198h-176zM367 598h526q0 117 -61.5 183.5t-182.5 66.5q-102 0 -182 -63.5t-100 -186.5z" />
<glyph unicode="&#xeb;" d="M127 502q0 123 44 221t115.5 166.5t165 104.5t191.5 36q113 0 200 -36t146.5 -98t90 -150.5t30.5 -192.5q0 -35 -3 -65.5t-7 -49.5h-731q12 -135 106 -207.5t232 -72.5q78 0 145.5 21.5t136.5 60.5l80 -148q-82 -51 -182.5 -84t-210.5 -33q-115 0 -215.5 36t-174 103.5 t-116.5 165t-43 222.5zM295 1323q0 59 38 99t97 40t98.5 -40t39.5 -99t-39.5 -98t-98.5 -39t-97 39t-38 98zM367 598h526q0 117 -61.5 183.5t-182.5 66.5q-102 0 -182 -63.5t-100 -186.5zM715 1323q0 59 39 99t98 40t97.5 -40t38.5 -99t-38.5 -98t-97.5 -39t-98 39t-39 98z " />
<glyph unicode="&#xec;" d="M172 819v187h672v-1006h-236v819h-436zM430 1497h246l184 -323h-176z" />
<glyph unicode="&#xed;" d="M172 819v187h672v-1006h-236v819h-436zM557 1174l184 323h246l-254 -323h-176z" />
<glyph unicode="&#xee;" d="M172 819v187h672v-1006h-236v819h-436zM405 1174l203 323h201l203 -323h-177l-123 198h-8l-123 -198h-176z" />
<glyph unicode="&#xef;" d="M172 819v187h672v-1006h-236v819h-436zM362 1323q0 59 38 99t97 40t98.5 -40t39.5 -99t-39.5 -98t-98.5 -39t-97 39t-38 98zM782 1323q0 59 39 99t98 40t97.5 -40t38.5 -99t-38.5 -98t-97.5 -39t-98 39t-39 98z" />
<glyph unicode="&#xf0;" d="M109 461q0 106 35.5 192t99 146.5t146.5 92.5t179 32q84 0 161 -34t130 -104q-29 117 -84 206t-137 161l-307 -156l-66 109l260 133q-49 33 -103 62.5t-116 58.5l105 145q80 -37 155.5 -79t143.5 -93l278 142l64 -111l-234 -119q66 -61 120 -135t92 -162t59.5 -190.5 t21.5 -220.5q0 -123 -35 -226.5t-100.5 -178.5t-158.5 -116t-212 -41q-100 0 -190 34t-159 96.5t-108.5 152.5t-39.5 203zM328 461q0 -68 22.5 -122t61.5 -92t91 -58.5t111 -20.5q135 0 205 95t70 261v42.5t-2 39.5q-63 78 -133 108.5t-142 30.5q-137 0 -210.5 -75.5 t-73.5 -208.5z" />
<glyph unicode="&#xf1;" d="M168 0v1006h194l19 -152h8q72 72 159 124t204 52q174 0 256 -105.5t82 -301.5v-623h-238v592q0 123 -42 179t-146 56q-74 0 -131.5 -34.5t-126.5 -106.5v-686h-238zM328 1182q14 123 67.5 191.5t141.5 68.5q37 0 67.5 -17.5t57 -38t50 -38t46.5 -17.5q33 0 53.5 25.5 t30.5 85.5h125q-14 -123 -67.5 -191.5t-141.5 -68.5q-37 0 -67.5 17.5t-57.5 37.5t-49.5 37.5t-46.5 17.5q-33 0 -53.5 -25.5t-30.5 -84.5h-125z" />
<glyph unicode="&#xf2;" d="M109 502q0 125 42 223t111.5 165.5t161.5 103.5t190 36t190.5 -36t162 -103.5t111.5 -165.5t42 -223t-42 -223.5t-111.5 -166t-161.5 -102.5t-191 -35q-98 0 -190 35t-161.5 102.5t-111.5 166t-42 223.5zM336 1497h246l184 -323h-176zM352 502q0 -152 70 -243t192 -91 q123 0 193 91t70 243q0 154 -70 245t-193 91t-192.5 -91t-69.5 -245z" />
<glyph unicode="&#xf3;" d="M109 502q0 125 42 223t111.5 165.5t161.5 103.5t190 36t190.5 -36t162 -103.5t111.5 -165.5t42 -223t-42 -223.5t-111.5 -166t-161.5 -102.5t-191 -35q-98 0 -190 35t-161.5 102.5t-111.5 166t-42 223.5zM352 502q0 -152 70 -243t192 -91q123 0 193 91t70 243 q0 154 -70 245t-193 91t-192.5 -91t-69.5 -245zM463 1174l184 323h246l-254 -323h-176z" />
<glyph unicode="&#xf4;" d="M109 502q0 125 42 223t111.5 165.5t161.5 103.5t190 36t190.5 -36t162 -103.5t111.5 -165.5t42 -223t-42 -223.5t-111.5 -166t-161.5 -102.5t-191 -35q-98 0 -190 35t-161.5 102.5t-111.5 166t-42 223.5zM311 1174l203 323h201l203 -323h-177l-123 198h-8l-123 -198h-176 zM352 502q0 -152 70 -243t192 -91q123 0 193 91t70 243q0 154 -70 245t-193 91t-192.5 -91t-69.5 -245z" />
<glyph unicode="&#xf5;" d="M109 502q0 125 42 223t111.5 165.5t161.5 103.5t190 36t190.5 -36t162 -103.5t111.5 -165.5t42 -223t-42 -223.5t-111.5 -166t-161.5 -102.5t-191 -35q-98 0 -190 35t-161.5 102.5t-111.5 166t-42 223.5zM295 1182q14 123 67.5 191.5t141.5 68.5q37 0 67.5 -17.5t57 -38 t50 -38t46.5 -17.5q33 0 53.5 25.5t30.5 85.5h125q-14 -123 -67.5 -191.5t-141.5 -68.5q-37 0 -67.5 17.5t-57.5 37.5t-49.5 37.5t-46.5 17.5q-33 0 -53.5 -25.5t-30.5 -84.5h-125zM352 502q0 -152 70 -243t192 -91q123 0 193 91t70 243q0 154 -70 245t-193 91t-192.5 -91 t-69.5 -245z" />
<glyph unicode="&#xf6;" d="M109 502q0 125 42 223t111.5 165.5t161.5 103.5t190 36t190.5 -36t162 -103.5t111.5 -165.5t42 -223t-42 -223.5t-111.5 -166t-161.5 -102.5t-191 -35q-98 0 -190 35t-161.5 102.5t-111.5 166t-42 223.5zM268 1323q0 59 38 99t97 40t98.5 -40t39.5 -99t-39.5 -98 t-98.5 -39t-97 39t-38 98zM352 502q0 -152 70 -243t192 -91q123 0 193 91t70 243q0 154 -70 245t-193 91t-192.5 -91t-69.5 -245zM688 1323q0 59 39 99t98 40t97.5 -40t38.5 -99t-38.5 -98t-97.5 -39t-98 39t-39 98z" />
<glyph unicode="&#xf7;" d="M160 590v172h909v-172h-909zM475 307q0 59 40 96t99 37t99.5 -36.5t40.5 -96.5q0 -59 -40 -97t-100 -38q-59 0 -99 38t-40 97zM475 1044q0 59 40 96.5t99 37.5t99.5 -37t40.5 -97q0 -59 -40.5 -97t-99.5 -38t-99 38t-40 97z" />
<glyph unicode="&#xf8;" d="M109 502q0 125 42 223t111.5 165.5t161.5 103.5t190 36q162 0 291 -88l99 115l94 -74l-103 -121q57 -66 91 -157t34 -203q0 -125 -42 -223.5t-111.5 -166t-161.5 -102.5t-191 -35q-80 0 -154.5 22.5t-137.5 68.5l-97 -115l-94 74l102 120q-59 66 -91.5 156t-32.5 201z M352 502q0 -102 31 -178l391 462q-31 29 -71.5 44.5t-88.5 15.5q-61 0 -110 -25.5t-83 -70.5t-51.5 -108.5t-17.5 -139.5zM453 221q68 -61 161 -61q61 0 109.5 25.5t82.5 70.5t52.5 107.5t18.5 138.5q0 104 -33 182z" />
<glyph unicode="&#xf9;" d="M143 383v623h236v-592q0 -123 42 -179.5t146 -56.5q72 0 128.5 33t123.5 117v678h236v-1006h-193l-18 160h-8q-72 -84 -158 -134.5t-199 -50.5q-176 0 -256 105.5t-80 302.5zM328 1497h246l184 -323h-176z" />
<glyph unicode="&#xfa;" d="M143 383v623h236v-592q0 -123 42 -179.5t146 -56.5q72 0 128.5 33t123.5 117v678h236v-1006h-193l-18 160h-8q-72 -84 -158 -134.5t-199 -50.5q-176 0 -256 105.5t-80 302.5zM455 1174l184 323h246l-254 -323h-176z" />
<glyph unicode="&#xfb;" d="M143 383v623h236v-592q0 -123 42 -179.5t146 -56.5q72 0 128.5 33t123.5 117v678h236v-1006h-193l-18 160h-8q-72 -84 -158 -134.5t-199 -50.5q-176 0 -256 105.5t-80 302.5zM303 1174l203 323h201l203 -323h-177l-123 198h-8l-123 -198h-176z" />
<glyph unicode="&#xfc;" d="M143 383v623h236v-592q0 -123 42 -179.5t146 -56.5q72 0 128.5 33t123.5 117v678h236v-1006h-193l-18 160h-8q-72 -84 -158 -134.5t-199 -50.5q-176 0 -256 105.5t-80 302.5zM260 1323q0 59 38 99t97 40t98.5 -40t39.5 -99t-39.5 -98t-98.5 -39t-97 39t-38 98zM680 1323 q0 59 39 99t98 40t97.5 -40t38.5 -99t-38.5 -98t-97.5 -39t-98 39t-39 98z" />
<glyph unicode="&#xfd;" d="M82 1006h235l207 -494q29 -68 55.5 -143.5t55.5 -151.5h8q23 72 49.5 147.5t50.5 147.5l183 494h223l-420 -1051q-33 -86 -73 -153.5t-93 -115.5t-122.5 -74t-159.5 -26q-41 0 -78 5.5t-66 15.5l45 184q20 -6 41 -10t43 -4q96 0 153.5 48t88.5 124l24 63zM475 1174 l184 323h246l-254 -323h-176z" />
<glyph unicode="&#xfe;" d="M168 -397v1843h238v-383l-9 -166q68 61 148 97t164 36q96 0 172.5 -36t130 -103.5t81 -161.5t27.5 -211q0 -129 -38 -230.5t-100 -170t-142 -105.5t-166 -37q-74 0 -144.5 33t-130.5 86l7 -176v-315h-238zM406 262q55 -51 113.5 -71.5t105.5 -20.5q104 0 178 87t74 259 q0 152 -55.5 236t-178.5 84q-57 0 -116.5 -29t-120.5 -92v-453z" />
<glyph unicode="&#xff;" d="M82 1006h235l207 -494q29 -68 55.5 -143.5t55.5 -151.5h8q23 72 49.5 147.5t50.5 147.5l183 494h223l-420 -1051q-33 -86 -73 -153.5t-93 -115.5t-122.5 -74t-159.5 -26q-41 0 -78 5.5t-66 15.5l45 184q20 -6 41 -10t43 -4q96 0 153.5 48t88.5 124l24 63zM280 1323 q0 59 38 99t97 40t98.5 -40t39.5 -99t-39.5 -98t-98.5 -39t-97 39t-38 98zM700 1323q0 59 39 99t98 40t97.5 -40t38.5 -99t-38.5 -98t-97.5 -39t-98 39t-39 98z" />
<glyph unicode="&#x152;" d="M53 676q0 166 40 290t113 206.5t175 124.5t227 42h586v-198h-363v-344h275v-201h-275v-395h383v-201h-616q-123 0 -223.5 43t-172 128t-110.5 212t-39 293zM297 676q0 -250 72.5 -366.5t212.5 -116.5h36v954h-36q-139 0 -212 -110.5t-73 -360.5z" />
<glyph unicode="&#x153;" d="M23 504q0 125 28.5 223t79.5 166t118.5 102.5t145.5 34.5q92 0 157.5 -54t104.5 -153q41 98 106.5 152.5t151.5 54.5q74 0 130.5 -38t94.5 -102.5t57.5 -150.5t19.5 -182q0 -35 -2.5 -60.5t-6.5 -58.5h-475q12 -129 65.5 -202.5t145.5 -73.5q47 0 84 15.5t78 43.5 l82 -153q-53 -41 -120 -67t-134 -26q-88 0 -160 49.5t-115 143.5q-45 -94 -109.5 -143.5t-158.5 -49.5q-78 0 -145.5 35t-116.5 102.5t-77.5 166t-28.5 225.5zM238 504q0 -154 42 -246t126 -92q74 0 115.5 92t41.5 246q0 152 -42 244t-115 92q-84 0 -126 -92t-42 -244z M731 588h297q0 51 -6 99t-21.5 83t-41 56.5t-62.5 21.5q-72 0 -114 -67.5t-52 -192.5z" />
<glyph unicode="&#x178;" d="M55 1339h252l168 -360q35 -78 69 -152.5t68 -156.5h9q37 82 71.5 157.5t69.5 153.5l166 358h246l-441 -874v-465h-237v465zM303 1571q0 53 34 88t87 35t88 -35t35 -88t-35 -87t-88 -34t-87 34t-34 87zM682 1571q0 53 35 88t88 35t87 -35t34 -88t-34 -87t-87 -34t-88 34 t-35 87z" />
<glyph unicode="&#x2c6;" d="M311 1174l203 323h201l203 -323h-177l-123 198h-8l-123 -198h-176z" />
<glyph unicode="&#x2dc;" d="M295 1182q14 123 67.5 191.5t141.5 68.5q37 0 67.5 -17.5t57 -38t50 -38t46.5 -17.5q33 0 53.5 25.5t30.5 85.5h125q-14 -123 -67.5 -191.5t-141.5 -68.5q-37 0 -67.5 17.5t-57.5 37.5t-49.5 37.5t-46.5 17.5q-33 0 -53.5 -25.5t-30.5 -84.5h-125z" />
<glyph unicode="&#x2000;" horiz-adv-x="905" />
<glyph unicode="&#x2001;" horiz-adv-x="1810" />
<glyph unicode="&#x2002;" horiz-adv-x="905" />
<glyph unicode="&#x2003;" horiz-adv-x="1810" />
<glyph unicode="&#x2004;" horiz-adv-x="603" />
<glyph unicode="&#x2005;" horiz-adv-x="452" />
<glyph unicode="&#x2006;" horiz-adv-x="301" />
<glyph unicode="&#x2007;" horiz-adv-x="301" />
<glyph unicode="&#x2008;" horiz-adv-x="226" />
<glyph unicode="&#x2009;" horiz-adv-x="362" />
<glyph unicode="&#x200a;" horiz-adv-x="100" />
<glyph unicode="&#x2010;" d="M160 590v172h909v-172h-909z" />
<glyph unicode="&#x2011;" d="M160 590v172h909v-172h-909z" />
<glyph unicode="&#x2012;" d="M160 590v172h909v-172h-909z" />
<glyph unicode="&#x2013;" d="M164 424v188h901v-188h-901z" />
<glyph unicode="&#x2014;" d="M41 424v188h1147v-188h-1147z" />
<glyph unicode="&#x2018;" d="M401 942q0 160 84 285t244 203l68 -130q-100 -53 -156.5 -127.5t-62.5 -177.5q18 8 45 9q74 0 119.5 -46.5t45.5 -119.5q0 -84 -48 -134.5t-126 -50.5q-98 0 -155.5 77t-57.5 212z" />
<glyph unicode="&#x2019;" d="M430 782q100 53 156.5 128t64.5 177q-23 -8 -49 -8q-72 0 -119 46t-47 120q0 84 49.5 134.5t124.5 50.5q98 0 155.5 -77t57.5 -212q0 -160 -83 -285t-242 -203z" />
<glyph unicode="&#x201a;" d="M430 -338q100 53 156.5 128t64.5 177q-23 -8 -49 -8q-72 0 -119 46t-47 120q0 84 49.5 134.5t124.5 50.5q98 0 155.5 -77t57.5 -212q0 -160 -83 -285t-242 -203z" />
<glyph unicode="&#x201c;" d="M149 942q0 160 84 285t244 203l68 -130q-100 -53 -156.5 -127.5t-62.5 -177.5q18 8 45 9q74 0 119.5 -46.5t45.5 -119.5q0 -84 -48 -134.5t-126 -50.5q-98 0 -155.5 77t-57.5 212zM655 942q0 160 84 285t244 203l68 -130q-100 -53 -156.5 -127.5t-62.5 -177.5q18 8 45 9 q74 0 119.5 -46.5t45.5 -119.5q0 -84 -48 -134.5t-126 -50.5q-98 0 -155.5 77t-57.5 212z" />
<glyph unicode="&#x201d;" d="M178 782q100 53 156.5 128t64.5 177q-23 -8 -49 -8q-72 0 -119 46t-47 120q0 84 49.5 134.5t124.5 50.5q98 0 155.5 -77t57.5 -212q0 -160 -83 -285t-242 -203zM684 782q100 53 156.5 128t64.5 177q-23 -8 -49 -8q-72 0 -119 46t-47 120q0 84 49.5 134.5t124.5 50.5 q98 0 155.5 -77t57.5 -212q0 -160 -83 -285t-242 -203z" />
<glyph unicode="&#x201e;" d="M178 -338q100 53 156.5 128t64.5 177q-23 -8 -49 -8q-72 0 -119 46t-47 120q0 84 49.5 134.5t124.5 50.5q98 0 155.5 -77t57.5 -212q0 -160 -83 -285t-242 -203zM684 -338q100 53 156.5 128t64.5 177q-23 -8 -49 -8q-72 0 -119 46t-47 120q0 84 49.5 134.5t124.5 50.5 q98 0 155.5 -77t57.5 -212q0 -160 -83 -285t-242 -203z" />
<glyph unicode="&#x2022;" d="M295 537q0 70 25.5 127t68.5 99t101.5 65.5t123.5 23.5q66 0 124.5 -23.5t101.5 -65.5t68.5 -99.5t25.5 -126.5q0 -70 -25.5 -127.5t-68.5 -99.5t-101.5 -65.5t-124.5 -23.5t-124 23.5t-101 65.5t-68.5 99.5t-25.5 127.5z" />
<glyph unicode="&#x2026;" d="M31 152q0 76 47 126t119 50t118.5 -50.5t46.5 -125.5q0 -78 -47 -127.5t-118 -49.5q-72 0 -119 49.5t-47 127.5zM449 152q0 76 47 126t118 50q72 0 119 -50.5t47 -125.5q0 -78 -47 -127.5t-119 -49.5t-118.5 49.5t-46.5 127.5zM866 152q0 76 47.5 126t118.5 50 q72 0 119 -50.5t47 -125.5q0 -78 -47 -127.5t-119 -49.5t-119 49.5t-47 127.5z" />
<glyph unicode="&#x202f;" horiz-adv-x="362" />
<glyph unicode="&#x2039;" d="M381 399v234l332 321l104 -94l-260 -344l260 -346l-104 -92z" />
<glyph unicode="&#x203a;" d="M412 170l260 346l-260 344l104 94l332 -321v-234l-332 -321z" />
<glyph unicode="&#x205f;" horiz-adv-x="452" />
<glyph unicode="&#x20ac;" d="M104 461v114l117 9q-2 16 -2 31.5v31.5v30.5t2 29.5h-117v114l132 8q20 119 70 211.5t123 156t167 97t203 33.5q104 0 198.5 -43t161.5 -117l-133 -129q-51 47 -107.5 76t-127.5 29q-129 0 -208 -82t-108 -230h559v-124h-573q-2 -12 -2 -24.5v-27.5v-35.5t2 -33.5h491 v-125h-475q33 -143 111 -222t198 -79q80 0 141.5 32.5t116.5 96.5l134 -123q-82 -92 -180.5 -141.5t-223.5 -49.5q-102 0 -191 32t-159 93.5t-119 152.5t-69 208h-132z" />
<glyph unicode="&#x2122;" d="M-18 1239v145h518v-145h-181v-494h-159v494h-178zM580 745v639h178l82 -213l49 -155h8l47 155l80 213h178v-639h-141v238l16 225h-8l-127 -342h-102l-127 342h-8l18 -225v-238h-143z" />
<glyph unicode="&#x25fc;" horiz-adv-x="1003" d="M0 0v1004h1004v-1004h-1004z" />
<glyph unicode="&#xfb01;" d="M59 819v176l136 11v104q0 78 18 144.5t59 114.5t103.5 74.5t152.5 26.5q55 0 102.5 -10t82.5 -24l-45 -176q-55 25 -109 24q-129 0 -129 -170v-108h197v-187h-197v-819h-235v819h-136zM782 1341q0 72 50 117t124 45q76 0 125 -45t49 -117t-49 -115.5t-125 -43.5 q-74 0 -124 44t-50 115zM840 0v1006h237v-1006h-237z" />
<glyph unicode="&#xfb02;" d="M70 819v176l135 11v104q0 78 18.5 144.5t58.5 114.5t102 74.5t153 26.5q55 0 102 -10t82 -24l-45 -176q-53 25 -109 24q-127 0 -127 -170v-108h197v-187h-197v-819h-235v819h-135zM813 258v1188h236v-1200q0 -43 16 -60.5t35 -17.5h15t22 4l28 -176q-23 -10 -52.5 -15.5 t-72.5 -5.5q-125 0 -176 76t-51 207z" />
</font>
</defs></svg>

Before

Width:  |  Height:  |  Size: 58 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 103 KiB

View File

@ -1,840 +0,0 @@
<?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">
<metadata></metadata>
<defs>
<font id="source_sans_probold_italic" horiz-adv-x="1042" >
<font-face units-per-em="2048" ascent="1536" descent="-512" />
<missing-glyph horiz-adv-x="405" />
<glyph horiz-adv-x="0" />
<glyph horiz-adv-x="682" />
<glyph unicode=" " horiz-adv-x="405" />
<glyph unicode="&#x09;" horiz-adv-x="405" />
<glyph unicode="&#xa0;" horiz-adv-x="405" />
<glyph unicode="!" horiz-adv-x="677" d="M92 127q0 79 57.5 143t143.5 64q65 0 105 -43.5t40 -110.5q0 -80 -57 -142.5t-143 -62.5q-66 0 -106 42t-40 110zM236 463l94 651l39 258h280l-59 -258l-170 -651h-184z" />
<glyph unicode="&#x22;" horiz-adv-x="1044" d="M248 743l43 371l37 258h276l-57 -258l-117 -371h-182zM696 743l43 371l37 258h277l-58 -258l-116 -371h-183z" />
<glyph unicode="#" horiz-adv-x="1036" d="M37 385l43 182h168l74 238h-156l45 182h168l110 344h166l-110 -344h205l110 344h164l-109 -344h154l-43 -182h-168l-74 -238h156l-43 -182h-170l-123 -385h-166l123 385h-205l-123 -385h-163l123 385h-156zM414 567h204l74 238h-205z" />
<glyph unicode="$" d="M12 180l172 170q50 -66 116.5 -107.5t139.5 -41.5q84 0 131 41.5t47 113.5q0 45 -23 86t-59 74.5t-80 67t-88.5 70t-80.5 77t-59 95.5t-23 118q0 161 105.5 269.5t277.5 125.5l39 203h186l-43 -219q140 -40 248 -170l-176 -158q-41 55 -95.5 88t-111.5 33q-70 0 -112 -39 t-42 -100q0 -40 23 -77t59.5 -68t80.5 -63.5t88 -70t80.5 -79.5t59.5 -101t23 -127q0 -167 -106 -279t-285 -132l-43 -205h-185l43 215q-184 42 -307 190z" />
<glyph unicode="%" horiz-adv-x="1697" d="M109 854q0 144 48.5 263.5t139.5 191t207 71.5q121 0 201.5 -90t80.5 -237q0 -144 -48.5 -263t-139.5 -190.5t-207 -71.5q-121 0 -201.5 90.5t-80.5 235.5zM289 -25l971 1401h163l-970 -1401h-164zM309 860q0 -164 101 -164q76 0 126 101t50 252q0 163 -101 163 q-76 0 -126 -101t-50 -251zM948 301q0 144 48.5 263.5t139.5 191t207 71.5q121 0 202 -90.5t81 -236.5q0 -144 -48.5 -263t-139.5 -190.5t-207 -71.5q-121 0 -202 90.5t-81 235.5zM1149 307q0 -164 100 -164q76 0 126 101t50 252q0 163 -100 163q-76 0 -126 -101t-50 -251z " />
<glyph unicode="&#x26;" horiz-adv-x="1296" d="M29 307q0 79 24.5 145.5t70.5 118.5t96 89.5t118 76.5q-39 119 -39 224q0 165 119 282t287 117q131 0 202.5 -72t71.5 -196q0 -59 -21 -113t-51 -93.5t-81 -82t-92.5 -70t-104.5 -65.5q79 -138 213 -262q131 149 211 346h254q-131 -282 -301 -471q95 -58 196 -84 l-110 -222q-135 29 -279 127q-181 -127 -403 -127q-178 0 -279.5 91t-101.5 241zM301 338q0 -67 43 -109.5t115 -42.5q95 0 192 54q-137 140 -223 299q-127 -99 -127 -201zM532 969q0 -51 17 -121q104 57 158.5 113t54.5 133q0 37 -19 58.5t-55 21.5q-64 0 -110 -56.5 t-46 -148.5z" />
<glyph unicode="'" horiz-adv-x="595" d="M248 743l43 371l37 258h276l-57 -258l-117 -371h-182z" />
<glyph unicode="(" horiz-adv-x="673" d="M115 268q0 233 57 445t159.5 398t264.5 390l162 -82q-418 -554 -418 -1171q0 -141 19 -289.5t55 -251.5l-178 -74q-52 143 -86.5 311t-34.5 324z" />
<glyph unicode=")" horiz-adv-x="677" d="M-68 -285q418 554 418 1172q0 141 -19 290t-55 253l179 71q123 -336 123 -633q0 -345 -119 -635.5t-365 -599.5z" />
<glyph unicode="*" horiz-adv-x="897" d="M207 1163l63 133l219 -69l66 235l145 -12l-16 -240l234 29l20 -143l-225 -78l78 -217l-134 -76l-125 193l-178 -168l-106 100l153 201z" />
<glyph unicode="+" d="M98 578v198h344v379h207v-379h344v-198h-348v-383h-205v383h-342z" />
<glyph unicode="," horiz-adv-x="595" d="M-55 -229q112 32 179 93.5t85 135.5q-69 2 -112.5 41t-43.5 104q0 77 53 133t138 56q81 0 125.5 -52.5t44.5 -146.5q0 -194 -119 -334.5t-322 -183.5z" />
<glyph unicode="-" horiz-adv-x="655" d="M68 420l43 198h479l-43 -198h-479z" />
<glyph unicode="." horiz-adv-x="595" d="M49 127q0 79 57 143t144 64q64 0 103.5 -43.5t39.5 -110.5q0 -80 -56.5 -142.5t-143.5 -62.5q-64 0 -104 42t-40 110z" />
<glyph unicode="/" horiz-adv-x="673" d="M-141 -328l762 1782h186l-766 -1782h-182z" />
<glyph unicode="0" d="M78 442q0 167 32.5 312t88 248t129 177t155 110t166.5 36q164 0 264.5 -122.5t100.5 -348.5q0 -167 -32.5 -311.5t-88 -247t-128.5 -176t-154.5 -109t-166.5 -35.5q-164 0 -265 121.5t-101 345.5zM338 414q0 -224 125 -224q73 0 141 92t111 253.5t43 347.5 q0 227 -125 227q-54 0 -108 -55.5t-95 -148t-66.5 -222.5t-25.5 -270z" />
<glyph unicode="1" d="M39 0l45 225h268l160 785h-238l35 176q196 32 332 114h209l-217 -1075h239l-45 -225h-788z" />
<glyph unicode="2" d="M-27 0l31 160q32 26 94 77q120 98 177 145.5t144 124t126.5 122t84.5 105.5t62 110.5t17 101.5q0 71 -41.5 114.5t-116.5 43.5q-51 0 -98.5 -26t-114.5 -79l-135 162q193 164 383 164q183 0 289 -96t106 -254q0 -76 -27.5 -151t-61.5 -132.5t-115.5 -144t-137 -139 t-177.5 -162.5q-7 -7 -11 -10h440l-45 -236h-873z" />
<glyph unicode="3" d="M-33 209l178 145q51 -70 122.5 -111.5t140.5 -41.5q106 0 168.5 49t62.5 133q0 91 -71 136.5t-251 45.5l39 199q351 0 351 201q0 64 -42 101.5t-116 37.5q-85 0 -207 -84l-135 180q178 125 393 125q177 0 285 -86t108 -227q0 -127 -65 -212.5t-213 -135.5v-9 q102 -39 153.5 -110.5t51.5 -163.5q0 -128 -67 -221t-180.5 -139t-258.5 -46q-127 0 -245.5 59t-201.5 175z" />
<glyph unicode="4" d="M16 315l37 197l619 788h334l-154 -768h149l-40 -217h-150l-63 -315h-256l63 315h-539zM330 532h266l47 234q9 48 34 146t34 143h-9q-15 -24 -67.5 -109.5t-81.5 -128.5z" />
<glyph unicode="5" d="M-14 209l176 143q112 -151 256 -151q98 0 166.5 67t68.5 178q0 89 -46.5 135t-131.5 46q-51 0 -87.5 -11.5t-102.5 -48.5l-105 86l160 647h700l-47 -235h-456l-72 -256q62 27 125 27q154 0 250 -89.5t96 -254.5q0 -116 -44 -215t-117.5 -164t-167.5 -101.5t-195 -36.5 q-260 0 -426 234z" />
<glyph unicode="6" d="M102 438q0 262 84 464.5t233 312.5t337 110q194 0 321 -178l-178 -150q-66 103 -162 103q-121 0 -215.5 -106.5t-134.5 -305.5q53 57 125.5 90t130.5 33q145 0 234.5 -86.5t89.5 -253.5q0 -126 -58 -239.5t-164.5 -185t-236.5 -71.5q-185 0 -295.5 128t-110.5 335z M362 412q0 -107 44 -167.5t116 -60.5q57 0 101.5 42t65 100.5t20.5 119.5q0 82 -36.5 127t-103.5 45q-104 0 -204 -126q-3 -40 -3 -80z" />
<glyph unicode="7" d="M203 1065l47 235h862l-35 -176q-113 -104 -203 -220t-147.5 -219.5t-104.5 -230t-73 -224t-55 -230.5h-289q96 358 223 613t326 452h-551z" />
<glyph unicode="8" d="M76 315q0 128 78 222t202 143v8q-112 115 -112 264q0 168 123 270.5t299 102.5q67 0 129 -18t113 -54t81.5 -96t30.5 -137q0 -226 -234 -352v-9q73 -49 117.5 -125.5t44.5 -171.5q0 -115 -65.5 -204.5t-172 -136t-233.5 -46.5q-72 0 -141 20t-128 59.5t-95.5 107 t-36.5 153.5zM326 346q0 -76 46.5 -126t125.5 -50q81 0 137.5 50t56.5 140q0 38 -14.5 69.5t-48 61t-67 51t-91.5 54.5q-145 -101 -145 -250zM489 963q0 -70 41 -119t129 -96q121 102 121 231q0 67 -34 107t-101 40q-66 0 -111 -44t-45 -119z" />
<glyph unicode="9" d="M23 156l176 147q65 -102 161 -102q121 0 216 105.5t135 303.5q-54 -56 -127 -88.5t-129 -32.5q-145 0 -233.5 86.5t-88.5 253.5q0 126 57.5 239.5t163.5 185t236 71.5q186 0 295.5 -127.5t109.5 -335.5q0 -262 -84 -464.5t-232 -312.5t-335 -110q-111 0 -190.5 52.5 t-130.5 128.5zM389 854q0 -82 36 -127t105 -45q100 0 203 127q2 27 2 80q0 107 -44 167t-116 60q-57 0 -101 -42t-64.5 -100.5t-20.5 -119.5z" />
<glyph unicode=":" horiz-adv-x="595" d="M49 127q0 79 57 143t144 64q64 0 103.5 -43.5t39.5 -110.5q0 -80 -56.5 -142.5t-143.5 -62.5q-64 0 -104 42t-40 110zM166 811q0 79 57 143t144 64q64 0 103.5 -43.5t39.5 -110.5q0 -80 -57 -142.5t-144 -62.5q-64 0 -103.5 42t-39.5 110z" />
<glyph unicode=";" horiz-adv-x="595" d="M-55 -229q112 32 179 93.5t85 135.5q-69 2 -112.5 41t-43.5 104q0 77 53 133t138 56q81 0 125.5 -52.5t44.5 -146.5q0 -194 -119 -334.5t-322 -183.5zM166 811q0 79 57 143t144 64q64 0 103.5 -43.5t39.5 -110.5q0 -80 -57 -142.5t-144 -62.5q-64 0 -103.5 42t-39.5 110z " />
<glyph unicode="&#x3c;" d="M94 580v196l899 357v-230l-348 -125l-264 -94v-8l264 -96l348 -125v-234z" />
<glyph unicode="=" d="M98 340v199h895v-199h-895zM98 815v199h895v-199h-895z" />
<glyph unicode="&#x3e;" d="M98 221v234l351 125l262 96v8l-262 94l-351 125v230l899 -357v-196z" />
<glyph unicode="?" horiz-adv-x="909" d="M184 127q0 79 57.5 143t143.5 64q65 0 104 -43.5t39 -110.5q0 -80 -56 -142.5t-142 -62.5q-66 0 -106 42t-40 110zM231 1251q149 146 334 146q168 0 269.5 -83t101.5 -227q0 -65 -20 -120.5t-52 -96t-72 -77.5t-81 -73t-76.5 -73t-62.5 -86.5t-35 -105.5l-238 20 q7 66 30.5 124t56 99t70 77t74 67t66 61t48 66t18.5 75q0 59 -35.5 93t-96.5 34q-78 0 -157 -79z" />
<glyph unicode="@" horiz-adv-x="1773" d="M88 332q0 143 35.5 278.5t98 248t151 207.5t192 160t223 101.5t242.5 36.5q155 0 283 -49t212 -134.5t129.5 -200.5t45.5 -247q0 -158 -39.5 -284.5t-107.5 -205.5t-155.5 -121t-187.5 -42q-74 0 -129 40t-73 113h-9q-38 -59 -102 -96t-127 -37q-110 0 -183 81.5 t-73 213.5q0 127 56 243.5t153 189.5t207 73q93 0 143 -100h4l31 84h170l-104 -455q-41 -176 88 -176q43 0 87.5 29.5t83 83.5t63 143t24.5 195q0 79 -16.5 149.5t-55.5 134.5t-97.5 109.5t-147 72.5t-199.5 27q-102 0 -207 -40.5t-196.5 -117t-163.5 -177.5t-114 -230.5 t-42 -267.5q0 -132 44.5 -237.5t118.5 -170.5t165.5 -99t191.5 -34q58 0 124.5 19t118.5 51l74 -152q-175 -90 -342 -90q-140 0 -263 43.5t-218.5 126t-151 214t-55.5 296.5zM723 412q0 -66 27 -102t77 -36q64 0 136 101l63 284q-33 64 -90 64q-58 0 -108 -50.5 t-77.5 -121.5t-27.5 -139z" />
<glyph unicode="A" horiz-adv-x="1122" d="M-127 0l705 1335h335l134 -1335h-293l-17 336h-397l-158 -336h-309zM440 547h287l-8 176q-15 329 -17 397h-8q-116 -279 -172 -397z" />
<glyph unicode="B" horiz-adv-x="1236" d="M57 0l269 1335h407q208 0 328.5 -76t120.5 -229q0 -115 -79 -205.5t-210 -128.5l-4 -8q112 -27 171.5 -90t59.5 -160q0 -92 -30 -165.5t-82.5 -124t-126 -84.5t-158 -49t-180.5 -15h-486zM381 215h174q142 0 218.5 55t76.5 158q0 83 -54.5 126.5t-162.5 43.5h-174z M498 788h133q135 0 199.5 51.5t64.5 143.5q0 66 -53 101.5t-160 35.5h-119z" />
<glyph unicode="C" horiz-adv-x="1161" d="M115 535q0 227 93.5 416.5t257 299t359.5 109.5q115 0 207 -56t150 -157l-193 -148q-73 117 -178 117q-111 0 -205.5 -78.5t-148.5 -208t-54 -276.5q0 -336 279 -336q106 0 227 102l117 -180q-73 -68 -176 -116t-227 -48q-233 0 -370.5 149.5t-137.5 410.5z" />
<glyph unicode="D" horiz-adv-x="1261" d="M57 0l269 1335h292q284 0 437 -132t153 -392q0 -194 -54.5 -348t-152 -255t-231.5 -154.5t-295 -53.5h-418zM385 225h84q98 0 179 34.5t143 103t96.5 178.5t34.5 252q0 160 -82.5 238.5t-227.5 78.5h-53z" />
<glyph unicode="E" horiz-adv-x="1079" d="M57 0l269 1335h790l-45 -235h-514l-57 -291h436l-45 -236h-436l-70 -337h530l-45 -236h-813z" />
<glyph unicode="F" horiz-adv-x="1032" d="M57 0l269 1335h790l-45 -235h-514l-63 -328h434l-45 -235h-437l-106 -537h-283z" />
<glyph unicode="G" horiz-adv-x="1251" d="M115 535q0 228 94.5 417t262.5 298.5t374 109.5q251 0 373 -213l-191 -148q-76 117 -197 117t-220 -79t-153.5 -207.5t-54.5 -276.5q0 -338 289 -338q84 0 146 45l57 262h-219l43 230h465l-123 -637q-81 -64 -189 -102t-229 -38q-248 0 -388 148t-140 412z" />
<glyph unicode="H" horiz-adv-x="1335" d="M57 0l269 1335h280l-106 -518h456l103 518h280l-266 -1335h-282l116 571h-456l-111 -571h-283z" />
<glyph unicode="I" horiz-adv-x="602" d="M57 0l269 1335h280l-266 -1335h-283z" />
<glyph unicode="J" horiz-adv-x="1005" d="M-16 178l172 170q32 -57 85 -94t119 -37q156 0 205 248l174 870h281l-184 -919q-18 -93 -55 -170.5t-94 -139.5t-140.5 -96.5t-186.5 -34.5q-117 0 -217.5 53.5t-158.5 149.5z" />
<glyph unicode="K" horiz-adv-x="1236" d="M57 0l269 1335h280l-108 -549h6l502 549h307l-486 -549l299 -786h-292l-213 610l-203 -219l-78 -391h-283z" />
<glyph unicode="L" horiz-adv-x="1024" d="M57 0l269 1335h280l-221 -1099h506l-45 -236h-789z" />
<glyph unicode="M" horiz-adv-x="1515" d="M57 0l269 1335h297l96 -616l35 -240h8l123 240l336 616h299l-269 -1335h-262l111 530q37 183 121 447h-7l-165 -307l-314 -547h-112l-99 547l-41 307h-8q-31 -342 -53 -447l-107 -530h-258z" />
<glyph unicode="N" horiz-adv-x="1316" d="M57 0l269 1335h272l217 -696l72 -293h8q3 27 12.5 139.5t19 193.5t23.5 150l103 506h266l-266 -1335h-271l-219 694l-67 297h-9q-32 -347 -59 -479l-102 -512h-269z" />
<glyph unicode="O" horiz-adv-x="1351" d="M117 541q0 172 55.5 326t148 261t216.5 169.5t258 62.5q230 0 365.5 -150.5t135.5 -414.5q0 -172 -55.5 -326t-147.5 -261.5t-216.5 -170t-258.5 -62.5q-231 0 -366 150.5t-135 415.5zM403 559q0 -161 60 -251.5t170 -90.5q70 0 138.5 44.5t121 118.5t85 178.5 t32.5 217.5q0 161 -59.5 250.5t-168.5 89.5q-70 0 -139 -44t-122 -118t-85.5 -178t-32.5 -217z" />
<glyph unicode="P" horiz-adv-x="1193" d="M57 0l269 1335h422q100 0 181 -19.5t144 -61t97 -111t34 -162.5q0 -109 -32 -196.5t-87.5 -147t-134 -99t-168.5 -57.5t-194 -18h-158l-90 -463h-283zM477 686h141q150 0 230 64.5t80 189.5q0 172 -226 172h-143z" />
<glyph unicode="Q" horiz-adv-x="1351" d="M117 541q0 172 55.5 326t148 261t216.5 169.5t258 62.5q230 0 365.5 -150.5t135.5 -414.5q0 -207 -76.5 -382.5t-205.5 -285.5t-287 -141q39 -60 114 -90.5t165 -30.5q58 0 135 18l12 -211q-84 -32 -164 -32q-417 0 -559 366q-148 53 -230.5 191.5t-82.5 343.5zM403 559 q0 -161 60 -251.5t170 -90.5q70 0 138.5 44.5t121 118.5t85 178.5t32.5 217.5q0 161 -59.5 250.5t-168.5 89.5q-70 0 -139 -44t-122 -118t-85.5 -178t-32.5 -217z" />
<glyph unicode="R" horiz-adv-x="1220" d="M57 0l269 1335h417q101 0 182.5 -19t144 -58.5t96.5 -106.5t34 -158q0 -179 -91.5 -296t-248.5 -169l207 -528h-295l-172 489h-164l-96 -489h-283zM481 713h142q146 0 223.5 64t77.5 175q0 160 -224 160h-141z" />
<glyph unicode="S" horiz-adv-x="1083" d="M10 225l201 158q55 -78 133.5 -123t163.5 -45q87 0 139.5 41.5t52.5 112.5q0 47 -32.5 78.5t-110.5 80.5q-8 5 -12 7l-127 77q-98 62 -148.5 140t-50.5 194q0 171 136.5 292.5t332.5 121.5q116 0 222 -54.5t184 -148.5l-179 -166q-118 125 -239 125q-79 0 -124.5 -41 t-45.5 -102q0 -11 2 -21t7.5 -20t10.5 -17.5t16.5 -17.5t18.5 -16t23.5 -17l25.5 -17t31 -19.5t33 -20.5l131 -80q99 -60 142.5 -132t43.5 -185q0 -186 -139.5 -310.5t-364.5 -124.5q-293 0 -477 250z" />
<glyph unicode="T" horiz-adv-x="1089" d="M172 1098l45 237h983l-47 -237h-350l-217 -1098h-281l217 1098h-350z" />
<glyph unicode="U" horiz-adv-x="1316" d="M154 440q0 63 26 215l137 680h281l-145 -731q-17 -94 -17 -155q0 -117 47 -174.5t156 -57.5q97 0 160.5 81t99.5 263l156 774h274l-155 -770q-61 -305 -194 -447.5t-349 -142.5q-477 0 -477 465z" />
<glyph unicode="V" horiz-adv-x="1134" d="M162 1335h293l34 -657q13 -316 15 -428h8q110 259 186 428l297 657h310l-691 -1335h-340z" />
<glyph unicode="W" horiz-adv-x="1626" d="M158 0l47 1335h287l-43 -641q-23 -267 -41 -428h8q25 65 85.5 209.5t88.5 218.5l274 641h238l4 -641q-2 -145 -14 -428h8q16 46 69.5 197t79.5 231l226 641h268l-518 -1335h-355l9 639q0 127 18 311h-8q-19 -52 -60.5 -156.5t-60.5 -154.5l-262 -639h-348z" />
<glyph unicode="X" horiz-adv-x="1132" d="M-74 0l496 688l-207 647h311l68 -268q6 -27 13.5 -60l17.5 -77t16 -72h8q19 33 127 211l162 266h299l-469 -659l223 -676h-311l-76 291q-33 128 -53 215h-8q-15 -26 -133 -217l-185 -289h-299z" />
<glyph unicode="Y" d="M164 1335h291l57 -321q8 -42 51 -293h8q83 157 164 297l187 317h301l-566 -852l-96 -483h-278l94 483z" />
<glyph unicode="Z" horiz-adv-x="1075" d="M-10 0l37 168l729 932h-527l47 235h863l-35 -170l-723 -929h580l-50 -236h-921z" />
<glyph unicode="[" horiz-adv-x="675" d="M-6 -311l352 1761h410l-29 -150h-203l-291 -1462h201l-31 -149h-409z" />
<glyph unicode="\" horiz-adv-x="673" d="M174 1454h180l158 -1782h-182z" />
<glyph unicode="]" horiz-adv-x="677" d="M-59 -311l30 149h199l293 1462h-199l29 150h409l-352 -1761h-409z" />
<glyph unicode="^" horiz-adv-x="1036" d="M147 563l306 809h221l305 -809h-229l-93 277l-88 276h-8l-90 -276l-94 -277h-230z" />
<glyph unicode="_" horiz-adv-x="985" d="M-96 -283l30 158h936l-32 -158h-934z" />
<glyph unicode="`" horiz-adv-x="1093" d="M434 1516l240 178l248 -396l-172 -133z" />
<glyph unicode="a" horiz-adv-x="1130" d="M63 348q0 141 45.5 270.5t120.5 221t174 146t203 54.5q70 0 131 -36t90 -97h4l46 109h223l-203 -1016h-227l4 133h-6q-70 -73 -154.5 -115.5t-163.5 -42.5q-135 0 -211 97.5t-76 275.5zM354 383q0 -178 119 -178q131 0 217 149l72 361q-23 48 -60 72t-75 24 q-108 0 -190.5 -124.5t-82.5 -303.5z" />
<glyph unicode="b" horiz-adv-x="1132" d="M29 0l288 1436h281l-68 -326l-51 -190h4q146 120 295 120q136 0 211.5 -96.5t75.5 -275.5q0 -188 -77 -349t-201.5 -252.5t-262.5 -91.5q-69 0 -127.5 36.5t-87.5 97.5h-4l-45 -109h-231zM371 301q44 -96 133 -96q108 0 190 124.5t82 303.5q0 90 -31.5 134t-87.5 44 q-54 0 -110.5 -31t-97.5 -96z" />
<glyph unicode="c" horiz-adv-x="907" d="M59 393q0 174 79 322.5t217 236.5t302 88q88 0 159 -36t114 -89l-156 -165q-62 65 -135 65q-121 0 -207 -122.5t-86 -293.5q0 -94 43.5 -146t128.5 -52q77 0 162 65l117 -172q-159 -119 -340 -119q-174 0 -286 112.5t-112 305.5z" />
<glyph unicode="d" horiz-adv-x="1118" d="M63 348q0 141 45.5 270.5t120.5 221t174 146t203 54.5q68 0 122.5 -33t84.5 -89h6l25 192l61 326h281l-289 -1436h-227l4 133h-6q-70 -73 -154.5 -115.5t-163.5 -42.5q-135 0 -211 97.5t-76 275.5zM354 383q0 -178 119 -178q126 0 217 149l72 361q-23 48 -60 72t-75 24 q-108 0 -190.5 -124.5t-82.5 -303.5z" />
<glyph unicode="e" horiz-adv-x="1015" d="M59 410q0 136 50.5 256.5t131.5 200.5t181.5 126.5t202.5 46.5q88 0 153.5 -29.5t103.5 -82.5t56 -120t18 -149q0 -64 -18 -131.5t-35 -99.5h-577q-1 -10 -1 -20q1 -106 59 -162q64 -60 169 -60q83 0 188 72l99 -176q-154 -107 -365 -107q-187 0 -301.5 117.5 t-114.5 317.5zM348 600h369q10 33 10 76q0 67 -32.5 108t-104.5 41q-76 0 -143 -58.5t-99 -166.5z" />
<glyph unicode="f" horiz-adv-x="669" d="M74 0l162 797h-132l43 207l134 12l12 67q16 81 46.5 147.5t77.5 119t115.5 81.5t153.5 29q118 0 217 -55l-90 -199q-51 31 -98 31q-59 0 -93.5 -31.5t-48.5 -111.5l-14 -78h176l-43 -219h-180l-158 -797h-280z" />
<glyph unicode="g" horiz-adv-x="1118" d="M-25 -293l121 187q141 -107 262 -107q200 0 260 213l54 180q-141 -147 -312 -147q-135 0 -216 90t-81 264q0 178 74.5 329.5t196.5 237.5t260 86q70 0 129 -36t88 -97h6l43 109h227l-198 -1000q-45 -223 -184 -337.5t-355 -114.5q-93 0 -191.5 37t-183.5 106zM354 424 q0 -81 30.5 -122.5t84.5 -41.5q127 0 215 133l64 322q-25 48 -60.5 72t-73.5 24q-106 0 -183 -112.5t-77 -274.5z" />
<glyph unicode="h" horiz-adv-x="1118" d="M29 0l288 1436h281l-78 -375l-45 -164h8q161 143 320 143q241 0 241 -260q0 -77 -16 -145l-127 -635h-280l120 600q2 12 7.5 34.5t7.5 36t2 25.5q0 105 -105 105q-46 0 -96 -31t-117 -100l-131 -670h-280z" />
<glyph unicode="i" horiz-adv-x="542" d="M29 0l204 1016h279l-203 -1016h-280zM274 1303q0 68 51.5 116.5t123.5 48.5q62 0 106.5 -36t44.5 -99q0 -72 -50 -119t-124 -47q-62 0 -107 36t-45 100z" />
<glyph unicode="j" horiz-adv-x="546" d="M-268 -356l84 202q47 -26 90 -26q49 0 75.5 36.5t47.5 123.5l207 1036h280l-211 -1049q-77 -368 -377 -368q-106 0 -196 45zM279 1303q0 68 50.5 116.5t123.5 48.5q61 0 106 -36t45 -99q0 -71 -50.5 -118.5t-123.5 -47.5q-63 0 -107 36t-44 100z" />
<glyph unicode="k" horiz-adv-x="1075" d="M29 0l288 1436h281l-168 -832h8l383 412h312l-416 -445l241 -571h-280l-154 410l-166 -166l-49 -244h-280z" />
<glyph unicode="l" horiz-adv-x="563" d="M76 174q0 54 14 125l227 1137h281l-231 -1149q-5 -25 -5 -39q0 -47 39 -47q19 0 37 4l-8 -207q-67 -23 -149 -23q-205 0 -205 199z" />
<glyph unicode="m" horiz-adv-x="1693" d="M29 0l200 1016h228l-4 -135h8q181 159 327 159q107 0 160.5 -45.5t75.5 -132.5q193 178 344 178q240 0 240 -260q0 -58 -17 -145l-127 -635h-280l121 600q16 82 16 96q0 105 -102 105q-74 0 -199 -131l-135 -670h-281l121 600q16 82 16 96q0 52 -25.5 78.5t-72.5 26.5 q-78 0 -203 -131l-131 -670h-280z" />
<glyph unicode="n" horiz-adv-x="1130" d="M29 0l200 1016h228l-4 -135h8q185 159 342 159q241 0 241 -260q0 -63 -16 -145l-127 -635h-280l120 600q2 12 7.5 34.5t7.5 36t2 25.5q0 105 -105 105q-46 0 -96 -31t-117 -100l-131 -670h-280z" />
<glyph unicode="o" horiz-adv-x="1091" d="M61 393q0 115 32 218t87.5 180t128 134t155.5 86t167 29q177 0 285 -114t108 -303q0 -142 -49.5 -266t-130 -206t-182 -129t-207.5 -47q-178 0 -286 114.5t-108 303.5zM344 399q0 -94 36 -146t105 -52q104 0 180 119.5t76 295.5q0 95 -36.5 147t-106.5 52 q-103 0 -178.5 -120t-75.5 -296z" />
<glyph unicode="p" horiz-adv-x="1132" d="M-47 -377l280 1393h228l2 -117h6q71 65 152 103t157 38q136 0 211.5 -96.5t75.5 -275.5q0 -188 -77 -349t-201.5 -252.5t-262.5 -91.5q-64 0 -118.5 32t-88.5 89h-4l-28 -198l-52 -275h-280zM371 299q44 -94 133 -94q108 0 190 124.5t82 303.5q0 90 -31.5 134t-87.5 44 q-54 0 -110.5 -31t-97.5 -96z" />
<glyph unicode="q" horiz-adv-x="1130" d="M63 348q0 141 45.5 270.5t120.5 221t174 146t203 54.5q70 0 131 -36t90 -97h4l46 109h223l-279 -1393h-280l57 275l76 235h-4q-70 -73 -155.5 -115.5t-164.5 -42.5q-135 0 -211 97.5t-76 275.5zM354 383q0 -178 119 -178q126 0 217 149l72 361q-23 48 -60 72t-75 24 q-108 0 -190.5 -124.5t-82.5 -303.5z" />
<glyph unicode="r" horiz-adv-x="786" d="M29 0l200 1016h228l-13 -197h9q63 100 144.5 160.5t166.5 60.5q68 0 106 -20l-92 -242q-33 17 -100 17q-138 0 -254 -207l-115 -588h-280z" />
<glyph unicode="s" horiz-adv-x="868" d="M-16 172l161 135q106 -127 220 -127q59 0 101 27.5t42 68.5q0 10 -2 18.5t-7.5 17t-10 15t-16 15.5t-19 14.5t-25 16l-27.5 16.5t-33 19t-36 20q-205 112 -205 281q0 143 114 237t279 94q186 0 334 -155l-154 -146q-88 92 -180 92q-58 0 -94.5 -28t-36.5 -68 q0 -18 8.5 -33.5t28.5 -30.5t35.5 -24.5t48 -26.5t47.5 -26q102 -56 157.5 -122t55.5 -163q0 -148 -118.5 -241t-303.5 -93q-98 0 -200.5 52.5t-163.5 144.5z" />
<glyph unicode="t" horiz-adv-x="751" d="M96 797l41 207l150 12l86 266h235l-51 -266h231l-43 -219h-237l-88 -437q-4 -25 -4 -67q0 -98 104 -98q34 0 84 22l49 -197q-119 -45 -237 -45q-147 0 -218 72.5t-71 196.5q0 43 16 129l88 424h-135z" />
<glyph unicode="u" horiz-adv-x="1116" d="M80 238q0 61 16 143l127 635h279l-119 -600q-16 -66 -16 -97q0 -104 102 -104q87 0 203 131l131 670h280l-200 -1016h-228l4 137h-8q-173 -162 -332 -162q-124 0 -181.5 66.5t-57.5 196.5z" />
<glyph unicode="v" horiz-adv-x="1021" d="M123 1016h278l35 -498q9 -116 13 -309h8q104 242 135 309l227 498h275l-519 -1016h-323z" />
<glyph unicode="w" horiz-adv-x="1531" d="M147 1016h277l2 -492q-1 -44 -3 -93.5t-5 -110.5t-4 -95h8q90 243 115 299l208 492h244l17 -492v-299h8q14 39 49 141.5t57 157.5l191 492h260l-434 -1016h-330l-8 426q1 48 2 147t2 150h-8q-14 -37 -50 -140.5t-57 -156.5l-174 -426h-317z" />
<glyph unicode="x" horiz-adv-x="1003" d="M-82 0l430 543l-176 473h283l61 -174q9 -35 27.5 -99.5t21.5 -74.5h8q75 121 105 174l104 174h299l-397 -537l188 -479h-286l-64 178q-6 20 -26.5 82t-30.5 96h-8q-49 -78 -115 -178l-123 -178h-301z" />
<glyph unicode="y" horiz-adv-x="1021" d="M-72 -356l86 200q33 -20 76 -20q55 0 107 39.5t86 107.5l24 52l-176 993h279l47 -459q14 -125 18 -305h8q19 42 65.5 149t69.5 156l213 459h273l-549 -1039q-112 -194 -221.5 -284t-259.5 -90q-28 0 -72 12t-74 29z" />
<glyph unicode="z" horiz-adv-x="907" d="M-20 0l30 158l539 639h-367l41 219h719l-31 -162l-538 -635h426l-43 -219h-776z" />
<glyph unicode="{" horiz-adv-x="671" d="M53 487l37 164q92 3 139.5 48t61.5 110q12 60 23 167t26 181q34 166 99 229.5t200 63.5h131l-33 -150h-39q-62 0 -91 -33.5t-44 -119.5q-12 -59 -29.5 -169.5t-27.5 -164.5q-24 -115 -72 -172t-131 -76v-8q58 -14 86.5 -47.5t28.5 -95.5q0 -71 -47 -256.5t-47 -241.5 q0 -43 18 -60.5t68 -17.5h34l-28 -149h-125q-106 0 -152.5 44t-46.5 134q0 88 52.5 272.5t52.5 227.5q0 115 -144 120z" />
<glyph unicode="|" horiz-adv-x="522" d="M180 -512v2048h176v-2048h-176z" />
<glyph unicode="}" horiz-adv-x="677" d="M-78 -311l33 149h39q62 0 91 34t44 120q12 59 29.5 169.5t27.5 164.5q24 115 72 171.5t131 75.5v9q-59 14 -87 47.5t-28 95.5q0 71 47.5 256t47.5 240q0 44 -18 61.5t-68 17.5h-35l28 150h127q105 0 151 -44t46 -134q0 -68 -26 -172.5t-52 -196.5t-26 -131 q0 -116 143 -121l-37 -164q-92 -3 -139.5 -47.5t-61.5 -109.5q-12 -60 -23 -168t-26 -182q-34 -165 -99 -228t-200 -63h-131z" />
<glyph unicode="~" d="M78 643q62 109 138.5 159t154.5 50q43 0 84 -16.5t73 -39.5t61.5 -46t61 -39.5t60.5 -16.5q81 0 139 115l143 -96q-119 -209 -293 -209q-52 0 -102.5 24.5t-84.5 54.5t-75.5 54.5t-77.5 24.5q-82 0 -139 -115z" />
<glyph unicode="&#xa1;" horiz-adv-x="677" d="M35 -356l59 258l170 651h185l-95 -651l-39 -258h-280zM246 836q0 80 57 142t143 62q66 0 106 -41.5t40 -109.5q0 -79 -57.5 -143t-143.5 -64q-65 0 -105 43.5t-40 110.5z" />
<glyph unicode="&#xa2;" d="M147 586q0 125 45.5 234t120.5 183.5t169.5 122.5t195.5 62l39 196h155l-38 -198q115 -21 225 -144l-162 -153q-60 57 -109 72l-114 -576q89 12 164 68l86 -181q-149 -95 -295 -112l-39 -197h-156l39 199q-150 24 -238 135t-88 289zM422 629q0 -164 100 -223l109 546 q-94 -33 -151.5 -119.5t-57.5 -203.5z" />
<glyph unicode="&#xa3;" d="M-4 0l35 172q126 54 199.5 152t80.5 225h-194l37 190l147 11q-8 82 -8 114q0 140 64.5 250t173.5 168.5t243 58.5q197 0 322 -174l-181 -147q-36 49 -71.5 72.5t-83.5 23.5q-90 0 -148.5 -73.5t-58.5 -215.5q0 -23 4 -77h299l-41 -201h-250q-7 -90 -38 -162t-91 -143 l-2 -8h481l-41 -236h-878z" />
<glyph unicode="&#xa4;" d="M14 336l136 115q-35 65 -35 155q0 176 118 307l-92 117l148 127l104 -129q108 57 223 57t203 -53l146 127l120 -143l-135 -117q33 -74 33 -151q0 -179 -117 -306l101 -123l-150 -129l-108 136q-107 -58 -228 -58q-118 0 -198 51l-148 -126zM371 629q0 -76 38 -119 t103 -43q85 0 150 74.5t65 183.5q0 77 -38 119.5t-103 42.5q-85 0 -150 -74.5t-65 -183.5z" />
<glyph unicode="&#xa5;" d="M37 305l26 135h304l22 117h-303l27 135h243l-168 611h285l47 -289q18 -138 45 -271h6q12 21 69 120t87 151l160 289h278l-409 -611h241l-26 -135h-303l-25 -117h303l-26 -135h-304l-61 -305h-276l61 305h-303z" />
<glyph unicode="&#xa6;" horiz-adv-x="522" d="M180 420h176v-932h-176v932zM180 633v903h176v-903h-176z" />
<glyph unicode="&#xa7;" horiz-adv-x="1034" d="M2 8l139 174q57 -58 127.5 -97.5t139.5 -39.5q56 0 88 27t32 73q0 29 -23.5 57t-61.5 53t-83.5 52t-91 60.5t-83.5 72t-61.5 93t-23.5 118.5q0 100 58 178.5t155 124.5q-32 56 -32 123q0 146 100 241t260 95q94 0 184.5 -43t163.5 -121l-141 -155q-110 106 -209 106 q-45 0 -76 -25t-31 -69q0 -32 33 -64.5t82 -60.5t106.5 -67t106.5 -80t82 -103t33 -133q0 -206 -213 -317q20 -48 20 -103q0 -153 -107.5 -247.5t-281.5 -94.5q-99 0 -204 45.5t-187 126.5zM340 684q0 -33 18 -62t52 -54.5t68.5 -46.5t82.5 -50t80 -53q90 46 90 147 q0 32 -17.5 60.5t-51 54t-67.5 47t-82 50.5t-79 52q-94 -50 -94 -145z" />
<glyph unicode="&#xa8;" horiz-adv-x="1093" d="M352 1292q0 62 45 108t109 46q52 0 86.5 -33.5t34.5 -89.5q0 -63 -45 -107.5t-109 -44.5q-53 0 -87 32t-34 89zM784 1292q0 62 44 108t108 46q53 0 87 -33.5t34 -89.5q0 -63 -44.5 -107.5t-109.5 -44.5q-53 0 -86 32t-33 89z" />
<glyph unicode="&#xa9;" horiz-adv-x="1376" d="M61 551q0 161 57 305.5t157 251.5t243.5 170t308.5 63q239 0 394 -160.5t155 -406.5q0 -161 -57 -306t-157 -252.5t-243.5 -170.5t-308.5 -63q-239 0 -394 160.5t-155 408.5zM193 563q0 -95 28 -177t80.5 -145t134.5 -99t185 -36q174 0 318 90t225 240t81 326 q0 127 -47.5 229t-146 165t-234.5 63q-174 0 -318 -90.5t-225 -240.5t-81 -325zM356 578q0 106 41 197.5t106.5 151.5t145.5 94t160 34q123 0 209 -107l-117 -114q-49 57 -117 57q-83 0 -154 -83.5t-71 -205.5q0 -83 42.5 -129.5t119.5 -46.5q40 0 71.5 13t79.5 44l78 -123 q-124 -100 -274 -100q-144 0 -232 85.5t-88 232.5z" />
<glyph unicode="&#xaa;" horiz-adv-x="747" d="M158 999q0 189 110.5 325t253.5 136q43 0 79.5 -24.5t57.5 -65.5h9l30 74h160l-135 -676h-160l4 88h-8q-44 -49 -99.5 -76.5t-109.5 -27.5q-89 0 -140.5 65t-51.5 182zM360 1026q0 -56 20 -84.5t52 -28.5q85 0 143 97l41 227q-26 61 -81 61q-68 0 -121.5 -79.5 t-53.5 -192.5z" />
<glyph unicode="&#xab;" horiz-adv-x="944" d="M82 424l37 201l313 284l86 -92l-272 -311l160 -316l-111 -71zM469 424l37 201l313 284l86 -92l-272 -311l160 -316l-111 -71z" />
<glyph unicode="&#xac;" d="M98 578v198h895v-581h-200v383h-695z" />
<glyph unicode="&#xad;" horiz-adv-x="655" d="M68 420l43 198h479l-43 -198h-479z" />
<glyph unicode="&#xae;" horiz-adv-x="909" d="M166 1001q0 119 52.5 223.5t151.5 171t222 66.5q145 0 249 -103t107 -259q0 -118 -53.5 -223.5t-152.5 -171.5t-220 -66q-147 0 -251.5 103t-104.5 259zM270 1010q0 -118 71 -196.5t187 -78.5q135 0 225.5 105.5t90.5 251.5q0 119 -71.5 196.5t-186.5 77.5 q-135 0 -225.5 -105t-90.5 -251zM362 852l82 401h168q63 0 100.5 -31t37.5 -87q0 -42 -26.5 -77.5t-74.5 -53.5l51 -152h-110l-37 127h-53l-27 -127h-111zM514 1057h33q38 0 60 19t22 48q0 47 -56 47h-36z" />
<glyph unicode="&#xaf;" horiz-adv-x="1093" d="M395 1214l37 179h580l-37 -179h-580z" />
<glyph unicode="&#xb0;" horiz-adv-x="712" d="M193 1083q0 132 93.5 227t217.5 95q114 0 185 -70.5t71 -187.5q0 -132 -92.5 -227t-218.5 -95q-113 0 -184.5 71t-71.5 187zM344 1085q0 -52 31 -87t86 -35q64 0 106.5 54t42.5 128q0 52 -30.5 87.5t-85.5 35.5q-66 0 -108 -54.5t-42 -128.5z" />
<glyph unicode="&#xb1;" d="M98 0v199h895v-199h-895zM98 637v199h344v319h207v-319h344v-199h-348v-322h-205v322h-342z" />
<glyph unicode="&#xb2;" horiz-adv-x="745" d="M129 768l23 113q219 143 323.5 249t104.5 193q0 41 -25.5 65.5t-73.5 24.5q-50 0 -127 -74l-114 121q75 68 137 99.5t141 31.5q123 0 194.5 -62t71.5 -169q0 -104 -73 -201.5t-219 -216.5h239l-35 -174h-567z" />
<glyph unicode="&#xb3;" horiz-adv-x="737" d="M135 907l133 97q59 -97 150 -97q60 0 95.5 27.5t35.5 73.5q0 52 -39 79t-137 27l24 125q191 0 191 117q0 34 -24 55t-64 21q-37 0 -67 -11.5t-71 -40.5l-86 136q124 75 269 75q109 0 178.5 -54.5t69.5 -143.5q0 -157 -164 -219q56 -29 87.5 -75.5t31.5 -99.5 q0 -118 -89.5 -187t-222.5 -69q-104 0 -180 44t-121 120z" />
<glyph unicode="&#xb4;" horiz-adv-x="1093" d="M518 1343l379 340l168 -213l-424 -286z" />
<glyph unicode="&#xb5;" horiz-adv-x="1118" d="M-47 -369l274 1385h281l-121 -600q-16 -82 -16 -97q0 -104 104 -104q84 0 203 131l131 670h276l-196 -1016h-227l4 137h-9q-50 -67 -109 -107t-118 -40q-96 0 -125 55l-18 -125l-56 -289h-278z" />
<glyph unicode="&#xb6;" horiz-adv-x="1245" d="M141 784q0 112 32.5 204.5t88.5 156t132.5 107t163.5 63.5t183 20h90l-186 -925h-61q-120 0 -219.5 42t-161.5 128.5t-62 203.5zM643 -164l297 1499h281l-297 -1499h-281z" />
<glyph unicode="&#xb7;" horiz-adv-x="595" d="M156 641q0 80 56.5 143.5t143.5 63.5q64 0 104 -43.5t40 -110.5q0 -80 -57 -142.5t-144 -62.5q-64 0 -103.5 42t-39.5 110z" />
<glyph unicode="&#xb8;" horiz-adv-x="1093" d="M152 -369q116 4 166.5 26t58.5 67q3 33 -27 52.5t-114 30.5l135 201h174l-82 -133q76 -19 107 -53.5t24 -95.5q-33 -202 -442 -215v120z" />
<glyph unicode="&#xb9;" horiz-adv-x="770" d="M322 1352l24 127q80 11 130 30.5t110 57.5h159l-155 -799h-209l119 584h-178z" />
<glyph unicode="&#xba;" horiz-adv-x="733" d="M106 1032q0 94 32.5 176t86.5 136t123 85t141 31q118 0 193.5 -75.5t75.5 -204.5q0 -94 -33 -176t-86.5 -136t-122 -85t-139.5 -31q-118 0 -194.5 75.5t-76.5 204.5zM305 1034q0 -125 88 -125q73 0 120.5 77.5t47.5 191.5q0 125 -88 125q-73 0 -120.5 -77.5t-47.5 -191.5 z" />
<glyph unicode="&#xbb;" horiz-adv-x="944" d="M55 211l273 311l-162 316l113 71l213 -305l-37 -201l-314 -284zM442 211l273 311l-162 316l113 71l213 -305l-37 -201l-314 -284z" />
<glyph unicode="&#xbc;" horiz-adv-x="1591" d="M217 1137l25 127q80 11 129.5 30.5t109.5 57.5h160l-156 -799h-209l119 584h-178zM252 -25l971 1401h163l-970 -1401h-164zM831 182l23 107l399 510h252l-94 -480h117l-29 -137h-115l-34 -182h-179l37 182h-377zM1044 319h191l20 99l56 246h-8l-123 -177z" />
<glyph unicode="&#xbd;" horiz-adv-x="1665" d="M209 1137l24 127q80 11 130 30.5t110 57.5h160l-156 -799h-209l119 584h-178zM223 -25l971 1401h164l-971 -1401h-164zM907 0l23 113q219 143 323.5 249t104.5 193q0 41 -25 65.5t-73 24.5q-50 0 -127 -74l-115 121q75 68 137 99.5t141 31.5q123 0 195 -62t72 -169 q0 -103 -73 -201t-220 -217h239l-34 -174h-568z" />
<glyph unicode="&#xbe;" horiz-adv-x="1613" d="M80 692l133 96q58 -96 149 -96q60 0 96 27.5t36 73.5q0 51 -39.5 78.5t-137.5 27.5l25 125q190 0 190 117q0 34 -24 55t-64 21q-36 0 -65.5 -11.5t-71.5 -40.5l-86 135q125 76 268 76q109 0 178.5 -54.5t69.5 -143.5q0 -158 -164 -220q57 -29 88 -75t31 -99 q0 -118 -89.5 -187t-221.5 -69q-104 0 -180 44t-121 120zM301 -25l971 1401h164l-971 -1401h-164zM856 182l23 107l399 510h252l-94 -480h116l-28 -137h-115l-35 -182h-178l37 182h-377zM1069 319h191l20 99l55 246h-8l-123 -177z" />
<glyph unicode="&#xbf;" horiz-adv-x="909" d="M-2 -70q0 65 20 120.5t52 96.5t72 78t81 73t76.5 73t62.5 86.5t35 105.5l238 -22q-7 -66 -30.5 -123.5t-56 -98.5t-70.5 -77.5t-74.5 -67.5t-66.5 -61.5t-48.5 -66.5t-18.5 -75q0 -58 35.5 -91.5t97.5 -33.5q81 0 156 78l143 -157q-151 -148 -333 -148q-168 0 -269.5 83 t-101.5 228zM406 836q0 80 56 142t142 62q66 0 106 -41.5t40 -109.5q0 -78 -58 -141.5t-143 -63.5q-65 0 -104 43t-39 109z" />
<glyph unicode="&#xc0;" horiz-adv-x="1122" d="M-127 0l705 1335h335l134 -1335h-293l-17 336h-397l-158 -336h-309zM440 547h287l-8 176q-15 329 -17 397h-8q-116 -279 -172 -397zM471 1659l193 178l301 -315l-158 -138z" />
<glyph unicode="&#xc1;" horiz-adv-x="1122" d="M-127 0l705 1335h335l134 -1335h-293l-17 336h-397l-158 -336h-309zM440 547h287l-8 176q-15 329 -17 397h-8q-116 -279 -172 -397zM578 1567l399 254l125 -207l-418 -209z" />
<glyph unicode="&#xc2;" horiz-adv-x="1122" d="M-127 0l705 1335h335l134 -1335h-293l-17 336h-397l-158 -336h-309zM403 1493l224 217h327l144 -227l-137 -78l-177 170h-8l-256 -172zM440 547h287l-8 176q-15 329 -17 397h-8q-116 -279 -172 -397z" />
<glyph unicode="&#xc3;" horiz-adv-x="1122" d="M-127 0l705 1335h335l134 -1335h-293l-17 336h-397l-158 -336h-309zM334 1450q34 149 116 222t193 73q48 0 91 -18.5t68 -41t53 -41t50 -18.5q61 0 92 100l191 -14q-34 -149 -116 -222t-193 -73q-48 0 -91 18.5t-68 41t-53 41t-49 18.5q-64 0 -94 -100zM440 547h287 l-8 176q-15 329 -17 397h-8q-116 -279 -172 -397z" />
<glyph unicode="&#xc4;" horiz-adv-x="1122" d="M-127 0l705 1335h335l134 -1335h-293l-17 336h-397l-158 -336h-309zM414 1554q0 58 44 106t107 48q48 0 82.5 -32t34.5 -85q0 -59 -44 -107t-106 -48q-52 0 -85 32t-33 86zM440 547h287l-8 176q-15 329 -17 397h-8q-116 -279 -172 -397zM846 1554q0 58 43.5 106t105.5 48 q49 0 83 -31.5t34 -85.5q0 -59 -43.5 -107t-105.5 -48q-51 0 -84 32t-33 86z" />
<glyph unicode="&#xc5;" horiz-adv-x="1122" d="M-127 0l705 1335h335l134 -1335h-293l-17 336h-397l-158 -336h-309zM440 547h287l-8 176q-15 329 -17 397h-8q-116 -279 -172 -397zM539 1604q0 91 74.5 157t177.5 66q93 0 156 -44.5t63 -129.5q0 -95 -73.5 -160.5t-178.5 -65.5q-94 0 -156.5 45t-62.5 132zM688 1614 q0 -33 20 -55.5t54 -22.5q39 0 68.5 31t29.5 75q0 32 -20 54t-54 22q-39 0 -68.5 -32t-29.5 -72z" />
<glyph unicode="&#xc6;" horiz-adv-x="1716" d="M-72 0l865 1335h962l-47 -235h-496l-55 -291h418l-47 -236h-416l-72 -337h514l-47 -236h-792l63 317h-342l-192 -317h-316zM567 537h254l119 596h-6q-47 -76 -129 -208t-109 -175z" />
<glyph unicode="&#xc7;" horiz-adv-x="1161" d="M115 535q0 227 93.5 416.5t257 299t359.5 109.5q115 0 207 -56t150 -157l-193 -148q-73 117 -178 117q-111 0 -205.5 -78.5t-148.5 -208t-54 -276.5q0 -336 279 -336q106 0 227 102l117 -180q-153 -144 -354 -162l-64 -102q76 -19 107 -53.5t24 -95.5q-33 -202 -442 -215 v120q116 4 166.5 26t58.5 67q3 33 -27 52.5t-114 30.5l121 181q-182 36 -284.5 179t-102.5 368z" />
<glyph unicode="&#xc8;" horiz-adv-x="1079" d="M57 0l269 1335h790l-45 -235h-514l-57 -291h436l-45 -236h-436l-70 -337h530l-45 -236h-813zM477 1659l193 178l301 -315l-158 -138z" />
<glyph unicode="&#xc9;" horiz-adv-x="1079" d="M57 0l269 1335h790l-45 -235h-514l-57 -291h436l-45 -236h-436l-70 -337h530l-45 -236h-813zM584 1567l399 254l125 -207l-418 -209z" />
<glyph unicode="&#xca;" horiz-adv-x="1079" d="M57 0l269 1335h790l-45 -235h-514l-57 -291h436l-45 -236h-436l-70 -337h530l-45 -236h-813zM410 1493l223 217h328l143 -227l-137 -78l-176 170h-9l-256 -172z" />
<glyph unicode="&#xcb;" horiz-adv-x="1079" d="M57 0l269 1335h790l-45 -235h-514l-57 -291h436l-45 -236h-436l-70 -337h530l-45 -236h-813zM420 1554q0 58 44 106t107 48q48 0 82.5 -32t34.5 -85q0 -59 -43.5 -107t-105.5 -48q-52 0 -85.5 32t-33.5 86zM852 1554q0 58 43.5 106t105.5 48q49 0 83 -31.5t34 -85.5 q0 -59 -43.5 -107t-105.5 -48q-51 0 -84 32t-33 86z" />
<glyph unicode="&#xcc;" horiz-adv-x="602" d="M57 0l269 1335h280l-266 -1335h-283zM197 1659l192 178l301 -315l-158 -138z" />
<glyph unicode="&#xcd;" horiz-adv-x="602" d="M57 0l269 1335h280l-266 -1335h-283zM303 1567l399 254l125 -207l-417 -209z" />
<glyph unicode="&#xce;" horiz-adv-x="602" d="M57 0l269 1335h280l-266 -1335h-283zM129 1493l223 217h328l143 -227l-137 -78l-176 170h-8l-256 -172z" />
<glyph unicode="&#xcf;" horiz-adv-x="602" d="M57 0l269 1335h280l-266 -1335h-283zM139 1554q0 58 44 106t108 48q48 0 82.5 -32t34.5 -85q0 -59 -44 -107t-106 -48q-52 0 -85.5 32t-33.5 86zM571 1554q0 58 44 106t106 48q49 0 83 -31.5t34 -85.5q0 -59 -44 -107t-106 -48q-51 0 -84 32t-33 86z" />
<glyph unicode="&#xd0;" horiz-adv-x="1298" d="M78 629l24 127l146 10l114 569h293q284 0 437 -132t153 -392q0 -194 -54.5 -348t-152 -255t-231.5 -154.5t-295 -53.5h-418l127 629h-143zM422 225h84q202 0 327 144t125 424q0 160 -82 238.5t-227 78.5h-53l-68 -344h256l-30 -137h-252z" />
<glyph unicode="&#xd1;" horiz-adv-x="1316" d="M57 0l269 1335h272l217 -696l72 -293h8q3 27 12.5 139.5t19 193.5t23.5 150l103 506h266l-266 -1335h-271l-219 694l-67 297h-9q-32 -347 -59 -479l-102 -512h-269zM440 1450q34 149 116.5 222t193.5 73q48 0 91 -18.5t68 -41t53 -41t50 -18.5q61 0 92 100l190 -14 q-34 -149 -116 -222t-193 -73q-48 0 -90.5 18.5t-67.5 41t-53 41t-49 18.5q-64 0 -94 -100z" />
<glyph unicode="&#xd2;" horiz-adv-x="1351" d="M117 541q0 172 55.5 326t148 261t216.5 169.5t258 62.5q230 0 365.5 -150.5t135.5 -414.5q0 -172 -55.5 -326t-147.5 -261.5t-216.5 -170t-258.5 -62.5q-231 0 -366 150.5t-135 415.5zM403 559q0 -161 60 -251.5t170 -90.5q70 0 138.5 44.5t121 118.5t85 178.5 t32.5 217.5q0 161 -59.5 250.5t-168.5 89.5q-70 0 -139 -44t-122 -118t-85.5 -178t-32.5 -217zM584 1659l192 178l301 -315l-157 -138z" />
<glyph unicode="&#xd3;" horiz-adv-x="1351" d="M117 541q0 172 55.5 326t148 261t216.5 169.5t258 62.5q230 0 365.5 -150.5t135.5 -414.5q0 -172 -55.5 -326t-147.5 -261.5t-216.5 -170t-258.5 -62.5q-231 0 -366 150.5t-135 415.5zM403 559q0 -161 60 -251.5t170 -90.5q70 0 138.5 44.5t121 118.5t85 178.5 t32.5 217.5q0 161 -59.5 250.5t-168.5 89.5q-70 0 -139 -44t-122 -118t-85.5 -178t-32.5 -217zM690 1567l400 254l124 -207l-417 -209z" />
<glyph unicode="&#xd4;" horiz-adv-x="1351" d="M117 541q0 172 55.5 326t148 261t216.5 169.5t258 62.5q230 0 365.5 -150.5t135.5 -414.5q0 -172 -55.5 -326t-147.5 -261.5t-216.5 -170t-258.5 -62.5q-231 0 -366 150.5t-135 415.5zM403 559q0 -161 60 -251.5t170 -90.5q70 0 138.5 44.5t121 118.5t85 178.5 t32.5 217.5q0 161 -59.5 250.5t-168.5 89.5q-70 0 -139 -44t-122 -118t-85.5 -178t-32.5 -217zM516 1493l223 217h328l143 -227l-137 -78l-176 170h-8l-256 -172z" />
<glyph unicode="&#xd5;" horiz-adv-x="1351" d="M117 541q0 172 55.5 326t148 261t216.5 169.5t258 62.5q230 0 365.5 -150.5t135.5 -414.5q0 -172 -55.5 -326t-147.5 -261.5t-216.5 -170t-258.5 -62.5q-231 0 -366 150.5t-135 415.5zM403 559q0 -161 60 -251.5t170 -90.5q70 0 138.5 44.5t121 118.5t85 178.5 t32.5 217.5q0 161 -59.5 250.5t-168.5 89.5q-70 0 -139 -44t-122 -118t-85.5 -178t-32.5 -217zM446 1450q34 149 116.5 222t193.5 73q48 0 91 -18.5t68 -41t53 -41t50 -18.5q61 0 92 100l190 -14q-34 -149 -116 -222t-193 -73q-48 0 -90.5 18.5t-67.5 41t-53 41t-49 18.5 q-64 0 -94 -100z" />
<glyph unicode="&#xd6;" horiz-adv-x="1351" d="M117 541q0 172 55.5 326t148 261t216.5 169.5t258 62.5q230 0 365.5 -150.5t135.5 -414.5q0 -172 -55.5 -326t-147.5 -261.5t-216.5 -170t-258.5 -62.5q-231 0 -366 150.5t-135 415.5zM403 559q0 -161 60 -251.5t170 -90.5q70 0 138.5 44.5t121 118.5t85 178.5 t32.5 217.5q0 161 -59.5 250.5t-168.5 89.5q-70 0 -139 -44t-122 -118t-85.5 -178t-32.5 -217zM526 1554q0 58 44 106t108 48q48 0 82.5 -32t34.5 -85q0 -59 -44 -107t-106 -48q-52 0 -85.5 32t-33.5 86zM958 1554q0 58 44 106t106 48q49 0 83 -31.5t34 -85.5 q0 -59 -44 -107t-106 -48q-51 0 -84 32t-33 86z" />
<glyph unicode="&#xd7;" d="M129 383l279 293l-279 293l137 137l281 -291l278 291l140 -137l-281 -293l281 -293l-140 -137l-278 293l-281 -293z" />
<glyph unicode="&#xd8;" horiz-adv-x="1351" d="M-20 33l198 205q-61 131 -61 303t55.5 326t148 261t216.5 169.5t258 62.5q214 0 346 -129l192 199l123 -115l-217 -225q57 -126 57 -295q0 -172 -55.5 -326t-147.5 -261.5t-216.5 -170t-258.5 -62.5q-208 0 -337 123l-175 -180zM403 559q0 -17 5 -84l540 557 q-62 84 -166 84q-70 0 -139 -44t-122 -118t-85.5 -178t-32.5 -217zM471 295q62 -78 162 -78q70 0 138.5 44.5t121 118.5t85 178.5t32.5 217.5q0 24 -4 74z" />
<glyph unicode="&#xd9;" horiz-adv-x="1316" d="M154 440q0 63 26 215l137 680h281l-145 -731q-17 -94 -17 -155q0 -117 47 -174.5t156 -57.5q97 0 160.5 81t99.5 263l156 774h274l-155 -770q-61 -305 -194 -447.5t-349 -142.5q-477 0 -477 465zM569 1659l193 178l301 -315l-158 -138z" />
<glyph unicode="&#xda;" horiz-adv-x="1316" d="M154 440q0 63 26 215l137 680h281l-145 -731q-17 -94 -17 -155q0 -117 47 -174.5t156 -57.5q97 0 160.5 81t99.5 263l156 774h274l-155 -770q-61 -305 -194 -447.5t-349 -142.5q-477 0 -477 465zM676 1567l399 254l125 -207l-418 -209z" />
<glyph unicode="&#xdb;" horiz-adv-x="1316" d="M154 440q0 63 26 215l137 680h281l-145 -731q-17 -94 -17 -155q0 -117 47 -174.5t156 -57.5q97 0 160.5 81t99.5 263l156 774h274l-155 -770q-61 -305 -194 -447.5t-349 -142.5q-477 0 -477 465zM502 1493l223 217h328l143 -227l-137 -78l-176 170h-9l-256 -172z" />
<glyph unicode="&#xdc;" horiz-adv-x="1316" d="M154 440q0 63 26 215l137 680h281l-145 -731q-17 -94 -17 -155q0 -117 47 -174.5t156 -57.5q97 0 160.5 81t99.5 263l156 774h274l-155 -770q-61 -305 -194 -447.5t-349 -142.5q-477 0 -477 465zM512 1554q0 58 44 106t108 48q48 0 82 -32t34 -85q0 -59 -43.5 -107 t-105.5 -48q-52 0 -85.5 32t-33.5 86zM944 1554q0 58 44 106t106 48q49 0 82.5 -31.5t33.5 -85.5q0 -59 -43.5 -107t-105.5 -48q-51 0 -84 32t-33 86z" />
<glyph unicode="&#xdd;" d="M164 1335h291l57 -321q8 -42 51 -293h8q83 157 164 297l187 317h301l-566 -852l-96 -483h-278l94 483zM520 1567l400 254l124 -207l-417 -209z" />
<glyph unicode="&#xde;" horiz-adv-x="1218" d="M57 0l269 1352h280l-43 -213h180q94 0 170 -20t135 -61t91 -111t32 -163q0 -109 -32.5 -197t-88.5 -147t-135 -99t-169 -57.5t-193 -17.5h-164l-53 -266h-279zM434 489h146q153 0 233 64.5t80 189.5q0 172 -209 172h-166z" />
<glyph unicode="&#xdf;" horiz-adv-x="1247" d="M29 0l209 1034q37 189 167 307.5t330 118.5q75 0 141.5 -18.5t121 -54.5t86.5 -96.5t32 -137.5q0 -64 -24 -117.5t-58 -89.5t-68.5 -67.5t-58.5 -64.5t-24 -66q0 -32 27.5 -65t66.5 -64.5t78 -69t66.5 -93.5t27.5 -122q0 -151 -111 -255t-272 -104q-168 0 -301 91 l115 186q97 -68 184 -68q56 0 90.5 33.5t34.5 87.5q0 28 -15.5 54t-40 48t-54 44.5t-59.5 47.5t-54.5 53t-40 66t-15.5 80q0 51 24.5 96.5t59 79.5l69 68t59 77.5t24.5 92.5q0 125 -121 125q-81 0 -137.5 -71.5t-81.5 -184.5l-197 -981h-280z" />
<glyph unicode="&#xe0;" horiz-adv-x="1130" d="M63 348q0 141 45.5 270.5t120.5 221t174 146t203 54.5q70 0 131 -36t90 -97h4l46 109h223l-203 -1016h-227l4 133h-6q-70 -73 -154.5 -115.5t-163.5 -42.5q-135 0 -211 97.5t-76 275.5zM354 383q0 -178 119 -178q131 0 217 149l72 361q-23 48 -60 72t-75 24 q-108 0 -190.5 -124.5t-82.5 -303.5zM432 1516l240 178l248 -396l-172 -133z" />
<glyph unicode="&#xe1;" horiz-adv-x="1130" d="M63 348q0 141 45.5 270.5t120.5 221t174 146t203 54.5q70 0 131 -36t90 -97h4l46 109h223l-203 -1016h-227l4 133h-6q-70 -73 -154.5 -115.5t-163.5 -42.5q-135 0 -211 97.5t-76 275.5zM354 383q0 -178 119 -178q131 0 217 149l72 361q-23 48 -60 72t-75 24 q-108 0 -190.5 -124.5t-82.5 -303.5zM516 1343l379 340l168 -213l-424 -286z" />
<glyph unicode="&#xe2;" horiz-adv-x="1130" d="M63 348q0 141 45.5 270.5t120.5 221t174 146t203 54.5q70 0 131 -36t90 -97h4l46 109h223l-203 -1016h-227l4 133h-6q-70 -73 -154.5 -115.5t-163.5 -42.5q-135 0 -211 97.5t-76 275.5zM324 1262l266 262h307l176 -269l-127 -106l-215 197h-8l-303 -197zM354 383 q0 -178 119 -178q131 0 217 149l72 361q-23 48 -60 72t-75 24q-108 0 -190.5 -124.5t-82.5 -303.5z" />
<glyph unicode="&#xe3;" horiz-adv-x="1130" d="M63 348q0 141 45.5 270.5t120.5 221t174 146t203 54.5q70 0 131 -36t90 -97h4l46 109h223l-203 -1016h-227l4 133h-6q-70 -73 -154.5 -115.5t-163.5 -42.5q-135 0 -211 97.5t-76 275.5zM303 1202q26 156 101 233.5t190 77.5q46 0 85 -20.5t61.5 -45t52 -45t57.5 -20.5 q70 0 90 113l184 -10q-26 -155 -100.5 -233t-187.5 -78q-46 0 -85 21t-62.5 45.5t-53 45.5t-57.5 21q-32 0 -56.5 -28.5t-34.5 -86.5zM354 383q0 -178 119 -178q131 0 217 149l72 361q-23 48 -60 72t-75 24q-108 0 -190.5 -124.5t-82.5 -303.5z" />
<glyph unicode="&#xe4;" horiz-adv-x="1130" d="M63 348q0 141 45.5 270.5t120.5 221t174 146t203 54.5q70 0 131 -36t90 -97h4l46 109h223l-203 -1016h-227l4 133h-6q-70 -73 -154.5 -115.5t-163.5 -42.5q-135 0 -211 97.5t-76 275.5zM350 1292q0 62 45 108t109 46q52 0 86.5 -33.5t34.5 -89.5q0 -63 -45 -107.5 t-109 -44.5q-53 0 -87 32t-34 89zM354 383q0 -178 119 -178q131 0 217 149l72 361q-23 48 -60 72t-75 24q-108 0 -190.5 -124.5t-82.5 -303.5zM782 1292q0 62 44 108t108 46q53 0 87 -33.5t34 -89.5q0 -63 -44.5 -107.5t-109.5 -44.5q-53 0 -86 32t-33 89z" />
<glyph unicode="&#xe5;" horiz-adv-x="1130" d="M63 348q0 141 45.5 270.5t120.5 221t174 146t203 54.5q70 0 131 -36t90 -97h4l46 109h223l-203 -1016h-227l4 133h-6q-70 -73 -154.5 -115.5t-163.5 -42.5q-135 0 -211 97.5t-76 275.5zM354 383q0 -178 119 -178q131 0 217 149l72 361q-23 48 -60 72t-75 24 q-108 0 -190.5 -124.5t-82.5 -303.5zM453 1346q0 100 84.5 167.5t212.5 67.5q105 0 169 -48.5t64 -133.5q0 -101 -83.5 -168.5t-211.5 -67.5q-104 0 -169.5 49t-65.5 134zM631 1354q0 -37 19.5 -59.5t56.5 -22.5q40 0 70 36t30 83q0 34 -20.5 58t-55.5 24q-41 0 -70.5 -35.5 t-29.5 -83.5z" />
<glyph unicode="&#xe6;" horiz-adv-x="1544" d="M45 229q0 87 32 155.5t87.5 114t135.5 75.5t170 44.5t198 16.5q2 16 2 43q0 143 -138 143q-101 0 -260 -78l-61 195q206 102 391 102q187 0 250 -137q66 66 144.5 101.5t156.5 35.5q89 0 154.5 -29.5t103.5 -82.5t56 -120t18 -149q0 -64 -17.5 -132t-33.5 -99h-557 q-9 -117 48.5 -179.5t159.5 -62.5q84 0 185 72l100 -176q-146 -107 -346 -107q-104 0 -191.5 47t-130.5 119q-96 -83 -188 -124.5t-197 -41.5q-118 0 -195 69.5t-77 184.5zM317 285q0 -44 31.5 -69.5t81.5 -25.5q100 0 203 121q-10 79 -2 154q-155 -4 -234.5 -52.5 t-79.5 -127.5zM899 600h348q8 62 8 76q0 67 -32.5 108t-104.5 41q-67 0 -127.5 -58.5t-91.5 -166.5z" />
<glyph unicode="&#xe7;" horiz-adv-x="907" d="M59 393q0 174 79 322.5t217 236.5t302 88q88 0 159 -36t114 -89l-156 -165q-62 65 -135 65q-121 0 -207 -122.5t-86 -293.5q0 -94 43.5 -146t128.5 -52q77 0 162 65l117 -172q-141 -106 -291 -117l-64 -102q76 -19 107 -53.5t24 -95.5q-33 -202 -442 -215v120 q116 4 166.5 26t58.5 67q3 33 -27 52.5t-114 30.5l123 185q-127 33 -203 138.5t-76 262.5z" />
<glyph unicode="&#xe8;" horiz-adv-x="1015" d="M59 410q0 136 50.5 256.5t131.5 200.5t181.5 126.5t202.5 46.5q88 0 153.5 -29.5t103.5 -82.5t56 -120t18 -149q0 -64 -18 -131.5t-35 -99.5h-577q-6 -121 57.5 -181.5t169.5 -60.5q83 0 188 72l99 -176q-154 -107 -365 -107q-187 0 -301.5 117.5t-114.5 317.5zM348 600 h369q10 33 10 76q0 67 -32.5 108t-104.5 41q-76 0 -143 -58.5t-99 -166.5zM412 1516l239 178l248 -396l-172 -133z" />
<glyph unicode="&#xe9;" horiz-adv-x="1015" d="M59 410q0 136 50.5 256.5t131.5 200.5t181.5 126.5t202.5 46.5q88 0 153.5 -29.5t103.5 -82.5t56 -120t18 -149q0 -64 -18 -131.5t-35 -99.5h-577q-6 -121 57.5 -181.5t169.5 -60.5q83 0 188 72l99 -176q-154 -107 -365 -107q-187 0 -301.5 117.5t-114.5 317.5zM348 600 h369q10 33 10 76q0 67 -32.5 108t-104.5 41q-76 0 -143 -58.5t-99 -166.5zM496 1343l378 340l168 -213l-424 -286z" />
<glyph unicode="&#xea;" horiz-adv-x="1015" d="M59 410q0 136 50.5 256.5t131.5 200.5t181.5 126.5t202.5 46.5q88 0 153.5 -29.5t103.5 -82.5t56 -120t18 -149q0 -64 -18 -131.5t-35 -99.5h-577q-6 -121 57.5 -181.5t169.5 -60.5q83 0 188 72l99 -176q-154 -107 -365 -107q-187 0 -301.5 117.5t-114.5 317.5zM303 1262 l266 262h308l176 -269l-127 -106l-215 197h-9l-303 -197zM348 600h369q10 33 10 76q0 67 -32.5 108t-104.5 41q-76 0 -143 -58.5t-99 -166.5z" />
<glyph unicode="&#xeb;" horiz-adv-x="1015" d="M59 410q0 136 50.5 256.5t131.5 200.5t181.5 126.5t202.5 46.5q88 0 153.5 -29.5t103.5 -82.5t56 -120t18 -149q0 -64 -18 -131.5t-35 -99.5h-577q-6 -121 57.5 -181.5t169.5 -60.5q83 0 188 72l99 -176q-154 -107 -365 -107q-187 0 -301.5 117.5t-114.5 317.5zM330 1292 q0 62 44.5 108t108.5 46q52 0 86.5 -33.5t34.5 -89.5q0 -63 -44.5 -107.5t-108.5 -44.5q-53 0 -87 32t-34 89zM348 600h369q10 33 10 76q0 67 -32.5 108t-104.5 41q-76 0 -143 -58.5t-99 -166.5zM762 1292q0 62 43.5 108t107.5 46q53 0 87 -33.5t34 -89.5q0 -64 -44 -108 t-109 -44q-53 0 -86 32t-33 89z" />
<glyph unicode="&#xec;" horiz-adv-x="542" d="M29 0l204 1016h279l-203 -1016h-280zM150 1516l239 178l248 -396l-172 -133z" />
<glyph unicode="&#xed;" horiz-adv-x="542" d="M29 0l204 1016h279l-203 -1016h-280zM233 1343l379 340l168 -213l-424 -286z" />
<glyph unicode="&#xee;" horiz-adv-x="542" d="M29 0l204 1016h279l-203 -1016h-280zM41 1262l266 262h307l177 -269l-127 -106l-215 197h-9l-303 -197z" />
<glyph unicode="&#xef;" horiz-adv-x="542" d="M29 0l204 1016h279l-203 -1016h-280zM68 1292q0 62 44.5 108t108.5 46q52 0 86.5 -33.5t34.5 -89.5q0 -63 -45 -107.5t-109 -44.5q-53 0 -86.5 32t-33.5 89zM500 1292q0 62 43.5 108t107.5 46q53 0 87 -33.5t34 -89.5q0 -63 -44 -107.5t-110 -44.5q-52 0 -85 32t-33 89z " />
<glyph unicode="&#xf0;" horiz-adv-x="1099" d="M70 373q0 103 32 201.5t90 179t148.5 129.5t198.5 49q63 0 118 -28.5t88 -82.5q-15 165 -94 291l-297 -119l-53 133l254 103q-70 67 -164 125l129 162q163 -90 262 -197l297 119l54 -133l-256 -103q135 -206 135 -473q0 -114 -21.5 -222t-66.5 -204.5t-109 -169.5 t-156.5 -115.5t-201.5 -42.5q-165 0 -276 109.5t-111 288.5zM322 395q0 -85 42 -139.5t119 -54.5q106 0 176.5 114t88.5 297q-73 107 -175 107q-78 0 -137 -49t-86.5 -121.5t-27.5 -153.5z" />
<glyph unicode="&#xf1;" horiz-adv-x="1130" d="M29 0l200 1016h228l-4 -135h8q185 159 342 159q241 0 241 -260q0 -63 -16 -145l-127 -635h-280l120 600q2 12 7.5 34.5t7.5 36t2 25.5q0 105 -105 105q-46 0 -96 -31t-117 -100l-131 -670h-280zM360 1202q26 156 101 233.5t190 77.5q46 0 85 -20.5t61.5 -45t52 -45 t57.5 -20.5q70 0 90 113l185 -10q-26 -155 -101 -233t-188 -78q-46 0 -85 21t-62.5 45.5t-53 45.5t-57.5 21q-32 0 -56 -28.5t-34 -86.5z" />
<glyph unicode="&#xf2;" horiz-adv-x="1091" d="M61 393q0 115 32 218t87.5 180t128 134t155.5 86t167 29q177 0 285 -114t108 -303q0 -142 -49.5 -266t-130 -206t-182 -129t-207.5 -47q-178 0 -286 114.5t-108 303.5zM344 399q0 -94 36 -146t105 -52q104 0 180 119.5t76 295.5q0 95 -36.5 147t-106.5 52 q-103 0 -178.5 -120t-75.5 -296zM434 1516l240 178l248 -396l-172 -133z" />
<glyph unicode="&#xf3;" horiz-adv-x="1091" d="M61 393q0 115 32 218t87.5 180t128 134t155.5 86t167 29q177 0 285 -114t108 -303q0 -142 -49.5 -266t-130 -206t-182 -129t-207.5 -47q-178 0 -286 114.5t-108 303.5zM344 399q0 -94 36 -146t105 -52q104 0 180 119.5t76 295.5q0 95 -36.5 147t-106.5 52 q-103 0 -178.5 -120t-75.5 -296zM518 1343l379 340l168 -213l-424 -286z" />
<glyph unicode="&#xf4;" horiz-adv-x="1091" d="M61 393q0 115 32 218t87.5 180t128 134t155.5 86t167 29q177 0 285 -114t108 -303q0 -142 -49.5 -266t-130 -206t-182 -129t-207.5 -47q-178 0 -286 114.5t-108 303.5zM326 1262l266 262h307l176 -269l-127 -106l-215 197h-8l-303 -197zM344 399q0 -94 36 -146t105 -52 q104 0 180 119.5t76 295.5q0 95 -36.5 147t-106.5 52q-103 0 -178.5 -120t-75.5 -296z" />
<glyph unicode="&#xf5;" horiz-adv-x="1091" d="M61 393q0 115 32 218t87.5 180t128 134t155.5 86t167 29q177 0 285 -114t108 -303q0 -142 -49.5 -266t-130 -206t-182 -129t-207.5 -47q-178 0 -286 114.5t-108 303.5zM305 1202q26 156 101 233.5t190 77.5q46 0 85 -20.5t61.5 -45t52 -45t57.5 -20.5q70 0 90 113 l184 -10q-26 -155 -100.5 -233t-187.5 -78q-46 0 -85 21t-62.5 45.5t-53 45.5t-57.5 21q-32 0 -56.5 -28.5t-34.5 -86.5zM344 399q0 -94 36 -146t105 -52q104 0 180 119.5t76 295.5q0 95 -36.5 147t-106.5 52q-103 0 -178.5 -120t-75.5 -296z" />
<glyph unicode="&#xf6;" horiz-adv-x="1091" d="M61 393q0 115 32 218t87.5 180t128 134t155.5 86t167 29q177 0 285 -114t108 -303q0 -142 -49.5 -266t-130 -206t-182 -129t-207.5 -47q-178 0 -286 114.5t-108 303.5zM344 399q0 -94 36 -146t105 -52q104 0 180 119.5t76 295.5q0 95 -36.5 147t-106.5 52 q-103 0 -178.5 -120t-75.5 -296zM352 1292q0 62 45 108t109 46q52 0 86.5 -33.5t34.5 -89.5q0 -63 -45 -107.5t-109 -44.5q-53 0 -87 32t-34 89zM784 1292q0 62 44 108t108 46q53 0 87 -33.5t34 -89.5q0 -63 -44.5 -107.5t-109.5 -44.5q-53 0 -86 32t-33 89z" />
<glyph unicode="&#xf7;" d="M98 578v198h895v-198h-895zM391 303q0 63 45 106.5t111 43.5q65 0 110 -43.5t45 -106.5q0 -65 -44.5 -106t-110.5 -41q-67 0 -111.5 41t-44.5 106zM391 1049q0 63 45 105t111 42q65 0 110 -42t45 -105q0 -65 -45 -108.5t-110 -43.5q-66 0 -111 43t-45 109z" />
<glyph unicode="&#xf8;" horiz-adv-x="1091" d="M0 33l121 123q-60 97 -60 237q0 115 32 218t87.5 180t128 134t155.5 86t167 29q156 0 262 -92l111 115l90 -80l-125 -129q55 -96 55 -231q0 -143 -49.5 -267t-130 -206t-182 -128.5t-207.5 -46.5q-151 0 -256 88l-111 -114zM324 399q0 -22 2 -32l391 403q-39 51 -109 51 q-86 0 -153 -66t-99 -160.5t-32 -195.5zM371 240q39 -45 104 -45q89 0 156.5 65t99 158t31.5 194q0 21 -2 29z" />
<glyph unicode="&#xf9;" horiz-adv-x="1116" d="M80 238q0 61 16 143l127 635h279l-119 -600q-16 -66 -16 -97q0 -104 102 -104q87 0 203 131l131 670h280l-200 -1016h-228l4 137h-8q-173 -162 -332 -162q-124 0 -181.5 66.5t-57.5 196.5zM428 1516l240 178l247 -396l-172 -133z" />
<glyph unicode="&#xfa;" horiz-adv-x="1116" d="M80 238q0 61 16 143l127 635h279l-119 -600q-16 -66 -16 -97q0 -104 102 -104q87 0 203 131l131 670h280l-200 -1016h-228l4 137h-8q-173 -162 -332 -162q-124 0 -181.5 66.5t-57.5 196.5zM512 1343l379 340l168 -213l-424 -286z" />
<glyph unicode="&#xfb;" horiz-adv-x="1116" d="M80 238q0 61 16 143l127 635h279l-119 -600q-16 -66 -16 -97q0 -104 102 -104q87 0 203 131l131 670h280l-200 -1016h-228l4 137h-8q-173 -162 -332 -162q-124 0 -181.5 66.5t-57.5 196.5zM319 1262l267 262h307l176 -269l-127 -106l-215 197h-8l-303 -197z" />
<glyph unicode="&#xfc;" horiz-adv-x="1116" d="M80 238q0 61 16 143l127 635h279l-119 -600q-16 -66 -16 -97q0 -104 102 -104q87 0 203 131l131 670h280l-200 -1016h-228l4 137h-8q-173 -162 -332 -162q-124 0 -181.5 66.5t-57.5 196.5zM346 1292q0 62 45 108t109 46q52 0 86.5 -33.5t34.5 -89.5q0 -63 -45 -107.5 t-109 -44.5q-53 0 -87 32t-34 89zM778 1292q0 62 44 108t108 46q53 0 87 -33.5t34 -89.5q0 -63 -44.5 -107.5t-109.5 -44.5q-53 0 -86 32t-33 89z" />
<glyph unicode="&#xfd;" horiz-adv-x="1021" d="M-72 -356l86 200q33 -20 76 -20q55 0 107 39.5t86 107.5l24 52l-176 993h279l47 -459q14 -125 18 -305h8q19 42 65.5 149t69.5 156l213 459h273l-549 -1039q-112 -194 -221.5 -284t-259.5 -90q-28 0 -72 12t-74 29zM449 1343l378 340l168 -213l-424 -286z" />
<glyph unicode="&#xfe;" horiz-adv-x="1132" d="M-47 -377l364 1813h281l-68 -326l-51 -190h4q146 120 295 120q136 0 211.5 -96.5t75.5 -275.5q0 -188 -77 -349t-201.5 -252.5t-262.5 -91.5q-64 0 -118.5 32t-88.5 89h-4l-28 -198l-52 -275h-280zM371 299q44 -94 133 -94q108 0 190 124.5t82 303.5q0 90 -31.5 134 t-87.5 44q-54 0 -110.5 -31t-97.5 -96z" />
<glyph unicode="&#xff;" horiz-adv-x="1021" d="M-72 -356l86 200q33 -20 76 -20q55 0 107 39.5t86 107.5l24 52l-176 993h279l47 -459q14 -125 18 -305h8q19 42 65.5 149t69.5 156l213 459h273l-549 -1039q-112 -194 -221.5 -284t-259.5 -90q-28 0 -72 12t-74 29zM283 1292q0 62 44.5 108t108.5 46q52 0 86.5 -33.5 t34.5 -89.5q0 -63 -45 -107.5t-109 -44.5q-53 0 -86.5 32t-33.5 89zM715 1292q0 62 43.5 108t107.5 46q53 0 87 -33.5t34 -89.5q0 -64 -44 -108t-109 -44q-53 0 -86 32t-33 89z" />
<glyph unicode="&#x152;" horiz-adv-x="1705" d="M117 524q0 193 54.5 348t152.5 255.5t232.5 154t295.5 53.5h893l-47 -235h-488l-57 -291h412l-47 -236h-410l-70 -337h506l-47 -236h-790q-284 0 -437 132t-153 392zM403 543q0 -160 82.5 -239t229.5 -79h43l176 885h-76q-98 0 -180 -34.5t-144 -102.5t-96.5 -178 t-34.5 -252z" />
<glyph unicode="&#x153;" horiz-adv-x="1634" d="M61 393q0 114 31.5 217.5t86 180.5t124.5 134t149.5 86t159.5 29q109 0 178.5 -48.5t110.5 -145.5q69 92 160 143t180 51t154.5 -29.5t103.5 -82.5t56 -120t18 -149q0 -64 -17.5 -132t-33.5 -99h-555q-4 -122 52.5 -182t151.5 -60q86 0 187 72l100 -176 q-154 -107 -364 -107q-97 0 -173.5 52.5t-117.5 150.5q-72 -96 -168.5 -149.5t-196.5 -53.5q-170 0 -273.5 114.5t-103.5 303.5zM344 399q0 -94 36 -146t105 -52q97 0 167.5 119.5t70.5 295.5q0 95 -35.5 147t-105.5 52q-92 0 -165 -121.5t-73 -294.5zM989 600h346 q8 40 8 76q0 67 -32 108t-103 41q-69 0 -129 -58.5t-90 -166.5z" />
<glyph unicode="&#x178;" d="M164 1335h291l57 -321q8 -42 51 -293h8q83 157 164 297l187 317h301l-566 -852l-96 -483h-278l94 483zM356 1554q0 58 44 106t108 48q48 0 82.5 -32t34.5 -85q0 -59 -44 -107t-106 -48q-52 0 -85.5 32t-33.5 86zM788 1554q0 58 44 106t106 48q49 0 83 -31.5t34 -85.5 q0 -59 -44 -107t-106 -48q-51 0 -84 32t-33 86z" />
<glyph unicode="&#x2c6;" horiz-adv-x="1093" d="M326 1262l266 262h307l176 -269l-127 -106l-215 197h-8l-303 -197z" />
<glyph unicode="&#x2dc;" horiz-adv-x="1093" d="M305 1202q26 156 101 233.5t190 77.5q46 0 85 -20.5t61.5 -45t52 -45t57.5 -20.5q70 0 90 113l184 -10q-26 -155 -100.5 -233t-187.5 -78q-46 0 -85 21t-62.5 45.5t-53 45.5t-57.5 21q-32 0 -56.5 -28.5t-34.5 -86.5z" />
<glyph unicode="&#x2000;" horiz-adv-x="918" />
<glyph unicode="&#x2001;" horiz-adv-x="1837" />
<glyph unicode="&#x2002;" horiz-adv-x="918" />
<glyph unicode="&#x2003;" horiz-adv-x="1837" />
<glyph unicode="&#x2004;" horiz-adv-x="612" />
<glyph unicode="&#x2005;" horiz-adv-x="459" />
<glyph unicode="&#x2006;" horiz-adv-x="306" />
<glyph unicode="&#x2007;" horiz-adv-x="306" />
<glyph unicode="&#x2008;" horiz-adv-x="229" />
<glyph unicode="&#x2009;" horiz-adv-x="367" />
<glyph unicode="&#x200a;" horiz-adv-x="102" />
<glyph unicode="&#x2010;" horiz-adv-x="655" d="M68 420l43 198h479l-43 -198h-479z" />
<glyph unicode="&#x2011;" horiz-adv-x="655" d="M68 420l43 198h479l-43 -198h-479z" />
<glyph unicode="&#x2012;" horiz-adv-x="655" d="M68 420l43 198h479l-43 -198h-479z" />
<glyph unicode="&#x2013;" horiz-adv-x="950" d="M70 426l36 182h773l-37 -182h-772z" />
<glyph unicode="&#x2014;" horiz-adv-x="1579" d="M70 426l36 182h1403l-36 -182h-1403z" />
<glyph unicode="&#x2018;" horiz-adv-x="595" d="M199 924q0 175 99.5 294.5t252.5 167.5l45 -120q-105 -39 -169.5 -114t-64.5 -128h11q65 0 106 -34.5t41 -94.5q0 -69 -47.5 -118.5t-122.5 -49.5q-70 0 -110.5 52t-40.5 145z" />
<glyph unicode="&#x2019;" horiz-adv-x="595" d="M219 889q72 27 128.5 73.5t82 90.5t25.5 77h-13q-64 0 -104.5 35t-40.5 95q0 69 47 118t123 49q70 0 110.5 -52.5t40.5 -145.5q0 -174 -100.5 -295t-253.5 -168z" />
<glyph unicode="&#x201a;" horiz-adv-x="595" d="M2 -203q106 39 171 113.5t65 128.5h-13q-64 0 -104.5 34.5t-40.5 94.5q0 69 47.5 118.5t122.5 49.5q70 0 110.5 -53t40.5 -146q0 -174 -100.5 -295t-253.5 -168z" />
<glyph unicode="&#x201c;" horiz-adv-x="1044" d="M199 924q0 175 99.5 294.5t252.5 167.5l45 -120q-105 -39 -169.5 -114t-64.5 -128h11q65 0 106 -34.5t41 -94.5q0 -69 -47.5 -118.5t-122.5 -49.5q-70 0 -110.5 52t-40.5 145zM647 924q0 175 99.5 294.5t252.5 167.5l45 -120q-105 -39 -169 -114t-64 -128h10 q65 0 106.5 -34.5t41.5 -94.5q0 -69 -47.5 -118.5t-122.5 -49.5q-70 0 -111 52t-41 145z" />
<glyph unicode="&#x201d;" horiz-adv-x="1044" d="M219 889q72 27 128.5 73.5t82 90.5t25.5 77h-13q-64 0 -104.5 35t-40.5 95q0 69 47 118t123 49q70 0 110.5 -52.5t40.5 -145.5q0 -174 -100.5 -295t-253.5 -168zM668 889q106 39 170.5 113t64.5 128h-12q-64 0 -105 35t-41 95q0 69 47 118t123 49q70 0 111 -52.5 t41 -145.5q0 -174 -100.5 -295t-253.5 -168z" />
<glyph unicode="&#x201e;" horiz-adv-x="1044" d="M2 -203q106 39 171 113.5t65 128.5h-13q-64 0 -104.5 34.5t-40.5 94.5q0 69 47.5 118.5t122.5 49.5q70 0 110.5 -53t40.5 -146q0 -174 -100.5 -295t-253.5 -168zM451 -203q106 39 170.5 113.5t64.5 128.5h-12q-65 0 -105.5 34.5t-40.5 94.5q0 69 47.5 118.5t122.5 49.5 q70 0 111 -53t41 -146q0 -174 -100.5 -295t-253.5 -168z" />
<glyph unicode="&#x2022;" horiz-adv-x="675" d="M80 506q0 119 81 214t204 95q100 0 167.5 -69.5t67.5 -176.5q0 -119 -81 -214t-204 -95q-102 0 -168.5 69.5t-66.5 176.5z" />
<glyph unicode="&#x2026;" horiz-adv-x="1998" d="M143 127q0 79 57 143t144 64q64 0 103.5 -43.5t39.5 -110.5q0 -80 -56.5 -142.5t-143.5 -62.5q-64 0 -104 42t-40 110zM797 127q0 80 56.5 143.5t143.5 63.5q64 0 104 -43.5t40 -110.5q0 -80 -57 -142.5t-144 -62.5q-64 0 -103.5 42t-39.5 110zM1452 127q0 79 57 143 t144 64q64 0 103.5 -43.5t39.5 -110.5q0 -80 -57 -142.5t-144 -62.5q-64 0 -103.5 42t-39.5 110z" />
<glyph unicode="&#x202f;" horiz-adv-x="367" />
<glyph unicode="&#x2039;" horiz-adv-x="557" d="M82 424l37 201l313 284l86 -92l-272 -311l160 -316l-111 -71z" />
<glyph unicode="&#x203a;" horiz-adv-x="557" d="M55 211l273 311l-162 316l113 71l213 -305l-37 -201l-314 -284z" />
<glyph unicode="&#x205f;" horiz-adv-x="459" />
<glyph unicode="&#x20ac;" d="M33 459l28 133l103 8q8 74 16 113h-96l29 133l104 8q78 225 239.5 356t358.5 131q107 0 180 -51.5t129 -146.5l-200 -133q-26 54 -58 80t-80 26q-95 0 -169.5 -69t-118.5 -189h428l-29 -145h-438q-13 -77 -15 -111h353l-29 -143h-326q8 -125 60.5 -191.5t144.5 -66.5 q91 0 189 98l131 -166q-180 -158 -377 -158q-195 0 -308 126t-122 358h-127z" />
<glyph unicode="&#x2122;" horiz-adv-x="1335" d="M147 1221l33 163h529l-33 -163h-170l-94 -480h-183l95 480h-177zM668 741l123 643h208l41 -192l17 -148h8l63 148l121 192h211l-125 -643h-178l43 209l82 254h-8l-211 -368h-90l-70 368h-8l-12 -254l-43 -209h-172z" />
<glyph unicode="&#x25fc;" horiz-adv-x="1013" d="M0 0v1014h1014v-1014h-1014z" />
<glyph unicode="&#xfb01;" horiz-adv-x="1212" d="M74 0l162 797h-132l43 207l134 12l12 67q16 81 46.5 147.5t77.5 119t115.5 81.5t153.5 29q118 0 217 -55l-90 -199q-51 31 -98 31q-59 0 -93.5 -31.5t-48.5 -111.5l-14 -78h176l-43 -219h-180l-158 -797h-280zM698 0l205 1016h279l-203 -1016h-281zM944 1303 q0 68 51 116.5t123 48.5q62 0 107 -36t45 -99q0 -72 -50 -119t-124 -47q-62 0 -107 36t-45 100z" />
<glyph unicode="&#xfb02;" horiz-adv-x="1232" d="M74 0l162 797h-132l43 207l134 12l12 67q16 81 46.5 147.5t77.5 119t115.5 81.5t153.5 29q118 0 217 -55l-90 -199q-51 31 -98 31q-59 0 -93.5 -31.5t-48.5 -111.5l-14 -78h176l-43 -219h-180l-158 -797h-280zM745 174q0 48 15 125l227 1137h281l-232 -1149 q-4 -20 -4 -39q0 -47 39 -47q19 0 37 4l-8 -207q-67 -23 -150 -23q-205 0 -205 199z" />
<hkern u1="&#x2e;" u2="j" k="-6" />
<hkern u1="&#x3b;" u2="j" k="-92" />
<hkern g1="exclam" g2="quoteright,quotedblright" k="109" />
<hkern g1="exclamdown" g2="j" k="-102" />
<hkern g1="exclamdown" g2="V" k="74" />
<hkern g1="exclamdown" g2="W" k="37" />
<hkern g1="exclamdown" g2="Y,Yacute,Ydieresis" k="113" />
<hkern g1="periodcentered" g2="T" k="156" />
<hkern g1="periodcentered" g2="V" k="41" />
<hkern g1="periodcentered" g2="Y,Yacute,Ydieresis" k="133" />
<hkern g1="periodcentered" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="74" />
<hkern g1="periodcentered" g2="S" k="41" />
<hkern g1="periodcentered" g2="x" k="41" />
<hkern g1="periodcentered" g2="X" k="74" />
<hkern g1="periodcentered" g2="Z" k="82" />
<hkern g1="question" g2="quoteright,quotedblright" k="20" />
<hkern g1="questiondown" g2="j" k="-143" />
<hkern g1="questiondown" g2="T" k="197" />
<hkern g1="questiondown" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="180" />
<hkern g1="questiondown" g2="V" k="115" />
<hkern g1="questiondown" g2="W" k="78" />
<hkern g1="questiondown" g2="Y,Yacute,Ydieresis" k="156" />
<hkern g1="questiondown" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="180" />
<hkern g1="questiondown" g2="S" k="109" />
<hkern g1="questiondown" g2="X" k="74" />
<hkern g1="questiondown" g2="ae" k="53" />
<hkern g1="questiondown" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="53" />
<hkern g1="questiondown" g2="f,uniFB01,uniFB02" k="82" />
<hkern g1="questiondown" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="74" />
<hkern g1="slash" g2="j" k="-123" />
<hkern g1="slash" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="82" />
<hkern g1="slash" g2="ae" k="41" />
<hkern g1="slash" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="41" />
<hkern g1="slash" g2="J" k="164" />
<hkern g1="slash" g2="t" k="-41" />
<hkern g1="slash" g2="u,ugrave,uacute,ucircumflex,udieresis" k="41" />
<hkern g1="a,g,q,u,agrave,aacute,acircumflex,atilde,adieresis,aring,ugrave,uacute,ucircumflex,udieresis" g2="T" k="78" />
<hkern g1="a,g,q,u,agrave,aacute,acircumflex,atilde,adieresis,aring,ugrave,uacute,ucircumflex,udieresis" g2="V" k="20" />
<hkern g1="a,g,q,u,agrave,aacute,acircumflex,atilde,adieresis,aring,ugrave,uacute,ucircumflex,udieresis" g2="Y,Yacute,Ydieresis" k="78" />
<hkern g1="a,g,q,u,agrave,aacute,acircumflex,atilde,adieresis,aring,ugrave,uacute,ucircumflex,udieresis" g2="asterisk" k="205" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="quoteright,quotedblright" k="227" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="T" k="137" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="V" k="176" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="Y,Yacute,Ydieresis" k="131" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="asterisk" k="246" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="f,uniFB01,uniFB02" k="53" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="j" k="20" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="47" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="quotedbl,quotesingle" k="197" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="quoteleft,quotedblleft" k="174" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="S" k="20" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="t" k="53" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="u,ugrave,uacute,ucircumflex,udieresis" k="20" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="78" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="v" k="37" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="w" k="29" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="W" k="53" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="y,yacute,ydieresis" k="37" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="Z" k="20" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="backslash" k="82" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="periodcentered" k="74" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="question" k="176" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="registered" k="197" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="trademark" k="205" />
<hkern g1="B" g2="T" k="82" />
<hkern g1="B" g2="Y,Yacute,Ydieresis" k="74" />
<hkern g1="B" g2="asterisk" k="201" />
<hkern g1="B" g2="S" k="37" />
<hkern g1="B" g2="t" k="20" />
<hkern g1="B" g2="v" k="37" />
<hkern g1="B" g2="w" k="20" />
<hkern g1="B" g2="y,yacute,ydieresis" k="37" />
<hkern g1="B" g2="periodcentered" k="41" />
<hkern g1="B" g2="trademark" k="61" />
<hkern g1="B" g2="J" k="20" />
<hkern g1="B" g2="x" k="20" />
<hkern g1="colon,semicolon" g2="quoteright,quotedblright" k="74" />
<hkern g1="colon,semicolon" g2="T" k="137" />
<hkern g1="colon,semicolon" g2="Y,Yacute,Ydieresis" k="78" />
<hkern g1="colon,semicolon" g2="asterisk" k="131" />
<hkern g1="colon,semicolon" g2="j" k="-20" />
<hkern g1="colon,semicolon" g2="quoteleft,quotedblleft" k="74" />
<hkern g1="c,ccedilla" g2="T" k="78" />
<hkern g1="c,ccedilla" g2="V" k="37" />
<hkern g1="c,ccedilla" g2="Y,Yacute,Ydieresis" k="57" />
<hkern g1="c,ccedilla" g2="periodcentered" k="20" />
<hkern g1="c,ccedilla" g2="registered" k="-10" />
<hkern g1="c,ccedilla" g2="ae" k="20" />
<hkern g1="c,ccedilla" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="31" />
<hkern g1="c,ccedilla" g2="hyphen,uni00AD,endash,emdash" k="53" />
<hkern g1="C,Ccedilla" g2="T" k="41" />
<hkern g1="C,Ccedilla" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="176" />
<hkern g1="C,Ccedilla" g2="S" k="41" />
<hkern g1="C,Ccedilla" g2="t" k="37" />
<hkern g1="C,Ccedilla" g2="u,ugrave,uacute,ucircumflex,udieresis" k="20" />
<hkern g1="C,Ccedilla" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="37" />
<hkern g1="C,Ccedilla" g2="v" k="53" />
<hkern g1="C,Ccedilla" g2="w" k="53" />
<hkern g1="C,Ccedilla" g2="y,yacute,ydieresis" k="53" />
<hkern g1="C,Ccedilla" g2="Z" k="20" />
<hkern g1="C,Ccedilla" g2="periodcentered" k="154" />
<hkern g1="C,Ccedilla" g2="registered" k="-10" />
<hkern g1="C,Ccedilla" g2="trademark" k="-61" />
<hkern g1="C,Ccedilla" g2="J" k="20" />
<hkern g1="C,Ccedilla" g2="hyphen,uni00AD,endash,emdash" k="176" />
<hkern g1="C,Ccedilla" g2="guillemotleft,guilsinglleft" k="72" />
<hkern g1="hyphen,uni00AD,endash,emdash" g2="V" k="57" />
<hkern g1="hyphen,uni00AD,endash,emdash" g2="Y,Yacute,Ydieresis" k="174" />
<hkern g1="hyphen,uni00AD,endash,emdash" g2="Z" k="41" />
<hkern g1="hyphen,uni00AD,endash,emdash" g2="x" k="53" />
<hkern g1="hyphen,uni00AD,endash,emdash" g2="X" k="41" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="quoteright,quotedblright" k="121" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="T" k="176" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="V" k="37" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="Y,Yacute,Ydieresis" k="74" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="asterisk" k="176" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="37" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="S" k="41" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="t" k="39" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="v" k="37" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="w" k="37" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="W" k="20" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="y,yacute,ydieresis" k="37" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="backslash" k="20" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="periodcentered" k="74" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="registered" k="111" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="trademark" k="82" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="J" k="41" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="ae" k="31" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="hyphen,uni00AD,endash,emdash" k="-8" />
<hkern g1="e,ae,egrave,eacute,ecircumflex,edieresis,oe" g2="guillemotleft,guilsinglleft" k="57" />
<hkern g1="f" g2="quoteright,quotedblright" k="-49" />
<hkern g1="f" g2="T" k="-102" />
<hkern g1="f" g2="V" k="-102" />
<hkern g1="f" g2="Y,Yacute,Ydieresis" k="-102" />
<hkern g1="f" g2="quotedbl,quotesingle" k="-82" />
<hkern g1="f" g2="quoteleft,quotedblleft" k="-49" />
<hkern g1="f" g2="W" k="-102" />
<hkern g1="f" g2="backslash" k="-164" />
<hkern g1="f" g2="periodcentered" k="8" />
<hkern g1="f" g2="question" k="-61" />
<hkern g1="f" g2="registered" k="-117" />
<hkern g1="f" g2="trademark" k="-168" />
<hkern g1="f" g2="ae" k="41" />
<hkern g1="f" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="20" />
<hkern g1="f" g2="hyphen,uni00AD,endash,emdash" k="20" />
<hkern g1="f" g2="X" k="-82" />
<hkern g1="f" g2="parenright,bracketright,braceright" k="-90" />
<hkern g1="f" g2="comma,period,ellipsis" k="182" />
<hkern g1="f" g2="exclam" k="-61" />
<hkern g1="f" g2="slash" k="41" />
<hkern g1="F" g2="V" k="33" />
<hkern g1="F" g2="Y,Yacute,Ydieresis" k="33" />
<hkern g1="F" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="20" />
<hkern g1="F" g2="S" k="33" />
<hkern g1="F" g2="t" k="20" />
<hkern g1="F" g2="u,ugrave,uacute,ucircumflex,udieresis" k="31" />
<hkern g1="F" g2="v" k="20" />
<hkern g1="F" g2="w" k="20" />
<hkern g1="F" g2="W" k="16" />
<hkern g1="F" g2="y,yacute,ydieresis" k="20" />
<hkern g1="F" g2="Z" k="41" />
<hkern g1="F" g2="periodcentered" k="20" />
<hkern g1="F" g2="registered" k="-70" />
<hkern g1="F" g2="trademark" k="-70" />
<hkern g1="F" g2="J" k="287" />
<hkern g1="F" g2="x" k="41" />
<hkern g1="F" g2="ae" k="61" />
<hkern g1="F" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="20" />
<hkern g1="F" g2="guillemotleft,guilsinglleft" k="41" />
<hkern g1="F" g2="comma,period,ellipsis" k="156" />
<hkern g1="F" g2="slash" k="164" />
<hkern g1="F" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="90" />
<hkern g1="F" g2="m,n,p,r,ntilde" k="41" />
<hkern g1="F" g2="s" k="31" />
<hkern g1="F" g2="z" k="41" />
<hkern g1="germandbls" g2="quoteright,quotedblright" k="238" />
<hkern g1="germandbls" g2="quotedbl,quotesingle" k="195" />
<hkern g1="germandbls" g2="quoteleft,quotedblleft" k="150" />
<hkern g1="germandbls" g2="t" k="47" />
<hkern g1="germandbls" g2="v" k="57" />
<hkern g1="germandbls" g2="w" k="29" />
<hkern g1="germandbls" g2="y,yacute,ydieresis" k="57" />
<hkern g1="germandbls" g2="backslash" k="41" />
<hkern g1="germandbls" g2="question" k="72" />
<hkern g1="germandbls" g2="registered" k="141" />
<hkern g1="germandbls" g2="x" k="-25" />
<hkern g1="guillemotleft,guilsinglleft" g2="T" k="188" />
<hkern g1="guillemotleft,guilsinglleft" g2="V" k="109" />
<hkern g1="guillemotleft,guilsinglleft" g2="Y,Yacute,Ydieresis" k="150" />
<hkern g1="guillemotleft,guilsinglleft" g2="W" k="37" />
<hkern g1="guillemotleft,guilsinglleft" g2="Z" k="33" />
<hkern g1="guillemotleft,guilsinglleft" g2="x" k="16" />
<hkern g1="guillemotleft,guilsinglleft" g2="X" k="33" />
<hkern g1="guillemotright,guilsinglright" g2="T" k="172" />
<hkern g1="guillemotright,guilsinglright" g2="V" k="115" />
<hkern g1="guillemotright,guilsinglright" g2="Y,Yacute,Ydieresis" k="156" />
<hkern g1="guillemotright,guilsinglright" g2="S" k="61" />
<hkern g1="guillemotright,guilsinglright" g2="W" k="37" />
<hkern g1="guillemotright,guilsinglright" g2="Z" k="41" />
<hkern g1="guillemotright,guilsinglright" g2="J" k="61" />
<hkern g1="guillemotright,guilsinglright" g2="x" k="37" />
<hkern g1="G" g2="T" k="61" />
<hkern g1="G" g2="V" k="20" />
<hkern g1="G" g2="asterisk" k="90" />
<hkern g1="G" g2="registered" k="27" />
<hkern g1="h,m,n,ntilde" g2="quoteright,quotedblright" k="123" />
<hkern g1="h,m,n,ntilde" g2="T" k="57" />
<hkern g1="h,m,n,ntilde" g2="V" k="20" />
<hkern g1="h,m,n,ntilde" g2="Y,Yacute,Ydieresis" k="78" />
<hkern g1="h,m,n,ntilde" g2="asterisk" k="164" />
<hkern g1="h,m,n,ntilde" g2="trademark" k="41" />
<hkern g1="J" g2="J" k="82" />
<hkern g1="J" g2="comma,period,ellipsis" k="41" />
<hkern g1="k" g2="quoteright,quotedblright" k="109" />
<hkern g1="k" g2="T" k="53" />
<hkern g1="k" g2="Y,Yacute,Ydieresis" k="53" />
<hkern g1="k" g2="asterisk" k="123" />
<hkern g1="k" g2="j" k="20" />
<hkern g1="k" g2="t" k="20" />
<hkern g1="k" g2="u,ugrave,uacute,ucircumflex,udieresis" k="20" />
<hkern g1="k" g2="periodcentered" k="41" />
<hkern g1="k" g2="registered" k="12" />
<hkern g1="k" g2="trademark" k="41" />
<hkern g1="k" g2="x" k="12" />
<hkern g1="k" g2="ae" k="20" />
<hkern g1="k" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="53" />
<hkern g1="k" g2="hyphen,uni00AD,endash,emdash" k="109" />
<hkern g1="k" g2="guillemotleft,guilsinglleft" k="74" />
<hkern g1="k" g2="comma,period,ellipsis" k="-8" />
<hkern g1="K" g2="T" k="53" />
<hkern g1="K" g2="V" k="20" />
<hkern g1="K" g2="Y,Yacute,Ydieresis" k="53" />
<hkern g1="K" g2="asterisk" k="41" />
<hkern g1="K" g2="j" k="20" />
<hkern g1="K" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="74" />
<hkern g1="K" g2="quotedbl,quotesingle" k="172" />
<hkern g1="K" g2="S" k="20" />
<hkern g1="K" g2="t" k="57" />
<hkern g1="K" g2="u,ugrave,uacute,ucircumflex,udieresis" k="31" />
<hkern g1="K" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="37" />
<hkern g1="K" g2="W" k="20" />
<hkern g1="K" g2="periodcentered" k="150" />
<hkern g1="K" g2="registered" k="43" />
<hkern g1="K" g2="trademark" k="10" />
<hkern g1="K" g2="hyphen,uni00AD,endash,emdash" k="125" />
<hkern g1="K" g2="guillemotleft,guilsinglleft" k="172" />
<hkern g1="L" g2="quoteright,quotedblright" k="264" />
<hkern g1="L" g2="T" k="246" />
<hkern g1="L" g2="V" k="172" />
<hkern g1="L" g2="Y,Yacute,Ydieresis" k="211" />
<hkern g1="L" g2="asterisk" k="360" />
<hkern g1="L" g2="f,uniFB01,uniFB02" k="53" />
<hkern g1="L" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="129" />
<hkern g1="L" g2="quotedbl,quotesingle" k="346" />
<hkern g1="L" g2="quoteleft,quotedblleft" k="264" />
<hkern g1="L" g2="S" k="74" />
<hkern g1="L" g2="t" k="63" />
<hkern g1="L" g2="u,ugrave,uacute,ucircumflex,udieresis" k="20" />
<hkern g1="L" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="113" />
<hkern g1="L" g2="v" k="154" />
<hkern g1="L" g2="w" k="182" />
<hkern g1="L" g2="W" k="115" />
<hkern g1="L" g2="y,yacute,ydieresis" k="115" />
<hkern g1="L" g2="backslash" k="205" />
<hkern g1="L" g2="periodcentered" k="272" />
<hkern g1="L" g2="question" k="115" />
<hkern g1="L" g2="registered" k="272" />
<hkern g1="L" g2="trademark" k="313" />
<hkern g1="L" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="37" />
<hkern g1="L" g2="hyphen,uni00AD,endash,emdash" k="164" />
<hkern g1="L" g2="guillemotleft,guilsinglleft" k="82" />
<hkern g1="L" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="12" />
<hkern g1="b,o,p,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="quoteright,quotedblright" k="156" />
<hkern g1="b,o,p,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="T" k="139" />
<hkern g1="b,o,p,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="V" k="57" />
<hkern g1="b,o,p,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="Y,Yacute,Ydieresis" k="182" />
<hkern g1="b,o,p,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="quoteleft,quotedblleft" k="82" />
<hkern g1="b,o,p,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="v" k="51" />
<hkern g1="b,o,p,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="w" k="33" />
<hkern g1="b,o,p,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="y,yacute,ydieresis" k="51" />
<hkern g1="b,o,p,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="backslash" k="82" />
<hkern g1="b,o,p,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="x" k="53" />
<hkern g1="b,o,p,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="ae" k="31" />
<hkern g1="b,o,p,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="hyphen,uni00AD,endash,emdash" k="-41" />
<hkern g1="b,o,p,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="parenright,bracketright,braceright" k="33" />
<hkern g1="b,o,p,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="comma,period,ellipsis" k="20" />
<hkern g1="b,o,p,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="z" k="37" />
<hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="T" k="78" />
<hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="V" k="41" />
<hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="Y,Yacute,Ydieresis" k="57" />
<hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="asterisk" k="131" />
<hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="Z" k="20" />
<hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="registered" k="12" />
<hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="trademark" k="57" />
<hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="J" k="41" />
<hkern g1="D,O,Q,Eth,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash" g2="slash" k="41" />
<hkern g1="parenleft,bracketleft,braceleft" g2="j" k="-131" />
<hkern g1="comma,period,ellipsis" g2="quoteright,quotedblright" k="305" />
<hkern g1="comma,period,ellipsis" g2="T" k="238" />
<hkern g1="comma,period,ellipsis" g2="V" k="180" />
<hkern g1="comma,period,ellipsis" g2="Y,Yacute,Ydieresis" k="180" />
<hkern g1="comma,period,ellipsis" g2="asterisk" k="354" />
<hkern g1="comma,period,ellipsis" g2="j" k="-92" />
<hkern g1="comma,period,ellipsis" g2="quotedbl,quotesingle" k="305" />
<hkern g1="comma,period,ellipsis" g2="quoteleft,quotedblleft" k="264" />
<hkern g1="comma,period,ellipsis" g2="t" k="61" />
<hkern g1="comma,period,ellipsis" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="137" />
<hkern g1="comma,period,ellipsis" g2="v" k="109" />
<hkern g1="comma,period,ellipsis" g2="w" k="47" />
<hkern g1="comma,period,ellipsis" g2="W" k="61" />
<hkern g1="comma,period,ellipsis" g2="y,yacute,ydieresis" k="41" />
<hkern g1="comma,period,ellipsis" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="20" />
<hkern g1="P" g2="T" k="61" />
<hkern g1="P" g2="Y,Yacute,Ydieresis" k="37" />
<hkern g1="P" g2="S" k="20" />
<hkern g1="P" g2="Z" k="205" />
<hkern g1="P" g2="registered" k="-18" />
<hkern g1="P" g2="J" k="270" />
<hkern g1="P" g2="x" k="20" />
<hkern g1="P" g2="ae" k="61" />
<hkern g1="P" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="41" />
<hkern g1="P" g2="hyphen,uni00AD,endash,emdash" k="20" />
<hkern g1="P" g2="guillemotleft,guilsinglleft" k="20" />
<hkern g1="P" g2="X" k="57" />
<hkern g1="P" g2="comma,period,ellipsis" k="305" />
<hkern g1="P" g2="slash" k="201" />
<hkern g1="P" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="182" />
<hkern g1="P" g2="z" k="41" />
<hkern g1="quotedbl,quotesingle" g2="comma,period,ellipsis" k="264" />
<hkern g1="quotedbl,quotesingle" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="156" />
<hkern g1="quotedbl,quotesingle" g2="s" k="41" />
<hkern g1="quotesinglbase,quotedblbase" g2="T" k="238" />
<hkern g1="quotesinglbase,quotedblbase" g2="V" k="180" />
<hkern g1="quotesinglbase,quotedblbase" g2="Y,Yacute,Ydieresis" k="180" />
<hkern g1="quotesinglbase,quotedblbase" g2="asterisk" k="354" />
<hkern g1="quotesinglbase,quotedblbase" g2="j" k="-92" />
<hkern g1="quotesinglbase,quotedblbase" g2="t" k="61" />
<hkern g1="quotesinglbase,quotedblbase" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="137" />
<hkern g1="quotesinglbase,quotedblbase" g2="v" k="109" />
<hkern g1="quotesinglbase,quotedblbase" g2="w" k="47" />
<hkern g1="quotesinglbase,quotedblbase" g2="W" k="61" />
<hkern g1="quotesinglbase,quotedblbase" g2="y,yacute,ydieresis" k="41" />
<hkern g1="quotesinglbase,quotedblbase" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="20" />
<hkern g1="quoteleft,quotedblleft" g2="ae" k="82" />
<hkern g1="quoteleft,quotedblleft" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="82" />
<hkern g1="quoteleft,quotedblleft" g2="comma,period,ellipsis" k="223" />
<hkern g1="quoteleft,quotedblleft" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="174" />
<hkern g1="quoteleft,quotedblleft" g2="exclamdown" k="123" />
<hkern g1="quoteleft,quotedblleft" g2="questiondown" k="287" />
<hkern g1="quoteright,quotedblright" g2="ae" k="66" />
<hkern g1="quoteright,quotedblright" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="57" />
<hkern g1="quoteright,quotedblright" g2="comma,period,ellipsis" k="319" />
<hkern g1="quoteright,quotedblright" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="176" />
<hkern g1="quoteright,quotedblright" g2="s" k="82" />
<hkern g1="r" g2="quoteright,quotedblright" k="-8" />
<hkern g1="r" g2="quoteleft,quotedblleft" k="-49" />
<hkern g1="r" g2="Z" k="41" />
<hkern g1="r" g2="backslash" k="-41" />
<hkern g1="r" g2="registered" k="-63" />
<hkern g1="r" g2="trademark" k="-8" />
<hkern g1="r" g2="J" k="137" />
<hkern g1="r" g2="ae" k="43" />
<hkern g1="r" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="20" />
<hkern g1="r" g2="hyphen,uni00AD,endash,emdash" k="41" />
<hkern g1="r" g2="guillemotleft,guilsinglleft" k="41" />
<hkern g1="r" g2="comma,period,ellipsis" k="133" />
<hkern g1="r" g2="slash" k="82" />
<hkern g1="r" g2="z" k="20" />
<hkern g1="R" g2="T" k="66" />
<hkern g1="R" g2="V" k="20" />
<hkern g1="R" g2="Y,Yacute,Ydieresis" k="41" />
<hkern g1="R" g2="asterisk" k="37" />
<hkern g1="R" g2="S" k="29" />
<hkern g1="R" g2="Z" k="20" />
<hkern g1="R" g2="registered" k="-14" />
<hkern g1="R" g2="J" k="41" />
<hkern g1="R" g2="x" k="20" />
<hkern g1="R" g2="ae" k="20" />
<hkern g1="R" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="20" />
<hkern g1="R" g2="hyphen,uni00AD,endash,emdash" k="82" />
<hkern g1="R" g2="guillemotleft,guilsinglleft" k="57" />
<hkern g1="R" g2="X" k="20" />
<hkern g1="R" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="20" />
<hkern g1="R" g2="z" k="20" />
<hkern g1="s" g2="T" k="78" />
<hkern g1="s" g2="V" k="37" />
<hkern g1="s" g2="Y,Yacute,Ydieresis" k="57" />
<hkern g1="s" g2="asterisk" k="131" />
<hkern g1="s" g2="v" k="16" />
<hkern g1="s" g2="y,yacute,ydieresis" k="16" />
<hkern g1="s" g2="hyphen,uni00AD,endash,emdash" k="12" />
<hkern g1="S" g2="T" k="61" />
<hkern g1="S" g2="asterisk" k="61" />
<hkern g1="S" g2="S" k="20" />
<hkern g1="S" g2="periodcentered" k="20" />
<hkern g1="S" g2="registered" k="-8" />
<hkern g1="S" g2="J" k="20" />
<hkern g1="Thorn" g2="asterisk" k="137" />
<hkern g1="Thorn" g2="backslash" k="82" />
<hkern g1="Thorn" g2="trademark" k="115" />
<hkern g1="Thorn" g2="slash" k="90" />
<hkern g1="t" g2="T" k="41" />
<hkern g1="t" g2="u,ugrave,uacute,ucircumflex,udieresis" k="20" />
<hkern g1="t" g2="periodcentered" k="41" />
<hkern g1="t" g2="registered" k="-55" />
<hkern g1="t" g2="ae" k="41" />
<hkern g1="t" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="27" />
<hkern g1="t" g2="hyphen,uni00AD,endash,emdash" k="74" />
<hkern g1="t" g2="guillemotleft,guilsinglleft" k="41" />
<hkern g1="t" g2="comma,period,ellipsis" k="-8" />
<hkern g1="t" g2="slash" k="-41" />
<hkern g1="t" g2="colon,semicolon" k="-41" />
<hkern g1="T" g2="Y,Yacute,Ydieresis" k="20" />
<hkern g1="T" g2="f,uniFB01,uniFB02" k="49" />
<hkern g1="T" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="41" />
<hkern g1="T" g2="S" k="104" />
<hkern g1="T" g2="t" k="41" />
<hkern g1="T" g2="u,ugrave,uacute,ucircumflex,udieresis" k="205" />
<hkern g1="T" g2="v" k="82" />
<hkern g1="T" g2="w" k="82" />
<hkern g1="T" g2="y,yacute,ydieresis" k="82" />
<hkern g1="T" g2="Z" k="90" />
<hkern g1="T" g2="periodcentered" k="123" />
<hkern g1="T" g2="registered" k="-70" />
<hkern g1="T" g2="trademark" k="-82" />
<hkern g1="T" g2="J" k="250" />
<hkern g1="T" g2="x" k="82" />
<hkern g1="T" g2="ae" k="164" />
<hkern g1="T" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="164" />
<hkern g1="T" g2="hyphen,uni00AD,endash,emdash" k="205" />
<hkern g1="T" g2="guillemotleft,guilsinglleft" k="139" />
<hkern g1="T" g2="X" k="41" />
<hkern g1="T" g2="comma,period,ellipsis" k="238" />
<hkern g1="T" g2="slash" k="172" />
<hkern g1="T" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="137" />
<hkern g1="T" g2="m,n,p,r,ntilde" k="164" />
<hkern g1="T" g2="s" k="123" />
<hkern g1="T" g2="z" k="205" />
<hkern g1="T" g2="colon,semicolon" k="205" />
<hkern g1="T" g2="guillemotright,guilsinglright" k="156" />
<hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="V" k="20" />
<hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="Y,Yacute,Ydieresis" k="37" />
<hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="S" k="20" />
<hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="J" k="86" />
<hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="X" k="20" />
<hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="comma,period,ellipsis" k="20" />
<hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="slash" k="82" />
<hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="20" />
<hkern g1="v" g2="T" k="82" />
<hkern g1="v" g2="Y,Yacute,Ydieresis" k="41" />
<hkern g1="v" g2="asterisk" k="45" />
<hkern g1="v" g2="j" k="20" />
<hkern g1="v" g2="registered" k="-23" />
<hkern g1="v" g2="trademark" k="27" />
<hkern g1="v" g2="J" k="78" />
<hkern g1="v" g2="ae" k="41" />
<hkern g1="v" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="16" />
<hkern g1="v" g2="comma,period,ellipsis" k="109" />
<hkern g1="v" g2="slash" k="41" />
<hkern g1="v" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="37" />
<hkern g1="v" g2="z" k="37" />
<hkern g1="V" g2="f,uniFB01,uniFB02" k="31" />
<hkern g1="V" g2="S" k="41" />
<hkern g1="V" g2="u,ugrave,uacute,ucircumflex,udieresis" k="41" />
<hkern g1="V" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="20" />
<hkern g1="V" g2="Z" k="41" />
<hkern g1="V" g2="periodcentered" k="41" />
<hkern g1="V" g2="registered" k="-70" />
<hkern g1="V" g2="trademark" k="-61" />
<hkern g1="V" g2="J" k="180" />
<hkern g1="V" g2="x" k="74" />
<hkern g1="V" g2="ae" k="180" />
<hkern g1="V" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="74" />
<hkern g1="V" g2="hyphen,uni00AD,endash,emdash" k="176" />
<hkern g1="V" g2="guillemotleft,guilsinglleft" k="133" />
<hkern g1="V" g2="comma,period,ellipsis" k="174" />
<hkern g1="V" g2="slash" k="123" />
<hkern g1="V" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="176" />
<hkern g1="V" g2="m,n,p,r,ntilde" k="41" />
<hkern g1="V" g2="s" k="41" />
<hkern g1="V" g2="z" k="180" />
<hkern g1="V" g2="guillemotright,guilsinglright" k="133" />
<hkern g1="w" g2="T" k="82" />
<hkern g1="w" g2="Y,Yacute,Ydieresis" k="41" />
<hkern g1="w" g2="asterisk" k="61" />
<hkern g1="w" g2="j" k="20" />
<hkern g1="w" g2="registered" k="-29" />
<hkern g1="w" g2="trademark" k="27" />
<hkern g1="w" g2="J" k="61" />
<hkern g1="w" g2="ae" k="20" />
<hkern g1="w" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="16" />
<hkern g1="w" g2="comma,period,ellipsis" k="74" />
<hkern g1="w" g2="slash" k="20" />
<hkern g1="w" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="18" />
<hkern g1="w" g2="z" k="37" />
<hkern g1="W" g2="S" k="20" />
<hkern g1="W" g2="Z" k="20" />
<hkern g1="W" g2="registered" k="-51" />
<hkern g1="W" g2="trademark" k="-61" />
<hkern g1="W" g2="J" k="205" />
<hkern g1="W" g2="ae" k="41" />
<hkern g1="W" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="33" />
<hkern g1="W" g2="guillemotleft,guilsinglleft" k="53" />
<hkern g1="W" g2="comma,period,ellipsis" k="180" />
<hkern g1="W" g2="slash" k="82" />
<hkern g1="W" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="53" />
<hkern g1="W" g2="z" k="53" />
<hkern g1="W" g2="guillemotright,guilsinglright" k="53" />
<hkern g1="x" g2="T" k="182" />
<hkern g1="x" g2="V" k="20" />
<hkern g1="x" g2="Y,Yacute,Ydieresis" k="57" />
<hkern g1="x" g2="asterisk" k="82" />
<hkern g1="x" g2="periodcentered" k="41" />
<hkern g1="x" g2="registered" k="-23" />
<hkern g1="x" g2="trademark" k="-8" />
<hkern g1="x" g2="ae" k="20" />
<hkern g1="x" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="53" />
<hkern g1="x" g2="hyphen,uni00AD,endash,emdash" k="72" />
<hkern g1="x" g2="guillemotleft,guilsinglleft" k="37" />
<hkern g1="x" g2="guillemotright,guilsinglright" k="33" />
<hkern g1="X" g2="T" k="37" />
<hkern g1="X" g2="asterisk" k="-12" />
<hkern g1="X" g2="u,ugrave,uacute,ucircumflex,udieresis" k="37" />
<hkern g1="X" g2="periodcentered" k="182" />
<hkern g1="X" g2="registered" k="-90" />
<hkern g1="X" g2="trademark" k="-102" />
<hkern g1="X" g2="ae" k="45" />
<hkern g1="X" g2="hyphen,uni00AD,endash,emdash" k="176" />
<hkern g1="X" g2="guillemotleft,guilsinglleft" k="82" />
<hkern g1="X" g2="guillemotright,guilsinglright" k="74" />
<hkern g1="y,yacute,ydieresis" g2="T" k="82" />
<hkern g1="y,yacute,ydieresis" g2="Y,Yacute,Ydieresis" k="74" />
<hkern g1="y,yacute,ydieresis" g2="j" k="20" />
<hkern g1="y,yacute,ydieresis" g2="registered" k="-29" />
<hkern g1="y,yacute,ydieresis" g2="trademark" k="-8" />
<hkern g1="y,yacute,ydieresis" g2="J" k="78" />
<hkern g1="y,yacute,ydieresis" g2="ae" k="41" />
<hkern g1="y,yacute,ydieresis" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="16" />
<hkern g1="y,yacute,ydieresis" g2="comma,period,ellipsis" k="109" />
<hkern g1="y,yacute,ydieresis" g2="slash" k="41" />
<hkern g1="y,yacute,ydieresis" g2="z" k="20" />
<hkern g1="Y,Yacute,Ydieresis" g2="T" k="20" />
<hkern g1="Y,Yacute,Ydieresis" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="37" />
<hkern g1="Y,Yacute,Ydieresis" g2="S" k="20" />
<hkern g1="Y,Yacute,Ydieresis" g2="u,ugrave,uacute,ucircumflex,udieresis" k="61" />
<hkern g1="Y,Yacute,Ydieresis" g2="v" k="57" />
<hkern g1="Y,Yacute,Ydieresis" g2="w" k="57" />
<hkern g1="Y,Yacute,Ydieresis" g2="y,yacute,ydieresis" k="57" />
<hkern g1="Y,Yacute,Ydieresis" g2="Z" k="57" />
<hkern g1="Y,Yacute,Ydieresis" g2="periodcentered" k="82" />
<hkern g1="Y,Yacute,Ydieresis" g2="question" k="-8" />
<hkern g1="Y,Yacute,Ydieresis" g2="registered" k="-70" />
<hkern g1="Y,Yacute,Ydieresis" g2="trademark" k="-70" />
<hkern g1="Y,Yacute,Ydieresis" g2="J" k="201" />
<hkern g1="Y,Yacute,Ydieresis" g2="x" k="78" />
<hkern g1="Y,Yacute,Ydieresis" g2="ae" k="82" />
<hkern g1="Y,Yacute,Ydieresis" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="113" />
<hkern g1="Y,Yacute,Ydieresis" g2="hyphen,uni00AD,endash,emdash" k="156" />
<hkern g1="Y,Yacute,Ydieresis" g2="guillemotleft,guilsinglleft" k="160" />
<hkern g1="Y,Yacute,Ydieresis" g2="comma,period,ellipsis" k="197" />
<hkern g1="Y,Yacute,Ydieresis" g2="slash" k="164" />
<hkern g1="Y,Yacute,Ydieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="180" />
<hkern g1="Y,Yacute,Ydieresis" g2="m,n,p,r,ntilde" k="78" />
<hkern g1="Y,Yacute,Ydieresis" g2="s" k="182" />
<hkern g1="Y,Yacute,Ydieresis" g2="z" k="139" />
<hkern g1="Y,Yacute,Ydieresis" g2="colon,semicolon" k="37" />
<hkern g1="Y,Yacute,Ydieresis" g2="guillemotright,guilsinglright" k="145" />
<hkern g1="z" g2="T" k="61" />
<hkern g1="z" g2="V" k="20" />
<hkern g1="z" g2="Y,Yacute,Ydieresis" k="57" />
<hkern g1="z" g2="u,ugrave,uacute,ucircumflex,udieresis" k="41" />
<hkern g1="z" g2="periodcentered" k="20" />
<hkern g1="z" g2="registered" k="-23" />
<hkern g1="z" g2="ae" k="43" />
<hkern g1="z" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="20" />
<hkern g1="z" g2="hyphen,uni00AD,endash,emdash" k="20" />
<hkern g1="Z" g2="V" k="20" />
<hkern g1="Z" g2="Y,Yacute,Ydieresis" k="37" />
<hkern g1="Z" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="41" />
<hkern g1="Z" g2="S" k="61" />
<hkern g1="Z" g2="t" k="37" />
<hkern g1="Z" g2="u,ugrave,uacute,ucircumflex,udieresis" k="72" />
<hkern g1="Z" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="20" />
<hkern g1="Z" g2="v" k="57" />
<hkern g1="Z" g2="w" k="57" />
<hkern g1="Z" g2="W" k="20" />
<hkern g1="Z" g2="y,yacute,ydieresis" k="57" />
<hkern g1="Z" g2="Z" k="20" />
<hkern g1="Z" g2="periodcentered" k="123" />
<hkern g1="Z" g2="registered" k="-29" />
<hkern g1="Z" g2="trademark" k="-61" />
<hkern g1="Z" g2="J" k="61" />
<hkern g1="Z" g2="ae" k="31" />
<hkern g1="Z" g2="a,c,d,e,g,o,q,agrave,aacute,acircumflex,atilde,adieresis,aring,ccedilla,egrave,eacute,ecircumflex,edieresis,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="51" />
<hkern g1="Z" g2="hyphen,uni00AD,endash,emdash" k="182" />
<hkern g1="Z" g2="guillemotleft,guilsinglleft" k="133" />
<hkern g1="Z" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="41" />
</font>
</defs></svg>

Before

Width:  |  Height:  |  Size: 95 KiB

Some files were not shown because too many files have changed in this diff Show More