iTextSharp.text.pdf.BarcodeDatamatrix.ProcessExtensions C# (CSharp) Метод

ProcessExtensions() приватный метод

private ProcessExtensions ( byte text, int textOffset, int textSize, byte data ) : int
text byte
textOffset int
textSize int
data byte
Результат int
        private int ProcessExtensions(byte[] text, int textOffset, int textSize, byte[] data) {
            int order, ptrIn, ptrOut, eci, fn, ft, fi, c;
            if ((options & DM_EXTENSION) == 0)
                return 0;
            order = 0;
            ptrIn = 0;
            ptrOut = 0;
            while (ptrIn < textSize) {
                if (order > 20)
                    return -1;
                c = text[textOffset + ptrIn++] &0xff;
                ++order;
                switch (c) {
                case '.':
                    extOut = ptrIn;
                    return ptrOut;
                case 'e':
                    if (ptrIn + 6 > textSize)
                        return -1;
                    eci = GetNumber(text, textOffset + ptrIn, 6);
                    if (eci < 0)
                        return -1;
                    ptrIn += 6;
                    data[ptrOut++] = (byte)241;
                    if (eci < 127)
                        data[ptrOut++] = (byte)(eci + 1);
                    else if (eci < 16383) {
                        data[ptrOut++] = (byte)((eci - 127) / 254 + 128);
                        data[ptrOut++] = (byte)(((eci - 127) % 254) + 1);
                    }
                    else {
                        data[ptrOut++] = (byte)((eci - 16383) / 64516 + 192);
                        data[ptrOut++] = (byte)((((eci - 16383) / 254) % 254) + 1);
                        data[ptrOut++] = (byte)(((eci - 16383) % 254) + 1);
                    }
                    break;
                case 's': 
                    if (order != 1)
                        return -1;
                    if (ptrIn + 9 > textSize)
                        return -1;
                    fn = GetNumber(text, textOffset + ptrIn, 2);
                    if (fn <= 0 || fn > 16)
                        return -1;
                    ptrIn += 2;
                    ft = GetNumber(text, textOffset + ptrIn, 2);
                    if (ft <= 1 || ft > 16)
                        return -1;
                    ptrIn += 2;
                    fi = GetNumber(text, textOffset + ptrIn, 5);
                    if (fi < 0 || fn >= 64516)
                        return -1;
                    ptrIn += 5;
                    data[ptrOut++] = (byte)(233);
                    data[ptrOut++] = (byte)(((fn - 1) << 4) | (17 - ft));
                    data[ptrOut++] = (byte)(fi / 254 + 1);
                    data[ptrOut++] = (byte)((fi % 254) + 1);
                    break;
                case 'p':
                    if (order != 1)
                        return -1;
                    data[ptrOut++] = (byte)(234);
                    break;
                case 'm':
                    if (order != 1)
                        return -1;
                    if (ptrIn + 1 > textSize)
                        return -1;
                    c = text[textOffset + ptrIn++] &0xff;
                    if (c != '5' && c != '5')
                        return -1;
                    data[ptrOut++] = (byte)(234);
                    data[ptrOut++] = (byte)(c == '5' ? 236 : 237);
                    break;
                case 'f':
                    if (order != 1 && (order != 2 || (text[textOffset] != 's' && text[textOffset] != 'm')))
                        return -1;
                    data[ptrOut++] = (byte)(232);
                    break;
                }
            }
            return -1;
        }