Showing preview only (2,600K chars total). Download the full file or copy to clipboard to get everything.
Repository: n8willis/opentype-shaping-documents
Branch: master
Commit: 8b6e9924c4ad
Files: 132
Total size: 2.5 MB
Directory structure:
gitextract_xxlse0rw/
├── .github/
│ └── workflows/
│ ├── build_html_output.yml
│ └── test_document_sources.yml
├── .gitignore
├── BUILD.md
├── Makefile
├── README.md
├── _ext/
│ ├── LICENSE.md
│ ├── README.md
│ ├── abbreviations.py
│ ├── colors.py
│ └── shapingdocs_svg_color_toggles.py
├── _global.md
├── _static/
│ ├── LICENSES_FOR_INCORPORATED_SOFTWARE.txt
│ ├── custom.css
│ ├── fonts/
│ │ ├── Source_Code_Pro/
│ │ │ ├── OFL.txt
│ │ │ └── README.txt
│ │ ├── Source_Sans_3/
│ │ │ ├── OFL.txt
│ │ │ └── README.txt
│ │ └── Source_Serif_4/
│ │ ├── OFL.txt
│ │ └── README.txt
│ ├── fontsizes.html
│ └── toggleSvgColors.js
├── _templates/
│ ├── layout.html
│ └── static_nav.html
├── _toc.yml
├── build-requirements.txt
├── character-tables/
│ ├── README.md
│ ├── character-tables-arabic.md
│ ├── character-tables-bengali.md
│ ├── character-tables-devanagari.md
│ ├── character-tables-gujarati.md
│ ├── character-tables-gurmukhi.md
│ ├── character-tables-hangul.md
│ ├── character-tables-hebrew.md
│ ├── character-tables-kannada.md
│ ├── character-tables-khmer.md
│ ├── character-tables-lao.md
│ ├── character-tables-malayalam.md
│ ├── character-tables-mongolian.md
│ ├── character-tables-myanmar.md
│ ├── character-tables-nko.md
│ ├── character-tables-oriya.md
│ ├── character-tables-sinhala.md
│ ├── character-tables-syriac.md
│ ├── character-tables-tamil.md
│ ├── character-tables-telugu.md
│ ├── character-tables-thai.md
│ ├── character-tables-tibetan.md
│ └── index.md
├── conf.py
├── errata.md
├── images/
│ ├── arabic/
│ │ ├── arabic-png-image-generation-log.md
│ │ └── arabic-svg-image-generation-log.md
│ ├── bengali/
│ │ ├── bengali-png-image-generation-log.md
│ │ └── bengali-svg-image-generation-log.md
│ ├── devanagari/
│ │ ├── devanagari-png-image-generation-log.md
│ │ └── devanagari-svg-image-generation-log.md
│ ├── emoji/
│ │ └── emoji-png-image-generation-log.md
│ ├── example-fonts.txt
│ ├── gujarati/
│ │ ├── gujarati-png-image-generation-log.md
│ │ └── gujarati-svg-image-generation-log.md
│ ├── gurmukhi/
│ │ ├── gurmukhi-png-image-generation-log.md
│ │ └── gurmukhi-svg-image-generation-log.md
│ ├── hangul/
│ │ ├── hangul-png-image-generation-log.md
│ │ └── hangul-svg-image-generation-log.md
│ ├── hebrew/
│ │ ├── hebrew-png-image-generation-log.md
│ │ └── hebrew-svg-image-generation-log.md
│ ├── images-index.md
│ ├── kannada/
│ │ ├── kannada-png-image-generation-log.md
│ │ └── kannada-svg-image-generation-log.md
│ ├── khmer/
│ │ ├── khmer-png-image-generation-log.md
│ │ └── khmer-svg-image-generation-log.md
│ ├── malayalam/
│ │ ├── malayalam-png-image-generation-log.md
│ │ └── malayalam-svg-image-generation-log.md
│ ├── mongolian/
│ │ ├── mongolian-png-image-generation-log.md
│ │ └── mongolian-svg-image-generation-log.md
│ ├── myanmar/
│ │ ├── myanmar-png-image-generation-log.md
│ │ └── myanmar-svg-image-generation-log.md
│ ├── nko/
│ │ ├── nko-png-image-generation-log.md
│ │ └── nko-svg-image-generation-log.md
│ ├── oriya/
│ │ ├── oriya-png-image-generation-log.md
│ │ └── oriya-svg-image-generation-log.md
│ ├── sinhala/
│ │ ├── sinhala-png-image-generation-log.md
│ │ └── sinhala-svg-image-generation-log.md
│ ├── syriac/
│ │ ├── syriac-png-image-generation-log.md
│ │ └── syriac-svg-image-generation-log.md
│ ├── tamil/
│ │ ├── tamil-png-image-generation-log.md
│ │ └── tamil-svg-image-generation-log.md
│ ├── telugu/
│ │ ├── telugu-png-image-generation-log.md
│ │ └── telugu-svg-image-generation-log.md
│ ├── thai-lao/
│ │ ├── thai-lao-png-image-generation-log.md
│ │ └── thai-lao-svg-image-generation-log.md
│ └── tibetan/
│ ├── tibetan-png-image-generation-log.md
│ └── tibetan-svg-image-generation-log.md
├── index.md
├── make.bat
├── notes/
│ ├── README.md
│ ├── emoji-implementation.md
│ ├── index.md
│ ├── ragel-machine-notation.md
│ └── uniscribe-bug-compatibility.md
├── opentype-shaping-arabic-general.md
├── opentype-shaping-arabic.md
├── opentype-shaping-bengali.md
├── opentype-shaping-default.md
├── opentype-shaping-devanagari.md
├── opentype-shaping-emoji.md
├── opentype-shaping-gujarati.md
├── opentype-shaping-gurmukhi.md
├── opentype-shaping-hangul.md
├── opentype-shaping-hebrew.md
├── opentype-shaping-indic-general.md
├── opentype-shaping-kannada.md
├── opentype-shaping-khmer.md
├── opentype-shaping-malayalam.md
├── opentype-shaping-mongolian.md
├── opentype-shaping-myanmar.md
├── opentype-shaping-nko.md
├── opentype-shaping-normalization.md
├── opentype-shaping-oriya.md
├── opentype-shaping-sinhala.md
├── opentype-shaping-syriac.md
├── opentype-shaping-tamil.md
├── opentype-shaping-telugu.md
├── opentype-shaping-thai-lao.md
├── opentype-shaping-tibetan.md
├── opentype-shaping-use.md
├── opentype-shaping-vedic-extensions.md
├── overview.md
└── test/
├── spellcheck.yml
├── spellcheck_html.yml
└── wordlist.txt
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/workflows/build_html_output.yml
================================================
name: "Build HTML output"
on:
- push
jobs:
html:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Python environment
uses: actions/setup-python@v6
with:
python-version: "3.10"
- name: Update pip
run: |
python -m pip install --upgrade pip
- name: Install dependencies
run: |
if [ -f build-requirements.txt ]; then pip install -r build-requirements.txt; fi
- name: Build HTML
uses: rickstaa/sphinx-action@master
with:
docs-folder: "."
- uses: actions/upload-artifact@v6
with:
name: ShapingDocumentsHTML
path: _build/html/
================================================
FILE: .github/workflows/test_document_sources.yml
================================================
name: "Test document sources"
on:
- push
jobs:
linkcheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Python environment
uses: actions/setup-python@v6
with:
python-version: "3.10"
- name: Update pip
run: |
python -m pip install --upgrade pip
- name: Install dependencies
run: |
if [ -f build-requirements.txt ]; then pip install -r build-requirements.txt; fi
- name: Check links
uses: rickstaa/sphinx-action@master
with:
docs-folder: "."
build-command: "sphinx-build -M linkcheck . _build"
================================================
FILE: .gitignore
================================================
# Ignore general
*~
# Ignore Unicode PDFs & misc resources
reference/
_build/
# Ignore auto-generated binary spelling dictionary
dictionary.dic
================================================
FILE: BUILD.md
================================================
# Building a local copy of these documents #
A local, static-HTML version of these documents can be built with the
[Sphinx](https://www.sphinx-doc.org/) generator.
The Sphinx-related files in the repository are:
```
config.py
index.rst
make.bat
Makefile
```
plus the directories
```
_build/
_static/
_templates/
_ext/
```
## Sphinx ##
Sphinx is a Python-based utility that you will need to install on your
local machine. The official [installation
guide](https://www.sphinx-doc.org/en/master/usage/quickstart.html)
covers what is necessary for a variety of OSes and
environments. Perhaps the easiest approach is to install Sphinx in a
Python [virtual
environment](https://www.sphinx-doc.org/en/master/usage/installation.html#using-virtual-environments).
After installing Sphinx itself, you will also need to install the
[MyST-Parser](https://myst-parser.readthedocs.io/en/latest/) package,
which enables Sphinx to process Markdown files. Using the
virtual-environment installation method, you can keep both of these
packages contained for this project.
At the moment there are three other dependencies involved, all of which
are Sphinx-extension packages:
1. [Sphinx-multitoc-numbering](https://sphinx-multitoc-numbering.readthedocs.io/),
which is required to make Sphinx use a continuous numbering scheme
across the files
2. [sphinx External TOC](https://sphinx-external-toc.readthedocs.io/),
which is required to define the navigation sidebar declaratively
(see the [TOCtrees](#toctrees) subsection below for more info)
3. [sphinx inline svg](https://pypi.org/project/sphinx-inline-svg/),
which is used to implement the user-togglable cluster colors on the
illustrations of feature application.
but a full `build-requirements.txt` file is included in the repository
that lists the packages in the author's virtual environment. You
shouldn't _need_ to utilize it, since just installing Sphinx,
MyST-Parser, and the extensions ought to suffice, but it is there if
required.
The build also uses a custom Sphinx extension, named
`shapingdocs_svg_color_toggles`, to generate the HTML elements used to
do the color toggling. This extension is included in the `_ext/`
directory of this repository and is called from that location,
however, so you do not need to install it separately.
## Building HTML documents ##
With the Sphinx and MyST-Parser packages installed, go to the
top-level directory of this repository in a shell or
terminal. Building the HTML documents should only take two steps:
1. Run `make clean` to clear out all temporary files from previous
run. Do this every time.
2. Run `make html` to regenerate the HTML files. The output files will
be written to the `_build/html/` subdirectory.
## Test suite ##
The `test/` directory contains test elements. At the moment, all of
the tests are run manually, but as the kinks are worked out they may
be rolled into either Git hooks or GitHub Actions, so it is advisable
to start using them. Currently there are two tests available as
Makefile targets:
1. Run `make linktest` to run checks on all of the URLs found in the
documents.
2. Run `make spellcheck` to run spellchecking on the documents.
You can also run `make test` to run both tests in sequence.
The spell-checking is configured in `test/spellcheck.yaml`. It uses
the [PySpelling](https://facelessuser.github.io/pyspelling/) package
with the custom wordlist at `test/wordlist.txt`.
There are a few lingering peculiarities to PySpelling (most notably,
it supports excluding specified HTML elements, but cannot exclude
`<table>` elements because of a discrepancy between its built-in
Markdown converter and Sphinx, so at present the `character-tables/`
directory returns a great many false hits from the Unicode codepoint
names in the tables). The plan is to iron those out, then run both the
spell-checking and link-checking tests automatically on all pull
requests. When that is implemented, it will be documented here.
## Editing and bugfixing ##
The static-HTML version of the docs are a work-in-progress at the
moment, so please do poke around for problems and report any bugs.
Basic Sphinx configuration is done in the `config.py` file.
The HTML output documents are currently using the "Alabaster" theme,
which comes preinstalled. The Alabaster theme accepts several
configuration options which are also kept in `config.py`. Output
customization for the theme is also tweaked in the `custom.css` file
in the `_static/` subdirectory (just be sure you edit the one in
`_static/` itself; whenever the docs are rebuilt with `make`, that
file also gets copied into `_build/html/_static/`, so don't edit that
copy of the file since it gets overwritten).
To report a suspected typo or to suggest a general wording change,
please first synchronize your local repository with `git pull`. Then
do a `make clean`/`make html` as described in the section above.
### TOCtrees ###
Sphinx, by default, is hardcoded in a way that requires all documents
to be referenced in a separate, Sphinx-specific `toctree` structure,
after which the navigation sidebars (and other elements) are generated
on-the-fly at build-time by Sphinx itself.
The current documents are using a third-party extension that defines
the "TOCtree" in a declarative YAML file instead, to work around some
undesirable outputs -- mainly in the GitHub repository views -- that
Sphinx triggers with its on-the-fly `toctree` process.
But this approach isn't (yet?) perfect. Some files (namely this one,
`BUILD.md`, and the image-generation-log files) are manually excluded
from the build process so that they do not generate a flurry of
warning messages. That's deliberate, because the build instructions
and log files are metadata and aren't part of the final documentation
set itself.
================================================
FILE: Makefile
================================================
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = .
BUILDDIR = _build
PYSPELLING = pyspelling
PYSPELLINGMARKDOWNCONF = test/spellcheck.yml
PYSPELLINGHTMLCONF = test/spellcheck_html.yml
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Run tests on links and spelling
test: linktest spellcheck
# Use Sphinx's built-in link checker
linktest:
@$(SPHINXBUILD) -M linkcheck "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
# Use PySpelling
spellcheck:
@$(PYSPELLING) -c "$(PYSPELLINGMARKDOWNCONF)"
# Use PySpelling
htmlspellcheck:
@$(PYSPELLING) -c "$(PYSPELLINGHTMLCONF)"
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
================================================
FILE: README.md
================================================
# OpenType shaping documents #
Sponsored by [YesLogic](https://yeslogic.com/)
_<aside>Thanks also to the developers of HarfBuzz and AllSorts, plus many other font engineers and text-encoding experts for their generosity of time and insightful contributions.</aside>_
## 🆆 🅰 🆁 🅽 🅸 🅽 🅶 ##
>
> This repository is an active WORK IN PROGRESS.
>
> NONE of the documents you currently see here are complete
> nor are they suitable for reference. PLEASE do not use
> them as a guide or as a general information source.
>
> As long as this warning text remains visible, the above
> holds true.
These documents are meant to provide a functional specification for
text shaping. The expectation is that an implementer of this
specification will be using fonts in the OpenType font format applied
to input text that complies with Unicode.
At present, we are seeking comments and bugfixes. Interested readers
and contributors can begin at the
- Indic Model ([general information](opentype-shaping-indic-general.md))
- Scripts covered: [Devanagari](opentype-shaping-devanagari.md), [Bengali](opentype-shaping-bengali.md), [Gujarati](opentype-shaping-gujarati.md), [Gurmukhi](opentype-shaping-gurmukhi.md), [Kannada](opentype-shaping-kannada.md), [Malayalam](opentype-shaping-malayalam.md),
[Oriya](opentype-shaping-oriya.md), [Tamil](opentype-shaping-tamil.md), [Telugu](opentype-shaping-telugu.md), [Sinhala](opentype-shaping-sinhala.md)
- Arabic Model ([general information](opentype-shaping-arabic-general.md)
- Scripts covered: [Arabic](opentype-shaping-arabic.md), [N'Ko](opentype-shaping-nko.md), [Syriac](opentype-shaping-syriac.md), [Mongolian](opentype-shaping-mongolian.md)
- [Hangul](opentype-shaping-hangul.md)
- [Hebrew](opentype-shaping-hebrew.md)
- [Khmer](opentype-shaping-khmer.md)
- [Myanmar](opentype-shaping-myanmar.md)
- [Thai and Lao](opentype-shaping-thai-lao.md)
- [Tibetan](opentype-shaping-tibetan.md)
- [Universal Shaping Engine (<abbr>USE</abbr>)](opentype-shaping-use.md)
- All complex scripts that are not handled by a dedicated
script-specific shaping model
- [Default](opentype-shaping-default.md)
- All non-complex scripts
- [Emoji](opentype-shaping-emoji.md)
- Emoji sequences do not constitute a separate shaping model,
but handling emoji sequences can incorporate many of the same
Opentype mechanisms and should not be overlooked
shaping documents and are encouraged to submit their feedback
on the text or images of any of the linked scripts. The documents are
organized by script; where there are multiple shaping models for a
particular script (including deprecated models), the various models are
all addressed in the same script-specific document.
The documents also include a description of
[normalization](opentype-shaping-normalization.md) in the OpenType
shaping context, which differs from Unicode normalization in several
respects.
Various [notes](notes/README.md) about the document set and the details
of its scope, limitations, and quirks are also provided.
Some [errata](errata.md) about the "upstream" specifications and
reference documents are noted separately.
In its final form, this repository will hold documentation describing
the shaping behavior used for layout of OpenType text. In particular,
it will focus on complex scripts.
In addition to the primary, per-script documents, implementers and
other interesteed readers are encouraged to check the
[character tables](character-tables/README.md) for correctness and to
examine the [image-generation logs](/images/README.md) to identify
issues seen in the inline images.
### References
These documents cite the following informative references:
1. The Microsoft [Script development
specifications](https://docs.microsoft.com/en-us/typography/script-development/standard),
which document the behaviors expected for OpenType Layout fonts and
provide guidance & examples for type designers. OpenType is a
registered trademark of Microsoft Corporation.
2. Related portions of the Microsoft OpenType specification, such as the
[OpenType Layout tag
registry](https://docs.microsoft.com/en-us/typography/opentype/spec/ttoreg)
and [OpenType Layout common table
formats](https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2),
which list and define feature tags, script & language tags, and
other internals of compliant OpenType font binaries. OpenType is a
registered trademark of Microsoft Corporation.
3. The [HarfBuzz](https://github.com/harfbuzz/harfbuzz) project, which
includes a free-software/open-source implementation of OpenType
Layout shaping with full source code and documentation.
4. The [AllSorts](https://github.com/yeslogic/allsorts) project, which
includes a free-software/open-source implementation of OpenType
Layout shaping with full source code and documentation.
5. The [Unicode
Standard](http://www.unicode.org/standard/standard.html) and
related Unicode Consortium projects such as the [Unicode Character
Database](http://www.unicode.org/reports/tr44/), which defines
Unicode code points and formal character properties used in
shaping. Unicode and the Unicode Logo are registered trademarks of
Unicode, Inc. in the United States and other countries.
6. The YesLogic [text corpus](https://github.com/yeslogic/corpus),
which includes real-world text data for several Indic scripts,
scraped from Wikipedia, Reddit, and multiple online news
sources. This data is used to test shaping in AllSorts and Prince.
7. Known but unofficial information about other shaping-engine
projects. Primarily this includes tests and reproducible issues
found via [HarfBuzz](https://github.com/harfbuzz/harfbuzz), because
HarfBuzz intentionally aims to produce results that will 100% match
the output of Microsoft Uniscribe (not counting cases where
Uniscribe's output is known to be incorrect, of course).
> Note: occasionally, tests or issues documenting the behavior of
> Apple CoreText are also included, but CoreText compatibility is
> not an explicit goal for HarfBuzz.
================================================
FILE: _ext/LICENSE.md
================================================
# License for shapingdocs Sphinx extension software
Unless otherwise indicated, all code in this directory is licensed
under the two-clause BSD license below. This license does _not_ apply
to code or other files found in parent, sibling, and other directories
within this repository.
Copyright 2025 Nathan Willis.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: _ext/README.md
================================================
# Sphinx extensions and related build tools
This directory holds custom extensions used by the Sphinx builder for
this set of documents, and a few somewhat-related Python utilities.
The contents of this directory are licensed under the 2-Clause BSD
license. This is the license used by the Sphinx project, and was
chosen here in order to maximize compatibility.
See the accompanying [LICENSE](LICENSE.md) file.
Note that the license does **not** apply to this documentation project
as a whole, but only to the contents of this directory.
================================================
FILE: _ext/abbreviations.py
================================================
# SPDX-FileCopyrightText: Copyright 2025 Nathan Willis
#
# SPDX-License-Identifier: BSD-2-Clause
"""Dictionary of the acronyms or abbreviations and corresponding full-text expansions used in the documents.
"""
# Dictionary mapping the set of acronyms and abbreviations
# that get wrapped in <abbr> tags in the generated output
# to the corresponding full-expansion text for each.
#
# Perhaps obviously, the keys were used to identify and
# tag acronyms with <abbr> in the document source. In some,
# but not all, cases the full expansions are also used.
ABBR_STRING_MAP = {
"AAT": "Apple Advanced Typography",
"AJT": "Arabic Joining Type",
"AMTRA": "Arabic Mark Transient Reordering Algorithm",
"Ccc": "Canonical Combining Class",
"CEK": "Combining Enclosing Keycap",
"CGJ": "Combining Grapheme Joiner",
"CLDR": "Common Locale Data Repository",
"CSS": "Cascading Style Sheets",
"GDEF": "Glyph Definition table",
"GPOS": "Glyph Positioning table",
"GSUB": "Glyph Substitution table",
"LRM": "Left-to-Right Mark",
"LTR": "Left-To-Right",
"MCM": "Modifier Combining Mark",
"NBSP": "No-Break Space",
"NFC": "Normalization Form C",
"NFD": "Normalization Form D",
"NFKC": "Normalization Form KC",
"NFKD": "Normalization Form KD",
"PNG": "Portable Network Graphics",
"PUA": "Private Use Area",
"RGI": "Recommended for General Interchange",
"RLM": "Right-to-Left Mark",
"RTL": "Right-To-Left",
"SHA": "Secure Hash Algorithm",
"SVG": "Scalable Vector Graphics",
"UCD": "Unicode Character Database",
"UCDM": "Unicode Character Decomposition Mapping",
"UGC": "Unicode General Category",
"UIPC": "Unicode Indic Positional Category",
"UISC": "Unicode Indic Syllabic Category",
"UJT": "Unicode Joining Type",
"URL": "Uniform Resource Locator",
"USE": "Universal Shaping Engine",
"ZWJ": "Zero-Width Joiner",
"ZWNJ": "Zero-Width Non Joiner",
}
================================================
FILE: _ext/colors.py
================================================
# SPDX-FileCopyrightText: Copyright 2025 Nathan Willis
#
# SPDX-License-Identifier: BSD-2-Clause
"""The sequence of #RRGGBB colors used in the colorized SVG illustration images.
"""
# Defines the color sequence used to colorize clusters in the SVG illustration
# images.
#
# It is based on the G10 sequence employed by Plotly, as visible at:
# https://plotly.com/python/discrete-color/#color-sequences-in-plotly-express
#
# This sequence is chosen because it is generally consistent in value and it
# does not include any greys.
COLOR_LIST = [ "#3366cc", "#dc3912", "#ff9900", "#109618", "#990099", "#0099c6", "#dd4477", "#66aa00", "#b82e2e", "#316395",]
================================================
FILE: _ext/shapingdocs_svg_color_toggles.py
================================================
# SPDX-FileCopyrightText: Copyright 2025 Nathan Willis
#
# SPDX-License-Identifier: BSD-2-Clause
"""Sphinx extension to attach a color-toggle button to specified SVG elements in documents.
This extension only affects the `html` builder.
"""
from __future__ import annotations
from docutils import nodes
from docutils.parsers.rst import directives
from sphinx.util import logging
from sphinx.application import Sphinx
from sphinx.util.docutils import SphinxDirective, SphinxTranslator, SphinxRole
#from sphinx.util.typing import ExtensionMetadata
from sphinx.writers.html import HTMLTranslator
# Directive to insert color-toggle button
#
# Example output:
# <p>
# <button class="svg-color-toggle-button" id="button-bengali-akhn-kssa" onclick="toggleColor('bengali-akhn-kssa')">
# Toggle cluster colors</button>
# </p>
#
class svg_color_toggle_node(nodes.General, nodes.Element):
"""SVG color-toggle node."""
pass
class SVGColorToggleButton(SphinxDirective):
"""A directive to insert a color-toggle switch for
an SVG element with the specified id."""
has_content = True
required_arguments = 1
optional_arguments = 0
def run(self) -> list[svg_color_toggle_node]:
# The sole argument is the CSS element id to build
# the button for
svg_element = self.arguments[0]
return [
svg_color_toggle_node(
target_id = svg_element,
button_id = "button-" + svg_element,
button_klass = "svg-color-toggle-button",
button_label = "Toggle cluster colors",
)
]
def visit_svg_color_toggle_node_html(translator: HTMLTranslator, node: svg_color_toggle_node) -> None:
"""Entry point of the SVG color-toggle node."""
html: str = ""
if node["target_id"]:
html += '<button class="' + node["button_klass"] + '" id="' + node["button_id"] + '" onclick=\'toggleColor(\"' + node["target_id"] + '\")\'>' + node["button_label"]
else:
pass
translator.body.append(html)
def depart_svg_color_toggle_node_html(translator: HTMLTranslator, node: svg_color_toggle_node) -> None:
"""Exit from the SVG color-toggle node."""
html: str = ""
if node["target_id"]:
html += '</button>'
translator.body.append(html)
def visit_svg_color_toggle_node_unsupported(translator: SphinxTranslator, node: svg_color_toggle_node) -> None:
"""Entry point of the ignored SVG color-toggle node."""
logger.warning(
f"SVG color-toggle {node['target_id']}: unsupported output format (node skipped)"
)
raise nodes.SkipNode
def setup(app: Sphinx): # The ExtensionMetadata stuff is not available in this version of Sphinx. Sphinx's own docs are pretty terrible about clarifying these matters....
#def setup(app: Sphinx) -> ExtensionMetadata:
app.add_node(
svg_color_toggle_node,
html=(visit_svg_color_toggle_node_html, depart_svg_color_toggle_node_html),
epub=(visit_svg_color_toggle_node_unsupported, None),
latex=(visit_svg_color_toggle_node_unsupported, None),
man=(visit_svg_color_toggle_node_unsupported, None),
texinfo=(visit_svg_color_toggle_node_unsupported, None),
text=(visit_svg_color_toggle_node_unsupported, None),
)
app.add_directive("svg-color-toggle-button", SVGColorToggleButton)
return {
'version': '0.1',
'parallel_read_safe': True,
'parallel_write_safe': True,
}
================================================
FILE: _global.md
================================================
```{role} togglebutton(raw)
:format: html
```
```{raw} html
<link rel="preload" href="/images/color-filters.svg" as="image"/>
```
================================================
FILE: _static/LICENSES_FOR_INCORPORATED_SOFTWARE.txt
================================================
This documentation set includes files originating from the following
upstream projects, which are each subject to their own individual
licenses and are copyrighted by their own respective authors.
These respective copyright statements and licenses are reproduced
below or, for those cases where the license is bundled as a separate
file, referenced by file name.
Sphinx
// https://www.sphinx-doc.org/
//
// :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
// :license: BSD, see LICENSE for details.
//
// https://github.com/sphinx-doc/sphinx/blob/master/LICENSE
//
// - License for Sphinx
// ==================
//
// Unless otherwise indicated, all code in the Sphinx project is licenced under the
// two clause BSD licence below.
//
// Copyright (c) 2007-2023 by the Sphinx team (see AUTHORS file).
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//
// Licenses for incorporated software
// ==================================
//
// The included implementation of NumpyDocstring._parse_numpydoc_see_also_section
// was derived from code under the following license:
//
// -------------------------------------------------------------------------------
//
// Copyright (C) 2008 Stefan van der Walt <stefan@mentat.za.net>, Pauli Virtanen <pav@iki.fi>
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// 1. Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in
// the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
// IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// -------------------------------------------------------------------------------
./_build/html/_static/searchtools.js
./_build/html/_static/language_data.js
./_build/html/_static/sphinx_highlight.js
./_build/html/_static/basic.css:
./_build/html/_static/doctools.js
./_build/html/_static/documentation_options.js
./_build/html/_static/_sphinx_javascript_frameworks_compat.js
./_build/html/objects.inv
./_build/html/searchindex.js
Sphinx 'Alabaster" theme
// https://github.com/sphinx-doc/alabaster
// Copyright (c) 2020 Jeff Forcier.
//
// https://github.com/sphinx-doc/alabaster/blob/0.x/LICENSE
//
// - Based on original work copyright (c) 2011 Kenneth Reitz and
// copyright (c) 2010 Armin Ronacher.
//
// Some rights reserved.
//
// Redistribution and use in source and binary forms of the theme, with or
// without modification, are permitted provided that the following conditions
// are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following
// disclaimer in the documentation and/or other materials provided
// with the distribution.
//
// * The names of the contributors may not be used to endorse or
// promote products derived from this software without specific
// prior written permission.
//
// THIS THEME IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS THEME, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
./_build/html/_static/alabaster.css
jQuery JavaScript Library v3.6.0
// https://jquery.com/
//
// Copyright OpenJS Foundation and other contributors
// Released under the MIT license
// https://jquery.org/license
//
// Date: 2021-03-02T17:08Z
//
// https://github.com/jquery/jquery/blob/3.6-stable/LICENSE.txt
//
// - Copyright OpenJS Foundation and other contributors, https://openjsf.org/
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//
// Includes Sizzle.js
// https://sizzlejs.com/
// Sizzle CSS Selector Engine v2.3.6
// https://sizzlejs.com/
//
// Copyright JS Foundation and other contributors
// Released under the MIT license
// https://js.foundation/
//
// Date: 2021-02-16
//
// https://github.com/jquery/sizzle/blob/main/LICENSE.txt
//
// - Copyright JS Foundation and other contributors, https://js.foundation/
//
// This software consists of voluntary contributions made by many
// individuals. For exact contribution history, see the revision history
// available at https://github.com/jquery/sizzle
//
// The following license applies to all parts of this software except as
// documented below:
//
// ====
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// ====
//
// All files located in the node_modules and external directories are
// externally maintained libraries used by this software which have their
// own licenses; we recommend you read them, as their terms may differ from
// the terms above.
./_build/html/_static/jquery-3.6.0.js: MIT License
./_build/html/_static/jquery.js
Pygments
// https://pygments.org/
//
// Copyright (c) 2006-2022 by the respective authors (see AUTHORS file).
// - https://github.com/pygments/pygments/blob/master/AUTHORS
//
// https://github.com/pygments/pygments/blob/master/LICENSE
//
// - Copyright (c) 2006-2022 by the respective authors (see AUTHORS file).
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
./_build/html/_static/pygments.css
Underscore.js 1.13.1
// https://underscorejs.org
//
// (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and
// DocumentCloud and Investigative Reporters & Editors
// Underscore may be freely distributed under the MIT license.
//
// https://github.com/jashkenas/underscore/blob/master/LICENSE
//
// - Copyright (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp,
// and DocumentCloud and Investigative Reporters & Editors
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
// restriction, including without limitation the rights to use,
// copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following
// conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
./_build/html/_static/underscore-1.13.1.js MIT License
./_build/html/_static/underscore.js MIT License
Source Code Pro
// https://github.com/adobe-fonts/source-code-pro
//
// Copyright 2010, 2012 Adobe Systems Incorporated
// (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights
// Reserved. Source is a trademark of Adobe Systems Incorporated in the
// United States and/or other countries.
//
// This Font Software is licensed under the SIL Open Font License, Version 1.1.
./_build/html/_static/fonts/Source_Code_Pro/OFL.txt: SIL Open Font License 1.1
./_build/html/_static/fonts/Source_Code_Pro/README.txt
./_build/html/_static/fonts/Source_Code_Pro/SourceCodePro-Italic-VariableFont_wght.ttf
./_build/html/_static/fonts/Source_Code_Pro/SourceCodePro-VariableFont_wght.ttf
Source Sans 3
// https://github.com/adobe-fonts/source-sans
//
// Copyright 2010-2020 Adobe (http://www.adobe.com/), with
// Reserved Font Name 'Source'. All Rights Reserved. Source is a
// trademark of Adobe in the United States and/or other countries.
//
// This Font Software is licensed under the SIL Open Font License, Version 1.1.
./_build/html/_static/fonts/Source_Sans_3/OFL.txt: SIL Open Font License 1.1
./_build/html/_static/fonts/Source_Sans_3/README.txt
./_build/html/_static/fonts/Source_Sans_3/SourceSans3-Italic-VariableFont_wght.ttf
./_build/html/_static/fonts/Source_Sans_3/SourceSans3-VariableFont_wght.ttf
Source Serif 4
// https://github.com/adobe-fonts/source-serif
//
// https://github.com/adobe-fonts/source-serif/blob/release/LICENSE.md
//
// - Copyright 2014 - 2023 Adobe (http://www.adobe.com/), with
// Reserved Font Name ‘Source’. All Rights Reserved. Source is a
// trademark of Adobe in the United States and/or other countries.
//
// This Font Software is licensed under the SIL Open Font License, Version 1.1.
./_build/html/_static/fonts/Source_Serif_4/OFL.txt: SIL Open Font License 1.1
./_build/html/_static/fonts/Source_Serif_4/README.txt
./_build/html/_static/fonts/Source_Serif_4/SourceSerif4-Italic-VariableFont_opsz,wght.ttf
./_build/html/_static/fonts/Source_Serif_4/SourceSerif4-VariableFont_opsz,wght.ttf
================================================
FILE: _static/custom.css
================================================
/* basic.css | file:///home/nate/code/opentype-shaping-documents/_build/html/_static/basic.css */
div.body {
/* min-width: 360px; */
/* max-width: 800px; */
min-width: 460px;
max-width: 800px;
}
/* alabaster.css | file:///home/nate/code/opentype-shaping-documents/_build/html/_static/alabaster.css */
/*div.document {
/* width: 940px; */
/* width: 1040px;
} */
/* div.sphinxsidebar {
/* width: 220px; */
/* width: 240px;
} */
div.bodywrapper {
/* margin: 0 0 0 220px; */
margin: 0 0 0 300px;
}
/* Hanging section numbers, for slightly easier in-page navigation. */
/* Indent the body text by a fixed amount on the left,
then move section-numbers leftward by the same amount. */
div.body>section {
margin-left: 4rem;
}
span.section-number {
display: inline-block;
width: 3.5rem;
text-align: right;
margin-left: -4.5rem;
margin-right: .5rem;
}
/*
span.section-number::after {
content: " ";
white-space: pre;
}*/
/* Locally served fonts, to support more smartfont features */
@font-face {
font-family: 'Source Serif 4';
src: url('./fonts/Source_Serif_4/SourceSerif4-Italic-VariableFont_opsz,wght.ttf') format('truetype-variations');
font-style: italic;
font-weight: 1 999;
}
@font-face {
font-family: 'Source Serif 4';
src: url('./fonts/Source_Serif_4/SourceSerif4-VariableFont_opsz,wght.ttf') format('truetype-variations');
font-style: normal;
font-weight: 1 999;
}
@font-face {
font-family: 'Source Sans 3';
src: url('./fonts/Source_Sans_3/SourceSans3-Italic-VariableFont_wght.ttf') format('truetype-variations');
size-adjust: 94%; /* 47% of x-height originally.... */
font-style: italic;
font-weight: 1 999;
}
@font-face {
font-family: 'Source Sans 3';
src: url('./fonts/Source_Sans_3/SourceSans3-VariableFont_wght.ttf') format('truetype-variations');
size-adjust: 94%; /* 47% of x-height originally.... */
font-style: normal;
font-weight: 1 999;
}
@font-face {
font-family: 'Source Code Pro';
src: url('./fonts/Source_Code_Pro/SourceCodePro-Italic-VariableFont_wght.ttf') format('truetype-variations');
size-adjust: 92%; /* 46% of x-height originally.... */
font-style: italic;
font-weight: 1 999;
}
@font-face {
font-family: 'Source Code Pro';
src: url('./fonts/Source_Code_Pro/SourceCodePro-VariableFont_wght.ttf') format('truetype-variations');
size-adjust: 92%; /* 46% of x-height originally.... */
font-style: normal;
font-weight: 1 999;
}
/* Use oldstyle numerals in body text */
body {
font-feature-settings: "onum";
}
/* Tables */
/* alternating background colors like GitHub inline styling uses */
tr:nth-child(even) {background: #F0F0F4}
tr:nth-child(odd) {background: #FFF}
/* Less obtrusive headers */
th {
font-family: 'Source Sans 3';
font-size-adjust: 0.48;
font-weight: 600;
background: #F0F0F4;
font-feature-settings: "tnum", "lnum";
}
tr {
font-feature-settings: "tnum", "lnum";
}
/* Try to target the captions in the toctree sidebar */
p.caption[role="heading"] span.caption-text {
font-size: 120%
}
/* Try to target the list beneath the captions in the toctree sidebar */
p.caption[role="heading"] + ul {
text-indent: 0.6em;
}
/* Make <abbr> acronyms small-caps, but not interactive tooltips */
/* The font-size adjustment here may be temproary; it depends on */
/* the smallcap height of the font eventually specified. */
abbr {
font-variant: all-small-caps;
font-size: larger;
font-weight: 375;
cursor: default;
border-bottom: none;
}
/* Style 'samp' elements used to indicate explicit sequences and */
/* input/output character references that must be exact. */
samp {
font-family: 'Source Sans 3';
font-size-adjust: 0.48;
font-weight: 500; /* slightly heavier only */
color: #558;
}
/* De-emphasize Sphinx's section numbering, so as to be less */
/* distracting. */
/* */
/* TODO: shift numbers into margin. */
.section-number {
font-size: 70%;
color: #888;
}
/* Style rules for using Source family fonts */
div.body h1,
div.body h2,
div.body h3,
div.body h4,
div.body h5,
div.body h6 {
font-weight: 500;
}
/* Make the site-title in the sidebar bolder and different since */
/* there is no project logo. */
h1.logo {
font-family: 'Source Sans 3';
font-weight: 800;
font-size: 32px;
border-bottom: none;
text-decoration: none;
}
/* Fix the Alabaster theme's default font-scaling since we are */
/* using a complete superfamily with consistent sizing. */
pre, tt, code {
font-size: 1.0em; /* Undo Alabaster setting, best balance for the 3 element types considering Alabaster's other style rules */
font-weight: 450;
font-size-adjust: 0.46;
font-feature-settings: "tnum", "lnum";
}
/* Define table captions */
caption {
caption-side: bottom;
padding-top: 6px;
padding-bottom: 6px;
color: #656565;
}
/* Set figcaptions to look like table captions */
figcaption {
padding-top: 6px;
/* padding-bottom: 6px; altering this to account for toggle-button placement*/
padding-bottom: 0px;
margin-bottom: -12px;
color: #656565;
}
figcaption p {
margin-top: 8.5px;
margin-bottom: 8.5px;
}
/* Slightly lighten bgcolor on pre/tt/code in the captions, since the fg text color is lighter */
caption pre,
caption span.pre,
caption span.tt,
caption span.code,
figcaption pre,
figcaption span.pre,
figcaption span.tt,
figcaption span.code {
background-color: #eff4f7; /* testing; needs to be lighter because text is grey */
}
/* Set maximum size of SVG illustrations */
/* */
/* Width is currently limited to 100% of */
/* the parent element; height is currently */
/* specified relative to the text size, */
/* for presumptive convenience. 18em is a */
/* trial-and-error value that seems to be */
/* reasonable, but is by no means science. */
svg.shaping-demo {
max-width: 100%;
max-height: 18em;
}
/* Toggleable SVG clusters */
/*
/* Greyscale */
/* dc: dotted-circle */
.shaping-demo.greyscale-svg .dc {
fill: #999999;
stroke-width: 0%;
}
/* arrow: right-arrow */
.shaping-demo.greyscale-svg .arrow {
fill: #666666;
stroke-width: 0%;
}
/* z: ZWJ and ZWNJ */
.shaping-demo.greyscale-svg .z {
fill: #999999;
stroke: #999999;
stroke-width: 1px;
}
/* c0: cluster 0 */
.shaping-demo.greyscale-svg .c0 {
fill: #000000;
stroke-width: 0%;
}
/* c0: cluster 1 */
.shaping-demo.greyscale-svg .c1 {
fill: #000000;
stroke-width: 0%;
}
/* c0: cluster 2 */
.shaping-demo.greyscale-svg .c2 {
fill: #000000;
stroke-width: 0%;
}
/* c0: cluster 3 */
.shaping-demo.greyscale-svg .c3 {
fill: #000000;
stroke-width: 0%;
}
/* c0: cluster 4 */
.shaping-demo.greyscale-svg .c4 {
fill: #000000;
stroke-width: 0%;
}
/* c0: cluster 5 */
.shaping-demo.greyscale-svg .c5 {
fill: #000000;
stroke-width: 0%;
}
/* c0: cluster 6 */
.shaping-demo.greyscale-svg .c6 {
fill: #000000;
stroke-width: 0%;
}
/* c0: cluster 7 */
.shaping-demo.greyscale-svg .c7 {
fill: #000000;
stroke-width: 0%;
}
/* c0: cluster 8 */
.shaping-demo.greyscale-svg .c8 {
fill: #000000;
stroke-width: 0%;
}
/* c0: cluster 9 */
.shaping-demo.greyscale-svg .c9 {
fill: #000000;
stroke-width: 0%;
}
/* Colorized */
/* dc: dotted-circle */
.shaping-demo.color-svg .dc {
fill: #999999;
stroke-width: 0%;
}
/* arrow: right-arrow */
.shaping-demo.color-svg .arrow {
fill: #666666;
stroke-width: 0%;
}
/* z: ZWJ and ZWNJ */
.shaping-demo.color-svg .z {
fill: #999999;
stroke: #999999;
stroke-width: 1px;
}
/* c0: cluster 0 */
.shaping-demo.color-svg .c0 {
fill: #3366cc;
stroke-width: 0%;
}
/* c0: cluster 1 */
.shaping-demo.color-svg .c1 {
fill: #dc3912;
stroke-width: 0%;
}
/* c0: cluster 2 */
.shaping-demo.color-svg .c2 {
fill: #ff9900;
stroke-width: 0%;
}
/* c0: cluster 3 */
.shaping-demo.color-svg .c3 {
fill: #109618;
stroke-width: 0%;
}
/* c0: cluster 4 */
.shaping-demo.color-svg .c4 {
fill: #990099;
stroke-width: 0%;
}
/* c0: cluster 5 */
.shaping-demo.color-svg .c5 {
fill: #0099c6;
stroke-width: 0%;
}
/* c0: cluster 6 */
.shaping-demo.color-svg .c6 {
fill: #dd4477;
stroke-width: 0%;
}
/* c0: cluster 7 */
.shaping-demo.color-svg .c7 {
fill: #66aa00;
stroke-width: 0%;
}
/* c0: cluster 8 */
.shaping-demo.color-svg .c8 {
fill: #b82e2e;
stroke-width: 0%;
}
/* c0: cluster 9 */
.shaping-demo.color-svg .c9 {
fill: #316395;
stroke-width: 0%;
}
button.svg-color-toggle-button {
display: block;
margin-left: auto;
margin-right: auto;
/* margin-top: -8.5px; This makes alignment overly complicated.... */
padding: 4px 16px 5px 16px;
font-size: small;
color: #999;
background-color: #fff0;
border: 1px solid;
border-color: #bbb;
border-radius: 3px;
}
blockquote {
margin-top: 17px;
}
/* Static navigation sidebar */
/* Turn off bullet point on heading items */
li.static-nav-heading {
list-style: "";
}
/* L1 */
li.toctree-l1.static-nav {
font-size: 120%;
}
/* L2 headings */
li.toctree-l2.static-nav {
font-size: 100%;
font-style: italic;
}
/* L2 page links */
li.toctree-l2.static-nav a {
font-size: 100%;
font-style: normal;
}
================================================
FILE: _static/fonts/Source_Code_Pro/OFL.txt
================================================
Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
================================================
FILE: _static/fonts/Source_Code_Pro/README.txt
================================================
Source Code Pro Variable Font
=============================
This download contains Source Code Pro as both variable fonts and static fonts.
Source Code Pro is a variable font with this axis:
wght
This means all the styles are contained in these files:
SourceCodePro-VariableFont_wght.ttf
SourceCodePro-Italic-VariableFont_wght.ttf
If your app fully supports variable fonts, you can now pick intermediate styles
that aren’t available as static fonts. Not all apps support variable fonts, and
in those cases you can use the static font files for Source Code Pro:
static/SourceCodePro-ExtraLight.ttf
static/SourceCodePro-Light.ttf
static/SourceCodePro-Regular.ttf
static/SourceCodePro-Medium.ttf
static/SourceCodePro-SemiBold.ttf
static/SourceCodePro-Bold.ttf
static/SourceCodePro-ExtraBold.ttf
static/SourceCodePro-Black.ttf
static/SourceCodePro-ExtraLightItalic.ttf
static/SourceCodePro-LightItalic.ttf
static/SourceCodePro-Italic.ttf
static/SourceCodePro-MediumItalic.ttf
static/SourceCodePro-SemiBoldItalic.ttf
static/SourceCodePro-BoldItalic.ttf
static/SourceCodePro-ExtraBoldItalic.ttf
static/SourceCodePro-BlackItalic.ttf
Get started
-----------
1. Install the font files you want to use
2. Use your app's font picker to view the font family and all the
available styles
Learn more about variable fonts
-------------------------------
https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
https://variablefonts.typenetwork.com
https://medium.com/variable-fonts
In desktop apps
https://theblog.adobe.com/can-variable-fonts-illustrator-cc
https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts
Online
https://developers.google.com/fonts/docs/getting_started
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts
Installing fonts
MacOS: https://support.apple.com/en-us/HT201749
Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows
Android Apps
https://developers.google.com/fonts/docs/android
https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts
License
-------
Please read the full license text (OFL.txt) to understand the permissions,
restrictions and requirements for usage, redistribution, and modification.
You can use them in your products & projects – print or digital,
commercial or otherwise.
This isn't legal advice, please consider consulting a lawyer and see the full
license for all details.
================================================
FILE: _static/fonts/Source_Sans_3/OFL.txt
================================================
Copyright 2010-2020 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
================================================
FILE: _static/fonts/Source_Sans_3/README.txt
================================================
Source Sans 3 Variable Font
===========================
This download contains Source Sans 3 as both variable fonts and static fonts.
Source Sans 3 is a variable font with this axis:
wght
This means all the styles are contained in these files:
SourceSans3-VariableFont_wght.ttf
SourceSans3-Italic-VariableFont_wght.ttf
If your app fully supports variable fonts, you can now pick intermediate styles
that aren’t available as static fonts. Not all apps support variable fonts, and
in those cases you can use the static font files for Source Sans 3:
static/SourceSans3-ExtraLight.ttf
static/SourceSans3-Light.ttf
static/SourceSans3-Regular.ttf
static/SourceSans3-Medium.ttf
static/SourceSans3-SemiBold.ttf
static/SourceSans3-Bold.ttf
static/SourceSans3-ExtraBold.ttf
static/SourceSans3-Black.ttf
static/SourceSans3-ExtraLightItalic.ttf
static/SourceSans3-LightItalic.ttf
static/SourceSans3-Italic.ttf
static/SourceSans3-MediumItalic.ttf
static/SourceSans3-SemiBoldItalic.ttf
static/SourceSans3-BoldItalic.ttf
static/SourceSans3-ExtraBoldItalic.ttf
static/SourceSans3-BlackItalic.ttf
Get started
-----------
1. Install the font files you want to use
2. Use your app's font picker to view the font family and all the
available styles
Learn more about variable fonts
-------------------------------
https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
https://variablefonts.typenetwork.com
https://medium.com/variable-fonts
In desktop apps
https://theblog.adobe.com/can-variable-fonts-illustrator-cc
https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts
Online
https://developers.google.com/fonts/docs/getting_started
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts
Installing fonts
MacOS: https://support.apple.com/en-us/HT201749
Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows
Android Apps
https://developers.google.com/fonts/docs/android
https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts
License
-------
Please read the full license text (OFL.txt) to understand the permissions,
restrictions and requirements for usage, redistribution, and modification.
You can use them in your products & projects – print or digital,
commercial or otherwise.
This isn't legal advice, please consider consulting a lawyer and see the full
license for all details.
================================================
FILE: _static/fonts/Source_Serif_4/OFL.txt
================================================
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
================================================
FILE: _static/fonts/Source_Serif_4/README.txt
================================================
Source Serif 4 Variable Font
============================
This download contains Source Serif 4 as both variable fonts and static fonts.
Source Serif 4 is a variable font with these axes:
opsz
wght
This means all the styles are contained in these files:
SourceSerif4-VariableFont_opsz,wght.ttf
SourceSerif4-Italic-VariableFont_opsz,wght.ttf
If your app fully supports variable fonts, you can now pick intermediate styles
that aren’t available as static fonts. Not all apps support variable fonts, and
in those cases you can use the static font files for Source Serif 4:
static/SourceSerif4/SourceSerif4-ExtraLight.ttf
static/SourceSerif4/SourceSerif4-Light.ttf
static/SourceSerif4/SourceSerif4-Regular.ttf
static/SourceSerif4/SourceSerif4-Medium.ttf
static/SourceSerif4/SourceSerif4-SemiBold.ttf
static/SourceSerif4/SourceSerif4-Bold.ttf
static/SourceSerif4/SourceSerif4-ExtraBold.ttf
static/SourceSerif4/SourceSerif4-Black.ttf
static/SourceSerif4_18pt/SourceSerif4_18pt-ExtraLight.ttf
static/SourceSerif4_18pt/SourceSerif4_18pt-Light.ttf
static/SourceSerif4_18pt/SourceSerif4_18pt-Regular.ttf
static/SourceSerif4_18pt/SourceSerif4_18pt-Medium.ttf
static/SourceSerif4_18pt/SourceSerif4_18pt-SemiBold.ttf
static/SourceSerif4_18pt/SourceSerif4_18pt-Bold.ttf
static/SourceSerif4_18pt/SourceSerif4_18pt-ExtraBold.ttf
static/SourceSerif4_18pt/SourceSerif4_18pt-Black.ttf
static/SourceSerif4_36pt/SourceSerif4_36pt-ExtraLight.ttf
static/SourceSerif4_36pt/SourceSerif4_36pt-Light.ttf
static/SourceSerif4_36pt/SourceSerif4_36pt-Regular.ttf
static/SourceSerif4_36pt/SourceSerif4_36pt-Medium.ttf
static/SourceSerif4_36pt/SourceSerif4_36pt-SemiBold.ttf
static/SourceSerif4_36pt/SourceSerif4_36pt-Bold.ttf
static/SourceSerif4_36pt/SourceSerif4_36pt-ExtraBold.ttf
static/SourceSerif4_36pt/SourceSerif4_36pt-Black.ttf
static/SourceSerif4_48pt/SourceSerif4_48pt-ExtraLight.ttf
static/SourceSerif4_48pt/SourceSerif4_48pt-Light.ttf
static/SourceSerif4_48pt/SourceSerif4_48pt-Regular.ttf
static/SourceSerif4_48pt/SourceSerif4_48pt-Medium.ttf
static/SourceSerif4_48pt/SourceSerif4_48pt-SemiBold.ttf
static/SourceSerif4_48pt/SourceSerif4_48pt-Bold.ttf
static/SourceSerif4_48pt/SourceSerif4_48pt-ExtraBold.ttf
static/SourceSerif4_48pt/SourceSerif4_48pt-Black.ttf
static/SourceSerif4/SourceSerif4-ExtraLightItalic.ttf
static/SourceSerif4/SourceSerif4-LightItalic.ttf
static/SourceSerif4/SourceSerif4-Italic.ttf
static/SourceSerif4/SourceSerif4-MediumItalic.ttf
static/SourceSerif4/SourceSerif4-SemiBoldItalic.ttf
static/SourceSerif4/SourceSerif4-BoldItalic.ttf
static/SourceSerif4/SourceSerif4-ExtraBoldItalic.ttf
static/SourceSerif4/SourceSerif4-BlackItalic.ttf
static/SourceSerif4_18pt/SourceSerif4_18pt-ExtraLightItalic.ttf
static/SourceSerif4_18pt/SourceSerif4_18pt-LightItalic.ttf
static/SourceSerif4_18pt/SourceSerif4_18pt-Italic.ttf
static/SourceSerif4_18pt/SourceSerif4_18pt-MediumItalic.ttf
static/SourceSerif4_18pt/SourceSerif4_18pt-SemiBoldItalic.ttf
static/SourceSerif4_18pt/SourceSerif4_18pt-BoldItalic.ttf
static/SourceSerif4_18pt/SourceSerif4_18pt-ExtraBoldItalic.ttf
static/SourceSerif4_18pt/SourceSerif4_18pt-BlackItalic.ttf
static/SourceSerif4_36pt/SourceSerif4_36pt-ExtraLightItalic.ttf
static/SourceSerif4_36pt/SourceSerif4_36pt-LightItalic.ttf
static/SourceSerif4_36pt/SourceSerif4_36pt-Italic.ttf
static/SourceSerif4_36pt/SourceSerif4_36pt-MediumItalic.ttf
static/SourceSerif4_36pt/SourceSerif4_36pt-SemiBoldItalic.ttf
static/SourceSerif4_36pt/SourceSerif4_36pt-BoldItalic.ttf
static/SourceSerif4_36pt/SourceSerif4_36pt-ExtraBoldItalic.ttf
static/SourceSerif4_36pt/SourceSerif4_36pt-BlackItalic.ttf
static/SourceSerif4_48pt/SourceSerif4_48pt-ExtraLightItalic.ttf
static/SourceSerif4_48pt/SourceSerif4_48pt-LightItalic.ttf
static/SourceSerif4_48pt/SourceSerif4_48pt-Italic.ttf
static/SourceSerif4_48pt/SourceSerif4_48pt-MediumItalic.ttf
static/SourceSerif4_48pt/SourceSerif4_48pt-SemiBoldItalic.ttf
static/SourceSerif4_48pt/SourceSerif4_48pt-BoldItalic.ttf
static/SourceSerif4_48pt/SourceSerif4_48pt-ExtraBoldItalic.ttf
static/SourceSerif4_48pt/SourceSerif4_48pt-BlackItalic.ttf
Get started
-----------
1. Install the font files you want to use
2. Use your app's font picker to view the font family and all the
available styles
Learn more about variable fonts
-------------------------------
https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
https://variablefonts.typenetwork.com
https://medium.com/variable-fonts
In desktop apps
https://theblog.adobe.com/can-variable-fonts-illustrator-cc
https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts
Online
https://developers.google.com/fonts/docs/getting_started
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts
Installing fonts
MacOS: https://support.apple.com/en-us/HT201749
Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows
Android Apps
https://developers.google.com/fonts/docs/android
https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts
License
-------
Please read the full license text (OFL.txt) to understand the permissions,
restrictions and requirements for usage, redistribution, and modification.
You can use them in your products & projects – print or digital,
commercial or otherwise.
This isn't legal advice, please consider consulting a lawyer and see the full
license for all details.
================================================
FILE: _static/fontsizes.html
================================================
<html>
<head>
<title>Testing relative font sizes</title>
<style>
@font-face {
font-family: 'Source Serif 4';
src: url('./fonts/Source_Serif_4/SourceSerif4-Italic-VariableFont_opsz,wght.ttf') format('truetype-variations');
font-style: italic;
font-weight: 1 999;
}
@font-face {
font-family: 'Source Serif 4';
src: url('./fonts/Source_Serif_4/SourceSerif4-VariableFont_opsz,wght.ttf') format('truetype-variations');
font-style: normal;
font-weight: 1 999;
}
@font-face {
font-family: 'Source Sans 3';
src: url('./fonts/Source_Sans_3/SourceSans3-Italic-VariableFont_wght.ttf') format('truetype-variations');
font-style: italic;
font-weight: 1 999;
}
@font-face {
font-family: 'Source Sans 3';
src: url('./fonts/Source_Sans_3/SourceSans3-VariableFont_wght.ttf') format('truetype-variations');
font-style: normal;
font-weight: 1 999;
}
@font-face {
font-family: 'Source Code Pro';
src: url('./fonts/Source_Code_Pro/SourceCodePro-Italic-VariableFont_wght.ttf') format('truetype-variations');
font-style: italic;
font-weight: 1 999;
}
@font-face {
font-family: 'Source Code Pro';
src: url('./fonts/Source_Code_Pro/SourceCodePro-VariableFont_wght.ttf') format('truetype-variations');
font-style: normal;
font-weight: 1 999;
}
</style>
<style>
span.adj-serif {
font-size-adjust: none;
font-weight: 400;
}
span.adj-sans {
font-size-adjust: 0.47;
font-weight: 400;
}
span.adj-mono {
font-size-adjust: 0.46;
font-weight: 400;
}
span.adj-serif-i {
font-size-adjust: none;
font-weight: 400;
}
span.adj-sans-i {
font-size-adjust: 0.47;
font-weight: 400;
}
span.adj-mono-i {
font-size-adjust: 0.46;
font-weight: 400;
}
</style>
</head>
<body>
<h1>Samples for comparing font-size-adjust and variable-axis
tweaks on the Source Superfamily</h1>
<h2>Unadjusted</h2>
<h3>72 pt</h3>
<p>
Source Serif 4 | Source Sans 3 | Source Serif 4 | Source Code Pro | Source Serif 4 | ...italics
<p>
<span style="font-family:'Source Serif 4'; font-size:72pt">Hn</span><span style="font-family:'Source Sans 3'; font-size:72pt">Hn</span><span style="font-family:'Source Serif 4'; font-size:72pt">Hn</span><span style="font-family:'Source Code Pro'; font-size:72pt">Hn</span><span style="font-family:'Source Serif 4'; font-size:72pt">Hn</span><span style="font-family:'Source Serif 4'; font-size:72pt; font-style: italic">Hn</span><span style="font-family:'Source Sans 3'; font-size:72pt; font-style: italic">Hn</span><span style="font-family:'Source Serif 4'; font-size:72pt; font-style: italic">Hn</span><span style="font-family:'Source Code Pro'; font-size:72pt; font-style: italic">Hn</span>
</p>
<h3>28 pt</h3>
<p>
Source Serif 4 | Source Sans 3 | Source Serif 4 | Source Code Pro | Source Serif 4 | ...italics
<p>
<span style="font-family:'Source Serif 4'; font-size:28pt">Hn</span><span style="font-family:'Source Sans 3'; font-size:28pt">Hn</span><span style="font-family:'Source Serif 4'; font-size:28pt">Hn</span><span style="font-family:'Source Code Pro'; font-size:28pt">Hn</span><span style="font-family:'Source Serif 4'; font-size:28pt">Hn</span><span style="font-family:'Source Serif 4'; font-size:28pt; font-style: italic">Hn</span><span style="font-family:'Source Sans 3'; font-size:28pt; font-style: italic">Hn</span><span style="font-family:'Source Serif 4'; font-size:28pt; font-style: italic">Hn</span><span style="font-family:'Source Code Pro'; font-size:28pt; font-style: italic">Hn</span>
</p>
<h3>16 pt</h3>
<p>
Source Serif 4 | Source Sans 3 | Source Serif 4 | Source Code Pro | Source Serif 4 | ...italics
<p>
<span style="font-family:'Source Serif 4'; font-size:16pt">Hn</span><span style="font-family:'Source Sans 3'; font-size:16pt">Hn</span><span style="font-family:'Source Serif 4'; font-size:16pt">Hn</span><span style="font-family:'Source Code Pro'; font-size:16pt">Hn</span><span style="font-family:'Source Serif 4'; font-size:16pt">Hn</span><span style="font-family:'Source Serif 4'; font-size:16pt; font-style: italic">Hn</span><span style="font-family:'Source Sans 3'; font-size:16pt; font-style: italic">Hn</span><span style="font-family:'Source Serif 4'; font-size:16pt; font-style: italic">Hn</span><span style="font-family:'Source Code Pro'; font-size:16pt; font-style: italic">Hn</span>
</p>
<h3>10 pt</h3>
<p>
Source Serif 4 | Source Sans 3 | Source Serif 4 | Source Code Pro | Source Serif 4 | ...italics
<p>
<span style="font-family:'Source Serif 4'; font-size:10pt">Hn</span><span style="font-family:'Source Sans 3'; font-size:10pt">Hn</span><span style="font-family:'Source Serif 4'; font-size:10pt">Hn</span><span style="font-family:'Source Code Pro'; font-size:10pt">Hn</span><span style="font-family:'Source Serif 4'; font-size:10pt">Hn</span><span style="font-family:'Source Serif 4'; font-size:10pt; font-style: italic">Hn</span><span style="font-family:'Source Sans 3'; font-size:10pt; font-style: italic">Hn</span><span style="font-family:'Source Serif 4'; font-size:10pt; font-style: italic">Hn</span><span style="font-family:'Source Code Pro'; font-size:10pt; font-style: italic">Hn</span>
</p>
<hr>
<h2>Adjusted</h2>
<h3>72 pt</h3>
<p>
control + Source Serif 4 | Source Sans 3 | Source Serif 4 | Source Code Pro | Source Serif 4 | ...italics
<p>
<span style="font-family:'Source Serif 4'; font-size:72pt">Hn</span> <span class="adj-serif" style="font-family:'Source Serif 4'; font-size:72pt">Hn</span><span class="adj-sans" style="font-family:'Source Sans 3'; font-size:72pt">Hn</span><span class="adj-serif" style="font-family:'Source Serif 4'; font-size:72pt">Hn</span><span class="adj-mono" style="font-family:'Source Code Pro'; font-size:72pt">Hn</span><span class="adj-serif" style="font-family:'Source Serif 4'; font-size:72pt">Hn</span><span class="adj-serif-i" style="font-family:'Source Serif 4'; font-size:72pt; font-style: italic">Hn</span><span class="adj-sans-i" style="font-family:'Source Sans 3'; font-size:72pt; font-style: italic">Hn</span><span class="adj-serif-i" style="font-family:'Source Serif 4'; font-size:72pt; font-style: italic">Hn</span><span class="adj-mono-i" style="font-family:'Source Code Pro'; font-size:72pt; font-style: italic">Hn</span>
</p>
<h3>28 pt</h3>
<p>
control + Source Serif 4 | Source Sans 3 | Source Serif 4 | Source Code Pro | Source Serif 4 | ...italics
<p>
<span style="font-family:'Source Serif 4'; font-size:28pt">Hn</span> <span class="adj-serif" style="font-family:'Source Serif 4'; font-size:28pt">Hn</span><span class="adj-sans" style="font-family:'Source Sans 3'; font-size:28pt">Hn</span><span class="adj-serif" style="font-family:'Source Serif 4'; font-size:28pt">Hn</span><span class="adj-mono" style="font-family:'Source Code Pro'; font-size:28pt">Hn</span><span class="adj-serif" style="font-family:'Source Serif 4'; font-size:28pt">Hn</span><span class="adj-serif-i" style="font-family:'Source Serif 4'; font-size:28pt; font-style: italic">Hn</span><span class="adj-sans-i" style="font-family:'Source Sans 3'; font-size:28pt; font-style: italic">Hn</span><span class="adj-serif-i" style="font-family:'Source Serif 4'; font-size:28pt; font-style: italic">Hn</span><span class="adj-mono-i" style="font-family:'Source Code Pro'; font-size:28pt; font-style: italic">Hn</span>
</p>
<h3>16 pt</h3>
<p>
control + Source Serif 4 | Source Sans 3 | Source Serif 4 | Source Code Pro | Source Serif 4 | ...italics
<p>
<span style="font-family:'Source Serif 4'; font-size:16pt">Hn</span> <span class="adj-serif" style="font-family:'Source Serif 4'; font-size:16pt">Hn</span><span class="adj-sans" style="font-family:'Source Sans 3'; font-size:16pt">Hn</span><span class="adj-serif" style="font-family:'Source Serif 4'; font-size:16pt">Hn</span><span class="adj-mono" style="font-family:'Source Code Pro'; font-size:16pt">Hn</span><span class="adj-serif" style="font-family:'Source Serif 4'; font-size:16pt">Hn</span><span class="adj-serif-i" style="font-family:'Source Serif 4'; font-size:16pt; font-style: italic">Hn</span><span class="adj-sans-i" style="font-family:'Source Sans 3'; font-size:16pt; font-style: italic">Hn</span><span class="adj-serif-i" style="font-family:'Source Serif 4'; font-size:16pt; font-style: italic">Hn</span><span class="adj-mono-i" style="font-family:'Source Code Pro'; font-size:16pt; font-style: italic">Hn</span>
</p>
<h3>10 pt</h3>
<p>
control + Source Serif 4 | Source Sans 3 | Source Serif 4 | Source Code Pro | Source Serif 4 | ...italics
<p>
<span style="font-family:'Source Serif 4'; font-size:10pt">Hn</span> <span class="adj-serif" style="font-family:'Source Serif 4'; font-size:10pt">Hn</span><span class="adj-sans" style="font-family:'Source Sans 3'; font-size:10pt">Hn</span><span class="adj-serif" style="font-family:'Source Serif 4'; font-size:10pt">Hn</span><span class="adj-mono" style="font-family:'Source Code Pro'; font-size:10pt">Hn</span><span class="adj-serif" style="font-family:'Source Serif 4'; font-size:10pt">Hn</span><span class="adj-serif-i" style="font-family:'Source Serif 4'; font-size:10pt; font-style: italic">Hn</span><span class="adj-sans-i" style="font-family:'Source Sans 3'; font-size:10pt; font-style: italic">Hn</span><span class="adj-serif-i" style="font-family:'Source Serif 4'; font-size:10pt; font-style: italic">Hn</span><span class="adj-mono-i" style="font-family:'Source Code Pro'; font-size:10pt; font-style: italic">Hn</span>
</p>
</body>
</html>
================================================
FILE: _static/toggleSvgColors.js
================================================
function toggleColor(elementId) {
demoImage = document.getElementById(elementId);
console.log(elementId);
if (demoImage.classList.contains("shaping-demo")) {
if (demoImage.classList.contains("greyscale-svg")) {
demoImage.classList.add("color-svg");
demoImage.classList.remove("greyscale-svg");
} else {
if (demoImage.classList.contains("color-svg")) {
demoImage.classList.add("greyscale-svg");
demoImage.classList.remove("color-svg");
}
}
}
else {
console.log("toggleColor called on element that is not .shaping-demo class");
}
}
================================================
FILE: _templates/layout.html
================================================
{%- extends "!layout.html" %}
{% block extrahead %}
{{ super() }}
{% endblock %}
================================================
FILE: _templates/static_nav.html
================================================
<h3>Contents</h3>
<ul class="current">
<li class="toctree-l1 static-nav">
<a class="reference internal" href="/index.html">Overview</a>
</li>
<li class="toctree-l1 static-nav static-nav-heading">
Script shaping
<ul class="current">
<li class="toctree-l2 static-nav static-nav-heading">
Indic Model
<ul class="current">
<li class="toctree-l3 static-nav">
<a class="reference internal" href="/opentype-shaping-indic-general.html">Indic general</a>
</li>
<li class="toctree-l3 static-nav">
<a class="reference internal" href="/opentype-shaping-devanagari.html">Devanagari</a>
</li>
<li class="toctree-l3 static-nav">
<a class="reference internal" href="/opentype-shaping-bengali.html">Bengali</a>
</li>
<li class="toctree-l3 static-nav">
<a class="reference internal" href="/opentype-shaping-gujarati.html">Gujarati</a>
</li>
<li class="toctree-l3 static-nav">
<a class="reference internal" href="/opentype-shaping-gurmukhi.html">Gurmukhi</a>
</li>
<li class="toctree-l3 static-nav">
<a class="reference internal" href="/opentype-shaping-kannada.html">Kannada</a>
</li>
<li class="toctree-l3 static-nav">
<a class="reference internal" href="/opentype-shaping-malayalam.html">Malayalam</a>
</li>
<li class="toctree-l3 static-nav">
<a class="reference internal" href="/opentype-shaping-oriya.html">Oriya</a>
</li>
<li class="toctree-l3 static-nav">
<a class="reference internal" href="/opentype-shaping-sinhala.html">Sinhala</a>
</li>
<li class="toctree-l3 static-nav">
<a class="reference internal" href="/opentype-shaping-tamil.html">Tamil</a>
</li>
<li class="toctree-l3 static-nav">
<a class="reference internal" href="/opentype-shaping-telugu.html">Telugu</a>
</li>
<li class="toctree-l3 static-nav">
<a class="reference internal" href="/opentype-shaping-vedic-extensions.html">Vedic Extensions</a>
</li>
</ul>
</li>
<li class="toctree-l2 static-nav static-nav-heading">
Arabic Model
<ul class="current">
<li class="toctree-l3 static-nav">
<a class="reference internal" href="/opentype-shaping-arabic-general.html">Arabic general</a>
</li>
<li class="toctree-l3 static-nav">
<a class="reference internal" href="/opentype-shaping-arabic.html">Arabic</a>
</li>
<li class="toctree-l3 static-nav">
<a class="reference internal" href="/opentype-shaping-nko.html">N'Ko</a>
</li>
<li class="toctree-l3 static-nav">
<a class="reference internal" href="/opentype-shaping-syriac.html">Syriac</a>
</li>
<li class="toctree-l3 static-nav">
<a class="reference internal" href="/opentype-shaping-mongolian.html">Mongolian</a>
</li>
</ul>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/opentype-shaping-hangul.html">Hangul</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/opentype-shaping-hebrew.html">Hebrew</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/opentype-shaping-khmer.html">Khmer</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/opentype-shaping-myanmar.html">Myanmar</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/opentype-shaping-thai-lao.html">Thai and Lao</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/opentype-shaping-tibetan.html">Tibetan</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/opentype-shaping-use.html">Universal Shaping Engine</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/opentype-shaping-default.html">Default scripts</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/opentype-shaping-emoji.html">Emoji</a>
</li>
</ul>
</li>
<li class="toctree-l1 static-nav">
<a class="reference internal" href="/opentype-shaping-normalization.html">Normalization</a>
</li>
<li class="toctree-l1 static-nav">
<a class="reference internal" href="/notes/README.html">Notes</a>
<ul>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/notes/uniscribe-bug-compatibility.html">Uniscribe compatibility</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/notes/ragel-machine-notation.html">Ragel state-machine operators</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/notes/emoji-implementation.html">Emoji implementation</a>
</li>
</ul>
</li>
<li class="toctree-l1 static-nav">
<a class="reference internal" href="/character-tables/character-tables-index.html">Character Tables</a>
<ul>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-arabic.html">Arabic</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-bengali.html">Bengali</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-devanagari.html">Devanagari</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-gujarati.html">Gujarati</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-gurmukhi.html">Gurmukhi</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-hangul.html">Hangul</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-hebrew.html">Hebrew</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-kannada.html">Kannada</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-khmer.html">Khmer</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-lao.html">Lao</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-malayalam.html">Malayalam</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-mongolian.html">Mongolian</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-myanmar.html">Myanmar</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-nko.html">N'Ko</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-oriya.html">Oriya</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-sinhala.html">Sinhala</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-syriac.html">Syriac</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-tamil.html">Tamil</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-telugu.html">Telugu</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-thai.html">Thai</a>
</li>
<li class="toctree-l2 static-nav">
<a class="reference internal" href="/character-tables/character-tables-tibetan.html">Tibetan</a>
</li>
</ul>
</li>
<li class="toctree-l1 static-nav">
<a class="reference internal" href="/errata.html">Errata</a>
</li>
</ul>
<hr>
<ul class="extra-links">
<li class="toctree-l1 static-nav">
<a class="reference external" href="https://github.com/n8willis/opentype-shaping-documents/issues">GitHub issues</a>
</li>
<li class="toctree-l1 static-nav">
<a class="reference external" href="https://github.com/n8willis/opentype-shaping-documents/blob/master/BUILD.md">Build process</a>
</li>
</ul>
================================================
FILE: _toc.yml
================================================
root: index
options:
maxdepth: 0
numbered: False
hidden: True
titlesonly: True
entries:
- file: overview
title: Overview
subtrees:
- maxdepth: 0
numbered: 3
entries:
- file: opentype-shaping-indic-general
title: Indic general
- file: opentype-shaping-devanagari
title: Devanagari
- file: opentype-shaping-bengali
title: Bengali
- file: opentype-shaping-gujarati
title: Gujarati
- file: opentype-shaping-gurmukhi
title: Gurmukhi
- file: opentype-shaping-kannada
title: Kannada
- file: opentype-shaping-malayalam
title: Malayalam
- file: opentype-shaping-oriya
title: Oriya
- file: opentype-shaping-sinhala
title: Sinhala
- file: opentype-shaping-tamil
title: Tamil
- file: opentype-shaping-telugu
title: Telugu
- file: opentype-shaping-vedic-extensions
title: Vedic extensions
- file: opentype-shaping-arabic-general
title: Arabic general
- file: opentype-shaping-arabic
title: Arabic
- file: opentype-shaping-nko
title: N'Ko
- file: opentype-shaping-syriac
title: Syriac
- file: opentype-shaping-mongolian
title: Mongolian
- file: opentype-shaping-hangul
title: Hangul
- file: opentype-shaping-hebrew
title: Hebrew
- file: opentype-shaping-khmer
title: Khmer
- file: opentype-shaping-myanmar
title: Myanmar
- file: opentype-shaping-thai-lao
title: Thai and Lao
- file: opentype-shaping-tibetan
title: Tibetan
- file: opentype-shaping-use
title: Universal Shaping Engine
- file: opentype-shaping-default
title: Default scripts
- file: opentype-shaping-emoji
title: Emoji
- file: opentype-shaping-normalization
title: Normalization
- file: notes/index
title: Notes
subtrees:
- maxdepth: 0
numbered: False
entries:
- file: notes/uniscribe-bug-compatibility
title: Uniscribe compatibility
- file: notes/ragel-machine-notation
title: Ragel state-machine operators
- file: notes/emoji-implementation
title: Emoji implementation
- file: character-tables/index
title: Character tables
- file: character-tables/character-tables-arabic
title: Arabic
- file: character-tables/character-tables-bengali
title: Bengali
- file: character-tables/character-tables-devanagari
title: Devanagari
- file: character-tables/character-tables-gujarati
title: Gujarati
- file: character-tables/character-tables-gurmukhi
title: Gurmukhi
- file: character-tables/character-tables-hangul
title: Hangul
- file: character-tables/character-tables-hebrew
title: Hebrew
- file: character-tables/character-tables-kannada
title: Kannada
- file: character-tables/character-tables-khmer
title: Khmer
- file: character-tables/character-tables-lao
title: Lao
- file: character-tables/character-tables-malayalam
title: Malayalam
- file: character-tables/character-tables-mongolian
title: Mongolian
- file: character-tables/character-tables-myanmar
title: Myanmar
- file: character-tables/character-tables-nko
title: N'Ko
- file: character-tables/character-tables-oriya
title: Oriya
- file: character-tables/character-tables-sinhala
title: Sinhala
- file: character-tables/character-tables-syriac
title: Syriac
- file: character-tables/character-tables-tamil
title: Tamil
- file: character-tables/character-tables-telugu
title: Telugu
- file: character-tables/character-tables-thai
title: Thai
- file: character-tables/character-tables-tibetan
title: Tibetan
- file: errata
title: Errata
================================================
FILE: build-requirements.txt
================================================
alabaster==1.0.0
importlib-metadata>=5.0.0
myst-parser>=0.19.1
docutils==0.21.2
markdown-it-py==3.0.0
pip>=22.1.2
pyparsing>=3.0.9
pyspelling>=2.12.1
pytz>=2022.4
setuptools>=62.6.0
Sphinx==8.1.3
sphinx_external_toc>=1.1.0
sphinx-inline-svg>=0.2.0
sphinx-multitoc-numbering==0.1.3
svg-stack>=0.1.0
cloud-sptheme>=1.10.0
================================================
FILE: character-tables/README.md
================================================
# Character tables #
The files in this directory include per-srcipt reference tables
showing the shaping-related properties of the codepoints used for each
script.
- Indic
- [Devanagari](character-tables-devanagari.md)
- [Bengali](character-tables-bengali.md)
- [Gujarati](character-tables-gujarati.md)
- [Gurmukhi](character-tables-gurmukhi.md)
- [Kannada](character-tables-kannada.md)
- [Malayalam](character-tables-malayalam.md)
- [Oriya](character-tables-oriya.md)
- [Tamil](character-tables-tamil.md)
- [Telugu](character-tables-telugu.md)
- [Sinhala](character-tables-sinhala.md)
- _Vedic Extensions tables are included in each Indic script_
- Arabic
- [Arabic](character-tables-arabic.md)
- [Syriac](character-tables-syriac.md)
- [N'Ko](character-tables-nko.md)
- [Mongolian](character-tables-mongolian.md)
- Hangul
- [Hangul Jamo](character-tables-hangul.md)
- Hebrew
- [Hebrew](character-tables-hebrew.md)
- Khmer
- [Khmer](character-tables-khmer.md)
- Lao
- [Lao](character-tables-lao.md)
- Myanmar
- [Myanmar](character-tables-myanmar.md)
- Thai
- [Thai](character-tables-thai.md)
- Tibetan
- [Tibetan](character-tables-tibetan.md)
Tables are not provided for the default or Universal Shaping Engine
(<abbr>USE</abbr>) shaping documents, each of which covers a
multitude of individual scripts, nor for the emoji shaping document,
because emoji usage is not specific to any individual script.
================================================
FILE: character-tables/character-tables-arabic.md
================================================
# Arabic character tables #
This document lists the per-character shaping information needed to
[shape Arabic text](../opentype-shaping-arabic.md).
**Contents**
- [Arabic character table](#arabic-character-table)
- [Arabic Supplement character table](#arabic-supplement-character-table)
- [Arabic Extended-A character table](#arabic-extended-a-character-table)
- [Arabic Extended-B character table](#arabic-extended-b-character-table)
- [Arabic Extended-C character table](#arabic-extended-c-character-table)
- [Rumi Numeral Symbols character table](#rumi-numeral-symbols-character-table)
- [Miscellaneous character table](#miscellaneous-character-table)
## Arabic character table ##
Arabic glyphs should be classified as in the following
table. Codepoints in the Arabic block with no assigned meaning are
designated as _unassigned_ in the _Unicode category_ column.
The _Joining type_ column indicates whether each codepoint is defined
as joining with adjacent characters on the left side, right side, left
and right sides ("DUAL"), or neither side ("NON_JOINING"). Codepoints
designated TRANSPARENT in the _Joining type_ column do not join with
adjacent characters and, in addition, do not affect the joining
behavior of surrounding characters. Non-spacing marks are of type
TRANSPARENT. Codepoints designated JOIN_CAUSING force adjacent
characters to join.
The _Joining group_ column lists the fundamental letter that the
listed codepoint behaves like for joining purposes.
Assigned codepoints with a _null_ in the _Joining group_
column evoke no special behavior from the shaping engine during the
join-computation stage.
The _Mark class_ column indicates the Canonical Combining Class
for the codepoint. Marks are assigned non-zero combining classes so
that sequences of adjacent marks can be reordered as required by the
orthography.
For Arabic, a subset of marks in the 220 and 230 classes are also
designated _Modifier Combining Marks_ (<abbr>MCM</abbr>). These are denoted with
_220_MCM_ and _230_MCM_ in the _Mark class_ column. The <abbr title="Modifier Combining Mark">MCM</abbr> marks are
treated differently during the mark-reordering stage.
:::{table} Arabic block table
| Codepoint | Unicode category | Joining type | Joining group | Mark class | Glyph |
|:----------|:-----------------|:-------------|:---------------------|:-----------|-----------------------------------------------|
|`U+0600` | Other | NON_JOINING | _null_ | _0_ | ؀ Number Sign |
|`U+0601` | Other | NON_JOINING | _null_ | _0_ | ؁ Sign Sanah |
|`U+0602` | Other | NON_JOINING | _null_ | _0_ | ؂ Footnote Marker |
|`U+0603` | Other | NON_JOINING | _null_ | _0_ | ؃ Sign Safha |
|`U+0604` | Other | NON_JOINING | _null_ | _0_ | ؄ Sign Samvat |
|`U+0605` | Other | NON_JOINING | _null_ | _0_ | ؅ Number Mark Above |
|`U+0606` | Symbol | NON_JOINING | _null_ | _0_ | ؆ Cube Root |
|`U+0607` | Symbol | NON_JOINING | _null_ | _0_ | ؇ Fourth Root |
|`U+0608` | Symbol | NON_JOINING | _null_ | _0_ | ؈ Ray |
|`U+0609` | Punctuation | NON_JOINING | _null_ | _0_ | ؉ Per Mille |
|`U+060A` | Punctuation | NON_JOINING | _null_ | _0_ | ؊ Per Ten Thousand |
|`U+060B` | Symbol | NON_JOINING | _null_ | _0_ | ؋ Afghani Sign |
|`U+060C` | Punctuation | NON_JOINING | _null_ | _0_ | ، Comma |
|`U+060D` | Punctuation | NON_JOINING | _null_ | _0_ | ؍ Date Separator |
|`U+060E` | Symbol | NON_JOINING | _null_ | _0_ | ؎ Poetic Verse Sign |
|`U+060F` | Symbol | NON_JOINING | _null_ | _0_ | ؏ Sign Misra |
| | | | | |
|`U+0610` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ؐ Sign Sallallahou Alayhe Wassallam |
|`U+0611` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ؑ Sign Alayhe Assallam |
|`U+0612` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ؒ Sign Rahmatullah Alayhe |
|`U+0613` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ؓ Sign Radi Allahou Anhu |
|`U+0614` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ؔ Sign Takhallus |
|`U+0615` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ؕ Small High Tah |
|`U+0616` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ؖ Small High Alef Lam Yeh |
|`U+0617` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ؗ Small High Zain |
|`U+0618` | Mark [Mn] | TRANSPARENT | _null_ | 30 | ؘ Small Fatha |
|`U+0619` | Mark [Mn] | TRANSPARENT | _null_ | 31 | ؙ Small Damma |
|`U+061A` | Mark [Mn] | TRANSPARENT | _null_ | 32 | ؚ Small Kasra |
|`U+061B` | Punctuation | NON_JOINING | _null_ | _0_ | ؛ Semicolon |
|`U+061C` | Other | TRANSPARENT | _null_ | _0_ | ؜ Arabic Letter Mark |
|`U+061D` | Punctuation | NON_JOINING | _null_ | _0_ | ؝ End Of Text Mark |
|`U+061E` | Punctuation | NON_JOINING | _null_ | _0_ | ؞ Triple Dot Punctuation Mark |
|`U+061F` | Punctuation | NON_JOINING | _null_ | _0_ | ؟ Question Mark |
| | | | | |
|`U+0620` | Letter | DUAL | YEH | _0_ | ؠ Kashmiri Yeh |
|`U+0621` | Letter | NON_JOINING | _null_ | _0_ | ء Hamza |
|`U+0622` | Letter | RIGHT | ALEF | _0_ | آ Alef With Madda Above |
|`U+0623` | Letter | RIGHT | ALEF | _0_ | أ Alef With Hamza Above |
|`U+0624` | Letter | RIGHT | WAW | _0_ | ؤ Waw With Hamza Above |
|`U+0625` | Letter | RIGHT | ALEF | _0_ | إ Alef With Hamza Below |
|`U+0626` | Letter | DUAL | YEH | _0_ | ئ Dotless Yeh With Hamza Above |
|`U+0627` | Letter | RIGHT | ALEF | _0_ | ا Alef |
|`U+0628` | Letter | DUAL | BEH | _0_ | ب Beh |
|`U+0629` | Letter | RIGHT | TEH_MARBUTA | _0_ | ة Teh Marbuta |
|`U+062A` | Letter | DUAL | BEH | _0_ | ت Dotless Beh With 2 Dots Above |
|`U+062B` | Letter | DUAL | BEH | _0_ | ث Dotless Beh With 3 Dots Above |
|`U+062C` | Letter | DUAL | HAH | _0_ | ج Hah With Dot Below |
|`U+062D` | Letter | DUAL | HAH | _0_ | ح Hah |
|`U+062E` | Letter | DUAL | HAH | _0_ | خ Hah With Dot Above |
|`U+062F` | Letter | RIGHT | DAL | _0_ | د Dal |
| | | | | |
|`U+0630` | Letter | RIGHT | DAL | _0_ | ذ Dal With Dot Above |
|`U+0631` | Letter | RIGHT | REH | _0_ | ر Reh |
|`U+0632` | Letter | RIGHT | REH | _0_ | ز Reh With Dot Above |
|`U+0633` | Letter | DUAL | SEEN | _0_ | س Seen |
|`U+0634` | Letter | DUAL | SEEN | _0_ | ش Seen With 3 Dots Above |
|`U+0635` | Letter | DUAL | SAD | _0_ | ص Sad |
|`U+0636` | Letter | DUAL | SAD | _0_ | ض Sad With Dot Above |
|`U+0637` | Letter | DUAL | TAH | _0_ | ط Tah |
|`U+0638` | Letter | DUAL | TAH | _0_ | ظ Tah With Dot Above |
|`U+0639` | Letter | DUAL | AIN | _0_ | ع Ain |
|`U+063A` | Letter | DUAL | AIN | _0_ | غ Ain With Dot Above |
|`U+063B` | Letter | DUAL | GAF | _0_ | ػ Keheh With 2 Dots Above |
|`U+063C` | Letter | DUAL | GAF | _0_ | ؼ Keheh With 3 Dots Below |
|`U+063D` | Letter | DUAL | FARSI_YEH | _0_ | ؽ Farsi Yeh With Inverted V Above |
|`U+063E` | Letter | DUAL | FARSI_YEH | _0_ | ؾ Farsi Yeh With 2 Dots Above |
|`U+063F` | Letter | DUAL | FARSI_YEH | _0_ | ؿ Farsi Yeh With 3 Dots Above |
| | | | | |
|`U+0640` | Letter modifier | JOIN_CAUSING | _null_ | _0_ | ـ Tatweel |
|`U+0641` | Letter | DUAL | FEH | _0_ | ف Feh |
|`U+0642` | Letter | DUAL | QAF | _0_ | ق Qaf |
|`U+0643` | Letter | DUAL | KAF | _0_ | ك Kaf |
|`U+0644` | Letter | DUAL | LAM | _0_ | ل Lam |
|`U+0645` | Letter | DUAL | MEEM | _0_ | م Meem |
|`U+0646` | Letter | DUAL | NOON | _0_ | ن Noon |
|`U+0647` | Letter | DUAL | HEH | _0_ | ه Heh |
|`U+0648` | Letter | RIGHT | WAW | _0_ | و Waw |
|`U+0649` | Letter | DUAL | YEH | _0_ | ى Dotless Yeh |
|`U+064A` | Letter | DUAL | YEH | _0_ | ي Yeh |
|`U+064B` | Mark [Mn] | TRANSPARENT | _null_ | 27 | ً Fathatan |
|`U+064C` | Mark [Mn] | TRANSPARENT | _null_ | 28 | ٌ Dammatan |
|`U+064D` | Mark [Mn] | TRANSPARENT | _null_ | 29 | ٍ Kasratan |
|`U+064E` | Mark [Mn] | TRANSPARENT | _null_ | 30 | َ Fatha |
|`U+064F` | Mark [Mn] | TRANSPARENT | _null_ | 31 | ُ Damma |
| | | | | |
|`U+0650` | Mark [Mn] | TRANSPARENT | _null_ | 32 | ِ Kasra |
|`U+0651` | Mark [Mn] | TRANSPARENT | _null_ | 33 | ّ Shadda |
|`U+0652` | Mark [Mn] | TRANSPARENT | _null_ | 34 | ْ Sukun |
|`U+0653` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ٓ Maddah Above |
|`U+0654` | Mark [Mn] | TRANSPARENT | _null_ | 230_MCM | ٔ Hamza Above |
|`U+0655` | Mark [Mn] | TRANSPARENT | _null_ | 220_MCM | ٕ Hamza Below |
|`U+0656` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ٖ Subscript Alef |
|`U+0657` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ٗ Inverted Damma |
|`U+0658` | Mark [Mn] | TRANSPARENT | _null_ | 230_MCM | ٘ Noon Ghunna |
|`U+0659` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ٙ Zwarakay |
|`U+065A` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ٚ Vowel Sign Small V Above |
|`U+065B` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ٛ Vowel Sign Inverted Small V Above |
|`U+065C` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ٜ Vowel Sign Dot Below |
|`U+065D` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ٝ Reversed Damma |
|`U+065E` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ٞ Fatha with Two Dots |
|`U+065F` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ٟ Wavy Hamza Below |
| | | | | |
|`U+0660` | Number | NON_JOINING | _null_ | _0_ | ٠ Digit Zero |
|`U+0661` | Number | NON_JOINING | _null_ | _0_ | ١ Digit One |
|`U+0662` | Number | NON_JOINING | _null_ | _0_ | ٢ Digit Two |
|`U+0663` | Number | NON_JOINING | _null_ | _0_ | ٣ Digit Three |
|`U+0664` | Number | NON_JOINING | _null_ | _0_ | ٤ Digit Four |
|`U+0665` | Number | NON_JOINING | _null_ | _0_ | ٥ Digit Five |
|`U+0666` | Number | NON_JOINING | _null_ | _0_ | ٦ Digit Six |
|`U+0667` | Number | NON_JOINING | _null_ | _0_ | ٧ Digit Seven |
|`U+0668` | Number | NON_JOINING | _null_ | _0_ | ٨ Digit Eight |
|`U+0669` | Number | NON_JOINING | _null_ | _0_ | ٩ Digit Nine |
|`U+066A` | Punctuation | NON_JOINING | _null_ | _0_ | ٪ Percent Sign |
|`U+066B` | Punctuation | NON_JOINING | _null_ | _0_ | ٫ Decimal Separator |
|`U+066C` | Punctuation | NON_JOINING | _null_ | _0_ | ٬ Thousands Separator |
|`U+066D` | Punctuation | NON_JOINING | _null_ | _0_ | ٭ Five Pointed Star |
|`U+066E` | Letter | DUAL | BEH | _0_ | ٮ Dotless Beh |
|`U+066F` | Letter | DUAL | QAF | _0_ | ٯ Dotless Qaf |
| | | | | |
|`U+0670` | Mark [Mn] | TRANSPARENT | _null_ | 35 | ٰ Superscript Alef |
|`U+0671` | Letter | RIGHT | ALEF | _0_ | ٱ Alef With Wasla Above |
|`U+0672` | Letter | RIGHT | ALEF | _0_ | ٲ Alef With Wavy Hamza Above |
|`U+0673` | Letter | RIGHT | ALEF | _0_ | ٳ Alef With Wavy Hamza Below |
|`U+0674` | Letter | NON_JOINING | _null_ | _0_ | ٴ High Hamza |
|`U+0675` | Letter | RIGHT | ALEF | _0_ | ٵ High Hamza Alef |
|`U+0676` | Letter | RIGHT | WAW | _0_ | ٶ High Hamza Waw |
|`U+0677` | Letter | RIGHT | WAW | _0_ | ٷ High Hamza Waw With Damma Above |
|`U+0678` | Letter | DUAL | YEH | _0_ | ٸ High Hamza Dotless Yeh |
|`U+0679` | Letter | DUAL | BEH | _0_ | ٹ Dotless Beh With Tah Above |
|`U+067A` | Letter | DUAL | BEH | _0_ | ٺ Dotless Beh With Vertical 2 Dots Above|
|`U+067B` | Letter | DUAL | BEH | _0_ | ٻ Dotless Beh With Vertical 2 Dots Below|
|`U+067C` | Letter | DUAL | BEH | _0_ | ټ Dotless Beh With Attached Ring Below And 2 Dots Above|
|`U+067D` | Letter | DUAL | BEH | _0_ | ٽ Dotless Beh With Inverted 3 Dots Above|
|`U+067E` | Letter | DUAL | BEH | _0_ | پ Dotless Beh With 3 Dots Below |
|`U+067F` | Letter | DUAL | BEH | _0_ | ٿ Dotless Beh With 4 Dots Above |
| | | | | |
|`U+0680` | Letter | DUAL | BEH | _0_ | ڀ Dotless Beh With 4 Dots Below |
|`U+0681` | Letter | DUAL | HAH | _0_ | ځ Hah With Hamza Above |
|`U+0682` | Letter | DUAL | HAH | _0_ | ڂ Hah With Vertical 2 Dots Above |
|`U+0683` | Letter | DUAL | HAH | _0_ | ڃ Hah With 2 Dots Below |
|`U+0684` | Letter | DUAL | HAH | _0_ | ڄ Hah With Vertical 2 Dots Below |
|`U+0685` | Letter | DUAL | HAH | _0_ | څ Hah With 3 Dots Above |
|`U+0686` | Letter | DUAL | HAH | _0_ | چ Hah With 3 Dots Below |
|`U+0687` | Letter | DUAL | HAH | _0_ | ڇ Hah With 4 Dots Below |
|`U+0688` | Letter | RIGHT | DAL | _0_ | ڈ Dal With Tah Above |
|`U+0689` | Letter | RIGHT | DAL | _0_ | ډ Dal With Attached Ring Below |
|`U+068A` | Letter | RIGHT | DAL | _0_ | ڊ Dal With Dot Below |
|`U+068B` | Letter | RIGHT | DAL | _0_ | ڋ Dal With Dot Below And Tah Above |
|`U+068C` | Letter | RIGHT | DAL | _0_ | ڌ Dal With 2 Dots Above |
|`U+068D` | Letter | RIGHT | DAL | _0_ | ڍ Dal With 2 Dots Below |
|`U+068E` | Letter | RIGHT | DAL | _0_ | ڎ Dal With 3 Dots Above |
|`U+068F` | Letter | RIGHT | DAL | _0_ | ڏ Dal With Inverted 3 Dots Above |
| | | | | |
|`U+0690` | Letter | RIGHT | DAL | _0_ | ڐ Dal With 4 Dots Above |
|`U+0691` | Letter | RIGHT | REH | _0_ | ڑ Reh With Tah Above |
|`U+0692` | Letter | RIGHT | REH | _0_ | ڒ Reh With V Above |
|`U+0693` | Letter | RIGHT | REH | _0_ | ړ Reh With Attached Ring Below |
|`U+0694` | Letter | RIGHT | REH | _0_ | ڔ Reh With Dot Below |
|`U+0695` | Letter | RIGHT | REH | _0_ | ڕ Reh With V Below |
|`U+0696` | Letter | RIGHT | REH | _0_ | ږ Reh With Dot Below And Dot Within |
|`U+0697` | Letter | RIGHT | REH | _0_ | ڗ Reh With 2 Dots Above |
|`U+0698` | Letter | RIGHT | REH | _0_ | ژ Reh With 3 Dots Above |
|`U+0699` | Letter | RIGHT | REH | _0_ | ڙ Reh With 4 Dots Above |
|`U+069A` | Letter | DUAL | SEEN | _0_ | ښ Seen With Dot Below And Dot Above |
|`U+069B` | Letter | DUAL | SEEN | _0_ | ڛ Seen With 3 Dots Below |
|`U+069C` | Letter | DUAL | SEEN | _0_ | ڜ Seen With 3 Dots Below And 3 Dots Above|
|`U+069D` | Letter | DUAL | SAD | _0_ | ڝ Sad With 2 Dots Below |
|`U+069E` | Letter | DUAL | SAD | _0_ | ڞ Sad With 3 Dots Above |
|`U+069F` | Letter | DUAL | TAH | _0_ | ڟ Tah With 3 Dots Above |
| | | | | |
|`U+06A0` | Letter | DUAL | AIN | _0_ | ڠ Ain With 3 Dots Above |
|`U+06A1` | Letter | DUAL | FEH | _0_ | ڡ Dotless Feh |
|`U+06A2` | Letter | DUAL | FEH | _0_ | ڢ Dotless Feh With Dot Below |
|`U+06A3` | Letter | DUAL | FEH | _0_ | ڣ Feh With Dot Below |
|`U+06A4` | Letter | DUAL | FEH | _0_ | ڤ Dotless Feh With 3 Dots Above |
|`U+06A5` | Letter | DUAL | FEH | _0_ | ڥ Dotless Feh With 3 Dots Below |
|`U+06A6` | Letter | DUAL | FEH | _0_ | ڦ Dotless Feh With 4 Dots Above |
|`U+06A7` | Letter | DUAL | QAF | _0_ | ڧ Dotless Qaf With Dot Above |
|`U+06A8` | Letter | DUAL | QAF | _0_ | ڨ Dotless Qaf With 3 Dots Above |
|`U+06A9` | Letter | DUAL | GAF | _0_ | ک Keheh |
|`U+06AA` | Letter | DUAL | SWASH_KAF | _0_ | ڪ Swash Kaf |
|`U+06AB` | Letter | DUAL | GAF | _0_ | ګ Keheh With Attached Ring Below |
|`U+06AC` | Letter | DUAL | KAF | _0_ | ڬ Kaf With Dot Above |
|`U+06AD` | Letter | DUAL | KAF | _0_ | ڭ Kaf With 3 Dots Above |
|`U+06AE` | Letter | DUAL | KAF | _0_ | ڮ Kaf With 3 Dots Below |
|`U+06AF` | Letter | DUAL | GAF | _0_ | گ Gaf |
| | | | | |
|`U+06B0` | Letter | DUAL | GAF | _0_ | ڰ Gaf With Attached Ring Below |
|`U+06B1` | Letter | DUAL | GAF | _0_ | ڱ Gaf With 2 Dots Above |
|`U+06B2` | Letter | DUAL | GAF | _0_ | ڲ Gaf With 2 Dots Below |
|`U+06B3` | Letter | DUAL | GAF | _0_ | ڳ Gaf With Vertical 2 Dots Below |
|`U+06B4` | Letter | DUAL | GAF | _0_ | ڴ Gaf With 3 Dots Above |
|`U+06B5` | Letter | DUAL | LAM | _0_ | ڵ Lam With V Above |
|`U+06B6` | Letter | DUAL | LAM | _0_ | ڶ Lam With Dot Above |
|`U+06B7` | Letter | DUAL | LAM | _0_ | ڷ Lam With 3 Dots Above |
|`U+06B8` | Letter | DUAL | LAM | _0_ | ڸ Lam With 3 Dots Below |
|`U+06B9` | Letter | DUAL | NOON | _0_ | ڹ Noon With Dot Below |
|`U+06BA` | Letter | DUAL | NOON | _0_ | ں Dotless Noon |
|`U+06BB` | Letter | DUAL | NOON | _0_ | ڻ Dotless Noon With Tah Above |
|`U+06BC` | Letter | DUAL | NOON | _0_ | ڼ Noon With Attached Ring Below |
|`U+06BD` | Letter | DUAL | NYA | _0_ | ڽ Nya |
|`U+06BE` | Letter | DUAL | KNOTTED_HEH | _0_ | ھ Knotted Heh |
|`U+06BF` | Letter | DUAL | HAH | _0_ | ڿ Hah With 3 Dots Below And Dot Above |
| | | | | |
|`U+06C0` | Letter | RIGHT | TEH_MARBUTA | _0_ | ۀ Dotless Teh Marbuta With Hamza Above |
|`U+06C1` | Letter | DUAL | HEH_GOAL | _0_ | ہ Heh Goal |
|`U+06C2` | Letter | DUAL | HEH_GOAL | _0_ | ۂ Heh Goal With Hamza Above |
|`U+06C3` | Letter | RIGHT | TEH_MARBUTA_GOAL | _0_ | ۃ Teh Marbuta Goal |
|`U+06C4` | Letter | RIGHT | WAW | _0_ | ۄ Waw With Attached Ring Within |
|`U+06C5` | Letter | RIGHT | WAW | _0_ | ۅ Waw With Bar |
|`U+06C6` | Letter | RIGHT | WAW | _0_ | ۆ Waw With V Above |
|`U+06C7` | Letter | RIGHT | WAW | _0_ | ۇ Waw With Damma Above |
|`U+06C8` | Letter | RIGHT | WAW | _0_ | ۈ Waw With Alef Above |
|`U+06C9` | Letter | RIGHT | WAW | _0_ | ۉ Waw With Inverted V Above |
|`U+06CA` | Letter | RIGHT | WAW | _0_ | ۊ Waw With 2 Dots Above |
|`U+06CB` | Letter | RIGHT | WAW | _0_ | ۋ Waw With 3 Dots Above |
|`U+06CC` | Letter | DUAL | FARSI_YEH | _0_ | ی Farsi Yeh |
|`U+06CD` | Letter | RIGHT | YEH_WITH_TAIL | _0_ | ۍ Yeh With Tail |
|`U+06CE` | Letter | DUAL | FARSI_YEH | _0_ | ێ Farsi Yeh With V Above |
|`U+06CF` | Letter | RIGHT | WAW | _0_ | ۏ Waw With Dot Above |
| | | | | |
|`U+06D0` | Letter | DUAL | YEH | _0_ | ې Dotless Yeh With Vertical 2 Dots Below|
|`U+06D1` | Letter | DUAL | YEH | _0_ | ۑ Dotless Yeh With 3 Dots Below |
|`U+06D2` | Letter | RIGHT | YEH_BARREE | _0_ | ے Yeh Barree |
|`U+06D3` | Letter | RIGHT | YEH_BARREE | _0_ | ۓ Yeh Barree With Hamza Above |
|`U+06D4` | Punctuation | NON_JOINING | _null_ | _0_ | ۔ Full Stop |
|`U+06D5` | Letter | NON_JOINING | TEH_MARBUTA | _0_ | ە Dotless Teh Marbuta |
|`U+06D6` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ۖ Small High Sad Lam Alef Maksura |
|`U+06D7` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ۗ Small High Qaf Lam Alef Maksura |
|`U+06D8` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ۘ Small High Meem Initial Form |
|`U+06D9` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ۙ Small High Lam Alef |
|`U+06DA` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ۚ Small High Jeem |
|`U+06DB` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ۛ Small High Three Dots |
|`U+06DC` | Mark [Mn] | TRANSPARENT | _null_ | 230_MCM | ۜ Small High Seen |
|`U+06DD` | Other | NON_JOINING | _null_ | _0_ | ۝ End Of Ayah |
|`U+06DE` | Other | NON_JOINING | _null_ | _0_ | ۞ Start Of Rub El Hizb |
|`U+06DF` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ۟ Small High Rounded Zero |
| | | | | |
|`U+06E0` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ۠ Small High Upright Rectangular Zero |
|`U+06E1` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ۡ Small High Dotless Head Of Khah |
|`U+06E2` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ۢ Small High Meem Isolated Form |
|`U+06E3` | Mark [Mn] | TRANSPARENT | _null_ | 220_MCM | ۣ Small Low Seen |
|`U+06E4` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ۤ Small High Madda |
|`U+06E5` | Letter modifier | NON_JOINING | _null_ | _0_ | ۥ Small Waw |
|`U+06E6` | Letter modifier | NON_JOINING | _null_ | _0_ | ۦ Small Yeh |
|`U+06E7` | Mark [Mn] | TRANSPARENT | _null_ | 230_MCM | ۧ Small High Yeh |
|`U+06E8` | Mark [Mn] | TRANSPARENT | _null_ | 230_MCM | ۨ Small High Noon |
|`U+06E9` | Symbol | NON_JOINING | _null_ | _0_ | ۩ Place Of Sajdah |
|`U+06EA` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ۪ Empty Centre Low Stop |
|`U+06EB` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ۫ Empty Centre High Stop |
|`U+06EC` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ۬ Rounded High Stop With Filled Centre |
|`U+06ED` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ۭ Small Low Meem |
|`U+06EE` | Letter | RIGHT | DAL | _0_ | ۮ Dal With Inverted V Above |
|`U+06EF` | Letter | RIGHT | REH | _0_ | ۯ Reh With Inverted V Above |
| | | | | |
|`U+06F0` | Number | NON_JOINING | _null_ | _0_ | ۰ Extended Digit Zero |
|`U+06F1` | Number | NON_JOINING | _null_ | _0_ | ۱ Extended Digit One |
|`U+06F2` | Number | NON_JOINING | _null_ | _0_ | ۲ Extended Digit Two |
|`U+06F3` | Number | NON_JOINING | _null_ | _0_ | ۳ Extended Digit Three |
|`U+06F4` | Number | NON_JOINING | _null_ | _0_ | ۴ Extended Digit Four |
|`U+06F5` | Number | NON_JOINING | _null_ | _0_ | ۵ Extended Digit Five |
|`U+06F6` | Number | NON_JOINING | _null_ | _0_ | ۶ Extended Digit Six |
|`U+06F7` | Number | NON_JOINING | _null_ | _0_ | ۷ Extended Digit Seven |
|`U+06F8` | Number | NON_JOINING | _null_ | _0_ | ۸ Extended Digit Eight |
|`U+06F9` | Number | NON_JOINING | _null_ | _0_ | ۹ Extended Digit Nine |
|`U+06FA` | Letter | DUAL | SEEN | _0_ | ۺ Sheen With Dot Below |
|`U+06FB` | Letter | DUAL | SAD | _0_ | ۻ Dad With Dot Below |
|`U+06FC` | Letter | DUAL | AIN | _0_ | ۼ Ghain With Dot Below |
|`U+06FD` | Symbol | NON_JOINING | _null_ | _0_ | ۽ Sign Sindhi Ampersand |
|`U+06FE` | Symbol | NON_JOINING | _null_ | _0_ | ۾ Sign Sindhi Postposition Men |
|`U+06FF` | Letter | DUAL | KNOTTED_HEH | _0_ | ۿ Knotted Heh With Inverted V Above |
:::
## Arabic Supplement character table ##
:::{table} Arabic Supplement block table
| Codepoint | Unicode category | Joining type | Joining group | Mark class | Glyph |
|:----------|:-----------------|:-------------|:---------------------|:-----------|-----------------------------------------------------------------|
|`U+0750` | Letter | DUAL | BEH | _0_ | ݐ Dotless Beh With Horizontal 3 Dots Below |
|`U+0751` | Letter | DUAL | BEH | _0_ | ݑ Beh With 3 Dots Above |
|`U+0752` | Letter | DUAL | BEH | _0_ | ݒ Dotless Beh With Inverted 3 Dots Below |
|`U+0753` | Letter | DUAL | BEH | _0_ | ݓ Dotless Beh With Inverted 3 Dots Below And 2 Dots Above|
|`U+0754` | Letter | DUAL | BEH | _0_ | ݔ Dotless Beh With 2 Dots Below And Dot Above |
|`U+0755` | Letter | DUAL | BEH | _0_ | ݕ Dotless Beh With Inverted V Below |
|`U+0756` | Letter | DUAL | BEH | _0_ | ݖ Dotless Beh With V Above |
|`U+0757` | Letter | DUAL | HAH | _0_ | ݗ Hah With 2 Dots Above |
|`U+0758` | Letter | DUAL | HAH | _0_ | ݘ Hah With Inverted 3 Dots Below |
|`U+0759` | Letter | RIGHT | DAL | _0_ | ݙ Dal With Vertical 2 Dots Below And Tah Above |
|`U+075A` | Letter | RIGHT | DAL | _0_ | ݚ Dal With Inverted V Below |
|`U+075B` | Letter | RIGHT | REH | _0_ | ݛ Reh With Bar |
|`U+075C` | Letter | DUAL | SEEN | _0_ | ݜ Seen With 4 Dots Above |
|`U+075D` | Letter | DUAL | AIN | _0_ | ݝ Ain With 2 Dots Above |
|`U+075E` | Letter | DUAL | AIN | _0_ | ݞ Ain With Inverted 3 Dots Above |
|`U+075F` | Letter | DUAL | AIN | _0_ | ݟ Ain With Vertical 2 Dots Above |
| | | | | |
|`U+0760` | Letter | DUAL | FEH | _0_ | ݠ Dotless Feh With 2 Dots Below |
|`U+0761` | Letter | DUAL | FEH | _0_ | ݡ Dotless Feh With Inverted 3 Dots Below |
|`U+0762` | Letter | DUAL | GAF | _0_ | ݢ Keheh With Dot Above |
|`U+0763` | Letter | DUAL | GAF | _0_ | ݣ Keheh With 3 Dots Above |
|`U+0764` | Letter | DUAL | GAF | _0_ | ݤ Keheh With Inverted 3 Dots Below |
|`U+0765` | Letter | DUAL | MEEM | _0_ | ݥ Meem With Dot Above |
|`U+0766` | Letter | DUAL | MEEM | _0_ | ݦ Meem With Dot Below |
|`U+0767` | Letter | DUAL | NOON | _0_ | ݧ Noon With 2 Dots Below |
|`U+0768` | Letter | DUAL | NOON | _0_ | ݨ Noon With Tah Above |
|`U+0769` | Letter | DUAL | NOON | _0_ | ݩ Noon With V Above |
|`U+076A` | Letter | DUAL | LAM | _0_ | ݪ Lam With Bar |
|`U+076B` | Letter | RIGHT | REH | _0_ | ݫ Reh With Vertical 2 Dots Above |
|`U+076C` | Letter | RIGHT | REH | _0_ | ݬ Reh With Hamza Above |
|`U+076D` | Letter | DUAL | SEEN | _0_ | ݭ Seen With Vertical 2 Dots Above |
|`U+076E` | Letter | DUAL | HAH | _0_ | ݮ Hah With Tah Below |
|`U+076F` | Letter | DUAL | HAH | _0_ | ݯ Hah With Tah And 2 Dots Below |
| | | | | |
|`U+0770` | Letter | DUAL | SEEN | _0_ | ݰ Seen With 2 Dots And Tah Above |
|`U+0771` | Letter | RIGHT | REH | _0_ | ݱ Reh With 2 Dots And Tah Above |
|`U+0772` | Letter | DUAL | HAH | _0_ | ݲ Hah With Tah Above |
|`U+0773` | Letter | RIGHT | ALEF | _0_ | ݳ Alef With Digit Two Above |
|`U+0774` | Letter | RIGHT | ALEF | _0_ | ݴ Alef With Digit Three Above |
|`U+0775` | Letter | DUAL | FARSI_YEH | _0_ | ݵ Farsi Yeh With Digit Two Above |
|`U+0776` | Letter | DUAL | FARSI_YEH | _0_ | ݶ Farsi Yeh With Digit Three Above |
|`U+0777` | Letter | DUAL | YEH | _0_ | ݷ Dotless Yeh With Digit Four Below |
|`U+0778` | Letter | RIGHT | WAW | _0_ | ݸ Waw With Digit Two Above |
|`U+0779` | Letter | RIGHT | WAW | _0_ | ݹ Waw With Digit Three Above |
|`U+077A` | Letter | DUAL | BURUSHASKI_YEH_BARREE| _0_ | ݺ Burushaski Yeh Barree With Digit Two Above |
|`U+077B` | Letter | DUAL | BURUSHASKI_YEH_BARREE| _0_ | ݻ Burushaski Yeh Barree With Digit Three Above |
|`U+077C` | Letter | DUAL | HAH | _0_ | ݼ Hah With Digit Four Below |
|`U+077D` | Letter | DUAL | SEEN | _0_ | ݽ Seen With Digit Four Above |
|`U+077E` | Letter | DUAL | SEEN | _0_ | ݾ Seen With Inverted V Above |
|`U+077F` | Letter | DUAL | KAF | _0_ | ݿ Kaf With 2 Dots Above |
:::
## Arabic Extended-A character table ##
:::{table} Arabic Extended-A block table
| Codepoint | Unicode category | Joining type | Joining group | Mark class | Glyph |
|:----------|:-----------------|:-------------|:---------------------|:-----------|-------------------------------------------------------|
|`U+08A0` | Letter | DUAL | BEH | _0_ | ࢠ Dotless Beh With V Below |
|`U+08A1` | Letter | DUAL | BEH | _0_ | ࢡ Beh With Hamza Above |
|`U+08A2` | Letter | DUAL | HAH | _0_ | ࢢ Hah With Dot Below And 2 Dots Above |
|`U+08A3` | Letter | DUAL | TAH | _0_ | ࢣ Tah With 2 Dots Above |
|`U+08A4` | Letter | DUAL | FEH | _0_ | ࢤ Dotless Feh With Dot Below And 3 Dots Above |
|`U+08A5` | Letter | DUAL | QAF | _0_ | ࢥ Qaf With Dot Below |
|`U+08A6` | Letter | DUAL | LAM | _0_ | ࢦ Lam With Double Bar |
|`U+08A7` | Letter | DUAL | MEEM | _0_ | ࢧ Meem With 3 Dots Above |
|`U+08A8` | Letter | DUAL | YEH | _0_ | ࢨ Yeh With Hamza Above |
|`U+08A9` | Letter | DUAL | YEH | _0_ | ࢩ Yeh With Dot Above |
|`U+08AA` | Letter | RIGHT | REH | _0_ | ࢪ Reh With Loop |
|`U+08AB` | Letter | RIGHT | WAW | _0_ | ࢫ Waw With Dot Within |
|`U+08AC` | Letter | RIGHT | ROHINGYA_YEH | _0_ | ࢬ Rohingya Yeh |
|`U+08AD` | Letter | NON_JOINING | _null_ | _0_ | ࢭ Low Alef |
|`U+08AE` | Letter | RIGHT | DAL | _0_ | ࢮ Dal With 3 Dots Below |
|`U+08AF` | Letter | DUAL | SAD | _0_ | ࢯ Sad With 3 Dots Below |
| | | | | |
|`U+08B0` | Letter | DUAL | GAF | _0_ | ࢰ Keheh With Stroke Below |
|`U+08B1` | Letter | RIGHT | STRAIGHT_WAW | _0_ | ࢱ Straight Waw |
|`U+08B2` | Letter | RIGHT | REH | _0_ | ࢲ Reh With Dot And Inverted V Above |
|`U+08B3` | Letter | DUAL | AIN | _0_ | ࢳ Ain With 3 Dots Below |
|`U+08B4` | Letter | DUAL | KAF | _0_ | ࢴ Kaf With Dot Below |
|`U+08B5` | Letter | DUAL | QAF | _0_ | ࢵ Qaf With Dot Below |
|`U+08B6` | Letter | DUAL | BEH | _0_ | ࢶ Beh With Meem Above |
|`U+08B7` | Letter | DUAL | BEH | _0_ | ࢷ Dotless Beh With 3 Dots Below And Meem Above |
|`U+08B8` | Letter | DUAL | BEH | _0_ | ࢸ Dotless Beh With Teh Above |
|`U+08B9` | Letter | RIGHT | REH | _0_ | ࢹ Reh With Noon Above |
|`U+08BA` | Letter | DUAL | YEH | _0_ | ࢺ Yeh With Noon Above |
|`U+08BB` | Letter | DUAL | AFRICAN_FEH | _0_ | ࢻ African Feh |
|`U+08BC` | Letter | DUAL | AFRICAN_QAF | _0_ | ࢼ African Qaf |
|`U+08BD` | Letter | DUAL | AFRICAN_NOON | _0_ | ࢽ African Noon |
|`U+08BE` | Letter | DUAL | BEH | _0_ | ࢾ Peh With Small V |
|`U+08BF` | Letter | DUAL | BEH | _0_ | ࢿ Teh With Small V |
| | | | | |
|`U+08C0` | Letter | DUAL | BEH | _0_ | ࣀ Tteh With Small V |
|`U+08C1` | Letter | DUAL | HAH | _0_ | ࣁ Tcheh With Small V |
|`U+08C2` | Letter | DUAL | GAF | _0_ | ࣂ Keheh With Small V |
|`U+08C3` | Letter | DUAL | AIN | _0_ | ࣃ Ghain With 3 Dots Above |
|`U+08C4` | Letter | DUAL | AFRICAN_QAF | _0_ | ࣄ African Qaf With 3 Dots Above |
|`U+08C5` | Letter | DUAL | HAH | _0_ | ࣅ Jeem With 3 Dots Above |
|`U+08C6` | Letter | DUAL | HAH | _0_ | ࣆ Jeem With 3 Dots Below |
|`U+08C7` | Letter | DUAL | LAM | _0_ | ࣇ Lam With Small Arabic Tah Above |
|`U+08C8` | Letter | DUAL | GAF | _0_ | ࣈ Graf |
|`U+08C9` | Letter modifier | TRANSPARENT | _null_ | _0_ | ࣉ Small Farsi Yeh |
|`U+08CA` | Mark [Mn] | TRANSPARENT | _null_ | 230_MCM | ࣊ Small High Farsi Yeh |
|`U+08CB` | Mark [Mn] | TRANSPARENT | _null_ | 230_MCM | ࣋ Small High Yeh Barree With Two Dots Below |
|`U+08CC` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣌ Small High Word Sah |
|`U+08CD` | Mark [Mn] | TRANSPARENT | _null_ | 230_MCM | ࣍ Small High Zah |
|`U+08CE` | Mark [Mn] | TRANSPARENT | _null_ | 230_MCM | ࣎ Large Round Dot Above |
|`U+08CF` | Mark [Mn] | TRANSPARENT | _null_ | 220_MCM | ࣏ Large Round Dot Below |
| | | | | |
|`U+08D0` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ࣐ Sukun Below |
|`U+08D1` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ࣑ Large Circle Below |
|`U+08D2` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ࣒ Large Round Dot Inside Circle Below |
|`U+08D3` | Mark [Mn] | TRANSPARENT | _null_ | 220_MCM | ࣓ Small Low Waw |
|`U+08D4` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣔ Small High Word Ar-Rub |
|`U+08D5` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣕ Small High Sad |
|`U+08D6` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣖ Small High Ain |
|`U+08D7` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣗ Small High Qaf |
|`U+08D8` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣘ Small High Noon With Kasra |
|`U+08D9` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣙ Small Low Noon With Kasra |
|`U+08DA` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣚ Small High Word Ath-Thalatha |
|`U+08DB` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣛ Small High Word As-Sajda |
|`U+08DC` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣜ Small High Word An-Nisf |
|`U+08DD` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣝ Small High Word Sakta |
|`U+08DE` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣞ Small High Word Qif |
|`U+08DF` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣟ Small High Word Waqfa |
| | | | | |
|`U+08E0` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣠ Small High Footnote Marker |
|`U+08E1` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣡ Small High Sign Safha |
|`U+08E2` | Other | NON_JOINING | _null_ | _0_ | ࣢ Disputed End Of Ayah |
|`U+08E3` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ࣣ Turned Damma Below |
|`U+08E4` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣤ Curly Fatha |
|`U+08E5` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣥ Curly Damma |
|`U+08E6` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ࣦ Curly Kasra |
|`U+08E7` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣧ Curly Fathatan |
|`U+08E8` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣨ Curly Dammatan |
|`U+08E9` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ࣩ Curly Kasratan |
|`U+08EA` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣪ Tone One Dot Above |
|`U+08EB` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣫ Tone Two Dots aAove |
|`U+08EC` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣬ Tone Loop Above |
|`U+08ED` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ࣭ Tone One Dot Below |
|`U+08EE` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ࣮ Tone Two Dots Below |
|`U+08EF` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ࣯ Tone Loop Below |
| | | | | |
|`U+08F0` | Mark [Mn] | TRANSPARENT | _null_ | 27 | ࣰ Open Fathatan |
|`U+08F1` | Mark [Mn] | TRANSPARENT | _null_ | 28 | ࣱ Open Dammatan |
|`U+08F2` | Mark [Mn] | TRANSPARENT | _null_ | 29 | ࣲ Open Kasratan |
|`U+08F3` | Mark [Mn] | TRANSPARENT | _null_ | 230_MCM | ࣳ Small High Waw |
|`U+08F4` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣴ Fatha With Ring |
|`U+08F5` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣵ Fatha With Dot Above |
|`U+08F6` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ࣶ Kasra With Dot Below |
|`U+08F7` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣷ Left Arrowhead Above |
|`U+08F8` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣸ Right Arrowhead Above |
|`U+08F9` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ࣹ Left Arrowhead Below |
|`U+08FA` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ࣺ Right Arrowhead Below |
|`U+08FB` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣻ Double Right Arrowhead Above |
|`U+08FC` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣼ Double Right Arrowhead Above With Dot |
|`U+08FD` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣽ Right Arrowhead Above With Dot |
|`U+08FE` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣾ Damma With Dot |
|`U+08FF` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࣿ Mark Sideways Noon Ghunna |
:::
## Arabic Extended-B character table ##
:::{table} Arabic Extended-B block table
| Codepoint | Unicode category | Joining type | Joining group | Mark class | Glyph |
|:----------|:-----------------|:-------------|:---------------------|:-----------|-------------------------------------------------------|
|`U+0870` | Letter | RIGHT | ALEF | _0_ | ࡰ Alef With Attached Fatha |
|`U+0871` | Letter | RIGHT | ALEF | _0_ | ࡱ Alef With Attached Top Right Fatha |
|`U+0872` | Letter | RIGHT | ALEF | _0_ | ࡲ Alef With Right Middle Stroke |
|`U+0873` | Letter | RIGHT | ALEF | _0_ | ࡳ Alef With Left Middle Stroke |
|`U+0874` | Letter | RIGHT | ALEF | _0_ | ࡴ Alef With Attached Kasra |
|`U+0875` | Letter | RIGHT | ALEF | _0_ | ࡵ Alef With Attached Bottom Right Kasra |
|`U+0876` | Letter | RIGHT | ALEF | _0_ | ࡶ Alef With Attached Round Dot Above |
|`U+0877` | Letter | RIGHT | ALEF | _0_ | ࡷ Alef With Attached Right Round Dot |
|`U+0878` | Letter | RIGHT | ALEF | _0_ | ࡸ Alef With Attached Left Round Dot |
|`U+0879` | Letter | RIGHT | ALEF | _0_ | ࡹ Alef With Attached Round Dot Below |
|`U+087A` | Letter | RIGHT | ALEF | _0_ | ࡺ Alef With Dot Above |
|`U+087B` | Letter | RIGHT | ALEF | _0_ | ࡻ Alef With Attached Top Right Fatha And Dot Above|
|`U+087C` | Letter | RIGHT | ALEF | _0_ | ࡼ Alef With Right Middle Stroke And Dot Above |
|`U+087D` | Letter | RIGHT | ALEF | _0_ | ࡽ Alef With Attached Bottom Right Kasra And Dot Above|
|`U+087E` | Letter | RIGHT | ALEF | _0_ | ࡾ Alef With Attached Top Right Fatha And Left Ring|
|`U+087F` | Letter | RIGHT | ALEF | _0_ | ࡿ Alef With Right Middle Stroke And Left Ring |
| | | | | |
|`U+0880` | Letter | RIGHT | ALEF | _0_ | ࢀ Alef With Attached Bottom Right Kasra And Left Ring|
|`U+0881` | Letter | RIGHT | ALEF | _0_ | ࢁ Alef With Attached Right Hamza |
|`U+0882` | Letter | RIGHT | ALEF | _0_ | ࢂ Alef With Attached Left Hamza |
|`U+0883` | Letter modifier | JOIN_CAUSING | _null_ | _0_ | ࢃ Tatweel With Overstruck Hamza |
|`U+0884` | Letter modifier | JOIN_CAUSING | _null_ | _0_ | ࢄ Tatweel With Overstruck Waw |
|`U+0885` | Letter modifier | JOIN_CAUSING | _null_ | _0_ | ࢅ Tatweel With Two Dots Below |
|`U+0886` | Letter | DUAL | THIN_YEH | _0_ | ࢆ Thin Yeh |
|`U+0887` | Letter | NON_JOINING | _null_ | _0_ | ࢇ Baseline Round Dot |
|`U+0888` | Symbol | NON_JOINING | _null_ | _0_ | ࢈ Raised Round Dot |
|`U+0889` | Letter | DUAL | NOON | _0_ | ࢉ Noon With Inverted Small V |
|`U+088A` | Letter | DUAL | HAH | _0_ | ࢊ Hah With Inverted Small V Below |
|`U+088B` | Letter | DUAL | TAH | _0_ | ࢋ Tah With Dot Below |
|`U+088C` | Letter | DUAL | TAH | _0_ | ࢌ Tah With Three Dots Below |
|`U+088D` | Letter | DUAL | GAF | _0_ | ࢍ Keheh With Two Dots Vertically Below |
|`U+088E` | Letter | RIGHT | VERTICAL_TAIL | _0_ | ࢎ Vertical Tail |
|`U+088F` | _unassigned_ | | | | |
| | | | | |
|`U+0890` | Symbol | NON_JOINING | _null_ | _0_ | ࢐ Pound Mark Above |
|`U+0891` | Symbol | NON_JOINING | _null_ | _0_ | ࢑ Piastre Mark Above |
|`U+0892` | _unassigned_ | | | | |
|`U+0893` | _unassigned_ | | | | |
|`U+0894` | _unassigned_ | | | | |
|`U+0895` | _unassigned_ | | | | |
|`U+0896` | _unassigned_ | | | | |
|`U+0897` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࢗ Pepet |
|`U+0898` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࢘ Small High Word Al-Juz |
|`U+0899` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ࢙ Small Low Word Ishmaam |
|`U+089A` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ࢚ Small Low Word Imaala |
|`U+089B` | Mark [Mn] | TRANSPARENT | _null_ | 220 | ࢛ Small Low Word Tasheel |
|`U+089C` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࢜ Madda Waajib |
|`U+089D` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࢝ Superscript Alef Mokhassas |
|`U+089E` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࢞ Doubled Madda |
|`U+089F` | Mark [Mn] | TRANSPARENT | _null_ | 230 | ࢟ Half Madda Over Madda |
| | | | | |
:::
## Arabic Extended-C character table ##
:::{table} Arabic Extended-C block table
| Codepoint | Unicode category | Joining type | Joining group | Mark class | Glyph |
|:----------|:-----------------|:-------------|:---------------------|:-----------|-------------------------------------------------------|
|`U+10EC0` | _unassigned_ | | | | |
|`U+10EC1` | _unassigned_ | | | | |
|`U+10EC2` | Letter | RIGHT | DAL | _0_ | 𐻂 Dal With Two Dots Vertically Below |
|`U+10EC3` | Letter | DUAL | TAH | _0_ | 𐻂 Tah With Two Dots Vertically Below |
|`U+10EC4` | Letter | DUAL | KAF | _0_ | 𐻂 Kaf With Two Dots Vertically Below |
|`U+10EC5` | _unassigned_ | | | | |
|`U+10EC6` | _unassigned_ | | | | |
|`U+10EC7` | _unassigned_ | | | | |
|`U+10EC8` | _unassigned_ | | | | |
|`U+10EC9` | _unassigned_ | | | | |
|`U+10ECA` | _unassigned_ | | | | |
|`U+10ECB` | _unassigned_ | | | | |
|`U+10ECC` | _unassigned_ | | | | |
|`U+10ECD` | _unassigned_ | | | | |
|`U+10ECE` | _unassigned_ | | | | |
|`U+10ECF` | _unassigned_ | | | | |
| | | | | |
|`U+10ED0` | _unassigned_ | | | | |
|`U+10ED1` | _unassigned_ | | | | |
|`U+10ED2` | _unassigned_ | | | | |
|`U+10ED3` | _unassigned_ | | | | |
|`U+10ED4` | _unassigned_ | | | | |
|`U+10ED5` | _unassigned_ | | | | |
|`U+10ED6` | _unassigned_ | | | | |
|`U+10ED7` | _unassigned_ | | | | |
|`U+10ED8` | _unassigned_ | | | | |
|`U+10ED9` | _unassigned_ | | | | |
|`U+10EDA` | _unassigned_ | | | | |
|`U+10EDB` | _unassigned_ | | | | |
|`U+10EDC` | _unassigned_ | | | | |
|`U+10EDD` | _unassigned_ | | | | |
|`U+10EDE` | _unassigned_ | | | | |
|`U+10EDF` | _unassigned_ | | | | |
| | | | | |
|`U+10EE0` | _unassigned_ | | | | |
|`U+10EE1` | _unassigned_ | | | | |
|`U+10EE2` | _unassigned_ | | | | |
|`U+10EE3` | _unassigned_ | | | | |
|`U+10EE4` | _unassigned_ | | | | |
|`U+10EE5` | _unassigned_ | | | | |
|`U+10EE6` | _unassigned_ | | | | |
|`U+10EE7` | _unassigned_ | | | | |
|`U+10EE8` | _unassigned_ | | | | |
|`U+10EE9` | _unassigned_ | | | | |
|`U+10EEA` | _unassigned_ | | | | |
|`U+10EEB` | _unassigned_ | | | | |
|`U+10EEC` | _unassigned_ | | | | |
|`U+10EED` | _unassigned_ | | | | |
|`U+10EEE` | _unassigned_ | | | | |
|`U+10EEF` | _unassigned_ | | | | |
| | | | | |
|`U+10EF0` | _unassigned_ | | | | |
|`U+10EF1` | _unassigned_ | | | | |
|`U+10EF2` | _unassigned_ | | | | |
|`U+10EF3` | _unassigned_ | | | | |
|`U+10EF4` | _unassigned_ | | | | |
|`U+10EF5` | _unassigned_ | | | | |
|`U+10EF6` | _unassigned_ | | | | |
|`U+10EF7` | _unassigned_ | | | | |
|`U+10EF8` | _unassigned_ | | | | |
|`U+10EF9` | _unassigned_ | | | | |
|`U+10EFA` | _unassigned_ | | | | |
|`U+10EFB` | _unassigned_ | | | | |
|`U+10EFC` | Mark [Mn] | TRANSPARENT | _null_ | _0_ | 𐻼 Combining Alef Overlay |
|`U+10EFD` | Mark [Mn] | TRANSPARENT | _null_ | 220 | 𐻽 Small Low Word Sakta |
|`U+10EFE` | Mark [Mn] | TRANSPARENT | _null_ | 220 | 𐻾 Small Low Word Qasr |
|`U+10EFF` | Mark [Mn] | TRANSPARENT | _null_ | 220 | 𐻿 Small Low Word Madda |
| | | | | |
:::
## Rumi Numeral Symbols character table ##
:::{table} Rumi Numeral Symbols block table
| Codepoint | Unicode category | Joining type | Joining group | Mark class | Glyph |
|:----------|:-----------------|:-------------|:---------------------|:-----------|--------------------------------|
|`U+10E60` | Number | NON_JOINING | _null_ | _0_ | 𐹠 Digit One |
|`U+10E61` | Number | NON_JOINING | _null_ | _0_ | 𐹡 Digit Two |
|`U+10E62` | Number | NON_JOINING | _null_ | _0_ | 𐹢 Digit Three |
|`U+10E63` | Number | NON_JOINING | _null_ | _0_ | 𐹣 Digit Four |
|`U+10E64` | Number | NON_JOINING | _null_ | _0_ | 𐹤 Digit Five |
|`U+10E65` | Number | NON_JOINING | _null_ | _0_ | 𐹥 Digit Six |
|`U+10E66` | Number | NON_JOINING | _null_ | _0_ | 𐹦 Digit Seven |
|`U+10E67` | Number | NON_JOINING | _null_ | _0_ | 𐹧 Digit Eight |
|`U+10E68` | Number | NON_JOINING | _null_ | _0_ | 𐹨 Digit Nine |
|`U+10E69` | Number | NON_JOINING | _null_ | _0_ | 𐹩 Number Ten |
|`U+10E6A` | Number | NON_JOINING | _null_ | _0_ | 𐹪 Number Twenty |
|`U+10E6B` | Number | NON_JOINING | _null_ | _0_ | 𐹫 Number Thirty |
|`U+10E6C` | Number | NON_JOINING | _null_ | _0_ | 𐹬 Number Forty |
|`U+10E6D` | Number | NON_JOINING | _null_ | _0_ | 𐹭 Number Fifty |
|`U+10E6E` | Number | NON_JOINING | _null_ | _0_ | 𐹮 Number Sixty |
|`U+10E6F` | Number | NON_JOINING | _null_ | _0_ | 𐹯 Number Seventy |
| | | | | |
|`U+10E70` | Number | NON_JOINING | _null_ | _0_ | 𐹰 Number Eighty |
|`U+10E71` | Number | NON_JOINING | _null_ | _0_ | 𐹱 Number Ninety |
|`U+10E72` | Number | NON_JOINING | _null_ | _0_ | 𐹲 Number One Hundred |
|`U+10E73` | Number | NON_JOINING | _null_ | _0_ | 𐹳 Number Two Hundred |
|`U+10E74` | Number | NON_JOINING | _null_ | _0_ | 𐹴 Number Three Hundred |
|`U+10E75` | Number | NON_JOINING | _null_ | _0_ | 𐹵 Number Four Hundred |
|`U+10E76` | Number | NON_JOINING | _null_ | _0_ | 𐹶 Number Five Hundred |
|`U+10E77` | Number | NON_JOINING | _null_ | _0_ | 𐹷 Number Six Hundred |
|`U+10E78` | Number | NON_JOINING | _null_ | _0_ | 𐹸 Number Seven Hundred |
|`U+10E79` | Number | NON_JOINING | _null_ | _0_ | 𐹹 Number Eight Hundred |
|`U+10E7A` | Number | NON_JOINING | _null_ | _0_ | 𐹺 Number Nine Hundred |
|`U+10E7B` | Number | NON_JOINING | _null_ | _0_ | 𐹻 Fraction One Half |
|`U+10E7C` | Number | NON_JOINING | _null_ | _0_ | 𐹼 Fraction One Quarter |
|`U+10E7D` | Number | NON_JOINING | _null_ | _0_ | 𐹽 Fraction One Third |
|`U+10E7E` | Number | NON_JOINING | _null_ | _0_ | 𐹾 Fraction Two Thirds |
|`U+10E7F` | _unassigned_ | | | | |
:::
<!---
## Arabic Mathematical Alphabetic Symbols character table ##
| Codepoint | Unicode category | Joining type | Joining group | Mark class | Glyph |
|:----------|:-----------------|:-------------|:---------------------|:-----------|--------------------------------|
|`U+10E60` | Number | NON_JOINING | _null_ | _0_ | 𐹠 Digit One |
|`U+10E61` | Number | NON_JOINING | _null_ | _0_ | 𐹡 Digit Two |
|`U+10E62` | Number | NON_JOINING | _null_ | _0_ | 𐹢 Digit Three |
|`U+10E63` | Number | NON_JOINING | _null_ | _0_ | 𐹣 Digit Four |
|`U+10E64` | Number | NON_JOINING | _null_ | _0_ | 𐹤 Digit Five |
|`U+10E65` | Number | NON_JOINING | _null_ | _0_ | 𐹥 Digit Six |
|`U+10E66` | Number | NON_JOINING | _null_ | _0_ | 𐹦 Digit Seven |
|`U+10E67` | Number | NON_JOINING | _null_ | _0_ | 𐹧 Digit Eight |
|`U+10E68` | Number | NON_JOINING | _null_ | _0_ | 𐹨 Digit Nine |
|`U+10E69` | Number | NON_JOINING | _null_ | _0_ | 𐹩 Number Ten |
|`U+10E6A` | Number | NON_JOINING | _null_ | _0_ | 𐹪 Number Twenty |
|`U+10E6B` | Number | NON_JOINING | _null_ | _0_ | 𐹫 Number Thirty |
|`U+10E6C` | Number | NON_JOINING | _null_ | _0_ | 𐹬 Number Forty |
|`U+10E6D` | Number | NON_JOINING | _null_ | _0_ | 𐹭 Number Fifty |
|`U+10E6E` | Number | NON_JOINING | _null_ | _0_ | 𐹮 Number Sixty |
|`U+10E6F` | Number | NON_JOINING | _null_ | _0_ | 𐹯 Number Seventy |
| | | | | |
--->
## Miscellaneous character table ##
Other important characters that may be encountered when shaping runs
of Arabic text include the dotted-circle placeholder (`U+25CC`), the
combining grapheme joiner (`U+034F`), the zero-width joiner (`U+200D`)
and zero-width non-joiner (`U+200C`), the left-to-right text marker
(`U+200E`) and right-to-left text marker (`U+200F`), and the no-break
space (`U+00A0`).
The dotted-circle placeholder is frequently used when displaying a
combining mark in isolation. Real-world text syllables may also use
other characters, such as hyphens or dashes, in a similar placeholder
fashion; shaping engines should cope with this situation gracefully.
:::{table} Miscellaneous character table
| Codepoint | Unicode category | Joining type | Joining group | Mark class | Glyph |
|:----------|:-----------------|:-------------|:---------------------|:-----------|--------------------------------|
|`U+00A0` | Separator | NON_JOINING | _null_ | _0_ |   No-break space |
|`U+034F` | Other | NON_JOINING | _null_ | _0_ | ͏ Combining grapheme joiner |
|`U+200C` | Other | NON_JOINING | _null_ | _0_ | ‌ Zero-width non-joiner |
|`U+200D` | Other | JOIN_CAUSING | _null_ | _0_ | ‍ Zero-width joiner |
|`U+200E` | Other | NON_JOINING | _null_ | _0_ | ‎ Left-to-Right marker |
|`U+200F` | Other | NON_JOINING | _null_ | _0_ | ‏ Right-to-Left marker |
|`U+2010` | Punctuation | NON_JOINING | _null_ | _0_ | ‐ Hyphen |
|`U+2011` | Punctuation | NON_JOINING | _null_ | _0_ | ‑ No-break hyphen |
|`U+2012` | Punctuation | NON_JOINING | _null_ | _0_ | ‒ Figure dash |
|`U+2013` | Punctuation | NON_JOINING | _null_ | _0_ | – En dash |
|`U+2014` | Punctuation | NON_JOINING | _null_ | _0_ | — Em dash |
|`U+25CC` | Symbol | NON_JOINING | _null_ | _0_ | ◌ Dotted circle |
:::
The combining grapheme joiner (<abbr>CGJ</abbr>) is primarily used to alter the
order in which adjacent marks are positioned during the
mark-reordering stage, in order to adhere to the needs of a
non-default language orthography.
<!--- combining grapheme joiner explanation --->
The zero-width joiner (<abbr>ZWJ</abbr>) is primarily used to force the usage of the
cursive connecting form of a letter even when the context of the
adjoining letters would not trigger the connecting form.
For example, to show the initial form of a letter in isolation (such
as for displaying it in a table of forms), the sequence "_Letter_,ZWJ"
would be used. To show the medial form of a letter in isolation, the
sequence "ZWJ,_Letter_,ZWJ" would be used.
<!--- Zero-Width Non Joiner explanation --->
The right-to-left mark (<abbr>RLM</abbr>) and left-to-right mark (<abbr>LRM</abbr>) are used by
the Unicode bidirectionality algorithm (BiDi) to indicate the points
in a text run at which the writing direction changes.
<!--- How shaping is affected by the <abbr title="Left-To-Right">LTR</abbr> and <abbr title="Right-To-Left">RTL</abbr> markers explanation --->
The no-break space is primarily used to display those codepoints that
are defined as non-spacing (such as vowel or diacritical marks and "Hamza") in an
isolated context, as an alternative to displaying them superimposed on
the dotted-circle placeholder.
================================================
FILE: character-tables/character-tables-bengali.md
================================================
# Bengali character tables #
This document lists the per-character shaping information needed to
[shape Bengali text](../opentype-shaping-bengali.md).
**Contents**
- [Bengali character table](#bengali-character-table)
- [Vedic Extensions character table](#vedic-extensions-character-table)
- [Miscellaneous character table](#miscellaneous-character-table)
## Bengali character table ##
Bengali glyphs should be classified as in the following
table. Codepoints in the Bengali block with no assigned meaning are
designated as _unassigned_ in the _Unicode category_ column.
Assigned codepoints with a _null_ in the _Shaping class_
column evoke no special behavior from the shaping engine. Note that
this does include some valid codepoints, such as currency marks,
punctuation, and other symbols.
> Note: the `NUMBER` and `SYMBOL` _Shaping classes_ are important
> during syllable identification, but generally evoke no further
> special behavior during the rest of the shaping process.
The _Mark-placement subclass_ column indicates mark-placement
positioning for codepoints in the _Mark_ category. Assigned, non-mark
codepoints have a _null_ in this column and evoke no special
mark-placement behavior. Marks tagged with [Mn] in the _Unicode
category_ column are categorized as non-spacing; marks tagged with
[Mc] are categorized as spacing-combining.
Some codepoints in the following table use a _Shaping class_ that
differs from the codepoint's Unicode _General Category_. The _Shaping
class_ takes precedence during OpenType shaping, as it captures more
specific, script-aware behavior.
:::{table} Bengali character table
| Codepoint | Unicode category | Shaping class | Mark-placement subclass | Glyph |
|:----------|:-----------------|:------------------|:---------------------------|:-----------------------------|
|`U+0980` | Letter | CONSONANT_PLACEHOLDER | _null_ | ঀ Anji |
|`U+0981` | Mark [Mn] | BINDU | TOP_POSITION | ঁ Candrabindu |
|`U+0982` | Mark [Mc] | BINDU | RIGHT_POSITION | ং Anusvara |
|`U+0983` | Mark [Mc] | VISARGA | RIGHT_POSITION | ঃ Visarga |
|`U+0984` | _unassigned_ | | | |
|`U+0985` | Letter | VOWEL_INDEPENDENT | _null_ | অ A |
|`U+0986` | Letter | VOWEL_INDEPENDENT | _null_ | আ Aa |
|`U+0987` | Letter | VOWEL_INDEPENDENT | _null_ | ই I |
|`U+0988` | Letter | VOWEL_INDEPENDENT | _null_ | ঈ Ii |
|`U+0989` | Letter | VOWEL_INDEPENDENT | _null_ | উ U |
|`U+098A` | Letter | VOWEL_INDEPENDENT | _null_ | ঊ Uu |
|`U+098B` | Letter | VOWEL_INDEPENDENT | _null_ | ঋ Vocalic R |
|`U+098C` | Letter | VOWEL_INDEPENDENT | _null_ | ঌ Vocalic L |
|`U+098D` | _unassigned_ | | | |
|`U+098E` | _unassigned_ | | | |
|`U+098F` | Letter | VOWEL_INDEPENDENT | _null_ | এ E |
| | | | |
|`U+0990` | Letter | VOWEL_INDEPENDENT | _null_ | ঐ Ai |
|`U+0991` | _unassigned_ | | | |
|`U+0992` | _unassigned_ | | | |
|`U+0993` | Letter | VOWEL_INDEPENDENT | _null_ | ও O |
|`U+0994` | Letter | VOWEL_INDEPENDENT | _null_ | ঔ Au |
|`U+0995` | Letter | CONSONANT | _null_ | ক Ka |
|`U+0996` | Letter | CONSONANT | _null_ | খ Kha |
|`U+0997` | Letter | CONSONANT | _null_ | গ Ga |
|`U+0998` | Letter | CONSONANT | _null_ | ঘ Gha |
|`U+0999` | Letter | CONSONANT | _null_ | ঙ Nga |
|`U+099A` | Letter | CONSONANT | _null_ | চ Ca |
|`U+099B` | Letter | CONSONANT | _null_ | ছ Cha |
|`U+099C` | Letter | CONSONANT | _null_ | জ Ja |
|`U+099D` | Letter | CONSONANT | _null_ | ঝ Jha |
|`U+099E` | Letter | CONSONANT | _null_ | ঞ Nya |
|`U+099F` | Letter | CONSONANT | _null_ | ট Tta |
| | | | |
|`U+09A0` | Letter | CONSONANT | _null_ | ঠ Ttha |
|`U+09A1` | Letter | CONSONANT | _null_ | ড Dda |
|`U+09A2` | Letter | CONSONANT | _null_ | ঢ Ddha |
|`U+09A3` | Letter | CONSONANT | _null_ | ণ Nna |
|`U+09A4` | Letter | CONSONANT | _null_ | ত Ta |
|`U+09A5` | Letter | CONSONANT | _null_ | থ Tha |
|`U+09A6` | Letter | CONSONANT | _null_ | দ Da |
|`U+09A7` | Letter | CONSONANT | _null_ | ধ Dha |
|`U+09A8` | Letter | CONSONANT | _null_ | ন Na |
|`U+09A9` | _unassigned_ | | | |
|`U+09AA` | Letter | CONSONANT | _null_ | প Pa |
|`U+09AB` | Letter | CONSONANT | _null_ | ফ Pha |
|`U+09AC` | Letter | CONSONANT | _null_ | ব Ba |
|`U+09AD` | Letter | CONSONANT | _null_ | ভ Bha |
|`U+09AE` | Letter | CONSONANT | _null_ | ম Ma |
|`U+09AF` | Letter | CONSONANT | _null_ | য Ya |
| | | | |
|`U+09B0` | Letter | CONSONANT | _null_ | র Ra |
|`U+09B1` | _unassigned_ | | | |
|`U+09B2` | Letter | CONSONANT | _null_ | ল La |
|`U+09B3` | _unassigned_ | | | |
|`U+09B4` | _unassigned_ | | | |
|`U+09B5` | _unassigned_ | | | |
|`U+09B6` | Letter | CONSONANT | _null_ | শ Sha |
|`U+09B7` | Letter | CONSONANT | _null_ | ষ Ssa |
|`U+09B8` | Letter | CONSONANT | _null_ | স Sa |
|`U+09B9` | Letter | CONSONANT | _null_ | হ Ha |
|`U+09BA` | _unassigned_ | | | |
|`U+09BB` | _unassigned_ | | | |
|`U+09BC` | Mark [Mn] | NUKTA | BOTTOM_POSITION | ় Nukta |
|`U+09BD` | Letter | AVAGRAHA | _null_ | ঽ Avagraha |
|`U+09BE` | Mark [Mc] | VOWEL_DEPENDENT | RIGHT_POSITION | া Sign Aa |
|`U+09BF` | Mark [Mc] | VOWEL_DEPENDENT | LEFT_POSITION | ি Sign I |
| | | | |
|`U+09C0` | Mark [Mc] | VOWEL_DEPENDENT | RIGHT_POSITION | ী Sign Ii |
|`U+09C1` | Mark [Mn] | VOWEL_DEPENDENT | BOTTOM_POSITION | ু Sign U |
|`U+09C2` | Mark [Mn] | VOWEL_DEPENDENT | BOTTOM_POSITION | ূ Sign Uu |
|`U+09C3` | Mark [Mn] | VOWEL_DEPENDENT | BOTTOM_POSITION | ৃ Sign Vocalic R |
|`U+09C4` | Mark [Mn] | VOWEL_DEPENDENT | BOTTOM_POSITION | ৄ Sign Vocalic Rr |
gitextract_xxlse0rw/
├── .github/
│ └── workflows/
│ ├── build_html_output.yml
│ └── test_document_sources.yml
├── .gitignore
├── BUILD.md
├── Makefile
├── README.md
├── _ext/
│ ├── LICENSE.md
│ ├── README.md
│ ├── abbreviations.py
│ ├── colors.py
│ └── shapingdocs_svg_color_toggles.py
├── _global.md
├── _static/
│ ├── LICENSES_FOR_INCORPORATED_SOFTWARE.txt
│ ├── custom.css
│ ├── fonts/
│ │ ├── Source_Code_Pro/
│ │ │ ├── OFL.txt
│ │ │ └── README.txt
│ │ ├── Source_Sans_3/
│ │ │ ├── OFL.txt
│ │ │ └── README.txt
│ │ └── Source_Serif_4/
│ │ ├── OFL.txt
│ │ └── README.txt
│ ├── fontsizes.html
│ └── toggleSvgColors.js
├── _templates/
│ ├── layout.html
│ └── static_nav.html
├── _toc.yml
├── build-requirements.txt
├── character-tables/
│ ├── README.md
│ ├── character-tables-arabic.md
│ ├── character-tables-bengali.md
│ ├── character-tables-devanagari.md
│ ├── character-tables-gujarati.md
│ ├── character-tables-gurmukhi.md
│ ├── character-tables-hangul.md
│ ├── character-tables-hebrew.md
│ ├── character-tables-kannada.md
│ ├── character-tables-khmer.md
│ ├── character-tables-lao.md
│ ├── character-tables-malayalam.md
│ ├── character-tables-mongolian.md
│ ├── character-tables-myanmar.md
│ ├── character-tables-nko.md
│ ├── character-tables-oriya.md
│ ├── character-tables-sinhala.md
│ ├── character-tables-syriac.md
│ ├── character-tables-tamil.md
│ ├── character-tables-telugu.md
│ ├── character-tables-thai.md
│ ├── character-tables-tibetan.md
│ └── index.md
├── conf.py
├── errata.md
├── images/
│ ├── arabic/
│ │ ├── arabic-png-image-generation-log.md
│ │ └── arabic-svg-image-generation-log.md
│ ├── bengali/
│ │ ├── bengali-png-image-generation-log.md
│ │ └── bengali-svg-image-generation-log.md
│ ├── devanagari/
│ │ ├── devanagari-png-image-generation-log.md
│ │ └── devanagari-svg-image-generation-log.md
│ ├── emoji/
│ │ └── emoji-png-image-generation-log.md
│ ├── example-fonts.txt
│ ├── gujarati/
│ │ ├── gujarati-png-image-generation-log.md
│ │ └── gujarati-svg-image-generation-log.md
│ ├── gurmukhi/
│ │ ├── gurmukhi-png-image-generation-log.md
│ │ └── gurmukhi-svg-image-generation-log.md
│ ├── hangul/
│ │ ├── hangul-png-image-generation-log.md
│ │ └── hangul-svg-image-generation-log.md
│ ├── hebrew/
│ │ ├── hebrew-png-image-generation-log.md
│ │ └── hebrew-svg-image-generation-log.md
│ ├── images-index.md
│ ├── kannada/
│ │ ├── kannada-png-image-generation-log.md
│ │ └── kannada-svg-image-generation-log.md
│ ├── khmer/
│ │ ├── khmer-png-image-generation-log.md
│ │ └── khmer-svg-image-generation-log.md
│ ├── malayalam/
│ │ ├── malayalam-png-image-generation-log.md
│ │ └── malayalam-svg-image-generation-log.md
│ ├── mongolian/
│ │ ├── mongolian-png-image-generation-log.md
│ │ └── mongolian-svg-image-generation-log.md
│ ├── myanmar/
│ │ ├── myanmar-png-image-generation-log.md
│ │ └── myanmar-svg-image-generation-log.md
│ ├── nko/
│ │ ├── nko-png-image-generation-log.md
│ │ └── nko-svg-image-generation-log.md
│ ├── oriya/
│ │ ├── oriya-png-image-generation-log.md
│ │ └── oriya-svg-image-generation-log.md
│ ├── sinhala/
│ │ ├── sinhala-png-image-generation-log.md
│ │ └── sinhala-svg-image-generation-log.md
│ ├── syriac/
│ │ ├── syriac-png-image-generation-log.md
│ │ └── syriac-svg-image-generation-log.md
│ ├── tamil/
│ │ ├── tamil-png-image-generation-log.md
│ │ └── tamil-svg-image-generation-log.md
│ ├── telugu/
│ │ ├── telugu-png-image-generation-log.md
│ │ └── telugu-svg-image-generation-log.md
│ ├── thai-lao/
│ │ ├── thai-lao-png-image-generation-log.md
│ │ └── thai-lao-svg-image-generation-log.md
│ └── tibetan/
│ ├── tibetan-png-image-generation-log.md
│ └── tibetan-svg-image-generation-log.md
├── index.md
├── make.bat
├── notes/
│ ├── README.md
│ ├── emoji-implementation.md
│ ├── index.md
│ ├── ragel-machine-notation.md
│ └── uniscribe-bug-compatibility.md
├── opentype-shaping-arabic-general.md
├── opentype-shaping-arabic.md
├── opentype-shaping-bengali.md
├── opentype-shaping-default.md
├── opentype-shaping-devanagari.md
├── opentype-shaping-emoji.md
├── opentype-shaping-gujarati.md
├── opentype-shaping-gurmukhi.md
├── opentype-shaping-hangul.md
├── opentype-shaping-hebrew.md
├── opentype-shaping-indic-general.md
├── opentype-shaping-kannada.md
├── opentype-shaping-khmer.md
├── opentype-shaping-malayalam.md
├── opentype-shaping-mongolian.md
├── opentype-shaping-myanmar.md
├── opentype-shaping-nko.md
├── opentype-shaping-normalization.md
├── opentype-shaping-oriya.md
├── opentype-shaping-sinhala.md
├── opentype-shaping-syriac.md
├── opentype-shaping-tamil.md
├── opentype-shaping-telugu.md
├── opentype-shaping-thai-lao.md
├── opentype-shaping-tibetan.md
├── opentype-shaping-use.md
├── opentype-shaping-vedic-extensions.md
├── overview.md
└── test/
├── spellcheck.yml
├── spellcheck_html.yml
└── wordlist.txt
SYMBOL INDEX (8 symbols across 2 files)
FILE: _ext/shapingdocs_svg_color_toggles.py
class svg_color_toggle_node (line 35) | class svg_color_toggle_node(nodes.General, nodes.Element):
class SVGColorToggleButton (line 41) | class SVGColorToggleButton(SphinxDirective):
method run (line 49) | def run(self) -> list[svg_color_toggle_node]:
function visit_svg_color_toggle_node_html (line 65) | def visit_svg_color_toggle_node_html(translator: HTMLTranslator, node: s...
function depart_svg_color_toggle_node_html (line 77) | def depart_svg_color_toggle_node_html(translator: HTMLTranslator, node: ...
function visit_svg_color_toggle_node_unsupported (line 88) | def visit_svg_color_toggle_node_unsupported(translator: SphinxTranslator...
function setup (line 98) | def setup(app: Sphinx): # The ExtensionMetadata stuff is not available i...
FILE: _static/toggleSvgColors.js
function toggleColor (line 1) | function toggleColor(elementId) {
Condensed preview — 132 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,649K chars).
[
{
"path": ".github/workflows/build_html_output.yml",
"chars": 708,
"preview": "name: \"Build HTML output\"\non:\n- push\n\njobs:\n html:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout"
},
{
"path": ".github/workflows/test_document_sources.yml",
"chars": 659,
"preview": "name: \"Test document sources\"\non:\n- push\n\njobs:\n linkcheck:\n runs-on: ubuntu-latest\n steps:\n - uses: actions"
},
{
"path": ".gitignore",
"chars": 146,
"preview": "# Ignore general\n*~\n\n# Ignore Unicode PDFs & misc resources\nreference/\n_build/\n\n# Ignore auto-generated binary spelling "
},
{
"path": "BUILD.md",
"chars": 5827,
"preview": "# Building a local copy of these documents #\n\nA local, static-HTML version of these documents can be built with the\n[Sph"
},
{
"path": "Makefile",
"chars": 1093,
"preview": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line, and also\n# from the "
},
{
"path": "README.md",
"chars": 6281,
"preview": "# OpenType shaping documents #\n\nSponsored by [YesLogic](https://yeslogic.com/) \n\n_<aside>Thanks also to the developers o"
},
{
"path": "_ext/LICENSE.md",
"chars": 1553,
"preview": "# License for shapingdocs Sphinx extension software\n\nUnless otherwise indicated, all code in this directory is licensed\n"
},
{
"path": "_ext/README.md",
"chars": 542,
"preview": "# Sphinx extensions and related build tools\n\nThis directory holds custom extensions used by the Sphinx builder for\nthis "
},
{
"path": "_ext/abbreviations.py",
"chars": 1973,
"preview": "# SPDX-FileCopyrightText: Copyright 2025 Nathan Willis\n#\n# SPDX-License-Identifier: BSD-2-Clause\n\"\"\"Dictionary of the ac"
},
{
"path": "_ext/colors.py",
"chars": 656,
"preview": "# SPDX-FileCopyrightText: Copyright 2025 Nathan Willis\n#\n# SPDX-License-Identifier: BSD-2-Clause\n\"\"\"The sequence of #RRG"
},
{
"path": "_ext/shapingdocs_svg_color_toggles.py",
"chars": 3550,
"preview": "# SPDX-FileCopyrightText: Copyright 2025 Nathan Willis\n#\n# SPDX-License-Identifier: BSD-2-Clause\n\n\"\"\"Sphinx extension to"
},
{
"path": "_global.md",
"chars": 132,
"preview": "```{role} togglebutton(raw)\n:format: html\n```\n\n```{raw} html\n\n<link rel=\"preload\" href=\"/images/color-filters.svg\" as=\"i"
},
{
"path": "_static/LICENSES_FOR_INCORPORATED_SOFTWARE.txt",
"chars": 16676,
"preview": "This documentation set includes files originating from the following\nupstream projects, which are each subject to their "
},
{
"path": "_static/custom.css",
"chars": 9880,
"preview": "\n/* basic.css | file:///home/nate/code/opentype-shaping-documents/_build/html/_static/basic.css */\n\ndiv.body {\n /* min-"
},
{
"path": "_static/fonts/Source_Code_Pro/OFL.txt",
"chars": 4621,
"preview": "Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Re"
},
{
"path": "_static/fonts/Source_Code_Pro/README.txt",
"chars": 2696,
"preview": "Source Code Pro Variable Font\n=============================\n\nThis download contains Source Code Pro as both variable fon"
},
{
"path": "_static/fonts/Source_Sans_3/OFL.txt",
"chars": 4578,
"preview": "Copyright 2010-2020 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a tr"
},
{
"path": "_static/fonts/Source_Sans_3/README.txt",
"chars": 2650,
"preview": "Source Sans 3 Variable Font\n===========================\n\nThis download contains Source Sans 3 as both variable fonts and"
},
{
"path": "_static/fonts/Source_Serif_4/OFL.txt",
"chars": 4393,
"preview": "This Font Software is licensed under the SIL Open Font License, Version 1.1.\r\nThis license is copied below, and is also "
},
{
"path": "_static/fonts/Source_Serif_4/README.txt",
"chars": 5746,
"preview": "Source Serif 4 Variable Font\n============================\n\nThis download contains Source Serif 4 as both variable fonts "
},
{
"path": "_static/fontsizes.html",
"chars": 9806,
"preview": "<html>\n <head>\n <title>Testing relative font sizes</title>\n\n<style>\n @font-face {\n font-family: 'Source Serif 4'"
},
{
"path": "_static/toggleSvgColors.js",
"chars": 609,
"preview": "function toggleColor(elementId) {\n demoImage = document.getElementById(elementId);\n console.log(elementId);\n \n "
},
{
"path": "_templates/layout.html",
"chars": 83,
"preview": "{%- extends \"!layout.html\" %}\n{% block extrahead %}\n {{ super() }}\n{% endblock %}\n"
},
{
"path": "_templates/static_nav.html",
"chars": 8568,
"preview": "<h3>Contents</h3>\n<ul class=\"current\">\n <li class=\"toctree-l1 static-nav\">\n <a class=\"reference internal\" href=\"/ind"
},
{
"path": "_toc.yml",
"chars": 4051,
"preview": "root: index\noptions:\n maxdepth: 0\n numbered: False\n hidden: True\n titlesonly: True\nentries:\n - file: overview\n t"
},
{
"path": "build-requirements.txt",
"chars": 320,
"preview": "alabaster==1.0.0\nimportlib-metadata>=5.0.0\nmyst-parser>=0.19.1\ndocutils==0.21.2\nmarkdown-it-py==3.0.0\npip>=22.1.2\npypars"
},
{
"path": "character-tables/README.md",
"chars": 1555,
"preview": "# Character tables #\n\nThe files in this directory include per-srcipt reference tables\nshowing the shaping-related proper"
},
{
"path": "character-tables/character-tables-arabic.md",
"chars": 87000,
"preview": "# Arabic character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Arabic text](../"
},
{
"path": "character-tables/character-tables-bengali.md",
"chars": 27087,
"preview": "# Bengali character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Bengali text](."
},
{
"path": "character-tables/character-tables-devanagari.md",
"chars": 42549,
"preview": "# Devanagari character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Devanagari t"
},
{
"path": "character-tables/character-tables-gujarati.md",
"chars": 27087,
"preview": "# Gujarati character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Gujarati text]"
},
{
"path": "character-tables/character-tables-gurmukhi.md",
"chars": 26964,
"preview": "# Gurmukhi character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Gurmukhi text]"
},
{
"path": "character-tables/character-tables-hangul.md",
"chars": 40257,
"preview": "# Hangul character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Hangul text](../"
},
{
"path": "character-tables/character-tables-hebrew.md",
"chars": 18275,
"preview": "\n# Hebrew character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Hebrew text](.."
},
{
"path": "character-tables/character-tables-kannada.md",
"chars": 27077,
"preview": "# Kannada character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Kannada text](."
},
{
"path": "character-tables/character-tables-khmer.md",
"chars": 23979,
"preview": "# Khmer character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Khmer text](../op"
},
{
"path": "character-tables/character-tables-lao.md",
"chars": 22240,
"preview": "# Lao character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Lao text](../openty"
},
{
"path": "character-tables/character-tables-malayalam.md",
"chars": 27109,
"preview": "# Malayalam character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Malayalam tex"
},
{
"path": "character-tables/character-tables-mongolian.md",
"chars": 34148,
"preview": "# Mongolian character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Mongolian tex"
},
{
"path": "character-tables/character-tables-myanmar.md",
"chars": 43538,
"preview": "# Myanmar character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Myanmar text](."
},
{
"path": "character-tables/character-tables-nko.md",
"chars": 14437,
"preview": "# N'Ko character tables #\n\nThis document lists the per-character shaping information needed to\n[shape N'Ko text](../open"
},
{
"path": "character-tables/character-tables-oriya.md",
"chars": 26926,
"preview": "# Oriya character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Oriya text](../op"
},
{
"path": "character-tables/character-tables-sinhala.md",
"chars": 29966,
"preview": "# Sinhala character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Sinhala text](."
},
{
"path": "character-tables/character-tables-syriac.md",
"chars": 19948,
"preview": "# Syriac character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Syriac text](../"
},
{
"path": "character-tables/character-tables-tamil.md",
"chars": 36547,
"preview": "# Tamil character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Tamil text](../op"
},
{
"path": "character-tables/character-tables-telugu.md",
"chars": 27081,
"preview": "# Telugu character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Telugu text](../"
},
{
"path": "character-tables/character-tables-thai.md",
"chars": 22908,
"preview": "# Thai character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Thai text](../open"
},
{
"path": "character-tables/character-tables-tibetan.md",
"chars": 34591,
"preview": "# Tibetan character tables #\n\nThis document lists the per-character shaping information needed to\n[shape Tibetan text](."
},
{
"path": "character-tables/index.md",
"chars": 1735,
"preview": "# Character tables #\n\nThe section includes per-srcipt reference tables showing the\nshaping-related properties of the cod"
},
{
"path": "conf.py",
"chars": 3337,
"preview": "# Configuration file for the Sphinx documentation builder.\n#\n# For the full list of built-in configuration values, see t"
},
{
"path": "errata.md",
"chars": 13017,
"preview": "# OpenType shaping errata #\n\nThis document details errata that shaping engines may encounter, such\nas ambiguities or omi"
},
{
"path": "images/arabic/arabic-png-image-generation-log.md",
"chars": 6062,
"preview": "# Commands used to generate the <abbr>PNG</abbr> images in [opentype-shaping-arabic.md](/opentype-shaping-arabic.md)\n\n##"
},
{
"path": "images/arabic/arabic-svg-image-generation-log.md",
"chars": 8048,
"preview": "# Commands used to generate the images in [opentype-shaping-arabic.md](../../opentype-shaping-arabic.md)\n\n## Arrow gener"
},
{
"path": "images/bengali/bengali-png-image-generation-log.md",
"chars": 13578,
"preview": "# Commands used to generate the images in [opentype-shaping-bengali.md](../../opentype-shaping-bengali.md)\n\n## Arrow gen"
},
{
"path": "images/bengali/bengali-svg-image-generation-log.md",
"chars": 14699,
"preview": "# Commands used to generate the images in [opentype-shaping-bengali.md](../../opentype-shaping-bengali.md)\n\n## Arrow gen"
},
{
"path": "images/devanagari/devanagari-png-image-generation-log.md",
"chars": 12442,
"preview": "# Commands used to generate the images in [opentype-shaping-devanagari.md](../../opentype-shaping-devanagari.md)\n\n## Arr"
},
{
"path": "images/devanagari/devanagari-svg-image-generation-log.md",
"chars": 12094,
"preview": "# Commands used to generate the images in [opentype-shaping-devanagari.md](../../opentype-shaping-devanagari.md)\n\n## Arr"
},
{
"path": "images/emoji/emoji-png-image-generation-log.md",
"chars": 31507,
"preview": "# Commands used to generate the images in [opentype-shaping-emoji.md](../../opentype-shaping-emoji.md)\n\n## Arrow general"
},
{
"path": "images/example-fonts.txt",
"chars": 9651,
"preview": "#############################################################\n# "
},
{
"path": "images/gujarati/gujarati-png-image-generation-log.md",
"chars": 11901,
"preview": "# Commands used to generate the images in [opentype-shaping-gujarati.md](../../opentype-shaping-gujarati.md)\n\n## Arrow g"
},
{
"path": "images/gujarati/gujarati-svg-image-generation-log.md",
"chars": 12155,
"preview": "# Commands used to generate the images in [opentype-shaping-gujarati.md](../../opentype-shaping-gujarati.md)\n\n## Arrow g"
},
{
"path": "images/gurmukhi/gurmukhi-png-image-generation-log.md",
"chars": 8568,
"preview": "# Commands used to generate the images in [opentype-shaping-gurmukhi.md](../../opentype-shaping-gurmukhi.md)\n\n## Arrow g"
},
{
"path": "images/gurmukhi/gurmukhi-svg-image-generation-log.md",
"chars": 8721,
"preview": "# Commands used to generate the images in [opentype-shaping-gurmukhi.md](../../opentype-shaping-gurmukhi.md)\n\n## Arrow g"
},
{
"path": "images/hangul/hangul-png-image-generation-log.md",
"chars": 4751,
"preview": "# Commands used to generate the images in [opentype-shaping-hangul.md](../../opentype-shaping-hangul.md)\n\n## Arrow gener"
},
{
"path": "images/hangul/hangul-svg-image-generation-log.md",
"chars": 4731,
"preview": "# Commands used to generate the images in [opentype-shaping-hangul.md](../../opentype-shaping-hangul.md)\n\n## Arrow gener"
},
{
"path": "images/hebrew/hebrew-png-image-generation-log.md",
"chars": 3261,
"preview": "# Commands used to generate the images in [opentype-shaping-hebrew.md](../../opentype-shaping-hebrew.md)\n\n## Arrow gener"
},
{
"path": "images/hebrew/hebrew-svg-image-generation-log.md",
"chars": 4268,
"preview": "# Commands used to generate the images in [opentype-shaping-hebrew.md](../../opentype-shaping-hebrew.md)\n\n## Arrow gener"
},
{
"path": "images/images-index.md",
"chars": 5488,
"preview": "\n# Images #\n\nThis section includes a separate subdirectory for each script,\ncontaining the images included in the releva"
},
{
"path": "images/kannada/kannada-png-image-generation-log.md",
"chars": 8912,
"preview": "# Commands used to generate the images in [opentype-shaping-kannada.md](../../opentype-shaping-kannada.md)\n\n## Arrow gen"
},
{
"path": "images/kannada/kannada-svg-image-generation-log.md",
"chars": 8701,
"preview": "# Commands used to generate the images in [opentype-shaping-kannada.md](../../opentype-shaping-kannada.md)\n\n## Arrow gen"
},
{
"path": "images/khmer/khmer-png-image-generation-log.md",
"chars": 9552,
"preview": "# Commands used to generate the images in [opentype-shaping-khmer.md](../../opentype-shaping-khmer.md)\n\n## Arrow general"
},
{
"path": "images/khmer/khmer-svg-image-generation-log.md",
"chars": 9784,
"preview": "# Commands used to generate the images in [opentype-shaping-khmer.md](../../opentype-shaping-khmer.md)\n\n## Arrow general"
},
{
"path": "images/malayalam/malayalam-png-image-generation-log.md",
"chars": 13200,
"preview": "# Commands used to generate the images in [opentype-shaping-malayalam.md](../../opentype-shaping-malayalam.md)\n\n## Arrow"
},
{
"path": "images/malayalam/malayalam-svg-image-generation-log.md",
"chars": 12707,
"preview": "# Commands used to generate the images in [opentype-shaping-malayalam.md](../../opentype-shaping-malayalam.md)\n\n## Arrow"
},
{
"path": "images/mongolian/mongolian-png-image-generation-log.md",
"chars": 8811,
"preview": "# Commands used to generate the images in [opentype-shaping-mongolian.md](../../opentype-shaping-mongolian.md)\n\n## Arrow"
},
{
"path": "images/mongolian/mongolian-svg-image-generation-log.md",
"chars": 8539,
"preview": "# Commands used to generate the images in [opentype-shaping-mongolian.md](../../opentype-shaping-mongolian.md)\n\n## Arrow"
},
{
"path": "images/myanmar/myanmar-png-image-generation-log.md",
"chars": 14419,
"preview": "# Commands used to generate the images in [opentype-shaping-myanmar.md](../../opentype-shaping-myanmar.md)\n\n## Arrow gen"
},
{
"path": "images/myanmar/myanmar-svg-image-generation-log.md",
"chars": 12305,
"preview": "# Commands used to generate the images in [opentype-shaping-myanmar.md](../../opentype-shaping-myanmar.md)\n\n## Arrow gen"
},
{
"path": "images/nko/nko-png-image-generation-log.md",
"chars": 2816,
"preview": "# Commands used to generate the images in [opentype-shaping-nko.md](../../opentype-shaping-nko.md)\n\n## Arrow general\n\nhb"
},
{
"path": "images/nko/nko-svg-image-generation-log.md",
"chars": 2733,
"preview": "# Commands used to generate the images in [opentype-shaping-nko.md](../../opentype-shaping-nko.md)\n\n## Arrow general\n\nhb"
},
{
"path": "images/oriya/oriya-png-image-generation-log.md",
"chars": 11768,
"preview": "# Commands used to generate the images in [opentype-shaping-oriya.md](../../opentype-shaping-oriya.md)\n\n## Arrow general"
},
{
"path": "images/oriya/oriya-svg-image-generation-log.md",
"chars": 13366,
"preview": "# Commands used to generate the images in [opentype-shaping-oriya.md](../../opentype-shaping-oriya.md)\n\n## Arrow general"
},
{
"path": "images/sinhala/sinhala-png-image-generation-log.md",
"chars": 9746,
"preview": "# Commands used to generate the images in [opentype-shaping-sinhala.md](../../opentype-shaping-sinhala.md)\n\n## Arrow gen"
},
{
"path": "images/sinhala/sinhala-svg-image-generation-log.md",
"chars": 10415,
"preview": "# Commands used to generate the images in [opentype-shaping-sinhala.md](../../opentype-shaping-sinhala.md)\n\n## Arrow gen"
},
{
"path": "images/syriac/syriac-png-image-generation-log.md",
"chars": 7365,
"preview": "# Commands used to generate the images in [opentype-shaping-syriac.md](../../opentype-shaping-syriac.md)\n\n## Arrow gener"
},
{
"path": "images/syriac/syriac-svg-image-generation-log.md",
"chars": 7259,
"preview": "# Commands used to generate the images in [opentype-shaping-syriac.md](../../opentype-shaping-syriac.md)\n\n## Arrow gener"
},
{
"path": "images/tamil/tamil-png-image-generation-log.md",
"chars": 5554,
"preview": "# Commands used to generate the images in [opentype-shaping-tamil.md](../../opentype-shaping-tamil.md)\n\n## Arrow general"
},
{
"path": "images/tamil/tamil-svg-image-generation-log.md",
"chars": 7116,
"preview": "# Commands used to generate the images in [opentype-shaping-tamil.md](../../opentype-shaping-tamil.md)\n\n## Arrow general"
},
{
"path": "images/telugu/telugu-png-image-generation-log.md",
"chars": 6560,
"preview": "# Commands used to generate the images in [opentype-shaping-telugu.md](../../opentype-shaping-telugu.md)\n\n## Arrow gener"
},
{
"path": "images/telugu/telugu-svg-image-generation-log.md",
"chars": 8620,
"preview": "# Commands used to generate the images in [opentype-shaping-telugu.md](../../opentype-shaping-telugu.md)\n\n## Arrow gener"
},
{
"path": "images/thai-lao/thai-lao-png-image-generation-log.md",
"chars": 3677,
"preview": "# Commands used to generate the images in [opentype-shaping-thai-lao.md](../../opentype-shaping-thai-lao.md)\n\n## Arrow g"
},
{
"path": "images/thai-lao/thai-lao-svg-image-generation-log.md",
"chars": 3550,
"preview": "# Commands used to generate the images in [opentype-shaping-thai-lao.md](../../opentype-shaping-thai-lao.md)\n\n## Arrow g"
},
{
"path": "images/tibetan/tibetan-png-image-generation-log.md",
"chars": 5867,
"preview": "# Commands used to generate the images in [opentype-shaping-tibetan.md](../../opentype-shaping-tibetan.md)\n\n## Arrow gen"
},
{
"path": "images/tibetan/tibetan-svg-image-generation-log.md",
"chars": 5659,
"preview": "# Commands used to generate the images in [opentype-shaping-tibetan.md](../../opentype-shaping-tibetan.md)\n\n## Arrow gen"
},
{
"path": "index.md",
"chars": 8939,
"preview": "```{include} /_global.md\n```\n\n# OpenType shaping documents #\n\nSponsored by [YesLogic](https://yeslogic.com/) \n\n_<aside>T"
},
{
"path": "make.bat",
"chars": 800,
"preview": "@ECHO OFF\r\n\r\npushd %~dp0\r\n\r\nREM Command file for Sphinx documentation\r\n\r\nif \"%SPHINXBUILD%\" == \"\" (\r\n\tset SPHINXBUILD=sp"
},
{
"path": "notes/README.md",
"chars": 1096,
"preview": "# Notes #\n\nThe files in this directory include auxiliary information that is either\ntangential to the main shaping-behav"
},
{
"path": "notes/emoji-implementation.md",
"chars": 7960,
"preview": "# Notes on Emoji font implementation #\n\nThis document notes details on how common Emoji fonts implement\nsequence, modifi"
},
{
"path": "notes/index.md",
"chars": 1082,
"preview": "# Notes #\n\nThis section includes auxiliary information that is either\ntangential to the main shaping-behavior documentat"
},
{
"path": "notes/ragel-machine-notation.md",
"chars": 442,
"preview": "# Ragel State Machine operators #\n\nAs used in the regular expressions cited in various shaper-engine\nguides.\n\n```\na* = z"
},
{
"path": "notes/uniscribe-bug-compatibility.md",
"chars": 10705,
"preview": "# Notes for preserving Uniscribe compatibility #\n\nThis document details behavior that shaping engines may wish to\nimplem"
},
{
"path": "opentype-shaping-arabic-general.md",
"chars": 19886,
"preview": "# Arabic-style shaping in OpenType #\n\nThis document details the general shaping procedure shared by Arabic, N'Ko,\nSyriac"
},
{
"path": "opentype-shaping-arabic.md",
"chars": 36740,
"preview": "# Arabic script shaping in OpenType #\n\nThis document details the general shaping procedure shared by all\nArabic script s"
},
{
"path": "opentype-shaping-bengali.md",
"chars": 88772,
"preview": "```{include} /_global.md\n```\n\n# Bengali shaping in OpenType #\n\nThis document details the shaping procedure needed to dis"
},
{
"path": "opentype-shaping-default.md",
"chars": 11349,
"preview": "# Default script shaping in OpenType #\n\nThis document details the default shaping procedure needed to display\ntext runs "
},
{
"path": "opentype-shaping-devanagari.md",
"chars": 82751,
"preview": "```{include} /_global.md\n```\n\n# Devanagari shaping in OpenType #\n\nThis document details the shaping procedure needed to "
},
{
"path": "opentype-shaping-emoji.md",
"chars": 52652,
"preview": "# Emoji shaping in OpenType #\n\nThis document details the default shaping procedure needed to shape\nemoji sequences.\n\n\n**"
},
{
"path": "opentype-shaping-gujarati.md",
"chars": 81863,
"preview": "```{include} /_global.md\n```\n\n# Gujarati shaping in OpenType #\n\nThis document details the shaping procedure needed to di"
},
{
"path": "opentype-shaping-gurmukhi.md",
"chars": 85146,
"preview": "```{include} /_global.md\n```\n\n# Gurmukhi shaping in OpenType #\n\nThis document details the shaping procedure needed to di"
},
{
"path": "opentype-shaping-hangul.md",
"chars": 23299,
"preview": "```{include} /_global.md\n```\n\n# Hangul script shaping in OpenType #\n\nThis document details the general shaping procedure"
},
{
"path": "opentype-shaping-hebrew.md",
"chars": 17440,
"preview": "```{include} /_global.md\n```\n\n# Hebrew script shaping in OpenType #\n\nThis document details the general shaping procedure"
},
{
"path": "opentype-shaping-indic-general.md",
"chars": 77952,
"preview": "# Indic script shaping in OpenType #\n\nThis document outlines the general shaping procedure shared by all\nIndic scripts, "
},
{
"path": "opentype-shaping-kannada.md",
"chars": 79912,
"preview": "```{include} /_global.md\n```\n\n# Kannada shaping in OpenType #\n\nThis document details the shaping procedure needed to dis"
},
{
"path": "opentype-shaping-khmer.md",
"chars": 45488,
"preview": "```{include} /_global.md\n```\n\n# Khmer shaping in OpenType #\n\nThis document details the shaping procedure needed to displ"
},
{
"path": "opentype-shaping-malayalam.md",
"chars": 84945,
"preview": "```{include} /_global.md\n```\n\n# Malayalam shaping in OpenType #\n\nThis document details the shaping procedure needed to d"
},
{
"path": "opentype-shaping-mongolian.md",
"chars": 34912,
"preview": "```{include} /_global.md\n```\n\n# Mongolian script shaping in OpenType #\n\nThis document details the general shaping proced"
},
{
"path": "opentype-shaping-myanmar.md",
"chars": 46906,
"preview": "```{include} /_global.md\n```\n\n# Myanmar shaping in OpenType #\n\nThis document details the shaping procedure needed to dis"
},
{
"path": "opentype-shaping-nko.md",
"chars": 28483,
"preview": "```{include} /_global.md\n```\n\n# N'Ko script shaping in OpenType #\n\nThis document details the general shaping procedure s"
},
{
"path": "opentype-shaping-normalization.md",
"chars": 26175,
"preview": "# Normalization in OpenType shaping #\n\n## Unicode normalization ##\n\nUnicode defines algorithms for normalizing a sequenc"
},
{
"path": "opentype-shaping-oriya.md",
"chars": 81279,
"preview": "```{include} /_global.md\n```\n\n# Oriya shaping in OpenType #\n\nThis document details the shaping procedure needed to displ"
},
{
"path": "opentype-shaping-sinhala.md",
"chars": 64696,
"preview": "```{include} /_global.md\n```\n\n# Sinhala shaping in OpenType #\n\nThis document details the shaping procedure needed to dis"
},
{
"path": "opentype-shaping-syriac.md",
"chars": 34921,
"preview": "```{include} /_global.md\n```\n\n# Syriac script shaping in OpenType #\n\nThis document details the general shaping procedure"
},
{
"path": "opentype-shaping-tamil.md",
"chars": 77395,
"preview": "```{include} /_global.md\n```\n\n# Tamil shaping in OpenType #\n\nThis document details the shaping procedure needed to displ"
},
{
"path": "opentype-shaping-telugu.md",
"chars": 77268,
"preview": "```{include} /_global.md\n```\n\n# Telugu shaping in OpenType #\n\nThis document details the shaping procedure needed to disp"
},
{
"path": "opentype-shaping-thai-lao.md",
"chars": 34974,
"preview": "```{include} /_global.md\n```\n\n# Thai and Lao shaping in OpenType #\n\nThis document details the shaping procedure needed t"
},
{
"path": "opentype-shaping-tibetan.md",
"chars": 24411,
"preview": "```{include} /_global.md\n```\n\n# Tibetan shaping in OpenType #\n\nThis document details the shaping procedure needed to dis"
},
{
"path": "opentype-shaping-use.md",
"chars": 37866,
"preview": "# Universal Shaping Engine script shaping in OpenType #\n\nThis document details the default shaping procedure needed to d"
},
{
"path": "opentype-shaping-vedic-extensions.md",
"chars": 10804,
"preview": "# Vedic Extensions in OpenType #\n\nThis document outlines the shaping information needed to display\ncharacters from the U"
},
{
"path": "overview.md",
"chars": 27,
"preview": "```{include} /index.md\n```\n"
},
{
"path": "test/spellcheck.yml",
"chars": 1014,
"preview": "matrix:\n- name: Main\n aspell:\n lang: en\n dictionary:\n encoding: utf-8\n wordlists:\n - 'test/wordlist.txt'\n "
},
{
"path": "test/spellcheck_html.yml",
"chars": 389,
"preview": "matrix:\n- name: HTML\n aspell:\n lang: en\n dictionary:\n encoding: utf-8\n wordlists:\n - 'test/wordlist.txt'\n "
},
{
"path": "test/wordlist.txt",
"chars": 5714,
"preview": "AllSorts\nAFA\nAFD\nAFE\nAFF\nAMTRA\nBBE\nBCA\nBCB\nBCC\nBD\nBaseC\nBiDi\nBLWF\nBSO\nBV\nBézier\nBlobmoji\nCBD\nCBDT\nCBE\nCBF\nCCA\nCCB\nCDA\nCD"
}
]
About this extraction
This page contains the full source code of the n8willis/opentype-shaping-documents GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 132 files (2.5 MB), approximately 650.2k tokens, and a symbol index with 8 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.