Accent positioning in Type1 seac glyphs

In `display/canvas.js` the accent offsets must be multiplied by `fontSize` to make the offsets large enough. Another problem is in `core/type1_parser.js` when the Type1 command `seac` is handled. There is an error in the Adobe Type1 spec. See chapter 6 in Type1 Font Format Supplement, which provides an errata: The arguments of `seac` specify the offset of the left side bearing (LSB) points, not the offset of origins. This can be fixed in `core/type1_parser.js` by adding the difference of the LSB values.
This commit is contained in:
Jani Pehkonen 2020-08-23 20:48:10 +03:00
parent 7df8aa34a5
commit e7febbf0f7
2 changed files with 6 additions and 2 deletions

View File

@ -232,7 +232,9 @@ var Type1CharString = (function Type1CharStringClosure() {
// seac is like type 2's special endchar but it doesn't use the // seac is like type 2's special endchar but it doesn't use the
// first argument asb, so remove it. // first argument asb, so remove it.
if (seacAnalysisEnabled) { if (seacAnalysisEnabled) {
const asb = this.stack[this.stack.length - 5];
this.seac = this.stack.splice(-4, 4); this.seac = this.stack.splice(-4, 4);
this.seac[0] += this.lsb - asb;
error = this.executeCommand(0, COMMAND_MAP.endchar); error = this.executeCommand(0, COMMAND_MAP.endchar);
} else { } else {
error = this.executeCommand(4, COMMAND_MAP.endchar); error = this.executeCommand(4, COMMAND_MAP.endchar);

View File

@ -1798,8 +1798,10 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
} else { } else {
this.paintChar(character, scaledX, scaledY, patternTransform); this.paintChar(character, scaledX, scaledY, patternTransform);
if (accent) { if (accent) {
scaledAccentX = scaledX + accent.offset.x / fontSizeScale; scaledAccentX =
scaledAccentY = scaledY - accent.offset.y / fontSizeScale; scaledX + (fontSize * accent.offset.x) / fontSizeScale;
scaledAccentY =
scaledY - (fontSize * accent.offset.y) / fontSizeScale;
this.paintChar( this.paintChar(
accent.fontChar, accent.fontChar,
scaledAccentX, scaledAccentX,