iTextSharp.text.pdf.ArabicLigaturizer.Arabic_shape C# (CSharp) Метод

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

static private Arabic_shape ( char src, int srcoffset, int srclength, char dest, int destoffset, int destlength, int level ) : int
src char
srcoffset int
srclength int
dest char
destoffset int
destlength int
level int
Результат int
        internal static int Arabic_shape(char[] src, int srcoffset, int srclength, char[] dest, int destoffset, int destlength, int level)
        {
            char[] str = new char[srclength];
            for (int k = srclength + srcoffset - 1; k >= srcoffset; --k)
                str[k - srcoffset] = src[k];
            StringBuilder str2 = new StringBuilder(srclength);
            Shape(str, str2, level);
            if ((level & (ar_composedtashkeel | ar_lig)) != 0)
                Doublelig(str2, level);
            //        string.Reverse();
            System.Array.Copy(str2.ToString().ToCharArray(), 0, dest, destoffset, str2.Length);
            return str2.Length;
        }

Usage Example

        public void DoArabicShapping()
        {
            var src  = 0;
            var dest = 0;

            for (; ;)
            {
                while (src < TotalTextLength)
                {
                    var c = Text[src];
                    if (c >= 0x0600 && c <= 0x06ff)
                    {
                        break;
                    }

                    if (src != dest)
                    {
                        Text[dest]         = Text[src];
                        DetailChunks[dest] = DetailChunks[src];
                        OrderLevels[dest]  = OrderLevels[src];
                    }
                    ++src;
                    ++dest;
                }
                if (src >= TotalTextLength)
                {
                    TotalTextLength = dest;
                    return;
                }
                var startArabicIdx = src;
                ++src;
                while (src < TotalTextLength)
                {
                    var c = Text[src];
                    if (c < 0x0600 || c > 0x06ff)
                    {
                        break;
                    }

                    ++src;
                }
                var arabicWordSize = src - startArabicIdx;
                var size           = ArabicLigaturizer.Arabic_shape(Text, startArabicIdx, arabicWordSize, Text, dest, arabicWordSize, ArabicOptions);
                if (startArabicIdx != dest)
                {
                    for (var k = 0; k < size; ++k)
                    {
                        DetailChunks[dest]  = DetailChunks[startArabicIdx];
                        OrderLevels[dest++] = OrderLevels[startArabicIdx++];
                    }
                }
                else
                {
                    dest += size;
                }
            }
        }