GithubHelp home page GithubHelp logo

jahewson / sfntly Goto Github PK

View Code? Open in Web Editor NEW
1.0 2.0 1.0 52.12 MB

Fork of Google's sfntly with bug fixes

Home Page: https://code.google.com/p/sfntly/

C++ 46.48% C 0.04% Python 0.79% Java 52.44% CMake 0.24%

sfntly's Introduction

Build Status

What is sfntly?

sfntly is a Java and C++ library for using, editing, and creating sfnt container based fonts (e.g. OpenType, TrueType). This library was initially created by Google's Font Team and the C++ port was done by the Chrome team. It has been made open source.

The basic features of sfntly are the reading, editing, and writing of an sfnt container font. Fonts that use an sfnt container include OpenType, TrueType, AAT/GX, and Graphite. sfntly isn't itself a tool that is usable by an end user - it is a library that allows software developers to build tools that manipulate fonts in ways that haven't been easily accessible to most developers. The sfntly library is available in Java with a partial C++ port. However, we have included some font tools that are built on top of sfntly: a font subsetter, font dumper, a font linter, some compression utilities.

The uses of sfntly are really anything that you can think of that involves reading and/or editing fonts. Right now, the Java version is the core library used to power Google's Web Fonts project. There it is used for all font manipulation - to read font data, to pull apart fonts, and to then reassemble them before they are streamed out to a user. Portions of the font that are not needed - specific glyph ranges or features - are stripped using sfntly to minimize the size of the streamed font. The C++ port is used somewhat similarly within Chrome to subset fonts for insertion into a PDF for viewing or printing. Though the features stripped in the font are different in Chrome than in Web Fonts because the end use is different.

Using sfntly you can read and extract any of the tables in a font. The tables are the individual data structures within the font for each of the features and functionality: glyph outlines, character maps, kerning, meta data, etc. If you look over the OpenType and TrueType specs, you will see a number of categories of tables. sfntly currently supports all of the required tables, the TrueType outline tables, bitmap glyph tables, and a couple of the other miscellaneous tables. This level of support provides for many of the needs developers have related to the informational reading of font data. It also covers a lot of the editing needs.

sfntly's People

Contributors

jahewson avatar

Stargazers

Krister Kari avatar

Watchers

 avatar Krister Kari avatar

Forkers

zhuixinjian

sfntly's Issues

The sfnt version gets overwritten

For a Font.Builder created with newFontBuilder, the version of the sfnt container gets overwritten with the 1.0 version, which indicates that the font is a TTF file. This prevents even basic manipulation of CFF fonts.

Renumbering subsetter should support more cmap formats

See Issue 37 on Google Code. This one was opened by me.

The renumbering subsetter only reads format 4 cmaps. This is a limitation in computeMapping in the RenumberingCMapTableSubsetter.

Currently there is only a builder for format 4 cmaps, so I'd expect sfntly to support all 16-bit cmaps and just write them out as format 4, yet it doesn't. It should also honour the Subsetter's cmapId() list.

For 32-bit cmaps a format 12 builder is needed.

Exception in thread "main" java.lang.NullPointerException

java -jar ~/Coding/sfntly/java/dist/tools/sfnttool/sfnttool.jar -w -s 'ws' ./NotoSansCJKsc-Light.otf ./noto.otf

Exception in thread "main" java.lang.NullPointerException
at com.google.typography.font.tools.sfnttool.GlyphCoverage.getGlyph(Unknown Source)
at com.google.typography.font.tools.sfnttool.GlyphCoverage.touchGlyph(Unknown Source)
at com.google.typography.font.tools.sfnttool.GlyphCoverage.getGlyphCoverage(Unknown Source)
at com.google.typography.font.tools.sfnttool.SfntTool.subsetFontFile(Unknown Source)
at com.google.typography.font.tools.sfnttool.SfntTool.main(Unknown Source)

java -version

java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

OS X 10.11Beta(15A278b)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.