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

org.jpedal.parser.text.CharReader 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@
 *
 * ---------------
 * CharReader.java
 * ---------------
 */

package org.jpedal.parser.text;

/**
 * @author markee
 */
class CharReader {


    static int getNextValue(int i, final byte[] stream, final GlyphData glyphData, final boolean isCID) {

        int rawInt;

        //extract the next binary index value and convert to char, losing any returns
        while (true) {

            glyphData.setLastChar();

            rawInt = stream[i];
            if (rawInt < 0) {
                rawInt = 256 + rawInt;
            }

            glyphData.setRawChar((char) rawInt);

            //eliminate escaped tabs and returns
            if (glyphData.getRawChar() == 92 && (stream[i + 1] == 13 || stream[i + 1] == 10)) { // '\\'=92
                i++;
                rawInt = stream[i];
                if (rawInt < 0) {
                    rawInt = 256 + rawInt;
                }
                glyphData.setRawChar((char) rawInt);

            }

            glyphData.setRawInt(rawInt);

            //stop any returns in data stream getting through (happens in ghostscript)
            if ((glyphData.getRawChar() != 10 || (isCID && glyphData.getOpenChar() != '<')) && glyphData.getRawChar() != 13) {
                break;
            }

            i++;
        }
        
        /*flag if we have entered/exited text block*/
        if (glyphData.isText()) {
            //non CID deliminator (allow for escaped deliminator)
            final char testChar = glyphData.getRawChar();
            if ((testChar == 40 || testChar == 41) && glyphData.getLastChar() != 92) {  // '\\'=92 ')'=41
                glyphData.updatePrefixCount(testChar);
            } else if (testChar == 62 && glyphData.getOpenChar() == 60) {  // ie <01>tj  '<'=60 '<'=62
                glyphData.setText(false); //unset text flag
            }
        }

        return i;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy