Full Code of goodhertz/coldtype for AI

main f1f911cf8c5b cached
507 files
5.4 MB
1.4M tokens
2854 symbols
1 requests
Download .txt
Showing preview only (5,790K chars total). Download the full file or copy to clipboard to get everything.
Repository: goodhertz/coldtype
Branch: main
Commit: f1f911cf8c5b
Files: 507
Total size: 5.4 MB

Directory structure:
gitextract_ga8pht78/

├── .coldtype.win.py
├── .gitignore
├── .python-version
├── CHANGELOG.md
├── LICENSE
├── README_EXTRAS.md
├── assets/
│   ├── .gitignore
│   ├── ColdtypeObviously.designspace
│   ├── ColdtypeObviously_BlackItalic.ufo/
│   │   ├── fontinfo.plist
│   │   ├── glyphs/
│   │   │   ├── C_.glif
│   │   │   ├── D_.glif
│   │   │   ├── E_.glif
│   │   │   ├── L_.glif
│   │   │   ├── O_.glif
│   │   │   ├── P_.glif
│   │   │   ├── T_.glif
│   │   │   ├── Y_.glif
│   │   │   ├── contents.plist
│   │   │   ├── layerinfo.plist
│   │   │   └── space.glif
│   │   ├── groups.plist
│   │   ├── layercontents.plist
│   │   ├── lib.plist
│   │   └── metainfo.plist
│   ├── ColdtypeObviously_CompressedBlackItalic.otf
│   ├── ColdtypeObviously_CompressedBlackItalic.ufo/
│   │   ├── fontinfo.plist
│   │   ├── glyphs/
│   │   │   ├── C_.glif
│   │   │   ├── D_.glif
│   │   │   ├── E_.glif
│   │   │   ├── L_.glif
│   │   │   ├── O_.glif
│   │   │   ├── P_.glif
│   │   │   ├── T_.glif
│   │   │   ├── Y_.glif
│   │   │   ├── contents.plist
│   │   │   ├── layerinfo.plist
│   │   │   └── space.glif
│   │   ├── groups.plist
│   │   ├── layercontents.plist
│   │   ├── lib.plist
│   │   └── metainfo.plist
│   ├── README.md
│   ├── logos.ufo/
│   │   ├── fontinfo.plist
│   │   ├── glyphs/
│   │   │   ├── contents.plist
│   │   │   ├── goodhertz_logo_2019.glif
│   │   │   └── layerinfo.plist
│   │   ├── glyphs.background/
│   │   │   ├── contents.plist
│   │   │   └── layerinfo.plist
│   │   ├── layercontents.plist
│   │   ├── lib.plist
│   │   └── metainfo.plist
│   └── noto.py
├── buildenv
├── docs/
│   ├── .gitignore
│   └── tutorials/
│       ├── midi.rst
│       └── type_design.rst
├── examples/
│   ├── .gitignore
│   ├── alphabet.py
│   ├── animations/
│   │   ├── 808.py
│   │   ├── _audio.py
│   │   ├── _drumsolo.py
│   │   ├── _simple.py
│   │   ├── access_frame.py
│   │   ├── adsr.py
│   │   ├── adsr_ascii.py
│   │   ├── alphabet.py
│   │   ├── alternate_glyphs.py
│   │   ├── ascii_choreography.py
│   │   ├── ascii_keyframe_positions.py
│   │   ├── ascii_keyframes.py
│   │   ├── ascii_keyframes2.py
│   │   ├── ascii_keyframes_entrance.py
│   │   ├── ascii_pixels.py
│   │   ├── ascii_simple.py
│   │   ├── ascii_twostep.py
│   │   ├── ascii_words.py
│   │   ├── avoidance.py
│   │   ├── banner.py
│   │   ├── bitmap_font.py
│   │   ├── blendmode.py
│   │   ├── bounce.py
│   │   ├── colrv1_foldit.py
│   │   ├── colrv1_nabla.py
│   │   ├── countdown.py
│   │   ├── custom_ease.py
│   │   ├── custom_output.py
│   │   ├── delay.py
│   │   ├── drumsolo2.py
│   │   ├── dswatch.py
│   │   ├── dvd.py
│   │   ├── ec.py
│   │   ├── flyin.py
│   │   ├── glyphwise.py
│   │   ├── glyphwise2_rtl.py
│   │   ├── glyphwise_keyframes.py
│   │   ├── glyphwise_wave.py
│   │   ├── glyphwise_wave2.py
│   │   ├── house.py
│   │   ├── interpolate_roughen.py
│   │   ├── ipa_vowels.py
│   │   ├── ives.py
│   │   ├── letters_easing.py
│   │   ├── linewise.py
│   │   ├── midi_cc.py
│   │   ├── moire1.py
│   │   ├── officehours.py
│   │   ├── original_demo.py
│   │   ├── penangle.py
│   │   ├── physics2d.py
│   │   ├── pixels.py
│   │   ├── pseudomorph.py
│   │   ├── recursive_shape.py
│   │   ├── recursive_text.py
│   │   ├── retails/
│   │   │   ├── casual.py
│   │   │   ├── chopper.py
│   │   │   ├── colorfont.py
│   │   │   ├── digestive_snake.py
│   │   │   ├── digestive_wind.py
│   │   │   ├── gridsystems.py
│   │   │   ├── hansjorg.py
│   │   │   ├── montreuil.py
│   │   │   ├── stacked_and_justified.py
│   │   │   ├── vulfbach.py
│   │   │   ├── wavinghand.py
│   │   │   └── welcome.py
│   │   ├── rgbsplit.py
│   │   ├── roundandround.py
│   │   ├── separation.py
│   │   ├── simple_recording.json
│   │   ├── simplevarfont.py
│   │   ├── slicer.py
│   │   ├── sonification.py
│   │   ├── spreadstack.py
│   │   ├── superoutline.py
│   │   ├── tapered_shadow.py
│   │   ├── texttopoints.py
│   │   ├── transparent_gifski.py
│   │   ├── transparent_understroke.py
│   │   ├── truchet.py
│   │   ├── truchet3.py
│   │   ├── twister.py
│   │   ├── ulrich_e.py
│   │   ├── versioned.py
│   │   ├── versioned_with_sidecar.py
│   │   ├── versioned_with_sidecar_versions.py
│   │   ├── vertical_scale.py
│   │   ├── warpblur.py
│   │   └── wheee.py
│   ├── apkjr.py
│   ├── apng.py
│   ├── axidraw/
│   │   ├── hatching.py
│   │   ├── nextdraw.py
│   │   ├── sheet.py
│   │   └── sheet_read.py
│   ├── bg_fn.py
│   ├── bg_img.py
│   ├── blender/
│   │   ├── arch.py
│   │   ├── array_separate.py
│   │   ├── bauhaus_book_14.py
│   │   ├── boston.py
│   │   ├── direct_objects.py
│   │   ├── displace.py
│   │   ├── dof.py
│   │   ├── dominos.py
│   │   ├── dominos2.py
│   │   ├── dominos3.py
│   │   ├── hobeauxborders.py
│   │   ├── ifg.py
│   │   ├── img.py
│   │   ├── liveimage.py
│   │   ├── noordzijcube.py
│   │   ├── parched.py
│   │   ├── physics_direct.py
│   │   ├── physics_upright.py
│   │   ├── reprojection.py
│   │   ├── rome.py
│   │   ├── rome_preview.py
│   │   ├── rotating.py
│   │   ├── sequence.py
│   │   ├── sequence_text3d.py
│   │   ├── sequence_text3d_rich.py
│   │   ├── simple_single.py
│   │   ├── simplebeat.py
│   │   ├── timedtext.py
│   │   ├── varfont.py
│   │   ├── varfont2.py
│   │   └── wip/
│   │       ├── bake.py
│   │       ├── blends/
│   │       │   └── boston.blend.json
│   │       ├── boston.py
│   │       ├── bump.py
│   │       ├── physics.py
│   │       ├── physics_semi2d.py
│   │       ├── physics_visible.py
│   │       └── timed3d.py
│   ├── blog.py
│   ├── borders.py
│   ├── chessboard.py
│   ├── circle_text.py
│   ├── colrv1_arabic.py
│   ├── cropandrepeat.py
│   ├── custom_hotkey.py
│   ├── diagram.py
│   ├── direct_uharfbuzz.py
│   ├── drawbot/
│   │   ├── both.py
│   │   ├── composition.py
│   │   ├── pdfdoc.py
│   │   ├── pixellation.py
│   │   └── varfont.py
│   ├── easing.py
│   ├── example.py
│   ├── freeze.py
│   ├── github_social.py
│   ├── grid_shapes.py
│   ├── image_in_path.py
│   ├── image_rotate.py
│   ├── image_rotated_quality.py
│   ├── instancer.py
│   ├── interpolated_spiral.py
│   ├── interrupted_lines.py
│   ├── layers.py
│   ├── letter_lighttrail.py
│   ├── linealigning.py
│   ├── linebreaking.py
│   ├── logo.py
│   ├── logo_state.json
│   ├── metaprogramming.py
│   ├── mirror.py
│   ├── misc/
│   │   └── no_command_line.py
│   ├── opentypesvgimagefont.py
│   ├── potracer.py
│   ├── printer.py
│   ├── random_shape.py
│   ├── restmake.py
│   ├── richtext.py
│   ├── rounded_corners.py
│   ├── scaffold.py
│   ├── scripts/
│   │   ├── player.py
│   │   ├── prores.py
│   │   ├── prores_to_frames.py
│   │   └── symbolfinder.py
│   ├── shapes.py
│   ├── simple.py
│   ├── simplest.py
│   ├── sites/
│   │   ├── .gitignore
│   │   ├── blog.coldtype.xyz/
│   │   │   ├── .gitignore
│   │   │   ├── assets/
│   │   │   │   └── style.css
│   │   │   ├── blog.coldtype.xyz.py
│   │   │   ├── pages/
│   │   │   │   └── posts/
│   │   │   │       ├── a-blog.ipynb
│   │   │   │       ├── transparent-unclickable.ipynb
│   │   │   │       └── truchet-experiments.ipynb
│   │   │   └── templates/
│   │   │       ├── _footer.j2
│   │   │       ├── _header.j2
│   │   │       ├── _post.j2
│   │   │       └── index.j2
│   │   ├── coldtype.goodhertz.com/
│   │   │   ├── assets/
│   │   │   │   └── style.css
│   │   │   ├── coldtype.goodhertz.com.py
│   │   │   ├── pages/
│   │   │   │   ├── about.ipynb
│   │   │   │   ├── cheatsheets/
│   │   │   │   │   ├── easing.md
│   │   │   │   │   ├── oneletter.md
│   │   │   │   │   ├── rectangles.ipynb
│   │   │   │   │   ├── text.ipynb
│   │   │   │   │   └── viewer.md
│   │   │   │   ├── classes_functions.ipynb
│   │   │   │   ├── install.ipynb
│   │   │   │   ├── introduction.ipynb
│   │   │   │   ├── overview.ipynb
│   │   │   │   └── tutorials/
│   │   │   │       ├── animation.ipynb
│   │   │   │       ├── blender.ipynb
│   │   │   │       ├── drawbot.ipynb
│   │   │   │       ├── geometry.ipynb
│   │   │   │       ├── shapes.ipynb
│   │   │   │       └── text.ipynb
│   │   │   └── templates/
│   │   │       ├── _docs.j2
│   │   │       ├── _footer.j2
│   │   │       ├── _header.j2
│   │   │       ├── _page.j2
│   │   │       ├── index.j2
│   │   │       └── partials/
│   │   │           └── sidebar.j2
│   │   ├── coldtype.p5js/
│   │   │   ├── assets/
│   │   │   │   ├── hb.wasm
│   │   │   │   ├── hbjs.js
│   │   │   │   └── script.js
│   │   │   └── coldtype.p5js.py
│   │   ├── coldtype.xyz/
│   │   │   └── coldtype.xyz.py
│   │   ├── portfolio/
│   │   │   ├── assets/
│   │   │   │   └── style.css
│   │   │   ├── build.py
│   │   │   ├── pages/
│   │   │   │   ├── about.md
│   │   │   │   └── posts/
│   │   │   │       └── example.md
│   │   │   └── templates/
│   │   │       ├── _footer.j2
│   │   │       ├── _header.j2
│   │   │       ├── _page.j2
│   │   │       ├── _post.j2
│   │   │       └── index.j2
│   │   └── skeleton/
│   │       └── skeleton.py
│   ├── skia_direct.py
│   ├── skia_paragraph.py
│   ├── skia_shader.py
│   ├── skia_shader.sksl
│   ├── skia_shader2.py
│   ├── skia_shader_clouds.sksl
│   ├── snakes.py
│   ├── spacing_clusters.py
│   ├── src_macro.py
│   ├── stacking.py
│   ├── svg_viewer.py
│   ├── transparency.py
│   ├── transparent_understroke.py
│   ├── ufo.py
│   ├── vector_pixels.py
│   └── wip/
│       ├── capture.py
│       ├── displace_map.py
│       ├── drawbot_image.py
│       ├── google_font.py
│       ├── toggle.py
│       └── ui.py
├── packages/
│   ├── coldtype/
│   │   ├── README.md
│   │   └── pyproject.toml
│   └── coldtype-core/
│       ├── MANIFEST.in
│       ├── README.md
│       ├── pyproject.toml
│       └── src/
│           └── coldtype/
│               ├── __init__.py
│               ├── __main__.py
│               ├── assets/
│               │   └── glyphNamesToUnicode.txt
│               ├── axidraw.py
│               ├── beziers.py
│               ├── blender/
│               │   ├── __init__.py
│               │   ├── fluent.py
│               │   ├── livepreview.py
│               │   ├── panel3d.py
│               │   ├── render.py
│               │   ├── timedtext.py
│               │   ├── util.py
│               │   └── watch.py
│               ├── capture/
│               │   └── __init__.py
│               ├── color/
│               │   ├── __init__.py
│               │   └── html.py
│               ├── css.py
│               ├── demo/
│               │   ├── blank.py
│               │   ├── boiler.py
│               │   ├── boiler_renderable.py
│               │   ├── demo.py
│               │   ├── demoblender.py
│               │   ├── docstrings.py
│               │   ├── gifski.py
│               │   └── glfw34.py
│               ├── drawbot.py
│               ├── fx/
│               │   ├── chainable.py
│               │   ├── diagram.py
│               │   ├── motion.py
│               │   ├── shapes.py
│               │   ├── skia.py
│               │   ├── warping.py
│               │   └── xray.py
│               ├── geometry/
│               │   ├── __init__.py
│               │   ├── atom.py
│               │   ├── curve.py
│               │   ├── edge.py
│               │   ├── geometrical.py
│               │   ├── line.py
│               │   ├── point.py
│               │   ├── primitives.py
│               │   └── rect.py
│               ├── grid/
│               │   └── __init__.py
│               ├── helpers.py
│               ├── img/
│               │   ├── abstract.py
│               │   ├── blendmode.py
│               │   ├── drawbotimage.py
│               │   ├── skiaimage.py
│               │   └── skiasvg.py
│               ├── interpolation/
│               │   └── __init__.py
│               ├── midi/
│               │   └── controllers.py
│               ├── notebook/
│               │   ├── __init__.py
│               │   └── parser.py
│               ├── osutil.py
│               ├── pens/
│               │   ├── axidrawpen.py
│               │   ├── blenderpen.py
│               │   ├── drawablepen.py
│               │   ├── drawbotpen.py
│               │   ├── jsonpen.py
│               │   ├── misc.py
│               │   ├── outlinepen.py
│               │   ├── rendererdrawbotpen.py
│               │   ├── reportlabpen.py
│               │   ├── skiapathpen.py
│               │   ├── skiapen.py
│               │   ├── svgpen.py
│               │   └── translationpen.py
│               ├── physics/
│               │   └── pymunk.py
│               ├── random.py
│               ├── raster.py
│               ├── renderable/
│               │   ├── __init__.py
│               │   ├── animation.py
│               │   ├── renderable.py
│               │   ├── tools.py
│               │   └── ui.py
│               ├── renderer/
│               │   ├── __init__.py
│               │   ├── config.py
│               │   ├── keyboard.py
│               │   ├── reader.py
│               │   ├── state.py
│               │   ├── ui.py
│               │   ├── utils.py
│               │   └── winman/
│               │       ├── __init__.py
│               │       ├── audio.py
│               │       ├── blender.py
│               │       ├── glfwskia.py
│               │       ├── midi.py
│               │       └── passthrough.py
│               ├── runon/
│               │   ├── __init__.py
│               │   ├── _path.py
│               │   ├── mixins/
│               │   │   ├── DrawingMixin.py
│               │   │   ├── FXMixin.py
│               │   │   ├── GeometryMixin.py
│               │   │   ├── GlyphMixin.py
│               │   │   ├── LayoutMixin.py
│               │   │   ├── PathopsMixin.py
│               │   │   ├── SegmentingMixin.py
│               │   │   ├── SerializationMixin.py
│               │   │   ├── SonificationMixin.py
│               │   │   └── StylingMixin.py
│               │   ├── path.py
│               │   ├── runon.py
│               │   └── scaffold.py
│               ├── skiashim.py
│               ├── test.py
│               ├── text/
│               │   ├── __init__.py
│               │   ├── colr/
│               │   │   ├── brsurface.py
│               │   │   └── skia.py
│               │   ├── composer.py
│               │   ├── font.py
│               │   ├── reader.py
│               │   ├── richtext.py
│               │   └── shaper.py
│               ├── timing/
│               │   ├── __init__.py
│               │   ├── audio.py
│               │   ├── clip.py
│               │   ├── easing.py
│               │   ├── midi.py
│               │   ├── nle/
│               │   │   ├── .gitignore
│               │   │   ├── ableton.py
│               │   │   ├── ascii.py
│               │   │   └── premiere.py
│               │   ├── sequence.py
│               │   ├── timeable.py
│               │   ├── timeline.py
│               │   └── viewer.py
│               ├── tool.py
│               ├── tools/
│               │   ├── chars.py
│               │   ├── dsview.py
│               │   ├── find.py
│               │   ├── findappicon.py
│               │   ├── glyphloop.py
│               │   ├── glyphs.py
│               │   ├── instances.py
│               │   ├── midi.py
│               │   ├── midicc.py
│               │   ├── vf.py
│               │   └── viewseq.py
│               ├── warping.py
│               └── web/
│                   ├── fonts.py
│                   ├── page.py
│                   ├── server.py
│                   ├── site.py
│                   └── templates/
│                       ├── notebook.j2
│                       └── page.j2
├── pyproject.toml
├── release.sh
├── run_tests.sh
├── scripts/
│   ├── inline_mixins.py
│   ├── keyboard_layout_converter.py
│   └── robofont_coldtype.py
├── test/
│   ├── drawbot/
│   │   ├── db_cli.py
│   │   ├── direct_import.py
│   │   └── style_test.py
│   ├── source_file.py
│   ├── source_file_adjacent.py
│   ├── source_file_with_config.py
│   ├── test_geometry.py
│   ├── test_helpers.py
│   ├── test_p.py
│   ├── test_pens.py
│   ├── test_pens_rendered.py
│   ├── test_runon.py
│   ├── test_syntax_mods.py
│   ├── test_time.py
│   └── visuals/
│       ├── .gitignore
│       ├── test_color_palette.py
│       ├── test_gs.py
│       ├── test_image_font.py
│       ├── test_midi_ctrl.py
│       └── test_reader_mod.py
├── tests/
│   ├── _img_only.py
│   ├── test_color.py
│   ├── test_drawbot.py
│   ├── test_fonts.py
│   ├── test_fx.py
│   ├── test_glyphwise.py
│   ├── test_i18n.py
│   ├── test_pens.py
│   ├── test_reader.py
│   ├── test_rect.py
│   ├── test_richtext.py
│   ├── test_scaffold.py
│   ├── test_src_macro.py
│   ├── test_text.py
│   ├── test_versions.py
│   └── test_versions_versions.py
└── upload_docs.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .coldtype.win.py
================================================
WINDOW_PIN = "E"
WINDOW_CONTENT_SCALE = 1
WINDOW_FLOAT = 1
#WINDOW_TRANSPARENT = 1

# this should be a properly-configured benv using b3denv
# BLENDER_PATH = "C:/Program Files/Blender Foundation/Blender 3.3/blender.exe"

from pathlib import Path
FFMPEG_COMMAND = Path("~/Downloads/ffmpeg-master-latest-win64-gpl/ffmpeg-master-latest-win64-gpl/bin/ffmpeg.exe").expanduser()

================================================
FILE: .gitignore
================================================
.DS_Store
.vscode
.idea
env
venv
venv2
venv37
venv-arm
venv_x64
venv*
benv
benv*
test/visuals/artifacts/*
test/visuals/*.blend1
test/visuals/test_media
test/visuals/pdfs
build
dist
coldtype.egg-info
packages/**/*.egg-info
__pycache__
*.pyc
*.patch
coldtype/scratch.svg
*_frames
*_layers
renders
media
scratch
scratch.py
scratch*
.coldtype.py
recordings
preserved
generative_font.ufo
fontmakes
test_cairo.pdf
test/ignorables/
examples/*.pdf
examples/*.otf
examples/*.woff2
examples/fonts/*.ufo
*.blend1
*.blend
examples/blender/blends
examples/blender/fonts
profile.profile
profile_result
deps.txt
_coldtype_notebook_tmp
.ipynb_checkpoints
_GoogleFonts
_DownloadedFonts
_site
coldtype/demo/glfw-*

================================================
FILE: .python-version
================================================
3.13

================================================
FILE: CHANGELOG.md
================================================
# Changelog

Starting at 0.5.0, all notable changes to Coldtype will be described here (briefly). Edit: looks like I forgot this existed, so we're starting again at 0.5.16

## [0.5.0] - 2021-06-02
### Added
- `coldtype.fx.skia`
- `SkiaImage` (subclass of `DATImage`, which has been moved to `coldtype.img` module)
### Removed
- `.phototype`/`.color_phototype` methods on `DATPen` — these are now "chainable" methods in the _coldtype.fx.skia_ module, and can be applied by importing ala `from coldtype.fx.skia import phototype` and then chaining to a pen, `.ch(phototype(...))`

## [0.5.16] - 2021-08-03
### Added
- Minor improvements to the self-rasterizing/drawbot-renderer, to support transparent backgrounds
### Removed
- `@drawbot_script` and `@drawbot_animation` from the global import; now reside and can be imported from `coldtype.drawbot` module

## [0.5.17] - 2021-08-06
### Fixed
- Quoting paths in `blend_frame`
### Removed
- `unicodedata2` from primary installation requirements, in order to make blender installation smoother (i.e. not require Include header-copying from python source tarball) — thanks @colinmford!

## [0.6.0] - 2021-08-30
### Added
- New features for managing meshes in BlenderPen
- embedded profiles, so `-p b3d` should now work globally
### Removed
- `duration` keyword for `@animation`, since it’s redundant to `timeline=<int>` shortcut

## [0.6.1] - 2021-08-31
### Added
- Support for `kp` and `tu` in `Glyphwise`

## [0.6.2] - 2021-09-01
### Added
- Support for single-char `Glyphwise`
- `Glyphwise` now returns `DATPens`, not `DraftingPens`

## [0.6.3] - 2021-09-07
### Added
- Support for multi-return styler fn for `Glyphwise`
- Coldtype panel for `@b3d_sequencer`

## [0.6.6] - 2021-09-10
### Added
- Better MIDI primitives
- `coldtype midi` midi viewer

## [0.6.8] - 2021-09-16
### Added
- Better axidraw primitives in new `coldtype.axidraw` namespace, demonstrated in `test/visuals/test_axidraw.png`
- New `numpad` special variable that can handle up to 9 special actions, triggerable from the numpad with the viewer enabled
### Removed
- Dependency on `PyOpenGL-accelerate` in the `[viewer]` extra — not really sure why that was there to begin with.

## [0.6.9] - 2021-09-20
### Added
- Restored some audio capabilities, via `audio=` keywords and the new `ConfigOption.EnableAudio`/`KeyboardShortcut.EnableAudio`

## [0.7.0] - 2021-09-26
### Fixed
- General tidying, particularly for use in `[notebook]`
### Removed
- Dependency on `noise` in `[viewer]`

## [0.7.1] - 2021-09-28
### Added
- Support for configurable `BLENDER_APP_PATH`
- Better support for Windows-Blender workflow

## [0.7.2] - 2021-09-29
### Added
- Support for gif export in `@notebook_animation.show`

## [0.7.3] - 2021-10-07
### Added
- `strip=` kwarg on StSt (defaulting to `True`) so incoming text is automatically stripped (but can be overriden as in the `Glyphwise` use of `StSt`)
- `coldtype.blender.fluent` experimental chainable interface for direct manipulation of blender objects

## [0.7.4] - 2021-10-21
### Added
- Support for lineTo's in `distribute_on_path`
- More `coldtype.blender.fluent` interface
- Ability to exit from renderer with -1 in `prenormalize_filepath`

## [0.7.5] - 2021-10-25
### Added
- `@ui` decorator idea, to be used/tested in Goodhertz plugin-builder

## [0.7.6] - 2021-11-02
### Added
- `.depth`, `.split`, `.wordPens`, `.walkp`
- `î` and `ï` for `index` and `indices`, also both of those on `DraftingPen` now, since they shadow functionality of `mod_contour` and `map_points`
- `utag` in walk.data
- camelCase throughout examples, headed towards standardizing on that
- `.geti` for time-based fetch in `AsciiTimeline`
### Fixed
- `style=` on precomposed/@renderable-cached

## [0.8.0] - 2021-12-13
### Added
- `MidiTimeline` to replace `MidiReader` (`MidiTimeline` uses standard `Timeline` capabilities rather than Midi-specifi classes)
- `AsciiTimeline` improvements and changed api, old `[]`-style access replaced by `.ki`; keyframe support also added, via `.kf`; many new examples in `examples/animations/ascii_*`
- `Easeable` class to encapsulate all easing functionality, i.e. a `Timeable` bound to a frame value, meaning frame values can now be implied on all `@animation`-bound timelines (via `Timeline.hold`)
- Generic lyric-video sentence building on timelines, available contextually as `.words` on a timeline (example in `examples/animations/ascii_words.py`) (adapted from older `Sequence` class (not recommended for use), originally developed for lyric video animation in Premiere, though works better now with Blender)
- Automatic timeline viewer, available with `-tv 1` command-line arg or toggleable with `V` key in viewer app
- A lot more examples
- Normalized behavior of `point=` handling in `.scale`/`.rotate`/`.skew`
- Manual-drive `BlenderTimeline`
### Removed
- Implicit `BlenderTimeline` on `@b3d_animation` and `@b3d_sequencer`
- `.progress` method (in favor of new `Easeable` apis)
### Changed
- `.e` now defaults to `loops=1`, rather than `loops=0`

## [0.8.1] - 2021-12-28
### Fixed
- Audio support via `pyaudio`

## [0.8.2] - 2022-01-10
### Fixed
- Error where windows can't watch non-existent file
- Error where windows barfs on os.uname

## [0.9.0] - 2022-01-18
### Added
- `coldtype.runon.runon` abstraction for chained/fluent method calling on nested lists
- `coldtype.runon.path` i.e. `P` as a drop-in replacement for `DATPen/DATPens` (should be fully backwards compatible), which extends `coldtype.runon.runon`
### Fixed (maybe)
- File watching on windows
### Removed
- `watchdog` dependency (using `stat().st_mtime` polling instead now since we’re already running an event loop out of necessity for the viewer)

## [0.9.1] - 2022-01-31
### Added
- `memory=` keyword for renderables (attempting some kind of support for processing-style live-coded animations)
- `fvar_<x>` generic style for addressing sorted variable font axes
- `x` key for xray mode
- `g` key for grid mode
- `p` key to print renderable content

## [0.9.2] - 2022-02-21
### Added
- support for platform-specific config files, `.coldtype.mac.py`, `.coldtype.win.py`, `.coldtype.lin.py`
- minor Blender improvements for 3D workflow

## [0.9.3] - 2022-03-08
### Added
- `C` as valid alias for `CX` on xalign
### Fixed
- `filterContours` copy before modify
- Orphan-deletion in Blender

## [0.9.5] - 2022-03-24
### Fixed
- `bake=True` for a `@b3d_animation`

## [0.9.6] - 2022-07-13
### Fixed
- Spelling mistakes [h/t @HaydenBL]
### Added
- Tons of experimental additional functionality for more direct-style scripting of blender and forthcoming coldtype-based blender typography addon (all in fluent.py, with some supporting tweaks in other coldtyper.blender infrastructure)

## [0.9.7] - 2022-08-06
### Added
- New transparency background when `bg` not specified
- `render_bg` now defaults to `True`, since that seems to be the most common use-case
- `ufo2ft` in `[blender]` optional requirements
- simple `gifski` wrapper importable from `coldtyper.renderable.animation`
### Fixed
- Better error message when trying to "release" via ffmpeg but no files have been rendered

## [0.9.8] - 2022-08-25
### Added
- New arg `round_result` on `SkiaImage.align`, to fix jaggy image aligning; defaults to True but is disableable

## [0.9.10] - 2022-09-25
### Fixed
- `glyph_to_uni` in packaged mode

## [0.9.11] - 2022-10-27
### Added
- `Runon.attach`
### Fixed
- Explicit include of ufoLib2 for blender

## [0.9.12] - 2022-11-02
### Added
- `P.spread` as horizontal-only counterpart to `P.stack` (paired with `P.track` and `P.lead` respectively, funny that they rhyme oppositely whoops)
### Fixed
- Default `"."` in ALL_FONT_DIRS for linux (so colab notebooks search in their uploaded files by default)

## [0.9.13] - 2022-11-08
### Added
- `Easeable.ec` as easing-cumulative (to help with partial rotations,
as in the new truchet animation examples, and examples/animations/ec.py)

## [0.9.14] - 2022-11-16
### Added
- `P.gridlayer`, `Runon.mapvch`, `Runon.mapvrc`

## [0.10.0] - 2023-01-15
### Added
- `.up` as canonical form of `.ups`
- Argument-less boolean operation methods for plural `P`
- Automatic _-prefixed versions of all P methods, to get clojure-style "phrase"-commenting
- `VERSIONS=` support for macro-like reversioning of a single animation
- `Font.LibraryFind` and `Font.LibraryList` to search font registry (mac-only, windows is excruciatingly difficult)
- `Font.names` to get style and family name of font via fontTools
### Changed
- `Mondrian` -> `Scaffold`
- `th` & `tv` (true-horizontal & true-vertical) have been renamed to potential confusion (since `th` could be taken to mean `true-height`) — these are now `tx` and `ty` respectively

## [0.10.2] - 2023-01-17
### Changed
- The Blender integration now inlines your local venv into Blender, meaning you no longer need to install any python packages into Blender's embedded python.

## [0.10.4] - 2023-01-20
### Added
- `-rar` (`--render-and-release`) command-line option to render-and-release(-and-then-quit)

## [0.10.5] - 2023-03-22
### Improved
- `Scaffold.cssgrid` now supports arbitrary regex keys in a dictionary arg for targeting multiple children at once (shown in test_scaffold.py)

## [0.10.6] - 2023-03-23
### Added
- `Runon.path` and `Runon.match` (taken from `Scaffold`) as new generic features, to regex-match on nested/slashed tags (i.e. paths)

## [0.10.7] - 2023-04-18
### Fixed
- `.ufo` font-reading on Windows

## [0.10.8] - 2023-06-11
### Fixed
- Font issue with `coldtype demo`

## [0.10.9] - 2023-06-23
### Added
- `b3denv` requirement, to help get default blender app path

## [0.10.10] - 2023-06-30
### Fixed
- `b3denv` assumes Blender exists, which is wrong

## [0.10.11] - 2023-07-31
### Added
- `P.to_code` (for a Goodhertz project that used the legacy `DATPen(s).to_code`)

## [0.10.12] - 2023-07-31
### Added
- Experimental support for reading control changes (cc messages) from midi files, via `MidiTimeline.ci` method

## [0.10.13] - 2023-08-04
### Added
- CycleVersionForward/CycleVersionBackward
- Support for _version.py-style sidecar versioning
- Support for special `__initials__` function to allow setting state from source file

## [0.10.14] - 2023-09-21
### Added
- `Rect.contains`/`Rect.__contains__`/`in` operator for Rect
- `E` and `W` supported on `pair_to_edges`
- `<` as parent ref in `Scaffold.find`
- Support `vert` as feature (without needing to specify `features=`)
- `RestartCount` concept in renderer
- `Font.Fontmake` for full font compilation to a tmp file

## [0.10.15] - 2024-03-27
### Added
- `coldtype.fx.skia.freeze` for in-memory "freezing" of vectors (to avoid recalculation)
- `Runon.collapseonce` for shallow collapsing

## [0.10.16] - 2024-05-16
### Added
- Support for skia-python 87.6 on python3.12

## [0.10.17]
### Added
- Fix for >= m87 skia-python with glfw gl-version setting (https://www.glfw.org/faq#macos / https://github.com/kyamagu/skia-python/issues/214)

## [0.10.18]
### Added
- Support for custom global hotkeys via `custom_hotkey` function in source files

## [0.10.19] - 2024-06-20
### Fixed
- High quality filter support for skia > m87

## [0.10.20] - 2024-07-23
### Fixed
- Spec <=0.4.2 for python-bidi since 0.5.0 is beefed

## [0.10.21] - 2024-09-30
### Added
- `use_skia_pathops_draw=False` kwarg override for `P.removeOverlap` to make sure we don't get all-off-curve+None quadratics in situations where we don't know how to convert that to cubics (i.e. in Blender)

## [0.10.22] - 2024-10-07
### Added
- `Rect.fit_aspect` for easily getting an aspect inscribed by a rect
- version lock on python-bidi

## [0.11.0] - 2024-12-12
Huge update, attempting to future proof things
### Added
- External dependency on coldtype/fontgoggles fork (instead of out-of-date inlined fontgoggles fork)
### Fixed
- Gonna be honest — fixed lots of stuff, should’ve been writing down what I was fixing!

## [0.11.1] - 2024-12-15
### Fixed
- Make sure coldtype.drawbot does not require skia-python (via incorrect import)
- try/except for filmjitter in coldtype.raster
- Don’t enable audio if audio can’t be enabled (print instructions on enabling audio instead)

## [0.11.2] - 2025-01-26
### Added
- `Font.instances` to get variable font instance information
- `coldtype instances font=<font-search>` tool
- `ººBLENDERINGºº` variable to quickly know if your code is running in blender or as a blender-renderer
- `P.trim_start` and `P.trim_end` to quickly drop points from either end of a curve
### Changed
- `P.boxCurveTo` `factor=` keyword now expects float, not int
### Fixed
- Updated coldtype-fontgoggles to latest to avoid Windows thinking it could do objc

## [0.11.3] - 2025-01-28
### Added
- Experimental support for limited keyboard layout remapping via command line -kl argument

## [0.11.4] - 2025-02-20
### Added
- `ViewerSoloFirst` and `ViewerSoloLast` shortcuts
### Changed
- `VIEWER_SOLO` is now a config option, not a one-off cli arg in renderer

## [0.11.5] - 2025-03-04
### Added
- `set_709` on `animation.export`/`FFMPEGExport` (so you can use older `ffmpeg` releases to export animations)

## [0.11.6] - 2025-03-11
### Added
- better support for custom output with ct viewseq
- experimental support for `Theme` class to set multiple color styles from a single object
### Fixed
- blender venv-inlining now look for a "src" directory if it exists (to match new pyproject.toml-enforced directory structure)

## [0.12.0] - 2025-03-18
### Changed
- base dependencies for coldtype (i.e. coldtype installed without any extra) no longer support "extended" font formats (woff, ufo, etc.), though [viewer] extra does still provide support for these; mido requirement has also been moved out of base into viewer; the point of this is to reduce the complexity of a "minimal" coldtype installation (i.e. when embedded as a backend service in another python application or a Blender extension, e.g.)

## [0.12.1] - 2025-03-23
### Changed
- refinements to Coldtype 2D panel in Blender for timeline workflow

## [0.12.2] - 2025-03-31
### Fixed
- ability to set workarea in coldtype 2d panel (blender)
- memory bug in harfbuzz bounding box calculation by downgrading to <0.47

## [0.12.3] - 2026-03-16
### Fixed
- Update to b3denv for Blender 5 compatibility
### Changed
- Use `showinfilemanager` for cross-platform showing-in-"finder"
### Added
- `demoblender` in addition to to `demo` for `uv run coldtype demoblender -p b3dlo`

## [0.12.4] - 2026-03-17
### Fixed
- Blender 5 fcurves utility

## [0.13.0]
### Changed
- `coldtype` is now a metapackage that wraps `coldtype-core`, meaning `"coldtype[viewer]"` is no longer necessary, you can just do `uv add coldtype` or `uvx coldtype <source-file>.py` and it should work

## [0.13.3]
### Changed
- Soundfiles are now opened with "r" instead of "r+" which I think was totally extraneous (h/t https://github.com/coldtype/coldtype/discussions/185)

## [0.13.4]
### Added
- `<` and `>` support for `Rect` based on combo of `w` and `h`
- `Font.metrics` for quickly-accessing somewhat normalized font metrics data
- `chars` tool
### Changed
- Moved source for glyphs.py to `tools` (as a new tools directory)

## [0.13.5]
### Fixed
- `renderer/.coldtype.py` not included in package

================================================
FILE: LICENSE
================================================
Copyright 2020 — Goodhertz, Inc.
---
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: README_EXTRAS.md
================================================
### MIDI

Todo

### Global hotkeys

Uses pynput, but on Mac permissions are a pain now: [helpful instructions](https://textexpander.com/kb/mac/textexpander-is-forcing-me-to-enable-access-for-assistive-devices-how-and-what-is-that/#:~:text=Go%20to%20the%20System%20Preferences,%E2%80%9CEnable%20for%20assistive%20devices.%E2%80%9D)

### Mouse-passthrough on glfw

Actually specifying it might not be necessary? Seems to work on my machine
```
brew install glfw --HEAD
PYGLFW_LIBRARY=/usr/local/Cellar/glfw/HEAD-0b9e48f/lib/libglfw.3.4.dylib
```

### GCP

PyTorch images seem to work nicely (`c2-deeplearning-pytorch-1-8-cu110-v20210512-debian-10`), not sure this is a real link: https://console.cloud.google.com/compute/imagesDetail/projects/ml-images/global/images/c2-deeplearning-pytorch-1-8-cu110-v20210512-debian-10?folder=&organizationId=&project=uplifted-sol-90414
https://console.cloud.google.com/compute/imagesDetail/projects/ml-images/global/images/c2-deeplearning-pytorch-1-8-cu110-v20210512-debian-10

SSH w/ cloud console, then:

- `sudo apt install libgl1-mesa-glx` # https://github.com/conda-forge/pygridgen-feedstock/issues/10
- `git clone https://github.com/goodhertz/coldtype`
- `cd coldtype`
- `pip install -e .`
- `coldtype examples/animations/house.py -a -mp -cpu -ns` # -tc 32 (if it’s a big 32-instance)

### Second Monitor

`coldtype examples/simplest.py -mn list`
should print out names of monitors, then you match then (can be a substring) like this:
`coldtype examples/simplest.py -mn SAM -wcs 1.0 -wp C`

### Installing with extras directly from git

`pip install git+https://github.com/goodhertz/coldtype#egg=coldtype[viewer,experimental]`

================================================
FILE: assets/.gitignore
================================================
Noto*
Twemoji*
Source*

================================================
FILE: assets/ColdtypeObviously.designspace
================================================
<?xml version='1.0' encoding='UTF-8'?>
<designspace format="4.0">
  <axes>
    <axis tag="wdth" name="width" minimum="0" maximum="1000" default="1000"/>
  </axes>
  <sources>
    <source filename="ColdtypeObviously_BlackItalic.ufo" familyname="Coldtype Obviously" stylename="Black Italic">
      <location>
        <dimension name="width" xvalue="1000"/>
      </location>
    </source>
    <source filename="ColdtypeObviously_CompressedBlackItalic.ufo" familyname="Coldtype Obviously" stylename="Compressed Black Italic">
      <location>
        <dimension name="width" xvalue="0"/>
      </location>
    </source>
  </sources>
  <instances>
    <instance familyname="Coldtype Obviously" stylename="Style_1" filename="instances/Coldtype Obviously-Style_1.ufo">
      <location>
        <dimension name="width" xvalue="1000"/>
      </location>
      <kerning/>
      <info/>
    </instance>
  </instances>
</designspace>


================================================
FILE: assets/ColdtypeObviously_BlackItalic.ufo/fontinfo.plist
================================================
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>ascender</key>
    <integer>815</integer>
    <key>capHeight</key>
    <integer>750</integer>
    <key>descender</key>
    <integer>-185</integer>
    <key>familyName</key>
    <string>Coldtype Obviously</string>
    <key>guidelines</key>
    <array/>
    <key>italicAngle</key>
    <real>-14.0</real>
    <key>openTypeNameDesigner</key>
    <string>James Edmondson</string>
    <key>openTypeNameDesignerURL</key>
    <string>http://ohnotype.co</string>
    <key>openTypeNameManufacturer</key>
    <string>OH no Type Company</string>
    <key>openTypeNameManufacturerURL</key>
    <string>http://ohnotype.co</string>
    <key>openTypeOS2Panose</key>
    <array>
      <integer>4</integer>
      <integer>2</integer>
      <integer>1</integer>
      <integer>5</integer>
      <integer>4</integer>
      <integer>1</integer>
      <integer>2</integer>
      <integer>2</integer>
      <integer>1</integer>
      <integer>0</integer>
    </array>
    <key>openTypeOS2UnicodeRanges</key>
    <array>
      <integer>0</integer>
      <integer>1</integer>
      <integer>2</integer>
    </array>
    <key>openTypeOS2VendorID</key>
    <string>OHNO</string>
    <key>openTypeOS2WeightClass</key>
    <integer>800</integer>
    <key>openTypeOS2WidthClass</key>
    <integer>5</integer>
    <key>postscriptBlueFuzz</key>
    <integer>0</integer>
    <key>postscriptBlueScale</key>
    <real>0.046875</real>
    <key>postscriptBlueShift</key>
    <integer>7</integer>
    <key>postscriptBlueValues</key>
    <array>
      <integer>-14</integer>
      <integer>2</integer>
      <integer>660</integer>
      <integer>673</integer>
      <integer>747</integer>
      <integer>763</integer>
      <integer>774</integer>
      <integer>789</integer>
    </array>
    <key>postscriptFamilyBlues</key>
    <array>
      <integer>-14</integer>
      <integer>2</integer>
      <integer>604</integer>
      <integer>618</integer>
      <integer>750</integer>
      <integer>763</integer>
      <integer>772</integer>
      <integer>784</integer>
    </array>
    <key>postscriptFamilyOtherBlues</key>
    <array>
      <integer>-153</integer>
      <integer>-134</integer>
    </array>
    <key>postscriptFontName</key>
    <string>Obviously-Black</string>
    <key>postscriptForceBold</key>
    <false/>
    <key>postscriptOtherBlues</key>
    <array>
      <integer>-139</integer>
      <integer>-120</integer>
    </array>
    <key>postscriptStemSnapH</key>
    <array>
      <integer>262</integer>
      <integer>333</integer>
    </array>
    <key>postscriptStemSnapV</key>
    <array>
      <integer>310</integer>
      <integer>337</integer>
    </array>
    <key>postscriptWeightName</key>
    <string>Extra-bold</string>
    <key>styleName</key>
    <string>Black Italic</string>
    <key>unitsPerEm</key>
    <integer>1000</integer>
    <key>versionMajor</key>
    <integer>0</integer>
    <key>versionMinor</key>
    <integer>0</integer>
    <key>xHeight</key>
    <integer>660</integer>
  </dict>
</plist>


================================================
FILE: assets/ColdtypeObviously_BlackItalic.ufo/glyphs/C_.glif
================================================
<?xml version='1.0' encoding='UTF-8'?>
<glyph name="C" format="2">
  <advance width="623"/>
  <unicode hex="0043"/>
  <outline>
    <contour>
      <point x="449" y="373" type="curve" smooth="yes"/>
      <point x="362" y="373"/>
      <point x="347" y="384"/>
      <point x="352" y="405" type="curve"/>
      <point x="357" y="423"/>
      <point x="378" y="427"/>
      <point x="461" y="427" type="curve" smooth="yes"/>
      <point x="501" y="427"/>
      <point x="552" y="427"/>
      <point x="621" y="421" type="curve"/>
      <point x="649" y="527"/>
      <point x="683" y="633"/>
      <point x="717" y="739" type="curve"/>
      <point x="656" y="749"/>
      <point x="582" y="761"/>
      <point x="492" y="761" type="curve" smooth="yes"/>
      <point x="243" y="761"/>
      <point x="105" y="704"/>
      <point x="38" y="435" type="curve" smooth="yes"/>
      <point x="-46" y="96"/>
      <point x="73" y="-11"/>
      <point x="296" y="-11" type="curve" smooth="yes"/>
      <point x="405" y="-11"/>
      <point x="465" y="0"/>
      <point x="534" y="12" type="curve"/>
      <point x="556" y="134"/>
      <point x="582" y="257"/>
      <point x="610" y="379" type="curve"/>
      <point x="554" y="373"/>
      <point x="487" y="373"/>
    </contour>
  </outline>
  <lib>
    <dict>
      <key>public.markColor</key>
      <string>0.9529,0.9294,0.5725,1</string>
    </dict>
  </lib>
</glyph>


================================================
FILE: assets/ColdtypeObviously_BlackItalic.ufo/glyphs/D_.glif
================================================
<?xml version='1.0' encoding='UTF-8'?>
<glyph name="D" format="2">
  <advance width="721"/>
  <unicode hex="0044"/>
  <anchor x="185" y="390" name="bar"/>
  <outline>
    <contour>
      <point x="299" y="142" type="line"/>
      <point x="310" y="205"/>
      <point x="327" y="271"/>
      <point x="354" y="382" type="curve" smooth="yes"/>
      <point x="376" y="471"/>
      <point x="398" y="555"/>
      <point x="422" y="633" type="curve"/>
      <point x="348" y="536" type="line"/>
      <point x="371" y="539"/>
      <point x="393" y="541"/>
      <point x="412" y="541" type="curve" smooth="yes"/>
      <point x="441" y="541"/>
      <point x="450" y="526"/>
      <point x="412" y="373" type="curve" smooth="yes"/>
      <point x="384" y="262"/>
      <point x="368" y="246"/>
      <point x="338" y="246" type="curve" smooth="yes"/>
      <point x="318" y="246"/>
      <point x="298" y="247"/>
      <point x="279" y="255" type="curve"/>
    </contour>
    <contour>
      <point x="324" y="0" type="line"/>
      <point x="548" y="0"/>
      <point x="650" y="47"/>
      <point x="727" y="353" type="curve" smooth="yes"/>
      <point x="809" y="678"/>
      <point x="712" y="750"/>
      <point x="492" y="750" type="curve"/>
      <point x="128" y="750" type="line"/>
      <point x="104" y="644"/>
      <point x="77" y="533"/>
      <point x="37" y="374" type="curve"/>
      <point x="-2" y="215"/>
      <point x="-30" y="107"/>
      <point x="-59" y="0" type="curve"/>
    </contour>
  </outline>
  <lib>
    <dict>
      <key>public.markColor</key>
      <string>0.9529,0.9294,0.5725,1</string>
    </dict>
  </lib>
</glyph>


================================================
FILE: assets/ColdtypeObviously_BlackItalic.ufo/glyphs/E_.glif
================================================
<?xml version='1.0' encoding='UTF-8'?>
<glyph name="E" format="2">
  <advance width="584"/>
  <unicode hex="0045"/>
  <outline>
    <contour>
      <point x="317" y="300" type="line"/>
      <point x="400" y="300"/>
      <point x="489" y="298"/>
      <point x="559" y="295" type="curve"/>
      <point x="571" y="347"/>
      <point x="595" y="440"/>
      <point x="607" y="486" type="curve"/>
      <point x="534" y="483"/>
      <point x="446" y="482"/>
      <point x="362" y="482" type="curve"/>
    </contour>
    <contour>
      <point x="493" y="0" type="line"/>
      <point x="501" y="35"/>
      <point x="513" y="84"/>
      <point x="524" y="128" type="curve" smooth="yes"/>
      <point x="535" y="174"/>
      <point x="548" y="224"/>
      <point x="557" y="257" type="curve"/>
      <point x="474" y="256"/>
      <point x="366" y="255"/>
      <point x="294" y="255" type="curve"/>
      <point x="284" y="65" type="line"/>
      <point x="309" y="163"/>
      <point x="336" y="273"/>
      <point x="365" y="388" type="curve" smooth="yes"/>
      <point x="390" y="488"/>
      <point x="416" y="594"/>
      <point x="443" y="703" type="curve"/>
      <point x="361" y="525" type="line"/>
      <point x="433" y="525"/>
      <point x="530" y="524"/>
      <point x="623" y="523" type="curve"/>
      <point x="629" y="551"/>
      <point x="640" y="597"/>
      <point x="650" y="638" type="curve" smooth="yes"/>
      <point x="660" y="677"/>
      <point x="672" y="722"/>
      <point x="680" y="750" type="curve"/>
      <point x="130" y="750" type="line"/>
      <point x="106" y="642"/>
      <point x="80" y="534"/>
      <point x="40" y="375" type="curve" smooth="yes"/>
      <point x="1" y="215"/>
      <point x="-27" y="109"/>
      <point x="-57" y="0" type="curve"/>
    </contour>
  </outline>
  <lib>
    <dict>
      <key>public.markColor</key>
      <string>0.9529,0.9294,0.5725,1</string>
    </dict>
  </lib>
</glyph>


================================================
FILE: assets/ColdtypeObviously_BlackItalic.ufo/glyphs/L_.glif
================================================
<?xml version='1.0' encoding='UTF-8'?>
<glyph name="L" format="2">
  <advance width="471"/>
  <unicode hex="004C"/>
  <anchor x="542" y="503" name="dot"/>
  <outline>
    <contour>
      <point x="390" y="0" type="line"/>
      <point x="403" y="56"/>
      <point x="417" y="112"/>
      <point x="431" y="168" type="curve" smooth="yes"/>
      <point x="445" y="223"/>
      <point x="459" y="279"/>
      <point x="474" y="335" type="curve"/>
      <point x="420" y="334"/>
      <point x="371" y="332"/>
      <point x="331" y="332" type="curve"/>
      <point x="331" y="178" type="line"/>
      <point x="346" y="235"/>
      <point x="362" y="305"/>
      <point x="380" y="376" type="curve" smooth="yes"/>
      <point x="420" y="533"/>
      <point x="462" y="697"/>
      <point x="477" y="750" type="curve"/>
      <point x="131" y="750" type="line"/>
      <point x="116" y="678"/>
      <point x="81" y="534"/>
      <point x="41" y="375" type="curve" smooth="yes"/>
      <point x="2" y="215"/>
      <point x="-41" y="57"/>
      <point x="-56" y="0" type="curve"/>
    </contour>
  </outline>
  <lib>
    <dict>
      <key>public.markColor</key>
      <string>0.9529,0.9294,0.5725,1</string>
    </dict>
  </lib>
</glyph>


================================================
FILE: assets/ColdtypeObviously_BlackItalic.ufo/glyphs/O_.glif
================================================
<?xml version='1.0' encoding='UTF-8'?>
<glyph name="O" format="2">
  <advance width="738"/>
  <unicode hex="004F"/>
  <outline>
    <contour>
      <point x="745" y="357" type="curve" smooth="yes"/>
      <point x="823" y="672"/>
      <point x="731" y="762"/>
      <point x="450" y="762" type="curve" smooth="yes"/>
      <point x="234" y="762"/>
      <point x="104" y="703"/>
      <point x="37" y="427" type="curve" smooth="yes"/>
      <point x="-39" y="114"/>
      <point x="27" y="-12"/>
      <point x="335" y="-12" type="curve"/>
      <point x="562" y="-12"/>
      <point x="675" y="77"/>
    </contour>
    <contour>
      <point x="354" y="247" type="curve"/>
      <point x="329" y="247"/>
      <point x="326" y="268"/>
      <point x="357" y="394" type="curve" smooth="yes"/>
      <point x="388" y="519"/>
      <point x="401" y="536"/>
      <point x="422" y="536" type="curve"/>
      <point x="448" y="536"/>
      <point x="450" y="519"/>
      <point x="418" y="390" type="curve" smooth="yes"/>
      <point x="388" y="268"/>
      <point x="376" y="247"/>
    </contour>
  </outline>
  <lib>
    <dict>
      <key>public.markColor</key>
      <string>0.9529,0.9294,0.5725,1</string>
    </dict>
  </lib>
</glyph>


================================================
FILE: assets/ColdtypeObviously_BlackItalic.ufo/glyphs/P_.glif
================================================
<?xml version='1.0' encoding='UTF-8'?>
<glyph name="P" format="2">
  <advance width="683"/>
  <unicode hex="0050"/>
  <outline>
    <contour>
      <point x="263" y="0" type="line"/>
      <point x="284" y="134"/>
      <point x="338" y="355"/>
      <point x="401" y="610" type="curve"/>
      <point x="344" y="552" type="line"/>
      <point x="358" y="554"/>
      <point x="392" y="555"/>
      <point x="403" y="555" type="curve" smooth="yes"/>
      <point x="439" y="555"/>
      <point x="449" y="541"/>
      <point x="423" y="439" type="curve" smooth="yes"/>
      <point x="401" y="348"/>
      <point x="385" y="328"/>
      <point x="344" y="328" type="curve" smooth="yes"/>
      <point x="334" y="328"/>
      <point x="332" y="329"/>
      <point x="316" y="329" type="curve"/>
      <point x="269" y="140" type="line"/>
      <point x="299" y="139"/>
      <point x="342" y="139"/>
      <point x="354" y="139" type="curve"/>
      <point x="597" y="139"/>
      <point x="655" y="209"/>
      <point x="704" y="407" type="curve" smooth="yes"/>
      <point x="774" y="690"/>
      <point x="687" y="750"/>
      <point x="481" y="750" type="curve"/>
      <point x="131" y="750" type="line"/>
      <point x="106" y="642"/>
      <point x="80" y="534"/>
      <point x="40" y="375" type="curve" smooth="yes"/>
      <point x="1" y="215"/>
      <point x="-27" y="109"/>
      <point x="-56" y="0" type="curve"/>
    </contour>
  </outline>
  <lib>
    <dict>
      <key>public.markColor</key>
      <string>0.9529,0.9294,0.5725,1</string>
    </dict>
  </lib>
</glyph>


================================================
FILE: assets/ColdtypeObviously_BlackItalic.ufo/glyphs/T_.glif
================================================
<?xml version='1.0' encoding='UTF-8'?>
<glyph name="T" format="2">
  <advance width="535"/>
  <unicode hex="0054"/>
  <anchor x="277" y="345" name="bar"/>
  <outline>
    <contour>
      <point x="160" y="582" type="line"/>
      <point x="98" y="332"/>
      <point x="27" y="56"/>
      <point x="10" y="-1" type="curve"/>
      <point x="59" y="2"/>
      <point x="135" y="2"/>
      <point x="192" y="2" type="curve"/>
      <point x="248" y="2"/>
      <point x="326" y="2"/>
      <point x="373" y="-1" type="curve"/>
      <point x="385" y="56"/>
      <point x="452" y="332"/>
      <point x="514" y="582" type="curve"/>
    </contour>
    <contour>
      <point x="118" y="750" type="line"/>
      <point x="109" y="708"/>
      <point x="92" y="643"/>
      <point x="78" y="584" type="curve" smooth="yes"/>
      <point x="63" y="526"/>
      <point x="46" y="457"/>
      <point x="33" y="411" type="curve"/>
      <point x="129" y="413"/>
      <point x="224" y="414"/>
      <point x="295" y="414" type="curve" smooth="yes"/>
      <point x="366" y="414"/>
      <point x="460" y="413"/>
      <point x="555" y="411" type="curve"/>
      <point x="565" y="457"/>
      <point x="582" y="526"/>
      <point x="597" y="584" type="curve" smooth="yes"/>
      <point x="611" y="643"/>
      <point x="628" y="708"/>
      <point x="640" y="750" type="curve"/>
    </contour>
  </outline>
  <lib>
    <dict>
      <key>public.markColor</key>
      <string>0.9529,0.9294,0.5725,1</string>
    </dict>
  </lib>
</glyph>


================================================
FILE: assets/ColdtypeObviously_BlackItalic.ufo/glyphs/Y_.glif
================================================
<?xml version='1.0' encoding='UTF-8'?>
<glyph name="Y" format="2">
  <advance width="639"/>
  <unicode hex="0059"/>
  <outline>
    <contour>
      <point x="109" y="301" type="line"/>
      <point x="72" y="152"/>
      <point x="39" y="34"/>
      <point x="29" y="-1" type="curve"/>
      <point x="85" y="1"/>
      <point x="177" y="2"/>
      <point x="243" y="2" type="curve"/>
      <point x="310" y="2"/>
      <point x="401" y="1"/>
      <point x="459" y="-1" type="curve"/>
      <point x="466" y="34"/>
      <point x="492" y="152"/>
      <point x="529" y="301" type="curve"/>
    </contour>
    <contour>
      <point x="467" y="750" type="line"/>
      <point x="459" y="717"/>
      <point x="435" y="624"/>
      <point x="401" y="525" type="curve" smooth="yes"/>
      <point x="376" y="453"/>
      <point x="341" y="352"/>
      <point x="323" y="306" type="curve"/>
      <point x="367" y="366" type="line"/>
      <point x="315" y="366" type="line"/>
      <point x="330" y="306" type="line"/>
      <point x="335" y="353"/>
      <point x="350" y="452"/>
      <point x="363" y="525" type="curve" smooth="yes"/>
      <point x="381" y="625"/>
      <point x="403" y="717"/>
      <point x="412" y="750" type="curve"/>
      <point x="111" y="750" type="line"/>
      <point x="109" y="649"/>
      <point x="96" y="267"/>
      <point x="94" y="220" type="curve"/>
      <point x="121" y="220"/>
      <point x="221" y="226"/>
      <point x="304" y="226" type="curve"/>
      <point x="372" y="226"/>
      <point x="442" y="221"/>
      <point x="505" y="220" type="curve"/>
      <point x="528" y="263"/>
      <point x="702" y="650"/>
      <point x="750" y="750" type="curve"/>
    </contour>
  </outline>
  <lib>
    <dict>
      <key>public.markColor</key>
      <string>0.9529,0.9294,0.5725,1</string>
    </dict>
  </lib>
</glyph>


================================================
FILE: assets/ColdtypeObviously_BlackItalic.ufo/glyphs/contents.plist
================================================
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>C</key>
    <string>C_.glif</string>
    <key>D</key>
    <string>D_.glif</string>
    <key>E</key>
    <string>E_.glif</string>
    <key>L</key>
    <string>L_.glif</string>
    <key>O</key>
    <string>O_.glif</string>
    <key>P</key>
    <string>P_.glif</string>
    <key>T</key>
    <string>T_.glif</string>
    <key>Y</key>
    <string>Y_.glif</string>
    <key>space</key>
    <string>space.glif</string>
  </dict>
</plist>


================================================
FILE: assets/ColdtypeObviously_BlackItalic.ufo/glyphs/layerinfo.plist
================================================
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>color</key>
    <string>1,0.75,0,0.7</string>
  </dict>
</plist>


================================================
FILE: assets/ColdtypeObviously_BlackItalic.ufo/glyphs/space.glif
================================================
<?xml version='1.0' encoding='UTF-8'?>
<glyph name="space" format="2">
  <advance width="195"/>
  <unicode hex="0020"/>
  <outline>
  </outline>
  <lib>
    <dict>
      <key>public.markColor</key>
      <string>0.5725,0.9294,0.9529,1</string>
    </dict>
  </lib>
</glyph>


================================================
FILE: assets/ColdtypeObviously_BlackItalic.ufo/groups.plist
================================================
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>public.kern1.A</key>
    <array>
      <string>A</string>
      <string>Aacute</string>
      <string>Abreve</string>
      <string>Acircumflex</string>
      <string>Adieresis</string>
      <string>Agrave</string>
      <string>Amacron</string>
      <string>Aogonek</string>
      <string>Aring</string>
      <string>Aringacute</string>
      <string>Atilde</string>
    </array>
    <key>public.kern1.AE</key>
    <array>
      <string>AE</string>
      <string>AEacute</string>
      <string>E</string>
      <string>Eacute</string>
      <string>Ebreve</string>
      <string>Ecaron</string>
      <string>Ecircumflex</string>
      <string>Edieresis</string>
      <string>Edotaccent</string>
      <string>Egrave</string>
      <string>Emacron</string>
      <string>Eogonek</string>
      <string>OE</string>
    </array>
    <key>public.kern1.C</key>
    <array>
      <string>C</string>
      <string>Cacute</string>
      <string>Ccaron</string>
      <string>Ccedilla</string>
      <string>Ccircumflex</string>
      <string>Cdotaccent</string>
    </array>
    <key>public.kern1.C.alt</key>
    <array>
      <string>C</string>
      <string>Cacute.alt</string>
      <string>Ccaron.alt</string>
      <string>Ccedilla.alt</string>
      <string>Ccircumflex.alt</string>
      <string>Cdotaccent.alt</string>
    </array>
    <key>public.kern1.D</key>
    <array>
      <string>D</string>
      <string>Dcaron</string>
      <string>Dcroat</string>
      <string>Eth</string>
      <string>nine</string>
      <string>nine.alt</string>
    </array>
    <key>public.kern1.Eng</key>
    <array>
      <string>Eng</string>
      <string>N</string>
      <string>Nacute</string>
      <string>Ncaron</string>
      <string>Ncommaaccent</string>
      <string>Ntilde</string>
    </array>
    <key>public.kern1.G</key>
    <array>
      <string>G</string>
      <string>Gbreve</string>
      <string>Gcircumflex</string>
      <string>Gcommaaccent</string>
      <string>Gdotaccent</string>
    </array>
    <key>public.kern1.G.alt</key>
    <array>
      <string>Gbreve.alt</string>
      <string>Gcircumflex.alt</string>
      <string>Gcommaaccent.alt</string>
      <string>Gdotaccent.alt</string>
      <string>G.alt</string>
    </array>
    <key>public.kern1.H</key>
    <array>
      <string>H</string>
      <string>Hbar</string>
      <string>Hcircumflex</string>
      <string>I</string>
      <string>Iacute</string>
      <string>Ibreve</string>
      <string>Icircumflex</string>
      <string>Idieresis</string>
      <string>Idotaccent</string>
      <string>Igrave</string>
      <string>Imacron</string>
      <string>Iogonek</string>
      <string>Itilde</string>
      <string>M</string>
    </array>
    <key>public.kern1.IJ</key>
    <array>
      <string>IJ</string>
      <string>J</string>
      <string>Jcircumflex</string>
    </array>
    <key>public.kern1.K</key>
    <array>
      <string>K</string>
      <string>Kcommaaccent</string>
    </array>
    <key>public.kern1.L</key>
    <array>
      <string>L</string>
      <string>Lacute</string>
      <string>Lcommaaccent</string>
      <string>Lslash</string>
    </array>
    <key>public.kern1.O</key>
    <array>
      <string>O</string>
      <string>Oacute</string>
      <string>Obreve</string>
      <string>Ocircumflex</string>
      <string>Odieresis</string>
      <string>Ograve</string>
      <string>Ohungarumlaut</string>
      <string>Omacron</string>
      <string>Otilde</string>
      <string>zero</string>
      <string>eth</string>
    </array>
    <key>public.kern1.Oslash</key>
    <array>
      <string>Oslash</string>
      <string>Oslashacute</string>
    </array>
    <key>public.kern1.R</key>
    <array>
      <string>R</string>
      <string>Racute</string>
      <string>Rcaron</string>
      <string>Rcommaaccent</string>
    </array>
    <key>public.kern1.S</key>
    <array>
      <string>S</string>
      <string>Sacute</string>
      <string>Scaron</string>
      <string>Scedilla</string>
      <string>Scircumflex</string>
      <string>Scommaaccent</string>
      <string>dollar</string>
    </array>
    <key>public.kern1.S.alt</key>
    <array>
      <string>Sacute.alt</string>
      <string>Scaron.alt</string>
      <string>Scedilla.alt</string>
      <string>Scircumflex.alt</string>
      <string>Scommaaccent.alt</string>
      <string>S.alt</string>
      <string>dollar.alt</string>
    </array>
    <key>public.kern1.T</key>
    <array>
      <string>T</string>
      <string>Tbar</string>
      <string>Tcaron</string>
      <string>Tcommaaccent</string>
      <string>uni021A</string>
    </array>
    <key>public.kern1.U</key>
    <array>
      <string>U</string>
      <string>Uacute</string>
      <string>Ubreve</string>
      <string>Ucircumflex</string>
      <string>Udieresis</string>
      <string>Ugrave</string>
      <string>Uhungarumlaut</string>
      <string>Umacron</string>
      <string>Uogonek</string>
      <string>Uring</string>
      <string>Utilde</string>
    </array>
    <key>public.kern1.W</key>
    <array>
      <string>W</string>
      <string>Wacute</string>
      <string>Wcircumflex</string>
      <string>Wdieresis</string>
      <string>Wgrave</string>
    </array>
    <key>public.kern1.Y</key>
    <array>
      <string>Y</string>
      <string>Yacute</string>
      <string>Ycircumflex</string>
      <string>Ydieresis</string>
    </array>
    <key>public.kern1.Z</key>
    <array>
      <string>Z</string>
      <string>Zacute</string>
      <string>Zcaron</string>
      <string>Zdotaccent</string>
    </array>
    <key>public.kern1.a</key>
    <array>
      <string>a.alt2</string>
      <string>aacute.alt2</string>
      <string>abreve.alt2</string>
      <string>acircumflex.alt2</string>
      <string>adieresis.alt2</string>
      <string>agrave.alt2</string>
      <string>amacron.alt2</string>
      <string>aogonek.alt2</string>
      <string>aring.alt2</string>
      <string>aringacute.alt2</string>
      <string>atilde.alt2</string>
      <string>aacute.alt</string>
      <string>abreve.alt</string>
      <string>acircumflex.alt</string>
      <string>adieresis.alt</string>
      <string>agrave.alt</string>
      <string>amacron.alt</string>
      <string>aogonek.alt</string>
      <string>aring.alt</string>
      <string>aringacute.alt</string>
      <string>atilde.alt</string>
      <string>a.alt</string>
    </array>
    <key>public.kern1.ae</key>
    <array>
      <string>ae.alt2</string>
      <string>aeacute.alt2</string>
      <string>e</string>
      <string>eacute</string>
      <string>ebreve</string>
      <string>ecaron</string>
      <string>ecircumflex</string>
      <string>edieresis</string>
      <string>edotaccent</string>
      <string>egrave</string>
      <string>emacron</string>
      <string>eogonek</string>
      <string>oe</string>
      <string>ae</string>
      <string>aeacute</string>
    </array>
    <key>public.kern1.afii57929</key>
    <array>
      <string>quotedblright</string>
      <string>quoteright</string>
    </array>
    <key>public.kern1.at</key>
    <array>
      <string>at</string>
      <string>at.case</string>
    </array>
    <key>public.kern1.b</key>
    <array>
      <string>b</string>
      <string>p</string>
      <string>thorn</string>
    </array>
    <key>public.kern1.braceleft</key>
    <array>
      <string>braceleft</string>
      <string>bracketleft</string>
    </array>
    <key>public.kern1.braceright</key>
    <array>
      <string>braceright</string>
      <string>bracketright</string>
    </array>
    <key>public.kern1.c</key>
    <array>
      <string>c</string>
      <string>cacute</string>
      <string>ccaron</string>
      <string>ccedilla</string>
      <string>ccircumflex</string>
      <string>cdotaccent</string>
    </array>
    <key>public.kern1.c.alt</key>
    <array>
      <string>cacute.alt</string>
      <string>ccaron.alt</string>
      <string>ccedilla.alt</string>
      <string>ccircumflex.alt</string>
      <string>cdotaccent.alt</string>
      <string>c.alt</string>
    </array>
    <key>public.kern1.colon</key>
    <array>
      <string>colon</string>
      <string>semicolon</string>
    </array>
    <key>public.kern1.comma</key>
    <array>
      <string>comma</string>
      <string>ellipsis</string>
      <string>period</string>
      <string>quotedblbase</string>
      <string>quotesinglbase</string>
    </array>
    <key>public.kern1.copyright</key>
    <array>
      <string>copyright</string>
      <string>copyright.alt</string>
      <string>registered</string>
    </array>
    <key>public.kern1.d</key>
    <array>
      <string>d</string>
      <string>dcroat</string>
      <string>fl</string>
      <string>l</string>
      <string>lacute</string>
      <string>lcommaaccent</string>
      <string>lslash</string>
    </array>
    <key>public.kern1.dcaron</key>
    <array>
      <string>dcaron</string>
      <string>lcaron</string>
    </array>
    <key>public.kern1.dotlessi</key>
    <array>
      <string>dotlessi</string>
      <string>fi</string>
      <string>i</string>
      <string>iacute</string>
      <string>ibreve</string>
      <string>icircumflex</string>
      <string>idieresis</string>
      <string>igrave</string>
      <string>imacron</string>
      <string>iogonek</string>
      <string>itilde</string>
      <string>aacute</string>
      <string>abreve</string>
      <string>acircumflex</string>
      <string>adieresis</string>
      <string>agrave</string>
      <string>amacron</string>
      <string>aogonek</string>
      <string>aring</string>
      <string>aringacute</string>
      <string>atilde</string>
    </array>
    <key>public.kern1.e.alt</key>
    <array>
      <string>eacute.alt</string>
      <string>ebreve.alt</string>
      <string>ecaron.alt</string>
      <string>ecircumflex.alt</string>
      <string>edieresis.alt</string>
      <string>edotaccent.alt</string>
      <string>egrave.alt</string>
      <string>emacron.alt</string>
      <string>eogonek.alt</string>
      <string>ae.alt</string>
      <string>e.alt</string>
    </array>
    <key>public.kern1.eight</key>
    <array>
      <string>eight</string>
      <string>three</string>
      <string>three.alt</string>
      <string>B</string>
      <string>germandbls</string>
    </array>
    <key>public.kern1.emdash</key>
    <array>
      <string>emdash</string>
      <string>endash</string>
      <string>hyphen</string>
    </array>
    <key>public.kern1.eng</key>
    <array>
      <string>eng</string>
      <string>ij</string>
      <string>j</string>
      <string>y.alt</string>
      <string>g.alt</string>
      <string>g</string>
      <string>gcommaaccent.alt</string>
      <string>gcommaaccent</string>
      <string>gbreve.alt</string>
      <string>gcircumflex.alt</string>
      <string>gdotaccent.alt</string>
      <string>yacute.alt</string>
      <string>ycircumflex.alt</string>
      <string>ydieresis.alt</string>
      <string>gbreve</string>
      <string>gcircumflex</string>
      <string>gdotaccent</string>
      <string>yacute</string>
      <string>ycircumflex</string>
      <string>ydieresis</string>
      <string>q</string>
      <string>jcircumflex</string>
    </array>
    <key>public.kern1.five</key>
    <array>
      <string>five</string>
      <string>five.alt</string>
    </array>
    <key>public.kern1.five.osf</key>
    <array>
      <string>five.osf</string>
      <string>five.osf.alt</string>
    </array>
    <key>public.kern1.g</key>
    <array>
      <string>g.alt2</string>
      <string>gbreve.alt2</string>
      <string>gcircumflex.alt2</string>
      <string>gcommaaccent.alt2</string>
      <string>gdotaccent.alt2</string>
    </array>
    <key>public.kern1.guillemotleft</key>
    <array>
      <string>guillemotleft</string>
      <string>guilsinglleft</string>
    </array>
    <key>public.kern1.guillemotleft.case</key>
    <array>
      <string>guilsinglleft.case</string>
      <string>guillemotleft.case</string>
    </array>
    <key>public.kern1.guillemotright</key>
    <array>
      <string>guillemotright</string>
      <string>guilsinglright</string>
    </array>
    <key>public.kern1.guillemotright.case</key>
    <array>
      <string>guillemotright.case</string>
      <string>guilsinglright.case</string>
    </array>
    <key>public.kern1.h</key>
    <array>
      <string>h</string>
      <string>hbar</string>
      <string>hcircumflex</string>
      <string>m</string>
      <string>n</string>
      <string>nacute</string>
      <string>napostrophe</string>
      <string>ncaron</string>
      <string>ncommaaccent</string>
      <string>ntilde</string>
    </array>
    <key>public.kern1.hyphen.case</key>
    <array>
      <string>emdash.case</string>
      <string>endash.case</string>
      <string>hyphen.case</string>
      <string>plus</string>
      <string>minus</string>
    </array>
    <key>public.kern1.k</key>
    <array>
      <string>k</string>
      <string>kcommaaccent</string>
      <string>kgreenlandic</string>
    </array>
    <key>public.kern1.minute</key>
    <array>
      <string>quotedbl</string>
      <string>quotesingle</string>
    </array>
    <key>public.kern1.nine.osf</key>
    <array>
      <string>nine.osf</string>
      <string>nine.osf.alt</string>
    </array>
    <key>public.kern1.o</key>
    <array>
      <string>o</string>
      <string>oacute</string>
      <string>obreve</string>
      <string>ocircumflex</string>
      <string>odieresis</string>
      <string>ograve</string>
      <string>ohungarumlaut</string>
      <string>omacron</string>
      <string>otilde</string>
    </array>
    <key>public.kern1.oslash</key>
    <array>
      <string>oslash</string>
      <string>oslashacute</string>
    </array>
    <key>public.kern1.question</key>
    <array>
      <string>question</string>
      <string>question.alt</string>
    </array>
    <key>public.kern1.quotedblleft</key>
    <array>
      <string>quotedblleft</string>
      <string>quoteleft</string>
    </array>
    <key>public.kern1.r</key>
    <array>
      <string>r</string>
      <string>racute</string>
      <string>rcaron</string>
      <string>rcommaaccent</string>
    </array>
    <key>public.kern1.s</key>
    <array>
      <string>s</string>
      <string>sacute</string>
      <string>scaron</string>
      <string>scedilla</string>
      <string>scircumflex</string>
      <string>scommaaccent</string>
    </array>
    <key>public.kern1.s.alt</key>
    <array>
      <string>sacute.alt</string>
      <string>scaron.alt</string>
      <string>scedilla.alt</string>
      <string>scircumflex.alt</string>
      <string>scommaaccent.alt</string>
      <string>s.alt</string>
    </array>
    <key>public.kern1.t</key>
    <array>
      <string>t</string>
      <string>tbar</string>
      <string>tcaron</string>
      <string>tcommaaccent</string>
      <string>uni021B</string>
    </array>
    <key>public.kern1.t.alt</key>
    <array>
      <string>tcaron.alt</string>
      <string>tcommaaccent.alt</string>
      <string>t.alt</string>
      <string>uni021B.alt</string>
    </array>
    <key>public.kern1.t.alt2</key>
    <array>
      <string>tcaron.alt2</string>
      <string>tcommaaccent.alt2</string>
      <string>t.alt2</string>
      <string>uni021B.alt2</string>
    </array>
    <key>public.kern1.three.osf</key>
    <array>
      <string>three.osf</string>
      <string>three.osf.alt</string>
    </array>
    <key>public.kern1.two</key>
    <array>
      <string>two</string>
      <string>two.alt</string>
    </array>
    <key>public.kern1.two.osf</key>
    <array>
      <string>two.osf</string>
      <string>two.osf.alt</string>
    </array>
    <key>public.kern1.u</key>
    <array>
      <string>u</string>
      <string>uacute</string>
      <string>ubreve</string>
      <string>ucircumflex</string>
      <string>udieresis</string>
      <string>ugrave</string>
      <string>uhungarumlaut</string>
      <string>umacron</string>
      <string>uogonek</string>
      <string>uring</string>
      <string>utilde</string>
    </array>
    <key>public.kern1.v</key>
    <array>
      <string>v</string>
      <string>w</string>
      <string>wacute</string>
      <string>wcircumflex</string>
      <string>wdieresis</string>
      <string>wgrave</string>
    </array>
    <key>public.kern1.y</key>
    <array>
      <string>y.alt2</string>
      <string>yacute.alt2</string>
      <string>ycircumflex.alt2</string>
      <string>ydieresis.alt2</string>
    </array>
    <key>public.kern1.z</key>
    <array>
      <string>z</string>
      <string>zacute</string>
      <string>zcaron</string>
      <string>zdotaccent</string>
    </array>
    <key>public.kern2.A</key>
    <array>
      <string>A</string>
      <string>Aacute</string>
      <string>Abreve</string>
      <string>Acircumflex</string>
      <string>Adieresis</string>
      <string>Agrave</string>
      <string>Amacron</string>
      <string>Aogonek</string>
      <string>Aring</string>
      <string>Aringacute</string>
      <string>Atilde</string>
    </array>
    <key>public.kern2.AE</key>
    <array>
      <string>AE</string>
      <string>AEacute</string>
    </array>
    <key>public.kern2.B</key>
    <array>
      <string>B</string>
      <string>D</string>
      <string>Dcaron</string>
      <string>Dcroat</string>
      <string>E</string>
      <string>Eacute</string>
      <string>Ebreve</string>
      <string>Ecaron</string>
      <string>Ecircumflex</string>
      <string>Edieresis</string>
      <string>Edotaccent</string>
      <string>Egrave</string>
      <string>Emacron</string>
      <string>Eogonek</string>
      <string>Eth</string>
      <string>F</string>
      <string>H</string>
      <string>Hbar</string>
      <string>Hcircumflex</string>
      <string>I</string>
      <string>IJ</string>
      <string>Iacute</string>
      <string>Ibreve</string>
      <string>Icircumflex</string>
      <string>Idieresis</string>
      <string>Idotaccent</string>
      <string>Igrave</string>
      <string>Imacron</string>
      <string>Iogonek</string>
      <string>Itilde</string>
      <string>K</string>
      <string>Kcommaaccent</string>
      <string>L</string>
      <string>Lacute</string>
      <string>Lcaron</string>
      <string>Lcommaaccent</string>
      <string>Ldot</string>
      <string>Lslash</string>
      <string>P</string>
      <string>R</string>
      <string>Racute</string>
      <string>Rcaron</string>
      <string>Rcommaaccent</string>
      <string>Thorn</string>
      <string>one</string>
      <string>uni1E9E</string>
    </array>
    <key>public.kern2.C</key>
    <array>
      <string>C</string>
      <string>Cacute</string>
      <string>Ccaron</string>
      <string>Ccedilla</string>
      <string>Ccircumflex</string>
      <string>Cdotaccent</string>
      <string>G</string>
      <string>Gbreve</string>
      <string>Gcircumflex</string>
      <string>Gcommaaccent</string>
      <string>Gdotaccent</string>
      <string>O</string>
      <string>OE</string>
      <string>Oacute</string>
      <string>Obreve</string>
      <string>Ocircumflex</string>
      <string>Odieresis</string>
      <string>Ograve</string>
      <string>Ohungarumlaut</string>
      <string>Omacron</string>
      <string>Otilde</string>
      <string>Q</string>
      <string>C</string>
      <string>G.alt</string>
      <string>zero</string>
      <string>six</string>
      <string>six.alt</string>
      <string>Cacute.alt</string>
      <string>Ccaron.alt</string>
      <string>Ccedilla.alt</string>
      <string>Ccircumflex.alt</string>
      <string>Cdotaccent.alt</string>
      <string>Gbreve.alt</string>
      <string>Gcircumflex.alt</string>
      <string>Gcommaaccent.alt</string>
      <string>Gdotaccent.alt</string>
    </array>
    <key>public.kern2.Eng</key>
    <array>
      <string>Eng</string>
      <string>M</string>
      <string>N</string>
      <string>Nacute</string>
      <string>Ncaron</string>
      <string>Ncommaaccent</string>
      <string>Ntilde</string>
      <string>afii61352</string>
    </array>
    <key>public.kern2.J</key>
    <array>
      <string>J</string>
      <string>Jcircumflex</string>
    </array>
    <key>public.kern2.Oslash</key>
    <array>
      <string>Oslashacute</string>
      <string>Oslash</string>
    </array>
    <key>public.kern2.S</key>
    <array>
      <string>S</string>
      <string>Sacute</string>
      <string>Scaron</string>
      <string>Scedilla</string>
      <string>Scircumflex</string>
      <string>Scommaaccent</string>
      <string>dollar</string>
    </array>
    <key>public.kern2.S.alt</key>
    <array>
      <string>Sacute.alt</string>
      <string>Scaron.alt</string>
      <string>Scedilla.alt</string>
      <string>Scircumflex.alt</string>
      <string>Scommaaccent.alt</string>
      <string>S.alt</string>
      <string>dollar.alt</string>
    </array>
    <key>public.kern2.T</key>
    <array>
      <string>T</string>
      <string>Tbar</string>
      <string>Tcaron</string>
      <string>Tcommaaccent</string>
      <string>uni021A</string>
    </array>
    <key>public.kern2.U</key>
    <array>
      <string>U</string>
      <string>Uacute</string>
      <string>Ubreve</string>
      <string>Ucircumflex</string>
      <string>Udieresis</string>
      <string>Ugrave</string>
      <string>Uhungarumlaut</string>
      <string>Umacron</string>
      <string>Uogonek</string>
      <string>Uring</string>
      <string>Utilde</string>
    </array>
    <key>public.kern2.W</key>
    <array>
      <string>W</string>
      <string>Wacute</string>
      <string>Wcircumflex</string>
      <string>Wdieresis</string>
      <string>Wgrave</string>
    </array>
    <key>public.kern2.Y</key>
    <array>
      <string>Y</string>
      <string>Yacute</string>
      <string>Ycircumflex</string>
      <string>Ydieresis</string>
    </array>
    <key>public.kern2.Z</key>
    <array>
      <string>Z</string>
      <string>Zacute</string>
      <string>Zcaron</string>
      <string>Zdotaccent</string>
    </array>
    <key>public.kern2.a</key>
    <array>
      <string>a.alt2</string>
      <string>aacute.alt2</string>
      <string>abreve.alt2</string>
      <string>acircumflex.alt2</string>
      <string>adieresis.alt2</string>
      <string>ae.alt2</string>
      <string>aeacute.alt2</string>
      <string>agrave.alt2</string>
      <string>amacron.alt2</string>
      <string>aogonek.alt2</string>
      <string>aring.alt2</string>
      <string>aringacute.alt2</string>
      <string>atilde.alt2</string>
    </array>
    <key>public.kern2.a.alt</key>
    <array>
      <string>aacute.alt</string>
      <string>abreve.alt</string>
      <string>acircumflex.alt</string>
      <string>adieresis.alt</string>
      <string>aeacute.alt</string>
      <string>agrave.alt</string>
      <string>amacron.alt</string>
      <string>aogonek.alt</string>
      <string>aring.alt</string>
      <string>aringacute.alt</string>
      <string>atilde.alt</string>
      <string>a.alt</string>
      <string>ae.alt</string>
    </array>
    <key>public.kern2.at</key>
    <array>
      <string>at</string>
      <string>at.case</string>
    </array>
    <key>public.kern2.b</key>
    <array>
      <string>b</string>
      <string>thorn</string>
    </array>
    <key>public.kern2.braceleft</key>
    <array>
      <string>braceleft</string>
      <string>bracketleft</string>
    </array>
    <key>public.kern2.braceright</key>
    <array>
      <string>braceright</string>
      <string>bracketright</string>
    </array>
    <key>public.kern2.c</key>
    <array>
      <string>c</string>
      <string>cacute</string>
      <string>ccaron</string>
      <string>ccedilla</string>
      <string>ccircumflex</string>
      <string>cdotaccent</string>
      <string>d</string>
      <string>dcaron</string>
      <string>dcroat</string>
      <string>e</string>
      <string>eacute</string>
      <string>ebreve</string>
      <string>ecaron</string>
      <string>ecircumflex</string>
      <string>edieresis</string>
      <string>edotaccent</string>
      <string>egrave</string>
      <string>emacron</string>
      <string>eogonek</string>
      <string>eth</string>
      <string>o</string>
      <string>oacute</string>
      <string>obreve</string>
      <string>ocircumflex</string>
      <string>odieresis</string>
      <string>oe</string>
      <string>ograve</string>
      <string>ohungarumlaut</string>
      <string>omacron</string>
      <string>oslash</string>
      <string>oslashacute</string>
      <string>otilde</string>
      <string>q</string>
      <string>a</string>
      <string>ae</string>
      <string>c.alt</string>
      <string>e.alt</string>
      <string>g.alt</string>
      <string>cacute.alt</string>
      <string>ccaron.alt</string>
      <string>ccedilla.alt</string>
      <string>ccircumflex.alt</string>
      <string>cdotaccent.alt</string>
      <string>eacute.alt</string>
      <string>ebreve.alt</string>
      <string>ecaron.alt</string>
      <string>ecircumflex.alt</string>
      <string>edieresis.alt</string>
      <string>edotaccent.alt</string>
      <string>egrave.alt</string>
      <string>emacron.alt</string>
      <string>eogonek.alt</string>
      <string>gbreve.alt</string>
      <string>gcircumflex.alt</string>
      <string>gdotaccent.alt</string>
      <string>aacute</string>
      <string>abreve</string>
      <string>acircumflex</string>
      <string>adieresis</string>
      <string>aeacute</string>
      <string>agrave</string>
      <string>amacron</string>
      <string>aogonek</string>
      <string>aring</string>
      <string>aringacute</string>
      <string>atilde</string>
      <string>gbreve</string>
      <string>gcircumflex</string>
      <string>gdotaccent</string>
      <string>gcommaaccent.alt</string>
    </array>
    <key>public.kern2.colon</key>
    <array>
      <string>colon</string>
      <string>semicolon</string>
    </array>
    <key>public.kern2.comma</key>
    <array>
      <string>comma</string>
      <string>ellipsis</string>
      <string>period</string>
      <string>quotedblbase</string>
      <string>quotesinglbase</string>
    </array>
    <key>public.kern2.copyright</key>
    <array>
      <string>copyright</string>
      <string>copyright.alt</string>
      <string>registered</string>
    </array>
    <key>public.kern2.dotlessi</key>
    <array>
      <string>dotlessi</string>
      <string>i</string>
      <string>iacute</string>
      <string>ibreve</string>
      <string>icircumflex</string>
      <string>idieresis</string>
      <string>igrave</string>
      <string>ij</string>
      <string>imacron</string>
      <string>iogonek</string>
      <string>itilde</string>
      <string>p</string>
      <string>eng</string>
    </array>
    <key>public.kern2.emdash</key>
    <array>
      <string>emdash</string>
      <string>endash</string>
      <string>hyphen</string>
    </array>
    <key>public.kern2.eng</key>
    <array>
      <string>kgreenlandic</string>
      <string>m</string>
      <string>n</string>
      <string>nacute</string>
      <string>ncaron</string>
      <string>ncommaaccent</string>
      <string>ntilde</string>
      <string>r</string>
      <string>racute</string>
      <string>rcaron</string>
      <string>rcommaaccent</string>
    </array>
    <key>public.kern2.f</key>
    <array>
      <string>f</string>
      <string>fi</string>
      <string>fl</string>
    </array>
    <key>public.kern2.g</key>
    <array>
      <string>g.alt2</string>
      <string>gbreve.alt2</string>
      <string>gcircumflex.alt2</string>
      <string>gcommaaccent.alt2</string>
      <string>gdotaccent.alt2</string>
    </array>
    <key>public.kern2.guillemotleft</key>
    <array>
      <string>guillemotleft</string>
      <string>guilsinglleft</string>
    </array>
    <key>public.kern2.guillemotleft.case</key>
    <array>
      <string>guillemotleft.case</string>
      <string>guilsinglleft.case</string>
    </array>
    <key>public.kern2.guillemotright</key>
    <array>
      <string>guillemotright</string>
      <string>guilsinglright</string>
    </array>
    <key>public.kern2.guillemotright.case</key>
    <array>
      <string>guillemotright.case</string>
      <string>guilsinglright.case</string>
    </array>
    <key>public.kern2.h</key>
    <array>
      <string>h</string>
      <string>hbar</string>
      <string>hcircumflex</string>
      <string>k</string>
      <string>kcommaaccent</string>
      <string>l</string>
      <string>lacute</string>
      <string>lcaron</string>
      <string>lcommaaccent</string>
      <string>ldot</string>
      <string>lslash</string>
      <string>germandbls</string>
    </array>
    <key>public.kern2.hyphen.case</key>
    <array>
      <string>emdash.case</string>
      <string>endash.case</string>
      <string>hyphen.case</string>
      <string>plus</string>
      <string>minus</string>
    </array>
    <key>public.kern2.j</key>
    <array>
      <string>j</string>
    </array>
    <key>public.kern2.minute</key>
    <array>
      <string>quotedbl</string>
      <string>quotesingle</string>
    </array>
    <key>public.kern2.onesuperior</key>
    <array>
      <string>onesuperior</string>
      <string>threesuperior</string>
      <string>twosuperior</string>
    </array>
    <key>public.kern2.quotedblleft</key>
    <array>
      <string>quotedblleft</string>
      <string>quoteleft</string>
    </array>
    <key>public.kern2.quoteright</key>
    <array>
      <string>quotedblright</string>
      <string>quoteright</string>
    </array>
    <key>public.kern2.s</key>
    <array>
      <string>s</string>
      <string>sacute</string>
      <string>scaron</string>
      <string>scedilla</string>
      <string>scircumflex</string>
      <string>scommaaccent</string>
    </array>
    <key>public.kern2.s.alt</key>
    <array>
      <string>sacute.alt</string>
      <string>scaron.alt</string>
      <string>scedilla.alt</string>
      <string>scircumflex.alt</string>
      <string>scommaaccent.alt</string>
      <string>s.alt</string>
    </array>
    <key>public.kern2.t</key>
    <array>
      <string>t</string>
      <string>tbar</string>
      <string>tcaron</string>
      <string>tcommaaccent</string>
      <string>uni021B</string>
    </array>
    <key>public.kern2.t.alt</key>
    <array>
      <string>tcaron.alt</string>
      <string>tcommaaccent.alt</string>
      <string>t.alt</string>
      <string>uni021B.alt</string>
    </array>
    <key>public.kern2.t.alt2</key>
    <array>
      <string>tcaron.alt2</string>
      <string>tcommaaccent.alt2</string>
      <string>t.alt2</string>
      <string>uni021B.alt2</string>
    </array>
    <key>public.kern2.u</key>
    <array>
      <string>u</string>
      <string>uacute</string>
      <string>ubreve</string>
      <string>ucircumflex</string>
      <string>udieresis</string>
      <string>ugrave</string>
      <string>uhungarumlaut</string>
      <string>umacron</string>
      <string>uogonek</string>
      <string>uring</string>
      <string>utilde</string>
      <string>yacute.alt</string>
      <string>ycircumflex.alt</string>
      <string>ydieresis.alt</string>
      <string>y.alt</string>
      <string>y</string>
      <string>yacute</string>
      <string>ycircumflex</string>
      <string>ydieresis</string>
    </array>
    <key>public.kern2.v</key>
    <array>
      <string>v</string>
      <string>w</string>
      <string>wacute</string>
      <string>wcircumflex</string>
      <string>wdieresis</string>
      <string>wgrave</string>
    </array>
    <key>public.kern2.y</key>
    <array>
      <string>y.alt2</string>
      <string>yacute.alt2</string>
      <string>ycircumflex.alt2</string>
      <string>ydieresis.alt2</string>
    </array>
    <key>public.kern2.z</key>
    <array>
      <string>z</string>
      <string>zacute</string>
      <string>zcaron</string>
      <string>zdotaccent</string>
    </array>
  </dict>
</plist>


================================================
FILE: assets/ColdtypeObviously_BlackItalic.ufo/layercontents.plist
================================================
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <array>
    <array>
      <string>foreground</string>
      <string>glyphs</string>
    </array>
  </array>
</plist>


================================================
FILE: assets/ColdtypeObviously_BlackItalic.ufo/lib.plist
================================================
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>com.defcon.sortDescriptor</key>
    <array>
      <dict>
        <key>ascending</key>
        <array>
          <string>.notdef</string>
          <string>A</string>
          <string>B</string>
          <string>C</string>
          <string>D</string>
          <string>E</string>
          <string>F</string>
          <string>G</string>
          <string>H</string>
          <string>I</string>
          <string>J</string>
          <string>K</string>
          <string>L</string>
          <string>M</string>
          <string>N</string>
          <string>O</string>
          <string>P</string>
          <string>Q</string>
          <string>R</string>
          <string>S</string>
          <string>T</string>
          <string>U</string>
          <string>V</string>
          <string>W</string>
          <string>X</string>
          <string>Y</string>
          <string>Z</string>
          <string>a</string>
          <string>b</string>
          <string>c</string>
          <string>d</string>
          <string>e</string>
          <string>f</string>
          <string>g</string>
          <string>h</string>
          <string>i</string>
          <string>j</string>
          <string>k</string>
          <string>l</string>
          <string>m</string>
          <string>n</string>
          <string>o</string>
          <string>p</string>
          <string>q</string>
          <string>r</string>
          <string>s</string>
          <string>t</string>
          <string>u</string>
          <string>v</string>
          <string>w</string>
          <string>x</string>
          <string>y</string>
          <string>z</string>
          <string>Aacute</string>
          <string>aacute</string>
          <string>Abreve</string>
          <string>abreve</string>
          <string>Acircumflex</string>
          <string>acircumflex</string>
          <string>Adieresis</string>
          <string>adieresis</string>
          <string>Agrave</string>
          <string>agrave</string>
          <string>Amacron</string>
          <string>amacron</string>
          <string>Aogonek</string>
          <string>aogonek</string>
          <string>Aring</string>
          <string>aring</string>
          <string>Aringacute</string>
          <string>aringacute</string>
          <string>Atilde</string>
          <string>atilde</string>
          <string>AE</string>
          <string>ae</string>
          <string>AEacute</string>
          <string>aeacute</string>
          <string>Cacute</string>
          <string>cacute</string>
          <string>Ccaron</string>
          <string>ccaron</string>
          <string>Ccedilla</string>
          <string>ccedilla</string>
          <string>Ccircumflex</string>
          <string>ccircumflex</string>
          <string>Cdotaccent</string>
          <string>cdotaccent</string>
          <string>Dcaron</string>
          <string>dcaron</string>
          <string>Dcroat</string>
          <string>dcroat</string>
          <string>Eacute</string>
          <string>eacute</string>
          <string>Ebreve</string>
          <string>ebreve</string>
          <string>Ecaron</string>
          <string>ecaron</string>
          <string>Ecircumflex</string>
          <string>ecircumflex</string>
          <string>Edieresis</string>
          <string>edieresis</string>
          <string>Edotaccent</string>
          <string>edotaccent</string>
          <string>Egrave</string>
          <string>egrave</string>
          <string>Emacron</string>
          <string>emacron</string>
          <string>Eng</string>
          <string>eng</string>
          <string>Eogonek</string>
          <string>eogonek</string>
          <string>Eth</string>
          <string>eth</string>
          <string>fi</string>
          <string>fl</string>
          <string>Gbreve</string>
          <string>gbreve</string>
          <string>Gcircumflex</string>
          <string>gcircumflex</string>
          <string>Gcommaaccent</string>
          <string>gcommaaccent</string>
          <string>Gdotaccent</string>
          <string>gdotaccent</string>
          <string>Hbar</string>
          <string>hbar</string>
          <string>Hcircumflex</string>
          <string>hcircumflex</string>
          <string>Iacute</string>
          <string>iacute</string>
          <string>Ibreve</string>
          <string>ibreve</string>
          <string>Icircumflex</string>
          <string>icircumflex</string>
          <string>Idieresis</string>
          <string>idieresis</string>
          <string>Idotaccent</string>
          <string>Igrave</string>
          <string>igrave</string>
          <string>IJ</string>
          <string>ij</string>
          <string>Imacron</string>
          <string>imacron</string>
          <string>Iogonek</string>
          <string>iogonek</string>
          <string>Itilde</string>
          <string>itilde</string>
          <string>dotlessi</string>
          <string>Jcircumflex</string>
          <string>jcircumflex</string>
          <string>Kcommaaccent</string>
          <string>kcommaaccent</string>
          <string>kgreenlandic</string>
          <string>Lacute</string>
          <string>lacute</string>
          <string>Lcaron</string>
          <string>lcaron</string>
          <string>Lcommaaccent</string>
          <string>lcommaaccent</string>
          <string>Ldot</string>
          <string>ldot</string>
          <string>Lslash</string>
          <string>lslash</string>
          <string>Nacute</string>
          <string>nacute</string>
          <string>napostrophe</string>
          <string>Ncaron</string>
          <string>ncaron</string>
          <string>Ncommaaccent</string>
          <string>ncommaaccent</string>
          <string>Ntilde</string>
          <string>ntilde</string>
          <string>Oacute</string>
          <string>oacute</string>
          <string>Obreve</string>
          <string>obreve</string>
          <string>Ocircumflex</string>
          <string>ocircumflex</string>
          <string>Odieresis</string>
          <string>odieresis</string>
          <string>Ograve</string>
          <string>ograve</string>
          <string>Ohungarumlaut</string>
          <string>ohungarumlaut</string>
          <string>Omacron</string>
          <string>omacron</string>
          <string>Oslash</string>
          <string>oslash</string>
          <string>Oslashacute</string>
          <string>oslashacute</string>
          <string>Otilde</string>
          <string>otilde</string>
          <string>OE</string>
          <string>oe</string>
          <string>Racute</string>
          <string>racute</string>
          <string>Rcaron</string>
          <string>rcaron</string>
          <string>Rcommaaccent</string>
          <string>rcommaaccent</string>
          <string>Sacute</string>
          <string>sacute</string>
          <string>Scaron</string>
          <string>scaron</string>
          <string>Scedilla</string>
          <string>scedilla</string>
          <string>Scircumflex</string>
          <string>scircumflex</string>
          <string>Scommaaccent</string>
          <string>scommaaccent</string>
          <string>Tbar</string>
          <string>tbar</string>
          <string>Tcaron</string>
          <string>tcaron</string>
          <string>Tcommaaccent</string>
          <string>tcommaaccent</string>
          <string>uni021A</string>
          <string>uni021B</string>
          <string>Thorn</string>
          <string>thorn</string>
          <string>Uacute</string>
          <string>uacute</string>
          <string>Ubreve</string>
          <string>ubreve</string>
          <string>Ucircumflex</string>
          <string>ucircumflex</string>
          <string>Udieresis</string>
          <string>udieresis</string>
          <string>Ugrave</string>
          <string>ugrave</string>
          <string>Uhungarumlaut</string>
          <string>uhungarumlaut</string>
          <string>Umacron</string>
          <string>umacron</string>
          <string>Uogonek</string>
          <string>uogonek</string>
          <string>Uring</string>
          <string>uring</string>
          <string>Utilde</string>
          <string>utilde</string>
          <string>Wacute</string>
          <string>wacute</string>
          <string>Wcircumflex</string>
          <string>wcircumflex</string>
          <string>Wdieresis</string>
          <string>wdieresis</string>
          <string>Wgrave</string>
          <string>wgrave</string>
          <string>Yacute</string>
          <string>yacute</string>
          <string>Ycircumflex</string>
          <string>ycircumflex</string>
          <string>Ydieresis</string>
          <string>ydieresis</string>
          <string>Zacute</string>
          <string>zacute</string>
          <string>Zcaron</string>
          <string>zcaron</string>
          <string>Zdotaccent</string>
          <string>zdotaccent</string>
          <string>uni1E9E</string>
          <string>germandbls</string>
          <string>C.alt</string>
          <string>Ccedilla.alt</string>
          <string>Cacute.alt</string>
          <string>Ccaron.alt</string>
          <string>Ccircumflex.alt</string>
          <string>Cdotaccent.alt</string>
          <string>G.alt</string>
          <string>Gbreve.alt</string>
          <string>Gcircumflex.alt</string>
          <string>Gcommaaccent.alt</string>
          <string>Gdotaccent.alt</string>
          <string>S.alt</string>
          <string>Sacute.alt</string>
          <string>Scaron.alt</string>
          <string>Scedilla.alt</string>
          <string>Scircumflex.alt</string>
          <string>Scommaaccent.alt</string>
          <string>a.alt</string>
          <string>agrave.alt</string>
          <string>acircumflex.alt</string>
          <string>aacute.alt</string>
          <string>abreve.alt</string>
          <string>amacron.alt</string>
          <string>aogonek.alt</string>
          <string>aring.alt</string>
          <string>aringacute.alt</string>
          <string>atilde.alt</string>
          <string>adieresis.alt</string>
          <string>ae.alt</string>
          <string>aeacute.alt</string>
          <string>c.alt</string>
          <string>ccedilla.alt</string>
          <string>cacute.alt</string>
          <string>ccaron.alt</string>
          <string>ccircumflex.alt</string>
          <string>cdotaccent.alt</string>
          <string>e.alt</string>
          <string>eacute.alt</string>
          <string>egrave.alt</string>
          <string>ecircumflex.alt</string>
          <string>edieresis.alt</string>
          <string>ebreve.alt</string>
          <string>ecaron.alt</string>
          <string>edotaccent.alt</string>
          <string>emacron.alt</string>
          <string>eogonek.alt</string>
          <string>a.alt2</string>
          <string>agrave.alt2</string>
          <string>acircumflex.alt2</string>
          <string>adieresis.alt2</string>
          <string>aacute.alt2</string>
          <string>abreve.alt2</string>
          <string>amacron.alt2</string>
          <string>aogonek.alt2</string>
          <string>aring.alt2</string>
          <string>aringacute.alt2</string>
          <string>atilde.alt2</string>
          <string>ae.alt2</string>
          <string>aeacute.alt2</string>
          <string>g.alt</string>
          <string>gbreve.alt</string>
          <string>gcircumflex.alt</string>
          <string>gdotaccent.alt</string>
          <string>gcommaaccent.alt</string>
          <string>g.alt2</string>
          <string>gbreve.alt2</string>
          <string>gcircumflex.alt2</string>
          <string>gdotaccent.alt2</string>
          <string>gcommaaccent.alt2</string>
          <string>s.alt</string>
          <string>sacute.alt</string>
          <string>scaron.alt</string>
          <string>scedilla.alt</string>
          <string>scircumflex.alt</string>
          <string>scommaaccent.alt</string>
          <string>t.alt</string>
          <string>tbar.alt</string>
          <string>tcaron.alt</string>
          <string>tcommaaccent.alt</string>
          <string>uni021B.alt</string>
          <string>t.alt2</string>
          <string>tbar.alt2</string>
          <string>tcaron.alt2</string>
          <string>tcommaaccent.alt2</string>
          <string>uni021B.alt2</string>
          <string>y.alt</string>
          <string>yacute.alt</string>
          <string>ycircumflex.alt</string>
          <string>ydieresis.alt</string>
          <string>y.alt2</string>
          <string>yacute.alt2</string>
          <string>ycircumflex.alt2</string>
          <string>ydieresis.alt2</string>
          <string>zero</string>
          <string>one</string>
          <string>two</string>
          <string>three</string>
          <string>four</string>
          <string>five</string>
          <string>six</string>
          <string>seven</string>
          <string>eight</string>
          <string>nine</string>
          <string>two.alt</string>
          <string>three.alt</string>
          <string>five.alt</string>
          <string>six.alt</string>
          <string>nine.alt</string>
          <string>period</string>
          <string>comma</string>
          <string>colon</string>
          <string>semicolon</string>
          <string>ellipsis</string>
          <string>periodcentered</string>
          <string>periodcentered.case</string>
          <string>bullet</string>
          <string>bullet.case</string>
          <string>ampersand</string>
          <string>ampersand.alt</string>
          <string>exclam</string>
          <string>exclamdown</string>
          <string>exclamdown.case</string>
          <string>question</string>
          <string>question.alt</string>
          <string>questiondown</string>
          <string>questiondown.alt</string>
          <string>questiondown.case</string>
          <string>questiondown.alt.case</string>
          <string>quotedblleft</string>
          <string>quotedblright</string>
          <string>quoteleft</string>
          <string>quoteright</string>
          <string>quotedblbase</string>
          <string>quotesinglbase</string>
          <string>guillemotleft</string>
          <string>guillemotright</string>
          <string>guillemotleft.case</string>
          <string>guillemotright.case</string>
          <string>guilsinglleft</string>
          <string>guilsinglright</string>
          <string>guilsinglleft.case</string>
          <string>guilsinglright.case</string>
          <string>hyphen</string>
          <string>endash</string>
          <string>emdash</string>
          <string>hyphen.case</string>
          <string>endash.case</string>
          <string>emdash.case</string>
          <string>underscore</string>
          <string>slash</string>
          <string>backslash</string>
          <string>bar</string>
          <string>brokenbar</string>
          <string>parenleft</string>
          <string>parenright</string>
          <string>parenleft.case</string>
          <string>parenright.case</string>
          <string>bracketleft</string>
          <string>bracketright</string>
          <string>bracketleft.case</string>
          <string>bracketright.case</string>
          <string>braceleft</string>
          <string>braceright</string>
          <string>braceleft.case</string>
          <string>braceright.case</string>
          <string>at</string>
          <string>at.case</string>
          <string>copyright</string>
          <string>copyright.alt</string>
          <string>registered</string>
          <string>trademark</string>
          <string>asterisk</string>
          <string>dagger</string>
          <string>daggerdbl</string>
          <string>asciicircum</string>
          <string>asciitilde</string>
          <string>dollar</string>
          <string>dollar.alt</string>
          <string>cent</string>
          <string>cent.alt</string>
          <string>sterling</string>
          <string>sterling.alt</string>
          <string>yen</string>
          <string>Euro</string>
          <string>Euro.alt</string>
          <string>numbersign</string>
          <string>paragraph</string>
          <string>section</string>
          <string>section.alt</string>
          <string>ordfeminine</string>
          <string>ordfeminine.alt</string>
          <string>ordfeminine.alt2</string>
          <string>ordmasculine</string>
          <string>degree</string>
          <string>percent</string>
          <string>perthousand</string>
          <string>quotedbl</string>
          <string>quotesingle</string>
          <string>plus</string>
          <string>minus</string>
          <string>less</string>
          <string>greater</string>
          <string>equal</string>
          <string>multiply</string>
          <string>divide</string>
          <string>zero.osf</string>
          <string>one.osf</string>
          <string>two.osf</string>
          <string>three.osf</string>
          <string>four.osf</string>
          <string>five.osf</string>
          <string>six.osf</string>
          <string>seven.osf</string>
          <string>eight.osf</string>
          <string>nine.osf</string>
          <string>two.osf.alt</string>
          <string>three.osf.alt</string>
          <string>five.osf.alt</string>
          <string>six.osf.alt</string>
          <string>nine.osf.alt</string>
          <string>dollar.osf</string>
          <string>sterling.osf</string>
          <string>Euro.osf</string>
          <string>yen.osf</string>
          <string>dollar.osf.alt</string>
          <string>sterling.osf.alt</string>
          <string>Euro.osf.alt</string>
          <string>acute</string>
          <string>hungarumlaut</string>
          <string>caron.alt</string>
          <string>grave</string>
          <string>circumflex</string>
          <string>caron</string>
          <string>breve</string>
          <string>tilde</string>
          <string>macron</string>
          <string>dieresis</string>
          <string>dotaccent</string>
          <string>ring</string>
          <string>commaaccent</string>
          <string>cedilla</string>
          <string>ogonek</string>
          <string>baraccent</string>
          <string>afii61352</string>
          <string>onesuperior</string>
          <string>twosuperior</string>
          <string>threesuperior</string>
          <string>onequarter</string>
          <string>onehalf</string>
          <string>threequarters</string>
          <string>onehalf.alt</string>
          <string>threequarters.alt</string>
          <string>fraction</string>
          <string>zero.numr</string>
          <string>one.numr</string>
          <string>two.numr</string>
          <string>three.numr</string>
          <string>four.numr</string>
          <string>five.numr</string>
          <string>six.numr</string>
          <string>seven.numr</string>
          <string>eight.numr</string>
          <string>nine.numr</string>
          <string>two.alt.numr</string>
          <string>three.alt.numr</string>
          <string>five.alt.numr</string>
          <string>six.alt.numr</string>
          <string>nine.alt.numr</string>
          <string>zero.dnom</string>
          <string>one.dnom</string>
          <string>two.dnom</string>
          <string>three.dnom</string>
          <string>four.dnom</string>
          <string>five.dnom</string>
          <string>six.dnom</string>
          <string>seven.dnom</string>
          <string>eight.dnom</string>
          <string>nine.dnom</string>
          <string>two.alt.dnom</string>
          <string>three.alt.dnom</string>
          <string>five.alt.dnom</string>
          <string>six.alt.dnom</string>
          <string>nine.alt.dnom</string>
          <string>arrowleft</string>
          <string>arrowup</string>
          <string>arrowright</string>
          <string>arrowdown</string>
          <string>filledbox</string>
          <string>space</string>
          <string>thinspace</string>
          <string>nbspace</string>
          <string>Aacute.compact</string>
        </array>
        <key>type</key>
        <string>glyphList</string>
      </dict>
    </array>
    <key>com.loicsander.scaleFast</key>
    <dict>
      <key>guides</key>
      <array>
        <dict>
          <key>Height</key>
          <string>802</string>
          <key>Name</key>
          <string>New guide 1</string>
        </dict>
      </array>
      <key>presets</key>
      <dict/>
    </dict>
    <key>com.typemytype.robofont.background.layerStrokeColor</key>
    <array>
      <real>1.0</real>
      <real>0.75</real>
      <real>0.0</real>
      <real>0.7</real>
    </array>
    <key>com.typemytype.robofont.compileSettings.MacRomanFirst</key>
    <false/>
    <key>com.typemytype.robofont.compileSettings.autohint</key>
    <true/>
    <key>com.typemytype.robofont.compileSettings.checkOutlines</key>
    <integer>1</integer>
    <key>com.typemytype.robofont.compileSettings.createDummyDSIG</key>
    <true/>
    <key>com.typemytype.robofont.compileSettings.decompose</key>
    <integer>1</integer>
    <key>com.typemytype.robofont.compileSettings.generateFormat</key>
    <integer>0</integer>
    <key>com.typemytype.robofont.compileSettings.layerName</key>
    <string>foreground</string>
    <key>com.typemytype.robofont.compileSettings.path</key>
    <string>/Users/jamesedmondson/Dropbox/Ohno/Fonts/DevObviously_BlackItalic.otf</string>
    <key>com.typemytype.robofont.compileSettings.releaseMode</key>
    <false/>
    <key>com.typemytype.robofont.foreground.layerStrokeColor</key>
    <array>
      <real>0.5725</real>
      <real>0.5725</real>
      <real>0.9529</real>
      <real>1.0</real>
    </array>
    <key>com.typemytype.robofont.guideline.magnetic.1jMNUxSUou</key>
    <real>5.0</real>
    <key>com.typemytype.robofont.guideline.magnetic.DUaMYzQSQM</key>
    <real>5.0</real>
    <key>com.typemytype.robofont.guideline.magnetic.QhhoCLTuHS</key>
    <real>5.0</real>
    <key>com.typemytype.robofont.guideline.magnetic.V9hiWVV33p</key>
    <real>5.0</real>
    <key>com.typemytype.robofont.guideline.magnetic.d3Nkv4XtBG</key>
    <real>5.0</real>
    <key>com.typemytype.robofont.guideline.magnetic.liIC7QtlqK</key>
    <real>5.0</real>
    <key>com.typemytype.robofont.guideline.showMeasurements.1jMNUxSUou</key>
    <false/>
    <key>com.typemytype.robofont.guideline.showMeasurements.DUaMYzQSQM</key>
    <false/>
    <key>com.typemytype.robofont.guideline.showMeasurements.QhhoCLTuHS</key>
    <false/>
    <key>com.typemytype.robofont.guideline.showMeasurements.V9hiWVV33p</key>
    <false/>
    <key>com.typemytype.robofont.guideline.showMeasurements.d3Nkv4XtBG</key>
    <false/>
    <key>com.typemytype.robofont.guideline.showMeasurements.liIC7QtlqK</key>
    <false/>
    <key>com.typemytype.robofont.italicSlantOffset</key>
    <integer>0</integer>
    <key>com.typemytype.robofont.segmentType</key>
    <string>curve</string>
    <key>com.typemytype.robofont.shouldAddPointsInSplineConversion</key>
    <integer>1</integer>
    <key>com.typemytype.robofont.smartSets.uniqueKey</key>
    <string>4720224272</string>
    <key>com.typesupply.defcon.sortDescriptor</key>
    <array>
      <dict>
        <key>ascending</key>
        <array>
          <string>.notdef</string>
          <string>A</string>
          <string>B</string>
          <string>C</string>
          <string>D</string>
          <string>E</string>
          <string>F</string>
          <string>G</string>
          <string>H</string>
          <string>I</string>
          <string>J</string>
          <string>K</string>
          <string>L</string>
          <string>M</string>
          <string>N</string>
          <string>O</string>
          <string>P</string>
          <string>Q</string>
          <string>R</string>
          <string>S</string>
          <string>T</string>
          <string>U</string>
          <string>V</string>
          <string>W</string>
          <string>X</string>
          <string>Y</string>
          <string>Z</string>
          <string>a</string>
          <string>b</string>
          <string>c</string>
          <string>d</string>
          <string>e</string>
          <string>f</string>
          <string>g</string>
          <string>h</string>
          <string>i</string>
          <string>j</string>
          <string>k</string>
          <string>l</string>
          <string>m</string>
          <string>n</string>
          <string>o</string>
          <string>p</string>
          <string>q</string>
          <string>r</string>
          <string>s</string>
          <string>t</string>
          <string>u</string>
          <string>v</string>
          <string>w</string>
          <string>x</string>
          <string>y</string>
          <string>z</string>
          <string>AE</string>
          <string>AEacute</string>
          <string>Aacute</string>
          <string>Abreve</string>
          <string>Acircumflex</string>
          <string>Adieresis</string>
          <string>Agrave</string>
          <string>Amacron</string>
          <string>Aogonek</string>
          <string>Aring</string>
          <string>Aringacute</string>
          <string>Atilde</string>
          <string>C.alt</string>
          <string>Cacute</string>
          <string>Ccaron</string>
          <string>Ccedilla</string>
          <string>Ccircumflex</string>
          <string>Cdotaccent</string>
          <string>Dcaron</string>
          <string>Dcroat</string>
          <string>Eacute</string>
          <string>Ebreve</string>
          <string>Ecaron</string>
          <string>Ecircumflex</string>
          <string>Edieresis</string>
          <string>Edotaccent</string>
          <string>Egrave</string>
          <string>Emacron</string>
          <string>Eng</string>
          <string>Eogonek</string>
          <string>Eth</string>
          <string>Euro</string>
          <string>Euro.osf</string>
          <string>G.alt</string>
          <string>Gbreve</string>
          <string>Gcircumflex</string>
          <string>Gcommaaccent</string>
          <string>Gdotaccent</string>
          <string>Hbar</string>
          <string>Hcircumflex</string>
          <string>IJ</string>
          <string>Iacute</string>
          <string>Ibreve</string>
          <string>Icircumflex</string>
          <string>Idieresis</string>
          <string>Idotaccent</string>
          <string>Igrave</string>
          <string>Imacron</string>
          <string>Iogonek</string>
          <string>Itilde</string>
          <string>Jcircumflex</string>
          <string>Kcommaaccent</string>
          <string>Lacute</string>
          <string>Lcaron</string>
          <string>Lcommaaccent</string>
          <string>Ldot</string>
          <string>Lslash</string>
          <string>Nacute</string>
          <string>Ncaron</string>
          <string>Ncommaaccent</string>
          <string>Ntilde</string>
          <string>OE</string>
          <string>Oacute</string>
          <string>Obreve</string>
          <string>Ocircumflex</string>
          <string>Odieresis</string>
          <string>Ograve</string>
          <string>Ohungarumlaut</string>
          <string>Omacron</string>
          <string>Oslash</string>
          <string>Oslashacute</string>
          <string>Otilde</string>
          <string>Racute</string>
          <string>Rcaron</string>
          <string>Rcommaaccent</string>
          <string>S.alt</string>
          <string>Sacute</string>
          <string>Scaron</string>
          <string>Scedilla</string>
          <string>Scircumflex</string>
          <string>Scommaaccent</string>
          <string>Tbar</string>
          <string>Tcaron</string>
          <string>Tcommaaccent</string>
          <string>Thorn</string>
          <string>Uacute</string>
          <string>Ubreve</string>
          <string>Ucircumflex</string>
          <string>Udieresis</string>
          <string>Ugrave</string>
          <string>Uhungarumlaut</string>
          <string>Umacron</string>
          <string>Uogonek</string>
          <string>Uring</string>
          <string>Utilde</string>
          <string>Wacute</string>
          <string>Wcircumflex</string>
          <string>Wdieresis</string>
          <string>Wgrave</string>
          <string>Yacute</string>
          <string>Ycircumflex</string>
          <string>Ydieresis</string>
          <string>Zacute</string>
          <string>Zcaron</string>
          <string>Zdotaccent</string>
          <string>a.alt</string>
          <string>aacute</string>
          <string>abreve</string>
          <string>acircumflex</string>
          <string>acute</string>
          <string>acute.case</string>
          <string>adieresis</string>
          <string>ae</string>
          <string>aeacute</string>
          <string>afii61352</string>
          <string>agrave</string>
          <string>amacron</string>
          <string>ampersand</string>
          <string>ampersand.alt</string>
          <string>ampersand.ss01</string>
          <string>aogonek</string>
          <string>aring</string>
          <string>aringacute</string>
          <string>arrowboth</string>
          <string>arrowdown</string>
          <string>arrowleft</string>
          <string>arrowright</string>
          <string>arrowup</string>
          <string>arrowupdn</string>
          <string>asciicircum</string>
          <string>asciitilde</string>
          <string>asterisk</string>
          <string>at</string>
          <string>at.case</string>
          <string>atilde</string>
          <string>backslash</string>
          <string>bar</string>
          <string>braceleft</string>
          <string>braceleft.case</string>
          <string>braceright</string>
          <string>braceright.case</string>
          <string>bracketleft</string>
          <string>bracketleft.case</string>
          <string>bracketright</string>
          <string>bracketright.case</string>
          <string>breve</string>
          <string>breve.case</string>
          <string>brokenbar</string>
          <string>bullet</string>
          <string>bullet.case</string>
          <string>c.alt</string>
          <string>cacute</string>
          <string>caron</string>
          <string>caron.alt</string>
          <string>caron.case</string>
          <string>ccaron</string>
          <string>ccedilla</string>
          <string>ccircumflex</string>
          <string>cdotaccent</string>
          <string>cedilla</string>
          <string>cent</string>
          <string>circumflex</string>
          <string>circumflex.case</string>
          <string>colon</string>
          <string>comma</string>
          <string>commaaccent</string>
          <string>copyright</string>
          <string>dagger</string>
          <string>daggerdbl</string>
          <string>dcaron</string>
          <string>dcroat</string>
          <string>degree</string>
          <string>dieresis</string>
          <string>dieresis.case</string>
          <string>divide</string>
          <string>dollar</string>
          <string>dollar.osf</string>
          <string>dotaccent</string>
          <string>dotaccent.case</string>
          <string>dotlessi</string>
          <string>e.alt</string>
          <string>eacute</string>
          <string>ebreve</string>
          <string>ecaron</string>
          <string>ecircumflex</string>
          <string>edieresis</string>
          <string>edotaccent</string>
          <string>egrave</string>
          <string>eight</string>
          <string>eight.dnom</string>
          <string>eight.numr</string>
          <string>eight.osf</string>
          <string>ellipsis</string>
          <string>emacron</string>
          <string>emdash</string>
          <string>emdash.case</string>
          <string>endash</string>
          <string>endash.case</string>
          <string>eng</string>
          <string>eogonek</string>
          <string>equal</string>
          <string>eth</string>
          <string>exclam</string>
          <string>exclamdown</string>
          <string>fi</string>
          <string>filledbox</string>
          <string>five</string>
          <string>five.alt</string>
          <string>five.dnom</string>
          <string>five.numr</string>
          <string>five.osf</string>
          <string>fl</string>
          <string>four</string>
          <string>four.dnom</string>
          <string>four.numr</string>
          <string>four.osf</string>
          <string>fraction</string>
          <string>g.alt</string>
          <string>gbreve</string>
          <string>gcircumflex</string>
          <string>gcommaaccent</string>
          <string>gdotaccent</string>
          <string>germandbls</string>
          <string>grave</string>
          <string>grave.case</string>
          <string>greater</string>
          <string>guillemotleft</string>
          <string>guillemotleft.case</string>
          <string>guillemotright</string>
          <string>guillemotright.case</string>
          <string>guilsinglleft</string>
          <string>guilsinglleft.case</string>
          <string>guilsinglright</string>
          <string>guilsinglright.case</string>
          <string>hbar</string>
          <string>hcircumflex</string>
          <string>hungarumlaut</string>
          <string>hungarumlaut.case</string>
          <string>hyphen</string>
          <string>hyphen.case</string>
          <string>iacute</string>
          <string>ibreve</string>
          <string>icircumflex</string>
          <string>idieresis</string>
          <string>igrave</string>
          <string>ij</string>
          <string>imacron</string>
          <string>iogonek</string>
          <string>itilde</string>
          <string>jcircumflex</string>
          <string>kcommaaccent</string>
          <string>kgreenlandic</string>
          <string>lacute</string>
          <string>lcaron</string>
          <string>lcommaaccent</string>
          <string>ldot</string>
          <string>less</string>
          <string>lslash</string>
          <string>macron</string>
          <string>macron.case</string>
          <string>minus</string>
          <string>multiply</string>
          <string>nacute</string>
          <string>napostrophe</string>
          <string>nbspace</string>
          <string>ncaron</string>
          <string>ncommaaccent</string>
          <string>nine</string>
          <string>nine.alt</string>
          <string>nine.dnom</string>
          <string>nine.numr</string>
          <string>nine.osf</string>
          <string>ntilde</string>
          <string>numbersign</string>
          <string>oacute</string>
          <string>obreve</string>
          <string>ocircumflex</string>
          <string>odieresis</string>
          <string>oe</string>
          <string>ogonek</string>
          <string>ograve</string>
          <string>ohungarumlaut</string>
          <string>omacron</string>
          <string>one</string>
          <string>one.dnom</string>
          <string>one.numr</string>
          <string>one.osf</string>
          <string>onehalf</string>
          <string>onequarter</string>
          <string>onesuperior</string>
          <string>ordfeminine</string>
          <string>ordmasculine</string>
          <string>oslash</string>
          <string>oslashacute</string>
          <string>otilde</string>
          <string>paragraph</string>
          <string>parenleft</string>
          <string>parenleft.case</string>
          <string>parenright</string>
          <string>parenright.case</string>
          <string>percent</string>
          <string>period</string>
          <string>periodcentered</string>
          <string>periodcentered.case</string>
          <string>perthousand</string>
          <string>plus</string>
          <string>question</string>
          <string>question.alt</string>
          <string>questiondown</string>
          <string>quotedbl</string>
          <string>quotedblbase</string>
          <string>quotedblleft</string>
          <string>quotedblright</string>
          <string>quoteleft</string>
          <string>quoteright</string>
          <string>quotesinglbase</string>
          <string>quotesingle</string>
          <string>racute</string>
          <string>rcaron</string>
          <string>rcommaaccent</string>
          <string>registered</string>
          <string>ring</string>
          <string>ring.case</string>
          <string>s.alt</string>
          <string>sacute</string>
          <string>scaron</string>
          <string>scedilla</string>
          <string>scircumflex</string>
          <string>scommaaccent</string>
          <string>section</string>
          <string>semicolon</string>
          <string>seven</string>
          <string>seven.dnom</string>
          <string>seven.numr</string>
          <string>seven.osf</string>
          <string>six</string>
          <string>six.alt</string>
          <string>six.dnom</string>
          <string>six.numr</string>
          <string>six.osf</string>
          <string>slash</string>
          <string>space</string>
          <string>sterling</string>
          <string>sterling.osf</string>
          <string>tbar</string>
          <string>tcaron</string>
          <string>tcommaaccent</string>
          <string>thinspace</string>
          <string>thorn</string>
          <string>three</string>
          <string>three.alt</string>
          <string>three.dnom</string>
          <string>three.numr</string>
          <string>three.osf</string>
          <string>threequarters</string>
          <string>threesuperior</string>
          <string>tilde</string>
          <string>tilde.case</string>
          <string>trademark</string>
          <string>two</string>
          <string>two.alt</string>
          <string>two.dnom</string>
          <string>two.numr</string>
          <string>two.osf</string>
          <string>twosuperior</string>
          <string>uacute</string>
          <string>ubreve</string>
          <string>ucircumflex</string>
          <string>udieresis</string>
          <string>ugrave</string>
          <string>uhungarumlaut</string>
          <string>umacron</string>
          <string>underscore</string>
          <string>uni021A</string>
          <string>uni021B</string>
          <string>uni1E9E</string>
          <string>uni2196</string>
          <string>uni2197</string>
          <string>uni2198</string>
          <string>uni2199</string>
          <string>uogonek</string>
          <string>uring</string>
          <string>utilde</string>
          <string>wacute</string>
          <string>wcircumflex</string>
          <string>wdieresis</string>
          <string>wgrave</string>
          <string>y.alt</string>
          <string>yacute</string>
          <string>ycircumflex</string>
          <string>ydieresis</string>
          <string>yen</string>
          <string>yen.osf</string>
          <string>zacute</string>
          <string>zcaron</string>
          <string>zdotaccent</string>
          <string>zero</string>
          <string>zero.dnom</string>
          <string>zero.numr</string>
          <string>zero.osf</string>
          <string>t.alt</string>
          <string>g.alt2</string>
        </array>
        <key>type</key>
        <string>glyphList</string>
      </dict>
    </array>
    <key>public.glyphOrder</key>
    <array>
      <string>D</string>
      <string>E</string>
      <string>L</string>
      <string>O</string>
      <string>P</string>
      <string>T</string>
      <string>Y</string>
      <string>C</string>
      <string>space</string>
    </array>
  </dict>
</plist>


================================================
FILE: assets/ColdtypeObviously_BlackItalic.ufo/metainfo.plist
================================================
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>creator</key>
    <string>com.github.fonttools.ufoLib</string>
    <key>formatVersion</key>
    <integer>3</integer>
  </dict>
</plist>


================================================
FILE: assets/ColdtypeObviously_CompressedBlackItalic.ufo/fontinfo.plist
================================================
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>ascender</key>
    <integer>815</integer>
    <key>capHeight</key>
    <integer>750</integer>
    <key>descender</key>
    <integer>-185</integer>
    <key>familyName</key>
    <string>Coldtype Obviously</string>
    <key>guidelines</key>
    <array>
      <dict>
        <key>angle</key>
        <integer>0</integer>
        <key>identifier</key>
        <string>6lmnulpnLT</string>
        <key>name</key>
        <string>descender</string>
        <key>x</key>
        <integer>174</integer>
        <key>y</key>
        <integer>-104</integer>
      </dict>
    </array>
    <key>italicAngle</key>
    <real>-14.0</real>
    <key>openTypeNameDesigner</key>
    <string>James Edmondson</string>
    <key>openTypeNameDesignerURL</key>
    <string>http://ohnotype.co</string>
    <key>openTypeNameManufacturer</key>
    <string>OH no Type Company</string>
    <key>openTypeNameManufacturerURL</key>
    <string>http://ohnotype.co</string>
    <key>openTypeOS2Panose</key>
    <array>
      <integer>4</integer>
      <integer>2</integer>
      <integer>1</integer>
      <integer>5</integer>
      <integer>4</integer>
      <integer>1</integer>
      <integer>2</integer>
      <integer>2</integer>
      <integer>1</integer>
      <integer>0</integer>
    </array>
    <key>openTypeOS2UnicodeRanges</key>
    <array>
      <integer>0</integer>
      <integer>1</integer>
      <integer>2</integer>
    </array>
    <key>openTypeOS2VendorID</key>
    <string>OHNO</string>
    <key>openTypeOS2WeightClass</key>
    <integer>800</integer>
    <key>openTypeOS2WidthClass</key>
    <integer>5</integer>
    <key>postscriptBlueFuzz</key>
    <integer>0</integer>
    <key>postscriptBlueScale</key>
    <real>0.08333</real>
    <key>postscriptBlueShift</key>
    <integer>7</integer>
    <key>postscriptBlueValues</key>
    <array>
      <integer>-10</integer>
      <integer>0</integer>
      <integer>658</integer>
      <integer>667</integer>
      <integer>749</integer>
      <integer>758</integer>
      <integer>774</integer>
      <integer>779</integer>
    </array>
    <key>postscriptFamilyBlues</key>
    <array>
      <integer>-14</integer>
      <integer>2</integer>
      <integer>604</integer>
      <integer>618</integer>
      <integer>750</integer>
      <integer>763</integer>
      <integer>772</integer>
      <integer>784</integer>
    </array>
    <key>postscriptFamilyOtherBlues</key>
    <array>
      <integer>-153</integer>
      <integer>-134</integer>
    </array>
    <key>postscriptForceBold</key>
    <false/>
    <key>postscriptOtherBlues</key>
    <array>
      <integer>-111</integer>
      <integer>-103</integer>
    </array>
    <key>postscriptStemSnapH</key>
    <array>
      <integer>209</integer>
      <integer>263</integer>
    </array>
    <key>postscriptStemSnapV</key>
    <array>
      <integer>86</integer>
      <integer>95</integer>
    </array>
    <key>styleName</key>
    <string>Compressed Black Italic</string>
    <key>unitsPerEm</key>
    <integer>1000</integer>
    <key>versionMajor</key>
    <integer>0</integer>
    <key>versionMinor</key>
    <integer>0</integer>
    <key>xHeight</key>
    <integer>660</integer>
  </dict>
</plist>


================================================
FILE: assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/C_.glif
================================================
<?xml version='1.0' encoding='UTF-8'?>
<glyph name="C" format="2">
  <advance width="140"/>
  <unicode hex="0043"/>
  <outline>
    <contour>
      <point x="140" y="472" type="curve"/>
      <point x="125" y="472"/>
      <point x="117" y="477"/>
      <point x="119" y="488" type="curve" smooth="yes"/>
      <point x="121" y="497"/>
      <point x="130" y="500"/>
      <point x="141" y="500" type="curve" smooth="yes"/>
      <point x="154" y="500"/>
      <point x="168" y="498"/>
      <point x="177" y="495" type="curve"/>
      <point x="205" y="606"/>
      <point x="214" y="636"/>
      <point x="243" y="744" type="curve"/>
      <point x="233" y="750"/>
      <point x="217" y="754"/>
      <point x="195" y="754" type="curve" smooth="yes"/>
      <point x="131" y="754"/>
      <point x="105" y="704"/>
      <point x="31" y="407" type="curve" smooth="yes"/>
      <point x="-61" y="41"/>
      <point x="-54" y="-4"/>
      <point x="17" y="-4" type="curve"/>
      <point x="34" y="-4"/>
      <point x="50" y="2"/>
      <point x="60" y="7" type="curve"/>
      <point x="90" y="137"/>
      <point x="142" y="349"/>
      <point x="172" y="476" type="curve"/>
      <point x="164" y="475"/>
      <point x="157" y="472"/>
    </contour>
  </outline>
  <lib>
    <dict>
      <key>public.markColor</key>
      <string>0.9529,0.9294,0.5725,1</string>
    </dict>
  </lib>
</glyph>


================================================
FILE: assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/D_.glif
================================================
<?xml version='1.0' encoding='UTF-8'?>
<glyph name="D" format="2">
  <advance width="222"/>
  <unicode hex="0044"/>
  <anchor x="68" y="381" name="bar"/>
  <outline>
    <contour>
      <point x="67" y="167" type="line"/>
      <point x="80" y="228"/>
      <point x="96" y="292"/>
      <point x="123" y="397" type="curve" smooth="yes"/>
      <point x="147" y="496"/>
      <point x="166" y="565"/>
      <point x="182" y="620" type="curve"/>
      <point x="163" y="590" type="line"/>
      <point x="170" y="591"/>
      <point x="174" y="591"/>
      <point x="178" y="591" type="curve" smooth="yes"/>
      <point x="190" y="591"/>
      <point x="193" y="584"/>
      <point x="149" y="412" type="curve" smooth="yes"/>
      <point x="103" y="231"/>
      <point x="97" y="220"/>
      <point x="84" y="220" type="curve" smooth="yes"/>
      <point x="80" y="220"/>
      <point x="77" y="220"/>
      <point x="71" y="220" type="curve"/>
    </contour>
    <contour>
      <point x="38" y="0" type="line"/>
      <point x="117" y="0"/>
      <point x="155" y="59"/>
      <point x="243" y="414" type="curve" smooth="yes"/>
      <point x="318" y="713"/>
      <point x="280" y="750"/>
      <point x="208" y="750" type="curve"/>
      <point x="121" y="750" type="line"/>
      <point x="96" y="644"/>
      <point x="69" y="533"/>
      <point x="29" y="374" type="curve" smooth="yes"/>
      <point x="-10" y="215"/>
      <point x="-38" y="107"/>
      <point x="-66" y="0" type="curve"/>
    </contour>
  </outline>
  <lib>
    <dict>
      <key>public.markColor</key>
      <string>0.9529,0.9294,0.5725,1</string>
    </dict>
  </lib>
</glyph>


================================================
FILE: assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/E_.glif
================================================
<?xml version='1.0' encoding='UTF-8'?>
<glyph name="E" format="2">
  <advance width="171"/>
  <unicode hex="0045"/>
  <outline>
    <contour>
      <point x="89" y="317" type="line"/>
      <point x="111" y="317"/>
      <point x="142" y="318"/>
      <point x="163" y="316" type="curve"/>
      <point x="178" y="374"/>
      <point x="202" y="474"/>
      <point x="216" y="524" type="curve"/>
      <point x="197" y="522"/>
      <point x="161" y="521"/>
      <point x="140" y="521" type="curve"/>
    </contour>
    <contour>
      <point x="87" y="0" type="line"/>
      <point x="96" y="36"/>
      <point x="108" y="89"/>
      <point x="120" y="136" type="curve" smooth="yes"/>
      <point x="131" y="182"/>
      <point x="149" y="261"/>
      <point x="157" y="294" type="curve"/>
      <point x="127" y="293"/>
      <point x="94" y="292"/>
      <point x="76" y="292" type="curve"/>
      <point x="33" y="68" type="line"/>
      <point x="57" y="166"/>
      <point x="84" y="273"/>
      <point x="113" y="388" type="curve" smooth="yes"/>
      <point x="138" y="488"/>
      <point x="164" y="593"/>
      <point x="191" y="702" type="curve"/>
      <point x="143" y="545" type="line"/>
      <point x="161" y="545"/>
      <point x="198" y="544"/>
      <point x="224" y="543" type="curve"/>
      <point x="231" y="574"/>
      <point x="234" y="592"/>
      <point x="245" y="637" type="curve"/>
      <point x="255" y="676"/>
      <point x="266" y="721"/>
      <point x="274" y="750" type="curve"/>
      <point x="121" y="750" type="line"/>
      <point x="94" y="642"/>
      <point x="68" y="534"/>
      <point x="28" y="375" type="curve" smooth="yes"/>
      <point x="-11" y="215"/>
      <point x="-39" y="108"/>
      <point x="-66" y="0" type="curve"/>
    </contour>
  </outline>
  <lib>
    <dict>
      <key>public.markColor</key>
      <string>0.9529,0.9294,0.5725,1</string>
    </dict>
  </lib>
</glyph>


================================================
FILE: assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/L_.glif
================================================
<?xml version='1.0' encoding='UTF-8'?>
<glyph name="L" format="2">
  <advance width="132"/>
  <unicode hex="004C"/>
  <anchor x="184" y="440" name="dot"/>
  <outline>
    <contour>
      <point x="54" y="0" type="line"/>
      <point x="60" y="28"/>
      <point x="73" y="79"/>
      <point x="82" y="118" type="curve"/>
      <point x="91" y="152"/>
      <point x="100" y="190"/>
      <point x="106" y="210" type="curve"/>
      <point x="92" y="210"/>
      <point x="77" y="208"/>
      <point x="65" y="208" type="curve"/>
      <point x="63" y="120" type="line"/>
      <point x="73" y="161"/>
      <point x="109" y="309"/>
      <point x="127" y="383" type="curve" smooth="yes"/>
      <point x="166" y="537"/>
      <point x="208" y="697"/>
      <point x="222" y="750" type="curve"/>
      <point x="120" y="750" type="line"/>
      <point x="104" y="678"/>
      <point x="67" y="534"/>
      <point x="27" y="375" type="curve" smooth="yes"/>
      <point x="-12" y="215"/>
      <point x="-53" y="58"/>
      <point x="-67" y="0" type="curve"/>
    </contour>
  </outline>
  <lib>
    <dict>
      <key>public.markColor</key>
      <string>0.9529,0.9294,0.5725,1</string>
    </dict>
  </lib>
</glyph>


================================================
FILE: assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/O_.glif
================================================
<?xml version='1.0' encoding='UTF-8'?>
<glyph name="O" format="2">
  <advance width="202"/>
  <unicode hex="004F"/>
  <outline>
    <contour>
      <point x="218" y="395" type="curve" smooth="yes"/>
      <point x="294" y="697"/>
      <point x="280" y="757"/>
      <point x="206" y="757" type="curve" smooth="yes"/>
      <point x="141" y="757"/>
      <point x="104" y="697"/>
      <point x="28" y="395" type="curve" smooth="yes"/>
      <point x="-51" y="75"/>
      <point x="-49" y="-7"/>
      <point x="34" y="-7" type="curve" smooth="yes"/>
      <point x="107" y="-7"/>
      <point x="139" y="75"/>
    </contour>
    <contour>
      <point x="82" y="228" type="curve"/>
      <point x="70" y="228"/>
      <point x="71" y="237"/>
      <point x="114" y="401" type="curve" smooth="yes"/>
      <point x="160" y="576"/>
      <point x="161" y="585"/>
      <point x="169" y="585" type="curve" smooth="yes"/>
      <point x="181" y="585"/>
      <point x="183" y="576"/>
      <point x="137" y="401" type="curve" smooth="yes"/>
      <point x="94" y="237"/>
      <point x="91" y="228"/>
    </contour>
  </outline>
  <lib>
    <dict>
      <key>public.markColor</key>
      <string>0.9529,0.9294,0.5725,1</string>
    </dict>
  </lib>
</glyph>


================================================
FILE: assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/P_.glif
================================================
<?xml version='1.0' encoding='UTF-8'?>
<glyph name="P" format="2">
  <advance width="211"/>
  <unicode hex="0050"/>
  <outline>
    <contour>
      <point x="26" y="0" type="line"/>
      <point x="54" y="146"/>
      <point x="119" y="407"/>
      <point x="181" y="655" type="curve"/>
      <point x="112" y="586" type="line"/>
      <point x="125" y="588"/>
      <point x="157" y="589"/>
      <point x="168" y="589" type="curve" smooth="yes"/>
      <point x="182" y="589"/>
      <point x="185" y="579"/>
      <point x="150" y="438" type="curve" smooth="yes"/>
      <point x="126" y="341"/>
      <point x="122" y="321"/>
      <point x="103" y="321" type="curve" smooth="yes"/>
      <point x="101" y="321"/>
      <point x="96" y="322"/>
      <point x="94" y="322" type="curve"/>
      <point x="49" y="141" type="line"/>
      <point x="54" y="140"/>
      <point x="57" y="140"/>
      <point x="71" y="140" type="curve" smooth="yes"/>
      <point x="162" y="140"/>
      <point x="176" y="183"/>
      <point x="245" y="461" type="curve" smooth="yes"/>
      <point x="307" y="709"/>
      <point x="288" y="750"/>
      <point x="187" y="750" type="curve"/>
      <point x="120" y="750" type="line"/>
      <point x="94" y="642"/>
      <point x="66" y="534"/>
      <point x="26" y="375" type="curve" smooth="yes"/>
      <point x="-13" y="215"/>
      <point x="-39" y="108"/>
      <point x="-67" y="0" type="curve"/>
    </contour>
  </outline>
  <lib>
    <dict>
      <key>public.markColor</key>
      <string>0.9529,0.9294,0.5725,1</string>
    </dict>
  </lib>
</glyph>


================================================
FILE: assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/T_.glif
================================================
<?xml version='1.0' encoding='UTF-8'?>
<glyph name="T" format="2">
  <advance width="157"/>
  <unicode hex="0054"/>
  <anchor x="89" y="345" name="bar"/>
  <outline>
    <contour>
      <point x="99" y="579" type="line"/>
      <point x="37" y="328"/>
      <point x="-32" y="56"/>
      <point x="-48" y="0" type="curve"/>
      <point x="-34" y="1"/>
      <point x="-13" y="2"/>
      <point x="3" y="2" type="curve"/>
      <point x="18" y="2"/>
      <point x="40" y="1"/>
      <point x="53" y="0" type="curve"/>
      <point x="67" y="56"/>
      <point x="134" y="328"/>
      <point x="196" y="579" type="curve"/>
    </contour>
    <contour>
      <point x="115" y="750" type="line"/>
      <point x="110" y="724"/>
      <point x="100" y="684"/>
      <point x="90" y="647" type="curve"/>
      <point x="82" y="612"/>
      <point x="71" y="569"/>
      <point x="63" y="540" type="curve"/>
      <point x="91" y="540"/>
      <point x="118" y="541"/>
      <point x="138" y="541" type="curve"/>
      <point x="159" y="541"/>
      <point x="185" y="540"/>
      <point x="212" y="540" type="curve"/>
      <point x="219" y="569"/>
      <point x="230" y="612"/>
      <point x="238" y="647" type="curve"/>
      <point x="248" y="684"/>
      <point x="258" y="724"/>
      <point x="264" y="750" type="curve"/>
    </contour>
  </outline>
  <lib>
    <dict>
      <key>public.markColor</key>
      <string>0.9529,0.9294,0.5725,1</string>
    </dict>
  </lib>
</glyph>


================================================
FILE: assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/Y_.glif
================================================
<?xml version='1.0' encoding='UTF-8'?>
<glyph name="Y" format="2">
  <advance width="211"/>
  <unicode hex="0059"/>
  <outline>
    <contour>
      <point x="47" y="315" type="line"/>
      <point x="8" y="159"/>
      <point x="-25" y="34"/>
      <point x="-34" y="0" type="curve"/>
      <point x="-12" y="1"/>
      <point x="8" y="1"/>
      <point x="32" y="1" type="curve" smooth="yes"/>
      <point x="54" y="1"/>
      <point x="76" y="1"/>
      <point x="96" y="0" type="curve"/>
      <point x="103" y="34"/>
      <point x="134" y="159"/>
      <point x="173" y="315" type="curve"/>
    </contour>
    <contour>
      <point x="233" y="750" type="line"/>
      <point x="223" y="710"/>
      <point x="184" y="569"/>
      <point x="144" y="431" type="curve" smooth="yes"/>
      <point x="134" y="393"/>
      <point x="112" y="312"/>
      <point x="104" y="281" type="curve"/>
      <point x="121" y="321" type="line"/>
      <point x="103" y="321" type="line"/>
      <point x="99" y="281" type="line"/>
      <point x="106" y="312"/>
      <point x="125" y="392"/>
      <point x="133" y="431" type="curve" smooth="yes"/>
      <point x="165" y="569"/>
      <point x="197" y="710"/>
      <point x="208" y="750" type="curve"/>
      <point x="109" y="750" type="line"/>
      <point x="93" y="652"/>
      <point x="33" y="270"/>
      <point x="27" y="221" type="curve"/>
      <point x="43" y="221"/>
      <point x="58" y="222"/>
      <point x="85" y="222" type="curve"/>
      <point x="100" y="222"/>
      <point x="127" y="224"/>
      <point x="144" y="221" type="curve"/>
      <point x="160" y="266"/>
      <point x="292" y="654"/>
      <point x="324" y="750" type="curve"/>
    </contour>
  </outline>
  <lib>
    <dict>
      <key>public.markColor</key>
      <string>0.9529,0.9294,0.5725,1</string>
    </dict>
  </lib>
</glyph>


================================================
FILE: assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/contents.plist
================================================
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>C</key>
    <string>C_.glif</string>
    <key>D</key>
    <string>D_.glif</string>
    <key>E</key>
    <string>E_.glif</string>
    <key>L</key>
    <string>L_.glif</string>
    <key>O</key>
    <string>O_.glif</string>
    <key>P</key>
    <string>P_.glif</string>
    <key>T</key>
    <string>T_.glif</string>
    <key>Y</key>
    <string>Y_.glif</string>
    <key>space</key>
    <string>space.glif</string>
  </dict>
</plist>


================================================
FILE: assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/layerinfo.plist
================================================
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>color</key>
    <string>1,0.75,0,0.7</string>
  </dict>
</plist>


================================================
FILE: assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/space.glif
================================================
<?xml version='1.0' encoding='UTF-8'?>
<glyph name="space" format="2">
  <advance width="60"/>
  <unicode hex="0020"/>
  <outline>
  </outline>
  <lib>
    <dict>
      <key>public.markColor</key>
      <string>0.5725,0.9294,0.9529,1</string>
    </dict>
  </lib>
</glyph>


================================================
FILE: assets/ColdtypeObviously_CompressedBlackItalic.ufo/groups.plist
================================================
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>public.kern1.A</key>
    <array>
      <string>A</string>
      <string>Aacute</string>
      <string>Abreve</string>
      <string>Acircumflex</string>
      <string>Adieresis</string>
      <string>Agrave</string>
      <string>Amacron</string>
      <string>Aogonek</string>
      <string>Aring</string>
      <string>Aringacute</string>
      <string>Atilde</string>
    </array>
    <key>public.kern1.AE</key>
    <array>
      <string>AE</string>
      <string>AEacute</string>
      <string>E</string>
      <string>Eacute</string>
      <string>Ebreve</string>
      <string>Ecaron</string>
      <string>Ecircumflex</string>
      <string>Edieresis</string>
      <string>Edotaccent</string>
      <string>Egrave</string>
      <string>Emacron</string>
      <string>Eogonek</string>
      <string>OE</string>
    </array>
    <key>public.kern1.C</key>
    <array>
      <string>C</string>
      <string>Cacute</string>
      <string>Ccaron</string>
      <string>Ccedilla</string>
      <string>Ccircumflex</string>
      <string>Cdotaccent</string>
    </array>
    <key>public.kern1.C.alt</key>
    <array>
      <string>C</string>
      <string>Cacute.alt</string>
      <string>Ccaron.alt</string>
      <string>Ccedilla.alt</string>
      <string>Ccircumflex.alt</string>
      <string>Cdotaccent.alt</string>
    </array>
    <key>public.kern1.D</key>
    <array>
      <string>D</string>
      <string>Dcaron</string>
      <string>Dcroat</string>
      <string>Eth</string>
      <string>nine</string>
      <string>nine.alt</string>
    </array>
    <key>public.kern1.Eng</key>
    <array>
      <string>Eng</string>
      <string>N</string>
      <string>Nacute</string>
      <string>Ncaron</string>
      <string>Ncommaaccent</string>
      <string>Ntilde</string>
    </array>
    <key>public.kern1.G</key>
    <array>
      <string>G</string>
      <string>Gbreve</string>
      <string>Gcircumflex</string>
      <string>Gcommaaccent</string>
      <string>Gdotaccent</string>
    </array>
    <key>public.kern1.G.alt</key>
    <array>
      <string>Gbreve.alt</string>
      <string>Gcircumflex.alt</string>
      <string>Gcommaaccent.alt</string>
      <string>Gdotaccent.alt</string>
      <string>G.alt</string>
    </array>
    <key>public.kern1.H</key>
    <array>
      <string>H</string>
      <string>Hbar</string>
      <string>Hcircumflex</string>
      <string>I</string>
      <string>Iacute</string>
      <string>Ibreve</string>
      <string>Icircumflex</string>
      <string>Idieresis</string>
      <string>Idotaccent</string>
      <string>Igrave</string>
      <string>Imacron</string>
      <string>Iogonek</string>
      <string>Itilde</string>
      <string>M</string>
    </array>
    <key>public.kern1.IJ</key>
    <array>
      <string>IJ</string>
      <string>J</string>
      <string>Jcircumflex</string>
    </array>
    <key>public.kern1.K</key>
    <array>
      <string>K</string>
      <string>Kcommaaccent</string>
    </array>
    <key>public.kern1.L</key>
    <array>
      <string>L</string>
      <string>Lacute</string>
      <string>Lcommaaccent</string>
      <string>Lslash</string>
    </array>
    <key>public.kern1.O</key>
    <array>
      <string>O</string>
      <string>Oacute</string>
      <string>Obreve</string>
      <string>Ocircumflex</string>
      <string>Odieresis</string>
      <string>Ograve</string>
      <string>Ohungarumlaut</string>
      <string>Omacron</string>
      <string>Otilde</string>
      <string>zero</string>
      <string>eth</string>
    </array>
    <key>public.kern1.Oslash</key>
    <array>
      <string>Oslash</string>
      <string>Oslashacute</string>
    </array>
    <key>public.kern1.R</key>
    <array>
      <string>R</string>
      <string>Racute</string>
      <string>Rcaron</string>
      <string>Rcommaaccent</string>
    </array>
    <key>public.kern1.S</key>
    <array>
      <string>S</string>
      <string>Sacute</string>
      <string>Scaron</string>
      <string>Scedilla</string>
      <string>Scircumflex</string>
      <string>Scommaaccent</string>
      <string>dollar</string>
    </array>
    <key>public.kern1.S.alt</key>
    <array>
      <string>Sacute.alt</string>
      <string>Scaron.alt</string>
      <string>Scedilla.alt</string>
      <string>Scircumflex.alt</string>
      <string>Scommaaccent.alt</string>
      <string>S.alt</string>
      <string>dollar.alt</string>
    </array>
    <key>public.kern1.T</key>
    <array>
      <string>T</string>
      <string>Tbar</string>
      <string>Tcaron</string>
      <string>Tcommaaccent</string>
      <string>uni021A</string>
    </array>
    <key>public.kern1.U</key>
    <array>
      <string>U</string>
      <string>Uacute</string>
      <string>Ubreve</string>
      <string>Ucircumflex</string>
      <string>Udieresis</string>
      <string>Ugrave</string>
      <string>Uhungarumlaut</string>
      <string>Umacron</string>
      <string>Uogonek</string>
      <string>Uring</string>
      <string>Utilde</string>
    </array>
    <key>public.kern1.W</key>
    <array>
      <string>W</string>
      <string>Wacute</string>
      <string>Wcircumflex</string>
      <string>Wdieresis</string>
      <string>Wgrave</string>
    </array>
    <key>public.kern1.Y</key>
    <array>
      <string>Y</string>
      <string>Yacute</string>
      <string>Ycircumflex</string>
      <string>Ydieresis</string>
    </array>
    <key>public.kern1.Z</key>
    <array>
      <string>Z</string>
      <string>Zacute</string>
      <string>Zcaron</string>
      <string>Zdotaccent</string>
    </array>
    <key>public.kern1.a</key>
    <array>
      <string>a.alt2</string>
      <string>aacute.alt2</string>
      <string>abreve.alt2</string>
      <string>acircumflex.alt2</string>
      <string>adieresis.alt2</string>
      <string>agrave.alt2</string>
      <string>amacron.alt2</string>
      <string>aogonek.alt2</string>
      <string>aring.alt2</string>
      <string>aringacute.alt2</string>
      <string>atilde.alt2</string>
      <string>aacute.alt</string>
      <string>abreve.alt</string>
      <string>acircumflex.alt</string>
      <string>adieresis.alt</string>
      <string>agrave.alt</string>
      <string>amacron.alt</string>
      <string>aogonek.alt</string>
      <string>aring.alt</string>
      <string>aringacute.alt</string>
      <string>atilde.alt</string>
      <string>a.alt</string>
    </array>
    <key>public.kern1.ae</key>
    <array>
      <string>ae.alt2</string>
      <string>aeacute.alt2</string>
      <string>e</string>
      <string>eacute</string>
      <string>ebreve</string>
      <string>ecaron</string>
      <string>ecircumflex</string>
      <string>edieresis</string>
      <string>edotaccent</string>
      <string>egrave</string>
      <string>emacron</string>
      <string>eogonek</string>
      <string>oe</string>
      <string>ae</string>
      <string>aeacute</string>
    </array>
    <key>public.kern1.afii57929</key>
    <array>
      <string>quotedblright</string>
      <string>quoteright</string>
    </array>
    <key>public.kern1.at</key>
    <array>
      <string>at</string>
      <string>at.case</string>
    </array>
    <key>public.kern1.b</key>
    <array>
      <string>b</string>
      <string>p</string>
      <string>thorn</string>
    </array>
    <key>public.kern1.braceleft</key>
    <array>
      <string>braceleft</string>
      <string>bracketleft</string>
    </array>
    <key>public.kern1.braceright</key>
    <array>
      <string>braceright</string>
      <string>bracketright</string>
    </array>
    <key>public.kern1.c</key>
    <array>
      <string>c</string>
      <string>cacute</string>
      <string>ccaron</string>
      <string>ccedilla</string>
      <string>ccircumflex</string>
      <string>cdotaccent</string>
    </array>
    <key>public.kern1.c.alt</key>
    <array>
      <string>cacute.alt</string>
      <string>ccaron.alt</string>
      <string>ccedilla.alt</string>
      <string>ccircumflex.alt</string>
      <string>cdotaccent.alt</string>
      <string>c.alt</string>
    </array>
    <key>public.kern1.colon</key>
    <array>
      <string>colon</string>
      <string>semicolon</string>
    </array>
    <key>public.kern1.comma</key>
    <array>
      <string>comma</string>
      <string>ellipsis</string>
      <string>period</string>
      <string>quotedblbase</string>
      <string>quotesinglbase</string>
    </array>
    <key>public.kern1.copyright</key>
    <array>
      <string>copyright</string>
      <string>copyright.alt</string>
      <string>registered</string>
    </array>
    <key>public.kern1.d</key>
    <array>
      <string>d</string>
      <string>dcroat</string>
      <string>fl</string>
      <string>l</string>
      <string>lacute</string>
      <string>lcommaaccent</string>
      <string>lslash</string>
    </array>
    <key>public.kern1.dcaron</key>
    <array>
      <string>dcaron</string>
      <string>lcaron</string>
    </array>
    <key>public.kern1.dotlessi</key>
    <array>
      <string>dotlessi</string>
      <string>fi</string>
      <string>i</string>
      <string>iacute</string>
      <string>ibreve</string>
      <string>icircumflex</string>
      <string>idieresis</string>
      <string>igrave</string>
      <string>imacron</string>
      <string>iogonek</string>
      <string>itilde</string>
      <string>aacute</string>
      <string>abreve</string>
      <string>acircumflex</string>
      <string>adieresis</string>
      <string>agrave</string>
      <string>amacron</string>
      <string>aogonek</string>
      <string>aring</string>
      <string>aringacute</string>
      <string>atilde</string>
    </array>
    <key>public.kern1.e.alt</key>
    <array>
      <string>eacute.alt</string>
      <string>ebreve.alt</string>
      <string>ecaron.alt</string>
      <string>ecircumflex.alt</string>
      <string>edieresis.alt</string>
      <string>edotaccent.alt</string>
      <string>egrave.alt</string>
      <string>emacron.alt</string>
      <string>eogonek.alt</string>
      <string>ae.alt</string>
      <string>e.alt</string>
    </array>
    <key>public.kern1.eight</key>
    <array>
      <string>eight</string>
      <string>three</string>
      <string>three.alt</string>
      <string>B</string>
      <string>germandbls</string>
    </array>
    <key>public.kern1.emdash</key>
    <array>
      <string>emdash</string>
      <string>endash</string>
      <string>hyphen</string>
    </array>
    <key>public.kern1.eng</key>
    <array>
      <string>eng</string>
      <string>ij</string>
      <string>j</string>
      <string>y.alt</string>
      <string>g.alt</string>
      <string>g</string>
      <string>gcommaaccent.alt</string>
      <string>gcommaaccent</string>
      <string>gbreve.alt</string>
      <string>gcircumflex.alt</string>
      <string>gdotaccent.alt</string>
      <string>yacute.alt</string>
      <string>ycircumflex.alt</string>
      <string>ydieresis.alt</string>
      <string>gbreve</string>
      <string>gcircumflex</string>
      <string>gdotaccent</string>
      <string>yacute</string>
      <string>ycircumflex</string>
      <string>ydieresis</string>
      <string>q</string>
      <string>jcircumflex</string>
    </array>
    <key>public.kern1.five</key>
    <array>
      <string>five</string>
      <string>five.alt</string>
    </array>
    <key>public.kern1.five.osf</key>
    <array>
      <string>five.osf</string>
      <string>five.osf.alt</string>
    </array>
    <key>public.kern1.g</key>
    <array>
      <string>g.alt2</string>
      <string>gbreve.alt2</string>
      <string>gcircumflex.alt2</string>
      <string>gcommaaccent.alt2</string>
      <string>gdotaccent.alt2</string>
    </array>
    <key>public.kern1.guillemotleft</key>
    <array>
      <string>guillemotleft</string>
      <string>guilsinglleft</string>
    </array>
    <key>public.kern1.guillemotleft.case</key>
    <array>
      <string>guilsinglleft.case</string>
      <string>guillemotleft.case</string>
    </array>
    <key>public.kern1.guillemotright</key>
    <array>
      <string>guillemotright</string>
      <string>guilsinglright</string>
    </array>
    <key>public.kern1.guillemotright.case</key>
    <array>
      <string>guillemotright.case</string>
      <string>guilsinglright.case</string>
    </array>
    <key>public.kern1.h</key>
    <array>
      <string>h</string>
      <string>hbar</string>
      <string>hcircumflex</string>
      <string>m</string>
      <string>n</string>
      <string>nacute</string>
      <string>napostrophe</string>
      <string>ncaron</string>
      <string>ncommaaccent</string>
      <string>ntilde</string>
    </array>
    <key>public.kern1.hyphen.case</key>
    <array>
      <string>emdash.case</string>
      <string>endash.case</string>
      <string>hyphen.case</string>
      <string>plus</string>
      <string>minus</string>
    </array>
    <key>public.kern1.k</key>
    <array>
      <string>k</string>
      <string>kcommaaccent</string>
      <string>kgreenlandic</string>
    </array>
    <key>public.kern1.minute</key>
    <array>
      <string>quotedbl</string>
      <string>quotesingle</string>
    </array>
    <key>public.kern1.nine.osf</key>
    <array>
      <string>nine.osf</string>
      <string>nine.osf.alt</string>
    </array>
    <key>public.kern1.o</key>
    <array>
      <string>o</string>
      <string>oacute</string>
      <string>obreve</string>
      <string>ocircumflex</string>
      <string>odieresis</string>
      <string>ograve</string>
      <string>ohungarumlaut</string>
      <string>omacron</string>
      <string>otilde</string>
    </array>
    <key>public.kern1.oslash</key>
    <array>
      <string>oslash</string>
      <string>oslashacute</string>
    </array>
    <key>public.kern1.question</key>
    <array>
      <string>question</string>
      <string>question.alt</string>
    </array>
    <key>public.kern1.quotedblleft</key>
    <array>
      <string>quotedblleft</string>
      <string>quoteleft</string>
    </array>
    <key>public.kern1.r</key>
    <array>
      <string>r</string>
      <string>racute</string>
      <string>rcaron</string>
      <string>rcommaaccent</string>
    </array>
    <key>public.kern1.s</key>
    <array>
      <string>s</string>
      <string>sacute</string>
      <string>scaron</string>
      <string>scedilla</string>
      <string>scircumflex</string>
      <string>scommaaccent</string>
    </array>
    <key>public.kern1.s.alt</key>
    <array>
      <string>sacute.alt</string>
      <string>scaron.alt</string>
      <string>scedilla.alt</string>
      <string>scircumflex.alt</string>
      <string>scommaaccent.alt</string>
      <string>s.alt</string>
    </array>
    <key>public.kern1.t</key>
    <array>
      <string>t</string>
      <string>tbar</string>
      <string>tcaron</string>
      <string>tcommaaccent</string>
      <string>uni021B</string>
    </array>
    <key>public.kern1.t.alt</key>
    <array>
      <string>tcaron.alt</string>
      <string>tcommaaccent.alt</string>
      <string>t.alt</string>
      <string>uni021B.alt</string>
    </array>
    <key>public.kern1.t.alt2</key>
    <array>
      <string>tcaron.alt2</string>
      <string>tcommaaccent.alt2</string>
      <string>t.alt2</string>
      <string>uni021B.alt2</string>
    </array>
    <key>public.kern1.three.osf</key>
    <array>
      <string>three.osf</string>
      <string>three.osf.alt</string>
    </array>
    <key>public.kern1.two</key>
    <array>
      <string>two</string>
      <string>two.alt</string>
    </array>
    <key>public.kern1.two.osf</key>
    <array>
      <string>two.osf</string>
      <string>two.osf.alt</string>
    </array>
    <key>public.kern1.u</key>
    <array>
      <string>u</string>
      <string>uacute</string>
      <string>ubreve</string>
      <string>ucircumflex</string>
      <string>udieresis</string>
      <string>ugrave</string>
      <string>uhungarumlaut</string>
      <string>umacron</string>
      <string>uogonek</string>
      <string>uring</string>
      <string>utilde</string>
    </array>
    <key>public.kern1.v</key>
    <array>
      <string>v</string>
      <string>w</string>
      <string>wacute</string>
      <string>wcircumflex</string>
      <string>wdieresis</string>
      <string>wgrave</string>
    </array>
    <key>public.kern1.y</key>
    <array>
      <string>y.alt2</string>
      <string>yacute.alt2</string>
      <string>ycircumflex.alt2</string>
      <string>ydieresis.alt2</string>
    </array>
    <key>public.kern1.z</key>
    <array>
      <string>z</string>
      <string>zacute</string>
      <string>zcaron</string>
      <string>zdotaccent</string>
    </array>
    <key>public.kern2.A</key>
    <array>
      <string>A</string>
      <string>Aacute</string>
      <string>Abreve</string>
      <string>Acircumflex</string>
      <string>Adieresis</string>
      <string>Agrave</string>
      <string>Amacron</string>
      <string>Aogonek</string>
      <string>Aring</string>
      <string>Aringacute</string>
      <string>Atilde</string>
    </array>
    <key>public.kern2.AE</key>
    <array>
      <string>AE</string>
      <string>AEacute</string>
    </array>
    <key>public.kern2.B</key>
    <array>
      <string>B</string>
      <string>D</string>
      <string>Dcaron</string>
      <string>Dcroat</string>
      <string>E</string>
      <string>Eacute</string>
      <string>Ebreve</string>
      <string>Ecaron</string>
      <string>Ecircumflex</string>
      <string>Edieresis</string>
      <string>Edotaccent</string>
      <string>Egrave</string>
      <string>Emacron</string>
      <string>Eogonek</string>
      <string>Eth</string>
      <string>F</string>
      <string>H</string>
      <string>Hbar</string>
      <string>Hcircumflex</string>
      <string>I</string>
      <string>IJ</string>
      <string>Iacute</string>
      <string>Ibreve</string>
      <string>Icircumflex</string>
      <string>Idieresis</string>
      <string>Idotaccent</string>
      <string>Igrave</string>
      <string>Imacron</string>
      <string>Iogonek</string>
      <string>Itilde</string>
      <string>K</string>
      <string>Kcommaaccent</string>
      <string>L</string>
      <string>Lacute</string>
      <string>Lcaron</string>
      <string>Lcommaaccent</string>
      <string>Ldot</string>
      <string>Lslash</string>
      <string>P</string>
      <string>R</string>
      <string>Racute</string>
      <string>Rcaron</string>
      <string>Rcommaaccent</string>
      <string>Thorn</string>
      <string>one</string>
      <string>uni1E9E</string>
    </array>
    <key>public.kern2.C</key>
    <array>
      <string>C</string>
      <string>Cacute</string>
      <string>Ccaron</string>
      <string>Ccedilla</string>
      <string>Ccircumflex</string>
      <string>Cdotaccent</string>
      <string>G</string>
      <string>Gbreve</string>
      <string>Gcircumflex</string>
      <string>Gcommaaccent</string>
      <string>Gdotaccent</string>
      <string>O</string>
      <string>OE</string>
      <string>Oacute</string>
      <string>Obreve</string>
      <string>Ocircumflex</string>
      <string>Odieresis</string>
      <string>Ograve</string>
      <string>Ohungarumlaut</string>
      <string>Omacron</string>
      <string>Otilde</string>
      <string>Q</string>
      <string>C</string>
      <string>G.alt</string>
      <string>zero</string>
      <string>six</string>
      <string>six.alt</string>
      <string>Cacute.alt</string>
      <string>Ccaron.alt</string>
      <string>Ccedilla.alt</string>
      <string>Ccircumflex.alt</string>
      <string>Cdotaccent.alt</string>
      <string>Gbreve.alt</string>
      <string>Gcircumflex.alt</string>
      <string>Gcommaaccent.alt</string>
      <string>Gdotaccent.alt</string>
    </array>
    <key>public.kern2.Eng</key>
    <array>
      <string>Eng</string>
      <string>M</string>
      <string>N</string>
      <string>Nacute</string>
      <string>Ncaron</string>
      <string>Ncommaaccent</string>
      <string>Ntilde</string>
      <string>afii61352</string>
    </array>
    <key>public.kern2.J</key>
    <array>
      <string>J</string>
      <string>Jcircumflex</string>
    </array>
    <key>public.kern2.Oslash</key>
    <array>
      <string>Oslashacute</string>
      <string>Oslash</string>
    </array>
    <key>public.kern2.S</key>
    <array>
      <string>S</string>
      <string>Sacute</string>
      <string>Scaron</string>
      <string>Scedilla</string>
      <string>Scircumflex</string>
      <string>Scommaaccent</string>
      <string>dollar</string>
    </array>
    <key>public.kern2.S.alt</key>
    <array>
      <string>Sacute.alt</string>
      <string>Scaron.alt</string>
      <string>Scedilla.alt</string>
      <string>Scircumflex.alt</string>
      <string>Scommaaccent.alt</string>
      <string>S.alt</string>
      <string>dollar.alt</string>
    </array>
    <key>public.kern2.T</key>
    <array>
      <string>T</string>
      <string>Tbar</string>
      <string>Tcaron</string>
      <string>Tcommaaccent</string>
      <string>uni021A</string>
    </array>
    <key>public.kern2.U</key>
    <array>
      <string>U</string>
      <string>Uacute</string>
      <string>Ubreve</string>
      <string>Ucircumflex</string>
      <string>Udieresis</string>
      <string>Ugrave</string>
      <string>Uhungarumlaut</string>
      <string>Umacron</string>
      <string>Uogonek</string>
      <string>Uring</string>
      <string>Utilde</string>
    </array>
    <key>public.kern2.W</key>
    <array>
      <string>W</string>
      <string>Wacute</string>
      <string>Wcircumflex</string>
      <string>Wdieresis</string>
      <string>Wgrave</string>
    </array>
    <key>public.kern2.Y</key>
    <array>
      <string>Y</string>
      <string>Yacute</string>
      <string>Ycircumflex</string>
      <string>Ydieresis</string>
    </array>
    <key>public.kern2.Z</key>
    <array>
      <string>Z</string>
      <string>Zacute</string>
      <string>Zcaron</string>
      <string>Zdotaccent</string>
    </array>
    <key>public.kern2.a</key>
    <array>
      <string>a.alt2</string>
      <string>aacute.alt2</string>
      <string>abreve.alt2</string>
      <string>acircumflex.alt2</string>
      <string>adieresis.alt2</string>
      <string>ae.alt2</string>
      <string>aeacute.alt2</string>
      <string>agrave.alt2</string>
      <string>amacron.alt2</string>
      <string>aogonek.alt2</string>
      <string>aring.alt2</string>
      <string>aringacute.alt2</string>
      <string>atilde.alt2</string>
    </array>
    <key>public.kern2.a.alt</key>
    <array>
      <string>aacute.alt</string>
      <string>abreve.alt</string>
      <string>acircumflex.alt</string>
      <string>adieresis.alt</string>
      <string>aeacute.alt</string>
      <string>agrave.alt</string>
      <string>amacron.alt</string>
      <string>aogonek.alt</string>
      <string>aring.alt</string>
      <string>aringacute.alt</string>
      <string>atilde.alt</string>
      <string>a.alt</string>
      <string>ae.alt</string>
    </array>
    <key>public.kern2.at</key>
    <array>
      <string>at</string>
      <string>at.case</string>
    </array>
    <key>public.kern2.b</key>
    <array>
      <string>b</string>
      <string>thorn</string>
    </array>
    <key>public.kern2.braceleft</key>
    <array>
      <string>braceleft</string>
      <string>bracketleft</string>
    </array>
    <key>public.kern2.braceright</key>
    <array>
      <string>braceright</string>
      <string>bracketright</string>
    </array>
    <key>public.kern2.c</key>
    <array>
      <string>c</string>
      <string>cacute</string>
      <string>ccaron</string>
      <string>ccedilla</string>
      <string>ccircumflex</string>
      <string>cdotaccent</string>
      <string>d</string>
      <string>dcaron</string>
      <string>dcroat</string>
      <string>e</string>
      <string>eacute</string>
      <string>ebreve</string>
      <string>ecaron</string>
      <string>ecircumflex</string>
      <string>edieresis</string>
      <string>edotaccent</string>
      <string>egrave</string>
      <string>emacron</string>
      <string>eogonek</string>
      <string>eth</string>
      <string>o</string>
      <string>oacute</string>
      <string>obreve</string>
      <string>ocircumflex</string>
      <string>odieresis</string>
      <string>oe</string>
      <string>ograve</string>
      <string>ohungarumlaut</string>
      <string>omacron</string>
      <string>oslash</string>
      <string>oslashacute</string>
      <string>otilde</string>
      <string>q</string>
      <string>a</string>
      <string>ae</string>
      <string>c.alt</string>
      <string>e.alt</string>
      <string>g.alt</string>
      <string>cacute.alt</string>
      <string>ccaron.alt</string>
      <string>ccedilla.alt</string>
      <string>ccircumflex.alt</string>
      <string>cdotaccent.alt</string>
      <string>eacute.alt</string>
      <string>ebreve.alt</string>
      <string>ecaron.alt</string>
      <string>ecircumflex.alt</string>
      <string>edieresis.alt</string>
      <string>edotaccent.alt</string>
      <string>egrave.alt</string>
      <string>emacron.alt</string>
      <string>eogonek.alt</string>
      <string>gbreve.alt</string>
      <string>gcircumflex.alt</string>
      <string>gdotaccent.alt</string>
      <string>aacute</string>
      <string>abreve</string>
      <string>acircumflex</string>
      <string>adieresis</string>
      <string>aeacute</string>
      <string>agrave</string>
      <string>amacron</string>
      <string>aogonek</string>
      <string>aring</string>
      <string>aringacute</string>
      <string>atilde</string>
      <string>gbreve</string>
      <string>gcircumflex</string>
      <string>gdotaccent</string>
      <string>gcommaaccent.alt</string>
    </array>
    <key>public.kern2.colon</key>
    <array>
      <string>colon</string>
      <string>semicolon</string>
    </array>
    <key>public.kern2.comma</key>
    <array>
      <string>comma</string>
      <string>ellipsis</string>
      <string>period</string>
      <string>quotedblbase</string>
      <string>quotesinglbase</string>
    </array>
    <key>public.kern2.copyright</key>
    <array>
      <string>copyright</string>
      <string>copyright.alt</string>
      <string>registered</string>
    </array>
    <key>public.kern2.dotlessi</key>
    <array>
      <string>dotlessi</string>
      <string>i</string>
      <string>iacute</string>
      <string>ibreve</string>
      <string>icircumflex</string>
      <string>idieresis</string>
      <string>igrave</string>
      <string>ij</string>
      <string>imacron</string>
      <string>iogonek</string>
      <string>itilde</string>
      <string>p</string>
      <string>eng</string>
    </array>
    <key>public.kern2.emdash</key>
    <array>
      <string>emdash</string>
      <string>endash</string>
      <string>hyphen</string>
    </array>
    <key>public.kern2.eng</key>
    <array>
      <string>kgreenlandic</string>
      <string>m</string>
      <string>n</string>
      <string>nacute</string>
      <string>ncaron</string>
      <string>ncommaaccent</string>
      <string>ntilde</string>
      <string>r</string>
      <string>racute</string>
      <string>rcaron</string>
      <string>rcommaaccent</string>
    </array>
    <key>public.kern2.f</key>
    <array>
      <string>f</string>
      <string>fi</string>
      <string>fl</string>
    </array>
    <key>public.kern2.g</key>
    <array>
      <string>g.alt2</string>
      <string>gbreve.alt2</string>
      <string>gcircumflex.alt2</string>
      <string>gcommaaccent.alt2</string>
      <string>gdotaccent.alt2</string>
    </array>
    <key>public.kern2.guillemotleft</key>
    <array>
      <string>guillemotleft</string>
      <string>guilsinglleft</string>
    </array>
    <key>public.kern2.guillemotleft.case</key>
    <array>
      <string>guillemotleft.case</string>
      <string>guilsinglleft.case</string>
    </array>
    <key>public.kern2.guillemotright</key>
    <array>
      <string>guillemotright</string>
      <string>guilsinglright</string>
    </array>
    <key>public.kern2.guillemotright.case</key>
    <array>
      <string>guillemotright.case</string>
      <string>guilsinglright.case</string>
    </array>
    <key>public.kern2.h</key>
    <array>
      <string>h</string>
      <string>hbar</string>
      <string>hcircumflex</string>
      <string>k</string>
      <string>kcommaaccent</string>
      <string>l</string>
      <string>lacute</string>
      <string>lcaron</string>
      <string>lcommaaccent</string>
      <string>ldot</string>
      <string>lslash</string>
      <string>germandbls</string>
    </array>
    <key>public.kern2.hyphen.case</key>
    <array>
      <string>emdash.case</string>
      <string>endash.case</string>
      <string>hyphen.case</string>
      <string>plus</string>
      <string>minus</string>
    </array>
    <key>public.kern2.j</key>
    <array>
      <string>j</string>
    </array>
    <key>public.kern2.minute</key>
    <array>
      <string>quotedbl</string>
      <string>quotesingle</string>
    </array>
    <key>public.kern2.onesuperior</key>
    <array>
      <string>onesuperior</string>
      <string>threesuperior</string>
      <string>twosuperior</string>
    </array>
    <key>public.kern2.quotedblleft</key>
    <array>
      <string>quotedblleft</string>
      <string>quoteleft</string>
    </array>
    <key>public.kern2.quoteright</key>
    <array>
      <string>quotedblright</string>
      <string>quoteright</string>
    </array>
    <key>public.kern2.s</key>
    <array>
      <string>s</string>
      <string>sacute</string>
      <string>scaron</string>
      <string>scedilla</string>
      <string>scircumflex</string>
      <string>scommaaccent</string>
    </array>
    <key>public.kern2.s.alt</key>
    <array>
      <string>sacute.alt</string>
      <string>scaron.alt</string>
      <string>scedilla.alt</string>
      <string>scircumflex.alt</string>
      <string>scommaaccent.alt</string>
      <string>s.alt</string>
    </array>
    <key>public.kern2.t</key>
    <array>
      <string>t</string>
      <string>tbar</string>
      <string>tcaron</string>
      <string>tcommaaccent</string>
      <string>uni021B</string>
    </array>
    <key>public.kern2.t.alt</key>
    <array>
      <string>tcaron.alt</string>
      <string>tcommaaccent.alt</string>
      <string>t.alt</string>
      <string>uni021B.alt</string>
    </array>
    <key>public.kern2.t.alt2</key>
    <array>
      <string>tcaron.alt2</string>
      <string>tcommaaccent.alt2</string>
      <string>t.alt2</string>
      <string>uni021B.alt2</string>
    </array>
    <key>public.kern2.u</key>
    <array>
      <string>u</string>
      <string>uacute</string>
      <string>ubreve</string>
      <string>ucircumflex</string>
      <string>udieresis</string>
      <string>ugrave</string>
      <string>uhungarumlaut</string>
      <string>umacron</string>
      <string>uogonek</string>
      <string>uring</string>
      <string>utilde</string>
      <string>yacute.alt</string>
      <string>ycircumflex.alt</string>
      <string>ydieresis.alt</string>
      <string>y.alt</string>
      <string>y</string>
      <string>yacute</string>
      <string>ycircumflex</string>
      <string>ydieresis</string>
    </array>
    <key>public.kern2.v</key>
    <array>
      <string>v</string>
      <string>w</string>
      <string>wacute</string>
      <string>wcircumflex</string>
      <string>wdieresis</string>
      <string>wgrave</string>
    </array>
    <key>public.kern2.y</key>
    <array>
      <string>y.alt2</string>
      <string>yacute.alt2</string>
      <string>ycircumflex.alt2</string>
      <string>ydieresis.alt2</string>
    </array>
    <key>public.kern2.z</key>
    <array>
      <string>z</string>
      <string>zacute</string>
      <string>zcaron</string>
      <string>zdotaccent</string>
    </array>
  </dict>
</plist>


================================================
FILE: assets/ColdtypeObviously_CompressedBlackItalic.ufo/layercontents.plist
================================================
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <array>
    <array>
      <string>foreground</string>
      <string>glyphs</string>
    </array>
  </array>
</plist>


================================================
FILE: assets/ColdtypeObviously_CompressedBlackItalic.ufo/lib.plist
================================================
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>com.defcon.sortDescriptor</key>
    <array>
      <dict>
        <key>ascending</key>
        <array>
          <string>.notdef</string>
          <string>A</string>
          <string>B</string>
          <string>C</string>
          <string>D</string>
          <string>E</string>
          <string>F</string>
          <string>G</string>
          <string>H</string>
          <string>I</string>
          <string>J</string>
          <string>K</string>
          <string>L</string>
          <string>M</string>
          <string>N</string>
          <string>O</string>
          <string>P</string>
          <string>Q</string>
          <string>R</string>
          <string>S</string>
          <string>T</string>
          <string>U</string>
          <string>V</string>
          <string>W</string>
          <string>X</string>
          <string>Y</string>
          <string>Z</string>
          <string>a</string>
          <string>b</string>
          <string>c</string>
          <string>d</string>
          <string>e</string>
          <string>f</string>
          <string>g</string>
          <string>h</string>
          <string>i</string>
          <string>j</string>
          <string>k</string>
          <string>l</string>
          <string>m</string>
          <string>n</string>
          <string>o</string>
          <string>p</string>
          <string>q</string>
          <string>r</string>
          <string>s</string>
          <string>t</string>
          <string>u</string>
          <string>v</string>
          <string>w</string>
          <string>x</string>
          <string>y</string>
          <string>z</string>
          <string>Aacute</string>
          <string>aacute</string>
          <string>Abreve</string>
          <string>abreve</string>
          <string>Acircumflex</string>
          <string>acircumflex</string>
          <string>Adieresis</string>
          <string>adieresis</string>
          <string>Agrave</string>
          <string>agrave</string>
          <string>Amacron</string>
          <string>amacron</string>
          <string>Aogonek</string>
          <string>aogonek</string>
          <string>Aring</string>
          <string>aring</string>
          <string>Aringacute</string>
          <string>aringacute</string>
          <string>Atilde</string>
          <string>atilde</string>
          <string>AE</string>
          <string>ae</string>
          <string>AEacute</string>
          <string>aeacute</string>
          <string>Cacute</string>
          <string>cacute</string>
          <string>Ccaron</string>
          <string>ccaron</string>
          <string>Ccedilla</string>
          <string>ccedilla</string>
          <string>Ccircumflex</string>
          <string>ccircumflex</string>
          <string>Cdotaccent</string>
          <string>cdotaccent</string>
          <string>Dcaron</string>
          <string>dcaron</string>
          <string>Dcroat</string>
          <string>dcroat</string>
          <string>Eacute</string>
          <string>eacute</string>
          <string>Ebreve</string>
          <string>ebreve</string>
          <string>Ecaron</string>
          <string>ecaron</string>
          <string>Ecircumflex</string>
          <string>ecircumflex</string>
          <string>Edieresis</string>
          <string>edieresis</string>
          <string>Edotaccent</string>
          <string>edotaccent</string>
          <string>Egrave</string>
          <string>egrave</string>
          <string>Emacron</string>
          <string>emacron</string>
          <string>Eng</string>
          <string>eng</string>
          <string>Eogonek</string>
          <string>eogonek</string>
          <string>Eth</string>
          <string>eth</string>
          <string>fi</string>
          <string>fl</string>
          <string>Gbreve</string>
          <string>gbreve</string>
          <string>Gcircumflex</string>
          <string>gcircumflex</string>
          <string>Gcommaaccent</string>
          <string>gcommaaccent</string>
          <string>Gdotaccent</string>
          <string>gdotaccent</string>
          <string>Hbar</string>
          <string>hbar</string>
          <string>Hcircumflex</string>
          <string>hcircumflex</string>
          <string>Iacute</string>
          <string>iacute</string>
          <string>Ibreve</string>
          <string>ibreve</string>
          <string>Icircumflex</string>
          <string>icircumflex</string>
          <string>Idieresis</string>
          <string>idieresis</string>
          <string>Idotaccent</string>
          <string>Igrave</string>
          <string>igrave</string>
          <string>IJ</string>
          <string>ij</string>
          <string>Imacron</string>
          <string>imacron</string>
          <string>Iogonek</string>
          <string>iogonek</string>
          <string>Itilde</string>
          <string>itilde</string>
          <string>dotlessi</string>
          <string>Jcircumflex</string>
          <string>jcircumflex</string>
          <string>Kcommaaccent</string>
          <string>kcommaaccent</string>
          <string>kgreenlandic</string>
          <string>Lacute</string>
          <string>lacute</string>
          <string>Lcaron</string>
          <string>lcaron</string>
          <string>Lcommaaccent</string>
          <string>lcommaaccent</string>
          <string>Ldot</string>
          <string>ldot</string>
          <string>Lslash</string>
          <string>lslash</string>
          <string>Nacute</string>
          <string>nacute</string>
          <string>napostrophe</string>
          <string>Ncaron</string>
          <string>ncaron</string>
          <string>Ncommaaccent</string>
          <string>ncommaaccent</string>
          <string>Ntilde</string>
          <string>ntilde</string>
          <string>Oacute</string>
          <string>oacute</string>
          <string>Obreve</string>
          <string>obreve</string>
          <string>Ocircumflex</string>
          <string>ocircumflex</string>
          <string>Odieresis</string>
          <string>odieresis</string>
          <string>Ograve</string>
          <string>ograve</string>
          <string>Ohungarumlaut</string>
          <string>ohungarumlaut</string>
          <string>Omacron</string>
          <string>omacron</string>
          <string>Oslash</string>
          <string>oslash</string>
          <string>Oslashacute</string>
          <string>oslashacute</string>
          <string>Otilde</string>
          <string>otilde</string>
          <string>OE</string>
          <string>oe</string>
          <string>Racute</string>
          <string>racute</string>
          <string>Rcaron</string>
          <string>rcaron</string>
          <string>Rcommaaccent</string>
          <string>rcommaaccent</string>
          <string>Sacute</string>
          <string>sacute</string>
          <string>Scaron</string>
          <string>scaron</string>
          <string>Scedilla</string>
          <string>scedilla</string>
          <string>Scircumflex</string>
          <string>scircumflex</string>
          <string>Scommaaccent</string>
          <string>scommaaccent</string>
          <string>Tbar</string>
          <string>tbar</string>
          <string>Tcaron</string>
          <string>tcaron</string>
          <string>Tcommaaccent</string>
          <string>tcommaaccent</string>
          <string>uni021A</string>
          <string>uni021B</string>
          <string>Thorn</string>
          <string>thorn</string>
          <string>Uacute</string>
          <string>uacute</string>
          <string>Ubreve</string>
          <string>ubreve</string>
          <string>Ucircumflex</string>
          <string>ucircumflex</string>
          <string>Udieresis</string>
          <string>udieresis</string>
          <string>Ugrave</string>
          <string>ugrave</string>
          <string>Uhungarumlaut</string>
          <string>uhungarumlaut</string>
          <string>Umacron</string>
          <string>umacron</string>
          <string>Uogonek</string>
          <string>uogonek</string>
          <string>Uring</string>
          <string>uring</string>
          <string>Utilde</string>
          <string>utilde</string>
          <string>Wacute</string>
          <string>wacute</string>
          <string>Wcircumflex</string>
          <string>wcircumflex</string>
          <string>Wdieresis</string>
          <string>wdieresis</string>
          <string>Wgrave</string>
          <string>wgrave</string>
          <string>Yacute</string>
          <string>yacute</string>
          <string>Ycircumflex</string>
          <string>ycircumflex</string>
          <string>Ydieresis</string>
          <string>ydieresis</string>
          <string>Zacute</string>
          <string>zacute</string>
          <string>Zcaron</string>
          <string>zcaron</string>
          <string>Zdotaccent</string>
          <string>zdotaccent</string>
          <string>uni1E9E</string>
          <string>germandbls</string>
          <string>C.alt</string>
          <string>Ccedilla.alt</string>
          <string>Cacute.alt</string>
          <string>Ccaron.alt</string>
          <string>Ccircumflex.alt</string>
          <string>Cdotaccent.alt</string>
          <string>G.alt</string>
          <string>Gbreve.alt</string>
          <string>Gcircumflex.alt</string>
          <string>Gcommaaccent.alt</string>
          <string>Gdotaccent.alt</string>
          <string>S.alt</string>
          <string>Sacute.alt</string>
          <string>Scaron.alt</string>
          <string>Scedilla.alt</string>
          <string>Scircumflex.alt</string>
          <string>Scommaaccent.alt</string>
          <string>a.alt</string>
          <string>agrave.alt</string>
          <string>acircumflex.alt</string>
          <string>aacute.alt</string>
          <string>abreve.alt</string>
          <string>amacron.alt</string>
          <string>aogonek.alt</string>
          <string>aring.alt</string>
          <string>aringacute.alt</string>
          <string>atilde.alt</string>
          <string>adieresis.alt</string>
          <string>ae.alt</string>
          <string>aeacute.alt</string>
          <string>c.alt</string>
          <string>ccedilla.alt</string>
          <string>cacute.alt</string>
          <string>ccaron.alt</string>
          <string>ccircumflex.alt</string>
          <string>cdotaccent.alt</string>
          <string>e.alt</string>
          <string>eacute.alt</string>
          <string>egrave.alt</string>
          <string>ecircumflex.alt</string>
          <string>edieresis.alt</string>
          <string>ebreve.alt</string>
          <string>ecaron.alt</string>
          <string>edotaccent.alt</string>
          <string>emacron.alt</string>
          <string>eogonek.alt</string>
          <string>a.alt2</string>
          <string>agrave.alt2</string>
          <string>acircumflex.alt2</string>
          <string>adieresis.alt2</string>
          <string>aacute.alt2</string>
          <string>abreve.alt2</string>
          <string>amacron.alt2</string>
          <string>aogonek.alt2</string>
          <string>aring.alt2</string>
          <string>aringacute.alt2</string>
          <string>atilde.alt2</string>
          <string>ae.alt2</string>
          <string>aeacute.alt2</string>
          <string>g.alt</string>
          <string>gbreve.alt</string>
          <string>gcircumflex.alt</string>
          <string>gdotaccent.alt</string>
          <string>gcommaaccent.alt</string>
          <string>g.alt2</string>
          <string>gbreve.alt2</string>
          <string>gcircumflex.alt2</string>
          <string>gdotaccent.alt2</string>
          <string>gcommaaccent.alt2</string>
          <string>s.alt</string>
          <string>sacute.alt</string>
          <string>scaron.alt</string>
          <string>scedilla.alt</string>
          <string>scircumflex.alt</string>
          <string>scommaaccent.alt</string>
          <string>t.alt</string>
          <string>tbar.alt</string>
          <string>tcaron.alt</string>
          <string>tcommaaccent.alt</string>
          <string>uni021B.alt</string>
          <string>t.alt2</string>
          <string>tbar.alt2</string>
          <string>tcaron.alt2</string>
          <string>tcommaaccent.alt2</string>
          <string>uni021B.alt2</string>
          <string>y.alt</string>
          <string>yacute.alt</string>
          <string>ycircumflex.alt</string>
          <string>ydieresis.alt</string>
          <string>y.alt2</string>
          <string>yacute.alt2</string>
          <string>ycircumflex.alt2</string>
          <string>ydieresis.alt2</string>
          <string>zero</string>
          <string>one</string>
          <string>two</string>
          <string>three</string>
          <string>four</string>
          <string>five</string>
          <string>six</string>
          <string>seven</string>
          <string>eight</string>
          <string>nine</string>
          <string>two.alt</string>
          <string>three.alt</string>
          <string>five.alt</string>
          <string>six.alt</string>
          <string>nine.alt</string>
          <string>period</string>
          <string>comma</string>
          <string>colon</string>
          <string>semicolon</string>
          <string>ellipsis</string>
          <string>periodcentered</string>
          <string>periodcentered.case</string>
          <string>bullet</string>
          <string>bullet.case</string>
          <string>ampersand</string>
          <string>ampersand.alt</string>
          <string>exclam</string>
          <string>exclamdown</string>
          <string>exclamdown.case</string>
          <string>question</string>
          <string>question.alt</string>
          <string>questiondown</string>
          <string>questiondown.alt</string>
          <string>questiondown.case</string>
          <string>questiondown.alt.case</string>
          <string>quotedblleft</string>
          <string>quotedblright</string>
          <string>quoteleft</string>
          <string>quoteright</string>
          <string>quotedblbase</string>
          <string>quotesinglbase</string>
          <string>guillemotleft</string>
          <string>guillemotright</string>
          <string>guillemotleft.case</string>
          <string>guillemotright.case</string>
          <string>guilsinglleft</string>
          <string>guilsinglright</string>
          <string>guilsinglleft.case</string>
          <string>guilsinglright.case</string>
          <string>hyphen</string>
          <string>endash</string>
          <string>emdash</string>
          <string>hyphen.case</string>
          <string>endash.case</string>
          <string>emdash.case</string>
          <string>underscore</string>
          <string>slash</string>
          <string>backslash</string>
          <string>bar</string>
          <string>brokenbar</string>
          <string>parenleft</string>
          <string>parenright</string>
          <string>parenleft.case</string>
          <string>parenright.case</string>
          <string>bracketleft</string>
          <string>bracketright</string>
          <string>bracketleft.case</string>
          <string>bracketright.case</string>
          <string>braceleft</string>
          <string>braceright</string>
          <string>braceleft.case</string>
          <string>braceright.case</string>
          <string>at</string>
          <string>at.case</string>
          <string>copyright</string>
          <string>copyright.alt</string>
          <string>registered</string>
          <string>trademark</string>
          <string>asterisk</string>
          <string>dagger</string>
          <string>daggerdbl</string>
          <string>asciicircum</string>
          <string>asciitilde</string>
          <string>dollar</string>
          <string>dollar.alt</string>
          <string>cent</string>
          <string>cent.alt</string>
          <string>sterling</string>
          <string>sterling.alt</string>
          <string>yen</string>
          <string>Euro</string>
          <string>Euro.alt</string>
          <string>numbersign</string>
          <string>paragraph</string>
          <string>section</string>
          <string>section.alt</string>
          <string>ordfeminine</string>
          <string>ordfeminine.alt</string>
          <string>ordfeminine.alt2</string>
          <string>ordmasculine</string>
          <string>degree</string>
          <string>percent</string>
          <string>perthousand</string>
          <string>quotedbl</string>
          <string>quotesingle</string>
          <string>plus</string>
          <string>minus</string>
          <string>less</string>
          <string>greater</string>
          <string>equal</string>
          <string>multiply</string>
          <string>divide</string>
          <string>zero.osf</string>
          <string>one.osf</string>
          <string>two.osf</string>
          <string>three.osf</string>
          <string>four.osf</string>
          <string>five.osf</string>
          <string>six.osf</string>
          <string>seven.osf</string>
          <string>eight.osf</string>
          <string>nine.osf</string>
          <string>two.osf.alt</string>
          <string>three.osf.alt</string>
          <string>five.osf.alt</string>
          <string>six.osf.alt</string>
          <string>nine.osf.alt</string>
          <string>dollar.osf</string>
          <string>sterling.osf</string>
          <string>Euro.osf</string>
          <string>yen.osf</string>
          <string>dollar.osf.alt</string>
          <string>sterling.osf.alt</string>
          <string>Euro.osf.alt</string>
          <string>acute</string>
          <string>hungarumlaut</string>
          <string>caron.alt</string>
          <string>grave</string>
          <string>circumflex</string>
          <string>caron</string>
          <string>breve</string>
          <string>tilde</string>
          <string>macron</string>
          <string>dieresis</string>
          <string>dotaccent</string>
          <string>ring</string>
          <string>commaaccent</string>
          <string>cedilla</string>
          <string>ogonek</string>
          <string>baraccent</string>
          <string>afii61352</string>
          <string>onesuperior</string>
          <string>twosuperior</string>
          <string>threesuperior</string>
          <string>onequarter</string>
          <string>onehalf</string>
          <string>threequarters</string>
          <string>onehalf.alt</string>
          <string>threequarters.alt</string>
          <string>fraction</string>
          <string>zero.numr</string>
          <string>one.numr</string>
          <string>two.numr</string>
          <string>three.numr</string>
          <string>four.numr</string>
          <string>five.numr</string>
          <string>six.numr</string>
          <string>seven.numr</string>
          <string>eight.numr</string>
          <string>nine.numr</string>
          <string>two.alt.numr</string>
          <string>three.alt.numr</string>
          <string>five.alt.numr</string>
          <string>six.alt.numr</string>
          <string>nine.alt.numr</string>
          <string>zero.dnom</string>
          <string>one.dnom</string>
          <string>two.dnom</string>
          <string>three.dnom</string>
          <string>four.dnom</string>
          <string>five.dnom</string>
          <string>six.dnom</string>
          <string>seven.dnom</string>
          <string>eight.dnom</string>
          <string>nine.dnom</string>
          <string>two.alt.dnom</string>
          <string>three.alt.dnom</string>
          <string>five.alt.dnom</string>
          <string>six.alt.dnom</string>
          <string>nine.alt.dnom</string>
          <string>arrowleft</string>
          <string>arrowup</string>
          <string>arrowright</string>
          <string>arrowdown</string>
          <string>filledbox</string>
          <string>space</string>
          <string>thinspace</string>
          <string>nbspace</string>
          <string>Aacute.compact</string>
        </array>
        <key>type</key>
        <string>glyphList</string>
      </dict>
    </array>
    <key>com.loicsander.scaleFast</key>
    <dict>
      <key>guides</key>
      <array/>
      <key>presets</key>
      <dict/>
    </dict>
    <key>com.typemytype.robofont.background.layerStrokeColor</key>
    <array>
      <real>0.3189906881</real>
      <real>0.3189906881</real>
      <real>0.3189906881</real>
      <real>0.21</real>
    </array>
    <key>com.typemytype.robofont.binarySource</key>
    <string>/Users/jamesedmondson/Library/Fonts/QuixoPro.otf</string>
    <key>com.typemytype.robofont.compileSettings.MacRomanFirst</key>
    <false/>
    <key>com.typemytype.robofont.compileSettings.autohint</key>
    <integer>0</integer>
    <key>com.typemytype.robofont.compileSettings.checkOutlines</key>
    <integer>1</integer>
    <key>com.typemytype.robofont.compileSettings.createDummyDSIG</key>
    <true/>
    <key>com.typemytype.robofont.compileSettings.decompose</key>
    <integer>1</integer>
    <key>com.typemytype.robofont.compileSettings.generateFormat</key>
    <integer>0</integer>
    <key>com.typemytype.robofont.compileSettings.layerName</key>
    <string>foreground</string>
    <key>com.typemytype.robofont.compileSettings.path</key>
    <string>/Users/jamesedmondson/Dropbox/Ohno/Fonts/DevObviously_compressed_black.otf</string>
    <key>com.typemytype.robofont.compileSettings.releaseMode</key>
    <integer>0</integer>
    <key>com.typemytype.robofont.foreground.layerStrokeColor</key>
    <array>
      <real>0.3189906881</real>
      <real>0.3189906881</real>
      <real>0.3189906881</real>
      <real>0.26</real>
    </array>
    <key>com.typemytype.robofont.guideline.magnetic.6lmnulpnLT</key>
    <real>5.0</real>
    <key>com.typemytype.robofont.guideline.magnetic.MA9AIQ5b3O</key>
    <real>5.0</real>
    <key>com.typemytype.robofont.guideline.magnetic.agp5ZEBBfz</key>
    <real>5.0</real>
    <key>com.typemytype.robofont.guideline.magnetic.hGgdg963dV</key>
    <real>5.0</real>
    <key>com.typemytype.robofont.guideline.magnetic.oeIcVHklWS</key>
    <real>5.0</real>
    <key>com.typemytype.robofont.guideline.magnetic.tBJk483qt3</key>
    <real>5.0</real>
    <key>com.typemytype.robofont.guideline.magnetic.uDFof2HFx3</key>
    <real>5.0</real>
    <key>com.typemytype.robofont.guideline.showMeasurements.MA9AIQ5b3O</key>
    <false/>
    <key>com.typemytype.robofont.guideline.showMeasurements.agp5ZEBBfz</key>
    <false/>
    <key>com.typemytype.robofont.guideline.showMeasurements.hGgdg963dV</key>
    <false/>
    <key>com.typemytype.robofont.guideline.showMeasurements.tBJk483qt3</key>
    <false/>
    <key>com.typemytype.robofont.guideline.showMeasurements.uDFof2HFx3</key>
    <false/>
    <key>com.typemytype.robofont.italicSlantOffset</key>
    <integer>0</integer>
    <key>com.typemytype.robofont.segmentType</key>
    <string>curve</string>
    <key>com.typemytype.robofont.shouldAddPointsInSplineConversion</key>
    <integer>0</integer>
    <key>com.typesupply.MetricsMachine4.groupColors</key>
    <dict>
      <key>@MMK_L_A</key>
      <array>
        <real>1.0</real>
        <real>0.0</real>
        <real>0.0</real>
        <real>0.25</real>
      </array>
    </dict>
    <key>com.typesupply.defcon.sortDescriptor</key>
    <array>
      <dict>
        <key>ascending</key>
        <array>
          <string>.notdef</string>
          <string>A</string>
          <string>B</string>
          <string>C</string>
          <string>D</string>
          <string>E</string>
          <string>F</string>
          <string>G</string>
          <string>H</string>
          <string>I</string>
          <string>J</string>
          <string>K</string>
          <string>L</string>
          <string>M</string>
          <string>N</string>
          <string>O</string>
          <string>P</string>
          <string>Q</string>
          <string>R</string>
          <string>S</string>
          <string>T</string>
          <string>U</string>
         
Download .txt
gitextract_ga8pht78/

├── .coldtype.win.py
├── .gitignore
├── .python-version
├── CHANGELOG.md
├── LICENSE
├── README_EXTRAS.md
├── assets/
│   ├── .gitignore
│   ├── ColdtypeObviously.designspace
│   ├── ColdtypeObviously_BlackItalic.ufo/
│   │   ├── fontinfo.plist
│   │   ├── glyphs/
│   │   │   ├── C_.glif
│   │   │   ├── D_.glif
│   │   │   ├── E_.glif
│   │   │   ├── L_.glif
│   │   │   ├── O_.glif
│   │   │   ├── P_.glif
│   │   │   ├── T_.glif
│   │   │   ├── Y_.glif
│   │   │   ├── contents.plist
│   │   │   ├── layerinfo.plist
│   │   │   └── space.glif
│   │   ├── groups.plist
│   │   ├── layercontents.plist
│   │   ├── lib.plist
│   │   └── metainfo.plist
│   ├── ColdtypeObviously_CompressedBlackItalic.otf
│   ├── ColdtypeObviously_CompressedBlackItalic.ufo/
│   │   ├── fontinfo.plist
│   │   ├── glyphs/
│   │   │   ├── C_.glif
│   │   │   ├── D_.glif
│   │   │   ├── E_.glif
│   │   │   ├── L_.glif
│   │   │   ├── O_.glif
│   │   │   ├── P_.glif
│   │   │   ├── T_.glif
│   │   │   ├── Y_.glif
│   │   │   ├── contents.plist
│   │   │   ├── layerinfo.plist
│   │   │   └── space.glif
│   │   ├── groups.plist
│   │   ├── layercontents.plist
│   │   ├── lib.plist
│   │   └── metainfo.plist
│   ├── README.md
│   ├── logos.ufo/
│   │   ├── fontinfo.plist
│   │   ├── glyphs/
│   │   │   ├── contents.plist
│   │   │   ├── goodhertz_logo_2019.glif
│   │   │   └── layerinfo.plist
│   │   ├── glyphs.background/
│   │   │   ├── contents.plist
│   │   │   └── layerinfo.plist
│   │   ├── layercontents.plist
│   │   ├── lib.plist
│   │   └── metainfo.plist
│   └── noto.py
├── buildenv
├── docs/
│   ├── .gitignore
│   └── tutorials/
│       ├── midi.rst
│       └── type_design.rst
├── examples/
│   ├── .gitignore
│   ├── alphabet.py
│   ├── animations/
│   │   ├── 808.py
│   │   ├── _audio.py
│   │   ├── _drumsolo.py
│   │   ├── _simple.py
│   │   ├── access_frame.py
│   │   ├── adsr.py
│   │   ├── adsr_ascii.py
│   │   ├── alphabet.py
│   │   ├── alternate_glyphs.py
│   │   ├── ascii_choreography.py
│   │   ├── ascii_keyframe_positions.py
│   │   ├── ascii_keyframes.py
│   │   ├── ascii_keyframes2.py
│   │   ├── ascii_keyframes_entrance.py
│   │   ├── ascii_pixels.py
│   │   ├── ascii_simple.py
│   │   ├── ascii_twostep.py
│   │   ├── ascii_words.py
│   │   ├── avoidance.py
│   │   ├── banner.py
│   │   ├── bitmap_font.py
│   │   ├── blendmode.py
│   │   ├── bounce.py
│   │   ├── colrv1_foldit.py
│   │   ├── colrv1_nabla.py
│   │   ├── countdown.py
│   │   ├── custom_ease.py
│   │   ├── custom_output.py
│   │   ├── delay.py
│   │   ├── drumsolo2.py
│   │   ├── dswatch.py
│   │   ├── dvd.py
│   │   ├── ec.py
│   │   ├── flyin.py
│   │   ├── glyphwise.py
│   │   ├── glyphwise2_rtl.py
│   │   ├── glyphwise_keyframes.py
│   │   ├── glyphwise_wave.py
│   │   ├── glyphwise_wave2.py
│   │   ├── house.py
│   │   ├── interpolate_roughen.py
│   │   ├── ipa_vowels.py
│   │   ├── ives.py
│   │   ├── letters_easing.py
│   │   ├── linewise.py
│   │   ├── midi_cc.py
│   │   ├── moire1.py
│   │   ├── officehours.py
│   │   ├── original_demo.py
│   │   ├── penangle.py
│   │   ├── physics2d.py
│   │   ├── pixels.py
│   │   ├── pseudomorph.py
│   │   ├── recursive_shape.py
│   │   ├── recursive_text.py
│   │   ├── retails/
│   │   │   ├── casual.py
│   │   │   ├── chopper.py
│   │   │   ├── colorfont.py
│   │   │   ├── digestive_snake.py
│   │   │   ├── digestive_wind.py
│   │   │   ├── gridsystems.py
│   │   │   ├── hansjorg.py
│   │   │   ├── montreuil.py
│   │   │   ├── stacked_and_justified.py
│   │   │   ├── vulfbach.py
│   │   │   ├── wavinghand.py
│   │   │   └── welcome.py
│   │   ├── rgbsplit.py
│   │   ├── roundandround.py
│   │   ├── separation.py
│   │   ├── simple_recording.json
│   │   ├── simplevarfont.py
│   │   ├── slicer.py
│   │   ├── sonification.py
│   │   ├── spreadstack.py
│   │   ├── superoutline.py
│   │   ├── tapered_shadow.py
│   │   ├── texttopoints.py
│   │   ├── transparent_gifski.py
│   │   ├── transparent_understroke.py
│   │   ├── truchet.py
│   │   ├── truchet3.py
│   │   ├── twister.py
│   │   ├── ulrich_e.py
│   │   ├── versioned.py
│   │   ├── versioned_with_sidecar.py
│   │   ├── versioned_with_sidecar_versions.py
│   │   ├── vertical_scale.py
│   │   ├── warpblur.py
│   │   └── wheee.py
│   ├── apkjr.py
│   ├── apng.py
│   ├── axidraw/
│   │   ├── hatching.py
│   │   ├── nextdraw.py
│   │   ├── sheet.py
│   │   └── sheet_read.py
│   ├── bg_fn.py
│   ├── bg_img.py
│   ├── blender/
│   │   ├── arch.py
│   │   ├── array_separate.py
│   │   ├── bauhaus_book_14.py
│   │   ├── boston.py
│   │   ├── direct_objects.py
│   │   ├── displace.py
│   │   ├── dof.py
│   │   ├── dominos.py
│   │   ├── dominos2.py
│   │   ├── dominos3.py
│   │   ├── hobeauxborders.py
│   │   ├── ifg.py
│   │   ├── img.py
│   │   ├── liveimage.py
│   │   ├── noordzijcube.py
│   │   ├── parched.py
│   │   ├── physics_direct.py
│   │   ├── physics_upright.py
│   │   ├── reprojection.py
│   │   ├── rome.py
│   │   ├── rome_preview.py
│   │   ├── rotating.py
│   │   ├── sequence.py
│   │   ├── sequence_text3d.py
│   │   ├── sequence_text3d_rich.py
│   │   ├── simple_single.py
│   │   ├── simplebeat.py
│   │   ├── timedtext.py
│   │   ├── varfont.py
│   │   ├── varfont2.py
│   │   └── wip/
│   │       ├── bake.py
│   │       ├── blends/
│   │       │   └── boston.blend.json
│   │       ├── boston.py
│   │       ├── bump.py
│   │       ├── physics.py
│   │       ├── physics_semi2d.py
│   │       ├── physics_visible.py
│   │       └── timed3d.py
│   ├── blog.py
│   ├── borders.py
│   ├── chessboard.py
│   ├── circle_text.py
│   ├── colrv1_arabic.py
│   ├── cropandrepeat.py
│   ├── custom_hotkey.py
│   ├── diagram.py
│   ├── direct_uharfbuzz.py
│   ├── drawbot/
│   │   ├── both.py
│   │   ├── composition.py
│   │   ├── pdfdoc.py
│   │   ├── pixellation.py
│   │   └── varfont.py
│   ├── easing.py
│   ├── example.py
│   ├── freeze.py
│   ├── github_social.py
│   ├── grid_shapes.py
│   ├── image_in_path.py
│   ├── image_rotate.py
│   ├── image_rotated_quality.py
│   ├── instancer.py
│   ├── interpolated_spiral.py
│   ├── interrupted_lines.py
│   ├── layers.py
│   ├── letter_lighttrail.py
│   ├── linealigning.py
│   ├── linebreaking.py
│   ├── logo.py
│   ├── logo_state.json
│   ├── metaprogramming.py
│   ├── mirror.py
│   ├── misc/
│   │   └── no_command_line.py
│   ├── opentypesvgimagefont.py
│   ├── potracer.py
│   ├── printer.py
│   ├── random_shape.py
│   ├── restmake.py
│   ├── richtext.py
│   ├── rounded_corners.py
│   ├── scaffold.py
│   ├── scripts/
│   │   ├── player.py
│   │   ├── prores.py
│   │   ├── prores_to_frames.py
│   │   └── symbolfinder.py
│   ├── shapes.py
│   ├── simple.py
│   ├── simplest.py
│   ├── sites/
│   │   ├── .gitignore
│   │   ├── blog.coldtype.xyz/
│   │   │   ├── .gitignore
│   │   │   ├── assets/
│   │   │   │   └── style.css
│   │   │   ├── blog.coldtype.xyz.py
│   │   │   ├── pages/
│   │   │   │   └── posts/
│   │   │   │       ├── a-blog.ipynb
│   │   │   │       ├── transparent-unclickable.ipynb
│   │   │   │       └── truchet-experiments.ipynb
│   │   │   └── templates/
│   │   │       ├── _footer.j2
│   │   │       ├── _header.j2
│   │   │       ├── _post.j2
│   │   │       └── index.j2
│   │   ├── coldtype.goodhertz.com/
│   │   │   ├── assets/
│   │   │   │   └── style.css
│   │   │   ├── coldtype.goodhertz.com.py
│   │   │   ├── pages/
│   │   │   │   ├── about.ipynb
│   │   │   │   ├── cheatsheets/
│   │   │   │   │   ├── easing.md
│   │   │   │   │   ├── oneletter.md
│   │   │   │   │   ├── rectangles.ipynb
│   │   │   │   │   ├── text.ipynb
│   │   │   │   │   └── viewer.md
│   │   │   │   ├── classes_functions.ipynb
│   │   │   │   ├── install.ipynb
│   │   │   │   ├── introduction.ipynb
│   │   │   │   ├── overview.ipynb
│   │   │   │   └── tutorials/
│   │   │   │       ├── animation.ipynb
│   │   │   │       ├── blender.ipynb
│   │   │   │       ├── drawbot.ipynb
│   │   │   │       ├── geometry.ipynb
│   │   │   │       ├── shapes.ipynb
│   │   │   │       └── text.ipynb
│   │   │   └── templates/
│   │   │       ├── _docs.j2
│   │   │       ├── _footer.j2
│   │   │       ├── _header.j2
│   │   │       ├── _page.j2
│   │   │       ├── index.j2
│   │   │       └── partials/
│   │   │           └── sidebar.j2
│   │   ├── coldtype.p5js/
│   │   │   ├── assets/
│   │   │   │   ├── hb.wasm
│   │   │   │   ├── hbjs.js
│   │   │   │   └── script.js
│   │   │   └── coldtype.p5js.py
│   │   ├── coldtype.xyz/
│   │   │   └── coldtype.xyz.py
│   │   ├── portfolio/
│   │   │   ├── assets/
│   │   │   │   └── style.css
│   │   │   ├── build.py
│   │   │   ├── pages/
│   │   │   │   ├── about.md
│   │   │   │   └── posts/
│   │   │   │       └── example.md
│   │   │   └── templates/
│   │   │       ├── _footer.j2
│   │   │       ├── _header.j2
│   │   │       ├── _page.j2
│   │   │       ├── _post.j2
│   │   │       └── index.j2
│   │   └── skeleton/
│   │       └── skeleton.py
│   ├── skia_direct.py
│   ├── skia_paragraph.py
│   ├── skia_shader.py
│   ├── skia_shader.sksl
│   ├── skia_shader2.py
│   ├── skia_shader_clouds.sksl
│   ├── snakes.py
│   ├── spacing_clusters.py
│   ├── src_macro.py
│   ├── stacking.py
│   ├── svg_viewer.py
│   ├── transparency.py
│   ├── transparent_understroke.py
│   ├── ufo.py
│   ├── vector_pixels.py
│   └── wip/
│       ├── capture.py
│       ├── displace_map.py
│       ├── drawbot_image.py
│       ├── google_font.py
│       ├── toggle.py
│       └── ui.py
├── packages/
│   ├── coldtype/
│   │   ├── README.md
│   │   └── pyproject.toml
│   └── coldtype-core/
│       ├── MANIFEST.in
│       ├── README.md
│       ├── pyproject.toml
│       └── src/
│           └── coldtype/
│               ├── __init__.py
│               ├── __main__.py
│               ├── assets/
│               │   └── glyphNamesToUnicode.txt
│               ├── axidraw.py
│               ├── beziers.py
│               ├── blender/
│               │   ├── __init__.py
│               │   ├── fluent.py
│               │   ├── livepreview.py
│               │   ├── panel3d.py
│               │   ├── render.py
│               │   ├── timedtext.py
│               │   ├── util.py
│               │   └── watch.py
│               ├── capture/
│               │   └── __init__.py
│               ├── color/
│               │   ├── __init__.py
│               │   └── html.py
│               ├── css.py
│               ├── demo/
│               │   ├── blank.py
│               │   ├── boiler.py
│               │   ├── boiler_renderable.py
│               │   ├── demo.py
│               │   ├── demoblender.py
│               │   ├── docstrings.py
│               │   ├── gifski.py
│               │   └── glfw34.py
│               ├── drawbot.py
│               ├── fx/
│               │   ├── chainable.py
│               │   ├── diagram.py
│               │   ├── motion.py
│               │   ├── shapes.py
│               │   ├── skia.py
│               │   ├── warping.py
│               │   └── xray.py
│               ├── geometry/
│               │   ├── __init__.py
│               │   ├── atom.py
│               │   ├── curve.py
│               │   ├── edge.py
│               │   ├── geometrical.py
│               │   ├── line.py
│               │   ├── point.py
│               │   ├── primitives.py
│               │   └── rect.py
│               ├── grid/
│               │   └── __init__.py
│               ├── helpers.py
│               ├── img/
│               │   ├── abstract.py
│               │   ├── blendmode.py
│               │   ├── drawbotimage.py
│               │   ├── skiaimage.py
│               │   └── skiasvg.py
│               ├── interpolation/
│               │   └── __init__.py
│               ├── midi/
│               │   └── controllers.py
│               ├── notebook/
│               │   ├── __init__.py
│               │   └── parser.py
│               ├── osutil.py
│               ├── pens/
│               │   ├── axidrawpen.py
│               │   ├── blenderpen.py
│               │   ├── drawablepen.py
│               │   ├── drawbotpen.py
│               │   ├── jsonpen.py
│               │   ├── misc.py
│               │   ├── outlinepen.py
│               │   ├── rendererdrawbotpen.py
│               │   ├── reportlabpen.py
│               │   ├── skiapathpen.py
│               │   ├── skiapen.py
│               │   ├── svgpen.py
│               │   └── translationpen.py
│               ├── physics/
│               │   └── pymunk.py
│               ├── random.py
│               ├── raster.py
│               ├── renderable/
│               │   ├── __init__.py
│               │   ├── animation.py
│               │   ├── renderable.py
│               │   ├── tools.py
│               │   └── ui.py
│               ├── renderer/
│               │   ├── __init__.py
│               │   ├── config.py
│               │   ├── keyboard.py
│               │   ├── reader.py
│               │   ├── state.py
│               │   ├── ui.py
│               │   ├── utils.py
│               │   └── winman/
│               │       ├── __init__.py
│               │       ├── audio.py
│               │       ├── blender.py
│               │       ├── glfwskia.py
│               │       ├── midi.py
│               │       └── passthrough.py
│               ├── runon/
│               │   ├── __init__.py
│               │   ├── _path.py
│               │   ├── mixins/
│               │   │   ├── DrawingMixin.py
│               │   │   ├── FXMixin.py
│               │   │   ├── GeometryMixin.py
│               │   │   ├── GlyphMixin.py
│               │   │   ├── LayoutMixin.py
│               │   │   ├── PathopsMixin.py
│               │   │   ├── SegmentingMixin.py
│               │   │   ├── SerializationMixin.py
│               │   │   ├── SonificationMixin.py
│               │   │   └── StylingMixin.py
│               │   ├── path.py
│               │   ├── runon.py
│               │   └── scaffold.py
│               ├── skiashim.py
│               ├── test.py
│               ├── text/
│               │   ├── __init__.py
│               │   ├── colr/
│               │   │   ├── brsurface.py
│               │   │   └── skia.py
│               │   ├── composer.py
│               │   ├── font.py
│               │   ├── reader.py
│               │   ├── richtext.py
│               │   └── shaper.py
│               ├── timing/
│               │   ├── __init__.py
│               │   ├── audio.py
│               │   ├── clip.py
│               │   ├── easing.py
│               │   ├── midi.py
│               │   ├── nle/
│               │   │   ├── .gitignore
│               │   │   ├── ableton.py
│               │   │   ├── ascii.py
│               │   │   └── premiere.py
│               │   ├── sequence.py
│               │   ├── timeable.py
│               │   ├── timeline.py
│               │   └── viewer.py
│               ├── tool.py
│               ├── tools/
│               │   ├── chars.py
│               │   ├── dsview.py
│               │   ├── find.py
│               │   ├── findappicon.py
│               │   ├── glyphloop.py
│               │   ├── glyphs.py
│               │   ├── instances.py
│               │   ├── midi.py
│               │   ├── midicc.py
│               │   ├── vf.py
│               │   └── viewseq.py
│               ├── warping.py
│               └── web/
│                   ├── fonts.py
│                   ├── page.py
│                   ├── server.py
│                   ├── site.py
│                   └── templates/
│                       ├── notebook.j2
│                       └── page.j2
├── pyproject.toml
├── release.sh
├── run_tests.sh
├── scripts/
│   ├── inline_mixins.py
│   ├── keyboard_layout_converter.py
│   └── robofont_coldtype.py
├── test/
│   ├── drawbot/
│   │   ├── db_cli.py
│   │   ├── direct_import.py
│   │   └── style_test.py
│   ├── source_file.py
│   ├── source_file_adjacent.py
│   ├── source_file_with_config.py
│   ├── test_geometry.py
│   ├── test_helpers.py
│   ├── test_p.py
│   ├── test_pens.py
│   ├── test_pens_rendered.py
│   ├── test_runon.py
│   ├── test_syntax_mods.py
│   ├── test_time.py
│   └── visuals/
│       ├── .gitignore
│       ├── test_color_palette.py
│       ├── test_gs.py
│       ├── test_image_font.py
│       ├── test_midi_ctrl.py
│       └── test_reader_mod.py
├── tests/
│   ├── _img_only.py
│   ├── test_color.py
│   ├── test_drawbot.py
│   ├── test_fonts.py
│   ├── test_fx.py
│   ├── test_glyphwise.py
│   ├── test_i18n.py
│   ├── test_pens.py
│   ├── test_reader.py
│   ├── test_rect.py
│   ├── test_richtext.py
│   ├── test_scaffold.py
│   ├── test_src_macro.py
│   ├── test_text.py
│   ├── test_versions.py
│   └── test_versions_versions.py
└── upload_docs.sh
Download .txt
Showing preview only (203K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2854 symbols across 374 files)

FILE: examples/alphabet.py
  function alphabet (line 6) | def alphabet(r):

FILE: examples/animations/808.py
  function drummachine (line 44) | def drummachine(f):

FILE: examples/animations/_audio.py
  function render (line 13) | def render(f):

FILE: examples/animations/_drumsolo.py
  function drumsolo (line 10) | def drumsolo(f):

FILE: examples/animations/_simple.py
  function simple (line 4) | def simple(f):

FILE: examples/animations/access_frame.py
  function numbers (line 5) | def numbers(f:Frame):
  function numbers_from_rendered (line 26) | def numbers_from_rendered(f:Frame):

FILE: examples/animations/adsr.py
  function adsr (line 14) | def adsr(f):

FILE: examples/animations/adsr_ascii.py
  function choreography (line 9) | def choreography(f):

FILE: examples/animations/alphabet.py
  function render (line 6) | def render(f):

FILE: examples/animations/alternate_glyphs.py
  function scratch (line 10) | def scratch(f):

FILE: examples/animations/ascii_choreography.py
  function choreography (line 14) | def choreography(f):

FILE: examples/animations/ascii_keyframe_positions.py
  function scratch (line 27) | def scratch(f):

FILE: examples/animations/ascii_keyframes.py
  function css1 (line 19) | def css1(f):

FILE: examples/animations/ascii_keyframes2.py
  function kf (line 27) | def kf(f):

FILE: examples/animations/ascii_keyframes_entrance.py
  function keyframes (line 12) | def keyframes(f):

FILE: examples/animations/ascii_pixels.py
  function pixellation (line 10) | def pixellation(f):

FILE: examples/animations/ascii_simple.py
  function ascii (line 13) | def ascii(f):

FILE: examples/animations/ascii_twostep.py
  function twostep (line 13) | def twostep(f):

FILE: examples/animations/ascii_words.py
  function styler (line 11) | def styler(c):
  function timedWords (line 18) | def timedWords(f):

FILE: examples/animations/avoidance.py
  function normalized (line 15) | def normalized(a, axis=-1, order=2):
  function displacer (line 20) | def displacer(r, c):
  function avoid_ui (line 40) | def avoid_ui(u):
  function avoid_anim (line 44) | def avoid_anim(f):

FILE: examples/animations/banner.py
  function render (line 29) | def render(f):

FILE: examples/animations/bitmap_font.py
  function bitmap_font (line 8) | def bitmap_font(f):

FILE: examples/animations/blendmode.py
  function plus (line 5) | def plus(f):

FILE: examples/animations/bounce.py
  function scratch (line 4) | def scratch(f):

FILE: examples/animations/colrv1_foldit.py
  function test1 (line 9) | def test1(f):

FILE: examples/animations/colrv1_nabla.py
  function nabla1 (line 4) | def nabla1(f):

FILE: examples/animations/countdown.py
  function countdown (line 18) | def countdown(f:Frame):

FILE: examples/animations/custom_ease.py
  function easer (line 5) | def easer(f):

FILE: examples/animations/custom_output.py
  class custom_output_animation (line 3) | class custom_output_animation(animation):
    method pass_path (line 4) | def pass_path(self, index=0):
  function wght (line 8) | def wght(f):

FILE: examples/animations/delay.py
  function recur (line 6) | def recur(f, depth=0):

FILE: examples/animations/drumsolo2.py
  function drumloop (line 15) | def drumloop(f):

FILE: examples/animations/dswatch.py
  function dswatch (line 12) | def dswatch(f):

FILE: examples/animations/dvd.py
  function scratch (line 17) | def scratch(f, m):

FILE: examples/animations/ec.py
  function scratch (line 10) | def scratch(f):

FILE: examples/animations/flyin.py
  function scratch (line 9) | def scratch(f):

FILE: examples/animations/glyphwise.py
  function glyphwise (line 7) | def glyphwise(f):

FILE: examples/animations/glyphwise2_rtl.py
  function kashida (line 7) | def kashida(f:Frame):

FILE: examples/animations/glyphwise_keyframes.py
  function cheee_wild (line 17) | def cheee_wild(f):

FILE: examples/animations/glyphwise_wave.py
  function cilati_wave (line 6) | def cilati_wave(f:Frame):

FILE: examples/animations/glyphwise_wave2.py
  function fatface_wave (line 4) | def fatface_wave(f):

FILE: examples/animations/house.py
  function render (line 11) | def render(f):

FILE: examples/animations/interpolate_roughen.py
  function cloud (line 9) | def cloud(f):

FILE: examples/animations/ipa_vowels.py
  function process_wikipedia_audio (line 30) | def process_wikipedia_audio():
  function xbar (line 51) | def xbar(t):
  function v (line 60) | def v(c, line, t):
  function vs (line 72) | def vs(cs, line, ts=(0, 0.5, 1.0)):
  function chart (line 89) | def chart(f:Frame):

FILE: examples/animations/ives.py
  function grid_ƒVERSION (line 43) | def grid_ƒVERSION(f):

FILE: examples/animations/letters_easing.py
  function letters_easing (line 19) | def letters_easing(f):

FILE: examples/animations/linewise.py
  function scratch1 (line 6) | def scratch1(f):
  function scratch2 (line 15) | def scratch2(f):

FILE: examples/animations/midi_cc.py
  function cc (line 9) | def cc(f):

FILE: examples/animations/moire1.py
  function patternmaker (line 7) | def patternmaker():
  function postprocess (line 14) | def postprocess(p):
  function scratch (line 20) | def scratch(f):

FILE: examples/animations/officehours.py
  function officehours (line 13) | def officehours(f):

FILE: examples/animations/original_demo.py
  function render (line 23) | def render(f):

FILE: examples/animations/penangle.py
  function angler (line 8) | def angler(e):
  function hatch (line 11) | def hatch(pt, a=-45, w=100, h=5):
  function scratch (line 21) | def scratch(f):

FILE: examples/animations/physics2d.py
  function scratch (line 65) | def scratch(f):

FILE: examples/animations/pixels.py
  function pixels (line 13) | def pixels(f):

FILE: examples/animations/pseudomorph.py
  function pseudomorph (line 6) | def pseudomorph(f):

FILE: examples/animations/recursive_shape.py
  function recursive_composite (line 9) | def recursive_composite(f):

FILE: examples/animations/recursive_text.py
  function recursive (line 7) | def recursive(f:Frame):

FILE: examples/animations/retails/casual.py
  function casual1 (line 16) | def casual1(f):

FILE: examples/animations/retails/chopper.py
  function Chopper (line 6) | def Chopper(**kwargs):
  function chopper (line 21) | def chopper(f):

FILE: examples/animations/retails/colorfont.py
  function spin (line 12) | def spin(fa, g):
  function pappardelle (line 20) | def pappardelle(f):

FILE: examples/animations/retails/digestive_snake.py
  function ds (line 19) | def ds(e1):
  function render_snake (line 28) | def render_snake(f):
  function render (line 41) | def render(f):

FILE: examples/animations/retails/digestive_wind.py
  function style_a (line 11) | def style_a(f, hit):
  function render (line 30) | def render(f):

FILE: examples/animations/retails/gridsystems.py
  function cover (line 19) | def cover(r):

FILE: examples/animations/retails/hansjorg.py
  function scrambled (line 12) | def scrambled(seed, split):
  function hj (line 21) | def hj(f:Frame):
  function hj_resize (line 60) | def hj_resize(f):

FILE: examples/animations/retails/montreuil.py
  function generate_matrix_sequence (line 29) | def generate_matrix_sequence(changes_per_step):
  function scratch (line 77) | def scratch(f:Frame):

FILE: examples/animations/retails/stacked_and_justified.py
  function render (line 7) | def render(f):

FILE: examples/animations/retails/vulfbach.py
  function pos (line 21) | def pos(x, y):
  function build_line (line 25) | def build_line():
  function render (line 54) | def render(f):

FILE: examples/animations/retails/wavinghand.py
  function peace (line 4) | def peace(f):

FILE: examples/animations/retails/welcome.py
  function welcome (line 4) | def welcome(f):

FILE: examples/animations/rgbsplit.py
  function rgbsplit (line 5) | def rgbsplit(f):

FILE: examples/animations/roundandround.py
  function easer (line 24) | def easer(r):
  function rounder (line 29) | def rounder(f):

FILE: examples/animations/separation.py
  function separation (line 6) | def separation(f):

FILE: examples/animations/simplevarfont.py
  function unfold (line 5) | def unfold(f):

FILE: examples/animations/slicer.py
  function slicer (line 7) | def slicer(f):

FILE: examples/animations/sonification.py
  class sonification (line 22) | class sonification(animation):
    method __init__ (line 23) | def __init__(self, timeline, filename, samples_per_frame=1, **kwargs):
    method build_wav (line 28) | def build_wav(self):
  function letter (line 64) | def letter(f):
  function build (line 77) | def build():

FILE: examples/animations/spreadstack.py
  function scratch (line 4) | def scratch(f):

FILE: examples/animations/superoutline.py
  function outline (line 9) | def outline(f):

FILE: examples/animations/tapered_shadow.py
  function taper (line 11) | def taper(f):

FILE: examples/animations/texttopoints.py
  function texttopoints (line 7) | def texttopoints(f):

FILE: examples/animations/transparent_gifski.py
  function scratch (line 5) | def scratch(f):

FILE: examples/animations/transparent_understroke.py
  function cut (line 6) | def cut(line, i, p):
  function understroke_cut (line 22) | def understroke_cut(f):

FILE: examples/animations/truchet.py
  function truchet1 (line 21) | def truchet1(f):
  function release (line 38) | def release(passes):

FILE: examples/animations/truchet3.py
  function setup (line 39) | def setup(bw:BpyWorld):
  function truchet1 (line 43) | def truchet1(f):

FILE: examples/animations/twister.py
  function pair (line 4) | def pair(tx, f, x):
  function twister (line 20) | def twister(f:Frame):

FILE: examples/animations/ulrich_e.py
  function manye_live (line 20) | def manye_live(f):
  function manye_live2 (line 32) | def manye_live2(f):

FILE: examples/animations/versioned.py
  function versioned_ƒVERSION (line 9) | def versioned_ƒVERSION(f):

FILE: examples/animations/versioned_with_sidecar.py
  function scratch_ƒVERSION (line 12) | def scratch_ƒVERSION(f):

FILE: examples/animations/vertical_scale.py
  function scratch (line 4) | def scratch(f):

FILE: examples/animations/warpblur.py
  function warp_blur (line 21) | def warp_blur(f):

FILE: examples/animations/wheee.py
  function wheee (line 6) | def wheee(f):

FILE: examples/apkjr.py
  function options (line 7) | def options(f):
  function three (line 53) | def three(f):

FILE: examples/apng.py
  function release_apng (line 4) | def release_apng(a:animation):
  function apng (line 13) | def apng(f:Frame):

FILE: examples/axidraw/hatching.py
  function test_draw (line 8) | def test_draw(r):

FILE: examples/axidraw/nextdraw.py
  class NextDrawPen (line 21) | class NextDrawPen(BasePen):
    method __init__ (line 22) | def __init__(self, dat, page, move_delay=0):
    method _moveTo (line 31) | def _moveTo(self, p):
    method _lineTo (line 37) | def _lineTo(self, p):
    method _curveToOne (line 41) | def _curveToOne(self, p1, p2, p3):
    method _qCurveToOne (line 44) | def _qCurveToOne(self, p1, p2):
    method _closePath (line 47) | def _closePath(self):
    method draw (line 52) | def draw(self,
  function aximeta (line 110) | def aximeta(fn):
  function dip_pen (line 115) | def dip_pen(seconds=1, location=(0, 0)):
  class NextDrawChainable (line 125) | class NextDrawChainable():
    method __init__ (line 126) | def __init__(self, ad):
    method moveto (line 129) | def moveto(self, x, y):
    method penup (line 133) | def penup(self):
    method pendown (line 137) | def pendown(self):
    method sleep (line 141) | def sleep(self, t):
  class nextdrawing (line 146) | class nextdrawing(renderable):
    method __init__ (line 147) | def __init__(self,
    method runpost (line 160) | def runpost(self, result, render_pass, renderer_state, config):
    method draw (line 179) | def draw(self,
  function plot (line 257) | def plot(r:Rect):

FILE: examples/axidraw/sheet.py
  function sheet_animation (line 5) | def sheet_animation(f):
  function sheet (line 11) | def sheet(r):

FILE: examples/axidraw/sheet_read.py
  function sheet_read (line 19) | def sheet_read(f):

FILE: examples/bg_fn.py
  function bg_maker (line 6) | def bg_maker(f):
  function bg_user (line 14) | def bg_user(f):

FILE: examples/bg_img.py
  function bg (line 7) | def bg(r):
  function bg_user (line 16) | def bg_user(r):

FILE: examples/blender/arch.py
  function setup (line 12) | def setup(bpw:BpyWorld):
  function arch (line 30) | def arch(r):

FILE: examples/blender/array_separate.py
  function setup (line 5) | def setup(bpw:BpyWorld):

FILE: examples/blender/bauhaus_book_14.py
  function cover (line 14) | def cover(r):
  function setup (line 64) | def setup(blw:BpyWorld):

FILE: examples/blender/boston.py
  function lyrics (line 25) | def lyrics(f:Frame):

FILE: examples/blender/direct_objects.py
  function setup (line 12) | def setup(blw:BpyWorld):

FILE: examples/blender/displace.py
  function setup (line 14) | def setup(bw:BpyWorld):
  function animator (line 45) | def animator(f):
  function post_setup (line 52) | def post_setup(bw:BpyWorld):

FILE: examples/blender/dof.py
  function var3d2 (line 14) | def var3d2(f):

FILE: examples/blender/dominos.py
  function setup (line 10) | def setup(bpw:BpyWorld):

FILE: examples/blender/dominos2.py
  function setup (line 15) | def setup(bpw:BpyWorld):

FILE: examples/blender/dominos3.py
  function setup (line 17) | def setup(bpw:BpyWorld):

FILE: examples/blender/hobeauxborders.py
  function hobeauxBorder (line 19) | def hobeauxBorder(r, style=0, fs=200):
  function setup (line 49) | def setup(bpw:BpyWorld):
  function b1 (line 53) | def b1(f):

FILE: examples/blender/ifg.py
  function lyrics (line 20) | def lyrics(f:Frame):

FILE: examples/blender/img.py
  function show_img_direct (line 21) | def show_img_direct(bpw:BpyWorld):
  function show_img (line 32) | def show_img(r):

FILE: examples/blender/liveimage.py
  function embedded_image (line 12) | def embedded_image(r):
  function setup (line 23) | def setup(bpw:BpyWorld):
  function anim1 (line 28) | def anim1(f):

FILE: examples/blender/noordzijcube.py
  function setup (line 16) | def setup(bpw:BpyWorld):

FILE: examples/blender/parched.py
  function varfont_animation_overlay (line 5) | def varfont_animation_overlay(f):
  function varfont_animation (line 23) | def varfont_animation(f):
  function setup (line 40) | def setup(blw:BpyWorld):

FILE: examples/blender/physics_direct.py
  function setup (line 12) | def setup(bpw:BpyWorld):

FILE: examples/blender/physics_upright.py
  function setup (line 11) | def setup(bpw:BpyWorld):

FILE: examples/blender/reprojection.py
  function varfont_animation (line 13) | def varfont_animation(f):
  function setup (line 26) | def setup(blw:BpyWorld):

FILE: examples/blender/rome.py
  function lyrics (line 26) | def lyrics(f:Frame):

FILE: examples/blender/rome_preview.py
  function lyrics (line 19) | def lyrics(f:Frame):

FILE: examples/blender/rotating.py
  function setup (line 6) | def setup(bw:BpyWorld):
  function varfont (line 12) | def varfont(f):
  function manye_live (line 28) | def manye_live(f):

FILE: examples/blender/sequence.py
  function sequence (line 13) | def sequence(f:Frame):

FILE: examples/blender/sequence_text3d.py
  function prerun (line 7) | def prerun(bw):
  function sequence (line 11) | def sequence(f:Frame):

FILE: examples/blender/sequence_text3d_rich.py
  function prerun (line 8) | def prerun(bw):
  function sequence (line 12) | def sequence(f:Frame):

FILE: examples/blender/simple_single.py
  function scratch (line 5) | def scratch(f):

FILE: examples/blender/simplebeat.py
  function prerun (line 16) | def prerun(bw):
  function simplebeat2 (line 20) | def simplebeat2(f):

FILE: examples/blender/timedtext.py
  function timedtext (line 27) | def timedtext(f:Frame):

FILE: examples/blender/varfont.py
  function prerun (line 5) | def prerun(bw):
  function varfont (line 9) | def varfont(f):

FILE: examples/blender/varfont2.py
  function prerun (line 5) | def prerun(bw:BpyWorld):
  function varfont2 (line 9) | def varfont2(f):

FILE: examples/blender/wip/bake.py
  function setup (line 5) | def setup(bw:BpyWorld):
  function baketest2 (line 11) | def baketest2(f):

FILE: examples/blender/wip/boston.py
  function lyrics (line 29) | def lyrics(f:Frame):

FILE: examples/blender/wip/bump.py
  function graphic (line 8) | def graphic(r):
  function setup (line 14) | def setup(blw:BpyWorld):

FILE: examples/blender/wip/physics.py
  function setup (line 7) | def setup(bpw:BpyWorld):
  function falling (line 16) | def falling(r):

FILE: examples/blender/wip/physics_semi2d.py
  function setup (line 7) | def setup(bw:BpyWorld):
  function justi (line 13) | def justi(r):

FILE: examples/blender/wip/physics_visible.py
  function build_lockup (line 32) | def build_lockup(wght):
  function before_bake (line 41) | def before_bake(bw):
  function physics_basis (line 48) | def physics_basis(r):
  function physics_upright_curves (line 76) | def physics_upright_curves(f):

FILE: examples/blender/wip/timed3d.py
  function timed (line 11) | def timed(f:Frame):

FILE: examples/blog.py
  function nameplate (line 7) | def nameplate(r, fontSize=500, wdth=0.25, rotate=0):

FILE: examples/borders.py
  function borders (line 4) | def borders(r):

FILE: examples/chessboard.py
  function board (line 9) | def board(r):

FILE: examples/circle_text.py
  function circles (line 4) | def circles(r):

FILE: examples/colrv1_arabic.py
  function arefRuqaa (line 9) | def arefRuqaa(r):
  function reemKufi (line 16) | def reemKufi(r):

FILE: examples/cropandrepeat.py
  function scratch (line 5) | def scratch(f):

FILE: examples/custom_hotkey.py
  function scratch (line 4) | def scratch(r):
  function custom_hotkey (line 7) | def custom_hotkey(key, renderer):

FILE: examples/diagram.py
  function d1 (line 7) | def d1(r):

FILE: examples/direct_uharfbuzz.py
  function direct (line 10) | def direct(r:Rect):

FILE: examples/drawbot/both.py
  function bounce (line 13) | def bounce(f):

FILE: examples/drawbot/composition.py
  function composition (line 9) | def composition(r):
  function release (line 50) | def release(_):

FILE: examples/drawbot/pdfdoc.py
  function multipage_doc (line 7) | def multipage_doc(f):
  function release (line 34) | def release(_):

FILE: examples/drawbot/pixellation.py
  function db_script_test (line 5) | def db_script_test(f):

FILE: examples/drawbot/varfont.py
  function db_varfont (line 10) | def db_varfont(f):

FILE: examples/easing.py
  function easing (line 4) | def easing(r):

FILE: examples/example.py
  function coldtype (line 4) | def coldtype(r):

FILE: examples/freeze.py
  function scratch (line 20) | def scratch(r):

FILE: examples/github_social.py
  function github_social (line 5) | def github_social(r):

FILE: examples/grid_shapes.py
  function shapes (line 4) | def shapes(r:Rect):

FILE: examples/image_in_path.py
  function image (line 5) | def image(r):
  function in_path (line 18) | def in_path(r):

FILE: examples/image_rotate.py
  function test_image (line 6) | def test_image(r):
  function rotate (line 10) | def rotate(f):
  function resize (line 21) | def resize(f):

FILE: examples/image_rotated_quality.py
  function scratch (line 5) | def scratch(f):

FILE: examples/instancer.py
  function viewer (line 6) | def viewer(r):

FILE: examples/interpolated_spiral.py
  function spiral (line 6) | def spiral(f):

FILE: examples/interrupted_lines.py
  function interrupt_lines (line 3) | def interrupt_lines(lines:list[Line], rects:list[Rect]):
  function lines (line 21) | def lines(f:Frame):

FILE: examples/layers.py
  function layer1 (line 4) | def layer1(r):
  function layer2 (line 8) | def layer2(r):

FILE: examples/letter_lighttrail.py
  function scribble_random (line 13) | def scribble_random(f):

FILE: examples/linealigning.py
  function aligns (line 4) | def aligns(r):

FILE: examples/linebreaking.py
  function scratch (line 6) | def scratch(r):
  function heterogenous (line 16) | def heterogenous(r):

FILE: examples/logo.py
  function logo (line 9) | def logo(f):

FILE: examples/metaprogramming.py
  function code1 (line 14) | def code1(f):

FILE: examples/mirror.py
  function mirror (line 4) | def mirror(r):

FILE: examples/opentypesvgimagefont.py
  function texter (line 9) | def texter(r):

FILE: examples/potracer.py
  function potraced (line 5) | def potraced(r):

FILE: examples/printer.py
  function printed (line 11) | def printed(r):
  function release (line 16) | def release(_):

FILE: examples/random_shape.py
  function scribble (line 5) | def scribble(f):

FILE: examples/restmake.py
  function restmake (line 11) | def restmake(r):

FILE: examples/richtext.py
  function styler (line 4) | def styler(txt, styles):
  function highlight (line 12) | def highlight(r):
  function plainish (line 29) | def plainish(r):
  function key_lookup_style (line 43) | def key_lookup_style(r):

FILE: examples/rounded_corners.py
  function rounder (line 10) | def rounder(f):

FILE: examples/scaffold.py
  function boxes (line 4) | def boxes(r):
  function boxes2 (line 28) | def boxes2(r):
  function boxes3 (line 36) | def boxes3(r):
  function boxes4 (line 45) | def boxes4(r):

FILE: examples/scripts/player.py
  function sorted_images (line 4) | def sorted_images(folder, suffix="*.jpg"):
  function viewer (line 17) | def viewer(_): return None
  function release (line 19) | def release(_):

FILE: examples/scripts/prores.py
  function sorted_images (line 4) | def sorted_images(folder, suffix="*.jpg"):
  function viewer_hires (line 27) | def viewer_hires(_): return None
  function viewer (line 30) | def viewer(_): return None
  function release (line 32) | def release(_):

FILE: examples/scripts/prores_to_frames.py
  function prores (line 19) | def prores(f):

FILE: examples/scripts/symbolfinder.py
  function finder (line 11) | def finder(f):
  function didPreview (line 36) | def didPreview():

FILE: examples/shapes.py
  function shapes (line 14) | def shapes(r):

FILE: examples/simple.py
  function render (line 4) | def render(r):

FILE: examples/simplest.py
  function render (line 4) | def render(r):

FILE: examples/sites/blog.coldtype.xyz/blog.coldtype.xyz.py
  function public_posts (line 4) | def public_posts(site):
  function website (line 22) | def website(_):
  function release (line 25) | def release(_):

FILE: examples/sites/coldtype.goodhertz.com/coldtype.goodhertz.com.py
  function classes_functions (line 39) | def classes_functions(s:site):
  function section (line 94) | def section(section, site):
  function website (line 124) | def website(_):
  function release (line 127) | def release(_):

FILE: examples/sites/coldtype.p5js/assets/hbjs.js
  function hbjs (line 1) | function hbjs(instance) {

FILE: examples/sites/coldtype.p5js/assets/script.js
  function pathToRelative (line 6) | function pathToRelative(pathArray) {
  class HBGlyph (line 23) | class HBGlyph {
    method constructor (line 24) | constructor(x, y, path) {
  class HBFont (line 31) | class HBFont {
    method constructor (line 32) | constructor(fontURL, fontBlob) {
    method loadFont (line 37) | static async loadFont(_fontURL) {
    method getGlyphs (line 51) | getGlyphs(text, size, variations={}) {
  function updateResult (line 171) | function updateResult() {
  function preload (line 176) | async function preload() {
  function setup (line 196) | function setup() {
  function draw (line 214) | function draw() {
  function autoAnimate (line 280) | function autoAnimate() {
  function windowResized (line 287) | function windowResized() {

FILE: examples/sites/coldtype.p5js/coldtype.p5js.py
  function website (line 49) | def website(_):
  function release (line 52) | def release(_):

FILE: examples/sites/coldtype.xyz/coldtype.xyz.py
  function favicon (line 112) | def favicon(r):
  function website (line 121) | def website(_):
  function logo (line 125) | def logo(r):
  function release (line 130) | def release(_):

FILE: examples/sites/portfolio/build.py
  function public_posts (line 4) | def public_posts(site):
  function pagemod (line 12) | def pagemod(p):
  function portfolio (line 24) | def portfolio(_):
  function test (line 28) | def test(r):
  function testb (line 32) | def testb(r):

FILE: examples/sites/skeleton/skeleton.py
  function website (line 47) | def website(_):
  function release (line 50) | def release(_):

FILE: examples/skia_direct.py
  function direct_to_canvas (line 4) | def direct_to_canvas(r, canvas):

FILE: examples/skia_paragraph.py
  function paragraph (line 9) | def paragraph(f):

FILE: examples/skia_shader.py
  function warper2 (line 8) | def warper2(f):

FILE: examples/skia_shader2.py
  function warper2 (line 8) | def warper2(f):

FILE: examples/snakes.py
  function build_snake (line 11) | def build_snake(seed):
  function snakes (line 31) | def snakes(f):

FILE: examples/spacing_clusters.py
  function spaced_clusters (line 8) | def spaced_clusters(r:Rect):

FILE: examples/src_macro.py
  function magic_trick (line 7) | def magic_trick(r):
  function setup (line 16) | def setup(bpw:BpyWorld):

FILE: examples/stacking.py
  function stacking (line 18) | def stacking(r):

FILE: examples/svg_viewer.py
  function scratch (line 36) | def scratch(r):

FILE: examples/transparency.py
  function blocks (line 6) | def blocks(r):
  function appicon (line 11) | def appicon(r):
  function release (line 15) | def release(_):

FILE: examples/transparent_understroke.py
  function understroke_cut (line 5) | def understroke_cut(r):

FILE: examples/ufo.py
  function scratch (line 6) | def scratch(r):

FILE: examples/vector_pixels.py
  function scratch (line 5) | def scratch(r:Rect):

FILE: examples/wip/capture.py
  function capture_with_midi (line 11) | def capture_with_midi(f:Frame, rs):

FILE: examples/wip/displace_map.py
  function gradient (line 9) | def gradient(r):
  function text (line 13) | def text(r):
  function displace (line 17) | def displace(r):

FILE: examples/wip/drawbot_image.py
  function test_image (line 7) | def test_image(r):
  function db_image (line 11) | def db_image(f):

FILE: examples/wip/google_font.py
  function nabla1 (line 17) | def nabla1(f):

FILE: examples/wip/toggle.py
  function render (line 5) | def render(f, rstate):

FILE: examples/wip/ui.py
  function cursor_interp (line 11) | def cursor_interp(u):

FILE: packages/coldtype-core/src/coldtype/__init__.py
  function monkeypatch_ctypes (line 6) | def monkeypatch_ctypes():
  function ººsiblingºº (line 71) | def ººsiblingºº(x) -> Path:
  function noop (line 74) | def noop():

FILE: packages/coldtype-core/src/coldtype/axidraw.py
  function aximeta (line 15) | def aximeta(fn):
  function dip_pen (line 20) | def dip_pen(seconds=1, location=(0, 0)):
  class AxidrawChainable (line 30) | class AxidrawChainable():
    method __init__ (line 31) | def __init__(self, ad):
    method moveto (line 34) | def moveto(self, x, y):
    method penup (line 38) | def penup(self):
    method pendown (line 42) | def pendown(self):
    method sleep (line 46) | def sleep(self, t):
  class axidrawing (line 51) | class axidrawing(renderable):
    method __init__ (line 52) | def __init__(self,
    method runpost (line 65) | def runpost(self, result, render_pass, renderer_state, config):
    method draw (line 84) | def draw(self,

FILE: packages/coldtype-core/src/coldtype/beziers.py
  function raise_quadratic (line 8) | def raise_quadratic(start, a, b):
  function splitCubicAtT_cached (line 18) | def splitCubicAtT_cached(a, b, c, d, t):
  function splitQuadraticAtT_cached (line 29) | def splitQuadraticAtT_cached(a, b, c, t):
  function calcCubicArcLength_cached (line 40) | def calcCubicArcLength_cached(a, b, c, d):
  function calcQuadraticArcLength_cached (line 52) | def calcQuadraticArcLength_cached(a, b, c):
  class CurveCutter (line 63) | class CurveCutter():
    method __init__ (line 64) | def __init__(self, g, inc=0.0015):
    method calcCurveLength (line 75) | def calcCurveLength(self):
    method subsegment (line 93) | def subsegment(self, start=None, end=None):
    method subsegmentPoint (line 158) | def subsegmentPoint(self, start=0, end=1):
  class CurveSample (line 180) | class CurveSample():
    method __init__ (line 181) | def __init__(self, idx, pt, e, tan):
    method neighbors (line 187) | def neighbors(self, prev, next):

FILE: packages/coldtype-core/src/coldtype/blender/__init__.py
  class BlenderIO (line 31) | class BlenderIO():
    method __init__ (line 32) | def __init__(self, file):
    method data (line 39) | def data(self):
  class BlenderTimeline (line 44) | class BlenderTimeline(Timeline):
    method __init__ (line 45) | def __init__(self, file, duration=None, fps=30, **kwargs):
  function b3d (line 84) | def b3d(callback:Callable[[BlenderPen], BlenderPen],
  function b3d_post (line 134) | def b3d_post(callback:Callable[[BlenderPen], BlenderPen]):
  function b3d_pre (line 149) | def b3d_pre(callback:Callable[[P], P]):
  function walk_to_b3d (line 156) | def walk_to_b3d(result:P,
  class B3DPlayback (line 249) | class B3DPlayback(Enum):
  class b3d_runnable (line 255) | class b3d_runnable(runnable):
    method __init__ (line 256) | def __init__(self,
    method run (line 274) | def run(self):
  class b3d_renderable (line 281) | class b3d_renderable(renderable):
    method __init__ (line 282) | def __init__(self,
  class b3d_animation (line 301) | class b3d_animation(animation):
    method __init__ (line 302) | def __init__(self,
    method post_read (line 364) | def post_read(self):
    method running_in_viewer (line 370) | def running_in_viewer(self):
    method rasterize (line 373) | def rasterize(self, config, content, rp):
    method baked_frames (line 394) | def baked_frames(self):
  class b3d_sequencer (line 412) | class b3d_sequencer(b3d_animation):
    method __init__ (line 413) | def __init__(self,

FILE: packages/coldtype-core/src/coldtype/blender/fluent.py
  function ensure_channelbag (line 26) | def ensure_channelbag(data_block):
  function get_fcurves (line 50) | def get_fcurves(obj, matching: re.Pattern = None):
  function set_b3d_color (line 81) | def set_b3d_color(value, color):
  class _Chainable (line 88) | class _Chainable():
    method noop (line 89) | def noop(self):
    method op (line 92) | def op(self, fn):
    method data (line 96) | def data(self, key=None, default=None, **kwargs):
  class BpyWorld (line 109) | class BpyWorld(_Chainable):
    method __init__ (line 110) | def __init__(self, scene="Scene"):
    method deselect_all (line 116) | def deselect_all(self):
    method delete_previous (line 126) | def delete_previous(self, collection="Coldtype", keep=[], materials=Tr...
    method deleteOrphans (line 135) | def deleteOrphans(self, keep=[], **kwargs):
    method timeline (line 153) | def timeline(self, t:Timeline, resetFrame=None, output=None, version=N...
    method cycles (line 180) | def cycles(self, samples=16, denoiser=False, canvas:Rect=None, transpa...
    method rigidbody (line 206) | def rigidbody(self, speed=1, frame_end=250):
    method insert_keyframe (line 226) | def insert_keyframe(self, frame, path, value=None):
    method background (line 237) | def background(self, color):
  class BpyCollection (line 243) | class BpyCollection(_Chainable):
    method Find (line 245) | def Find(tag, create=True, parent=None):
    method delete_hierarchy (line 281) | def delete_hierarchy(self):
  class BpyMaterial (line 297) | class BpyMaterial():
    method __init__ (line 298) | def __init__(self, material):
    method Find (line 301) | def Find(tag, create=True, use_nodes=True):
    method bsdf (line 316) | def bsdf(self):
    method setColorValue (line 319) | def setColorValue(self, value, color):
    method f (line 327) | def f(self, color):
    method specular (line 342) | def specular(self, amount=0.5):
    method metallic (line 346) | def metallic(self, amount=1):
    method roughness (line 350) | def roughness(self, amount=0.5):
    method transmission (line 354) | def transmission(self, amount=1):
    method emission (line 358) | def emission(self, color, strength=1):
    method animation (line 363) | def animation(self, anim:animation, start=0):
    method image (line 368) | def image(self, src=None, opacity=1, rect=None, pattern=True, alpha=Tr...
    method color_ramp (line 422) | def color_ramp(self, colors:List[Color]):
    method math (line 439) | def math(self, attrs={}, inputs=[]):
    method object_info (line 447) | def object_info(self):
    method connect (line 451) | def connect(self, output, input):
    method arrange (line 458) | def arrange(self):
  class BpyGroup (line 464) | class BpyGroup(Runon):
    method yields_wrapped (line 465) | def yields_wrapped(self):
    method map (line 468) | def map(self, fn:Callable[["BpyObj"], "BpyObj"]):
    method deselect (line 471) | def deselect(self):
    method Curves (line 475) | def Curves(pens:P, prefix=None, collection=None, cyclic=True, fill=Tru...
    method copy (line 489) | def copy(self, new_prefix):
  class BpyObj (line 498) | class BpyObj(_Chainable):
    method __init__ (line 499) | def __init__(self, obj=None) -> None:
    method Find (line 505) | def Find(tag):
    method Norm (line 521) | def Norm(obj_or_tag):
    method Primitive (line 528) | def Primitive(name=None, collection="Coldtype", created_obj=None) -> "...
    method Empty (line 551) | def Empty(name=None, collection=None) -> "BpyObj":
    method Cube (line 556) | def Cube(name=None, collection=None) -> "BpyObj":
    method Circle (line 561) | def Circle(name=None, collection=None) -> "BpyObj":
    method Plane (line 566) | def Plane(name=None, collection=None) -> "BpyObj":
    method Curve (line 571) | def Curve(name=None, collection=None) -> "BpyObj":
    method Cylinder (line 577) | def Cylinder(name=None, collection=None) -> "BpyObj":
    method UVSphere (line 582) | def UVSphere(name=None, collection=None) -> "BpyObj":
    method Monkey (line 587) | def Monkey(name=None, collection=None) -> "BpyObj":
    method GPencil (line 592) | def GPencil(name, p:P=None, stroke=bw(0, 0.5), fill=None, collection=N...
    method find_children (line 625) | def find_children(self):
    method delete_recursively (line 632) | def delete_recursively(self):
    method collect (line 638) | def collect(self, collectionTag, create=True, unlink=True, parent=None):
    method copy (line 647) | def copy(self, old_prefix=None, new_prefix=None):
    method select (line 658) | def select(self, selected=True, set_active=False, clear_active=False):
    method obj_selected (line 672) | def obj_selected(self, yield_self=False, exit=True):
    method obj_selection_sequence (line 696) | def obj_selection_sequence(self, other_tag):
    method all_vertices_selected (line 724) | def all_vertices_selected(self):
    method select_vertices (line 737) | def select_vertices(self, selector, keep_selected=False):
    method make_vertex_group (line 757) | def make_vertex_group(self, selector, name=None):
    method select_and_delete (line 767) | def select_and_delete(self, select_mode, selector):
    method separate_by_loose_parts (line 775) | def separate_by_loose_parts(self) -> BpyGroup:
    method parent (line 788) | def parent(self, parent_tag, hide=False):
    method constrain_child_of (line 796) | def constrain_child_of(self
    method hide (line 824) | def hide(self, hide=True):
    method delete (line 829) | def delete(self):
    method set_prop (line 838) | def set_prop(self, prop, value):
    method set_data (line 842) | def set_data(self, prop, value):
    method set_props (line 846) | def set_props(self, pairs):
    method calls (line 851) | def calls(self, fn): # TODO call signature, but requires fake-bpy-modu...
    method set_frame (line 855) | def set_frame(self, frame, scene=None):
    method insert_keyframe (line 861) | def insert_keyframe(self, frame, path, value=None, scene=None):
    method insert_keyframes (line 872) | def insert_keyframes(self, path, *settings):
    method modify_keyframes (line 879) | def modify_keyframes(self, selector, action):
    method make_keyframes_linear (line 891) | def make_keyframes_linear(self, selector):
    method set_visibility_at_frame (line 903) | def set_visibility_at_frame(self, frame, visibility, scene=None):
    method show_on_frame (line 912) | def show_on_frame(self, frame):
    method show_at_frame (line 918) | def show_at_frame(self, frame):
    method vertex_group_all (line 926) | def vertex_group_all(self):
    method add_empty_origin (line 934) | def add_empty_origin(self, collection="Coldtype"):
    method apply_transform (line 946) | def apply_transform(self,
    method apply_scale (line 962) | def apply_scale(self):
    method apply_modifier (line 967) | def apply_modifier(self, name):
    method applyAllModifiers (line 976) | def applyAllModifiers(self):
    method rotate (line 985) | def rotate(self, x=None, y=None, z=None):
    method with_temp_origin (line 998) | def with_temp_origin(self, origin, fn):
    method origin_to_geometry (line 1004) | def origin_to_geometry(self):
    method origin_to_cursor (line 1011) | def origin_to_cursor(self):
    method set_origin (line 1018) | def set_origin(self, x, y, z):
    method locate (line 1028) | def locate(self, x=None, y=None, z=None) -> "BpyObj":
    method locate_relative (line 1041) | def locate_relative(self, x=None, y=None, z=None):
    method scale (line 1056) | def scale(self, x=None, y=None, z=None) -> "BpyObj":
    method dimension (line 1065) | def dimension(self, x=None, y=None, z=None) -> "BpyObj":
    method dimensions (line 1074) | def dimensions(self, x=None, y=None, z=None) -> "BpyObj":
    method material (line 1085) | def material(self, tag, modFn:Callable[[BpyMaterial], BpyMaterial]=Non...
    method rigidbody (line 1103) | def rigidbody(self,
    method modifier (line 1142) | def modifier(self, name, cb=None, apply=True, **kwargs):
    method solidify (line 1154) | def solidify(self, thickness=1):
    method convert_to_mesh (line 1161) | def convert_to_mesh(self):
    method remesh (line 1168) | def remesh(self, octree_depth=7, smooth=False, apply=False):
    method array (line 1181) | def array(self, count=2, relative=(1, 0, 0), constant=(0.1, 0, 0)):
    method arrayX (line 1207) | def arrayX(self, count=2, relative=1, constant=0):
    method arrayY (line 1210) | def arrayY(self, count=2, relative=-1, constant=0):
    method arrayZ (line 1213) | def arrayZ(self, count=2, relative=-1, constant=0):
    method remove_doubles (line 1216) | def remove_doubles(self, threshold=0.01):
    method smooth (line 1223) | def smooth(self,
    method displace (line 1240) | def displace(self,
    method boolean (line 1277) | def boolean(self, object, operation="INTERSECT", apply=False, remove=F...
    method boolean_diff (line 1298) | def boolean_diff(self, object, apply=True, remove=True):
    method ops_object (line 1301) | def ops_object(self, method, *args, **kwargs):
    method shade_flat (line 1306) | def shade_flat(self):
    method shade_smooth (line 1311) | def shade_smooth(self, auto_smooth=False):
    method shade_auto_smooth (line 1318) | def shade_auto_smooth(self):
    method auto_smooth (line 1323) | def auto_smooth(self, angle=30):
    method subsurface (line 1336) | def subsurface(self):
    method simpleDeform (line 1341) | def simpleDeform(self, method="BEND", angle=180, axis="Z", origin=None):
    method decimate_planar (line 1352) | def decimate_planar(self):
    method draw (line 1365) | def draw(self, path:P, cyclic=True, fill=True, tx=0, ty=0, set_origin=...
    method extrude (line 1465) | def extrude(self, amount=0.1) -> "BpyObj":
    method bevel (line 1469) | def bevel(self, depth=0.02) -> "BpyObj":

FILE: packages/coldtype-core/src/coldtype/blender/livepreview.py
  function get_fac (line 19) | def get_fac():
  function view_zoom_preview (line 26) | def view_zoom_preview():
  class DrawingClass (line 34) | class DrawingClass:
    method __init__ (line 35) | def __init__(self, msg):
    method draw_text_callback (line 40) | def draw_text_callback(self):
    method remove_handle (line 54) | def remove_handle(self):
  function register (line 58) | def register():
  function unregister (line 61) | def unregister():

FILE: packages/coldtype-core/src/coldtype/blender/panel3d.py
  class Coldtype3DRenderOne (line 4) | class Coldtype3DRenderOne(bpy.types.Operator):
    method execute (line 10) | def execute(self, _):
  class Coldtype3DRenderFromCurrent (line 15) | class Coldtype3DRenderFromCurrent(bpy.types.Operator):
    method execute (line 21) | def execute(self, _):
  class Coldtype3DRenderAll (line 27) | class Coldtype3DRenderAll(bpy.types.Operator):
    method execute (line 33) | def execute(self, _):
  class Coldtype3DOpenInEditor (line 39) | class Coldtype3DOpenInEditor(bpy.types.Operator):
    method execute (line 45) | def execute(self, _):
  class Coldtype3DShowInFinder (line 49) | class Coldtype3DShowInFinder(bpy.types.Operator):
    method execute (line 55) | def execute(self, _):
  class COLDTYPE_3D_PT_Panel (line 60) | class COLDTYPE_3D_PT_Panel(bpy.types.Panel):
    method draw (line 67) | def draw(self, context):
  function register (line 78) | def register():
  function unregister (line 88) | def unregister():
  function add_3d_panel (line 96) | def add_3d_panel():

FILE: packages/coldtype-core/src/coldtype/blender/render.py
  function prefix_inline_venv (line 7) | def prefix_inline_venv(expr):
  function blender_launch_livecode (line 43) | def blender_launch_livecode(blender_path, file:Path, command_file, addit...
  function blend_frame (line 67) | def blend_frame(blender_path, py_file, blend_file, expr, output_dir, fi):
  function blend_source (line 98) | def blend_source(blender_path
  function frame_render (line 113) | def frame_render(file, frame, samples=-1, denoise=False):

FILE: packages/coldtype-core/src/coldtype/blender/timedtext.py
  function text_in_channel (line 6) | def text_in_channel(se, c, sort=True):
  function next_neighbor (line 15) | def next_neighbor(se, curr):
  class TimedTextEditorOperator (line 22) | class TimedTextEditorOperator(bpy.types.Operator):
    method execute (line 29) | def execute(self, context):
    method invoke (line 39) | def invoke(self, context, event):
  class TimedTextSplitter (line 46) | class TimedTextSplitter(bpy.types.Operator):
    method execute (line 50) | def execute(self, context):
    method invoke (line 71) | def invoke(self, context, event):
  class TimedTextSelector (line 81) | class TimedTextSelector(bpy.types.Operator):
    method invoke (line 85) | def invoke(self, context, event):
  class TimedTextNewline (line 104) | class TimedTextNewline(bpy.types.Operator):
    method invoke (line 108) | def invoke(self, context, event):
  class TimedTextReset (line 122) | class TimedTextReset(bpy.types.Operator):
    method invoke (line 126) | def invoke(self, context, event):
  class TimedTextRoller (line 140) | class TimedTextRoller(bpy.types.Operator):
    method invoke (line 144) | def invoke(self, context, event):
  class Coldtype2DImporter (line 175) | class Coldtype2DImporter(bpy.types.Operator):
    method invoke (line 181) | def invoke(self, context, event):
  class Coldtype2DLivePreviewImporter (line 198) | class Coldtype2DLivePreviewImporter(bpy.types.Operator):
    method invoke (line 204) | def invoke(self, context, event):
  class Coldtype2DSequenceDefaults (line 224) | class Coldtype2DSequenceDefaults(bpy.types.Operator):
    method execute (line 230) | def execute(self, context):
  class Coldtype2DRenderOne (line 239) | class Coldtype2DRenderOne(bpy.types.Operator):
    method execute (line 245) | def execute(self, _):
  class Coldtype2DRenderWorkarea (line 250) | class Coldtype2DRenderWorkarea(bpy.types.Operator):
    method execute (line 256) | def execute(self, _):
  class Coldtype2DRenderAll (line 262) | class Coldtype2DRenderAll(bpy.types.Operator):
    method execute (line 268) | def execute(self, _):
  class Coldtype2DRelease (line 274) | class Coldtype2DRelease(bpy.types.Operator):
    method execute (line 280) | def execute(self, _):
  function update_json_value (line 286) | def update_json_value(key, value, default=False):
  class Coldtype2DSetWorkarea (line 300) | class Coldtype2DSetWorkarea(bpy.types.Operator):
    method execute (line 306) | def execute(self, context):
  class Coldtype2DUnsetWorkarea (line 325) | class Coldtype2DUnsetWorkarea(bpy.types.Operator):
    method execute (line 331) | def execute(self, context):
  class Coldtype2DOpenInEditor (line 340) | class Coldtype2DOpenInEditor(bpy.types.Operator):
    method execute (line 346) | def execute(self, _):
  class Coldtype2DLivePreviewToggle (line 351) | class Coldtype2DLivePreviewToggle(bpy.types.Operator):
    method execute (line 357) | def execute(self, _):
  class Coldtype2DLoadJSONData (line 363) | class Coldtype2DLoadJSONData(bpy.types.Operator, ImportHelper):
    method invoke (line 374) | def invoke(self, context, event):
    method execute (line 378) | def execute(self, context):
  class COLDTYPE_2D_PT_Panel (line 402) | class COLDTYPE_2D_PT_Panel(bpy.types.Panel):
    method draw (line 409) | def draw(self, context):
  function register (line 455) | def register():
  function unregister (line 536) | def unregister():
  function add_2d_panel (line 544) | def add_2d_panel():

FILE: packages/coldtype-core/src/coldtype/blender/util.py
  function find_sequence (line 5) | def find_sequence():
  function remote (line 16) | def remote(command, args=None, sq=None):

FILE: packages/coldtype-core/src/coldtype/blender/watch.py
  function persist_sequence (line 13) | def persist_sequence(last_persisted):
  function render_as_image (line 68) | def render_as_image(r, res):
  function display_image_in_blender (line 90) | def display_image_in_blender(img_path):
  class ColdtypeWatchingOperator (line 100) | class ColdtypeWatchingOperator(bpy.types.Operator):
    method render_current_frame (line 113) | def render_current_frame(self, statics=False):
    method reimport (line 224) | def reimport(self, arg, inputs):
    method modal (line 266) | def modal(self, context, event):
    method execute (line 325) | def execute(self, context):
    method cancel (line 335) | def cancel(self, context):
  function register_watcher (line 340) | def register_watcher():
  function unregister_watcher (line 343) | def unregister_watcher():
  function watch (line 346) | def watch(command_file):

FILE: packages/coldtype-core/src/coldtype/capture/__init__.py
  function read_frame (line 13) | def read_frame(cam):

FILE: packages/coldtype-core/src/coldtype/color/__init__.py
  function norm (line 16) | def norm(value, start, stop):
  function lerp (line 19) | def lerp(start, stop, amt):
  function hue2rgb (line 27) | def hue2rgb(n1, n2=None, h=None):
  function hsl_to_rgb (line 38) | def hsl_to_rgb(h, s=0, l=0):
  function rgb_to_hsl (line 53) | def rgb_to_hsl(r, g=None, b=None):
  class Color (line 81) | class Color():
    method __init__ (line 82) | def __init__(self, *values):
    method __eq__ (line 100) | def __eq__(self, other):
    method __hash__ (line 106) | def __hash__(self):
    method to_code (line 109) | def to_code(self):
    method with_alpha (line 119) | def with_alpha(self, alpha):
    method ints (line 124) | def ints(self):
    method __getitem__ (line 127) | def __getitem__(self, index):
    method from_rgb (line 130) | def from_rgb(r, g, b, a=1):
    method from_html (line 133) | def from_html(html, a=1):
    method to_html (line 153) | def to_html(self):
    method lighter (line 156) | def lighter(self, level):
    method desaturate (line 159) | def desaturate(self, level):
    method saturate (line 162) | def saturate(self, level):
    method darker (line 165) | def darker(self, level):
    method adjust (line 168) | def adjust(self, level):
    method invert (line 173) | def invert(self):
    method from_hsl (line 179) | def from_hsl(h, s, l, a=1):
    method rgba (line 185) | def rgba(self):
    method interp (line 188) | def interp(self, v, other):
    method hsl_interp (line 191) | def hsl_interp(self, v, other):
    method rgb_interp (line 194) | def rgb_interp(self, v, other):
    method __repr__ (line 200) | def __repr__(self):
    method skia (line 203) | def skia(self):
  class Theme (line 210) | class Theme():
    method __init__ (line 211) | def __init__(self, default=None, **kwargs):
    method __getitem__ (line 218) | def __getitem__(self, index):
    method __setitem__ (line 224) | def __setitem__(self, key, value):
    method get (line 227) | def get(self, key, default=None):
    method __len__ (line 230) | def __len__(self):
    method __repr__ (line 233) | def __repr__(self):
    method with_alpha (line 236) | def with_alpha(self, a):
    method adjust (line 242) | def adjust(self, a):
  function lighten_max (line 252) | def lighten_max(color, maxLightness=0.55):
  function color_var (line 256) | def color_var(*rgba):
  function hex_to_tuple (line 268) | def hex_to_tuple(h):
  function find_random (line 272) | def find_random(v):
  function normalize_color (line 292) | def normalize_color(v):
  function hsl (line 359) | def hsl(h, s=0.5, l=0.5, a=1):
  function hsl_ (line 362) | def hsl_(hsla):
  function hsl360 (line 365) | def hsl360(h, s=50, l=50, a=1):
  function rgb (line 368) | def rgb(r, g, b, a=1):
  function rgb_ (line 371) | def rgb_(rgba):
  function rgb255 (line 374) | def rgb255(r, g, b, a=1):
  function bw (line 377) | def bw(c, a=1):
  class Gradient (line 381) | class Gradient():
    method __init__ (line 382) | def __init__(self, *stops):
    method addStop (line 387) | def addStop(self, color, point):
    method Vertical (line 390) | def Vertical(rect, a, b):
    method Horizontal (line 393) | def Horizontal(rect, a, b):
    method Random (line 396) | def Random(rect, opacity=0.5):

FILE: packages/coldtype-core/src/coldtype/css.py
  function cubicBezier (line 6) | def cubicBezier(x1, y1, x2, y2):

FILE: packages/coldtype-core/src/coldtype/demo/blank.py
  function render (line 7) | def render(r):

FILE: packages/coldtype-core/src/coldtype/demo/boiler.py
  function scratch (line 4) | def scratch(f:Frame):

FILE: packages/coldtype-core/src/coldtype/demo/boiler_renderable.py
  function scratch (line 4) | def scratch(r:Rect):

FILE: packages/coldtype-core/src/coldtype/demo/demo.py
  function demo (line 6) | def demo(f):

FILE: packages/coldtype-core/src/coldtype/demo/demoblender.py
  function prerun (line 5) | def prerun(bw:BpyWorld):
  function varfont2 (line 9) | def varfont2(f):

FILE: packages/coldtype-core/src/coldtype/demo/docstrings.py
  function updater (line 22) | def updater(r):

FILE: packages/coldtype-core/src/coldtype/demo/gifski.py
  function gifmaker (line 44) | def gifmaker(f):
  function instructions (line 48) | def instructions(r):
  function release (line 53) | def release(_):

FILE: packages/coldtype-core/src/coldtype/demo/glfw34.py
  function glfw34 (line 10) | def glfw34(r):

FILE: packages/coldtype-core/src/coldtype/drawbot.py
  class drawbot_renderable (line 28) | class drawbot_renderable(renderable):
    method __init__ (line 29) | def __init__(self, rect=(1080, 1080), scale=1, **kwargs):
    method normalize_result (line 35) | def normalize_result(self, pens):
    method run (line 38) | def run(self, render_pass, renderer_state):
    method notebook_display (line 76) | def notebook_display(self, scale=0.5):
  class drawbot_animation (line 86) | class drawbot_animation(drawbot_renderable, animation):
    method passes (line 87) | def passes(self, action, renderer_state, indices=[]):
  function dbdraw (line 105) | def dbdraw(p:P):
  function dbdraw_plain (line 109) | def dbdraw_plain(p:P):
  function tobp (line 113) | def tobp(p:P):
  function dbdraw_with_filters (line 118) | def dbdraw_with_filters(rect:Rect, filters):
  function page_rect (line 124) | def page_rect() -> Rect:
  function new_page (line 128) | def new_page(r:Rect=Rect(1000, 1000)):
  function new_drawing (line 134) | def new_drawing(rect:Rect=Rect(1000, 1000), count=1, save_to=None):
  function pdfdoc (line 143) | def pdfdoc(fn, path, frame_class=Frame):

FILE: packages/coldtype-core/src/coldtype/fx/chainable.py
  class Chainable (line 2) | class Chainable():
    method __init__ (line 3) | def __init__(self, func) -> None:

FILE: packages/coldtype-core/src/coldtype/fx/diagram.py
  function arrowhead (line 5) | def arrowhead(pt, arrow, x=18, y=13):
  function connection (line 19) | def connection(a, b, spec="→←"):
  function interconnect (line 41) | def interconnect(spec="→←→"):
  function ujoin (line 50) | def ujoin(a, b, side="→", d=100, arrow=None):

FILE: packages/coldtype-core/src/coldtype/fx/motion.py
  function filmjitter (line 4) | def filmjitter(doneness, base=0, speed=(10, 20), scale=(2, 3), octaves=16):

FILE: packages/coldtype-core/src/coldtype/fx/shapes.py
  function sine (line 3) | def sine(r, periods):
  function standingwave (line 29) | def standingwave(r, periods, direction=1):
  function polygon (line 58) | def polygon(sides, rect):
  function _lissajous_points (line 76) | def _lissajous_points(a, b, phase, radius, num_steps=340):
  function lissajous (line 87) | def lissajous(a, b, phase_t, radius, num_steps=340, autophase=True):

FILE: packages/coldtype-core/src/coldtype/fx/skia.py
  class Skfi (line 22) | class Skfi():
    method contrast_cut (line 24) | def contrast_cut(mp=127, w=5):
    method as_filter (line 40) | def as_filter(lut, a=1, r=0, g=0, b=0):
    method compose (line 45) | def compose(*filters):
    method fill (line 50) | def fill(color):
    method blur (line 60) | def blur(blur):
    method improved_noise (line 69) | def improved_noise(e, xo=0, yo=0, xs=1, ys=1, base=1):
    method huerotate (line 75) | def huerotate(hue):
    method saturate (line 97) | def saturate(s):
    method temp (line 117) | def temp(t):
    method tone (line 126) | def tone(t):
    method expose (line 135) | def expose(t):
    method red (line 144) | def red():
    method green (line 153) | def green():
    method blue (line 162) | def blue():
    method invert (line 171) | def invert():
  function spackle (line 181) | def spackle(xo=None, yo=None,
  function fill (line 207) | def fill(c):
  function blur (line 216) | def blur(x):
  function potrace (line 232) | def potrace(rect, invert=True,
  function precompose (line 268) | def precompose(rect,
  function rasterized (line 290) | def rasterized(rect, scale=1, wrapped=False):
  function rasterize (line 305) | def rasterize(rect, path):
  function mod_pixels (line 312) | def mod_pixels(rect, scale=0.1, mod=lambda rgba: None):
  function vector_pixels (line 333) | def vector_pixels(rect, scale=0.1, lut=dict(), combine=True, print_misse...
  function warp_image (line 369) | def warp_image(image, rect, mod):
  function warp (line 395) | def warp(rect, mod):
  function luma (line 429) | def luma(rect, fill=None):
  function phototype (line 441) | def phototype(rect=None,
  function color_phototype (line 480) | def color_phototype(rect,
  function huerotate (line 488) | def huerotate(c):
  function saturate (line 494) | def saturate(c):
  function expose (line 500) | def expose(t):
  function invert (line 505) | def invert():
  function temp (line 510) | def temp(t):
  function tone (line 515) | def tone(t):
  function temptone (line 520) | def temptone(temp, tone):
  function channel (line 525) | def channel(c):
  function rgbmod (line 537) | def rgbmod(rect, r=None, g=None, b=None):
  function shake (line 565) | def shake(seg_length=2, deviation=2, seed=0):
  function round_corners (line 573) | def round_corners(roundedness=20):
  function draw_canvas (line 579) | def draw_canvas(r:Rect, draw_function:callable, in_pen=False):
  function text_image (line 595) | def text_image(r:Rect, in_pen=True):
  function image_shader (line 634) | def image_shader(r:Rect, image, sksl, in_pen=True):
  function freeze (line 662) | def freeze(do_freeze, as_image, callback, additionals=[]):

FILE: packages/coldtype-core/src/coldtype/fx/warping.py
  function warp_fn (line 9) | def warp_fn(xa=0, ya=-1, xs=300, ys=300, speed=5, base=0, octaves=1, mul...
  function warp (line 20) | def warp(flatten=10, xa=0, ya=-1, xs=300, ys=300, speed=5, base=0, octav...
  function bend (line 30) | def bend(pen, curve, tangent=True):
  function bend2 (line 51) | def bend2(curve, tangent=True, offset=(0, 1)):
  function bend3 (line 69) | def bend3(curve, tangent=False, offset=(0, 1)):

FILE: packages/coldtype-core/src/coldtype/fx/xray.py
  function skeletonLookup (line 6) | def skeletonLookup(self) -> dict:
  function skeleton (line 52) | def skeleton(scale=1):

FILE: packages/coldtype-core/src/coldtype/geometry/__init__.py
  function Geo (line 14) | def Geo(*args):

FILE: packages/coldtype-core/src/coldtype/geometry/atom.py
  class Atom (line 4) | class Atom(Geometrical):
    method __init__ (line 5) | def __init__(self, x):
    method __eq__ (line 10) | def __eq__(self, o):
    method __repr__ (line 17) | def __repr__(self):
    method __getitem__ (line 20) | def __getitem__(self, key):
    method __len__ (line 26) | def __len__(self):
    method __setitem__ (line 29) | def __setitem__(self, key, value):
    method reverse (line 36) | def reverse(self):

FILE: packages/coldtype-core/src/coldtype/geometry/curve.py
  class Curve (line 5) | class Curve(Line):
    method __init__ (line 6) | def __init__(self, start, cp1, cp2, end):
    method abcd (line 12) | def abcd(self):
    method pts (line 15) | def pts(self):
    method split_t (line 18) | def split_t(self, t):
    method t (line 22) | def t(self, t):
    method length (line 26) | def length(self):
    method split_tpx (line 29) | def split_tpx(self, tpx):
    method tpx (line 32) | def tpx(self, tpx, limit=True):
    method __eq__ (line 35) | def __eq__(self, l):
    method reverse (line 40) | def reverse(self):
    method tan_out (line 43) | def tan_out(self):
    method tan_in (line 46) | def tan_in(self):
    method inset (line 49) | def inset(self, px):
    method __repr__ (line 53) | def __repr__(self):
    method __len__ (line 57) | def __len__(self):
    method __getitem__ (line 60) | def __getitem__(self, idx):

FILE: packages/coldtype-core/src/coldtype/geometry/edge.py
  class Edge (line 4) | class Edge(Enum):
    method PairFromCompass (line 12) | def PairFromCompass(cmp):
  function txt_to_edge (line 37) | def txt_to_edge(txt):
  function edge_opposite (line 58) | def edge_opposite(e):

FILE: packages/coldtype-core/src/coldtype/geometry/geometrical.py
  class Geometrical (line 1) | class Geometrical():

FILE: packages/coldtype-core/src/coldtype/geometry/line.py
  class Line (line 9) | class Line(Geometrical):
    method __init__ (line 10) | def __init__(self, start, end):
    method __eq__ (line 14) | def __eq__(self, l):
    method point (line 21) | def point(self, p):
    method mid (line 34) | def mid(self):
    method mxx (line 38) | def mxx(self):
    method mnx (line 42) | def mnx(self):
    method mxy (line 46) | def mxy(self):
    method mny (line 50) | def mny(self):
    method pe (line 54) | def pe(self):
    method pw (line 58) | def pw(self):
    method pn (line 62) | def pn(self):
    method ps (line 66) | def ps(self):
    method __repr__ (line 69) | def __repr__(self):
    method __len__ (line 72) | def __len__(self):
    method __getitem__ (line 75) | def __getitem__(self, idx):
    method reverse (line 83) | def reverse(self):
    method __invert__ (line 87) | def __invert__(self):
    method t (line 90) | def t(self, t):
    method length (line 93) | def length(self):
    method l (line 99) | def l(self):
    method tpx (line 102) | def tpx(self, tpx, limit=True):
    method angle (line 114) | def angle(self):
    method ang (line 118) | def ang(self):
    method pts (line 121) | def pts(self):
    method splat (line 124) | def splat(self):
    method transform (line 127) | def transform(self, t):
    method rotate (line 132) | def rotate(self, degrees, point=None):
    method bow (line 144) | def bow(self, amt, t=0.5, angle=90):
    method project (line 148) | def project(self, pt, dist, angle=90):
    method inset (line 152) | def inset(self, px):
    method extr (line 158) | def extr(self, amt):
    method offset (line 162) | def offset(self, x, y):
    method offset_x (line 166) | def offset_x(self, dx):
    method offset_y (line 169) | def offset_y(self, dy):
    method tan_out (line 172) | def tan_out(self):
    method tan_in (line 175) | def tan_in(self):
    method __floordiv__ (line 180) | def __floordiv__(self, other):
    method __truediv__ (line 183) | def __truediv__(self, other):
    method __mod__ (line 186) | def __mod__(self, other):
    method intersection (line 189) | def intersection(self, other):
    method __and__ (line 194) | def __and__(self, other):
    method join (line 197) | def join(self, other):
    method interp (line 201) | def interp(self, x, other):
    method setx (line 206) | def setx(self, x):
    method __mul__ (line 209) | def __mul__(self, other):
    method sety (line 212) | def sety(self, y):
    method __matmul__ (line 215) | def __matmul__(self, other):
    method intersects (line 218) | def intersects(self, other_line:"Line") -> bool:

FILE: packages/coldtype-core/src/coldtype/geometry/point.py
  function rt (line 12) | def rt(v, mult):
  class Point (line 20) | class Point(Geometrical):
    method __init__ (line 22) | def __init__(self, *points, rect=None, corner=None):
    method Z (line 45) | def Z():
    method from_obj (line 48) | def from_obj(obj):
    method offset (line 57) | def offset(self, dx, dy):
    method offset_x (line 61) | def offset_x(self, dx):
    method offset_y (line 64) | def offset_y(self, dy):
    method rect (line 69) | def rect(self, w, h=None):
    method xy (line 78) | def xy(self):
    method round (line 82) | def round(self):
    method round_to (line 86) | def round_to(self, to=10):
    method inside (line 90) | def inside(self, rect):
    method clip (line 97) | def clip(self, rect):
    method flip (line 112) | def flip(self, frame):
    method flipSelf (line 115) | def flipSelf(self, frame):
    method scale (line 120) | def scale(self, x, y=None):
    method transform (line 125) | def transform(self, t) -> "Point":
    method rotate (line 128) | def rotate(self, degrees, point) -> "Point":
    method join (line 138) | def join(self, other):
    method interp (line 142) | def interp(self, v, other):
    method i (line 150) | def i(self, *args):
    method project (line 158) | def project(self, angle, dist):
    method project_to (line 162) | def project_to(self, angle, line):
    method cdist (line 166) | def cdist(self, other):
    method noop (line 172) | def noop(self, *args, **kwargs):
    method __eq__ (line 175) | def __eq__(self, o):
    method __repr__ (line 181) | def __repr__(self):
    method __getitem__ (line 184) | def __getitem__(self, key):
    method __len__ (line 187) | def __len__(self):
    method __setitem__ (line 190) | def __setitem__(self, key, value):
    method setx (line 199) | def setx(self, x):
    method sety (line 202) | def sety(self, y):
    method reverse (line 205) | def reverse(self):
    method __add__ (line 208) | def __add__(self, o):
    method __sub__ (line 211) | def __sub__(self, o):
    method __mul__ (line 214) | def __mul__(self, o):

FILE: packages/coldtype-core/src/coldtype/geometry/primitives.py
  function line_intersection (line 10) | def line_intersection(line1, line2):
  function calc_vector (line 26) | def calc_vector(point1, point2):
  function calc_angle (line 34) | def calc_angle(point1, point2):
  function polar_coord (line 39) | def polar_coord(xy, angle, distance):
  function centered_square_outside (line 46) | def centered_square_outside(rect):
  function centered_square_inside (line 54) | def centered_square_inside(rect):
  function perc_to_pix (line 62) | def perc_to_pix(rect, amount, edge):
  function divide (line 77) | def divide(rect, amount, edge, forcePixel=False):
  function subdivide (line 104) | def subdivide(rect, count, edge, forcePixel=False):
  function pieces (line 128) | def pieces(rect, amount, edge):
  function take (line 137) | def take(rect, amount, edge, forcePixel=False):
  function subtract (line 146) | def subtract(rect, amount, edge, forcePixel=False):
  function drop (line 151) | def drop(rect, amount, edge):
  function inset (line 155) | def inset(rect, dx, dy):
  function offset (line 160) | def offset(rect, dx, dy):
  function expand (line 168) | def expand(rect, amount, edge):
  function centerpoint (line 183) | def centerpoint(rect):
  function add (line 188) | def add(rect_a, rect_b):
  function scale (line 200) | def scale(rect, s, x_edge=Edge.CenterX, y_edge=Edge.CenterY):
  function edgepoints (line 208) | def edgepoints(rect, edge):

FILE: packages/coldtype-core/src/coldtype/geometry/rect.py
  function pair_to_edges (line 38) | def pair_to_edges(x, y=None):
  function align (line 64) | def align(b, rect, x=Edge.CenterX, y=Edge.CenterY, round_result=False):
  class GeoIterable (line 92) | class GeoIterable():
    method __init__ (line 93) | def __init__(self, *items):
    method __getitem__ (line 96) | def __getitem__(self, key):
    method map (line 99) | def map(self, fn):
  class Rect (line 111) | class Rect(Geometrical):
    method FromCenter (line 124) | def FromCenter(center, w, h=None) -> "Rect":
    method Inches (line 131) | def Inches(w, h, dpi=72.0) -> "Rect":
    method __init__ (line 134) | def __init__(self, *rect):
    method origin (line 162) | def origin(self) -> tuple:
    method from_obj (line 166) | def from_obj(obj, w=None, h=None) -> "Rect":
    method FromExtents (line 186) | def FromExtents(extents) -> "Rect":
    method noop (line 190) | def noop(self, *args, **kwargs) -> "Rect":
    method FromMnMnMxMx (line 193) | def FromMnMnMxMx(extents) -> "Rect":
    method FromPoints (line 198) | def FromPoints(*points) -> "Rect":
    method mnmnmxmx (line 211) | def mnmnmxmx(self) -> tuple:
    method __getitem__ (line 215) | def __getitem__(self, key):
    method __repr__ (line 218) | def __repr__(self):
    method __eq__ (line 221) | def __eq__(self, r):
    method __gt__ (line 227) | def __gt__(self, other):
    method __lt__ (line 230) | def __lt__(self, other):
    method __ge__ (line 233) | def __ge__(self, other):
    method __le__ (line 236) | def __le__(self, other):
    method rect (line 241) | def rect(self) -> list:
    method ambit (line 245) | def ambit(self, tx=None, ty=None) -> "Rect":
    method r (line 249) | def r(self) -> "Rect":
    method round (line 255) | def round(self) -> "Rect":
    method xy (line 259) | def xy(self) -> list:
    method wh (line 263) | def wh(self) -> list:
    method mnx (line 268) | def mnx(self) -> int:
    method mny (line 272) | def mny(self) -> int:
    method mxx (line 276) | def mxx(self) -> int:
    method mxy (line 280) | def mxy(self) -> int:
    method mdx (line 284) | def mdx(self) -> int:
    method mdy (line 288) | def mdy(self) -> int:
    method square (line 291) | def square(self, outside=False) -> "Rect":
    method fit_aspect (line 298) | def fit_aspect(self, x, y, align="C", grid=False):
    method align (line 316) | def align(self, rect, x=Edge.CenterX, y=Edge.CenterY, round_result=Fal...
    method ipos (line 319) | def ipos(self, pt, defaults=(0.5, 0.5), clamp=True) -> tuple:
    method divide (line 333) | def divide(self, amount, edge, forcePixel=False) -> list:
    method subdivide (line 370) | def subdivide(self, amount, edge, forcePixel=False) -> list:
    method subdivide_with_leading (line 387) | def subdivide_with_leading(self, count, leading, edge, forcePixel=True...
    method subdivide_with_leadings (line 393) | def subdivide_with_leadings(self, count, leadings, edge, forcePixel=Tr...
    method transform (line 408) | def transform(self, t) -> "Rect":
    method rotate (line 413) | def rotate(self, degrees, point=None) -> "Rect":
    method scale (line 425) | def scale(self, s, x_edge=Edge.MinX, y_edge=Edge.MinY) -> "Rect":
    method union (line 433) | def union(self, otherRect) -> "Rect":
    method intersection (line 436) | def intersection(self, otherRect) -> "Rect":
    method take (line 441) | def take(self, amount, edge, forcePixel=False) -> "Rect":
    method takeOpposite (line 454) | def takeOpposite(self, amount, edge, forcePixel=False) -> "Rect":
    method subtract (line 458) | def subtract(self, amount, edge, forcePixel=False) -> "Rect":
    method expand (line 471) | def expand(self, amount, edge) -> "Rect":
    method inset (line 489) | def inset(self, dx, dy=None) -> "Rect":
    method inset_x (line 497) | def inset_x(self, dx) -> "Rect":
    method inset_y (line 500) | def inset_y(self, dy) -> "Rect":
    method offset (line 503) | def offset(self, dx, dy=None) -> "Rect":
    method offset_x (line 508) | def offset_x(self, dx) -> "Rect":
    method offset_y (line 511) | def offset_y(self, dy) -> "Rect":
    method zero (line 516) | def zero(self) -> "Rect":
    method nonzero (line 520) | def nonzero(self) -> bool:
    method __add__ (line 524) | def __add__(self, another_rect):
    method grid (line 528) | def grid(self, columns=2, rows=None) -> list:
    method pieces (line 536) | def pieces(self, amount, edge) -> list:
    method edge (line 540) | def edge(self, edge) -> Line:
    method center (line 544) | def center(self) -> Point:
    method flip (line 547) | def flip(self, h) -> "Rect":
    method cardinals (line 550) | def cardinals(self) -> tuple:
    method intercardinals (line 553) | def intercardinals(self) -> tuple:
    method FromIntercardinals (line 556) | def FromIntercardinals(pts) -> "Rect":
    method aspect (line 560) | def aspect(self) -> float:
    method fit (line 563) | def fit(self, other) -> "Rect":
    method avg (line 575) | def avg(self) -> Point:
    method asciih (line 581) | def asciih(self, layout, areas):
    method asciiv (line 593) | def asciiv(self, layout, areas):
    method point (line 605) | def point(self, eh, ev=Edge.MinX) -> Point:
    method nsew (line 642) | def nsew(self):
    method pne (line 646) | def pne(self) -> Point: return self.point("NE")
    method pe (line 649) | def pe(self) -> Point: return self.point("E")
    method ee (line 652) | def ee(self) -> Line: return self.edge("mxx")
    method pse (line 655) | def pse(self) -> Point: return self.point("SE")
    method ps (line 658) | def ps(self) -> Point: return self.point("S")
    method es (line 661) | def es(self) -> Line: return self.edge("mny")
    method psw (line 664) | def psw(self) -> Point: return self.point("SW")
    method pw (line 667) | def pw(self) -> Point: return self.point("W")
    method ew (line 670) | def ew(self) -> Line: return self.edge("mnx")
    method pnw (line 673) | def pnw(self) -> Point: return self.point("NW")
    method pn (line 676) | def pn(self) -> Point: return self.point("N")
    method en (line 679) | def en(self) -> Line: return self.edge("mxy")
    method pc (line 682) | def pc(self) -> Point: return self.point("C")
    method ecx (line 685) | def ecx(self) -> Line: return self.edge("mdx")
    method ecy (line 688) | def ecy(self) -> Line: return self.edge("mdy")
    method contains (line 690) | def contains(self, other) -> bool:
    method __contains__ (line 694) | def __contains__(self, item) -> bool:
    method intersects (line 697) | def intersects(self, other) -> bool:
    method maxima (line 700) | def maxima(self, n, edge) -> "Rect":
    method setmnx (line 717) | def setmnx(self, x) -> "Rect":
    method __mul__ (line 721) | def __mul__(self, other):
    method setlmnx (line 724) | def setlmnx(self, x):
    method setmny (line 729) | def setmny(self, y):
    method __matmul__ (line 733) | def __matmul__(self, other):
    method setlmny (line 736) | def setlmny(self, y):
    method setmxx (line 741) | def setmxx(self, x):
    method setlmxx (line 745) | def setlmxx(self, x):
    method setmxy (line 750) | def setmxy(self, y):
    method setlmxy (line 754) | def setlmxy(self, y):
    method setmdx (line 759) | def setmdx(self, x):
    method setmn (line 763) | def setmn(self, mn):
    method setmx (line 766) | def setmx(self, mx):
    method setw (line 769) | def setw(self, w):
    method seth (line 772) | def seth(self, h):
    method parse_line (line 775) | def parse_line(self, d, line):
    method __floordiv__ (line 816) | def __floordiv__(self, other):
    method __truediv__ (line 819) | def __truediv__(self, other):
    method symbol_to_edge (line 822) | def symbol_to_edge(self, idx, symbol):
    method sign_to_dim (line 831) | def sign_to_dim(self, sign):
    method sign_to_edge (line 838) | def sign_to_edge(self, sign):
    method t (line 847) | def t(self, sign, n):
    method s (line 850) | def s(self, sign, n):
    method i (line 853) | def i(self, sign, n):
    method columns (line 857) | def columns(self, *args):
    method rows (line 867) | def rows(self, *args):
    method interp (line 877) | def interp(self, v, other) -> "Rect":
    method is_integer (line 884) | def is_integer(self):

FILE: packages/coldtype-core/src/coldtype/grid/__init__.py
  function parse_line (line 6) | def parse_line(d, line):
  function union_rect (line 47) | def union_rect(r1, r2):
  class Grid (line 54) | class Grid():
    method __init__ (line 55) | def __init__(self,
    method __repr__ (line 98) | def __repr__(self):
    method clone (line 101) | def clone(self, other_grid):
    method r (line 108) | def r(self):
    method rect (line 112) | def rect(self):
    method rect (line 116) | def rect(self, rect):
    method key (line 121) | def key(self):
    method update (line 125) | def update(self):
    method __getitem__ (line 143) | def __getitem__(self, key):
    method calc_grid (line 156) | def calc_grid(self, r, columns, rows, areas):

FILE: packages/coldtype-core/src/coldtype/helpers.py
  function sibling (line 12) | def sibling(root, file):
  function download (line 15) | def download(url, save_to:Path, force=False):
  function raw_ufo (line 31) | def raw_ufo(path):
  function quick_ufo (line 34) | def quick_ufo(path
  function ßhide (line 67) | def ßhide(el):
  function ßshow (line 70) | def ßshow(el):
  function cycle_idx (line 73) | def cycle_idx(arr, idx):
  function _populate_glyphs_unis (line 85) | def _populate_glyphs_unis():
  function uni_to_glyph (line 108) | def uni_to_glyph(u):
  function glyph_to_uni (line 113) | def glyph_to_uni(g):
  function glyph_to_class (line 128) | def glyph_to_class(g):
  function run_coroutine_sync (line 148) | def run_coroutine_sync(coroutine: Coroutine[Any, Any, T], timeout: float...

FILE: packages/coldtype-core/src/coldtype/img/abstract.py
  class AbstractImage (line 7) | class AbstractImage(P):
    method __init__ (line 8) | def __init__(self, src, img=None):
    method load_image (line 28) | def load_image(self, src):
    method write (line 31) | def write(self, path):
    method rect (line 34) | def rect(self):
    method bounds (line 37) | def bounds(self):
    method img (line 40) | def img(self):
    method a (line 43) | def a(self, alpha=None):
    method width (line 50) | def width(self):
    method height (line 53) | def height(self):
    method align (line 56) | def align(self, rect, x="mdx", y="mdy", round_result=True, tx=True, ty...
    method _resize (line 63) | def _resize(self, fx, fy):
    method resize (line 66) | def resize(self, factor, factor_y=None):
    method rotate (line 79) | def rotate(self, degrees, point=None):
    method matrix (line 83) | def matrix(self, a, b, c, d, e, f):
    method _precompose_fn (line 87) | def _precompose_fn(self):
    method precompose (line 90) | def precompose(self, rect, as_image=True):
    method crop (line 97) | def crop(self, crop, mutate=True):
    method in_pen (line 123) | def in_pen(self):
    method to_pen (line 127) | def to_pen(self, rect=None):
    method FromPen (line 130) | def FromPen(pen:P, original_src=None):
    method __str__ (line 133) | def __str__(self):

FILE: packages/coldtype-core/src/coldtype/img/blendmode.py
  class BlendMode (line 9) | class BlendMode(Enum):
    method to_skia (line 40) | def to_skia(self):
    method print (line 43) | def print(self):
    method Cycle (line 48) | def Cycle(i, show=False):

FILE: packages/coldtype-core/src/coldtype/img/drawbotimage.py
  class DrawBotImage (line 8) | class DrawBotImage(AbstractImage):
    method load_image (line 9) | def load_image(self, src):
    method width (line 17) | def width(self):
    method height (line 20) | def height(self):

FILE: packages/coldtype-core/src/coldtype/img/skiaimage.py
  class SkiaImage (line 7) | class SkiaImage(AbstractImage):
    method FromBase64 (line 9) | def FromBase64(b64):
    method load_image (line 20) | def load_image(self, src):
    method width (line 23) | def width(self):
    method height (line 26) | def height(self):
    method copy (line 29) | def copy(self):
    method _resize (line 32) | def _resize(self, fx, fy):
    method _precompose_fn (line 40) | def _precompose_fn(self):
    method css_scale (line 43) | def css_scale(self, x, y=None):
    method _redraw (line 49) | def _redraw(self, modifier):
    method css_translate (line 62) | def css_translate(self, x, y=None):
    method css_matrix (line 65) | def css_matrix(self, a, b, c, d, tx, ty):
    method _rotate (line 70) | def _rotate(self, degrees, point=None):
    method write (line 95) | def write(self, path):

FILE: packages/coldtype-core/src/coldtype/img/skiasvg.py
  class SkiaSVG (line 5) | class SkiaSVG(AbstractImage):
    method width (line 6) | def width(self):
    method height (line 9) | def height(self):
    method copy (line 12) | def copy(self):

FILE: packages/coldtype-core/src/coldtype/interpolation/__init__.py
  function norm (line 2) | def norm(value, start, stop):
  function lerp (line 5) | def lerp(start, stop, amt):
  function interp_dict (line 8) | def interp_dict(v, a, b=None):
  function loopidx (line 25) | def loopidx(lst, idx):

FILE: packages/coldtype-core/src/coldtype/midi/controllers.py
  function _norm (line 2) | def _norm(lookup, k, default):
  function midi_controller_lookup_fn (line 6) | def midi_controller_lookup_fn(name, column_starts=[], cmc={}, channel="9"):
  function Generic (line 33) | def Generic(name, cmc, channel):
  function LaunchControlXL (line 37) | def LaunchControlXL(cmc, channel="9"):
  function LaunchkeyMini (line 45) | def LaunchkeyMini(cmc, channel="9"):

FILE: packages/coldtype-core/src/coldtype/notebook/__init__.py
  function update_ffmpeg (line 27) | def update_ffmpeg():
  function show (line 40) | def show(fmt="png", rect=None, align=False, padding=[0, 0], tx=0, ty=0, ...
  function showpng (line 84) | def showpng(rect=None, align=False, padding=[60, 50], tx=0, ty=0, scale=...
  function showlocalpng (line 87) | def showlocalpng(rect, src, scale=0.5):
  function show_frame (line 92) | def show_frame(a, idx, scale=0.5):
  function show_animation (line 147) | def show_animation(a:_animation, start=False):
  function render_animation (line 156) | def render_animation(a, show=[], preview_scale=0.5, scale=1):
  function show_video (line 185) | def show_video(a, fmt="h264", loops=1, verbose=False, download=False, sc...
  class notebook_renderable (line 227) | class notebook_renderable(_renderable):
    method __init__ (line 228) | def __init__(self,
    method __call__ (line 242) | def __call__(self, func):
    method preview (line 249) | def preview(self):
  class notebook_animation (line 259) | class notebook_animation(_animation):
    method __init__ (line 260) | def __init__(self,
    method __call__ (line 287) | def __call__(self, func):
    method display (line 295) | def display(self):
    method interactive_preview (line 313) | def interactive_preview(self, start):
    method iv (line 337) | def iv(self, k):
    method preview (line 340) | def preview(self, *frames):
    method render (line 352) | def render(self, scale=1):
    method show (line 356) | def show(self,
    method zip (line 381) | def zip(self, download=False):
  class notebook_aframe (line 395) | class notebook_aframe(_aframe):
    method __init__ (line 396) | def __init__(self,
  function nshow (line 408) | def nshow(self):

FILE: packages/coldtype-core/src/coldtype/notebook/parser.py
  class NotebookParser (line 16) | class NotebookParser():
    method __init__ (line 17) | def __init__(self

FILE: packages/coldtype-core/src/coldtype/osutil.py
  class System (line 4) | class System(Enum):
  function operating_system (line 9) | def operating_system():
  function on_windows (line 19) | def on_windows():
  function on_mac (line 22) | def on_mac():
  function on_linux (line 25) | def on_linux():
  function play_sound (line 29) | def play_sound(name="Pop"):
  function show_in_finder (line 39) | def show_in_finder(path):
  function in_notebook (line 53) | def in_notebook() -> bool:
  function run_with_check (line 66) | def run_with_check(args):

FILE: packages/coldtype-core/src/coldtype/pens/axidrawpen.py
  class AxiDrawPen (line 13) | class AxiDrawPen(BasePen):
    method __init__ (line 14) | def __init__(self, dat, page, move_delay=0):
    method _moveTo (line 23) | def _moveTo(self, p):
    method _lineTo (line 29) | def _lineTo(self, p):
    method _curveToOne (line 33) | def _curveToOne(self, p1, p2, p3):
    method _qCurveToOne (line 36) | def _qCurveToOne(self, p1, p2):
    method _closePath (line 39) | def _closePath(self):
    method draw (line 44) | def draw(self,

FILE: packages/coldtype-core/src/coldtype/pens/blenderpen.py
  class BPH (line 20) | class BPH():
    method Clear (line 21) | def Clear():
    method FindCollectionForItem (line 39) | def FindCollectionForItem(item):
    method Collection (line 45) | def Collection(name, parent=None):
    method CheckExists (line 54) | def CheckExists(name, dn=False):
    method AddOrFind (line 61) | def AddOrFind(name, add_fn, dn=False):
    method Primitive (line 74) | def Primitive(_type, coll, name, dn=False, container=None, material="C...
    method Vector (line 149) | def Vector(pt, z=0):
  class BlenderPen (line 154) | class BlenderPen(BpyObj, DrawablePenMixin, BasePen):
    method __init__ (line 155) | def __init__(self, dat):
    method record (line 164) | def record(self, dat):
    method _moveTo (line 175) | def _moveTo(self, p):
    method _lineTo (line 182) | def _lineTo(self, p):
    method _curveToOne (line 186) | def _curveToOne(self, p1, p2, p3):
    method _qCurveToOne (line 191) | def _qCurveToOne(self, p1, p2):
    method _closePath (line 198) | def _closePath(self):
    method materials (line 204) | def materials(self):
    method bsdf (line 207) | def bsdf(self):
    method shadow (line 214) | def shadow(self, clip=None, radius=10, alpha=0.3, color=Color.from_rgb...
    method setColorValue (line 217) | def setColorValue(self, value, color):
    method fill (line 229) | def fill(self, color):
    method stroke (line 241) | def stroke(self, weight=1, color=None, dash=None, miter=None):
    method extrude (line 252) | def extrude(self, amount=0.1):
    method bevel (line 256) | def bevel(self, depth=0.02):
    method specular (line 260) | def specular(self, amount=0.5):
    method metallic (line 266) | def metallic(self, amount=1):
    method roughness (line 272) | def roughness(self, amount=0.5):
    method transmission (line 278) | def transmission(self, amount=1):
    method emission (line 284) | def emission(self, color=None, strength=1):
    method image (line 292) | def image(self, src=None, opacity=1, rect=None, pattern=True):
    method at_frame (line 303) | def at_frame(self, frame, path, value=None):
    method hide (line 314) | def hide(self, hide=True):
    method set_visibility_at_frame (line 319) | def set_visibility_at_frame(self, frame, visibility):
    method show_on_frame (line 326) | def show_on_frame(self, frame):
    method show_at_frame (line 332) | def show_at_frame(self, frame):
    method make_invisible (line 338) | def make_invisible(self):
    method convert_to_mesh (line 347) | def convert_to_mesh(self):
    method remesh_smooth (line 358) | def remesh_smooth(self, octree_depth=7, smooth=False):
    method cloth (line 369) | def cloth(self, pressure=5):
    method apply_transform (line 379) | def apply_transform(self,
    method with_origin (line 398) | def with_origin(self, xyz, fn):
    method center_origin (line 407) | def center_origin(self):
    method draw (line 423) | def draw(self, collection, style=None, scale=0.01, cyclic=True, dn=Fal...
    method draw_on_bezier_curve (line 460) | def draw_on_bezier_curve(self, bez, cyclic=True):
    method noop (line 477) | def noop(self, *args, **kwargs):
  class BlenderPenCube (line 480) | class BlenderPenCube(BlenderPen):
    method extrude (line 481) | def extrude(self, amount=0.1, apply=False):

FILE: packages/coldtype-core/src/coldtype/pens/drawablepen.py
  class DrawablePenMixin (line 6) | class DrawablePenMixin(object):
    method print (line 7) | def print(self, *args):
    method fill (line 15) | def fill(self, el, color):
    method stroke (line 18) | def stroke(self, el, weight=1, color=None, dash=None, miter=None):
    method shadow (line 21) | def shadow(self, el, clip=None, radius=10, alpha=0.3, color=Color.from...
    method image (line 24) | def image(self, el, src=None, opacity=None, rect=None, pattern=True):
    method applyDATAttribute (line 27) | def applyDATAttribute(self, attrs, attribute):
    method findStyledAttrs (line 39) | def findStyledAttrs(self, style):
    method FindPens (line 46) | def FindPens(pens):

FILE: packages/coldtype-core/src/coldtype/pens/drawbotpen.py
  function get_image_rect (line 12) | def get_image_rect(src):
  class DrawBotPen (line 17) | class DrawBotPen(DrawablePenMixin, P):
    method __init__ (line 18) | def __init__(self, dat, rect=None):
    method fill (line 25) | def fill(self, color):
    method stroke (line 34) | def stroke(self, weight=1, color=None, dash=None, miter=None):
    method image (line 46) | def image(self, src=None, opacity=1, rect=None, rotate=0, repeating=Fa...
    method shadow (line 87) | def shadow(self, clip=None, radius=10, alpha=0.3, color=Color.from_rgb...
    method gradient (line 100) | def gradient(self, gradient):
    method draw (line 104) | def draw(self, scale=1, style=None, attrs=True):
    method draw_with_filters (line 117) | def draw_with_filters(self, rect, filters):

FILE: packages/coldtype-core/src/coldtype/pens/jsonpen.py
  function path_str (line 11) | def path_str(*ps):
  class JSONPen (line 14) | class JSONPen(DrawablePenMixin, BasePen):
    method __init__ (line 15) | def __init__(self, dat, rect):
    method _moveTo (line 28) | def _moveTo(self, p):
    method _lineTo (line 32) | def _lineTo(self, p):
    method _curveToOne (line 36) | def _curveToOne(self, p1, p2, p3):
    method _qCurveToOne (line 40) | def _qCurveToOne(self, p1, p2):
    method _closePath (line 44) | def _closePath(self):
    method fill (line 48) | def fill(self, color=None):
    method stroke (line 56) | def stroke(self, weight=1, color=None, dash=None, miter=None):
    method rectPoints (line 63) | def rectPoints(self, rect):
    method color (line 66) | def color(self, color):
    method gradient (line 69) | def gradient(self, gradient):
    method shadow (line 75) | def shadow(self, clip=None, radius=14, color=Color.from_rgb(0,0,0,0.3)):
    method image (line 81) | def image(self, src=None, opacity=1, rect=None):
    method asCode (line 84) | def asCode(self, bounds, style=None):
    method Composite (line 98) | def Composite(pens, rect):

FILE: packages/coldtype-core/src/coldtype/pens/misc.py
  class BooleanOp (line 23) | class BooleanOp(Enum):
    method Skia (line 31) | def Skia(x):
    method BooleanGlyphMethod (line 40) | def BooleanGlyphMethod(x):
  function calculate_pathop (line 50) | def calculate_pathop(pen1, pen2, operation, use_skia_pathops_draw=True):
  class ExplodingPen (line 110) | class ExplodingPen(ContourFilterPen):
    method __init__ (line 111) | def __init__(self, outPen):
    method filterContour (line 115) | def filterContour(self, contour):
  class SmoothPointsPen (line 120) | class SmoothPointsPen(ContourFilterPen):
    method __init__ (line 121) | def __init__(self, outPen, length=80):
    method filterContour (line 125) | def filterContour(self, contour):

FILE: packages/coldtype-core/src/coldtype/pens/outlinepen.py
  function roundFloat (line 41) | def roundFloat(f):
  function checkSmooth (line 46) | def checkSmooth(firstAngle, lastAngle):
  function checkInnerOuter (line 58) | def checkInnerOuter(firstAngle, lastAngle):
  function interSect (line 75) | def interSect(seg1, seg2):
  function pointOnACurve (line 91) | def pointOnACurve(p1, c1, c2, p2, value):
  class MathPoint (line 109) | class MathPoint(object):
    method __init__ (line 111) | def __init__(self, x, y=None):
    method __repr__ (line 117) | def __repr__(self):
    method __getitem__ (line 120) | def __getitem__(self, index):
    method __iter__ (line 127) | def __iter__(self):
    method __add__ (line 131) | def __add__(self, p):  # p + p
    method __sub__ (line 136) | def __sub__(self, p):  # p - p
    method __mul__ (line 141) | def __mul__(self, p):  # p * p
    method __div__ (line 146) | def __div__(self, p):  # p / p
    method __eq__ (line 153) | def __eq__(self, p):  # if p == p
    method __ne__ (line 158) | def __ne__(self, p):  # if p != p
    method copy (line 161) | def copy(self):
    method round (line 164) | def round(self):
    method distance (line 168) | def distance(self, p):
    method angle (line 171) | def angle(self, other, add=90):
  class CleanPointPen (line 187) | class CleanPointPen(AbstractPointPen):
    method __init__ (line 189) | def __init__(self, pointPen):
    method processContour (line 193) | def processContour(self):
    method beginPath (line 223) | def beginPath(self, identifier=None):
    method endPath (line 228) | def endPath(self):
    method addPoint (line 233) | def addPoint(self, pt, segmentType=None, smooth=False, name=None, **kw...
    method addComponent (line 238) | def addComponent(self, glyphName, transform):
  class OutlinePen (line 243) | class OutlinePen(BasePen):
    method __init__ (line 248) | def __init__(self, glyphSet, offset=10, contrast=0, contrastAngle=0, c...
    method _moveTo (line 293) | def _moveTo(self, pt):
    method _lineTo (line 306) | def _lineTo(self, pt):
    method _curveToOne (line 347) | def _curveToOne(self, pt1, pt2, pt3):
    method _processCurveToOne (line 356) | def _processCurveToOne(self, pt1, pt2, pt3):
    method _closePath (line 437) | def _closePath(self):
    method _endPath (line 464) | def _endPath(self):
    method addComponent (line 489) | def addComponent(self, glyphName, transform):
    method getThickness (line 497) | def getThickness(self, angle):
    method buildConnection (line 505) | def buildConnection(self, close=False):
    method connectionSquare (line 517) | def connectionSquare(self, first, last, pen, close):
    method connectionRound (line 537) | def connectionRound(self, first, last, pen, close):
    method connectionButt (line 565) | def connectionButt(self, first, last, pen, close):
    method connectionInnerCorner (line 569) | def connectionInnerCorner(self, first, last, pen, close):
    method buildCap (line 575) | def buildCap(self, firstContour, lastContour):
    method capButt (line 591) | def capButt(self, firstContour, lastContour, first, last, angle):
    method capRound (line 595) | def capRound(self, firstContour, lastContour, first, last, angle):
    method capSquare (line 624) | def capSquare(self, firstContour, lastContour, first, last, angle):
    method drawSettings (line 636) | def drawSettings(self, drawOriginal=False, drawInner=False, drawOuter=...
    method drawPoints (line 641) | def drawPoints(self, pointPen):
    method draw (line 656) | def draw(self, pen):
    method getGlyph (line 660) | def getGlyph(self):
    method Record (line 666) | def Record(recording, offset=1):

FILE: packages/coldtype-core/src/coldtype/pens/rendererdrawbotpen.py
  class RendererDrawBotPen (line 8) | class RendererDrawBotPen(DrawBotPen):
    method Composite1 (line 13) | def Composite1(pens, rect, save_to, paginate=False, scale=2):
    method Composite (line 25) | def Composite(pens, rect, save_to, scale=2):

FILE: packages/coldtype-core/src/coldtype/pens/reportlabpen.py
  class ReportLabPathPen (line 11) | class ReportLabPathPen(BasePen):
    method __init__ (line 12) | def __init__(self, canvas):
    method _moveTo (line 16) | def _moveTo(self, p):
    method _lineTo (line 20) | def _lineTo(self, p):
    method _curveToOne (line 24) | def _curveToOne(self, p1, p2, p3):
    method _closePath (line 30) | def _closePath(self):
  class ReportLabPen (line 34) | class ReportLabPen(DrawablePenMixin):
    method __init__ (line 35) | def __init__(self, dat, rect, canvas, scale, style=None, alpha=1):
    method fill (line 63) | def fill(self, color):
    method stroke (line 66) | def stroke(self, weight=1, color=None, dash=None, miter=None):
    method PDF (line 75) | def PDF(pens, rect, save_to, scale=1, style=None, title=None):
    method CompositeToCanvas (line 83) | def CompositeToCanvas(pens, rect, canvas, scale=1, style=None):

FILE: packages/coldtype-core/src/coldtype/pens/skiapathpen.py
  class SkiaPathPen (line 12) | class SkiaPathPen(BasePen):
    method __init__ (line 13) | def __init__(self, dat, h=None):
    method _moveTo (line 35) | def _moveTo(self, p):
    method _lineTo (line 38) | def _lineTo(self, p):
    method _curveToOne (line 41) | def _curveToOne(self, p1, p2, p3):
    method _qCurveToOne (line 44) | def _qCurveToOne(self, p1, p2):
    method _closePath (line 47) | def _closePath(self):
    method to_drawing (line 50) | def to_drawing(self):

FILE: packages/coldtype-core/src/coldtype/pens/skiapen.py
  class SkiaPen (line 21) | class SkiaPen(DrawablePenMixin, SkiaPathPen):
    method __init__ (line 22) | def __init__(self, dat, rect, canvas, scale, style=None, alpha=1):
    method colr (line 77) | def colr(self, data, pen:P):
    method fill (line 100) | def fill(self, color):
    method stroke (line 127) | def stroke(self, weight=1, color=None, dash=None, miter=None):
    method gradient (line 141) | def gradient(self, gradient):
    method image (line 144) | def image(self, src=None, opacity=1, rect=None, pattern=True):
    method shadow (line 198) | def shadow(self, clip=None, radius=10, color=Color.from_rgb(0,0,0,1)):
    method Composite (line 212) | def Composite(pens, rect, save_to, scale=1, context=None, style=None):
    method PDFOnePage (line 234) | def PDFOnePage(pens, rect, save_to, scale=1):
    method PDFMultiPage (line 240) | def PDFMultiPage(pages, rect, save_to, scale=1):
    method SVG (line 247) | def SVG(pens, rect, save_to, scale=1):
    method CompositeToCanvas (line 254) | def CompositeToCanvas(pens, rect, canvas, scale=1, style=None):
    method Precompose (line 343) | def Precompose(pens, rect, fmt=None, context=None, scale=1, disk=False...
    method ReadImage (line 382) | def ReadImage(src):

FILE: packages/coldtype-core/src/coldtype/pens/svgpen.py
  function pointToString (line 14) | def pointToString(pt):
  class SVGPathPen (line 18) | class SVGPathPen(BasePen):
    method __init__ (line 20) | def __init__(self, glyphSet):
    method _handleAnchor (line 27) | def _handleAnchor(self):
    method _moveTo (line 38) | def _moveTo(self, pt):
    method _lineTo (line 59) | def _lineTo(self, pt):
    method _curveToOne (line 121) | def _curveToOne(self, pt1, pt2, pt3):
    method _qCurveToOne (line 136) | def _qCurveToOne(self, pt1, pt2):
    method _closePath (line 151) | def _closePath(self):
    method _endPath (line 162) | def _endPath(self):
    method getCommands (line 173) | def getCommands(self):
  class SVGPen (line 177) | class SVGPen(DrawablePenMixin, SVGPathPen):
    method __init__ (line 178) | def __init__(self, dat, h):
    method _endPath (line 187) | def _endPath(self):
    method fill (line 198) | def fill(self, color):
    method stroke (line 207) | def stroke(self, weight=1, color=None, dash=None, miter=None):
    method rgba (line 220) | def rgba(self, color):
    method rect (line 224) | def rect(self, rect):
    method shadow (line 233) | def shadow(self, clip=None, radius=10, alpha=0.3, color=Color.from_rgb...
    method gradient (line 262) | def gradient(self, gradient):
    method image (line 276) | def image(self, src=None, opacity=None, rect=None):
    method asSVG (line 298) | def asSVG(self, style=None):
    method Composite (line 316) | def Composite(pens, rect,
    method Animation (line 346) | def Animation(frames, rect, fps):
  function show_animation (line 367) | def show_animation(a:animation):
  function a1 (line 375) | def a1(f):

FILE: packages/coldtype-core/src/coldtype/pens/translationpen.py
  function calcVector (line 38) | def calcVector(point1, point2):
  function calcAngle (line 46) | def calcAngle(point1, point2):
  function polarCoord (line 51) | def polarCoord(xy, angle, distance):
  function calcArea (line 58) | def calcArea(points):
  function firstDerivative (line 68) | def firstDerivative(xy1, cxy1, cxy2, xy2, value):
  function bezierTangent (line 78) | def bezierTangent(a, b, c, d, t):
  class TranslationPen (line 84) | class TranslationPen(BasePen):
    method __init__ (line 92) | def __init__(self, otherPen, frontAngle=0, frontWidth=20):
    method _moveTo (line 99) | def _moveTo(self, pt):
    method _lineTo (line 103) | def _lineTo(self, pt1):
    method _curveToOne (line 112) | def _curveToOne(self, c1, c2, pt1):
    method endPath (line 129) | def endPath(self):
    method closePath (line 133) | def closePath(self):
    method splitAtAngledExtremas (line 143) | def splitAtAngledExtremas(self, pt0, pt1, pt2, pt3):
    method translatedCurveSegment (line 158) | def translatedCurveSegment(self, pt0, c1, c2, pt1):
    method translatedLineSegment (line 172) | def translatedLineSegment(self, pt0, pt1):
    method getPen (line 184) | def getPen(self, points):
    method getReversePen (line 193) | def getReversePen(self):
    method addComponent (line 199) | def addComponent(self, baseGlyphName, transformation):

FILE: packages/coldtype-core/src/coldtype/physics/pymunk.py
  function polygon (line 5) | def polygon(samples=5):
  function segments (line 19) | def segments(body, flatten=30):

FILE: packages/coldtype-core/src/coldtype/random.py
  function random_series (line 3) | def random_series(start=0, end=1, seed=0, count=5000, ease=None, mod=Non...

FILE: packages/coldtype-core/src/coldtype/renderable/animation.py
  function raw_gifski (line 21) | def raw_gifski(width, fps, frames, output_path, open=False):
  function gifski (line 36) | def gifski(a:"animation", passes, open=False):
  class animation (line 53) | class animation(renderable, Timeable):
    method __init__ (line 57) | def __init__(self,
    method __call__ (line 90) | def __call__(self, func):
    method reset_timeline (line 95) | def reset_timeline(self, timeline):
    method folder (line 110) | def folder(self, filepath):
    method all_frames (line 113) | def all_frames(self):
    method _active_frames (line 116) | def _active_frames(self, renderer_state):
    method active_frames (line 122) | def active_frames(self, action, renderer_state, indices):
    method workarea (line 144) | def workarea(self):
    method jump (line 152) | def jump(self, current, direction):
    method pass_suffix (line 165) | def pass_suffix(self, index=0):
    method render_and_rasterize (line 180) | def render_and_rasterize(self, scale=1, style=None) -> str:
    method passes (line 187) | def passes(self, action, renderer_state, indices=[]):
    method running_in_viewer (line 218) | def running_in_viewer(self):
    method run (line 221) | def run(self, render_pass, renderer_state, render_bg=True):
    method recording_path (line 232) | def recording_path(self):
    method runpost (line 238) | def runpost(self, result, render_pass, renderer_state, config):
    method package (line 256) | def package(self):
    method fn_to_frame (line 259) | def fn_to_frame(self, fn_name):
    method frame_to_fn (line 262) | def frame_to_fn(self, fi) -> Tuple[str, dict]:
    method viewOffset (line 265) | def viewOffset(self, offset):
    method contactsheet_renderable (line 271) | def contactsheet_renderable(self, scale=1, sl=slice(None, None, 1)):
    method contactsheet (line 280) | def contactsheet(self, r:Rect=None, scale=1, sl=slice(None, None, 1), ...
    method frame_img (line 307) | def frame_img(self, fi):
    method export (line 313) | def export(self, fmt, date=False, loops=1, open=1, audio=None, audio_l...
    method gifski (line 329) | def gifski(self, open=False):
  class aframe (line 335) | class aframe(animation):
    method __init__ (line 336) | def __init__(self,
  class FFMPEGExport (line 345) | class FFMPEGExport():
    method __init__ (line 346) | def __init__(self, a:animation,
    method h264 (line 419) | def h264(self):
    method prores (line 429) | def prores(self):
    method gif (line 439) | def gif(self):
    method write (line 444) | def write(self, verbose=False, name=None):
    method open (line 476) | def open(self):
  class fontpreview (line 484) | class fontpreview(animation):
    method __init__ (line 485) | def __init__(self, font_re, font_dir=None, rect=(1200, 150), limit=25,...
    method passes (line 499) | def passes(self, action, renderer_state, indices=[]):
  class image_sequence (line 511) | class image_sequence(animation):
    method __init__ (line 518) | def __init__(self, images, fps, looping=False, loops=1, **kwargs):
    method normalize_result (line 531) | def normalize_result(self, pens):
    method run (line 534) | def run(self, render_pass, renderer_state):
  class skia_direct_animation (line 557) | class skia_direct_animation(animation):
    method __init__ (line 558) | def __init__(self, rect=(1080, 1080), **kwargs):
    method run (line 561) | def run(self, render_pass, renderer_state, canvas=None):

FILE: packages/coldtype-core/src/coldtype/renderable/renderable.py
  class Memory (line 22) | class Memory(object):
    method __init__ (line 23) | def __init__(self, i, data) -> None:
    method add (line 32) | def add(self, k, v):
    method __eq__ (line 38) | def __eq__(self, other):
  class ColdtypeCeaseConfigException (line 50) | class ColdtypeCeaseConfigException(Exception):
  class Overlay (line 53) | class Overlay(Enum):
  class Action (line 59) | class Action(Enum):
  class RenderPass (line 82) | class RenderPass():
    method __init__ (line 83) | def __init__(self, render:"renderable", action, idx, args):
    method __repr__ (line 99) | def __repr__(self):
  class runnable (line 103) | class runnable():
    method __init__ (line 105) | def __init__(self, solo=False, cond=None):
    method __call__ (line 120) | def __call__(self, func):
    method post_read (line 126) | def post_read(self):
    method run (line 129) | def run(self):
    method folder (line 132) | def folder(self, filepath):
  class renderable (line 136) | class renderable():
    method __init__ (line 140) | def __init__(self,
    method choose (line 256) | def choose(self, fields):
    method post_read (line 263) | def post_read(self):
    method __repr__ (line 266) | def __repr__(self):
    method add_watchee (line 269) | def add_watchee(self, w, flag=None):
    method __call__ (line 283) | def __call__(self, func):
    method folder (line 290) | def folder(self, filepath):
    method pass_suffix (line 293) | def pass_suffix(self, index=0):
    method pass_prefix (line 296) | def pass_prefix(self):
    method pass_path (line 306) | def pass_path(self, index=0):
    method pass_img (line 314) | def pass_img(self, index=0):
    method passes (line 318) | def passes(self, action, renderer_state, indices=[]):
    method package (line 321) | def package(self):
    method write_reset_memory (line 324) | def write_reset_memory(self, renderer_state, new_memory, overwrite, in...
    method run (line 354) | def run(self, render_pass, renderer_state, render_bg=True):
    method show_xray (line 394) | def show_xray(self, result):
    method show_grid (line 410) | def show_grid(self, result, settings):
    method runpost (line 430) | def runpost(self, result, render_pass:RenderPass, renderer_state, conf...
    method precompose (line 443) | def precompose(self, result, scale):
    method postprocessor (line 447) | def postprocessor(self, result):
    method noop (line 458) | def noop(self, *args, **kwargs):
    method hide (line 461) | def hide(self):
    method _hide (line 465) | def _hide(self):
    method show (line 469) | def show(self):
    method _normalize_result (line 473) | def _normalize_result(self, pens):
    method normalize_result (line 481) | def normalize_result(self, pens):
    method run_normal (line 492) | def run_normal(self, render_pass, renderer_state=None, render_bg=True):
    method frame_result (line 496) | def frame_result(self, fi, post=False, frame=False, render_bg=True):
    method rasterize (line 506) | def rasterize(self, config, content, render_pass):
    method render_and_rasterize_frame (line 509) | def render_and_rasterize_frame(self, frame, scale=1, style=None) -> str:
    method render_and_rasterize (line 518) | def render_and_rasterize(self, scale=1, style=None) -> str:
    method render_to_disk (line 521) | def render_to_disk(self, print_paths=False, return_base64=False, retur...
    method _profile_render_all (line 557) | def _profile_render_all(self):
    method profile (line 563) | def profile(self, file="profile.profile"):
  class example (line 568) | class example(renderable):
    method __init__ (line 569) | def __init__(self, rect=(800, 200), bg=1, **kwargs):
  class skia_direct (line 573) | class skia_direct(renderable):
    method __init__ (line 574) | def __init__(self, rect=(1080, 1080), **kwargs):
    method run (line 577) | def run(self, render_pass, renderer_state, canvas=None):
  class iconset (line 603) | class iconset(renderable):
    method __init__ (line 606) | def __init__(self, sizes=[128, 1024], **kwargs):
    method folder (line 610) | def folder(self, filepath):
    method passes (line 613) | def passes(self, action, renderer_state, indices=[]): # TODO could use...
    method package (line 619) | def package(self):

FILE: packages/coldtype-core/src/coldtype/renderable/tools.py
  function set_ffmpeg_command (line 5) | def set_ffmpeg_command(cmd):

FILE: packages/coldtype-core/src/coldtype/renderable/ui.py
  class UIState (line 5) | class UIState():
    method __init__ (line 6) | def __init__(self,
  class ui (line 24) | class ui(animation):
    method __init__ (line 25) | def __init__(self,
    method passes (line 44) | def passes(self, action, renderer_state, indices=[]):

FILE: packages/coldtype-core/src/coldtype/renderer/__init__.py
  class Renderer (line 57) | class Renderer():
    method Argparser (line 58) | def Argparser(name="coldtype", file=True, defaults={}, nargs=[]):
    method __init__ (line 124) | def __init__(self, parser, winmans_class=Winmans, profile=None):
    method on_args_parsed (line 237) | def on_args_parsed(self):
    method on_load_reader (line 240) | def on_load_reader(self, source_reader):
    method prenormalize_filepath (line 243) | def prenormalize_filepath(self, filepath):
    method reset_filepath (line 255) | def reset_filepath(self, filepath, reload=False):
    method watchee_paths (line 309) | def watchee_paths(self):
    method print_error (line 312) | def print_error(self):
    method renderable_error (line 317) | def renderable_error(self, rect):
    method show_error (line 329) | def show_error(self):
    method show_message (line 344) | def show_message(self, message, scale=1):
    method play_sound (line 347) | def play_sound(self, sound_name):
    method reload (line 351) | def reload(self, trigger):
    method animation (line 418) | def animation(self):
    method buildrelease_fn (line 424) | def buildrelease_fn(self, fnname="release"):
    method normalize_fmt (line 434) | def normalize_fmt(self, render):
    method renderables (line 456) | def renderables(self, trigger, previewing=False):
    method calculate_window_size (line 477) | def calculate_window_size(self, rs:List[renderable]):
    method _single_thread_render (line 513) | def _single_thread_render(self, trigger, indices=[], output_transform=...
    method render (line 694) | def render(self, trigger, indices=[], ditto_last=False) -> Tuple[int, ...
    method render_multiplexed (line 751) | def render_multiplexed(self, frames):
    method rasterize (line 814) | def rasterize(self, content, render, path, rp):
    method reload_and_render (line 868) | def reload_and_render(self, trigger, watchable=None, indices=None):
    method main (line 902) | def main(self):
    method start (line 925) | def start(self):
    method before_start (line 969) | def before_start(self):
    method initialize_gui_and_server (line 972) | def initialize_gui_and_server(self):
    method on_start (line 999) | def on_start(self):
    method on_request_from_render (line 1002) | def on_request_from_render(self, render, request, action=None):
    method on_hotkey (line 1005) | def on_hotkey(self, key_combo, action):
    method on_message (line 1008) | def on_message(self, message, action):
    method jump_to_fn (line 1019) | def jump_to_fn(self, fn_name):
    method lookup_action (line 1030) | def lookup_action(self, action):
    method additional_actions (line 1033) | def additional_actions(self):
    method collect_passes (line 1036) | def collect_passes(self):
    method on_release (line 1047) | def on_release(self, build=False, number=None):
    method shortcut_to_action (line 1103) | def shortcut_to_action(self, shortcut):
    method open_in_editor (line 1415) | def open_in_editor(self, filepath=None, line=None):
    method on_shortcut (line 1434) | def on_shortcut(self, shortcut):
    method on_stdin (line 1444) | def on_stdin(self, stdin):
    method on_action (line 1448) | def on_action(self, action, message=None) -> bool:
    method clear_last_render (line 1504) | def clear_last_render(self):
    method turn_over (line 1509) | def turn_over(self):
    method on_modified (line 1572) | def on_modified(self, path, flag):
    method add_watchee (line 1621) | def add_watchee(self, watchee):
    method execute_string_as_shortcut_or_action (line 1637) | def execute_string_as_shortcut_or_action(self, shortcut, key, args=[]):
    method reset_renderers (line 1679) | def reset_renderers(self):
    method restart (line 1684) | def restart(self):
    method on_exit (line 1771) | def on_exit(self, restart=False):
  function main (line 1813) | def main(winmans=Winmans, profile=None):
  function main_b3d (line 1818) | def main_b3d():

FILE: packages/coldtype-core/src/coldtype/renderer/config.py
  function true_false_or_none (line 8) | def true_false_or_none(x):
  class ConfigOption (line 17) | class ConfigOption(Enum):
    method Help (line 77) | def Help(e):
    method AddCommandLineArgs (line 147) | def AddCommandLineArgs(pargs:dict,
    method ShortToConfigOption (line 160) | def ShortToConfigOption(short):
  class ColdtypeConfig (line 169) | class ColdtypeConfig():
    method __init__ (line 170) | def __init__(self,
    method values (line 213) | def values(self):

FILE: packages/coldtype-core/src/coldtype/renderer/keyboard.py
  class KeyboardShortcut (line 29) | class KeyboardShortcut(Enum):
  function symbol_to_glfw (line 276) | def symbol_to_glfw(s):
  function shortcuts_keyed (line 694) | def shortcuts_keyed():

FILE: packages/coldtype-core/src/coldtype/renderer/reader.py
  function apply_syntax_mods (line 27) | def apply_syntax_mods(filepath, source_code, renderer=None, source_reade...
  function read_source_to_tempfile (line 104) | def read_source_to_tempfile(filepath:Path,
  function run_source (line 171) | def run_source(filepath, codepath, inputs, memory, config, **kwargs):
  function renderable_to_output_folder (line 185) | def renderable_to_output_folder(filepath, renderable, override=None):
  function find_renderables (line 194) | def find_renderables(
  function filter_renderables (line 247) | def filter_renderables(filtered_rs,
  class SourceReader (line 297) | class SourceReader():
    method __init__ (line 298) | def __init__(self,
    method print_docstring (line 325) | def print_docstring(self):
    method Script (line 337) | def Script(name):
    method Demos (line 346) | def Demos() -> dict[str,Path]:
    method Tools (line 350) | def Tools() -> dict[str,Path]:
    method Demo (line 354) | def Demo(name):
    method LoadDemo (line 365) | def LoadDemo(demoname, **inputs):
    method FrameResult (line 371) | def FrameResult(name, frame, inputs={}, renderer_state=None):
    method read_configs (line 378) | def read_configs(self, args, filepath):
    method find_sources (line 458) | def find_sources(self, dirpath, recursive=False):
    method blender_io (line 480) | def blender_io(self):
    method normalize_filepath (line 489) | def normalize_filepath(self, filepath:Path, dirindex=0):
    method adjacents (line 512) | def adjacents(self):
    method reset_filepath (line 516) | def reset_filepath(self, filepath:Path, code:str=None, reload:bool=Tru...
    method find_versions (line 545) | def find_versions(self, initial, restart_count):
    method reload (line 597) | def reload(self,
    method write_code_to_tmpfile (line 633) | def write_code_to_tmpfile(self, code):
    method renderable_candidates (line 643) | def renderable_candidates(self,
    method renderables (line 683) | def renderables(self,
    method frame_results (line 698) | def frame_results(self, frame, class_filters=[], renderer_state=None):
    method unlink (line 711) | def unlink(self):
  class Programs (line 721) | class Programs():
    method Demo (line 723) | def Demo():
    method Blank (line 727) | def Blank():

FILE: packages/coldtype-core/src/coldtype/renderer/state.py
  class RendererStateEncoder (line 7) | class RendererStateEncoder(json.JSONEncoder):
    method default (line 8) | def default(self, o):
  class RendererState (line 14) | class RendererState():
    method __init__ (line 15) | def __init__(self, renderer):
    method reset (line 47) | def reset(self, ignore_current_state=False):
    method clear (line 63) | def clear(self):
    method filepath (line 69) | def filepath(self):
    method midi (line 76) | def midi(self):
    method persist (line 79) | def persist(self):
    method record_cursor (line 86) | def record_cursor(self, pos):
    method on_mouse_button (line 91) | def on_mouse_button(self, pos, btn, action, mods):
    method on_mouse_move (line 116) | def on_mouse_move(self, pos):
    method mod_preview_scale (line 129) | def mod_preview_scale(self, inc, absolute=0):
    method toggle_overlay (line 137) | def toggle_overlay(self, overlay, force=None):

FILE: packages/coldtype-core/src/coldtype/renderer/ui.py
  function uiView (line 11) | def uiView(_renderable):

FILE: packages/coldtype-core/src/coldtype/renderer/utils.py
  class Watchable (line 6) | class Watchable(Enum):
  class bcolors (line 13) | class bcolors:
  function bc_print (line 24) | def bc_print(which, *txt):
  function bytesto (line 28) | def bytesto(bytes):
  function chunks (line 35) | def chunks(lst, n):
  function file_and_line_to_def (line 41) | def file_and_line_to_def(filepath, lineno):
  function path_hash (line 58) | def path_hash(path):

FILE: packages/coldtype-core/src/coldtype/renderer/winman/__init__.py
  function monitor_stdin (line 15) | def monitor_stdin():
  class Winmans (line 31) | class Winmans():
    method __init__ (line 32) | def __init__(self, renderer, config:ColdtypeConfig):
    method should_glfwskia (line 69) | def should_glfwskia(self):
    method should_midi (line 72) | def should_midi(self):
    method should_audio (line 75) | def should_audio(self):
    method should_blender (line 78) | def should_blender(self):
    method add_viewers (line 81) | def add_viewers(self):
    method did_reset_extent (line 101) | def did_reset_extent(self, extent):
    method did_reload (line 105) | def did_reload(self, filepath, source_reader):
    method did_reload_animation (line 109) | def did_reload_animation(self, rs):
    method did_render (line 113) | def did_render(self, count, ditto_last, renders):
    method found_blend_files (line 117) | def found_blend_files(self, blend_files):
    method all (line 122) | def all(self):
    method map (line 125) | def map(self):
    method set_title (line 130) | def set_title(self, text):
    method mod_title (line 134) | def mod_title(self, state, value):
    method reset (line 144) | def reset(self):
    method terminate (line 148) | def terminate(self):
    method toggle_rendered (line 151) | def toggle_rendered(self, force=None):
    method toggle_playback (line 158) | def toggle_playback(self):
    method frame_offset (line 170) | def frame_offset(self, offset):
    method should_close (line 177) | def should_close(self):
    method send_to_external (line 180) | def send_to_external(self, action, **kwargs):
    method poll (line 183) | def poll(self):
    method turn_over (line 187) | def turn_over(self):
    method run_loop (line 229) | def run_loop(self):

FILE: packages/coldtype-core/src/coldtype/renderer/winman/audio.py
  class WinmanAudio (line 16) | class WinmanAudio(WinmanPassthrough):
    method Possible (line 18) | def Possible():
    method __init__ (line 21) | def __init__(self):
    method recycle (line 28) | def recycle(self):
    method reload_with_animation (line 38) | def reload_with_animation(self, a:animation):
    method play_frame (line 48) | def play_frame(self, frame):
    method play_once (line 79) | def play_once(self, animation):
    method terminate (line 102) | def terminate(self):

FILE: packages/coldtype-core/src/coldtype/renderer/winman/blender.py
  class WinmanBlender (line 10) | class WinmanBlender(WinmanPassthrough):
    method __init__ (line 11) | def __init__(self, config):
    method launch (line 25) | def launch(self, blender_io:BlenderIO):
    method write_command (line 36) | def write_command(self, cmd, arg, kwargs=[]):
    method did_render (line 45) | def did_render(self, count, ditto_last, renders):
    method reload (line 51) | def reload(self, filepath, source_reader):
    method toggle_playback (line 56) | def toggle_playback(self, toggle):
    method frame_offset (line 59) | def frame_offset(self, offset):
    method terminate (line 62) | def terminate(self):

FILE: packages/coldtype-core/src/coldtype/renderer/winman/glfwskia.py
  function glfw_generic_setup (line 46) | def glfw_generic_setup():
  class WinmanGLFWSkiaBackground (line 57) | class WinmanGLFWSkiaBackground(WinmanPassthrough):
    method __init__ (line 58) | def __init__(self, config:ColdtypeConfig, renderer):
    method reset_extent (line 72) | def reset_extent(self, extent):
  class WinmanGLFWSkia (line 76) | class WinmanGLFWSkia():
    method __init__ (line 77) | def __init__(self, config:ColdtypeConfig, renderer, background=False):
    method find_primary_monitor (line 152) | def find_primary_monitor(self):
    method create_surface (line 178) | def create_surface(self, rect):
    method get_content_scale (line 195) | def get_content_scale(self):
    method content_scale_changed (line 208) | def content_scale_changed(self):
    method update_window (line 215) | def update_window(self, frect):
    method set_title (line 259) | def set_title(self, text):
    method set_window_opacity (line 262) | def set_window_opacity(self, relative=None, absolute=None):
    method reset (line 274) | def reset(self):
    method should_close (line 277) | def should_close(self):
    method focus (line 280) | def focus(self, force=False):
    method allow_mouse (line 286) | def allow_mouse(self):
    method on_scroll (line 289) | def on_scroll(self, win, xoff, yoff):
    method on_focus (line 295) | def on_focus(self, win, focus):
    method on_resize (line 298) | def on_resize(self, win, w, h):
    method on_mouse_button (line 303) | def on_mouse_button(self, _, btn, action, mods):
    method on_mouse_move (line 318) | def on_mouse_move(self, _, xpos, ypos):
    method on_key (line 329) | def on_key(self, win, key, scan, action, mods):
    method on_char (line 336) | def on_char(self, win, key):
    method repeatable_shortcuts (line 341) | def repeatable_shortcuts(self):
    method on_potential_shortcut (line 344) | def on_potential_shortcut(self, key, action, mods):
    method reset_extent (line 381) | def reset_extent(self, extent):
    method turn_over (line 388) | def turn_over(self):
    method poll (line 438) | def poll(self):
    method draw_preview (line 441) | def draw_preview(self, idx, scale, canvas, rect, waiter):
    method terminate (line 523) | def terminate(self):

FILE: packages/coldtype-core/src/coldtype/renderer/winman/midi.py
  class MIDIWatcher (line 8) | class MIDIWatcher():
    method __init__ (line 9) | def __init__(self, config, state, on_shortcut):
    method monitor (line 44) | def monitor(self, playing):

FILE: packages/coldtype-core/src/coldtype/renderer/winman/passthrough.py
  class WinmanPassthrough (line 2) | class WinmanPassthrough():
    method __init__ (line 3) | def __init__(self):
    method set_title (line 6) | def set_title(self, text):
    method terminate (line 10) | def terminate(self):
    method reset (line 13) | def reset(self):
    method turn_over (line 16) | def turn_over(self):
    method should_close (line 19) | def should_close(self):

FILE: packages/coldtype-core/src/coldtype/runon/_path.py
  class P (line 16) | class P(Runon):
    method FromPens (line 20) | def FromPens(pens):
    method __init__ (line 52) | def __init__(self, *vals, **kwargs):
    method reset_val (line 94) | def reset_val(self):
    method val_present (line 99) | def val_present(self):
    method copy_val (line 102) | def copy_val(self, val):
    method printable_val (line 108) | def printable_val(self):
    method printable_data (line 112) | def printable_data(self):
    method to_code (line 120) | def to_code(self, classname="P", additional_lines=[]):
    method normalize_attr_value (line 167) | def normalize_attr_value(self, k, v):
    method style (line 173) | def style(self, style="_default"):
    method unframe (line 182) | def unframe(self):
    method frame (line 188) | def frame(self, fn_or_rect):
    method pen (line 195) | def pen(self, frame=True):
    method down (line 217) | def down(self):
    method pens (line 220) | def pens(self):
    method reverse (line 228) | def reverse(self, recursive=False, winding=True):
    method index (line 241) | def index(self, idx, fn=None):
    method indices (line 247) | def indices(self, idxs, fn=None):
    method wordPens (line 257) | def wordPens(self, pred=lambda x: x.glyphName == "space", consolidate=...
    method linebreak (line 275) | def linebreak(self, w, leading=False, track_out=False):
    method interpolate (line 306) | def interpolate(self, value, other, frame=False):
    method replaceGlyph (line 334) | def replaceGlyph(self, glyphName, replacement, limit=None):
    method findGlyph (line 339) | def findGlyph(self, glyphName, fn=None):
    method _repr_html_ (line 342) | def _repr_html_(self):
    method text (line 350) | def text(self,
    method reversePens (line 366) | def reversePens(self):
    method vl (line 372) | def vl(self, value):
    method _pens (line 377) | def _pens(self):
    method value (line 381) | def value(self):
    method glyphName (line 385) | def glyphName(self):
    method drop (line 388) | def drop(self, amount, edge):
    method take (line 392) | def take(self, amount, edge):
    method inset (line 396) | def inset(self, ax, ay):
    method Enumerate (line 401) | def Enumerate(enumerable, enumerator):
    method addFrame (line 404) | def addFrame(self, frame):
    method xAlignToFrame (line 407) | def xAlignToFrame(self):
    method pvl (line 410) | def pvl(self):
    method dots (line 417) | def dots(self, radius=4, square=False):
  function runonCast (line 432) | def runonCast():

FILE: packages/coldtype-core/src/coldtype/runon/mixins/DrawingMixin.py
  class DrawingMixin (line 10) | class DrawingMixin():
    method _normPointSplat (line 11) | def _normPointSplat(self, p):
    method moveTo (line 19) | def moveTo(self, *p):
    method m (line 24) | def m(self, *p):
    method lineTo (line 27) | def lineTo(self, *p):
    method l (line 35) | def l(self, *p):
    method qCurveTo (line 38) | def qCurveTo(self, *points):
    method q (line 42) | def q(self, *p):
    method curveTo (line 45) | def curveTo(self, *points):
    method c (line 49) | def c(self, *p):
    method closePath (line 52) | def closePath(self):
    method cp (line 56) | def cp(self):
    method endPath (line 59) | def endPath(self):
    method ep (line 63) | def ep(self):
    method addComponent (line 66) | def addComponent(self, baseGlyphName, transformation):
    method points (line 70) | def points(self, pts, close=True):
    method point_list (line 80) | def point_list(self, random_seed=None):
    method replay (line 91) | def replay(self, pen):
    method record (line 98) | def record(self, pen):
    method unended (line 114) | def unended(self):
    method fully_close_path (line 124) | def fully_close_path(self):
    method rect (line 141) | def rect(self, rect):
    method roundedRect (line 153) | def roundedRect(self, rect, hr, vr=None, scale=True):
    method oval (line 188) | def oval(self, rect):
    method superellipse (line 198) | def superellipse(self, r, factor=65):
    method line (line 206) | def line(self, points, moveTo=True, endPath=True):
    method hull (line 222) | def hull(self, points):
    method round (line 230) | def round(self):
    method round_to (line 234) | def round_to(self, rounding):
    method interpCurveTo (line 259) | def interpCurveTo(self, p1, f1, p2, f2, to, inset=0):
    method ioc (line 267) | def ioc(self, pt, slope=0, fA=0, fB=85):
    method ioEaseCurveTo (line 270) | def ioEaseCurveTo(self, pt, slope=0, fA=0, fB=85):
    method bxc (line 320) | def bxc(self, pt, point, factor=0.65, po=(0, 0), mods={}, flatten=False):
    method roundedCorner (line 323) | def roundedCorner(self, pt, point, multipliers, offset=4, factor=65):
    method boxCurveTo (line 329) | def boxCurveTo(self, pt, point, factor=0.65, po=(0, 0), mods={}, flatt...
    method mirror (line 407) | def mirror(self, factors, point=None):
    method mirrorx (line 414) | def mirrorx(self, point=None):
    method mirrory (line 417) | def mirrory(self, point=None):
    method mirrorxy (line 420) | def mirrorxy(self, point=None):
    method pattern (line 423) | def pattern(self, rect, clip=False):
    method withRect (line 440) | def withRect(self, rect, fn:Callable[[Rect, "P"], "P"]) -> "P":
    method gridlines (line 444) | def gridlines(self, rect, x=20, y=None, absolute=False):
    method ez (line 463) | def ez(self, r, start_y, end_y, s):
    method segments (line 470) | def segments(self, all_curves=False):
    method join (line 499) | def join(self):
    method substructure (line 509) | def substructure(self):

FILE: packages/coldtype-core/src/coldtype/runon/mixins/FXMixin.py
  class FXMixin (line 15) | class FXMixin():
    method trim_start (line 16) | def trim_start(self):
    method trim_end (line 24) | def trim_end(self):
    method q2c (line 37) | def q2c(self):
    method flatten (line 60) | def flatten(self, length=10, segmentLines=True):
    method smooth (line 75) | def smooth(self):
    method catmull (line 87) | def catmull(self, points, close=False):
    method roughen (line 117) | def roughen(self, amplitude=10, threshold=10, ignore_ends=False, seed=...
    method explode (line 146) | def explode(self):
    method implode (line 166) | def implode(self):
    method map_points (line 177) | def map_points(self, fn, filter_fn=None):
    method mod_contour (line 193) | def mod_contour(self, contour_index, mod_fn=None):
    method filterContours (line 202) | def filterContours(self, filter_fn):
    method repeat (line 212) | def repeat(self, times=1):
    method outline (line 226) | def outline(self,
    method project (line 257) | def project(self, angle, width):
    method castshadow (line 262) | def castshadow(self,
    method understroke (line 288) | def understroke(self,

FILE: packages/coldtype-core/src/coldtype/runon/mixins/GeometryMixin.py
  class GeometryMixin (line 5) | class GeometryMixin():
    method nsew (line 6) | def nsew(self):
    method avg (line 46) | def avg(self):
    method ecx (line 58) | def ecx(self):
    method ecy (line 63) | def ecy(self):
    method edge (line 67) | def edge(self, e):
    method point (line 78) | def point(self, pt):
    method pne (line 100) | def pne(self): return self.point("NE")
    method pnw (line 102) | def pnw(self): return self.point("NW")
    method psw (line 104) | def psw(self): return self.point("SW")
    method pse (line 106) | def pse(self): return self.point("SE")
    method pn (line 108) | def pn(self): return self.point("N")
    method ps (line 110) | def ps(self): return self.point("S")
    method pe (line 112) | def pe(self): return self.point("E")
    method pw (line 114) | def pw(self): return self.point("W")
    method pc (line 116) | def pc(self): return self.point("C")
    method en (line 118) | def en(self): return self.nsew()[0]
    method es (line 120) | def es(self): return self.nsew()[1]
    method ee (line 122) | def ee(self): return self.nsew()[2]
    method ew (line 124) | def ew(self): return self.nsew()[3]

FILE: packages/coldtype-core/src/coldtype/runon/mixins/GlyphMixin.py
  class GlyphMixin (line 6) | class GlyphMixin():
    method glyph (line 7) | def glyph(self, glyph, glyphSet=None, layerComponents=False):
    method toGlyph (line 43) | def toGlyph(self, name=None, width=None, allow_blank=False):

FILE: packages/coldtype-core/src/coldtype/runon/mixins/LayoutMixin.py
  class LayoutMixin (line 16) | class LayoutMixin():
    method bounds (line 17) | def bounds(self):
    method _normT (line 44) | def _normT(self, th, tv, tx, ty, t):
    method empty (line 71) | def empty(self):
    method ambit (line 74) | def ambit(self, th=None, tv=None, tx=0, ty=0, t=None) -> Rect:
    method align (line 149) | def align(self,
    method _align_compass (line 197) | def _align_compass(self, compass, rect, tx=1, ty=0):
    method xalign (line 211) | def xalign(self, rect=None, x="centerx", th=None, tv=None, tx=1, ty=0):
    method yalign (line 230) | def yalign(self, rect=None, y="centery", th=None, tv=None, tx=0, ty=1):
    method _normPoint (line 244) | def _normPoint(self, point=None, th=None, tv=None, tx=0, ty=0, **kwargs):
    method transform (line 275) | def transform(self, transform, transformFrame=True):
    method matrix (line 301) | def matrix(self, a, b, c, d, e, f, transformFrame=False):
    method invertYAxis (line 304) | def invertYAxis(self, height):
    method nonlinear_transform (line 311) | def nonlinear_transform(self, fn):
    method translate (line 328) | def translate(self, x, y=None, transformFrame=True):
    method shift (line 337) | def shift(self, dx, dy, tx=1, ty=1):
    method zero (line 344) | def zero(self, th=None, tv=None, tx=0, ty=0):
    method centerZero (line 350) | def centerZero(self, th=None, tv=None, tx=0, ty=0):
    method centerPoint (line 359) | def centerPoint(self, rect, pt, interp=1, th=None, tv=None, tx=1, ty=0...
    method skew (line 369) | def skew(self, x=0, y=0, point=None, th=None, tv=None, tx=1, ty=0, **k...
    method rotate (line 379) | def rotate(self, degrees, point=None, th=None, tv=None, tx=1, ty=1, **...
    method r90 (line 392) | def r90(self, multiplier, point=None, tx=1, ty=1, **kwargs):
    method scale (line 395) | def scale(self, scaleX, scaleY=None, point=None, th=None, tv=None, tx=...
    method flipx (line 408) | def flipx(self):
    method flipy (line 411) | def flipy(self):
    method scaleToRect (line 414) | def scaleToRect(self, rect, preserveAspect=True, shrink_only=False, tx...
    method scaleToWidth (line 443) | def scaleToWidth(self, w, shrink_only=False):
    method scaleToHeight (line 451) | def scaleToHeight(self, h, shrink_only=False):
    method distribute (line 460) | def distribute(self, v=False, tracks=None, th=None, tv=None, tx=0, ty=0):
    method spread (line 484) | def spread(self, tracking=0, tx=0, zero=False):
    method stack (line 499) | def stack(self, leading=0, ty=0, zero=False):
    method track (line 512) | def track(self, t, v=False):
    method lead (line 521) | def lead(self, leading):
    method grid (line 535) | def grid(self, every, spread=0, stack=0, zero=False):
    method gridlayer (line 556) | def gridlayer(self, nx, ny=None, track=0, lead=0):
    method pasteup (line 564) | def pasteup(self, styler=lambda p: p.f(bw(1)), padding=(5, 5), tx=1, t...
    method pattern_repeat (line 570) | def pattern_repeat(self, r):
    method track_with_width (line 587) | def track_with_width(self, t):
    method track_to_width (line 596) | def track_to_width(self, width, pullToEdges=False, r=0):
    method track_to_rect (line 599) | def track_to_rect(self, rect, pullToEdges=False, r=0):
    method connect (line 626) | def connect(self, *others):
    method x (line 632) | def x(self): return self.ambit().x
    method y (line 634) | def y(self): return self.ambit().y
    method w (line 636) | def w(self): return self.ambit().w
    method h (line 638) | def h(self): return self.ambit().h
    method tx (line 641) | def tx(self): return self.ambit(tx=1).x
    method ty (line 643) | def ty(self): return self.ambit(ty=1).y
    method tw (line 645) | def tw(self): return self.ambit(tx=1).w
    method th (line 647) | def th(self): return self.ambit(ty=1).h

FILE: packages/coldtype-core/src/coldtype/runon/mixins/PathopsMixin.py
  class PathopsMixin (line 4) | class PathopsMixin():
    method _pathop (line 5) | def _pathop(self, otherPen=None, operation=BooleanOp.XOR, use_skia_pat...
    method difference (line 26) | def difference(self, otherPen=None):
    method union (line 30) | def union(self, otherPen=None):
    method xor (line 34) | def xor(self, otherPen=None):
    method reverseDifference (line 38) | def reverseDifference(self, otherPen=None):
    method intersection (line 42) | def intersection(self, otherPen=None):
    method removeOverlap (line 46) | def removeOverlap(self, use_skia_pathops_draw=True):

FILE: packages/coldtype-core/src/coldtype/runon/mixins/SegmentingMixin.py
  class SegmentingMixin (line 10) | class SegmentingMixin():
    method distribute_on_path (line 11) | def distribute_on_path(self,
    method subsegment (line 63) | def subsegment(self, start=0, end=1):
    method point_t (line 75) | def point_t(self, t=0.5):
    method split_t (line 83) | def split_t(self, t=0.5):
    method add_pt_t (line 91) | def add_pt_t(self, cuidx, t):
    method samples (line 126) | def samples(self, interval=10, even=False):
    method onSamples (line 145) | def onSamples(self, interval=10, even=False, fn=None):
    method length (line 148) | def length(self, t=1):
    method ease_t (line 155) | def ease_t(self, e, tries=0):
    method divide (line 168) | def divide(self, length=150, floor=True, count=None, idx=0, max=None):

FILE: packages/coldtype-core/src/coldtype/runon/mixins/SerializationMixin.py
  class SerializationMixin (line 9) | class SerializationMixin():
    method pickle (line 10) | def pickle(self, dst):
    method Unpickle (line 24) | def Unpickle(self, src):
    method withJSONValue (line 29) | def withJSONValue(self, path, keys=None):
    method withSVG (line 38) | def withSVG(self, svg):
    method withSVGFile (line 46) | def withSVGFile(self, svg_file):

FILE: packages/coldtype-core/src/coldtype/runon/mixins/SonificationMixin.py
  class SonificationMixin (line 4) | class SonificationMixin():
    method _prep_for_wave (line 6) | def _prep_for_wave(self, flatten=1, centered=False):
    method toAudio (line 16) | def toAudio(self, flatten=1, centered=False, loops=3, filename=None):
    method fromAudio (line 36) | def fromAudio(self, audio, start=500, end=9500, step=1, mult=1360, sca...

FILE: packages/coldtype-core/src/coldtype/runon/mixins/StylingMixin.py
  class StylingMixin (line 9) | class StylingMixin():
    method groupedStyle (line 10) | def groupedStyle(self, st, default_style):
    method f (line 41) | def f(self, *value):
    method s (line 56) | def s(self, *value):
    method sw (line 71) | def sw(self, value):
    method dash (line 80) | def dash(self, pattern, phase=0):
    method ssw (line 83) | def ssw(self, s, sw):
    method fssw (line 88) | def fssw(self, f, s, sw, sf=0):
    method strokeFirst (line 101) | def strokeFirst(self, value=None):
    method sf (line 110) | def sf(self, value=None):
    method strokeMiter (line 114) | def strokeMiter(self, value=None):
    method sm (line 123) | def sm(self, value=None):
    method img (line 127) | def img(self, src=None, rect=Rect(0, 0, 500, 500), pattern=False, opac...
    method shadow (line 139) | def shadow(self, radius=10, color=(0, 0.3), clip=None):
    method blendmode (line 144) | def blendmode(self, blendmode=None, show=False):
    method postprocess (line 155) | def postprocess(self, fn):

FILE: packages/coldtype-core/src/coldtype/runon/path.py
  class P (line 77) | class P(Runon):
    method FromPens (line 81) | def FromPens(pens):
    method __init__ (line 113) | def __init__(self, *vals, **kwargs):
    method reset_val (line 155) | def reset_val(self):
    method val_present (line 160) | def val_present(self):
    method copy_val (line 163) | def copy_val(self, val):
    method printable_val (line 169) | def printable_val(self):
    method printable_data (line 173) | def printable_data(self):
    method to_code (line 181) | def to_code(self, classname="P", additional_lines=[]):
    method normalize_attr_value (line 228) | def normalize_attr_value(self, k, v):
    method style (line 234) | def style(self, style="_default"):
    method unframe (line 243) | def unframe(self):
    method frame (line 249) | def frame(self, fn_or_rect):
    method pen (line 256) | def pen(self, frame=True):
    method down (line 278) | def down(self):
    method pens (line 281) | def pens(self):
    method reverse (line 289) | def reverse(self, recursive=False, winding=True):
    method index (line 302) | def index(self, idx, fn=None):
    method indices (line 308) | def indices(self, idxs, fn=None):
    method wordPens (line 318) | def wordPens(self, pred=lambda x: x.glyphName == "space", consolidate=...
    method linebreak (line 336) | def linebreak(self, w, leading=False, track_out=False):
    method interpolate (line 367) | def interpolate(self, value, other, frame=False):
    method replaceGlyph (line 395) | def replaceGlyph(self, glyphName, replacement, limit=None):
    method findGlyph (line 400) | def findGlyph(self, glyphName, fn=None):
    method _repr_html_ (line 403) | def _repr_html_(self):
    method text (line 411) | def text(self,
    method reversePens (line 427) | def reversePens(self):
    method vl (line 433) | def vl(self, value):
    method _pens (line 438) | def _pens(self):
    method value (line 442) | def value(self):
    method glyphName (line 446) | def glyphName(self):
    method drop (line 449) | def drop(self, amount, edge):
    method take (line 453) | def take(self, amount, edge):
    method inset (line 457) | def inset(self, ax, ay):
    method Enumerate (line 462) | def Enumerate(enumerable, enumerator):
    method addFrame (line 465) | def addFrame(self, frame):
    method xAlignToFrame (line 468) | def xAlignToFrame(self):
    method pvl (line 471) | def pvl(self):
    method dots (line 478) | def dots(self, radius=4, square=False):
    method _normPointSplat (line 491) | def _normPointSplat(self, p):
    method moveTo (line 501) | def moveTo(self, *p) -> "P":
    method m (line 508) | def m(self, *p) -> "P":
    method lineTo (line 513) | def lineTo(self, *p) -> "P":
    method l (line 523) | def l(self, *p) -> "P":
    method qCurveTo (line 528) | def qCurveTo(self, *points) -> "P":
    method q (line 534) | def q(self, *p) -> "P":
    method curveTo (line 539) | def curveTo(self, *points) -> "P":
    method c (line 545) | def c(self, *p) -> "P":
    method closePath (line 549) | def closePath(self):
    method cp (line 553) | def cp(self):
    method endPath (line 556) | def endPath(self):
    method ep (line 560) | def ep(self):
    method addComponent (line 564) | def addComponent(self, baseGlyphName, transformation) -> "P":
    method points (line 570) | def points(self, pts, close=True) -> "P":
    method point_list (line 582) | def point_list(self, random_seed=None):
    method replay (line 595) | def replay(self, pen) -> "P":
    method record (line 604) | def record(self, pen) -> "P":
    method unended (line 621) | def unended(self):
    method fully_close_path (line 631) | def fully_close_path(self):
    method rect (line 649) | def rect(self, rect) -> "P":
    method roundedRect (line 663) | def roundedRect(self, rect, hr, vr=None, scale=True) -> "P":
    method oval (line 700) | def oval(self, rect) -> "P":
    method superellipse (line 712) | def superellipse(self, r, factor=65):
    method line (line 722) | def line(self, points, moveTo=True, endPath=True) -> "P":
    method hull (line 740) | def hull(self, points) -> "P":
    method round (line 749) | def round(self):
    method round_to (line 754) | def round_to(self, rounding) -> "P":
    method interpCurveTo (line 781) | def interpCurveTo(self, p1, f1, p2, f2, to, inset=0) -> "P":
    method ioc (line 791) | def ioc(self, pt, slope=0, fA=0, fB=85) -> "P":
    method ioEaseCurveTo (line 796) | def ioEaseCurveTo(self, pt, slope=0, fA=0, fB=85) -> "P":
    method bxc (line 847) | def bxc(self, pt, point, factor=0.65, po=(0, 0), mods={}, flatten=False):
    method roundedCorner (line 851) | def roundedCorner(self, pt, point, multipliers, offset=4, factor=65) -...
    method boxCurveTo (line 858) | def boxCurveTo(self, pt, point, factor=0.65, po=(0, 0), mods={}, flatt...
    method mirror (line 937) | def mirror(self, factors, point=None):
    method mirrorx (line 946) | def mirrorx(self, point=None) -> "P":
    method mirrory (line 951) | def mirrory(self, point=None) -> "P":
    method mirrorxy (line 956) | def mirrorxy(self, point=None) -> "P":
    method pattern (line 961) | def pattern(self, rect, clip=False) -> "P":
    method withRect (line 979) | def withRect(self, rect, fn:Callable[[Rect, "P"], "P"]) -> "P":
    method gridlines (line 984) | def gridlines(self, rect, x=20, y=None, absolute=False) -> "P":
    method ez (line 1005) | def ez(self, r, start_y, end_y, s) -> "P":
    method segments (line 1014) | def segments(self, all_curves=False) -> "P":
    method join (line 1044) | def join(self):
    method substructure (line 1054) | def substructure(self):
    method bounds (line 1063) | def bounds(self):
    method _normT (line 1091) | def _normT(self, th, tv, tx, ty, t) -> "P":
    method empty (line 1119) | def empty(self):
    method ambit (line 1122) | def ambit(self, th=None, tv=None, tx=0, ty=0, t=None) -> Rect:
    method align (line 1198) | def align(self,
    method _align_compass (line 1248) | def _align_compass(self, compass, rect, tx=1, ty=0) -> "P":
    method xalign (line 1264) | def xalign(self, rect=None, x="centerx", th=None, tv=None, tx=1, ty=0)...
    method yalign (line 1285) | def yalign(self, rect=None, y="centery", th=None, tv=None, tx=0, ty=1)...
    method _normPoint (line 1301) | def _normPoint(self, point=None, th=None, tv=None, tx=0, ty=0, **kwarg...
    method transform (line 1334) | def transform(self, transform, transformFrame=True) -> "P":
    method matrix (line 1362) | def matrix(self, a, b, c, d, e, f, transformFrame=False) -> "P":
    method invertYAxis (line 1367) | def invertYAxis(self, height) -> "P":
    method nonlinear_transform (line 1376) | def nonlinear_transform(self, fn) -> "P":
    method translate (line 1395) | def translate(self, x, y=None, transformFrame=True) -> "P":
    method shift (line 1406) | def shift(self, dx, dy, tx=1, ty=1) -> "P":
    method zero (line 1415) | def zero(self, th=None, tv=None, tx=0, ty=0) -> "P":
    method centerZero (line 1423) | def centerZero(self, th=None, tv=None, tx=0, ty=0):
    method centerPoint (line 1434) | def centerPoint(self, rect, pt, interp=1, th=None, tv=None, tx=1, ty=0...
    method skew (line 1446) | def skew(self, x=0, y=0, point=None, th=None, tv=None, tx=1, ty=0, **k...
    method rotate (line 1458) | def rotate(self, degrees, point=None, th=None, tv=None, tx=1, ty=1, **...
    method r90 (line 1473) | def r90(self, multiplier, point=None, tx=1, ty=1, **kwargs) -> "P":
    method scale (line 1478) | def scale(self, scaleX, scaleY=None, point=None, th=None, tv=None, tx=...
    method flipx (line 1492) | def flipx(self):
    method flipy (line 1495) | def flipy(self):
    method scaleToRect (line 1499) | def scaleToRect(self, rect, preserveAspect=True, shrink_only=False, tx...
    method scaleToWidth (line 1530) | def scaleToWidth(self, w, shrink_only=False) -> "P":
    method scaleToHeight (line 1540) | def scaleToHeight(self, h, shrink_only=False) -> "P":
    method distribute (line 1551) | def distribute(self, v=False, tracks=None, th=None, tv=None, tx=0, ty=...
    method spread (line 1577) | def spread(self, tracking=0, tx=0, zero=False) -> "P":
    method stack (line 1594) | def stack(self, leading=0, ty=0, zero=False) -> "P":
    method track (line 1609) | def track(self, t, v=False) -> "P":
    method lead (line 1620) | def lead(self, leading) -> "P":
    method grid (line 1636) | def grid(self, every, spread=0, stack=0, zero=False) -> "P":
    method gridlayer (line 1659) | def gridlayer(self, nx, ny=None, track=0, lead=0) -> "P":
    method pasteup (line 1668) | def pasteup(self, styler=lambda p: p.f(bw(1)), padding=(5, 5), tx=1, t...
    method pattern_repeat (line 1675) | def pattern_repeat(self, r) -> "P":
    method track_with_width (line 1694) | def track_with_width(self, t) -> "P":
    method track_to_width (line 1705) | def track_to_width(self, width, pullToEdges=False, r=0) -> "P":
    method track_to_rect (line 1710) | def track_to_rect(self, rect, pullToEdges=False, r=0) -> "P":
    method connect (line 1739) | def connect(self, *others) -> "P":
    method x (line 1746) | def x(self): return self.ambit().x
    method y (line 1748) | def y(self): return self.ambit().y
    method w (line 1750) | def w(self): return self.ambit().w
    method h (line 1752) | def h(self): return self.ambit().h
    method tx (line 1755) | def tx(self): return self.ambit(tx=1).x
    method ty (line 1757) | def ty(self): return self.ambit(ty=1).y
    method tw (line 1759) | def tw(self): return self.ambit(tx=1).w
    method th (line 1761) | def th(self): return self.ambit(ty=1).h
    method groupedStyle (line 1764) | def groupedStyle(self, st, default_style):
    method f (line 1797) | def f(self, *value) -> "P":
    method s (line 1814) | def s(self, *value) -> "P":
    method sw (line 1831) | def sw(self, value) -> "P":
    method dash (line 1842) | def dash(self, pattern, phase=0) -> "P":
    method ssw (line 1847) | def ssw(self, s, sw) -> "P":
    method fssw (line 1854) | def fssw(self, f, s, sw, sf=0) -> "P":
    method strokeFirst (line 1869) | def strokeFirst(self, value=None) -> "P":
    method sf (line 1880) | def sf(self, value=None) -> "P":
    method strokeMiter (line 1886) | def strokeMiter(self, value=None) -> "P":
    method sm (line 1897) | def sm(self, value=None) -> "P":
    method img (line 1902) | def img(self, src=None, rect=Rect(0, 0, 500, 500), pattern=False, opac...
    method shadow (line 1914) | def shadow(self, radius=10, color=(0, 0.3), clip=None):
    method blendmode (line 1920) | def blendmode(self, blendmode=None, show=False) -> "P":
    method postprocess (line 1933) | def postprocess(self, fn) -> "P":
    method glyph (line 1938) | def glyph(self, glyph, glyphSet=None, layerComponents=False) -> "P":
    method toGlyph (line 1976) | def toGlyph(self, name=None, width=None, allow_blank=False):
    method pickle (line 1999) | def pickle(self, dst) -> "P":
    method Unpickle (line 2015) | def Unpickle(self, src):
    method withJSONValue (line 2022) | def withJSONValue(self, path, keys=None) -> "P":
    method withSVG (line 2033) | def withSVG(self, svg) -> "P":
    method withSVGFile (line 2043) | def withSVGFile(self, svg_file) -> "P":
    method _pathop (line 2054) | def _pathop(self, otherPen=None, operation=BooleanOp.XOR, use_skia_pat...
    method difference (line 2077) | def difference(self, otherPen=None) -> "P":
    method union (line 2083) | def union(self, otherPen=None) -> "P":
    method xor (line 2089) | def xor(self, otherPen=None) -> "P":
    method reverseDifference (line 2095) | def reverseDifference(self, otherPen=None) -> "P":
    method intersection (line 2101) | def intersection(self, otherPen=None) -> "P":
    method removeOverlap (line 2107) | def removeOverlap(self, use_skia_pathops_draw=True) -> "P":
    method distribute_on_path (line 2116) | def distribute_on_path(self,
    method subsegment (line 2170) | def subsegment(self, start=0, end=1) -> "P":
    method point_t (line 2184) | def point_t(self, t=0.5):
    method split_t (line 2194) | def split_t(self, t=0.5):
    method add_pt_t (line 2204) | def add_pt_t(self, cuidx, t) -> "P":
    method samples (line 2241) | def samples(self, interval=10, even=False):
    method onSamples (line 2262) | def onSamples(self, interval=10, even=False, fn=None):
    method length (line 2267) | def length(self, t=1):
    method ease_t (line 2276) | def ease_t(self, e, tries=0) -> "P":
    method divide (line 2291) | def divide(self, length=150, floor=True, count=None, idx=0, max=None) ...
    method _prep_for_wave (line 2327) | def _prep_for_wave(self, flatten=1, centered=False):
    method toAudio (line 2339) | def toAudio(self, flatten=1, centered=False, loops=3, filename=None):
    method fromAudio (line 2361) | def fromAudio(self, audio, start=500, end=9500, step=1, mult=1360, sca...
    method nsew (line 2409) | def nsew(self):
    method avg (line 2449) | def avg(self):
    method ecx (line 2461) | def ecx(self):
    method ecy (line 2466) | def ecy(self):
    method edge (line 2471) | def edge(self, e) -> "P":
    method point (line 2484) | def point(self, pt) -> "P":
    method pne (line 2507) | def pne(self): return self.point("NE")
    method pnw (line 2509) | def pnw(self): return self.point("NW")
    method psw (line 2511) | def psw(self): return self.point("SW")
    method pse (line 2513) | def pse(self): return self.point("SE")
    method pn (line 2515) | def pn(self): return self.point("N")
    method ps (line 2517) | def ps(self): return self.point("S")
    method pe (line 2519) | def pe(self): return self.point("E")
    method pw (line 2521) | def pw(self): return self.point("W")
    method pc (line 2523) | def pc(self): return self.point("C")
    method en (line 2525) | def en(self): return self.nsew()[0]
    method es (line 2527) | def es(self): return self.nsew()[1]
    method ee (line 2529) | def ee(self): return self.nsew()[2]
    method ew (line 2531) | def ew(self): return self.nsew()[3]
    method trim_start (line 2533) | def trim_start(self):
    method trim_end (line 2541) | def trim_end(self):
    method q2c (line 2554) | def q2c(self):
    method flatten (line 2578) | def flatten(self, length=10, segmentLines=True) -> "P":
    method smooth (line 2594) | def smooth(self):
    method catmull (line 2607) | def catmull(self, points, close=False) -> "P":
    method roughen (line 2639) | def roughen(self, amplitude=10, threshold=10, ignore_ends=False, seed=...
    method explode (line 2669) | def explode(self):
    method implode (line 2689) | def implode(self):
    method map_points (line 2701) | def map_points(self, fn, filter_fn=None) -> "P":
    method mod_contour (line 2719) | def mod_contour(self, contour_index, mod_fn=None) -> "P":
    method filterContours (line 2730) | def filterContours(self, filter_fn) -> "P":
    method repeat (line 2742) | def repeat(self, times=1) -> "P":
    method outline (line 2758) | def outline(self,
    method project (line 2791) | def project(self, angle, width) -> "P":
    method castshadow (line 2798) | def castshadow(self,
    method understroke (line 2826) | def understroke(self,
  function runonCast (line 2850) | def runonCast():

FILE: packages/coldtype-core/src/coldtype/runon/runon.py
  function _arg_count (line 18) | def _arg_count(fn):
  class RunonException (line 28) | class RunonException(Exception):
  class RunonSearchException (line 32) | class RunonSearchException(Exception):
  class RunonNoData (line 36) | class RunonNoData:
  class Runon (line 40) | class Runon:
    method __init__ (line 41) | def __init__(self, *val):
    method post_init (line 77) | def post_init(self):
    method yields_wrapped (line 81) | def yields_wrapped(self):
    method update (line 87) | def update(self, val):
    method v (line 95) | def v(self):
    method _call_idx_fn (line 100) | def _call_idx_fn(self, fn, idx, arg:"Runon"):
    method _norm_element (line 114) | def _norm_element(self, el):
    method append (line 124) | def append(self, el):
    method replicate (line 137) | def replicate(self, *els):
    method attach (line 142) | def attach(self, parent):
    method extend (line 146) | def extend(self, els):
    method insert (line 159) | def insert(self, idx, el):
    method __iadd__ (line 181) | def __iadd__(self, item):
    method __add__ (line 185) | def __add__(self, item):
    method __str__ (line 191) | def __str__(self):
    method printable_val (line 194) | def printable_val(self):
    method printable_data (line 198) | def printable_data(self):
    method __repr__ (line 202) | def __repr__(self, **kwargs):
    method __bool__ (line 249) | def __bool__(self):
    method val_present (line 252) | def val_present(self):
    method normalize_val (line 256) | def normalize_val(self, val):
    method reset_val (line 260) | def reset_val(self):
    method __len__ (line 267) | def __len__(self):
    method __getitem__ (line 270) | def __getitem__(self, index):
    method get (line 282) | def get(self, key, default=None):
    method subset (line 289) | def subset(self, *idxs):
    method __setitem__ (line 299) | def __setitem__(self, index, pen):
    method tree (line 302) | def tree(self, v=True, limit=100, **kwargs):
    method depth (line 321) | def depth(self):
    method walk (line 329) | def walk(self,
    method prewalk (line 380) | def prewalk(self, callback):
    method postwalk (line 383) | def postwalk(self, callback):
    method parent (line 386) | def parent(self, noexist_ok=False):
    method match (line 394) | def match(self, regex, cb=None, partial=False):
    method map (line 418) | def map(self, fn, range=None):
    method mape (line 426) | def mape(self, fn):
    method filter (line 434) | def filter(self, fn):
    method remove (line 448) | def remove(self, fn):
    method mapv (line 462) | def mapv(self, fn):
    method mapvrc (line 479) | def mapvrc(self, fn:Callable[[int, int, "Runon"], "Runon"]):
    method mapvch (line 491) | def mapvch(self, fn:Callable[[bool, "Runon"], "Runon"]):
    method filterv (line 497) | def filterv(self, fn):
    method delete (line 513) | def delete(self):
    method deblank (line 518) | def deblank(self):
    method interpose (line 523) | def interpose(self, el_or_fn):
    method split (line 535) | def split(self, fn, split=0):
    method enumerate (line 561) | def enumerate(self, enumerable, enumerator):
    method collapse (line 592) | def collapse(self, deblank=True):
    method collapseonce (line 603) | def collapseonce(self, deblank=True):
    method sum (line 613) | def sum(self):
    method reverse (line 623) | def reverse(self, recursive=False, winding=True):
    method shuffle (line 631) | def shuffle(self, seed=0):
    method copy_val (line 638) | def copy_val(self, val):
    method copy (line 644) | def copy(self, deep=True, with_data=True):
    method index (line 674) | def index(self, idx, fn=None):
    method indices (line 705) | def indices(self, idxs, fn=None):
    method î (line 713) | def î(self, idx, fn=None):
    method ï (line 716) | def ï(self, idxs, fn=None):
    method find (line 719) | def find(self,
    method find_ (line 776) | def find_(self, finder_fn=None, fn=None, index=0, none_ok=0, find_one=...
    method replace (line 807) | def replace(self, tag, replacement, limit=None):
    method swap (line 823) | def swap(self, indices, replace_fn):
    method partition (line 832) | def partition(self, fn):
    method data (line 851) | def data(self, key=None, default=None, function_literals=False, **kwar...
    method datafn (line 869) | def datafn(self, **kwargs):
    method tag (line 873) | def tag(self, value=RunonNoData()):
    method path (line 880) | def path(self, root=None):
    method style (line 888) | def style(self, style="_default"):
    method styles (line 894) | def styles(self):
    method attrs (line 905) | def attrs(self):
    method normalize_attr_value (line 908) | def normalize_attr_value(self, k, v):
    method attr (line 912) | def attr(self,
    method cast (line 947) | def cast(self, _class, *args):
    method lattr (line 953) | def lattr(self, tag, fn):
    method _get_set_prop (line 960) | def _get_set_prop(self, prop, v, castfn=None):
    method visible (line 974) | def visible(self, v=None):
    method alpha (line 977) | def alpha(self, v=None):
    method hide (line 980) | def hide(self, *indices):
    method __neg__ (line 992) | def __neg__(self):
    method cond (line 997) | def cond(self, condition,
    method attempt (line 1019) | def attempt(self, exception_class, try_fn, except_fn):
    method chain (line 1027) | def chain(self,
    method __or__ (line 1073) | def __or__(self, other):
    method __ror__ (line 1076) | def __ror__(self, other):
    method __truediv__ (line 1079) | def __truediv__(self, other):
    method __sub__ (line 1082) | def __sub__(self, other):
    method up (line 1086) | def up(self):
    method down (line 1097) | def down(self):
    method replicate (line 1101) | def replicate(self, cells, mod=None):
    method layer (line 1104) | def layer(self, *layers):
    method layerv (line 1127) | def layerv(self, *layers):
    method overwrite (line 1149) | def overwrite(self, fn):
    method declare (line 1155) | def declare(self, *whatever):
    method print (line 1159) | def print(self, *args, **kwargs):
    method pprint (line 1173) | def pprint(self, *args):
    method printh (line 1186) | def printh(self):
    method printdata (line 1191) | def printdata(self, field):
    method noop (line 1195) | def noop(self, *args, **kwargs):
    method null (line 1199) | def null(self):
    method sleep (line 1205) | def sleep(self, time):

FILE: packages/coldtype-core/src/coldtype/runon/scaffold.py
  class Scaffold (line 12) | class Scaffold(Runon):
    method AspectGrid (line 14) | def AspectGrid(r:Rect, x:int, y:int, align:str="C"):
    method __init__ (line 18) | def __init__(self, *val, warn_float=True):
    method find_ (line 23) | def find_(self, finder_fn=None, fn=None, index=0, none_ok=0, find_one=...
    method sum (line 60) | def sum(self):
    method rect (line 80) | def rect(self) -> Rect:
    method _extend_with_tags (line 85) | def _extend_with_tags(self, rects, tags):
    method divide (line 94) | def divide(self, amt, edge, tags=[], forcePixel=False):
    method subdivide (line 104) | def subdivide(self, amt, edge, tags=[]):
    method annotate_rings (line 114) | def annotate_rings(self):
    method numeric_grid (line 138) | def numeric_grid(self, columns=2, rows=None, gap=None, column_gap=0, r...
    method labeled_grid (line 219) | def labeled_grid(self, columns=2, rows=2, column_gap=0, row_gap=0, sta...
    method cells (line 302) | def cells(self):
    method gaps (line 305) | def gaps(self):
    method rows (line 308) | def rows(self):
    method cols (line 316) | def cols(self):
    method grid (line 324) | def grid(self, columns=2, rows=None, tags=[]):
    method cssgridmod (line 351) | def cssgridmod(self, mods, **kwargs):
    method cssgrid (line 361) | def cssgrid(self, cols, rows, ascii, mods={}, forcePixel=False, **kwar...
    method borders (line 386) | def borders(self):
    method cssborders (line 391) | def cssborders(self, regular=None, bold=None):
    method sort (line 407) | def sort(self, attr="x", reverse=False):
    method view (line 412) | def view(self, fontSize=22, fill=False, stroke=True, vectors=False):
    method pne (line 458) | def pne(self): return self.r.pne
    method pnw (line 460) | def pnw(self): return self.r.pnw
    method psw (line 462) | def psw(self): return self.r.psw
    method pse (line 464) | def pse(self): return self.r.pse
    method pn (line 466) | def pn(self): return self.r.pn
    method ps (line 468) | def ps(self): return self.r.ps
    method pe (line 470) | def pe(self): return self.r.pe
    method pw (line 472) | def pw(self): return self.r.pw
    method pc (line 474) | def pc(self): return self.r.pc
    method en (line 477) | def en(self): return self.r.en
    method es (line 479) | def es(self): return self.r.es
    method ee (line 481) | def ee(self): return self.r.ee
    method ew (line 483) | def ew(self): return self.r.ew
    method joinp (line 485) | def joinp(self, regex):
    method scale (line 489) | def scale(self, scale):

FILE: packages/coldtype-core/src/coldtype/skiashim.py
  function image_makeShader (line 8) | def image_makeShader(image, matrix):
  function canvas_drawImage (line 15) | def canvas_drawImage(canvas, image, x, y, paint=None):
  function imageFilters_Blur (line 26) | def imageFilters_Blur(xblur, yblur):
  function paint_withFilterQualityHigh (line 33) | def paint_withFilterQualityHigh():
  function image_resize (line 41) | def image_resize(img, width, height):
  function make_improved_noise (line 50) | def make_improved_noise(e, xo, yo, xs, ys, x, y, scale, base):

FILE: packages/coldtype-core/src/coldtype/test.py
  function add_grid (line 15) | def add_grid(render, result):
  function show_error (line 22) | def show_error(r, txt):
  class test (line 26) | class test(renderable):
    method __init__ (line 27) | def __init__(self, rect=(800, 200), bg=hsl(0.17, 0.8, 0.7, 0.2), post_...

FILE: packages/coldtype-core/src/coldtype/text/colr/brsurface.py
  class BRPathCollectorRecordingPen (line 8) | class BRPathCollectorRecordingPen(RecordingPen):
    method annotate (line 9) | def annotate(self, method, data):
    method __repr__ (line 13) | def __repr__(self):
  class BRPathCollectorCanvas (line 17) | class BRPathCollectorCanvas(Canvas):
    method __init__ (line 18) | def __init__(self):
    method init (line 21) | def init(self):
    method _addPath (line 25) | def _addPath(self, path, method, data):
    method newPath (line 31) | def newPath(self):
    method savedState (line 35) | def savedState(self):
    method compositeMode (line 41) | def compositeMode(self, compositeMode):
    method transform (line 44) | def transform(self, transform):
    method clipPath (line 47) | def clipPath(self, path):
    method drawPathSolid (line 50) | def drawPathSolid(self, path, color):
    method drawPathLinearGradient (line 53) | def drawPathLinearGradient(
    method drawPathRadialGradient (line 64) | def drawPathRadialGradient(
    method drawPathSweepGradient (line 85) | def drawPathSweepGradient(
  class BRPathCollectorSurface (line 105) | class BRPathCollectorSurface(Surface):
    method __init__ (line 108) | def __init__(self):
    method canvas (line 113) | def canvas(self, boundingBox):
    method saveImage (line 118) | def saveImage(self, path):
  function transformPath (line 122) | def transformPath(path, transform):

FILE: packages/coldtype-core/src/coldtype/text/colr/skia.py
  class SkiaShaders (line 4) | class SkiaShaders():
    method drawPathLinearGradient (line 6) | def drawPathLinearGradient(colorLine, pt1, pt2, extendMode, gradientTr...
    method drawPathSweepGradient (line 19) | def drawPathSweepGradient(
    method drawPathRadialGradient (line 49) | def drawPathRadialGradient(

FILE: packages/coldtype-core/src/coldtype/text/composer.py
  class GrafStyle (line 11) | class GrafStyle():
    method __init__ (line 12) | def __init__(self, leading=10, x="centerx", xp=0, width=0, **kwargs):
  class Graf (line 19) | class Graf():
    method __init__ (line 20) | def __init__(self, lines, container, style=None, no_frames=False, **kw...
    method lineRects (line 35) | def lineRects(self):
    method width (line 52) | def width(self):
    method fit (line 58) | def fit(self, width=None):
    method pens (line 68) | def pens(self):
  class Lockup (line 80) | class Lockup(FittableMixin):
    method __init__ (line 81) | def __init__(self, slugs, preserveLetters=True, nestSlugs=True):
    method __repr__ (line 86) | def __repr__(self):
    method width (line 89) | def width(self):
    method height (line 92) | def height(self):
    method textContent (line 95) | def textContent(self):
    method shrink (line 98) | def shrink(self):
    method pens (line 104) | def pens(self):
    method pen (line 131) | def pen(self):
    method TextToLines (line 134) | def TextToLines(text, primary, fallback=None):
    method SlugsToLines (line 140) | def SlugsToLines(slugs):
  function T2L (line 144) | def T2L(text, primary, fallback=None):
  class Slug (line 148) | class Slug(SegmentedString):
    method __init__ (line 149) | def __init__(self, text, primary, fallback=None, print_segments=False):
    method tag (line 157) | def tag(self):
    method pen (line 166) | def pen(self):
    method LineSlugs (line 169) | def LineSlugs(text, primary, fallback=None):
  class Composer (line 176) | class Composer():
    method __init__ (line 180) | def __init__(self, rect:Rect, text:str, style:Style, leading=10, fit=N...
    method pens (line 187) | def pens(self):
    method pen (line 195) | def pen(self):
  function StSt (line 202) | def StSt(text,
  class GlyphwiseGlyph (line 289) | class GlyphwiseGlyph():
  function Glyphwise2 (line 297) | def Glyphwise2(txt:str, styler
  function Glyphwise (line 357) | def Glyphwise(st:str

FILE: packages/coldtype-core/src/coldtype/text/font.py
  class FontNotFoundException (line 68) | class FontNotFoundException(Exception):
  function normalize_font_prefix (line 71) | def normalize_font_prefix(path_string):
  function normalize_font_path (line 76) | def normalize_font_path(font, nonexist_ok=False):
  class FontMetrics (line 92) | class FontMetrics:
    method cap (line 99) | def cap(self):
    method asc (line 103) | def asc(self):
    method dsc (line 107) | def dsc(self):
  class Font (line 111) | class Font():
    method __init__ (line 113) | def __init__(self, path,
    method __repr__ (line 158) | def __repr__(self):
    method load (line 161) | def load(self):
    method variations (line 170) | def variations(self):
    method features (line 178) | def features(self):
    method metrics (line 182) | def metrics(self) -> FontMetrics:
    method instances (line 213) | def instances(self, scaled=True, search:re.Pattern=None):
    method filename_stem (line 245) | def filename_stem(self, respacer="-"):
    method filename (line 254) | def filename(self, respacer="-"):
    method getName (line 257) | def getName(self, nameID) -> str|None:
    method names (line 262) | def names(self):
    method chars (line 294) | def chars(self) -> list[str]:
    method subset (line 322) | def subset(self, output_path, *args, unicodes="U+0000-00FF U+2B22 U+20...
    method Cacheable (line 355) | def Cacheable(path, suffix=None, delete_tmp=False, actual_path=None, n...
    method GDrive (line 373) | def GDrive(id, suffix, delete=True):
    method UnzipURL (line 378) | def UnzipURL(url, font_name, path, index=0) -> "Font":
    method Download (line 425) | def Download(url) -> "Font":
    method _ListDir (line 445) | def _ListDir(dir, regex, regex_dir, log=False, depth=0, max_depth=FONT...
    method List (line 480) | def List(regex, regex_dir=None, log=False, font_dir=None, expand=False...
    method ListAll (line 504) | def ListAll(regex, log=False, font_dir=None, expand=True, max_depth=FO...
    method Find (line 516) | def Find(regex, regex_dir=None, index=0, font_dir=None, number=0, max_...
    method LibraryList (line 542) | def LibraryList(regex, print_list=False, expand=False, copy_to=None):
    method LibraryFind (line 582) | def LibraryFind(regex, print_list=False) -> "Font":
    method LibraryGet (line 596) | def LibraryGet(regex, directory="~/Desktop", print_list=False):
    method Fontmake (line 603) | def Fontmake(source, verbose=False, keep_overlaps=False, cli_args=[]):
    method RegisterDir (line 647) | def RegisterDir(dir):
    method Normalize (line 652) | def Normalize(font, fallback=True):
    method copy_to (line 680) | def copy_to(self, path:Path, filename_literal=False, return_dst=False):
    method ColdtypeObviously (line 691) | def ColdtypeObviously():
    method MutatorSans (line 697) | def MutatorSans():
    method RecursiveMono (line 703) | def RecursiveMono():
    method JetBrainsMono (line 709) | def JetBrainsMono():

FILE: packages/coldtype-core/src/coldtype/text/reader.py
  class FittableMixin (line 35) | class FittableMixin():
    method textContent (line 36) | def textContent(self):
    method fit (line 39) | def fit(self, width):
  class Style (line 60) | class Style():
    method RegisterShorthandPrefix (line 85) | def RegisterShorthandPrefix(prefix, expansion):
    method __init__ (line 89) | def __init__(self,
    method __repr__ (line 279) | def __repr__(self):
    method __eq__ (line 285) | def __eq__(self, other):
    method mod (line 310) | def mod(self, **kwargs):
    method print (line 320) | def print(self, *args):
    method complete_metrics (line 324) | def complete_metrics(self):
    method addVariations (line 371) | def addVariations(self, variations, limits=dict()):
    method normalizeVariations (line 377) | def normalizeVariations(self, variations):
    method StretchX (line 419) | def StretchX(flatten=10, debug=0, **kwargs):
    method StretchY (line 462) | def StretchY(flatten=10, align="mdy", debug=0, **kwargs):
  function offset (line 511) | def offset(x, y, ox, oy):
  class StyledString (line 515) | class StyledString(FittableMixin):
    method __init__ (line 519) | def __init__(self, text:str, style:Style):
    method __repr__ (line 533) | def __repr__(self):
    method setStyle (line 536) | def setStyle(self, style):
    method resetGlyphRun (line 544) | def resetGlyphRun(self):
    method trackFrames (line 562) | def trackFrames(self, space_width=0):
    method adjustFramesForPath (line 577) | def adjustFramesForPath(self):
    method getGlyphFrames (line 586) | def getGlyphFrames(self):
    method scale (line 627) | def scale(self):
    method width (line 630) | def width(self): # size?
    method height (line 639) | def height(self):
    method textContent (line 645) | def textContent(self):
    method fitField (line 648) | def fitField(self, field, value):
    method binaryFit (line 656) | def binaryFit(self, width, field, minv, maxv, tries):
    method testWidth (line 676) | def testWidth(self, width, field, minv, maxv):
    method _fit (line 688) | def _fit(self, width):
    method shrink (line 718) | def shrink(self):
    method scalePenToStyle (line 750) | def scalePenToStyle(self, glyph, in_pen, idx):
    method _emptyPenWithAttrs (line 798) | def _emptyPenWithAttrs(self):
    method buildLayeredGlyph (line 807) | def buildLayeredGlyph(self, idx, glyph, output, layer, frame):
    method addBRGlyphDrawings (line 839) | def addBRGlyphDrawings(self, glyphs):
    method pens (line 889) | def pens(self) -> P:
    method pen (line 1043) | def pen(self, frame=True) -> P:
    method instance (line 1049) | def instance(self, output_path, remove_overlaps=False, freeze=False, f...
  class SegmentedString (line 1082) | class SegmentedString(FittableMixin):
    method __init__ (line 1083) | def __init__(self, text, styles):
    method width (line 1098) | def width(self):
    method height (line 1101) | def height(self):
    method textContent (line 1104) | def textContent(self):
    method shrink (line 1107) | def shrink(self):
    method pens (line 1113) | def pens(self, flat=True):

FILE: packages/coldtype-core/src/coldtype/text/richtext.py
  class RichText (line 21) | class RichText(P):
    method __init__ (line 23) | def __init__(self,
    method parse_block (line 56) | def parse_block(self, txt, render_text_fn, rect, fit, graf_style):
    method findStyle (line 191) | def findStyle(self, style, modfn):
    method findText (line 194) | def findText(self, text, modfn, flags=re.I):
    method removeSpacers (line 197) | def removeSpacers(self, spacer=None, clean=True):
  class ColdtypeFormatter (line 214) | class ColdtypeFormatter(Formatter):
    method format (line 215) | def format(self, tokensource, outfile):
  class PythonCode (line 224) | class PythonCode(RichText):
    method __init__ (line 225) | def __init__(self,
    method DefaultStyles (line 245) | def DefaultStyles(r, b, bi):

FILE: packages/coldtype-core/src/coldtype/text/shaper.py
  function between (line 5) | def between(c, a, b):
  function segment (line 23) | def segment(txt, mode="LATIN", includeNames=False, print_characters=False):

FILE: packages/coldtype-core/src/coldtype/timing/__init__.py
  class Frame (line 5) | class Frame(Easeable):
    method __init__ (line 19) | def __init__(self, i, anim, cursor=None, midi=None, recording=None):
    method adj (line 30) | def adj(self, off):
    method t (line 36) | def t(self) -> Timeline: return self.a.t if hasattr(self.a, "t") else ...
    method _ts (line 39) | def _ts(self): return None
    method autowrap (line 42) | def autowrap(self): return True
    method last_render (line 44) | def last_render(self, modfn=lambda img: img):

FILE: packages/coldtype-core/src/coldtype/timing/audio.py
  class Wavfile (line 15) | class Wavfile():
    method __init__ (line 16) | def __init__(self, path, fps=30):
    method calc_peaks (line 33) | def calc_peaks(self):
    method samples_for_frame (line 38) | def samples_for_frame(self, i):
    method amp (line 43) | def amp(self, i):
    method frame_waveform (line 46) | def frame_waveform(self, fi, r, inc=1, pen=None):

FILE: packages/coldtype-core/src/coldtype/timing/clip.py
  class ClipType (line 7) | class ClipType(Enum):
  class ClipFlags (line 18) | class ClipFlags(Enum):
  class Clip (line 23) | class Clip(Timeable):
    method __init__ (line 24) | def __init__(self, text, start, end, idx=None, track=0):
    method addJoin (line 137) | def addJoin(self, clip, direction):
    method joinStart (line 143) | def joinStart(self):
    method joinEnd (line 149) | def joinEnd(self):
    method textForIndex (line 155) | def textForIndex(self, index):
    method style_matching (line 163) | def style_matching(self, txt):
    method ftext (line 169) | def ftext(self):
    method fade (line 176) | def fade(self, default_fade=5):
    method fadeIn (line 182) | def fadeIn(self, fi, easefn="seio", fade_length=None, start=0):
    method __repr__ (line 204) | def __repr__(self):

FILE: packages/coldtype-core/src/coldtype/timing/easing.py
  function curve_pos_and_speed (line 49) | def curve_pos_and_speed(curve, x):
  function ease (line 84) | def ease(style, x):
  function _loop (line 133) | def _loop(t, times=1, cyclic=True, negative=False):
  function applyRange (line 145) | def applyRange(e, rng):
  function ez (line 152) | def ez(t, easefn="eeio", loops=0, cyclic=True, rng=(0, 1), **kwargs):
  function cycle (line 163) | def cycle(i):

FILE: packages/coldtype-core/src/coldtype/timing/midi.py
  class MidiTimeline (line 16) | class MidiTimeline(Timeline):
    method __init__ (line 17) | def __init__(self,
    method __bool__ (line 130) | def __bool__(self):
    method duration (line 137) | def duration(self):
    method find_tempo (line 140) | def find_tempo(self):
    method register (line 149) | def register(self, lookup):
    method ki (line 153) | def ki(self, key, fi=None):
    method ci (line 162) | def ci(self, control, default=0, fi=None):

FILE: packages/coldtype-core/src/coldtype/timing/nle/ableton.py
  function save_test_xml (line 14) | def save_test_xml(x):
  function b2f (line 18) | def b2f(fpb, t):
  function b2ms (line 22) | def b2ms(bpm, b):
  function midi_to_note_name (line 26) | def midi_to_note_name(midi_number):
  function note_name_to_midi (line 38) | def note_name_to_midi(note_name):
  function string_and_note_to_fret (line 64) | def string_and_note_to_fret(string, note):
  class AbletonMIDINote (line 84) | class AbletonMIDINote(Timeable):
    method __repr__ (line 85) | def __repr__(self):
  class AbletonMIDIClip (line 89) | class AbletonMIDIClip(Timeline):
    method __init__ (line 90) | def __init__(self, b2ff, clip):
  class AbletonMIDITrack (line 166) | class AbletonMIDITrack(Timeline):
    method __init__ (line 167) | def __init__(self, b2ff, track):
    method notes (line 185) | def notes(self):
    method range (line 188) | def range(self):
  class AbletonAudioClip (line 193) | class AbletonAudioClip(Timeable):
    method __init__ (line 194) | def __init__(self, b2ff, clip):
  class AbletonAudioTrack (line 202) | class AbletonAudioTrack(Timeline):
    method __init__ (line 203) | def __init__(self, b2ff, track):
  class AbletonReader (line 219) | class AbletonReader(Timeline):
    method __init__ (line 220) | def __init__(self, path, duration=-1, fps=30, rounded=True, note_names...
  function ableton (line 320) | def ableton(f):

FILE: packages/coldtype-core/src/coldtype/timing/nle/ascii.py
  class AsciiTimeline (line 8) | class AsciiTimeline(Timeline):
    method __init__ (line 11) | def __init__(self,
    method _norm_keyframes (line 119) | def _norm_keyframes(self, keyframes):
    method _find_kf_easer (line 134) | def _find_kf_easer(self, ease, eases):
    method keyframe_current (line 141) | def keyframe_current(self, fi, keyframes, lines=None):
    method kf (line 157) | def kf(self, easefn=None, fi=None, lines=None, keyframes=None, eases=N...
    method enumerate (line 199) | def enumerate(self, lines=None, pairs=False, edges=False, filter=None):
    method inflate (line 229) | def inflate(self, lines=None):
    method rmap (line 238) | def rmap(self, r=Rect(1000, 1000)):
    method __getitem__ (line 249) | def __getitem__(self, item):

FILE: packages/coldtype-core/src/coldtype/timing/nle/premiere.py
  function to_frames (line 12) | def to_frames(seconds, fps):
  class PremiereTimeline (line 19) | class PremiereTimeline(Sequence):
    method __init__ (line 22) | def __init__(self, path, storyboard=None, duration_override=None, work...

FILE: packages/coldtype-core/src/coldtype/timing/sequence.py
  class Marker (line 19) | class Marker(Timeable):
    method __init__ (line 20) | def __init__(self, start, end, marker):
  class ClipGroupPens (line 25) | class ClipGroupPens(P):
    method setClipGroup (line 26) | def setClipGroup(self, clip_group):
    method _iterate_tags (line 30) | def _iterate_tags(self, tag, pens):
    method iterate_clips (line 38) | def iterate_clips(self):
    method iterate_slugs (line 41) | def iterate_slugs(self):
    method iterate_lines (line 44) | def iterate_lines(self):
    method map_clips (line 47) | def map_clips(self, fn):
    method clean_empties (line 52) | def clean_empties(self):
    method remove_futures (line 60) | def remove_futures(self, clean=True):
    method remove_future_lines (line 81) | def remove_future_lines(self, clean=True):
  class ClipGroupTextSetter (line 106) | class ClipGroupTextSetter():
  class ClipGroup (line 114) | class ClipGroup(Timeable):
    method __init__ (line 115) | def __init__(self, timeline, index, clips, regroup=True):
    method retime (line 138) | def retime(self):
    method styles (line 150) | def styles(self):
    method style_matching (line 157) | def style_matching(self, style):
    method ldata (line 163) | def ldata(self, field, default):
    method current_style_matching (line 167) | def current_style_matching(self, f:Frame, identifier:Union[str, Callab...
    method lines (line 177) | def lines(self, ignore_newlines=False):
    method position (line 202) | def position(self, idx, styles):
    method currentSyllable (line 249) | def currentSyllable(self):
    method current_word (line 254) | def current_word(self, fi):
    method currentLine (line 275) | def currentLine(self):
    method sibling (line 281) | def sibling(self, clip, direction, wrap=False):
    method text (line 294) | def text(self):
    method pens (line 308) | def pens(self, fi,
    method iterate_clip_pens (line 478) | def iterate_clip_pens(self, pens):
    method remove_futures (line 487) | def remove_futures(self, pens):
    method iterate_pens (line 494) | def iterate_pens(self, pens, copy=True):
    method __repr__ (line 504) | def __repr__(self):
    method __hash__ (line 507) | def __hash__(self):
  class ClipTrack (line 511) | class ClipTrack():
    method __init__ (line 512) | def __init__(self, sequence, clips, markers, styles=None):
    method hold (line 520) | def hold(self, i):
    method groupedClips (line 525) | def groupedClips(self, clips):
    method current (line 544) | def current(self, fi):
    method _norm_held_fi (line 550) | def _norm_held_fi(self, fi=None):
    method currentGroup (line 559) | def currentGroup(self, fi=None) -> ClipGroup:
    method currentWord (line 569) | def currentWord(self, fi=None) -> ClipGroup:
    method now (line 579) | def now(self, fi, text):
    method now_or_past (line 586) | def now_or_past(self, fi, text):
    method over (line 593) | def over(self, fi, text):
    method duration (line 600) | def duration(self):
    method __repr__ (line 606) | def __repr__(self):
  class Sequence (line 610) | class Sequence(Timeline):
    method __init__ (line 611) | def __init__(self, duration, fps, storyboard, tracks, workarea_track=0):
    method find_symbol (line 615) | def find_symbol(self, symbol):
    method retime_for_symbol (line 631) | def retime_for_symbol(self, symbol):
    method trackClipGroupForFrame (line 656) | def trackClipGroupForFrame(self, track_idx, frame_idx, styles=[], chec...
    method clip_group (line 678) | def clip_group(self, track_idx, f, styles=[]) -> ClipGroup:
    method find_workarea (line 690) | def find_workarea(self, frame=None):
    method jumps (line 698) | def jumps(self):
    method text_for_frame (line 705) | def text_for_frame(self, fi):

FILE: packages/coldtype-core/src/coldtype/timing/timeable.py
  class Timeable (line 9) | class Timeable():
    method __init__ (line 15) | def __init__(self,
    method duration (line 38) | def duration(self):
    method __bool__ (line 41) | def __bool__(self):
    method __repr__ (line 47) | def __repr__(self):
    method delay (line 53) | def delay(self, frames_delayed, feedback) -> 'Timeable':
    method retime (line 61) | def retime(self, start=0, end=0, duration=-1):
    method now (line 68) | def now(self, i):
    method _normalize_fi (line 74) | def _normalize_fi(self, fi):
    method _loop (line 80) | def _loop(self, t, times=1, cyclic=True, negative=False):
    method at (line 97) | def at(self, i, every=None) -> "Easeable":
  class EaseableTiming (line 104) | class EaseableTiming():
  class Easeable (line 110) | class Easeable():
    method __init__ (line 111) | def __init__(self,
    method autowrap (line 123) | def autowrap(self):
    method __repr__ (line 126) | def __repr__(self) -> str:
    method _normRange (line 129) | def _normRange(self, rng, **kwargs):
    method _maxRange (line 136) | def _maxRange(self, rng, vs):
    method every (line 142) | def every(self, i) -> "Easeable":
    method inset (line 146) | def inset(self, start=0, end=0) -> "Easeable":
    method name (line 157) | def name(self):
    method __bool__ (line 163) | def __bool__(self):
    method idx (line 170) | def idx(self):
    method index (line 179) | def index(self):
    method on (line 185) | def on(self, end=None):
    method now (line 197) | def now(self):
    method past (line 211) | def past(self):
    method tv (line 214) | def tv(self,
    method e (line 273) | def e(self,
    method ec (line 304) | def ec(self, easefn="eeio", rng=(0, 1)):
    method interpDict (line 321) | def interpDict(self, dicts, easefn, loops=0):
    method io (line 332) | def io(self,
    method adsr (line 391) | def adsr(self,

FILE: packages/coldtype-core/src/coldtype/timing/timeline.py
  class Timeline (line 7) | class Timeline(Timeable):
    method __init__ (line 19) | def __init__(self,
    method _flatten (line 69) | def _flatten(self, timeables):
    method jumps (line 81) | def jumps(self):
    method tracks (line 84) | def tracks(self):
    method text_for_frame (line 90) | def text_for_frame(self, fi):
    method __str__ (line 93) | def __str__(self):
    method __getitem__ (line 96) | def __getitem__(self, index):
    method __len__ (line 99) | def __len__(self):
    method __contains__ (line 102) | def __contains__(self, key):
    method hold (line 108) | def hold(self, i):
    method at (line 114) | def at(self, i) -> Easeable:
    method timeable (line 117) | def timeable(self, name=None) -> Timeable:
    method easeable (line 126) | def easeable(self, i=None, name=None) -> Easeable:
    method addClip (line 129) | def addClip(self, name=None, start=0, end=0):
    method _keyed (line 133) | def _keyed(self, k):
    method k (line 145) | def k(self, *keys):
    method _norm_held_fi (line 152) | def _norm_held_fi(self, fi=None):
    method ki (line 160) | def ki(self, key, fi=None):
    method current (line 174) | def current(self, track=None, fi=None) -> Easeable:
    method latest (line 186) | def latest(self, track=None, fi=None) -> Easeable:
    method tstart (line 198) | def tstart(self):
    method tend (line 211) | def tend(self):
    method shift (line 223) | def shift(self, prop, fn):
    method find_by_id (line 232) | def find_by_id(self, id):
    method findWordsWorkarea (line 237) | def findWordsWorkarea(self, fi):
    method interpretWords (line 243) | def interpretWords(self, include="*"):

FILE: packages/coldtype-core/src/coldtype/timing/viewer.py
  function timeViewer (line 9) | def timeViewer(tl):

FILE: packages/coldtype-core/src/coldtype/tool.py
  function fmt_path (line 7) | def fmt_path(path: Path) -> str:
  function print_font_results (line 14) | def print_font_results(results, selected=None):
  function parse_inputs (line 28) | def parse_inputs(inputs, defaults, ui=True, positional=True):

FILE: packages/coldtype-core/src/coldtype/tools/chars.py
  function chars_display (line 19) | def chars_display(f):
  function build (line 41) | def build(_):
  function on_click (line 45) | def on_click(pos):

FILE: packages/coldtype-core/src/coldtype/tools/dsview.py
  function dsview_display (line 24) | def dsview_display(f):
  function build (line 93) | def build(_):
  function on_click (line 97) | def on_click(pos):

FILE: packages/coldtype-core/src/coldtype/tools/find.py
  function build_preview (line 21) | def build_preview(x):
  function show_results (line 38) | def show_results(r):
  function build (line 46) | def build(_):
  function no_results (line 56) | def no_results(r):

FILE: packages/coldtype-core/src/coldtype/tools/findappicon.py
  function icon_viewer (line 51) | def icon_viewer(f:Frame):
  function release (line 55) | def release(_):

FILE: packages/coldtype-core/src/coldtype/tools/glyphloop.py
  function glyphViewer (line 15) | def glyphViewer(f):

FILE: packages/coldtype-core/src/coldtype/tools/glyphs.py
  function wt1 (line 28) | def wt1(u):
  function build (line 40) | def build(_):

FILE: packages/coldtype-core/src/coldtype/tools/instances.py
  function display (line 38) | def display(u):

FILE: packages/coldtype-core/src/coldtype/tools/midi.py
  function build_display (line 37) | def build_display():
  function midi (line 80) | def midi(f):

FILE: packages/coldtype-core/src/coldtype/tools/midicc.py
  function midicc (line 17) | def midicc(f, rs):

FILE: packages/coldtype-core/src/coldtype/tools/vf.py
  function vf (line 71) | def vf(f):

FILE: packages/coldtype-core/src/coldtype/tools/viewseq.py
  function find_pngs (line 20) | def find_pngs(_root):
  function releaser (line 35) | def releaser(x:animation):
  function viewseq (line 49) | def viewseq(_): return None

FILE: packages/coldtype-core/src/coldtype/web/fonts.py
  class WebFont (line 10) | class WebFont():
    method js_args (line 19) | def js_args(self):
    method js_setter (line 22) | def js_setter(self):
  class WebFontFamily (line 27) | class WebFontFamily():
    method variable_name_js (line 34) | def variable_name_js(self):
  function get_woff2 (line 38) | def get_woff2(root, dst_folder, font_file, bold=False, italic=False, fea...
  function woff2s (line 73) | def woff2s(dst_folder, families_info, root):

FILE: packages/coldtype-core/src/coldtype/web/page.py
  function count_words_in_markdown (line 15) | def count_words_in_markdown(markdown):
  function wrap_images_with_links (line 31) | def wrap_images_with_links(html_string, grab_image, root:Path):
  function md_process (line 88) | def md_process(text, grab_image, root:Path):
  class Page (line 95) | class Page:
    method date_rfc_822 (line 106) | def date_rfc_822(self):
    method word_count (line 113) | def word_count(self):
    method image_count (line 116) | def image_count(self):
    method unpublished (line 123) | def unpublished(self):
    method output_path (line 126) | def output_path(self, sitedir:Path):
    method get_slug (line 134) | def get_slug(file:Path, root:Path, slugs:str):
    method load_notebook (line 145) | def load_notebook(file:Path, root:Path, template:Template, template_fn...
    method load_markdown (line 210) | def load_markdown(file:Path, root:Path, template_fn=None, slugs="flat"...

FILE: packages/coldtype-core/src/coldtype/web/server.py
  function is_port_in_use (line 10) | def is_port_in_use(port: int) -> bool:
  function maybe_run_server (line 15) | def maybe_run_server(livereload:bool, port:int, dir:Path):
  function kill_process_on_port_unix (line 26) | def kill_process_on_port_unix(port):

FILE: packages/coldtype-core/src/coldtype/web/site.py
  class site (line 33) | class site(renderable):
    method __init__ (line 34) | def __init__(self, root
    method build (line 161) | def build(self):
    method mod_css (line 219) | def mod_css(self, css):
    method header_footer (line 239) | def header_footer(self, nav_links, url, page=None):
    method render_page (line 252) | def render_page(self, page:Page=None, data=None):
    method initial (line 321) | def initial(self):
    method exit (line 328) | def exit(self):
    method upload (line 333) | def upload(self, bucket, region="us-east-1", profile=None):

FILE: scripts/inline_mixins.py
  function write_last (line 27) | def write_last(src):

FILE: scripts/keyboard_layout_converter.py
  function scratch (line 57) | def scratch(f:Frame):

FILE: scripts/robofont_coldtype.py
  class ColdtypeSerializer (line 10) | class ColdtypeSerializer(BaseWindowController):
    method __init__ (line 11) | def __init__(self):
    method editTextCallback (line 25) | def editTextCallback(self, sender):
    method windowCloseCallback (line 28) | def windowCloseCallback(self, sender):
    method writeGlyph (line 34) | def writeGlyph(self):
    method shouldDraw (line 65) | def shouldDraw(self, notification):

FILE: test/source_file.py
  function test_src_animation (line 5) | def test_src_animation(f):

FILE: test/source_file_with_config.py
  function test1 (line 7) | def test1(r):
  function test2 (line 12) | def test2(r):

FILE: test/test_geometry.py
  class TestGeometry (line 4) | class TestGeometry(unittest.TestCase):
    method test_rect (line 5) | def test_rect(self):
    method test_interpolate (line 24) | def test_interpolate(self):

FILE: test/test_helpers.py
  class TestHelpers (line 6) | class TestHelpers(unittest.TestCase):
    method test_glyph_to_uni (line 7) | def test_glyph_to_uni(self):

FILE: test/test_p.py
  class TestRunonPath (line 10) | class TestRunonPath(unittest.TestCase):
    method test_init (line 11) | def test_init(self):
    method test_find (line 35) | def test_find(self):
    method test_collapse (line 62) | def test_collapse(self):
    method test_drawing_mixin (line 74) | def test_drawing_mixin(self):
    method test_layout_mixin (line 126) | def test_layout_mixin(self):
    method test_fx_mixin (line 134) | def test_fx_mixin(self):
    method test_glyphwise (line 150) | def test_glyphwise(self):
    method test_mods (line 160) | def test_mods(self):
    method test_empty (line 174) | def test_empty(self):

FILE: test/test_pens.py
  class TestPens (line 15) | class TestPens(unittest.TestCase):
    method test_gs (line 16) | def test_gs(self):
    method test_gs_arrowcluster (line 32) | def test_gs_arrowcluster(self):
    method test_gs_relative_moves (line 41) | def test_gs_relative_moves(self):
    method test_reverse (line 50) | def test_reverse(self):
    method test_transforms (line 57) | def test_transforms(self):
    method test_pens_ambit (line 71) | def test_pens_ambit(self):
    method test_remove_blanks (line 86) | def test_remove_blanks(self):
    method test_collapse (line 95) | def test_collapse(self):
    method test_find (line 141) | def test_find(self):
    method test_cond (line 150) | def test_cond(self):
    method test_alpha (line 166) | def test_alpha(self):
    method test_visibility (line 183) | def test_visibility(self):
    method test_style (line 209) | def test_style(self):
    method test_subsegmenting (line 263) | def test_subsegmenting(self):
    method test_explode (line 291) | def test_explode(self):
    method test_chain (line 309) | def test_chain(self):

FILE: test/test_pens_rendered.py
  function hash_img (line 19) | def hash_img(path):
  function test_image (line 28) | def test_image(test:unittest.TestCase, path, rect=Rect(1000, 500)):
  class TestPensRendered (line 40) | class TestPensRendered(unittest.TestCase):
    method test_skia_png (line 41) | def test_skia_png(self):

FILE: test/test_runon.py
  class TestRunon (line 4) | class TestRunon(unittest.TestCase):
    method test_init (line 5) | def test_init(self):
    method test_attr (line 132) | def test_attr(self):
    method test_alpha (line 147) | def test_alpha(self):
    method test_logic (line 162) | def test_logic(self):
    method test_layers (line 176) | def test_layers(self):
    method test_collapse (line 251) | def test_collapse(self):
    method test_chain (line 263) | def test_chain(self):
    method test_inter (line 312) | def test_inter(self):
    method test_enumerate (line 355) | def test_enumerate(self):
    method test_add (line 368) | def test_add(self):
    method test_index (line 380) | def test_index(self):
    method test_find (line 385) | def test_find(self):
    method test_append_insert (line 398) | def test_append_insert(self):
    method test_tree (line 423) | def test_tree(self):

FILE: test/test_syntax_mods.py
  class TestSyntaxMods (line 26) | class TestSyntaxMods(unittest.TestCase):
    method setUp (line 27) | def setUp(self) -> None:
    method tearDown (line 32) | def tearDown(self) -> None:
    method test_empty_reader (line 37) | def test_empty_reader(self):
    method test_source_with_config (line 46) | def test_source_with_config(self):
    method test_frame_read (line 53) | def test_frame_read(self):
    method test_syntax_mods (line 58) | def test_syntax_mods(self):

FILE: test/test_time.py
  class TestTime (line 36) | class TestTime(unittest.TestCase):
    method test_ascii_timeline_1 (line 37) | def test_ascii_timeline_1(self):
    method test_ascii_timeline_2 (line 58) | def test_ascii_timeline_2(self):
    method test_ascii_timeline_3 (line 72) | def test_ascii_timeline_3(self):
    method test_ascii_timeline_ec (line 123) | def test_ascii_timeline_ec(self):
    method test_animation (line 130) | def test_animation(self):

FILE: test/visuals/test_color_palette.py
  function r10 (line 4) | def r10(x):
  function lut (line 7) | def lut(rgba):
  function contrast_cut (line 21) | def contrast_cut(mp=127, w=5):
  function restricted_colors (line 43) | def restricted_colors(f):

FILE: test/visuals/test_gs.py
  function test2_ (line 4) | def test2_(r):
  function test3_ (line 17) | def test3_(r):
  function test4_ (line 26) | def test4_(r):

FILE: test/visuals/test_image_font.py
  function test_leibeheide (line 20) | def test_leibeheide(r):

FILE: test/visuals/test_midi_ctrl.py
  function render (line 5) | def render(f, rstate):

FILE: test/visuals/test_reader_mod.py
  function test_xstretch (line 4) | def test_xstretch(r):
  function test_xstretch_slnt (line 19) | def test_xstretch_slnt(r):
  function test_ystretch (line 29) | def test_ystretch(r):
  function test_ystretch_slnt (line 40) | def test_ystretch_slnt(r):

FILE: tests/_img_only.py
  function scratch (line 4) | def scratch(f):

FILE: tests/test_color.py
  function test_interp (line 4) | def test_interp(r):
  function test_adjust (line 22) | def test_adjust(r):
  function test_theme_backfill (line 34) | def test_theme_backfill(r):

FILE: tests/test_drawbot.py
  function test_setup (line 16) | def test_setup(r):
  function test_gs_pen (line 23) | def test_gs_pen(r):
  function test_distribute_on_path (line 40) | def test_distribute_on_path(r):

FILE: tests/test_fonts.py
  function test_instances (line 5) | def test_instances(r):
  function test_fontmake (line 19) | def test_fontmake(r):

FILE: tests/test_fx.py
  function test_lookup (line 7) | def test_lookup(_r):

FILE: tests/test_glyphwise.py
  function _test_glyph_kerning (line 4) | def _test_glyph_kerning(font_path, kern):
  function test_format_equality (line 22) | def test_format_equality(r):
  function test_ligature (line 32) | def test_ligature(r):
  function test_variable_args (line 63) | def test_variable_args(r):
  function test_newline (line 86) | def test_newline(r):
  function test_newline_onechar (line 102) | def test_newline_onechar(r):
  function test_kp (line 122) | def test_kp(r):
  function test_tu (line 148) | def test_tu(r):
  function test_multistyle (line 167) | def test_multistyle(r):
  function test_multiline (line 195) | def test_multiline(r):
  function test_no_reverse (line 233) | def test_no_reverse(r):
  function test_multistyle_stst (line 244) | def test_multistyle_stst(r):

FILE: tests/test_i18n.py
  function gn_to_c (line 18) | def gn_to_c(gn):
  function gn_to_uniname (line 21) | def gn_to_uniname(gn):
  function test_mixed_lang_slug (line 25) | def test_mixed_lang_slug(_r):
  function test_mixed_lang_stst (line 65) | def test_mixed_lang_stst(_r):
  function test_rtl_multiline_stst (line 94) | def test_rtl_multiline_stst(_r):
  function test_hebrew (line 117) | def test_hebrew(_r):
  function test_multidir_seg_string (line 130) | def test_multidir_seg_string(_r):
  function test_combine_slugs (line 150) | def test_combine_slugs(_r):
  function test_language_specific_forms (line 162) | def test_language_specific_forms(_r):
  function test_korean_fallback (line 175) | def test_korean_fallback(_r):
  function test_language_specific_ufo (line 184) | def test_language_specific_ufo(_r):

FILE: tests/test_pens.py
  function test_scaleToRect (line
Condensed preview — 507 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,844K chars).
[
  {
    "path": ".coldtype.win.py",
    "chars": 372,
    "preview": "WINDOW_PIN = \"E\"\nWINDOW_CONTENT_SCALE = 1\nWINDOW_FLOAT = 1\n#WINDOW_TRANSPARENT = 1\n\n# this should be a properly-configur"
  },
  {
    "path": ".gitignore",
    "chars": 695,
    "preview": ".DS_Store\n.vscode\n.idea\nenv\nvenv\nvenv2\nvenv37\nvenv-arm\nvenv_x64\nvenv*\nbenv\nbenv*\ntest/visuals/artifacts/*\ntest/visuals/*"
  },
  {
    "path": ".python-version",
    "chars": 4,
    "preview": "3.13"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 15216,
    "preview": "# Changelog\n\nStarting at 0.5.0, all notable changes to Coldtype will be described here (briefly). Edit: looks like I for"
  },
  {
    "path": "LICENSE",
    "chars": 11394,
    "preview": "Copyright 2020 — Goodhertz, Inc.\n---\n                                 Apache License\n                           Version "
  },
  {
    "path": "README_EXTRAS.md",
    "chars": 1666,
    "preview": "### MIDI\n\nTodo\n\n### Global hotkeys\n\nUses pynput, but on Mac permissions are a pain now: [helpful instructions](https://t"
  },
  {
    "path": "assets/.gitignore",
    "chars": 22,
    "preview": "Noto*\nTwemoji*\nSource*"
  },
  {
    "path": "assets/ColdtypeObviously.designspace",
    "chars": 923,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<designspace format=\"4.0\">\n  <axes>\n    <axis tag=\"wdth\" name=\"width\" minimum=\"0\""
  },
  {
    "path": "assets/ColdtypeObviously_BlackItalic.ufo/fontinfo.plist",
    "chars": 3183,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/ColdtypeObviously_BlackItalic.ufo/glyphs/C_.glif",
    "chars": 1418,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"C\" format=\"2\">\n  <advance width=\"623\"/>\n  <unicode hex=\"0043\"/>\n  <o"
  },
  {
    "path": "assets/ColdtypeObviously_BlackItalic.ufo/glyphs/D_.glif",
    "chars": 1654,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"D\" format=\"2\">\n  <advance width=\"721\"/>\n  <unicode hex=\"0044\"/>\n  <a"
  },
  {
    "path": "assets/ColdtypeObviously_BlackItalic.ufo/glyphs/E_.glif",
    "chars": 1962,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"E\" format=\"2\">\n  <advance width=\"584\"/>\n  <unicode hex=\"0045\"/>\n  <o"
  },
  {
    "path": "assets/ColdtypeObviously_BlackItalic.ufo/glyphs/L_.glif",
    "chars": 1238,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"L\" format=\"2\">\n  <advance width=\"471\"/>\n  <unicode hex=\"004C\"/>\n  <a"
  },
  {
    "path": "assets/ColdtypeObviously_BlackItalic.ufo/glyphs/O_.glif",
    "chars": 1238,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"O\" format=\"2\">\n  <advance width=\"738\"/>\n  <unicode hex=\"004F\"/>\n  <o"
  },
  {
    "path": "assets/ColdtypeObviously_BlackItalic.ufo/glyphs/P_.glif",
    "chars": 1588,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"P\" format=\"2\">\n  <advance width=\"683\"/>\n  <unicode hex=\"0050\"/>\n  <o"
  },
  {
    "path": "assets/ColdtypeObviously_BlackItalic.ufo/glyphs/T_.glif",
    "chars": 1529,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"T\" format=\"2\">\n  <advance width=\"535\"/>\n  <unicode hex=\"0054\"/>\n  <a"
  },
  {
    "path": "assets/ColdtypeObviously_BlackItalic.ufo/glyphs/Y_.glif",
    "chars": 1864,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"Y\" format=\"2\">\n  <advance width=\"639\"/>\n  <unicode hex=\"0059\"/>\n  <o"
  },
  {
    "path": "assets/ColdtypeObviously_BlackItalic.ufo/glyphs/contents.plist",
    "chars": 613,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/ColdtypeObviously_BlackItalic.ufo/glyphs/layerinfo.plist",
    "chars": 247,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/ColdtypeObviously_BlackItalic.ufo/glyphs/space.glif",
    "chars": 274,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"space\" format=\"2\">\n  <advance width=\"195\"/>\n  <unicode hex=\"0020\"/>\n"
  },
  {
    "path": "assets/ColdtypeObviously_BlackItalic.ufo/groups.plist",
    "chars": 32288,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/ColdtypeObviously_BlackItalic.ufo/layercontents.plist",
    "chars": 283,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/ColdtypeObviously_BlackItalic.ufo/lib.plist",
    "chars": 39990,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/ColdtypeObviously_BlackItalic.ufo/metainfo.plist",
    "chars": 318,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/ColdtypeObviously_CompressedBlackItalic.ufo/fontinfo.plist",
    "chars": 3375,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/C_.glif",
    "chars": 1397,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"C\" format=\"2\">\n  <advance width=\"140\"/>\n  <unicode hex=\"0043\"/>\n  <o"
  },
  {
    "path": "assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/D_.glif",
    "chars": 1657,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"D\" format=\"2\">\n  <advance width=\"222\"/>\n  <unicode hex=\"0044\"/>\n  <a"
  },
  {
    "path": "assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/E_.glif",
    "chars": 1942,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"E\" format=\"2\">\n  <advance width=\"171\"/>\n  <unicode hex=\"0045\"/>\n  <o"
  },
  {
    "path": "assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/L_.glif",
    "chars": 1216,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"L\" format=\"2\">\n  <advance width=\"132\"/>\n  <unicode hex=\"004C\"/>\n  <a"
  },
  {
    "path": "assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/O_.glif",
    "chars": 1255,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"O\" format=\"2\">\n  <advance width=\"202\"/>\n  <unicode hex=\"004F\"/>\n  <o"
  },
  {
    "path": "assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/P_.glif",
    "chars": 1594,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"P\" format=\"2\">\n  <advance width=\"211\"/>\n  <unicode hex=\"0050\"/>\n  <o"
  },
  {
    "path": "assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/T_.glif",
    "chars": 1483,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"T\" format=\"2\">\n  <advance width=\"157\"/>\n  <unicode hex=\"0054\"/>\n  <a"
  },
  {
    "path": "assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/Y_.glif",
    "chars": 1865,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"Y\" format=\"2\">\n  <advance width=\"211\"/>\n  <unicode hex=\"0059\"/>\n  <o"
  },
  {
    "path": "assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/contents.plist",
    "chars": 613,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/layerinfo.plist",
    "chars": 247,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/ColdtypeObviously_CompressedBlackItalic.ufo/glyphs/space.glif",
    "chars": 273,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"space\" format=\"2\">\n  <advance width=\"60\"/>\n  <unicode hex=\"0020\"/>\n "
  },
  {
    "path": "assets/ColdtypeObviously_CompressedBlackItalic.ufo/groups.plist",
    "chars": 32288,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/ColdtypeObviously_CompressedBlackItalic.ufo/layercontents.plist",
    "chars": 283,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/ColdtypeObviously_CompressedBlackItalic.ufo/lib.plist",
    "chars": 40123,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/ColdtypeObviously_CompressedBlackItalic.ufo/metainfo.plist",
    "chars": 318,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/README.md",
    "chars": 80,
    "preview": "fontmake -m assets/ColdtypeObviously.designspace -o variable --output-dir=assets"
  },
  {
    "path": "assets/logos.ufo/fontinfo.plist",
    "chars": 790,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/logos.ufo/glyphs/contents.plist",
    "chars": 273,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/logos.ufo/glyphs/goodhertz_logo_2019.glif",
    "chars": 21688,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<glyph name=\"goodhertz_logo_2019\" format=\"2\">\n  <advance width=\"1917\"/>\n  <outlin"
  },
  {
    "path": "assets/logos.ufo/glyphs/layerinfo.plist",
    "chars": 247,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/logos.ufo/glyphs.background/contents.plist",
    "chars": 183,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/logos.ufo/glyphs.background/layerinfo.plist",
    "chars": 248,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/logos.ufo/layercontents.plist",
    "chars": 383,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/logos.ufo/lib.plist",
    "chars": 588,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/logos.ufo/metainfo.plist",
    "chars": 318,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "assets/noto.py",
    "chars": 392,
    "preview": "#!/usr/bin/env python\n\nfrom io import BytesIO\nfrom urllib.request import urlopen\nfrom zipfile import ZipFile\n\nzipurl = \""
  },
  {
    "path": "buildenv",
    "chars": 19,
    "preview": "export PYTHONUTF8=1"
  },
  {
    "path": "docs/.gitignore",
    "chars": 28,
    "preview": "_build\n_static/renders\n*.pdf"
  },
  {
    "path": "docs/tutorials/midi.rst",
    "chars": 5386,
    "preview": "MIDI\n====\n\nThere are two primary uses for MIDI in Coldtype programs, and they're kind of completely unrelated to each ot"
  },
  {
    "path": "docs/tutorials/type_design.rst",
    "chars": 3359,
    "preview": "Type Design\n===========\n\nLive Reload UFOs\n----------------\n\nOne fun thing that coldtype can do out of the box is load ``"
  },
  {
    "path": "examples/.gitignore",
    "chars": 28,
    "preview": "Adobe Premiere Pro Auto-Save"
  },
  {
    "path": "examples/alphabet.py",
    "chars": 318,
    "preview": "from coldtype import *\n\nglyphs = \"abcdefghijklmnopqrstuvwxyz0123456789!.,\"\n\n@renderable(\"letter\", bg=1, fmt=\"pdf\")\ndef a"
  },
  {
    "path": "examples/animations/808.py",
    "chars": 9025,
    "preview": "# 808 animation\n# 📽 You can view this code as an animation here: https://vimeo.com/479376752 📽\n\nfrom coldtype import *\nf"
  },
  {
    "path": "examples/animations/_audio.py",
    "chars": 644,
    "preview": "from coldtype import *\nfrom coldtype.timing.audio import Wavfile\nfrom coldtype.fx.skia import phototype\n\n\"\"\"\nYou'll need"
  },
  {
    "path": "examples/animations/_drumsolo.py",
    "chars": 1157,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import phototype\n\naudio = __sibling__(\"media/68.wav\")\nmidi = MidiTimeline(\n"
  },
  {
    "path": "examples/animations/_simple.py",
    "chars": 503,
    "preview": "from coldtype import *\n\n@animation(timeline=Timeline(120, 30))\ndef simple(f):\n    try:\n        x, y = f.rec[\"cursor\"].ge"
  },
  {
    "path": "examples/animations/access_frame.py",
    "chars": 1010,
    "preview": "from coldtype import *\nfrom coldtype.raster import *\n\n@animation(Rect(540, 540), bg=1)\ndef numbers(f:Frame):\n    # Do an"
  },
  {
    "path": "examples/animations/adsr.py",
    "chars": 1597,
    "preview": "from coldtype import *\nfrom coldtype.timing.nle.ascii import AsciiTimeline\n\nat = AsciiTimeline(2, 30, \"\"\"\n              "
  },
  {
    "path": "examples/animations/adsr_ascii.py",
    "chars": 315,
    "preview": "from coldtype import *\n\nat = AsciiTimeline(1, 30, \"\"\"\n                           <\nT           T           T\n\"\"\")\n\n@anim"
  },
  {
    "path": "examples/animations/alphabet.py",
    "chars": 594,
    "preview": "from coldtype import *\n\ntl = Timeline(26, fps=18)\n\n@animation(rect=(1080, 1080), timeline=tl, bg=0)\ndef render(f):\n    p"
  },
  {
    "path": "examples/animations/alternate_glyphs.py",
    "chars": 354,
    "preview": "from coldtype import *\n\nat = AsciiTimeline(3, 30, \"\"\"\n                            <\n    [ss06      ]\n           [ss07   "
  },
  {
    "path": "examples/animations/ascii_choreography.py",
    "chars": 936,
    "preview": "from coldtype import *\nfrom coldtype.timing.nle.ascii import AsciiTimeline\n\nat = AsciiTimeline(3, 30, \"\"\"\n              "
  },
  {
    "path": "examples/animations/ascii_keyframe_positions.py",
    "chars": 934,
    "preview": "from coldtype import *\n\nat = AsciiTimeline(2, \"\"\"\n                                                         <\nA    A     "
  },
  {
    "path": "examples/animations/ascii_keyframes.py",
    "chars": 849,
    "preview": "from coldtype import *\nfrom coldtype.css import *\n\nat = AsciiTimeline(1, \"\"\"\n                                           "
  },
  {
    "path": "examples/animations/ascii_keyframes2.py",
    "chars": 750,
    "preview": "from coldtype import *\nfrom coldtype.css import *\n\nr = Rect(1080)\n\nat = AsciiTimeline(1, \"\"\"\n                           "
  },
  {
    "path": "examples/animations/ascii_keyframes_entrance.py",
    "chars": 981,
    "preview": "from coldtype import *\n\nat = AsciiTimeline(2, \"\"\"\n                                        <\nN         W                 "
  },
  {
    "path": "examples/animations/ascii_pixels.py",
    "chars": 506,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import precompose\n\nat = AsciiTimeline(1, 18, \"\"\"\n                          "
  },
  {
    "path": "examples/animations/ascii_simple.py",
    "chars": 574,
    "preview": "from coldtype import *\nfrom coldtype.timing.nle.ascii import AsciiTimeline\n\nat = AsciiTimeline(4, \"\"\"\n                  "
  },
  {
    "path": "examples/animations/ascii_twostep.py",
    "chars": 924,
    "preview": "from coldtype import *\nfrom coldtype.timing.nle.ascii import AsciiTimeline\n\nat = AsciiTimeline(1, \"\"\"\n                  "
  },
  {
    "path": "examples/animations/ascii_words.py",
    "chars": 895,
    "preview": "from coldtype import *\n\nat = AsciiTimeline(1, 30, \"\"\"\n                                                                  "
  },
  {
    "path": "examples/animations/avoidance.py",
    "chars": 1184,
    "preview": "from coldtype import *\nimport numpy as np\n\n# after https://editor.p5js.org/creativecoding/sketches/ncNWaEkTw\n\nminMouseDi"
  },
  {
    "path": "examples/animations/banner.py",
    "chars": 1311,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import phototype\n\nkfs = [\n    dict(wdth=0, rotate=0, tu=300),\n    dict(wdth"
  },
  {
    "path": "examples/animations/bitmap_font.py",
    "chars": 655,
    "preview": "from coldtype import *\nfrom coldtype.runon import RunonEnumerable\nfrom coldtype.drawbot import tobp # mac-only\n\n# inspir"
  },
  {
    "path": "examples/animations/blendmode.py",
    "chars": 877,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import phototype\n\n@animation(bg=0, timeline=Timeline(30, 15), render_bg=1)\n"
  },
  {
    "path": "examples/animations/bounce.py",
    "chars": 516,
    "preview": "from coldtype import *\n\n@animation(tl=60, bg=1)\ndef scratch(f):\n    ri = f.a.r.inset(50)\n    \n    a = (StSt(\"COLD\", Font"
  },
  {
    "path": "examples/animations/colrv1_foldit.py",
    "chars": 565,
    "preview": "from coldtype import *\n\nat = AsciiTimeline(2, 30, \"\"\"\n[fold       ]              <\n              [it        ]\n\"\"\")\n\n@ani"
  },
  {
    "path": "examples/animations/colrv1_nabla.py",
    "chars": 310,
    "preview": "from coldtype import *\n\n@animation((1080, 540), tl=30, bg=hsl(0.7, 0.4, 0.4))\ndef nabla1(f):\n    return (Glyphwise(\"COLR"
  },
  {
    "path": "examples/animations/countdown.py",
    "chars": 1215,
    "preview": "from coldtype import *\nfrom coldtype.raster import *\nfrom coldtype.fx.motion import filmjitter\n\nat = AsciiTimeline(3, 18"
  },
  {
    "path": "examples/animations/custom_ease.py",
    "chars": 667,
    "preview": "from coldtype import *\nfrom coldtype.fx.xray import skeleton\n\n@animation(timeline=60, bg=1)\ndef easer(f):\n    ease_curve"
  },
  {
    "path": "examples/animations/custom_output.py",
    "chars": 366,
    "preview": "from coldtype import *\n\nclass custom_output_animation(animation):\n    def pass_path(self, index=0):\n        return Path("
  },
  {
    "path": "examples/animations/delay.py",
    "chars": 840,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import color_phototype\n\n\n@animation((1500, 800), timeline=Timeline(60, fps="
  },
  {
    "path": "examples/animations/drumsolo2.py",
    "chars": 814,
    "preview": "from coldtype import *\n\naudio = __sibling__(\"media/c78.wav\")\n\nmidi = MidiTimeline(__sibling__(\"media/c78.mid\")\n    , bpm"
  },
  {
    "path": "examples/animations/dswatch.py",
    "chars": 618,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import phototype, shake\n\n\"\"\"\nSaving a change to UFOs included in the design"
  },
  {
    "path": "examples/animations/dvd.py",
    "chars": 1022,
    "preview": "from coldtype import *\n\nfont, fontSize, txt = [\n    [Font.MutatorSans(), 100, \"ABC\"],\n    [\"MDNichrome-V\", 100, \"DVD\"],\n"
  },
  {
    "path": "examples/animations/ec.py",
    "chars": 422,
    "preview": "from coldtype import *\n\nat = AsciiTimeline(2, \"\"\"\n                                            <\n[A    ]   [A  ]     [A  "
  },
  {
    "path": "examples/animations/flyin.py",
    "chars": 635,
    "preview": "from coldtype import *\n\nat = AsciiTimeline(2, 30, \"\"\"\n                                        <\n    a        a          "
  },
  {
    "path": "examples/animations/glyphwise.py",
    "chars": 781,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import phototype\n\nfnt = Font.MutatorSans()\n\n@animation(timeline=Timeline(90"
  },
  {
    "path": "examples/animations/glyphwise2_rtl.py",
    "chars": 563,
    "preview": "from coldtype import *\n\nfont_zip_url = \"https://github.com/aminabedi68/Estedad/releases/download/7.3/Estedad-v7.3.zip\"\ne"
  },
  {
    "path": "examples/animations/glyphwise_keyframes.py",
    "chars": 663,
    "preview": "from coldtype import *\nfrom coldtype.timing.nle.ascii import AsciiTimeline\n\nstates = {\n    \"A\": dict(wdth=0, wght=1, rot"
  },
  {
    "path": "examples/animations/glyphwise_wave.py",
    "chars": 478,
    "preview": "from coldtype import *\n\nDEBUG = 0\n\n@animation((1080, 1080/2), timeline=30)\ndef cilati_wave(f:Frame):\n    def styler(g:Gl"
  },
  {
    "path": "examples/animations/glyphwise_wave2.py",
    "chars": 363,
    "preview": "from coldtype import *\n\n@animation((1080, 1080/2), timeline=50)\ndef fatface_wave(f):\n    return (Glyphwise(\"COLD\", lambd"
  },
  {
    "path": "examples/animations/house.py",
    "chars": 948,
    "preview": "from coldtype import *\n\naudio = ººsiblingºº(\"media/house.wav\")\n\nmidi = MidiTimeline(\n    ººsiblingºº(\"media/house.mid\")\n"
  },
  {
    "path": "examples/animations/interpolate_roughen.py",
    "chars": 430,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import phototype\n\nr = Rect(1080, 1080)\na = P().oval(r.inset(200)).flatten(1"
  },
  {
    "path": "examples/animations/ipa_vowels.py",
    "chars": 4086,
    "preview": "from coldtype import *\nfrom coldtype.raster import *\nfrom itertools import chain\n\nmedia = ººsiblingºº(\"media/vowels\")\n\nm"
  },
  {
    "path": "examples/animations/ives.py",
    "chars": 1304,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import phototype\n\nVERSIONS = {\n    2: dict(),\n    3: dict(),\n    4: dict(),"
  },
  {
    "path": "examples/animations/letters_easing.py",
    "chars": 1295,
    "preview": "from coldtype import *\n\n# inspired by https://github.com/coldtype/coldtype/discussions/135\n\nletters = \"\".join([f\"{x} \" f"
  },
  {
    "path": "examples/animations/linewise.py",
    "chars": 533,
    "preview": "from coldtype import *\n\ntxt = \"COLD\\nTYPE\"\n\n@animation((1080, 540), tl=60)\ndef scratch1(f):\n    return (Glyphwise(txt, l"
  },
  {
    "path": "examples/animations/midi_cc.py",
    "chars": 656,
    "preview": "from coldtype import *\n\nmt = MidiTimeline(ººsiblingºº(\"media/midi_cc.mid\"))\nwav = ººsiblingºº(\"media/midi_cc.wav\")\n\nfnt "
  },
  {
    "path": "examples/animations/moire1.py",
    "chars": 782,
    "preview": "from coldtype import *\nfrom coldtype.raster import *\nfrom noise import pnoise1\n\nr = Rect(1080)\n\ndef patternmaker():\n    "
  },
  {
    "path": "examples/animations/officehours.py",
    "chars": 1317,
    "preview": "from coldtype import *\nfrom coldtype.timing.nle.ascii import AsciiTimeline\n\nat = AsciiTimeline(1, \"\"\"\n                  "
  },
  {
    "path": "examples/animations/original_demo.py",
    "chars": 671,
    "preview": "from coldtype import *\n\nstates = [\n    dict(wdth=0, rotate=0),\n    dict(wdth=1, rotate=15),\n    dict(wdth=0.5, rotate=-2"
  },
  {
    "path": "examples/animations/penangle.py",
    "chars": 686,
    "preview": "from coldtype import *\nfrom coldtype.raster import phototype\n\nr = Rect(1080)\nri = r.inset(160)\np = P().m(ri.psw).ioc(ri."
  },
  {
    "path": "examples/animations/physics2d.py",
    "chars": 2903,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import phototype\nfrom coldtype.physics.pymunk import segments\n\n# pip instal"
  },
  {
    "path": "examples/animations/pixels.py",
    "chars": 1587,
    "preview": "from coldtype import *\nfrom coldtype.raster import *\n\ndrums = MidiTimeline(ººsiblingºº(\"media/cyber.mid\"), bpm=100, fps="
  },
  {
    "path": "examples/animations/pseudomorph.py",
    "chars": 313,
    "preview": "from coldtype import *\n\nr = Rect(1440, 540)\n\n@animation(r, tl=70)\ndef pseudomorph(f):\n    return (StSt(\"HELLO\" if f.e() "
  },
  {
    "path": "examples/animations/recursive_shape.py",
    "chars": 929,
    "preview": "from coldtype import *\nfrom coldtype.raster import *\n\n@animation((1080, 1080)\n    , timeline=90\n    , composites=1\n    ,"
  },
  {
    "path": "examples/animations/recursive_text.py",
    "chars": 1144,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import phototype, luma\n\n@animation(timeline=80, bg=0\n    , composites=1\n   "
  },
  {
    "path": "examples/animations/retails/casual.py",
    "chars": 1397,
    "preview": "from coldtype import *\n\nat = AsciiTimeline(6, 30, \"\"\"\n                                              <\n[0   ][1   ][2    "
  },
  {
    "path": "examples/animations/retails/chopper.py",
    "chars": 2141,
    "preview": "from coldtype import *\nfrom coldtype.raster import *\n\nfrom functools import partial\n\ndef Chopper(**kwargs):\n    d = {}\n "
  },
  {
    "path": "examples/animations/retails/colorfont.py",
    "chars": 819,
    "preview": "from coldtype import *\n\nppvf = Font.Find(\"PappardelleParty-VF\")\n\ncustom_palette = [\n    hsl(0.35, 0.7),\n    hsl(0.5, 0.7"
  },
  {
    "path": "examples/animations/retails/digestive_snake.py",
    "chars": 1530,
    "preview": "from coldtype import *\n\nr = Rect(1920, 500)\n\ntrack = (P()\n    .vl([\n        ('moveTo', ((-342, 68),)),\n        ('curveTo"
  },
  {
    "path": "examples/animations/retails/digestive_wind.py",
    "chars": 918,
    "preview": "from coldtype import *\nimport noise\n\n# available from https://ohnotype.co/fonts/digestive\n# though other variable-wdth f"
  },
  {
    "path": "examples/animations/retails/gridsystems.py",
    "chars": 1253,
    "preview": "from coldtype import *\n\nauthor = \"Josef Müller-Brockmann\"\npublisher = \"Niggli\"\n\ntxt_en = [\n    \"Grid systems\",\n    \"in g"
  },
  {
    "path": "examples/animations/retails/hansjorg.py",
    "chars": 1628,
    "preview": "from coldtype import *\nfrom coldtype.raster import *\nfrom string import ascii_lowercase\nfrom random import Random\n\n# ada"
  },
  {
    "path": "examples/animations/retails/montreuil.py",
    "chars": 3476,
    "preview": "from coldtype import *\nfrom coldtype.raster import *\nfrom functools import partial\nfrom random import Random\n\nfnt = Font"
  },
  {
    "path": "examples/animations/retails/stacked_and_justified.py",
    "chars": 898,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import phototype\n\nfatface = Font.Find(\"OhnoFatfaceV\")\n\n@animation(timeline="
  },
  {
    "path": "examples/animations/retails/vulfbach.py",
    "chars": 1887,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import color_phototype\n\n\"\"\"\nRun as `coldtype examples/animation/vulfbach.py"
  },
  {
    "path": "examples/animations/retails/wavinghand.py",
    "chars": 350,
    "preview": "from coldtype import *\n\n@animation()\ndef peace(f):\n    txtfont = \"Degular-Black\"\n    return (StSt(\"Peace ✌ !\", txtfont, "
  },
  {
    "path": "examples/animations/retails/welcome.py",
    "chars": 397,
    "preview": "from coldtype import *\n\n@animation((1080, 290), timeline=Timeline(90), render_bg=True, bg=hsl(0.65))\ndef welcome(f):\n   "
  },
  {
    "path": "examples/animations/rgbsplit.py",
    "chars": 965,
    "preview": "from coldtype import *\nfrom coldtype.raster import *\n\n@animation(bg=0, tl=60)\ndef rgbsplit(f):\n    return (StSt(\"COLD\\nT"
  },
  {
    "path": "examples/animations/roundandround.py",
    "chars": 1592,
    "preview": "from coldtype import *\nfrom coldtype.raster import phototype, filmjitter\n\ne1 = (P().withRect(Rect(1000), lambda r, p: p\n"
  },
  {
    "path": "examples/animations/separation.py",
    "chars": 895,
    "preview": "from coldtype import *\n\n# variation on a design by @mjmeilleur\n\n@animation(tl=240, bg=1)\ndef separation(f):\n    e, info "
  },
  {
    "path": "examples/animations/simple_recording.json",
    "chars": 2165,
    "preview": "{\"cursor\": {\"0\": [576, 78], \"1\": [549, 84], \"2\": [510, 84], \"3\": [453, 96], \"4\": [405, 124], \"5\": [397, 146], \"6\": [406,"
  },
  {
    "path": "examples/animations/simplevarfont.py",
    "chars": 458,
    "preview": "from coldtype import *\n\n\n@animation((1920, 540), timeline=Timeline(60, 30), bg=1)\ndef unfold(f):\n    return (StSt(\"Coldt"
  },
  {
    "path": "examples/animations/slicer.py",
    "chars": 665,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import phototype\n\nrs = random_series(-(r:=50), r, seed=0)\n\n@animation((1080"
  },
  {
    "path": "examples/animations/sonification.py",
    "chars": 2448,
    "preview": "from coldtype import *\nimport wave, struct\n\nVERSIONS = {\n    \"C\": dict(text=\"C\", font=\"ObviouslyV\"),\n    \"O\": dict(text="
  },
  {
    "path": "examples/animations/spreadstack.py",
    "chars": 456,
    "preview": "from coldtype import *\n\n@animation((1080, 540), 60, bg=1)\ndef scratch(f):\n    ex = f.e(\"cei\", r=(0, 60))\n    rs = random"
  },
  {
    "path": "examples/animations/superoutline.py",
    "chars": 1014,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import phototype\nfrom coldtype.warping import warp\n\nfnt = Font.ColdtypeObvi"
  },
  {
    "path": "examples/animations/tapered_shadow.py",
    "chars": 1242,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import phototype\nfrom coldtype.warping import warp\n\nfnt = Font.ColdtypeObvi"
  },
  {
    "path": "examples/animations/texttopoints.py",
    "chars": 487,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import phototype\n\n# inspired by https://p5js.org/reference/#/p5.Font/textTo"
  },
  {
    "path": "examples/animations/transparent_gifski.py",
    "chars": 287,
    "preview": "from coldtype import *\n#from coldtype.renderable.animation import gifski\n\n@animation((1080, 540), timeline=30, bg=1)\ndef"
  },
  {
    "path": "examples/animations/transparent_understroke.py",
    "chars": 632,
    "preview": "from coldtype import *\nfrom functools import partial\n\nr = Rect(1080, 680)\n\ndef cut(line, i, p):\n    if i > 0:\n        re"
  },
  {
    "path": "examples/animations/truchet.py",
    "chars": 1024,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import phototype\n\n# inspired by https://mauricemeilleur.net/truchet_tiles\n\n"
  },
  {
    "path": "examples/animations/truchet3.py",
    "chars": 1600,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\nfrom random import Random\n\n# inspired by https://mauricemeilleur.n"
  },
  {
    "path": "examples/animations/twister.py",
    "chars": 590,
    "preview": "from coldtype import *\nfrom functools import partial\n\ndef pair(tx, f, x):\n    fa = f.adj(-x.i*3)\n    ro = fa.e(\"eeio\", 0"
  },
  {
    "path": "examples/animations/ulrich_e.py",
    "chars": 1443,
    "preview": "from coldtype import *\nfrom coldtype.raster import *\nfrom coldtype.timing.easing import all_eases\n\n# e stands for easing"
  },
  {
    "path": "examples/animations/versioned.py",
    "chars": 414,
    "preview": "from coldtype import *\n\nVERSIONS = {\n    \"A\": dict(text=\"COLD\", font=\"ObviouslyV\"),\n    \"B\": dict(text=\"TYPE\", font=\"Obv"
  },
  {
    "path": "examples/animations/versioned_with_sidecar.py",
    "chars": 456,
    "preview": "from coldtype import *\n\nroot = ººsiblingºº(\"../..\").resolve()\n\n\"\"\"\n__VERSION__ is populated by VERSIONS\ndefined in <file"
  },
  {
    "path": "examples/animations/versioned_with_sidecar_versions.py",
    "chars": 172,
    "preview": "from coldtype import *\n\nVERSIONS = {}\nfor file in sorted(ººsiblingºº(\".\").glob(\"*.py\")):\n    if not file.stem.startswith"
  },
  {
    "path": "examples/animations/vertical_scale.py",
    "chars": 805,
    "preview": "from coldtype import *\n\n@animation(tl=50, bg=1)\ndef scratch(f):\n    ri = f.a.r.inset(30)\n    rng = (1, 3)\n    fs = 110\n\n"
  },
  {
    "path": "examples/animations/warpblur.py",
    "chars": 958,
    "preview": "from coldtype import *\nfrom coldtype.fx.warping import warp\nfrom coldtype.fx.skia import phototype\n\nkeyframes = [\n    di"
  },
  {
    "path": "examples/animations/wheee.py",
    "chars": 496,
    "preview": "from coldtype import *\n\n# keyboard shortcut backslash to clear visual buffer\n\n@animation((1080, 1080), timeline=120, bg="
  },
  {
    "path": "examples/apkjr.py",
    "chars": 2146,
    "preview": "from coldtype import *\nfrom coldtype.raster import *\n\nfonts = [f for f in Font.List(r\".*\", r\"_wood|_historical\") if \"Cat"
  },
  {
    "path": "examples/apng.py",
    "chars": 473,
    "preview": "from coldtype import *\n\n\ndef release_apng(a:animation):\n    fe = FFMPEGExport(a, False, loops=1)\n    fe.fmt = \"png\"\n    "
  },
  {
    "path": "examples/axidraw/hatching.py",
    "chars": 1032,
    "preview": "from coldtype import *\nfrom coldtype.axidraw import *\n\nco = Font.ColdtypeObviously()\nscript = Font.JBMono()\n\n@axidrawing"
  },
  {
    "path": "examples/axidraw/nextdraw.py",
    "chars": 7011,
    "preview": "from coldtype import *\n\nfrom coldtype.runon.path import P\nfrom coldtype.renderable import renderable\nfrom coldtype.geome"
  },
  {
    "path": "examples/axidraw/sheet.py",
    "chars": 419,
    "preview": "from coldtype import *\nfrom coldtype.axidraw import *\n\n@animation((120, 120), tl=(16**2, 24))\ndef sheet_animation(f):\n  "
  },
  {
    "path": "examples/axidraw/sheet_read.py",
    "chars": 1707,
    "preview": "from coldtype import *\nfrom coldtype.img.skiaimage import SkiaImage\nfrom coldtype.fx.skia import phototype, precompose\n\n"
  },
  {
    "path": "examples/bg_fn.py",
    "chars": 433,
    "preview": "from coldtype import *\n\ntl = Timeline(30, 12)\n\n@animation((540, 540), tl=tl, render_only=1)\ndef bg_maker(f):\n    return "
  },
  {
    "path": "examples/bg_img.py",
    "chars": 402,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import phototype\n\nr = Rect(1080, 540)\n\n@renderable(r)\ndef bg(r):\n    return"
  },
  {
    "path": "examples/blender/arch.py",
    "chars": 1708,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\n\"\"\"\nAn arch, dynamically generated from a bezier curve;\nthen phys"
  },
  {
    "path": "examples/blender/array_separate.py",
    "chars": 433,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\n@b3d_runnable()\ndef setup(bpw:BpyWorld):\n    bpw.delete_previous("
  },
  {
    "path": "examples/blender/bauhaus_book_14.py",
    "chars": 2247,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\nfrom coldtype.fx.skia import phototype\n\ntxt = [\n    \"bauhausbücher"
  },
  {
    "path": "examples/blender/boston.py",
    "chars": 872,
    "preview": "from coldtype import *\nfrom coldtype.blender import BlenderTimeline, b3d_sequencer\n\n# sound: https://accent.gmu.edu/brow"
  },
  {
    "path": "examples/blender/direct_objects.py",
    "chars": 2300,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\n\"\"\"\nHere there is no simultaneous 2D/3D; we're just using\nColdtyp"
  },
  {
    "path": "examples/blender/displace.py",
    "chars": 1391,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\n\"\"\"\nA giant letter, w/ the top face displaced\nwith a Displace mod"
  },
  {
    "path": "examples/blender/dof.py",
    "chars": 991,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\n\"\"\"\nA variable font animation that works in 2D and 3D;\nalso a lit"
  },
  {
    "path": "examples/blender/dominos.py",
    "chars": 2557,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\nframes = 160\nsuffix = \"falling_\"\ntext = \"\"\"FALLING\nDOWN\"\"\"\n\n@b3d_"
  },
  {
    "path": "examples/blender/dominos2.py",
    "chars": 2856,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\nsamples, x, y, z, frames = [\n    (1.5, 3, 0.5, 5, 120),\n    (0.5,"
  },
  {
    "path": "examples/blender/dominos3.py",
    "chars": 2191,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\nsamples, x, y, z, frames = [\n    (1.5, 3, 0.5, 5, 120),\n    (0.5,"
  },
  {
    "path": "examples/blender/hobeauxborders.py",
    "chars": 1555,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\n\"\"\"\nIf you have a copy of Hobeaux Rococeaux Borders\n(https://ohno"
  },
  {
    "path": "examples/blender/ifg.py",
    "chars": 2820,
    "preview": "from coldtype import *\nfrom coldtype.blender import BlenderTimeline, b3d_sequencer\nfrom coldtype.fx.skia import phototyp"
  },
  {
    "path": "examples/blender/img.py",
    "chars": 870,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\nfrom coldtype.fx.skia import rasterize\n\n\"\"\"\nDemonstration of two w"
  },
  {
    "path": "examples/blender/liveimage.py",
    "chars": 848,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\n\"\"\"\nDemonstration of how to display a dynamic\nimage on a plane\n\"\""
  },
  {
    "path": "examples/blender/noordzijcube.py",
    "chars": 1723,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\n\"\"\"\nA classic 5-by-5 Noordzij Cube, displaying any\nvariable font "
  },
  {
    "path": "examples/blender/parched.py",
    "chars": 1956,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\n@animation((1080, 1080), timeline=360, solo=1)\ndef varfont_animat"
  },
  {
    "path": "examples/blender/physics_direct.py",
    "chars": 1080,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\n\"\"\"\nSome text falls from on high\n(using Blender directly via @b3d"
  },
  {
    "path": "examples/blender/physics_upright.py",
    "chars": 1452,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\n\"\"\"\nA 3D Physics simulation that uses lo-res polygons to do the a"
  },
  {
    "path": "examples/blender/reprojection.py",
    "chars": 964,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\n\"\"\"\na 2d coldtype variable font animation;\nin the same file as @b"
  },
  {
    "path": "examples/blender/rome.py",
    "chars": 3099,
    "preview": "from coldtype import *\nfrom coldtype.blender import BlenderTimeline, b3d_sequencer\nfrom coldtype.raster import *\nfrom no"
  },
  {
    "path": "examples/blender/rome_preview.py",
    "chars": 1841,
    "preview": "from coldtype import *\nfrom coldtype.blender import BlenderTimeline, b3d_sequencer\nfrom coldtype.raster import *\nfrom no"
  },
  {
    "path": "examples/blender/rotating.py",
    "chars": 1208,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\nfrom coldtype.raster import phototype\n\n@b3d_runnable(playback=B3DP"
  },
  {
    "path": "examples/blender/sequence.py",
    "chars": 776,
    "preview": "from coldtype import *\nfrom coldtype.blender import BlenderTimeline, b3d_sequencer\n\nbt = BlenderTimeline(ººBLENDERºº, 12"
  },
  {
    "path": "examples/blender/sequence_text3d.py",
    "chars": 462,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\nbt = BlenderTimeline(ººBLENDERºº, 120)\n\n@b3d_runnable(playback=B3"
  },
  {
    "path": "examples/blender/sequence_text3d_rich.py",
    "chars": 1336,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\nbt = BlenderTimeline(ººBLENDERºº, 120)\nchannel1 = bt.interpretWor"
  },
  {
    "path": "examples/blender/simple_single.py",
    "chars": 388,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\n@b3d_animation(tl=60)\ndef scratch(f):\n    return (P()\n        .ro"
  },
  {
    "path": "examples/blender/simplebeat.py",
    "chars": 1374,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\naudio = __sibling__(\"media/simplebeat.wav\")\n\nmidi = MidiTimeline("
  },
  {
    "path": "examples/blender/timedtext.py",
    "chars": 1293,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\nfrom coldtype.timing.sequence import ClipGroupTextSetter\n\n# Blende"
  },
  {
    "path": "examples/blender/varfont.py",
    "chars": 519,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\n@b3d_runnable(playback=B3DPlayback.KeepPlaying)\ndef prerun(bw):\n "
  },
  {
    "path": "examples/blender/varfont2.py",
    "chars": 1129,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\n@b3d_runnable(playback=B3DPlayback.KeepPlaying)\ndef prerun(bw:Bpy"
  },
  {
    "path": "examples/blender/wip/bake.py",
    "chars": 582,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\n@b3d_runnable()\ndef setup(bw:BpyWorld):\n    bw.deletePrevious(\"CT"
  },
  {
    "path": "examples/blender/wip/blends/boston.blend.json",
    "chars": 14768,
    "preview": "{\n    \"start\": 0,\n    \"end\": 274,\n    \"livepreview_disabled\": false,\n    \"tracks\": [\n        {\n            \"index\": 1,\n "
  },
  {
    "path": "examples/blender/wip/boston.py",
    "chars": 1526,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\nfrom coldtype.timing.sequence import ClipGroupTextSetter\n\n# sound:"
  },
  {
    "path": "examples/blender/wip/bump.py",
    "chars": 563,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\nr = Rect(1080, 540)\nfont = Font.ColdObvi()\n\n@renderable(r, bg=0, "
  },
  {
    "path": "examples/blender/wip/physics.py",
    "chars": 826,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\ntxt = \"FALL\\nING\\nTEXT\"\n\n@b3d_runnable()\ndef setup(bpw:BpyWorld):"
  },
  {
    "path": "examples/blender/wip/physics_semi2d.py",
    "chars": 1696,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\ntxt = \"LETTERS\\nCOLORFUL\\nA LOT OF\\nCOME\\nHERE\"\n\n@b3d_runnable()\n"
  },
  {
    "path": "examples/blender/wip/physics_visible.py",
    "chars": 2900,
    "preview": "from coldtype.blender.fluent import BpyObj\nfrom coldtype import *\nfrom coldtype.blender import *\nfrom functools import p"
  },
  {
    "path": "examples/blender/wip/timed3d.py",
    "chars": 462,
    "preview": "from coldtype import *\nfrom coldtype.blender import *\n\n\"\"\"\nSome very simple timed-text-in-3d\n\"\"\"\n\nbt = BlenderTimeline(_"
  },
  {
    "path": "examples/blog.py",
    "chars": 573,
    "preview": "from coldtype import *\nfrom fontTools.ufoLib import UFOReader\n\nlogos = UFOReader(\"assets/logos.ufo\").getGlyphSet()\n\n@ren"
  },
  {
    "path": "examples/borders.py",
    "chars": 777,
    "preview": "from coldtype import *\n\n@renderable((500, 500))\ndef borders(r):\n    s = Scaffold(r)\n    s.cssgrid(\"a a\", \"a a\", \"a | b _"
  },
  {
    "path": "examples/chessboard.py",
    "chars": 1965,
    "preview": "from coldtype import *\nfrom string import ascii_uppercase\n\nfill = hsl(0.38, 0.7, 0.7)\n\nchessfont = Font.LibraryFind(r\"Ap"
  },
  {
    "path": "examples/circle_text.py",
    "chars": 520,
    "preview": "from coldtype import *\n\n@renderable((540, 540), bg=1)\ndef circles(r):\n    circle = (P().oval(r.inset(140))\n        .fssw"
  },
  {
    "path": "examples/colrv1_arabic.py",
    "chars": 442,
    "preview": "from coldtype import *\n\ntext1 = \"\"\"\nاز آنجا که عدم شناسائی و تحقیر حقوق\nبشر منتهی به اعمال وحشیانه‌ای\n\"\"\"\n\n@renderable(("
  },
  {
    "path": "examples/cropandrepeat.py",
    "chars": 784,
    "preview": "from coldtype import *\nfrom coldtype.fx.skia import phototype\n\n@aframe(bg=hsl(0.93, 0.6, 0.5))\ndef scratch(f):\n    def c"
  },
  {
    "path": "examples/custom_hotkey.py",
    "chars": 159,
    "preview": "from coldtype import *\n\n@renderable((100, 100), bg=hsl(0.9))\ndef scratch(r):\n    return None\n\ndef custom_hotkey(key, ren"
  }
]

// ... and 307 more files (download for full content)

About this extraction

This page contains the full source code of the goodhertz/coldtype GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 507 files (5.4 MB), approximately 1.4M tokens, and a symbol index with 2854 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.

Copied to clipboard!