[
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n\n# Custom for Visual Studio\n*.cs     diff=csharp\n\n# Standard to msysgit\n*.doc\t diff=astextplain\n*.DOC\t diff=astextplain\n*.docx diff=astextplain\n*.DOCX diff=astextplain\n*.dot  diff=astextplain\n*.DOT  diff=astextplain\n*.pdf  diff=astextplain\n*.PDF\t diff=astextplain\n*.rtf\t diff=astextplain\n*.RTF\t diff=astextplain\n\ndata/layouts/*.ai filter=lfs diff=lfs merge=lfs -text\ndata/layouts/*.svg filter=lfs diff=lfs merge=lfs -text\n\npackage-lock.json binary\n"
  },
  {
    "path": ".gitignore",
    "content": "# Logs\nlogs\n*.log\n\n# Runtime data\npids\n*.pid\n*.seed\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n\n# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Compiled binary addons (http://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directory\n# Commenting this out is preferred by some people, see\n# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git-\nnode_modules\n\n# Users Environment Variables\n.lock-wscript\n\n*.svg\n*.png\n*.jpg\n*.txt\n*.pdf\n\nfonts\n!data/glyphs/*.svg\n!data/layouts/*.svg\n\n# =========================\n# Operating System Files\n# =========================\n\n# OSX\n# =========================\n\n.DS_Store\n.AppleDouble\n.LSOverride\n\n# Thumbnails\n._*\n\n# Files that might appear on external disk\n.Spotlight-V100\n.Trashes\n\n# Directories potentially created on remote AFP share\n.AppleDB\n.AppleDesktop\nNetwork Trash Folder\nTemporary Items\n.apdisk\n\n# Windows\n# =========================\n\n# Windows image file caches\nThumbs.db\nehthumbs.db\n\n# Folder config file\nDesktop.ini\n\n# Recycle Bin used on file shares\n$RECYCLE.BIN/\n\n# Windows Installer files\n*.cab\n*.msi\n*.msm\n*.msp\n\n# Windows shortcuts\n*.lnk\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: node_js\n\n# Sudo-enabled machines have much more memory\nsudo: required\n\nnode_js:\n  - node\n\nbefore_install:\n  # Prerequisite of Nightmare.js\n  # https://github.com/electron/electron/blob/master/docs/tutorial/testing-on-headless-ci.md\n  - export DISPLAY=':99.0'\n  - Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &\n  # Install git-lfs\n  - mkdir -p $HOME/bin\n  - wget https://github.com/github/git-lfs/releases/download/v1.4.3/git-lfs-linux-amd64-1.4.3.tar.gz\n  - tar xvfz git-lfs-linux-amd64-1.4.3.tar.gz\n  - mv git-lfs-1.4.3/git-lfs $HOME/bin/git-lfs\n  - export PATH=$PATH:$HOME/bin/\n\nbefore_script: git lfs pull\n\nscript:\n  - npm test\n  - DEBUG=true npm run build\n\ncache:\n  directories:\n    - fonts\n\nbranches:\n  except:\n    - /^v\\d+\\.\\d+\\.\\d+$/\n\ndeploy:\n  provider: releases\n  api_key:\n    secure: Irn5gzraLVLX2JwCIJtWcjO7mj9rj+u6EbczQYtfpif/Q7mS1L3En1IcTBwakqa1RYmIRzH/91HWMCDRIH6JMPjxdzcKsa+1BFtJys5/yzpMKT2JQIvBtydyqvCZ/vzIe1ehdvsqVEtaCGYipcEZjaS7dDNKjOAN1p1r2czxvt/5pPg2suLfse7lMEuimXDYDJUt4TbaNT1i1p6ygGZxTlBaoQ4AIWh4PqzoTAGmSJcr/pQoWycgDW60T4xujTajouWFEeW3xPOH5mLfAuwDL6egndqGMiBsFfVIJbICCjiz1Zn2p0/dcDKWT3M8qSf0QNoYk0aUzkL70Bn4roLFaqs3S0x5BRfu5o5eFbW9E6GafBjekB6uBRon68zutkCtTY+5nnrD64RtIhKbbTBY+9woO2U4AZCvv453hTd4HBpHFAlXE4J4SjprUW4cEP/6vqObD372/TwopdW/anCL7Ygj3Dd3I6HChBVsn1SPrFgCnOIiYnrNHKlyr941XSr0UUSQBsOzjGUFqjTysVAsdji6h5eQ0TD4V/wrJ1qtc+s77kDJIBP/fLNsHbfpxCzBmjkR/jR91TsJiSOev4WbkYouuQdU+nptBorpMwOuq2MFlIKbpxlix5bgnVJ1VmcRzYSiB+/WGfuxmdmcTYl48VsBxT5GolO+MV1j3grFDao=\n  file:\n    - bmp-1-poster.svg\n    - bmp-1-poster.png\n    - bmp-1-poster.pdf\n    - bmp-2-poster.svg\n    - bmp-2-poster.png\n    - bmp-2-poster.pdf\n    - bmp-3-poster.svg\n    - bmp-3-poster.png\n    - bmp-3-poster.pdf\n  skip_cleanup: true\n  on:\n    tags: true\n\nnotifications:\n  webhooks: http://webhook.hakatashi.com/travis\n"
  },
  {
    "path": "README.md",
    "content": "# The Unicode Map Project [![Build Status][travis-image]][travis-url] [![Greenkeeper badge][greenkeeper-image]][greenkeeper-url]\n\nA bunch of Unicode characters in a poster, on a [Hilbert curve](https://en.wikipedia.org/wiki/Hilbert_curve).\n\n\n[travis-image]: https://travis-ci.org/hakatashi/unicode-map.svg?branch=master\n[travis-url]: https://travis-ci.org/hakatashi/unicode-map\n[greenkeeper-image]: https://badges.greenkeeper.io/hakatashi/unicode-map.svg\n[greenkeeper-url]: https://greenkeeper.io/\n\n![](https://i.imgur.com/cEVN9VR.jpg)\n\n## 🆕 New in Ver3.0.0\n\n* Full [Unicode 10.0.0](http://unicode.org/versions/Unicode10.0.0/) support\n* Pipeline table characters as of [UTC #152](http://www.unicode.org/L2/L2017/17222.htm) full support\n* 66 new glyphs added\n* Fonts were updated. Especially in Kanji, we now uses [Noto Serif CJK](https://www.google.com/get/noto/help/cjk/).\n\n## ❓ About\n\n**The Unicode Map Project** (Japanese: Unicode巨大地図) is an experimental project to illustrate [Unicode](http://unicode.org/standard/WhatIsUnicode.html) characters (and non-characters) in a large poster, and sell them at some [dōjinshi](https://en.wikipedia.org/wiki/D%C5%8Djinshi) fair event such as [Comiket](https://en.wikipedia.org/wiki/Comiket) in Japan. The version 1.0.0 was [sold at Comiket 91](https://webcatalog-free.circle.ms/Circle/13007447), held on Dec 29, 2016. Its composition of Unicode characters is very featured by its arrangement, which introduces a [Hilbert curve](https://en.wikipedia.org/wiki/Hilbert_curve) to visually span [the blocks of Unicode](https://en.wikipedia.org/wiki/Unicode_block).\n\nThe poster is developed with open source and the poster data [can be downloaded](#download) for free. And also any contribution is welcomed!\n\n## ⏬ Download\n\n### BMP-1 (U+0000 - U+3FFF) ver3.0.0\n\n* [SVG (35.4 MB)](https://github.com/hakatashi/unicode-map/releases/download/201710261128/bmp-1-poster.svg)\n* [PNG (16.6 MB)](https://github.com/hakatashi/unicode-map/releases/download/201710261128/bmp-1-poster.png)\n* [PDF (13.4 MB)](https://github.com/hakatashi/unicode-map/releases/download/201710261128/bmp-1-poster.pdf)\n\n### BMP-2 (U+4000 - U+7FFF) ver3.0.0\n\n* [SVG (35.1 MB)](https://github.com/hakatashi/unicode-map/releases/download/201710261128/bmp-2-poster.svg)\n* [PNG (23.1 MB)](https://github.com/hakatashi/unicode-map/releases/download/201710261128/bmp-2-poster.png)\n* [PDF (14.9 MB)](https://github.com/hakatashi/unicode-map/releases/download/201710261128/bmp-2-poster.pdf)\n\n### Development version\n\nDevelopment version of the builds are available in the [Release page](https://github.com/hakatashi/unicode-map/releases).\n\n## 💪 Build\n\nInstall [Node.js 8+](https://nodejs.org/) and run:\n\n    npm install\n    npm run build\n\n**WARN: This command will download almost 1GB of the font data from the internet, and cache them into `fonts` subdirectory.**\n\n## 🔰 License\n\nThe overall repository is licensed under [GPLv3](https://www.gnu.org/licenses/gpl-3.0.txt) by hakatashi.\n\nThe files not in the `data/glyphs` subdirectory are also licensed under [MIT License](https://opensource.org/licenses/MIT) by hakatashi.\n\n## 🛣️ Roadmap\n\n* Full support of BMP\n* More permissive license\n\n## 🙏 Materials\n\n* ArmenianEternity.svg\n\t* link: https://commons.wikimedia.org/wiki/File:ArmenianEternity.svg\n\t* author: AnonMoos\n\t* license: Public Domain\n\t* for: u058d.svg\n* SYRIAC-LETTER-MALAYALAM-NGA.png\n\t* link: https://en.wikipedia.org/wiki/File:SYRIAC-LETTER-MALAYALAM-NGA.png\n\t* author: Raamesh\n\t* license: CC BY-SA 4.0\n\t* for: u0860.svg\n* SYRIAC-LETTER-MALAYALAM-JA.png\n\t* link: https://en.wikipedia.org/wiki/File:SYRIAC-LETTER-MALAYALAM-JA.png\n\t* author: Raamesh\n\t* license: CC BY-SA 4.0\n\t* for: u0861.svg\n* SYRIAC-LETTER-MALAYALAM-NYA.png\n\t* link: https://en.wikipedia.org/wiki/File:SYRIAC-LETTER-MALAYALAM-NYA.png\n\t* author: Raamesh\n\t* license: CC BY-SA 4.0\n\t* for: u0862.svg\n* SYRIAC-LETTER-MALAYALAM-TTA.png\n\t* link: https://en.wikipedia.org/wiki/File:SYRIAC-LETTER-MALAYALAM-TTA.png\n\t* author: Raamesh\n\t* license: CC BY-SA 4.0\n\t* for: u0863.svg\n* SYRIAC-LETTER-MALAYALAM-NNA.png\n\t* link: https://en.wikipedia.org/wiki/File:SYRIAC-LETTER-MALAYALAM-NNA.png\n\t* author: Raamesh\n\t* license: CC BY-SA 4.0\n\t* for: u0864.svg\n* SYRIAC-LETTER-MALAYALAM-NNNA.png\n\t* link: https://en.wikipedia.org/wiki/File:SYRIAC-LETTER-MALAYALAM-NNNA.png\n\t* author: Raamesh\n\t* license: CC BY-SA 4.0\n\t* for: u0865.svg\n* SYRIAC-LETTER-MALAYALAM-BHA.png\n\t* link: https://en.wikipedia.org/wiki/File:SYRIAC-LETTER-MALAYALAM-BHA.png\n\t* author: Raamesh\n\t* license: CC BY-SA 4.0\n\t* for: u0866.svg\n* SYRIAC-LETTER-MALAYALAM-RA.png\n\t* link: https://en.wikipedia.org/wiki/File:SYRIAC-LETTER-MALAYALAM-RA.png\n\t* author: Raamesh\n\t* license: CC BY-SA 4.0\n\t* for: u0867.svg\n* SYRIAC-LETTER-MALAYALAM-LLA.png\n\t* link: https://en.wikipedia.org/wiki/File:SYRIAC-LETTER-MALAYALAM-LLA.png\n\t* author: Raamesh\n\t* license: CC BY-SA 4.0\n\t* for: u0868.svg\n* SYRIAC-LETTER-MALAYALAM-LLLA.png\n\t* link: https://en.wikipedia.org/wiki/File:SYRIAC-LETTER-MALAYALAM-LLLA.png\n\t* author: Raamesh\n\t* license: CC BY-SA 4.0\n\t* for: u0869.svg\n* SYRIAC-LETTER-MALAYALAM-SSA.png\n\t* link: https://en.wikipedia.org/wiki/File:SYRIAC-LETTER-MALAYALAM-SSA.png\n\t* author: Raamesh\n\t* license: CC BY-SA 4.0\n\t* for: u086A.svg\n* Астрологічні цифри сингальського письма. Sinhalese astrological numerals (Sinhala Lith Illakkam).png\n\t* link: https://commons.wikimedia.org/wiki/File:%D0%90%D1%81%D1%82%D1%80%D0%BE%D0%BB%D0%BE%D0%B3%D1%96%D1%87%D0%BD%D1%96_%D1%86%D0%B8%D1%84%D1%80%D0%B8_%D1%81%D0%B8%D0%BD%D0%B3%D0%B0%D0%BB%D1%8C%D1%81%D1%8C%D0%BA%D0%BE%D0%B3%D0%BE_%D0%BF%D0%B8%D1%81%D1%8C%D0%BC%D0%B0._Sinhalese_astrological_numerals_(Sinhala_Lith_Illakkam).png\n\t* author: 00 وديع\n\t* license: CC0 1.0\n\t* for: u0de6.svg .. u0def.svg\n* Open Sans\n\t* link: http://www.opensans.com/\n\t* author: Steve Matteson and Google Corporation\n\t* license: Apache License v2\n\t* for: Control characters\n* Linux Libertine\n\t* link: http://www.linuxlibertine.org/\n\t* author: Libertine Open Fonts Project and Philipp H. Poll\n\t* license: SIL OFL 1.1\n\t* for: Poster Design\n* Cinzel\n\t* link: http://ndiscovered.com/cinzel/\n\t* author: Natanael Gama\n\t* license: SIL OFL 1.1\n\t* for: Poster Design\n"
  },
  {
    "path": "configs/bmp-1.ls",
    "content": "module.exports =\n  name: 'bmp-1'\n  layout: 'bmp-1'\n  chart:\n    x: 28.35\n    y: 728.5\n  codepoint: 0x0000\n"
  },
  {
    "path": "configs/bmp-2.ls",
    "content": "module.exports =\n  name: 'bmp-2'\n  layout: 'bmp-2'\n  chart:\n    x: 28.35\n    y: 728.5\n  codepoint: 0x4000\n"
  },
  {
    "path": "configs/bmp-3.ls",
    "content": "module.exports =\n  name: 'bmp-3'\n  layout: 'bmp-3'\n  chart:\n    x: 28.35\n    y: 28.35\n  codepoint: 0x8000\n"
  },
  {
    "path": "configs/index.ls",
    "content": "module.exports =\n  * require './bmp-1'\n  * require './bmp-2'\n  * require './bmp-3'\n"
  },
  {
    "path": "data/codepoints/0000.yml",
    "content": "# Basic Latin\n0000..001F:\n  control:\n    - NUL\n    - SOH\n    - STX\n    - ETX\n    - EOT\n    - ENQ\n    - ACK\n    - BEL\n\n    - BS\n    - TAB\n    - LF\n    - VT\n    - FF\n    - CR\n    - SO\n    - SI\n\n    - DLE\n    - DC1\n    - DC2\n    - DC3\n    - DC4\n    - NAK\n    - SYN\n    - ETB\n\n    - CAN\n    - EM\n    - SUB\n    - ESC\n    - FS\n    - GS\n    - RS\n    - US\n\n'0020':\n  control: SP\n\n0021..007E:\n  font: doulos\n  transform: scale(0.8)\n\n007F:\n  control: DEL\n\n# Latin-1 Supplement\n0080..00A0:\n  control:\n    - PAD # Only appears in early drafts of ISO 10646. Unicode charts shows XXX for this character.\n    - HOP # Only appears in early drafts of ISO 10646. Unicode charts shows XXX for this character.\n    - BPH\n    - NBH\n    - IND\n    - NEL\n    - SSA\n    - ESA\n\n    - HTS\n    - HTJ\n    - VTS\n    - PLD\n    - PLU\n    - RI\n    - SS2\n    - SS3\n\n    - DCS\n    - PU1\n    - PU2\n    - STS\n    - CCH\n    - MW\n    - SPA\n    - EPA\n\n    - SOS\n    - SGC # Only appears in early drafts of ISO 10646. Unicode charts shows XXX for this character.\n    - SCI\n    - CSI\n    - ST\n    - OSC\n    - PM\n    - APC\n\n    - NB\\nSP\n\n# C1 Controls and Latin-1 Supplement\n\n00A1..00FF:\n  font: doulos\n  transform: scale(0.8)\n\n  00AD:\n    control: SHY\\n-\n\n# Latin Extended-A\n\n0100..017F:\n  font: doulos\n  transform: scale(0.8)\n\n  0149:\n    svg: true\n    transform: scale(0.8)\n\n# Latin Extended-B\n\n0180..024F:\n  font: doulos\n  transform: scale(0.8)\n\n  022A..0231:\n    font: doulos\n    transform: translate(0, 0.05) scale(0.8)\n\n# IPA Extensions\n\n0250..02AF:\n  font: doulos\n  transform: scale(0.8)\n\n# Spacing Modifier Letters\n\n02B0..02FF:\n  font: doulos\n  transform: scale(0.8)\n\n# Combining Diacritical Marks\n\n0300..036F:\n  font: doulos\n  combining: true\n  transform: translate(0, -0.06) scale(0.7) translate(0.25, 0)\n\n  0321..0322:\n    font: symbola\n    combining: true\n    transform: translate(0, -0.06) scale(0.7) translate(0.25, 0)\n\n  0340..0345:\n    font: symbola\n    combining: true\n    transform: translate(0, -0.06) scale(0.7) translate(0.25, 0)\n\n  034F:\n    control: CGJ\n\n  035C:\n    font: doulos\n    combining: true\n    transform: translate(0, -0.16) scale(0.7) translate(0.25, 0)\n\n  035D..035E:\n    font: doulos\n    combining: true\n    transform: translate(0, 0.04) scale(0.7) translate(0.25, 0)\n\n  035F:\n    font: doulos\n    combining: true\n    transform: translate(0, -0.16) scale(0.7) translate(0.25, 0)\n\n  0360..0361:\n    font: doulos\n    combining: true\n    transform: translate(0, 0.04) scale(0.7) translate(0.25, 0)\n\n  '0362':\n    font: doulos\n    combining: true\n    transform: translate(0, -0.2) scale(0.7) translate(0.25, 0)\n\n# Greek and Coptic\n\n0370..03FF:\n  font: symbola\n  transform: scale(0.8)\n\n  0378..0379: notdef\n  0380..0383: notdef\n  038B: notdef\n  038D: notdef\n  03A2: notdef\n\n# Cyrillic\n\n0400..04FF:\n  font: symbola\n  transform: scale(0.8)\n\n  0483..0487:\n    font: symbola\n    transform: scale(0.8) translate(0.25, 0)\n    combining: true\n\n  0488..0489:\n    font: symbola\n    transform: translate(0, -0.08) scale(0.8) translate(0.5, 0)\n    combining: true\n\n# Cyrillic Supplement\n\n0500..052F:\n  font: symbola\n  transform: scale(0.8)\n\n  052A:\n    font: symbola\n    transform: scale(0.75)\n\n# Armenian\n\n0530..058F:\n  font: freeSerif\n  transform: scale(0.8)\n\n  '0530': notdef\n  0557..0558: notdef\n  '0560': notdef\n  0588: notdef\n\n  058B: # Early mapping\n    early: true\n    font: free-serif\n    codepoint: 0x0561\n    transform: translate(0, 0.15) scale(0.9) rotate(180)\n\n  058C: # Early mapping\n    early: true\n    svg: true\n    transform: scale(0.9)\n\n  058D..058E:\n    svg: true\n\n# Hebrew\n\n0590..05FF:\n  font: freeSerif\n  transform: scale(0.8)\n\n  0591..05C7:\n    font: notoHebrew\n    transform: scale(0.7)\n    combining: true\n\n    05C6:\n      font: freeSerif\n      transform: scale(0.8)\n\n    05BE:\n      font: freeSerif\n      transform: scale(0.8)\n\n    05C0:\n      font: freeSerif\n      transform: scale(0.8)\n\n    05C3:\n      font: freeSerif\n      transform: scale(0.8)\n\n  0590: notdef\n  05C8..05CF: notdef\n  05EB..05EE: notdef\n\n  05EF:\n    early: true\n    svg: true\n    transform: scale(0.8)\n\n  05F5..05FF: notdef\n\n# Arabic\n\n0600..06FF:\n  font: freeSerif\n  transform: scale(0.8)\n\n  0600..0603:\n    font: freeSerif\n    transform: scale(0.8)\n    box: true\n\n  '0604':\n    font: notoArabic\n    transform: translate(0, 0.1) scale(0.4)\n    box: true\n\n  '0605':\n    svg: true\n    transform: scale(0.9)\n    box: true\n\n  0610..061A:\n    font: freeSerif\n    transform: scale(0.7) translate(-0.15, 0)\n    combining: true\n\n  061C:\n    control: ALM\n\n  061D: notdef\n\n  064B..065F:\n    font: freeSerif\n    transform: scale(0.7) translate(-0.15, 0)\n    combining: true\n\n  0670:\n    font: freeSerif\n    transform: scale(0.7) translate(-0.15, 0)\n    combining: true\n\n  06D6..06ED:\n    font: freeSerif\n    transform: scale(0.7) translate(-0.15, 0)\n    combining: true\n\n    06DD:\n      font: freeSerif\n      transform: scale(0.7)\n      box: true\n\n    06DE:\n      font: freeSerif\n      transform: scale(0.8)\n\n    06E5..06E6:\n      font: freeSerif\n      transform: scale(0.8)\n\n    06E9:\n      font: freeSerif\n      transform: scale(0.8)\n\n# Syriac\n\n0700..074F:\n  font: notoSyriac\n  transform: scale(0.8)\n\n  070E: notdef\n\n  070F:\n    control: SAM # Should be modified\n\n  0730..074A:\n    font: notoSyriac\n    combining: true\n    transform: scale(0.9) translate(0, -0.05)\n\n  074B..074C: notdef\n\n# Arabic Supplement\n\n0750..077F:\n  font: freeSerif\n  transform: scale(0.8) translate(0, -0.05)\n\n# Thaana\n\n0780..07BF:\n  font: freeSerif\n  transform: scale(0.9)\n\n  07A6..07B0:\n    font: freeSerif\n    combining: true\n    transform: scale(0.8) translate(-0.35, -0.1)\n\n  07B2..07BF: notdef\n\n# NKo\n\n07C0..07FF:\n  font: notoNko\n  transform: scale(0.8)\n\n  07EB..07F1:\n    font: notoNko\n    combining: true\n    transform: scale(0.7) translate(-0.25, 0.1)\n\n  07F2:\n    font: notoNko\n    combining: true\n    transform: scale(0.7) translate(-0.25, -0.08)\n\n  07F3:\n    font: notoNko\n    combining: true\n    transform: scale(0.7) translate(-0.25, 0.1)\n\n  07FB..07FC: notdef\n\n  07FD: # early mapping\n    early: true\n    svg: true\n    combining: true\n    transform: scale(0.7) translate(0, 0.1)\n\n  07FE..07FF: # early mapping\n    early: true\n    svg: true\n    transform: scale(0.8)\n"
  },
  {
    "path": "data/codepoints/0800.yml",
    "content": "# Samaritan\n\n0800..083F:\n  font: notoSamaritan\n  transform: scale(0.8)\n\n  0816..0819:\n    font: notoSamaritan\n    combining: true\n    transform: scale(0.7) translate(-0.1, 0.15)\n\n  081B..0823:\n    font: notoSamaritan\n    combining: true\n    transform: scale(0.7) translate(-0.1, 0.15)\n\n  0825..0827:\n    font: notoSamaritan\n    combining: true\n    transform: scale(0.7) translate(-0.1, 0.15)\n\n  0829..082D:\n    font: notoSamaritan\n    combining: true\n    transform: scale(0.7) translate(-0.1, 0.15)\n\n  082E..082F: notdef\n  083F: notdef\n\n# Mandaic\n\n0840..085F:\n  font: notoMandaic\n  transform: scale(0.8)\n\n  0859..085B:\n    font: notoMandaic\n    combining: true\n    transform: scale(0.7) translate(0, -0.1)\n\n  085C..085D: notdef\n  085F: notdef\n\n# Syriac Extensions\n\n0860..087F:\n  svg: true\n  transform: scale(0.8)\n\n  0863:\n    svg: true\n\n  0866:\n    svg: true\n    transform: scale(0.9)\n\n  0867:\n    svg: true\n\n  086B..087F: notdef\n\n# empty\n\n0870..08FF: notdef\n\n# Arabic Extended-A\n\n08A0..08FF:\n  font: scheherazade\n  transform: translate(0, -0.2)\n\n  08B5: notdef\n\n  08B8:\n    svg: true\n\n  08BE..08D2: notdef\n\n  # Arabic text used:\n  # 08D4: الرب\n  # 08D8: نِ\n  # 08DA: الثالثة\n  # 08DB: السجدة\n  # 08DC: النصف\n  # 08DD: سكتة\n  # 08DE: قف\n  # 08DF: وقفة\n\n  08D3: # Early mapping\n    early: true\n    font: scheherazade\n    codepoint: 0x06E5\n    combining: true\n    transform: translate(0, 0.05)\n\n  08D4:\n    svg: true\n    combining: true\n\n  08D5:\n    font: scheherazade-Bold\n    codepoint: 0x0635\n    combining: true\n    transform: scale(0.45) translate(0, -0.9)\n\n  08D6:\n    font: scheherazade-Bold\n    codepoint: 0x0639\n    combining: true\n    transform: scale(0.45) translate(0, -1.0)\n\n  08D7:\n    font: scheherazade-Bold\n    codepoint: 0x0642\n    combining: true\n    transform: scale(0.45) translate(0, -0.9)\n\n  08D8..08DF:\n    svg: true\n    combining: true\n\n  08E0:\n    font: scheherazade-Bold\n    codepoint: 0x0602\n    combining: true\n    transform: scale(0.6) translate(0, -0.7)\n\n  08E1:\n    font: scheherazade-Bold\n    codepoint: 0x0603\n    combining: true\n    transform: scale(0.6) translate(0, -0.7)\n\n  08E2:\n    svg: true\n    box: true\n    transform: scale(0.8)\n\n  08E3:\n    font: scheherazade\n    combining: true\n    transform: translate(0, -0.4)\n\n  08E4..08E5:\n    font: scheherazade\n    combining: true\n    transform: translate(-0.05, -0.05)\n\n  08E6:\n    font: scheherazade\n    combining: true\n    transform: translate(-0.1, -0.4)\n\n  08E7..08E8:\n    font: scheherazade\n    combining: true\n    transform: translate(-0.05, 0)\n\n  08E9:\n    font: scheherazade\n    combining: true\n    transform: translate(-0.1, -0.4)\n\n  08EA..08EC:\n    font: scheherazade\n    combining: true\n    transform: translate(-0.05, -0.05)\n\n  08ED..08EF:\n    font: scheherazade\n    combining: true\n    transform: translate(-0.05, -0.4)\n\n  08F0..08F1:\n    font: scheherazade\n    combining: true\n    transform: translate(-0.05, -0.05)\n\n  08F2:\n    font: scheherazade\n    combining: true\n    transform: translate(-0.05, -0.4)\n\n  08F3..08F5:\n    font: scheherazade\n    combining: true\n    transform: translate(-0.05, -0.05)\n\n  08F6:\n    font: scheherazade\n    combining: true\n    transform: translate(-0.05, -0.4)\n\n  08F7..08F8:\n    font: scheherazade\n    combining: true\n    transform: translate(-0.05, -0.05)\n\n  08F9..08FA:\n    font: scheherazade\n    combining: true\n    transform: translate(-0.05, -0.4)\n\n  08FB..08FF:\n    font: scheherazade\n    combining: true\n    transform: translate(-0.05, -0.05)\n\n# Devanagari\n\n0900..097F:\n  font: annapurna\n  transform: scale(0.8)\n\n  0900..0901:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.2, 0.1)\n\n  0902:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.1, 0.1)\n\n  0903:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.35, 0)\n\n  093A:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.2, 0.1)\n\n  093B:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.1)\n\n  093C:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.2, -0.1)\n\n  093E:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.1)\n\n  093F:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(-0.3, 0.1)\n\n  0940:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.1)\n\n  0941..0944:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.2, -0.1)\n\n  0945..0948:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.2, 0.1)\n\n  0949..094C:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.1)\n\n  094D:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.2, -0.1)\n\n  094E:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(-0.3, 0.1)\n\n  094F:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.1)\n\n  0951:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.15, 0.1)\n\n  0952:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.25, -0.1)\n\n  0953..0955:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.2, 0.1)\n\n  0956..0957:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.2, -0.1)\n\n  0962..0963:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.2, -0.1)\n\n# Bengali\n\n0980..09FF:\n  font: notoBengali\n  transform: scale(0.8)\n\n  0981:\n    font: notoBengali\n    combining: true\n    transform: scale(0.8) translate(0.1, 0.1)\n\n  0982..0983:\n    font: notoBengali\n    combining: true\n    transform: scale(0.7) translate(0.4, 0)\n\n  0984: notdef\n  098D..098E: notdef\n  0991..0992: notdef\n  09A9: notdef\n  09B1: notdef\n  09B3..09B5: notdef\n  09BA..09BB: notdef\n\n  09BC:\n    font: notoBengali\n    combining: true\n    transform: scale(0.8) translate(0.4, -0.1)\n\n  09BE:\n    font: notoBengali\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  09BF:\n    font: notoBengali\n    combining: true\n    transform: scale(0.8) translate(-0.3, 0)\n\n  09C0:\n    font: notoBengali\n    combining: true\n    transform: scale(0.8) translate(0.4, 0)\n\n  09C1..09C4:\n    font: notoBengali\n    combining: true\n    transform: scale(0.8) translate(0.1, -0.1)\n\n  09C5..09C6: notdef\n\n  09C7..09C8:\n    font: notoBengali\n    combining: true\n    transform: scale(0.8) translate(-0.3, 0)\n\n  09C9..09CA: notdef\n\n  09CB..09CC:\n    font: notoBengali\n    combining: true\n    transform: scale(0.8)\n\n  09CD:\n    font: notoBengali\n    combining: true\n    transform: scale(0.8) translate(0.1, -0.1)\n\n  09CF..09D6: notdef\n\n  09D7:\n    font: notoBengali\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  09D8..09DB: notdef\n  09DE: notdef\n\n  09E2..09E3:\n    font: notoBengali\n    combining: true\n    transform: scale(0.8) translate(0.1, -0.1)\n\n  09E4..09E5: notdef\n\n  09FC..09FD:\n    svg: true\n    transform: scale(0.8)\n\n  09FE:\n    early: true\n    combining: true\n    font: noto-bengali\n    codepoint: 0x09BD\n    transform: translate(0, -0.3) scale(0.5)\n\n  09FF: notdef\n"
  },
  {
    "path": "data/codepoints/0A00.yml",
    "content": "# Gurmukhi\n\n0A00..0A7F:\n  font: free-serif\n  transform: scale(0.8)\n\n  0A00: notdef\n\n  0A01:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0, 0.1)\n\n  0A02:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.05, 0.1)\n\n  0A03:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.35, -0.1)\n\n  0A04: notdef\n  0A0B..0A0E: notdef\n  0A11..0A12: notdef\n  0A29: notdef\n  0A31: notdef\n  0A34: notdef\n  0A37: notdef\n  0A3A..0A3B: notdef\n\n  0A3C:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  0A3D: notdef\n\n  0A3E:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.4, 0)\n\n  0A3F:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(-0.3, 0)\n\n  0A40:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.4, 0)\n\n  0A41..0A42:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.35, -0.1)\n\n  0A43..0A46: notdef\n\n  0A47..0A48:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.1, 0.05)\n\n  0A49..0A4A: notdef\n\n  0A4B..0A4C:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.1, 0.05)\n\n  0A4D:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0, -0.1)\n\n  0A4E..0A50: notdef\n\n  0A51:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0, -0.1)\n\n  0A52..0A58: notdef\n  0A5D: notdef\n  0A5F..0A65: notdef\n\n  0A70..0A71:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.15, 0.05)\n\n  0A74:\n    font: free-serif\n    transform: scale(0.8) translate(-0.15, 0)\n\n  0A75:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.15, -0.1)\n\n  0A76: # early mapping\n    early: true\n    svg: true\n    transform: scale(0.8)\n\n  0A77..0A7F: notdef\n\n# Gujarati\n\n0A80..0AFF:\n  font: noto-gujarati\n  transform: scale(0.8)\n\n  0A80: notdef\n\n  0A81..0A82:\n    font: noto-gujarati\n    combining: true\n    transform: scale(0.8) translate(0.1, 0.1)\n\n  0A83:\n    font: noto-gujarati\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  0A84: notdef\n  0A8E: notdef\n  0A92: notdef\n  0AA9: notdef\n  0AB1: notdef\n  0AB4: notdef\n  0ABA..0ABB: notdef\n\n  0ABC:\n    font: noto-gujarati\n    combining: true\n    transform: scale(0.8) translate(0.25, -0.1)\n\n  0ABE:\n    font: noto-gujarati\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  0ABF:\n    font: noto-gujarati\n    combining: true\n    transform: scale(0.8) translate(-0.3, 0)\n\n  0AC0:\n    font: noto-gujarati\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  0AC1:\n    font: noto-gujarati\n    combining: true\n    transform: scale(0.8) translate(0.1, -0.1)\n\n  0AC2..0AC4:\n    font: noto-gujarati\n    combining: true\n    transform: scale(0.8) translate(0, -0.1)\n\n  0AC5:\n    font: noto-gujarati\n    combining: true\n    transform: scale(0.8) translate(0.1, 0.1)\n\n  0AC6: notdef\n\n  0AC7..0AC8:\n    font: noto-gujarati\n    combining: true\n    transform: scale(0.8) translate(0.1, 0.1)\n\n  0AC9:\n    font: noto-gujarati\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  0ACA: notdef\n\n  0ACB..0ACC:\n    font: noto-gujarati\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  0ACD:\n    font: noto-gujarati\n    combining: true\n    transform: scale(0.8) translate(0, -0.1)\n\n  0ACE..0ACF: notdef\n  0AD1..0ADF: notdef\n\n  0AE2..0AE3:\n    font: noto-gujarati\n    combining: true\n    transform: scale(0.8) translate(0.2, -0.1)\n\n  0AE4..0AE5: notdef\n  0AF2..0AF8: notdef\n\n  0AF9:\n    svg: true\n\n  0AFA..0AFF:\n    svg: true\n    combining: true\n\n# Oriya\n\n0B00..0B7F:\n  font: free-serif\n  transform: scale(0.8)\n\n  0B00: notdef\n\n  0B01:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.15, 0.05)\n\n  0B02:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  0B03:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.35, 0)\n\n  0B04: notdef\n  0B0D..0B0E: notdef\n  0B11..0B12: notdef\n  0B29: notdef\n  0B31: notdef\n  0B34: notdef\n  0B3A..0B3B: notdef\n\n  0B3C:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.2, -0.15)\n\n  0B3E:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.35, 0)\n\n  0B3F:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.35, 0.1)\n\n  0B40:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.35, 0)\n\n  0B41..0B44:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.15, -0.15)\n\n  0B45..0B46: notdef\n\n  0B47:\n    font: free-serif\n    combining: true\n    transform: scale(0.65) translate(-0.5, 0)\n\n  0B48:\n    font: free-serif\n    combining: true\n    transform: scale(0.65) translate(-0.2, 0)\n\n  0B49..0B4A: notdef\n\n  0B4B..0B4C:\n    font: free-serif\n    combining: true\n    transform: scale(0.65) translate(-0.1, 0)\n\n  0B4D:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0, -0.1)\n\n  0B4E..0B55: notdef\n\n  0B56..0B57:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.35, 0)\n\n  0B58..0B5B: notdef\n  0B5E: notdef\n\n  0B62..0B63:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.2, -0.1)\n\n  0B64..0B65: notdef\n\n  0B71:\n    font: free-serif\n    transform: scale(0.8) translate(0, -0.1)\n\n  0B78..0B7F: notdef\n\n# Tamil\n\n0B80..0BFF:\n  font: noto-tamil\n  transform: scale(0.6)\n\n  0B80..0B81: notdef\n\n  0B82:\n    font: noto-tamil\n    combining: true\n    transform: scale(0.6)\n\n  0B84: notdef\n  0B8B..0B8D: notdef\n  0B91: notdef\n\n  0B94:\n    font: noto-tamil\n    transform: scale(0.45, 0.6)\n\n  0B96..0B98: notdef\n  0B9B: notdef\n  0B9D: notdef\n  0BA0..0BA2: notdef\n  0BA5..0BA7: notdef\n  0BAB..0BAD: notdef\n  0BBA..0BBB: notdef\n\n  0BBC: # early mapping\n    early: true\n    svg: true\n    combining: true\n\n  0BBD: notdef\n\n  0BBE:\n    font: noto-tamil\n    combining: true\n    transform: scale(0.5) translate(0.6, 0)\n\n  0BBF:\n    font: noto-tamil\n    combining: true\n    transform: scale(0.6) translate(0.4, 0)\n\n  0BC0:\n    font: noto-tamil\n    combining: true\n    transform: scale(0.6) translate(0.4, 0)\n\n  # TODO: Should this (and next) mark have spacing form for chart?\n  # Ref: Unicode 9.0.0 p.486\n  0BC1:\n    font: noto-tamil\n    combining: true\n    transform: scale(0.6) translate(0.6, 0)\n  0BC2:\n    font: noto-tamil\n    combining: true\n    transform: scale(0.4, 0.6) translate(0.8, 0)\n\n  0BC3..0BC5: notdef\n\n  0BC6:\n    font: noto-tamil\n    combining: true\n    transform: scale(0.4, 0.6) translate(-0.75, 0)\n\n  0BC7:\n    font: noto-tamil\n    combining: true\n    transform: scale(0.5, 0.6) translate(-0.65, 0)\n\n  0BC8:\n    font: noto-tamil\n    combining: true\n    transform: scale(0.3, 0.6) translate(-1.1, -0.1)\n\n  0BC9: notdef\n\n  0BCA..0BCC:\n    svg: true\n    combining: true\n\n  0BCD:\n    font: noto-tamil\n    combining: true\n    transform: scale(0.6)\n\n  0BCE..0BCF: notdef\n  0BD1..0BD6: notdef\n\n  0BD7:\n    font: noto-tamil\n    combining: true\n    transform: scale(0.25, 0.6) translate(1.3, 0)\n\n  0BD8..0BE5: notdef\n\n  0BF5:\n    font: noto-tamil\n    transform: scale(0.45, 0.6)\n\n  0BF8:\n    font: noto-tamil\n    transform: scale(0.5, 0.6)\n\n  0BFB..0BFF: notdef\n"
  },
  {
    "path": "data/codepoints/0C00.yml",
    "content": "# Telugu\n\n0C00..0C7F:\n  font: noto-telugu\n  transform: scale(0.8)\n\n  0C00:\n    svg: true\n    combining: true\n\n  0C01:\n    font: noto-telugu\n    combining: true\n    transform: scale(0.7) translate(0.4, -0.15)\n\n  0C02:\n    font: noto-telugu\n    combining: true\n    transform: scale(0.7) translate(0.5, -0.15)\n\n  0C03:\n    font: noto-telugu\n    combining: true\n    transform: scale(0.8) translate(0.3, -0.1)\n\n  0C04:\n    early: true\n    svg: true\n    combining: true\n\n  0C0D: notdef\n  0C11: notdef\n  0C29: notdef\n\n  0C34:\n    svg: true\n    transform: scale(0.8)\n\n  0C3A..0C3C: notdef\n\n  0C3E..0C40:\n    font: noto-telugu\n    combining: true\n    transform: scale(0.7) translate(0.3, -0.15)\n\n  0C41:\n    font: noto-telugu\n    combining: true\n    transform: scale(0.8) translate(0.4, -0.1)\n\n  0C42:\n    font: noto-telugu\n    combining: true\n    transform: scale(0.5, 0.8) translate(0.7, -0.1)\n\n  0C43..0C44:\n    font: noto-telugu\n    combining: true\n    transform: scale(0.7, 0.8) translate(0.4, -0.1)\n\n  0C45: notdef\n\n  0C46..0C48:\n    font: noto-telugu\n    combining: true\n    transform: scale(0.8) translate(0.2, -0.1)\n\n  0C49: notdef\n\n  0C4A..0C4D:\n    font: noto-telugu\n    combining: true\n    transform: scale(0.8) translate(0.4, -0.1)\n\n  0C4E..0C54: notdef\n\n  0C55:\n    font: noto-telugu\n    combining: true\n    transform: scale(0.8) translate(0.1, -0.1)\n\n  0C56:\n    font: noto-telugu\n    combining: true\n    transform: scale(0.8) translate(0.3, -0.1)\n\n  0C57: notdef\n\n  0C5A:\n    svg: true\n    transform: scale(0.8)\n\n  0C5B..0C5F: notdef\n\n  0C60:\n    font: noto-telugu\n    transform: scale(0.6, 0.8)\n\n  0C62..0C63:\n    font: noto-telugu\n    combining: true\n    transform: scale(0.8) translate(0.3, -0.2)\n\n  0C64..0C65: notdef\n  0C70..0C76: notdef\n\n  0C77:\n    early: true\n    svg: true\n\n# Kannada\n\n0C80..0CFF:\n  font: noto-kannada\n  transform: scale(0.75)\n\n  0C80:\n    svg: true\n    transform: scale(0.75)\n\n  0C81:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.75) translate(0.1, 0.1)\n\n  0C82:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.65, 0.75) translate(0.5, -0.05)\n\n  0C83:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.75) translate(0.4, -0.05)\n\n  0C84:\n    early: true\n    svg: true\n    transform: scale(0.9)\n\n  0C8D: notdef\n  0C91: notdef\n  0CA9: notdef\n  0CB4: notdef\n  0CBA..0CBB: notdef\n\n  0CBC:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.75) translate(0, -0.1)\n\n  0CBE:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.75) translate(0.5, -0.1)\n\n  0CBF:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.75) translate(0.2, 0)\n\n  0CC0..0CC1:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.75) translate(0.4, 0)\n\n  0CC2:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.6, 0.75) translate(0.5, 0)\n\n  0CC3:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.75) translate(0.3, -0.2)\n\n  0CC4:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.6, 0.75) translate(0.5, -0.2)\n\n  0CC5: notdef\n\n  0CC6:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.75) translate(0.2, -0.1)\n\n  0CC7:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.75) translate(0.4, -0.1)\n\n  0CC8:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.75) translate(0.3, -0.1)\n\n  0CC9: notdef\n\n  0CCA:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.5, 0.75) translate(0.7, -0.1)\n\n  0CCB:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.3, 0.75) translate(1, -0.1)\n\n  0CCC:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.75) translate(0.4, -0.1)\n\n  0CCD:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.75) translate(0.4, -0.1)\n\n  0CCE..0CD4: notdef\n\n  0CD5:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.75) translate(0.4, 0)\n\n  0CD6:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.75) translate(0.5, -0.4)\n\n  0CD7..0CDD: notdef\n  0CDF: notdef\n\n  0CE0:\n    font: noto-kannada\n    transform: scale(0.65, 0.75)\n\n  0CE2..0CE3:\n    font: noto-kannada\n    combining: true\n    transform: scale(0.75) translate(0.15, -0.2)\n\n  0CE4..0CE5: notdef\n  0CF0: notdef\n\n  0CF1..0CF2:\n    font: noto-kannada\n    transform: scale(0.75)\n    box: true\n\n  0CF3..0CFF: notdef\n\n# Malayalam\n\n0D00..0D7F:\n  font: free-serif\n  transform: scale(0.8) translate(0, -0.1)\n\n  0D00:\n    svg: true\n    combining: true\n\n  0D01:\n    font: noto-malayalam\n    combining: true\n    transform: scale(0.8)\n\n  0D02:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.35, -0.2)\n\n  0D03:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.3, -0.1)\n\n  0D04: notdef\n\n  0D08:\n    font: free-serif\n    transform: scale(0.8) scale(0.9, 1) translate(0, -0.1)\n\n  0D0D: notdef\n\n  0D10:\n    font: free-serif\n    transform: scale(0.8) scale(0.85, 1) translate(-0.05, -0.1)\n\n  0D11: notdef\n\n  0D3B..0D3C:\n    svg: true\n    combining: true\n\n  0D3E:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.4, -0.1)\n\n  0D3F..0D44:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.3, -0.1)\n\n  0D45: notdef\n\n  0D46..0D47:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(-0.45, -0.1)\n\n  0D48:\n    font: free-serif\n    combining: true\n    transform: scale(0.3, 0.8) translate(-1.1, -0.1)\n\n  0D49: notdef\n\n  0D4A..0D4C:\n    svg: true\n    combining: true\n\n  0D4D:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.2, 0)\n\n  0D4E:\n    font: free-serif\n    box: true\n    transform: scale(0.8) translate(0, -0.2)\n\n  0D50..0D53: notdef\n\n  0D54: # TODO: find more neat serif font\n    font: manjari\n    transform: scale(0.7) scale(-1, 1)\n\n  0D55..0D56:\n    font: manjari\n    transform: scale(0.7)\n\n  0D57:\n    font: free-serif\n    combining: true\n    transform: scale(0.5, 0.8) translate(0.6, -0.1)\n\n  0D58..0D5C:\n    font: manjari\n    transform: scale(0.7)\n\n  0D5D:\n    font: manjari\n    transform: scale(0.45, 0.7)\n\n  0D5E..0D5F:\n    font: manjari\n    transform: scale(0.7)\n\n  0D62..0D63:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.3, -0.1)\n\n  0D64..0D65: notdef\n\n  0D76:\n    font: manjari\n    transform: scale(0.7)\n\n  0D77:\n    font: manjari\n    transform: scale(0.6, 0.7)\n\n  0D78:\n    font: manjari\n    transform: scale(0.5, 0.7)\n\n# Sinhala\n\n0D80..0DFF:\n  font: free-serif\n  transform: scale(0.8) translate(0, -0.1)\n\n  0D80..0D81: notdef\n\n  0D82:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.3, -0.1)\n\n  0D83:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.3, -0.05)\n\n  0D84: notdef\n\n  0D90:\n    font: free-serif\n    transform: scale(0.7, 0.8) translate(0, -0.1)\n\n  0D97..0D99: notdef\n  0DB2: notdef\n  0DBC: notdef\n  0DBE..0DBF: notdef\n  0DC7..0DC9: notdef\n\n  0DCA:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  0DCB..0DCE: notdef\n\n  0DCF..0DD1:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.35, -0.05)\n\n  0DD2..0DD3:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.3, -0.05)\n\n  0DD4:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.3, -0.1)\n\n  0DD5: notdef\n\n  0DD6:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.3, -0.1)\n\n  0DD7: notdef\n\n  0DD8:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.35, -0.1)\n\n  0DD9:\n    font: free-serif\n    combining: true\n    transform: scale(0.5, 0.8) translate(-0.65, -0.1)\n\n  0DDA:\n    svg: true\n    combining: true\n\n  0DDB:\n    font: free-serif\n    combining: true\n    transform: scale(0.25, 0.8) translate(-1.25, -0.1)\n\n  0DDC..0DDE:\n    svg: true\n    combining: true\n\n  0DDF:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.4, -0.1)\n\n  0DE0..0DE5: notdef\n\n  0DE6..0DEF:\n    svg: true\n    transform: scale(0.8)\n\n  0DF0..0DF1: notdef\n\n  0DF2:\n    font: free-serif\n    combining: true\n    transform: scale(0.5, 0.8) translate(0.65, -0.1)\n\n  0DF3:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.4, -0.1)\n\n  0DF5..0DFF: notdef\n"
  },
  {
    "path": "data/codepoints/0E00.yml",
    "content": "# Thai\n\n0E00..0E7F:\n  font: norasi\n  transform: scale(0.8) translate(0, -0.05)\n\n  0E00: notdef\n\n  0E31:\n    font: norasi\n    combining: true\n    transform: scale(0.8) translate(0.4, 0.1)\n\n  0E34..0E37:\n    font: norasi\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  0E38..0E3A:\n    font: norasi\n    combining: true\n    transform: scale(0.8) translate(0.3, -0.1)\n\n  0E3B..0E3E: notdef\n\n  0E42..0E44:\n    font: norasi\n    transform: scale(0.8) translate(0, 0.15)\n\n  0E47:\n    font: norasi\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.05)\n\n  0E48..0E4C:\n    font: norasi\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.4)\n\n  0E4D..0E4E:\n    font: norasi\n    combining: true\n    transform: scale(0.8) translate(0.4, 0.1)\n\n  0E5B:\n    font: norasi\n    transform: scale(0.7, 0.8) translate(-0.05, -0.05)\n\n  0E5C..0E7F: notdef\n\n# Lao\n\n0E80..0EFF:\n  font: noto-lao\n  transform: scale(0.7)\n\n  0E80: notdef\n  0E83: notdef\n  0E85: notdef\n\n  0E86:\n    early: true\n    font: jglao\n    codepoint: 0x0E83\n    transform: scale(0.9) translate(0, -0.1)\n\n  0E89:\n    early: true\n    font: jglao\n    transform: scale(0.9) translate(0, -0.1)\n\n  0E8B: notdef\n\n  0E8C:\n    early: true\n    font: jglao\n    codepoint: 0x0E8B\n    transform: scale(0.9) translate(0, -0.1)\n\n  0E8E:\n    early: true\n    font: jglao\n    codepoint: 0x0E8C\n    transform: scale(0.9) translate(0, -0.1)\n\n  0E8F:\n    early: true\n    font: jglao\n    codepoint: 0x0E8E\n    transform: scale(0.9) translate(0, -0.1)\n\n  0E90:\n    early: true\n    font: jglao\n    codepoint: 0x0E8F\n    transform: scale(0.9) translate(0, -0.1)\n\n  0E91:\n    early: true\n    font: jglao\n    codepoint: 0x0E90\n    transform: scale(0.9) translate(0, -0.1)\n\n  0E92:\n    early: true\n    font: jglao\n    codepoint: 0x0E91\n    transform: scale(0.9) translate(0, -0.1)\n\n  0E93:\n    early: true\n    font: jglao\n    transform: scale(0.9) translate(0, -0.1)\n\n  0E98:\n    early: true\n    font: jglao\n    codepoint: 0x0EE5\n    transform: scale(0.9) translate(0, -0.1)\n\n  0EA0:\n    early: true\n    font: jglao\n    transform: scale(0.9) translate(0, -0.1)\n\n  0EA4: notdef\n  0EA6: notdef\n\n  0EA8:\n    early: true\n    font: jglao\n    codepoint: 0x0EA4\n    transform: scale(0.9) translate(0, -0.1)\n\n  0EA9:\n    early: true\n    font: jglao\n    codepoint: 0x0EA6\n    transform: scale(0.9) translate(0, -0.1)\n\n  0EAC:\n    early: true\n    font: jglao\n    transform: scale(0.9) translate(0, -0.1)\n\n  0EB1:\n    font: noto-lao\n    combining: true\n    transform: scale(0.7) translate(0.3, 0.1)\n\n  0EB4..0EB7:\n    font: noto-lao\n    combining: true\n    transform: scale(0.7) translate(0.3, 0.1)\n\n  0EB8..0EB9:\n    font: noto-lao\n    combining: true\n    transform: scale(0.7) translate(0.2, -0.1)\n\n  0EBA:\n    early: true\n    combining: true\n    font: jglao\n    transform: scale(0.9) translate(0.2, -0.2)\n\n  0EBB:\n    font: noto-lao\n    combining: true\n    transform: scale(0.7) translate(0.3, 0.1)\n\n  0EBC:\n    font: noto-lao\n    combining: true\n    transform: scale(0.7) translate(0.3, -0.1)\n\n  0EBE..0EBF: notdef\n  0EC5: notdef\n  0EC7: notdef\n\n  0EC8..0ECD:\n    font: noto-lao\n    combining: true\n    transform: scale(0.7) translate(0.25, 0.3)\n\n  0ECE..0ECF: notdef\n  0EDA..0EDB: notdef\n  0EE0..0EFF: notdef\n\n0F00..0FFF:\n  font: jomolhari\n  transform: scale(0.8) translate(0, 0.15)\n\n  0F00..0F03:\n    font: jomolhari\n    transform: scale(0.8) translate(0, 0.25)\n\n  0F08:\n    font: jomolhari\n    transform: scale(0.8) translate(0, -0.1)\n\n  0F0B: # TODO: Draw glyph\n    control: NB\n    box: true\n\n  0F12:\n    font: jomolhari\n    transform: scale(0.8) translate(0, -0.1)\n\n  0F15..0F16:\n    font: jomolhari\n    transform: scale(0.8)\n\n  0F18:\n    font: jomolhari\n    combining: true\n    transform: scale(0.8) translate(0.3, -0.15)\n\n  0F19:\n    font: noto-tibetan\n    combining: true\n    transform: scale(0.8) translate(0.3, -0.05)\n\n  0F35:\n    font: noto-tibetan\n    combining: true\n    transform: scale(0.8) translate(0.25, -0.15)\n\n  0F36:\n    font: jomolhari\n    transform: scale(0.8) translate(0, 0.05)\n\n  0F37:\n    font: noto-tibetan\n    combining: true\n    transform: scale(0.8) translate(0.15, -0.15)\n\n  0F39:\n    font: jomolhari\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.2)\n\n  0F3C..0F3D:\n    font: jomolhari\n    transform: scale(0.7) translate(0, 0.25)\n\n  0F3E:\n    font: noto-tibetan\n    combining: true\n    transform: scale(0.8) translate(0.3, -0.1)\n\n  0F3F:\n    font: noto-tibetan\n    combining: true\n    transform: scale(0.8) translate(-0.3, -0.1)\n\n  0F48: notdef\n\n  0F6B..0F6C:\n    font: noto-tibetan\n    transform: scale(0.7) translate(0, -0.1)\n\n  0F6D..0F70: notdef\n\n  0F71:\n    font: jomolhari\n    combining: true\n    transform: scale(0.8) translate(0.15, -0.1)\n\n  0F72:\n    font: jomolhari\n    combining: true\n    transform: scale(0.8) translate(0.2, 0.25)\n\n  0F73:\n    svg: true\n    combining: true\n\n  0F74..0F75:\n    font: jomolhari\n    combining: true\n    transform: scale(0.8) translate(0.15, -0.1)\n\n  0F76..0F79:\n    svg: true\n    combining: true\n\n  0F7A..0F7E:\n    font: jomolhari\n    combining: true\n    transform: scale(0.8) translate(0.2, 0.25)\n\n  0F7F:\n    font: jomolhari\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.15)\n\n  0F80:\n    font: jomolhari\n    combining: true\n    transform: scale(0.8) translate(0.2, 0.25)\n\n  0F81:\n    svg: true\n    combining: true\n\n  0F82..0F83:\n    font: jomolhari\n    combining: true\n    transform: scale(0.8) translate(0.2, 0.2)\n\n  0F84:\n    font: jomolhari\n    combining: true\n    transform: scale(0.8) translate(0.2, 0.15)\n\n  0F86..0F87:\n    font: noto-tibetan\n    combining: true\n    transform: scale(0.8) translate(0.1, 0.15)\n\n  0F8C:\n    font: noto-tibetan\n    transform: scale(0.8) translate(0, 0.25)\n\n  0F8D..0F8F:\n    font: noto-tibetan\n    combining: true\n    transform: scale(0.7) translate(0.35, 0.15)\n\n  0F90..0FBC:\n    font: jomolhari\n    combining: true\n    transform: scale(0.8, 0.45) translate(0.2, 0.35)\n\n    0F98: notdef\n\n    0F99:\n      font: jomolhari\n      combining: true\n      transform: scale(0.8, 0.45) translate(0, 0.35)\n\n    0FAD:\n      font: jomolhari\n      combining: true\n      transform: scale(0.8, 0.45) translate(0.2, 0.35)\n\n    0FB5:\n      font: jomolhari\n      combining: true\n      transform: scale(0.8, 0.45) translate(0.4, 0.35)\n\n  0FBD: notdef\n\n  0FC3:\n    font: jomolhari\n    transform: scale(0.8) translate(0, 0)\n\n  0FC4:\n    font: jomolhari\n    transform: scale(0.8) translate(0, -0.15)\n\n  0FC5:\n    font: jomolhari\n    transform: scale(0.8)\n\n  0FC6:\n    font: jomolhari\n    combining: true\n    transform: scale(0.7) translate(0, 0.1)\n\n  0FC8:\n    font: jomolhari\n    transform: scale(0.8) translate(0, -0.15)\n\n  0FC9..0FCC:\n    font: jomolhari\n    transform: scale(0.8) translate(0, 0.05)\n\n  0FCD: notdef\n\n  0FCE:\n    font: noto-tibetan\n    transform: scale(0.8) translate(0, -0.1)\n\n  0FD0:\n    font: jomolhari\n    transform: scale(0.75) translate(0, 0.2)\n\n  0FD1:\n    font: jomolhari\n    transform: scale(0.8) translate(0, -0.1)\n\n  0FD2..0FDA:\n    font: noto-tibetan\n    transform: scale(0.8) translate(0, 0)\n\n  0FDB..0FFF: notdef\n"
  },
  {
    "path": "data/codepoints/1000.yml",
    "content": "# Myanmar\n\n1000..109F:\n  font: padauk\n  transform: scale(0.65) translate(0, -0.1)\n\n  102A:\n    font: padauk\n    transform: scale(0.45, 0.65) translate(0, -0.1)\n\n  102B:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.4, -0.1)\n\n  102C:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.5, -0.1)\n\n  102D..102E:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.2, -0.1)\n\n  102F..1030: # TODO: is this right composition?\n    font: padauk\n    combining: true\n    transform: scale(0.65, 0.3) translate(0, 0.6)\n\n  1031:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(-0.5, -0.1)\n\n  1032..1035:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.2, -0.1)\n\n  1036..1037:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.1, -0.1)\n\n  1038:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.4, -0.1)\n\n  1039: # TODO: draw cross\n    font: padauk\n    transform: scale(0)\n    combining: true\n    box: true\n\n  103A..103B:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.4, -0.1)\n\n  103C:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(-0.3, -0.1)\n\n  103D:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.2, -0.1)\n\n  103E:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0, -0.1)\n\n  1056..1057:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.5, -0.1)\n\n  1058..1059:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0, -0.1)\n\n  105E..1060:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.1, -0.1)\n\n  1062..1064:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.4, -0.1)\n\n  1067..106D:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.4, -0.1)\n\n  1071:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0, -0.1)\n\n  1072:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.2, -0.1)\n\n  1073:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0, -0.1)\n\n  1074:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.3, -0.1)\n\n  1082:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0, -0.1)\n\n  1083:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.4, -0.1)\n\n  1084:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(-0.5, -0.1)\n\n  1085..1086:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.2, -0.1)\n\n  1087..108B:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.4, -0.1)\n\n  108C:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.5, -0.1)\n\n  108D:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0, 0)\n\n  108F:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.4, -0.1)\n\n  109A..109C:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.4, -0.1)\n\n  109D:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.2, -0.1)\n\n# Georgian\n\n10A0..10FF:\n  font: noto-georgian\n  transform: scale(0.7)\n\n  10C6: notdef\n\n  10C7: # TODO: more consistent typeface\n    font: quivira\n    transform: scale(0.7)\n\n  10C8..10CC: notdef\n\n  10CD:\n    font: quivira\n    transform: scale(0.7)\n\n  10CE..10CF: notdef\n\n  10FD..10FF:\n    font: quivira\n    transform: scale(0.8)\n\n# Hangul Jamo\n\n1100..11FF:\n  font: unbatang\n  transform: translate(0.12, -0.05)\n\n  115F:\n    control: HC\\nF\n\n  1160:\n    control: HJ\\nF\n\n  1161..11A7:\n    font: unbatang\n    transform: translate(0.5, -0.05)\n\n  11A8..11FF:\n    font: unbatang\n    transform: translate(0.42, -0.05)\n\n# Ethiopic\n\n1200..137F:\n  font: abyssinica\n  transform: scale(0.8)\n\n  1249: notdef\n  124E..124F: notdef\n  1257: notdef\n  1259: notdef\n  125E..125F: notdef\n  1289: notdef\n  128E..128F: notdef\n  12B1: notdef\n  12B6..12B7: notdef\n  12BF: notdef\n  12C1: notdef\n  12C6..12C7: notdef\n  12D7: notdef\n  1311: notdef\n  1316..1317: notdef\n  135B..135C: notdef\n\n  135D..135F:\n    font: abyssinica\n    combining: true\n    transform: scale(0.8) translate(0.25, 0.1)\n\n  137D..137F: notdef\n\n# Ethiopic Supplement\n\n1380..139F:\n  font: abyssinica\n  transform: scale(0.8)\n\n  139A..139F: notdef\n\n# Cherokee\n# TODO: Even Unicode 9.0.0 introduced new sans-serif typeface to the chart, I think serif typeface is more preffered\n\n13A0..13FF:\n  font: noto-cherokee\n  transform: scale(0.8)\n\n  13F6..13F7: notdef\n  13FE..13FF: notdef\n\n# Unified Canadian Aboriginal Syllabics\n\n1400..167F:\n  font: noto-canadian-aboriginal\n  transform: scale(0.8)\n\n  1671..1672:\n    font: noto-canadian-aboriginal\n    transform: scale(0.7, 0.8)\n\n  1675..1676:\n    font: noto-canadian-aboriginal\n    transform: scale(0.7, 0.8)\n\n# Ogham\n\n1680..169F:\n  font: noto-ogham\n  transform: scale(0.8)\n\n  1680:\n    font: noto-ogham\n    box: true\n    transform: scale(0.8)\n\n  169D..169F: notdef\n\n# Runic\n\n16A0..16FF:\n  font: noto-runic\n  transform: scale(0.8)\n\n  16F1..16F8:\n    svg: true\n\n    16F2:\n      font: noto-runic\n      codepoint: 0x16CB\n      transform: scale(-0.8, 0.8)\n\n    16F7:\n      font: noto-runic\n      codepoint: 0x16B4\n      transform: scale(0.8, -0.8)\n\n  16F9..16FF: notdef\n\n# Tagalog\n\n1700..171F:\n  font: noto-tagalog\n  transform: scale(0.8)\n\n  170D: notdef\n\n  1712:\n    font: noto-tagalog\n    combining: true\n    transform: scale(0.8) translate(0.15, 0)\n\n  1713..1714:\n    font: noto-tagalog\n    combining: true\n    transform: scale(0.8) translate(0.25, 0)\n\n  1715..171F: notdef\n\n# Hanunoo\n\n1720..173F:\n  font: free-serif\n\n  1732..1733:\n    font: free-serif\n    combining: true\n    transform: transform(0.3, 0.05)\n\n  1734:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) transform(0.3, 0)\n\n  1737..173F: notdef\n\n# Buhid\n\n1740..175F:\n  font: hancom\n  transform: scale(0.8)\n\n  1752:\n    font: hancom\n    combining: true\n    transform: scale(0.8) translate(0, 0.1)\n\n  1753:\n    font: hancom\n    combining: true\n    transform: scale(0.8) translate(0, -0.1)\n\n  1754..175F: notdef\n\n# Tagbanwa\n\n1760..177F:\n  font: noto-tagbanwa\n  transform: scale(0.8)\n\n  176D: notdef\n  1771: notdef\n\n  1772..1773:\n    font: noto-tagbanwa\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  1774..177F: notdef\n\n# Khmer\n\n1780..17FF:\n  font: noto-khmer\n  transform: scale(0.75) translate(0, -0.05)\n\n  17AA:\n    font: noto-khmer\n    transform: scale(0.75) translate(0, 0.05)\n\n  17B3:\n    font: noto-khmer\n    transform: scale(0.75) translate(0, 0.05)\n\n  17B4:\n    control: KIV\\nAQ\n\n  17B5:\n    control: KIV\\nAA\n\n  17B6:\n    font: noto-khmer\n    combining: true\n    transform: scale(0.75) translate(0.35, -0.05)\n\n  17B7..17BA:\n    font: noto-khmer\n    combining: true\n    transform: scale(0.75) translate(0.35, 0.2)\n\n  17BB..17BD:\n    font: noto-khmer\n    combining: true\n    transform: scale(0.75) translate(0.2, -0.1)\n\n  17BE..17C0:\n    svg: true\n    combining: true\n\n  17C1..17C3:\n    font: noto-khmer\n    combining: true\n    transform: scale(0.75) translate(-0.4, 0.15)\n\n  17C4..17C5:\n    svg: true\n    combining: true\n\n  17C6:\n    font: noto-khmer\n    combining: true\n    transform: scale(0.75) translate(0.35, 0.2)\n\n  17C7..17C8:\n    font: noto-khmer\n    combining: true\n    transform: scale(0.75) translate(0.35, 0)\n\n  17C9..17D1:\n    font: noto-khmer\n    combining: true\n    transform: scale(0.75) translate(0.35, 0.2)\n\n  17D2:\n    font: noto-khmer\n    combining: true\n    box: true\n    transform: scale(0.75) translate(0.35, -0.2)\n\n  17D3:\n    font: noto-khmer\n    combining: true\n    transform: scale(0.75) translate(0.35, 0.2)\n\n  17D8:\n    font: noto-khmer\n    transform: scale(0.4, 0.75) translate(0, -0.05)\n\n  17DA:\n    font: noto-khmer\n    transform: scale(0.55, 0.75) translate(0, -0.05)\n\n  17DD:\n    font: noto-khmer\n    combining: true\n    transform: scale(0.75) translate(0.45, 0.2)\n\n  17DE..17DF: notdef\n  17EA..17EF: notdef\n  17FA..17FF: notdef\n"
  },
  {
    "path": "data/codepoints/1800.yml",
    "content": "# Mongolian\n\n1800..18AF:\n  font: mongolian-script\n  transform: scale(0.7) translate(0, -0.05)\n\n  180B..180E:\n    control:\n      - FV\\nS1\n      - FV\\nS2\n      - FV\\nS3\n      - MV\\nS\n\n  180F: notdef\n\n  1810..1819:\n    font: mongolian-script\n    transform: rotate(90) scale(0.7) translate(0, -0.05)\n\n  181A..181F: notdef\n\n  1878:\n    early: true\n    svg: true\n\n  1879..187F: notdef\n\n  1885:\n    font: mongolian-script\n    combining: true\n    transform: scale(0.7) translate(0, -0.5)\n\n  1886:\n    font: mongolian-script\n    combining: true\n    transform: scale(0.7, 0.4) translate(0, -0.8)\n\n  189C:\n    font: mongolian-script\n    transform: scale(0.7) translate(0, 0)\n\n  18A9:\n    svg: true\n    combining: true\n\n  18AA:\n    svg: true\n\n  18AB..18AF: notdef\n\n# Unified Canadian Aboriginal Syllabics Extended\n\n18B0..18FF:\n  font: noto-canadian-aboriginal\n  transform: scale(0.8)\n\n  18DE..18DF:\n    font: noto-canadian-aboriginal\n    transform: scale(0.8) translate(0, 0.2)\n\n  18F6..18FF: notdef\n\n# Limbu\n\n1900..194F:\n  font: namdhinggo\n\n  191D..191E:\n    svg: true\n\n  191F: notdef\n\n  1920..1921:\n    font: namdhinggo\n    combining: true\n    transform: translate(0.3, 0)\n\n  1922:\n    font: namdhinggo\n    combining: true\n    transform: translate(0.2, -0.15)\n\n  1923:\n    font: namdhinggo\n    combining: true\n    transform: translate(0.3, -0.1)\n\n  1924:\n    font: namdhinggo\n    combining: true\n    transform: scale(0.7, 1) translate(0.45, -0.1)\n\n  1925:\n    font: namdhinggo\n    combining: true\n    transform: translate(0.35, -0.05)\n\n  1926:\n    font: namdhinggo\n    combining: true\n    transform: scale(0.7, 1) translate(0.45, -0.05)\n\n  1927..1928:\n    font: namdhinggo\n    combining: true\n    transform: translate(0.1, 0)\n\n  1929..192B:\n    font: namdhinggo\n    combining: true\n    transform: translate(0.3, -0.2)\n\n  192C..192F: notdef\n\n  1930:\n    font: namdhinggo\n    combining: true\n    transform: scale(0.8, 1) translate(0.4, -0.1)\n\n  1931:\n    font: namdhinggo\n    combining: true\n    transform: translate(0.3, -0.2)\n\n  1932..1933:\n    font: namdhinggo\n    combining: true\n    transform: translate(0.3, -0.2)\n\n  1934..1936:\n    font: namdhinggo\n    combining: true\n    transform: translate(0.3, -0.1)\n\n  1937:\n    font: namdhinggo\n    combining: true\n    transform: translate(0.2, -0.1)\n\n  1938:\n    font: namdhinggo\n    combining: true\n    transform: translate(0.3, -0.2)\n\n  1939:\n    font: namdhinggo\n    combining: true\n    transform: translate(0.2, -0.1)\n\n  193A:\n    font: namdhinggo\n    combining: true\n    transform: translate(0.1, 0.1)\n\n  193B:\n    font: namdhinggo\n    combining: true\n    transform: translate(0.25, -0.2)\n\n  193C..193F: notdef\n  1941..1943: notdef\n\n# Tai Le\n\n1950..197F:\n  font: free-serif\n  transform: scale(0.8)\n\n  196E..196F: notdef\n  1975..197F: notdef\n\n# New Tai Lue\n\n1980..19DF:\n  font: dai-banna\n  transform: scale(0.85) translate(0, -0.1)\n\n  19AC..19AF: notdef\n  19CA..19CF: notdef\n  19DB..19DF: notdef\n\n# Khmer Symbols\n\n19E0..19FF:\n  font: noto-khmer\n  transform: scale(0.55) translate(0, -0.05)\n"
  },
  {
    "path": "data/codepoints/1A00.yml",
    "content": "# Buginese\n\n1A00..1A1F:\n  font: free-serif\n  transform: scale(0.8)\n\n  1A17..1A18:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.2, 0)\n\n  1A19:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(-0.2, 0)\n\n  1A1A:\n    font: free-serif\n    combining: true\n    transform: scale(0.6, 0.8) translate(0.6, 0)\n\n  1A1B:\n    font: free-serif\n    combining: true\n    transform: scale(0.8) translate(0.4, 0)\n\n  1A1C..1A1D: notdef\n\n# Tai Tham\n\n1A20..1AAF:\n  font: noto-tai-tham\n  transform: scale(0.8)\n\n  1A55:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(-0.4, 0)\n\n  1A56..1A57:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(0.3, -0.1)\n\n  1A58:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(0.4, 0.2)\n\n  1A59..1A5A:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.1)\n\n  1A5B:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  1A5C..1A5E:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(0.25, -0.1)\n\n  1A5F: notdef\n\n  1A60:\n    font: noto-tai-tham\n    combining: true\n    box: true\n    transform: scale(0.8) translate(0.15, -0.15)\n\n  1A61:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(0.4, -0.1)\n\n  1A62:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(0.2, 0)\n\n  1A63..1A64:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(0.35, 0)\n\n  1A65..1A68:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(0.25, 0.1)\n\n  1A69..1A6A:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(0.2, -0.1)\n\n  1A6B:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(0.25, 0)\n\n  1A6C:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(0.2, -0.1)\n\n  1A6D:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(0.3, -0.1)\n\n  1A6E:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(-0.4, -0.1)\n\n  1A6F:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.4, 0.8) translate(-0.8, -0.1)\n\n  1A70..1A72:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(-0.4, -0.1)\n\n  1A73..1A76:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(0.15, 0)\n\n  1A77..1A7C:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.05)\n\n  1A7D..1A7E: notdef\n\n  1A7F:\n    font: noto-tai-tham\n    combining: true\n    transform: scale(0.8) translate(0.15, -0.1)\n\n  1A8A..1A8F: notdef\n  1A9A..1A9F: notdef\n  1AAE..1AAF: notdef\n\n# Combining Diacritical Marks Extended\n\n1AB0..1AFF:\n  font: nishiki\n\n  1AB0..1AB4:\n    font: nishiki\n    combining: true\n    transform: translate(0.3, 0.1)\n\n  1AB5..1AB8:\n    font: nishiki\n    combining: true\n    transform: translate(0.3, -0.1)\n\n  1AB9..1ABA:\n    font: nishiki\n    combining: true\n    transform: translate(0.4, -0.05)\n\n  1ABB..1ABC:\n    font: nishiki\n    combining: true\n    transform: translate(0.3, 0.1)\n\n  1ABD:\n    font: nishiki\n    combining: true\n    transform: translate(0.3, -0.15)\n\n  1ABE:\n    font: nishiki\n    combining: true\n    transform: translate(0.25, 0)\n\n  1ABF..1AFF: notdef\n\n# Balinese\n# Consider using Aksara Bali instead of Noto\n# http://www.alanwood.net/downloads/aksrbali.zip\n\n1B00..1B7F:\n  font: noto-balinese\n  transform: scale(0.7) translate(0, -0.2)\n\n  1B00..1B03:\n    font: noto-balinese\n    combining: true\n    transform: scale(0.7) translate(0.3, 0)\n\n  1B04:\n    font: noto-balinese\n    combining: true\n    transform: scale(0.7) translate(0.4, -0.2)\n\n  1B34:\n    font: noto-balinese\n    combining: true\n    transform: scale(0.7) translate(0.25, 0)\n\n  1B35:\n    font: noto-balinese\n    combining: true\n    transform: scale(0.7) translate(0.5, 0)\n\n  1B36..1B37:\n    font: noto-balinese\n    combining: true\n    transform: scale(0.7) translate(0.25, 0)\n\n  1B38..1B3A:\n    font: noto-balinese\n    combining: true\n    transform: scale(0.7) translate(0.3, -0.2)\n\n  1B3B..1B41:\n    svg: true\n    combining: true\n\n  1B42:\n    font: noto-balinese\n    combining: true\n    transform: scale(0.7) translate(0.4, 0.1)\n\n  1B43:\n    font: noto-balinese\n    combining: true\n    transform: scale(0.7) translate(0.5, 0.1)\n\n  1B44:\n    font: noto-balinese\n    combining: true\n    transform: scale(0.5) translate(0.5, 0)\n\n  1B46:\n    font: noto-balinese\n    transform: scale(0.5, 0.7) translate(0, -0.2)\n\n  1B4C..1B4F: notdef\n\n  1B6B:\n    font: noto-balinese\n    combining: true\n    transform: scale(0.7) translate(0.2, 0)\n\n  1B6C:\n    font: noto-balinese\n    combining: true\n    transform: scale(0.7) translate(0.2, -0.2)\n\n  1B6D..1B73:\n    font: noto-balinese\n    combining: true\n    transform: scale(0.7) translate(0.3, 0)\n\n  1B7D..1B7F: notdef\n\n# Sundanese\n\n1B80..1BBF:\n  font: noto-sundanese\n  transform: scale(0.7)\n\n  1B80..1B81:\n    font: noto-sundanese\n    combining: true\n    transform: scale(0.7) translate(0.2, 0.1)\n\n  1B82:\n    font: noto-sundanese\n    combining: true\n    transform: scale(0.7) translate(0.45, -0.1)\n\n  1BA1..1BA2:\n    font: noto-sundanese\n    combining: true\n    transform: scale(0.7) translate(0.3, -0.1)\n\n  1BA3:\n    font: noto-sundanese\n    combining: true\n    transform: scale(0.7) translate(0.4, -0.1)\n\n  1BA4:\n    font: noto-sundanese\n    combining: true\n    transform: scale(0.7) translate(0.25, 0.1)\n\n  1BA5:\n    font: noto-sundanese\n    combining: true\n    transform: scale(0.7) translate(0.4, -0.1)\n\n  1BA6:\n    font: noto-sundanese\n    combining: true\n    transform: scale(0.7) translate(-0.3, 0)\n\n  1BA7:\n    font: noto-sundanese\n    combining: true\n    transform: scale(0.7) translate(0.4, 0)\n\n  1BA8..1BA9:\n    font: noto-sundanese\n    combining: true\n    transform: scale(0.7) translate(0.25, 0.1)\n\n  1BAA:\n    font: noto-sundanese\n    combining: true\n    transform: scale(0.7) translate(0.4, 0)\n\n  1BAB:\n    font: noto-sundanese\n    box: true\n    transform: scale(0.7) translate(0, 0.3)\n\n  1BAC..1BAD:\n    font: noto-sundanese\n    combining: true\n    transform: scale(0.7) translate(0.4, -0.1)\n\n  1BAF:\n    font: noto-sundanese\n    transform: scale(0.6, 0.7)\n\n# Batak\n\n1BC0..1BFF:\n  font: noto-batak\n  transform: scale(0.8) translate(0, -0.1)\n\n  1BE6:\n    font: noto-batak\n    combining: true\n    transform: scale(0.8) translate(0.2, 0)\n\n  1BE7:\n    font: noto-batak\n    combining: true\n    transform: scale(0.8) translate(0.4, -0.1)\n\n  1BE8:\n    font: noto-batak\n    combining: true\n    transform: scale(0.8) translate(0.2, 0)\n\n  1BE9..1BEB:\n    font: noto-batak\n    combining: true\n    transform: scale(0.8) translate(0.4, -0.15)\n\n  1BEC:\n    font: noto-batak\n    combining: true\n    transform: scale(0.7, 0.8) translate(0.5, -0.15)\n\n  1BED:\n    font: noto-batak\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  1BEE..1BEF:\n    font: noto-batak\n    combining: true\n    transform: scale(0.8) translate(0.2, -0.1)\n\n  1BF0..1BF1:\n    font: noto-batak\n    combining: true\n    transform: scale(0.8) translate(0.2, -0.1)\n\n  1BF2:\n    font: noto-batak\n    combining: true\n    transform: scale(0.7, 0.8) translate(0.5, -0.15)\n\n  1BF3:\n    font: noto-batak\n    combining: true\n    transform: scale(0.8) translate(0.4, -0.1)\n\n  1BF4..1BFB: notdef\n\n  1BFC..1BFF:\n    font: noto-batak\n    transform: scale(0.8) translate(0, 0.05)\n"
  },
  {
    "path": "data/codepoints/1C00.yml",
    "content": "# Lepcha\n\n1C00..1C4F:\n  font: mingzat\n  transform: scale(0.7) translate(0, -0.1)\n\n  1C20:\n    font: mingzat\n    transform: scale(0.7) translate(-0.05, -0.1)\n\n  1C24..1C26:\n    font: mingzat\n    combining: true\n    transform: scale(0.7) translate(0.4, -0.1)\n\n  1C27..1C29:\n    font: mingzat\n    combining: true\n    transform: scale(0.6) translate(-0.5, -0.1)\n\n  1C2A..1C2B:\n    font: mingzat\n    combining: true\n    transform: scale(0.6) translate(0.5, -0.2)\n\n  1C2C:\n    font: mingzat\n    combining: true\n    transform: scale(0.7) translate(0.4, -0.35)\n\n  1C2D..1C33:\n    font: mingzat\n    combining: true\n    transform: scale(0.7) translate(0.4, 0.1)\n\n  1C34..1C35:\n    font: mingzat\n    combining: true\n    transform: scale(0.7) translate(-0.5, -0.1)\n\n  1C36:\n    font: mingzat\n    combining: true\n    transform: scale(0.7) translate(0.4, 0.1)\n\n  1C37:\n    font: mingzat\n    combining: true\n    transform: scale(0.7) translate(0.4, -0.35)\n\n  1C38..1C3A: notdef\n  1C4A..1C4C: notdef\n\n# Ol Chiki\n\n1C50..1C7F:\n  font: noto-ol-chiki\n  transform: scale(0.9)\n\n# Cyrillic Extended-C\n\n1C80..1C8F:\n  font: ponomar\n  transform: scale(0.8)\n\n  1C89..1C8F: notdef\n\n# Georgian Extended\n\n1C90..1CBF:\n  font: dejavu\n  transform: scale(0.8)\n  early: true\n\n  1C90..1CB6:\n    font: dejavu\n    transform: scale(0.7)\n    early: true\n    codepoint:\n      - 0xF400\n      - 0xF401\n      - 0xF402\n      - 0xF403\n      - 0xF404\n      - 0xF405\n      - 0xF406\n      - 0xF407\n      - 0xF408\n      - 0xF409\n      - 0xF40A\n      - 0xF40B\n      - 0xF40C\n      - 0xF40D\n      - 0xF40E\n      - 0xF40F\n      - 0xF410\n      - 0xF411\n      - 0xF412\n      - 0xF413\n      - 0xF414\n      - 0xF415\n      - 0xF416\n      - 0xF417\n      - 0xF418\n      - 0xF419\n      - 0xF41A\n      - 0xF41B\n      - 0xF41C\n      - 0xF41D\n      - 0xF41E\n      - 0xF41F\n      - 0xF420\n      - 0xF421\n      - 0xF422\n      - 0xF423\n      - 0xF424\n      - 0xF425\n      - 0xF426\n\n  1CB7:\n    transform: translate(0, -0.02) scale(0.7)\n    early: true\n    svg: true\n\n  1CB8:\n    font: dejavu\n    transform: scale(0.7) scale(-1, 1)\n    codepoint: 0xF417\n    early: true\n\n  1CB9:\n    font: dejavu\n    transform: translate(0, -0.05) scale(0.7) rotate(180)\n    codepoint: 0xF402\n    early: true\n\n  1CBA:\n    transform: scale(0.7)\n    svg: true\n    early: true\n\n  1CBB..1CBC: notdef\n\n  1CBD:\n    transform: scale(0.7)\n    early: true\n    svg: true\n\n  1CBE:\n    font: dejavu\n    transform: translate(0, -0.05) scale(0.7) rotate(180)\n    codepoint: 0xF422\n    early: true\n\n  1CBF:\n    transform: scale(0.7)\n    svg: true\n    early: true\n\n# Sundanese Supplement\n\n1CC0..1CCF:\n  font: noto-sundanese\n  transform: scale(0.7)\n\n  1CC4:\n    font: noto-sundanese\n    transform: scale(0.55, 0.7) translate(-0.05, 0)\n\n  1CC7:\n    font: noto-sundanese\n    transform: scale(0.55, 0.7) translate(-0.05, 0)\n\n  1CC8..1CCF: notdef\n\n# Vedic Extensions\n\n1CD0..1CFF:\n  font: noto-devanagari\n\n  1CD0..1CD2:\n    font: noto-devanagari\n    combining: true\n    transform: translate(0.15, 0.2)\n\n  1CD4:\n    font: noto-devanagari\n    combining: true\n    transform: translate(0.15, -0.05)\n\n  1CD5..1CD7:\n    font: noto-devanagari\n    combining: true\n    transform: translate(0.25, -0.2)\n\n  1CD8..1CD9:\n    font: noto-devanagari\n    combining: true\n    transform: translate(0.15, -0.2)\n\n  1CDA..1CDB:\n    font: noto-devanagari\n    combining: true\n    transform: translate(0.1, 0.15)\n\n  1CDC..1CDE:\n    font: noto-devanagari\n    combining: true\n    transform: translate(0.15, -0.2)\n\n  1CDF:\n    font: noto-devanagari\n    combining: true\n    transform: translate(0.25, -0.2)\n\n  1CE0:\n    font: noto-devanagari\n    combining: true\n    transform: translate(0.2, 0.1)\n\n  1CE1:\n    font: noto-devanagari\n    combining: true\n    transform: translate(0.2, 0) scale(0.9)\n\n  1CE2:\n    font: noto-devanagari\n    combining: true\n    transform: translate(0.1, 0)\n\n  1CE3:\n    font: noto-devanagari\n    combining: true\n    transform: translate(0.2, -0.05)\n\n  1CE4..1CE5:\n    font: noto-devanagari\n    combining: true\n    transform: translate(-0.2, -0.05)\n\n  1CE6..1CE7:\n    font: noto-devanagari\n    combining: true\n    transform: translate(0.2, -0.05)\n\n  1CE8:\n    font: noto-devanagari\n    combining: true\n    transform: translate(-0.2, -0.05)\n\n  1CED:\n    font: noto-devanagari\n    combining: true\n    transform: translate(0, -0.2)\n\n  1CF2..1CF3:\n    font: noto-devanagari\n    combining: true\n    transform: translate(0.3, -0.05) scale(0.8)\n\n  1CF4:\n    font: noto-devanagari\n    combining: true\n    transform: translate(0.15, 0.3)\n\n  1CF7:\n    svg: true\n    combining: true\n\n  1CF8..1CF9:\n    svg: true\n    combining: true\n\n  1CFA:\n    svg: true\n    transform: scale(0.8)\n    early: true\n\n  1CFB..1CFF: notdef\n\n# Phonetic Extensions\n\n1D00..1D7F:\n  font: doulos\n  transform: scale(0.9) translate(0, -0.05)\n\n# Phonetic Extensions Supplement\n\n1D80..1DBF:\n  font: doulos\n  transform: scale(0.9) translate(0, -0.05)\n\n# Combining Diacritical Marks Supplement\n\n1DC0..1DFF:\n  font: doulos\n  combining: true\n\n  1DC0..1DC1:\n    font: noto-serif\n    combining: true\n    transform: translate(0, 0.1)\n\n  1DC2:\n    font: noto-serif\n    combining: true\n    transform: translate(0, -0.2)\n\n  1DC3..1DC9:\n    font: noto-serif\n    combining: true\n    transform: translate(0, 0.1)\n\n  1DCA:\n    font: noto-serif\n    combining: true\n    transform: translate(0, -0.2)\n\n  1DCB..1DCE:\n    font: free-serif\n    combining: true\n    transform: scale(0.9, 1) translate(0.3, 0)\n\n  1DCF:\n    font: free-serif\n    combining: true\n    transform: translate(0.2, -0.2)\n\n  1DD0:\n    font: junicode\n    combining: true\n    transform: translate(0.3, -0.2)\n\n  1DD1..1DD2:\n    font: junicode\n    combining: true\n    transform: translate(0.2, 0)\n\n  1DD3..1DE6:\n    font: free-serif\n    combining: true\n    transform: translate(0.2, 0)\n\n  1DE7:\n    font: free-serif\n    combining: true\n    codepoint: 0x03B1\n    transform: scale(0.4) translate(0, -0.75)\n\n  1DE8:\n    font: free-serif\n    combining: true\n    codepoint: 0x62\n    transform: scale(0.4) translate(0, -0.75)\n\n  1DE9:\n    font: free-serif\n    combining: true\n    codepoint: 0x03B2\n    transform: scale(0.4) translate(0, -0.75)\n\n  1DEA:\n    font: free-serif\n    combining: true\n    codepoint: 0x0259\n    transform: scale(0.4) translate(0, -0.75)\n\n  1DEB:\n    font: free-serif\n    combining: true\n    codepoint: 0x66\n    transform: scale(0.4) translate(0, -0.75)\n\n  1DEC:\n    font: quivira\n    combining: true\n    codepoint: 0xAB38\n    transform: scale(0.4) translate(0, -0.75)\n\n  # TODO: Add slash\n  1DED:\n    font: free-serif\n    combining: true\n    codepoint: 0x6F\n    transform: scale(0.4) translate(0, -0.75)\n\n  1DEE:\n    font: free-serif\n    combining: true\n    codepoint: 0x70\n    transform: scale(0.4) translate(0, -0.85)\n\n  1DEF:\n    font: free-serif\n    combining: true\n    codepoint: 0x0283\n    transform: scale(0.4) translate(0, -0.85)\n\n  # TODO: Add slash\n  1DF0:\n    font: free-serif\n    combining: true\n    codepoint: 0x75\n    transform: scale(0.4) translate(0, -0.75)\n\n  1DF1:\n    font: free-serif\n    combining: true\n    codepoint: 0x77\n    transform: scale(0.4) translate(0, -0.75)\n\n  1DF2:\n    font: free-serif\n    combining: true\n    codepoint: 0xE4\n    transform: scale(0.4) translate(0, -0.75)\n\n  1DF3:\n    font: free-serif\n    combining: true\n    codepoint: 0xF6\n    transform: scale(0.4) translate(0, -0.75)\n\n  1DF4:\n    font: free-serif\n    combining: true\n    codepoint: 0xFC\n    transform: scale(0.4) translate(0, -0.75)\n\n  1DF5:\n    font: free-serif\n    combining: true\n    codepoint: 0x02D4\n    transform: translate(0, -0.5)\n\n  1DF6..1DF9:\n    svg: true\n    combining: true\n\n  1DFA..1DFA: notdef\n\n  1DFB:\n    font: nishiki\n    combining: true\n    transform: translate(0.3, 0.1)\n\n  1DFC:\n    font: free-serif\n    combining: true\n    transform: translate(0, -0.15)\n\n  1DFD:\n    font: free-serif\n    combining: true\n    transform: translate(0.25, -0.15)\n\n  1DFE:\n    font: free-serif\n    combining: true\n    transform: translate(0.2, 0)\n\n  1DFF:\n    font: free-serif\n    combining: true\n    transform: translate(0.3, -0.15)\n"
  },
  {
    "path": "data/codepoints/1E00.yml",
    "content": "# Latin Extended Additional\n\n1E00..1EFF:\n  font: free-serif\n  transform: scale(0.8)\n\n# Greek Extended\n\n1F00..1FFF:\n  font: free-serif\n  transform: scale(0.8)\n\n  1F16..1F17: notdef\n  1F1E..1F1F: notdef\n  1F46..1F47: notdef\n  1F4E..1F4F: notdef\n  1F58: notdef\n  1F5A: notdef\n  1F5C: notdef\n  1F5E: notdef\n  1F7E..1F7F: notdef\n  1FB5: notdef\n  1FC5: notdef\n  1FD4..1FD5: notdef\n  1FDC: notdef\n  1FF0..1FF1: notdef\n  1FF5: notdef\n  1FFF: notdef\n"
  },
  {
    "path": "data/codepoints/2000.yml",
    "content": "# General Punctuation\n\n2000..206F:\n  font: symbola\n  transform: translate(0, -0.05)\n\n  2000..200F:\n    control:\n      - NQ\\nSP\n      - MQ\\nSP\n      - EN\\nSP\n      - EM\\nSP\n      - 3/M\\nSP\n      - 4/M\\nSP\n      - 6/M\\nSP\n      - F\\nSP\n      - P\\nSP\n      - TH\\nSP\n      - H\\nSP\n      - ZW\\nSP\n      - ZW\\nNJ\n      - ZW\\nJ\n      - LRM\n      - RLM\n\n  2011:\n    control: NB\\n-\n\n  2028..202F:\n    control:\n      - L\\nSEP\n      - P\\nSEP\n      - LRE\n      - RLE\n      - PDF\n      - LRO\n      - RLO\n      - NNB\\nSP\n\n  2030:\n    font: free-serif\n\n  2031:\n    font: free-serif\n    transform: scale(0.75, 1)\n\n  205F:\n    control: MM\\nSP\n\n  2060:\n    control: WJ\n\n  2061..2062:\n    svg: true\n    box: true\n\n  2063:\n    font: doulos\n    codepoint: 0x2C\n    transform: translate(0, -0.2)\n    box: true\n\n  2064:\n    svg: true\n    box: true\n\n  2065: notdef\n\n  2066..206F:\n    control:\n      - LRI\n      - RLI\n      - FSI\n      - PDI\n      - I\\nSS\n      - A\\nSS\n      - I\\nAFS\n      - A\\nAFS\n      - NA\\nDS\n      - NO\\nDS\n\n# Superscripts and Subscripts\n\n2070..209F:\n  font: doulos\n  transform: scale(0.95) translate(0, -0.05)\n\n  2072..2073: notdef\n  208F: notdef\n  209D..209F: notdef\n\n# Currency Symbols\n\n20A0..20CF:\n  font: free-serif\n  transform: scale(0.9)\n\n  20AF:\n    font: free-serif\n    transform: scale(0.7)\n\n  20BA..20BD:\n    font: doulos\n\n  20BE:\n    font: symbola\n\n  20BF:\n    font: btc\n    codepoint: 0x42\n    transform: scale(0.8)\n\n  20C0..20CF: notdef\n\n# Combining Diacritical Marks for Symbols\n\n20D0..20FF:\n  font: symbola\n  combining: true\n\n  20D0..20DC:\n    font: symbola\n    combining: true\n    transform: translate(0.25, 0.05)\n\n    20D2..20D3:\n      font: symbola\n      combining: true\n      transform: translate(0.25, -0.1)\n\n    20D8..20DA:\n      font: symbola\n      combining: true\n      transform: translate(0.25, -0.05)\n\n  20DD..20E3:\n    font: symbola\n    combining: true\n    transform: translate(0.5, -0.1)\n\n    20E1:\n      font: symbola\n      combining: true\n      transform: translate(0.25, 0.1)\n\n  20E4:\n    font: symbola\n    combining: true\n    transform: translate(0.5, -0.05)\n\n  20E5..20E6:\n    font: symbola\n    combining: true\n    transform: translate(0.25, -0.1)\n\n  20E7:\n    font: symbola\n    combining: true\n    transform: translate(0.25, 0)\n\n  20E8:\n    font: symbola\n    combining: true\n    transform: translate(0.25, -0.2)\n\n  20E9:\n    font: symbola\n    combining: true\n    transform: translate(0.25, 0)\n\n  20EA..20EB:\n    font: symbola\n    combining: true\n    transform: translate(0.25, -0.1)\n\n  20EC..20EF:\n    font: symbola\n    combining: true\n    transform: translate(0.25, -0.2)\n\n  20F0:\n    font: symbola\n    combining: true\n    transform: translate(0.25, 0)\n\n  20F1..20FF: notdef\n\n# Letterlike Symbols\n\n2100..214F:\n  font: symbola\n  transform: scale(0.9)\n\n  210B:\n    font: symbola\n    transform: scale(0.9) translate(-0.1, 0)\n\n  2117:\n    font: symbola\n    transform: scale(0.9) translate(0, -0.1)\n\n  2121:\n    font: symbola\n    transform: scale(0.7, 0.9)\n\n  2122:\n    font: symbola\n    transform: scale(0.8, 0.9)\n\n  212C:\n    font: symbola\n    transform: scale(0.9) translate(-0.05, 0)\n\n  2130..2131:\n    font: symbola\n    transform: scale(0.9) translate(-0.1, 0)\n\n  2133:\n    font: symbola\n    transform: scale(0.8, 0.9) translate(-0.05, 0)\n\n  213B:\n    font: symbola\n    transform: scale(0.7, 0.9)\n\n# Number Forms\n\n2150..218F:\n  font: symbola\n  transform: scale(0.9)\n\n  215F:\n    font: symbola\n    transform: scale(0.9) translate(-0.2, 0)\n\n  2166:\n    font: symbola\n    transform: scale(0.75, 0.9)\n\n  2167:\n    font: symbola\n    transform: scale(0.6, 0.9)\n\n  216B:\n    font: symbola\n    transform: scale(0.8, 0.9)\n\n  2177:\n    font: symbola\n    transform: scale(0.8, 0.9)\n\n  218C..218F: notdef\n\n# Arrows\n\n2190..21FF:\n  font: symbola\n  transform: scale(0.9) translate(0, -0.05)\n"
  },
  {
    "path": "data/codepoints/2200.yml",
    "content": "# Mathematical Operators\n\n2200..22FF:\n  font: symbola\n  transform: scale(0.9) translate(0, -0.05)\n\n  22A6..22AF:\n    font: symbola\n    transform: scale(0.9)\n\n  22D8..22D9:\n    font: symbola\n    transform: scale(0.75, 0.9) translate(0, -0.05)\n\n# Miscellaneous Technical\n\n2300..23FF:\n  font: symbola\n  transform: scale(0.9)\n\n  23B2..23B3:\n    font: symbola\n    transform: scale(0.8)\n\n  23D4..23D6:\n    font: symbola\n    transform: scale(0.8)\n\n  23FF:\n    font: observer-symbol\n    codepoint: 0x6F\n    transform: scale(0.9)\n\n# Control Pictures\n\n2400..243F:\n  font: quivira\n\n  2427..243F: notdef\n\n# Optical Character Recognition\n\n2440..245F:\n  font: symbola\n\n  244B..245F: notdef\n\n# Enclosed Alphanumerics\n\n2460..24FF:\n  font: symbola\n  transform: scale(0.9) translate(0, -0.05)\n\n# Box Drawing\n\n2500..257F:\n  font: symbola\n  transform: scale(0.9) translate(0, -0.05)\n\n# Block Elements\n\n2580..259F:\n  font: symbola\n  transform: scale(0.9) translate(0, -0.05)\n\n# Geometric Shapes\n\n25A0..25FF:\n  font: symbola\n  transform: scale(0.9) translate(0, -0.05)\n\n# Miscellaneous Symbols\n\n2600..26FF:\n  font: symbola\n  transform: scale(0.9) translate(0, -0.05)\n\n# Dingbats\n\n2700..27BF:\n  font: symbola\n  transform: scale(0.9)\n\n  275B..2793:\n    font: symbola\n    transform: scale(0.9) translate(0, -0.05)\n\n# Miscellaneous Mathematical Symbols-A\n\n27C0..27EF:\n  font: symbola\n  transform: scale(0.9) translate(0, -0.05)\n\n# Supplemental Arrows-A\n\n27F0..27FF:\n  font: symbola\n  transform: scale(0.9) translate(0, -0.05)\n\n  27F4..27FF:\n    font: symbola\n    transform: scale(0.65) translate(0, -0.05)\n\n# Braille Patterns\n\n2800..28FF:\n  font: symbola\n  transform: scale(0.95) translate(0.1, -0.1)\n\n# Supplemental Arrows-B\n\n2900..297F:\n  font: symbola\n  transform: scale(0.9) translate(0, -0.05)\n\n# Miscellaneous Mathematical Symbols-B\n\n2980..29FF:\n  font: symbola\n  transform: scale(0.9) translate(0, -0.05)\n\n# Supplemental Mathematical Operators\n\n2A00..2AFF:\n  font: symbola\n  transform: scale(0.9) translate(0, -0.05)\n\n  2A0C:\n    font: symbola\n    transform: scale(0.7, 0.9) translate(0, -0.05)\n\n  2A4A..2A4B:\n    font: symbola\n    transform: scale(0.8, 0.9) translate(0, -0.05)\n\n  2AF7..2AF8:\n    font: symbola\n    transform: scale(0.8) translate(0, -0.05)\n\n# Miscellaneous Symbols and Arrows\n\n2B00..2BFF:\n  font: symbola\n  transform: scale(0.9) translate(0, -0.05)\n\n  2B32..2B33:\n    font: symbola\n    transform: scale(0.7) translate(0, -0.05)\n\n  2B74..2B75: notdef\n  2B96..2B97: notdef\n\n  2BBA:\n    early: true\n    font: symbola\n    codepoint: 0x29C9\n    transform: scale(0.9) translate(0, -0.05) scale(-1, 1)\n\n  2BBB..2BBC:\n    early: true\n    svg: true\n\n  2BC9:\n    early: true\n    font: nishiki\n    transform: scale(0.85)\n\n  2BD2:\n    font: nishiki\n    transform: scale(0.85)\n\n  # TODO: The glyph shape of U+2BD6 PLUTO FORM FIVE is questionable\n  2BD3..2BEB: # Early maping\n    early: true\n    font: nishiki\n    transform: scale(0.85)\n\n  2BF0..2BFE:\n    early: true\n    font: nishiki\n    transform: scale(0.85)\n\n  2BFF:\n    early: true\n    font: nishiki\n    transform: scale(0.85)\n"
  },
  {
    "path": "data/codepoints/2C00.yml",
    "content": "# Glagolitic\n\n2C00..2C5F:\n  font: quivira\n  transform: scale(0.8)\n\n  2C27:\n    font: quivira\n    transform: scale(0.7, 0.8)\n\n  2C29:\n    font: quivira\n    transform: scale(0.7, 0.8)\n\n  2C2F: notdef\n\n  2C30..2C5F:\n    font: quivira\n    transform: translate(0, -0.1)\n\n    2C5F: notdef\n\n# Latin Extended-C\n\n2C60..2C7F:\n  font: doulos\n  transform: scale(0.8) translate(0, 0)\n\n  2C7C:\n    font: doulos\n    transform: scale(0.8) translate(0, -0.1)\n\n# Coptic\n\n2C80..2CFF:\n  font: analecta\n  transform: scale(0.8)\n\n  2CEF:\n    font: analecta\n    combining: true\n    transform: scale(0.8) translate(0.4, 0.1)\n\n  2CF0..2CF1:\n    font: analecta\n    combining: true\n    transform: scale(0.8) translate(0.25, 0.1)\n\n  2CF4..2CF8: notdef\n\n# Georgian Supplement\n\n2D00..2D2F:\n  font: noto-georgian\n  transform: scale(0.8)\n\n  2D26: notdef\n\n  2D27:\n    font: quivira\n    transform: scale(0.9) translate(0, -0.1)\n\n  2D28..2D2C: notdef\n\n  2D2D:\n    font: quivira\n    transform: scale(0.9) translate(0, -0.1)\n\n  2D2E..2D2F: notdef\n\n# Tifinagh\n\n2D30..2D7F:\n  font: noto-tifinagh\n  transform: scale(0.8)\n\n  2D68..2D6E: notdef\n  2D71..2D7E: notdef\n\n  2D7F:\n    font: noto-tifinagh\n    combining: true\n    box: true\n    transform: scale(0.8) translate(0, -0.1)\n\n# Ethiopic Extended\n\n2D80..2DDF:\n  font: abyssinica\n  transform: scale(0.8)\n\n  2D97..2D9F: notdef\n  2DA7: notdef\n  2DAF: notdef\n  2DB7: notdef\n  2DBF: notdef\n  2DC7: notdef\n  2DCF: notdef\n  2DD7: notdef\n  2DDF: notdef\n\n# Cyrillic Extended-A\n\n2DE0..2DFF:\n  font: free-serif\n  combining: true\n  transform: translate(0.1, -0.05)\n\n  2DF2..2DF3:\n    font: free-serif\n    combining: true\n    transform: translate(0.15, -0.05)\n\n  2DF5:\n    font: free-serif\n    combining: true\n    transform: translate(0.2, -0.05)\n\n  2DFB..2DFF:\n    font: free-serif\n    combining: true\n    transform: translate(0.15, -0.05)\n"
  },
  {
    "path": "data/codepoints/2E00.yml",
    "content": "# Supplemental Punctuation\n\n2E00..2E7F:\n  font: symbola\n  transform: scale(0.9) translate(0, -0.05)\n\n  # TODO: render hyphens\n\n  2E3A:\n    control: 2M\n\n  2E3B:\n    control: 3M\n\n  2E45..2E49:\n    font: nishiki\n    transform: scale(0.8)\n\n  2E4A..2E4F: # Early mapping\n    early: true\n    font: nishiki\n    transform: scale(0.8)\n\n  2E50..2E7F: notdef\n\n# CJK Radicals Supplement\n\n2E80..2EFF:\n  font:\n    - ipaexm\n    - hanamin-a\n  transform: scale(0.9) translate(0, 0.05)\n\n  2E9A: notdef\n  2EF4..2EFF: notdef\n\n# Kangxi Radicals\n\n2F00..2FDF:\n  font: ipaexm\n  transform: scale(0.9) translate(0, 0.05)\n\n  2FD6..2FDF: notdef\n\n# Empty\n\n2FE0..2FEF: notdef\n\n# Ideographic Description Characters\n\n2FF0..2FFF:\n  font: ipaexm\n  transform: scale(0.9) translate(0, 0.05)\n\n  2FFC..2FFF: notdef\n"
  },
  {
    "path": "data/codepoints/3000.yml",
    "content": "# CJK Symbols and Punctuation\n\n3000..303F:\n  font: ipaexm\n  transform: scale(0.9) translate(0, 0.05)\n\n  3000:\n    control: ID\\nSP\n\n  301A..301B:\n    font: noto-cjk-jp\n    transform: scale(0.9) translate(0, 0.05)\n\n  301E:\n    font: ipaexm\n    codepoint: 0x301D\n    transform: scale(-0.9, 0.9)\n\n  3021..3029:\n    font: babel-stone\n    transform: scale(0.9)\n\n  302A:\n    font: hancom\n    combining: true\n    transform: translate(0.4, -0.2)\n\n  302B:\n    font: hancom\n    combining: true\n    transform: translate(0.4, 0.15)\n\n  302C:\n    font: hancom\n    combining: true\n    transform: translate(0.2, 0.15)\n\n  302D:\n    font: hancom\n    combining: true\n    transform: translate(0.2, -0.2)\n\n  302E..302F:\n    font: hancom\n    combining: true\n    transform: translate(0.7, 0)\n\n  3030..3032:\n    font: hanamin-a\n    transform: scale(0.9) translate(0, 0.05)\n\n  3037:\n    font: hancom\n    transform: translate(0, 0.1)\n\n  3038:\n    font: ipaexm\n    codepoint: 0x5341\n    transform: scale(0.9) translate(0, 0.05)\n\n  3039:\n    font: ipaexm\n    codepoint: 0x5efe\n    transform: scale(0.9) translate(0, 0.05)\n\n  303A:\n    font: ipaexm\n    codepoint: 0x5345\n    transform: scale(0.9) translate(0, 0.05)\n\n  3038:\n    font: ipaexm\n    codepoint: 0x5341\n    transform: scale(0.9) translate(0, 0.05)\n\n  3039:\n    font: ipaexm\n    codepoint: 0x5efe\n    transform: scale(0.9) translate(0, 0.05)\n\n  303A:\n    font: ipaexm\n    codepoint: 0x5345\n    transform: scale(0.9) translate(0, 0.05)\n\n  303E:\n    font: hancom\n    box: true\n    transform: translate(0, 0.05)\n\n  303F:\n    font: hancom\n\n# Hiragana\n\n3040..309F:\n  font: ipaexm\n  transform: scale(0.9) translate(0, 0.05)\n\n  3040: notdef\n  3097..3098: notdef\n\n  3099..309A:\n    font: ipaexm\n    combining: true\n    transform: scale(0.9) translate(-0.1, 0.15)\n\n# Katakana\n\n30A0..30FF:\n  font: ipaexm\n  transform: scale(0.9) translate(0, 0.05)\n\n# Bopomofo\n\n3100..312F:\n  font: babel-stone\n  transform: scale(0.9) translate(0, 0.05)\n\n  3100..3104: notdef\n\n  312E:\n    svg: true\n\n  312F: # Early mapping\n    early: true\n    svg: true\n\n# Hangul Compatibility Jamo\n\n3130..318F:\n  font: unbatang\n  transform: translate(0, -0.05)\n\n  3130: notdef\n\n  3164:\n    control: HF\n\n  318F: notdef\n\n# Kanbun\n\n3190..319F:\n  font: babel-stone\n  transform: scale(0.9) translate(-0.25, 0)\n\n# Bopomofo Extended\n\n31A0..31BF:\n  font: babel-stone\n  transform: scale(0.9) translate(0, 0.05)\n\n  31B4..31B7:\n    font: babel-stone\n    transform: scale(0.9) translate(-0.25, 0.05)\n\n  31BB..31BF: notdef\n\n# CJK Strokes\n\n31C0..31EF:\n  font: hanamin-a\n  transform: translate(0, 0.05)\n\n  31CF:\n    font: ipaexm\n    codepoint: 0x4e40\n    transform: scale(0.9) translate(0, 0.05)\n\n  31D0:\n    font: ipaexm\n    codepoint: 0x4e00\n    transform: scale(0.9) translate(0, 0.05)\n\n  31D1:\n    font: ipaexm\n    codepoint: 0x4e28\n    transform: scale(0.9) translate(0, 0.05)\n\n  31D3:\n    font: ipaexm\n    codepoint: 0x4e3f\n    transform: scale(0.9) translate(0, 0.05)\n\n  31D4:\n    font: ipaexm\n    codepoint: 0x4e36\n    transform: scale(0.9) translate(0, 0.05)\n\n  31D5:\n    font: ipaexm\n    codepoint: 0x4e3f\n    transform: scale(0.9) translate(0, 0.05)\n\n  #31D6:\n  #  font: ipaexm\n  #  codepoint: 0x4e5b\n  #  transform: scale(0.9) translate(0, 0.05)\n\n  #31D9:\n  #  font: ipamjm\n  #  codepoint: 0x2010c\n  #  transform: scale(0.9) translate(0, 0.05)\n\n  31DA:\n    font: ipaexm\n    codepoint: 0x4e85\n    transform: scale(0.9) translate(0, 0.05)\n\n  #31DC:\n  #  font: ipamjm\n  #  codepoint: 0x200cb\n  #  transform: scale(0.9) translate(0, 0.05)\n\n  31DD:\n    font: ipaexm\n    codepoint: 0x4e40\n    transform: scale(0.9) translate(0, 0.05)\n\n  #31DE:\n  #  font: ipamjm\n  #  codepoint: 0x200d1\n  #  transform: scale(0.9) translate(0, 0.05)\n\n  31DF:\n    font: ipamjm\n    codepoint: 0x4e5a\n    transform: scale(0.9) translate(0, 0.05)\n\n  31E0:\n    font: ipaexm\n    codepoint: 0x4e59\n    transform: scale(0.9) translate(0, 0.05)\n\n  #31E1:\n  #  font: ipamjm\n  #  codepoint: 0x2010e\n  #  transform: scale(0.9) translate(0, 0.05)\n\n  31E3:\n    font: babel-stone\n    transform: scale(0.9) translate(0, 0.05)\n\n  31E4..31EF: notdef\n\n# Katakana Phonetic Extensions\n\n31F0..31FF:\n  font: ipaexm\n  transform: scale(0.9) translate(0, 0.05)\n"
  },
  {
    "path": "data/codepoints/3200.yml",
    "content": "# Enclosed CJK Letters and Months\n\n3200..32FF:\n  font: ipaexm\n  transform: scale(0.9) translate(0, 0.05)\n\n  3200..321E:\n    font: hancom\n    transform: scale(0.9) translate(0, 0.05)\n\n  321F: notdef\n\n  3244..324F:\n    font: hanamin-a\n    transform: scale(0.9) translate(0, 0.05)\n\n  3250:\n    font: hancom\n    transform: scale(0.9) translate(0, 0.05)\n\n  3260..327F:\n    font: hancom\n    transform: scale(0.9) translate(0, 0.05)\n\n  32C0..32CF:\n    font: hancom\n    transform: scale(0.9) translate(0, 0.05)\n\n  32FF: notdef\n\n# CJK Compatibility\n\n3300..33FF:\n  font: ipaexm\n  transform: scale(0.9) translate(0, 0.05)\n\n  332C:\n    svg: true\n    transform: scale(0.85)\n\n  3358..337A:\n    font: hancom\n    transform: scale(0.9) translate(0, 0.05)\n\n  3380..33FF:\n    font:\n      - ipaexm\n      - hancom\n    transform: scale(0.9) translate(0, 0.05)\n"
  },
  {
    "path": "data/codepoints/3400.yml",
    "content": "# CJK Unified Ideographs Extension A\n\n3400..4DBF:\n  font:\n    - noto-serif-jp\n    - ipamjm\n    - ipaexm\n    - hanamin-a\n  transform: scale(0.9) translate(0, 0.05)\n\n  4DB6..4DBF: notdef\n\n# Yijing Hexagram Symbols\n\n4DC0..4DFF:\n  font: nishiki\n  transform: scale(0.9)\n\n# CJK Unified Ideographs\n\n4E00..9FFF:\n  font:\n    - noto-serif-jp\n    - ipamjm\n    - ipaexm\n    - hanamin-a\n  transform: scale(0.9) translate(0, 0.05)\n\n  9FD6..9FFF: notdef\n"
  },
  {
    "path": "data/codepoints/A000.yml",
    "content": "# Yi Syllables\n\nA000..A48F:\n  font: noto-yi\n  transform: scale(0.95) translate(0, 0.05)\n\n  A48D..A48F: notdef\n\n# Yi Radicals\n\nA490..A4CF:\n  font: noto-yi\n  transform: scale(0.95) translate(0, 0.05)\n\n  A4C7..A4CF: notdef\n\n# Lisu\n\nA4D0..A4FF:\n  font: lisu"
  },
  {
    "path": "data/codepoints/A500.yml",
    "content": "# Vai\n\nA500..A63F:\n  font: wakor\n  transform: scale(0.95)\n\n  A62C..A63F: notdef\n\n# Cyrillic Extended-B\n\nA640..A69F:\n  font: quivira\n  transform: scale(0.75)\n\n  A66F:\n    font: quivira\n    combining: true\n    transform: scale(0.75) translate(0, -0.1)\n\n  A670:\n    font: quivira\n    combining: true\n    transform: scale(0.75) translate(0.4, 0)\n\n  A671:\n    font: quivira\n    combining: true\n    transform: scale(0.75) translate(0.25, 0)\n\n  A672:\n    font: quivira\n    combining: true\n    transform: scale(0.75) translate(0.42, 0)\n\n  A673:\n    font: quivira\n    combining: true\n    transform: scale(0.75) translate(0, -0.25)\n\n  A674..A67D:\n    font: quivira\n    combining: true\n    transform: scale(0.75) translate(0, -0.05)\n\n  A69E:\n    font: free-serif-bold\n    combining: true\n    codepoint: 0x0444\n    transform: translate(0, -0.35) scale(0.35)\n\n  A69F:\n    font: quivira\n    combining: true\n    transform: scale(0.75) translate(0, -0.1)\n\n# Bamum\n\nA6A0..A6FF:\n  font: noto-bamum\n  transform: scale(0.8)\n\n  A6F0..A6F1:\n    font: noto-bamum\n    combining: true\n    transform: scale(0.8) translate(-0.35, 0.2)\n\n  A6F8..A6FF: notdef\n\n# Modifier Tone Letters\n\nA700..A71F:\n  font: charis\n  transform: scale(0.9)\n\n  A700..A707:\n    font: charis\n    transform: scale(0.9) translate(0, -0.05)\n\n  A71E..A71F:\n    font: charis\n    transform: scale(0.9) translate(0, -0.15)\n\n# Latin Extended-D\n\nA720..A7FF:\n  font: doulos\n  transform: scale(0.8)\n\n  A78F:\n    font: doulos\n    codepoint: 0x00B7\n\n  A79A..A79F:\n    font: quivira\n    transform: scale(0.8)\n\n  # FIXME\n  A7AE:\n    font: doulos\n    codepoint: 0x0054\n    transform: scale(0.8)\n\n  A7AF: notdef\n\n  A7B3:\n    font: free-serif\n    codepoint: 0x03C7\n    transform: scale(0.8)\n\n  A7B4:\n    font: free-serif\n    codepoint: 0x0392\n    transform: scale(0.8)\n\n  A7B5:\n    font: free-serif\n    codepoint: 0x03B2\n    transform: scale(0.8)\n\n  A7B6:\n    font: free-serif\n    codepoint: 0x0460\n    transform: scale(0.8)\n\n  A7B7:\n    font: free-serif\n    codepoint: 0x03C9\n    transform: scale(0.8)\n\n  A7B8..A7F6: notdef\n"
  },
  {
    "path": "data/codepoints/A800.yml",
    "content": "# Syloti Nagri\n\nA800..A82F:\n  font: noto-syloti-nagri\n  transform: scale(0.8)\n\n  A802:\n    font: noto-syloti-nagri\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.1)\n\n  A806:\n    font: noto-syloti-nagri\n    combining: true\n    transform: scale(0.8) translate(0.2, 0.1)\n\n  A80B:\n    font: noto-syloti-nagri\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.1)\n\n  A823..A824:\n    font: noto-syloti-nagri\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.1)\n\n  A825:\n    font: noto-syloti-nagri\n    combining: true\n    transform: scale(0.8) translate(0.2, -0.15)\n\n  A826:\n    font: noto-syloti-nagri\n    combining: true\n    transform: scale(0.8) translate(0.2, 0.15)\n\n  A827:\n    font: noto-syloti-nagri\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.1)\n\n  A82C..A82F: notdef\n\n# Common Indic Number Forms\n\nA830..A83F:\n  font: annapurna\n  transform: scale(0.8)\n\n  A839:\n    font: annapurna\n    transform: scale(0.8) translate(0, -0.1)\n\n  A83A..A83F: notdef\n\n# Phags-pa\n\nA840..A87F:\n  font: babel-phags-pa\n  transform: scale(0.8)\n\n  A878..A87F: notdef\n\n# Saurashtra\n\nA880..A8DF:\n  font: pagul\n  transform: scale(0.9)\n\n  A880..A881:\n    font: pagul\n    combining: true\n    transform: scale(0.9) translate(0.3, 0)\n\n  A8B4:\n    font: pagul\n    combining: true\n    transform: scale(0.9) translate(0.35, 0)\n\n  A8B5:\n    font: pagul\n    combining: true\n    transform: scale(0.9) translate(0.3, 0)\n\n  A8B6:\n    font: pagul\n    combining: true\n    transform: scale(0.9) translate(0.3, 0.1)\n\n  A8B7:\n    font: pagul\n    combining: true\n    transform: scale(0.9) translate(0.3, 0)\n\n  A8B8..A8BC:\n    font: pagul\n    combining: true\n    transform: scale(0.7, 0.9) translate(0.45, 0)\n\n  A8BD:\n    font: pagul\n    combining: true\n    transform: scale(0.35, 0.9) translate(0.9, 0)\n\n  A8BE..A8C1:\n    font: pagul\n    combining: true\n    transform: scale(0.7, 0.9) translate(0.45, 0)\n\n  A8C2..A8C3:\n    font: pagul\n    combining: true\n    transform: scale(0.5, 0.9) translate(0.6, 0)\n\n  A8C4:\n    font: pagul\n    combining: true\n    transform: scale(0.9) translate(0.3, -0.15)\n\n  A8C5:\n    font: pagul\n    combining: true\n    transform: scale(0.9) translate(0.3, 0.2)\n\n  A8C6..A8CD: notdef\n  A8DA..A8DF: notdef\n\n# Devanagari Extended\n\nA8E0..A8FF:\n  font: annapurna\n  transform: scale(0.8)\n\n  A8E0..A8F1:\n    font: annapurna\n    combining: true\n    transform: scale(0.8) translate(0.2, 0.4)\n\n  # FIXME\n  A8FC..A8FD: notdef\n\n  A8FE..A8FF: notdef\n\n# Kayah Li\n\nA900..A92F:\n  font: noto-kayah-li\n  transform: scale(0.8)\n\n  A926..A92A:\n    font: noto-kayah-li\n    combining: true\n    transform: scale(0.8) translate(0.38, 0)\n\n  A92B..A92D:\n    font: noto-kayah-li\n    combining: true\n    transform: scale(0.8) translate(0.38, -0.1)\n\n# Rejang\n\nA930..A95F:\n  font: noto-rejang\n  transform: scale(0.8)\n\n  A947..A949:\n    font: noto-rejang\n    combining: true\n    transform: scale(0.8) translate(-0.3, 0)\n\n  A94A:\n    font: noto-rejang\n    combining: true\n    transform: scale(0.8) translate(-0.2, 0.2)\n\n  A94B:\n    font: noto-rejang\n    combining: true\n    transform: scale(0.8) translate(-0.35, 0)\n\n  A94C:\n    font: noto-rejang\n    combining: true\n    transform: scale(0.8) translate(-0.25, -0.15)\n\n  A94D:\n    font: noto-rejang\n    combining: true\n    transform: scale(0.8) translate(-0.2, -0.1)\n\n  A94E:\n    font: noto-rejang\n    combining: true\n    transform: scale(0.8) translate(0, -0.1)\n\n  A94F..A951:\n    font: noto-rejang\n    combining: true\n    transform: scale(0.8) translate(-0.2, 0.2)\n\n  A952:\n    font: noto-rejang\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  A953:\n    font: noto-rejang\n    combining: true\n    transform: scale(0.8) translate(-0.2, 0.2)\n\n  A954..A95E: notdef\n\n# Hangul Jamo Extended-A\n\nA960..A97F:\n  font: unbatang\n  transform: translate(0.14, -0.03)\n\n  A97D..A97F: notdef\n\n# Javanese\n\nA980..A9DF:\n  font: noto-javanese\n  transform: scale(0.6) translate(0, -0.2)\n\n  A980:\n    font: noto-javanese\n    combining: true\n    transform: scale(0.6) translate(-0.3, 0)\n\n  A981:\n    font: noto-javanese\n    combining: true\n    transform: scale(0.6) translate(-0.1, -0.1)\n\n  A982:\n    font: noto-javanese\n    combining: true\n    transform: scale(0.6) translate(-0.2, -0.1)\n\n  A983:\n    font: noto-javanese\n    combining: true\n    transform: scale(0.6) translate(0.4, -0.2)\n\n  A9B3:\n    font: noto-javanese\n    combining: true\n    transform: scale(0.6) translate(-0.2, -0.1)\n\n  A9B4..A9B5:\n    font: noto-javanese\n    combining: true\n    transform: scale(0.6) translate(0.4, -0.1)\n\n  A9B6..A9B7:\n    font: noto-javanese\n    combining: true\n    transform: scale(0.6) translate(-0.2, 0)\n\n  A9B8..A9B9:\n    font: noto-javanese\n    combining: true\n    transform: scale(0.6) translate(0.6, -0.2)\n\n  A9BA..A9BB:\n    font: noto-javanese\n    combining: true\n    transform: scale(0.5, 0.6) translate(-0.6, -0.2)\n\n  A9BC:\n    font: noto-javanese\n    combining: true\n    transform: scale(0.6) translate(-0.2, -0.1)\n\n  A9BD..A9BF:\n    font: noto-javanese\n    combining: true\n    transform: scale(0.6) translate(0.4, -0.1)\n\n  A9C0:\n    font: noto-javanese\n    combining: true\n    transform: scale(0.6) translate(0.2, -0.1)\n\n  A9C1..A9C2:\n    font: noto-javanese\n    transform: scale(0.5) translate(0, -0.4)\n\n  A9C3..A9C5:\n    font: noto-javanese\n    transform: scale(0.4, 0.5) translate(0, -0.2)\n\n  A9CD:\n    font: noto-javanese\n    transform: scale(0.6) translate(0, -0.4)\n\n  A9CE: notdef\n  A9DA..A9DD: notdef\n\n# Myanmar Extended-B\n\nA9E0..A9FF:\n  font: padauk\n  transform: scale(0.65) translate(0, -0.1)\n\n  A9E5:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.15, -0.1)\n\n  A9FF: notdef\n"
  },
  {
    "path": "data/codepoints/AA00.yml",
    "content": "# Cham\n\nAA00..AA5F:\n  font: noto-cham\n  transform: scale(0.8)\n\n  AA0F:\n    font: noto-cham\n    transform: scale(0.8) translate(0.1, 0)\n\n  AA29..AA2C:\n    font: noto-cham\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.1)\n\n  AA2D:\n    font: noto-cham\n    combining: true\n    transform: scale(0.8) translate(0.2, 0.1)\n\n  AA2E:\n    font: noto-cham\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.1)\n\n  AA2F..AA30:\n    font: noto-cham\n    combining: true\n    transform: scale(0.8) translate(-0.4, 0)\n\n  AA31:\n    font: noto-cham\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.1)\n\n  AA32:\n    font: noto-cham\n    combining: true\n    transform: scale(0.8) translate(0.1, 0.1)\n\n  AA33:\n    font: noto-cham\n    combining: true\n    transform: scale(0.8) translate(0.5, 0)\n\n  AA34:\n    font: noto-cham\n    combining: true\n    transform: scale(0.8) translate(-0.3, 0)\n\n  AA35:\n    font: noto-cham\n    combining: true\n    transform: scale(0.8) translate(0.1, -0.1)\n\n  AA36:\n    font: noto-cham\n    combining: true\n    transform: scale(0.8) translate(0.2, -0.1)\n\n  AA43:\n    font: noto-cham\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.1)\n\n  AA4C:\n    font: noto-cham\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  AA4D:\n    font: noto-cham\n    combining: true\n    transform: scale(0.8) translate(0.4, 0)\n\n  AA37..AA3F: notdef\n  AA4E..AA4F: notdef\n  AA5A..AA5B: notdef\n\n# Myanmar Extended-B\n\nAA60..AA7F:\n  font: padauk\n  transform: scale(0.65) translate(0, -0.1)\n\n  AA7B:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.3, -0.1)\n\n  AA7C:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.25, -0.1)\n\n  AA7D:\n    font: padauk\n    combining: true\n    transform: scale(0.65) translate(0.5, -0.05)\n\n# Tai Viet\n\nAA80..AADF:\n  font: tai-heritage\n  transform: scale(0.5) translate(-0.1, 0)\n\n  AA8B:\n    font: tai-heritage\n    transform: scale(0.5) translate(-0.1, -0.2)\n\n  AAAF:\n    font: tai-heritage\n    transform: scale(0.5) translate(-0.1, -0.2)\n\n  AAB0:\n    font: tai-heritage\n    combining: true\n    transform: scale(0.5) translate(0.1, 0.1)\n\n  AAB2..AAB3:\n    font: tai-heritage\n    combining: true\n    transform: scale(0.5) translate(0.1, 0.1)\n\n  AAB4:\n    font: tai-heritage\n    combining: true\n    transform: scale(0.5) translate(0.3, 0)\n\n  AAB7..AAB8:\n    font: tai-heritage\n    combining: true\n    transform: scale(0.5) translate(0.1, 0.1)\n\n  AABE..AABF:\n    font: tai-heritage\n    combining: true\n    transform: scale(0.5) translate(0.1, 0.1)\n\n  AAC1:\n    font: tai-heritage\n    combining: true\n    transform: scale(0.5) translate(0.1, 0.3)\n\n  AAC3..AADA: notdef\n\n# Meetei Mayek Extensions\n\nAAE0..AAFF:\n  font: noto-meetei-mayek\n  transform: scale(0.8)\n\n  AAEB:\n    font: noto-meetei-mayek\n    combining: true\n    transform: scale(0.8) translate(-0.35, 0)\n\n  AAEC:\n    font: noto-meetei-mayek\n    combining: true\n    transform: scale(0.8) translate(0.25, -0.15)\n\n  AAED:\n    font: noto-meetei-mayek\n    combining: true\n    transform: scale(0.8) translate(0.35, 0.15)\n\n  AAEE:\n    font: noto-meetei-mayek\n    combining: true\n    transform: scale(0.8) translate(-0.4, 0)\n\n  AAEF:\n    font: noto-meetei-mayek\n    combining: true\n    transform: scale(0.8) translate(0.4, 0)\n\n  AAF5:\n    font: noto-meetei-mayek\n    combining: true\n    transform: scale(0.8) translate(0.3, -0.2)\n\n  AAF6:\n    font: noto-meetei-mayek\n    combining: true\n    box: true\n    transform: scale(0.8) translate(0.5, -0.2)\n\n  AAF7..AAFF: notdef\n\n# Ethiopic Extended-A\n\nAB00..AB2F:\n  font: abyssinica\n  transform: scale(0.8)\n\n  AB00: notdef\n  AB07..AB08: notdef\n  AB0F..AB10: notdef\n  AB17..AB1F: notdef\n  AB27: notdef\n  AB2F: notdef\n\n# Latin Extended-E\n\nAB30..AB6F:\n  font: quivira\n  transform: scale(0.8)\n\n  # FIXME\n  AB60..AB63: notdef\n\n  AB66..AB6F: notdef\n\n# Cherokee Supplement\n\nAB70..ABBF:\n  font: noto-cherokee\n  transform: scale(0.8)\n\n# Meetei Mayek\n\nABC0..ABFF:\n  font: noto-meetei-mayek\n  transform: scale(0.8)\n\n  ABE3..ABE4:\n    font: noto-meetei-mayek\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  ABE5:\n    font: noto-meetei-mayek\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.2)\n\n  ABE6:\n    font: noto-meetei-mayek\n    combining: true\n    transform: scale(0.8) translate(0.35, 0.2)\n\n  ABE7:\n    font: noto-meetei-mayek\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  ABE8:\n    font: noto-meetei-mayek\n    combining: true\n    transform: scale(0.8) translate(0.25, -0.2)\n\n  ABE9:\n    font: noto-meetei-mayek\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.2)\n\n  ABEA:\n    font: noto-meetei-mayek\n    combining: true\n    transform: scale(0.8) translate(0.3, 0.2)\n\n  ABEC:\n    font: noto-meetei-mayek\n    combining: true\n    transform: scale(0.8) translate(0.3, 0)\n\n  ABED:\n    font: noto-meetei-mayek\n    combining: true\n    transform: scale(0.7) translate(-0.05, -0.1)\n\n  ABEE..ABEF: notdef\n  ABFA..ABFF: notdef\n"
  },
  {
    "path": "data/codepoints/AC00.yml",
    "content": "# Hangul Syllables\n\nAC00..D7AF:\n  font: noto-serif-jp\n  transform: scale(0.9)\n\n  D7A4..D7AF: notdef"
  },
  {
    "path": "data/layouts/bmp-1.ai",
    "content": "version https://git-lfs.github.com/spec/v1\noid sha256:e63380405b19b32ec296c6eefe51734223ed96d9d8583f3396b0c8d371be23ea\nsize 4030616\n"
  },
  {
    "path": "data/layouts/bmp-2.ai",
    "content": "version https://git-lfs.github.com/spec/v1\noid sha256:fc5b77deafa0bc6f6f8fcf51688adf24e171ae116be4951ef98e319288d46140\nsize 4092613\n"
  },
  {
    "path": "data/layouts/bmp-3.ai",
    "content": "version https://git-lfs.github.com/spec/v1\noid sha256:7f6f71d4b733461041bf65faaf851b43a33d9ed55f44c97fb53fb861e7717d4a\nsize 3970740\n"
  },
  {
    "path": "index.ls",
    "content": "require! {\n  'mz/fs'\n  './lib/util': {log, now}\n  './lib/download-fonts'\n  './lib/load-codepoints'\n  './lib/generate-svg'\n  './lib/convert-to-png'\n  './lib/convert-to-pdf'\n  './lib/compose-poster'\n  './configs'\n  'bluebird': Promise\n}\n\nnow ->\n  log 'Downloading fonts...'\n  download-fonts!\n\n.then ->\n  log 'Loading codepionts...'\n  load-codepoints!\n\n.then (codepoints) ->\n\n  Promise.map-series configs, (config) ->\n    chart-svg = \"#{config.name}-chart.svg\"\n    poster-svg = \"#{config.name}-poster.svg\"\n    poster-png = \"#{config.name}-poster.png\"\n    poster-pdf = \"#{config.name}-poster.pdf\"\n\n    now ->\n      log \"Generating #{config.name} SVG...\"\n      generate-svg codepoints, config\n\n    .then (svg) ->\n      Promise.all [\n        * now ->\n            log \"Writing #chart-svg...\"\n            fs.write-file chart-svg, svg\n        * now ->\n            log \"Composing #poster-svg...\"\n            compose-poster svg, config\n      ]\n\n    .then ([_, poster]) ->\n      Promise.all [\n        * now ->\n            log \"Writing #poster-svg...\"\n            fs.write-file poster-svg, poster\n        * now ->\n            log \"Generating #poster-png...\"\n            convert-to-png poster\n          .then (png) ->\n            log \"Writing #poster-png...\"\n            fs.write-file poster-png, png\n      ]\n\n    .then ->\n      log \"Generating #poster-pdf...\"\n      convert-to-pdf poster-svg, poster-pdf\n\n.then ->\n  log 'Done.'\n\n.catch (error) ->\n  console.error error\n  process.exit 1\n"
  },
  {
    "path": "lib/codepoint-builder.ls",
    "content": "require! {\n  './util': {merge-maps}\n}\n\nflatten = (object, {start, end}) ->\n  # Define model\n  model =\n    | object is \\notdef\n      type: \\notdef\n    | object is \\tofu\n      type: \\tofu\n    | object.has-own-property \\font =>\n      type: \\font\n      font-name: if typeof! object.font is \\Array then object.font else [object.font]\n      codepoint: object.codepoint\n    | object.has-own-property \\control =>\n      type: \\control\n      short-name: object.control\n    | object.has-own-property \\svg =>\n      type: \\svg\n    | otherwise => throw new Error 'Type not specified'\n\n  if model.type is \\control and typeof! model.short-name is \\String\n    model.short-name .= split '\\n' .filter (.length > 0)\n\n  if model.type in <[font svg]>\n    for transform in <[transform scale skew translate rotate combining box early]>\n      if object[transform]?\n        model[transform] = object[transform]\n\n  map = new Map!\n\n  # Calculate overrides first\n  for key, value of object\n    codepoints = key.split '..'\n\n    continue unless codepoints.every (.match /[\\da-f]{4,5}/i)\n\n    codepoints .= map (parse-int _, 16)\n\n    [submap-start, submap-end] =\n      if codepoints.length is 1\n        codepoints[0 0]\n      else\n        codepoints[0 1]\n\n    submap = flatten value, do\n      start: submap-start\n      end: submap-end\n\n    for codepoint from submap-start to submap-end\n      map.set codepoint, submap.get codepoint\n\n  # Interpolate by models\n  for codepoint from start to end\n    unless map.has codepoint\n      clone = Object.assign {}, model\n\n      if model.type is \\font\n        if typeof! model.codepoint is \\Array\n          clone.codepoint = clone.codepoint[codepoint - start]\n\n      if model.type is \\control\n        if typeof! model.short-name is \\Array\n          clone.short-name = clone.short-name[codepoint - start]\n\n      map.set codepoint, clone\n\n  map\n\nmodule.exports = (object) ->\n  maps = for key, value of object\n    codepoints = key.split '..' .map (parse-int _, 16)\n\n    [start, end] =\n      if codepoints.length is 1\n        codepoints[0 0]\n      else\n        codepoints[0 1]\n\n    flatten value, {start, end}\n\n  merge-maps maps\n"
  },
  {
    "path": "lib/compose-poster.ls",
    "content": "require! {\n  'mz/fs'\n  './util': {log}\n  jsdom\n  progress: Progress\n  xmlserializer\n}\n\nmodule.exports = (chart-svg, config) ->\n  poster-svg <- fs.read-file \"data/layouts/#{config.layout}.svg\" .then\n\n  resolve, reject <- new Promise _\n\n  error, window <- jsdom.env '' [require.resolve 'snapsvg']\n  return reject error if error\n\n  {Snap, document} = window\n\n  paper = Snap 7016 9933 # 594x841mm * 300dpi\n\n  root-group = paper.group!\n  root-group.transform \"scale(#{300 / 72})\"\n\n  chart = paper.group!append-to root-group\n  poster = paper.group!append-to root-group\n\n  chart-element = Snap.parse chart-svg\n  for child in Array::slice.call chart-element.node.children, 0\n    chart.append child\n\n  poster-element = Snap.parse poster-svg\n  for child in Array::slice.call poster-element.node.children, 0\n    poster.append child\n\n  chart.transform \"translate(#{config.chart.x}, #{config.chart.y}) scale(#{1627.09 / 3840})\"\n\n  svg = xmlserializer.serialize-to-string paper.node\n  window.close!\n\n  resolve svg\n"
  },
  {
    "path": "lib/convert-to-pdf.ls",
    "content": "require! {\n  nightmare: Nightmare\n  'file-url'\n}\n\nmodule.exports = (svg-path, pdf-path) ->\n  nightmare = Nightmare!\n\n  nightmare\n  .goto file-url svg-path\n  .evaluate ->\n    svg = document.query-selector 'svg'\n    svg.set-attribute 'viewBox', '0 0 7016 9933'\n    svg.set-attribute 'width', '594mm'\n    svg.set-attribute 'height', '841mm'\n  .pdf pdf-path, do\n    margins-type: 1\n    page-size:\n      width: 594000\n      height: 841000\n      print-background: false\n      landscape: false\n  .end!\n"
  },
  {
    "path": "lib/convert-to-png.ls",
    "content": "require! {\n  svg2png\n}\n\nmodule.exports = (svg) ->\n  svg-data = Buffer.from svg\n  svg2png svg-data\n"
  },
  {
    "path": "lib/download-fonts.ls",
    "content": "require! {\n  path\n  download\n  './util': {log, now}\n  'mz/fs'\n  'mkdirp-then': mkdirp\n  bluebird: Promise\n}\n\nfonts =\n  'Symbola': 'https://www.wfonts.com/download/data/2016/04/23/symbola/symbola.zip'\n  'Noto': 'https://noto-website.storage.googleapis.com/pkgs/Noto-unhinted.zip'\n  'IPAexm': 'https://moji.or.jp/wp-content/ipafont/IPAexfont/ipaexm00401.zip'\n  'IPAmjm': 'https://dforest.watch.impress.co.jp/library/i/ipamjfont/10750/ipamjm00601.zip'\n  'hanazono': 'http://jaist.dl.osdn.jp/hanazono-font/64385/hanazono-20160201.zip'\n  'Doulos': 'https://software.sil.org/downloads/r/doulos/DoulosSIL-5.000.zip'\n  'FreeFont': 'https://ftp.gnu.org/gnu/freefont/freefont-ttf-20120503.zip'\n  'Hancom': 'http://cdn.hancom.com/pds/docs/HancomFont.zip'\n  'Scheherazade': 'http://software.sil.org/downloads/r/scheherazade/Scheherazade-2.100.zip'\n  'Annapurna': 'http://software.sil.org/downloads/r/annapurna/AnnapurnaSIL-1.202.zip'\n  'Manjari': 'http://www.malayalamtype.com/fonts/Manjari-Regular.ttf'\n  'tlwg': 'https://linux.thai.net/pub/thailinux/software/fonts-tlwg/fonts/ttf-tlwg-0.5.0.tar.gz'\n  'Jomolhari': 'https://collab.its.virginia.edu/access/content/group/26a34146-33a6-48ce-001e-f16ce7908a6a/Tibetan%20fonts/Tibetan%20Unicode%20Fonts/Jomolhari-alpha003.zip'\n  'Padauk': 'http://software.sil.org/downloads/r/padauk/padauk-3.002.zip'\n  'Quivira': 'http://www.quivira-font.com/files/Quivira.otf'\n  'UnFonts': 'http://ftp.jaist.ac.jp/pub/Linux/Momonga/development/source/SOURCES/2607-un-fonts-core-1.0.2-080608.tar.gz'\n  'Abyssinica': 'http://software.sil.org/downloads/r/abyssinica/AbyssinicaSIL-1.500.zip'\n  'NotoSansCherokee': 'https://github.com/googlefonts/noto-fonts-alpha/raw/main/from-glyphsapp/unhinted/ttf/sans/NotoSansCherokee-Regular.ttf'\n  'MongolianScript': 'https://web.archive.org/web/20160707014328if_/http://font.bolorsoft.com/download/fonts.zip'\n  'Namdhinggo': 'http://scripts.sil.org/cms/scripts/render_download.php?format=file&media_id=NamdhinggoSIL1.004&filename=NamdhinggoSIL1.004.zip'\n  'DaiBanna': 'http://scripts.sil.org/cms/scripts/render_download.php?format=file&media_id=DaiBanna-2.200.zip&filename=DaiBanna-2.200.zip'\n  'Nishiki': 'https://umihotaru.work/nishiki-teki.zip'\n  'Mingzat': 'http://scripts.sil.org/cms/scripts/render_download.php?format=file&media_id=Mingzat-0.100&filename=Mingzat-0.100.zip'\n  'PonomarUnicode': 'http://www.ponomar.net/files/PonomarUnicode.zip'\n  'junicode': 'https://sourceforge.net/projects/junicode/files/junicode/junicode-0-7-8/junicode-0-7-8.zip'\n  'BTC': 'https://github.com/RWOverdijk/BitKey/raw/master/client/src/fonts/BTC.ttf'\n  'ObserverSymbol': 'http://hypertexthero.com/static/img/observer-symbol/observer-symbol-latest.zip'\n  'Analecta': 'https://www.wfonts.com/download/data/2016/06/09/analecta/analecta.zip'\n  'BabelStoneHan': 'http://www.babelstone.co.uk/Fonts/Download/BabelStoneHan.zip'\n  'OpenSans': 'http://www.opensans.com/download/open-sans.zip'\n  'DejaVu': 'https://sourceforge.net/projects/dejavu/files/dejavu/2.37/dejavu-fonts-ttf-2.37.zip'\n  'JGLao': 'https://github.com/hakatashi/font-archive/raw/master/jglao.zip'\n  'NotoSerifCJKjp': 'https://noto-website.storage.googleapis.com/pkgs/NotoSerifCJKjp-hinted.zip'\n  'LisuUnicode': 'https://github.com/phjamr/LisuUnicode/raw/master/LisuUnicode-Regular.ttf'\n  'Wakor': 'http://www.evertype.com/fonts/vai/wakorfont.zip'\n  'Charis': 'https://software.sil.org/downloads/r/charis/CharisSIL-5.000.zip'\n  'BabelStonePhagsPa': 'http://www.babelstone.co.uk/Fonts/Download/BabelStonePhagspaBook_v2.ttf'\n  'Pagul': 'https://sourceforge.net/projects/pagul/files/Pagul_v1.0.zip'\n  'TaiHeritage': 'https://software.sil.org/downloads/r/taiheritage/TaiHeritagePro-2.600.zip'\n\nmodule.exports = ->\n  Promise.each do\n    * Object.keys fonts\n    * (directory) ->\n        url = fonts[directory]\n        path-name = path.join \\fonts directory\n\n        now ->\n          fs.readdir path-name\n        .then (files) ->\n          return Promise.reject! if files.length is 0\n          log \"#directory is already downloaded.\"\n        .catch ->\n          log \"#path-name not exists. Downloading...\"\n\n          mkdirp path-name\n          .then ->\n            headers =\n              if directory is 'Hancom'\n                {referer: 'http://www.hancom.com/'}\n              else if directory in <[Namdhinggo DaiBanna Mingzat]>\n                {accept: '*/*'}\n              else\n                {}\n\n            extract =\n              if directory in <[Quivira NotoSansCherokee BTC Manjari LisuUnicode BabelStonePhagsPa]>\n                false\n              else\n                true\n\n            download url, path-name, {extract, headers}\n"
  },
  {
    "path": "lib/generate-svg.ls",
    "content": "require! {\n  'mz/fs'\n  './util': {log, to-hex}\n  jsdom\n  path\n  hilbert: {Hilbert2d}\n  progress: Progress\n  xmlserializer\n  'opentype.js'\n  'camel-case'\n  util\n}\n\nfont-counts = new Map!\n\nfont-data =\n  doulos:\n    name: 'Doulos SIL 5.000'\n    URL: 'http://software.sil.org/doulos/'\n    author: 'SIL International'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://scripts.sil.org/ofl'\n    path: 'Doulos/DoulosSIL-5.000/DoulosSIL-R.ttf'\n  symbola:\n    name: 'Symbola'\n    URL: 'http://users.teilar.gr/~g1951d/'\n    author: 'George Douros'\n    license: 'Permissive License'\n    licenseURL: 'http://users.teilar.gr/~g1951d/'\n    path: 'Symbola/Symbola.ttf'\n  ipamjm:\n    name: 'IPA mj Mincho'\n    URL: 'https://moji.or.jp/mojikiban/font/'\n    author: 'Information-technology Promotion Agency, Japan (IPA)'\n    license: 'IPA Font License v1.0'\n    licenseURL: 'https://moji.or.jp/ipafont/license/'\n    path: 'IPAmjm/ipamjm.ttf'\n  ipaexm:\n    name: 'IPA ex Mincho'\n    URL: 'https://moji.or.jp/ipafont/ipaex00401/'\n    author: 'Information-technology Promotion Agency, Japan (IPA)'\n    license: 'IPA Font License v1.0'\n    licenseURL: 'https://moji.or.jp/ipafont/ipaex00401'\n    path: 'IPAexm/ipaexm00401/ipaexm.ttf'\n  hanamin-a:\n    name: 'Hanazono Mincho'\n    URL: 'http://fonts.jp/hanazono/'\n    author: 'GlyphWiki Project'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://scripts.sil.org/ofl'\n    path: 'hanazono/HanaMinA.ttf'\n  free-serif:\n    name: 'GNU FreeFont'\n    URL: 'https://www.gnu.org/software/freefont/'\n    author: 'GNU FreeFont Contributors'\n    license: 'GPLv3+FE'\n    licenseURL: 'https://www.gnu.org/software/freefont/license.html'\n    path: 'FreeFont/freefont-20120503/FreeSerif.ttf'\n  free-serif-bold:\n    name: 'GNU FreeFont'\n    URL: 'https://www.gnu.org/software/freefont/'\n    author: 'GNU FreeFont Contributors'\n    license: 'GPLv3+FE'\n    licenseURL: 'https://www.gnu.org/software/freefont/license.html'\n    path: 'FreeFont/freefont-20120503/FreeSerifBold.ttf'\n  noto:\n    name: 'Noto Fonts'\n    URL: 'https://www.google.com/get/noto/'\n    author: 'Google Inc.'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://scripts.sil.org/ofl'\n  noto-hebrew:\n    path: 'Noto/NotoSansHebrew-Regular.ttf'\n  noto-arabic:\n    path: 'Noto/NotoNaskhArabic-Regular.ttf'\n  noto-syriac:\n    path: 'Noto/NotoSansSyriacEastern-Regular.ttf'\n  noto-nko:\n    path: 'Noto/NotoSansNKo-Regular.ttf'\n  noto-samaritan:\n    path: 'Noto/NotoSansSamaritan-Regular.ttf'\n  noto-mandaic:\n    path: 'Noto/NotoSansMandaic-Regular.ttf'\n  noto-bengali:\n    path: 'Noto/NotoSerifBengali-Regular.ttf'\n  noto-gujarati:\n    path: 'Noto/NotoSerifGujarati-Regular.ttf'\n  noto-tamil:\n    path: 'Noto/NotoSerifTamil-Regular.ttf'\n  noto-telugu:\n    path: 'Noto/NotoSerifTelugu-Regular.ttf'\n  noto-kannada:\n    path: 'Noto/NotoSerifKannada-Regular.ttf'\n  noto-malayalam:\n    path: 'Noto/NotoSerifMalayalam-Regular.ttf'\n  noto-lao:\n    path: 'Noto/NotoSerifLao-Regular.ttf'\n  noto-tibetan:\n    path: 'Noto/NotoSansTibetan-Regular.ttf'\n  noto-georgian:\n    path: 'Noto/NotoSerifGeorgian-Regular.ttf'\n  noto-cherokee:\n    path: 'NotoSansCherokee/NotoSansCherokee-Regular.ttf'\n  noto-canadian-aboriginal:\n    path: 'Noto/NotoSansCanadianAboriginal-Regular.ttf'\n  noto-ogham:\n    path: 'Noto/NotoSansOgham-Regular.ttf'\n  noto-runic:\n    path: 'Noto/NotoSansRunic-Regular.ttf'\n  noto-tagalog:\n    path: 'Noto/NotoSansTagalog-Regular.ttf'\n  noto-tagbanwa:\n    path: 'Noto/NotoSansTagbanwa-Regular.ttf'\n  noto-khmer:\n    path: 'Noto/NotoSerifKhmer-Regular.ttf'\n  noto-tai-tham:\n    path: 'Noto/NotoSansTaiTham-Regular.ttf'\n  noto-balinese:\n    path: 'Noto/NotoSansBalinese-Regular.ttf'\n  noto-sundanese:\n    path: 'Noto/NotoSansSundanese-Regular.ttf'\n  noto-batak:\n    path: 'Noto/NotoSansBatak-Regular.ttf'\n  noto-ol-chiki:\n    path: 'Noto/NotoSansOlChiki-Regular.ttf'\n  noto-devanagari:\n    path: 'Noto/NotoSerifDevanagari-Regular.ttf'\n  noto-serif:\n    path: 'Noto/NotoSerif-Regular.ttf'\n  noto-tifinagh:\n    path: 'Noto/NotoSansTifinagh-Regular.ttf'\n  noto-yi:\n    path: 'Noto/NotoSansYi-Regular.ttf'\n  noto-bamum:\n    path: 'Noto/NotoSansBamum-Regular.ttf'\n  noto-syloti-nagri:\n    path: 'Noto/NotoSansSylotiNagri-Regular.ttf'\n  noto-kayah-li:\n    path: 'Noto/NotoSansKayahLi-Regular.ttf'\n  noto-rejang:\n    path: 'Noto/NotoSansRejang-Regular.ttf'\n  noto-javanese:\n    path: 'Noto/NotoSansJavanese-Regular.ttf'\n  noto-cham:\n    path: 'Noto/NotoSansCham-Regular.ttf'\n  noto-meetei-mayek:\n    path: 'Noto/NotoSansMeeteiMayek-Regular.ttf'\n  noto-cjk-jp:\n    path: 'Noto/NotoSansCJKjp-Light.otf'\n  noto-serif-jp:\n    path: 'NotoSerifCJKjp/NotoSerifCJKjp-Regular.otf'\n  scheherazade:\n    name: 'Scheherazade 2.100'\n    URL: 'http://software.sil.org/scheherazade/'\n    author: 'SIL International'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://scripts.sil.org/ofl'\n    path: 'Scheherazade/Scheherazade-2.100/Scheherazade-Regular.ttf'\n  scheherazade-bold:\n    path: 'Scheherazade/Scheherazade-2.100/Scheherazade-Bold.ttf'\n  annapurna:\n    name: 'Annapurna SIL 1.202'\n    URL: 'http://software.sil.org/annapurna/'\n    author: 'SIL International'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://scripts.sil.org/ofl'\n    path: 'Annapurna/AnnapurnaSIL-1.202/AnnapurnaSIL-Regular.ttf'\n  manjari:\n    name: 'Manjari'\n    URL: 'https://github.com/santhoshtr/Manjari'\n    author: 'Santhosh Thottingal, Kavya Manohar'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://scripts.sil.org/ofl'\n    path: 'Manjari/Manjari-Regular.ttf'\n  norasi:\n    name: 'Norasi'\n    URL: 'https://linux.thai.net/projects/fonts-tlwg'\n    author: 'The National Font Project (v.beta), Yannis Haralambous, Virach Sornlertlamvanich, and Anutara Tantraporn, with modification by Thai Linux Working Group (TLWG)'\n    license: 'GPLv2+FE'\n    licenseURL: 'https://github.com/tlwg/fonts-tlwg/blob/master/COPYING'\n    path: 'tlwg/ttf-tlwg-0.5.0/Norasi.ttf'\n  jomolhari:\n    name: 'Jomolhari 000.003c'\n    URL: 'https://collab.itc.virginia.edu/wiki/tibetan-script/Jomolhari.html'\n    author: 'THL Staff'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://scripts.sil.org/ofl'\n    path: 'Jomolhari/Jomolhari-alpha3c-0605331.ttf'\n  padauk:\n    name: 'Padauk 3.002'\n    URL: 'http://software.sil.org/padauk/'\n    author: 'SIL International'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://scripts.sil.org/ofl'\n    path: 'Padauk/padauk-3.002/PadaukBook-Regular.ttf'\n  quivira:\n    name: 'Quivira 4.1'\n    URL: 'http://www.quivira-font.com/'\n    author: 'Alexander Lange'\n    license: 'Permissive License'\n    licenseURL: 'http://www.quivira-font.com/notes.php'\n    path: 'Quivira/Quivira.otf'\n  unbatang:\n    name: 'UnBatang'\n    URL: 'https://kldp.net/unfonts/'\n    author: 'Koanughi Un, Won-kyu Park, and Jungshik Shin'\n    license: 'GPLv2'\n    licenseURL: 'http://www.gnu.org/licenses/gpl.txt'\n    path: 'UnFonts/un-fonts/UnBatang.ttf'\n  abyssinica:\n    name: 'Abyssinica SIL 1.500'\n    URL: 'http://software.sil.org/abyssinica/'\n    author: 'SIL International'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://scripts.sil.org/ofl'\n    path: 'Abyssinica/AbyssinicaSIL-1.500/AbyssinicaSIL-R.ttf'\n  hancom:\n    name: 'HCRBatang'\n    URL: 'http://www.hancom.com/cs_center/csDownload.do'\n    author: 'Hancom INC(HNC)'\n    license: 'Permissive License'\n    licenseURL: 'http://www.hancom.com/cs_center/csDownload.do'\n    path: 'Hancom/HANBatang.ttf'\n  mongolian-script:\n    name: 'MongolianScript'\n    URL: 'http://mongol.openmn.org/'\n    author: 'Myataviin Erdenechimeg and Bolorsoft LLC'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://scripts.sil.org/ofl'\n    path: 'MongolianScript/fonts/MongolianScript.ttf'\n  namdhinggo:\n    name: 'Namdhinggo SIL 1.004'\n    URL: 'http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=NamdhinggoSIL'\n    author: 'SIL International'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://scripts.sil.org/ofl'\n    path: 'Namdhinggo/NamdhinggoSIL/NamdhinggoSIL-R.ttf'\n  dai-banna:\n    name: 'Dai Banna SIL 2.200'\n    URL: 'http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=daibannasil'\n    author: 'SIL International'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://scripts.sil.org/ofl'\n    path: 'DaiBanna/dai-banna-2.200/DBSILBR.ttf'\n  nishiki:\n    name: 'Nishiki-teki Font'\n    URL: 'https://umihotaru.work/'\n    author: 'Umihotaru'\n    license: 'Permissive License'\n    licenseURL: 'https://umihotaru.work/faq.txt'\n    path: 'Nishiki/nishiki-teki.ttf'\n  mingzat:\n    name: 'Mingzat 0.100'\n    URL: 'http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=Mingzat'\n    author: 'SIL International'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://scripts.sil.org/ofl'\n    path: 'Mingzat/Mingzat/Mingzat-R.ttf'\n  ponomar:\n    name: 'Ponomar Unicode'\n    URL: 'http://www.ponomar.net/cu_support/fonts.html'\n    author: 'Vlad Dorosh, Aleksandr Andreev, Yuri Shardt, and Nikita Simmons'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://scripts.sil.org/ofl'\n    path: 'PonomarUnicode/PonomarUnicode.otf'\n  junicode:\n    name: 'Junicode'\n    URL: 'http://junicode.sourceforge.net/'\n    author: 'Peter S. Baker'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://scripts.sil.org/ofl'\n    path: 'junicode/junicode/fonts/Junicode.ttf'\n  btc:\n    name: 'BTC.ttf'\n    URL: 'https://en.bitcoin.it/wiki/Template:BTC'\n    author: 'theymos'\n    license: 'Public domain'\n    licenseURL: ''\n    path: 'BTC/BTC.ttf'\n  observer-symbol:\n    name: 'ObserverSymbol'\n    URL: 'https://www.simongriffee.com/notebook/international-symbol-observer/'\n    author: 'Simon Griffee'\n    license: 'CC0 1.0 Universal'\n    licenseURL: 'https://creativecommons.org/publicdomain/zero/1.0/'\n    path: 'ObserverSymbol/ObserverSymbol.ttf'\n  analecta:\n    name: 'Analecta'\n    URL: 'http://users.teilar.gr/~g1951d/'\n    author: 'George Douros'\n    license: 'Permissive License'\n    licenseURL: 'http://users.teilar.gr/~g1951d/'\n    path: 'Analecta/Analecta.otf'\n  babel-stone:\n    name: 'BabelStone Han'\n    URL: 'http://www.babelstone.co.uk/Fonts/Han.html'\n    author: 'Arphic Technology Co., Ltd.'\n    license: 'Arphic Public License'\n    licenseURL: 'http://ftp.gnu.org/non-gnu/chinese-fonts-truetype/LICENSE'\n    path: 'BabelStoneHan/BabelStoneHan.ttf'\n  open-sans:\n    name: 'Open Sans'\n    URL: 'http://www.opensans.com/'\n    author: 'Steve Matteson and Google Corporation'\n    license: 'Apache License v2'\n    licenseURL: 'http://www.apache.org/licenses/LICENSE-2.0'\n    path: 'OpenSans/OpenSans-Bold.ttf'\n  dejavu:\n    name: 'DejaVu Serif'\n    URL: 'https://dejavu-fonts.github.io/'\n    author: 'Bitstream'\n    license: 'Free License'\n    licenseURL: 'https://dejavu-fonts.github.io/License.html'\n    path: 'DejaVu/dejavu-fonts-ttf-2.37/ttf/DejaVuSerif.ttf'\n  jglao:\n    name: 'JG Lao Times'\n    URL: 'https://web.archive.org/web/20090729181203/http://geocities.com/jglavy/asian.html'\n    author: 'GlavyFonts'\n    license: 'Permissive License'\n    licenseURL: 'https://web.archive.org/web/20090729181203/http://geocities.com/jglavy/asian.html'\n    path: 'JGLao/JG LaoTimesOT.ttf'\n  lisu:\n    name: 'LisuUnicode'\n    URL: 'http://phjamr.github.io/lisu.html'\n    author: 'phjamr'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'https://github.com/phjamr/LisuUnicode/blob/master/LICENSE.md'\n    path: 'LisuUnicode/LisuUnicode-Regular.ttf'\n  wakor:\n    name: 'Wakor'\n    URL: 'http://www.evertype.com/fonts/vai/'\n    author: 'Jason Glavy'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://www.evertype.com/fonts/vai/wakor-licence.html'\n    path: 'Wakor/Wakor-4.0.7/Wakor.ttf'\n  charis:\n    name: 'Charis'\n    URL: 'https://software.sil.org/charis/'\n    author: 'SIL'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://scripts.sil.org/ofl'\n    path: 'Charis/CharisSIL-5.000/CharisSIL-R.ttf'\n  babel-phags-pa:\n    name: 'BabelStone Phags-pa Book'\n    URL: 'http://www.babelstone.co.uk/Fonts/Phags-pa.html'\n    author: 'Arphic Technology Co., Ltd.'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://scripts.sil.org/ofl'\n    path: 'BabelStonePhagsPa/BabelStonePhagspaBook_v2.ttf'\n  pagul:\n    name: 'PagulFont'\n    URL: 'https://sourceforge.net/projects/pagul/'\n    author: 'mooreprabu'\n    license: 'GPLv3+FE'\n    licenseURL: 'https://www.gnu.org/software/freefont/license.html'\n    path: 'Pagul/Pagul.ttf'\n  tai-heritage:\n    name: 'Tai Heritage Pro'\n    URL: 'https://software.sil.org/taiheritage/'\n    author: 'SIL'\n    license: 'SIL OFL 1.1'\n    licenseURL: 'http://scripts.sil.org/ofl'\n    path: 'TaiHeritage/TaiHeritagePro-2.600/TaiHeritagePro-Regular.ttf'\n\nload-fonts = ->\n  Promise.all do\n    for let name, {path: short-path} of font-data\n      if short-path is undefined\n        Promise.resolve {}\n      else\n        new Promise (resolve, reject) ->\n          full-path = path.join __dirname, \\../fonts, short-path\n          opentype.load full-path, (error, font) ->\n            if error then reject error else resolve \"#name\": font\n  .then (fonts) ->\n    new Promise (resolve, reject) ->\n      log 'All fonts loaded.'\n      resolve Object.assign {}, ...fonts\n\nload-glyphs = ->\n  fs.readdir path.join __dirname, \\../data/glyphs\n  .then (files) ->\n    Promise.all do\n      for let file in files when path.extname(file) is '.svg'\n        fs.read-file path.join __dirname, \\../data/glyphs, file .then (glyph) ->\n          \"#{camel-case path.basename file, '.svg'}\": glyph\n  .then (glyphs) ->\n    log 'All glyphs loaded.'\n    Object.assign {}, ...glyphs\n\nmodule.exports = (codepoint-infos, config) ->\n  [fonts, custom-glyphs] <- Promise.all [\n    load-fonts!\n    load-glyphs!\n  ] .then\n\n  resolve, reject <- new Promise _\n\n  error, window <- jsdom.env '' [require.resolve 'snapsvg']\n  return reject error if error\n\n  {Snap, document} = window\n\n  hilbert = new Hilbert2d 256\n\n  block-size = 30\n\n  paper = Snap 128 * block-size, 128 * block-size\n\n  path-string = ''\n\n  progress = new Progress 'Generating... [:bar] :current glyphs :elapseds' do\n    incomplete: ' '\n    width: 40\n    total: 128 * 128\n\n  anchors = paper.group!\n  glyphs = paper.group!\n\n  defined-characters = 0\n  early-mapped-characters = 0\n\n  start-xy = hilbert.xy config.codepoint\n\n  for code-point from config.codepoint til config.codepoint + 128 * 128\n    {x, y} = hilbert.xy code-point\n\n    x -= start-xy.x\n    y -= start-xy.y\n\n    codepoint-info = codepoint-infos.get code-point\n\n    continue unless codepoint-info?\n\n    glyph-infos =\n      for let name, font of fonts\n        {name, font, glyph: font.char-to-glyph String.from-code-point(codepoint-info?.codepoint or code-point)}\n\n    unless codepoint-info.type is \\notdef\n      defined-characters++\n\n    if codepoint-info.early is true\n      early-mapped-characters++\n\n    if codepoint-info?.type is \\notdef\n      notdef-group = paper.group!\n\n      # Draw box\n      notdef = Snap.parse custom-glyphs.notdef\n      for child in Array::slice.call notdef.node.children, 0\n        notdef-group.append child\n\n      notdef-group.attr transform: \"translate(#{x * block-size} #{y * block-size}) scale(#{block-size / 2048})\"\n\n      glyphs.append notdef-group\n    else if codepoint-info?.type is \\tofu\n      tofu-group = paper.group!\n\n      # Draw box\n      tofu = Snap.parse custom-glyphs.tofu\n      for child in Array::slice.call tofu.node.children, 0\n        tofu-group.append child\n\n      tofu-group.attr transform: \"translate(#{x * block-size} #{y * block-size}) scale(#{block-size / 2048})\"\n\n      glyphs.append tofu-group\n    else if codepoint-info?.type is \\control\n      control-box-group = paper.group!\n\n      # Draw box\n      control-box = Snap.parse custom-glyphs.control-box\n      for child in Array::slice.call control-box.node.children, 0\n        control-box-group.append child\n\n      # Draw text\n      text-font = fonts.open-sans\n      text-size = 768\n      lines = codepoint-info.short-name.split '\\\\n'\n\n      for line, line-index in lines\n        text-path = text-font.get-path line, 1024, 1024, text-size .to-path-data!\n        text = paper.path text-path\n        text-width = text-font.string-to-glyphs line .reduce do\n          * (a, b) -> a + b.advance-width / text-font.units-per-em * text-size\n          * 0\n        text.attr transform: \"translate(#{- text-width / 2} #{(line-index - lines.length / 2 + 0.85) * text-size})\"\n        control-box-group.append text\n\n      control-box-group.attr transform: \"translate(#{x * block-size} #{y * block-size}) scale(#{block-size / 2048})\"\n\n      glyphs.append control-box-group\n    else if codepoint-info?.type is \\svg\n      svg-font-group = paper.group!\n\n      svg-group = paper.group!\n\n      glyph-svg = Snap.parse custom-glyphs[\"u#{to-hex code-point}\"]\n      for child in Array::slice.call glyph-svg.node.children, 0\n        svg-group.append child\n\n      # Transform\n      transform = Snap.matrix 1, 0, 0, 1, 0, 0\n      transform.translate x * block-size, y * block-size\n      if codepoint-info?.transform\n        transform.scale block-size\n        transform.translate 0.5, 0.5\n        transform.add Snap._.transform2matrix Snap._.svg-transform2string codepoint-info?.transform\n        transform.translate -0.5, -0.5\n        transform.scale 1 / block-size\n      transform.scale block-size / 1024\n      svg-group.transform transform\n\n      svg-font-group.append svg-group\n\n      if codepoint-info?.box\n        box-group = paper.group!\n\n        box = Snap.parse custom-glyphs.control-box\n        for child in Array::slice.call box.node.children, 0\n          box-group.append child\n\n        box-group.transform \"translate(#{x * block-size} #{y * block-size}) scale(#{block-size / 2048})\"\n\n        svg-font-group.append box-group\n\n      if codepoint-info?.combining\n        combining-circle-group = paper.group!\n\n        combining-circle = Snap.parse custom-glyphs.combining-circle\n        for child in Array::slice.call combining-circle.node.children, 0\n          combining-circle-group.append child\n\n        combining-circle-group.transform \"translate(#{x * block-size} #{y * block-size}) scale(#{block-size / 1024})\"\n\n        svg-font-group.append combining-circle-group\n\n      glyphs.append svg-font-group\n    else\n      glyph-info =\n        if codepoint-info?.type is \\font\n          if codepoint-info.font-name.length is 1\n            glyph-infos.find (.name is camel-case codepoint-info.font-name)\n          else\n            font-names = codepoint-info.font-name.map camel-case\n            font-name = font-names.find ((name) -> glyph-infos.some (-> it.name is name and it.glyph.unicode isnt undefined))\n            glyph-infos.find (-> it.name is font-name)\n        else if process.env.DEBUG is \\true\n          glyph-infos.find (.glyph.unicode isnt undefined)\n        else\n          undefined\n\n      if glyph-info isnt undefined\n        font-group = paper.group!\n\n        width = glyph-info.glyph.advance-width / glyph-info.font.units-per-em * block-size\n        glyph-path = glyph-info.glyph.get-path (block-size - width) / 2, 25, block-size .to-path-data!\n        path = paper.path glyph-path\n\n        font-count-name =\n          if glyph-info.name.starts-with 'noto'\n            'noto'\n          else if glyph-info.name.starts-with 'scheherazade'\n            'scheherazade'\n          else\n            glyph-info.name\n\n        unless font-counts.has font-count-name\n          font-counts.set font-count-name, 0\n\n        font-counts.set font-count-name, 1 + font-counts.get font-count-name\n\n        # Transform\n        transform = Snap.matrix 1, 0, 0, 1, 0, 0\n        # SVG Transform operation occurs by last-in-first-out order\n        # http://stackoverflow.com/q/27635272\n        transform.translate x * block-size, y * block-size\n        if codepoint-info?.transform\n          transform.scale block-size\n          transform.translate 0.5, 0.5\n          transform.add Snap._.transform2matrix Snap._.svg-transform2string codepoint-info?.transform\n          transform.translate -0.5, -0.5\n          transform.scale 1 / block-size\n        path.transform transform\n\n        font-group.append path\n\n        if codepoint-info?.combining\n          combining-circle-group = paper.group!\n\n          combining-circle = Snap.parse custom-glyphs.combining-circle\n          for child in Array::slice.call combining-circle.node.children, 0\n            combining-circle-group.append child\n\n          combining-circle-group.transform \"translate(#{x * block-size} #{y * block-size}) scale(#{block-size / 1024})\"\n\n          font-group.append combining-circle-group\n\n        if codepoint-info?.box\n          box-group = paper.group!\n\n          box = Snap.parse custom-glyphs.control-box\n          for child in Array::slice.call box.node.children, 0\n            box-group.append child\n\n          box-group.transform \"translate(#{x * block-size} #{y * block-size}) scale(#{block-size / 2048})\"\n\n          font-group.append box-group\n\n        glyphs.append font-group\n\n    if codepoint-info?.type isnt undefined\n      temp-anchors = []\n      anchor-group = paper.group!\n\n      anchor-size = 2\n\n      if x isnt 0x7F\n        right-anchor1 = paper.line block-size, 0, block-size, anchor-size\n        anchor-group.append right-anchor1\n\n        right-anchor2 = paper.line block-size, block-size - anchor-size, block-size, block-size\n        anchor-group.append right-anchor2\n\n      if y isnt 0x7F\n        bottom-anchor1 = paper.line 0, block-size, anchor-size, block-size\n        anchor-group.append bottom-anchor1\n\n        bottom-anchor2 = paper.line block-size - anchor-size, block-size, block-size, block-size\n        anchor-group.append bottom-anchor2\n\n      if x % 16 is 0 and x isnt 0 and y % 16 is 0 and y isnt 0\n        big-anchor = paper.rect -anchor-size, -anchor-size, anchor-size * 2, anchor-size * 2\n        big-anchor.transform 'rotate(45deg)'\n        anchor-group.append big-anchor\n\n      anchor-group.transform \"translate(#{x * block-size} #{y * block-size})\"\n      anchors.append anchor-group\n\n    if path-string.length is 0\n      path-string += \"M #{(x + 0.5) * block-size} #{(y + 0.5) * block-size} \"\n    else\n      path-string += \"L #{(x + 0.5) * block-size} #{(y + 0.5) * block-size} \"\n\n    progress.tick 128 if (code-point + 1) % 128 is 0\n\n  anchors.attr do\n    stroke-width: '0.5px'\n    stroke: 'black'\n\n  path = paper.path path-string\n  path.attr do\n    fill: 'none'\n    stroke: 'black'\n    stroke-opacity: 0.3\n    stroke-width: 0.5\n  path.prepend-to paper\n\n  paper.node.set-attribute 'viewBox', '0 0 3840 3840'\n  paper.node.set-attribute 'width', 7680\n  paper.node.set-attribute 'height', 7680\n\n  font-counts-list = Array.from font-counts\n  font-counts-list.sort (a, b) -> b.1 - a.1\n  font-license-text = font-counts-list.map ([font-name, font-count]) ->\n    font = font-data[font-name]\n    \"#{font.name} by #{font.author} licensed under #{font.license}\"\n  .join '\\n'\n  font-count-text = font-counts-list.map ([font-name, font-count]) ->\n    font = font-data[font-name]\n    \"#{font.name}: #{font-count}\"\n  .join '\\n'\n\n  console.log \"\"\"\n\n    ====== License notation ======\n\n    #{font-license-text}\n  \"\"\"\n\n  console.log \"\"\"\n\n    ====== Glyph count ======\n\n    #{font-count-text}\n  \"\"\"\n\n  console.log \"\"\"\n\n    ====== Statistics ======\n\n  \"\"\"\n\n  console.log \"Defined Characters: #{defined-characters}\"\n  console.log \"Early Mapped Characters: #{early-mapped-characters}\"\n\n  log 'Rendering SVG...'\n\n  svg = xmlserializer.serialize-to-string paper.node\n\n  window.close!\n\n  resolve svg\n"
  },
  {
    "path": "lib/load-codepoints.ls",
    "content": "require! {\n  path\n  'mz/fs'\n  'yaml-js'\n  './util': {log, now, merge-maps}\n  './codepoint-builder'\n}\n\nmodule.exports = ->\n  now ->\n    fs.readdir 'data/codepoints'\n  .then (files) ->\n    yaml-files = files.filter -> it.slice -4 is '.yml'\n\n    Promise.all yaml-files.map (yaml-file) ->\n      fs.read-file path.resolve 'data/codepoints' yaml-file\n      .then (yaml) ->\n        object = yaml-js.load yaml\n\n        codepoint-builder object\n\n  .then (codepoint-maps) ->\n    merge-maps codepoint-maps\n"
  },
  {
    "path": "lib/util.ls",
    "content": "export log = (text) ->\n  date = new Date!\n  date-string = date.to-ISO-string!\n  memory = process.memory-usage!rss / (1024 * 1024) |> Math.floor\n  console.log \"[#date-string (Memory: #{memory}MiB)] #text\"\n\nexport merge-maps = (maps) ->\n  flattened-maps = maps.map (-> Array.from it) .reduce ((a, b) -> a ++ b), []\n  new Map flattened-maps\n\n# Just executes specified function and returns result.\n# Used to beautify indentation in promise chains\nexport now = -> it!\n\nexport to-hex = (codepoint) ->\n  if codepoint < 0x10000\n    ('0000' + codepoint.to-string 16).slice -4\n  else\n    codepoint.to-string 16\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"unicode-map\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"private\": true,\n  \"scripts\": {\n    \"build\": \"node --max-old-space-size=4096 node_modules/livescript/bin/lsc index.ls\",\n    \"watch\": \"concurrently \\\"npm run chokidar\\\" \\\"npm run livereload\\\"\",\n    \"chokidar\": \"chokidar \\\"data/**/*.yml\\\" \\\"lib/*.ls\\\" -c \\\"lsc index.ls\\\"\",\n    \"livereload\": \"livereload \\\"test.svg\\\" -d\",\n    \"test\": \"mocha --compilers ls:livescript test/index.ls\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/hakatashi/unicode-map.git\"\n  },\n  \"keywords\": [],\n  \"author\": \"Koki Takahashi <hakatasiloving@gmail.com> (http://hakatashi.com/)\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/hakatashi/unicode-map/issues\"\n  },\n  \"homepage\": \"https://github.com/hakatashi/unicode-map#readme\",\n  \"dependencies\": {\n    \"anymatch\": \"^1.3.2\",\n    \"bluebird\": \"^3.5.1\",\n    \"camel-case\": \"^3.0.0\",\n    \"chai\": \"^3.5.0\",\n    \"chokidar\": \"^1.7.0\",\n    \"chokidar-cli\": \"^1.2.0\",\n    \"concurrently\": \"^3.5.0\",\n    \"download\": \"^5.0.3\",\n    \"file-url\": \"^2.0.2\",\n    \"hilbert\": \"^2.0.0\",\n    \"jsdom\": \"^9.12.0\",\n    \"livereload\": \"^0.6.3\",\n    \"livescript\": \"^1.5.0\",\n    \"mkdirp-then\": \"^1.2.0\",\n    \"mocha\": \"^3.5.3\",\n    \"mz\": \"^2.7.0\",\n    \"nightmare\": \"^2.10.0\",\n    \"no-case\": \"^2.3.2\",\n    \"opentype.js\": \"^0.7.3\",\n    \"optionator\": \"^0.8.2\",\n    \"progress\": \"^1.1.8\",\n    \"snapsvg\": \"^0.5.1\",\n    \"svg2png\": \"^4.1.1\",\n    \"xmlserializer\": \"^0.6.0\",\n    \"yaml-js\": \"^0.1.5\"\n  }\n}\n"
  },
  {
    "path": "test/codepoint-builder.ls",
    "content": "require! {\n  './expect'\n  '../lib/codepoint-builder'\n}\n\n{describe: Describe, it: It} = global\n\nassets =\n  * * 'extracts hex key and convert it to number'\n    * F1B1: font: \\testfont\n    * 0xF1B1:\n        type: \\font\n        font-name: <[testfont]>\n        codepoint: undefined\n\n  * * 'recognizes codepoints over U+FFFF'\n    * D109A: font: \\testfont\n    * 0xD109A:\n        type: \\font\n        font-name: <[testfont]>\n        codepoint: undefined\n\n  * * 'extracts code point range to the series of keys'\n    * '0150..0153': font: \\testfont\n    * 0x0150:\n        type: \\font\n        font-name: <[testfont]>\n        codepoint: undefined\n      0x0151:\n        type: \\font\n        font-name: <[testfont]>\n        codepoint: undefined\n      0x0152:\n        type: \\font\n        font-name: <[testfont]>\n        codepoint: undefined\n      0x0153:\n        type: \\font\n        font-name: <[testfont]>\n        codepoint: undefined\n\n  * * 'accepts additional parameters'\n    * '535A':\n        font: \\testfont\n        codepoint: undefined\n        scale: 0.5\n    * 0x535A:\n        type: \\font\n        font-name: <[testfont]>\n        codepoint: undefined\n        scale: 0.5\n\n  * * 'supports nested notation'\n    * '535A..535F':\n        font: \\font1\n        '535B':\n          font: \\font2\n        '535D..535E':\n          font: \\font3\n    * 0x535A:\n        type: \\font\n        font-name: <[font1]>\n        codepoint: undefined\n      0x535B:\n        type: \\font\n        font-name: <[font2]>\n        codepoint: undefined\n      0x535C:\n        type: \\font\n        font-name: <[font1]>\n        codepoint: undefined\n      0x535D:\n        type: \\font\n        font-name: <[font3]>\n        codepoint: undefined\n      0x535E:\n        type: \\font\n        font-name: <[font3]>\n        codepoint: undefined\n      0x535F:\n        type: \\font\n        font-name: <[font1]>\n        codepoint: undefined\n\n  * * 'recognizes glyphs of type control'\n    * '0102': control: \\NUL\n    * 0x0102:\n        type: \\control\n        short-name: \\NUL\n\n  * * 'splats array of short-names into each characters'\n    * '535A..535C': control: <[NUL SP CR]>\n    * 0x535A:\n        type: \\control\n        short-name: \\NUL\n      0x535B:\n        type: \\control\n        short-name: \\SP\n      0x535C:\n        type: \\control\n        short-name: \\CR\n\n  * * 'splats lines of short-names into each characters'\n    * '535A..535C': control: '''\n        NUL\n        SP\n\n        CR\n\n      '''\n    * 0x535A:\n        type: \\control\n        short-name: \\NUL\n      0x535B:\n        type: \\control\n        short-name: \\SP\n      0x535C:\n        type: \\control\n        short-name: \\CR\n\n  * * 'recognizes glyphs of type svg'\n    * '0102': svg: true\n    * 0x0102:\n        type: \\svg\n\n  * * 'recognizes glyphs of type notdef'\n    * '0102': 'notdef'\n    * 0x0102:\n        type: \\notdef\n\n<- Describe 'Code Point Builder'\n\nfor let asset in assets\n  It asset.0, ->\n    expect codepoint-builder asset.1 .to.be.map asset.2\n"
  },
  {
    "path": "test/expect.ls",
    "content": "require! {\n  chai\n}\n\nmap-to-obj = (map) ->\n  obj = Object.create null\n\n  for [key, value] in Array.from map.entries!\n    obj[key] = value\n\n  obj\n\nchai.use ({Assertion}, util) ->\n  Assertion.add-method 'map' (expected) ->\n    new Assertion @_obj .to.be.instanceof Map\n\n    actual-obj = map-to-obj @_obj\n\n    expected-obj =\n      if expected instanceof Map\n        map-to-obj expected\n      else\n        expected\n\n    new Assertion actual-obj .to.deep.equal expected-obj\n\nmodule.exports = chai.expect\n"
  },
  {
    "path": "test/index.ls",
    "content": "require! {\n  './codepoint-builder'\n}\n"
  }
]