src/main/java/com/basistech/tclre/ColorMap.java
void okcolors(Nfa nfa) {
        ColorDesc cd;
        ColorDesc scd;
        Arc a;
        short sco;

        for (short co = 0; co < colorDescs.size(); co++) {
            cd = colorDescs.get(co);
            if (cd == null) {
                continue; // not in use at all, so can't have a subcolor.
            }

            sco = cd.sub;

            if (sco == Constants.NOSUB) {
            /* has no subcolor, no further action */
            } else if (sco == co) {
            /* is subcolor, let parent deal with it */
            } else if (cd.getNChars() == 0) {
            /* parent empty, its arcs change color to subcolor */
                cd.sub = Constants.NOSUB;
                scd = colorDescs.get(sco);

                assert scd.getNChars() > 0;
                assert scd.sub == sco;

                scd.sub = Constants.NOSUB;
                while ((a = cd.arcs) != null) {
                    assert a.co == co;
                    cd.arcs = a.colorchain;
                    a.setColor(sco);
                    a.colorchain = scd.arcs;
                    scd.arcs = a;
                }
                freecolor(co);
            } else {
                /* parent's arcs must gain parallel subcolor arcs */
                cd.sub = Constants.NOSUB;
                scd = colorDescs.get(sco);

                assert scd.getNChars() > 0;
                assert scd.sub == sco;

                scd.sub = Constants.NOSUB;

                for (a = cd.arcs; a != null; a = a.colorchain) {
                    assert a.co == co;
                    nfa.newarc(a.type, sco, a.from, a.to);
                }
            }
        }
    }
void okcolors(Nfa nfa) {
        ColorDesc cd;
        ColorDesc scd;
        Arc a;
        short sco;

        for (short co = 0; co < colorDescs.size(); co++) {
            cd = colorDescs.get(co);
            if (cd == null) {
                continue; // not in use at all, so can't have a subcolor.
            }

            sco = cd.sub;

            if (sco == Constants.NOSUB) {
            /* has no subcolor, no further action */
            } else if (sco == co) {
            /* is subcolor, let parent deal with it */
            } else if (cd.getNChars() == 0) {
            /* parent empty, its arcs change color to subcolor */
                cd.sub = Constants.NOSUB;
                scd = colorDescs.get(sco);

                assert scd.getNChars() > 0;
                assert scd.sub == sco;

                scd.sub = Constants.NOSUB;
                while ((a = cd.arcs) != null) {
                    assert a.co == co;
                    cd.arcs = a.colorchain;
                    a.setColor(sco);
                    a.colorchain = scd.arcs;
                    scd.arcs = a;
                }
                freecolor(co);
            } else {
                /* parent's arcs must gain parallel subcolor arcs */
                cd.sub = Constants.NOSUB;
                scd = colorDescs.get(sco);

                assert scd.getNChars() > 0;
                assert scd.sub == sco;

                scd.sub = Constants.NOSUB;

                for (a = cd.arcs; a != null; a = a.colorchain) {
                    assert a.co == co;
                    nfa.newarc(a.type, sco, a.from, a.to);
                }
            }
        }
    }
void okcolors ( Nfa nfa ) { ColorDesc cd ; ColorDesc scd ; Arc a ; short sco ; for ( short co = 0 ; co < colorDescs . size ( ) ; co ++ ) { cd = colorDescs . get ( co ) ; if ( cd == null ) { continue ; // not in use at all, so can't have a subcolor. } sco = cd . sub ; if ( sco == Constants . NOSUB ) { /* has no subcolor, no further action */ } else if ( sco == co ) { /* is subcolor, let parent deal with it */ } else if ( cd . getNChars ( ) == 0 ) { /* parent empty, its arcs change color to subcolor */ cd . sub = Constants . NOSUB ; scd = colorDescs . get ( sco ) ; assert scd . getNChars ( ) > 0 ; assert scd . sub == sco ; scd . sub = Constants . NOSUB ; while ( ( a = cd . arcs ) != null ) { assert a . co == co ; cd . arcs = a . colorchain ; a . setColor ( sco ) ; a . colorchain = scd . arcs ; scd . arcs = a ; } freecolor ( co ) ; } else { /* parent's arcs must gain parallel subcolor arcs */ cd . sub = Constants . NOSUB ; scd = colorDescs . get ( sco ) ; assert scd . getNChars ( ) > 0 ; assert scd . sub == sco ; scd . sub = Constants . NOSUB ; for ( a = cd . arcs ; a != null ; a = a . colorchain ) { assert a . co == co ; nfa . newarc ( a . type , sco , a . from , a . to ) ; } } } }
okcolors - promote subcolors to full colors
okcolors - promote subcolors to full colors