/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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. */ package org.apache.fontbox.type1; /** * A lexical token in an Adobe Type 1 font. * * @see Type1Lexer * * @author John Hewson */ class Token { /** * All different types of tokens. * */ enum Kind { NONE, STRING, NAME, LITERAL, REAL, INTEGER, START_ARRAY, END_ARRAY, START_PROC, END_PROC, START_DICT, END_DICT, CHARSTRING } // exposed statically for convenience static final Kind STRING = Kind.STRING; static final Kind NAME = Kind.NAME; static final Kind LITERAL = Kind.LITERAL; static final Kind REAL = Kind.REAL; static final Kind INTEGER = Kind.INTEGER; static final Kind START_ARRAY = Kind.START_ARRAY; static final Kind END_ARRAY = Kind.END_ARRAY; static final Kind START_PROC = Kind.START_PROC; static final Kind END_PROC = Kind.END_PROC; static final Kind CHARSTRING = Kind.CHARSTRING; static final Kind START_DICT = Kind.START_DICT; static final Kind END_DICT = Kind.END_DICT; private String text; private byte[] data; private final Kind kind; /** * Constructs a new Token object given its text and kind. * @param text * @param type */ Token(String text, Kind type) { this.text = text; this.kind = type; } /** * Constructs a new Token object given its single-character text and kind. * @param character * @param type */ Token(char character, Kind type) { this.text = Character.toString(character); this.kind = type; } /** * Constructs a new Token object given its raw data and kind. * This is for CHARSTRING tokens only. * @param data * @param type */ Token(byte[] data, Kind type) { this.data = data; this.kind = type; } public String getText() { return text; } public Kind getKind() { return kind; } public int intValue() { // some fonts have reals where integers should be, so we tolerate it return (int)Float.parseFloat(text); } public float floatValue() { return Float.parseFloat(text); } public boolean booleanValue() { return text.equals("true"); } public byte[] getData() { return data; } /** * {@inheritDoc} */ @Override public String toString() { if (kind == CHARSTRING) { return "Token[kind=CHARSTRING, data=" + data.length + " bytes]"; } else { return "Token[kind=" + kind + ", text=" + text + "]"; } } }