⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bidiline.java

📁 处理PDF
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
        for (; startIdx <= endIdx; ++startIdx) {            idx = bidi ? indexChars[startIdx] : startIdx;            c = text[idx];            ck = detailChunks[idx];            if (PdfChunk.noPrint(ck.getUnicodeEquivalent(c)))                continue;            if (ck.isImage() || ck.isSeparator() || ck.isTab()) {                if (buf.length() > 0) {                    ar.add(new PdfChunk(buf.toString(), refCk));                    buf = new StringBuffer();                }                ar.add(ck);            }            else if (ck == refCk) {                buf.append(c);            }            else {                if (buf.length() > 0) {                    ar.add(new PdfChunk(buf.toString(), refCk));                    buf = new StringBuffer();                }                if (!ck.isImage() && !ck.isSeparator() && !ck.isTab())                    buf.append(c);                refCk = ck;            }        }        if (buf.length() > 0) {            ar.add(new PdfChunk(buf.toString(), refCk));        }        if (extraPdfChunk != null)            ar.add(extraPdfChunk);        return ar;    }        public int[] getWord(int startIdx, int idx) {        int last = idx;        int first = idx;        // forward        for (; last < totalTextLength; ++last) {            if (!Character.isLetter(text[last]))                break;                    }        if (last == idx)            return null;        // backward        for (; first >= startIdx; --first) {            if (!Character.isLetter(text[first]))                break;                    }        ++first;        return new int[]{first, last};    }        public int trimRight(int startIdx, int endIdx) {        int idx = endIdx;        char c;        for (; idx >= startIdx; --idx) {            c = (char)detailChunks[idx].getUnicodeEquivalent(text[idx]);            if (!isWS(c))                break;        }        return idx;    }        public int trimLeft(int startIdx, int endIdx) {        int idx = startIdx;        char c;        for (; idx <= endIdx; ++idx) {            c = (char)detailChunks[idx].getUnicodeEquivalent(text[idx]);            if (!isWS(c))                break;        }        return idx;    }        public int trimRightEx(int startIdx, int endIdx) {        int idx = endIdx;        char c = 0;        for (; idx >= startIdx; --idx) {            c = (char)detailChunks[idx].getUnicodeEquivalent(text[idx]);            if (!isWS(c) && !PdfChunk.noPrint(c))                break;        }        return idx;    }        public int trimLeftEx(int startIdx, int endIdx) {        int idx = startIdx;        char c = 0;        for (; idx <= endIdx; ++idx) {            c = (char)detailChunks[idx].getUnicodeEquivalent(text[idx]);            if (!isWS(c) && !PdfChunk.noPrint(c))                break;        }        return idx;    }        public void reorder(int start, int end) {        byte maxLevel = orderLevels[start];        byte minLevel = maxLevel;        byte onlyOddLevels = maxLevel;        byte onlyEvenLevels = maxLevel;        for (int k = start + 1; k <= end; ++k) {            byte b = orderLevels[k];            if (b > maxLevel)                maxLevel = b;            else if (b < minLevel)                minLevel = b;            onlyOddLevels &= b;            onlyEvenLevels |= b;        }        if ((onlyEvenLevels & 1) == 0) // nothing to do            return;        if ((onlyOddLevels & 1) == 1) { // single inversion            flip(start, end + 1);            return;        }        minLevel |= 1;        for (; maxLevel >= minLevel; --maxLevel) {            int pstart = start;            for (;;) {                for (;pstart <= end; ++pstart) {                    if (orderLevels[pstart] >= maxLevel)                        break;                }                if (pstart > end)                    break;                int pend = pstart + 1;                for (; pend <= end; ++pend) {                    if (orderLevels[pend] < maxLevel)                        break;                }                flip(pstart, pend);                pstart = pend + 1;            }        }    }        public void flip(int start, int end) {        int mid = (start + end) / 2;        --end;        for (; start < mid; ++start, --end) {            int temp = indexChars[start];            indexChars[start] = indexChars[end];            indexChars[end] = temp;        }    }        public static boolean isWS(char c) {        return (c <= ' ');    }    static {        mirrorChars.put(0x0028, 0x0029); // LEFT PARENTHESIS        mirrorChars.put(0x0029, 0x0028); // RIGHT PARENTHESIS        mirrorChars.put(0x003C, 0x003E); // LESS-THAN SIGN        mirrorChars.put(0x003E, 0x003C); // GREATER-THAN SIGN        mirrorChars.put(0x005B, 0x005D); // LEFT SQUARE BRACKET        mirrorChars.put(0x005D, 0x005B); // RIGHT SQUARE BRACKET        mirrorChars.put(0x007B, 0x007D); // LEFT CURLY BRACKET        mirrorChars.put(0x007D, 0x007B); // RIGHT CURLY BRACKET        mirrorChars.put(0x00AB, 0x00BB); // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK        mirrorChars.put(0x00BB, 0x00AB); // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK        mirrorChars.put(0x2039, 0x203A); // SINGLE LEFT-POINTING ANGLE QUOTATION MARK        mirrorChars.put(0x203A, 0x2039); // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK        mirrorChars.put(0x2045, 0x2046); // LEFT SQUARE BRACKET WITH QUILL        mirrorChars.put(0x2046, 0x2045); // RIGHT SQUARE BRACKET WITH QUILL        mirrorChars.put(0x207D, 0x207E); // SUPERSCRIPT LEFT PARENTHESIS        mirrorChars.put(0x207E, 0x207D); // SUPERSCRIPT RIGHT PARENTHESIS        mirrorChars.put(0x208D, 0x208E); // SUBSCRIPT LEFT PARENTHESIS        mirrorChars.put(0x208E, 0x208D); // SUBSCRIPT RIGHT PARENTHESIS        mirrorChars.put(0x2208, 0x220B); // ELEMENT OF        mirrorChars.put(0x2209, 0x220C); // NOT AN ELEMENT OF        mirrorChars.put(0x220A, 0x220D); // SMALL ELEMENT OF        mirrorChars.put(0x220B, 0x2208); // CONTAINS AS MEMBER        mirrorChars.put(0x220C, 0x2209); // DOES NOT CONTAIN AS MEMBER        mirrorChars.put(0x220D, 0x220A); // SMALL CONTAINS AS MEMBER        mirrorChars.put(0x2215, 0x29F5); // DIVISION SLASH        mirrorChars.put(0x223C, 0x223D); // TILDE OPERATOR        mirrorChars.put(0x223D, 0x223C); // REVERSED TILDE        mirrorChars.put(0x2243, 0x22CD); // ASYMPTOTICALLY EQUAL TO        mirrorChars.put(0x2252, 0x2253); // APPROXIMATELY EQUAL TO OR THE IMAGE OF        mirrorChars.put(0x2253, 0x2252); // IMAGE OF OR APPROXIMATELY EQUAL TO        mirrorChars.put(0x2254, 0x2255); // COLON EQUALS        mirrorChars.put(0x2255, 0x2254); // EQUALS COLON        mirrorChars.put(0x2264, 0x2265); // LESS-THAN OR EQUAL TO        mirrorChars.put(0x2265, 0x2264); // GREATER-THAN OR EQUAL TO        mirrorChars.put(0x2266, 0x2267); // LESS-THAN OVER EQUAL TO        mirrorChars.put(0x2267, 0x2266); // GREATER-THAN OVER EQUAL TO        mirrorChars.put(0x2268, 0x2269); // [BEST FIT] LESS-THAN BUT NOT EQUAL TO        mirrorChars.put(0x2269, 0x2268); // [BEST FIT] GREATER-THAN BUT NOT EQUAL TO        mirrorChars.put(0x226A, 0x226B); // MUCH LESS-THAN        mirrorChars.put(0x226B, 0x226A); // MUCH GREATER-THAN        mirrorChars.put(0x226E, 0x226F); // [BEST FIT] NOT LESS-THAN        mirrorChars.put(0x226F, 0x226E); // [BEST FIT] NOT GREATER-THAN        mirrorChars.put(0x2270, 0x2271); // [BEST FIT] NEITHER LESS-THAN NOR EQUAL TO        mirrorChars.put(0x2271, 0x2270); // [BEST FIT] NEITHER GREATER-THAN NOR EQUAL TO        mirrorChars.put(0x2272, 0x2273); // [BEST FIT] LESS-THAN OR EQUIVALENT TO        mirrorChars.put(0x2273, 0x2272); // [BEST FIT] GREATER-THAN OR EQUIVALENT TO        mirrorChars.put(0x2274, 0x2275); // [BEST FIT] NEITHER LESS-THAN NOR EQUIVALENT TO        mirrorChars.put(0x2275, 0x2274); // [BEST FIT] NEITHER GREATER-THAN NOR EQUIVALENT TO        mirrorChars.put(0x2276, 0x2277); // LESS-THAN OR GREATER-THAN        mirrorChars.put(0x2277, 0x2276); // GREATER-THAN OR LESS-THAN        mirrorChars.put(0x2278, 0x2279); // NEITHER LESS-THAN NOR GREATER-THAN        mirrorChars.put(0x2279, 0x2278); // NEITHER GREATER-THAN NOR LESS-THAN        mirrorChars.put(0x227A, 0x227B); // PRECEDES        mirrorChars.put(0x227B, 0x227A); // SUCCEEDS        mirrorChars.put(0x227C, 0x227D); // PRECEDES OR EQUAL TO        mirrorChars.put(0x227D, 0x227C); // SUCCEEDS OR EQUAL TO        mirrorChars.put(0x227E, 0x227F); // [BEST FIT] PRECEDES OR EQUIVALENT TO        mirrorChars.put(0x227F, 0x227E); // [BEST FIT] SUCCEEDS OR EQUIVALENT TO        mirrorChars.put(0x2280, 0x2281); // [BEST FIT] DOES NOT PRECEDE        mirrorChars.put(0x2281, 0x2280); // [BEST FIT] DOES NOT SUCCEED        mirrorChars.put(0x2282, 0x2283); // SUBSET OF        mirrorChars.put(0x2283, 0x2282); // SUPERSET OF        mirrorChars.put(0x2284, 0x2285); // [BEST FIT] NOT A SUBSET OF        mirrorChars.put(0x2285, 0x2284); // [BEST FIT] NOT A SUPERSET OF        mirrorChars.put(0x2286, 0x2287); // SUBSET OF OR EQUAL TO        mirrorChars.put(0x2287, 0x2286); // SUPERSET OF OR EQUAL TO        mirrorChars.put(0x2288, 0x2289); // [BEST FIT] NEITHER A SUBSET OF NOR EQUAL TO        mirrorChars.put(0x2289, 0x2288); // [BEST FIT] NEITHER A SUPERSET OF NOR EQUAL TO        mirrorChars.put(0x228A, 0x228B); // [BEST FIT] SUBSET OF WITH NOT EQUAL TO        mirrorChars.put(0x228B, 0x228A); // [BEST FIT] SUPERSET OF WITH NOT EQUAL TO        mirrorChars.put(0x228F, 0x2290); // SQUARE IMAGE OF        mirrorChars.put(0x2290, 0x228F); // SQUARE ORIGINAL OF        mirrorChars.put(0x2291, 0x2292); // SQUARE IMAGE OF OR EQUAL TO        mirrorChars.put(0x2292, 0x2291); // SQUARE ORIGINAL OF OR EQUAL TO        mirrorChars.put(0x2298, 0x29B8); // CIRCLED DIVISION SLASH        mirrorChars.put(0x22A2, 0x22A3); // RIGHT TACK        mirrorChars.put(0x22A3, 0x22A2); // LEFT TACK        mirrorChars.put(0x22A6, 0x2ADE); // ASSERTION        mirrorChars.put(0x22A8, 0x2AE4); // TRUE        mirrorChars.put(0x22A9, 0x2AE3); // FORCES        mirrorChars.put(0x22AB, 0x2AE5); // DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE        mirrorChars.put(0x22B0, 0x22B1); // PRECEDES UNDER RELATION        mirrorChars.put(0x22B1, 0x22B0); // SUCCEEDS UNDER RELATION        mirrorChars.put(0x22B2, 0x22B3); // NORMAL SUBGROUP OF

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -