All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jpedal.objects.raw.PdfKeyPairsIterator Maven / Gradle / Ivy

/*
 * ===========================================
 * Java Pdf Extraction Decoding Access Library
 * ===========================================
 *
 * Project Info:  http://www.idrsolutions.com
 * Help section for developers at http://www.idrsolutions.com/support/
 *
 * (C) Copyright 1997-2017 IDRsolutions and Contributors.
 *
 * This file is part of JPedal/JPDF2HTML5
 *
 @LICENSE@
 *
 * ---------------
 * PdfKeyPairsIterator.java
 * ---------------
 */
package org.jpedal.objects.raw;

import org.jpedal.utils.NumberUtils;

/**
 * allow fast access to data from PDF object
 */
public class PdfKeyPairsIterator {

    private final byte[][] keys, values;

    int maxCount, current;

    public PdfKeyPairsIterator(final byte[][] keys, final byte[][] values) {

        this.keys = keys;
        this.values = values;

        if (keys != null) {
            maxCount = keys.length;
        }

        current = 0;
    }

    /**
     * number of PAIRS (or keys)
     *
     * @return
     */
    public int getTokenCount() {
        return maxCount;
    }

    /**
     * roll onto next key and value
     */
    public void nextPair() {

        if (current < maxCount) {
            current++;
        } else {
            throw new RuntimeException("No keys left in PdfKeyPairsIterator");
        }
    }

    /**
     * next key
     *
     * @return
     */
    public String getNextKeyAsString() {

        return new String(keys[current]);

    }

    /**
     * used by CharProcs to return number or number of key (ie /12 or /A)
     *
     * @return
     */
    public int getNextKeyAsNumber() {

        final int length = keys[current].length;
        final boolean isNumber = isNextKeyANumber();

        if (!isNumber) {
            if (keys[current].length != 1) {
                if (1 == 1) {
                    throw new RuntimeException("Unexpected value in getNextKeyAsNumber >" + new String(keys[current]) + '<');
                }
            } else {
                return (keys[current][0] & 255);
            }
        } else {
            return NumberUtils.parseInt(0, length, keys[current]);
        }

        return -1;
    }

    public boolean isNextKeyANumber() {

        final int length = keys[current].length;

        boolean isNumber = true;

        for (int ii = 0; ii < length; ii++) {
            final int nextChar = keys[current][ii];

            if (nextChar >= '0' && nextChar <= '9') {

            } else {
                isNumber = false;
                ii = length;
            }
        }
        return isNumber;
    }

    public boolean hasMorePairs() {
        return current < maxCount;
    }

    public byte[] getNextValueAsBytes() {
        if (values[current] == null) {
            return null;
        } else {
            return values[current];
        }
    }

    public String getNextValueAsString() {
        if (values[current] == null) {
            return null;
        } else {
            return new String(values[current]);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy