/*
 * @(#)IndicRearrangementProcessor.cpp	1.7 00/03/15
 *
 * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
 *
 */

#include "LETypes.h"
#include "MorphTables.h"
#include "StateTables.h"
#include "MorphStateTables.h"
#include "SubtableProcessor.h"
#include "StateTableProcessor.h"
#include "IndicRearrangementProcessor.h"
#include "LESwaps.h"

U_NAMESPACE_BEGIN

const char IndicRearrangementProcessor::fgClassID=0;

IndicRearrangementProcessor::IndicRearrangementProcessor(const MorphSubtableHeader *morphSubtableHeader)
  : StateTableProcessor(morphSubtableHeader)
{
    indicRearrangementSubtableHeader = (const IndicRearrangementSubtableHeader *) morphSubtableHeader;
    entryTable = (const IndicRearrangementStateEntry *) ((char *) &stateTableHeader->stHeader + entryTableOffset);
}

IndicRearrangementProcessor::~IndicRearrangementProcessor()
{
}

void IndicRearrangementProcessor::beginStateTable()
{
    firstGlyph = 0;
    lastGlyph = 0;
}

ByteOffset IndicRearrangementProcessor::processStateEntry(LEGlyphID *glyphs, le_int32 *charIndices, le_int32 &currGlyph,
        le_int32 /*glyphCount*/, EntryTableIndex index)
{
    const IndicRearrangementStateEntry *entry = &entryTable[index];
    ByteOffset newState = SWAPW(entry->newStateOffset);
    IndicRearrangementFlags flags = (IndicRearrangementFlags) SWAPW(entry->flags);

    if (flags & irfMarkFirst) {
        firstGlyph = currGlyph;
    }

    if (flags & irfMarkLast) {
        lastGlyph = currGlyph;
    }

    doRearrangementAction(glyphs, charIndices, (IndicRearrangementVerb) (flags & irfVerbMask));

    if (!(flags & irfDontAdvance)) {
        // XXX: Should handle reverse too...
        currGlyph += 1;
    }

    return newState;
}

void IndicRearrangementProcessor::endStateTable()
{
}

void IndicRearrangementProcessor::doRearrangementAction(LEGlyphID *glyphs, le_int32 *charIndices, IndicRearrangementVerb verb) const
{
    LEGlyphID a, b, c, d;
    le_int32 ia, ib, ic, id, x;

    switch(verb)
    {
    case irvNoAction:
        break;

    case irvxA:
        a = glyphs[firstGlyph];
        ia = charIndices[firstGlyph];
        x = firstGlyph + 1;

        while (x <= lastGlyph) {
            glyphs[x - 1] = glyphs[x];
            charIndices[x - 1] = charIndices[x];
            x += 1;
        }

        glyphs[lastGlyph] = a;
        charIndices[lastGlyph] = ia;
        break;

    case irvDx:
        d = glyphs[lastGlyph];
        id = charIndices[lastGlyph];
        x = lastGlyph - 1;

        while (x >= firstGlyph) {
            glyphs[x + 1] = glyphs[x];
            charIndices[x + 1] = charIndices[x];
            x -= 1;
        }

        glyphs[firstGlyph] = d;
        charIndices[firstGlyph] = id;
        break;

    case irvDxA:
        a = glyphs[firstGlyph];
        ia = charIndices[firstGlyph];

        glyphs[firstGlyph] = glyphs[lastGlyph];
        glyphs[lastGlyph] = a;

        charIndices[firstGlyph] = charIndices[lastGlyph];
        charIndices[lastGlyph] = ia;
        break;
        
    case irvxAB:
        a = glyphs[firstGlyph];
        b = glyphs[firstGlyph + 1];
        ia = charIndices[firstGlyph];
        ib = charIndices[firstGlyph + 1];
        x = firstGlyph + 2;

        while (x <= lastGlyph) {
            glyphs[x - 2] = glyphs[x];
            charIndices[x - 2] = charIndices[x];
            x += 1;
        }

        glyphs[lastGlyph - 1] = a;
        glyphs[lastGlyph] = b;

        charIndices[lastGlyph - 1] = ia;
        charIndices[lastGlyph] = ib;
        break;

    case irvxBA:
        a = glyphs[firstGlyph];
        b = glyphs[firstGlyph + 1];
        ia = charIndices[firstGlyph];
        ib = charIndices[firstGlyph + 1];
        x = firstGlyph + 2;

        while (x <= lastGlyph) {
            glyphs[x - 2] = glyphs[x];
            charIndices[x - 2] = charIndices[x];
            x += 1;
        }

        glyphs[lastGlyph - 1] = b;
        glyphs[lastGlyph] = a;

        charIndices[lastGlyph - 1] = ib;
        charIndices[lastGlyph] = ia;
        break;

    case irvCDx:
        c = glyphs[lastGlyph - 1];
        d = glyphs[lastGlyph];
        ic = charIndices[lastGlyph - 1];
        id = charIndices[lastGlyph];
        x = lastGlyph - 2;

        while (x >= firstGlyph) {
            glyphs[x + 2] = glyphs[x];
            charIndices[x + 2] = charIndices[x];
            x -= 1;
        }
        
        glyphs[firstGlyph] = c;
        glyphs[firstGlyph + 1] = d;

        charIndices[firstGlyph] = ic;
        charIndices[firstGlyph + 1] = id;
        break; 

    case irvDCx:
        c = glyphs[lastGlyph - 1];
        d = glyphs[lastGlyph];
        ic = charIndices[lastGlyph - 1];
        id = charIndices[lastGlyph];
        x = lastGlyph - 2;

        while (x >= firstGlyph) {
            glyphs[x + 2] = glyphs[x];
            charIndices[x + 2] = charIndices[x];
            x -= 1;
        }
        
        glyphs[firstGlyph] = d;
        glyphs[firstGlyph + 1] = c;

        charIndices[firstGlyph] = id;
        charIndices[firstGlyph + 1] = ic;
        break; 

    case irvCDxA:
        a = glyphs[firstGlyph];
        c = glyphs[lastGlyph - 1];
        d = glyphs[lastGlyph];
        ia = charIndices[firstGlyph];
        ic = charIndices[lastGlyph - 1];
        id = charIndices[lastGlyph];
        x = lastGlyph - 2;

        while (x > firstGlyph) {
            glyphs[x + 1] = glyphs[x];
            charIndices[x + 1] = charIndices[x];
            x -= 1;
        }
        
        glyphs[firstGlyph] = c;
        glyphs[firstGlyph + 1] = d;
        glyphs[lastGlyph] = a;

        charIndices[firstGlyph] = ic;
        charIndices[firstGlyph + 1] = id;
        charIndices[lastGlyph] = ia;
        break; 

    case irvDCxA:
        a = glyphs[firstGlyph];
        c = glyphs[lastGlyph - 1];
        d = glyphs[lastGlyph];
        ia = charIndices[firstGlyph];
        ic = charIndices[lastGlyph - 1];
        id = charIndices[lastGlyph];
        x = lastGlyph - 2;

        while (x > firstGlyph) {
            glyphs[x + 1] = glyphs[x];
            charIndices[x + 1] = charIndices[x];
            x -= 1;
        }
        
        glyphs[firstGlyph] = d;
        glyphs[firstGlyph + 1] = c;
        glyphs[lastGlyph] = a;

        charIndices[firstGlyph] = id;
        charIndices[firstGlyph + 1] = ic;
        charIndices[lastGlyph] = ia;
        break; 

    case irvDxAB:
        a = glyphs[firstGlyph];
        b = glyphs[firstGlyph + 1];
        d = glyphs[lastGlyph];
        ia = charIndices[firstGlyph];
        ib = charIndices[firstGlyph + 1];
        id = charIndices[lastGlyph];
        x = firstGlyph + 2;

        while (x < lastGlyph) {
            glyphs[x - 2] = glyphs[x];
            charIndices[x - 2] = charIndices[x];
            x += 1;
        }

        glyphs[firstGlyph] = d;
        glyphs[lastGlyph - 1] = a;
        glyphs[lastGlyph] = b;

        charIndices[firstGlyph] = id;
        charIndices[lastGlyph - 1] = ia;
        charIndices[lastGlyph] = ib;
        break;

    case irvDxBA:
        a = glyphs[firstGlyph];
        b = glyphs[firstGlyph + 1];
        d = glyphs[lastGlyph];
        ia = charIndices[firstGlyph];
        ib = charIndices[firstGlyph + 1];
        id = charIndices[lastGlyph];
        x = firstGlyph + 2;

        while (x < lastGlyph) {
            glyphs[x - 2] = glyphs[x];
            charIndices[x - 2] = charIndices[x];
            x += 1;
        }

        glyphs[firstGlyph] = d;
        glyphs[lastGlyph - 1] = b;
        glyphs[lastGlyph] = a;

        charIndices[firstGlyph] = id;
        charIndices[lastGlyph - 1] = ib;
        charIndices[lastGlyph] = ia;
        break;

    case irvCDxAB:
        a = glyphs[firstGlyph];
        b = glyphs[firstGlyph + 1];

        glyphs[firstGlyph] = glyphs[lastGlyph - 1];
        glyphs[firstGlyph + 1] = glyphs[lastGlyph];

        glyphs[lastGlyph - 1] = a;
        glyphs[lastGlyph] = b;

        ia = charIndices[firstGlyph];
        ib = charIndices[firstGlyph + 1];

        charIndices[firstGlyph] = charIndices[lastGlyph - 1];
        charIndices[firstGlyph + 1] = charIndices[lastGlyph];

        charIndices[lastGlyph - 1] = ia;
        charIndices[lastGlyph] = ib;
        break;

    case irvCDxBA:
        a = glyphs[firstGlyph];
        b = glyphs[firstGlyph + 1];

        glyphs[firstGlyph] = glyphs[lastGlyph - 1];
        glyphs[firstGlyph + 1] = glyphs[lastGlyph];

        glyphs[lastGlyph - 1] = b;
        glyphs[lastGlyph] = a;

        ia = charIndices[firstGlyph];
        ib = charIndices[firstGlyph + 1];

        charIndices[firstGlyph] = charIndices[lastGlyph - 1];
        charIndices[firstGlyph + 1] = charIndices[lastGlyph];

        charIndices[lastGlyph - 1] = ib;
        charIndices[lastGlyph] = ia;
        break;

    case irvDCxAB:
        a = glyphs[firstGlyph];
        b = glyphs[firstGlyph + 1];

        glyphs[firstGlyph] = glyphs[lastGlyph];
        glyphs[firstGlyph + 1] = glyphs[lastGlyph - 1];

        glyphs[lastGlyph - 1] = a;
        glyphs[lastGlyph] = b;

        ia = charIndices[firstGlyph];
        ib = charIndices[firstGlyph + 1];

        charIndices[firstGlyph] = charIndices[lastGlyph];
        charIndices[firstGlyph + 1] = charIndices[lastGlyph - 1];

        charIndices[lastGlyph - 1] = ia;
        charIndices[lastGlyph] = ib;
        break;

    case irvDCxBA:
        a = glyphs[firstGlyph];
        b = glyphs[firstGlyph + 1];

        glyphs[firstGlyph] = glyphs[lastGlyph];
        glyphs[firstGlyph + 1] = glyphs[lastGlyph - 1];

        glyphs[lastGlyph - 1] = b;
        glyphs[lastGlyph] = a;

        ia = charIndices[firstGlyph];
        ib = charIndices[firstGlyph + 1];

        charIndices[firstGlyph] = charIndices[lastGlyph];
        charIndices[firstGlyph + 1] = charIndices[lastGlyph - 1];

        charIndices[lastGlyph - 1] = ib;
        charIndices[lastGlyph] = ia;
        break;
    
    default:
        break;
    }
}

U_NAMESPACE_END
