blob: f7dd92ad4743a6f53de586e198fb2dfa4e0eba7c [file] [log] [blame]
/*
* 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
*/
}