KannadaFormatter.java 3.27 KB
/*
 * Decompiled with CFR 0_118.
 */
package com.adobe.fontengine.inlineformatting.infontformatting;

import com.adobe.fontengine.inlineformatting.AttributedRun;
import com.adobe.fontengine.inlineformatting.infontformatting.IndicFormatter;

public class KannadaFormatter
extends IndicFormatter {
    protected int splitVowelsAndNormalize(AttributedRun run, int start, int limit) {
        block7 : while (start < limit) {
            int usv = run.elementAt(start);
            switch (usv) {
                case 3264: {
                    run.replace(start, new int[]{3263, 3285});
                    ++limit;
                    start += 2;
                    continue block7;
                }
                case 3271: {
                    run.replace(start, new int[]{3270, 3285});
                    ++limit;
                    start += 2;
                    continue block7;
                }
                case 3272: {
                    run.replace(start, new int[]{3270, 3286});
                    ++limit;
                    start += 2;
                    continue block7;
                }
                case 3274: {
                    run.replace(start, new int[]{3270, 3266});
                    ++limit;
                    start += 2;
                    continue block7;
                }
                case 3275: {
                    run.replace(start, new int[]{3270, 3266, 3285});
                    limit += 2;
                    start += 3;
                    continue block7;
                }
            }
            ++start;
        }
        return limit;
    }

    protected int nukta() {
        return 3260;
    }

    protected int virama() {
        return 3277;
    }

    protected boolean isConsonant(int usv) {
        return 3221 <= usv && usv <= 3257 || 9676 == usv;
    }

    protected boolean hasNukta(int usv) {
        return false;
    }

    protected int removeNukta(int usv) {
        return usv;
    }

    protected boolean isMark(int usv) {
        return 3073 <= usv && usv <= 3075 || 3260 == usv || 3262 <= usv && usv <= 3286;
    }

    protected boolean isIndependentVowel(int usv) {
        return 3205 <= usv && usv <= 3220 || 9676 == usv;
    }

    protected IndicFormatter.Position getPosition(int usv) {
        switch (usv) {
            case 3262: 
            case 3263: 
            case 3270: 
            case 3276: {
                return IndicFormatter.Position.topMatra;
            }
            case 3265: 
            case 3266: 
            case 3267: 
            case 3268: 
            case 3285: 
            case 3286: {
                return IndicFormatter.Position.rightMatra;
            }
            case 3073: 
            case 3074: 
            case 3075: {
                return IndicFormatter.Position.rightOther;
            }
        }
        return IndicFormatter.Position.any;
    }

    protected IndicFormatter.Shape rephLike(int usv) {
        if (usv == 3248) {
            return IndicFormatter.Shape.rephVowel;
        }
        return IndicFormatter.Shape.any;
    }

    protected boolean subjoins(int usv) {
        return this.isConsonant(usv);
    }

    protected boolean postjoins(int usv) {
        return false;
    }

    protected boolean postjoinsIndependentVowels(int usv) {
        return false;
    }
}