fontconv 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -10
- package/esm/{fontconv/cli.js → cli.js} +9 -4
- package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/assert/assert.js +1 -0
- package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/assert/assertion_error.js +1 -0
- package/{script/deps/deno.land/std@0.221.0 → esm/deps/deno.land/std@0.224.0}/path/mod.d.ts +2 -2
- package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/mod.js +2 -2
- package/{script/deps/deno.land/std@0.221.0 → esm/deps/deno.land/std@0.224.0}/path/parse.d.ts +1 -0
- package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/parse.d.ts +1 -0
- package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/parse.d.ts +1 -0
- package/esm/ligature.d.ts +6 -0
- package/esm/ligature.js +72 -0
- package/esm/{fontconv/mod.d.ts → mod.d.ts} +3 -0
- package/esm/{fontconv/mod.js → mod.js} +113 -29
- package/package.json +7 -7
- package/script/{fontconv/cli.js → cli.js} +9 -4
- package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/assert/assert.js +1 -0
- package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/assert/assertion_error.js +1 -0
- package/{esm/deps/deno.land/std@0.221.0 → script/deps/deno.land/std@0.224.0}/path/mod.d.ts +2 -2
- package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/mod.js +2 -2
- package/{esm/deps/deno.land/std@0.221.0 → script/deps/deno.land/std@0.224.0}/path/parse.d.ts +1 -0
- package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/parse.d.ts +1 -0
- package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/parse.d.ts +1 -0
- package/script/ligature.d.ts +6 -0
- package/script/ligature.js +77 -0
- package/script/{fontconv/mod.d.ts → mod.d.ts} +3 -0
- package/script/{fontconv/mod.js → mod.js} +117 -34
- package/esm/ttf2svg/mod.d.ts +0 -9
- package/esm/ttf2svg/mod.js +0 -167
- package/script/ttf2svg/mod.d.ts +0 -9
- package/script/ttf2svg/mod.js +0 -204
- /package/esm/{fontconv/cli.d.ts → cli.d.ts} +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/assert/assert.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/assert/assertion_error.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/assert_path.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/assert_path.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/basename.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/basename.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/common.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/common.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/constants.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/constants.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/dirname.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/dirname.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/format.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/format.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/from_file_url.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/from_file_url.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/glob_to_reg_exp.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/glob_to_reg_exp.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/normalize.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/normalize.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/normalize_string.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/normalize_string.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/relative.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/relative.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/strip_trailing_separators.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/strip_trailing_separators.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/to_file_url.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/to_file_url.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_interface.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_interface.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_os.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_os.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/basename.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/basename.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/common.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/common.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/constants.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/constants.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/dirname.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/dirname.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/extname.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/extname.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/format.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/format.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/from_file_url.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/from_file_url.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/glob_to_regexp.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/glob_to_regexp.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/is_absolute.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/is_absolute.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/is_glob.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/is_glob.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/join.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/join.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/join_globs.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/join_globs.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/normalize.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/normalize.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/normalize_glob.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/normalize_glob.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/parse.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/_util.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/_util.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/basename.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/basename.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/common.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/common.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/constants.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/constants.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/dirname.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/dirname.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/extname.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/extname.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/format.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/format.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/from_file_url.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/from_file_url.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/glob_to_regexp.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/glob_to_regexp.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/is_absolute.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/is_absolute.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/is_glob.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/is_glob.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/join.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/join.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/join_globs.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/join_globs.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/mod.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/mod.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/normalize.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/normalize.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/normalize_glob.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/normalize_glob.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/parse.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/relative.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/relative.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/resolve.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/resolve.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/to_file_url.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/to_file_url.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/to_namespaced_path.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/to_namespaced_path.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/relative.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/relative.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/resolve.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/resolve.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/to_file_url.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/to_file_url.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/to_namespaced_path.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/to_namespaced_path.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/_util.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/_util.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/basename.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/basename.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/common.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/common.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/constants.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/constants.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/dirname.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/dirname.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/extname.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/extname.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/format.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/format.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/from_file_url.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/from_file_url.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/glob_to_regexp.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/glob_to_regexp.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/is_absolute.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/is_absolute.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/is_glob.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/is_glob.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/join.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/join.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/join_globs.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/join_globs.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/mod.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/mod.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/normalize.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/normalize.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/normalize_glob.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/normalize_glob.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/parse.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/relative.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/relative.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/resolve.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/resolve.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/to_file_url.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/to_file_url.js +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/to_namespaced_path.d.ts +0 -0
- /package/esm/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/to_namespaced_path.js +0 -0
- /package/esm/{fontconv/test.d.ts → test.d.ts} +0 -0
- /package/script/{fontconv/cli.d.ts → cli.d.ts} +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/assert/assert.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/assert/assertion_error.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/assert_path.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/assert_path.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/basename.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/basename.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/common.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/common.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/constants.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/constants.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/dirname.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/dirname.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/format.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/format.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/from_file_url.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/from_file_url.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/glob_to_reg_exp.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/glob_to_reg_exp.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/normalize.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/normalize.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/normalize_string.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/normalize_string.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/relative.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/relative.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/strip_trailing_separators.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/strip_trailing_separators.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/to_file_url.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_common/to_file_url.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_interface.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_interface.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_os.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/_os.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/basename.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/basename.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/common.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/common.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/constants.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/constants.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/dirname.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/dirname.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/extname.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/extname.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/format.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/format.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/from_file_url.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/from_file_url.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/glob_to_regexp.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/glob_to_regexp.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/is_absolute.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/is_absolute.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/is_glob.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/is_glob.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/join.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/join.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/join_globs.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/join_globs.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/normalize.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/normalize.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/normalize_glob.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/normalize_glob.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/parse.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/_util.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/_util.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/basename.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/basename.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/common.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/common.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/constants.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/constants.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/dirname.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/dirname.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/extname.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/extname.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/format.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/format.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/from_file_url.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/from_file_url.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/glob_to_regexp.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/glob_to_regexp.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/is_absolute.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/is_absolute.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/is_glob.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/is_glob.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/join.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/join.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/join_globs.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/join_globs.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/mod.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/mod.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/normalize.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/normalize.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/normalize_glob.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/normalize_glob.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/parse.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/relative.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/relative.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/resolve.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/resolve.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/to_file_url.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/to_file_url.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/to_namespaced_path.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/posix/to_namespaced_path.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/relative.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/relative.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/resolve.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/resolve.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/to_file_url.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/to_file_url.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/to_namespaced_path.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/to_namespaced_path.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/_util.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/_util.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/basename.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/basename.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/common.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/common.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/constants.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/constants.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/dirname.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/dirname.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/extname.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/extname.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/format.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/format.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/from_file_url.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/from_file_url.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/glob_to_regexp.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/glob_to_regexp.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/is_absolute.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/is_absolute.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/is_glob.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/is_glob.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/join.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/join.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/join_globs.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/join_globs.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/mod.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/mod.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/normalize.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/normalize.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/normalize_glob.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/normalize_glob.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/parse.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/relative.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/relative.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/resolve.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/resolve.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/to_file_url.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/to_file_url.js +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/to_namespaced_path.d.ts +0 -0
- /package/script/deps/deno.land/{std@0.221.0 → std@0.224.0}/path/windows/to_namespaced_path.js +0 -0
- /package/script/{fontconv/test.d.ts → test.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ Convert and compress fonts (.ttf, .otf, .eot, .svg, .woff, .woff2).
|
|
|
7
7
|
### Deno
|
|
8
8
|
|
|
9
9
|
```
|
|
10
|
-
deno install -fr --allow-read --allow-write --name fontconv \
|
|
10
|
+
deno install -fr --allow-read --allow-write --name fontconv -g \
|
|
11
11
|
https://raw.githubusercontent.com/marmooo/fontconv/main/cli.js
|
|
12
12
|
```
|
|
13
13
|
|
|
@@ -36,16 +36,21 @@ Usage: fontconv [options] <input> <output>
|
|
|
36
36
|
Convert and compress fonts (.ttf, .otf, .eot, .svg, .woff, .woff2).
|
|
37
37
|
|
|
38
38
|
Arguments:
|
|
39
|
-
input
|
|
40
|
-
output
|
|
39
|
+
input Path of input font file
|
|
40
|
+
output Path of output font file
|
|
41
41
|
|
|
42
42
|
Options:
|
|
43
|
-
-V, --version
|
|
44
|
-
--text <string>
|
|
45
|
-
--text-file <path>
|
|
46
|
-
--code <string>
|
|
47
|
-
--code-file <path>
|
|
48
|
-
|
|
43
|
+
-V, --version output the version number
|
|
44
|
+
--text <string> characters to compress
|
|
45
|
+
--text-file <path> Path of line separated character file to compress
|
|
46
|
+
--code <string> comma separated codepoints to compress
|
|
47
|
+
--code-file <path> Path of line separated codepoint file to compress
|
|
48
|
+
--name <string> comma separated glyph names to compress
|
|
49
|
+
--name-file <path> Path of line separated glyph name file to compress
|
|
50
|
+
--ligature <string> comma separated ligatures to compress
|
|
51
|
+
--ligature-file <path> Path of line separated ligature file to compress
|
|
52
|
+
--remove-ligatures remove ligatures associated with the glyphs
|
|
53
|
+
-h, --help display help for command
|
|
49
54
|
```
|
|
50
55
|
|
|
51
56
|
### Examples
|
|
@@ -53,10 +58,14 @@ Options:
|
|
|
53
58
|
```
|
|
54
59
|
fontconv in.ttf out.woff
|
|
55
60
|
fontconv in.woff2 out.otf
|
|
56
|
-
fontconv --text-file charaters.lst in.ttf out.woff2
|
|
57
61
|
fontconv --text abcdef in.ttf out.woff2
|
|
62
|
+
fontconv --text-file charaters.lst in.ttf out.woff2
|
|
58
63
|
fontconv --code 0x61,98 in.ttf out.woff2
|
|
59
64
|
fontconv --code-file codepoints.lst in.ttf out.woff2
|
|
65
|
+
fontconv --name alarm.box in.otf out.woff
|
|
66
|
+
fontconv --name-file names.lst in.otf out.woff
|
|
67
|
+
fontconv --ligature home,menu --remove-ligatures in.otf out.woff
|
|
68
|
+
fontconv --ligature-file ligatures.lst in.otf out.woff
|
|
60
69
|
```
|
|
61
70
|
|
|
62
71
|
`codepoints.lst`
|
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import * as dntShim from "
|
|
3
|
-
import { extname } from "
|
|
2
|
+
import * as dntShim from "./_dnt.shims.js";
|
|
3
|
+
import { extname } from "./deps/deno.land/std@0.224.0/path/mod.js";
|
|
4
4
|
import { Command } from "commander";
|
|
5
5
|
import { convert } from "./mod.js";
|
|
6
6
|
const program = new Command();
|
|
7
7
|
program
|
|
8
8
|
.name("fontconv")
|
|
9
9
|
.description("Convert and compress fonts (.ttf, .otf, .eot, .svg, .woff, .woff2).")
|
|
10
|
-
.version("0.0.
|
|
10
|
+
.version("0.0.3");
|
|
11
11
|
program
|
|
12
12
|
.argument("<input>", "Path of input font file")
|
|
13
13
|
.argument("<output>", "Path of output font file")
|
|
14
14
|
.option("--text <string>", "characters to compress")
|
|
15
15
|
.option("--text-file <path>", "Path of line separated character file to compress")
|
|
16
16
|
.option("--code <string>", "comma separated codepoints to compress")
|
|
17
|
-
.option("--code-file <path>", "Path of line separated codepoint file to compress")
|
|
17
|
+
.option("--code-file <path>", "Path of line separated codepoint file to compress")
|
|
18
|
+
.option("--name <string>", "comma separated glyph names to compress")
|
|
19
|
+
.option("--name-file <path>", "Path of line separated glyph name file to compress")
|
|
20
|
+
.option("--ligature <string>", "comma separated ligatures to compress")
|
|
21
|
+
.option("--ligature-file <path>", "Path of line separated ligature file to compress")
|
|
22
|
+
.option("--remove-ligatures", "remove ligatures associated with the glyphs");
|
|
18
23
|
program.parse();
|
|
19
24
|
const inPath = program.args[0];
|
|
20
25
|
const outPath = program.args[1];
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
*/
|
|
31
31
|
import * as _windows from "./windows/mod.js";
|
|
32
32
|
import * as _posix from "./posix/mod.js";
|
|
33
|
-
/** @deprecated
|
|
33
|
+
/** @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/path/windows/mod.ts} instead. */
|
|
34
34
|
export declare const win32: typeof _windows;
|
|
35
|
-
/** @deprecated
|
|
35
|
+
/** @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/path/posix/mod.ts} instead. */
|
|
36
36
|
export declare const posix: typeof _posix;
|
|
37
37
|
export * from "./basename.js";
|
|
38
38
|
export * from "./constants.js";
|
|
@@ -34,9 +34,9 @@
|
|
|
34
34
|
*/
|
|
35
35
|
import * as _windows from "./windows/mod.js";
|
|
36
36
|
import * as _posix from "./posix/mod.js";
|
|
37
|
-
/** @deprecated
|
|
37
|
+
/** @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/path/windows/mod.ts} instead. */
|
|
38
38
|
export const win32 = _windows;
|
|
39
|
-
/** @deprecated
|
|
39
|
+
/** @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/path/posix/mod.ts} instead. */
|
|
40
40
|
export const posix = _posix;
|
|
41
41
|
export * from "./basename.js";
|
|
42
42
|
export * from "./constants.js";
|
package/esm/ligature.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
function* parseCoverageFormat1(subtable, reverseGlyphIndexMap) {
|
|
2
|
+
if (!subtable.ligatureSets)
|
|
3
|
+
return;
|
|
4
|
+
for (let i = 0; i < subtable.ligatureSets.length; i++) {
|
|
5
|
+
for (const ligature of subtable.ligatureSets[i]) {
|
|
6
|
+
const initialIndex = subtable.coverage.glyphs[i];
|
|
7
|
+
const coverage1 = reverseGlyphIndexMap[initialIndex];
|
|
8
|
+
const components = ligature.components.map((component) => {
|
|
9
|
+
const codePoint = reverseGlyphIndexMap[component];
|
|
10
|
+
return String.fromCharCode(codePoint);
|
|
11
|
+
});
|
|
12
|
+
const sub = [initialIndex, ...ligature.components];
|
|
13
|
+
const name = String.fromCharCode(coverage1) + components.join("");
|
|
14
|
+
yield { name, sub, by: ligature.ligGlyph };
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function* parseCoverageFormat2(subtable, reverseGlyphIndexMap) {
|
|
19
|
+
if (!subtable.ligatureSets)
|
|
20
|
+
return;
|
|
21
|
+
const coverage2 = [];
|
|
22
|
+
subtable.coverage.ranges.forEach((coverage) => {
|
|
23
|
+
for (let c = coverage.start; c <= coverage.end; c++) {
|
|
24
|
+
coverage2.push(c);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
for (let i = 0; i < subtable.ligatureSets.length; i++) {
|
|
28
|
+
for (const ligature of subtable.ligatureSets[i]) {
|
|
29
|
+
const components = ligature.components.map((component) => {
|
|
30
|
+
const codePoint = reverseGlyphIndexMap[component];
|
|
31
|
+
return String.fromCharCode(codePoint);
|
|
32
|
+
});
|
|
33
|
+
const coverage = reverseGlyphIndexMap[coverage2[i]];
|
|
34
|
+
const name = String.fromCharCode(coverage) + components.join("");
|
|
35
|
+
const sub = [coverage2[i], ...ligature.components];
|
|
36
|
+
yield { name, sub, by: ligature.ligGlyph };
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// https://github.com/opentypejs/opentype.js/issues/384
|
|
41
|
+
// https://jsfiddle.net/nvbajtmo/
|
|
42
|
+
export function* parseLigatures(font) {
|
|
43
|
+
const gsub = font.tables.gsub;
|
|
44
|
+
if (!gsub)
|
|
45
|
+
return;
|
|
46
|
+
const glyphIndexMap = font.tables.cmap.glyphIndexMap;
|
|
47
|
+
const reverseGlyphIndexMap = {};
|
|
48
|
+
Object.keys(glyphIndexMap).forEach((codePoint) => {
|
|
49
|
+
const value = glyphIndexMap[codePoint];
|
|
50
|
+
reverseGlyphIndexMap[value] = codePoint;
|
|
51
|
+
});
|
|
52
|
+
for (const lookup of gsub.lookups) {
|
|
53
|
+
for (const subtable of lookup.subtables) {
|
|
54
|
+
const coverage = subtable.coverage;
|
|
55
|
+
if (!coverage)
|
|
56
|
+
continue;
|
|
57
|
+
if (coverage.format === 1) {
|
|
58
|
+
yield* parseCoverageFormat1(subtable, reverseGlyphIndexMap);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
yield* parseCoverageFormat2(subtable, reverseGlyphIndexMap);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export function getLigatureMap(font, key) {
|
|
67
|
+
const map = {};
|
|
68
|
+
for (const ligature of parseLigatures(font)) {
|
|
69
|
+
map[ligature[key]] = ligature;
|
|
70
|
+
}
|
|
71
|
+
return map;
|
|
72
|
+
}
|
|
@@ -6,5 +6,8 @@ export function isWOFF(uint8Array: any): boolean;
|
|
|
6
6
|
export function isWOFF2(uint8Array: any): boolean;
|
|
7
7
|
export function otf2ttf(otf: any): any;
|
|
8
8
|
export function getFont(fontContent: any): Promise<any>;
|
|
9
|
+
export function getNameMap(font: any): {};
|
|
9
10
|
export function filterGlyphs(font: any, options: any): any;
|
|
10
11
|
export function convert(fontContent: any, format: any, options: any): Promise<any>;
|
|
12
|
+
export { getLigatureMap };
|
|
13
|
+
import { getLigatureMap } from "./ligature.js";
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import * as dntShim from "
|
|
1
|
+
import * as dntShim from "./_dnt.shims.js";
|
|
2
|
+
import { getLigatureMap } from "./ligature.js";
|
|
2
3
|
import { compress, decompress } from "wawoff2";
|
|
3
4
|
import { Font, parse } from "opentype.js";
|
|
4
|
-
import { font2svgFont, ttf2svgFont } from "
|
|
5
|
+
import { font2svgFont, ttf2svgFont } from "@marmooo/ttf2svg";
|
|
5
6
|
import svg2ttf from "svg2ttf";
|
|
6
7
|
import ttf2eot from "ttf2eot";
|
|
7
8
|
import ttf2woff from "ttf2woff";
|
|
8
9
|
// import ttf2woff2 from "npm:ttf2woff2@5.0.0";
|
|
9
10
|
// import * as fonteditor from "npm:fonteditor-core@2.3.3"; // glyph names are lost
|
|
11
|
+
export { getLigatureMap };
|
|
10
12
|
export function isOTF(uint8Array) {
|
|
11
13
|
return uint8Array[0] === 0x4F &&
|
|
12
14
|
uint8Array[1] === 0x54 &&
|
|
@@ -55,27 +57,6 @@ export function otf2ttf(otf) {
|
|
|
55
57
|
// const ttfBuffer = new fonteditor.default.TTFWriter().write(ttfObj);
|
|
56
58
|
// return new Uint8Array(ttfBuffer);
|
|
57
59
|
// }
|
|
58
|
-
function getGlyphString(options) {
|
|
59
|
-
if (options.textFile) {
|
|
60
|
-
const text = dntShim.Deno.readTextFileSync(options.textFile);
|
|
61
|
-
return text.trimEnd().replace(/\n/g, "");
|
|
62
|
-
}
|
|
63
|
-
else if (options.codeFile) {
|
|
64
|
-
const text = dntShim.Deno.readTextFileSync(options.codeFile);
|
|
65
|
-
return text.trimEnd().split("\n")
|
|
66
|
-
.map((line) => String.fromCodePoint(Number(line))).join("");
|
|
67
|
-
}
|
|
68
|
-
else if (options.text) {
|
|
69
|
-
return options.text;
|
|
70
|
-
}
|
|
71
|
-
else if (options.code) {
|
|
72
|
-
return options.code.split(",")
|
|
73
|
-
.map((code) => String.fromCodePoint(Number(code))).join("");
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
return undefined;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
60
|
export async function getFont(fontContent) {
|
|
80
61
|
if (isSVG(fontContent)) {
|
|
81
62
|
const ttf = svg2ttf(fontContent);
|
|
@@ -117,18 +98,70 @@ async function convertFormat(font, format) {
|
|
|
117
98
|
throw new Error(`${format} is not a supported format.`);
|
|
118
99
|
}
|
|
119
100
|
}
|
|
101
|
+
export function getNameMap(font) {
|
|
102
|
+
const map = {};
|
|
103
|
+
for (const glyph of Object.values(font.glyphs.glyphs)) {
|
|
104
|
+
map[glyph.name] = glyph.index;
|
|
105
|
+
}
|
|
106
|
+
return map;
|
|
107
|
+
}
|
|
120
108
|
export function filterGlyphs(font, options) {
|
|
121
|
-
|
|
122
|
-
|
|
109
|
+
if (options.textFile) {
|
|
110
|
+
const text = dntShim.Deno.readTextFileSync(options.textFile);
|
|
111
|
+
const glyphString = text.trimEnd().replace(/\n/g, "");
|
|
123
112
|
return font.stringToGlyphs(glyphString);
|
|
124
113
|
}
|
|
114
|
+
else if (options.codeFile) {
|
|
115
|
+
const text = dntShim.Deno.readTextFileSync(options.codeFile);
|
|
116
|
+
const glyphString = text.trimEnd().split("\n")
|
|
117
|
+
.map((line) => String.fromCodePoint(Number(line))).join("");
|
|
118
|
+
return font.stringToGlyphs(glyphString);
|
|
119
|
+
}
|
|
120
|
+
else if (options.nameFile) {
|
|
121
|
+
const nameMap = getNameMap(font);
|
|
122
|
+
const text = dntShim.Deno.readTextFileSync(options.nameFile);
|
|
123
|
+
return text.trimEnd().split("\n")
|
|
124
|
+
.map((line) => font.glyphs.get(nameMap[line]));
|
|
125
|
+
}
|
|
126
|
+
else if (options.ligatureFile) {
|
|
127
|
+
const ligatureMap = getLigatureMap(font, "name");
|
|
128
|
+
const text = dntShim.Deno.readTextFileSync(options.ligatureFile);
|
|
129
|
+
return text.trimEnd().split("\n")
|
|
130
|
+
.map((line) => font.glyphs.get(ligatureMap[line].by));
|
|
131
|
+
}
|
|
132
|
+
else if (options.text) {
|
|
133
|
+
return font.stringToGlyphs(options.text);
|
|
134
|
+
}
|
|
135
|
+
else if (options.code) {
|
|
136
|
+
const glyphString = options.code.split(",")
|
|
137
|
+
.map((code) => String.fromCodePoint(Number(code))).join("");
|
|
138
|
+
return font.stringToGlyphs(glyphString);
|
|
139
|
+
}
|
|
140
|
+
else if (options.name) {
|
|
141
|
+
const nameMap = getNameMap(font);
|
|
142
|
+
return options.name.split(",")
|
|
143
|
+
.map((line) => font.glyphs.get(nameMap[line]));
|
|
144
|
+
}
|
|
145
|
+
else if (options.ligature) {
|
|
146
|
+
const ligatureMap = getLigatureMap(font, "name");
|
|
147
|
+
return options.ligature.split(",")
|
|
148
|
+
.map((line) => font.glyphs.get(ligatureMap[line].by));
|
|
149
|
+
}
|
|
125
150
|
else {
|
|
126
151
|
return Object.values(font.glyphs.glyphs);
|
|
127
152
|
}
|
|
128
153
|
}
|
|
129
154
|
function createTemporaryFont(font, glyphs) {
|
|
130
155
|
const notdefGlyph = font.glyphs.get(0);
|
|
131
|
-
|
|
156
|
+
notdefGlyph.name = ".notdef";
|
|
157
|
+
// avoid the warning caused by opentype.js below
|
|
158
|
+
// Undefined CHARARRAY encountered and treated as an empty string.
|
|
159
|
+
glyphs.forEach((glyph) => {
|
|
160
|
+
if (!glyph.name) {
|
|
161
|
+
glyph.name = String.fromCharCode(glyph.unicode);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
const tmpFont = new Font({
|
|
132
165
|
familyName: font.names.fontFamily.en,
|
|
133
166
|
styleName: font.names.fontSubfamily.en,
|
|
134
167
|
unitsPerEm: font.unitsPerEm,
|
|
@@ -136,12 +169,63 @@ function createTemporaryFont(font, glyphs) {
|
|
|
136
169
|
descender: font.descender,
|
|
137
170
|
glyphs: [notdefGlyph, ...glyphs],
|
|
138
171
|
});
|
|
139
|
-
|
|
140
|
-
return
|
|
172
|
+
tmpFont.names = font.names;
|
|
173
|
+
return tmpFont;
|
|
174
|
+
}
|
|
175
|
+
function createLigaturesFont(font, glyphs) {
|
|
176
|
+
const ligatureMap = getLigatureMap(font, "by");
|
|
177
|
+
const charSet = new Set();
|
|
178
|
+
for (const glyph of glyphs) {
|
|
179
|
+
const ligature = ligatureMap[glyph.index];
|
|
180
|
+
if (ligature) {
|
|
181
|
+
Array.from(ligature.name).forEach((char) => {
|
|
182
|
+
charSet.add(char);
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
glyphs.forEach((glyph) => {
|
|
187
|
+
const char = String.fromCharCode(glyph.unicode);
|
|
188
|
+
if (charSet.has(char))
|
|
189
|
+
charSet.delete(char);
|
|
190
|
+
});
|
|
191
|
+
const ligatureGlyphs = [];
|
|
192
|
+
charSet.forEach((char) => {
|
|
193
|
+
const unicode = char.codePointAt(0);
|
|
194
|
+
const glyphIndex = font.encoding.cmap.glyphIndexMap[unicode];
|
|
195
|
+
const glyph = font.glyphs.get(glyphIndex);
|
|
196
|
+
ligatureGlyphs.push(glyph);
|
|
197
|
+
});
|
|
198
|
+
const newGlyphs = [...ligatureGlyphs, ...glyphs];
|
|
199
|
+
const tmpFont = createTemporaryFont(font, newGlyphs);
|
|
200
|
+
const charMap = {};
|
|
201
|
+
newGlyphs.forEach((glyph, index) => {
|
|
202
|
+
const char = String.fromCharCode(glyph.unicode);
|
|
203
|
+
charMap[char] = index + 1;
|
|
204
|
+
});
|
|
205
|
+
glyphs.forEach((glyph, i) => {
|
|
206
|
+
const ligature = ligatureMap[glyph.index];
|
|
207
|
+
if (ligature) {
|
|
208
|
+
const sub = Array.from(ligature.name)
|
|
209
|
+
.map((char) => charMap[char]);
|
|
210
|
+
const by = ligatureGlyphs.length + i + 1;
|
|
211
|
+
tmpFont.substitution.addLigature("liga", { sub, by });
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
const otf = tmpFont.toArrayBuffer();
|
|
215
|
+
const newFont = parse(otf);
|
|
216
|
+
return newFont;
|
|
217
|
+
}
|
|
218
|
+
function createFont(font, glyphs, options) {
|
|
219
|
+
if (options.removeLigatures) {
|
|
220
|
+
return createTemporaryFont(font, glyphs);
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
return createLigaturesFont(font, glyphs);
|
|
224
|
+
}
|
|
141
225
|
}
|
|
142
226
|
export async function convert(fontContent, format, options) {
|
|
143
227
|
const font = await getFont(fontContent);
|
|
144
228
|
const glyphs = filterGlyphs(font, options);
|
|
145
|
-
const tempFont =
|
|
229
|
+
const tempFont = createFont(font, glyphs, options);
|
|
146
230
|
return await convertFormat(tempFont, format);
|
|
147
231
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fontconv",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"description": "Convert and compress fonts (.ttf, .otf, .eot, .svg, .woff, .woff2).",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -10,25 +10,25 @@
|
|
|
10
10
|
"bugs": {
|
|
11
11
|
"url": "https://github.com/marmooo/fontconv/issues"
|
|
12
12
|
},
|
|
13
|
-
"main": "./script/
|
|
14
|
-
"module": "./esm/
|
|
13
|
+
"main": "./script/mod.js",
|
|
14
|
+
"module": "./esm/mod.js",
|
|
15
15
|
"exports": {
|
|
16
16
|
".": {
|
|
17
|
-
"import": "./esm/
|
|
18
|
-
"require": "./script/
|
|
17
|
+
"import": "./esm/mod.js",
|
|
18
|
+
"require": "./script/mod.js"
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
22
|
"test": "node test_runner.js"
|
|
23
23
|
},
|
|
24
24
|
"bin": {
|
|
25
|
-
"fontconv": "./esm/
|
|
25
|
+
"fontconv": "./esm/cli.js"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
+
"@marmooo/ttf2svg": "0.2.1",
|
|
28
29
|
"commander": "12.0.0",
|
|
29
30
|
"opentype.js": "1.3.4",
|
|
30
31
|
"svg2ttf": "6.0.3",
|
|
31
|
-
"svgpath": "2.6.0",
|
|
32
32
|
"ttf2eot": "3.1.0",
|
|
33
33
|
"ttf2woff": "3.0.0",
|
|
34
34
|
"wawoff2": "2.0.1",
|
|
@@ -24,22 +24,27 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
24
24
|
return result;
|
|
25
25
|
};
|
|
26
26
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
-
const dntShim = __importStar(require("
|
|
28
|
-
const mod_js_1 = require("
|
|
27
|
+
const dntShim = __importStar(require("./_dnt.shims.js"));
|
|
28
|
+
const mod_js_1 = require("./deps/deno.land/std@0.224.0/path/mod.js");
|
|
29
29
|
const commander_1 = require("commander");
|
|
30
30
|
const mod_js_2 = require("./mod.js");
|
|
31
31
|
const program = new commander_1.Command();
|
|
32
32
|
program
|
|
33
33
|
.name("fontconv")
|
|
34
34
|
.description("Convert and compress fonts (.ttf, .otf, .eot, .svg, .woff, .woff2).")
|
|
35
|
-
.version("0.0.
|
|
35
|
+
.version("0.0.3");
|
|
36
36
|
program
|
|
37
37
|
.argument("<input>", "Path of input font file")
|
|
38
38
|
.argument("<output>", "Path of output font file")
|
|
39
39
|
.option("--text <string>", "characters to compress")
|
|
40
40
|
.option("--text-file <path>", "Path of line separated character file to compress")
|
|
41
41
|
.option("--code <string>", "comma separated codepoints to compress")
|
|
42
|
-
.option("--code-file <path>", "Path of line separated codepoint file to compress")
|
|
42
|
+
.option("--code-file <path>", "Path of line separated codepoint file to compress")
|
|
43
|
+
.option("--name <string>", "comma separated glyph names to compress")
|
|
44
|
+
.option("--name-file <path>", "Path of line separated glyph name file to compress")
|
|
45
|
+
.option("--ligature <string>", "comma separated ligatures to compress")
|
|
46
|
+
.option("--ligature-file <path>", "Path of line separated ligature file to compress")
|
|
47
|
+
.option("--remove-ligatures", "remove ligatures associated with the glyphs");
|
|
43
48
|
program.parse();
|
|
44
49
|
const inPath = program.args[0];
|
|
45
50
|
const outPath = program.args[1];
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.assert = void 0;
|
|
4
4
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
|
5
|
+
// This module is browser compatible.
|
|
5
6
|
const assertion_error_js_1 = require("./assertion_error.js");
|
|
6
7
|
/**
|
|
7
8
|
* Make an assertion, error will be thrown if `expr` does not have truthy value.
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
*/
|
|
31
31
|
import * as _windows from "./windows/mod.js";
|
|
32
32
|
import * as _posix from "./posix/mod.js";
|
|
33
|
-
/** @deprecated
|
|
33
|
+
/** @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/path/windows/mod.ts} instead. */
|
|
34
34
|
export declare const win32: typeof _windows;
|
|
35
|
-
/** @deprecated
|
|
35
|
+
/** @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/path/posix/mod.ts} instead. */
|
|
36
36
|
export declare const posix: typeof _posix;
|
|
37
37
|
export * from "./basename.js";
|
|
38
38
|
export * from "./constants.js";
|
|
@@ -63,9 +63,9 @@ exports.posix = exports.win32 = void 0;
|
|
|
63
63
|
*/
|
|
64
64
|
const _windows = __importStar(require("./windows/mod.js"));
|
|
65
65
|
const _posix = __importStar(require("./posix/mod.js"));
|
|
66
|
-
/** @deprecated
|
|
66
|
+
/** @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/path/windows/mod.ts} instead. */
|
|
67
67
|
exports.win32 = _windows;
|
|
68
|
-
/** @deprecated
|
|
68
|
+
/** @deprecated This will be removed in 1.0.0. Import from {@link https://deno.land/std/path/posix/mod.ts} instead. */
|
|
69
69
|
exports.posix = _posix;
|
|
70
70
|
__exportStar(require("./basename.js"), exports);
|
|
71
71
|
__exportStar(require("./constants.js"), exports);
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLigatureMap = exports.parseLigatures = void 0;
|
|
4
|
+
function* parseCoverageFormat1(subtable, reverseGlyphIndexMap) {
|
|
5
|
+
if (!subtable.ligatureSets)
|
|
6
|
+
return;
|
|
7
|
+
for (let i = 0; i < subtable.ligatureSets.length; i++) {
|
|
8
|
+
for (const ligature of subtable.ligatureSets[i]) {
|
|
9
|
+
const initialIndex = subtable.coverage.glyphs[i];
|
|
10
|
+
const coverage1 = reverseGlyphIndexMap[initialIndex];
|
|
11
|
+
const components = ligature.components.map((component) => {
|
|
12
|
+
const codePoint = reverseGlyphIndexMap[component];
|
|
13
|
+
return String.fromCharCode(codePoint);
|
|
14
|
+
});
|
|
15
|
+
const sub = [initialIndex, ...ligature.components];
|
|
16
|
+
const name = String.fromCharCode(coverage1) + components.join("");
|
|
17
|
+
yield { name, sub, by: ligature.ligGlyph };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function* parseCoverageFormat2(subtable, reverseGlyphIndexMap) {
|
|
22
|
+
if (!subtable.ligatureSets)
|
|
23
|
+
return;
|
|
24
|
+
const coverage2 = [];
|
|
25
|
+
subtable.coverage.ranges.forEach((coverage) => {
|
|
26
|
+
for (let c = coverage.start; c <= coverage.end; c++) {
|
|
27
|
+
coverage2.push(c);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
for (let i = 0; i < subtable.ligatureSets.length; i++) {
|
|
31
|
+
for (const ligature of subtable.ligatureSets[i]) {
|
|
32
|
+
const components = ligature.components.map((component) => {
|
|
33
|
+
const codePoint = reverseGlyphIndexMap[component];
|
|
34
|
+
return String.fromCharCode(codePoint);
|
|
35
|
+
});
|
|
36
|
+
const coverage = reverseGlyphIndexMap[coverage2[i]];
|
|
37
|
+
const name = String.fromCharCode(coverage) + components.join("");
|
|
38
|
+
const sub = [coverage2[i], ...ligature.components];
|
|
39
|
+
yield { name, sub, by: ligature.ligGlyph };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// https://github.com/opentypejs/opentype.js/issues/384
|
|
44
|
+
// https://jsfiddle.net/nvbajtmo/
|
|
45
|
+
function* parseLigatures(font) {
|
|
46
|
+
const gsub = font.tables.gsub;
|
|
47
|
+
if (!gsub)
|
|
48
|
+
return;
|
|
49
|
+
const glyphIndexMap = font.tables.cmap.glyphIndexMap;
|
|
50
|
+
const reverseGlyphIndexMap = {};
|
|
51
|
+
Object.keys(glyphIndexMap).forEach((codePoint) => {
|
|
52
|
+
const value = glyphIndexMap[codePoint];
|
|
53
|
+
reverseGlyphIndexMap[value] = codePoint;
|
|
54
|
+
});
|
|
55
|
+
for (const lookup of gsub.lookups) {
|
|
56
|
+
for (const subtable of lookup.subtables) {
|
|
57
|
+
const coverage = subtable.coverage;
|
|
58
|
+
if (!coverage)
|
|
59
|
+
continue;
|
|
60
|
+
if (coverage.format === 1) {
|
|
61
|
+
yield* parseCoverageFormat1(subtable, reverseGlyphIndexMap);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
yield* parseCoverageFormat2(subtable, reverseGlyphIndexMap);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.parseLigatures = parseLigatures;
|
|
70
|
+
function getLigatureMap(font, key) {
|
|
71
|
+
const map = {};
|
|
72
|
+
for (const ligature of parseLigatures(font)) {
|
|
73
|
+
map[ligature[key]] = ligature;
|
|
74
|
+
}
|
|
75
|
+
return map;
|
|
76
|
+
}
|
|
77
|
+
exports.getLigatureMap = getLigatureMap;
|
|
@@ -6,5 +6,8 @@ export function isWOFF(uint8Array: any): boolean;
|
|
|
6
6
|
export function isWOFF2(uint8Array: any): boolean;
|
|
7
7
|
export function otf2ttf(otf: any): any;
|
|
8
8
|
export function getFont(fontContent: any): Promise<any>;
|
|
9
|
+
export function getNameMap(font: any): {};
|
|
9
10
|
export function filterGlyphs(font: any, options: any): any;
|
|
10
11
|
export function convert(fontContent: any, format: any, options: any): Promise<any>;
|
|
12
|
+
export { getLigatureMap };
|
|
13
|
+
import { getLigatureMap } from "./ligature.js";
|