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

X12Encodation() приватный статический Метод

private static X12Encodation ( byte text, int textOffset, int textLength, byte data, int dataOffset, int dataLength ) : int
text byte
textOffset int
textLength int
data byte
dataOffset int
dataLength int
Результат int
        private static int X12Encodation(byte[] text, int textOffset, int textLength, byte[] data, int dataOffset, int dataLength) {
            int ptrIn, ptrOut, count, k, n, ci;
            byte c;
            if (textLength == 0)
                return 0;
            ptrIn = 0;
            ptrOut = 0;
            byte[] x = new byte[textLength];
            count = 0;
            for (; ptrIn < textLength; ++ptrIn) {
                int i = x12.IndexOf((char)text[ptrIn + textOffset]);
                if (i >= 0) {
                    x[ptrIn] = (byte)i;
                    ++count;
                }
                else {
                    x[ptrIn] = 100;
                    if (count >= 6)
                        count -= (count / 3) * 3;
                    for (k = 0; k < count; ++k)
                        x[ptrIn - k - 1] = 100;
                    count = 0;
                }
            }
            if (count >= 6)
                count -= (count / 3) * 3;
            for (k = 0; k < count; ++k)
                x[ptrIn - k - 1] = 100;
            ptrIn = 0;
            c = 0;
            for (; ptrIn < textLength; ++ptrIn) {
                c = x[ptrIn];
                if (ptrOut >= dataLength)
                    break;
                if (c < 40) {
                    if (ptrIn == 0 || (ptrIn > 0 && x[ptrIn - 1] > 40))
                        data[dataOffset + ptrOut++] = (byte)238;
                    if (ptrOut + 2 > dataLength)
                        break;
                    n = 1600 * x[ptrIn] + 40 * x[ptrIn + 1] + x[ptrIn + 2] + 1;
                    data[dataOffset + ptrOut++] = (byte)(n / 256);
                    data[dataOffset + ptrOut++] = (byte)n;
                    ptrIn += 2;
                }
                else {
                    if (ptrIn > 0 && x[ptrIn - 1] < 40)
                        data[dataOffset + ptrOut++] = (byte)254;
                    ci = text[ptrIn + textOffset] & 0xff;
                    if (ci > 127) {
                        data[dataOffset + ptrOut++] = (byte)235;
                        ci -= 128;
                    }
                    if (ptrOut >= dataLength)
                        break;
                    data[dataOffset + ptrOut++] = (byte)(ci + 1);
                }
            }
            c = 100;
            if (textLength > 0)
                c = x[textLength - 1];
            if (ptrIn != textLength || (c < 40 && ptrOut >= dataLength))
                return -1;
            if (c < 40)
                data[dataOffset + ptrOut++] = (byte)(254);
            return ptrOut;
        }