Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 11 additions & 6 deletions lib/src/otf/cff/charset.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
part of '../table/cff.dart';
import 'dart:typed_data';

const _range1Size = 3;
import 'package:icon_font/src/common/binary_codable.dart';
import 'package:icon_font/src/utils/constants.dart';
import 'package:icon_font/src/utils/extensions.dart';
import 'package:icon_font/src/utils/logger.dart';

abstract class CharsetEntry implements BinaryCodable {
const CharsetEntry({required this.format});
Expand Down Expand Up @@ -42,7 +45,7 @@ class CharsetEntryFormat1 extends CharsetEntry {

for (var i = 0; i < glyphCount - 1;) {
final range = Range1.fromByteData(
byteData: byteData.sublistView(offset, _range1Size),
byteData: byteData.sublistView(offset, Range1.range1Size),
);

rangeList.add(range);
Expand Down Expand Up @@ -94,13 +97,13 @@ class CharsetEntryFormat1 extends CharsetEntry {

for (var i = 0; i < rangeList.length; i++) {
rangeList[i].encodeToBinary(
byteData.sublistView(1 + i * _range1Size, _range1Size),
byteData.sublistView(1 + i * Range1.range1Size, Range1.range1Size),
);
}
}

@override
int get size => 1 + rangeList.length * _range1Size;
int get size => 1 + rangeList.length * Range1.range1Size;
}

class Range1 implements BinaryCodable {
Expand All @@ -110,6 +113,8 @@ class Range1 implements BinaryCodable {
return Range1(sId: byteData.getUint16(0), nLeft: byteData.getUint8(2));
}

static const range1Size = 3;

final int sId;
final int nLeft;

Expand All @@ -121,5 +126,5 @@ class Range1 implements BinaryCodable {
}

@override
int get size => _range1Size;
int get size => range1Size;
}
2 changes: 2 additions & 0 deletions lib/src/otf/otf.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import 'package:icon_font/src/common/calculatable_offsets.dart';
import 'package:icon_font/src/common/generic_glyph.dart';
import 'package:icon_font/src/common/outline.dart';
import 'package:icon_font/src/otf/table/all.dart';
import 'package:icon_font/src/otf/table/cff1.dart';
import 'package:icon_font/src/otf/table/cff2.dart';
import 'package:icon_font/src/utils/constants.dart';
import 'package:icon_font/src/utils/exceptions.dart';
import 'package:icon_font/src/utils/extensions.dart';
Expand Down
22 changes: 3 additions & 19 deletions lib/src/otf/table/cff.dart
Original file line number Diff line number Diff line change
@@ -1,29 +1,13 @@
import 'dart:typed_data';

import 'package:icon_font/src/common/binary_codable.dart';
import 'package:icon_font/src/common/calculatable_offsets.dart';
import 'package:icon_font/src/common/generic_glyph.dart';
import 'package:icon_font/src/otf/cff/char_string.dart';
import 'package:icon_font/src/otf/cff/char_string_operator.dart' as cs_op;
import 'package:icon_font/src/otf/cff/char_string_optimizer.dart';
import 'package:icon_font/src/otf/cff/dict.dart';
import 'package:icon_font/src/otf/cff/dict_operator.dart' as op;
import 'package:icon_font/src/otf/cff/index.dart';
import 'package:icon_font/src/otf/cff/operand.dart';
import 'package:icon_font/src/otf/cff/variations.dart';
import 'package:icon_font/src/otf/table/abstract.dart';
import 'package:icon_font/src/otf/table/head.dart';
import 'package:icon_font/src/otf/table/hmtx.dart';
import 'package:icon_font/src/otf/table/name.dart';
import 'package:icon_font/src/otf/table/cff1.dart';
import 'package:icon_font/src/otf/table/cff2.dart';
import 'package:icon_font/src/otf/table/table_record_entry.dart';
import 'package:icon_font/src/utils/constants.dart';
import 'package:icon_font/src/utils/extensions.dart';
import 'package:icon_font/src/utils/logger.dart';

part '../cff/charset.dart';
part 'cff1.dart';
part 'cff2.dart';

abstract class CFFTable extends FontTable {
CFFTable.fromTableRecordEntry(super.entry) : super.fromTableRecordEntry();

Expand All @@ -47,7 +31,7 @@ abstract class CFFTable extends FontTable {
bool get isCFF1 => this is CFF1Table;
}

void _calculateEntryOffsets({
void calculateEntryOffsets({
required List<CFFDictEntry> entryList,
required List<int> offsetList,
int? operandIndex,
Expand Down
28 changes: 24 additions & 4 deletions lib/src/otf/table/cff1.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,27 @@
part of 'cff.dart';

// NOTE: local subrs, encodings are omitted

import 'dart:typed_data';

import 'package:icon_font/src/common/binary_codable.dart';
import 'package:icon_font/src/common/calculatable_offsets.dart';
import 'package:icon_font/src/common/generic_glyph.dart';
import 'package:icon_font/src/otf/cff/char_string.dart';
import 'package:icon_font/src/otf/cff/char_string_operator.dart' as cs_op;
import 'package:icon_font/src/otf/cff/char_string_optimizer.dart';
import 'package:icon_font/src/otf/cff/charset.dart';
import 'package:icon_font/src/otf/cff/dict.dart';
import 'package:icon_font/src/otf/cff/dict_operator.dart' as op;
import 'package:icon_font/src/otf/cff/index.dart';
import 'package:icon_font/src/otf/cff/operand.dart';
import 'package:icon_font/src/otf/table/cff.dart';
import 'package:icon_font/src/otf/table/cff2.dart';
import 'package:icon_font/src/otf/table/head.dart';
import 'package:icon_font/src/otf/table/hmtx.dart';
import 'package:icon_font/src/otf/table/name.dart';
import 'package:icon_font/src/otf/table/table_record_entry.dart';
import 'package:icon_font/src/utils/constants.dart';
import 'package:icon_font/src/utils/extensions.dart';

class CFF1TableHeader implements BinaryCodable {
CFF1TableHeader({
required this.majorVersion,
Expand Down Expand Up @@ -69,7 +89,7 @@ class CFF1Table extends CFFTable implements CalculatableOffsets {
var fixedOffset = entry.offset;

final header = CFF1TableHeader.fromByteData(
byteData.sublistView(fixedOffset, _cff2HeaderSize),
byteData.sublistView(fixedOffset, CFF2TableHeader.cff2HeaderSize),
);
fixedOffset += header.size;

Expand Down Expand Up @@ -385,7 +405,7 @@ class CFF1Table extends CFFTable implements CalculatableOffsets {

final entryList = [charsetEntry, charStringsEntry, privateEntry];

_calculateEntryOffsets(
calculateEntryOffsets(
entryList: entryList,
offsetList: offsetList,
operandIndexList: [0, 0, 1],
Expand Down
32 changes: 23 additions & 9 deletions lib/src/otf/table/cff2.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
part of 'cff.dart';

const _cff2HeaderSize = 5;
import 'dart:typed_data';

import 'package:icon_font/src/common/binary_codable.dart';
import 'package:icon_font/src/common/calculatable_offsets.dart';
import 'package:icon_font/src/otf/cff/dict.dart';
import 'package:icon_font/src/otf/cff/dict_operator.dart' as op;
import 'package:icon_font/src/otf/cff/index.dart';
import 'package:icon_font/src/otf/cff/operand.dart';
import 'package:icon_font/src/otf/cff/variations.dart';
import 'package:icon_font/src/otf/table/cff.dart';
import 'package:icon_font/src/otf/table/table_record_entry.dart';
import 'package:icon_font/src/utils/extensions.dart';

class CFF2TableHeader implements BinaryCodable {
CFF2TableHeader({
Expand All @@ -22,7 +31,7 @@ class CFF2TableHeader implements BinaryCodable {
factory CFF2TableHeader.create() => CFF2TableHeader(
majorVersion: 0x0002,
minorVersion: 0,
headerSize: _cff2HeaderSize,
headerSize: cff2HeaderSize,
topDictLength: null,
);

Expand All @@ -31,6 +40,8 @@ class CFF2TableHeader implements BinaryCodable {
final int headerSize;
int? topDictLength;

static const cff2HeaderSize = 5;

@override
void encodeToBinary(ByteData byteData) {
byteData
Expand All @@ -41,7 +52,7 @@ class CFF2TableHeader implements BinaryCodable {
}

@override
int get size => _cff2HeaderSize;
int get size => cff2HeaderSize;
}

class CFF2Table extends CFFTable implements CalculatableOffsets {
Expand All @@ -65,9 +76,12 @@ class CFF2Table extends CFFTable implements CalculatableOffsets {
var fixedOffset = entry.offset;

final header = CFF2TableHeader.fromByteData(
byteData: byteData.sublistView(fixedOffset, _cff2HeaderSize),
byteData: byteData.sublistView(
fixedOffset,
CFF2TableHeader.cff2HeaderSize,
),
);
fixedOffset += _cff2HeaderSize;
fixedOffset += CFF2TableHeader.cff2HeaderSize;

final topDict = CFFDict.fromByteData(
byteData.sublistView(fixedOffset, header.topDictLength!),
Expand Down Expand Up @@ -232,7 +246,7 @@ class CFF2Table extends CFFTable implements CalculatableOffsets {

final entryList = [?vstoreEntry, charStringsEntry, fdArrayEntry];

_calculateEntryOffsets(
calculateEntryOffsets(
entryList: entryList,
offsetList: offsetList,
operandIndex: 0,
Expand Down Expand Up @@ -280,7 +294,7 @@ class CFF2Table extends CFFTable implements CalculatableOffsets {
);
}

_calculateEntryOffsets(
calculateEntryOffsets(
entryList: [privateEntry],
offsetList: [fontDictOffset],
operandIndex: 1,
Expand Down