aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache/fop/pdf/PDFEncoding.java
blob: f7dd92ad4743a6f53de586e198fb2dfa4e0eba7c (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
/*
 * Copyright 1999-2004 The Apache Software Foundation.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/* $Id$ */
 
package org.apache.fop.pdf;

// Java
import java.util.List;
import java.util.Map;
import java.util.Iterator;

/**
 * class representing an /Encoding object.
 *
 * A small object expressing the base encoding name and
 * the differences from the base encoding.
 *
 * The three base encodings are given by their name.
 *
 * Encodings are specified in section 5.5.5 of the PDF 1.4 spec.
 */
public class PDFEncoding extends PDFObject {

    /**
     * the name for the standard encoding scheme
     */
    public static final String MAC_ROMAN_ENCODING = "MacRomanEncoding";

    /**
     * the name for the standard encoding scheme
     */
    public static final String MAC_EXPERT_ENCODING = "MacExpertEncoding";

    /**
     * the name for the standard encoding scheme
     */
    public static final String WIN_ANSI_ENCODING = "WinAnsiEncoding";

    /**
     * the name for the base encoding.
     * One of the three base encoding scheme names or
     * the default font's base encoding if null.
     */
    protected String basename;

    /**
     * the differences from the base encoding
     */
    protected Map differences;

    /**
     * create the /Encoding object
     *
     * @param basename the name of the character encoding schema
     */
    public PDFEncoding(String basename) {

        /* generic creation of PDF object */
        super();

        /* set fields using paramaters */
        this.basename = basename;
        this.differences = new java.util.HashMap();
    }

    /**
     * add differences to the encoding
     *
     * @param code the first index of the sequence to be changed
     * @param sequence the sequence of glyph names (as String)
     */
    public void addDifferences(int code, List sequence) {
        differences.put(new Integer(code), sequence);
    }

    /**
     * @see org.apache.fop.pdf.PDFObject#toPDFString()
     */
    public String toPDFString() {
        StringBuffer p = new StringBuffer(128);
        p.append(getObjectID() 
            + "<< /Type /Encoding");
        if ((basename != null) && (!basename.equals(""))) {
            p.append("\n/BaseEncoding /" + this.basename);
        }
        if (!differences.isEmpty()) {
            p.append("\n/Differences [ ");
            Object code;
            Iterator codes = differences.keySet().iterator();
            while (codes.hasNext()) {
                code = codes.next();
                p.append(" ");
                p.append(code);
                List sequence = (List)differences.get(code);
                for (int i = 0; i < sequence.size(); i++) {
                    p.append(" /");
                    p.append((String)sequence.get(i));
                }
            }
            p.append(" ]");
        }
        p.append(" >>\nendobj\n");
        return p.toString();
    }

    /*
     * example (p. 214)
     * 25 0 obj
     * <<
     * /Type /Encoding
     * /Differences [39 /quotesingle 96 /grave 128
     * /Adieresis /Aring /Ccedilla /Eacute /Ntilde
     * /Odieresis /Udieresis /aacute /agrave]
     * >>
     * endobj
     */
}