summaryrefslogtreecommitdiff
path: root/pcl/Anomalies.txt
blob: a570f5eb884d3711988034f920da821664265535 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
Overview:

Though designed to emulate the HP Color LaserJet 5/5M, there are several areas
where the behavior of the Artifex interpreter differs from that device. The 
first part of this document provides an overview of these differences, and 
the second part notes specific examples in the PCL 5c FTS where the differences
between the Artifex interpreter and the HP implementation are apparent.

Overview:

  Fonts
    Since the release of the LaserJet III in 1989, successive printer products
    from HP have shifted away from using bitmap fonts toward scalable fonts,
    originally using Intellifont fonts and more recently TrueType fonts (using
    the InfiniFont packaging technique). The Color LaserJet 5/5M represents an
    intermediate stage in this development. It has a single bitmap font (line-
    printer), a primary set of scalable fonts in Intellifont format, and an
    additional set of fonts in TrueType format.

    Artifex is not a font vendor, and the default set of fonts offered with the
    interpreter is not meant to exactly emulate the offerings of an HP product.
    In addition, the default font set corresponds to a later stage in the
    evolution of HP products; more similar to the monochrome LaserJet 5/5M and
    the LaserJet 6P than the Color LaserJet 5/5M (which more closely resembles
    the font offering of the monochrome LaserJet 4 series). Though the set of
    typeface "names" that are supported is similar, the format in which these
    fonts are stored and some aspects of the supported character set vary.

    This discrepancy in font offerings has many visible manifestations, most of
    them quite minor. Some of the more obvious differences are:

    1.  Spacing.

        Not all of the proportionally spaced fonts in the default set match 
        the spacing (advance width) of the corresponding fonts provided
        by HP. This is most often visible when lines of text are set up to be
        clipped at the right margin (rare in applications but more common in
        the FTS), or when the automatic line wrap feature is used.

    2.  Adherence to requested height and/or (fixed-width) space.

        In normal operation, a PCL document does not directly specify which
        fonts are to be used for a given block of text. Rather, the document
        will specify a set of font properties which the interpreter attempts
        to match as best possible given the set of available fonts (the rules
        which define a "best" match are quite specific). Among the properties
        specified are the height of the font and, in the case of a fixed-pitch
        font, the character pitch.

        All of the fonts provided in the default set for the Artifex 
        interpreter are scalable, hence all will exactly adhere to the
        requested font size and/or pitch. In situations where a bitmap font
        would, instead, be used by an HP printer, only an approximate match 
        may be available for font size/pitch. Hence, the size of text 
        rendered by the Artifex interpreter may differ from that of an HP 
        printer.

    3.  Interaction with downloaded symbol sets.

        All of the fonts in the Artifex default set are TrueType fonts, which
        make use of the Unicode font encoding scheme. Intellifont fonts, such
        as the base set provided with the Color LaserJet 5/5M, make use of a
        different font encoding scheme known as MSL. (In principle there is no
        connection between a font's scaling technology and its encoding scheme,
        but in practice all Intellifont fonts use the MSL scheme and all
        (unbound) TrueType fonts use the Unicode scheme.)

        In PCL, a user defined (downloaded) symbol set may apply to either the
        Unicode or the MSL encoding scheme, but not to both. Hence, a downloaded
        symbol set that uses the MSL encoding can be used with the base font
        set of the Color LaserJet 5/5M, but not with fonts provided with the
        Artifex interpreter. Conversely, any downloaded symbol set that uses
        the Unicode encoding can be used with the base font set of the Artifex
        interpreter, but not the Color LaserJet 5/5M.

        Because support for the currently selected symbol set is the highest
        priority selection parameter in the PCL font selection mechanism, this
        difference in font format can have dramatic effects, as is evident in
        some of the 5c FTS tests.

    4.  Font scaler anomalies

        The set of Intellifont fonts distributed by Agfa includes fonts with
        some "malformed" character outlines (outlines that do not adhere to the
        documented format). These outlines are handled differently by the
        HP Intellifont scaler and the scaler provided with the Artifex
        interpreter. For example, in the 5c FTS, the lower case 't' in the 
        Park Avenue font has a malformed outline, and its rendering with the 
        Artifex interpreter is quite different (i.e., distorted) from that 
        produced by an HP interpreter.

  Rendering Methods/Halftones

    HP's documentation identifies 20 different "rendering algorithms" that can
    be selected on an object-by-object basis. For the most part these rendering
    algorithms represent different halftones, though certain rendering
    algorithms also specify color mapping (in particular, color to monochrome
    conversion).

    No actual devices support all 20 algorithms. For any given device, many
    algorithms are mapped to others, so that no more than 6 to 12 unique
    algorithms are supported. This remapping respects color transformations:
    a monochrome algorithm may be remapped to another monochrome algorithm but
    not to a color algorithm, and vice-versa. Hence, the remapping of render
    algorithms is essentially a mechanism for selecting amongst different
    halftones.

    Halftones for PCL 5c devices fall into two categories: "predictable" and not
    "predictable". Prior to the release of the Color LaserJet 5/5M, all PCL 5c
    halftones were predictable: all halftones were based on threshold arrays
    (HP's documentation terms such halftones "ordered dithers", because they
    have a monotonicity or "order" property), and the same halftone was used on
    all devices. (Strictly speaking, there is "upward compatibility": some
    devices offer more halftones than others, but when a halftone is offered on
    multiple devices it is the same.)

    The Color LaserJet 5/5M completely broke with this tradition, and offered
    only "unpredictable", or device specific, halftones. This was accomplished
    by adding five new halftone algorithms to the previously existing set of 15,
    and on the Color LaserJet 5/5M, remapping all of the existing algorithms 
    that require halftoning (algorithms 1 and 2 do not) to these five.

    The "predictability" of a halftone is potentially of great significance in
    PCL 5c, because of the manner in which HP chose to implement raster
    operations. These are defined on a pixel-by-pixel basis after halftoning
    (at least, where such a definition is possible; see the contone discussion
    below for further information). Hence, when using raster operations to
    combine objects rendered with two different halftones, the order in which
    a halftone darkens pixels is of great significance: given two objects of
    approximately 50% intensity and an exclusive-or raster operation, the
    resulting region may be solidly colored, fully white, or anything in
    between.

    The Artifex interpreter provides the full set of rendering algorithms that
    use "predictable" halftones, and except for the case of the noise ordered
    dither, the halftone used is identical to that used by HP devices prior 
    to the Color LaserJet 5/5M. The halftone provided for noise-ordered 
    dither is only roughly similar to that provided by HP, but this should 
    not cause a problem in practice. Though in principle "predictable", the 
    noise ordered dither used on HP devices is so large (128 x 128 pixels) 
    that no application could reasonably take advantage of its ordered
    property.

    The Artifex interpreter provides no device-specific halftones because it
    is impossible to know a priori what output device it will be used with.
    Mechanisms are provided to allow device-specific halftones to be assigned
    to specific rendering methods--see the accompanying interface description
    for more information. All of the rendering algorithms that would normally
    use a device specific halftone have been remapped to a method that uses
    a predictable halftone. A mechanism is available for modifying this 
    mapping; again, see the interface document for details.

    The Artifex interpreter supports user-downloaded threshold (dither) arrays,
    which are supported by all recent HP color devices except the Color
    LaserJet 5/5M. If desired, this support can be disabled by remapping the
    corresponding render algorithms (9 and 10) via the mechanism noted above;
    by default, however, these are not remapped.

    In practice, this implies that halftoned output produced by the unmodified
    Artifex PCL 5c interpreter will have a very different appearance from that
    produced by the Color LaserJet 5/5M, even when the former is output on the
    5/5M. (There are also other complications, which are described further
    below.) In general, the output from the Artifex interpreter will be similar
    to that of the original Color LaserJet and the HP DeskJet 1200 and 1600
    C/CM printers. This is a reflection of a different configuration rather
    than a fundamental difference in the interpreter.

  Raster Operations, device pixel depth

    In any industry that undergoes rapid technological evolution, any technical
    term that becomes significant for purposes of marketing tends to lose its
    technical meaning, as manufacturers shift the definition to show their
    products in the best light. Such has been the case for the term "resolution"
    when used with respect to inkjet and laser printers.

    HP does not provided a resolution specification for the Color LaserJet 5/5M.
    It does, however, claim "1200 dpi" equivalent performance, via the use of
    "resolution enhancement technology" (RET).

    Based on the traditional metric, namely, the thinnest horizontal and 
    vertical pure color line that can be drawn, the Color LaserJet 5/5M is 
    a 300 dpi device.  The resolution enhancement technology used by HP 
    provides for more rapid modulation of the laser in the fast-scan 
    direction (the long edge of a letter or A4 page). This is used as part of
    a halftoning technique that produces thinner lines in the slow-scan 
    direction than would be indicated by the 300 dpi resolution. This makes 
    the printer somewhat of a contone device, with between 8 and 16 levels 
    per pixel in each color plane.

    Based on empirical evidence, HP does not make use of this contone capability
    in a direct manner. Rather, the level used for a specific pixel is based
    both on the color of that pixel and on the colors for a small number of
    nearest neighbor pixels. A likely reason for this is that PCL rasters are
    traditionally bi-level in each color plane (this is true for all of the
    default or "fixed" color palettes), and the printer will only support
    input resolutions to 300 dpi.

    A side-effect of this arrangement is to make the effect of general raster
    operations completely unpredictable; indeed, much less predictable than
    would be indicated by usage of "unpredictable" halftones. For actual
    applications this is almost never visible, but in several of the tests
    in the PCL 5c FTS, the results on the Color LaserJet 5/5M bear only
    slight resemblance to what is documented and what is produced by other
    PCL 5c printers. In these cases, the Artifex PCL 5c interpreter 
    follows the documentation, as the results produced by the CLJ 5/5M seem to
    be extremely specific to that device.

  Color Correction

    The Color LaserJet 5/5M provides sets of two device dependent and three
    device independent color spaces. One of the latter is not, however, a fully
    device independent color space: the "Colorimetric RGB" space is documented
    as a device independent color space but is implemented as a set of lookup
    tables based on the device-dependent RGB space (all above board: this
    arrangement is noted in the documentation).

    The implementation of the device dependent color spaces is simple enough,
    with the exception of some peculiar color correction applied to the fixed
    color spaces. The latter is discussed below. The implementation in the
    Artifex code matches that of the Color LaserJet 5/5M quite closely in this
    area, with the exception of the color correction anomaly.

    The device independent color spaces are another matter entirely. Nothing can
    be said directly about the "Colorimetric RGB" space since this is not
    actually supported. The documentation for this format does, however, include
    several parameters whose significance is, at best, obscure. The definition
    of the chromaticities of the primaries is straightforward enough, and the
    specification of gamma parameters for the components is reasonably 
    standard (though why the language provides for both a per component gamma
    specification and a per-component, per-color-space lookup table is less
    clear). The gain parameter, on the other hand, is not standard, and we
    could find no description in the literature as to what it might mean. Based
    on empirical work using the luminance-chrominance color space (which uses
    the same parameter for its base color space), we have implemented the
    gamma and gain parameters as:

            out = 1.0 - (1.0 - pow(in, 1/gamma)) / gain

    The CIE L*a*b* color space provided by the Color LaserJet 5/5M is also
    somewhat peculiar. Its most unusual property is that an L* value 0 does not
    yield black but rather a fairly solid red. This leaves one at somewhat of a
    loss as to what the L* parameter is intended to correspond to. In any event,
    after prior discussions with the OEM customer, the Artifex interpreter
    was built to use the CIE specified conversion from L*a*b* to XYZ (the
    color rendering dictionary converts the latter to device colors). The 
    difference between the two is visible in several of the tests of the PCL
    5c FTS.

    The default color correction information provided with the Artifex 
    interpreter assumes the output device has uncorrected SMPTE primaries. This
    is, of course, not likely to be correct for any actual output device. The
    output observed using device independent color spaces will be incorrect
    unless a suitable color rendering dictionary has been installed. How this
    may be accomplished is described in the accompanying interface document.

  Device dependent color correction

    The fixed or "simple" color space palettes provided with the Color LaserJet
    5/5M are ostensibly variations of the device-dependent RGB color space.
    However, unlike the latter, the "simple" color spaces produce different
    results when used for raster as opposed to geometric objects: red becomes
    orange, green becomes notably lighter in shade, cyan becomes nearly blue, 
    and blue becomes deep purple. This effect is quite noticeable and is only 
    present on the Color LaserJet 5/5M; other HP printers do not show this 
    effect.

    Because rasters rendered with the simple color spaces generate output much
    more "quickly" than rasters generated with the equivalent writeable color
    palette by a factor of about 3, it is our belief that the simple color
    space raster palettes represent the true colors of the device primaries,
    and that color correction is applied to colors used with geometric objects
    to make them more nearly match what is expected of these colors.

    The Artifex PCL 5c interpreter does and, and indeed cannot, provide the
    same form of correction. In the 5c interpreter, geometric and raster 
    objects that use the same color will have identical appearance. Hence,
    rasters produced with simple color space in the Artifex interpreter will not
    have the same appearance as those produced by the Color LaserJet 5/5m.

  View Illuminant

    For reasons that are likely specific to the implementation, the view
    illuminant setting on the Color LaserJet 5/5m only affects rasters, not
    geometric objects. The Artifex interpreter does not replicate this
    behavior: the view illuminant setting affects all output. This leads to
    different output on one of the tests of the PCL 5c FTS.

  Default Colors

    HP specifies that up to the first eight entries of each palette be given
    a set of default, device dependent primary colors. Furthermore, these colors
    are not affected by color lookup tables for the device independent color
    spaces, but are affected by lookup tables for the appropriate device
    dependent color space.

    This effect is difficult to achieve given the design of the Artifex
    interpreter and its underlying graphic library. The effect is also of
    questionable merit: why use a device-dependent default color with a
    device independent color space? Hence, in the Artifex interpreter, the
    default colors used with device independent color spaces are themselves
    device independent, and are affected by all applicable color lookup
    tables.

  Transparency

    The implementation of transparency in the Artifex PCL 5c interpreter
    closely follows that of HP interpreters, with one major exception. In HP
    interpreters, the determination of which colors are white is made at the
    device level, immediately before dithering. In the Artifex interpreter,
    the same determination is made at the source color level, after consider-
    ation of the black and white reference points but before any other color
    transformation. This is arguably a bug but one that is difficult to remedy
    given the design of the underlying graphic library.

    In practice, this difference is not visible in application files, and is
    visible in test files in only two cases: when using an inverting color
    lookup table, and when using rendering algorithm 2 (map black to white and
    all other colors to black). Both of these situations arise in a small
    number of tests in the PCL 5c FTS.

  Pixel Placement

    Though the definition of pixel placement is consistent across all PCL 5c
    implementations from HP, the set of objects affected is not. In all cases
    pixel placement affects rectangles in PCL and polygon fills in GL, and do
    not affect PCL rasters. For all devices except the Color LaserJet 5/5M,
    pixel placement does not affect text; this is also the documented behavior.
    For the CLJ 5/5M, pixel placement affects the rendering of scalable fonts,
    but does so in a manner not consistent with its effects on other objects
    (an extra pixel is added on each side of the character, as opposed to just
    the right and bottom sides).

    The Artifex PCL 5c interpreter adheres to the documented behavior: only
    PCL rectangles and polygon fills in GL/2 are affected by pixel placement
    (currently there is a bug that causes the pixel placement command in
    GL/2 to have incorrect behavior, but the design intent is as stated).

  Driver configuration parameters

    The Artifex PCL 5c interpreter does not implement the driver configuration
    command. This causes several tests near the end of the PCL 5c FTS to
    produce different results than is the case for the Color LaserJet 5/5M.
    
    

Difference in specific tests of the PCL 5c FTS

54:

    The line "12345..." is printed in an 8 pt. version of the default
    proportionally spaced font. In the Artifex interpreter, this is a Times
    font, as it is for the Color LaserJet 5/5M, but not with the same spacing.

65, 75, 85, 95, 103:

    The raster in each of these tests is printed in a "simple" color space
    (fixed palette). As described above, the colors in these color spaces
    vary between geometric objects and rasters for the Color LaserJet 5/5M,
    but not for the Artifex interpreter. Hence, the colors for the raster
    will appear different in the two interpreters.

140, 143:

    The vertical bar character is from the bitmap lineprinter font on
    the HP and from the Courier font on the Artifex interpreter, hence
    the differences in the length of the bars.

273, 274, 275, 276, 284, 285, 286:

    Symbol set differences.

310, 320:

    These two panels are printed with the printer's "line printer" font.
    On the HP DJ 1600C/CM and the CLJ 5/5M, this is a bitmap font that is
    not scalable and is offered in only one size, hence its size does not
    change with pitch. On the Artifex system, the scalable Courier font is
    substituted for the line printer font. This font does change pitch as
    requested in the tests.

403, 412:

    The Univers Condensed font provided with the Artifex PCL interpreter 
    has all characters condensed. In the version of the same font provided
    by HP, certain "universal" characters (characters that are independent
    of font style), are not condensed.

411 (et. al.):

    The lower case 't' in the downloaded Park Avenue font contains a malformed
    outline. This is handled differently by the Intellifont font scaler 
    provided with the Artifex PCL interpreter than by the scaler provided with
    HP PCL implementations.

422:

   The default vertical offset applied to floating underlines by the Artifex
   PCL interpreter is not the same as that provided by HP PCL interpreters.

441 - 443, 450 - 512:

    The fonts provided with the Artifex PCL 5 interpreter are TrueType fonts,
    which use the Unicode encoding scheme. The corresponding fonts in the
    Color LaserJet 5/5M are Intellifont fonts, which use the MSL encoding
    scheme. Thus, downloaded symbol sets that use the MSL coding scheme
    can be used with the resident fonts of the Color LaserJet 5/5M, but not
    with the resident fonts provided with the Artifex interpreter. Similarly,
    downloaded symbol sets that use the Unicode encoding scheme can be used
    with fonts provided with the Artifex interpreter, but not with those 
    provided with the CLJ 5/5M.

520, 521:

    Symbol set discrepancies.

680 - 682:

    These rasters are generated in a simple color space, and thus have the color
    anomalies described in the first section of this document.

701:
    The length of the bitarray for the third and fourth pair of raster
    (magenta and yellow) differ from those on the HP CLJ 5/5M.

    The output of the Artifex interpreter matches that of the HP DJ 1600C/CM.
    The output of the CLJ 5/5M is contrary to the documentation, and likely
    a limitation of the particular implementation due to the interaction
    between rasters and the hardware dither method.

714:

    On the Color LaserJet 5/5M, two of the white gaps between the cyan lines
    appear to be wider than the others (after the 48th line and 98th cyan 
    lines). These larger gaps are not present in the input data, and are 
    probably due to a resonance phenomenon between the raster and the 
    resolution enhancement technology used by the CLJ 5/5M. This behavior 
    is not reproduced in the Artifex PCL 5c interpreter.

721:

    This raster are generated in a simple color space, and thus has the color
    anomalies described in the first section of this document.

722:

    On the Color LaserJet 5/5M, the first of the shorter, magenta raster lines
    appears to be thinner than the others. In the input data all of the lines
    are the same width, and there is no apparent reason for the thinness of
    the first line. The Artifex PCL 5c interpreter does not replicate this
    anomaly.

750:

    In the third row, the row with the greatest reduction in scale, the first
    (thinnest) bar of the raster completely disappears on the Color LaserJet
    5/5M, but not with the Artifex PCL 5c interpreter.

    Whether a given artifact of a raster appears or disappears when scaled down
    is a property of the specific raster scale implementation used. There is
    no reason to expect the results to be the same across two implementations,
    and little reason to try to make them the same.

800 - 804:

    Each of the "bars" in these test are rendered in a different color space,
    in the sequence RGB, CMY, Colorimetric RGB, CIE L*a*b*, Luminance-
    Chrominance. The final three bars are in device independent color spaces,
    hence their appearance will vary based on the color rendering
    dictionary provided.

    Note also that fourth bar in tests 800 and 803 reflect the implementation
    of the CIE L*a*b* color space in the Color LaserJet 5/5M, which renders
    colors with the value of L* = 0 as red rather than black.

811

    Each raster in this example is rendered in a different color space, in the
    sequence RGB, CMY, Colorimetric RGB, CIE L*a*b*, and Luminance-Chrominance.
    Hence, the appearance of the last three rows will depend on the color
    rendering dictionary provided. For the fourth raster, the different
    implementations of the CIE L*a*b* color spaces is also evident.

813:
    The first two rasters are printed in RGB and CMY color spaces, with the
    white and black points reversed. Due to an error in the implementation
    of transparency in the CLJ 5/5M, this causes BOTH white and black to be
    considered transparent, which in turn causes the center region to be
    fully transparent.

    The Artifex implementation does not have this bug, hence either the
    black triangles or the black background of this region is visible.

    The additional three rasters are printed in device-independent color spaces,
    hence their appearance is dependent on the color rendering dictionary
    provided.

830, 831:

    A number of differences between the Artifex PCL 5c interpreter and the
    CLJ 5/5M are visible in these tests:

    1.  The Artifex PCL 5c interpreter, in its default form, supports the
        rendering methods with predictable halftones, and does not support
        the rendering methods with unpredictable or device-specific halftones.
        The CLJ 5/5M has the reverse arrangement. In particular, the Artifex
        interpreter supports user downloaded dithers, which the CLJ 5/5M
        does not.

    2.  The Artifex PCL 5c interpreter determines which pixels are "white"
        for purposes of transparency prior to the effects of the color mapping
        implied by the rendering algorithm; the CLJ 5/5M makes this same
        determination after such color mapping. This is most visible in the
        case of render algorithm 2 (prominent horizontal black lines in both
        tests), where the output from the Artifex interpreter is transparent
        while that of the CLJ 5/5M is opaque.

    3.  The Artifex PCL 5c interpreter, in common with most HP implementations
        of PCL 5c, implements render algorithm 1 (snap to primaries) after
        applying gamma correction. The CLJ 5/5M is exceptional in this area in
        snapping the colors to primaries before applying gamma correction.
        Hence, when using render algorithm 1, the output of the Artifex
        interpreter (and most HP PCL 5c interpreters) is always a solid
        primary color, while for the CLJ 5/5M it may be a halftoned color.
        This difference is visible in the latter part of test 831.

    4.  The final two columns of tests 830 and 831 represent a non-solid
        raster object combined with a non-solid foreground, using logical
        operation 252. Especially for the larger gamma values, the appearance
        of the result is critically dependent on the nature of the halftones
        used for the raster and the foreground. In the Artifex PCL 5c
        interpreter, the halftones used cause these regions to become white
        more rapidly than is the case for the CLJ 5/5M.

833:

    Each pair of lines in this example constitutes a pair of rasters. The 
    data for each raster pair is the same, only resolution is changed.
    A bug in the CLJ 5/5M interpreter, also evident in test 701, results in
    the improper rendering of raster output at 100 and 150 dpi in some 
    situations. The Artifex PCL 5c interpreter does not mimic this bug,
    hence the different appearance of the output.

853:

    The modified render algorithm referred to in the fourth line of this test
    is render algorithm 10, monochrome user defined dither. This render method
    is supported by the Artifex PCL 5c interpreter (in its default form), 
    but not by the CLJ 5/5M. Hence the different appearance. Note also that 
    the final foreground for the fourth line is used to draw the text for 
    the final, fifth line of the test, so its appearance is modified as well.

860 - 865:

    See discussion for test 830 and 831.

866:

    The different appearance of this test between the Artifex PCL 5c
    interpreter and the Color LaserJet 5/5M is due to the different halftones
    used.

871:

    The final three rows of rectangles in this example are rendered in a device
    independent color space, hence their appearance will depend on the nature
    of the color rendering dictionary provided. In the default configuration,
    these rectangles have a yellow hue where white would be expected.

883:

    The output from the Artifex PCL 5c interpreter matches the documented
    behavior, and the behavior of HP implementations other than the CLJ 5/5M.
    For reasons that are not clear, the CLJ 5/5M will print a faint outline
    of "Text" for the rightmost instance of this string in the first line
    of the test. Examination under magnification reveals that this outline
    is smaller than the design resolution of the device, so this may be a
    print engine artifact.

956:

    The rectangle on the right is printed with a transparent pattern. This
    produces the expected output on the HP 1600C/CM and with the Artifex PCL
    interpreter. It does not produce the expected output for the HP CLJ 5/5M,
    apparently due to a bug.


974:

    See the discussion for test 830. This particular example also demonstrates
    a situation in which different color mapping methods are being used for the
    foreground and the raster being printed. For reasons that are not yet
    clear, this (highly unusual) combination is not properly supported by the
    graphic library underlying the Artifex PCL 5c interpreter.

980, 981:

    1.  The raster operation mechanism of the CLJ 5/5M is broken, and thus
        cannot be used as a reliable comparison (see notes at the start of
        this document).

    2.  The implementation of opaque text for scalable fonts in the
        Artifex PCL 5c interpreter is somewhat imperfect. The implementation
        requires both inside and "outside" of a path to be filled, in
        independent operations. The two filled regions do not join exactly,
        hence a faint outline of the original character is usually visible.

    3.  When compared to the documented behavior, the behavior of the Artifex
        interpreter varies in some of the opaque source, transparent pattern
        cases. We have not yet analyzed why this is the case, but do not
        expect it to cause difficulty in practice.

983:

    The behavior of the Artifex PCL 5c interpreter matches the documented
    behavior, and the behavior of HP devices other than the CLJ 5/5M. Raster
    operations on the CLJ 5/5M are broken.

1053:

    The behavior of the Artifex PCL 5c interpreter matches the documented
    behavior, and the behavior of HP devices other than the CLJ 5/5M. The
    behavior of the CLJ 5/5M is apparently a bug.
        
1402 (et. al.):

    The filling of GL/2 polygon regions with lines in the Artifex PCL 5c
    interpreter is not completely accurate. Line space and phasing are both
    incorrect. These bugs are present in many other GL/2 tests as well.

1440 - 1446 (et. al.):

    When using GL/2 line fills, the Artifex PCL 5c interpreter clips the
    rendered representation of the line, rather than the path along which
    the line is to be drawn. This difference is evident in the pie wedges
    used in this set of tests, and many others.

1463, 1463:

    The patterned line fills used in these two tests vary in appearance
    between the CLJ 5/5M and the Artifex PCL 5c interpreter because
    the latter does not properly set the phase of GL/2 line fills.

1601, 1602:

    The GL/2 label printing command ("LB") in the Artifex PCL 5c interpreter
    does not set the initial position of text correctly when printing in the
    vertical direction.

1641:

    The handling of horizontal tab in GL/2 differs between the Artifex PCL 5c
    interpreter and the CLJ 5/5M.

1642, 1650:

    The position of the label origin in GL/2 varies between the Artifex PCL 5c
    interpreter and the CLJ 5/5M.

1680:

    The character sets supported by the fonts used in Artifex PCL 5c
    interpreter, in its default form, are not the same as those supported by
    the fonts in the CLJ 5/5M.

1752, 1753 (et. al.):

    The lower-case 'a' in the GL/2 stick font provided with the Artifex PCL 5c
    interpreter is a different style than that of the stick font in the
    CLJ 5/5M. This difference is also evident in other tests.

1860, 1862, 1863:

    The position of the GL/2 label origin in the Artifex PCL 5c interpreter is
    not accurate. This is particularly noticeable for arbitrary transformations
    of text, as in the first two tests cited.

1894, 1895 (et. al.):

    For reasons that are not completely clear, the dashed lines used for
    patterned line fills in this example are completely solid in the Artifex
    PCL 5c interpreter. This is a bug.

    In these and many other tests, the Artifex PCL 5c interpreter appears to
    use the incorrect line pattern size (dash length). The cause of this
    problem has not yet been determined.

2003:

    The Artifex PCL 5c interpreter apparently misplaces the label origin for
    the latter half of the text in this file (the HPGL Demo part). This problem
    has not yet been analyzed. A similar problem is evident on a number of the
    subsequent tests.

2040 - 2070:

    The GL/2 clipping behavior of the Artifex PCL 5c interpreter is not
    identical to that of the CLJ 5/5M.

2080:

    The scaling of the rightmost imported image in this test is
    different than the HP printer.  The artifex interpreter complies
    with the HP PCLTRM.  The following test shows that simply entering
    and leaving HPGL/2 <ESC>%OB<ESC>%0A has the side effect of
    resetting HPGL/2 scaling.  This should not happen according to
    PCLTRM 18-17.

    <ESC>E
    <ESC>*c720X
    <ESC>*c0T
    <ESC>*c8.3K
(1) <ESC>%0B   /* enter hpgl2/2 */
(2) <ESC>%0A   /* enter pcl */
    <ESC>*c420Y
    <ESC>*c0T
    <ESC>%1BSP2;PW0;IN;SP6;SC0,100,0,100;PA50,50;SC;SP7;CI450;
    <ESC>%1A
    <ESC>E

    the two commands (1) and (2) change the behavior the HP scaling
    but not Artifex Scaling.  If (1) and (2) are removed both HP and
    Artifex produce the same results.

2101, 2102:

    See comments for test 830 and 831.

2106:

    Logical operations are broken on the CLJ 5/5M. The behavior of the Artifex
    PCL 5c interpreter follows the documentation.

2120, 2122:

    HPGL/2 pixel placement is implemented using the postscript
    operator setfilladjust.  The HP command definition is not consistant with
    the behavior of the implementation and different devices (Color
    Laserjet & 6MP) produce different results for each of these test files.

2210 (fourth page):

    The scaling of the output differs between the Artifex PCL 5c interpreter
    and the CLJ 5/5M. This problem has not yet been analyzed.

2210 (fifth page):

    The output for the upper half of the page differs between the CLJ 5/5M
    and the Artifex PCL 5c interpreter. This problem has not yet been analyzed.

2220:

    See comments for test 2210.

2322, 2323:

    Because the Artifex PCL 5c interpreter determines which regions are "white"
    for purposes of transparency before taking into account any color lookup
    table modifications, the white arrows in the center of these images are 
    considered transparent even in the center case (the inverting color 
    lookup table). Hence, for the inverting color lookup table case, the 
    central rectangle of the raster will be completely white.

2330:

    The CLJ 5/5M does not support the viewing illuminant command; the Artifex
    PCL interpreter does.

2331:

    These rasters are rendered in a device independent color space, hence
    their appearance will be dependent on the color rendering dictionary
    provided.

2351, 2352:

    The driver configuration command is not implemented in the Artifex PCL
    5c interpreter.

2412:

    After downloading a color lookup table, the monochrome palettes at the
    bottom of the first and second pages of this test have one additional
    black entry when rendered with the Artifex PCL 5c interpreter, as compared
    to the output of the CLJ 5/5M. This problem has not been analyzed.