mirror of
https://github.com/QL-Win/QuickLook.git
synced 2025-09-14 20:29:07 +00:00
116 lines
4.1 KiB
C#
116 lines
4.1 KiB
C#
//Apache2, 2018, Apache/PDFBox Authors ( https://github.com/apache/pdfbox)
|
||
//
|
||
//
|
||
//Apache PDFBox
|
||
//Copyright 2014 The Apache Software Foundation
|
||
|
||
//This product includes software developed at
|
||
//The Apache Software Foundation(http://www.apache.org/).
|
||
|
||
//Based on source code originally developed in the PDFBox and
|
||
//FontBox projects.
|
||
|
||
//Copyright (c) 2002-2007, www.pdfbox.org
|
||
|
||
//Based on source code originally developed in the PaDaF project.
|
||
//Copyright (c) 2010 Atos Worldline SAS
|
||
|
||
//Includes the Adobe Glyph List
|
||
//Copyright 1997, 1998, 2002, 2007, 2010 Adobe Systems Incorporated.
|
||
|
||
//Includes the Zapf Dingbats Glyph List
|
||
//Copyright 2002, 2010 Adobe Systems Incorporated.
|
||
|
||
//Includes OSXAdapter
|
||
//Copyright (C) 2003-2007 Apple, Inc., All Rights Reserved
|
||
|
||
//----------------
|
||
//ccf1 spec from http://wwwimages.adobe.com/www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5176.CFF.pdf
|
||
|
||
//------------------------------------------------------------------
|
||
//Apache2, 2018-present, WinterDev
|
||
|
||
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.IO;
|
||
using System.Text;
|
||
|
||
using Typography.OpenFont.CFF;
|
||
|
||
namespace Typography.OpenFont.Tables
|
||
{
|
||
|
||
//from https://docs.microsoft.com/en-us/typography/opentype/spec/cff
|
||
//This table contains a Compact Font Format font representation (also known as a PostScript Type 1, or CIDFont)
|
||
//and is structured according to
|
||
//Adobe Technical Note #5176: “The Compact Font Format Specification,” (https://wwwimages2.adobe.com/content/dam/acom/en/devnet/font/pdfs/5176.CFF.pdf)
|
||
//and
|
||
//Adobe Technical Note #5177: “Type 2 Charstring Format.” (https://wwwimages2.adobe.com/content/dam/acom/en/devnet/font/pdfs/5177.Type2.pdf)
|
||
|
||
|
||
//...
|
||
// ... glyph data is accessed through the CharStrings INDEX of the CFF table.
|
||
|
||
//...
|
||
//The CFF Top DICT must specify a CharstringType value of 2.
|
||
//The numGlyphs field in the 'maxp' table must be the same as the number of entries in the CFF's CharStrings INDEX.
|
||
//The OpenType font glyph index is the same as the CFF glyph index for all glyphs in the font.
|
||
|
||
//Note that, in an OpenType font collection file, a single 'CFF ' table can be shared across multiple fonts;
|
||
//names used by applications must be those provided in the 'name' table, not the Name INDEX entry.
|
||
//The CFF Top DICT must specify a CharstringType value of 2.
|
||
//The numGlyphs field in the 'maxp' table must be the same as the number of entries in the CFF’s CharStrings INDEX.
|
||
//The OpenType font glyph index is the same as the CFF glyph index for all glyphs in the font.
|
||
|
||
class CFFTable : TableEntry
|
||
{
|
||
public const string _N = "CFF ";//4 chars, left 1 blank whitespace
|
||
public override string Name => _N;
|
||
//
|
||
|
||
Cff1FontSet _cff1FontSet;
|
||
//
|
||
internal Cff1FontSet Cff1FontSet => _cff1FontSet;
|
||
protected override void ReadContentFrom(BinaryReader reader)
|
||
{
|
||
long startAt = reader.BaseStream.Position;
|
||
//
|
||
//
|
||
//Table 8 Header Format
|
||
//Type Name Description
|
||
//Card8 major Format major version(starting at 1)
|
||
//Card8 minor Format minor version(starting at 0)
|
||
//Card8 hdrSize Header size(bytes)
|
||
//OffSize offSize Absolute offset(0) size
|
||
byte[] header = reader.ReadBytes(4);
|
||
byte major = header[0];
|
||
byte minor = header[1];
|
||
byte hdrSize = header[2];
|
||
byte offSize = header[3];
|
||
////---------
|
||
//name index
|
||
|
||
switch (major)
|
||
{
|
||
default: throw new OpenFontNotSupportedException();
|
||
case 1:
|
||
{
|
||
Cff1Parser cff1 = new Cff1Parser();
|
||
cff1.ParseAfterHeader(startAt, reader);
|
||
_cff1FontSet = cff1.ResultCff1FontSet;
|
||
}
|
||
break;
|
||
case 2:
|
||
{
|
||
Cff2Parser cff2 = new Cff2Parser();
|
||
cff2.ParseAfterHeader(reader);
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
|
||
} |