齊伋體 - typeface from Ming Dynasty woodblock printed books

LingDong-, updated 🕥 2022-12-30 19:38:32

齊伋體 qiji-font

Qiji-font (齊伋體) is:

  • A Ming typeface;
  • Extracted from Ming Dynasty woodblock printed books (凌閔刻本);
  • Using semi-automatic computer vision and OCR;
  • Open source;
  • A work in progress;
  • Named in honour of 閔齊伋, 16th century printer;
  • Intended to be used with wenyan-lang, the Classical Chinese programming language.

📢 聲明:敝字體近日頗見流傳於網絡,然皆訛作“‘凌’东齐伋体”。鄙人名令東,字體名齊伋;強欲冠後以前者,亦以“令東齊伋體”為宜,望周知。🤦‍♂️

Try it out online!

Netlify Status

Download

Progress

| Unique Glyphs | Covered Characters | Books Scanned | |---|---|---| | 4569 | 5916* | 李長吉歌詩 / 淮南鴻烈解 |

* Simplified forms fall back to traditional forms, more common traditional variants fall back to less common variant forms.

Workflow

Step I: Download high resolution PDFs (from shuge.org) and split pages into images.

Step II: Manually lay a grid on top of each page to generate bounding boxes for characters (potentially replacable by an automatic corner-detection algorithm).

Step III: Generate a low-poly mask for each character on the grid, and save the thumbnails (using OpenCV). First, red channel is subtracted from the grayscale, in order to clean the annotations printed in red ink. Next, the image is thresholded and fed into contour-tracing algorithm. A metric is then used to discard shapes that are unlikely to be part of the character in interest. (This step does not produce the final glyph, only a quick-and-dirty extraction for intermediate processing.)

Step IV: Feed each thumbnail one by one into neural-net Chinese OCR to recognize the characters (currently using chineseocr/darknet-ocr, low detection rate, mediocre accuracy, very slow on CPU, looking for better alternatives).

Step V: Manually judge output of OCR: pick the best-looking instance of a given character, and flag incorrectly recognized characters.

Step VI: For the final character set, automatically generate fine raster rendering of each character. Each character is placed at its "visual" center by cumulatively counting pixels from left and right, as well as top and bottom, so that the "weight" of the character is on the centerlines, as opposed to centering the bounding box. Two thresholding methods are used, the global threshold is dilated and acts as a mask to the adaptive threshold, thus preserving details while blocking out surrounding boogers.

Step VII: Raster-to-vector tracing software potrace is used to convert the raster rendrings into SVG's. FontForge's python library is used to generate the final font file. Done!

As the number of characters grow, the above procedure is going to be less and less efficient, since new, previously unseen characters obtainable from each book processed are going to be rarer and rarer. An alternative method which involves clicking only on unseen characters to pick them out is under construction.

Known Issues

  • Character sizes are sometimes inconsistent. Undergoing manual tweaking.

Development

Requirements:

  • Python 3
  • OpenCV Python (pip3 install opencv-python)
  • FontForge Python library (included in brew install fontforge)
  • Chinese OCR (e.g. chineseocr/darknet-ocr)
  • Raster-to-vector tracer (e.g. potrace)

The main code is contained in /workflow, and corresponds to the steps described above. Documentation for the code is yet to be done (soon), so feel free to inquire if interested. As you might have noticed, there is a ton of work involved in making a Chinese font, so contribution is very much welcome :)

Charset

Sheet of all unique glyphs sorted by unicode entry point, click to enlarge. (this is lossy JPEG, for full PNG, check here, for SVG, run node workflow/make_sheet.js)

Issues

Bump flat and release-it

opened on 2022-12-30 19:38:31 by dependabot[bot]

Removes flat. It's no longer used after updating ancestor dependency release-it. These dependencies need to be updated together.

Removes flat

Updates release-it from 12.4.3 to 15.6.0

Release notes

Sourced from release-it's releases.

Release 15.6.0

  • Fix specs for #966 (39a318b)
  • Move space (quickfix) (cfae247)
  • fix: use spec formdata (#958) (c21e6b6)
  • Fix npm.isCollaborator() on npm v9 (#966) (3bd405a)
  • feat(git): added option to use --exclude option on git describe (#963) (2b484bf)

Release 15.5.1

  • Update dependencies (aa89cbd)
  • Prompt for npm OTP in --only-version (fixes #948) (ff626d1)
  • Remove unused export/function (331b0de)
  • Add knip + config (ee99f63)

Release 15.5.0

  • Update dependencies (5d035be)
  • Add npm.versionArgs option (5efc57f)

Release 15.4.3

  • Update dependencies (67da5d9)
  • Update got to 12.5.1 (#943) (a9c8c34)

Release 15.4.2

  • Update dependencies (97095d5)
  • Defer dry run bail out in asset globbing (to include the warning in dry runs) (bf6ccc8)
  • Housekeeping for Actions (feff2eb)

Release 15.4.1

  • Handle file paths and dots in git urls (055a4ff)
  • Update dependencies (including git-url-parse) (1851650)

Release 15.4.0

  • Add npm.name to config.context and extend context for tagName (closes #933) (627763f)

Release 15.3.0

  • Add new features to docs (e2101ed)
  • Add tests for branchName in tag name (a6f6eff)
  • Update dependencies (ae9ccb9)
  • add branchName for template (#897) (9aa9a5d)
  • add new --changelog option (#912) (5798a7a)

Release 15.2.0

  • Update dependencies (b78eb1e)
  • Add package.json to exports (acc66f7)
  • Fixes loading scoped plugins to ensure name is preserved (#926) (145fc71)
  • Add workaround for Windows by removing drive letter from git url (#924) (ce3a726)
  • Enable manual triggers and disable tag triggers in test pipeline (b830876)
  • Fix plugin links (b7cd505)

Release 15.1.4

  • Migrate to git-url-parse v12 (41aad00)

... (truncated)

Changelog

Sourced from release-it's changelog.

Changelog

This document lists breaking changes for each major release.

See the GitHub Releases page for detailed changelogs: https://github.com/release-it/release-it/releases

v15 (2022-04-30)

  • Removed support for Node.js v10 and v12.
  • Removed support for GitLab v12.4 and lower.
  • Removed anonymous metrics (and the option to disable it).
  • Programmatic usage and plugins only through ES Module syntax (import)

Use release-it v14 in legacy environments.

v14 (2020-09-03)

  • Removed global property from plugins. Use this.config[key] instead.
  • Removed deprecated npm.access option. Set this in package.json instead.

v13 (2020-03-07)

  • Dropped support for Node v8
  • Dropped support for GitLab v11.6 and lower.
  • Deprecated scripts are removed (in favor of hooks).
  • Removed deprecated --non-interactive (-n) argument. Use --ci instead.
  • Removed old %s and [REV_RANGE] syntax in command substitutions. Use ${version} and ${latestTag} instead.

v12 (2019-05-03)

  • The --follow-tags argument for git push has been moved to the default configuration. This is only a breaking change if git.pushArgs was not empty (it was empty by default).

v11

  • The custom conventional-changelog increment (e.g. "increment": "conventional:angular") with additional script configuration is replaced with a plugin. Please see conventional changelog how to use this plugin.
  • The pkgFiles option has been removed. If there's a need to bump other files than what npm version bumps, it should be (part of) a plugin.
  • By default, the latest version was derived from the latest Git tag. From v11, if the repo has a package.json then that version is used instead. The use option has been removed. Also see latest version.
  • scripts.changelog has been moved to git.changelog

v10

  • Dropped support for Node v6

... (truncated)

Commits


Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/LingDong-/qiji-font/network/alerts).

Bump qs from 6.5.2 to 6.5.3

opened on 2022-12-10 17:32:35 by dependabot[bot]

Bumps qs from 6.5.2 to 6.5.3.

Changelog

Sourced from qs's changelog.

6.5.3

  • [Fix] parse: ignore __proto__ keys (#428)
  • [Fix] utils.merge: avoid a crash with a null target and a truthy non-array source
  • [Fix] correctly parse nested arrays
  • [Fix] stringify: fix a crash with strictNullHandling and a custom filter/serializeDate (#279)
  • [Fix] utils: merge: fix crash when source is a truthy primitive & no options are provided
  • [Fix] when parseArrays is false, properly handle keys ending in []
  • [Fix] fix for an impossible situation: when the formatter is called with a non-string value
  • [Fix] utils.merge: avoid a crash with a null target and an array source
  • [Refactor] utils: reduce observable [[Get]]s
  • [Refactor] use cached Array.isArray
  • [Refactor] stringify: Avoid arr = arr.concat(...), push to the existing instance (#269)
  • [Refactor] parse: only need to reassign the var once
  • [Robustness] stringify: avoid relying on a global undefined (#427)
  • [readme] remove travis badge; add github actions/codecov badges; update URLs
  • [Docs] Clean up license text so it’s properly detected as BSD-3-Clause
  • [Docs] Clarify the need for "arrayLimit" option
  • [meta] fix README.md (#399)
  • [meta] add FUNDING.yml
  • [actions] backport actions from main
  • [Tests] always use String(x) over x.toString()
  • [Tests] remove nonexistent tape option
  • [Dev Deps] backport from main
Commits
  • 298bfa5 v6.5.3
  • ed0f5dc [Fix] parse: ignore __proto__ keys (#428)
  • 691e739 [Robustness] stringify: avoid relying on a global undefined (#427)
  • 1072d57 [readme] remove travis badge; add github actions/codecov badges; update URLs
  • 12ac1c4 [meta] fix README.md (#399)
  • 0338716 [actions] backport actions from main
  • 5639c20 Clean up license text so it’s properly detected as BSD-3-Clause
  • 51b8a0b add FUNDING.yml
  • 45f6759 [Fix] fix for an impossible situation: when the formatter is called with a no...
  • f814a7f [Dev Deps] backport from main
  • Additional commits viewable in compare view


Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/LingDong-/qiji-font/network/alerts).

笔划缺失或多出字

opened on 2022-11-06 05:13:34 by toiiggww

多出:珍、詠、振、慮、 缺失:端、周、贱、睦、弊、組、魄、 错字:己、 存疑:異、 git

己 已 巳 是同一个样子 繁体郁 不清楚

opened on 2022-02-28 11:59:03 by kmnlsm

己 已 巳 是同一个样子 繁体郁 不清楚

Bump ajv from 6.11.0 to 6.12.6

opened on 2022-02-13 00:51:40 by dependabot[bot]

Bumps ajv from 6.11.0 to 6.12.6.

Release notes

Sourced from ajv's releases.

v6.12.6

Fix performance issue of "url" format.

v6.12.5

Fix uri scheme validation (@​ChALkeR). Fix boolean schemas with strictKeywords option (#1270)

v6.12.4

Fix: coercion of one-item arrays to scalar that should fail validation (failing example).

v6.12.3

Pass schema object to processCode function Option for strictNumbers (@​issacgerges, #1128) Fixed vulnerability related to untrusted schemas (CVE-2020-15366)

v6.12.2

Removed post-install script

v6.12.1

Docs and dependency updates

v6.12.0

Improved hostname validation (@​sambauers, #1143) Option keywords to add custom keywords (@​franciscomorais, #1137) Types fixes (@​boenrobot, @​MattiAstedrone) Docs:

Commits
  • fe59143 6.12.6
  • d580d3e Merge pull request #1298 from ajv-validator/fix-url
  • fd36389 fix: regular expression for "url" format
  • 490e34c docs: link to v7-beta branch
  • 9cd93a1 docs: note about v7 in readme
  • 877d286 Merge pull request #1262 from b4h0-c4t/refactor-opt-object-type
  • f1c8e45 6.12.5
  • 764035e Merge branch 'ChALkeR-chalker/fix-comma'
  • 3798160 Merge branch 'chalker/fix-comma' of git://github.com/ChALkeR/ajv into ChALkeR...
  • a3c7eba Merge branch 'refactor-opt-object-type' of github.com:b4h0-c4t/ajv into refac...
  • Additional commits viewable in compare view


Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/LingDong-/qiji-font/network/alerts).

Bump node-fetch from 2.6.0 to 2.6.7

opened on 2022-01-22 10:33:59 by dependabot[bot]

Bumps node-fetch from 2.6.0 to 2.6.7.

Release notes

Sourced from node-fetch's releases.

v2.6.7

Security patch release

Recommended to upgrade, to not leak sensitive cookie and authentication header information to 3th party host while a redirect occurred

What's Changed

Full Changelog: https://github.com/node-fetch/node-fetch/compare/v2.6.6...v2.6.7

v2.6.6

What's Changed

Full Changelog: https://github.com/node-fetch/node-fetch/compare/v2.6.5...v2.6.6

v2.6.2

fixed main path in package.json

v2.6.1

This is an important security release. It is strongly recommended to update as soon as possible.

See CHANGELOG for details.

Changelog

Sourced from node-fetch's changelog.

Changelog

All notable changes will be recorded here.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

What's Changed

New Contributors

Full Changelog: https://github.com/node-fetch/node-fetch/compare/v3.1.0...v3.1.2

3.1.0

What's Changed

... (truncated)

Commits
  • 1ef4b56 backport of #1449 (#1453)
  • 8fe5c4e 2.x: Specify encoding as an optional peer dependency in package.json (#1310)
  • f56b0c6 fix(URL): prefer built in URL version when available and fallback to whatwg (...
  • b5417ae fix: import whatwg-url in a way compatible with ESM Node (#1303)
  • 18193c5 fix v2.6.3 that did not sending query params (#1301)
  • ace7536 fix: properly encode url with unicode characters (#1291)
  • 152214c Fix(package.json): Corrected main file path in package.json (#1274)
  • b5e2e41 update version number
  • 2358a6c Honor the size option after following a redirect and revert data uri support
  • 8c197f8 docs: Fix typos and grammatical errors in README.md (#686)
  • Additional commits viewable in compare view
Maintainer changes

This version was pushed to npm by endless, a new releaser for node-fetch since your current version.


Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/LingDong-/qiji-font/network/alerts).

Releases

0.0.4 2021-08-21 23:08:36

  • qiji.ttf/woff2 The core glyphs.
  • qiji-fallback.ttf/woff2 Fallback glyphs covering unicode entry point 0x4e00 - 0x9feb. Generated by adding noise and distortion to a digital font, simulating woodblock printed quality. Based on Source Han Serif, see their SIL license.
  • qiji-combo.ttf/woff2 Core and fallback combined in one font file, covering 0x4e00 - 0x9feb plus punctuations, for convenience.

What's New

Snip20210821_1

v0.0.3 2021-08-17 23:25:22

  • qiji.ttf/woff2 The core glyphs.
  • qiji-fallback.ttf/woff2 Fallback glyphs covering unicode entry point 0x4e00 - 0x9feb. Generated by adding noise and distortion to a digital font, simulating woodblock printed quality. Based on Source Han Serif, see their SIL license.
  • qiji-combo.ttf/woff2 Core and fallback combined in one font file, covering 0x4e00 - 0x9feb plus punctuations, for convenience.

What's New

Fixed wrong mappings and added variant mappings suggested by @Hulenkius and @Lottin0113 (Thanks!!), see below:

Snip20210817_3

v0.0.2 2020-08-08 22:09:33

  • qiji.ttf/woff2 The 5916 core glyphs.
  • qiji-fallback.ttf/woff2 Fallback glyphs covering unicode entry point 0x4e00 - 0x9feb. Generated by adding noise and distortion to a digital font, simulating woodblock printed quality. Based on Source Han Serif, see their SIL license.
  • qiji-combo.ttf/woff2 Core and fallback combined in one font file, covering 0x4e00 - 0x9feb plus punctuations, for convenience.

What's New

  • Following errors from v0.0.1 are now fixed:

字 | 宇 𠾱 | 替 霏 | 霑 刊 | 可 剌 | 刺 勑 | 𤍂 卬 | 卭 啓 | 啟 啟 | 啓 怂 | 怱 斡 | 榦

v0.0.1 2020-02-08 18:38:11

  • qiji.ttf/woff2 The 5916 core glyphs.
  • qiji-fallback.ttf/woff2 Fallback glyphs covering unicode entry point 0x4e00 - 0x9feb. Generated by adding noise and distortion to a digital font, simulating woodblock printed quality. Based on Source Han Serif, see their SIL license.
  • qiji-combo.ttf/woff2 Core and fallback combined in one font file, covering 0x4e00 - 0x9feb plus punctuations, for convenience.

font typography chinese woodcutting classical-chinese typeface computer-vision