156
165
(*outputFunc)(outputStream, "/FontInfo 10 dict dup begin\n", 28);
157
166
if (topDict.versionSID != 0) {
158
167
(*outputFunc)(outputStream, "/version (", 10);
159
(*outputFunc)(outputStream, buf, strlen(buf));
168
(*outputFunc)(outputStream, buf2, strlen(buf2));
160
169
(*outputFunc)(outputStream, ") readonly def\n", 15);
162
171
if (topDict.noticeSID != 0) {
163
getString(topDict.noticeSID, buf, &ok);
172
getString(topDict.noticeSID, buf2, &ok);
164
173
(*outputFunc)(outputStream, "/Notice (", 9);
165
(*outputFunc)(outputStream, buf, strlen(buf));
174
(*outputFunc)(outputStream, buf2, strlen(buf2));
166
175
(*outputFunc)(outputStream, ") readonly def\n", 15);
168
177
if (topDict.copyrightSID != 0) {
169
getString(topDict.copyrightSID, buf, &ok);
178
getString(topDict.copyrightSID, buf2, &ok);
170
179
(*outputFunc)(outputStream, "/Copyright (", 12);
171
(*outputFunc)(outputStream, buf, strlen(buf));
180
(*outputFunc)(outputStream, buf2, strlen(buf2));
172
181
(*outputFunc)(outputStream, ") readonly def\n", 15);
174
183
if (topDict.fullNameSID != 0) {
175
getString(topDict.fullNameSID, buf, &ok);
184
getString(topDict.fullNameSID, buf2, &ok);
176
185
(*outputFunc)(outputStream, "/FullName (", 11);
177
(*outputFunc)(outputStream, buf, strlen(buf));
186
(*outputFunc)(outputStream, buf2, strlen(buf2));
178
187
(*outputFunc)(outputStream, ") readonly def\n", 15);
180
189
if (topDict.familyNameSID != 0) {
181
getString(topDict.familyNameSID, buf, &ok);
190
getString(topDict.familyNameSID, buf2, &ok);
182
191
(*outputFunc)(outputStream, "/FamilyName (", 13);
183
(*outputFunc)(outputStream, buf, strlen(buf));
192
(*outputFunc)(outputStream, buf2, strlen(buf2));
184
193
(*outputFunc)(outputStream, ") readonly def\n", 15);
186
195
if (topDict.weightSID != 0) {
187
getString(topDict.weightSID, buf, &ok);
196
getString(topDict.weightSID, buf2, &ok);
188
197
(*outputFunc)(outputStream, "/Weight (", 9);
189
(*outputFunc)(outputStream, buf, strlen(buf));
198
(*outputFunc)(outputStream, buf2, strlen(buf2));
190
199
(*outputFunc)(outputStream, ") readonly def\n", 15);
192
201
if (topDict.isFixedPitch) {
195
204
(*outputFunc)(outputStream, "/isFixedPitch false def\n", 24);
197
sprintf(buf, "/ItalicAngle %g def\n", topDict.italicAngle);
198
(*outputFunc)(outputStream, buf, strlen(buf));
199
sprintf(buf, "/UnderlinePosition %g def\n", topDict.underlinePosition);
200
(*outputFunc)(outputStream, buf, strlen(buf));
201
sprintf(buf, "/UnderlineThickness %g def\n", topDict.underlineThickness);
202
(*outputFunc)(outputStream, buf, strlen(buf));
206
buf = GString::format("/ItalicAngle {0:.4g} def\n", topDict.italicAngle);
207
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
209
buf = GString::format("/UnderlinePosition {0:.4g} def\n",
210
topDict.underlinePosition);
211
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
213
buf = GString::format("/UnderlineThickness {0:.4g} def\n",
214
topDict.underlineThickness);
215
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
203
217
(*outputFunc)(outputStream, "end readonly def\n", 17);
204
218
(*outputFunc)(outputStream, "/FontName /", 11);
205
(*outputFunc)(outputStream, name->getCString(), name->getLength());
219
(*outputFunc)(outputStream, psName, psNameLen);
206
220
(*outputFunc)(outputStream, " def\n", 5);
207
sprintf(buf, "/PaintType %d def\n", topDict.paintType);
208
(*outputFunc)(outputStream, buf, strlen(buf));
221
buf = GString::format("/PaintType {0:d} def\n", topDict.paintType);
222
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
209
224
(*outputFunc)(outputStream, "/FontType 1 def\n", 16);
210
sprintf(buf, "/FontMatrix [%g %g %g %g %g %g] readonly def\n",
211
topDict.fontMatrix[0], topDict.fontMatrix[1], topDict.fontMatrix[2],
212
topDict.fontMatrix[3], topDict.fontMatrix[4], topDict.fontMatrix[5]);
213
(*outputFunc)(outputStream, buf, strlen(buf));
214
sprintf(buf, "/FontBBox [%g %g %g %g] readonly def\n",
215
topDict.fontBBox[0], topDict.fontBBox[1],
216
topDict.fontBBox[2], topDict.fontBBox[3]);
217
(*outputFunc)(outputStream, buf, strlen(buf));
218
sprintf(buf, "/StrokeWidth %g def\n", topDict.strokeWidth);
219
(*outputFunc)(outputStream, buf, strlen(buf));
225
buf = GString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] readonly def\n",
226
topDict.fontMatrix[0], topDict.fontMatrix[1],
227
topDict.fontMatrix[2], topDict.fontMatrix[3],
228
topDict.fontMatrix[4], topDict.fontMatrix[5]);
229
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
231
buf = GString::format("/FontBBox [{0:.4g} {1:.4g} {2:.4g} {3:.4g}] readonly def\n",
232
topDict.fontBBox[0], topDict.fontBBox[1],
233
topDict.fontBBox[2], topDict.fontBBox[3]);
234
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
236
buf = GString::format("/StrokeWidth {0:.4g} def\n", topDict.strokeWidth);
237
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
220
239
if (topDict.uniqueID != 0) {
221
sprintf(buf, "/UniqueID %d def\n", topDict.uniqueID);
222
(*outputFunc)(outputStream, buf, strlen(buf));
240
buf = GString::format("/UniqueID {0:d} def\n", topDict.uniqueID);
241
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
225
245
// write the encoding
261
282
if (privateDicts[0].nBlueValues) {
262
283
eexecWrite(&eb, "/BlueValues [");
263
284
for (i = 0; i < privateDicts[0].nBlueValues; ++i) {
264
sprintf(buf, "%s%d", i > 0 ? " " : "", privateDicts[0].blueValues[i]);
265
eexecWrite(&eb, buf);
285
buf = GString::format("{0:s}{1:d}",
286
i > 0 ? " " : "", privateDicts[0].blueValues[i]);
287
eexecWrite(&eb, buf->getCString());
267
290
eexecWrite(&eb, "] def\n");
269
292
if (privateDicts[0].nOtherBlues) {
270
293
eexecWrite(&eb, "/OtherBlues [");
271
294
for (i = 0; i < privateDicts[0].nOtherBlues; ++i) {
272
sprintf(buf, "%s%d", i > 0 ? " " : "", privateDicts[0].otherBlues[i]);
273
eexecWrite(&eb, buf);
295
buf = GString::format("{0:s}{1:d}",
296
i > 0 ? " " : "", privateDicts[0].otherBlues[i]);
297
eexecWrite(&eb, buf->getCString());
275
300
eexecWrite(&eb, "] def\n");
277
302
if (privateDicts[0].nFamilyBlues) {
278
303
eexecWrite(&eb, "/FamilyBlues [");
279
304
for (i = 0; i < privateDicts[0].nFamilyBlues; ++i) {
280
sprintf(buf, "%s%d", i > 0 ? " " : "", privateDicts[0].familyBlues[i]);
281
eexecWrite(&eb, buf);
305
buf = GString::format("{0:s}{1:d}",
306
i > 0 ? " " : "", privateDicts[0].familyBlues[i]);
307
eexecWrite(&eb, buf->getCString());
283
310
eexecWrite(&eb, "] def\n");
285
312
if (privateDicts[0].nFamilyOtherBlues) {
286
313
eexecWrite(&eb, "/FamilyOtherBlues [");
287
314
for (i = 0; i < privateDicts[0].nFamilyOtherBlues; ++i) {
288
sprintf(buf, "%s%d", i > 0 ? " " : "",
289
privateDicts[0].familyOtherBlues[i]);
290
eexecWrite(&eb, buf);
315
buf = GString::format("{0:s}{1:d}", i > 0 ? " " : "",
316
privateDicts[0].familyOtherBlues[i]);
317
eexecWrite(&eb, buf->getCString());
292
320
eexecWrite(&eb, "] def\n");
294
322
if (privateDicts[0].blueScale != 0.039625) {
295
sprintf(buf, "/BlueScale %g def\n", privateDicts[0].blueScale);
296
eexecWrite(&eb, buf);
323
buf = GString::format("/BlueScale {0:.4g} def\n",
324
privateDicts[0].blueScale);
325
eexecWrite(&eb, buf->getCString());
298
328
if (privateDicts[0].blueShift != 7) {
299
sprintf(buf, "/BlueShift %d def\n", privateDicts[0].blueShift);
300
eexecWrite(&eb, buf);
329
buf = GString::format("/BlueShift {0:d} def\n", privateDicts[0].blueShift);
330
eexecWrite(&eb, buf->getCString());
302
333
if (privateDicts[0].blueFuzz != 1) {
303
sprintf(buf, "/BlueFuzz %d def\n", privateDicts[0].blueFuzz);
304
eexecWrite(&eb, buf);
334
buf = GString::format("/BlueFuzz {0:d} def\n", privateDicts[0].blueFuzz);
335
eexecWrite(&eb, buf->getCString());
306
338
if (privateDicts[0].hasStdHW) {
307
sprintf(buf, "/StdHW [%g] def\n", privateDicts[0].stdHW);
308
eexecWrite(&eb, buf);
339
buf = GString::format("/StdHW [{0:.4g}] def\n", privateDicts[0].stdHW);
340
eexecWrite(&eb, buf->getCString());
310
343
if (privateDicts[0].hasStdVW) {
311
sprintf(buf, "/StdVW [%g] def\n", privateDicts[0].stdVW);
312
eexecWrite(&eb, buf);
344
buf = GString::format("/StdVW [{0:.4g}] def\n", privateDicts[0].stdVW);
345
eexecWrite(&eb, buf->getCString());
314
348
if (privateDicts[0].nStemSnapH) {
315
349
eexecWrite(&eb, "/StemSnapH [");
316
350
for (i = 0; i < privateDicts[0].nStemSnapH; ++i) {
317
sprintf(buf, "%s%g", i > 0 ? " " : "", privateDicts[0].stemSnapH[i]);
318
eexecWrite(&eb, buf);
351
buf = GString::format("{0:s}{1:.4g}",
352
i > 0 ? " " : "", privateDicts[0].stemSnapH[i]);
353
eexecWrite(&eb, buf->getCString());
320
356
eexecWrite(&eb, "] def\n");
322
358
if (privateDicts[0].nStemSnapV) {
323
359
eexecWrite(&eb, "/StemSnapV [");
324
360
for (i = 0; i < privateDicts[0].nStemSnapV; ++i) {
325
sprintf(buf, "%s%g", i > 0 ? " " : "", privateDicts[0].stemSnapV[i]);
326
eexecWrite(&eb, buf);
361
buf = GString::format("{0:s}{1:.4g}",
362
i > 0 ? " " : "", privateDicts[0].stemSnapV[i]);
363
eexecWrite(&eb, buf->getCString());
328
366
eexecWrite(&eb, "] def\n");
330
368
if (privateDicts[0].hasForceBold) {
331
sprintf(buf, "/ForceBold %s def\n",
332
privateDicts[0].forceBold ? "true" : "false");
333
eexecWrite(&eb, buf);
369
buf = GString::format("/ForceBold {0:s} def\n",
370
privateDicts[0].forceBold ? "true" : "false");
371
eexecWrite(&eb, buf->getCString());
335
374
if (privateDicts[0].forceBoldThreshold != 0) {
336
sprintf(buf, "/ForceBoldThreshold %g def\n",
337
privateDicts[0].forceBoldThreshold);
338
eexecWrite(&eb, buf);
375
buf = GString::format("/ForceBoldThreshold {0:.4g} def\n",
376
privateDicts[0].forceBoldThreshold);
377
eexecWrite(&eb, buf->getCString());
340
380
if (privateDicts[0].languageGroup != 0) {
341
sprintf(buf, "/LanguageGroup %d def\n", privateDicts[0].languageGroup);
342
eexecWrite(&eb, buf);
381
buf = GString::format("/LanguageGroup {0:d} def\n",
382
privateDicts[0].languageGroup);
383
eexecWrite(&eb, buf->getCString());
344
386
if (privateDicts[0].expansionFactor != 0.06) {
345
sprintf(buf, "/ExpansionFactor %g def\n", privateDicts[0].expansionFactor);
346
eexecWrite(&eb, buf);
387
buf = GString::format("/ExpansionFactor {0:.4g} def\n",
388
privateDicts[0].expansionFactor);
389
eexecWrite(&eb, buf->getCString());
349
393
// set up subroutines
456
503
(*outputFunc)(outputStream, "/CIDSystemInfo 3 dict dup begin\n", 32);
457
504
if (topDict.registrySID > 0 && topDict.orderingSID > 0) {
459
getString(topDict.registrySID, buf, &ok);
506
getString(topDict.registrySID, buf2, &ok);
461
508
(*outputFunc)(outputStream, " /Registry (", 13);
462
(*outputFunc)(outputStream, buf, strlen(buf));
509
(*outputFunc)(outputStream, buf2, strlen(buf2));
463
510
(*outputFunc)(outputStream, ") def\n", 6);
466
getString(topDict.orderingSID, buf, &ok);
513
getString(topDict.orderingSID, buf2, &ok);
468
515
(*outputFunc)(outputStream, " /Ordering (", 13);
469
(*outputFunc)(outputStream, buf, strlen(buf));
516
(*outputFunc)(outputStream, buf2, strlen(buf2));
470
517
(*outputFunc)(outputStream, ") def\n", 6);
473
520
(*outputFunc)(outputStream, " /Registry (Adobe) def\n", 24);
474
521
(*outputFunc)(outputStream, " /Ordering (Identity) def\n", 27);
476
sprintf(buf, " /Supplement %d def\n", topDict.supplement);
477
(*outputFunc)(outputStream, buf, strlen(buf));
523
buf = GString::format(" /Supplement {0:d} def\n", topDict.supplement);
524
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
478
526
(*outputFunc)(outputStream, "end def\n", 8);
479
527
if (topDict.hasFontMatrix) {
480
sprintf(buf, "/FontMatrix [%g %g %g %g %g %g] def\n",
481
topDict.fontMatrix[0], topDict.fontMatrix[1],
482
topDict.fontMatrix[2], topDict.fontMatrix[3],
483
topDict.fontMatrix[4], topDict.fontMatrix[5]);
484
(*outputFunc)(outputStream, buf, strlen(buf));
528
buf = GString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] def\n",
529
topDict.fontMatrix[0], topDict.fontMatrix[1],
530
topDict.fontMatrix[2], topDict.fontMatrix[3],
531
topDict.fontMatrix[4], topDict.fontMatrix[5]);
532
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
485
534
} else if (privateDicts[0].hasFontMatrix) {
486
535
(*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30);
488
537
(*outputFunc)(outputStream,
489
538
"/FontMatrix [0.001 0 0 0.001 0 0] def\n", 38);
491
sprintf(buf, "/FontBBox [%g %g %g %g] def\n",
492
topDict.fontBBox[0], topDict.fontBBox[1],
493
topDict.fontBBox[2], topDict.fontBBox[3]);
494
(*outputFunc)(outputStream, buf, strlen(buf));
540
buf = GString::format("/FontBBox [{0:.4g} {1:.4g} {2:.4g} {3:.4g}] def\n",
541
topDict.fontBBox[0], topDict.fontBBox[1],
542
topDict.fontBBox[2], topDict.fontBBox[3]);
543
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
495
545
(*outputFunc)(outputStream, "/FontInfo 1 dict dup begin\n", 27);
496
546
(*outputFunc)(outputStream, " /FSType 8 def\n", 16);
497
547
(*outputFunc)(outputStream, "end def\n", 8);
499
549
// CIDFont-specific entries
500
sprintf(buf, "/CIDCount %d def\n", nCIDs);
501
(*outputFunc)(outputStream, buf, strlen(buf));
550
buf = GString::format("/CIDCount {0:d} def\n", nCIDs);
551
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
502
553
(*outputFunc)(outputStream, "/FDBytes 1 def\n", 15);
503
sprintf(buf, "/GDBytes %d def\n", gdBytes);
504
(*outputFunc)(outputStream, buf, strlen(buf));
554
buf = GString::format("/GDBytes {0:d} def\n", gdBytes);
555
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
505
557
(*outputFunc)(outputStream, "/CIDMapOffset 0 def\n", 20);
506
558
if (topDict.paintType != 0) {
507
sprintf(buf, "/PaintType %d def\n", topDict.paintType);
508
(*outputFunc)(outputStream, buf, strlen(buf));
509
sprintf(buf, "/StrokeWidth %g def\n", topDict.strokeWidth);
510
(*outputFunc)(outputStream, buf, strlen(buf));
559
buf = GString::format("/PaintType {0:d} def\n", topDict.paintType);
560
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
562
buf = GString::format("/StrokeWidth {0:.4g} def\n", topDict.strokeWidth);
563
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
514
sprintf(buf, "/FDArray %d array\n", nFDs);
515
(*outputFunc)(outputStream, buf, strlen(buf));
568
buf = GString::format("/FDArray {0:d} array\n", nFDs);
569
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
516
571
for (i = 0; i < nFDs; ++i) {
517
sprintf(buf, "dup %d 10 dict begin\n", i);
518
(*outputFunc)(outputStream, buf, strlen(buf));
572
buf = GString::format("dup {0:d} 10 dict begin\n", i);
573
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
519
575
(*outputFunc)(outputStream, "/FontType 1 def\n", 16);
520
576
if (privateDicts[i].hasFontMatrix) {
521
sprintf(buf, "/FontMatrix [%g %g %g %g %g %g] def\n",
522
privateDicts[i].fontMatrix[0],
523
privateDicts[i].fontMatrix[1],
524
privateDicts[i].fontMatrix[2],
525
privateDicts[i].fontMatrix[3],
526
privateDicts[i].fontMatrix[4],
527
privateDicts[i].fontMatrix[5]);
528
(*outputFunc)(outputStream, buf, strlen(buf));
577
buf = GString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] def\n",
578
privateDicts[i].fontMatrix[0],
579
privateDicts[i].fontMatrix[1],
580
privateDicts[i].fontMatrix[2],
581
privateDicts[i].fontMatrix[3],
582
privateDicts[i].fontMatrix[4],
583
privateDicts[i].fontMatrix[5]);
584
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
530
587
(*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30);
532
sprintf(buf, "/PaintType %d def\n", topDict.paintType);
533
(*outputFunc)(outputStream, buf, strlen(buf));
589
buf = GString::format("/PaintType {0:d} def\n", topDict.paintType);
590
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
534
592
(*outputFunc)(outputStream, "/Private 32 dict begin\n", 23);
535
593
if (privateDicts[i].nBlueValues) {
536
594
(*outputFunc)(outputStream, "/BlueValues [", 13);
537
595
for (j = 0; j < privateDicts[i].nBlueValues; ++j) {
538
sprintf(buf, "%s%d", j > 0 ? " " : "", privateDicts[i].blueValues[j]);
539
(*outputFunc)(outputStream, buf, strlen(buf));
596
buf = GString::format("{0:s}{1:d}",
597
j > 0 ? " " : "", privateDicts[i].blueValues[j]);
598
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
541
601
(*outputFunc)(outputStream, "] def\n", 6);
543
603
if (privateDicts[i].nOtherBlues) {
544
604
(*outputFunc)(outputStream, "/OtherBlues [", 13);
545
605
for (j = 0; j < privateDicts[i].nOtherBlues; ++j) {
546
sprintf(buf, "%s%d", j > 0 ? " " : "", privateDicts[i].otherBlues[j]);
547
(*outputFunc)(outputStream, buf, strlen(buf));
606
buf = GString::format("{0:s}{1:d}",
607
j > 0 ? " " : "", privateDicts[i].otherBlues[j]);
608
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
549
611
(*outputFunc)(outputStream, "] def\n", 6);
551
613
if (privateDicts[i].nFamilyBlues) {
552
614
(*outputFunc)(outputStream, "/FamilyBlues [", 14);
553
615
for (j = 0; j < privateDicts[i].nFamilyBlues; ++j) {
554
sprintf(buf, "%s%d", j > 0 ? " " : "", privateDicts[i].familyBlues[j]);
555
(*outputFunc)(outputStream, buf, strlen(buf));
616
buf = GString::format("{0:s}{1:d}",
618
privateDicts[i].familyBlues[j]);
619
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
557
622
(*outputFunc)(outputStream, "] def\n", 6);
559
624
if (privateDicts[i].nFamilyOtherBlues) {
560
625
(*outputFunc)(outputStream, "/FamilyOtherBlues [", 19);
561
626
for (j = 0; j < privateDicts[i].nFamilyOtherBlues; ++j) {
562
sprintf(buf, "%s%d", j > 0 ? " " : "",
563
privateDicts[i].familyOtherBlues[j]);
564
(*outputFunc)(outputStream, buf, strlen(buf));
627
buf = GString::format("{0:s}{1:d}", j > 0 ? " " : "",
628
privateDicts[i].familyOtherBlues[j]);
629
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
566
632
(*outputFunc)(outputStream, "] def\n", 6);
568
634
if (privateDicts[i].blueScale != 0.039625) {
569
sprintf(buf, "/BlueScale %g def\n", privateDicts[i].blueScale);
570
(*outputFunc)(outputStream, buf, strlen(buf));
635
buf = GString::format("/BlueScale {0:.4g} def\n",
636
privateDicts[i].blueScale);
637
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
572
640
if (privateDicts[i].blueShift != 7) {
573
sprintf(buf, "/BlueShift %d def\n", privateDicts[i].blueShift);
574
(*outputFunc)(outputStream, buf, strlen(buf));
641
buf = GString::format("/BlueShift {0:d} def\n",
642
privateDicts[i].blueShift);
643
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
576
646
if (privateDicts[i].blueFuzz != 1) {
577
sprintf(buf, "/BlueFuzz %d def\n", privateDicts[i].blueFuzz);
578
(*outputFunc)(outputStream, buf, strlen(buf));
647
buf = GString::format("/BlueFuzz {0:d} def\n", privateDicts[i].blueFuzz);
648
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
580
651
if (privateDicts[i].hasStdHW) {
581
sprintf(buf, "/StdHW [%g] def\n", privateDicts[i].stdHW);
582
(*outputFunc)(outputStream, buf, strlen(buf));
652
buf = GString::format("/StdHW [{0:.4g}] def\n", privateDicts[i].stdHW);
653
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
584
656
if (privateDicts[i].hasStdVW) {
585
sprintf(buf, "/StdVW [%g] def\n", privateDicts[i].stdVW);
586
(*outputFunc)(outputStream, buf, strlen(buf));
657
buf = GString::format("/StdVW [{0:.4g}] def\n", privateDicts[i].stdVW);
658
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
588
661
if (privateDicts[i].nStemSnapH) {
589
662
(*outputFunc)(outputStream, "/StemSnapH [", 12);
590
663
for (j = 0; j < privateDicts[i].nStemSnapH; ++j) {
591
sprintf(buf, "%s%g", j > 0 ? " " : "", privateDicts[i].stemSnapH[j]);
592
(*outputFunc)(outputStream, buf, strlen(buf));
664
buf = GString::format("{0:s}{1:.4g}",
665
j > 0 ? " " : "", privateDicts[i].stemSnapH[j]);
666
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
594
669
(*outputFunc)(outputStream, "] def\n", 6);
596
671
if (privateDicts[i].nStemSnapV) {
597
672
(*outputFunc)(outputStream, "/StemSnapV [", 12);
598
673
for (j = 0; j < privateDicts[i].nStemSnapV; ++j) {
599
sprintf(buf, "%s%g", j > 0 ? " " : "", privateDicts[i].stemSnapV[j]);
600
(*outputFunc)(outputStream, buf, strlen(buf));
674
buf = GString::format("{0:s}{1:.4g}",
675
j > 0 ? " " : "", privateDicts[i].stemSnapV[j]);
676
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
602
679
(*outputFunc)(outputStream, "] def\n", 6);
604
681
if (privateDicts[i].hasForceBold) {
605
sprintf(buf, "/ForceBold %s def\n",
606
privateDicts[i].forceBold ? "true" : "false");
607
(*outputFunc)(outputStream, buf, strlen(buf));
682
buf = GString::format("/ForceBold {0:s} def\n",
683
privateDicts[i].forceBold ? "true" : "false");
684
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
609
687
if (privateDicts[i].forceBoldThreshold != 0) {
610
sprintf(buf, "/ForceBoldThreshold %g def\n",
611
privateDicts[i].forceBoldThreshold);
612
(*outputFunc)(outputStream, buf, strlen(buf));
688
buf = GString::format("/ForceBoldThreshold {0:.4g} def\n",
689
privateDicts[i].forceBoldThreshold);
690
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
614
693
if (privateDicts[i].languageGroup != 0) {
615
sprintf(buf, "/LanguageGroup %d def\n", privateDicts[i].languageGroup);
616
(*outputFunc)(outputStream, buf, strlen(buf));
694
buf = GString::format("/LanguageGroup {0:d} def\n",
695
privateDicts[i].languageGroup);
696
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
618
699
if (privateDicts[i].expansionFactor != 0.06) {
619
sprintf(buf, "/ExpansionFactor %g def\n",
620
privateDicts[i].expansionFactor);
621
(*outputFunc)(outputStream, buf, strlen(buf));
700
buf = GString::format("/ExpansionFactor {0:.4g} def\n",
701
privateDicts[i].expansionFactor);
702
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
623
705
(*outputFunc)(outputStream, "currentdict end def\n", 20);
624
706
(*outputFunc)(outputStream, "currentdict end put\n", 20);
715
800
(*outputFunc)(outputStream, "16 dict begin\n", 14);
716
801
(*outputFunc)(outputStream, "/FontName /", 11);
717
802
(*outputFunc)(outputStream, psName, strlen(psName));
718
sprintf(buf, "_%02x def\n", i >> 8);
719
(*outputFunc)(outputStream, buf, strlen(buf));
803
buf = GString::format("_{0:02x} def\n", i >> 8);
804
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
720
806
(*outputFunc)(outputStream, "/FontType 1 def\n", 16);
721
807
if (privateDicts[fd].hasFontMatrix) {
722
sprintf(buf, "/FontMatrix [%g %g %g %g %g %g] def\n",
723
privateDicts[fd].fontMatrix[0],
724
privateDicts[fd].fontMatrix[1],
725
privateDicts[fd].fontMatrix[2],
726
privateDicts[fd].fontMatrix[3],
727
privateDicts[fd].fontMatrix[4],
728
privateDicts[fd].fontMatrix[5]);
729
(*outputFunc)(outputStream, buf, strlen(buf));
808
buf = GString::format("/FontMatrix [{0:.8g} {1:.8g} {2:.8g} {3:.8g} {4:.8g} {5:.8g}] def\n",
809
privateDicts[fd].fontMatrix[0],
810
privateDicts[fd].fontMatrix[1],
811
privateDicts[fd].fontMatrix[2],
812
privateDicts[fd].fontMatrix[3],
813
privateDicts[fd].fontMatrix[4],
814
privateDicts[fd].fontMatrix[5]);
815
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
730
817
} else if (topDict.hasFontMatrix) {
731
818
(*outputFunc)(outputStream, "/FontMatrix [1 0 0 1 0 0] def\n", 30);
733
820
(*outputFunc)(outputStream,
734
821
"/FontMatrix [0.001 0 0 0.001 0 0] def\n", 38);
736
sprintf(buf, "/FontBBox [%g %g %g %g] def\n",
737
topDict.fontBBox[0], topDict.fontBBox[1],
738
topDict.fontBBox[2], topDict.fontBBox[3]);
739
(*outputFunc)(outputStream, buf, strlen(buf));
740
sprintf(buf, "/PaintType %d def\n", topDict.paintType);
741
(*outputFunc)(outputStream, buf, strlen(buf));
823
buf = GString::format("/FontBBox [{0:.4g} {1:.4g} {2:.4g} {3:.4g}] def\n",
824
topDict.fontBBox[0], topDict.fontBBox[1],
825
topDict.fontBBox[2], topDict.fontBBox[3]);
826
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
828
buf = GString::format("/PaintType {0:d} def\n", topDict.paintType);
829
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
742
831
if (topDict.paintType != 0) {
743
sprintf(buf, "/StrokeWidth %g def\n", topDict.strokeWidth);
744
(*outputFunc)(outputStream, buf, strlen(buf));
832
buf = GString::format("/StrokeWidth {0:.4g} def\n", topDict.strokeWidth);
833
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
746
836
(*outputFunc)(outputStream, "/Encoding 256 array\n", 20);
747
837
for (j = 0; j < 256 && i+j < nCIDs; ++j) {
748
sprintf(buf, "dup %d /c%02x put\n", j, j);
749
(*outputFunc)(outputStream, buf, strlen(buf));
838
buf = GString::format("dup {0:d} /c{1:02x} put\n", j, j);
839
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
752
sprintf(buf, "%d 1 255 { 1 index exch /.notdef put } for\n", j);
753
(*outputFunc)(outputStream, buf, strlen(buf));
843
buf = GString::format("{0:d} 1 255 {{ 1 index exch /.notdef put }} for\n",
845
(*outputFunc)(outputStream, buf->getCString(), buf->getLength());
755
848
(*outputFunc)(outputStream, "readonly def\n", 13);
756
849
(*outputFunc)(outputStream, "currentdict end\n", 16);
775
868
if (privateDicts[fd].nBlueValues) {
776
869
eexecWrite(&eb, "/BlueValues [");
777
870
for (k = 0; k < privateDicts[fd].nBlueValues; ++k) {
778
sprintf(buf, "%s%d", k > 0 ? " " : "", privateDicts[fd].blueValues[k]);
779
eexecWrite(&eb, buf);
871
buf = GString::format("{0:s}{1:d}",
873
privateDicts[fd].blueValues[k]);
874
eexecWrite(&eb, buf->getCString());
781
877
eexecWrite(&eb, "] def\n");
783
879
if (privateDicts[fd].nOtherBlues) {
784
880
eexecWrite(&eb, "/OtherBlues [");
785
881
for (k = 0; k < privateDicts[fd].nOtherBlues; ++k) {
786
sprintf(buf, "%s%d", k > 0 ? " " : "", privateDicts[fd].otherBlues[k]);
787
eexecWrite(&eb, buf);
882
buf = GString::format("{0:s}{1:d}",
884
privateDicts[fd].otherBlues[k]);
885
eexecWrite(&eb, buf->getCString());
789
888
eexecWrite(&eb, "] def\n");
791
890
if (privateDicts[fd].nFamilyBlues) {
792
891
eexecWrite(&eb, "/FamilyBlues [");
793
892
for (k = 0; k < privateDicts[fd].nFamilyBlues; ++k) {
794
sprintf(buf, "%s%d", k > 0 ? " " : "",
795
privateDicts[fd].familyBlues[k]);
796
eexecWrite(&eb, buf);
893
buf = GString::format("{0:s}{1:d}", k > 0 ? " " : "",
894
privateDicts[fd].familyBlues[k]);
895
eexecWrite(&eb, buf->getCString());
798
898
eexecWrite(&eb, "] def\n");
800
900
if (privateDicts[fd].nFamilyOtherBlues) {
801
901
eexecWrite(&eb, "/FamilyOtherBlues [");
802
902
for (k = 0; k < privateDicts[fd].nFamilyOtherBlues; ++k) {
803
sprintf(buf, "%s%d", k > 0 ? " " : "",
804
privateDicts[fd].familyOtherBlues[k]);
805
eexecWrite(&eb, buf);
903
buf = GString::format("{0:s}{1:d}", k > 0 ? " " : "",
904
privateDicts[fd].familyOtherBlues[k]);
905
eexecWrite(&eb, buf->getCString());
807
908
eexecWrite(&eb, "] def\n");
809
910
if (privateDicts[fd].blueScale != 0.039625) {
810
sprintf(buf, "/BlueScale %g def\n", privateDicts[fd].blueScale);
811
eexecWrite(&eb, buf);
911
buf = GString::format("/BlueScale {0:.4g} def\n",
912
privateDicts[fd].blueScale);
913
eexecWrite(&eb, buf->getCString());
813
916
if (privateDicts[fd].blueShift != 7) {
814
sprintf(buf, "/BlueShift %d def\n", privateDicts[fd].blueShift);
815
eexecWrite(&eb, buf);
917
buf = GString::format("/BlueShift {0:d} def\n",
918
privateDicts[fd].blueShift);
919
eexecWrite(&eb, buf->getCString());
817
922
if (privateDicts[fd].blueFuzz != 1) {
818
sprintf(buf, "/BlueFuzz %d def\n", privateDicts[fd].blueFuzz);
819
eexecWrite(&eb, buf);
923
buf = GString::format("/BlueFuzz {0:d} def\n",
924
privateDicts[fd].blueFuzz);
925
eexecWrite(&eb, buf->getCString());
821
928
if (privateDicts[fd].hasStdHW) {
822
sprintf(buf, "/StdHW [%g] def\n", privateDicts[fd].stdHW);
823
eexecWrite(&eb, buf);
929
buf = GString::format("/StdHW [{0:.4g}] def\n", privateDicts[fd].stdHW);
930
eexecWrite(&eb, buf->getCString());
825
933
if (privateDicts[fd].hasStdVW) {
826
sprintf(buf, "/StdVW [%g] def\n", privateDicts[fd].stdVW);
827
eexecWrite(&eb, buf);
934
buf = GString::format("/StdVW [{0:.4g}] def\n", privateDicts[fd].stdVW);
935
eexecWrite(&eb, buf->getCString());
829
938
if (privateDicts[fd].nStemSnapH) {
830
939
eexecWrite(&eb, "/StemSnapH [");
831
940
for (k = 0; k < privateDicts[fd].nStemSnapH; ++k) {
832
sprintf(buf, "%s%g", k > 0 ? " " : "", privateDicts[fd].stemSnapH[k]);
833
eexecWrite(&eb, buf);
941
buf = GString::format("{0:s}{1:.4g}",
942
k > 0 ? " " : "", privateDicts[fd].stemSnapH[k]);
943
eexecWrite(&eb, buf->getCString());
835
946
eexecWrite(&eb, "] def\n");
837
948
if (privateDicts[fd].nStemSnapV) {
838
949
eexecWrite(&eb, "/StemSnapV [");
839
950
for (k = 0; k < privateDicts[fd].nStemSnapV; ++k) {
840
sprintf(buf, "%s%g", k > 0 ? " " : "", privateDicts[fd].stemSnapV[k]);
841
eexecWrite(&eb, buf);
951
buf = GString::format("{0:s}{1:.4g}",
952
k > 0 ? " " : "", privateDicts[fd].stemSnapV[k]);
953
eexecWrite(&eb, buf->getCString());
843
956
eexecWrite(&eb, "] def\n");
845
958
if (privateDicts[fd].hasForceBold) {
846
sprintf(buf, "/ForceBold %s def\n",
847
privateDicts[fd].forceBold ? "true" : "false");
848
eexecWrite(&eb, buf);
959
buf = GString::format("/ForceBold {0:s} def\n",
960
privateDicts[fd].forceBold ? "true" : "false");
961
eexecWrite(&eb, buf->getCString());
850
964
if (privateDicts[fd].forceBoldThreshold != 0) {
851
sprintf(buf, "/ForceBoldThreshold %g def\n",
852
privateDicts[fd].forceBoldThreshold);
853
eexecWrite(&eb, buf);
965
buf = GString::format("/ForceBoldThreshold {0:.4g} def\n",
966
privateDicts[fd].forceBoldThreshold);
967
eexecWrite(&eb, buf->getCString());
855
970
if (privateDicts[fd].languageGroup != 0) {
856
sprintf(buf, "/LanguageGroup %d def\n", privateDicts[fd].languageGroup);
857
eexecWrite(&eb, buf);
971
buf = GString::format("/LanguageGroup {0:d} def\n",
972
privateDicts[fd].languageGroup);
973
eexecWrite(&eb, buf->getCString());
859
976
if (privateDicts[fd].expansionFactor != 0.06) {
860
sprintf(buf, "/ExpansionFactor %g def\n",
861
privateDicts[fd].expansionFactor);
862
eexecWrite(&eb, buf);
977
buf = GString::format("/ExpansionFactor {0:.4g} def\n",
978
privateDicts[fd].expansionFactor);
979
eexecWrite(&eb, buf->getCString());
865
983
// set up the subroutines