Pfm2afm.java

1
/*
2
 * $Id: Pfm2afm.java 4065 2009-09-16 23:09:11Z psoares33 $
3
 *
4
 * Copyright 1991 Ken Borgendale
5
 *
6
 * The contents of this file are subject to the Mozilla Public License Version 1.1
7
 * (the "License"); you may not use this file except in compliance with the License.
8
 * You may obtain a copy of the License at http://www.mozilla.org/MPL/
9
 *
10
 * Software distributed under the License is distributed on an "AS IS" basis,
11
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12
 * for the specific language governing rights and limitations under the License.
13
 *
14
 * The Original Code is 'iText, a free JAVA-PDF library'.
15
 *
16
 * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by
17
 * the Initial Developer are Copyright (C) 1999-2007 by Bruno Lowagie.
18
 * All Rights Reserved.
19
 * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer
20
 * are Copyright (C) 2000-2007 by Paulo Soares. All Rights Reserved.
21
 *
22
 * Contributor(s): all the names of the contributors are added in the source code
23
 * where applicable.
24
 *
25
 * Alternatively, the contents of this file may be used under the terms of the
26
 * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the
27
 * provisions of LGPL are applicable instead of those above.  If you wish to
28
 * allow use of your version of this file only under the terms of the LGPL
29
 * License and not to allow others to use your version of this file under
30
 * the MPL, indicate your decision by deleting the provisions above and
31
 * replace them with the notice and other provisions required by the LGPL.
32
 * If you do not delete the provisions above, a recipient may use your version
33
 * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE.
34
 *
35
 * This library is free software; you can redistribute it and/or modify it
36
 * under the terms of the MPL as stated above or under the terms of the GNU
37
 * Library General Public License as published by the Free Software Foundation;
38
 * either version 2 of the License, or any later version.
39
 *
40
 * This library is distributed in the hope that it will be useful, but WITHOUT
41
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
42
 * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more
43
 * details.
44
 *
45
 * If you didn't download this code from the following link, you should check if
46
 * you aren't using an obsolete version:
47
 * http://www.lowagie.com/iText/
48
 */
49
/********************************************************************
50
 *                                                                  *
51
 *  Title:  pfm2afm - Convert Windows .pfm files to .afm files      *
52
 *                                                                  *
53
 *  Author: Ken Borgendale   10/9/91  Version 1.0                   *
54
 *                                                                  *
55
 *  Function:                                                       *
56
 *      Convert a Windows .pfm (Printer Font Metrics) file to a     *
57
 *      .afm (Adobe Font Metrics) file.  The purpose of this is     *
58
 *      to allow fonts put out for Windows to be used with OS/2.    *
59
 *                                                                  *
60
 *  Syntax:                                                         *
61
 *      pfm2afm  infile  [outfile] -a                               *
62
 *                                                                  *
63
 *  Copyright:                                                      *
64
 *      pfm2afm - Copyright (C) IBM Corp., 1991                     *
65
 *                                                                  *
66
 *      This code is released for public use as long as the         *
67
 *      copyright remains intact.  This code is provided asis       *
68
 *      without any warrenties, express or implied.                 *
69
 *                                                                  *
70
 *  Notes:                                                          *
71
 *      1. Much of the information in the original .afm file is     *
72
 *         lost when the .pfm file is created, and thus cannot be   *
73
 *         reconstructed by this utility.  This is especially true  *
74
 *         of data for characters not in the Windows character set. *
75
 *                                                                  *
76
 *      2. This module is coded to be compiled by the MSC 6.0.      *
77
 *         For other compilers, be careful of the packing of the    *
78
 *         PFM structure.                                           *
79
 *                                                                  *
80
 ********************************************************************/
81
82
/********************************************************************
83
 *                                                                  *
84
 *  Modifications by Rod Smith, 5/22/96                             *
85
 *                                                                  *
86
 *  These changes look for the strings "italic", "bold", "black",   *
87
 *  and "light" in the font's name and set the weight accordingly   *
88
 *  and adds an ItalicAngle line with a value of "0" or "-12.00".   *
89
 *  This allows OS/2 programs such as DeScribe to handle the bold   *
90
 *  and italic attributes appropriately, which was not the case     *
91
 *  when I used the original version on fonts from the KeyFonts     *
92
 *  Pro 2002 font CD.                                               *
93
 *                                                                  *
94
 *  I've also increased the size of the buffer used to load the     *
95
 *  .PFM file; the old size was inadequate for most of the fonts    *
96
 *  from the SoftKey collection.                                    *
97
 *                                                                  *
98
 *  Compiled with Watcom C 10.6                                     *
99
 *                                                                  *
100
 ********************************************************************/
101
 
102
/********************************************************************
103
 *                                                                  *
104
 *  Further modifications, 4/21/98, by Rod Smith                    *
105
 *                                                                  *
106
 *  Minor changes to get the program to compile with gcc under      *
107
 *  Linux (Red Hat 5.0, to be precise).  I had to add an itoa       *
108
 *  function from the net (the function was buggy, so I had to fix  *
109
 *  it, too!).  I also made the program more friendly towards       *
110
 *  files with mixed-case filenames.                                *
111
 *                                                                  *
112
 ********************************************************************/
113
114
/********************************************************************
115
 *                                                                  *
116
 *  1/31/2005, by Paulo Soares                                      *
117
 *                                                                  *
118
 *  This code was integrated into iText.                            * 
119
 *  Note that the itoa function mentioned in the comment by Rod     *
120
 *  Smith is no longer in the code because Java has native support  *
121
 *  in PrintWriter to convert integers to strings                   *
122
 *                                                                  *
123
 ********************************************************************/
124
125
/********************************************************************
126
 *                                                                  *
127
 *  7/16/2005, by Bruno Lowagie                                     *
128
 *                                                                  *
129
 *  I solved an Eclipse Warning.                                    *
130
 *                                                                  *
131
 ********************************************************************/
132
133
/********************************************************************
134
 *                                                                  *
135
 *  9/14/2006, by Xavier Le Vourch                                  *
136
 *                                                                  *
137
 *  expand import clauses (import java.io.*)                        *                                           
138
 *  the removal of an exception in readString was restored on 9/16  *
139
 *                                                                  *
140
 ********************************************************************/
141
package com.lowagie.text.pdf;
142
143
import java.io.FileOutputStream;
144
import java.io.IOException;
145
import java.io.OutputStream;
146
import java.io.OutputStreamWriter;
147
import java.io.PrintWriter;
148
import java.nio.charset.StandardCharsets;
149
import java.util.Locale;
150
151
import com.lowagie.text.error_messages.MessageLocalization;
152
153
/**
154
 * Converts a PFM file into an AFM file.
155
 */
156
public final class Pfm2afm {
157
    private RandomAccessFileOrArray in;
158
    private PrintWriter out;
159
    
160
    /** Creates a new instance of Pfm2afm */
161
    private Pfm2afm(RandomAccessFileOrArray in, OutputStream out) throws IOException {
162
        this.in = in;
163
        this.out = new PrintWriter(new OutputStreamWriter(out, StandardCharsets.ISO_8859_1));
164
    }
165
    
166
    /**
167
     * Converts a PFM file into an AFM file.
168
     * @param in the PFM file
169
     * @param out the AFM file
170
     * @throws IOException on error
171
     */    
172
    public static void convert(RandomAccessFileOrArray in, OutputStream out) throws IOException {
173
        Pfm2afm p = new Pfm2afm(in, out);
174 1 1. convert : removed call to com/lowagie/text/pdf/Pfm2afm::openpfm → NO_COVERAGE
        p.openpfm();
175 1 1. convert : removed call to com/lowagie/text/pdf/Pfm2afm::putheader → NO_COVERAGE
        p.putheader();
176 1 1. convert : removed call to com/lowagie/text/pdf/Pfm2afm::putchartab → NO_COVERAGE
        p.putchartab();
177 1 1. convert : removed call to com/lowagie/text/pdf/Pfm2afm::putkerntab → NO_COVERAGE
        p.putkerntab();
178 1 1. convert : removed call to com/lowagie/text/pdf/Pfm2afm::puttrailer → NO_COVERAGE
        p.puttrailer();
179 1 1. convert : removed call to java/io/PrintWriter::flush → NO_COVERAGE
        p.out.flush();
180
    }
181
    
182
    public static void main(String[] args) {
183
        try {
184
            RandomAccessFileOrArray in = new RandomAccessFileOrArray(args[0]);
185
            OutputStream out = new FileOutputStream(args[1]);
186 1 1. main : removed call to com/lowagie/text/pdf/Pfm2afm::convert → NO_COVERAGE
            convert(in, out);
187 1 1. main : removed call to com/lowagie/text/pdf/RandomAccessFileOrArray::close → NO_COVERAGE
            in.close();
188 1 1. main : removed call to java/io/OutputStream::close → NO_COVERAGE
            out.close();
189
        }
190
        catch (Exception e) {
191 1 1. main : removed call to java/lang/Exception::printStackTrace → NO_COVERAGE
            e.printStackTrace();
192
        }
193
    }
194
    
195
    private String readString(int n) throws IOException {
196
        byte[] b = new byte[n];
197 1 1. readString : removed call to com/lowagie/text/pdf/RandomAccessFileOrArray::readFully → NO_COVERAGE
        in.readFully(b);
198
        int k;
199 2 1. readString : changed conditional boundary → NO_COVERAGE
2. readString : negated conditional → NO_COVERAGE
        for (k = 0; k < b.length; ++k) {
200 1 1. readString : negated conditional → NO_COVERAGE
            if (b[k] == 0)
201
                break;
202
        }
203 1 1. readString : mutated return of Object value for com/lowagie/text/pdf/Pfm2afm::readString to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE
        return new String(b, 0, k, StandardCharsets.ISO_8859_1);
204
    }
205
    
206
    private String readString() throws IOException {
207
        StringBuilder buf = new StringBuilder();
208
        while (true) {
209
            int c = in.read();
210 2 1. readString : changed conditional boundary → NO_COVERAGE
2. readString : negated conditional → NO_COVERAGE
            if (c <= 0)
211
                break;
212
            buf.append((char)c);
213
        }
214 1 1. readString : mutated return of Object value for com/lowagie/text/pdf/Pfm2afm::readString to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE
        return buf.toString();
215
    }
216
    
217
    private void outval(int n) {
218 1 1. outval : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print(' ');
219 1 1. outval : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print(n);
220
    }
221
    
222
    /*
223
     *  Output a character entry
224
     */
225
    private void  outchar(int code, int width, String name) {
226 1 1. outchar : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print("C ");
227 1 1. outchar : removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE
        outval(code);
228 1 1. outchar : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print(" ; WX ");
229 1 1. outchar : removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE
        outval(width);
230 1 1. outchar : negated conditional → NO_COVERAGE
        if (name != null) {
231 1 1. outchar : removed call to java/io/PrintWriter::print → NO_COVERAGE
            out.print(" ; N ");
232 1 1. outchar : removed call to java/io/PrintWriter::print → NO_COVERAGE
            out.print(name);
233
        }
234 1 1. outchar : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print(" ;\n");
235
    }
236
    
237
    private void openpfm() throws IOException {
238 1 1. openpfm : removed call to com/lowagie/text/pdf/RandomAccessFileOrArray::seek → NO_COVERAGE
        in.seek(0);
239
        vers = in.readShortLE();
240
        h_len = in.readIntLE();
241
        copyright = readString(60);
242
        type = in.readShortLE();
243
        points = in.readShortLE();
244
        verres = in.readShortLE();
245
        horres = in.readShortLE();
246
        ascent = in.readShortLE();
247
        intleading = in.readShortLE();
248
        extleading = in.readShortLE();
249
        italic = (byte)in.read();
250
        uline = (byte)in.read();
251
        overs = (byte)in.read();
252
        weight = in.readShortLE();
253
        charset = (byte)in.read();
254
        pixwidth = in.readShortLE();
255
        pixheight = in.readShortLE();
256
        kind = (byte)in.read();
257
        avgwidth = in.readShortLE();
258
        maxwidth = in.readShortLE();
259
        firstchar = in.read();
260
        lastchar = in.read();
261
        defchar = (byte)in.read();
262
        brkchar = (byte)in.read();
263
        widthby = in.readShortLE();
264
        device = in.readIntLE();
265
        face = in.readIntLE();
266
        bits = in.readIntLE();
267
        bitoff = in.readIntLE();
268
        extlen = in.readShortLE();
269
        psext = in.readIntLE();
270
        chartab = in.readIntLE();
271
        res1 = in.readIntLE();
272
        kernpairs = in.readIntLE();
273
        res2 = in.readIntLE();
274
        fontname = in.readIntLE();
275 6 1. openpfm : changed conditional boundary → NO_COVERAGE
2. openpfm : changed conditional boundary → NO_COVERAGE
3. openpfm : negated conditional → NO_COVERAGE
4. openpfm : negated conditional → NO_COVERAGE
5. openpfm : negated conditional → NO_COVERAGE
6. openpfm : negated conditional → NO_COVERAGE
        if (h_len != in.length() || extlen != 30 || fontname < 75 || fontname > 512)
276
            throw new IOException(MessageLocalization.getComposedMessage("not.a.valid.pfm.file"));
277 2 1. openpfm : Replaced integer addition with subtraction → NO_COVERAGE
2. openpfm : removed call to com/lowagie/text/pdf/RandomAccessFileOrArray::seek → NO_COVERAGE
        in.seek(psext + 14);
278
        capheight = in.readShortLE();
279
        xheight = in.readShortLE();
280
        ascender = in.readShortLE();
281
        descender = in.readShortLE();
282
    }
283
    
284
    private void putheader() throws IOException {
285 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print("StartFontMetrics 2.0\n");
286 2 1. putheader : changed conditional boundary → NO_COVERAGE
2. putheader : negated conditional → NO_COVERAGE
        if (copyright.length() > 0)
287 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
            out.print("Comment " + copyright + '\n');
288 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print("FontName ");
289 1 1. putheader : removed call to com/lowagie/text/pdf/RandomAccessFileOrArray::seek → NO_COVERAGE
        in.seek(fontname);
290
        String fname = readString();
291 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print(fname);
292 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print("\nEncodingScheme ");
293 1 1. putheader : negated conditional → NO_COVERAGE
        if (charset != 0)
294 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
            out.print("FontSpecific\n");
295
        else
296 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
            out.print("AdobeStandardEncoding\n");
297
        /*
298
         * The .pfm is missing full name, so construct from font name by
299
         * changing the hyphen to a space.  This actually works in a lot
300
         * of cases.
301
         */
302 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print("FullName " + fname.replace('-', ' '));
303 1 1. putheader : negated conditional → NO_COVERAGE
        if (face != 0) {
304 1 1. putheader : removed call to com/lowagie/text/pdf/RandomAccessFileOrArray::seek → NO_COVERAGE
            in.seek(face);
305 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
            out.print("\nFamilyName " + readString());
306
        }
307
308 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print("\nWeight ");
309 3 1. putheader : changed conditional boundary → NO_COVERAGE
2. putheader : negated conditional → NO_COVERAGE
3. putheader : negated conditional → NO_COVERAGE
        if (weight > 475 || fname.toLowerCase(Locale.ROOT).contains("bold"))
310 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
           out.print("Bold");
311 4 1. putheader : changed conditional boundary → NO_COVERAGE
2. putheader : negated conditional → NO_COVERAGE
3. putheader : negated conditional → NO_COVERAGE
4. putheader : negated conditional → NO_COVERAGE
        else if ((weight < 325 && weight != 0) || fname.toLowerCase(Locale.ROOT).contains("light"))
312 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
            out.print("Light");
313 1 1. putheader : negated conditional → NO_COVERAGE
        else if (fname.toLowerCase(Locale.ROOT).contains("black"))
314 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
            out.print("Black");
315
        else 
316 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
            out.print("Medium");
317
318 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print("\nItalicAngle ");
319 2 1. putheader : negated conditional → NO_COVERAGE
2. putheader : negated conditional → NO_COVERAGE
        if (italic != 0 || fname.toLowerCase(Locale.ROOT).contains("italic"))
320 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
            out.print("-12.00");
321
            /* this is a typical value; something else may work better for a
322
               specific font */
323
        else
324 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
            out.print("0");
325
326
        /*
327
         *  The mono flag in the pfm actually indicates whether there is a
328
         *  table of font widths, not if they are all the same.
329
         */
330 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print("\nIsFixedPitch ");
331 3 1. putheader : Replaced bitwise AND with OR → NO_COVERAGE
2. putheader : negated conditional → NO_COVERAGE
3. putheader : negated conditional → NO_COVERAGE
        if ((kind & 1) == 0 ||                  /* Flag for mono */
332
            avgwidth == maxwidth ) {  /* Avg width = max width */
333 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
            out.print("true");
334
            isMono = true;
335
        }
336
        else {
337 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
            out.print("false");
338
            isMono = false;
339
        }
340
341
        /*
342
         * The font bounding box is lost, but try to reconstruct it.
343
         * Much of this is just guess work.  The bounding box is required in
344
         * the .afm, but is not used by the PM font installer.
345
         */
346 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print("\nFontBBox");
347 1 1. putheader : negated conditional → NO_COVERAGE
        if (isMono)
348 1 1. putheader : removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE
            outval(-20);      /* Just guess at left bounds */
349
        else 
350 1 1. putheader : removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE
            outval(-100);
351 3 1. putheader : removed negation → NO_COVERAGE
2. putheader : Replaced integer addition with subtraction → NO_COVERAGE
3. putheader : removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE
        outval(-(descender+5));  /* Descender is given as positive value */
352 2 1. putheader : Replaced integer addition with subtraction → NO_COVERAGE
2. putheader : removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE
        outval(maxwidth+10);
353 2 1. putheader : Replaced integer addition with subtraction → NO_COVERAGE
2. putheader : removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE
        outval(ascent+5);
354
355
        /*
356
         * Give other metrics that were kept
357
         */
358 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print("\nCapHeight");
359 1 1. putheader : removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE
        outval(capheight);
360 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print("\nXHeight");
361 1 1. putheader : removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE
        outval(xheight);
362 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print("\nDescender");
363 1 1. putheader : removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE
        outval(descender);
364 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print("\nAscender");
365 1 1. putheader : removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE
        outval(ascender);
366 1 1. putheader : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print('\n');
367
    }
368
    
369
    private void putchartab() throws IOException {
370 2 1. putchartab : Replaced integer subtraction with addition → NO_COVERAGE
2. putchartab : Replaced integer addition with subtraction → NO_COVERAGE
        int count = lastchar - firstchar + 1;
371
        int[] ctabs = new int[count];
372 1 1. putchartab : removed call to com/lowagie/text/pdf/RandomAccessFileOrArray::seek → NO_COVERAGE
        in.seek(chartab);
373 3 1. putchartab : changed conditional boundary → NO_COVERAGE
2. putchartab : Changed increment from 1 to -1 → NO_COVERAGE
3. putchartab : negated conditional → NO_COVERAGE
        for (int k = 0; k < count; ++k)
374
            ctabs[k] = in.readUnsignedShortLE();
375
        int[] back = new int[256];
376 1 1. putchartab : negated conditional → NO_COVERAGE
        if (charset == 0) {
377 3 1. putchartab : changed conditional boundary → NO_COVERAGE
2. putchartab : Changed increment from 1 to -1 → NO_COVERAGE
3. putchartab : negated conditional → NO_COVERAGE
            for (int i = firstchar; i <= lastchar; ++i) {
378 1 1. putchartab : negated conditional → NO_COVERAGE
                if (Win2PSStd[i] != 0)
379
                    back[Win2PSStd[i]] = i;
380
            }
381
        }
382
        /* Put out the header */
383 1 1. putchartab : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print("StartCharMetrics");
384 1 1. putchartab : removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE
        outval(count);
385 1 1. putchartab : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print('\n');
386
387
        /* Put out all encoded chars */
388 1 1. putchartab : negated conditional → NO_COVERAGE
        if (charset != 0) {
389
        /*
390
         * If the charset is not the Windows standard, just put out
391
         * unnamed entries.
392
         */
393 3 1. putchartab : changed conditional boundary → NO_COVERAGE
2. putchartab : Changed increment from 1 to -1 → NO_COVERAGE
3. putchartab : negated conditional → NO_COVERAGE
            for (int i = firstchar; i <= lastchar; i++) {
394 2 1. putchartab : Replaced integer subtraction with addition → NO_COVERAGE
2. putchartab : negated conditional → NO_COVERAGE
                if (ctabs[i - firstchar] != 0) {
395 2 1. putchartab : Replaced integer subtraction with addition → NO_COVERAGE
2. putchartab : removed call to com/lowagie/text/pdf/Pfm2afm::outchar → NO_COVERAGE
                    outchar(i, ctabs[i - firstchar], null);
396
                }
397
            }
398
        }
399
        else {
400 3 1. putchartab : changed conditional boundary → NO_COVERAGE
2. putchartab : Changed increment from 1 to -1 → NO_COVERAGE
3. putchartab : negated conditional → NO_COVERAGE
            for (int i = 0; i < 256; i++) {
401
                int j = back[i];
402 1 1. putchartab : negated conditional → NO_COVERAGE
                if (j != 0) {
403 2 1. putchartab : Replaced integer subtraction with addition → NO_COVERAGE
2. putchartab : removed call to com/lowagie/text/pdf/Pfm2afm::outchar → NO_COVERAGE
                    outchar(i, ctabs[j - firstchar], WinChars[j]);
404 1 1. putchartab : Replaced integer subtraction with addition → NO_COVERAGE
                    ctabs[j - firstchar] = 0;
405
                }
406
            }
407
            /* Put out all non-encoded chars */
408 3 1. putchartab : changed conditional boundary → NO_COVERAGE
2. putchartab : Changed increment from 1 to -1 → NO_COVERAGE
3. putchartab : negated conditional → NO_COVERAGE
            for (int i = firstchar; i <= lastchar; i++) {
409 2 1. putchartab : Replaced integer subtraction with addition → NO_COVERAGE
2. putchartab : negated conditional → NO_COVERAGE
                if (ctabs[i - firstchar] != 0) {
410 2 1. putchartab : Replaced integer subtraction with addition → NO_COVERAGE
2. putchartab : removed call to com/lowagie/text/pdf/Pfm2afm::outchar → NO_COVERAGE
                    outchar(-1, ctabs[i - firstchar], WinChars[i]);
411
                }
412
            }
413
        }
414
        /* Put out the trailer */
415 1 1. putchartab : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print("EndCharMetrics\n");
416
        
417
    }
418
    
419
    private void putkerntab() throws IOException {
420 1 1. putkerntab : negated conditional → NO_COVERAGE
        if (kernpairs == 0)
421
            return;
422 1 1. putkerntab : removed call to com/lowagie/text/pdf/RandomAccessFileOrArray::seek → NO_COVERAGE
        in.seek(kernpairs);
423
        int count = in.readUnsignedShortLE();
424
        int nzero = 0;
425 1 1. putkerntab : Replaced integer multiplication with division → NO_COVERAGE
        int[] kerns = new int[count * 3];
426 2 1. putkerntab : changed conditional boundary → NO_COVERAGE
2. putkerntab : negated conditional → NO_COVERAGE
        for (int k = 0; k < kerns.length;) {
427 1 1. putkerntab : Changed increment from 1 to -1 → NO_COVERAGE
            kerns[k++] = in.read();
428 1 1. putkerntab : Changed increment from 1 to -1 → NO_COVERAGE
            kerns[k++] = in.read();
429 2 1. putkerntab : Changed increment from 1 to -1 → NO_COVERAGE
2. putkerntab : negated conditional → NO_COVERAGE
            if ((kerns[k++] = in.readShortLE()) != 0)
430 1 1. putkerntab : Changed increment from 1 to -1 → NO_COVERAGE
                ++nzero;
431
        }
432 1 1. putkerntab : negated conditional → NO_COVERAGE
        if (nzero == 0)
433
            return;
434 1 1. putkerntab : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print("StartKernData\nStartKernPairs");
435 1 1. putkerntab : removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE
        outval(nzero);
436 1 1. putkerntab : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print('\n');
437 2 1. putkerntab : changed conditional boundary → NO_COVERAGE
2. putkerntab : negated conditional → NO_COVERAGE
        for (int k = 0; k < kerns.length; k += 3) {
438 2 1. putkerntab : Replaced integer addition with subtraction → NO_COVERAGE
2. putkerntab : negated conditional → NO_COVERAGE
            if (kerns[k + 2] != 0) {
439 1 1. putkerntab : removed call to java/io/PrintWriter::print → NO_COVERAGE
                out.print("KPX ");
440 1 1. putkerntab : removed call to java/io/PrintWriter::print → NO_COVERAGE
                out.print(WinChars[kerns[k]]);
441 1 1. putkerntab : removed call to java/io/PrintWriter::print → NO_COVERAGE
                out.print(' ');
442 2 1. putkerntab : Replaced integer addition with subtraction → NO_COVERAGE
2. putkerntab : removed call to java/io/PrintWriter::print → NO_COVERAGE
                out.print(WinChars[kerns[k + 1]]);
443 2 1. putkerntab : Replaced integer addition with subtraction → NO_COVERAGE
2. putkerntab : removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE
                outval(kerns[k + 2]);
444 1 1. putkerntab : removed call to java/io/PrintWriter::print → NO_COVERAGE
                out.print('\n');
445
            }
446
        }
447
        /* Put out trailer */
448 1 1. putkerntab : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print("EndKernPairs\nEndKernData\n");
449
    }
450
    
451
452
    private void  puttrailer() {
453 1 1. puttrailer : removed call to java/io/PrintWriter::print → NO_COVERAGE
        out.print("EndFontMetrics\n");
454
    }
455
456
    private short  vers;
457
    private int   h_len;             /* Total length of .pfm file */
458
    private String   copyright;   /* Copyright string [60]*/
459
    private short  type;
460
    private short  points;
461
    private short  verres;
462
    private short  horres;
463
    private short  ascent;
464
    private short  intleading;
465
    private short  extleading;
466
    private byte   italic;
467
    private byte   uline;
468
    private byte   overs;
469
    private short  weight;
470
    private byte   charset;         /* 0=windows, otherwise nomap */
471
    private short  pixwidth;        /* Width for mono fonts */
472
    private short  pixheight;
473
    private byte   kind;            /* Lower bit off in mono */
474
    private short  avgwidth;        /* Mono if avg=max width */
475
    private short  maxwidth;        /* Use to compute bounding box */
476
    private int   firstchar;       /* First char in table */
477
    private int   lastchar;        /* Last char in table */
478
    private byte   defchar;
479
    private byte   brkchar;
480
    private short  widthby;
481
    private int   device;
482
    private int   face;            /* Face name */
483
    private int   bits;
484
    private int   bitoff;
485
    private short  extlen;
486
    private int   psext;           /* PostScript extension */
487
    private int   chartab;         /* Character width tables */
488
    private int   res1;
489
    private int   kernpairs;       /* Kerning pairs */
490
    private int   res2;
491
    private int   fontname;        /* Font name */
492
493
/*
494
 *  Some metrics from the PostScript extension
495
 */
496
    private short  capheight;       /* Cap height */
497
    private short  xheight;         /* X height */
498
    private short  ascender;        /* Ascender */
499
    private short  descender;       /* Descender (positive) */
500
501
    
502
    private boolean isMono;
503
    /**
504
     * Translate table from 1004 to psstd.  1004 is an extension of the
505
     * Windows translate table used in PM.
506
     */
507
    private int[] Win2PSStd = {
508
            0, 0, 0, 0, 197, 198, 199, 0, 202, 0, 205, 206, 207, 0, 0, 0,   // 00
509
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   // 10
510
            32, 33, 34, 35, 36, 37, 38, 169, 40, 41, 42, 43, 44, 45, 46, 47,  // 20
511
            48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,  // 30
512
            64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,  // 40
513
            80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,  // 50
514
            193, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, // 60
515
            112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, // 70
516
            0, 0, 184, 166, 185, 188, 178, 179, 195, 189, 0, 172, 234, 0, 0, 0,   // 80
517
            0, 96, 0, 170, 186, 183, 177, 208, 196, 0, 0, 173, 250, 0, 0, 0,   // 90
518
            0, 161, 162, 163, 168, 165, 0, 167, 200, 0, 227, 171, 0, 0, 0, 197, // A0
519
            0, 0, 0, 0, 194, 0, 182, 180, 203, 0, 235, 187, 0, 0, 0, 191, // B0
520
            0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0,   // C0
521
            0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 251, // D0
522
            0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0,   // E0
523
            0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0    // F0
524
    };
525
526
    /**
527
     * Character class.  This is a minor attempt to overcome the problem that
528
     * in the pfm file, all unused characters are given the width of space.
529
     * Note that this array isn't used in iText.
530
     */
531
    private int[] WinClass = {
532
            0, 0, 0, 0, 2, 2, 2, 0, 2, 0, 2, 2, 2, 0, 0, 0,   /* 00 */
533
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   /* 10 */
534
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* 20 */
535
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* 30 */
536
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* 40 */
537
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* 50 */
538
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* 60 */
539
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,   /* 70 */
540
            0, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,   /* 80 */
541
            0, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2,   /* 90 */
542
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* a0 */
543
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* b0 */
544
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* c0 */
545
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* d0 */
546
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   /* e0 */
547
            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1   /* f0 */
548
    };
549
550
    /**
551
     * Windows character names.  Give a name to the used locations
552
     * for when the all flag is specified.
553
     */
554
    private String[] WinChars = {
555
            "W00",              /*   00    */
556
            "W01",              /*   01    */
557
            "W02",              /*   02    */
558
            "W03",              /*   03    */
559
            "macron",           /*   04    */
560
            "breve",            /*   05    */
561
            "dotaccent",        /*   06    */
562
            "W07",              /*   07    */
563
            "ring",             /*   08    */
564
            "W09",              /*   09    */
565
            "W0a",              /*   0a    */
566
            "W0b",              /*   0b    */
567
            "W0c",              /*   0c    */
568
            "W0d",              /*   0d    */
569
            "W0e",              /*   0e    */
570
            "W0f",              /*   0f    */
571
            "hungarumlaut",     /*   10    */
572
            "ogonek",           /*   11    */
573
            "caron",            /*   12    */
574
            "W13",              /*   13    */
575
            "W14",              /*   14    */
576
            "W15",              /*   15    */
577
            "W16",              /*   16    */
578
            "W17",              /*   17    */
579
            "W18",              /*   18    */
580
            "W19",              /*   19    */
581
            "W1a",              /*   1a    */
582
            "W1b",              /*   1b    */
583
            "W1c",              /*   1c    */
584
            "W1d",              /*   1d    */
585
            "W1e",              /*   1e    */
586
            "W1f",              /*   1f    */
587
            "space",            /*   20    */
588
            "exclam",           /*   21    */
589
            "quotedbl",         /*   22    */
590
            "numbersign",       /*   23    */
591
            "dollar",           /*   24    */
592
            "percent",          /*   25    */
593
            "ampersand",        /*   26    */
594
            "quotesingle",      /*   27    */
595
            "parenleft",        /*   28    */
596
            "parenright",       /*   29    */
597
            "asterisk",         /*   2A    */
598
            "plus",             /*   2B    */
599
            "comma",            /*   2C    */
600
            "hyphen",           /*   2D    */
601
            "period",           /*   2E    */
602
            "slash",            /*   2F    */
603
            "zero",             /*   30    */
604
            "one",              /*   31    */
605
            "two",              /*   32    */
606
            "three",            /*   33    */
607
            "four",             /*   34    */
608
            "five",             /*   35    */
609
            "six",              /*   36    */
610
            "seven",            /*   37    */
611
            "eight",            /*   38    */
612
            "nine",             /*   39    */
613
            "colon",            /*   3A    */
614
            "semicolon",        /*   3B    */
615
            "less",             /*   3C    */
616
            "equal",            /*   3D    */
617
            "greater",          /*   3E    */
618
            "question",         /*   3F    */
619
            "at",               /*   40    */
620
            "A",                /*   41    */
621
            "B",                /*   42    */
622
            "C",                /*   43    */
623
            "D",                /*   44    */
624
            "E",                /*   45    */
625
            "F",                /*   46    */
626
            "G",                /*   47    */
627
            "H",                /*   48    */
628
            "I",                /*   49    */
629
            "J",                /*   4A    */
630
            "K",                /*   4B    */
631
            "L",                /*   4C    */
632
            "M",                /*   4D    */
633
            "N",                /*   4E    */
634
            "O",                /*   4F    */
635
            "P",                /*   50    */
636
            "Q",                /*   51    */
637
            "R",                /*   52    */
638
            "S",                /*   53    */
639
            "T",                /*   54    */
640
            "U",                /*   55    */
641
            "V",                /*   56    */
642
            "W",                /*   57    */
643
            "X",                /*   58    */
644
            "Y",                /*   59    */
645
            "Z",                /*   5A    */
646
            "bracketleft",      /*   5B    */
647
            "backslash",        /*   5C    */
648
            "bracketright",     /*   5D    */
649
            "asciicircum",      /*   5E    */
650
            "underscore",       /*   5F    */
651
            "grave",            /*   60    */
652
            "a",                /*   61    */
653
            "b",                /*   62    */
654
            "c",                /*   63    */
655
            "d",                /*   64    */
656
            "e",                /*   65    */
657
            "f",                /*   66    */
658
            "g",                /*   67    */
659
            "h",                /*   68    */
660
            "i",                /*   69    */
661
            "j",                /*   6A    */
662
            "k",                /*   6B    */
663
            "l",                /*   6C    */
664
            "m",                /*   6D    */
665
            "n",                /*   6E    */
666
            "o",                /*   6F    */
667
            "p",                /*   70    */
668
            "q",                /*   71    */
669
            "r",                /*   72    */
670
            "s",                /*   73    */
671
            "t",                /*   74    */
672
            "u",                /*   75    */
673
            "v",                /*   76    */
674
            "w",                /*   77    */
675
            "x",                /*   78    */
676
            "y",                /*   79    */
677
            "z",                /*   7A    */
678
            "braceleft",        /*   7B    */
679
            "bar",              /*   7C    */
680
            "braceright",       /*   7D    */
681
            "asciitilde",       /*   7E    */
682
            "W7f",              /*   7F    */
683
            "euro",             /*   80    */
684
            "W81",              /*   81    */
685
            "quotesinglbase",   /*   82    */
686
            "florin",           /*   83    */
687
            "quotedblbase",     /*   84    */
688
            "ellipsis",         /*   85    */
689
            "dagger",           /*   86    */
690
            "daggerdbl",        /*   87    */
691
            "circumflex",       /*   88    */
692
            "perthousand",      /*   89    */
693
            "Scaron",           /*   8A    */
694
            "guilsinglleft",    /*   8B    */
695
            "OE",               /*   8C    */
696
            "W8d",              /*   8D    */
697
            "Zcaron",           /*   8E    */
698
            "W8f",              /*   8F    */
699
            "W90",              /*   90    */
700
            "quoteleft",        /*   91    */
701
            "quoteright",       /*   92    */
702
            "quotedblleft",     /*   93    */
703
            "quotedblright",    /*   94    */
704
            "bullet",           /*   95    */
705
            "endash",           /*   96    */
706
            "emdash",           /*   97    */
707
            "tilde",            /*   98    */
708
            "trademark",        /*   99    */
709
            "scaron",           /*   9A    */
710
            "guilsinglright",   /*   9B    */
711
            "oe",               /*   9C    */
712
            "W9d",              /*   9D    */
713
            "zcaron",           /*   9E    */
714
            "Ydieresis",        /*   9F    */
715
            "reqspace",         /*   A0    */
716
            "exclamdown",       /*   A1    */
717
            "cent",             /*   A2    */
718
            "sterling",         /*   A3    */
719
            "currency",         /*   A4    */
720
            "yen",              /*   A5    */
721
            "brokenbar",        /*   A6    */
722
            "section",          /*   A7    */
723
            "dieresis",         /*   A8    */
724
            "copyright",        /*   A9    */
725
            "ordfeminine",      /*   AA    */
726
            "guillemotleft",    /*   AB    */
727
            "logicalnot",       /*   AC    */
728
            "syllable",         /*   AD    */
729
            "registered",       /*   AE    */
730
            "macron",           /*   AF    */
731
            "degree",           /*   B0    */
732
            "plusminus",        /*   B1    */
733
            "twosuperior",      /*   B2    */
734
            "threesuperior",    /*   B3    */
735
            "acute",            /*   B4    */
736
            "mu",               /*   B5    */
737
            "paragraph",        /*   B6    */
738
            "periodcentered",   /*   B7    */
739
            "cedilla",          /*   B8    */
740
            "onesuperior",      /*   B9    */
741
            "ordmasculine",     /*   BA    */
742
            "guillemotright",   /*   BB    */
743
            "onequarter",       /*   BC    */
744
            "onehalf",          /*   BD    */
745
            "threequarters",    /*   BE    */
746
            "questiondown",     /*   BF    */
747
            "Agrave",           /*   C0    */
748
            "Aacute",           /*   C1    */
749
            "Acircumflex",      /*   C2    */
750
            "Atilde",           /*   C3    */
751
            "Adieresis",        /*   C4    */
752
            "Aring",            /*   C5    */
753
            "AE",               /*   C6    */
754
            "Ccedilla",         /*   C7    */
755
            "Egrave",           /*   C8    */
756
            "Eacute",           /*   C9    */
757
            "Ecircumflex",      /*   CA    */
758
            "Edieresis",        /*   CB    */
759
            "Igrave",           /*   CC    */
760
            "Iacute",           /*   CD    */
761
            "Icircumflex",      /*   CE    */
762
            "Idieresis",        /*   CF    */
763
            "Eth",              /*   D0    */
764
            "Ntilde",           /*   D1    */
765
            "Ograve",           /*   D2    */
766
            "Oacute",           /*   D3    */
767
            "Ocircumflex",      /*   D4    */
768
            "Otilde",           /*   D5    */
769
            "Odieresis",        /*   D6    */
770
            "multiply",         /*   D7    */
771
            "Oslash",           /*   D8    */
772
            "Ugrave",           /*   D9    */
773
            "Uacute",           /*   DA    */
774
            "Ucircumflex",      /*   DB    */
775
            "Udieresis",        /*   DC    */
776
            "Yacute",           /*   DD    */
777
            "Thorn",            /*   DE    */
778
            "germandbls",       /*   DF    */
779
            "agrave",           /*   E0    */
780
            "aacute",           /*   E1    */
781
            "acircumflex",      /*   E2    */
782
            "atilde",           /*   E3    */
783
            "adieresis",        /*   E4    */
784
            "aring",            /*   E5    */
785
            "ae",               /*   E6    */
786
            "ccedilla",         /*   E7    */
787
            "egrave",           /*   E8    */
788
            "eacute",           /*   E9    */
789
            "ecircumflex",      /*   EA    */
790
            "edieresis",        /*   EB    */
791
            "igrave",           /*   EC    */
792
            "iacute",           /*   ED    */
793
            "icircumflex",      /*   EE    */
794
            "idieresis",        /*   EF    */
795
            "eth",              /*   F0    */
796
            "ntilde",           /*   F1    */
797
            "ograve",           /*   F2    */
798
            "oacute",           /*   F3    */
799
            "ocircumflex",      /*   F4    */
800
            "otilde",           /*   F5    */
801
            "odieresis",        /*   F6    */
802
            "divide",           /*   F7    */
803
            "oslash",           /*   F8    */
804
            "ugrave",           /*   F9    */
805
            "uacute",           /*   FA    */
806
            "ucircumflex",      /*   FB    */
807
            "udieresis",        /*   FC    */
808
            "yacute",           /*   FD    */
809
            "thorn",            /*   FE    */
810
            "ydieresis"         /*   FF    */
811
    };
812
}

Mutations

174

1.1
Location : convert
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::openpfm → NO_COVERAGE

175

1.1
Location : convert
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::putheader → NO_COVERAGE

176

1.1
Location : convert
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::putchartab → NO_COVERAGE

177

1.1
Location : convert
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::putkerntab → NO_COVERAGE

178

1.1
Location : convert
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::puttrailer → NO_COVERAGE

179

1.1
Location : convert
Killed by : none
removed call to java/io/PrintWriter::flush → NO_COVERAGE

186

1.1
Location : main
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::convert → NO_COVERAGE

187

1.1
Location : main
Killed by : none
removed call to com/lowagie/text/pdf/RandomAccessFileOrArray::close → NO_COVERAGE

188

1.1
Location : main
Killed by : none
removed call to java/io/OutputStream::close → NO_COVERAGE

191

1.1
Location : main
Killed by : none
removed call to java/lang/Exception::printStackTrace → NO_COVERAGE

197

1.1
Location : readString
Killed by : none
removed call to com/lowagie/text/pdf/RandomAccessFileOrArray::readFully → NO_COVERAGE

199

1.1
Location : readString
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : readString
Killed by : none
negated conditional → NO_COVERAGE

200

1.1
Location : readString
Killed by : none
negated conditional → NO_COVERAGE

203

1.1
Location : readString
Killed by : none
mutated return of Object value for com/lowagie/text/pdf/Pfm2afm::readString to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE

210

1.1
Location : readString
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : readString
Killed by : none
negated conditional → NO_COVERAGE

214

1.1
Location : readString
Killed by : none
mutated return of Object value for com/lowagie/text/pdf/Pfm2afm::readString to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE

218

1.1
Location : outval
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

219

1.1
Location : outval
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

226

1.1
Location : outchar
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

227

1.1
Location : outchar
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE

228

1.1
Location : outchar
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

229

1.1
Location : outchar
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE

230

1.1
Location : outchar
Killed by : none
negated conditional → NO_COVERAGE

231

1.1
Location : outchar
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

232

1.1
Location : outchar
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

234

1.1
Location : outchar
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

238

1.1
Location : openpfm
Killed by : none
removed call to com/lowagie/text/pdf/RandomAccessFileOrArray::seek → NO_COVERAGE

275

1.1
Location : openpfm
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : openpfm
Killed by : none
changed conditional boundary → NO_COVERAGE

3.3
Location : openpfm
Killed by : none
negated conditional → NO_COVERAGE

4.4
Location : openpfm
Killed by : none
negated conditional → NO_COVERAGE

5.5
Location : openpfm
Killed by : none
negated conditional → NO_COVERAGE

6.6
Location : openpfm
Killed by : none
negated conditional → NO_COVERAGE

277

1.1
Location : openpfm
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

2.2
Location : openpfm
Killed by : none
removed call to com/lowagie/text/pdf/RandomAccessFileOrArray::seek → NO_COVERAGE

285

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

286

1.1
Location : putheader
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : putheader
Killed by : none
negated conditional → NO_COVERAGE

287

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

288

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

289

1.1
Location : putheader
Killed by : none
removed call to com/lowagie/text/pdf/RandomAccessFileOrArray::seek → NO_COVERAGE

291

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

292

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

293

1.1
Location : putheader
Killed by : none
negated conditional → NO_COVERAGE

294

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

296

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

302

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

303

1.1
Location : putheader
Killed by : none
negated conditional → NO_COVERAGE

304

1.1
Location : putheader
Killed by : none
removed call to com/lowagie/text/pdf/RandomAccessFileOrArray::seek → NO_COVERAGE

305

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

308

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

309

1.1
Location : putheader
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : putheader
Killed by : none
negated conditional → NO_COVERAGE

3.3
Location : putheader
Killed by : none
negated conditional → NO_COVERAGE

310

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

311

1.1
Location : putheader
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : putheader
Killed by : none
negated conditional → NO_COVERAGE

3.3
Location : putheader
Killed by : none
negated conditional → NO_COVERAGE

4.4
Location : putheader
Killed by : none
negated conditional → NO_COVERAGE

312

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

313

1.1
Location : putheader
Killed by : none
negated conditional → NO_COVERAGE

314

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

316

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

318

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

319

1.1
Location : putheader
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : putheader
Killed by : none
negated conditional → NO_COVERAGE

320

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

324

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

330

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

331

1.1
Location : putheader
Killed by : none
Replaced bitwise AND with OR → NO_COVERAGE

2.2
Location : putheader
Killed by : none
negated conditional → NO_COVERAGE

3.3
Location : putheader
Killed by : none
negated conditional → NO_COVERAGE

333

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

337

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

346

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

347

1.1
Location : putheader
Killed by : none
negated conditional → NO_COVERAGE

348

1.1
Location : putheader
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE

350

1.1
Location : putheader
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE

351

1.1
Location : putheader
Killed by : none
removed negation → NO_COVERAGE

2.2
Location : putheader
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

3.3
Location : putheader
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE

352

1.1
Location : putheader
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

2.2
Location : putheader
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE

353

1.1
Location : putheader
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

2.2
Location : putheader
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE

358

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

359

1.1
Location : putheader
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE

360

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

361

1.1
Location : putheader
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE

362

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

363

1.1
Location : putheader
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE

364

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

365

1.1
Location : putheader
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE

366

1.1
Location : putheader
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

370

1.1
Location : putchartab
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

2.2
Location : putchartab
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

372

1.1
Location : putchartab
Killed by : none
removed call to com/lowagie/text/pdf/RandomAccessFileOrArray::seek → NO_COVERAGE

373

1.1
Location : putchartab
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : putchartab
Killed by : none
Changed increment from 1 to -1 → NO_COVERAGE

3.3
Location : putchartab
Killed by : none
negated conditional → NO_COVERAGE

376

1.1
Location : putchartab
Killed by : none
negated conditional → NO_COVERAGE

377

1.1
Location : putchartab
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : putchartab
Killed by : none
Changed increment from 1 to -1 → NO_COVERAGE

3.3
Location : putchartab
Killed by : none
negated conditional → NO_COVERAGE

378

1.1
Location : putchartab
Killed by : none
negated conditional → NO_COVERAGE

383

1.1
Location : putchartab
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

384

1.1
Location : putchartab
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE

385

1.1
Location : putchartab
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

388

1.1
Location : putchartab
Killed by : none
negated conditional → NO_COVERAGE

393

1.1
Location : putchartab
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : putchartab
Killed by : none
Changed increment from 1 to -1 → NO_COVERAGE

3.3
Location : putchartab
Killed by : none
negated conditional → NO_COVERAGE

394

1.1
Location : putchartab
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

2.2
Location : putchartab
Killed by : none
negated conditional → NO_COVERAGE

395

1.1
Location : putchartab
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

2.2
Location : putchartab
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::outchar → NO_COVERAGE

400

1.1
Location : putchartab
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : putchartab
Killed by : none
Changed increment from 1 to -1 → NO_COVERAGE

3.3
Location : putchartab
Killed by : none
negated conditional → NO_COVERAGE

402

1.1
Location : putchartab
Killed by : none
negated conditional → NO_COVERAGE

403

1.1
Location : putchartab
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

2.2
Location : putchartab
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::outchar → NO_COVERAGE

404

1.1
Location : putchartab
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

408

1.1
Location : putchartab
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : putchartab
Killed by : none
Changed increment from 1 to -1 → NO_COVERAGE

3.3
Location : putchartab
Killed by : none
negated conditional → NO_COVERAGE

409

1.1
Location : putchartab
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

2.2
Location : putchartab
Killed by : none
negated conditional → NO_COVERAGE

410

1.1
Location : putchartab
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

2.2
Location : putchartab
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::outchar → NO_COVERAGE

415

1.1
Location : putchartab
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

420

1.1
Location : putkerntab
Killed by : none
negated conditional → NO_COVERAGE

422

1.1
Location : putkerntab
Killed by : none
removed call to com/lowagie/text/pdf/RandomAccessFileOrArray::seek → NO_COVERAGE

425

1.1
Location : putkerntab
Killed by : none
Replaced integer multiplication with division → NO_COVERAGE

426

1.1
Location : putkerntab
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : putkerntab
Killed by : none
negated conditional → NO_COVERAGE

427

1.1
Location : putkerntab
Killed by : none
Changed increment from 1 to -1 → NO_COVERAGE

428

1.1
Location : putkerntab
Killed by : none
Changed increment from 1 to -1 → NO_COVERAGE

429

1.1
Location : putkerntab
Killed by : none
Changed increment from 1 to -1 → NO_COVERAGE

2.2
Location : putkerntab
Killed by : none
negated conditional → NO_COVERAGE

430

1.1
Location : putkerntab
Killed by : none
Changed increment from 1 to -1 → NO_COVERAGE

432

1.1
Location : putkerntab
Killed by : none
negated conditional → NO_COVERAGE

434

1.1
Location : putkerntab
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

435

1.1
Location : putkerntab
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE

436

1.1
Location : putkerntab
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

437

1.1
Location : putkerntab
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : putkerntab
Killed by : none
negated conditional → NO_COVERAGE

438

1.1
Location : putkerntab
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

2.2
Location : putkerntab
Killed by : none
negated conditional → NO_COVERAGE

439

1.1
Location : putkerntab
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

440

1.1
Location : putkerntab
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

441

1.1
Location : putkerntab
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

442

1.1
Location : putkerntab
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

2.2
Location : putkerntab
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

443

1.1
Location : putkerntab
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

2.2
Location : putkerntab
Killed by : none
removed call to com/lowagie/text/pdf/Pfm2afm::outval → NO_COVERAGE

444

1.1
Location : putkerntab
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

448

1.1
Location : putkerntab
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

453

1.1
Location : puttrailer
Killed by : none
removed call to java/io/PrintWriter::print → NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT 1.4.2