001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: /* $Id: PDFEncoding.java 426576 2006-07-28 15:44:37Z jeremias $ */
019:
020: package org.apache.fop.pdf;
021:
022: // Java
023: import java.util.List;
024: import java.util.Map;
025: import java.util.Iterator;
026:
027: /**
028: * class representing an /Encoding object.
029: *
030: * A small object expressing the base encoding name and
031: * the differences from the base encoding.
032: *
033: * The three base encodings are given by their name.
034: *
035: * Encodings are specified in section 5.5.5 of the PDF 1.4 spec.
036: */
037: public class PDFEncoding extends PDFObject {
038:
039: /**
040: * the name for the standard encoding scheme
041: */
042: public static final String MAC_ROMAN_ENCODING = "MacRomanEncoding";
043:
044: /**
045: * the name for the standard encoding scheme
046: */
047: public static final String MAC_EXPERT_ENCODING = "MacExpertEncoding";
048:
049: /**
050: * the name for the standard encoding scheme
051: */
052: public static final String WIN_ANSI_ENCODING = "WinAnsiEncoding";
053:
054: /**
055: * the name for the base encoding.
056: * One of the three base encoding scheme names or
057: * the default font's base encoding if null.
058: */
059: protected String basename;
060:
061: /**
062: * the differences from the base encoding
063: */
064: protected Map differences;
065:
066: /**
067: * create the /Encoding object
068: *
069: * @param basename the name of the character encoding schema
070: */
071: public PDFEncoding(String basename) {
072:
073: /* generic creation of PDF object */
074: super ();
075:
076: /* set fields using paramaters */
077: this .basename = basename;
078: this .differences = new java.util.HashMap();
079: }
080:
081: /**
082: * add differences to the encoding
083: *
084: * @param code the first index of the sequence to be changed
085: * @param sequence the sequence of glyph names (as String)
086: */
087: public void addDifferences(int code, List sequence) {
088: differences.put(new Integer(code), sequence);
089: }
090:
091: /**
092: * @see org.apache.fop.pdf.PDFObject#toPDFString()
093: */
094: public String toPDFString() {
095: StringBuffer p = new StringBuffer(128);
096: p.append(getObjectID() + "<< /Type /Encoding");
097: if ((basename != null) && (!basename.equals(""))) {
098: p.append("\n/BaseEncoding /" + this .basename);
099: }
100: if (!differences.isEmpty()) {
101: p.append("\n/Differences [ ");
102: Object code;
103: Iterator codes = differences.keySet().iterator();
104: while (codes.hasNext()) {
105: code = codes.next();
106: p.append(" ");
107: p.append(code);
108: List sequence = (List) differences.get(code);
109: for (int i = 0; i < sequence.size(); i++) {
110: p.append(" /");
111: p.append((String) sequence.get(i));
112: }
113: }
114: p.append(" ]");
115: }
116: p.append(" >>\nendobj\n");
117: return p.toString();
118: }
119:
120: /*
121: * example (p. 214)
122: * 25 0 obj
123: * <<
124: * /Type /Encoding
125: * /Differences [39 /quotesingle 96 /grave 128
126: * /Adieresis /Aring /Ccedilla /Eacute /Ntilde
127: * /Odieresis /Udieresis /aacute /agrave]
128: * >>
129: * endobj
130: */
131: }
|