Repository: hakatashi/unicode-map
Branch: master
Commit: d474139e5b02
Files: 46
Total size: 138.0 KB
Directory structure:
gitextract_77ap7ofj/
├── .gitattributes
├── .gitignore
├── .travis.yml
├── README.md
├── configs/
│ ├── bmp-1.ls
│ ├── bmp-2.ls
│ ├── bmp-3.ls
│ └── index.ls
├── data/
│ ├── codepoints/
│ │ ├── 0000.yml
│ │ ├── 0800.yml
│ │ ├── 0A00.yml
│ │ ├── 0C00.yml
│ │ ├── 0E00.yml
│ │ ├── 1000.yml
│ │ ├── 1800.yml
│ │ ├── 1A00.yml
│ │ ├── 1C00.yml
│ │ ├── 1E00.yml
│ │ ├── 2000.yml
│ │ ├── 2200.yml
│ │ ├── 2C00.yml
│ │ ├── 2E00.yml
│ │ ├── 3000.yml
│ │ ├── 3200.yml
│ │ ├── 3400.yml
│ │ ├── A000.yml
│ │ ├── A500.yml
│ │ ├── A800.yml
│ │ ├── AA00.yml
│ │ └── AC00.yml
│ └── layouts/
│ ├── bmp-1.ai
│ ├── bmp-2.ai
│ └── bmp-3.ai
├── index.ls
├── lib/
│ ├── codepoint-builder.ls
│ ├── compose-poster.ls
│ ├── convert-to-pdf.ls
│ ├── convert-to-png.ls
│ ├── download-fonts.ls
│ ├── generate-svg.ls
│ ├── load-codepoints.ls
│ └── util.ls
├── package.json
└── test/
├── codepoint-builder.ls
├── expect.ls
└── index.ls
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain
data/layouts/*.ai filter=lfs diff=lfs merge=lfs -text
data/layouts/*.svg filter=lfs diff=lfs merge=lfs -text
package-lock.json binary
================================================
FILE: .gitignore
================================================
# Logs
logs
*.log
# Runtime data
pids
*.pid
*.seed
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directory
# Commenting this out is preferred by some people, see
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git-
node_modules
# Users Environment Variables
.lock-wscript
*.svg
*.png
*.jpg
*.txt
*.pdf
fonts
!data/glyphs/*.svg
!data/layouts/*.svg
# =========================
# Operating System Files
# =========================
# OSX
# =========================
.DS_Store
.AppleDouble
.LSOverride
# Thumbnails
._*
# Files that might appear on external disk
.Spotlight-V100
.Trashes
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# Windows
# =========================
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msm
*.msp
# Windows shortcuts
*.lnk
================================================
FILE: .travis.yml
================================================
language: node_js
# Sudo-enabled machines have much more memory
sudo: required
node_js:
- node
before_install:
# Prerequisite of Nightmare.js
# https://github.com/electron/electron/blob/master/docs/tutorial/testing-on-headless-ci.md
- export DISPLAY=':99.0'
- Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
# Install git-lfs
- mkdir -p $HOME/bin
- wget https://github.com/github/git-lfs/releases/download/v1.4.3/git-lfs-linux-amd64-1.4.3.tar.gz
- tar xvfz git-lfs-linux-amd64-1.4.3.tar.gz
- mv git-lfs-1.4.3/git-lfs $HOME/bin/git-lfs
- export PATH=$PATH:$HOME/bin/
before_script: git lfs pull
script:
- npm test
- DEBUG=true npm run build
cache:
directories:
- fonts
branches:
except:
- /^v\d+\.\d+\.\d+$/
deploy:
provider: releases
api_key:
secure: Irn5gzraLVLX2JwCIJtWcjO7mj9rj+u6EbczQYtfpif/Q7mS1L3En1IcTBwakqa1RYmIRzH/91HWMCDRIH6JMPjxdzcKsa+1BFtJys5/yzpMKT2JQIvBtydyqvCZ/vzIe1ehdvsqVEtaCGYipcEZjaS7dDNKjOAN1p1r2czxvt/5pPg2suLfse7lMEuimXDYDJUt4TbaNT1i1p6ygGZxTlBaoQ4AIWh4PqzoTAGmSJcr/pQoWycgDW60T4xujTajouWFEeW3xPOH5mLfAuwDL6egndqGMiBsFfVIJbICCjiz1Zn2p0/dcDKWT3M8qSf0QNoYk0aUzkL70Bn4roLFaqs3S0x5BRfu5o5eFbW9E6GafBjekB6uBRon68zutkCtTY+5nnrD64RtIhKbbTBY+9woO2U4AZCvv453hTd4HBpHFAlXE4J4SjprUW4cEP/6vqObD372/TwopdW/anCL7Ygj3Dd3I6HChBVsn1SPrFgCnOIiYnrNHKlyr941XSr0UUSQBsOzjGUFqjTysVAsdji6h5eQ0TD4V/wrJ1qtc+s77kDJIBP/fLNsHbfpxCzBmjkR/jR91TsJiSOev4WbkYouuQdU+nptBorpMwOuq2MFlIKbpxlix5bgnVJ1VmcRzYSiB+/WGfuxmdmcTYl48VsBxT5GolO+MV1j3grFDao=
file:
- bmp-1-poster.svg
- bmp-1-poster.png
- bmp-1-poster.pdf
- bmp-2-poster.svg
- bmp-2-poster.png
- bmp-2-poster.pdf
- bmp-3-poster.svg
- bmp-3-poster.png
- bmp-3-poster.pdf
skip_cleanup: true
on:
tags: true
notifications:
webhooks: http://webhook.hakatashi.com/travis
================================================
FILE: README.md
================================================
# The Unicode Map Project [![Build Status][travis-image]][travis-url] [![Greenkeeper badge][greenkeeper-image]][greenkeeper-url]
A bunch of Unicode characters in a poster, on a [Hilbert curve](https://en.wikipedia.org/wiki/Hilbert_curve).
[travis-image]: https://travis-ci.org/hakatashi/unicode-map.svg?branch=master
[travis-url]: https://travis-ci.org/hakatashi/unicode-map
[greenkeeper-image]: https://badges.greenkeeper.io/hakatashi/unicode-map.svg
[greenkeeper-url]: https://greenkeeper.io/

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