iTextSharp.text.pdf.CJKFont.ConvertToVCIDMetrics C# (CSharp) Метод

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

static private ConvertToVCIDMetrics ( int keys, IntHashtable v, IntHashtable h ) : string
keys int
v IntHashtable
h IntHashtable
Результат string
        internal static string ConvertToVCIDMetrics(int[] keys, IntHashtable v, IntHashtable h)
        {
            if (keys.Length == 0)
                return null;
            int lastCid = 0;
            int lastValue = 0;
            int lastHValue = 0;
            int start;
            for (start = 0; start < keys.Length; ++start) {
                lastCid = keys[start];
                lastValue = v[lastCid];
                if (lastValue != 0) {
                    ++start;
                    break;
                }
                else
                    lastHValue = h[lastCid];
            }
            if (lastValue == 0)
                return null;
            if (lastHValue == 0)
                lastHValue = 1000;
            StringBuilder buf = new StringBuilder();
            buf.Append('[');
            buf.Append(lastCid);
            int state = FIRST;
            for (int k = start; k < keys.Length; ++k) {
                int cid = keys[k];
                int value = v[cid];
                if (value == 0)
                    continue;
                int hValue = h[lastCid];
                if (hValue == 0)
                    hValue = 1000;
                switch (state) {
                    case FIRST: {
                        if (cid == lastCid + 1 && value == lastValue && hValue == lastHValue) {
                            state = SERIAL;
                        }
                        else {
                            buf.Append(' ').Append(lastCid).Append(' ').Append(-lastValue).Append(' ').Append(lastHValue / 2).Append(' ').Append(V1Y).Append(' ').Append(cid);
                        }
                        break;
                    }
                    case SERIAL: {
                        if (cid != lastCid + 1 || value != lastValue || hValue != lastHValue) {
                            buf.Append(' ').Append(lastCid).Append(' ').Append(-lastValue).Append(' ').Append(lastHValue / 2).Append(' ').Append(V1Y).Append(' ').Append(cid);
                            state = FIRST;
                        }
                        break;
                    }
                }
                lastValue = value;
                lastCid = cid;
                lastHValue = hValue;
            }
            buf.Append(' ').Append(lastCid).Append(' ').Append(-lastValue).Append(' ').Append(lastHValue / 2).Append(' ').Append(V1Y).Append(" ]");
            return buf.ToString();
        }