Welcome, to InsideFont

About InsideFont

InsideFont is an application which provides a peek behind the scenes of font files to anyone interested. The application presents and illustrates the relationships and structures inside of font files, how encoding works and how glyphs (characters) are built up in detail. The application InsideFont is available for Windows and Mac. As InsideFont uses web technologies (SVG) for displaying the numerous graphical information, it's recommended to have a modern web browser installed.

InsideFont uses a font engine (ADi-FontEngine) completely developed by myself. It's 100% platform independent and developed in C++ for optimal performance. It has been optimized for using in PDF software and is integrated in many products of well-known manufacturers. All font formats required in PDF files are supported:

  • PostScript Type1
  • CFF
  • CFF-CID
  • OpenType
  • TrueType
  • TrueType Collections.

Addtionally lots of wrapper formats are recognized e.g. Mac Resourc ‘sfnt’ files.

The ADi-FontEngine is able to analyze large bunches of font files and store relevant information in an internal database. This creates the so-called font cache which allows fast access to required information of any font file without dependency to the system. The font analysis makes use of all skills of modern CPUs by using multithreading to analyze multiple font files at the same time. The reading of an already existing font cache is extremely fast so InsideFont can show all fonts without delay after a restart.

User Manual

Starting with version 1.1.007, InsideFont can open and view individual font files as well as fonts registered in the operating system. This is possible via the program Menu “File” - “Open Font File” (or F3) and “Open System Font” (or F4) or via the buttons in the middle of the program.

Buttons to open up font files
Buttons to open up font files
Button to create a font cache
Button to create a font cache

As mentioned earlier, the font cache is a central object of the ADi-FontEngine, so InsideFont uses it as well. To create a font cache see the program menu “File” - “Create Font-Cache” (or F5) or use the button (see picture on the left).

The font cache is stored in the Users directory, on my machine it's located here:
C:\Users\a.dippe\AppData\Roaming\InsideFont\FontCache\FontCache.fcache

Step 1

Create the font cache by clicking the “Create Font-Cache” button (or F5) and then selecting a folder containing font files. On the first try, the system font folder is displayed here. After all files have been scanned and the list has been updated in the program, all fonts have already been identified and the font cache has been created. The next time the program is started, the font cache is opened immediately.

Step 2

Select a font in the list to preview the font. In the program menu “Pangram Select” the preview of the Pangram's can be made more selective.

Step 3

Use the tabs to get a deeper look at the font.

Tabs for the analysis of individual components
Tabs for the analysis of individual components

The four Font tabs

All Font Files

Turns on the font cache view. All data stored in the font cache is displayed here. These are PDF relevant data and general information for searching and sorting. To explain each column, we strongly recommend the PDF Specification

Font Type
  • CFF
  • PostScript Type1
  • TrueType
  • OpenType with ‘cff’ data block
  • TrueType in an ‘sfnt’ Mac Resource Wrapper
  • OpenType with ‘cff’ data block in an ‘sfnt’ Mac Resource Wrapper
  • TrueType Collection
  • OpenType Collection with ‘cff’ data block

This entry is empty if the file cannot be identified as font

File Path

The file path

Mod. Date

The date of the last modification

The following entries are set for fonts only

Font Index

The index, if the file contains more than one font

Font Name

The main font name

Family Name

The font family name

Alternative Names

Alternative font names, e.g. if several encodings are present

Flags
  • FixedPitch
  • Serif
  • Symbolic
  • Script
  • Nonsymbolic
  • Italic
  • AllCap
  • SmallCap
  • ForceBold
Bounding Box

The Font Bounding Box contains rectangular coordinates surrounding all glyphs

Italic Angle

The angle the glyphs are skewed by

Weight

The font weight, e.g. 400 means Normal and 700 means bold, values from 100 to 900 are allowed

Ascent

Font's upper length

Descent

Font descender

CapHeight

Font caps height

xHeight

Font medium length

StemV

Measure for the thickness of vertical bars in glyphs

Number of Glyphs

Number of charachters in the font

Unicodes

List of all identified Unicodes

CID-Registry

The “Registry” entry in CIDSystemInfo of CID fonts

CID-Ordering

The “Ordering” entry in CIDSystemInfo of CID fonts

CID-Supplement

The “Supplement” entry in CIDSystemInfo of CID fonts

CIDs

A list of all CIDs of a CID font; the CID's meanings depend on the CIDSystemInfo

In the lower area a glyph preview is displayed for a selected font. The displayed texts are called “Pangrams”. Via the menu “Pangram Select” one can select the desired language. (Further information about pangrams).

One Font File

This is a detail view for a selected font. The view differs in dependency of the font type. There are 3 main font types PostScript Type 1, TrueType and CFF.

It might be difficult to understand the relationships here without knowledge about the structure of the previously mentioned font types. Here are some links which might help.

There are mainly three different formatgs to encode outline fonts with, TrueType (OpenType too), CFF (Compact Font Format) and PostScript Type1. The differences are not limited to the inner structure of the font files but even affects the definition of glyphs, i.e. how the vector graphics of glyphs are cretaed.

,
TrueType and OpenType fonts

PDF relevant tables are ‘cmap’, ‘glyf’, ‘head’, ‘hhea’, ‘hmtx’, ‘loca’, ‘maxp’, ‘CFF’, ‘cvt’, ‘fpgm’ and ‘prep’. All encoding information can be found in the ‘cmap’ table. Glyph descriptions are defined in the ‘glyf’ table. If there is a ‘CFF’ table in the font it's propably an OpenType font using CFF outline data to describe its glyphs. Additionally there are TrueType Collections, containers which contain more than one TrueTyp font. The individual fonts are built up like TrueType fonts. InsideFont also analyzes all TrueType-Instructions in the tables ‘fpgm’ and ‘prep’ for syntactically correctness. Occuring errors are displayed.

The setup is defined by many structures, those are much extensive, confusing and often interdependent.

CFF Fonts

Mainly exists as OpenType font files only. In PDF files the OpenType shell can be omitted. Thus CFF fonts can be embedded as native format. The encoding is defined in the “Encoding” and/or “Charset” array and the glyph descriptions in the “CharStrings” Dictionary.

CFF fonts are a compact form of PostScript Type1 fonts. I have to say that I really like the structure of those fonts. As CFF fonts does not have structures with fix byte length' like TrueType fonts, a parser/interpreter is required to be developed to read and interpret the font sequentially. Encoding is here realized either via glyph names or as an CID font with help of CMap files.

PostScript Type1 Fonts

This are PostScript files defining one or more font resources. In principle everything defined in PostScript standard is allowed. In practice only 65% of the PostScript operators are required, one only needs to know which are. The encoding is defined in the “Encoding” array and glyph descriptions in the “CharStrings” dictionary.

Thus for those fonts an entire PostScript parser/interpreter is required which development is a difficult challenge itself.

One Glyph

Glyphs of the selected font can be analyzed individually. The display also includes the dots of single contures, stem hints and binary data.

Buttons to select glyph specific information
Buttons to select glyph specific information

The glyphs (characters) are the stars here. In the left area of the window the selected glyph is displayed. This view can be made more selective via the buttons (see picture above).

Show coordinate origin and dot matrix Show coordinate origin and dot matrix
Show glyph bounding box and glyph width Show glyph bounding box and glyph width
Fill glyph with blue Fill glyph with blue
Stroke glyph in black Stroke glyph in black
Draw conture dots in yellow and bezier helper dots in gray Draw conture dots in yellow and bezier helper dots in gray
Show red crosshairs when a conture dot is selected Show red crosshairs when a conture dot is selected
Zoom to maximum size Zoom to maximum size
Show horinzontal stem hints (CFF and PostScript Type1) Show horinzontal stem hints (CFF and PostScript Type1)*
Show vertical stem hints (CFF and PostScript Type1) Show vertical stem hints (CFF and PostScript Type1)*

General information, like encoding, glyph name, etc. are displayed in the tree control on the right side. Followed by a detailed list of glyph character commands and conture dots. The listing strongly depends on the font type. The binary data forms the closure for TrueType and CFF fonts, these are the raw data. InsideFont also analyzes all TrueType instructions in the glyphs for syntactically correctness. Occuring errors are displayed.

In PostScript Type1 fonts may be native PostScript code is displayed when there is a link to a “OtherSubrs”.

A single glyph is displayed in the lower area. Here the slider control should be used to navigate faster through the existing glyphs as there are fonts with thousands of glyphs.

* Hinting information are available for CFF and PostScript Type fonts only. This is because of they are directly defined in the glyph description. It are hints for a rasterizer to better adjust dominant vertical and horizontal bars in glyphs to the output raster.

Encodings & UNi-Codes

In this tab all information for the identification of glyphs is presenetd. This is widely known as encoding.

Unicodes are the identifiers (ID) of glyphs because the question in a computer surely is: What kinda character is this at all in this font? Unicodes are defined in an internantional standard (ISO 10646). A Unicode is a number assigned to a character as ID. This assignment is done by the ISO (International Standardization Organisation) (The History of Unicodes). The unicodes are devided in ranges depending on their language and writing system. For example there are ranges for “Basic Latin”, “Mathematical Operators” or “Greek and Coptic”.

In this tab the unicodes found for the selected font are presented. There is a graphical overview about the so-called BMP (Basic Multilingual Plane) in the upper left. These are the unicodes from U+0000 up to U+FFFF. The ranges inside of this overview can be clicked to get the corresponding glyphs displayed on the right side.

The glyphs of the selected unicode range are displayed on the right side. While hovering a glyph with the cursor its glyph id and its unicode are displayed. On click the glyph becomes the first glyph in view.

There is a tree control in the lower left which also displays the unicode ranges and their corresponding glyph indices in TrueType and CFF fonts. In PostScript Type1 fonts the glyph name is displayed instead of a glyph index. Is a single unicoded selected it becomes displayed as the first glyph in the right view.

There is a link “Show Summary Text” in “About” menu. If it get activated a text control is displayed below which contains the unicode information in a copyable form. The link has a similar effect on the first tab “All Font Files”.

CMap files

For the very first time, InsideFont version 1.1.007 provides the posibility to view and analyze information from CMap files, used in PDF environment to define translation tables for character codes to glyphs. Syntactically issues as well as conformity issues are found and displayed in correspondig colors.

The CMap format origins from Adobe and is used there for encoding purposes in PDF environment. These are e.g. translation tables for character codes to CIDs or character codes to unicode for example. Every time you install the Acrobat Reader, CMap files are installed as well. Internally CMap files are programmed in PostScript code. Because they can contain lots of confusing information InsideFont got the possibility to analyze them. InsideFont also delivers CMap files. Such encoding files are located in the directories etc\Encoding and etc\CMap.

The “Open CMap File” button (or F9) opens a CMap file and presents selected data. If one selects an opened CMap file in the list a special tab “One CMap File” is created.

Button to open a detail page of a single CMap file
Button to open a detail page of a single CMap file

„One CMap File“

Special tab “One CMap file” for analyzis of CMap files
Special tab “One CMap file” for analyzis of CMap files

It's worth a look on this tab to get a more detailed view. Here all code points are displayed in a table. Because of the mass of information a resorting of the table may help for a better overview.

CMap files are required for mapping or translation tables to assign a specific value to a byte code of variable length. In PDF, mappings of character codes to CIDs and to unicodes are required. To limit the amount of possible character codes it's required to setup valid ranges. This is defined by code space ranges.

Because CMap files have to be PostScript files first, they are checked by the PostScript interpreter of the ADi-FontEngine. In the information, displayed after the opening, issues are highlighted with colours.

Definition

Byte Code

One or more Bytes. In PDF encodings up to 6 Bytes occur as a single Byte code depending on the encoding used.

CID

Is a number (0 – 65535 ) assigned to a specified character. Those characters are defined in character collections.

Value

The value assigned to the byte code. This can be a unicode or a CID for example.

usecmap

A PostScript command which displays another CMap file at this position.

Codespace Range

Defines the range of allowed byte values in the byte code. Those define a range of values for each byte in a byte code.

Code Range

Byte codes can be defined in a CMap file either as single code points or in a group.

The following problems may occur and are reported:

  • (Cirtical) Codespace range error e.g. if a byte code is used which doesn't lay in a defined code space range.
  • (Critical) A byte code appears multiple times in the mapping data
  • (Critical) usecmap cannot be resolved
  • (Critical) PostScript error
  • (Info) The same value can be created by several byte codes
  • (Info) One byte code has been overridden by a usecmap

The color codes and their meaning:

  • Duplicate byte code is defined as single code
  • Duplicate byte code is defined in a code range
  • Duplicate value is defined as single code
  • Duplicate value is defined in a code range
  • Byte code has been overridden by usecmap and defined as single code
  • Byte code has been overridden by usecmap and defined in a code range
  • Byte code has been defined only once as single code
  • Byte code has been defined only once in a code range

Additionally all byte codes which are allowed in the code space ranges but don't have a mapping code are displayed.

ADi-FontEngine

The ADi-FontEngine is a library developed in C++ (static or dynamic, 32 or 64 bit) for analyzis and manipulation of fonts be it as file or as stream e.g. from a PDF file. It's optimized for PDF programs.

The highlights

  • C++ development for best performance
  • Consists of only 41 source code files (1.81 MB) with an average of 850 lines of code incl. PostScript parser/interpreter
  • The ADi-FontEngine does not contain or use license law protected software
  • Engine.Highlights.LI04.
  • 32 and 64 bit code implemented
  • Integrated font cache. This font cache is a compact, high performance, extendable and flexible font database
  • Available as source code
  • Integrated new PostScript engine, no GhostScript or something similar.
  • CMap file support. CMap is an Adobe PostScript format to store encoding information.
  • Optimized for the use in PDF environment (parsers, validators, manipulators, creators, …)
  • Font formats: TrueType, CFF, OpenType, PostScript Type1, Mac ‘sfnt’ Format Wrapper, …
  • Complete CID font support incl. PostScript Type1 CID fonts
  • Supports all predefined Adobe CJK encodings
  • Create, manipulate and repair of font streams
  • Supports Adobe standard PostScript glyph names
  • Creation of a formattable font and glyph dump
  • Receiving of glyph outline information by using cubic bezier curves
  • Calculating the width and bounding box of a single glyph
  • Requesting available encoding and unicode information of all glyphs of a font
  • Create an SVG file for a glyph
  • Stores fonts for direct embedding in PDF files
  • Support for PDF PostScript function
  • Doxygen Documentation

Possibilities of manipulation

  • Creation of complete new TrueType or CFF fonts
  • Lossless conversion of PostScript Type1 fonts to CFF fonts
  • Creation of a subset font (reduces the amount of glyphs to a subset)
  • Repair of glyph width information
  • Change of the font name
  • Conversion of TrueType and CFF fonts into a CID-Font
  • Adding glyphs to font streams

Download InsideFont

InsideFont does not require an installer. Just download the zip file, unpack it in any directory (best one you can find again easily) and run InsodeFont.exe. If you don't need InsideFont anymore it's enough to delete the InsideFont.exe.

If your using a Windows 64 bit operating system it's recommended to also use the 64 bit version of InsideFont.