Package org.erlide.ui.editors.erl.scanner

Source Code of org.erlide.ui.editors.erl.scanner.ErlCodeScanner

/*******************************************************************************
* Copyright (c) 2004 Eric Merritt and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Eric Merritt
*     Vlad Dumitrescu
*******************************************************************************/
package org.erlide.ui.editors.erl.scanner;

import java.util.List;

import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.rules.IToken;
import org.erlide.engine.ErlangEngine;
import org.erlide.engine.services.parsing.ErlToken;
import org.erlide.engine.services.parsing.ScannerException;
import org.erlide.ui.util.IColorManager;
import org.erlide.util.ErlLogger;

public class ErlCodeScanner extends ErlTokenScanner {

    protected List<ErlToken> fTokens;
    protected int fCrtToken;
    private int rangeLength;
    private int rangeOffset;

    public ErlCodeScanner(final IColorManager colorManager) {
        super(colorManager);
    }

    @Override
    public void setRange(final IDocument document, final int offset, final int length) {
        if (document == null) {
            return;
        }
        try {
            rangeOffset = offset;
            rangeLength = length;

            // ErlLogger.debug("setRange %s %d:%d (%d:%d)", document,
            // rangeOffset, rangeLength, offset, length);
            final String str = document.get(rangeOffset, rangeLength);
            // ErlLogger.debug("setRange == %s", str);
            handleText(str);
        } catch (final BadLocationException e) {
            ErlLogger.warn(e);
        }

    }

    private void handleText(final String text) {
        if (text == null) {
            return;
        }
        try {
            fCrtToken = -1;
            fTokens = ErlangEngine.getInstance().getSimpleScannerService()
                    .lightScanString(text, rangeOffset);
        } catch (final ScannerException e) {
            // ErlLogger.error(e);
        }
    }

    @Override
    public IToken nextToken() {
        final ErlToken nextErlToken = nextErlToken();
        return convert(nextErlToken);
    }

    @Override
    public int getTokenOffset() {
        if (fTokens == null) {
            return 0;
        }

        if (fCrtToken >= fTokens.size()) {
            return 0;
        }

        final ErlToken tk = fTokens.get(fCrtToken);
        return tk.getOffset();
    }

    @Override
    public int getTokenLength() {
        if (fTokens == null) {
            return 0;
        }

        if (fCrtToken >= fTokens.size()) {
            return 0;
        }

        final ErlToken tk = fTokens.get(fCrtToken);
        return tk.getLength();
    }

    public ErlToken nextErlToken() {
        if (fTokens == null) {
            return ErlToken.EOF;
        }

        fCrtToken++;
        if (fCrtToken >= fTokens.size()) {
            return ErlToken.EOF;
        }

        final ErlToken tk = fTokens.get(fCrtToken);
        if (tk.getOffset() >= rangeOffset + rangeLength) {
            return ErlToken.EOF;
        }
        return fTokens.get(fCrtToken);
    }
}
TOP

Related Classes of org.erlide.ui.editors.erl.scanner.ErlCodeScanner

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.